@inflexa-ai/harness 0.45.1 → 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 +9 -3
- package/dist/agents/conversation-agent.js +34 -33
- 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 +12 -14
- package/dist/agents/sandbox/shared.js +18 -12
- package/dist/agents/sandbox/types.d.ts +4 -4
- 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 +2 -2
- package/dist/agents/sandbox-catalog.js +3 -3
- package/dist/agents/system-prompt.d.ts +2 -2
- 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 +123 -100
- 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 +6 -6
- 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 +38 -24
- package/dist/contracts/chat-frame.d.ts +15 -5
- package/dist/contracts/chat-frame.js +64 -41
- 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 +2 -2
- 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 +30 -16
- package/dist/contracts/schemas/chat-events.js +15 -6
- package/dist/contracts/schemas/chat-parts.d.ts +175 -102
- package/dist/contracts/schemas/chat-parts.js +33 -7
- 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 +5 -6
- package/dist/execution/dbos-workflow-purger.js +8 -7
- 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 +7 -7
- package/dist/execution/run-canceler.js +14 -7
- package/dist/execution/run-end-record.d.ts +2 -3
- 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 +17 -20
- package/dist/index.js +25 -36
- 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 +9 -9
- package/dist/loop/compaction.js +1 -1
- 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 +29 -38
- 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 -4
- package/dist/memory/conversation-display-recorder.js +43 -24
- 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 +36 -21
- package/dist/memory/thread-history.js +78 -54
- 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 +12 -12
- package/dist/prompts/briefing.js +1 -1
- 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 +1 -4
- package/dist/provenance/types.d.ts +6 -6
- package/dist/providers/ai-sdk.d.ts +113 -62
- package/dist/providers/ai-sdk.js +283 -518
- 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 +55 -94
- package/dist/reference-data/catalog.d.ts +2 -15
- package/dist/reference-data/catalog.js +25 -8
- 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 +211 -233
- 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.js +15 -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 +343 -298
- package/dist/schemas/file-metadata.js +2 -4
- package/dist/schemas/plan-schemas.d.ts +31 -31
- 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 +19 -19
- package/dist/schemas/workflow-state.js +2 -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 +32 -19
- package/dist/state/artifacts.js +28 -5
- 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 +4 -4
- package/dist/state/index.js +2 -2
- 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 +30 -19
- package/dist/state/runs.js +43 -51
- 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 +20 -8
- package/dist/state/step-executions.js +6 -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 +9 -9
- package/dist/tools/ad-hoc-router.js +65 -52
- 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 +9 -5
- package/dist/tools/capability-data.js +2 -1
- 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 +19 -10
- package/dist/tools/execute-analysis.js +83 -62
- package/dist/tools/knowledge/check.d.ts +166 -44
- package/dist/tools/knowledge/check.js +5 -3
- package/dist/tools/knowledge/client.d.ts +31 -62
- package/dist/tools/knowledge/client.js +44 -27
- package/dist/tools/knowledge/environment.d.ts +6 -6
- package/dist/tools/knowledge/environment.js +18 -7
- package/dist/tools/knowledge/index.d.ts +2 -2
- package/dist/tools/knowledge/index.js +9 -9
- package/dist/tools/knowledge/local-slots.d.ts +4 -4
- package/dist/tools/knowledge/local-slots.js +11 -4
- package/dist/tools/knowledge/pin.d.ts +2 -2
- package/dist/tools/knowledge/recommend.d.ts +20 -45
- package/dist/tools/knowledge/recommend.js +27 -19
- package/dist/tools/knowledge/situation.d.ts +40 -40
- package/dist/tools/knowledge/situation.js +2 -9
- package/dist/tools/knowledge/skeleton.d.ts +4 -4
- package/dist/tools/knowledge/skeleton.js +10 -11
- package/dist/tools/knowledge/template.d.ts +20 -18
- package/dist/tools/knowledge/template.js +38 -32
- 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 +16 -16
- package/dist/tools/research/generate-plan.js +410 -374
- package/dist/tools/research/guarded-address.js +3 -2
- 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 +2 -2
- package/dist/tools/research/searxng-engine.js +6 -4
- package/dist/tools/research/web-fetch.d.ts +24 -21
- package/dist/tools/research/web-fetch.js +65 -74
- package/dist/tools/research/web-search.d.ts +26 -17
- package/dist/tools/research/web-search.js +26 -21
- 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 +17 -8
- package/dist/tools/sandbox/list-available-packages.js +31 -25
- package/dist/tools/sandbox/list-available-refs.d.ts +17 -14
- package/dist/tools/sandbox/list-available-refs.js +61 -36
- package/dist/tools/sandbox/report-blocker.d.ts +30 -37
- package/dist/tools/sandbox/report-blocker.js +23 -73
- 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 +5 -2
- package/dist/tools/terminal-text.js +35 -3
- package/dist/tools/workspace/decision-record.d.ts +4 -4
- package/dist/tools/workspace/decision-record.js +23 -13
- package/dist/tools/workspace/edit-file.d.ts +59 -20
- package/dist/tools/workspace/edit-file.js +81 -16
- package/dist/tools/workspace/execute-command.d.ts +15 -13
- package/dist/tools/workspace/execute-command.js +11 -9
- 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/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 +46 -62
- package/dist/workflows/execute-analysis.js +137 -219
- package/dist/workflows/pause.d.ts +71 -0
- package/dist/workflows/pause.js +173 -0
- package/dist/workflows/sandbox-step.d.ts +38 -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 +21 -22
- package/dist/loop/call-guard.d.ts +0 -50
- package/dist/loop/call-guard.js +0 -90
- 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 -245
- package/dist/loop/run-agent.js +0 -1124
- 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 -93
- 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
|
@@ -15,12 +15,19 @@
|
|
|
15
15
|
*
|
|
16
16
|
* The primitive admits a flat object input only. Thus a destination is four optional fields, and not a
|
|
17
17
|
* nested union. A conflict between the flat fields refuses before the core runs.
|
|
18
|
+
*
|
|
19
|
+
* Inside a durable step, a mutation stores its result for the thread and the step, in the transaction of
|
|
20
|
+
* the document and under the lock of the row. A rerun of the step after the landing, before its
|
|
21
|
+
* checkpoint, gives the stored result. Thus a rerun of `add_block` does not refuse its own block id, and a
|
|
22
|
+
* rerun of `remove_block` does not refuse its own removed target.
|
|
18
23
|
*/
|
|
19
24
|
import { err, ok } from "neverthrow";
|
|
20
25
|
import { basename } from "node:path";
|
|
21
26
|
import { z } from "zod";
|
|
22
27
|
import { createNoopLogger } from "../../lib/console-logger.js";
|
|
23
28
|
import { capCodePoints, DETAIL_NEEDLE_MAX_LENGTH } from "../../loop/tool-detail.js";
|
|
29
|
+
import { parseJsonAs } from "../../lib/parse-json.js";
|
|
30
|
+
import { parseUnknownRecord } from "../../lib/unknown-containers.js";
|
|
24
31
|
import { bindSessionEmit } from "../../provenance/seam.js";
|
|
25
32
|
import { isSafeId } from "../../workspace/paths.js";
|
|
26
33
|
import { addBlock, changeBlock, locate, moveBlock, removeBlock, setTitle, } from "../../report-model/draft-operations.js";
|
|
@@ -28,6 +35,7 @@ import { buildOutline, childOutline, readBlock } from "../../report-model/draft-
|
|
|
28
35
|
import { finishDraft } from "../../report-model/draft-finish.js";
|
|
29
36
|
import { AuthoringBlockSchema } from "../../report-model/authoring-grammar.js";
|
|
30
37
|
import { defineTool } from "../define-tool.js";
|
|
38
|
+
import { durableStepKey } from "../workspace/edit-file.js";
|
|
31
39
|
/**
|
|
32
40
|
* The block payload.
|
|
33
41
|
*
|
|
@@ -39,8 +47,8 @@ import { defineTool } from "../define-tool.js";
|
|
|
39
47
|
* The grammar is the authoring one, thus no artifact reference of the published schema carries a hash. The
|
|
40
48
|
* pinned snapshot owns that value, and the land path stamps it from the path.
|
|
41
49
|
*
|
|
42
|
-
* The `z.unknown()` member keeps the runtime parse permissive. Thus a malformed payload still reaches
|
|
43
|
-
* core, which parses it with the draft grammar and refuses `malformed-block` as typed data in the ok
|
|
50
|
+
* The `z.unknown()` member keeps the runtime parse permissive. Thus a malformed payload still reaches
|
|
51
|
+
* the core, which parses it with the draft grammar and refuses `malformed-block` as typed data in the ok
|
|
44
52
|
* channel. A strict input schema would turn that designed refusal into a hard input-validation error from
|
|
45
53
|
* the loop. A payload that carries a hash rides the same arm, and the stamp drops the value before the
|
|
46
54
|
* parse.
|
|
@@ -98,6 +106,33 @@ const setTitleInput = z.object({
|
|
|
98
106
|
title: z.string().min(1).describe("The title of the whole report."),
|
|
99
107
|
});
|
|
100
108
|
const finishDraftInput = z.object({});
|
|
109
|
+
/** Each kind of a draft block. The record type names each kind, thus a new kind fails the build here. */
|
|
110
|
+
const DRAFT_BLOCK_KINDS = {
|
|
111
|
+
section: true,
|
|
112
|
+
text: true,
|
|
113
|
+
claim: true,
|
|
114
|
+
metric: true,
|
|
115
|
+
table: true,
|
|
116
|
+
chart: true,
|
|
117
|
+
figure: true,
|
|
118
|
+
citation: true,
|
|
119
|
+
};
|
|
120
|
+
/** The events that a stored result carries. The harness wrote each one, thus a check of the event type is enough. */
|
|
121
|
+
const StoredEventsSchema = z.object({
|
|
122
|
+
events: z.array(z.custom((value) => z.object({ type: z.string() }).safeParse(value).success)),
|
|
123
|
+
});
|
|
124
|
+
const LandedResultSchema = z.object({
|
|
125
|
+
applied: z.literal(true),
|
|
126
|
+
changed: z.array(z.object({
|
|
127
|
+
parentId: z.string().optional(),
|
|
128
|
+
children: z.array(z.object({
|
|
129
|
+
id: z.string(),
|
|
130
|
+
kind: z.custom((value) => typeof value === "string" && Object.hasOwn(DRAFT_BLOCK_KINDS, value)),
|
|
131
|
+
depth: z.number(),
|
|
132
|
+
label: z.string(),
|
|
133
|
+
})),
|
|
134
|
+
})),
|
|
135
|
+
});
|
|
101
136
|
/**
|
|
102
137
|
* Resolve the report thread of a call, and load its state through the gateway.
|
|
103
138
|
*
|
|
@@ -113,12 +148,12 @@ const finishDraftInput = z.object({});
|
|
|
113
148
|
* The authoring tools and the preview tool share this one resolution, thus the two surfaces accept the
|
|
114
149
|
* same thread id and map a load outcome onto a refusal the same way.
|
|
115
150
|
*/
|
|
116
|
-
export async function openReportThread(gateway, scope) {
|
|
117
|
-
if (scope.
|
|
151
|
+
export async function openReportThread(gateway, scope, callKey) {
|
|
152
|
+
if (scope.threadId === undefined || !isSafeId(scope.threadId)) {
|
|
118
153
|
return err({ reason: "no-thread-scope", detail: "the scope of the call names no usable report thread id" });
|
|
119
154
|
}
|
|
120
155
|
const { threadId, analysisId } = scope;
|
|
121
|
-
const loaded = await gateway.load(threadId);
|
|
156
|
+
const loaded = await gateway.load(threadId, callKey);
|
|
122
157
|
if (loaded.outcome === "absent") {
|
|
123
158
|
return err({ reason: "absent-state", detail: `no report session exists for the thread ${threadId}, and this condition is permanent` });
|
|
124
159
|
}
|
|
@@ -141,6 +176,7 @@ export async function openReportThread(gateway, scope) {
|
|
|
141
176
|
token: loaded.token,
|
|
142
177
|
seenDocumentHash: loaded.seenDocumentHash,
|
|
143
178
|
derivations: loaded.derivations,
|
|
179
|
+
landed: loaded.landed,
|
|
144
180
|
});
|
|
145
181
|
}
|
|
146
182
|
/** Read an absentable field. An explicit `null` and an omitted key both mean that the model gave no value. */
|
|
@@ -216,7 +252,7 @@ function decodeBlockPayload(block) {
|
|
|
216
252
|
return block;
|
|
217
253
|
}
|
|
218
254
|
try {
|
|
219
|
-
return
|
|
255
|
+
return parseJsonAs(block, z.json());
|
|
220
256
|
}
|
|
221
257
|
catch {
|
|
222
258
|
return block;
|
|
@@ -232,7 +268,7 @@ function readId(block) {
|
|
|
232
268
|
}
|
|
233
269
|
/** Read one field of an untyped payload, or `undefined` when the payload is not an object. */
|
|
234
270
|
function fieldOf(value, field) {
|
|
235
|
-
return value
|
|
271
|
+
return parseUnknownRecord(value)?.[field];
|
|
236
272
|
}
|
|
237
273
|
function readStringField(block, field) {
|
|
238
274
|
const value = fieldOf(block, field);
|
|
@@ -357,16 +393,6 @@ function containerIn(document, parentId) {
|
|
|
357
393
|
const children = located !== undefined && located.block.kind === "section" ? located.block.blocks : [];
|
|
358
394
|
return { parentId, children: childOutline(children, located?.path.length ?? 0) };
|
|
359
395
|
}
|
|
360
|
-
/**
|
|
361
|
-
* Every tool of this surface runs inline.
|
|
362
|
-
*
|
|
363
|
-
* A tool loads the state of its thread, applies the pure operation, and persists the result in one body.
|
|
364
|
-
* The reported outline must agree with the row that the body just wrote. A step-mode tool goes through
|
|
365
|
-
* `DBOS.runStep`, which caches the result of a step and replays it without a fresh load. A replay could
|
|
366
|
-
* then report an outline that the current row no longer holds. Inline mode reads and writes the row in one
|
|
367
|
-
* lifetime, thus the outline never drifts from the state.
|
|
368
|
-
*/
|
|
369
|
-
const AUTHORING_EXECUTION_MODE = "inline";
|
|
370
396
|
/**
|
|
371
397
|
* Make the eight authoring tools over a session-state gateway.
|
|
372
398
|
*
|
|
@@ -379,6 +405,7 @@ const AUTHORING_EXECUTION_MODE = "inline";
|
|
|
379
405
|
*/
|
|
380
406
|
export function createReportAuthoringTools(gateway, deps = {}) {
|
|
381
407
|
const observe = bindSessionEmit(deps.provenance, (deps.logger ?? createNoopLogger()).named("report-authoring"));
|
|
408
|
+
const stepKey = deps.stepKey ?? durableStepKey;
|
|
382
409
|
/**
|
|
383
410
|
* Resolve the thread of the call, and load its state.
|
|
384
411
|
*
|
|
@@ -387,6 +414,39 @@ export function createReportAuthoringTools(gateway, deps = {}) {
|
|
|
387
414
|
* operation.
|
|
388
415
|
*/
|
|
389
416
|
const openThread = (ctx) => openReportThread(gateway, ctx.session.scope);
|
|
417
|
+
const refuse = (refusal) => ({ applied: false, refusal });
|
|
418
|
+
/**
|
|
419
|
+
* The stored result of an earlier run of the call. The row holds what `land` stored, and a row that does not parse refuses.
|
|
420
|
+
*
|
|
421
|
+
* A crash between the persist and the emit of the earlier run loses its events, thus the rerun emits the stored
|
|
422
|
+
* events again. A consumer can get an act two times, never zero times. The parse of the result drops the events,
|
|
423
|
+
* thus the model reads the result alone.
|
|
424
|
+
*/
|
|
425
|
+
const replayed = (landed) => {
|
|
426
|
+
const parsed = LandedResultSchema.safeParse(landed);
|
|
427
|
+
if (!parsed.success) {
|
|
428
|
+
return refuse({ reason: "state-unavailable", detail: "the stored result of an earlier run of this call does not parse" });
|
|
429
|
+
}
|
|
430
|
+
const stored = StoredEventsSchema.safeParse(landed);
|
|
431
|
+
for (const observed of stored.success ? stored.data.events : []) {
|
|
432
|
+
observe(observed);
|
|
433
|
+
}
|
|
434
|
+
return parsed.data;
|
|
435
|
+
};
|
|
436
|
+
/**
|
|
437
|
+
* Resolve the thread of a mutation, and load its state with the stored result of an earlier run of the
|
|
438
|
+
* call. A rerun of a landed call gives that result, and it never reaches the core, which would refuse
|
|
439
|
+
* the landing of its own earlier run.
|
|
440
|
+
*/
|
|
441
|
+
const openMutation = async (ctx) => {
|
|
442
|
+
const callKey = stepKey();
|
|
443
|
+
const opened = await openReportThread(gateway, ctx.session.scope, callKey);
|
|
444
|
+
if (opened.isErr())
|
|
445
|
+
return { done: refuse(opened.error) };
|
|
446
|
+
if (opened.value.landed !== undefined)
|
|
447
|
+
return { done: replayed(opened.value.landed) };
|
|
448
|
+
return { opened: { ...opened.value, callKey } };
|
|
449
|
+
};
|
|
390
450
|
/**
|
|
391
451
|
* Persist a landing, and report the containers that the operation changed.
|
|
392
452
|
*
|
|
@@ -396,7 +456,8 @@ export function createReportAuthoringTools(gateway, deps = {}) {
|
|
|
396
456
|
* tool reports `applied: true` only after the row holds the new document.
|
|
397
457
|
*
|
|
398
458
|
* The persist is a compare-and-swap against the token that the load read. A concurrent turn that landed
|
|
399
|
-
* first turns the persist into a conflict, and the tool refuses with `stale-state`.
|
|
459
|
+
* first turns the persist into a conflict, and the tool refuses with `stale-state`. Inside a durable
|
|
460
|
+
* step, the result lands in the transaction of the document, thus a rerun of the step gives it again.
|
|
400
461
|
*
|
|
401
462
|
* `events` gives the observations of the operation, and they emit after the persist landed. Thus one
|
|
402
463
|
* site owns the rule, and a refusal, a conflict, and a persist fault each emit nothing. It reads the two
|
|
@@ -404,12 +465,18 @@ export function createReportAuthoringTools(gateway, deps = {}) {
|
|
|
404
465
|
* added block sits in the second alone. A caller that cannot name the block of its own operation gives
|
|
405
466
|
* no event.
|
|
406
467
|
*/
|
|
407
|
-
const land = async (
|
|
468
|
+
const land = async (opened, result, holders, events) => {
|
|
408
469
|
if (result.isErr()) {
|
|
409
470
|
return { applied: false, refusal: result.error };
|
|
410
471
|
}
|
|
472
|
+
const previous = opened.state.document;
|
|
411
473
|
const next = result.value;
|
|
412
|
-
|
|
474
|
+
// A move inside one container names the same holder two times.
|
|
475
|
+
const unique = [...new Set(holders(previous, next))];
|
|
476
|
+
const landed = { applied: true, changed: unique.map((parentId) => containerIn(next, parentId)) };
|
|
477
|
+
const observed = events(previous, next);
|
|
478
|
+
const call = opened.callKey === undefined ? undefined : { key: opened.callKey, result: { ...landed, events: observed } };
|
|
479
|
+
const persisted = await gateway.persist(opened.threadId, next, opened.token, call);
|
|
413
480
|
if (persisted.outcome === "conflict") {
|
|
414
481
|
return {
|
|
415
482
|
applied: false,
|
|
@@ -419,14 +486,14 @@ export function createReportAuthoringTools(gateway, deps = {}) {
|
|
|
419
486
|
if (persisted.outcome === "failed") {
|
|
420
487
|
return { applied: false, refusal: { reason: "state-unavailable", detail: persisted.detail } };
|
|
421
488
|
}
|
|
422
|
-
|
|
423
|
-
|
|
489
|
+
if (persisted.outcome === "replayed") {
|
|
490
|
+
return replayed(persisted.landed);
|
|
424
491
|
}
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
492
|
+
for (const event of observed) {
|
|
493
|
+
observe(event);
|
|
494
|
+
}
|
|
495
|
+
return landed;
|
|
428
496
|
};
|
|
429
|
-
const refuse = (refusal) => ({ applied: false, refusal });
|
|
430
497
|
const add_block = defineTool({
|
|
431
498
|
id: "add_block",
|
|
432
499
|
description: "Add one block to the draft. The block can be a section that carries its child blocks, thus one call can add a whole section with its atoms. " +
|
|
@@ -437,7 +504,6 @@ export function createReportAuthoringTools(gateway, deps = {}) {
|
|
|
437
504
|
"The root admits a section only, and an atom needs a section as its parent. " +
|
|
438
505
|
"A reference names the path of a pinned artifact, and the session stamps the hash from the pinned evidence.",
|
|
439
506
|
inputSchema: addBlockInput,
|
|
440
|
-
executionMode: AUTHORING_EXECUTION_MODE,
|
|
441
507
|
describeCall: (input) => {
|
|
442
508
|
const block = decodeBlockPayload(input.block);
|
|
443
509
|
const kind = readKind(block);
|
|
@@ -448,18 +514,19 @@ export function createReportAuthoringTools(gateway, deps = {}) {
|
|
|
448
514
|
return subject === undefined ? `add ${kind}` : `add ${kind} ${subject}`;
|
|
449
515
|
},
|
|
450
516
|
execute: async (input, ctx) => {
|
|
451
|
-
const
|
|
452
|
-
if (
|
|
453
|
-
return ok(
|
|
517
|
+
const opening = await openMutation(ctx);
|
|
518
|
+
if ("done" in opening) {
|
|
519
|
+
return ok(opening.done);
|
|
454
520
|
}
|
|
455
|
-
const {
|
|
521
|
+
const { opened } = opening;
|
|
522
|
+
const { threadId, analysisId, state } = opened;
|
|
456
523
|
const destination = toDestination(input);
|
|
457
524
|
if (destination.isErr()) {
|
|
458
525
|
return ok(refuse(destination.error));
|
|
459
526
|
}
|
|
460
527
|
const block = decodeBlockPayload(input.block);
|
|
461
528
|
const addedId = readId(block);
|
|
462
|
-
return ok(await land(
|
|
529
|
+
return ok(await land(opened, addBlock(state.document, { block, destination: destination.value }, state.snapshot), (_previous, next) => [addedId === undefined ? undefined : holderIdOf(next, addedId)],
|
|
463
530
|
// The grammar requires an id on the payload, thus a landed add always names one. A
|
|
464
531
|
// payload with no id reaches the core, which refuses it, and no event is due.
|
|
465
532
|
(_previous, next) => (addedId === undefined ? [] : addedActsOf({ analysisId, threadId }, next, addedId))));
|
|
@@ -471,19 +538,19 @@ export function createReportAuthoringTools(gateway, deps = {}) {
|
|
|
471
538
|
"The change keeps the id of the target, thus the `id` of the payload does not matter. A kind change is permitted. " +
|
|
472
539
|
"A reference names the path of a pinned artifact, and the session stamps the hash from the pinned evidence.",
|
|
473
540
|
inputSchema: changeBlockInput,
|
|
474
|
-
executionMode: AUTHORING_EXECUTION_MODE,
|
|
475
541
|
describeCall: (input) => `change ${input.targetId}`,
|
|
476
542
|
execute: async (input, ctx) => {
|
|
477
|
-
const
|
|
478
|
-
if (
|
|
479
|
-
return ok(
|
|
543
|
+
const opening = await openMutation(ctx);
|
|
544
|
+
if ("done" in opening) {
|
|
545
|
+
return ok(opening.done);
|
|
480
546
|
}
|
|
481
|
-
const {
|
|
547
|
+
const { opened } = opening;
|
|
548
|
+
const { threadId, analysisId, state } = opened;
|
|
482
549
|
const operation = toChangeOperation(input);
|
|
483
550
|
if (operation.isErr()) {
|
|
484
551
|
return ok(refuse(operation.error));
|
|
485
552
|
}
|
|
486
|
-
return ok(await land(
|
|
553
|
+
return ok(await land(opened, changeBlock(state.document, operation.value, state.snapshot), (_previous, next) => [holderIdOf(next, input.targetId)],
|
|
487
554
|
// A change is permitted to change the kind, thus the event states the kind that the
|
|
488
555
|
// document holds after the act.
|
|
489
556
|
(_previous, next) => blockActOf("change-block", { analysisId, threadId }, next, input.targetId)));
|
|
@@ -493,15 +560,15 @@ export function createReportAuthoringTools(gateway, deps = {}) {
|
|
|
493
560
|
id: "remove_block",
|
|
494
561
|
description: "Remove one block by its id. A removed section takes its whole subtree with it, and the id is free for a later add.",
|
|
495
562
|
inputSchema: removeBlockInput,
|
|
496
|
-
executionMode: AUTHORING_EXECUTION_MODE,
|
|
497
563
|
describeCall: (input) => `remove ${input.targetId}`,
|
|
498
564
|
execute: async (input, ctx) => {
|
|
499
|
-
const
|
|
500
|
-
if (
|
|
501
|
-
return ok(
|
|
565
|
+
const opening = await openMutation(ctx);
|
|
566
|
+
if ("done" in opening) {
|
|
567
|
+
return ok(opening.done);
|
|
502
568
|
}
|
|
503
|
-
const {
|
|
504
|
-
|
|
569
|
+
const { opened } = opening;
|
|
570
|
+
const { threadId, analysisId, state } = opened;
|
|
571
|
+
return ok(await land(opened, removeBlock(state.document, { targetId: input.targetId }, state.snapshot), (previous) => [holderIdOf(previous, input.targetId)],
|
|
505
572
|
// The next document holds no removed block, thus the event states the kind that the
|
|
506
573
|
// previous one carried.
|
|
507
574
|
(previous) => blockActOf("remove-block", { analysisId, threadId }, previous, input.targetId)));
|
|
@@ -512,19 +579,19 @@ export function createReportAuthoringTools(gateway, deps = {}) {
|
|
|
512
579
|
description: "Move one block by its id to a new destination. Name the destination with `parentId` and one of `place`, `before`, or `after`. " +
|
|
513
580
|
"A section cannot move into its own subtree.",
|
|
514
581
|
inputSchema: moveBlockInput,
|
|
515
|
-
executionMode: AUTHORING_EXECUTION_MODE,
|
|
516
582
|
describeCall: (input) => `move ${input.targetId}`,
|
|
517
583
|
execute: async (input, ctx) => {
|
|
518
|
-
const
|
|
519
|
-
if (
|
|
520
|
-
return ok(
|
|
584
|
+
const opening = await openMutation(ctx);
|
|
585
|
+
if ("done" in opening) {
|
|
586
|
+
return ok(opening.done);
|
|
521
587
|
}
|
|
522
|
-
const {
|
|
588
|
+
const { opened } = opening;
|
|
589
|
+
const { threadId, analysisId, state } = opened;
|
|
523
590
|
const destination = toDestination(input);
|
|
524
591
|
if (destination.isErr()) {
|
|
525
592
|
return ok(refuse(destination.error));
|
|
526
593
|
}
|
|
527
|
-
return ok(await land(
|
|
594
|
+
return ok(await land(opened, moveBlock(state.document, { targetId: input.targetId, destination: destination.value }, state.snapshot), (previous, next) => [holderIdOf(previous, input.targetId), holderIdOf(next, input.targetId)], (_previous, next) => blockActOf("move-block", { analysisId, threadId }, next, input.targetId)));
|
|
528
595
|
},
|
|
529
596
|
});
|
|
530
597
|
const set_title = defineTool({
|
|
@@ -532,16 +599,16 @@ export function createReportAuthoringTools(gateway, deps = {}) {
|
|
|
532
599
|
description: "Set the title of the report document. A draft starts with no title, and a document needs one. " +
|
|
533
600
|
"The title names the whole report, and it is not the title of a section.",
|
|
534
601
|
inputSchema: setTitleInput,
|
|
535
|
-
executionMode: AUTHORING_EXECUTION_MODE,
|
|
536
602
|
describeCall: (input) => `title the report ${input.title}`,
|
|
537
603
|
// The title sits on the document, thus no container changes its child order.
|
|
538
604
|
execute: async (input, ctx) => {
|
|
539
|
-
const
|
|
540
|
-
if (
|
|
541
|
-
return ok(
|
|
605
|
+
const opening = await openMutation(ctx);
|
|
606
|
+
if ("done" in opening) {
|
|
607
|
+
return ok(opening.done);
|
|
542
608
|
}
|
|
543
|
-
const {
|
|
544
|
-
|
|
609
|
+
const { opened } = opening;
|
|
610
|
+
const { threadId, analysisId, state } = opened;
|
|
611
|
+
return ok(await land(opened, ok(setTitle(state.document, input.title)), () => [], () => [
|
|
545
612
|
{
|
|
546
613
|
type: "set-title",
|
|
547
614
|
analysisId,
|
|
@@ -557,7 +624,6 @@ export function createReportAuthoringTools(gateway, deps = {}) {
|
|
|
557
624
|
"A label that ends with the character … is clipped. Use the outline as the primary view of the draft, " +
|
|
558
625
|
"and read one block when the label is not enough.",
|
|
559
626
|
inputSchema: readOutlineInput,
|
|
560
|
-
executionMode: AUTHORING_EXECUTION_MODE,
|
|
561
627
|
// The input carries no field, thus a hook can only restate the name of the tool.
|
|
562
628
|
describeCall: "none",
|
|
563
629
|
execute: async (_input, ctx) => {
|
|
@@ -574,16 +640,17 @@ export function createReportAuthoringTools(gateway, deps = {}) {
|
|
|
574
640
|
"because the session owns the hash. A section gives its title and the id of each child, " +
|
|
575
641
|
"because the outline already names every block under it. Use it when the outline label is not enough.",
|
|
576
642
|
inputSchema: readBlockInput,
|
|
577
|
-
executionMode: AUTHORING_EXECUTION_MODE,
|
|
578
643
|
describeCall: (input) => `read ${input.targetId}`,
|
|
579
644
|
execute: async (input, ctx) => {
|
|
580
645
|
const opened = await openThread(ctx);
|
|
581
646
|
if (opened.isErr()) {
|
|
582
647
|
return ok({ refused: opened.error });
|
|
583
648
|
}
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
649
|
+
return readBlock(opened.value.state.document, input.targetId).match((block) => ok(block !== undefined ? { found: true, block } : { found: false }), (refused) => err({
|
|
650
|
+
error: `the stored block ${refused.id} does not match the authoring grammar, thus it cannot be read`,
|
|
651
|
+
retryable: false,
|
|
652
|
+
cause: refused.cause,
|
|
653
|
+
}));
|
|
587
654
|
},
|
|
588
655
|
});
|
|
589
656
|
const finish_draft = defineTool({
|
|
@@ -593,7 +660,6 @@ export function createReportAuthoringTools(gateway, deps = {}) {
|
|
|
593
660
|
"preview_report and record_report_version run the same check before they act, thus a finish directly before one of them does that check a second time. " +
|
|
594
661
|
"Use it to make sure that the draft passes the whole document schema, the id rule, and the structural tier.",
|
|
595
662
|
inputSchema: finishDraftInput,
|
|
596
|
-
executionMode: AUTHORING_EXECUTION_MODE,
|
|
597
663
|
// The input carries no field, thus a hook can only restate the name of the tool.
|
|
598
664
|
describeCall: "none",
|
|
599
665
|
execute: async (_input, ctx) => {
|
|
@@ -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
|
*
|