@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
package/dist/app/chat-turn.js
CHANGED
|
@@ -1,23 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* The run of one chat turn: `runOpenTurn` runs the root loop over a prepared turn, stores the opening and each
|
|
3
|
+
* round, and closes the turn with its outcome. A transport gives the surface and the store of the turn. The turn
|
|
4
|
+
* workflow (`chat-turn-workflow.ts`) gives the transport of a workflow, and a host reaches the turn through it.
|
|
5
5
|
*/
|
|
6
|
+
import { presentFirst } from "../lib/present.js";
|
|
7
|
+
import { errorNameOf } from "../lib/thrown.js";
|
|
6
8
|
import { unwrapOrThrow } from "../lib/result.js";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
+
import { rulesForContextWindow } from "../loop/compaction.js";
|
|
10
|
+
import { finalText, runLoop } from "../loop/run-loop.js";
|
|
11
|
+
import { isTurnCredentialMissing } from "../loop/turn-credentials.js";
|
|
9
12
|
import { compactionExchangeOf, syntheticUserMessage } from "../memory/ai-sdk-message-storage.js";
|
|
10
|
-
import { createConversationDisplayRecorder } from "../memory/conversation-display-recorder.js";
|
|
11
13
|
import { deriveThreadTitle } from "../memory/derive-thread-title.js";
|
|
12
14
|
import { conversationRecordTurn, createThreadHistory } from "../memory/thread-history.js";
|
|
13
15
|
import { createThreadStore } from "../memory/thread-store.js";
|
|
16
|
+
import { isWorkflowCancellation } from "../runtime/dbos.js";
|
|
14
17
|
import { createWorkingMemory } from "../memory/working-memory.js";
|
|
15
|
-
import { findProviderError } from "../providers/errors.js";
|
|
18
|
+
import { findProviderError, modelFailureOf } from "../providers/errors.js";
|
|
16
19
|
import { MEMORY_COMPACTION_REQUEST, SUMMARY_COMPACTION_REQUEST } from "../prompts/compaction.js";
|
|
17
20
|
import { CONVERSATION_PROMPT_CACHE } from "../providers/prompt-cache.js";
|
|
18
21
|
import { loadAnalysisStatus, queryNonTerminalRunsByAnalysis } from "../state/index.js";
|
|
19
22
|
import { createToolOutputStore } from "../state/tool-outputs.js";
|
|
20
|
-
import { suspensionOfFailure } from "../workflows/suspension.js";
|
|
21
23
|
import { assembleMessages, contextRecordsFor } from "./message-assembly.js";
|
|
22
24
|
import { renderRunActivity, renderRunActivityUnavailable, RUN_ACTIVITY_DETAIL_LIMIT } from "./run-activity.js";
|
|
23
25
|
import { createNoopLogger } from "../lib/console-logger.js";
|
|
@@ -28,6 +30,28 @@ import { bindSessionEmit } from "../provenance/seam.js";
|
|
|
28
30
|
* inside {@link assembleMessages} (applied once to the new user input only).
|
|
29
31
|
*/
|
|
30
32
|
export async function prepareChatTurn(deps, params) {
|
|
33
|
+
const opened = await openThread(deps, params);
|
|
34
|
+
if (opened.kind === "not_found")
|
|
35
|
+
return opened;
|
|
36
|
+
const { pool } = deps;
|
|
37
|
+
const { analysisId, threadId, userInput } = params;
|
|
38
|
+
const assembled = await assembleMessages({
|
|
39
|
+
threadId,
|
|
40
|
+
threadType: opened.threadType,
|
|
41
|
+
analysisId,
|
|
42
|
+
userInput,
|
|
43
|
+
...(await readTurnContext(pool, analysisId)),
|
|
44
|
+
history: createThreadHistory(pool),
|
|
45
|
+
workingMemory: createWorkingMemory(pool),
|
|
46
|
+
logger: deps.logger,
|
|
47
|
+
});
|
|
48
|
+
return { kind: "ok", threadType: opened.threadType, ...assembled };
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Open the thread of a turn: check that the analysis owns it, make it when it is absent, and seed its title. A
|
|
52
|
+
* thread that a different analysis owns is `not_found`.
|
|
53
|
+
*/
|
|
54
|
+
export async function openThread(deps, params) {
|
|
31
55
|
const { pool } = deps;
|
|
32
56
|
const { analysisId, threadId, userInput } = params;
|
|
33
57
|
const logger = (deps.logger ?? createNoopLogger()).named("harness.chat");
|
|
@@ -79,69 +103,30 @@ export async function prepareChatTurn(deps, params) {
|
|
|
79
103
|
catch (err) {
|
|
80
104
|
logger.warn("title-seed failed (non-fatal)", logger.errorFields(err));
|
|
81
105
|
}
|
|
82
|
-
|
|
83
|
-
threadId,
|
|
84
|
-
threadType,
|
|
85
|
-
analysisId,
|
|
86
|
-
userInput,
|
|
87
|
-
...(await readTurnContext(pool, analysisId)),
|
|
88
|
-
history: createThreadHistory(pool),
|
|
89
|
-
workingMemory: createWorkingMemory(pool),
|
|
90
|
-
...(deps.logger ? { logger: deps.logger } : {}),
|
|
91
|
-
});
|
|
92
|
-
return { kind: "ok", threadType, ...assembled };
|
|
106
|
+
return { kind: "ok", threadType };
|
|
93
107
|
}
|
|
94
108
|
/** The analysis context and the run activity of a turn. A failed read gives the fallback of its kind. */
|
|
95
|
-
async function readTurnContext(pool, analysisId) {
|
|
109
|
+
export async function readTurnContext(pool, analysisId) {
|
|
96
110
|
const analysisState = await loadAnalysisStatus(pool, analysisId).unwrapOr(null);
|
|
97
111
|
const runActivityContext = await queryNonTerminalRunsByAnalysis(pool, analysisId, RUN_ACTIVITY_DETAIL_LIMIT).match((activity) => renderRunActivity(activity), () => renderRunActivityUnavailable());
|
|
98
112
|
return { analysisContext: analysisState?.context ?? null, runActivityContext };
|
|
99
113
|
}
|
|
100
114
|
/**
|
|
101
|
-
*
|
|
102
|
-
* turn
|
|
103
|
-
*/
|
|
104
|
-
export async function openChatTurn(deps, params) {
|
|
105
|
-
const openedAtMs = Date.now();
|
|
106
|
-
let prepared;
|
|
107
|
-
try {
|
|
108
|
-
prepared = await prepareChatTurn(deps, params);
|
|
109
|
-
}
|
|
110
|
-
catch (cause) {
|
|
111
|
-
return { kind: "prepare_failed", cause };
|
|
112
|
-
}
|
|
113
|
-
if (prepared.kind === "not_found")
|
|
114
|
-
return prepared;
|
|
115
|
-
const agent = deps.agents.forThread(prepared.threadType);
|
|
116
|
-
if (agent.isErr())
|
|
117
|
-
return { kind: "agent_unresolved", threadType: prepared.threadType };
|
|
118
|
-
const ready = prepared;
|
|
119
|
-
return {
|
|
120
|
-
kind: "ready",
|
|
121
|
-
agent: agent.value,
|
|
122
|
-
run: (run) => runOpenTurn(deps, params, ready, agent.value, { ...run, startedAtMs: run.startedAtMs ?? openedAtMs }),
|
|
123
|
-
};
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Run one chat turn: open it, store its opening, run the root loop with a round sink that stores
|
|
127
|
-
* each round, and close the turn with its outcome.
|
|
115
|
+
* Run a prepared turn: store its opening, run the root loop with a round sink that stores each round, and close the
|
|
116
|
+
* turn with its outcome.
|
|
128
117
|
*/
|
|
129
|
-
export async function
|
|
130
|
-
const { analysisId, threadId, userInput, ...run } = params;
|
|
131
|
-
const opened = await openChatTurn(deps, { analysisId, threadId, userInput });
|
|
132
|
-
if (opened.kind !== "ready")
|
|
133
|
-
return opened;
|
|
134
|
-
return opened.run(run);
|
|
135
|
-
}
|
|
136
|
-
async function runOpenTurn(deps, turn, prepared, agent, params) {
|
|
118
|
+
export async function runOpenTurn(deps, turn, prepared, agent, params, transport) {
|
|
137
119
|
const logger = (deps.logger ?? createNoopLogger()).named("harness.chat");
|
|
138
120
|
const session = { ...params.session, provenance: { agentId: agent.id, callPath: [agent.id] } };
|
|
139
121
|
const history = createThreadHistory(deps.pool, deps.logger);
|
|
140
|
-
const recorder =
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
122
|
+
const { recorder } = transport;
|
|
123
|
+
let groupIndex = 0;
|
|
124
|
+
/** The group with its key in the turn, when the transport keys its writes. */
|
|
125
|
+
const keyed = (group) => {
|
|
126
|
+
const index = groupIndex;
|
|
127
|
+
groupIndex += 1;
|
|
128
|
+
return transport.groupKey === undefined ? group : { ...group, key: transport.groupKey(index) };
|
|
129
|
+
};
|
|
145
130
|
// The groups that did not land yet, in the order of the turn. A failed write keeps them for the next write.
|
|
146
131
|
let pending = [];
|
|
147
132
|
let startSeq;
|
|
@@ -152,9 +137,11 @@ async function runOpenTurn(deps, turn, prepared, agent, params) {
|
|
|
152
137
|
// A turn that ends before its user message was sent has no rows to close.
|
|
153
138
|
if (!opened() || (pending.length === 0 && close === undefined))
|
|
154
139
|
return;
|
|
155
|
-
const closing = close === undefined ? {} : { close };
|
|
156
|
-
const write = startSeq === undefined
|
|
157
|
-
|
|
140
|
+
const closing = close === undefined ? {} : { close: close.note === undefined ? close : { ...close, note: keyed(close.note) } };
|
|
141
|
+
const write = startSeq === undefined
|
|
142
|
+
? { opening: presentFirst(pending, "the pending turn"), rounds: pending.slice(1), ...closing }
|
|
143
|
+
: { startSeq, rounds: pending, ...closing };
|
|
144
|
+
(await transport.durably("chat-turn.write", async () => await history.writeTurn(turn.threadId, write))).match((written) => {
|
|
158
145
|
pending = [];
|
|
159
146
|
startSeq = written.startSeq;
|
|
160
147
|
storeError = undefined;
|
|
@@ -167,7 +154,8 @@ async function runOpenTurn(deps, turn, prepared, agent, params) {
|
|
|
167
154
|
if (!opened() && round.messages[0] !== prepared.userMessage) {
|
|
168
155
|
// A turn-start compaction comes before the user message, thus its rows land before the turn opens. A later
|
|
169
156
|
// write cannot keep that order, thus a failed write is not tried again, and the next turn compacts again.
|
|
170
|
-
const
|
|
157
|
+
const group = keyed({ modelMessages: round.messages, displayMessages: recorder.takeRound(round.messages) });
|
|
158
|
+
const appended = await transport.durably("chat-turn.compaction-write", async () => await history.appendTurn(turn.threadId, group));
|
|
171
159
|
if (appended.isErr()) {
|
|
172
160
|
logger.warn("chat turn compaction write failed", {
|
|
173
161
|
threadId: turn.threadId,
|
|
@@ -178,28 +166,34 @@ async function runOpenTurn(deps, turn, prepared, agent, params) {
|
|
|
178
166
|
return;
|
|
179
167
|
}
|
|
180
168
|
const author = params.author === undefined ? {} : { author: params.author };
|
|
181
|
-
|
|
169
|
+
const assistantBefore = recorder.assistantMessageId();
|
|
170
|
+
pending.push(keyed(opened()
|
|
182
171
|
? { modelMessages: round.messages, displayMessages: recorder.takeRound(round.messages) }
|
|
183
|
-
: { modelMessages: round.messages, displayMessages: recorder.takeOpening(), ...author });
|
|
172
|
+
: { modelMessages: round.messages, displayMessages: recorder.takeOpening(), ...author }));
|
|
184
173
|
await flush();
|
|
174
|
+
if (recorder.assistantMessageId() !== assistantBefore)
|
|
175
|
+
await transport.announce?.(recorder.assistantMessageId());
|
|
185
176
|
};
|
|
186
|
-
const
|
|
187
|
-
const compaction = compactionPolicy(deps, turn.analysisId, params, prepared.threadType, agent, recorder.emit);
|
|
177
|
+
const compaction = compactionPolicy(deps, turn.analysisId, prepared.threadType, agent);
|
|
188
178
|
let outcome;
|
|
189
179
|
let fallbackText;
|
|
190
180
|
try {
|
|
191
|
-
const run = await
|
|
192
|
-
provider:
|
|
193
|
-
signal:
|
|
194
|
-
emit:
|
|
195
|
-
|
|
196
|
-
|
|
181
|
+
const run = await runLoop(agent, prepared.history, session, {
|
|
182
|
+
provider: deps.provider,
|
|
183
|
+
signal: transport.signal,
|
|
184
|
+
emit: transport.emit,
|
|
185
|
+
onText: transport.onText,
|
|
186
|
+
chatStream: transport.chatStream,
|
|
187
|
+
toolWriter: transport.toolWriter,
|
|
188
|
+
modelMiddleware: transport.modelMiddleware,
|
|
189
|
+
usageRecorder: deps.usageRecorder,
|
|
197
190
|
toolOutputStore: createToolOutputStore(deps.pool),
|
|
198
191
|
promptCache: params.promptCache ?? CONVERSATION_PROMPT_CACHE,
|
|
199
192
|
turnInput: [prepared.userMessage, ...prepared.contextRecords],
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
193
|
+
compaction,
|
|
194
|
+
logger: deps.logger,
|
|
195
|
+
approve: transport.approve,
|
|
196
|
+
pause: transport.pause,
|
|
203
197
|
onRound: storeRound,
|
|
204
198
|
});
|
|
205
199
|
outcome = run.finish.reason === "aborted" ? { status: "aborted", finish: run.finish } : { status: "done", finish: run.finish };
|
|
@@ -208,63 +202,95 @@ async function runOpenTurn(deps, turn, prepared, agent, params) {
|
|
|
208
202
|
fallbackText = finalText(run.messages.slice(prepared.history.length).filter((message) => compactionExchangeOf(message) === undefined));
|
|
209
203
|
}
|
|
210
204
|
catch (cause) {
|
|
205
|
+
// A canceled workflow writes nothing more: its recovery, or the stop of its host, closes the turn.
|
|
206
|
+
if (isWorkflowCancellation(cause))
|
|
207
|
+
throw cause;
|
|
211
208
|
// A provider failure that races an abort stays a failure, thus both facts must hold.
|
|
212
|
-
const aborted =
|
|
213
|
-
outcome = aborted ? { status: "aborted" } : { status: "failed", reason: failureReasonOf(cause), cause };
|
|
209
|
+
const aborted = transport.signal.aborted && errorNameOf(cause) === "AbortError";
|
|
210
|
+
outcome = aborted ? { status: "aborted" } : { status: "failed", reason: failureReasonOf(cause), code: failureCodeOf(cause), cause };
|
|
211
|
+
// A host gets the scrubbed text and the code of the failure. This record is the one place where the whole
|
|
212
|
+
// cause survives.
|
|
213
|
+
if (outcome.status === "failed")
|
|
214
|
+
logger.error("chat turn failed", { threadId: turn.threadId, code: outcome.code, ...logger.errorFields(cause) });
|
|
214
215
|
}
|
|
215
216
|
const durationMs = Date.now() - params.startedAtMs;
|
|
216
217
|
const turnUsage = outcome.status === "failed" ? undefined : outcome.finish?.turnUsage;
|
|
217
218
|
await flush({
|
|
218
219
|
status: outcome.status,
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
220
|
+
reason: outcome.status === "failed" ? outcome.reason : undefined,
|
|
221
|
+
note: outcome.status === "failed" ? conversationRecordTurn(failureNote(outcome.reason)) : outcome.status === "aborted" ? interruptionNote() : undefined,
|
|
222
|
+
turnUsage,
|
|
222
223
|
turnDurationMs: durationMs,
|
|
223
224
|
});
|
|
225
|
+
const storeErrorField = storeError === undefined ? undefined : { storeError };
|
|
224
226
|
return {
|
|
225
227
|
kind: "ran",
|
|
226
228
|
outcome,
|
|
227
229
|
opened: startSeq !== undefined,
|
|
228
|
-
...(storeError === undefined ? {} : { storeError }),
|
|
229
230
|
durationMs,
|
|
230
|
-
|
|
231
|
-
|
|
231
|
+
turnUsage: turnUsage === undefined ? undefined : { ...turnUsage },
|
|
232
|
+
fallbackText,
|
|
233
|
+
...storeErrorField,
|
|
232
234
|
};
|
|
233
235
|
}
|
|
234
236
|
/** The sanitized text of the user message, thus the display never holds a secret that the model does not see. */
|
|
235
|
-
function userTextOf(message) {
|
|
237
|
+
export function userTextOf(message) {
|
|
236
238
|
if (typeof message.content === "string")
|
|
237
239
|
return message.content;
|
|
238
240
|
return message.content.map((part) => (part.type === "text" ? part.text : "")).join("");
|
|
239
241
|
}
|
|
240
242
|
const WORKING_MEMORY_TOOL_ID = "update_working_memory";
|
|
241
|
-
function compactionPolicy(deps, analysisId,
|
|
243
|
+
function compactionPolicy(deps, analysisId, threadType, agent) {
|
|
242
244
|
if (agent.compaction === undefined)
|
|
243
245
|
return undefined;
|
|
244
246
|
// A report thread reads a frozen copy of the working memory, thus its agent declares no memory tool.
|
|
245
247
|
const remembers = agent.tools.some((tool) => tool.id === WORKING_MEMORY_TOOL_ID);
|
|
246
248
|
const workingMemory = createWorkingMemory(deps.pool);
|
|
247
249
|
return {
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
provider: params.chat((event) => (event.type === "text-delta" ? undefined : emit(event))),
|
|
250
|
+
// The capabilities are read for each turn, because a host can switch the model of the conversation between turns.
|
|
251
|
+
...rulesForContextWindow(agent.compaction, deps.provider.capabilities.contextWindow),
|
|
251
252
|
request: remembers ? MEMORY_COMPACTION_REQUEST : SUMMARY_COMPACTION_REQUEST,
|
|
252
253
|
mask: remembers ? { allow: [WORKING_MEMORY_TOOL_ID] } : "none",
|
|
253
254
|
keepFirstTurn: threadType === "report",
|
|
254
255
|
recordsAfter: async (view) => contextRecordsFor({ threadType, analysisId, workingMemory, ...(await readTurnContext(deps.pool, analysisId)) }, view),
|
|
255
256
|
};
|
|
256
257
|
}
|
|
258
|
+
/**
|
|
259
|
+
* The machine code of a failure, which the end frame of a turn carries for a host. A turn workflow pauses on a
|
|
260
|
+
* suspend error, a refused or missing credential, and an outage, thus their codes come only from a turn with no
|
|
261
|
+
* workflow: the suspend reason of the host, `credential`, or `outage`. Each other provider error gives `provider`,
|
|
262
|
+
* and each other error gives `internal`.
|
|
263
|
+
*/
|
|
264
|
+
function failureCodeOf(err) {
|
|
265
|
+
if (isTurnCredentialMissing(err))
|
|
266
|
+
return "credential";
|
|
267
|
+
const failure = modelFailureOf(err);
|
|
268
|
+
switch (failure.kind) {
|
|
269
|
+
case "billing":
|
|
270
|
+
return failure.reason;
|
|
271
|
+
case "credential":
|
|
272
|
+
return "credential";
|
|
273
|
+
case "outage":
|
|
274
|
+
return "outage";
|
|
275
|
+
case "other":
|
|
276
|
+
return findProviderError(err) === undefined ? "internal" : "provider";
|
|
277
|
+
}
|
|
278
|
+
}
|
|
257
279
|
/** The reason of a failed turn. It never holds the error message, because each later turn sends the note to the vendor. */
|
|
258
280
|
function failureReasonOf(err) {
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
281
|
+
if (isTurnCredentialMissing(err))
|
|
282
|
+
return "The turn has no credential of its user.";
|
|
283
|
+
const failure = modelFailureOf(err);
|
|
284
|
+
switch (failure.kind) {
|
|
285
|
+
case "billing":
|
|
286
|
+
return failure.reason;
|
|
287
|
+
case "credential":
|
|
288
|
+
return "The model endpoint refused the credential.";
|
|
289
|
+
case "outage":
|
|
290
|
+
return "The model request failed.";
|
|
291
|
+
case "other":
|
|
292
|
+
return findProviderError(err) === undefined ? "The turn stopped on an internal error." : "The model request failed.";
|
|
293
|
+
}
|
|
268
294
|
}
|
|
269
295
|
/**
|
|
270
296
|
* The note of an aborted turn. Without it, the next turn reads the request of the aborted turn as open, and
|
|
@@ -38,6 +38,8 @@
|
|
|
38
38
|
* form resolves to the same file in every frame, including the conversation agent's, so
|
|
39
39
|
* the projection is unconditional.
|
|
40
40
|
*/
|
|
41
|
+
import { presentFirst } from "../lib/present.js";
|
|
42
|
+
import { collapseWhitespace } from "../lib/text.js";
|
|
41
43
|
import { toAnalysisRootPath } from "../workspace/paths.js";
|
|
42
44
|
import { profileCaveats, profileDimensions, profileFileRecords, profileGroups } from "./data-profile-view.js";
|
|
43
45
|
/**
|
|
@@ -99,11 +101,11 @@ function clamp(text, max) {
|
|
|
99
101
|
* keeps one record on one line.
|
|
100
102
|
*/
|
|
101
103
|
function clip(text, max) {
|
|
102
|
-
return clamp(text
|
|
104
|
+
return clamp(collapseWhitespace(text), max);
|
|
103
105
|
}
|
|
104
106
|
/** Non-empty, whitespace-collapsed value, or `undefined` — nulls and blanks read the same. */
|
|
105
107
|
function present(value) {
|
|
106
|
-
const flat = value
|
|
108
|
+
const flat = value === null || value === undefined ? undefined : collapseWhitespace(value);
|
|
107
109
|
return flat ? flat : undefined;
|
|
108
110
|
}
|
|
109
111
|
/** `Homo sapiens (taxon 9606)`, plus a confidence marker when the profiler was unsure. */
|
|
@@ -128,9 +130,9 @@ function identityLine(result) {
|
|
|
128
130
|
const identity = [
|
|
129
131
|
[present(result.domain), present(result.subtype)].filter((f) => f !== undefined).join(" / ") || undefined,
|
|
130
132
|
formatOrganism(result.organism),
|
|
131
|
-
present(result.tissue) ? `tissue: ${present(result.tissue)}` : undefined,
|
|
132
|
-
present(result.cellType) ? `cells: ${present(result.cellType)}` : undefined,
|
|
133
|
-
present(result.condition) ? `condition: ${present(result.condition)}` : undefined,
|
|
133
|
+
present(result.tissue) ? `tissue: ${String(present(result.tissue))}` : undefined,
|
|
134
|
+
present(result.cellType) ? `cells: ${String(present(result.cellType))}` : undefined,
|
|
135
|
+
present(result.condition) ? `condition: ${String(present(result.condition))}` : undefined,
|
|
134
136
|
].filter((f) => f !== undefined);
|
|
135
137
|
return `Dataset: ${identity.length > 0 ? identity.join(" — ") : clip(result.summary, MAX_IDENTITY_CHARS)}`;
|
|
136
138
|
}
|
|
@@ -175,7 +177,7 @@ function formatCensus(view, group) {
|
|
|
175
177
|
if (formats.length === 0)
|
|
176
178
|
return present(view.format);
|
|
177
179
|
if (formats.length === 1)
|
|
178
|
-
return present(formats
|
|
180
|
+
return present(presentFirst(formats, "the single group format").format);
|
|
179
181
|
const shown = formats.slice(0, MAX_GROUP_FORMATS).map((entry) => `${entry.format} ${entry.count}`);
|
|
180
182
|
return `${shown.join(", ")}${formats.length > shown.length ? `, +${formats.length - shown.length}` : ""}`;
|
|
181
183
|
}
|
|
@@ -278,7 +280,7 @@ function caveatsSection(caveats, budget) {
|
|
|
278
280
|
return line;
|
|
279
281
|
}
|
|
280
282
|
const room = budget - render([""]).length;
|
|
281
|
-
return room >= MIN_PROSE_CHARS ? render([clamp(capped
|
|
283
|
+
return room >= MIN_PROSE_CHARS ? render([clamp(presentFirst(capped, "the shortened caveat"), room)]) : undefined;
|
|
282
284
|
}
|
|
283
285
|
/**
|
|
284
286
|
* Fit the body sections into `budget`, in order, each one whole or absent.
|
|
@@ -380,7 +382,7 @@ export function buildDataProfileOrientation(result, analysisId, maxChars = DATA_
|
|
|
380
382
|
// what remains, so the one line saying how much of the dataset is accounted for
|
|
381
383
|
// cannot be the line the body's budget drops.
|
|
382
384
|
const identityBudget = Math.max(0, Math.min(MAX_IDENTITY_CHARS, maxChars - (census ? census.length + 1 : 0)));
|
|
383
|
-
const header = [clamp(identityLine(result), identityBudget), census].
|
|
385
|
+
const header = [clamp(identityLine(result), identityBudget), census].flatMap((line) => (line ? [line] : [])).join("\n");
|
|
384
386
|
const headerText = clamp(header, maxChars);
|
|
385
387
|
const bodyBudget = maxChars - headerText.length - 1;
|
|
386
388
|
if (bodyBudget <= 0)
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import type { DataProfileDimension, DataProfileFile, DataProfileResult } from "../contracts/data-profile.js";
|
|
15
15
|
/** A group as consumers read it, whether it was authored as a group or as a kind. */
|
|
16
|
-
export
|
|
16
|
+
export type ProfileGroupView = {
|
|
17
17
|
readonly id: string;
|
|
18
18
|
readonly name: string;
|
|
19
19
|
readonly memberRepresents: string;
|
|
@@ -26,18 +26,18 @@ export interface ProfileGroupView {
|
|
|
26
26
|
/** The scanner slots this group carries, on a groups-era row. */
|
|
27
27
|
readonly slotIds?: readonly string[];
|
|
28
28
|
readonly unclassified?: boolean;
|
|
29
|
-
}
|
|
29
|
+
};
|
|
30
30
|
/**
|
|
31
31
|
* A dimension as consumers read it. `cardinalities` carries every number the
|
|
32
32
|
* observations reported, side by side: there is no canonical count, and a single field
|
|
33
33
|
* would be a silent judgement between disagreeing sources.
|
|
34
34
|
*/
|
|
35
|
-
export
|
|
35
|
+
export type ProfileDimensionView = {
|
|
36
36
|
readonly label: string;
|
|
37
37
|
readonly cardinalities: readonly number[];
|
|
38
38
|
readonly exampleValues: readonly string[];
|
|
39
39
|
readonly description?: string;
|
|
40
|
-
}
|
|
40
|
+
};
|
|
41
41
|
/**
|
|
42
42
|
* Every number the observations reported, side by side and de-duplicated.
|
|
43
43
|
*
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* older consumers already handled. Nothing it drops is unavailable — the full record is
|
|
12
12
|
* on the row, and consumers that want the resolved structure read it directly.
|
|
13
13
|
*/
|
|
14
|
+
import { presentFirst } from "../lib/present.js";
|
|
14
15
|
/**
|
|
15
16
|
* Every number the observations reported, side by side and de-duplicated.
|
|
16
17
|
*
|
|
@@ -40,7 +41,7 @@ function examplesOf(dimension) {
|
|
|
40
41
|
return [];
|
|
41
42
|
}
|
|
42
43
|
function fromGroup(group) {
|
|
43
|
-
const format = group.formats.length === 1 ? group.formats
|
|
44
|
+
const format = group.formats.length === 1 ? presentFirst(group.formats, "the single group format").format : undefined;
|
|
44
45
|
return {
|
|
45
46
|
id: group.id,
|
|
46
47
|
name: group.name,
|
|
@@ -48,9 +49,9 @@ function fromGroup(group) {
|
|
|
48
49
|
description: group.description,
|
|
49
50
|
count: group.count,
|
|
50
51
|
pattern: group.displayPattern,
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
format: format ? format : undefined,
|
|
53
|
+
slotIds: group.slots?.map((slot) => slot.id),
|
|
54
|
+
unclassified: group.unclassified ? true : undefined,
|
|
54
55
|
};
|
|
55
56
|
}
|
|
56
57
|
/** The dataset's structure, from whichever field the snapshot carries it in. */
|
|
@@ -64,7 +65,7 @@ export function profileGroups(result) {
|
|
|
64
65
|
description: kind.description,
|
|
65
66
|
count: kind.count,
|
|
66
67
|
pattern: kind.pathPattern,
|
|
67
|
-
|
|
68
|
+
format: kind.format ? kind.format : undefined,
|
|
68
69
|
}));
|
|
69
70
|
}
|
|
70
71
|
/** What varies across the dataset, from whichever field the snapshot carries it in. */
|
|
@@ -74,14 +75,14 @@ export function profileDimensions(result) {
|
|
|
74
75
|
label: dimension.label,
|
|
75
76
|
cardinalities: dimensionCardinalities(dimension),
|
|
76
77
|
exampleValues: examplesOf(dimension),
|
|
77
|
-
|
|
78
|
+
description: dimension.description ? dimension.description : undefined,
|
|
78
79
|
}));
|
|
79
80
|
}
|
|
80
81
|
return (result.axes ?? []).map((axis) => ({
|
|
81
82
|
label: axis.label,
|
|
82
83
|
cardinalities: [axis.cardinality],
|
|
83
84
|
exampleValues: axis.exampleValues ?? [],
|
|
84
|
-
|
|
85
|
+
description: axis.description ? axis.description : undefined,
|
|
85
86
|
}));
|
|
86
87
|
}
|
|
87
88
|
/**
|
|
@@ -96,7 +97,7 @@ export function profileFileRecords(result) {
|
|
|
96
97
|
return result.groups.flatMap((group) => (group.memberAnnotations ?? []).map((annotation) => ({
|
|
97
98
|
path: annotation.path,
|
|
98
99
|
description: annotation.note,
|
|
99
|
-
|
|
100
|
+
format: group.formats.length === 1 ? presentFirst(group.formats, "the single group format").format : undefined,
|
|
100
101
|
})));
|
|
101
102
|
}
|
|
102
103
|
return result.files ?? [];
|
|
@@ -0,0 +1,42 @@
|
|
|
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 { type ChatTurns } from "./chat-turn-workflow.js";
|
|
8
|
+
import type { LoopOptions } from "../loop/run-loop.js";
|
|
9
|
+
import type { EmitFn } from "../loop/types.js";
|
|
10
|
+
import type { PromptCachePolicy } from "../providers/types.js";
|
|
11
|
+
import type { AgentDefinition } from "../loop/types.js";
|
|
12
|
+
import { type ChatTurnRan, type ChatTurnRefusal, type ChatTurnSession, type OpenChatTurnParams, type RunChatTurnDeps } from "./chat-turn.js";
|
|
13
|
+
/** The transport values of a turn in process. */
|
|
14
|
+
export type InProcessRunParams = {
|
|
15
|
+
readonly session: ChatTurnSession;
|
|
16
|
+
readonly emit: EmitFn;
|
|
17
|
+
readonly signal: AbortSignal;
|
|
18
|
+
readonly author?: string;
|
|
19
|
+
/** Absent counts from the open. */
|
|
20
|
+
readonly startedAtMs?: number;
|
|
21
|
+
readonly promptCache?: PromptCachePolicy;
|
|
22
|
+
/** The decision of the user on a call that asks for approval. Absent: the loop denies the call. */
|
|
23
|
+
readonly approve?: LoopOptions["approve"];
|
|
24
|
+
};
|
|
25
|
+
export type InProcessTurnParams = OpenChatTurnParams & InProcessRunParams;
|
|
26
|
+
export type InProcessTurnResult = ChatTurnRefusal | ChatTurnRan;
|
|
27
|
+
/** A prepared turn with its agent. Call `run` one time: each call stores a new opening of the same user message. */
|
|
28
|
+
export type InProcessOpenTurn = {
|
|
29
|
+
readonly kind: "ready";
|
|
30
|
+
readonly agent: AgentDefinition;
|
|
31
|
+
readonly run: (params: InProcessRunParams) => Promise<ChatTurnRan>;
|
|
32
|
+
};
|
|
33
|
+
/** Prepare a turn and resolve its agent. A refusal comes back before any row of the turn exists. */
|
|
34
|
+
export declare function openInProcessTurn(deps: RunChatTurnDeps, params: OpenChatTurnParams): Promise<InProcessOpenTurn | ChatTurnRefusal>;
|
|
35
|
+
/** Open a turn in process and run it. */
|
|
36
|
+
export declare function runInProcessTurn(deps: RunChatTurnDeps, params: InProcessTurnParams): Promise<InProcessTurnResult>;
|
|
37
|
+
/**
|
|
38
|
+
* The chat turns of a host test, over the turn in process: `open` starts the turn at once, `read` gives its frames
|
|
39
|
+
* with the end frame of a turn workflow, `stop` aborts it, and `outcome` gives its end. An ask has no answer here,
|
|
40
|
+
* thus a call that asks for an approval is denied.
|
|
41
|
+
*/
|
|
42
|
+
export declare function inProcessChatTurns(deps: RunChatTurnDeps): ChatTurns;
|