@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
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A chat turn in the process of a test, with no workflow. The turn of `chat-turn.ts` runs over a transport that
|
|
3
|
+
* streams to an emit sink and runs each write directly, thus a test drives the storage and the loop of a turn with
|
|
4
|
+
* no DBOS engine. A host reaches a turn through the turn workflow only, and `inProcessChatTurns` gives the test of
|
|
5
|
+
* a host the same surface over this turn.
|
|
6
|
+
*/
|
|
7
|
+
import { randomUUID } from "node:crypto";
|
|
8
|
+
import { toChatFrame } from "../contracts/chat-frame.js";
|
|
9
|
+
import { chatTurnEndOf } from "./chat-turn-workflow.js";
|
|
10
|
+
import { createConversationDisplayRecorder } from "../memory/conversation-display-recorder.js";
|
|
11
|
+
import { prepareChatTurn, runOpenTurn, userTextOf, } from "./chat-turn.js";
|
|
12
|
+
/** Prepare a turn and resolve its agent. A refusal comes back before any row of the turn exists. */
|
|
13
|
+
export async function openInProcessTurn(deps, params) {
|
|
14
|
+
const openedAtMs = Date.now();
|
|
15
|
+
let prepared;
|
|
16
|
+
try {
|
|
17
|
+
prepared = await prepareChatTurn(deps, params);
|
|
18
|
+
}
|
|
19
|
+
catch (cause) {
|
|
20
|
+
return { kind: "prepare_failed", cause };
|
|
21
|
+
}
|
|
22
|
+
if (prepared.kind === "not_found")
|
|
23
|
+
return prepared;
|
|
24
|
+
const agent = deps.agents.forThread(prepared.threadType);
|
|
25
|
+
if (agent.isErr())
|
|
26
|
+
return { kind: "agent_unresolved", threadType: prepared.threadType };
|
|
27
|
+
const ready = prepared;
|
|
28
|
+
return {
|
|
29
|
+
kind: "ready",
|
|
30
|
+
agent: agent.value,
|
|
31
|
+
run: (run) => {
|
|
32
|
+
const recorder = createConversationDisplayRecorder({ userText: userTextOf(ready.userMessage), agentId: agent.value.id, sink: run.emit });
|
|
33
|
+
return runOpenTurn(deps, params, ready, agent.value, { session: run.session, author: run.author, startedAtMs: run.startedAtMs ?? openedAtMs, promptCache: run.promptCache }, {
|
|
34
|
+
signal: run.signal,
|
|
35
|
+
emit: recorder.emit,
|
|
36
|
+
onText: (text) => recorder.emit({ type: "text-delta", text }),
|
|
37
|
+
recorder,
|
|
38
|
+
durably: (_name, write) => write(),
|
|
39
|
+
approve: run.approve,
|
|
40
|
+
});
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/** Open a turn in process and run it. */
|
|
45
|
+
export async function runInProcessTurn(deps, params) {
|
|
46
|
+
const { analysisId, threadId, userInput, ...run } = params;
|
|
47
|
+
const opened = await openInProcessTurn(deps, { analysisId, threadId, userInput });
|
|
48
|
+
if (opened.kind !== "ready")
|
|
49
|
+
return opened;
|
|
50
|
+
return opened.run(run);
|
|
51
|
+
}
|
|
52
|
+
function createFrameLog() {
|
|
53
|
+
const frames = [];
|
|
54
|
+
let closed = false;
|
|
55
|
+
let waiters = [];
|
|
56
|
+
const wake = () => {
|
|
57
|
+
const woken = waiters;
|
|
58
|
+
waiters = [];
|
|
59
|
+
for (const resolve of woken)
|
|
60
|
+
resolve();
|
|
61
|
+
};
|
|
62
|
+
return {
|
|
63
|
+
push(frame) {
|
|
64
|
+
frames.push(frame);
|
|
65
|
+
wake();
|
|
66
|
+
},
|
|
67
|
+
close() {
|
|
68
|
+
closed = true;
|
|
69
|
+
wake();
|
|
70
|
+
},
|
|
71
|
+
async *read() {
|
|
72
|
+
for (let index = 0;; index += 1) {
|
|
73
|
+
while (index >= frames.length) {
|
|
74
|
+
if (closed)
|
|
75
|
+
return;
|
|
76
|
+
await new Promise((resolve) => waiters.push(resolve));
|
|
77
|
+
}
|
|
78
|
+
const frame = frames[index];
|
|
79
|
+
if (frame !== undefined)
|
|
80
|
+
yield frame;
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* The chat turns of a host test, over the turn in process: `open` starts the turn at once, `read` gives its frames
|
|
87
|
+
* with the end frame of a turn workflow, `stop` aborts it, and `outcome` gives its end. An ask has no answer here,
|
|
88
|
+
* thus a call that asks for an approval is denied.
|
|
89
|
+
*/
|
|
90
|
+
export function inProcessChatTurns(deps) {
|
|
91
|
+
const turns = new Map();
|
|
92
|
+
return {
|
|
93
|
+
async open(session, request) {
|
|
94
|
+
const opened = await openInProcessTurn(deps, { analysisId: request.analysisId, threadId: request.threadId, userInput: request.userInput });
|
|
95
|
+
if (opened.kind !== "ready")
|
|
96
|
+
return opened;
|
|
97
|
+
const turnId = randomUUID();
|
|
98
|
+
const rootSource = { agentId: opened.agent.id, callPath: [opened.agent.id] };
|
|
99
|
+
const log = createFrameLog();
|
|
100
|
+
const controller = new AbortController();
|
|
101
|
+
const end = opened
|
|
102
|
+
.run({
|
|
103
|
+
session,
|
|
104
|
+
emit: (event) => {
|
|
105
|
+
const frame = toChatFrame(event, rootSource);
|
|
106
|
+
if (frame !== null)
|
|
107
|
+
log.push(structuredClone(frame));
|
|
108
|
+
},
|
|
109
|
+
signal: controller.signal,
|
|
110
|
+
author: request.author,
|
|
111
|
+
startedAtMs: request.startedAtMs,
|
|
112
|
+
promptCache: request.promptCache,
|
|
113
|
+
})
|
|
114
|
+
.then((ran) => {
|
|
115
|
+
const turnEnd = chatTurnEndOf(ran);
|
|
116
|
+
log.push(turnEnd.status === "failed"
|
|
117
|
+
? { type: "error", message: turnEnd.reason ?? "The turn failed.", reason: turnEnd.code, source: rootSource }
|
|
118
|
+
: { type: "finish", source: rootSource, turnUsage: turnEnd.turnUsage });
|
|
119
|
+
return turnEnd;
|
|
120
|
+
})
|
|
121
|
+
.catch(() => null)
|
|
122
|
+
.finally(() => log.close());
|
|
123
|
+
turns.set(turnId, { log, controller, end });
|
|
124
|
+
return { kind: "started", turnId, agent: opened.agent };
|
|
125
|
+
},
|
|
126
|
+
read(turnId) {
|
|
127
|
+
const turn = turns.get(turnId);
|
|
128
|
+
if (turn === undefined)
|
|
129
|
+
throw new Error(`No turn ${turnId} runs in this process.`);
|
|
130
|
+
return turn.log.read();
|
|
131
|
+
},
|
|
132
|
+
stop(turnId) {
|
|
133
|
+
turns.get(turnId)?.controller.abort(new DOMException("The user stopped the turn.", "AbortError"));
|
|
134
|
+
return Promise.resolve();
|
|
135
|
+
},
|
|
136
|
+
answer: () => Promise.resolve("not_found"),
|
|
137
|
+
outcome: (turnId) => turns.get(turnId)?.end ?? Promise.resolve(null),
|
|
138
|
+
};
|
|
139
|
+
}
|
|
@@ -12,7 +12,7 @@ import type { LoopMessage } from "../loop/types.js";
|
|
|
12
12
|
import type { ThreadHistory } from "../memory/thread-history.js";
|
|
13
13
|
import type { ThreadType } from "../memory/thread-store.js";
|
|
14
14
|
import type { WorkingMemoryStore } from "../memory/working-memory.js";
|
|
15
|
-
export
|
|
15
|
+
export type AssembleMessagesArgs = {
|
|
16
16
|
/** The conversation thread — a UI-generated UUID, never the analysisId. */
|
|
17
17
|
readonly threadId: string;
|
|
18
18
|
/** The type of the thread. A `report` thread gets no working-memory record, and its view keeps the seed. */
|
|
@@ -31,19 +31,25 @@ export interface AssembleMessagesArgs {
|
|
|
31
31
|
readonly workingMemory: WorkingMemoryStore;
|
|
32
32
|
/** Diagnostic seam for the history repair record; omitted falls back to no-op. */
|
|
33
33
|
readonly logger?: Logger;
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
/** Read the thread up to this `seq` only (see `LoadRecentOptions.throughSeq`). */
|
|
35
|
+
readonly throughSeq?: number;
|
|
36
|
+
};
|
|
37
|
+
export type AssembledMessages = {
|
|
36
38
|
/** The view of the thread before the turn. */
|
|
37
39
|
readonly history: LoopMessage[];
|
|
38
40
|
/** The sanitized user input as its own message — the genuine turn start. */
|
|
39
41
|
readonly userMessage: ModelMessage;
|
|
40
42
|
/** The context records after the user message. The turn stores them with the user message. */
|
|
41
43
|
readonly contextRecords: readonly ModelMessage[];
|
|
42
|
-
}
|
|
44
|
+
};
|
|
43
45
|
/**
|
|
44
46
|
* Assemble the message array for one chat turn. Async — it reads the view of
|
|
45
47
|
* the thread and renders working memory.
|
|
46
48
|
*/
|
|
47
49
|
export declare function assembleMessages(args: AssembleMessagesArgs): Promise<AssembledMessages>;
|
|
50
|
+
/** The user input as the message of the turn. Sanitization applies one time, here, to the new user input only. */
|
|
51
|
+
export declare function sanitizedUserMessage(userInput: string): ModelMessage;
|
|
52
|
+
/** The view of the thread before the turn, with a not-run result for each stored call that has no result. */
|
|
53
|
+
export declare function loadHistoryView(args: Pick<AssembleMessagesArgs, "threadId" | "threadType" | "history" | "logger" | "throughSeq">): Promise<LoopMessage[]>;
|
|
48
54
|
/** The context records of one turn, in the order analysis context, run activity, working memory. */
|
|
49
55
|
export declare function contextRecordsFor(args: Pick<AssembleMessagesArgs, "threadType" | "analysisId" | "analysisContext" | "runActivityContext" | "workingMemory">, history: readonly ModelMessage[]): Promise<ModelMessage[]>;
|
|
@@ -16,7 +16,18 @@ import { normalizeUnicode, redactSecrets } from "../input-sanitization.js";
|
|
|
16
16
|
* the thread and renders working memory.
|
|
17
17
|
*/
|
|
18
18
|
export async function assembleMessages(args) {
|
|
19
|
-
const history =
|
|
19
|
+
const history = await loadHistoryView(args);
|
|
20
|
+
const userMessage = sanitizedUserMessage(args.userInput);
|
|
21
|
+
const contextRecords = await contextRecordsFor(args, history);
|
|
22
|
+
return { history, userMessage, contextRecords };
|
|
23
|
+
}
|
|
24
|
+
/** The user input as the message of the turn. Sanitization applies one time, here, to the new user input only. */
|
|
25
|
+
export function sanitizedUserMessage(userInput) {
|
|
26
|
+
return { role: "user", content: normalizeUnicode(redactSecrets(userInput)) };
|
|
27
|
+
}
|
|
28
|
+
/** The view of the thread before the turn, with a not-run result for each stored call that has no result. */
|
|
29
|
+
export async function loadHistoryView(args) {
|
|
30
|
+
const history = unwrapOrThrow(await args.history.loadRecent(args.threadId, { keepFirstTurn: args.threadType === "report", throughSeq: args.throughSeq }));
|
|
20
31
|
// Read-side safety net for the wire contract: every tool call carries a
|
|
21
32
|
// result. The loop upholds it at every exit, but the store outlives any one
|
|
22
33
|
// writer — a row an older build wrote, or a hand-edited database, can carry
|
|
@@ -33,13 +44,7 @@ export async function assembleMessages(args) {
|
|
|
33
44
|
tools: repaired.map((d) => d.toolName),
|
|
34
45
|
});
|
|
35
46
|
}
|
|
36
|
-
|
|
37
|
-
const userMessage = {
|
|
38
|
-
role: "user",
|
|
39
|
-
content: normalizeUnicode(redactSecrets(args.userInput)),
|
|
40
|
-
};
|
|
41
|
-
const contextRecords = await contextRecordsFor(args, history);
|
|
42
|
-
return { history, userMessage, contextRecords };
|
|
47
|
+
return history;
|
|
43
48
|
}
|
|
44
49
|
/** The context records of one turn, in the order analysis context, run activity, working memory. */
|
|
45
50
|
export async function contextRecordsFor(args, history) {
|
|
@@ -56,7 +56,7 @@ export type EnsureSessionStateResult = {
|
|
|
56
56
|
kind: EnsureFailureKind;
|
|
57
57
|
detail: string;
|
|
58
58
|
};
|
|
59
|
-
export
|
|
59
|
+
export type ReportSessionRuntimeDeps = {
|
|
60
60
|
readonly pool: Pool;
|
|
61
61
|
/**
|
|
62
62
|
* The workspace-root seam of the pin. The citation evidence of an analysis sits on disk under the
|
|
@@ -64,7 +64,7 @@ export interface ReportSessionRuntimeDeps {
|
|
|
64
64
|
*/
|
|
65
65
|
readonly resolveWorkspaceRoot?: ResolveWorkspaceRoot;
|
|
66
66
|
readonly logger?: Logger;
|
|
67
|
-
}
|
|
67
|
+
};
|
|
68
68
|
/**
|
|
69
69
|
* The report session-state runtime. The gateway serves the authoring tools, and
|
|
70
70
|
* `ensureSessionState` anchors the session. The spawn of a report session runs
|
|
@@ -72,7 +72,7 @@ export interface ReportSessionRuntimeDeps {
|
|
|
72
72
|
* turn runs it at the turn start, and the gateway `load` runs it too. Thus a tool
|
|
73
73
|
* call cannot arrive before the state exists.
|
|
74
74
|
*/
|
|
75
|
-
export
|
|
75
|
+
export type ReportSessionRuntime = {
|
|
76
76
|
readonly gateway: ReportSessionStateGateway;
|
|
77
77
|
/**
|
|
78
78
|
* The derivation ledger of the session state. The derivation tool appends one record for each
|
|
@@ -80,7 +80,7 @@ export interface ReportSessionRuntime {
|
|
|
80
80
|
*/
|
|
81
81
|
readonly derivations: Pick<ReportSessionStateStore, "appendDerivation">;
|
|
82
82
|
ensureSessionState(threadId: string): Promise<EnsureSessionStateResult>;
|
|
83
|
-
}
|
|
83
|
+
};
|
|
84
84
|
/**
|
|
85
85
|
* Build the report session-state runtime bound to a Postgres pool. The factory
|
|
86
86
|
* closure captures the pool and constructs the session-state store and the thread
|
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
*/
|
|
35
35
|
import { createNoopLogger } from "../lib/console-logger.js";
|
|
36
36
|
import { describeDbError } from "../lib/db-result.js";
|
|
37
|
+
import { nullProtoRecord } from "../lib/null-proto.js";
|
|
37
38
|
import { createThreadStore } from "../memory/thread-store.js";
|
|
38
39
|
import { pinReportSnapshot } from "../report-model/pin-snapshot.js";
|
|
39
40
|
import { createReportSessionStateStore, } from "../state/report-session-state.js";
|
|
@@ -58,7 +59,7 @@ function serveMembership(snapshot, derivations) {
|
|
|
58
59
|
if (derivations.length === 0) {
|
|
59
60
|
return snapshot;
|
|
60
61
|
}
|
|
61
|
-
const artifacts =
|
|
62
|
+
const artifacts = nullProtoRecord();
|
|
62
63
|
for (const [path, entry] of Object.entries(snapshot.artifacts)) {
|
|
63
64
|
artifacts[path] = entry;
|
|
64
65
|
}
|
|
@@ -166,7 +167,7 @@ export function createReportSessionRuntime(deps) {
|
|
|
166
167
|
};
|
|
167
168
|
}
|
|
168
169
|
const gateway = {
|
|
169
|
-
async load(threadId) {
|
|
170
|
+
async load(threadId, callKey) {
|
|
170
171
|
const ensured = await ensureSessionState(threadId);
|
|
171
172
|
if (ensured.outcome === "failed") {
|
|
172
173
|
switch (ensured.kind) {
|
|
@@ -178,27 +179,41 @@ export function createReportSessionRuntime(deps) {
|
|
|
178
179
|
return { outcome: "failed", detail: ensured.detail };
|
|
179
180
|
}
|
|
180
181
|
}
|
|
181
|
-
|
|
182
|
+
const loaded = toLoad(ensured.state);
|
|
183
|
+
if (callKey === undefined || loaded.outcome !== "found")
|
|
184
|
+
return loaded;
|
|
185
|
+
const stored = await store.readCallResult(threadId, callKey);
|
|
186
|
+
if (stored.isErr())
|
|
187
|
+
return { outcome: "failed", detail: describeDbError(stored.error) };
|
|
188
|
+
return stored.value === null ? loaded : { ...loaded, landed: stored.value.result };
|
|
182
189
|
},
|
|
183
|
-
async persist(threadId, document, expected) {
|
|
184
|
-
const result = await store.persistDocument({ threadId, document, expected });
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
190
|
+
async persist(threadId, document, expected, call) {
|
|
191
|
+
const result = await store.persistDocument({ threadId, document, expected, call });
|
|
192
|
+
if (result.isErr()) {
|
|
193
|
+
log.error("the session-state persist failed", { threadId, ...log.errorFields(result.error.cause) });
|
|
194
|
+
return { outcome: "failed", detail: describeDbError(result.error) };
|
|
195
|
+
}
|
|
196
|
+
switch (result.value) {
|
|
197
|
+
case "persisted":
|
|
198
|
+
return { outcome: "persisted" };
|
|
199
|
+
case "conflict":
|
|
200
|
+
// A concurrent turn landed first. The turn refuses and reads the state again.
|
|
201
|
+
return { outcome: "conflict" };
|
|
202
|
+
case "replayed": {
|
|
203
|
+
// An earlier run of the call landed while this run waited on the row lock.
|
|
204
|
+
const stored = call === undefined ? null : (await store.readCallResult(threadId, call.key)).unwrapOr(null);
|
|
205
|
+
if (stored === null) {
|
|
206
|
+
log.error("the stored result of an authoring call did not read back", { threadId });
|
|
207
|
+
return { outcome: "failed", detail: "the stored result of an earlier run of this call did not read back" };
|
|
208
|
+
}
|
|
209
|
+
return { outcome: "replayed", landed: stored.result };
|
|
197
210
|
}
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
211
|
+
case "absent":
|
|
212
|
+
// The pin writes the row first. A persist that finds no row means the
|
|
213
|
+
// pin-first invariant broke.
|
|
214
|
+
log.error("the session-state persist matched no row", { threadId });
|
|
215
|
+
return { outcome: "failed", detail: "no report session state row exists to persist the document" };
|
|
216
|
+
}
|
|
202
217
|
},
|
|
203
218
|
async stampRendered(threadId, hash) {
|
|
204
219
|
const result = await store.stampRendered(threadId, hash);
|
|
@@ -5,11 +5,10 @@
|
|
|
5
5
|
* The operation owns no table. It composes the reads and the writes that the
|
|
6
6
|
* store, the thread history, and the working memory already give. `getThread`
|
|
7
7
|
* finds the parent, and `latestSeq` gives the anchor. `listThreads` counts the
|
|
8
|
-
* report children, and `
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* the `messages` table.
|
|
8
|
+
* report children, and `render` makes the seed. `createThread` writes the row
|
|
9
|
+
* and the seed in one transaction. The two storage reads that this capability
|
|
10
|
+
* adds, `latestSeq` and `countUserTurnsAfter`, live on the thread history,
|
|
11
|
+
* because that module owns the `messages` table.
|
|
13
12
|
*
|
|
14
13
|
* The reads and the insert take no lock and no transaction. A concurrent turn
|
|
15
14
|
* can append between the anchor read and the insert, and a retract can cut the
|
|
@@ -18,8 +17,10 @@
|
|
|
18
17
|
* past the parent's current end is a normal state a reader expects.
|
|
19
18
|
*
|
|
20
19
|
* A conversation thread id comes from the host UI. But the spawn is a harness
|
|
21
|
-
* operation with no UI in front of it. Thus
|
|
22
|
-
* the
|
|
20
|
+
* operation with no UI in front of it. Thus the caller gives the child id, or
|
|
21
|
+
* the spawn mints a `randomUUID`, and the spawn returns the full row. A managed
|
|
22
|
+
* deployment gets the same behavior with no host code. A second spawn with the
|
|
23
|
+
* id of a child gives that child, and it writes nothing.
|
|
23
24
|
*
|
|
24
25
|
* The spawn also gates on the eyes of the composition. A report session records
|
|
25
26
|
* a version only after a look at the rendered page, and only a browser can look.
|
|
@@ -32,9 +33,9 @@
|
|
|
32
33
|
* The spawn seeds the context of the child at the anchor. It writes one message
|
|
33
34
|
* that holds the brief and a copy of the working-memory render. The transcript
|
|
34
35
|
* is append-only, thus the copy stays frozen at the anchor by construction, and
|
|
35
|
-
* a later change to the working memory leaves it as it is.
|
|
36
|
-
*
|
|
37
|
-
*
|
|
36
|
+
* a later change to the working memory leaves it as it is. The row and the seed
|
|
37
|
+
* commit in one transaction, because a report thread with no context is a dead
|
|
38
|
+
* end.
|
|
38
39
|
*
|
|
39
40
|
* The seed takes no redaction pass, and that is deliberate. The two parts are
|
|
40
41
|
* agent-authored, the same trust tier as the working-memory render of a
|
|
@@ -59,8 +60,8 @@
|
|
|
59
60
|
* the spawn.
|
|
60
61
|
*/
|
|
61
62
|
import { ResultAsync } from "neverthrow";
|
|
62
|
-
import type {
|
|
63
|
-
import type
|
|
63
|
+
import type { Querier } from "../state/db.js";
|
|
64
|
+
import { type Connectable, type DbError } from "../lib/db-result.js";
|
|
64
65
|
import { type ChromeConfig } from "../lib/chrome.js";
|
|
65
66
|
import type { AcquireEyes } from "../lib/eyes.js";
|
|
66
67
|
import type { Logger } from "../lib/logger.js";
|
|
@@ -98,10 +99,10 @@ export type SpawnRefusal = {
|
|
|
98
99
|
readonly threadType: ThreadType;
|
|
99
100
|
};
|
|
100
101
|
/** The paging inputs `listReportSessions` forwards to the thread listing. */
|
|
101
|
-
export
|
|
102
|
+
export type ReportSessionPaging = {
|
|
102
103
|
readonly page?: number;
|
|
103
104
|
readonly perPage?: number;
|
|
104
|
-
}
|
|
105
|
+
};
|
|
105
106
|
/**
|
|
106
107
|
* The intent brief of one report session. The caller writes it at the moment of
|
|
107
108
|
* the ask, and each field is short prose.
|
|
@@ -109,7 +110,7 @@ export interface ReportSessionPaging {
|
|
|
109
110
|
* The brief carries intent alone. No field names a path, a dataset, or a format,
|
|
110
111
|
* because the report session reads those from the workspace itself.
|
|
111
112
|
*/
|
|
112
|
-
export
|
|
113
|
+
export type ReportBrief = {
|
|
113
114
|
/** The question that the report must answer. */
|
|
114
115
|
readonly objective: string;
|
|
115
116
|
/** The reader of the report. */
|
|
@@ -120,25 +121,25 @@ export interface ReportBrief {
|
|
|
120
121
|
readonly exclusions?: string;
|
|
121
122
|
/** The points that the user did not decide yet. */
|
|
122
123
|
readonly openQuestions?: string;
|
|
123
|
-
}
|
|
124
|
+
};
|
|
124
125
|
/**
|
|
125
126
|
* The report child that carries the greatest anchor. A tie on the anchor comes
|
|
126
127
|
* from two concurrent spawns, and the newest `createdAt` wins it.
|
|
127
128
|
*/
|
|
128
|
-
export
|
|
129
|
+
export type NewestReportChild = {
|
|
129
130
|
readonly threadId: string;
|
|
130
131
|
readonly title: string | null;
|
|
131
132
|
/** The `parentSeq` of the child — the point of the parent transcript that it was built on. */
|
|
132
133
|
readonly anchor: number;
|
|
133
134
|
readonly createdAt: Date;
|
|
134
|
-
}
|
|
135
|
+
};
|
|
135
136
|
/**
|
|
136
137
|
* The state that a caller reads before a new spawn. `newestChild` is `null` when
|
|
137
138
|
* the parent holds no live report child, and an archived child reads the same
|
|
138
139
|
* way, because a steer into hidden state is not permitted. An absent parent
|
|
139
140
|
* reads the same way.
|
|
140
141
|
*/
|
|
141
|
-
export
|
|
142
|
+
export type ReportSessionDelta = {
|
|
142
143
|
readonly newestChild: NewestReportChild | null;
|
|
143
144
|
/**
|
|
144
145
|
* The count of the parent turns that a person opened past the anchor of
|
|
@@ -149,7 +150,7 @@ export interface ReportSessionDelta {
|
|
|
149
150
|
* gives no anchor to count from. No count query runs in that case.
|
|
150
151
|
*/
|
|
151
152
|
readonly userTurnsSinceAnchor: number | null;
|
|
152
|
-
}
|
|
153
|
+
};
|
|
153
154
|
/**
|
|
154
155
|
* The construction inputs of the report-session operations.
|
|
155
156
|
*
|
|
@@ -157,8 +158,8 @@ export interface ReportSessionDelta {
|
|
|
157
158
|
* `capture`, and a `chrome` config that names a browser. One present route
|
|
158
159
|
* passes the gate of the spawn.
|
|
159
160
|
*/
|
|
160
|
-
export
|
|
161
|
-
readonly pool:
|
|
161
|
+
export type ReportSessionSpawnDeps = {
|
|
162
|
+
readonly pool: Querier & Connectable;
|
|
162
163
|
/**
|
|
163
164
|
* The chrome config that the same composition gives to the eyes tool. The
|
|
164
165
|
* spawn reads only whether it names a browser, thus the spawn and the tool
|
|
@@ -201,7 +202,7 @@ export interface ReportSessionSpawnDeps {
|
|
|
201
202
|
readonly provenance?: ProvenanceSeam;
|
|
202
203
|
/** Operational logging seam. An omitted logger falls back to the no-op. */
|
|
203
204
|
readonly logger?: Logger;
|
|
204
|
-
}
|
|
205
|
+
};
|
|
205
206
|
/**
|
|
206
207
|
* Whether the composition gives a route to a look at the rendered page. The
|
|
207
208
|
* three routes are the eyes seam, the capture seam, and a chrome config that
|
|
@@ -220,7 +221,7 @@ export interface ReportSessionSpawnDeps {
|
|
|
220
221
|
* gate expression of the module, and a new route belongs here and nowhere else.
|
|
221
222
|
*/
|
|
222
223
|
export declare function compositionHasEyes(deps: Pick<ReportSessionSpawnDeps, "chrome" | "capture" | "eyes">): boolean;
|
|
223
|
-
export
|
|
224
|
+
export type ReportSessionSpawn = {
|
|
224
225
|
/**
|
|
225
226
|
* Make a `report` child of the parent conversation and return the full row.
|
|
226
227
|
* The child takes the analysis of the parent, the parent thread id, and the
|
|
@@ -234,10 +235,14 @@ export interface ReportSessionSpawn {
|
|
|
234
235
|
* Refused with a `SpawnRefusal`, no row written: a composition with no
|
|
235
236
|
* eyes, an absent or archived parent, and a parent that is not a
|
|
236
237
|
* conversation. A store refusal (`DbError`,
|
|
237
|
-
* `ThreadInputError`) passes through unchanged.
|
|
238
|
-
*
|
|
238
|
+
* `ThreadInputError`) passes through unchanged. The row and the seed
|
|
239
|
+
* commit in one transaction, thus a failed seed leaves no child.
|
|
240
|
+
*
|
|
241
|
+
* `childThreadId` names the child, and a spawn with no id mints a random
|
|
242
|
+
* one. A child with that id already stands after a first spawn, thus a
|
|
243
|
+
* second spawn gives it back and writes no second seed.
|
|
239
244
|
*/
|
|
240
|
-
spawnReportSession(parentThreadId: string, brief: ReportBrief): ResultAsync<Thread, SpawnRefusal | DbError | ThreadInputError>;
|
|
245
|
+
spawnReportSession(parentThreadId: string, brief: ReportBrief, childThreadId?: string): ResultAsync<Thread, SpawnRefusal | DbError | ThreadInputError>;
|
|
241
246
|
/**
|
|
242
247
|
* The report sessions of one analysis, through the thread listing narrowed
|
|
243
248
|
* to the type `report`. It adds no predicate of its own, so its answer and
|
|
@@ -259,7 +264,7 @@ export interface ReportSessionSpawn {
|
|
|
259
264
|
* and not by the anchor. It reads no model judgment, and it writes nothing.
|
|
260
265
|
*/
|
|
261
266
|
reportSessionDelta(parentThreadId: string): ResultAsync<ReportSessionDelta, DbError>;
|
|
262
|
-
}
|
|
267
|
+
};
|
|
263
268
|
/**
|
|
264
269
|
* The page size of the walk over the report children of one parent. The
|
|
265
270
|
* one-version policy keeps the count of children small, thus the walk reads one
|
|
@@ -5,11 +5,10 @@
|
|
|
5
5
|
* The operation owns no table. It composes the reads and the writes that the
|
|
6
6
|
* store, the thread history, and the working memory already give. `getThread`
|
|
7
7
|
* finds the parent, and `latestSeq` gives the anchor. `listThreads` counts the
|
|
8
|
-
* report children, and `
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* the `messages` table.
|
|
8
|
+
* report children, and `render` makes the seed. `createThread` writes the row
|
|
9
|
+
* and the seed in one transaction. The two storage reads that this capability
|
|
10
|
+
* adds, `latestSeq` and `countUserTurnsAfter`, live on the thread history,
|
|
11
|
+
* because that module owns the `messages` table.
|
|
13
12
|
*
|
|
14
13
|
* The reads and the insert take no lock and no transaction. A concurrent turn
|
|
15
14
|
* can append between the anchor read and the insert, and a retract can cut the
|
|
@@ -18,8 +17,10 @@
|
|
|
18
17
|
* past the parent's current end is a normal state a reader expects.
|
|
19
18
|
*
|
|
20
19
|
* A conversation thread id comes from the host UI. But the spawn is a harness
|
|
21
|
-
* operation with no UI in front of it. Thus
|
|
22
|
-
* the
|
|
20
|
+
* operation with no UI in front of it. Thus the caller gives the child id, or
|
|
21
|
+
* the spawn mints a `randomUUID`, and the spawn returns the full row. A managed
|
|
22
|
+
* deployment gets the same behavior with no host code. A second spawn with the
|
|
23
|
+
* id of a child gives that child, and it writes nothing.
|
|
23
24
|
*
|
|
24
25
|
* The spawn also gates on the eyes of the composition. A report session records
|
|
25
26
|
* a version only after a look at the rendered page, and only a browser can look.
|
|
@@ -32,9 +33,9 @@
|
|
|
32
33
|
* The spawn seeds the context of the child at the anchor. It writes one message
|
|
33
34
|
* that holds the brief and a copy of the working-memory render. The transcript
|
|
34
35
|
* is append-only, thus the copy stays frozen at the anchor by construction, and
|
|
35
|
-
* a later change to the working memory leaves it as it is.
|
|
36
|
-
*
|
|
37
|
-
*
|
|
36
|
+
* a later change to the working memory leaves it as it is. The row and the seed
|
|
37
|
+
* commit in one transaction, because a report thread with no context is a dead
|
|
38
|
+
* end.
|
|
38
39
|
*
|
|
39
40
|
* The seed takes no redaction pass, and that is deliberate. The two parts are
|
|
40
41
|
* agent-authored, the same trust tier as the working-memory render of a
|
|
@@ -169,34 +170,14 @@ export function createReportSessionSpawn(deps) {
|
|
|
169
170
|
// An unbound member gives a call that does nothing, thus the spawn emits at
|
|
170
171
|
// one site with no test of its own.
|
|
171
172
|
const observe = bindSessionEmit(deps.provenance, log);
|
|
172
|
-
/**
|
|
173
|
-
* Write the one seed message of the child and give the child back. The
|
|
174
|
-
* message rides as a record, not as user input: nobody typed it in the child
|
|
175
|
-
* thread, and a record is displayed but it never opens a turn.
|
|
176
|
-
*/
|
|
177
|
-
function seedChildContext(child, brief) {
|
|
178
|
-
return workingMemory
|
|
179
|
-
.render(child.analysisId)
|
|
180
|
-
.andThen((memory) => history.appendTurn(child.threadId, conversationRecordTurn(composeSeed(brief, memory))))
|
|
181
|
-
.map(() => child)
|
|
182
|
-
.orElse((fault) =>
|
|
183
|
-
// A report thread with no context is a dead end, thus the purge
|
|
184
|
-
// removes the child. The seed fault is the cause, thus it returns
|
|
185
|
-
// from each route. A failed purge leaves the child, and the caller
|
|
186
|
-
// still reads why the seed stopped.
|
|
187
|
-
store
|
|
188
|
-
.purgeThread(child.threadId)
|
|
189
|
-
.andThen(() => errAsync(fault))
|
|
190
|
-
.orElse(() => errAsync(fault)));
|
|
191
|
-
}
|
|
192
173
|
/**
|
|
193
174
|
* Pin the data snapshot of the child, through the injected anchor operation.
|
|
194
175
|
* The spawn mints one moment, and the transcript anchor and this snapshot are
|
|
195
176
|
* the two pins of that moment.
|
|
196
177
|
*
|
|
197
|
-
* The pin runs after the
|
|
178
|
+
* The pin runs after the row and the seed commit.
|
|
198
179
|
* `cortex_report_session_state` carries no foreign key to the thread table,
|
|
199
|
-
* thus a pin before a
|
|
180
|
+
* thus a pin before a failed create would leave an orphan row.
|
|
200
181
|
*
|
|
201
182
|
* A failed pin keeps the child. The operation is idempotent, thus the first
|
|
202
183
|
* session tool call pins again, and a purge on a transient store fault would
|
|
@@ -247,7 +228,7 @@ export function createReportSessionSpawn(deps) {
|
|
|
247
228
|
return collectReportChildren(analysisId, parentThreadId, page + 1, all);
|
|
248
229
|
});
|
|
249
230
|
}
|
|
250
|
-
function spawnReportSession(parentThreadId, brief) {
|
|
231
|
+
function spawnReportSession(parentThreadId, brief, childThreadId = randomUUID()) {
|
|
251
232
|
// The gate runs before the parent read. A session with no route to a look
|
|
252
233
|
// reaches the record gate and refuses there forever, thus the spawn is the
|
|
253
234
|
// one honest place to say so.
|
|
@@ -274,18 +255,22 @@ export function createReportSessionSpawn(deps) {
|
|
|
274
255
|
// The result is two titles a user renames, and no identifier collides.
|
|
275
256
|
return store
|
|
276
257
|
.listThreads({ analysisId: parent.analysisId, type: "report", parentThreadId })
|
|
277
|
-
.andThen((children) =>
|
|
278
|
-
|
|
279
|
-
|
|
258
|
+
.andThen((children) =>
|
|
259
|
+
// The render follows the anchor read, thus the copy of the
|
|
260
|
+
// working memory is the state at the anchor.
|
|
261
|
+
workingMemory
|
|
262
|
+
.render(parent.analysisId)
|
|
263
|
+
.andThen((memory) => store.createThread({
|
|
264
|
+
threadId: childThreadId,
|
|
280
265
|
analysisId: parent.analysisId,
|
|
281
266
|
title: composeTitle(parent.title, children.total + 1),
|
|
282
267
|
type: "report",
|
|
283
268
|
parentThreadId,
|
|
284
269
|
parentSeq: anchor,
|
|
285
|
-
|
|
286
|
-
//
|
|
287
|
-
|
|
288
|
-
|
|
270
|
+
// The seed rides as a record, not as user input: nobody typed it in
|
|
271
|
+
// the child thread, and a record is displayed but it never opens a turn.
|
|
272
|
+
firstTurn: conversationRecordTurn(composeSeed(brief, memory)),
|
|
273
|
+
}))
|
|
289
274
|
// The pin follows the seed. `pinSessionSnapshot` never
|
|
290
275
|
// rejects, thus the safe bridge adds no error variant.
|
|
291
276
|
.andThen((child) => ResultAsync.fromSafePromise(pinSessionSnapshot(child))));
|