@inflexa-ai/harness 0.45.0 → 0.46.0
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.
- package/README.md +6 -3
- package/dist/agents/conversation-agent.d.ts +19 -3
- package/dist/agents/conversation-agent.js +49 -30
- package/dist/agents/report-session-agent.d.ts +15 -15
- package/dist/agents/report-session-agent.js +23 -15
- package/dist/agents/sandbox/index.d.ts +1 -1
- package/dist/agents/sandbox/index.js +1 -1
- package/dist/agents/sandbox/shared.d.ts +35 -16
- package/dist/agents/sandbox/shared.js +63 -24
- package/dist/agents/sandbox/translational-safety-agent.js +26 -0
- package/dist/agents/sandbox/types.d.ts +26 -3
- package/dist/agents/sandbox/validate-skills.d.ts +2 -2
- package/dist/agents/sandbox/validate-skills.js +3 -1
- package/dist/agents/sandbox-catalog.d.ts +16 -2
- package/dist/agents/sandbox-catalog.js +22 -3
- package/dist/agents/system-prompt.d.ts +2 -2
- package/dist/app/approve-plan.d.ts +5 -2
- package/dist/app/approve-plan.js +1 -1
- package/dist/app/chat-turn-workflow.d.ts +114 -0
- package/dist/app/chat-turn-workflow.js +307 -0
- package/dist/app/chat-turn.d.ts +85 -57
- package/dist/app/chat-turn.js +125 -99
- package/dist/app/data-profile-orientation.js +10 -8
- package/dist/app/data-profile-view.d.ts +4 -4
- package/dist/app/data-profile-view.js +9 -8
- package/dist/app/in-process-turn.d.ts +42 -0
- package/dist/app/in-process-turn.js +139 -0
- package/dist/app/message-assembly.d.ts +10 -4
- package/dist/app/message-assembly.js +13 -8
- package/dist/app/report-session-runtime.d.ts +4 -4
- package/dist/app/report-session-runtime.js +36 -21
- package/dist/app/spawn-report-session.d.ts +33 -28
- package/dist/app/spawn-report-session.js +25 -40
- package/dist/app/synthesize-run.d.ts +22 -16
- package/dist/app/synthesize-run.js +41 -35
- package/dist/app/work.d.ts +96 -0
- package/dist/app/work.js +147 -0
- package/dist/auth/local-auth-context.d.ts +1 -3
- package/dist/auth/local-auth-context.js +1 -3
- package/dist/auth/local-run-authorizer.d.ts +1 -1
- package/dist/auth/local-run-authorizer.js +5 -3
- package/dist/auth/types.d.ts +26 -26
- package/dist/billing/cached-resolver.d.ts +4 -4
- package/dist/billing/run-charge.d.ts +5 -8
- package/dist/billing/run-charge.js +2 -2
- package/dist/billing/usage-recorder.d.ts +9 -9
- package/dist/citations/aggregate.js +1 -1
- package/dist/citations/clients/arxiv.d.ts +2 -2
- package/dist/citations/clients/arxiv.js +12 -4
- package/dist/citations/clients/common.js +4 -2
- package/dist/citations/clients/crossref.d.ts +2 -2
- package/dist/citations/clients/crossref.js +37 -37
- package/dist/citations/clients/doi-registry.js +15 -16
- package/dist/citations/clients/pubmed.d.ts +2 -2
- package/dist/citations/clients/pubmed.js +20 -13
- package/dist/citations/clients/semantic-scholar.d.ts +2 -2
- package/dist/citations/clients/semantic-scholar.js +9 -9
- package/dist/citations/compare.js +2 -2
- package/dist/citations/match.d.ts +2 -2
- package/dist/citations/match.js +12 -7
- package/dist/citations/normalize.js +35 -26
- package/dist/citations/plan.js +6 -2
- package/dist/citations/resolve.d.ts +6 -6
- package/dist/citations/resolve.js +34 -25
- package/dist/citations/types.d.ts +77 -77
- package/dist/config/environment-stores.d.ts +10 -8
- package/dist/config/resource-limits.js +1 -3
- package/dist/contracts/analogy-report.d.ts +7 -7
- package/dist/contracts/analogy-report.js +2 -2
- package/dist/contracts/chat-events.d.ts +46 -22
- package/dist/contracts/chat-events.js +1 -1
- package/dist/contracts/chat-frame.d.ts +15 -5
- package/dist/contracts/chat-frame.js +67 -40
- package/dist/contracts/chat-parts.d.ts +130 -67
- package/dist/contracts/chat-parts.js +1 -0
- package/dist/contracts/content-url.js +16 -2
- package/dist/contracts/data-profile.d.ts +38 -38
- package/dist/contracts/index.d.ts +3 -3
- package/dist/contracts/index.js +1 -1
- package/dist/contracts/message.d.ts +6 -6
- package/dist/contracts/organ-system.d.ts +11 -11
- package/dist/contracts/part-registry.d.ts +5 -4
- package/dist/contracts/part-registry.js +5 -0
- package/dist/contracts/profile-vocabulary.d.ts +11 -10
- package/dist/contracts/profile-vocabulary.js +10 -3
- package/dist/contracts/report-blocks.d.ts +329 -329
- package/dist/contracts/report-reference.d.ts +105 -81
- package/dist/contracts/report-reference.js +30 -13
- package/dist/contracts/schemas/chat-events.d.ts +45 -6
- package/dist/contracts/schemas/chat-events.js +16 -0
- package/dist/contracts/schemas/chat-parts.d.ts +214 -102
- package/dist/contracts/schemas/chat-parts.js +50 -7
- package/dist/contracts/schemas/index.d.ts +1 -1
- package/dist/contracts/schemas/index.js +1 -1
- package/dist/contracts/severity.d.ts +1 -1
- package/dist/contracts/structure-source.d.ts +3 -3
- package/dist/contracts/structure-source.js +6 -2
- package/dist/contracts/subagent-activity.d.ts +2 -2
- package/dist/contracts/subagent-activity.js +5 -3
- package/dist/contracts/usage.d.ts +2 -2
- package/dist/data/safety-panel-schema.d.ts +25 -25
- package/dist/data/safety-panel-schema.js +13 -4
- package/dist/execution/artifact-metadata.d.ts +23 -15
- package/dist/execution/artifact-metadata.js +33 -10
- package/dist/execution/artifact-record.d.ts +2 -2
- package/dist/execution/artifact-registration.d.ts +5 -5
- package/dist/execution/artifact-registry.d.ts +8 -8
- package/dist/execution/dbos-run-launcher.d.ts +24 -4
- package/dist/execution/dbos-run-launcher.js +58 -4
- package/dist/execution/dbos-workflow-purger.d.ts +7 -6
- package/dist/execution/dbos-workflow-purger.js +29 -21
- package/dist/execution/input-signature.d.ts +2 -2
- package/dist/execution/post-step-pipeline.d.ts +9 -9
- package/dist/execution/post-step-pipeline.js +1 -1
- package/dist/execution/post-step.js +2 -2
- package/dist/execution/reconcile-manifest.d.ts +4 -4
- package/dist/execution/reconcile-manifest.js +3 -2
- package/dist/execution/run-authorizer.d.ts +46 -37
- package/dist/execution/run-authorizer.js +8 -8
- package/dist/execution/run-canceler.d.ts +39 -17
- package/dist/execution/run-canceler.js +137 -28
- package/dist/execution/run-end-record.d.ts +29 -0
- package/dist/execution/run-end-record.js +27 -0
- package/dist/execution/run-event-parts.d.ts +0 -8
- package/dist/execution/run-event-parts.js +29 -24
- package/dist/execution/run-event-stream.d.ts +8 -8
- package/dist/execution/run-event-stream.js +3 -4
- package/dist/execution/run-launcher.d.ts +4 -4
- package/dist/execution/run-synthesis.d.ts +49 -48
- package/dist/execution/run-synthesis.js +96 -255
- package/dist/execution/staged-input.d.ts +2 -2
- package/dist/execution/step-summary.d.ts +6 -6
- package/dist/execution/step-summary.js +4 -8
- package/dist/execution/topo-sort.js +4 -3
- package/dist/execution/workflow-purger.d.ts +2 -2
- package/dist/index.d.ts +25 -24
- package/dist/index.js +36 -37
- package/dist/input-sanitization.js +9 -2
- package/dist/input-scan/clustering.d.ts +6 -6
- package/dist/input-scan/clustering.js +11 -5
- package/dist/input-scan/companions.js +3 -2
- package/dist/input-scan/detect-sets.d.ts +2 -2
- package/dist/input-scan/detect-sets.js +25 -21
- package/dist/input-scan/enrich.d.ts +6 -6
- package/dist/input-scan/enrich.js +29 -12
- package/dist/input-scan/formats.d.ts +2 -2
- package/dist/input-scan/formats.js +8 -2
- package/dist/input-scan/markers.d.ts +2 -2
- package/dist/input-scan/markers.js +14 -5
- package/dist/input-scan/menu.d.ts +10 -10
- package/dist/input-scan/menu.js +0 -0
- package/dist/input-scan/quarantine.d.ts +2 -2
- package/dist/input-scan/quarantine.js +23 -18
- package/dist/input-scan/readout-budget.d.ts +2 -2
- package/dist/input-scan/readout-budget.js +1 -1
- package/dist/input-scan/readout.d.ts +2 -2
- package/dist/input-scan/readout.js +47 -34
- package/dist/input-scan/scan.d.ts +2 -2
- package/dist/input-scan/scan.js +7 -5
- package/dist/input-scan/set-types.d.ts +28 -28
- package/dist/input-scan/shapes.d.ts +4 -4
- package/dist/input-scan/shapes.js +0 -0
- package/dist/input-scan/templates.d.ts +10 -10
- package/dist/input-scan/templates.js +30 -22
- package/dist/input-scan/tokens.d.ts +6 -4
- package/dist/input-scan/tokens.js +100 -38
- package/dist/input-scan/types.d.ts +22 -22
- package/dist/lib/async-utils.d.ts +3 -7
- package/dist/lib/async-utils.js +5 -9
- package/dist/lib/cache.js +1 -1
- package/dist/lib/chrome.d.ts +46 -6
- package/dist/lib/console-logger.js +2 -2
- package/dist/lib/db-result.d.ts +22 -6
- package/dist/lib/db-result.js +9 -13
- package/dist/lib/eyes.d.ts +4 -4
- package/dist/lib/eyes.js +1 -1
- package/dist/lib/fs-helpers.js +18 -6
- package/dist/lib/fs-result.d.ts +1 -0
- package/dist/lib/fs-result.js +5 -6
- package/dist/lib/hooks.d.ts +23 -7
- package/dist/lib/hooks.js +17 -3
- package/dist/lib/host-concurrency.js +3 -2
- package/dist/lib/logger.d.ts +2 -2
- package/dist/lib/logger.js +2 -1
- package/dist/lib/metrics.d.ts +1 -1
- package/dist/lib/null-proto.d.ts +6 -0
- package/dist/lib/null-proto.js +17 -0
- package/dist/lib/otel-spans.d.ts +1 -1
- package/dist/lib/otel-spans.js +9 -5
- package/dist/lib/otel.d.ts +4 -2
- package/dist/lib/otel.js +10 -2
- package/dist/lib/page-capture.d.ts +8 -8
- package/dist/lib/page-capture.js +9 -4
- package/dist/lib/parse-json.d.ts +5 -0
- package/dist/lib/parse-json.js +12 -0
- package/dist/lib/present.d.ts +12 -0
- package/dist/lib/present.js +39 -0
- package/dist/lib/rate-limit.d.ts +4 -4
- package/dist/lib/rate-limit.js +12 -13
- package/dist/lib/regulatory-corpus/fetch-fda-guidance.d.ts +4 -4
- package/dist/lib/regulatory-corpus/fetch-fda-guidance.js +4 -10
- package/dist/lib/regulatory-corpus/fetch-ich.d.ts +4 -4
- package/dist/lib/regulatory-corpus/fetch-ich.js +18 -14
- package/dist/lib/regulatory-corpus/normalize-whitespace.d.ts +6 -0
- package/dist/lib/regulatory-corpus/normalize-whitespace.js +41 -0
- package/dist/lib/regulatory-corpus.d.ts +10 -10
- package/dist/lib/regulatory-corpus.js +3 -1
- package/dist/lib/result.d.ts +10 -11
- package/dist/lib/result.js +15 -13
- package/dist/lib/storage.d.ts +2 -2
- package/dist/lib/test/async-iterable.d.ts +9 -0
- package/dist/lib/test/async-iterable.js +28 -0
- package/dist/lib/test/request-url.d.ts +5 -0
- package/dist/lib/test/request-url.js +7 -0
- package/dist/lib/test/result-assert.d.ts +12 -0
- package/dist/lib/test/result-assert.js +17 -0
- package/dist/lib/test/text-shapes.d.ts +24 -0
- package/dist/lib/test/text-shapes.js +63 -0
- package/dist/lib/text.d.ts +22 -0
- package/dist/lib/text.js +68 -0
- package/dist/lib/thrown.d.ts +18 -0
- package/dist/lib/thrown.js +30 -0
- package/dist/lib/unknown-array.d.ts +6 -0
- package/dist/lib/unknown-array.js +8 -0
- package/dist/lib/unknown-containers.d.ts +14 -0
- package/dist/lib/unknown-containers.js +17 -0
- package/dist/lib/unknown-text.d.ts +8 -0
- package/dist/lib/unknown-text.js +28 -0
- package/dist/lib/zod-issue-shape.d.ts +1 -1
- package/dist/lib/zod-issue-shape.js +31 -31
- package/dist/lib/zod-issues.d.ts +3 -3
- package/dist/lib/zod-issues.js +30 -17
- package/dist/literature/sources/arxiv.d.ts +6 -6
- package/dist/literature/sources/arxiv.js +92 -35
- package/dist/literature/sources/http.d.ts +2 -2
- package/dist/literature/sources/http.js +16 -15
- package/dist/literature/sources/pubmed.d.ts +16 -16
- package/dist/literature/sources/pubmed.js +96 -61
- package/dist/literature/sources/semantic-scholar.d.ts +8 -8
- package/dist/literature/sources/semantic-scholar.js +22 -13
- package/dist/loop/accounting.d.ts +63 -0
- package/dist/loop/accounting.js +141 -0
- package/dist/loop/call-policy.d.ts +73 -0
- package/dist/loop/call-policy.js +109 -0
- package/dist/loop/chat-stream.d.ts +62 -0
- package/dist/loop/chat-stream.js +237 -0
- package/dist/loop/compaction.d.ts +14 -9
- package/dist/loop/compaction.js +17 -0
- package/dist/loop/metrics.d.ts +12 -15
- package/dist/loop/metrics.js +14 -26
- package/dist/loop/run-loop.d.ts +233 -0
- package/dist/loop/run-loop.js +770 -0
- package/dist/loop/sub-agent.d.ts +61 -0
- package/dist/loop/sub-agent.js +161 -0
- package/dist/loop/tool-adapter.d.ts +98 -0
- package/dist/loop/tool-adapter.js +364 -0
- package/dist/loop/tool-detail.d.ts +1 -1
- package/dist/loop/tool-detail.js +6 -5
- package/dist/loop/tool-outcome.d.ts +1 -1
- package/dist/loop/tool-output.d.ts +4 -4
- package/dist/loop/tool-output.js +2 -2
- package/dist/loop/turn-credentials.d.ts +34 -0
- package/dist/loop/turn-credentials.js +73 -0
- package/dist/loop/types.d.ts +34 -37
- package/dist/loop/types.js +2 -7
- package/dist/memory/ai-sdk-message-storage.d.ts +5 -5
- package/dist/memory/ai-sdk-message-storage.js +13 -11
- package/dist/memory/card-builders.d.ts +14 -14
- package/dist/memory/card-builders.js +19 -15
- package/dist/memory/conversation-display-recorder.d.ts +22 -6
- package/dist/memory/conversation-display-recorder.js +64 -20
- package/dist/memory/conversation-display-replay.js +3 -2
- package/dist/memory/conversation-display-storage.d.ts +15 -7
- package/dist/memory/conversation-display-storage.js +141 -36
- package/dist/memory/conversation-view.d.ts +4 -4
- package/dist/memory/conversation-view.js +5 -4
- package/dist/memory/count-tokens.js +10 -8
- package/dist/memory/derive-thread-title.d.ts +0 -13
- package/dist/memory/derive-thread-title.js +2 -1
- package/dist/memory/message-backfill.d.ts +12 -5
- package/dist/memory/message-backfill.js +5 -3
- package/dist/memory/thread-history.d.ts +66 -24
- package/dist/memory/thread-history.js +212 -79
- package/dist/memory/thread-store.d.ts +26 -17
- package/dist/memory/thread-store.js +15 -9
- package/dist/memory/tool-call-integrity.d.ts +2 -2
- package/dist/memory/tool-call-integrity.js +4 -3
- package/dist/memory/working-memory.d.ts +16 -12
- package/dist/memory/working-memory.js +72 -61
- package/dist/prompts/briefing.d.ts +63 -9
- package/dist/prompts/briefing.js +130 -3
- package/dist/prompts/planner.js +13 -2
- package/dist/prompts/synthesis-agent.d.ts +1 -1
- package/dist/prompts/synthesis-agent.js +6 -14
- package/dist/provenance/collector.d.ts +6 -6
- package/dist/provenance/collector.js +15 -8
- package/dist/provenance/exec-frame.d.ts +2 -2
- package/dist/provenance/exec-frame.js +6 -1
- package/dist/provenance/seam.d.ts +24 -19
- package/dist/provenance/seam.js +7 -5
- package/dist/provenance/types.d.ts +6 -6
- package/dist/providers/ai-sdk.d.ts +113 -62
- package/dist/providers/ai-sdk.js +303 -458
- package/dist/providers/embedding.d.ts +2 -2
- package/dist/providers/embedding.js +1 -1
- package/dist/providers/errors.d.ts +22 -2
- package/dist/providers/errors.js +98 -50
- package/dist/providers/prompt-cache.d.ts +8 -8
- package/dist/providers/prompt-cache.js +13 -11
- package/dist/providers/reasoning.d.ts +2 -2
- package/dist/providers/reasoning.js +2 -2
- package/dist/providers/types.d.ts +59 -92
- package/dist/reference-data/catalog.d.ts +2 -15
- package/dist/reference-data/catalog.js +166 -10
- package/dist/reference-data/receipt.d.ts +2 -2
- package/dist/report-model/assert-rules.js +1 -1
- package/dist/report-model/authoring-grammar.d.ts +209 -231
- package/dist/report-model/block-walk.d.ts +10 -10
- package/dist/report-model/block-walk.js +2 -0
- package/dist/report-model/draft-finish.d.ts +8 -8
- package/dist/report-model/draft-finish.js +1 -1
- package/dist/report-model/draft-hash.js +8 -7
- package/dist/report-model/draft-operations.d.ts +22 -10
- package/dist/report-model/draft-operations.js +48 -30
- package/dist/report-model/draft-read.d.ts +19 -7
- package/dist/report-model/draft-read.js +16 -6
- package/dist/report-model/draft.d.ts +844 -2
- package/dist/report-model/draft.js +3 -1
- package/dist/report-model/fixture-resolver.js +39 -16
- package/dist/report-model/pin-snapshot.d.ts +2 -2
- package/dist/report-model/pin-snapshot.js +15 -15
- package/dist/report-model/production-resolver.d.ts +18 -18
- package/dist/report-model/production-resolver.js +50 -42
- package/dist/report-model/reference-resolver.d.ts +26 -10
- package/dist/report-model/reference-resolver.js +68 -5
- package/dist/report-model/reference-stamp.js +30 -38
- package/dist/report-model/structural-validation.js +12 -4
- package/dist/report-model/validate.d.ts +7 -7
- package/dist/report-model/validate.js +6 -6
- package/dist/report-render/assets.d.ts +2 -2
- package/dist/report-render/assets.js +27 -3
- package/dist/report-render/chart-export.d.ts +10 -2
- package/dist/report-render/chart-export.js +37 -11
- package/dist/report-render/chart-presets.d.ts +8 -8
- package/dist/report-render/chart-presets.js +3 -3
- package/dist/report-render/chart-renderers.d.ts +23 -16
- package/dist/report-render/chart-renderers.js +74 -53
- package/dist/report-render/chart-toolbox.d.ts +2 -2
- package/dist/report-render/chart-toolbox.js +7 -6
- package/dist/report-render/chart.d.ts +15 -16
- package/dist/report-render/chart.js +369 -252
- package/dist/report-render/design.d.ts +36 -297
- package/dist/report-render/design.js +0 -12
- package/dist/report-render/figures/common.d.ts +12 -12
- package/dist/report-render/figures/common.js +42 -31
- package/dist/report-render/figures/dendrogram.d.ts +3 -3
- package/dist/report-render/figures/dendrogram.js +10 -10
- package/dist/report-render/figures/dense.js +15 -8
- package/dist/report-render/figures/dotplot.js +46 -33
- package/dist/report-render/figures/embedding.js +52 -43
- package/dist/report-render/figures/equal-units.d.ts +10 -10
- package/dist/report-render/figures/equal-units.js +27 -27
- package/dist/report-render/figures/forest.js +9 -7
- package/dist/report-render/figures/gsea.js +21 -11
- package/dist/report-render/figures/heatmap.js +13 -9
- package/dist/report-render/figures/index.d.ts +10 -10
- package/dist/report-render/figures/index.js +4 -2
- package/dist/report-render/figures/km.js +10 -9
- package/dist/report-render/figures/label-room.d.ts +12 -12
- package/dist/report-render/figures/label-room.js +7 -2
- package/dist/report-render/figures/locuszoom.d.ts +2 -2
- package/dist/report-render/figures/locuszoom.js +59 -31
- package/dist/report-render/figures/lollipop.js +3 -2
- package/dist/report-render/figures/ma.js +8 -4
- package/dist/report-render/figures/manhattan.d.ts +1 -2
- package/dist/report-render/figures/manhattan.js +52 -34
- package/dist/report-render/figures/oncoprint.js +4 -5
- package/dist/report-render/figures/pca.js +25 -11
- package/dist/report-render/figures/qq.js +20 -9
- package/dist/report-render/figures/roc.js +1 -1
- package/dist/report-render/figures/sankey.d.ts +2 -2
- package/dist/report-render/figures/sankey.js +11 -10
- package/dist/report-render/figures/upset.d.ts +6 -6
- package/dist/report-render/figures/upset.js +7 -4
- package/dist/report-render/figures/volcano.js +12 -10
- package/dist/report-render/hybrid-svg.d.ts +4 -4
- package/dist/report-render/hybrid-svg.js +7 -5
- package/dist/report-render/number-format.d.ts +4 -4
- package/dist/report-render/number-format.js +62 -27
- package/dist/report-render/page.js +2 -1
- package/dist/report-render/provenance-data.d.ts +2 -2
- package/dist/report-render/references.d.ts +4 -4
- package/dist/report-render/render.d.ts +2 -2
- package/dist/report-render/render.js +10 -11
- package/dist/report-render/script-json.js +1 -1
- package/dist/report-render/table-data.d.ts +6 -6
- package/dist/report-render/test/options.d.ts +49 -0
- package/dist/report-render/test/options.js +143 -0
- package/dist/report-render/test/page-function.d.ts +19 -0
- package/dist/report-render/test/page-function.js +33 -0
- package/dist/report-render/types.d.ts +10 -10
- package/dist/report-render/value-bridge.d.ts +4 -4
- package/dist/report-render/value-bridge.js +27 -14
- package/dist/report-render/views/chart-view.d.ts +2 -2
- package/dist/report-render/views/chart-view.js +2 -2
- package/dist/report-render/views/lineage.d.ts +6 -6
- package/dist/report-render/views/lineage.js +2 -0
- package/dist/report-render/views/page-view.d.ts +2 -2
- package/dist/report-render/views/page-view.js +1 -0
- package/dist/report-render/views/prose.js +25 -8
- package/dist/report-render/views/references-view.js +12 -1
- package/dist/report-render/views/values.js +1 -1
- package/dist/runtime/assemble.d.ts +53 -26
- package/dist/runtime/assemble.js +103 -56
- package/dist/runtime/boot.d.ts +8 -7
- package/dist/runtime/boot.js +1 -1
- package/dist/runtime/connection-budget.d.ts +6 -6
- package/dist/runtime/connection-budget.js +1 -1
- package/dist/runtime/dbos.d.ts +29 -19
- package/dist/runtime/dbos.js +35 -20
- package/dist/runtime/result-serialization.js +18 -5
- package/dist/runtime/shutdown.d.ts +2 -2
- package/dist/sandbox/client.d.ts +7 -3
- package/dist/sandbox/cpu-files.d.ts +2 -2
- package/dist/sandbox/cpu-files.js +21 -4
- package/dist/sandbox/create-sandbox.d.ts +7 -8
- package/dist/sandbox/create-sandbox.js +6 -12
- package/dist/sandbox/docker-client.d.ts +48 -3
- package/dist/sandbox/docker-client.js +10 -6
- package/dist/sandbox/estimate-data-profile-resources.js +2 -7
- package/dist/sandbox/exec-outcome.d.ts +2 -2
- package/dist/sandbox/exec-outcome.js +1 -1
- package/dist/sandbox/exec.d.ts +10 -6
- package/dist/sandbox/exec.js +27 -12
- package/dist/sandbox/execution-id.js +14 -6
- package/dist/sandbox/farm.d.ts +2 -2
- package/dist/sandbox/farm.js +22 -27
- package/dist/sandbox/identity.d.ts +7 -0
- package/dist/sandbox/identity.js +14 -3
- package/dist/sandbox/image-packages.d.ts +26 -4
- package/dist/sandbox/image-packages.js +29 -27
- package/dist/sandbox/k8s-client.d.ts +35 -8
- package/dist/sandbox/k8s-client.js +6 -5
- package/dist/sandbox/labels.js +1 -0
- package/dist/sandbox/liveness.js +3 -1
- package/dist/sandbox/mount-plan.d.ts +10 -10
- package/dist/sandbox/mount-plan.js +13 -14
- package/dist/sandbox/notification-sweep.d.ts +4 -4
- package/dist/sandbox/notification-sweep.js +4 -7
- package/dist/sandbox/package-identity.d.ts +6 -13
- package/dist/sandbox/package-identity.js +46 -28
- package/dist/sandbox/reaper.d.ts +10 -10
- package/dist/sandbox/reaper.js +4 -6
- package/dist/sandbox/sandbox-error.d.ts +2 -9
- package/dist/sandbox/sandbox-error.js +21 -8
- package/dist/sandbox/sandbox-step-translate.d.ts +8 -5
- package/dist/sandbox/sandbox-step-translate.js +22 -8
- package/dist/sandbox/step-sandbox.d.ts +47 -0
- package/dist/sandbox/step-sandbox.js +53 -0
- package/dist/sandbox/types.d.ts +18 -19
- package/dist/sandbox/types.js +1 -1
- package/dist/schemas/artifact-manifest.d.ts +4 -4
- package/dist/schemas/data-profile-schemas.d.ts +351 -306
- package/dist/schemas/file-metadata.js +2 -4
- package/dist/schemas/plan-schemas.d.ts +79 -25
- package/dist/schemas/plan-schemas.js +1 -1
- package/dist/schemas/run-synthesis.d.ts +95 -26
- package/dist/schemas/run-synthesis.js +3 -1
- package/dist/schemas/validate-plan.d.ts +4 -4
- package/dist/schemas/validate-plan.js +17 -5
- package/dist/schemas/workflow-state.d.ts +127 -14
- package/dist/schemas/workflow-state.js +56 -2
- package/dist/state/active-turns.d.ts +36 -0
- package/dist/state/active-turns.js +67 -0
- package/dist/state/analyses-metrics.d.ts +8 -8
- package/dist/state/analyses-metrics.js +4 -4
- package/dist/state/analyses.d.ts +0 -14
- package/dist/state/analyses.js +0 -32
- package/dist/state/artifacts.d.ts +47 -18
- package/dist/state/artifacts.js +48 -7
- package/dist/state/data-profile.d.ts +2 -2
- package/dist/state/db.d.ts +12 -2
- package/dist/state/db.js +5 -0
- package/dist/state/edit-intents.d.ts +4 -0
- package/dist/state/edit-intents.js +71 -0
- package/dist/state/index.d.ts +5 -5
- package/dist/state/index.js +3 -3
- package/dist/state/init.d.ts +2 -1
- package/dist/state/init.js +5 -2
- package/dist/state/migrations/20260927120000_baseline.js +3 -1
- package/dist/state/migrations/20261026120000_add_the_edit_intents.d.ts +7 -0
- package/dist/state/migrations/20261026120000_add_the_edit_intents.js +21 -0
- package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.d.ts +7 -0
- package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.js +16 -0
- package/dist/state/migrations/20261027120100_store_the_authoring_results.d.ts +8 -0
- package/dist/state/migrations/20261027120100_store_the_authoring_results.js +20 -0
- package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.d.ts +7 -0
- package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.js +12 -0
- package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.d.ts +7 -0
- package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.js +11 -0
- package/dist/state/migrations/20261028120000_record_the_paused_work.d.ts +7 -0
- package/dist/state/migrations/20261028120000_record_the_paused_work.js +25 -0
- package/dist/state/migrations/20261028120100_end_the_suspended_runs.d.ts +8 -0
- package/dist/state/migrations/20261028120100_end_the_suspended_runs.js +13 -0
- package/dist/state/migrations/20261029120000_reference_the_run_mandate.d.ts +7 -0
- package/dist/state/migrations/20261029120000_reference_the_run_mandate.js +23 -0
- package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.d.ts +7 -0
- package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.js +11 -0
- package/dist/state/migrations/index.js +18 -0
- package/dist/state/paused-work.d.ts +52 -0
- package/dist/state/paused-work.js +105 -0
- package/dist/state/plans.d.ts +27 -8
- package/dist/state/plans.js +14 -11
- package/dist/state/purge-analysis.d.ts +6 -6
- package/dist/state/purge-analysis.js +10 -2
- package/dist/state/report-session-state.d.ts +43 -18
- package/dist/state/report-session-state.js +43 -4
- package/dist/state/report-versions.d.ts +16 -11
- package/dist/state/report-versions.js +5 -3
- package/dist/state/runs.d.ts +70 -25
- package/dist/state/runs.js +127 -64
- package/dist/state/schema.d.ts +18 -21
- package/dist/state/schema.js +4 -5
- package/dist/state/snapshot-parse.d.ts +2 -2
- package/dist/state/snapshot-parse.js +14 -8
- package/dist/state/step-executions.d.ts +29 -8
- package/dist/state/step-executions.js +28 -4
- package/dist/state/tool-outputs.d.ts +2 -2
- package/dist/state/tool-outputs.js +2 -1
- package/dist/state/vector-store.d.ts +16 -16
- package/dist/state/vector-store.js +11 -7
- package/dist/tasks/data-profile-absorb.d.ts +3 -3
- package/dist/tasks/data-profile-absorb.js +21 -16
- package/dist/tasks/data-profile-activity.d.ts +5 -5
- package/dist/tasks/data-profile-activity.js +5 -5
- package/dist/tasks/data-profile-index.d.ts +4 -4
- package/dist/tasks/data-profile-index.js +32 -17
- package/dist/tasks/data-profile-resolve.d.ts +8 -8
- package/dist/tasks/data-profile-resolve.js +88 -62
- package/dist/tasks/data-profile.d.ts +40 -31
- package/dist/tasks/data-profile.js +138 -95
- package/dist/tasks/extract-values.d.ts +26 -79
- package/dist/tasks/extract-values.js +48 -108
- package/dist/tasks/refresh-regulatory-corpus.d.ts +4 -20
- package/dist/tasks/refresh-regulatory-corpus.js +12 -8
- package/dist/tasks/regulatory-corpus-boot-refresh.d.ts +2 -2
- package/dist/tasks/regulatory-corpus-boot-refresh.js +12 -10
- package/dist/testing.d.ts +60 -0
- package/dist/testing.js +96 -0
- package/dist/tools/ad-hoc-router.d.ts +11 -9
- package/dist/tools/ad-hoc-router.js +80 -51
- package/dist/tools/analysis-invocation.d.ts +7 -0
- package/dist/tools/analysis-invocation.js +29 -5
- package/dist/tools/approval/contract.d.ts +8 -52
- package/dist/tools/approval/contract.js +7 -36
- package/dist/tools/approval/gateway.d.ts +27 -28
- package/dist/tools/approval/gateway.js +33 -130
- package/dist/tools/approval/queries.d.ts +6 -11
- package/dist/tools/approval/queries.js +43 -29
- package/dist/tools/approval/uuidv7.js +2 -2
- package/dist/tools/bio/chembl.d.ts +3 -3
- package/dist/tools/bio/chembl.js +10 -0
- package/dist/tools/bio/comptox.d.ts +25 -8
- package/dist/tools/bio/comptox.js +4 -2
- package/dist/tools/bio/drug-gene-interactions.d.ts +27 -17
- package/dist/tools/bio/drug-gene-interactions.js +11 -8
- package/dist/tools/bio/gene-disease-evidence.d.ts +61 -15
- package/dist/tools/bio/gene-disease-evidence.js +10 -6
- package/dist/tools/bio/gene-preclinical-profile.d.ts +11 -11
- package/dist/tools/bio/keys.d.ts +2 -2
- package/dist/tools/bio/keys.js +3 -3
- package/dist/tools/bio/lookup-annotation.d.ts +5 -5
- package/dist/tools/bio/lookup-annotation.js +3 -0
- package/dist/tools/bio/opentargets.d.ts +1 -1
- package/dist/tools/bio/opentargets.js +6 -0
- package/dist/tools/bio/pubchem.d.ts +2 -2
- package/dist/tools/bio/pubchem.js +6 -0
- package/dist/tools/bio/pubmed.d.ts +26 -16
- package/dist/tools/bio/pubmed.js +9 -3
- package/dist/tools/bio/search-clinical-trials.d.ts +4 -4
- package/dist/tools/bio/search-clinical-trials.js +5 -1
- package/dist/tools/bio/search-faers.d.ts +2 -2
- package/dist/tools/bio/search-faers.js +1 -1
- package/dist/tools/bio/search-gene.d.ts +2 -2
- package/dist/tools/bio/search-gene.js +1 -0
- package/dist/tools/bio/search-geo-datasets.d.ts +4 -4
- package/dist/tools/bio/search-geo-datasets.js +5 -5
- package/dist/tools/bio/search-interactions.d.ts +1 -1
- package/dist/tools/bio/search-patents.d.ts +28 -22
- package/dist/tools/bio/search-patents.js +20 -17
- package/dist/tools/bio/search-protein.d.ts +2 -2
- package/dist/tools/bio/search-protein.js +1 -1
- package/dist/tools/bio/search-regulatory-approvals.d.ts +64 -18
- package/dist/tools/bio/search-regulatory-approvals.js +21 -16
- package/dist/tools/bio/target-safety.d.ts +8 -8
- package/dist/tools/bio/target-safety.js +11 -6
- package/dist/tools/capability-data.d.ts +40 -0
- package/dist/tools/capability-data.js +74 -0
- package/dist/tools/define-tool.d.ts +55 -46
- package/dist/tools/define-tool.js +39 -27
- package/dist/tools/display/normalize-echart-spec.d.ts +2 -2
- package/dist/tools/display/normalize-echart-spec.js +51 -27
- package/dist/tools/display/show-user.d.ts +2 -2
- package/dist/tools/display/show-user.js +1 -1
- package/dist/tools/execute-analysis.d.ts +54 -17
- package/dist/tools/execute-analysis.js +193 -62
- package/dist/tools/knowledge/check.d.ts +182 -0
- package/dist/tools/knowledge/check.js +94 -0
- package/dist/tools/knowledge/client.d.ts +351 -0
- package/dist/tools/knowledge/client.js +319 -0
- package/dist/tools/knowledge/environment.d.ts +78 -0
- package/dist/tools/knowledge/environment.js +116 -0
- package/dist/tools/knowledge/index.d.ts +49 -0
- package/dist/tools/knowledge/index.js +70 -0
- package/dist/tools/knowledge/local-slots.d.ts +62 -0
- package/dist/tools/knowledge/local-slots.js +184 -0
- package/dist/tools/knowledge/pin.d.ts +14 -0
- package/dist/tools/knowledge/pin.js +17 -0
- package/dist/tools/knowledge/recommend.d.ts +67 -0
- package/dist/tools/knowledge/recommend.js +106 -0
- package/dist/tools/knowledge/situation.d.ts +143 -0
- package/dist/tools/knowledge/situation.js +157 -0
- package/dist/tools/knowledge/skeleton.d.ts +69 -0
- package/dist/tools/knowledge/skeleton.js +201 -0
- package/dist/tools/knowledge/template.d.ts +139 -0
- package/dist/tools/knowledge/template.js +273 -0
- package/dist/tools/lib/alphafold-client.js +2 -1
- package/dist/tools/lib/amass-client.d.ts +28 -28
- package/dist/tools/lib/amass-client.js +20 -10
- package/dist/tools/lib/api-utils.d.ts +13 -3
- package/dist/tools/lib/api-utils.js +17 -3
- package/dist/tools/lib/bgee-client.d.ts +6 -6
- package/dist/tools/lib/bgee-client.js +16 -10
- package/dist/tools/lib/cbioportal-client.d.ts +4 -4
- package/dist/tools/lib/cbioportal-client.js +9 -8
- package/dist/tools/lib/chembl-client.d.ts +14 -14
- package/dist/tools/lib/chembl-client.js +11 -4
- package/dist/tools/lib/clinical-benchmarks-client.d.ts +4 -4
- package/dist/tools/lib/clinical-benchmarks-client.js +4 -7
- package/dist/tools/lib/clinical-trials-client.d.ts +18 -18
- package/dist/tools/lib/clinical-trials-client.js +10 -10
- package/dist/tools/lib/clinvar-client.d.ts +2 -2
- package/dist/tools/lib/clinvar-client.js +6 -6
- package/dist/tools/lib/ctx-ops.d.ts +23 -23
- package/dist/tools/lib/ctx-ops.js +13 -10
- package/dist/tools/lib/dgidb-client.d.ts +6 -6
- package/dist/tools/lib/dgidb-client.js +10 -12
- package/dist/tools/lib/disgenet-client.d.ts +4 -4
- package/dist/tools/lib/ema-client.d.ts +2 -2
- package/dist/tools/lib/ensembl-client.d.ts +4 -4
- package/dist/tools/lib/ensembl-client.js +5 -4
- package/dist/tools/lib/gwas-catalog-client.d.ts +4 -4
- package/dist/tools/lib/gwas-catalog-client.js +17 -17
- package/dist/tools/lib/html-text.d.ts +6 -0
- package/dist/tools/lib/html-text.js +9 -0
- package/dist/tools/lib/identifier-resolver.d.ts +4 -4
- package/dist/tools/lib/identifier-resolver.js +7 -3
- package/dist/tools/lib/impc-client.d.ts +8 -8
- package/dist/tools/lib/impc-client.js +46 -35
- package/dist/tools/lib/iuphar-client.d.ts +2 -2
- package/dist/tools/lib/iuphar-client.js +7 -16
- package/dist/tools/lib/monarch-client.d.ts +4 -4
- package/dist/tools/lib/openfda-client.d.ts +22 -22
- package/dist/tools/lib/openfda-client.js +23 -22
- package/dist/tools/lib/opentargets-client.d.ts +12 -12
- package/dist/tools/lib/pathway-client.d.ts +4 -4
- package/dist/tools/lib/pathway-client.js +15 -19
- package/dist/tools/lib/pharmgkb-client.d.ts +2 -2
- package/dist/tools/lib/pharmgkb-client.js +1 -1
- package/dist/tools/lib/protein-family-modality.d.ts +2 -2
- package/dist/tools/lib/protein-family-modality.js +0 -2
- package/dist/tools/lib/protein-family-normalize.js +7 -0
- package/dist/tools/lib/pubchem-client.d.ts +2 -2
- package/dist/tools/lib/pubchem-client.js +1 -0
- package/dist/tools/lib/pubchem-ops.d.ts +4 -4
- package/dist/tools/lib/pubchem-ops.js +8 -0
- package/dist/tools/lib/pubmed-client.d.ts +9 -9
- package/dist/tools/lib/pubmed-client.js +1 -1
- package/dist/tools/lib/string-client.d.ts +6 -6
- package/dist/tools/lib/uniprot-client.d.ts +8 -8
- package/dist/tools/lib/uniprot-client.js +5 -1
- package/dist/tools/memory/update-working-memory.d.ts +16 -13
- package/dist/tools/memory/update-working-memory.js +21 -3
- package/dist/tools/read-tool-output.js +8 -2
- package/dist/tools/registry.d.ts +2 -2
- package/dist/tools/report-authoring/authoring-tools.d.ts +54 -23
- package/dist/tools/report-authoring/authoring-tools.js +128 -62
- package/dist/tools/report-session/derive-table.d.ts +19 -59
- package/dist/tools/report-session/derive-table.js +120 -122
- package/dist/tools/report-session/examine-page.d.ts +6 -6
- package/dist/tools/report-session/examine-page.js +14 -12
- package/dist/tools/report-session/list-artifacts.d.ts +6 -6
- package/dist/tools/report-session/list-artifacts.js +5 -5
- package/dist/tools/report-session/page-faults.d.ts +6 -6
- package/dist/tools/report-session/page-faults.js +3 -1
- package/dist/tools/report-session/preview-report.d.ts +4 -3
- package/dist/tools/report-session/preview-report.js +26 -7
- package/dist/tools/report-session/record-version.d.ts +9 -4
- package/dist/tools/report-session/record-version.js +16 -9
- package/dist/tools/report-session/session-page-publisher.d.ts +6 -6
- package/dist/tools/research/generate-analogy-report.d.ts +14 -7
- package/dist/tools/research/generate-analogy-report.js +80 -76
- package/dist/tools/research/generate-plan.d.ts +39 -16
- package/dist/tools/research/generate-plan.js +565 -338
- package/dist/tools/research/guarded-address.d.ts +20 -0
- package/dist/tools/research/guarded-address.js +149 -0
- package/dist/tools/research/inspect-data-profile.d.ts +27 -20
- package/dist/tools/research/inspect-data-profile.js +26 -25
- package/dist/tools/research/inspect-run.d.ts +54 -27
- package/dist/tools/research/inspect-run.js +50 -40
- package/dist/tools/research/literature-reviewer.d.ts +8 -7
- package/dist/tools/research/literature-reviewer.js +29 -28
- package/dist/tools/research/search-arxiv.d.ts +1 -1
- package/dist/tools/research/search-arxiv.js +1 -1
- package/dist/tools/research/search-github-repos.d.ts +10 -7
- package/dist/tools/research/search-github-repos.js +25 -22
- package/dist/tools/research/search-semantic-scholar.js +1 -1
- package/dist/tools/research/searxng-engine.d.ts +40 -0
- package/dist/tools/research/searxng-engine.js +122 -0
- package/dist/tools/research/web-fetch.d.ts +127 -0
- package/dist/tools/research/web-fetch.js +618 -0
- package/dist/tools/research/web-search.d.ts +84 -0
- package/dist/tools/research/web-search.js +117 -0
- package/dist/tools/sandbox/link-packages.d.ts +11 -7
- package/dist/tools/sandbox/link-packages.js +11 -8
- package/dist/tools/sandbox/list-available-packages.d.ts +24 -12
- package/dist/tools/sandbox/list-available-packages.js +43 -29
- package/dist/tools/sandbox/list-available-refs.d.ts +38 -14
- package/dist/tools/sandbox/list-available-refs.js +119 -37
- package/dist/tools/sandbox/report-blocker.d.ts +30 -37
- package/dist/tools/sandbox/report-blocker.js +22 -68
- package/dist/tools/sandbox/skills.d.ts +16 -12
- package/dist/tools/sandbox/skills.js +16 -12
- package/dist/tools/sandbox/submit-file-metadata.d.ts +12 -9
- package/dist/tools/sandbox/submit-file-metadata.js +18 -21
- package/dist/tools/start-report-session.d.ts +13 -5
- package/dist/tools/start-report-session.js +35 -8
- package/dist/tools/terminal-text.d.ts +14 -0
- package/dist/tools/terminal-text.js +51 -0
- package/dist/tools/workspace/decision-record.d.ts +81 -0
- package/dist/tools/workspace/decision-record.js +127 -0
- package/dist/tools/workspace/edit-file.d.ts +59 -18
- package/dist/tools/workspace/edit-file.js +98 -15
- package/dist/tools/workspace/execute-command.d.ts +31 -12
- package/dist/tools/workspace/execute-command.js +37 -8
- package/dist/tools/workspace/file-stat.d.ts +6 -3
- package/dist/tools/workspace/grep.d.ts +10 -7
- package/dist/tools/workspace/grep.js +9 -3
- package/dist/tools/workspace/index.d.ts +1 -0
- package/dist/tools/workspace/index.js +1 -0
- package/dist/tools/workspace/list-files.d.ts +6 -3
- package/dist/tools/workspace/mutator.d.ts +28 -15
- package/dist/tools/workspace/mutator.js +107 -53
- package/dist/tools/workspace/read-file.d.ts +8 -5
- package/dist/tools/workspace/result-bounds.d.ts +5 -5
- package/dist/tools/workspace/result-bounds.js +4 -2
- package/dist/tools/workspace/run-exec.d.ts +2 -2
- package/dist/tools/workspace/run-exec.js +3 -3
- package/dist/tools/workspace/scan-inputs.d.ts +8 -5
- package/dist/tools/workspace/scan-inputs.js +17 -5
- package/dist/tools/workspace/show-file.d.ts +1 -1
- package/dist/tools/workspace/show-file.js +2 -1
- package/dist/tools/workspace/show-plan.d.ts +8 -5
- package/dist/tools/workspace/show-plan.js +9 -8
- package/dist/tools/workspace/workspace-search.d.ts +41 -13
- package/dist/tools/workspace/workspace-search.js +27 -14
- package/dist/tools/workspace/write-file.d.ts +9 -7
- package/dist/workflows/execute-analysis-scheduler.d.ts +9 -9
- package/dist/workflows/execute-analysis-scheduler.js +6 -3
- package/dist/workflows/execute-analysis.d.ts +100 -76
- package/dist/workflows/execute-analysis.js +380 -247
- package/dist/workflows/pause.d.ts +71 -0
- package/dist/workflows/pause.js +173 -0
- package/dist/workflows/sandbox-step.d.ts +50 -61
- package/dist/workflows/sandbox-step.js +99 -106
- package/dist/workflows/test/sql-writes.d.ts +21 -0
- package/dist/workflows/test/sql-writes.js +36 -0
- package/dist/workspace/filesystem.d.ts +6 -6
- package/dist/workspace/filesystem.js +10 -8
- package/dist/workspace/paths.d.ts +1 -1
- package/dist/workspace/paths.js +15 -4
- package/dist/workspace/search-config.d.ts +2 -2
- package/dist/workspace/search-config.js +1 -1
- package/package.json +25 -22
- package/dist/loop/continue-agent.d.ts +0 -40
- package/dist/loop/continue-agent.js +0 -38
- package/dist/loop/genai-spans.d.ts +0 -47
- package/dist/loop/genai-spans.js +0 -134
- package/dist/loop/run-agent.d.ts +0 -236
- package/dist/loop/run-agent.js +0 -1110
- package/dist/loop/run-step.d.ts +0 -29
- package/dist/loop/run-step.js +0 -34
- package/dist/loop/run-to-terminal.d.ts +0 -66
- package/dist/loop/run-to-terminal.js +0 -90
- package/dist/loop/tool-mask.d.ts +0 -23
- package/dist/loop/tool-mask.js +0 -46
- package/dist/providers/streaming-chat.d.ts +0 -32
- package/dist/providers/streaming-chat.js +0 -91
- package/dist/tasks/derive-table-exec.d.ts +0 -54
- package/dist/tasks/derive-table-exec.js +0 -86
- package/dist/workflows/suspension.d.ts +0 -32
- package/dist/workflows/suspension.js +0 -38
|
@@ -5,10 +5,12 @@
|
|
|
5
5
|
* table that a block can bind: a join, a pivot, or an aggregate. The agent writes the script, and the record
|
|
6
6
|
* chains the derived table back to the evidence that made it.
|
|
7
7
|
*
|
|
8
|
-
* A session derivation is not an analysis run. It mints no run id,
|
|
8
|
+
* A session derivation is not an analysis run. It mints no run id, no mandate, and no artifact, and it writes
|
|
9
9
|
* under the session directory alone. The rails are the rails of the value tier (`tasks/extract-values.ts`):
|
|
10
|
-
*
|
|
11
|
-
*
|
|
10
|
+
* one ephemeral container inside the step of the call (`sandbox/step-sandbox.ts`), which goes away with the
|
|
11
|
+
* work. The container stays until the record lands, thus a rerun of the step before the record adopts the
|
|
12
|
+
* container and the exec record of the first attempt, and the script does not run again. A rerun after the
|
|
13
|
+
* record finds the record of its call, and it gives that table back.
|
|
12
14
|
*
|
|
13
15
|
* The container mounts the analysis tree read-only, and one write mount covers the `derived/` directory of
|
|
14
16
|
* the session alone. The script writes its table into that mount directly, thus a large table makes no
|
|
@@ -25,21 +27,13 @@
|
|
|
25
27
|
* The tool refuses an output name that the membership already holds. A record is immutable, and a second
|
|
26
28
|
* derivation of one table takes a new name.
|
|
27
29
|
*
|
|
28
|
-
* A composition with no sandbox client
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
* The container runs behind a seam, and never in the turn. An exec is a durable step of a workflow, and a
|
|
33
|
-
* report turn is not a workflow. Thus the tool takes an injected runner, and a registered workflow owns the
|
|
34
|
-
* container. The tool holds no sandbox client, and it imports no DBOS.
|
|
30
|
+
* A composition with no sandbox client cannot derive at all. The tool reports that condition one time, up
|
|
31
|
+
* front, the same discipline as the eyes. A per-attempt failure would instead read as a transient fault, and
|
|
32
|
+
* it would invite a repeat of a call that can never pass.
|
|
35
33
|
*/
|
|
36
|
-
import { type Result } from "neverthrow";
|
|
37
34
|
import { z } from "zod";
|
|
38
|
-
import type { RunSession } from "../../auth/types.js";
|
|
39
|
-
import type { Suspension } from "../../workflows/suspension.js";
|
|
40
|
-
import type { RunAuthorizer } from "../../execution/run-authorizer.js";
|
|
41
35
|
import { type Logger } from "../../lib/logger.js";
|
|
42
|
-
import type {
|
|
36
|
+
import type { SandboxClient } from "../../sandbox/client.js";
|
|
43
37
|
import type { ExecRequest, ExecResult } from "../../sandbox/types.js";
|
|
44
38
|
import type { DerivationSource, ReportSessionStateStore } from "../../state/report-session-state.js";
|
|
45
39
|
import { type ResolveWorkspaceRoot } from "../../workspace/paths.js";
|
|
@@ -112,41 +106,31 @@ export type DeriveTableResult = {
|
|
|
112
106
|
* The construction deps of the derivation tool.
|
|
113
107
|
*
|
|
114
108
|
* `derivations` is the append side of the durable session state, thus the record lands beside the document
|
|
115
|
-
* and the pin. `sandboxClient`
|
|
116
|
-
*
|
|
117
|
-
*
|
|
109
|
+
* and the pin. `sandboxClient` is the rail of the exec, and a composition that binds none leaves the session
|
|
110
|
+
* with no derivation at all. `resolveWorkspaceRoot` maps the analysis of the call onto its workspace root,
|
|
111
|
+
* thus one singleton tool serves every analysis.
|
|
118
112
|
*/
|
|
119
|
-
export
|
|
113
|
+
export type DeriveTableToolDeps = {
|
|
120
114
|
readonly gateway: ReportSessionStateGateway;
|
|
121
115
|
readonly resolveWorkspaceRoot: ResolveWorkspaceRoot;
|
|
122
116
|
readonly derivations: Pick<ReportSessionStateStore, "appendDerivation">;
|
|
123
|
-
readonly
|
|
124
|
-
readonly runAuthorizer?: RunAuthorizer;
|
|
117
|
+
readonly sandboxClient?: SandboxClient;
|
|
125
118
|
/** The provenance seam; an unbound session emit emits nothing and the derivation runs the same. */
|
|
126
119
|
readonly provenance?: ProvenanceSeam;
|
|
127
120
|
readonly logger?: Logger;
|
|
128
|
-
}
|
|
129
|
-
/** The synthetic run id and step id of one derivation. Both are constants, and neither names a run row. */
|
|
130
|
-
export declare const DERIVE_RUN_LITERAL: "derive-table";
|
|
131
|
-
export declare const DERIVE_STEP_LITERAL: "derive";
|
|
132
|
-
/** The exec budget of one derivation. It matches the budget of the value tier. */
|
|
133
|
-
export declare const DERIVATION_DEADLINE_MS = 300000;
|
|
134
|
-
/**
|
|
135
|
-
* The container size of one derivation. A join or a pivot loads each declared input into pandas at one
|
|
136
|
-
* time, thus the container needs the headroom of the value tier.
|
|
137
|
-
*/
|
|
138
|
-
export declare const DERIVATION_RESOURCES: ResourceSpec;
|
|
121
|
+
};
|
|
139
122
|
/** The environment variable that carries the declared inputs into the container. */
|
|
140
123
|
export declare const DERIVE_INPUT_ENV = "DERIVE_INPUTS";
|
|
141
124
|
/** The environment variable that carries the container path of the output file into the container. */
|
|
142
125
|
export declare const DERIVE_OUTPUT_ENV = "DERIVE_OUTPUT";
|
|
143
126
|
/** One declared input, as the container reads it: the mounted path of the file, and its pinned hash. */
|
|
144
|
-
export
|
|
127
|
+
export type DerivationInputMount = {
|
|
145
128
|
readonly path: string;
|
|
146
129
|
readonly hash: string;
|
|
147
|
-
}
|
|
130
|
+
};
|
|
148
131
|
/**
|
|
149
|
-
* Build the sandbox exec of one derivation. The command
|
|
132
|
+
* Build the sandbox exec of one derivation. The command clears the output path, and then it runs the script
|
|
133
|
+
* of the agent through `python3 -c`.
|
|
150
134
|
*
|
|
151
135
|
* The working directory is the write mount, thus the script writes its table beside where it stands. Each
|
|
152
136
|
* declared input rides as its mounted path, thus the script opens the file wherever it works from. The
|
|
@@ -170,30 +154,6 @@ export declare function buildDerivationExec(args: {
|
|
|
170
154
|
* The function is pure, thus a test asserts the mapping without a sandbox.
|
|
171
155
|
*/
|
|
172
156
|
export declare function describeExecFailure(result: ExecResult): string | undefined;
|
|
173
|
-
/**
|
|
174
|
-
* The exec of one derivation, as a registered workflow reads it.
|
|
175
|
-
*
|
|
176
|
-
* Each field is plain data, thus the value crosses the workflow boundary and it survives a replay. The
|
|
177
|
-
* paths are container paths already: the host maps them one time, before the start.
|
|
178
|
-
*/
|
|
179
|
-
export interface DeriveTableExecInput {
|
|
180
|
-
readonly analysisId: string;
|
|
181
|
-
readonly runSession: RunSession;
|
|
182
|
-
readonly executionId: string;
|
|
183
|
-
readonly script: string;
|
|
184
|
-
readonly writableTail: string;
|
|
185
|
-
readonly workingDir: string;
|
|
186
|
-
readonly inputs: readonly DerivationInputMount[];
|
|
187
|
-
readonly output: string;
|
|
188
|
-
}
|
|
189
|
-
/**
|
|
190
|
-
* Run one derivation exec and give the terminal result back.
|
|
191
|
-
*
|
|
192
|
-
* The composition realizes it over a registered workflow, thus the container and its exec live inside a
|
|
193
|
-
* workflow. A fault of the sandbox rejects the promise, and the tool turns that rejection into one short
|
|
194
|
-
* detail.
|
|
195
|
-
*/
|
|
196
|
-
export type DeriveTableRunner = (input: DeriveTableExecInput) => Promise<Result<ExecResult, Suspension>>;
|
|
197
157
|
/**
|
|
198
158
|
* Make the derivation tool over the session-state gateway, the derivation ledger, and the sandbox rails.
|
|
199
159
|
*
|
|
@@ -5,10 +5,12 @@
|
|
|
5
5
|
* table that a block can bind: a join, a pivot, or an aggregate. The agent writes the script, and the record
|
|
6
6
|
* chains the derived table back to the evidence that made it.
|
|
7
7
|
*
|
|
8
|
-
* A session derivation is not an analysis run. It mints no run id,
|
|
8
|
+
* A session derivation is not an analysis run. It mints no run id, no mandate, and no artifact, and it writes
|
|
9
9
|
* under the session directory alone. The rails are the rails of the value tier (`tasks/extract-values.ts`):
|
|
10
|
-
*
|
|
11
|
-
*
|
|
10
|
+
* one ephemeral container inside the step of the call (`sandbox/step-sandbox.ts`), which goes away with the
|
|
11
|
+
* work. The container stays until the record lands, thus a rerun of the step before the record adopts the
|
|
12
|
+
* container and the exec record of the first attempt, and the script does not run again. A rerun after the
|
|
13
|
+
* record finds the record of its call, and it gives that table back.
|
|
12
14
|
*
|
|
13
15
|
* The container mounts the analysis tree read-only, and one write mount covers the `derived/` directory of
|
|
14
16
|
* the session alone. The script writes its table into that mount directly, thus a large table makes no
|
|
@@ -25,24 +27,19 @@
|
|
|
25
27
|
* The tool refuses an output name that the membership already holds. A record is immutable, and a second
|
|
26
28
|
* derivation of one table takes a new name.
|
|
27
29
|
*
|
|
28
|
-
* A composition with no sandbox client
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
* The container runs behind a seam, and never in the turn. An exec is a durable step of a workflow, and a
|
|
33
|
-
* report turn is not a workflow. Thus the tool takes an injected runner, and a registered workflow owns the
|
|
34
|
-
* container. The tool holds no sandbox client, and it imports no DBOS.
|
|
30
|
+
* A composition with no sandbox client cannot derive at all. The tool reports that condition one time, up
|
|
31
|
+
* front, the same discipline as the eyes. A per-attempt failure would instead read as a transient fault, and
|
|
32
|
+
* it would invite a repeat of a call that can never pass.
|
|
35
33
|
*/
|
|
36
34
|
import { ok } from "neverthrow";
|
|
37
|
-
import { unlink } from "node:fs/promises";
|
|
38
35
|
import { join } from "node:path";
|
|
39
36
|
import { z } from "zod";
|
|
40
37
|
import { createNoopLogger } from "../../lib/console-logger.js";
|
|
41
|
-
import { deliverNotice, passGate } from "../../lib/hooks.js";
|
|
42
38
|
import { classifyWithinRoot, computeSha256, computeSha256File } from "../../lib/fs-helpers.js";
|
|
43
39
|
import { defaultErrorFields } from "../../lib/logger.js";
|
|
44
40
|
import { snapshotEntry } from "../../report-model/reference-resolver.js";
|
|
45
|
-
import {
|
|
41
|
+
import { isWorkflowCancellation } from "../../runtime/dbos.js";
|
|
42
|
+
import { passSpawnSession, withStepSandbox } from "../../sandbox/step-sandbox.js";
|
|
46
43
|
import { isSafeId, reportSessionDerivedDir, toSandboxPath } from "../../workspace/paths.js";
|
|
47
44
|
import { defineTool } from "../define-tool.js";
|
|
48
45
|
import { openReportThread } from "../report-authoring/authoring-tools.js";
|
|
@@ -55,17 +52,17 @@ const deriveTableInput = z.object({
|
|
|
55
52
|
output: z.string().min(1),
|
|
56
53
|
});
|
|
57
54
|
/** The synthetic run id and step id of one derivation. Both are constants, and neither names a run row. */
|
|
58
|
-
|
|
59
|
-
|
|
55
|
+
const DERIVE_RUN_LITERAL = "derive-table";
|
|
56
|
+
const DERIVE_STEP_LITERAL = "derive";
|
|
60
57
|
/** The provenance agent id. No agent loop runs in the container, thus this names the derivation pass. */
|
|
61
58
|
const DERIVE_AGENT_ID = "table-deriver";
|
|
62
59
|
/** The exec budget of one derivation. It matches the budget of the value tier. */
|
|
63
|
-
|
|
60
|
+
const DERIVATION_DEADLINE_MS = 300_000;
|
|
64
61
|
/**
|
|
65
62
|
* The container size of one derivation. A join or a pivot loads each declared input into pandas at one
|
|
66
63
|
* time, thus the container needs the headroom of the value tier.
|
|
67
64
|
*/
|
|
68
|
-
|
|
65
|
+
const DERIVATION_RESOURCES = { cpu: 2, memoryGb: 8 };
|
|
69
66
|
/** The cap of the script, in bytes. A reshaping script sits far under it, and the command line carries it. */
|
|
70
67
|
const SCRIPT_CAP_BYTES = 64 * 1024;
|
|
71
68
|
/** The cap of the declared inputs. One derivation reads the evidence of a few artifacts, and never a tree. */
|
|
@@ -74,12 +71,23 @@ const INPUT_CAP = 20;
|
|
|
74
71
|
export const DERIVE_INPUT_ENV = "DERIVE_INPUTS";
|
|
75
72
|
/** The environment variable that carries the container path of the output file into the container. */
|
|
76
73
|
export const DERIVE_OUTPUT_ENV = "DERIVE_OUTPUT";
|
|
74
|
+
/**
|
|
75
|
+
* The shell of the exec: clear the output path, then run the script. The script rides as the first
|
|
76
|
+
* positional argument, thus `python3 -c` gets it byte for byte.
|
|
77
|
+
*
|
|
78
|
+
* The clearance belongs to the exec, and not to the host. A failed derivation can leave a file at the name
|
|
79
|
+
* that this one declares, and a script that writes nothing must not adopt those bytes as its table.
|
|
80
|
+
* sandbox-server runs one exec id one time, thus a rerun that attaches to the exec of an earlier attempt
|
|
81
|
+
* keeps the table of that exec. A clearance on the host would remove it.
|
|
82
|
+
*/
|
|
83
|
+
const CLEAR_THEN_RUN = `rm -f -- "$${DERIVE_OUTPUT_ENV}" && exec python3 -c "$1"`;
|
|
77
84
|
/** The cap of the failure detail that the tool copies out of the standard error of the script. */
|
|
78
85
|
const STDERR_TAIL_CAP = 2_000;
|
|
79
86
|
/** The line that the agent reads when the composition binds no sandbox rails. */
|
|
80
87
|
const NO_SANDBOX_DETAIL = "the composition gives no sandbox, thus this session cannot derive a table";
|
|
81
88
|
/**
|
|
82
|
-
* Build the sandbox exec of one derivation. The command
|
|
89
|
+
* Build the sandbox exec of one derivation. The command clears the output path, and then it runs the script
|
|
90
|
+
* of the agent through `python3 -c`.
|
|
83
91
|
*
|
|
84
92
|
* The working directory is the write mount, thus the script writes its table beside where it stands. Each
|
|
85
93
|
* declared input rides as its mounted path, thus the script opens the file wherever it works from. The
|
|
@@ -89,7 +97,7 @@ const NO_SANDBOX_DETAIL = "the composition gives no sandbox, thus this session c
|
|
|
89
97
|
*/
|
|
90
98
|
export function buildDerivationExec(args) {
|
|
91
99
|
return {
|
|
92
|
-
command: ["
|
|
100
|
+
command: ["sh", "-c", CLEAR_THEN_RUN, "derive_table", args.script],
|
|
93
101
|
cwd: args.workingDir,
|
|
94
102
|
env: {
|
|
95
103
|
[DERIVE_INPUT_ENV]: JSON.stringify(args.inputs.map((input) => ({ path: input.path, hash: input.hash }))),
|
|
@@ -130,7 +138,20 @@ export function describeExecFailure(result) {
|
|
|
130
138
|
export function createDeriveTableTool(deps) {
|
|
131
139
|
const logger = (deps.logger ?? createNoopLogger()).named("derive-table");
|
|
132
140
|
const observe = bindSessionEmit(deps.provenance, logger);
|
|
133
|
-
const
|
|
141
|
+
const observeDerived = (analysisId, threadId, result) => {
|
|
142
|
+
if (result.outcome !== "derived")
|
|
143
|
+
return;
|
|
144
|
+
observe({
|
|
145
|
+
type: "run-derivation",
|
|
146
|
+
analysisId,
|
|
147
|
+
threadId,
|
|
148
|
+
outputPath: result.path,
|
|
149
|
+
outputHash: result.hash,
|
|
150
|
+
scriptHash: result.scriptHash,
|
|
151
|
+
sources: result.sources,
|
|
152
|
+
});
|
|
153
|
+
};
|
|
154
|
+
const { sandboxClient } = deps;
|
|
134
155
|
return defineTool({
|
|
135
156
|
id: "derive_table",
|
|
136
157
|
description: "Derive one table from the pinned evidence with a Python script, and pin the result to this session. " +
|
|
@@ -149,15 +170,14 @@ export function createDeriveTableTool(deps) {
|
|
|
149
170
|
"A failed script gives back exec-failed with the tail of its standard error. " +
|
|
150
171
|
"The outcome unavailable means that this host cannot run a derivation, and a repeat gives the same outcome.",
|
|
151
172
|
inputSchema: deriveTableInput,
|
|
152
|
-
executionMode: "inline",
|
|
153
173
|
describeCall: (input) => `derive ${input.output}`,
|
|
154
174
|
// The derived path is the one durable product of the call, thus the derived arm names it. Each other
|
|
155
175
|
// arm is a condition that refused, and the kind of the arm is what a watcher must read.
|
|
156
176
|
describeResult: (_input, result) => (result.outcome === "derived" ? result.path : result.outcome),
|
|
157
177
|
execute: async (input, ctx) => {
|
|
158
178
|
// The check runs before every read, thus one clear signal replaces a failure for each attempt.
|
|
159
|
-
// It also narrows the
|
|
160
|
-
if (
|
|
179
|
+
// It also narrows the rail below, thus the exec needs no assertion.
|
|
180
|
+
if (sandboxClient === undefined) {
|
|
161
181
|
logger.warn("the composition gives no sandbox, thus no derivation can run");
|
|
162
182
|
return ok({ outcome: "unavailable", detail: NO_SANDBOX_DETAIL });
|
|
163
183
|
}
|
|
@@ -165,7 +185,7 @@ export function createDeriveTableTool(deps) {
|
|
|
165
185
|
if (opened.isErr()) {
|
|
166
186
|
return ok({ outcome: "refused", refusal: opened.error });
|
|
167
187
|
}
|
|
168
|
-
const { threadId, analysisId, state } = opened.value;
|
|
188
|
+
const { threadId, analysisId, state, derivations } = opened.value;
|
|
169
189
|
const bytes = Buffer.byteLength(input.script, "utf8");
|
|
170
190
|
if (bytes > SCRIPT_CAP_BYTES) {
|
|
171
191
|
return ok({
|
|
@@ -210,15 +230,6 @@ export function createDeriveTableTool(deps) {
|
|
|
210
230
|
// compose from the session-directory builder, thus the layout has one owner.
|
|
211
231
|
const writableTail = reportSessionDerivedDir(threadId);
|
|
212
232
|
const outputPath = `${writableTail}/${input.output}`;
|
|
213
|
-
// The served membership carries each derivation of the session, thus this one test refuses a
|
|
214
|
-
// repeated name and a collision with a pinned artifact alike.
|
|
215
|
-
if (snapshotEntry(state.snapshot, outputPath) !== undefined) {
|
|
216
|
-
return ok({
|
|
217
|
-
outcome: "repeated-name",
|
|
218
|
-
outputPath,
|
|
219
|
-
detail: `the evidence of this session already holds ${outputPath}, thus this derivation takes a new name`,
|
|
220
|
-
});
|
|
221
|
-
}
|
|
222
233
|
let root;
|
|
223
234
|
try {
|
|
224
235
|
root = await deps.resolveWorkspaceRoot(analysisId);
|
|
@@ -227,59 +238,56 @@ export function createDeriveTableTool(deps) {
|
|
|
227
238
|
logger.warn("the workspace root did not resolve", { threadId, analysisId, ...defaultErrorFields(cause) });
|
|
228
239
|
return ok({ outcome: "unavailable", detail: "the workspace root did not resolve, thus the derived table has no place to land" });
|
|
229
240
|
}
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
241
|
+
// A rerun of a call whose record landed gives that record back. The membership holds the output of
|
|
242
|
+
// the record by now, thus the name test below would refuse the call its own table.
|
|
243
|
+
const recorded = derivations.find((record) => record.toolCallId === ctx.invocationId);
|
|
244
|
+
if (recorded !== undefined) {
|
|
245
|
+
const replayed = {
|
|
246
|
+
outcome: "derived",
|
|
247
|
+
path: recorded.outputPath,
|
|
248
|
+
hash: recorded.outputHash,
|
|
249
|
+
scriptHash: recorded.scriptHash,
|
|
250
|
+
sources: [...recorded.sources],
|
|
251
|
+
columns: await readColumnsQuietly(outputPath, join(root, outputPath), logger),
|
|
252
|
+
};
|
|
253
|
+
// A crash between the record and the emit of the earlier run loses its event, thus the rerun
|
|
254
|
+
// emits again. A consumer can get the act two times, never zero times.
|
|
255
|
+
observeDerived(analysisId, threadId, replayed);
|
|
256
|
+
return ok(replayed);
|
|
242
257
|
}
|
|
243
|
-
|
|
244
|
-
//
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
try {
|
|
249
|
-
result = await derive({
|
|
250
|
-
runDerivation,
|
|
251
|
-
derivations: deps.derivations,
|
|
252
|
-
root,
|
|
253
|
-
threadId,
|
|
254
|
-
analysisId,
|
|
255
|
-
runSession: authorization.runSession,
|
|
256
|
-
script: input.script,
|
|
257
|
-
sources,
|
|
258
|
-
writableTail,
|
|
258
|
+
// The served membership carries each derivation of the session, thus this one test refuses a
|
|
259
|
+
// repeated name and a collision with a pinned artifact alike.
|
|
260
|
+
if (snapshotEntry(state.snapshot, outputPath) !== undefined) {
|
|
261
|
+
return ok({
|
|
262
|
+
outcome: "repeated-name",
|
|
259
263
|
outputPath,
|
|
260
|
-
|
|
261
|
-
logger,
|
|
264
|
+
detail: `the evidence of this session already holds ${outputPath}, thus this derivation takes a new name`,
|
|
262
265
|
});
|
|
263
|
-
// The record of the derivation lands before this point, thus the event states a table that
|
|
264
|
-
// the session already holds as evidence. Each other arm derived nothing.
|
|
265
|
-
if (result.outcome === "derived") {
|
|
266
|
-
observe({
|
|
267
|
-
type: "run-derivation",
|
|
268
|
-
analysisId,
|
|
269
|
-
threadId,
|
|
270
|
-
outputPath: result.path,
|
|
271
|
-
outputHash: result.hash,
|
|
272
|
-
scriptHash: result.scriptHash,
|
|
273
|
-
sources: result.sources,
|
|
274
|
-
});
|
|
275
|
-
}
|
|
276
|
-
return ok(result);
|
|
277
|
-
}
|
|
278
|
-
finally {
|
|
279
|
-
// The revoke is a notice: its failure changes no outcome of the call, thus it reaches the log
|
|
280
|
-
// alone. An absent result means that the work threw, and a throw is a failed derivation.
|
|
281
|
-
await deliverNotice(logger.with({ threadId, analysisId }), "RunAuthorizer.revoke", runAuthorizer.revoke(authorization, result?.outcome === "derived" ? "derive-table-completed" : "derive-table-failed"));
|
|
282
266
|
}
|
|
267
|
+
const result = await derive({
|
|
268
|
+
sandboxClient,
|
|
269
|
+
session: passSpawnSession(ctx.session, {
|
|
270
|
+
analysisId,
|
|
271
|
+
runId: DERIVE_RUN_LITERAL,
|
|
272
|
+
stepId: DERIVE_STEP_LITERAL,
|
|
273
|
+
agentId: DERIVE_AGENT_ID,
|
|
274
|
+
}),
|
|
275
|
+
derivations: deps.derivations,
|
|
276
|
+
root,
|
|
277
|
+
threadId,
|
|
278
|
+
analysisId,
|
|
279
|
+
toolCallId: ctx.invocationId,
|
|
280
|
+
script: input.script,
|
|
281
|
+
sources,
|
|
282
|
+
writableTail,
|
|
283
|
+
outputPath,
|
|
284
|
+
outputName: input.output,
|
|
285
|
+
logger,
|
|
286
|
+
});
|
|
287
|
+
// The record of the derivation lands before this point, thus the event states a table that the
|
|
288
|
+
// session already holds as evidence. Each other arm derived nothing.
|
|
289
|
+
observeDerived(analysisId, threadId, result);
|
|
290
|
+
return ok(result);
|
|
283
291
|
},
|
|
284
292
|
});
|
|
285
293
|
}
|
|
@@ -288,62 +296,51 @@ export function createDeriveTableTool(deps) {
|
|
|
288
296
|
*
|
|
289
297
|
* The order is the order of the evidence. The script writes into the write mount, the host classifies the
|
|
290
298
|
* file, the hash comes off the disk, and the record lands last. Thus the recorded hash is the hash of the
|
|
291
|
-
* file that a verifier reads.
|
|
299
|
+
* file that a verifier reads. The container goes away after the record.
|
|
292
300
|
*
|
|
293
301
|
* The classification is the guard of the read. A script can leave a symbolic link at the output name, and a
|
|
294
302
|
* link that resolves outside the tree would otherwise carry a host file into the evidence of the session.
|
|
295
|
-
*
|
|
296
|
-
* The output path clears before the exec. The host owns the `derived/` directory, and a failed attempt can
|
|
297
|
-
* leave a file at the name that this attempt declares. Without the clearance a script that writes nothing
|
|
298
|
-
* would adopt those bytes as its own table, and the record would chain a script to a file that it never
|
|
299
|
-
* wrote. A clearance fault refuses the derivation, because the same doubt stands.
|
|
300
303
|
*/
|
|
301
304
|
async function derive(args) {
|
|
302
|
-
const executionId = generateExecutionId(DERIVE_AGENT_ID);
|
|
303
305
|
const absolute = join(args.root, args.outputPath);
|
|
304
306
|
// The container sees the tree at its own mount point, thus each path that the script reads maps through
|
|
305
|
-
// the one host-to-container mapper and never through a formula here.
|
|
306
|
-
|
|
307
|
-
//
|
|
308
|
-
|
|
309
|
-
try {
|
|
310
|
-
await unlink(absolute);
|
|
311
|
-
}
|
|
312
|
-
catch (cause) {
|
|
313
|
-
if (cause.code !== "ENOENT") {
|
|
314
|
-
args.logger.error("the output path did not clear before the derivation", { threadId: args.threadId, ...defaultErrorFields(cause) });
|
|
315
|
-
return { outcome: "exec-failed", detail: `${args.outputName} already holds a file that did not clear, thus this derivation takes a new name` };
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
// The path mapper refuses a stored path that escapes the root, with a throw. It runs before the try,
|
|
319
|
-
// thus that refusal stays a throw and it never reads as a fault of the container.
|
|
320
|
-
const execInput = {
|
|
321
|
-
analysisId: args.analysisId,
|
|
322
|
-
runSession: args.runSession,
|
|
323
|
-
executionId,
|
|
307
|
+
// the one host-to-container mapper and never through a formula here. The mapper refuses a stored path
|
|
308
|
+
// that escapes the root with a throw. It runs before the try, thus that refusal stays a throw and it never
|
|
309
|
+
// reads as a fault of the container.
|
|
310
|
+
const request = buildDerivationExec({
|
|
324
311
|
script: args.script,
|
|
325
|
-
|
|
326
|
-
workingDir,
|
|
312
|
+
workingDir: toSandboxPath(args.root, args.analysisId, join(args.root, args.writableTail)),
|
|
327
313
|
inputs: args.sources.map((source) => ({ path: toSandboxPath(args.root, args.analysisId, join(args.root, source.path)), hash: source.hash })),
|
|
328
314
|
output: toSandboxPath(args.root, args.analysisId, absolute),
|
|
329
|
-
};
|
|
315
|
+
});
|
|
330
316
|
let ran;
|
|
331
317
|
try {
|
|
332
|
-
ran = await args.
|
|
318
|
+
ran = await withStepSandbox(args.sandboxClient, { session: args.session, spec: { resources: DERIVATION_RESOURCES, writableTail: args.writableTail } }, args.logger, async (exec) => {
|
|
319
|
+
const failure = describeExecFailure(await exec(request, DERIVATION_DEADLINE_MS));
|
|
320
|
+
if (failure !== undefined) {
|
|
321
|
+
return { outcome: "exec-failed", detail: failure };
|
|
322
|
+
}
|
|
323
|
+
return recordDerivedTable({ ...args, absolute });
|
|
324
|
+
});
|
|
333
325
|
}
|
|
334
326
|
catch (cause) {
|
|
327
|
+
if (isWorkflowCancellation(cause))
|
|
328
|
+
throw cause;
|
|
335
329
|
args.logger.error("the derivation exec did not complete", { threadId: args.threadId, ...defaultErrorFields(cause) });
|
|
336
330
|
return { outcome: "exec-failed", detail: "the derivation exec did not complete" };
|
|
337
331
|
}
|
|
338
332
|
if (ran.isErr()) {
|
|
339
|
-
return {
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
return { outcome: "exec-failed", detail: failure };
|
|
333
|
+
return {
|
|
334
|
+
outcome: "suspended",
|
|
335
|
+
reason: ran.error.reason,
|
|
336
|
+
detail: `the host refused the sandbox (${ran.error.reason}), thus the derivation did not run`,
|
|
337
|
+
};
|
|
345
338
|
}
|
|
346
|
-
|
|
339
|
+
return ran.value;
|
|
340
|
+
}
|
|
341
|
+
/** Classify, hash, and record the table that a green script wrote. */
|
|
342
|
+
async function recordDerivedTable(args) {
|
|
343
|
+
const verdict = await classifyWithinRoot(args.root, args.absolute).catch((cause) => {
|
|
347
344
|
args.logger.error("the derived table did not classify", { threadId: args.threadId, ...defaultErrorFields(cause) });
|
|
348
345
|
return "escaped";
|
|
349
346
|
});
|
|
@@ -361,7 +358,7 @@ async function derive(args) {
|
|
|
361
358
|
}
|
|
362
359
|
let outputHash;
|
|
363
360
|
try {
|
|
364
|
-
outputHash = await computeSha256File(absolute);
|
|
361
|
+
outputHash = await computeSha256File(args.absolute);
|
|
365
362
|
}
|
|
366
363
|
catch (cause) {
|
|
367
364
|
args.logger.error("the derived table did not hash", { threadId: args.threadId, ...defaultErrorFields(cause) });
|
|
@@ -373,6 +370,7 @@ async function derive(args) {
|
|
|
373
370
|
sources: [...args.sources],
|
|
374
371
|
scriptHash: computeSha256(Buffer.from(args.script, "utf8")),
|
|
375
372
|
script: args.script,
|
|
373
|
+
toolCallId: args.toolCallId,
|
|
376
374
|
};
|
|
377
375
|
const appended = await args.derivations.appendDerivation(args.threadId, record);
|
|
378
376
|
if (appended.isErr()) {
|
|
@@ -394,14 +392,14 @@ async function derive(args) {
|
|
|
394
392
|
}
|
|
395
393
|
// The columns describe the derived table the same way as the listing describes a pinned one. A file that
|
|
396
394
|
// gives no header gives no columns, and absence is a normal condition here.
|
|
397
|
-
const columns = await readColumnsQuietly(args.outputPath, absolute, args.logger);
|
|
395
|
+
const columns = await readColumnsQuietly(args.outputPath, args.absolute, args.logger);
|
|
398
396
|
return {
|
|
399
397
|
outcome: "derived",
|
|
400
398
|
path: args.outputPath,
|
|
401
399
|
hash: outputHash,
|
|
402
400
|
scriptHash: record.scriptHash,
|
|
403
401
|
sources: [...args.sources],
|
|
404
|
-
|
|
402
|
+
columns,
|
|
405
403
|
};
|
|
406
404
|
}
|
|
407
405
|
/**
|
|
@@ -56,12 +56,12 @@ import { type ChromeConfig } from "../../lib/chrome.js";
|
|
|
56
56
|
import type { GateFailure } from "../../lib/hooks.js";
|
|
57
57
|
import { type AcquireEyes } from "../../lib/eyes.js";
|
|
58
58
|
import { type Logger } from "../../lib/logger.js";
|
|
59
|
-
import { type CaptureCoverage, type CapturePage
|
|
59
|
+
import { type CaptureCoverage, type CapturePage } from "../../lib/page-capture.js";
|
|
60
60
|
import { type ResolveWorkspaceRoot } from "../../workspace/paths.js";
|
|
61
61
|
import { type Tool } from "../define-tool.js";
|
|
62
62
|
import { type ReportSessionStateGateway, type SessionRefusal } from "../report-authoring/authoring-tools.js";
|
|
63
63
|
import { type ConsoleErrorEntry, type FailedRequestEntry } from "./page-faults.js";
|
|
64
|
-
export type { CaptureCoverage, CapturePage, FailedRequest, PageCapture };
|
|
64
|
+
export type { CaptureCoverage, CapturePage, FailedRequest, PageCapture } from "../../lib/page-capture.js";
|
|
65
65
|
/**
|
|
66
66
|
* The URL formation of one look. It maps the page of the thread onto the URL that the browser opens.
|
|
67
67
|
* A composition whose browser cannot reach the workspace tree binds a resolver that names a served URL.
|
|
@@ -80,11 +80,11 @@ declare const examinePageInput: z.ZodObject<{
|
|
|
80
80
|
}, z.core.$strip>;
|
|
81
81
|
export type ExaminePageInput = z.infer<typeof examinePageInput>;
|
|
82
82
|
/** The document range of one slice of a tiled look, in the order that the pictures ride. */
|
|
83
|
-
export
|
|
83
|
+
export type ExaminedTile = {
|
|
84
84
|
index: number;
|
|
85
85
|
fromY: number;
|
|
86
86
|
toY: number;
|
|
87
|
-
}
|
|
87
|
+
};
|
|
88
88
|
/**
|
|
89
89
|
* The typed outcome of the eyes tool. Each arm is ok-channel data, thus the tool never throws for a
|
|
90
90
|
* degraded condition. `examined` carries the coverage of the look, the digest of the console errors and the
|
|
@@ -137,7 +137,7 @@ export type ExaminePageResult = {
|
|
|
137
137
|
* tree names a served URL instead. `capture` is optional and it replaces the whole transport, thus a test
|
|
138
138
|
* injects a seam that reads no browser.
|
|
139
139
|
*/
|
|
140
|
-
export
|
|
140
|
+
export type ExaminePageToolDeps = {
|
|
141
141
|
readonly gateway: ReportSessionStateGateway;
|
|
142
142
|
readonly resolveWorkspaceRoot: ResolveWorkspaceRoot;
|
|
143
143
|
readonly chrome: ChromeConfig;
|
|
@@ -154,7 +154,7 @@ export interface ExaminePageToolDeps {
|
|
|
154
154
|
readonly acquireMs?: number;
|
|
155
155
|
readonly releaseMs?: number;
|
|
156
156
|
};
|
|
157
|
-
}
|
|
157
|
+
};
|
|
158
158
|
/**
|
|
159
159
|
* Make the eyes tool over the session-state gateway, the workspace-root seam, and the eyes of the composition.
|
|
160
160
|
*
|