@inflexa-ai/harness 0.44.0 → 0.45.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/dist/agents/conversation-agent.d.ts +10 -0
  2. package/dist/agents/conversation-agent.js +19 -1
  3. package/dist/agents/sandbox/shared.d.ts +23 -2
  4. package/dist/agents/sandbox/shared.js +51 -18
  5. package/dist/agents/sandbox/translational-safety-agent.js +26 -0
  6. package/dist/agents/sandbox/types.d.ts +24 -1
  7. package/dist/agents/sandbox-catalog.d.ts +14 -0
  8. package/dist/agents/sandbox-catalog.js +19 -0
  9. package/dist/app/approve-plan.d.ts +51 -0
  10. package/dist/app/approve-plan.js +84 -0
  11. package/dist/app/chat-turn.js +6 -3
  12. package/dist/app/data-profile-view.d.ts +1 -1
  13. package/dist/app/run-activity.js +4 -6
  14. package/dist/config/environment-stores.d.ts +4 -2
  15. package/dist/contracts/chat-events.d.ts +14 -2
  16. package/dist/contracts/chat-events.js +1 -1
  17. package/dist/contracts/chat-frame.d.ts +7 -0
  18. package/dist/contracts/chat-frame.js +24 -6
  19. package/dist/contracts/chat-parts.d.ts +73 -2
  20. package/dist/contracts/chat-parts.js +3 -1
  21. package/dist/contracts/index.d.ts +4 -2
  22. package/dist/contracts/index.js +1 -0
  23. package/dist/contracts/part-registry.js +3 -0
  24. package/dist/contracts/schemas/chat-events.d.ts +38 -0
  25. package/dist/contracts/schemas/chat-events.js +8 -0
  26. package/dist/contracts/schemas/chat-parts.d.ts +239 -15
  27. package/dist/contracts/schemas/chat-parts.js +80 -12
  28. package/dist/contracts/schemas/index.d.ts +2 -2
  29. package/dist/contracts/schemas/index.js +2 -2
  30. package/dist/contracts/subagent-activity.d.ts +12 -0
  31. package/dist/contracts/subagent-activity.js +76 -0
  32. package/dist/execution/artifact-metadata.js +1 -3
  33. package/dist/execution/dbos-workflow-purger.d.ts +2 -0
  34. package/dist/execution/dbos-workflow-purger.js +21 -14
  35. package/dist/execution/run-canceler.d.ts +33 -11
  36. package/dist/execution/run-canceler.js +130 -28
  37. package/dist/execution/run-end-record.d.ts +30 -0
  38. package/dist/execution/run-end-record.js +27 -0
  39. package/dist/execution/run-event-parts.d.ts +6 -5
  40. package/dist/execution/run-event-parts.js +6 -5
  41. package/dist/execution/run-event-stream.d.ts +18 -6
  42. package/dist/execution/run-event-stream.js +67 -17
  43. package/dist/execution/run-synthesis.d.ts +21 -0
  44. package/dist/execution/run-synthesis.js +77 -3
  45. package/dist/index.d.ts +28 -10
  46. package/dist/index.js +26 -2
  47. package/dist/lib/hooks.d.ts +1 -1
  48. package/dist/lib/metrics.d.ts +2 -2
  49. package/dist/loop/call-guard.d.ts +50 -0
  50. package/dist/loop/call-guard.js +90 -0
  51. package/dist/loop/compaction.d.ts +5 -0
  52. package/dist/loop/compaction.js +17 -0
  53. package/dist/loop/run-agent.d.ts +9 -0
  54. package/dist/loop/run-agent.js +16 -1
  55. package/dist/loop/run-to-terminal.js +4 -1
  56. package/dist/loop/types.d.ts +8 -0
  57. package/dist/memory/card-builders.d.ts +11 -0
  58. package/dist/memory/card-builders.js +35 -21
  59. package/dist/memory/conversation-display-recorder.d.ts +2 -2
  60. package/dist/memory/conversation-display-recorder.js +38 -4
  61. package/dist/memory/conversation-display-storage.d.ts +9 -2
  62. package/dist/memory/conversation-display-storage.js +18 -3
  63. package/dist/memory/thread-history.d.ts +42 -8
  64. package/dist/memory/thread-history.js +164 -45
  65. package/dist/memory/thread-store.d.ts +13 -0
  66. package/dist/memory/thread-store.js +15 -1
  67. package/dist/prompts/briefing.d.ts +57 -3
  68. package/dist/prompts/briefing.js +129 -2
  69. package/dist/prompts/conversation.d.ts +1 -1
  70. package/dist/prompts/conversation.js +3 -1
  71. package/dist/prompts/planner.js +13 -2
  72. package/dist/provenance/seam.d.ts +39 -20
  73. package/dist/provenance/seam.js +7 -5
  74. package/dist/providers/ai-sdk.js +93 -11
  75. package/dist/providers/types.d.ts +6 -0
  76. package/dist/reference-data/catalog.js +141 -2
  77. package/dist/report-model/authoring-grammar.d.ts +26 -26
  78. package/dist/report-model/pin-snapshot.d.ts +1 -1
  79. package/dist/report-model/pin-snapshot.js +2 -50
  80. package/dist/runtime/assemble.d.ts +8 -1
  81. package/dist/runtime/assemble.js +11 -0
  82. package/dist/runtime/boot.d.ts +3 -0
  83. package/dist/runtime/boot.js +10 -1
  84. package/dist/sandbox/image-packages.d.ts +26 -4
  85. package/dist/sandbox/image-packages.js +18 -4
  86. package/dist/sandbox/sandbox-step-translate.d.ts +23 -0
  87. package/dist/sandbox/sandbox-step-translate.js +24 -0
  88. package/dist/schemas/artifact-manifest.d.ts +1 -1
  89. package/dist/schemas/artifact-manifest.js +11 -9
  90. package/dist/schemas/data-profile-schemas.d.ts +12 -12
  91. package/dist/schemas/plan-schemas.d.ts +75 -21
  92. package/dist/schemas/plan-schemas.js +1 -1
  93. package/dist/schemas/run-synthesis.d.ts +2 -2
  94. package/dist/schemas/workflow-state.d.ts +113 -0
  95. package/dist/schemas/workflow-state.js +54 -0
  96. package/dist/state/analyses-metrics.d.ts +79 -7
  97. package/dist/state/analyses-metrics.js +141 -6
  98. package/dist/state/artifacts.d.ts +66 -3
  99. package/dist/state/artifacts.js +85 -7
  100. package/dist/state/data-profile.d.ts +4 -2
  101. package/dist/state/data-profile.js +7 -5
  102. package/dist/state/index.d.ts +9 -8
  103. package/dist/state/index.js +5 -5
  104. package/dist/state/migrations/20261012120000_index_the_runs_by_start.d.ts +8 -0
  105. package/dist/state/migrations/20261012120000_index_the_runs_by_start.js +12 -0
  106. package/dist/state/migrations/20261013120000_index_the_ended_runs_and_the_recent_threads.d.ts +8 -0
  107. package/dist/state/migrations/20261013120000_index_the_ended_runs_and_the_recent_threads.js +13 -0
  108. package/dist/state/migrations/20261013180000_narrow_the_active_run_index.d.ts +8 -0
  109. package/dist/state/migrations/20261013180000_narrow_the_active_run_index.js +13 -0
  110. package/dist/state/migrations/20261014120000_index_the_plans_by_parent_and_the_runs_by_plan.d.ts +8 -0
  111. package/dist/state/migrations/20261014120000_index_the_plans_by_parent_and_the_runs_by_plan.js +13 -0
  112. package/dist/state/migrations/index.js +8 -0
  113. package/dist/state/plans.d.ts +21 -0
  114. package/dist/state/plans.js +25 -0
  115. package/dist/state/runs.d.ts +79 -14
  116. package/dist/state/runs.js +150 -33
  117. package/dist/state/schema.d.ts +2 -0
  118. package/dist/state/step-executions.d.ts +9 -0
  119. package/dist/state/step-executions.js +22 -0
  120. package/dist/tasks/data-profile-activity.d.ts +7 -1
  121. package/dist/tasks/data-profile-activity.js +18 -9
  122. package/dist/tasks/data-profile.d.ts +15 -1
  123. package/dist/tasks/data-profile.js +16 -11
  124. package/dist/tools/ad-hoc-router.d.ts +2 -0
  125. package/dist/tools/ad-hoc-router.js +18 -2
  126. package/dist/tools/approval/gateway.js +28 -5
  127. package/dist/tools/capability-data.d.ts +36 -0
  128. package/dist/tools/capability-data.js +73 -0
  129. package/dist/tools/display/show-user.d.ts +1 -1
  130. package/dist/tools/execute-analysis.d.ts +80 -1
  131. package/dist/tools/execute-analysis.js +352 -110
  132. package/dist/tools/knowledge/check.d.ts +60 -0
  133. package/dist/tools/knowledge/check.js +92 -0
  134. package/dist/tools/knowledge/client.d.ts +382 -0
  135. package/dist/tools/knowledge/client.js +302 -0
  136. package/dist/tools/knowledge/environment.d.ts +78 -0
  137. package/dist/tools/knowledge/environment.js +105 -0
  138. package/dist/tools/knowledge/index.d.ts +49 -0
  139. package/dist/tools/knowledge/index.js +70 -0
  140. package/dist/tools/knowledge/local-slots.d.ts +62 -0
  141. package/dist/tools/knowledge/local-slots.js +177 -0
  142. package/dist/tools/knowledge/pin.d.ts +14 -0
  143. package/dist/tools/knowledge/pin.js +17 -0
  144. package/dist/tools/knowledge/recommend.d.ts +92 -0
  145. package/dist/tools/knowledge/recommend.js +98 -0
  146. package/dist/tools/knowledge/situation.d.ts +143 -0
  147. package/dist/tools/knowledge/situation.js +164 -0
  148. package/dist/tools/knowledge/skeleton.d.ts +69 -0
  149. package/dist/tools/knowledge/skeleton.js +202 -0
  150. package/dist/tools/knowledge/template.d.ts +137 -0
  151. package/dist/tools/knowledge/template.js +267 -0
  152. package/dist/tools/research/generate-plan.d.ts +23 -0
  153. package/dist/tools/research/generate-plan.js +203 -12
  154. package/dist/tools/research/guarded-address.d.ts +20 -0
  155. package/dist/tools/research/guarded-address.js +148 -0
  156. package/dist/tools/research/inspect-data-profile.d.ts +1 -1
  157. package/dist/tools/research/inspect-run.d.ts +1 -1
  158. package/dist/tools/research/inspect-run.js +7 -7
  159. package/dist/tools/research/searxng-engine.d.ts +40 -0
  160. package/dist/tools/research/searxng-engine.js +120 -0
  161. package/dist/tools/research/web-fetch.d.ts +124 -0
  162. package/dist/tools/research/web-fetch.js +627 -0
  163. package/dist/tools/research/web-search.d.ts +75 -0
  164. package/dist/tools/research/web-search.js +112 -0
  165. package/dist/tools/sandbox/list-available-packages.d.ts +7 -4
  166. package/dist/tools/sandbox/list-available-packages.js +12 -4
  167. package/dist/tools/sandbox/list-available-refs.d.ts +21 -0
  168. package/dist/tools/sandbox/list-available-refs.js +60 -3
  169. package/dist/tools/sandbox/report-blocker.js +5 -1
  170. package/dist/tools/terminal-text.d.ts +11 -0
  171. package/dist/tools/terminal-text.js +19 -0
  172. package/dist/tools/workspace/decision-record.d.ts +81 -0
  173. package/dist/tools/workspace/decision-record.js +117 -0
  174. package/dist/tools/workspace/edit-file.d.ts +3 -1
  175. package/dist/tools/workspace/edit-file.js +20 -2
  176. package/dist/tools/workspace/execute-command.d.ts +17 -0
  177. package/dist/tools/workspace/execute-command.js +28 -1
  178. package/dist/tools/workspace/index.d.ts +1 -0
  179. package/dist/tools/workspace/index.js +1 -0
  180. package/dist/tools/workspace/mutator.d.ts +1 -1
  181. package/dist/workflows/execute-analysis.d.ts +62 -21
  182. package/dist/workflows/execute-analysis.js +307 -79
  183. package/dist/workflows/plan/graph.d.ts +16 -0
  184. package/dist/workflows/plan/graph.js +36 -0
  185. package/dist/workflows/sandbox-step.d.ts +12 -0
  186. package/dist/workflows/sandbox-step.js +14 -12
  187. package/package.json +5 -1
@@ -1,9 +1,11 @@
1
1
  /**
2
2
  * `image-packages.json` — the self-description of the sandbox image.
3
3
  *
4
- * The image bakes two package tracks that the content-addressed store cannot
5
- * hold: the conda tools at `/opt/conda` and the Node packages at `/opt/node`.
6
- * The image writes one record of them at `/opt/inflexa/image-packages.json`,
4
+ * The image bakes the package tracks that the content-addressed store cannot
5
+ * hold: the conda tools at `/opt/conda`, the Node packages at `/opt/node`,
6
+ * and the R packages that ship with the R runtime (the base and the
7
+ * recommended packages, which no farm lock lists). The image writes one
8
+ * record of them at `/opt/inflexa/image-packages.json`,
7
9
  * and the catalog build copies that record verbatim into the root of the
8
10
  * package store it packed beside it. Thus every reader of a store learns the
9
11
  * image inventory from the store alone — with no container engine, no
@@ -63,10 +65,21 @@ export const ImageNodePackageSchema = z
63
65
  version: z.string(),
64
66
  })
65
67
  .passthrough();
68
+ /** One R package that ships with the R runtime of the image: a base package or a recommended package. */
69
+ export const ImageRBasePackageSchema = z
70
+ .object({
71
+ name: z.string(),
72
+ version: z.string(),
73
+ priority: z.enum(["base", "recommended"]),
74
+ })
75
+ .passthrough();
66
76
  /**
67
77
  * `image-packages.json` at schema version 1. The keys `system_tools` and
68
78
  * `node` are the keys of the image manifest, thus one name means one track
69
- * across the build and the reader.
79
+ * across the build and the reader. `r_base` is the track of the R runtime
80
+ * itself: the packages R ships, which no manifest names and no farm lock
81
+ * lists. It is optional, because a record from before the field existed is
82
+ * still a valid record of its image.
70
83
  */
71
84
  export const ImagePackagesSchema = z
72
85
  .object({
@@ -75,6 +88,7 @@ export const ImagePackagesSchema = z
75
88
  runtimes: ImageRuntimesSchema,
76
89
  system_tools: z.array(ImageSystemToolSchema),
77
90
  node: z.array(ImageNodePackageSchema),
91
+ r_base: z.array(ImageRBasePackageSchema).optional(),
78
92
  })
79
93
  .passthrough();
80
94
  /**
@@ -5,6 +5,7 @@
5
5
  * extraction/fold, and the chat-data-part narrowing a workflow body composes
6
6
  * into its emitters.
7
7
  */
8
+ import type { ActivityEntryPart, StepActivityPart, StepPhase, SynthesisPhase, SynthesisProgressPart } from "../contracts/chat-parts.js";
8
9
  import type { ChatDataPart, EmitFn } from "../loop/types.js";
9
10
  import type { ToolDetailResolver } from "../tools/detail-resolver.js";
10
11
  /**
@@ -19,6 +20,28 @@ import type { ToolDetailResolver } from "../tools/detail-resolver.js";
19
20
  * producers construct it identically.
20
21
  */
21
22
  export declare function stepPartId(kind: string, runId: string, stepId: string): string;
23
+ /**
24
+ * The two parts of one activity emission: the reconciling `data-step-activity` that holds the current activity,
25
+ * and the `data-activity-entry` that keeps the emission in the run stream. Both carry the same phase, activity,
26
+ * and time. `seq` is the position of the emission in the body of its workflow, so each entry has its own id, and a
27
+ * recovered body counts the same emissions again and gives the same ids. Every producer mints the two parts here.
28
+ */
29
+ export declare function activityEmission(frame: {
30
+ readonly runId: string;
31
+ readonly stepId: string;
32
+ }, seq: number, phase: StepPhase, activity: string, at: string): {
33
+ readonly activity: StepActivityPart;
34
+ readonly entry: ActivityEntryPart;
35
+ };
36
+ /**
37
+ * The two parts of one synthesis progress report: the reconciling `data-synthesis-progress` that holds the current
38
+ * phase, and the `data-activity-entry` that keeps the report in the run stream under the synthesis step. `seq` is the
39
+ * position of the report in the synthesis, so each entry has its own id. The `extra` fields stay on the progress part.
40
+ */
41
+ export declare function synthesisEmission(runId: string, stepId: string, seq: number, phase: SynthesisPhase, activity: string, at: string, extra: Pick<SynthesisProgressPart, "delegationCount" | "reason" | "error">): {
42
+ readonly progress: SynthesisProgressPart;
43
+ readonly entry: ActivityEntryPart;
44
+ };
22
45
  /**
23
46
  * The live-activity phrase for one tool call: the tool's name, then its own
24
47
  * description of this call when it has one.
@@ -19,6 +19,30 @@
19
19
  export function stepPartId(kind, runId, stepId) {
20
20
  return `${kind}-${runId}-${stepId}`;
21
21
  }
22
+ /**
23
+ * The two parts of one activity emission: the reconciling `data-step-activity` that holds the current activity,
24
+ * and the `data-activity-entry` that keeps the emission in the run stream. Both carry the same phase, activity,
25
+ * and time. `seq` is the position of the emission in the body of its workflow, so each entry has its own id, and a
26
+ * recovered body counts the same emissions again and gives the same ids. Every producer mints the two parts here.
27
+ */
28
+ export function activityEmission(frame, seq, phase, activity, at) {
29
+ const { runId, stepId } = frame;
30
+ return {
31
+ activity: { type: "data-step-activity", id: stepPartId("step-activity", runId, stepId), runId, stepId, phase, activity, at },
32
+ entry: { type: "data-activity-entry", id: `${stepPartId("activity-entry", runId, stepId)}-${seq}`, runId, stepId, phase, activity, at },
33
+ };
34
+ }
35
+ /**
36
+ * The two parts of one synthesis progress report: the reconciling `data-synthesis-progress` that holds the current
37
+ * phase, and the `data-activity-entry` that keeps the report in the run stream under the synthesis step. `seq` is the
38
+ * position of the report in the synthesis, so each entry has its own id. The `extra` fields stay on the progress part.
39
+ */
40
+ export function synthesisEmission(runId, stepId, seq, phase, activity, at, extra) {
41
+ return {
42
+ progress: { type: "data-synthesis-progress", id: `synthesis-progress-${runId}`, runId, phase, activity, at, ...extra },
43
+ entry: { type: "data-activity-entry", id: `${stepPartId("activity-entry", runId, stepId)}-${seq}`, runId, stepId, phase, activity, at },
44
+ };
45
+ }
22
46
  /**
23
47
  * The live-activity phrase for one tool call: the tool's name, then its own
24
48
  * description of this call when it has one.
@@ -30,5 +30,5 @@ export declare const ArtifactManifestEntrySchema: z.ZodObject<{
30
30
  hash: z.ZodOptional<z.ZodString>;
31
31
  }, z.core.$strip>;
32
32
  export type ArtifactManifestEntry = z.infer<typeof ArtifactManifestEntrySchema>;
33
- /** Infer artifact type from a file path based on its parent subdirectory. */
33
+ /** Infer artifact type from a file path. A folder segment at the start of the path or after a `/` gives its type. */
34
34
  export declare function inferArtifactType(filePath: string): ArtifactType;
@@ -22,15 +22,17 @@ export const ArtifactManifestEntrySchema = z.object({
22
22
  /** SHA-256 content hash for integrity verification (e.g., sha256:abcdef...). */
23
23
  hash: z.string().optional(),
24
24
  });
25
- /** Infer artifact type from a file path based on its parent subdirectory. */
25
+ const FOLDER_TYPES = [
26
+ ["figures", "figure"],
27
+ ["scripts", "script"],
28
+ ["logs", "log"],
29
+ ["notebooks", "notebook"],
30
+ ];
31
+ /** Infer artifact type from a file path. A folder segment at the start of the path or after a `/` gives its type. */
26
32
  export function inferArtifactType(filePath) {
27
- if (filePath.includes("/figures/"))
28
- return "figure";
29
- if (filePath.includes("/scripts/"))
30
- return "script";
31
- if (filePath.includes("/logs/"))
32
- return "log";
33
- if (filePath.includes("/notebooks/"))
34
- return "notebook";
33
+ for (const [folder, type] of FOLDER_TYPES) {
34
+ if (filePath.startsWith(`${folder}/`) || filePath.includes(`/${folder}/`))
35
+ return type;
36
+ }
35
37
  return "output";
36
38
  }
@@ -462,6 +462,8 @@ export declare const DimensionSchema: z.ZodObject<{
462
462
  other: "other";
463
463
  sex: "sex";
464
464
  subject: "subject";
465
+ environment: "environment";
466
+ batch: "batch";
465
467
  sample: "sample";
466
468
  "organism-species": "organism-species";
467
469
  "model-system": "model-system";
@@ -474,14 +476,12 @@ export declare const DimensionSchema: z.ZodObject<{
474
476
  "genetic-perturbation": "genetic-perturbation";
475
477
  "age-group": "age-group";
476
478
  "developmental-stage": "developmental-stage";
477
- environment: "environment";
478
479
  "assay-modality": "assay-modality";
479
480
  "assay-target": "assay-target";
480
481
  "variant-origin": "variant-origin";
481
482
  "sample-pairing": "sample-pairing";
482
483
  "processing-level": "processing-level";
483
484
  "assay-version": "assay-version";
484
- batch: "batch";
485
485
  replicate: "replicate";
486
486
  "tool-variant": "tool-variant";
487
487
  "library-prep": "library-prep";
@@ -541,20 +541,20 @@ export type ProfileDimension = z.infer<typeof DimensionSchema>;
541
541
  export declare const ProbeReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
542
542
  probe: z.ZodEnum<{
543
543
  subject: "subject";
544
+ batch: "batch";
544
545
  sample: "sample";
545
546
  "cohort-arm": "cohort-arm";
546
547
  timepoint: "timepoint";
547
- batch: "batch";
548
548
  }>;
549
549
  outcome: z.ZodLiteral<"found">;
550
550
  dimension: z.ZodString;
551
551
  }, z.core.$strict>, z.ZodObject<{
552
552
  probe: z.ZodEnum<{
553
553
  subject: "subject";
554
+ batch: "batch";
554
555
  sample: "sample";
555
556
  "cohort-arm": "cohort-arm";
556
557
  timepoint: "timepoint";
557
- batch: "batch";
558
558
  }>;
559
559
  outcome: z.ZodLiteral<"not-found">;
560
560
  searched: z.ZodArray<z.ZodString>;
@@ -562,10 +562,10 @@ export declare const ProbeReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
562
562
  }, z.core.$strict>, z.ZodObject<{
563
563
  probe: z.ZodEnum<{
564
564
  subject: "subject";
565
+ batch: "batch";
565
566
  sample: "sample";
566
567
  "cohort-arm": "cohort-arm";
567
568
  timepoint: "timepoint";
568
- batch: "batch";
569
569
  }>;
570
570
  outcome: z.ZodLiteral<"found-but-constant">;
571
571
  value: z.ZodString;
@@ -573,10 +573,10 @@ export declare const ProbeReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
573
573
  }, z.core.$strict>, z.ZodObject<{
574
574
  probe: z.ZodEnum<{
575
575
  subject: "subject";
576
+ batch: "batch";
576
577
  sample: "sample";
577
578
  "cohort-arm": "cohort-arm";
578
579
  timepoint: "timepoint";
579
- batch: "batch";
580
580
  }>;
581
581
  outcome: z.ZodLiteral<"attested">;
582
582
  citation: z.ZodString;
@@ -873,6 +873,8 @@ export declare const ProfileSubmissionSchema: z.ZodObject<{
873
873
  other: "other";
874
874
  sex: "sex";
875
875
  subject: "subject";
876
+ environment: "environment";
877
+ batch: "batch";
876
878
  sample: "sample";
877
879
  "organism-species": "organism-species";
878
880
  "model-system": "model-system";
@@ -885,14 +887,12 @@ export declare const ProfileSubmissionSchema: z.ZodObject<{
885
887
  "genetic-perturbation": "genetic-perturbation";
886
888
  "age-group": "age-group";
887
889
  "developmental-stage": "developmental-stage";
888
- environment: "environment";
889
890
  "assay-modality": "assay-modality";
890
891
  "assay-target": "assay-target";
891
892
  "variant-origin": "variant-origin";
892
893
  "sample-pairing": "sample-pairing";
893
894
  "processing-level": "processing-level";
894
895
  "assay-version": "assay-version";
895
- batch: "batch";
896
896
  replicate: "replicate";
897
897
  "tool-variant": "tool-variant";
898
898
  "library-prep": "library-prep";
@@ -946,20 +946,20 @@ export declare const ProfileSubmissionSchema: z.ZodObject<{
946
946
  probes: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
947
947
  probe: z.ZodEnum<{
948
948
  subject: "subject";
949
+ batch: "batch";
949
950
  sample: "sample";
950
951
  "cohort-arm": "cohort-arm";
951
952
  timepoint: "timepoint";
952
- batch: "batch";
953
953
  }>;
954
954
  outcome: z.ZodLiteral<"found">;
955
955
  dimension: z.ZodString;
956
956
  }, z.core.$strict>, z.ZodObject<{
957
957
  probe: z.ZodEnum<{
958
958
  subject: "subject";
959
+ batch: "batch";
959
960
  sample: "sample";
960
961
  "cohort-arm": "cohort-arm";
961
962
  timepoint: "timepoint";
962
- batch: "batch";
963
963
  }>;
964
964
  outcome: z.ZodLiteral<"not-found">;
965
965
  searched: z.ZodArray<z.ZodString>;
@@ -967,10 +967,10 @@ export declare const ProfileSubmissionSchema: z.ZodObject<{
967
967
  }, z.core.$strict>, z.ZodObject<{
968
968
  probe: z.ZodEnum<{
969
969
  subject: "subject";
970
+ batch: "batch";
970
971
  sample: "sample";
971
972
  "cohort-arm": "cohort-arm";
972
973
  timepoint: "timepoint";
973
- batch: "batch";
974
974
  }>;
975
975
  outcome: z.ZodLiteral<"found-but-constant">;
976
976
  value: z.ZodString;
@@ -978,10 +978,10 @@ export declare const ProfileSubmissionSchema: z.ZodObject<{
978
978
  }, z.core.$strict>, z.ZodObject<{
979
979
  probe: z.ZodEnum<{
980
980
  subject: "subject";
981
+ batch: "batch";
981
982
  sample: "sample";
982
983
  "cohort-arm": "cohort-arm";
983
984
  timepoint: "timepoint";
984
- batch: "batch";
985
985
  }>;
986
986
  outcome: z.ZodLiteral<"attested">;
987
987
  citation: z.ZodString;
@@ -7,17 +7,12 @@ import type { AnalysisPlan } from "./workflow-state.js";
7
7
  /** Step schema for planner output — omits fields populated at execution time
8
8
  * and the hardcoded sandbox turn budget. */
9
9
  export declare const PlanStepSchema: z.ZodObject<{
10
- name: z.ZodString;
11
10
  context: z.ZodOptional<z.ZodString>;
11
+ name: z.ZodString;
12
12
  description: z.ZodOptional<z.ZodString>;
13
13
  id: z.ZodString;
14
- constraints: z.ZodOptional<z.ZodArray<z.ZodString>>;
15
- track: z.ZodString;
16
- step_type: z.ZodString;
17
- question: z.ZodString;
18
- acceptance_criteria: z.ZodArray<z.ZodString>;
19
14
  caveats: z.ZodOptional<z.ZodArray<z.ZodString>>;
20
- packages: z.ZodNonOptional<z.ZodOptional<z.ZodArray<z.ZodString>>>;
15
+ question: z.ZodString;
21
16
  depends_on: z.ZodArray<z.ZodString>;
22
17
  resources: z.ZodNonOptional<z.ZodOptional<z.ZodObject<{
23
18
  cpu: z.ZodNumber;
@@ -26,6 +21,29 @@ export declare const PlanStepSchema: z.ZodObject<{
26
21
  count: z.ZodNumber;
27
22
  }, z.core.$strip>>;
28
23
  }, z.core.$strip>>>;
24
+ grounding: z.ZodOptional<z.ZodObject<{
25
+ status: z.ZodEnum<{
26
+ grounded: "grounded";
27
+ ungrounded: "ungrounded";
28
+ flagged: "flagged";
29
+ }>;
30
+ snapshot: z.ZodString;
31
+ claims: z.ZodArray<z.ZodString>;
32
+ template: z.ZodOptional<z.ZodString>;
33
+ settings: z.ZodOptional<z.ZodArray<z.ZodObject<{
34
+ step: z.ZodString;
35
+ name: z.ZodString;
36
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString>]>;
37
+ source: z.ZodOptional<z.ZodString>;
38
+ }, z.core.$strip>>>;
39
+ reason: z.ZodString;
40
+ }, z.core.$strip>>;
41
+ track: z.ZodString;
42
+ step_type: z.ZodString;
43
+ acceptance_criteria: z.ZodArray<z.ZodString>;
44
+ constraints: z.ZodOptional<z.ZodArray<z.ZodString>>;
45
+ packages: z.ZodNonOptional<z.ZodOptional<z.ZodArray<z.ZodString>>>;
46
+ capability: z.ZodNonOptional<z.ZodOptional<z.ZodString>>;
29
47
  agent: z.ZodEnum<{
30
48
  [x: string]: string;
31
49
  }>;
@@ -40,17 +58,12 @@ export declare const PlannerPlanSchema: z.ZodObject<{
40
58
  omicsSubtype: z.ZodOptional<z.ZodString>;
41
59
  title: z.ZodString;
42
60
  steps: z.ZodArray<z.ZodObject<{
43
- name: z.ZodString;
44
61
  context: z.ZodOptional<z.ZodString>;
62
+ name: z.ZodString;
45
63
  description: z.ZodOptional<z.ZodString>;
46
64
  id: z.ZodString;
47
- constraints: z.ZodOptional<z.ZodArray<z.ZodString>>;
48
- track: z.ZodString;
49
- step_type: z.ZodString;
50
- question: z.ZodString;
51
- acceptance_criteria: z.ZodArray<z.ZodString>;
52
65
  caveats: z.ZodOptional<z.ZodArray<z.ZodString>>;
53
- packages: z.ZodNonOptional<z.ZodOptional<z.ZodArray<z.ZodString>>>;
66
+ question: z.ZodString;
54
67
  depends_on: z.ZodArray<z.ZodString>;
55
68
  resources: z.ZodNonOptional<z.ZodOptional<z.ZodObject<{
56
69
  cpu: z.ZodNumber;
@@ -59,6 +72,29 @@ export declare const PlannerPlanSchema: z.ZodObject<{
59
72
  count: z.ZodNumber;
60
73
  }, z.core.$strip>>;
61
74
  }, z.core.$strip>>>;
75
+ grounding: z.ZodOptional<z.ZodObject<{
76
+ status: z.ZodEnum<{
77
+ grounded: "grounded";
78
+ ungrounded: "ungrounded";
79
+ flagged: "flagged";
80
+ }>;
81
+ snapshot: z.ZodString;
82
+ claims: z.ZodArray<z.ZodString>;
83
+ template: z.ZodOptional<z.ZodString>;
84
+ settings: z.ZodOptional<z.ZodArray<z.ZodObject<{
85
+ step: z.ZodString;
86
+ name: z.ZodString;
87
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString>]>;
88
+ source: z.ZodOptional<z.ZodString>;
89
+ }, z.core.$strip>>>;
90
+ reason: z.ZodString;
91
+ }, z.core.$strip>>;
92
+ track: z.ZodString;
93
+ step_type: z.ZodString;
94
+ acceptance_criteria: z.ZodArray<z.ZodString>;
95
+ constraints: z.ZodOptional<z.ZodArray<z.ZodString>>;
96
+ packages: z.ZodNonOptional<z.ZodOptional<z.ZodArray<z.ZodString>>>;
97
+ capability: z.ZodNonOptional<z.ZodOptional<z.ZodString>>;
62
98
  agent: z.ZodEnum<{
63
99
  [x: string]: string;
64
100
  }>;
@@ -82,17 +118,12 @@ export declare const PlanningAgentOutputSchema: z.ZodObject<{
82
118
  omicsSubtype: z.ZodOptional<z.ZodString>;
83
119
  title: z.ZodString;
84
120
  steps: z.ZodArray<z.ZodObject<{
85
- name: z.ZodString;
86
121
  context: z.ZodOptional<z.ZodString>;
122
+ name: z.ZodString;
87
123
  description: z.ZodOptional<z.ZodString>;
88
124
  id: z.ZodString;
89
- constraints: z.ZodOptional<z.ZodArray<z.ZodString>>;
90
- track: z.ZodString;
91
- step_type: z.ZodString;
92
- question: z.ZodString;
93
- acceptance_criteria: z.ZodArray<z.ZodString>;
94
125
  caveats: z.ZodOptional<z.ZodArray<z.ZodString>>;
95
- packages: z.ZodNonOptional<z.ZodOptional<z.ZodArray<z.ZodString>>>;
126
+ question: z.ZodString;
96
127
  depends_on: z.ZodArray<z.ZodString>;
97
128
  resources: z.ZodNonOptional<z.ZodOptional<z.ZodObject<{
98
129
  cpu: z.ZodNumber;
@@ -101,6 +132,29 @@ export declare const PlanningAgentOutputSchema: z.ZodObject<{
101
132
  count: z.ZodNumber;
102
133
  }, z.core.$strip>>;
103
134
  }, z.core.$strip>>>;
135
+ grounding: z.ZodOptional<z.ZodObject<{
136
+ status: z.ZodEnum<{
137
+ grounded: "grounded";
138
+ ungrounded: "ungrounded";
139
+ flagged: "flagged";
140
+ }>;
141
+ snapshot: z.ZodString;
142
+ claims: z.ZodArray<z.ZodString>;
143
+ template: z.ZodOptional<z.ZodString>;
144
+ settings: z.ZodOptional<z.ZodArray<z.ZodObject<{
145
+ step: z.ZodString;
146
+ name: z.ZodString;
147
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString>]>;
148
+ source: z.ZodOptional<z.ZodString>;
149
+ }, z.core.$strip>>>;
150
+ reason: z.ZodString;
151
+ }, z.core.$strip>>;
152
+ track: z.ZodString;
153
+ step_type: z.ZodString;
154
+ acceptance_criteria: z.ZodArray<z.ZodString>;
155
+ constraints: z.ZodOptional<z.ZodArray<z.ZodString>>;
156
+ packages: z.ZodNonOptional<z.ZodOptional<z.ZodArray<z.ZodString>>>;
157
+ capability: z.ZodNonOptional<z.ZodOptional<z.ZodString>>;
104
158
  agent: z.ZodEnum<{
105
159
  [x: string]: string;
106
160
  }>;
@@ -17,7 +17,7 @@ export const PlanStepSchema = AnalysisStepSchema.omit({
17
17
  error: true,
18
18
  maxSteps: true,
19
19
  })
20
- .required({ agent: true, resources: true, packages: true })
20
+ .required({ agent: true, resources: true, packages: true, capability: true })
21
21
  .extend({
22
22
  agent: z.enum(plannableAgentIds).describe("Sandbox agent ID, routed by the step's primary data object. Must be one of the available agents."),
23
23
  });
@@ -31,11 +31,11 @@ export declare const SynthesizedFindingSchema: z.ZodObject<{
31
31
  high: "high";
32
32
  }>;
33
33
  noveltyStatus: z.ZodEnum<{
34
- expected: "expected";
35
34
  novel: "novel";
36
35
  confirmed: "confirmed";
37
36
  partially_confirmed: "partially_confirmed";
38
37
  contradicted: "contradicted";
38
+ expected: "expected";
39
39
  }>;
40
40
  literatureInterpretation: z.ZodString;
41
41
  references: z.ZodArray<z.ZodObject<{
@@ -97,11 +97,11 @@ export declare const RunSynthesisSchema: z.ZodObject<{
97
97
  high: "high";
98
98
  }>;
99
99
  noveltyStatus: z.ZodEnum<{
100
- expected: "expected";
101
100
  novel: "novel";
102
101
  confirmed: "confirmed";
103
102
  partially_confirmed: "partially_confirmed";
104
103
  contradicted: "contradicted";
104
+ expected: "expected";
105
105
  }>;
106
106
  literatureInterpretation: z.ZodString;
107
107
  references: z.ZodArray<z.ZodObject<{
@@ -5,6 +5,47 @@
5
5
  * and the completion schemas that validate LLM structured output.
6
6
  */
7
7
  import { z } from "zod";
8
+ /**
9
+ * One scientific setting of a grounded step: a parameter of the procedure
10
+ * that `knowledge_recommend` returned, with the procedure step it belongs to
11
+ * and the source of its value. The host binds the settings to the template
12
+ * of the step at dispatch, thus a template default never replaces a plan
13
+ * decision silently.
14
+ */
15
+ export declare const GroundingSettingSchema: z.ZodObject<{
16
+ step: z.ZodString;
17
+ name: z.ZodString;
18
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString>]>;
19
+ source: z.ZodOptional<z.ZodString>;
20
+ }, z.core.$strip>;
21
+ export type GroundingSetting = z.infer<typeof GroundingSettingSchema>;
22
+ /**
23
+ * The grounding of one method step: the claim identifiers and the snapshot
24
+ * digest that `knowledge_recommend` returned in this run, the template the
25
+ * step renders, the settings of the procedure, and a one-line reason.
26
+ * Optional on both step schemas, thus a stored plan and a plan made without
27
+ * the knowledge service load and validate as before. Phase 0 validates the
28
+ * shape only. An empty field is visible: the evaluation counts a method step
29
+ * without a value as ungrounded.
30
+ */
31
+ export declare const GroundingSchema: z.ZodObject<{
32
+ status: z.ZodEnum<{
33
+ grounded: "grounded";
34
+ ungrounded: "ungrounded";
35
+ flagged: "flagged";
36
+ }>;
37
+ snapshot: z.ZodString;
38
+ claims: z.ZodArray<z.ZodString>;
39
+ template: z.ZodOptional<z.ZodString>;
40
+ settings: z.ZodOptional<z.ZodArray<z.ZodObject<{
41
+ step: z.ZodString;
42
+ name: z.ZodString;
43
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString>]>;
44
+ source: z.ZodOptional<z.ZodString>;
45
+ }, z.core.$strip>>>;
46
+ reason: z.ZodString;
47
+ }, z.core.$strip>;
48
+ export type Grounding = z.infer<typeof GroundingSchema>;
8
49
  /**
9
50
  * A step of an analysis plan. `PlanStepSchema` (schemas/plan-schemas.ts) narrows
10
51
  * this into the planner's output contract and emits it as the `submit_plan`
@@ -37,7 +78,25 @@ export declare const AnalysisStepSchema: z.ZodObject<{
37
78
  count: z.ZodNumber;
38
79
  }, z.core.$strip>>;
39
80
  }, z.core.$strip>>;
81
+ grounding: z.ZodOptional<z.ZodObject<{
82
+ status: z.ZodEnum<{
83
+ grounded: "grounded";
84
+ ungrounded: "ungrounded";
85
+ flagged: "flagged";
86
+ }>;
87
+ snapshot: z.ZodString;
88
+ claims: z.ZodArray<z.ZodString>;
89
+ template: z.ZodOptional<z.ZodString>;
90
+ settings: z.ZodOptional<z.ZodArray<z.ZodObject<{
91
+ step: z.ZodString;
92
+ name: z.ZodString;
93
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString>]>;
94
+ source: z.ZodOptional<z.ZodString>;
95
+ }, z.core.$strip>>>;
96
+ reason: z.ZodString;
97
+ }, z.core.$strip>>;
40
98
  agent: z.ZodOptional<z.ZodString>;
99
+ capability: z.ZodOptional<z.ZodString>;
41
100
  timeout: z.ZodOptional<z.ZodNumber>;
42
101
  maxSteps: z.ZodNumber;
43
102
  description: z.ZodOptional<z.ZodString>;
@@ -74,7 +133,25 @@ export declare const AnalysisPlanSchema: z.ZodObject<{
74
133
  count: z.ZodNumber;
75
134
  }, z.core.$strip>>;
76
135
  }, z.core.$strip>>;
136
+ grounding: z.ZodOptional<z.ZodObject<{
137
+ status: z.ZodEnum<{
138
+ grounded: "grounded";
139
+ ungrounded: "ungrounded";
140
+ flagged: "flagged";
141
+ }>;
142
+ snapshot: z.ZodString;
143
+ claims: z.ZodArray<z.ZodString>;
144
+ template: z.ZodOptional<z.ZodString>;
145
+ settings: z.ZodOptional<z.ZodArray<z.ZodObject<{
146
+ step: z.ZodString;
147
+ name: z.ZodString;
148
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString>]>;
149
+ source: z.ZodOptional<z.ZodString>;
150
+ }, z.core.$strip>>>;
151
+ reason: z.ZodString;
152
+ }, z.core.$strip>>;
77
153
  agent: z.ZodOptional<z.ZodString>;
154
+ capability: z.ZodOptional<z.ZodString>;
78
155
  timeout: z.ZodOptional<z.ZodNumber>;
79
156
  maxSteps: z.ZodNumber;
80
157
  description: z.ZodOptional<z.ZodString>;
@@ -146,7 +223,25 @@ export declare const ContentBlockSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
146
223
  count: z.ZodNumber;
147
224
  }, z.core.$strip>>;
148
225
  }, z.core.$strip>>;
226
+ grounding: z.ZodOptional<z.ZodObject<{
227
+ status: z.ZodEnum<{
228
+ grounded: "grounded";
229
+ ungrounded: "ungrounded";
230
+ flagged: "flagged";
231
+ }>;
232
+ snapshot: z.ZodString;
233
+ claims: z.ZodArray<z.ZodString>;
234
+ template: z.ZodOptional<z.ZodString>;
235
+ settings: z.ZodOptional<z.ZodArray<z.ZodObject<{
236
+ step: z.ZodString;
237
+ name: z.ZodString;
238
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString>]>;
239
+ source: z.ZodOptional<z.ZodString>;
240
+ }, z.core.$strip>>>;
241
+ reason: z.ZodString;
242
+ }, z.core.$strip>>;
149
243
  agent: z.ZodOptional<z.ZodString>;
244
+ capability: z.ZodOptional<z.ZodString>;
150
245
  timeout: z.ZodOptional<z.ZodNumber>;
151
246
  maxSteps: z.ZodNumber;
152
247
  description: z.ZodOptional<z.ZodString>;
@@ -266,7 +361,25 @@ export declare const SuspensionPayloadSchema: z.ZodObject<{
266
361
  count: z.ZodNumber;
267
362
  }, z.core.$strip>>;
268
363
  }, z.core.$strip>>;
364
+ grounding: z.ZodOptional<z.ZodObject<{
365
+ status: z.ZodEnum<{
366
+ grounded: "grounded";
367
+ ungrounded: "ungrounded";
368
+ flagged: "flagged";
369
+ }>;
370
+ snapshot: z.ZodString;
371
+ claims: z.ZodArray<z.ZodString>;
372
+ template: z.ZodOptional<z.ZodString>;
373
+ settings: z.ZodOptional<z.ZodArray<z.ZodObject<{
374
+ step: z.ZodString;
375
+ name: z.ZodString;
376
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString>]>;
377
+ source: z.ZodOptional<z.ZodString>;
378
+ }, z.core.$strip>>>;
379
+ reason: z.ZodString;
380
+ }, z.core.$strip>>;
269
381
  agent: z.ZodOptional<z.ZodString>;
382
+ capability: z.ZodOptional<z.ZodString>;
270
383
  timeout: z.ZodOptional<z.ZodNumber>;
271
384
  maxSteps: z.ZodNumber;
272
385
  description: z.ZodOptional<z.ZodString>;