@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
|
@@ -15,12 +15,17 @@
|
|
|
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 { type Result } from "neverthrow";
|
|
20
25
|
import { z } from "zod";
|
|
21
26
|
import type { Scope } from "../../auth/types.js";
|
|
22
27
|
import type { Logger } from "../../lib/logger.js";
|
|
23
|
-
import { type ProvenanceSeam } from "../../provenance/seam.js";
|
|
28
|
+
import { type ProvenanceSeam, type SessionProvenanceEvent } from "../../provenance/seam.js";
|
|
24
29
|
import { type DraftRefusal } from "../../report-model/draft-operations.js";
|
|
25
30
|
import { type OutlineEntry, type ReadableBlock } from "../../report-model/draft-read.js";
|
|
26
31
|
import type { ReportWarning } from "../../report-model/block-walk.js";
|
|
@@ -81,11 +86,11 @@ export type ReadBlockInput = z.infer<typeof readBlockInput>;
|
|
|
81
86
|
export type SetTitleInput = z.infer<typeof setTitleInput>;
|
|
82
87
|
export type FinishDraftInput = z.infer<typeof finishDraftInput>;
|
|
83
88
|
/** One container that an operation changed, and the child order inside it after the operation. */
|
|
84
|
-
export
|
|
89
|
+
export type ChangedContainer = {
|
|
85
90
|
/** The section that holds the children. It is absent when the container is the root. */
|
|
86
91
|
parentId?: string;
|
|
87
92
|
children: OutlineEntry[];
|
|
88
|
-
}
|
|
93
|
+
};
|
|
89
94
|
/**
|
|
90
95
|
* The closed set of tool-layer refusal reasons.
|
|
91
96
|
*
|
|
@@ -105,10 +110,10 @@ export type SessionRefusalReason = "no-thread-scope" | "absent-state" | "wrong-t
|
|
|
105
110
|
* state, or a gateway that cannot give the state. It sits beside the core `DraftRefusal`, and it never
|
|
106
111
|
* widens the closed reason set of the core.
|
|
107
112
|
*/
|
|
108
|
-
export
|
|
113
|
+
export type SessionRefusal = {
|
|
109
114
|
reason: SessionRefusalReason;
|
|
110
115
|
detail: string;
|
|
111
|
-
}
|
|
116
|
+
};
|
|
112
117
|
/**
|
|
113
118
|
* The result of a mutation tool. A refusal carries the typed reason, from the core or from the tool layer.
|
|
114
119
|
*
|
|
@@ -120,13 +125,15 @@ export interface SessionRefusal {
|
|
|
120
125
|
*
|
|
121
126
|
* A move across two containers reports both. An operation that changes no child order reports none.
|
|
122
127
|
*/
|
|
123
|
-
export type MutationResult = {
|
|
124
|
-
applied: true;
|
|
125
|
-
changed: ChangedContainer[];
|
|
126
|
-
} | {
|
|
128
|
+
export type MutationResult = LandedResult | {
|
|
127
129
|
applied: false;
|
|
128
130
|
refusal: DraftRefusal | SessionRefusal;
|
|
129
131
|
};
|
|
132
|
+
/** The result of a mutation that landed its document. A durable step stores it, and a rerun of the step gives it again. */
|
|
133
|
+
export type LandedResult = {
|
|
134
|
+
applied: true;
|
|
135
|
+
changed: ChangedContainer[];
|
|
136
|
+
};
|
|
130
137
|
/** The result of `read_outline`. A load that gives no state refuses instead of an outline. */
|
|
131
138
|
export type OutlineResult = {
|
|
132
139
|
outline: OutlineEntry[];
|
|
@@ -160,10 +167,10 @@ export type FinishToolResult = {
|
|
|
160
167
|
refused: SessionRefusal;
|
|
161
168
|
};
|
|
162
169
|
/** The state of one report thread: the document under composition, and the frozen snapshot. */
|
|
163
|
-
export
|
|
170
|
+
export type ReportSessionState = {
|
|
164
171
|
readonly document: DraftDocument;
|
|
165
172
|
readonly snapshot: ReportSnapshot;
|
|
166
|
-
}
|
|
173
|
+
};
|
|
167
174
|
/**
|
|
168
175
|
* The concurrency token that a load hands out and a persist compares against. It is the prior document
|
|
169
176
|
* that the load read, or `null` before the first document lands. The persist lands only when the row still
|
|
@@ -191,6 +198,8 @@ export type SessionStateLoad = {
|
|
|
191
198
|
token: SessionStateToken;
|
|
192
199
|
seenDocumentHash: string | null;
|
|
193
200
|
derivations: readonly DerivationRecord[];
|
|
201
|
+
/** The stored result of the call that the load names, when an earlier run of that call landed. */
|
|
202
|
+
landed?: unknown;
|
|
194
203
|
} | {
|
|
195
204
|
outcome: "absent";
|
|
196
205
|
} | {
|
|
@@ -200,15 +209,31 @@ export type SessionStateLoad = {
|
|
|
200
209
|
outcome: "failed";
|
|
201
210
|
detail: string;
|
|
202
211
|
};
|
|
203
|
-
/**
|
|
212
|
+
/**
|
|
213
|
+
* The outcome of a gateway persist. `conflict` means that a concurrent turn landed first. `replayed` means
|
|
214
|
+
* that an earlier run of the call landed, and it carries the stored result of that run.
|
|
215
|
+
*/
|
|
204
216
|
export type SessionStatePersist = {
|
|
205
217
|
outcome: "persisted";
|
|
206
218
|
} | {
|
|
207
219
|
outcome: "conflict";
|
|
220
|
+
} | {
|
|
221
|
+
outcome: "replayed";
|
|
222
|
+
landed: unknown;
|
|
208
223
|
} | {
|
|
209
224
|
outcome: "failed";
|
|
210
225
|
detail: string;
|
|
211
226
|
};
|
|
227
|
+
/**
|
|
228
|
+
* The authoring call of a persist: the key of its durable step, and the result that it gives when the document lands.
|
|
229
|
+
* The result carries the events of the act, thus a rerun that finds the result can emit them again.
|
|
230
|
+
*/
|
|
231
|
+
export type LandingCall = {
|
|
232
|
+
readonly key: string;
|
|
233
|
+
readonly result: LandedResult & {
|
|
234
|
+
readonly events: readonly SessionProvenanceEvent[];
|
|
235
|
+
};
|
|
236
|
+
};
|
|
212
237
|
/**
|
|
213
238
|
* The outcome of a gateway stamp. `stamped` wrote the marker. `absent` means that no row holds the thread.
|
|
214
239
|
* `failed` is a transient store fault that names its cause. Each arm is plain data, thus a stamp never
|
|
@@ -246,9 +271,11 @@ export type SeenStampResult = {
|
|
|
246
271
|
* the gateway over the durable store. A load gives the state, a typed absence, or a typed failure. A
|
|
247
272
|
* persist gives success, or a typed failure.
|
|
248
273
|
*/
|
|
249
|
-
export
|
|
250
|
-
load
|
|
251
|
-
|
|
274
|
+
export type ReportSessionStateGateway = {
|
|
275
|
+
/** `callKey` names the durable step of a mutation, and the found load then carries the stored result of an earlier run. */
|
|
276
|
+
load(threadId: string, callKey?: string): Promise<SessionStateLoad>;
|
|
277
|
+
/** A persist with a `call` stores the result of the call in the transaction of the document. */
|
|
278
|
+
persist(threadId: string, document: DraftDocument, expected: SessionStateToken, call?: LandingCall): Promise<SessionStatePersist>;
|
|
252
279
|
/**
|
|
253
280
|
* Stamp the hash of the rendered draft on the session state. The preview calls it when the page lands,
|
|
254
281
|
* thus the runtime knows which draft the page shows.
|
|
@@ -260,12 +287,12 @@ export interface ReportSessionStateGateway {
|
|
|
260
287
|
* rendered hash existed to copy, thus the eyes tell a real stamp from a missed one.
|
|
261
288
|
*/
|
|
262
289
|
stampSeen(threadId: string): Promise<SeenStampResult>;
|
|
263
|
-
}
|
|
290
|
+
};
|
|
264
291
|
/**
|
|
265
292
|
* The thread of a call, its analysis, the loaded state, the concurrency token that the persist compares
|
|
266
293
|
* against, the seen-document hash of the look-before-record rule, and the derivations of the session.
|
|
267
294
|
*/
|
|
268
|
-
export
|
|
295
|
+
export type OpenedThread = {
|
|
269
296
|
readonly threadId: string;
|
|
270
297
|
readonly analysisId: string;
|
|
271
298
|
readonly state: ReportSessionState;
|
|
@@ -274,7 +301,9 @@ export interface OpenedThread {
|
|
|
274
301
|
readonly seenDocumentHash: string | null;
|
|
275
302
|
/** The derivations of the session, in the order that the records landed. */
|
|
276
303
|
readonly derivations: readonly DerivationRecord[];
|
|
277
|
-
|
|
304
|
+
/** The stored result of an earlier run of the call that the open names. */
|
|
305
|
+
readonly landed?: unknown;
|
|
306
|
+
};
|
|
278
307
|
/**
|
|
279
308
|
* Resolve the report thread of a call, and load its state through the gateway.
|
|
280
309
|
*
|
|
@@ -290,9 +319,9 @@ export interface OpenedThread {
|
|
|
290
319
|
* The authoring tools and the preview tool share this one resolution, thus the two surfaces accept the
|
|
291
320
|
* same thread id and map a load outcome onto a refusal the same way.
|
|
292
321
|
*/
|
|
293
|
-
export declare function openReportThread(gateway: ReportSessionStateGateway, scope: Scope): Promise<Result<OpenedThread, SessionRefusal>>;
|
|
322
|
+
export declare function openReportThread(gateway: ReportSessionStateGateway, scope: Scope, callKey?: string): Promise<Result<OpenedThread, SessionRefusal>>;
|
|
294
323
|
/** The eight authoring tools. */
|
|
295
|
-
export
|
|
324
|
+
export type ReportAuthoringTools = {
|
|
296
325
|
readonly add_block: Tool<AddBlockInput, MutationResult>;
|
|
297
326
|
readonly change_block: Tool<ChangeBlockInput, MutationResult>;
|
|
298
327
|
readonly remove_block: Tool<RemoveBlockInput, MutationResult>;
|
|
@@ -301,17 +330,19 @@ export interface ReportAuthoringTools {
|
|
|
301
330
|
readonly read_outline: Tool<ReadOutlineInput, OutlineResult>;
|
|
302
331
|
readonly read_block: Tool<ReadBlockInput, ReadBlockResult>;
|
|
303
332
|
readonly finish_draft: Tool<FinishDraftInput, FinishToolResult>;
|
|
304
|
-
}
|
|
333
|
+
};
|
|
305
334
|
/**
|
|
306
335
|
* The optional deps of the authoring surface. The gateway is the one mandatory part, thus it stays a
|
|
307
336
|
* parameter of its own and this bag holds what a composition can leave out.
|
|
308
337
|
*/
|
|
309
|
-
export
|
|
338
|
+
export type ReportAuthoringToolDeps = {
|
|
310
339
|
/** The provenance seam; an unbound session emit emits nothing and each tool acts the same. */
|
|
311
340
|
readonly provenance?: ProvenanceSeam;
|
|
312
341
|
/** Operational logging seam; omitted falls back to no-op. */
|
|
313
342
|
readonly logger?: Logger;
|
|
314
|
-
}
|
|
343
|
+
/** The key of the durable step that runs the call, `undefined` outside one. Defaults to {@link durableStepKey}. */
|
|
344
|
+
readonly stepKey?: () => string | undefined;
|
|
345
|
+
};
|
|
315
346
|
/**
|
|
316
347
|
* Make the eight authoring tools over a session-state gateway.
|
|
317
348
|
*
|
|
@@ -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) => {
|