@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
|
@@ -49,12 +49,16 @@
|
|
|
49
49
|
* deadline. A realization that hangs while it starts a browser would otherwise hold the whole agent turn,
|
|
50
50
|
* and no outcome would ever arrive.
|
|
51
51
|
*/
|
|
52
|
+
import { errorMessageOf } from "../../lib/thrown.js";
|
|
53
|
+
import { textOf } from "../../lib/unknown-text.js";
|
|
52
54
|
import { err, ok } from "neverthrow";
|
|
53
55
|
import { access } from "node:fs/promises";
|
|
54
56
|
import { join } from "node:path";
|
|
55
57
|
import { pathToFileURL } from "node:url";
|
|
58
|
+
import { setTimeout as sleep } from "node:timers/promises";
|
|
56
59
|
import { z } from "zod";
|
|
57
60
|
import { hasBrowserUrl } from "../../lib/chrome.js";
|
|
61
|
+
import { errnoOf } from "../../lib/fs-result.js";
|
|
58
62
|
import { createNoopLogger } from "../../lib/console-logger.js";
|
|
59
63
|
import { createStaticEyes } from "../../lib/eyes.js";
|
|
60
64
|
import { defaultErrorFields } from "../../lib/logger.js";
|
|
@@ -114,7 +118,7 @@ const ACQUIRE_DEADLINE_MS = 60_000;
|
|
|
114
118
|
* provisions.
|
|
115
119
|
*/
|
|
116
120
|
const RELEASE_DEADLINE_MS = 10_000;
|
|
117
|
-
/** The win of the
|
|
121
|
+
/** The win of the expiry arm. A symbol cannot collide with a value that the operation gives. */
|
|
118
122
|
const EXPIRED = Symbol("expired");
|
|
119
123
|
/**
|
|
120
124
|
* Run one operation against a deadline, and give the value, the cause, or the expiry.
|
|
@@ -122,19 +126,17 @@ const EXPIRED = Symbol("expired");
|
|
|
122
126
|
* The eyes seam takes no abort signal, thus a race is the whole bound. The loser of the race stays in
|
|
123
127
|
* flight, and the caller of an expired operation owns whatever arrives late.
|
|
124
128
|
*
|
|
125
|
-
*
|
|
126
|
-
* operation that wins its race would still keep the process alive for the rest of the budget.
|
|
129
|
+
* The abort after the race clears the wait of a settled operation, so no armed timer outlives the budget.
|
|
127
130
|
*/
|
|
128
131
|
async function withDeadline(work, ms) {
|
|
129
|
-
let timer;
|
|
130
132
|
// The settled arm never rejects. Thus a fault that arrives after the expiry stays contained here, and it
|
|
131
133
|
// never reaches the process as an unhandled rejection.
|
|
132
134
|
const settled = work.then((value) => ok(value), (cause) => err({ kind: "threw", cause }));
|
|
133
|
-
const
|
|
134
|
-
|
|
135
|
-
});
|
|
135
|
+
const gate = new AbortController();
|
|
136
|
+
// The rejection arm answers the abort of a settled race, and its value is never read.
|
|
137
|
+
const expiry = sleep(ms, undefined, { signal: gate.signal }).then(() => EXPIRED, () => EXPIRED);
|
|
136
138
|
const winner = await Promise.race([settled, expiry]);
|
|
137
|
-
|
|
139
|
+
gate.abort();
|
|
138
140
|
return winner === EXPIRED ? err({ kind: "expired" }) : winner;
|
|
139
141
|
}
|
|
140
142
|
/** The cause of one such fault. An expiry names its budget, thus the detail of the outcome names it too. */
|
|
@@ -153,6 +155,7 @@ function startSeamCall(call) {
|
|
|
153
155
|
return call();
|
|
154
156
|
}
|
|
155
157
|
catch (cause) {
|
|
158
|
+
// oxlint-disable-next-line typescript/prefer-promise-reject-errors -- the rejection reason is the thrown value itself; the awaiter reads its identity, and a wrapper would erase it.
|
|
156
159
|
return Promise.reject(cause);
|
|
157
160
|
}
|
|
158
161
|
}
|
|
@@ -251,7 +254,6 @@ export function createExaminePageTool(deps) {
|
|
|
251
254
|
"The outcomes no-page and missed-stamp mean that no preview rendered the current page: run preview_report, then look again. " +
|
|
252
255
|
"The outcome no-browser means that this host gives no browser, and a repeat gives the same outcome.",
|
|
253
256
|
inputSchema: examinePageInput,
|
|
254
|
-
executionMode: "inline",
|
|
255
257
|
describeCall: (input) => {
|
|
256
258
|
const blockId = input.blockId ?? undefined;
|
|
257
259
|
return blockId === undefined ? "look at the page" : `look at ${blockId}`;
|
|
@@ -288,7 +290,7 @@ export function createExaminePageTool(deps) {
|
|
|
288
290
|
await access(pagePath);
|
|
289
291
|
}
|
|
290
292
|
catch (cause) {
|
|
291
|
-
if (cause
|
|
293
|
+
if (errnoOf(cause) === "ENOENT") {
|
|
292
294
|
// No preview wrote the page yet. The agent runs the preview first.
|
|
293
295
|
return ok({ outcome: "no-page" });
|
|
294
296
|
}
|
|
@@ -330,7 +332,7 @@ export function createExaminePageTool(deps) {
|
|
|
330
332
|
if (looked.isErr()) {
|
|
331
333
|
const { stage, cause } = looked.error;
|
|
332
334
|
logger.warn(LOOK_FAULT_MESSAGE[stage], { threadId, analysisId, ...defaultErrorFields(cause) });
|
|
333
|
-
return ok({ outcome: "capture-failed", detail: cause
|
|
335
|
+
return ok({ outcome: "capture-failed", detail: errorMessageOf(cause) ?? textOf(cause) });
|
|
334
336
|
}
|
|
335
337
|
const captured = looked.value;
|
|
336
338
|
if (blockId !== undefined && captured.coverage.kind === "no-block") {
|
|
@@ -360,7 +362,7 @@ export function createExaminePageTool(deps) {
|
|
|
360
362
|
return ok(withToolResultImages({
|
|
361
363
|
outcome: "examined",
|
|
362
364
|
coverage: captured.coverage,
|
|
363
|
-
|
|
365
|
+
tiles: tiles.length === 0 ? undefined : tiles,
|
|
364
366
|
...digestPageFaults(captured.consoleErrors, captured.failedRequests),
|
|
365
367
|
pagePath: relativePagePath,
|
|
366
368
|
}, captured.screenshots.map((shot) => ({ base64: shot.base64, mediaType: SCREENSHOT_MEDIA_TYPE }))));
|
|
@@ -38,12 +38,12 @@ export type ListPinnedArtifactsInput = z.infer<typeof listPinnedArtifactsInput>;
|
|
|
38
38
|
* only for a header that the read recovered, thus their absence says nothing about the content of the file.
|
|
39
39
|
* The listing gives `columnCount`, and a call with a path gives `columns` as well.
|
|
40
40
|
*/
|
|
41
|
-
export
|
|
41
|
+
export type PinnedArtifact = {
|
|
42
42
|
path: string;
|
|
43
43
|
fileType?: string;
|
|
44
44
|
columnCount?: number;
|
|
45
45
|
columns?: string[];
|
|
46
|
-
}
|
|
46
|
+
};
|
|
47
47
|
/**
|
|
48
48
|
* One pinned citation of the listing: the key, and the short citation of its pinned record.
|
|
49
49
|
*
|
|
@@ -51,10 +51,10 @@ export interface PinnedArtifact {
|
|
|
51
51
|
* the pin recorded no citation for carries none, because absence is a normal condition. The description of
|
|
52
52
|
* the record stays out, because the listing is an orientation surface.
|
|
53
53
|
*/
|
|
54
|
-
export
|
|
54
|
+
export type PinnedCitation = {
|
|
55
55
|
key: string;
|
|
56
56
|
citation?: string;
|
|
57
|
-
}
|
|
57
|
+
};
|
|
58
58
|
/**
|
|
59
59
|
* The typed outcome of the listing tool. Each arm is ok-channel data, thus the tool never throws for one
|
|
60
60
|
* of them.
|
|
@@ -87,11 +87,11 @@ export type ListPinnedArtifactsResult = {
|
|
|
87
87
|
* `resolveWorkspaceRoot` maps the analysis of the call onto its workspace root, thus one singleton tool
|
|
88
88
|
* serves every analysis and it resolves the root per call from the scope.
|
|
89
89
|
*/
|
|
90
|
-
export
|
|
90
|
+
export type ListPinnedArtifactsToolDeps = {
|
|
91
91
|
readonly gateway: ReportSessionStateGateway;
|
|
92
92
|
readonly resolveWorkspaceRoot: ResolveWorkspaceRoot;
|
|
93
93
|
readonly logger?: Logger;
|
|
94
|
-
}
|
|
94
|
+
};
|
|
95
95
|
/**
|
|
96
96
|
* The header columns of a file on disk, or `undefined` when the file gives none.
|
|
97
97
|
*
|
|
@@ -27,9 +27,10 @@ import { extname } from "node:path";
|
|
|
27
27
|
import { z } from "zod";
|
|
28
28
|
import { resolveWorkspacePath } from "../../workspace/paths.js";
|
|
29
29
|
import { createNoopLogger } from "../../lib/console-logger.js";
|
|
30
|
+
import { splitLines } from "../../lib/text.js";
|
|
30
31
|
import { tryFs } from "../../lib/fs-result.js";
|
|
31
32
|
import { defaultErrorFields } from "../../lib/logger.js";
|
|
32
|
-
import { citationRecordOf, fileTypeHoldsNoCell } from "../../report-model/reference-resolver.js";
|
|
33
|
+
import { citationRecordOf, fileTypeHoldsNoCell, snapshotEntry } from "../../report-model/reference-resolver.js";
|
|
33
34
|
import { defineTool } from "../define-tool.js";
|
|
34
35
|
import { openReportThread } from "../report-authoring/authoring-tools.js";
|
|
35
36
|
/** No path lists the pinned set. A path gives the header columns of that one pinned artifact. */
|
|
@@ -87,7 +88,7 @@ async function readHeaderLine(absolute) {
|
|
|
87
88
|
if (head === undefined) {
|
|
88
89
|
return undefined;
|
|
89
90
|
}
|
|
90
|
-
const line = head.text.
|
|
91
|
+
const [line = ""] = splitLines(head.text).slice(0, 1);
|
|
91
92
|
if (line.length === 0) {
|
|
92
93
|
return undefined;
|
|
93
94
|
}
|
|
@@ -147,7 +148,6 @@ export function createListPinnedArtifactsTool(deps) {
|
|
|
147
148
|
"Read the listing to orient before you bind a block. Read the columns of one artifact to choose the column that a locator names. " +
|
|
148
149
|
"A reference names the path alone: the session stamps the hash from this evidence, thus the tool gives no hash.",
|
|
149
150
|
inputSchema: listPinnedArtifactsInput,
|
|
150
|
-
executionMode: "inline",
|
|
151
151
|
describeCall: (input) => input.path ?? "the pinned set",
|
|
152
152
|
// The size of the listing is what a watcher reads, and the cap makes that size differ from the
|
|
153
153
|
// pinned set. Thus a truncated listing names the total beside the count, and a whole listing names
|
|
@@ -180,8 +180,8 @@ export function createListPinnedArtifactsTool(deps) {
|
|
|
180
180
|
logger.warn("the workspace root did not resolve", { threadId, analysisId, ...defaultErrorFields(cause) });
|
|
181
181
|
}
|
|
182
182
|
const describe = async (path) => {
|
|
183
|
-
const fileType = state.snapshot
|
|
184
|
-
const artifact = { path,
|
|
183
|
+
const fileType = snapshotEntry(state.snapshot, path)?.fileType ?? undefined;
|
|
184
|
+
const artifact = { path, fileType };
|
|
185
185
|
if (root === undefined || fileTypeHoldsNoCell(fileType)) {
|
|
186
186
|
return { artifact };
|
|
187
187
|
}
|
|
@@ -4,25 +4,25 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import type { FailedRequest } from "../../lib/page-capture.js";
|
|
6
6
|
/** One distinct console error of a look, and how many times the page logged it. */
|
|
7
|
-
export
|
|
7
|
+
export type ConsoleErrorEntry = {
|
|
8
8
|
text: string;
|
|
9
9
|
count: number;
|
|
10
|
-
}
|
|
10
|
+
};
|
|
11
11
|
/** One distinct failed request of a look, and how many times the page made it. */
|
|
12
|
-
export
|
|
12
|
+
export type FailedRequestEntry = {
|
|
13
13
|
url: string;
|
|
14
14
|
reason: string;
|
|
15
15
|
count: number;
|
|
16
|
-
}
|
|
16
|
+
};
|
|
17
17
|
/** The digest of one look. `omittedFaults` counts the distinct entries that the cap left out, thus a cut is never silent. */
|
|
18
|
-
export
|
|
18
|
+
export type PageFaults = {
|
|
19
19
|
consoleErrors: ConsoleErrorEntry[];
|
|
20
20
|
failedRequests: FailedRequestEntry[];
|
|
21
21
|
omittedFaults?: {
|
|
22
22
|
consoleErrors: number;
|
|
23
23
|
failedRequests: number;
|
|
24
24
|
};
|
|
25
|
-
}
|
|
25
|
+
};
|
|
26
26
|
/** Shorten one fault text: the inline data becomes placeholders, and the text stops at the cap. */
|
|
27
27
|
export declare function shortenFaultText(text: string): string;
|
|
28
28
|
/** Digest the raw faults of one capture into the short lists that the agent reads. */
|
|
@@ -8,8 +8,10 @@ const MAX_FAULT_TEXT = 300;
|
|
|
8
8
|
/** The most distinct entries of one list. */
|
|
9
9
|
const MAX_FAULT_ENTRIES = 20;
|
|
10
10
|
/** A data URI. A fault text quotes a URI in quotes or parentheses, thus those characters end the data. */
|
|
11
|
+
// oxlint-disable-next-line eslint-js/no-restricted-syntax -- the data-URI grammar of an inlined fault (media type, parameters, payload) with the quote and bracket characters that end it.
|
|
11
12
|
const DATA_URI = /data:([a-z0-9.+-]+\/[a-z0-9.+-]+)?((?:;[^,;\s'"()<>]*)*),([^\s'"()<>]*)/gi;
|
|
12
13
|
/** A base64 run of 100 characters or more. A content hash in hex is 64 characters, thus a hash stays. */
|
|
14
|
+
// oxlint-disable-next-line eslint-js/no-restricted-syntax -- the base64 charset run with its padding; the length floor keeps a 64-character hex hash outside the match.
|
|
13
15
|
const BASE64_RUN = /[A-Za-z0-9+/]{100,}={0,2}/g;
|
|
14
16
|
/** Shorten one fault text: the inline data becomes placeholders, and the text stops at the cap. */
|
|
15
17
|
export function shortenFaultText(text) {
|
|
@@ -43,6 +45,6 @@ export function digestPageFaults(consoleErrors, failedRequests) {
|
|
|
43
45
|
return {
|
|
44
46
|
consoleErrors: errors.slice(0, MAX_FAULT_ENTRIES),
|
|
45
47
|
failedRequests: requests.slice(0, MAX_FAULT_ENTRIES),
|
|
46
|
-
|
|
48
|
+
omittedFaults: omittedErrors + omittedRequests > 0 ? { consoleErrors: omittedErrors, failedRequests: omittedRequests } : undefined,
|
|
47
49
|
};
|
|
48
50
|
}
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
*/
|
|
40
40
|
import { z } from "zod";
|
|
41
41
|
import { type ResolveWorkspaceRoot } from "../../workspace/paths.js";
|
|
42
|
-
import type { AuthContext } from "../../auth/types.js";
|
|
42
|
+
import type { AuthContext, Identity } from "../../auth/types.js";
|
|
43
43
|
import { type Logger } from "../../lib/logger.js";
|
|
44
44
|
import type { ThreadStore } from "../../memory/thread-store.js";
|
|
45
45
|
import { type ReportWarning } from "../../report-model/block-walk.js";
|
|
@@ -134,10 +134,11 @@ export type ResolvePageAsset = (specifier: string) => string;
|
|
|
134
134
|
* lands, and attaches the URL beside the path. A refused mint rides the `rendered` arm as data, and it
|
|
135
135
|
* never fails the render.
|
|
136
136
|
*/
|
|
137
|
-
export
|
|
137
|
+
export type PreviewReportToolDeps = {
|
|
138
138
|
readonly gateway: ReportSessionStateGateway;
|
|
139
139
|
readonly makeResolver?: (scope: {
|
|
140
140
|
analysisId: string;
|
|
141
|
+
identity: Identity;
|
|
141
142
|
auth: AuthContext;
|
|
142
143
|
}) => Promise<ReferenceResolver>;
|
|
143
144
|
readonly resolveWorkspaceRoot: ResolveWorkspaceRoot;
|
|
@@ -152,7 +153,7 @@ export interface PreviewReportToolDeps {
|
|
|
152
153
|
/** Names the report thread after the rendered document. Omitted, the thread keeps its title. */
|
|
153
154
|
readonly threads?: Pick<ThreadStore, "setAutoTitle">;
|
|
154
155
|
readonly logger?: Logger;
|
|
155
|
-
}
|
|
156
|
+
};
|
|
156
157
|
/**
|
|
157
158
|
* Make the render-and-preview tool over the session-state gateway and the render seams.
|
|
158
159
|
*
|
|
@@ -38,7 +38,6 @@
|
|
|
38
38
|
* control-flow exception propagate.
|
|
39
39
|
*/
|
|
40
40
|
import { err, ok } from "neverthrow";
|
|
41
|
-
import { randomUUID } from "node:crypto";
|
|
42
41
|
import { copyFile, mkdir, readdir, rm, writeFile } from "node:fs/promises";
|
|
43
42
|
import { extname, join } from "node:path";
|
|
44
43
|
import { relative as relativePosix } from "node:path/posix";
|
|
@@ -70,9 +69,26 @@ const previewReportInput = z.object({});
|
|
|
70
69
|
* collide on the staged name.
|
|
71
70
|
*/
|
|
72
71
|
function assetFileName(file) {
|
|
73
|
-
const slug = file.hash
|
|
72
|
+
const slug = dashUnsafeRuns(file.hash);
|
|
74
73
|
return slug + extname(file.path);
|
|
75
74
|
}
|
|
75
|
+
/** Each run of characters outside the letters and digits becomes one dash. */
|
|
76
|
+
function dashUnsafeRuns(text) {
|
|
77
|
+
let out = "";
|
|
78
|
+
let inRun = false;
|
|
79
|
+
for (const char of text) {
|
|
80
|
+
const isNameChar = (char >= "a" && char <= "z") || (char >= "A" && char <= "Z") || (char >= "0" && char <= "9");
|
|
81
|
+
if (isNameChar) {
|
|
82
|
+
out += char;
|
|
83
|
+
inRun = false;
|
|
84
|
+
}
|
|
85
|
+
else if (!inRun) {
|
|
86
|
+
out += "-";
|
|
87
|
+
inRun = true;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return out;
|
|
91
|
+
}
|
|
76
92
|
/** The relative source of a staged figure. The page directory is self-contained, thus the source is `assets/<name>`. */
|
|
77
93
|
function figureSourcePolicy(file) {
|
|
78
94
|
return `assets/${assetFileName(file)}`;
|
|
@@ -360,7 +376,6 @@ export function createPreviewReportTool(deps) {
|
|
|
360
376
|
"The render marks the page that examine_page looks at next. " +
|
|
361
377
|
"Use it to see the report, and to confirm that each reference resolves.",
|
|
362
378
|
inputSchema: previewReportInput,
|
|
363
|
-
executionMode: "inline",
|
|
364
379
|
describeCall: "none",
|
|
365
380
|
// The page path is the one fact of a preview that a watcher wants, and it exists only in the
|
|
366
381
|
// result. Each other arm is a degraded condition whose kind already names it, thus the kind
|
|
@@ -387,7 +402,7 @@ export function createPreviewReportTool(deps) {
|
|
|
387
402
|
// control-flow exception propagates and the unresolvable root does not.
|
|
388
403
|
let resolver;
|
|
389
404
|
try {
|
|
390
|
-
resolver = await deps.makeResolver({ analysisId, auth: ctx.session.auth });
|
|
405
|
+
resolver = await deps.makeResolver({ analysisId, identity: ctx.session.identity, auth: ctx.session.auth });
|
|
391
406
|
}
|
|
392
407
|
catch (cause) {
|
|
393
408
|
logger.warn("the workspace root did not resolve", { threadId, analysisId, ...defaultErrorFields(cause) });
|
|
@@ -464,16 +479,20 @@ export function createPreviewReportTool(deps) {
|
|
|
464
479
|
}
|
|
465
480
|
}
|
|
466
481
|
// The part rides the rendered arm only. Each degraded arm shows no
|
|
467
|
-
// fresh page, thus it emits nothing.
|
|
482
|
+
// fresh page, thus it emits nothing. The part id is the id of the call,
|
|
483
|
+
// thus a rerun of the call gives the same part again.
|
|
468
484
|
await ctx.emit({
|
|
469
485
|
type: "data-report-rendered",
|
|
470
|
-
data: { id:
|
|
486
|
+
data: { id: ctx.invocationId, renderedAt: new Date().toISOString(), title: document.title },
|
|
471
487
|
});
|
|
472
488
|
// The event rides the rendered arm alone, the same as the part above. The hash is the hash of
|
|
473
489
|
// the draft that the page shows, thus a consumer ties the page to the document that made it.
|
|
474
490
|
observe({ type: "preview", analysisId, threadId, pagePath: written.value, documentHash: renderedHash });
|
|
475
491
|
const access = await mintAccess(deps.makeSessionPages, analysisId, threadId, ctx.session.auth, logger);
|
|
476
|
-
|
|
492
|
+
const renderedOk = { outcome: "rendered", pagePath: written.value, warnings: finished.warnings };
|
|
493
|
+
if (access !== undefined)
|
|
494
|
+
return ok({ ...renderedOk, access });
|
|
495
|
+
return ok(renderedOk);
|
|
477
496
|
},
|
|
478
497
|
});
|
|
479
498
|
}
|
|
@@ -21,7 +21,9 @@
|
|
|
21
21
|
* the thread row. A record on a thread that holds a version replaces that version whole, under the same
|
|
22
22
|
* version id. Thus the loop is unbounded: the agent amends, looks again, and records again, and the stored
|
|
23
23
|
* version equals the page that the last look accepted. A refused record leaves the stored version as it was.
|
|
24
|
-
* The outcome of a pass carries the version id, and it names a replacement.
|
|
24
|
+
* The outcome of a pass carries the version id, and it names a replacement. Inside a durable step, the id
|
|
25
|
+
* of a new version is the UUIDv5 of the key of the step. Thus a rerun of the step gives the same version, and
|
|
26
|
+
* it does not read as a replacement.
|
|
25
27
|
*
|
|
26
28
|
* The prune runs after the version lands. It removes the output file of each derivation that the recorded
|
|
27
29
|
* document does not reference, under the `derived/` directory of the session alone. The records stay
|
|
@@ -29,7 +31,7 @@
|
|
|
29
31
|
* changes no outcome.
|
|
30
32
|
*/
|
|
31
33
|
import { z } from "zod";
|
|
32
|
-
import type { AuthContext } from "../../auth/types.js";
|
|
34
|
+
import type { AuthContext, Identity } from "../../auth/types.js";
|
|
33
35
|
import type { Logger } from "../../lib/logger.js";
|
|
34
36
|
import type { ThreadStore } from "../../memory/thread-store.js";
|
|
35
37
|
import { type ReportWarning } from "../../report-model/block-walk.js";
|
|
@@ -97,19 +99,22 @@ export type RecordVersionResult = {
|
|
|
97
99
|
* derived directory of the session under that root, thus the seam is mandatory: a composition that bound
|
|
98
100
|
* none would record a version and leave every unused derivation on disk.
|
|
99
101
|
*/
|
|
100
|
-
export
|
|
102
|
+
export type RecordVersionToolDeps = {
|
|
101
103
|
readonly gateway: ReportSessionStateGateway;
|
|
102
104
|
readonly store: ReportVersionStore;
|
|
103
105
|
readonly threads: Pick<ThreadStore, "getThread">;
|
|
104
106
|
readonly resolveWorkspaceRoot: ResolveWorkspaceRoot;
|
|
105
107
|
readonly makeResolver?: (scope: {
|
|
106
108
|
analysisId: string;
|
|
109
|
+
identity: Identity;
|
|
107
110
|
auth: AuthContext;
|
|
108
111
|
}) => Promise<ReferenceResolver>;
|
|
109
112
|
/** The provenance seam; an unbound session emit emits nothing and the record runs the same. */
|
|
110
113
|
readonly provenance?: ProvenanceSeam;
|
|
111
114
|
readonly logger?: Logger;
|
|
112
|
-
}
|
|
115
|
+
/** The key of the durable step that runs the call, `undefined` outside one. Defaults to {@link durableStepKey}. */
|
|
116
|
+
readonly stepKey?: () => string | undefined;
|
|
117
|
+
};
|
|
113
118
|
/**
|
|
114
119
|
* Make the record tool over the session-state gateway, the version store, the thread store, and the
|
|
115
120
|
* resolver.
|
|
@@ -21,7 +21,9 @@
|
|
|
21
21
|
* the thread row. A record on a thread that holds a version replaces that version whole, under the same
|
|
22
22
|
* version id. Thus the loop is unbounded: the agent amends, looks again, and records again, and the stored
|
|
23
23
|
* version equals the page that the last look accepted. A refused record leaves the stored version as it was.
|
|
24
|
-
* The outcome of a pass carries the version id, and it names a replacement.
|
|
24
|
+
* The outcome of a pass carries the version id, and it names a replacement. Inside a durable step, the id
|
|
25
|
+
* of a new version is the UUIDv5 of the key of the step. Thus a rerun of the step gives the same version, and
|
|
26
|
+
* it does not read as a replacement.
|
|
25
27
|
*
|
|
26
28
|
* The prune runs after the version lands. It removes the output file of each derivation that the recorded
|
|
27
29
|
* document does not reference, under the `derived/` directory of the session alone. The records stay
|
|
@@ -41,6 +43,7 @@ import { computeDraftHash } from "../../report-model/draft-hash.js";
|
|
|
41
43
|
import { validateReport } from "../../report-model/validate.js";
|
|
42
44
|
import { reportSessionDerivedDir, resolveWorkspacePath } from "../../workspace/paths.js";
|
|
43
45
|
import { defineTool } from "../define-tool.js";
|
|
46
|
+
import { durableStepKey, stepUuid } from "../workspace/edit-file.js";
|
|
44
47
|
import { openReportThread } from "../report-authoring/authoring-tools.js";
|
|
45
48
|
import { bindSessionEmit } from "../../provenance/seam.js";
|
|
46
49
|
/** The empty input. The tool records the current draft of the thread, thus it needs no field. */
|
|
@@ -124,6 +127,7 @@ async function pruneUnusedDerivations(args) {
|
|
|
124
127
|
export function createRecordVersionTool(deps) {
|
|
125
128
|
const logger = (deps.logger ?? createNoopLogger()).named("record-report-version");
|
|
126
129
|
const observe = bindSessionEmit(deps.provenance, logger);
|
|
130
|
+
const stepKey = deps.stepKey ?? durableStepKey;
|
|
127
131
|
return defineTool({
|
|
128
132
|
id: "record_report_version",
|
|
129
133
|
description: "Record the current draft as one report version. The tool runs the whole gate first: it finishes the draft, " +
|
|
@@ -134,7 +138,6 @@ export function createRecordVersionTool(deps) {
|
|
|
134
138
|
"A thread holds one version, thus a later record replaces it whole. Amend the draft, look at the page again, and record again. " +
|
|
135
139
|
"After the version lands, the tool removes the file of each derived table that no block of the recorded report binds.",
|
|
136
140
|
inputSchema: recordVersionInput,
|
|
137
|
-
executionMode: "inline",
|
|
138
141
|
describeCall: "none",
|
|
139
142
|
// The version id is the one durable product of the first record, thus the created arm names it. A
|
|
140
143
|
// later record writes over that same id, thus the line names the update and never reads as a
|
|
@@ -174,7 +177,7 @@ export function createRecordVersionTool(deps) {
|
|
|
174
177
|
// control-flow exception propagates and the unresolvable root does not.
|
|
175
178
|
let resolver;
|
|
176
179
|
try {
|
|
177
|
-
resolver = await deps.makeResolver({ analysisId, auth: ctx.session.auth });
|
|
180
|
+
resolver = await deps.makeResolver({ analysisId, identity: ctx.session.identity, auth: ctx.session.auth });
|
|
178
181
|
}
|
|
179
182
|
catch (cause) {
|
|
180
183
|
logger.warn("the workspace root did not resolve", { threadId, analysisId, ...logger.errorFields(cause) });
|
|
@@ -182,12 +185,14 @@ export function createRecordVersionTool(deps) {
|
|
|
182
185
|
}
|
|
183
186
|
const validation = await validateReport(finished.document, snapshot, resolver);
|
|
184
187
|
if (!validation.valid) {
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
188
|
+
const invalid = { outcome: "invalid" };
|
|
189
|
+
if (validation.schemaIssues)
|
|
190
|
+
invalid.schemaIssues = validation.schemaIssues;
|
|
191
|
+
if (validation.duplicateIds)
|
|
192
|
+
invalid.duplicateIds = validation.duplicateIds;
|
|
193
|
+
if (validation.resolutionFailures)
|
|
194
|
+
invalid.resolutionFailures = validation.resolutionFailures;
|
|
195
|
+
return ok(invalid);
|
|
191
196
|
}
|
|
192
197
|
const thread = await deps.threads.getThread(threadId);
|
|
193
198
|
if (thread.isErr()) {
|
|
@@ -205,6 +210,8 @@ export function createRecordVersionTool(deps) {
|
|
|
205
210
|
threadId,
|
|
206
211
|
parentThreadId: thread.value.parentThreadId,
|
|
207
212
|
parentSeq: thread.value.parentSeq,
|
|
213
|
+
// A rerun of the step gives the same id, thus the version that its first run made reads as created.
|
|
214
|
+
versionId: stepUuid(stepKey()),
|
|
208
215
|
});
|
|
209
216
|
if (recorded.isOk()) {
|
|
210
217
|
// The version stands from here, thus the event states a version that a reader can open.
|
|
@@ -17,18 +17,18 @@
|
|
|
17
17
|
import { type ResultAsync } from "neverthrow";
|
|
18
18
|
import type { AuthContext } from "../../auth/types.js";
|
|
19
19
|
/** The grant of one session page: the content-server base, the token, and its expiry. */
|
|
20
|
-
export
|
|
20
|
+
export type SessionPageGrant = {
|
|
21
21
|
readonly baseUrl: string;
|
|
22
22
|
readonly token: string;
|
|
23
23
|
readonly expiresAt: string;
|
|
24
|
-
}
|
|
24
|
+
};
|
|
25
25
|
/** What a failed mint is allowed to carry. */
|
|
26
|
-
export
|
|
26
|
+
export type SessionPageMintFailure = {
|
|
27
27
|
readonly status?: number;
|
|
28
28
|
readonly error: {
|
|
29
29
|
readonly message?: string;
|
|
30
30
|
};
|
|
31
|
-
}
|
|
31
|
+
};
|
|
32
32
|
/**
|
|
33
33
|
* Renders a failed mint as the line an agent reads back from the preview tool.
|
|
34
34
|
*
|
|
@@ -38,7 +38,7 @@ export interface SessionPageMintFailure {
|
|
|
38
38
|
* It lives beside the type because its whole job is to honour that type's optionality.
|
|
39
39
|
*/
|
|
40
40
|
export declare function describeSessionPageMintFailure(failure: SessionPageMintFailure): string;
|
|
41
|
-
export
|
|
41
|
+
export type SessionPagePublisher = {
|
|
42
42
|
/**
|
|
43
43
|
* Mint the access grant of one session page. The publisher binds the analysis, thus the mint takes
|
|
44
44
|
* the thread id alone. `baseUrl` is the base URL of the content server, with no res path — the
|
|
@@ -46,7 +46,7 @@ export interface SessionPagePublisher {
|
|
|
46
46
|
* contract and never in a realization.
|
|
47
47
|
*/
|
|
48
48
|
mintSessionPageAccess(threadId: string): ResultAsync<SessionPageGrant, SessionPageMintFailure>;
|
|
49
|
-
}
|
|
49
|
+
};
|
|
50
50
|
/**
|
|
51
51
|
* The per-call construction of the publisher. The factory binds one analysis and the auth of the tool
|
|
52
52
|
* call, thus a realization mints under the credential of the caller and holds no ambient state.
|
|
@@ -2,18 +2,25 @@
|
|
|
2
2
|
* generateAnalogyReport — cross-domain analogy report as a sub-agent tool.
|
|
3
3
|
*
|
|
4
4
|
* An inline harness `AgentDefinition` (mirroring `createLiteratureReviewerTool`)
|
|
5
|
-
* driven by `
|
|
6
|
-
*
|
|
7
|
-
* only a top-level object.
|
|
8
|
-
*
|
|
5
|
+
* driven by `runWithSalvage`. The result reaches the wrapper through one of two
|
|
6
|
+
* submit tools because the output envelope is a union and `defineTool` takes
|
|
7
|
+
* only a top-level object. Neither tool ends the run: the wrapper selects the
|
|
8
|
+
* last accepted report from the recorded calls, else the first blocker. A run
|
|
9
|
+
* with no outcome gets one salvage request, then an `extraction-failed`
|
|
10
|
+
* envelope, so the frontend never renders raw prose.
|
|
9
11
|
*/
|
|
10
12
|
import { z } from "zod";
|
|
13
|
+
import { type AnalogyReport } from "@inflexa-ai/harness/contracts/analogy-report.js";
|
|
11
14
|
import type { Logger } from "../../lib/logger.js";
|
|
15
|
+
import { type LoopStep } from "../../loop/run-loop.js";
|
|
16
|
+
import type { SubAgentRegistrar } from "../../loop/sub-agent.js";
|
|
12
17
|
import type { ToolOutputStore } from "../../loop/tool-output.js";
|
|
13
18
|
import type { ChatProvider } from "../../providers/types.js";
|
|
14
19
|
import type { UsageRecorder } from "../../billing/usage-recorder.js";
|
|
15
20
|
import { type Tool } from "../define-tool.js";
|
|
16
21
|
import { type BioToolKeys } from "../bio/keys.js";
|
|
22
|
+
/** The last report of a run that its call accepted. The input schema of the tool checked it. */
|
|
23
|
+
export declare function acceptedReportOf(steps: readonly LoopStep[]): AnalogyReport | undefined;
|
|
17
24
|
export declare const generateAnalogyReportInputSchema: z.ZodObject<{
|
|
18
25
|
problem: z.ZodString;
|
|
19
26
|
context: z.ZodOptional<z.ZodString>;
|
|
@@ -29,7 +36,7 @@ export type GenerateAnalogyReportInput = z.infer<typeof generateAnalogyReportInp
|
|
|
29
36
|
* Exported for unit testing.
|
|
30
37
|
*/
|
|
31
38
|
export declare function buildResearchPrompt(input: GenerateAnalogyReportInput): string;
|
|
32
|
-
export
|
|
39
|
+
export type GenerateAnalogyReportDeps = {
|
|
33
40
|
/** The LLM seam the child loop runs on. */
|
|
34
41
|
readonly provider: ChatProvider;
|
|
35
42
|
/** Model id — provenance / metric label; the provider owns the wire model. */
|
|
@@ -42,6 +49,6 @@ export interface GenerateAnalogyReportDeps {
|
|
|
42
49
|
readonly toolOutputStore?: ToolOutputStore;
|
|
43
50
|
/** Logging seam; omitted falls back to no-op. Logs the salvage warning and an accounting error of the reasoner loop. */
|
|
44
51
|
readonly logger?: Logger;
|
|
45
|
-
}
|
|
52
|
+
};
|
|
46
53
|
/** Build the `generate_analogy_report` delegation tool bound to its provider. */
|
|
47
|
-
export declare function createGenerateAnalogyReportTool(deps: GenerateAnalogyReportDeps): Tool;
|
|
54
|
+
export declare function createGenerateAnalogyReportTool(deps: GenerateAnalogyReportDeps, registerSubAgent: SubAgentRegistrar): Tool;
|