@inflexa-ai/harness 0.45.1 → 0.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -3
- package/dist/agents/conversation-agent.d.ts +9 -3
- package/dist/agents/conversation-agent.js +34 -33
- package/dist/agents/report-session-agent.d.ts +15 -15
- package/dist/agents/report-session-agent.js +23 -15
- package/dist/agents/sandbox/index.d.ts +1 -1
- package/dist/agents/sandbox/index.js +1 -1
- package/dist/agents/sandbox/shared.d.ts +12 -14
- package/dist/agents/sandbox/shared.js +18 -12
- package/dist/agents/sandbox/types.d.ts +4 -4
- package/dist/agents/sandbox/validate-skills.d.ts +2 -2
- package/dist/agents/sandbox/validate-skills.js +3 -1
- package/dist/agents/sandbox-catalog.d.ts +2 -2
- package/dist/agents/sandbox-catalog.js +3 -3
- package/dist/agents/system-prompt.d.ts +2 -2
- package/dist/app/chat-turn-workflow.d.ts +114 -0
- package/dist/app/chat-turn-workflow.js +307 -0
- package/dist/app/chat-turn.d.ts +85 -57
- package/dist/app/chat-turn.js +123 -100
- package/dist/app/data-profile-orientation.js +10 -8
- package/dist/app/data-profile-view.d.ts +4 -4
- package/dist/app/data-profile-view.js +9 -8
- package/dist/app/in-process-turn.d.ts +42 -0
- package/dist/app/in-process-turn.js +139 -0
- package/dist/app/message-assembly.d.ts +10 -4
- package/dist/app/message-assembly.js +13 -8
- package/dist/app/report-session-runtime.d.ts +4 -4
- package/dist/app/report-session-runtime.js +36 -21
- package/dist/app/spawn-report-session.d.ts +33 -28
- package/dist/app/spawn-report-session.js +25 -40
- package/dist/app/synthesize-run.d.ts +22 -16
- package/dist/app/synthesize-run.js +41 -35
- package/dist/app/work.d.ts +96 -0
- package/dist/app/work.js +147 -0
- package/dist/auth/local-auth-context.d.ts +1 -3
- package/dist/auth/local-auth-context.js +1 -3
- package/dist/auth/local-run-authorizer.d.ts +1 -1
- package/dist/auth/local-run-authorizer.js +5 -3
- package/dist/auth/types.d.ts +26 -26
- package/dist/billing/cached-resolver.d.ts +4 -4
- package/dist/billing/run-charge.d.ts +5 -8
- package/dist/billing/run-charge.js +2 -2
- package/dist/billing/usage-recorder.d.ts +9 -9
- package/dist/citations/aggregate.js +1 -1
- package/dist/citations/clients/arxiv.d.ts +2 -2
- package/dist/citations/clients/arxiv.js +12 -4
- package/dist/citations/clients/common.js +4 -2
- package/dist/citations/clients/crossref.d.ts +2 -2
- package/dist/citations/clients/crossref.js +37 -37
- package/dist/citations/clients/doi-registry.js +15 -16
- package/dist/citations/clients/pubmed.d.ts +2 -2
- package/dist/citations/clients/pubmed.js +20 -13
- package/dist/citations/clients/semantic-scholar.d.ts +2 -2
- package/dist/citations/clients/semantic-scholar.js +9 -9
- package/dist/citations/compare.js +2 -2
- package/dist/citations/match.d.ts +2 -2
- package/dist/citations/match.js +12 -7
- package/dist/citations/normalize.js +35 -26
- package/dist/citations/plan.js +6 -2
- package/dist/citations/resolve.d.ts +6 -6
- package/dist/citations/resolve.js +34 -25
- package/dist/citations/types.d.ts +77 -77
- package/dist/config/environment-stores.d.ts +6 -6
- package/dist/config/resource-limits.js +1 -3
- package/dist/contracts/analogy-report.d.ts +7 -7
- package/dist/contracts/analogy-report.js +2 -2
- package/dist/contracts/chat-events.d.ts +38 -24
- package/dist/contracts/chat-frame.d.ts +15 -5
- package/dist/contracts/chat-frame.js +64 -41
- package/dist/contracts/chat-parts.d.ts +130 -67
- package/dist/contracts/chat-parts.js +1 -0
- package/dist/contracts/content-url.js +16 -2
- package/dist/contracts/data-profile.d.ts +38 -38
- package/dist/contracts/index.d.ts +2 -2
- package/dist/contracts/index.js +1 -1
- package/dist/contracts/message.d.ts +6 -6
- package/dist/contracts/organ-system.d.ts +11 -11
- package/dist/contracts/part-registry.d.ts +5 -4
- package/dist/contracts/part-registry.js +5 -0
- package/dist/contracts/profile-vocabulary.d.ts +11 -10
- package/dist/contracts/profile-vocabulary.js +10 -3
- package/dist/contracts/report-blocks.d.ts +329 -329
- package/dist/contracts/report-reference.d.ts +105 -81
- package/dist/contracts/report-reference.js +30 -13
- package/dist/contracts/schemas/chat-events.d.ts +30 -16
- package/dist/contracts/schemas/chat-events.js +15 -6
- package/dist/contracts/schemas/chat-parts.d.ts +175 -102
- package/dist/contracts/schemas/chat-parts.js +33 -7
- package/dist/contracts/severity.d.ts +1 -1
- package/dist/contracts/structure-source.d.ts +3 -3
- package/dist/contracts/structure-source.js +6 -2
- package/dist/contracts/subagent-activity.d.ts +2 -2
- package/dist/contracts/subagent-activity.js +5 -3
- package/dist/contracts/usage.d.ts +2 -2
- package/dist/data/safety-panel-schema.d.ts +25 -25
- package/dist/data/safety-panel-schema.js +13 -4
- package/dist/execution/artifact-metadata.d.ts +23 -15
- package/dist/execution/artifact-metadata.js +33 -10
- package/dist/execution/artifact-record.d.ts +2 -2
- package/dist/execution/artifact-registration.d.ts +5 -5
- package/dist/execution/artifact-registry.d.ts +8 -8
- package/dist/execution/dbos-run-launcher.d.ts +24 -4
- package/dist/execution/dbos-run-launcher.js +58 -4
- package/dist/execution/dbos-workflow-purger.d.ts +5 -6
- package/dist/execution/dbos-workflow-purger.js +8 -7
- package/dist/execution/input-signature.d.ts +2 -2
- package/dist/execution/post-step-pipeline.d.ts +9 -9
- package/dist/execution/post-step-pipeline.js +1 -1
- package/dist/execution/post-step.js +2 -2
- package/dist/execution/reconcile-manifest.d.ts +4 -4
- package/dist/execution/reconcile-manifest.js +3 -2
- package/dist/execution/run-authorizer.d.ts +46 -37
- package/dist/execution/run-authorizer.js +8 -8
- package/dist/execution/run-canceler.d.ts +7 -7
- package/dist/execution/run-canceler.js +14 -7
- package/dist/execution/run-end-record.d.ts +2 -3
- package/dist/execution/run-event-parts.d.ts +0 -8
- package/dist/execution/run-event-parts.js +29 -24
- package/dist/execution/run-event-stream.d.ts +8 -8
- package/dist/execution/run-event-stream.js +3 -4
- package/dist/execution/run-launcher.d.ts +4 -4
- package/dist/execution/run-synthesis.d.ts +49 -48
- package/dist/execution/run-synthesis.js +96 -255
- package/dist/execution/staged-input.d.ts +2 -2
- package/dist/execution/step-summary.d.ts +6 -6
- package/dist/execution/step-summary.js +4 -8
- package/dist/execution/topo-sort.js +4 -3
- package/dist/execution/workflow-purger.d.ts +2 -2
- package/dist/index.d.ts +17 -20
- package/dist/index.js +25 -36
- package/dist/input-sanitization.js +9 -2
- package/dist/input-scan/clustering.d.ts +6 -6
- package/dist/input-scan/clustering.js +11 -5
- package/dist/input-scan/companions.js +3 -2
- package/dist/input-scan/detect-sets.d.ts +2 -2
- package/dist/input-scan/detect-sets.js +25 -21
- package/dist/input-scan/enrich.d.ts +6 -6
- package/dist/input-scan/enrich.js +29 -12
- package/dist/input-scan/formats.d.ts +2 -2
- package/dist/input-scan/formats.js +8 -2
- package/dist/input-scan/markers.d.ts +2 -2
- package/dist/input-scan/markers.js +14 -5
- package/dist/input-scan/menu.d.ts +10 -10
- package/dist/input-scan/menu.js +0 -0
- package/dist/input-scan/quarantine.d.ts +2 -2
- package/dist/input-scan/quarantine.js +23 -18
- package/dist/input-scan/readout-budget.d.ts +2 -2
- package/dist/input-scan/readout-budget.js +1 -1
- package/dist/input-scan/readout.d.ts +2 -2
- package/dist/input-scan/readout.js +47 -34
- package/dist/input-scan/scan.d.ts +2 -2
- package/dist/input-scan/scan.js +7 -5
- package/dist/input-scan/set-types.d.ts +28 -28
- package/dist/input-scan/shapes.d.ts +4 -4
- package/dist/input-scan/shapes.js +0 -0
- package/dist/input-scan/templates.d.ts +10 -10
- package/dist/input-scan/templates.js +30 -22
- package/dist/input-scan/tokens.d.ts +6 -4
- package/dist/input-scan/tokens.js +100 -38
- package/dist/input-scan/types.d.ts +22 -22
- package/dist/lib/async-utils.d.ts +3 -7
- package/dist/lib/async-utils.js +5 -9
- package/dist/lib/cache.js +1 -1
- package/dist/lib/chrome.d.ts +46 -6
- package/dist/lib/console-logger.js +2 -2
- package/dist/lib/db-result.d.ts +22 -6
- package/dist/lib/db-result.js +9 -13
- package/dist/lib/eyes.d.ts +4 -4
- package/dist/lib/eyes.js +1 -1
- package/dist/lib/fs-helpers.js +18 -6
- package/dist/lib/fs-result.d.ts +1 -0
- package/dist/lib/fs-result.js +5 -6
- package/dist/lib/hooks.d.ts +23 -7
- package/dist/lib/hooks.js +17 -3
- package/dist/lib/host-concurrency.js +3 -2
- package/dist/lib/logger.d.ts +2 -2
- package/dist/lib/logger.js +2 -1
- package/dist/lib/metrics.d.ts +1 -1
- package/dist/lib/null-proto.d.ts +6 -0
- package/dist/lib/null-proto.js +17 -0
- package/dist/lib/otel-spans.d.ts +1 -1
- package/dist/lib/otel-spans.js +9 -5
- package/dist/lib/otel.d.ts +4 -2
- package/dist/lib/otel.js +10 -2
- package/dist/lib/page-capture.d.ts +8 -8
- package/dist/lib/page-capture.js +9 -4
- package/dist/lib/parse-json.d.ts +5 -0
- package/dist/lib/parse-json.js +12 -0
- package/dist/lib/present.d.ts +12 -0
- package/dist/lib/present.js +39 -0
- package/dist/lib/rate-limit.d.ts +4 -4
- package/dist/lib/rate-limit.js +12 -13
- package/dist/lib/regulatory-corpus/fetch-fda-guidance.d.ts +4 -4
- package/dist/lib/regulatory-corpus/fetch-fda-guidance.js +4 -10
- package/dist/lib/regulatory-corpus/fetch-ich.d.ts +4 -4
- package/dist/lib/regulatory-corpus/fetch-ich.js +18 -14
- package/dist/lib/regulatory-corpus/normalize-whitespace.d.ts +6 -0
- package/dist/lib/regulatory-corpus/normalize-whitespace.js +41 -0
- package/dist/lib/regulatory-corpus.d.ts +10 -10
- package/dist/lib/regulatory-corpus.js +3 -1
- package/dist/lib/result.d.ts +10 -11
- package/dist/lib/result.js +15 -13
- package/dist/lib/storage.d.ts +2 -2
- package/dist/lib/test/async-iterable.d.ts +9 -0
- package/dist/lib/test/async-iterable.js +28 -0
- package/dist/lib/test/request-url.d.ts +5 -0
- package/dist/lib/test/request-url.js +7 -0
- package/dist/lib/test/result-assert.d.ts +12 -0
- package/dist/lib/test/result-assert.js +17 -0
- package/dist/lib/test/text-shapes.d.ts +24 -0
- package/dist/lib/test/text-shapes.js +63 -0
- package/dist/lib/text.d.ts +22 -0
- package/dist/lib/text.js +68 -0
- package/dist/lib/thrown.d.ts +18 -0
- package/dist/lib/thrown.js +30 -0
- package/dist/lib/unknown-array.d.ts +6 -0
- package/dist/lib/unknown-array.js +8 -0
- package/dist/lib/unknown-containers.d.ts +14 -0
- package/dist/lib/unknown-containers.js +17 -0
- package/dist/lib/unknown-text.d.ts +8 -0
- package/dist/lib/unknown-text.js +28 -0
- package/dist/lib/zod-issue-shape.d.ts +1 -1
- package/dist/lib/zod-issue-shape.js +31 -31
- package/dist/lib/zod-issues.d.ts +3 -3
- package/dist/lib/zod-issues.js +30 -17
- package/dist/literature/sources/arxiv.d.ts +6 -6
- package/dist/literature/sources/arxiv.js +92 -35
- package/dist/literature/sources/http.d.ts +2 -2
- package/dist/literature/sources/http.js +16 -15
- package/dist/literature/sources/pubmed.d.ts +16 -16
- package/dist/literature/sources/pubmed.js +96 -61
- package/dist/literature/sources/semantic-scholar.d.ts +8 -8
- package/dist/literature/sources/semantic-scholar.js +22 -13
- package/dist/loop/accounting.d.ts +63 -0
- package/dist/loop/accounting.js +141 -0
- package/dist/loop/call-policy.d.ts +73 -0
- package/dist/loop/call-policy.js +109 -0
- package/dist/loop/chat-stream.d.ts +62 -0
- package/dist/loop/chat-stream.js +237 -0
- package/dist/loop/compaction.d.ts +9 -9
- package/dist/loop/compaction.js +1 -1
- package/dist/loop/metrics.d.ts +12 -15
- package/dist/loop/metrics.js +14 -26
- package/dist/loop/run-loop.d.ts +233 -0
- package/dist/loop/run-loop.js +770 -0
- package/dist/loop/sub-agent.d.ts +61 -0
- package/dist/loop/sub-agent.js +161 -0
- package/dist/loop/tool-adapter.d.ts +98 -0
- package/dist/loop/tool-adapter.js +364 -0
- package/dist/loop/tool-detail.d.ts +1 -1
- package/dist/loop/tool-detail.js +6 -5
- package/dist/loop/tool-outcome.d.ts +1 -1
- package/dist/loop/tool-output.d.ts +4 -4
- package/dist/loop/tool-output.js +2 -2
- package/dist/loop/turn-credentials.d.ts +34 -0
- package/dist/loop/turn-credentials.js +73 -0
- package/dist/loop/types.d.ts +29 -38
- package/dist/loop/types.js +2 -7
- package/dist/memory/ai-sdk-message-storage.d.ts +5 -5
- package/dist/memory/ai-sdk-message-storage.js +13 -11
- package/dist/memory/card-builders.d.ts +14 -14
- package/dist/memory/card-builders.js +19 -15
- package/dist/memory/conversation-display-recorder.d.ts +22 -4
- package/dist/memory/conversation-display-recorder.js +43 -24
- package/dist/memory/conversation-display-replay.js +3 -2
- package/dist/memory/conversation-display-storage.d.ts +15 -7
- package/dist/memory/conversation-display-storage.js +141 -36
- package/dist/memory/conversation-view.d.ts +4 -4
- package/dist/memory/conversation-view.js +5 -4
- package/dist/memory/count-tokens.js +10 -8
- package/dist/memory/derive-thread-title.d.ts +0 -13
- package/dist/memory/derive-thread-title.js +2 -1
- package/dist/memory/message-backfill.d.ts +12 -5
- package/dist/memory/message-backfill.js +5 -3
- package/dist/memory/thread-history.d.ts +36 -21
- package/dist/memory/thread-history.js +78 -54
- package/dist/memory/thread-store.d.ts +26 -17
- package/dist/memory/thread-store.js +15 -9
- package/dist/memory/tool-call-integrity.d.ts +2 -2
- package/dist/memory/tool-call-integrity.js +4 -3
- package/dist/memory/working-memory.d.ts +16 -12
- package/dist/memory/working-memory.js +72 -61
- package/dist/prompts/briefing.d.ts +12 -12
- package/dist/prompts/briefing.js +1 -1
- package/dist/prompts/synthesis-agent.d.ts +1 -1
- package/dist/prompts/synthesis-agent.js +6 -14
- package/dist/provenance/collector.d.ts +6 -6
- package/dist/provenance/collector.js +15 -8
- package/dist/provenance/exec-frame.d.ts +2 -2
- package/dist/provenance/exec-frame.js +6 -1
- package/dist/provenance/seam.d.ts +1 -4
- package/dist/provenance/types.d.ts +6 -6
- package/dist/providers/ai-sdk.d.ts +113 -62
- package/dist/providers/ai-sdk.js +283 -518
- package/dist/providers/embedding.d.ts +2 -2
- package/dist/providers/embedding.js +1 -1
- package/dist/providers/errors.d.ts +22 -2
- package/dist/providers/errors.js +98 -50
- package/dist/providers/prompt-cache.d.ts +8 -8
- package/dist/providers/prompt-cache.js +13 -11
- package/dist/providers/reasoning.d.ts +2 -2
- package/dist/providers/reasoning.js +2 -2
- package/dist/providers/types.d.ts +55 -94
- package/dist/reference-data/catalog.d.ts +2 -15
- package/dist/reference-data/catalog.js +25 -8
- package/dist/reference-data/receipt.d.ts +2 -2
- package/dist/report-model/assert-rules.js +1 -1
- package/dist/report-model/authoring-grammar.d.ts +211 -233
- package/dist/report-model/block-walk.d.ts +10 -10
- package/dist/report-model/block-walk.js +2 -0
- package/dist/report-model/draft-finish.d.ts +8 -8
- package/dist/report-model/draft-finish.js +1 -1
- package/dist/report-model/draft-hash.js +8 -7
- package/dist/report-model/draft-operations.d.ts +22 -10
- package/dist/report-model/draft-operations.js +48 -30
- package/dist/report-model/draft-read.d.ts +19 -7
- package/dist/report-model/draft-read.js +16 -6
- package/dist/report-model/draft.d.ts +844 -2
- package/dist/report-model/draft.js +3 -1
- package/dist/report-model/fixture-resolver.js +39 -16
- package/dist/report-model/pin-snapshot.d.ts +2 -2
- package/dist/report-model/pin-snapshot.js +15 -15
- package/dist/report-model/production-resolver.d.ts +18 -18
- package/dist/report-model/production-resolver.js +50 -42
- package/dist/report-model/reference-resolver.d.ts +26 -10
- package/dist/report-model/reference-resolver.js +68 -5
- package/dist/report-model/reference-stamp.js +30 -38
- package/dist/report-model/structural-validation.js +12 -4
- package/dist/report-model/validate.d.ts +7 -7
- package/dist/report-model/validate.js +6 -6
- package/dist/report-render/assets.d.ts +2 -2
- package/dist/report-render/assets.js +27 -3
- package/dist/report-render/chart-export.d.ts +10 -2
- package/dist/report-render/chart-export.js +37 -11
- package/dist/report-render/chart-presets.d.ts +8 -8
- package/dist/report-render/chart-presets.js +3 -3
- package/dist/report-render/chart-renderers.d.ts +23 -16
- package/dist/report-render/chart-renderers.js +74 -53
- package/dist/report-render/chart-toolbox.d.ts +2 -2
- package/dist/report-render/chart-toolbox.js +7 -6
- package/dist/report-render/chart.d.ts +15 -16
- package/dist/report-render/chart.js +369 -252
- package/dist/report-render/design.d.ts +36 -297
- package/dist/report-render/design.js +0 -12
- package/dist/report-render/figures/common.d.ts +12 -12
- package/dist/report-render/figures/common.js +42 -31
- package/dist/report-render/figures/dendrogram.d.ts +3 -3
- package/dist/report-render/figures/dendrogram.js +10 -10
- package/dist/report-render/figures/dense.js +15 -8
- package/dist/report-render/figures/dotplot.js +46 -33
- package/dist/report-render/figures/embedding.js +52 -43
- package/dist/report-render/figures/equal-units.d.ts +10 -10
- package/dist/report-render/figures/equal-units.js +27 -27
- package/dist/report-render/figures/forest.js +9 -7
- package/dist/report-render/figures/gsea.js +21 -11
- package/dist/report-render/figures/heatmap.js +13 -9
- package/dist/report-render/figures/index.d.ts +10 -10
- package/dist/report-render/figures/index.js +4 -2
- package/dist/report-render/figures/km.js +10 -9
- package/dist/report-render/figures/label-room.d.ts +12 -12
- package/dist/report-render/figures/label-room.js +7 -2
- package/dist/report-render/figures/locuszoom.d.ts +2 -2
- package/dist/report-render/figures/locuszoom.js +59 -31
- package/dist/report-render/figures/lollipop.js +3 -2
- package/dist/report-render/figures/ma.js +8 -4
- package/dist/report-render/figures/manhattan.d.ts +1 -2
- package/dist/report-render/figures/manhattan.js +52 -34
- package/dist/report-render/figures/oncoprint.js +4 -5
- package/dist/report-render/figures/pca.js +25 -11
- package/dist/report-render/figures/qq.js +20 -9
- package/dist/report-render/figures/roc.js +1 -1
- package/dist/report-render/figures/sankey.d.ts +2 -2
- package/dist/report-render/figures/sankey.js +11 -10
- package/dist/report-render/figures/upset.d.ts +6 -6
- package/dist/report-render/figures/upset.js +7 -4
- package/dist/report-render/figures/volcano.js +12 -10
- package/dist/report-render/hybrid-svg.d.ts +4 -4
- package/dist/report-render/hybrid-svg.js +7 -5
- package/dist/report-render/number-format.d.ts +4 -4
- package/dist/report-render/number-format.js +62 -27
- package/dist/report-render/page.js +2 -1
- package/dist/report-render/provenance-data.d.ts +2 -2
- package/dist/report-render/references.d.ts +4 -4
- package/dist/report-render/render.d.ts +2 -2
- package/dist/report-render/render.js +10 -11
- package/dist/report-render/script-json.js +1 -1
- package/dist/report-render/table-data.d.ts +6 -6
- package/dist/report-render/test/options.d.ts +49 -0
- package/dist/report-render/test/options.js +143 -0
- package/dist/report-render/test/page-function.d.ts +19 -0
- package/dist/report-render/test/page-function.js +33 -0
- package/dist/report-render/types.d.ts +10 -10
- package/dist/report-render/value-bridge.d.ts +4 -4
- package/dist/report-render/value-bridge.js +27 -14
- package/dist/report-render/views/chart-view.d.ts +2 -2
- package/dist/report-render/views/chart-view.js +2 -2
- package/dist/report-render/views/lineage.d.ts +6 -6
- package/dist/report-render/views/lineage.js +2 -0
- package/dist/report-render/views/page-view.d.ts +2 -2
- package/dist/report-render/views/page-view.js +1 -0
- package/dist/report-render/views/prose.js +25 -8
- package/dist/report-render/views/references-view.js +12 -1
- package/dist/report-render/views/values.js +1 -1
- package/dist/runtime/assemble.d.ts +53 -26
- package/dist/runtime/assemble.js +103 -56
- package/dist/runtime/boot.d.ts +8 -7
- package/dist/runtime/boot.js +1 -1
- package/dist/runtime/connection-budget.d.ts +6 -6
- package/dist/runtime/connection-budget.js +1 -1
- package/dist/runtime/dbos.d.ts +29 -19
- package/dist/runtime/dbos.js +35 -20
- package/dist/runtime/result-serialization.js +18 -5
- package/dist/runtime/shutdown.d.ts +2 -2
- package/dist/sandbox/client.d.ts +7 -3
- package/dist/sandbox/cpu-files.d.ts +2 -2
- package/dist/sandbox/cpu-files.js +21 -4
- package/dist/sandbox/create-sandbox.d.ts +7 -8
- package/dist/sandbox/create-sandbox.js +6 -12
- package/dist/sandbox/docker-client.d.ts +48 -3
- package/dist/sandbox/docker-client.js +10 -6
- package/dist/sandbox/estimate-data-profile-resources.js +2 -7
- package/dist/sandbox/exec-outcome.d.ts +2 -2
- package/dist/sandbox/exec-outcome.js +1 -1
- package/dist/sandbox/exec.d.ts +10 -6
- package/dist/sandbox/exec.js +27 -12
- package/dist/sandbox/execution-id.js +14 -6
- package/dist/sandbox/farm.d.ts +2 -2
- package/dist/sandbox/farm.js +22 -27
- package/dist/sandbox/identity.d.ts +7 -0
- package/dist/sandbox/identity.js +14 -3
- package/dist/sandbox/image-packages.js +15 -27
- package/dist/sandbox/k8s-client.d.ts +35 -8
- package/dist/sandbox/k8s-client.js +6 -5
- package/dist/sandbox/labels.js +1 -0
- package/dist/sandbox/liveness.js +3 -1
- package/dist/sandbox/mount-plan.d.ts +10 -10
- package/dist/sandbox/mount-plan.js +13 -14
- package/dist/sandbox/notification-sweep.d.ts +4 -4
- package/dist/sandbox/notification-sweep.js +4 -7
- package/dist/sandbox/package-identity.d.ts +6 -13
- package/dist/sandbox/package-identity.js +46 -28
- package/dist/sandbox/reaper.d.ts +10 -10
- package/dist/sandbox/reaper.js +4 -6
- package/dist/sandbox/sandbox-error.d.ts +2 -9
- package/dist/sandbox/sandbox-error.js +21 -8
- package/dist/sandbox/sandbox-step-translate.d.ts +8 -5
- package/dist/sandbox/sandbox-step-translate.js +22 -8
- package/dist/sandbox/step-sandbox.d.ts +47 -0
- package/dist/sandbox/step-sandbox.js +53 -0
- package/dist/sandbox/types.d.ts +18 -19
- package/dist/sandbox/types.js +1 -1
- package/dist/schemas/artifact-manifest.d.ts +4 -4
- package/dist/schemas/data-profile-schemas.d.ts +343 -298
- package/dist/schemas/file-metadata.js +2 -4
- package/dist/schemas/plan-schemas.d.ts +31 -31
- package/dist/schemas/run-synthesis.d.ts +95 -26
- package/dist/schemas/run-synthesis.js +3 -1
- package/dist/schemas/validate-plan.d.ts +4 -4
- package/dist/schemas/validate-plan.js +17 -5
- package/dist/schemas/workflow-state.d.ts +19 -19
- package/dist/schemas/workflow-state.js +2 -2
- package/dist/state/active-turns.d.ts +36 -0
- package/dist/state/active-turns.js +67 -0
- package/dist/state/analyses-metrics.d.ts +8 -8
- package/dist/state/analyses-metrics.js +4 -4
- package/dist/state/analyses.d.ts +0 -14
- package/dist/state/analyses.js +0 -32
- package/dist/state/artifacts.d.ts +32 -19
- package/dist/state/artifacts.js +28 -5
- package/dist/state/data-profile.d.ts +2 -2
- package/dist/state/db.d.ts +12 -2
- package/dist/state/db.js +5 -0
- package/dist/state/edit-intents.d.ts +4 -0
- package/dist/state/edit-intents.js +71 -0
- package/dist/state/index.d.ts +4 -4
- package/dist/state/index.js +2 -2
- package/dist/state/init.d.ts +2 -1
- package/dist/state/init.js +5 -2
- package/dist/state/migrations/20260927120000_baseline.js +3 -1
- package/dist/state/migrations/20261026120000_add_the_edit_intents.d.ts +7 -0
- package/dist/state/migrations/20261026120000_add_the_edit_intents.js +21 -0
- package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.d.ts +7 -0
- package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.js +16 -0
- package/dist/state/migrations/20261027120100_store_the_authoring_results.d.ts +8 -0
- package/dist/state/migrations/20261027120100_store_the_authoring_results.js +20 -0
- package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.d.ts +7 -0
- package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.js +12 -0
- package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.d.ts +7 -0
- package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.js +11 -0
- package/dist/state/migrations/20261028120000_record_the_paused_work.d.ts +7 -0
- package/dist/state/migrations/20261028120000_record_the_paused_work.js +25 -0
- package/dist/state/migrations/20261028120100_end_the_suspended_runs.d.ts +8 -0
- package/dist/state/migrations/20261028120100_end_the_suspended_runs.js +13 -0
- package/dist/state/migrations/20261029120000_reference_the_run_mandate.d.ts +7 -0
- package/dist/state/migrations/20261029120000_reference_the_run_mandate.js +23 -0
- package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.d.ts +7 -0
- package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.js +11 -0
- package/dist/state/migrations/index.js +18 -0
- package/dist/state/paused-work.d.ts +52 -0
- package/dist/state/paused-work.js +105 -0
- package/dist/state/plans.d.ts +27 -8
- package/dist/state/plans.js +14 -11
- package/dist/state/purge-analysis.d.ts +6 -6
- package/dist/state/purge-analysis.js +10 -2
- package/dist/state/report-session-state.d.ts +43 -18
- package/dist/state/report-session-state.js +43 -4
- package/dist/state/report-versions.d.ts +16 -11
- package/dist/state/report-versions.js +5 -3
- package/dist/state/runs.d.ts +30 -19
- package/dist/state/runs.js +43 -51
- package/dist/state/schema.d.ts +18 -21
- package/dist/state/schema.js +4 -5
- package/dist/state/snapshot-parse.d.ts +2 -2
- package/dist/state/snapshot-parse.js +14 -8
- package/dist/state/step-executions.d.ts +20 -8
- package/dist/state/step-executions.js +6 -4
- package/dist/state/tool-outputs.d.ts +2 -2
- package/dist/state/tool-outputs.js +2 -1
- package/dist/state/vector-store.d.ts +16 -16
- package/dist/state/vector-store.js +11 -7
- package/dist/tasks/data-profile-absorb.d.ts +3 -3
- package/dist/tasks/data-profile-absorb.js +21 -16
- package/dist/tasks/data-profile-activity.d.ts +5 -5
- package/dist/tasks/data-profile-activity.js +5 -5
- package/dist/tasks/data-profile-index.d.ts +4 -4
- package/dist/tasks/data-profile-index.js +32 -17
- package/dist/tasks/data-profile-resolve.d.ts +8 -8
- package/dist/tasks/data-profile-resolve.js +88 -62
- package/dist/tasks/data-profile.d.ts +40 -31
- package/dist/tasks/data-profile.js +138 -95
- package/dist/tasks/extract-values.d.ts +26 -79
- package/dist/tasks/extract-values.js +48 -108
- package/dist/tasks/refresh-regulatory-corpus.d.ts +4 -20
- package/dist/tasks/refresh-regulatory-corpus.js +12 -8
- package/dist/tasks/regulatory-corpus-boot-refresh.d.ts +2 -2
- package/dist/tasks/regulatory-corpus-boot-refresh.js +12 -10
- package/dist/testing.d.ts +60 -0
- package/dist/testing.js +96 -0
- package/dist/tools/ad-hoc-router.d.ts +9 -9
- package/dist/tools/ad-hoc-router.js +65 -52
- package/dist/tools/analysis-invocation.d.ts +7 -0
- package/dist/tools/analysis-invocation.js +29 -5
- package/dist/tools/approval/contract.d.ts +8 -52
- package/dist/tools/approval/contract.js +7 -36
- package/dist/tools/approval/gateway.d.ts +27 -28
- package/dist/tools/approval/gateway.js +33 -130
- package/dist/tools/approval/queries.d.ts +6 -11
- package/dist/tools/approval/queries.js +43 -29
- package/dist/tools/approval/uuidv7.js +2 -2
- package/dist/tools/bio/chembl.d.ts +3 -3
- package/dist/tools/bio/chembl.js +10 -0
- package/dist/tools/bio/comptox.d.ts +25 -8
- package/dist/tools/bio/comptox.js +4 -2
- package/dist/tools/bio/drug-gene-interactions.d.ts +27 -17
- package/dist/tools/bio/drug-gene-interactions.js +11 -8
- package/dist/tools/bio/gene-disease-evidence.d.ts +61 -15
- package/dist/tools/bio/gene-disease-evidence.js +10 -6
- package/dist/tools/bio/gene-preclinical-profile.d.ts +11 -11
- package/dist/tools/bio/keys.d.ts +2 -2
- package/dist/tools/bio/keys.js +3 -3
- package/dist/tools/bio/lookup-annotation.d.ts +5 -5
- package/dist/tools/bio/lookup-annotation.js +3 -0
- package/dist/tools/bio/opentargets.d.ts +1 -1
- package/dist/tools/bio/opentargets.js +6 -0
- package/dist/tools/bio/pubchem.d.ts +2 -2
- package/dist/tools/bio/pubchem.js +6 -0
- package/dist/tools/bio/pubmed.d.ts +26 -16
- package/dist/tools/bio/pubmed.js +9 -3
- package/dist/tools/bio/search-clinical-trials.d.ts +4 -4
- package/dist/tools/bio/search-clinical-trials.js +5 -1
- package/dist/tools/bio/search-faers.d.ts +2 -2
- package/dist/tools/bio/search-faers.js +1 -1
- package/dist/tools/bio/search-gene.d.ts +2 -2
- package/dist/tools/bio/search-gene.js +1 -0
- package/dist/tools/bio/search-geo-datasets.d.ts +4 -4
- package/dist/tools/bio/search-geo-datasets.js +5 -5
- package/dist/tools/bio/search-interactions.d.ts +1 -1
- package/dist/tools/bio/search-patents.d.ts +28 -22
- package/dist/tools/bio/search-patents.js +20 -17
- package/dist/tools/bio/search-protein.d.ts +2 -2
- package/dist/tools/bio/search-protein.js +1 -1
- package/dist/tools/bio/search-regulatory-approvals.d.ts +64 -18
- package/dist/tools/bio/search-regulatory-approvals.js +21 -16
- package/dist/tools/bio/target-safety.d.ts +8 -8
- package/dist/tools/bio/target-safety.js +11 -6
- package/dist/tools/capability-data.d.ts +9 -5
- package/dist/tools/capability-data.js +2 -1
- package/dist/tools/define-tool.d.ts +55 -46
- package/dist/tools/define-tool.js +39 -27
- package/dist/tools/display/normalize-echart-spec.d.ts +2 -2
- package/dist/tools/display/normalize-echart-spec.js +51 -27
- package/dist/tools/display/show-user.d.ts +2 -2
- package/dist/tools/display/show-user.js +1 -1
- package/dist/tools/execute-analysis.d.ts +19 -10
- package/dist/tools/execute-analysis.js +83 -62
- package/dist/tools/knowledge/check.d.ts +166 -44
- package/dist/tools/knowledge/check.js +5 -3
- package/dist/tools/knowledge/client.d.ts +31 -62
- package/dist/tools/knowledge/client.js +44 -27
- package/dist/tools/knowledge/environment.d.ts +6 -6
- package/dist/tools/knowledge/environment.js +18 -7
- package/dist/tools/knowledge/index.d.ts +2 -2
- package/dist/tools/knowledge/index.js +9 -9
- package/dist/tools/knowledge/local-slots.d.ts +4 -4
- package/dist/tools/knowledge/local-slots.js +11 -4
- package/dist/tools/knowledge/pin.d.ts +2 -2
- package/dist/tools/knowledge/recommend.d.ts +20 -45
- package/dist/tools/knowledge/recommend.js +27 -19
- package/dist/tools/knowledge/situation.d.ts +40 -40
- package/dist/tools/knowledge/situation.js +2 -9
- package/dist/tools/knowledge/skeleton.d.ts +4 -4
- package/dist/tools/knowledge/skeleton.js +10 -11
- package/dist/tools/knowledge/template.d.ts +20 -18
- package/dist/tools/knowledge/template.js +38 -32
- package/dist/tools/lib/alphafold-client.js +2 -1
- package/dist/tools/lib/amass-client.d.ts +28 -28
- package/dist/tools/lib/amass-client.js +20 -10
- package/dist/tools/lib/api-utils.d.ts +13 -3
- package/dist/tools/lib/api-utils.js +17 -3
- package/dist/tools/lib/bgee-client.d.ts +6 -6
- package/dist/tools/lib/bgee-client.js +16 -10
- package/dist/tools/lib/cbioportal-client.d.ts +4 -4
- package/dist/tools/lib/cbioportal-client.js +9 -8
- package/dist/tools/lib/chembl-client.d.ts +14 -14
- package/dist/tools/lib/chembl-client.js +11 -4
- package/dist/tools/lib/clinical-benchmarks-client.d.ts +4 -4
- package/dist/tools/lib/clinical-benchmarks-client.js +4 -7
- package/dist/tools/lib/clinical-trials-client.d.ts +18 -18
- package/dist/tools/lib/clinical-trials-client.js +10 -10
- package/dist/tools/lib/clinvar-client.d.ts +2 -2
- package/dist/tools/lib/clinvar-client.js +6 -6
- package/dist/tools/lib/ctx-ops.d.ts +23 -23
- package/dist/tools/lib/ctx-ops.js +13 -10
- package/dist/tools/lib/dgidb-client.d.ts +6 -6
- package/dist/tools/lib/dgidb-client.js +10 -12
- package/dist/tools/lib/disgenet-client.d.ts +4 -4
- package/dist/tools/lib/ema-client.d.ts +2 -2
- package/dist/tools/lib/ensembl-client.d.ts +4 -4
- package/dist/tools/lib/ensembl-client.js +5 -4
- package/dist/tools/lib/gwas-catalog-client.d.ts +4 -4
- package/dist/tools/lib/gwas-catalog-client.js +17 -17
- package/dist/tools/lib/html-text.d.ts +6 -0
- package/dist/tools/lib/html-text.js +9 -0
- package/dist/tools/lib/identifier-resolver.d.ts +4 -4
- package/dist/tools/lib/identifier-resolver.js +7 -3
- package/dist/tools/lib/impc-client.d.ts +8 -8
- package/dist/tools/lib/impc-client.js +46 -35
- package/dist/tools/lib/iuphar-client.d.ts +2 -2
- package/dist/tools/lib/iuphar-client.js +7 -16
- package/dist/tools/lib/monarch-client.d.ts +4 -4
- package/dist/tools/lib/openfda-client.d.ts +22 -22
- package/dist/tools/lib/openfda-client.js +23 -22
- package/dist/tools/lib/opentargets-client.d.ts +12 -12
- package/dist/tools/lib/pathway-client.d.ts +4 -4
- package/dist/tools/lib/pathway-client.js +15 -19
- package/dist/tools/lib/pharmgkb-client.d.ts +2 -2
- package/dist/tools/lib/pharmgkb-client.js +1 -1
- package/dist/tools/lib/protein-family-modality.d.ts +2 -2
- package/dist/tools/lib/protein-family-modality.js +0 -2
- package/dist/tools/lib/protein-family-normalize.js +7 -0
- package/dist/tools/lib/pubchem-client.d.ts +2 -2
- package/dist/tools/lib/pubchem-client.js +1 -0
- package/dist/tools/lib/pubchem-ops.d.ts +4 -4
- package/dist/tools/lib/pubchem-ops.js +8 -0
- package/dist/tools/lib/pubmed-client.d.ts +9 -9
- package/dist/tools/lib/pubmed-client.js +1 -1
- package/dist/tools/lib/string-client.d.ts +6 -6
- package/dist/tools/lib/uniprot-client.d.ts +8 -8
- package/dist/tools/lib/uniprot-client.js +5 -1
- package/dist/tools/memory/update-working-memory.d.ts +16 -13
- package/dist/tools/memory/update-working-memory.js +21 -3
- package/dist/tools/read-tool-output.js +8 -2
- package/dist/tools/registry.d.ts +2 -2
- package/dist/tools/report-authoring/authoring-tools.d.ts +54 -23
- package/dist/tools/report-authoring/authoring-tools.js +128 -62
- package/dist/tools/report-session/derive-table.d.ts +19 -59
- package/dist/tools/report-session/derive-table.js +120 -122
- package/dist/tools/report-session/examine-page.d.ts +6 -6
- package/dist/tools/report-session/examine-page.js +14 -12
- package/dist/tools/report-session/list-artifacts.d.ts +6 -6
- package/dist/tools/report-session/list-artifacts.js +5 -5
- package/dist/tools/report-session/page-faults.d.ts +6 -6
- package/dist/tools/report-session/page-faults.js +3 -1
- package/dist/tools/report-session/preview-report.d.ts +4 -3
- package/dist/tools/report-session/preview-report.js +26 -7
- package/dist/tools/report-session/record-version.d.ts +9 -4
- package/dist/tools/report-session/record-version.js +16 -9
- package/dist/tools/report-session/session-page-publisher.d.ts +6 -6
- package/dist/tools/research/generate-analogy-report.d.ts +14 -7
- package/dist/tools/research/generate-analogy-report.js +80 -76
- package/dist/tools/research/generate-plan.d.ts +16 -16
- package/dist/tools/research/generate-plan.js +410 -374
- package/dist/tools/research/guarded-address.js +3 -2
- package/dist/tools/research/inspect-data-profile.d.ts +27 -20
- package/dist/tools/research/inspect-data-profile.js +26 -25
- package/dist/tools/research/inspect-run.d.ts +54 -27
- package/dist/tools/research/inspect-run.js +50 -40
- package/dist/tools/research/literature-reviewer.d.ts +8 -7
- package/dist/tools/research/literature-reviewer.js +29 -28
- package/dist/tools/research/search-arxiv.d.ts +1 -1
- package/dist/tools/research/search-arxiv.js +1 -1
- package/dist/tools/research/search-github-repos.d.ts +10 -7
- package/dist/tools/research/search-github-repos.js +25 -22
- package/dist/tools/research/search-semantic-scholar.js +1 -1
- package/dist/tools/research/searxng-engine.d.ts +2 -2
- package/dist/tools/research/searxng-engine.js +6 -4
- package/dist/tools/research/web-fetch.d.ts +24 -21
- package/dist/tools/research/web-fetch.js +65 -74
- package/dist/tools/research/web-search.d.ts +26 -17
- package/dist/tools/research/web-search.js +26 -21
- package/dist/tools/sandbox/link-packages.d.ts +11 -7
- package/dist/tools/sandbox/link-packages.js +11 -8
- package/dist/tools/sandbox/list-available-packages.d.ts +17 -8
- package/dist/tools/sandbox/list-available-packages.js +31 -25
- package/dist/tools/sandbox/list-available-refs.d.ts +17 -14
- package/dist/tools/sandbox/list-available-refs.js +61 -36
- package/dist/tools/sandbox/report-blocker.d.ts +30 -37
- package/dist/tools/sandbox/report-blocker.js +23 -73
- package/dist/tools/sandbox/skills.d.ts +16 -12
- package/dist/tools/sandbox/skills.js +16 -12
- package/dist/tools/sandbox/submit-file-metadata.d.ts +12 -9
- package/dist/tools/sandbox/submit-file-metadata.js +18 -21
- package/dist/tools/start-report-session.d.ts +13 -5
- package/dist/tools/start-report-session.js +35 -8
- package/dist/tools/terminal-text.d.ts +5 -2
- package/dist/tools/terminal-text.js +35 -3
- package/dist/tools/workspace/decision-record.d.ts +4 -4
- package/dist/tools/workspace/decision-record.js +23 -13
- package/dist/tools/workspace/edit-file.d.ts +59 -20
- package/dist/tools/workspace/edit-file.js +81 -16
- package/dist/tools/workspace/execute-command.d.ts +15 -13
- package/dist/tools/workspace/execute-command.js +11 -9
- package/dist/tools/workspace/file-stat.d.ts +6 -3
- package/dist/tools/workspace/grep.d.ts +10 -7
- package/dist/tools/workspace/grep.js +9 -3
- package/dist/tools/workspace/list-files.d.ts +6 -3
- package/dist/tools/workspace/mutator.d.ts +28 -15
- package/dist/tools/workspace/mutator.js +107 -53
- package/dist/tools/workspace/read-file.d.ts +8 -5
- package/dist/tools/workspace/result-bounds.d.ts +5 -5
- package/dist/tools/workspace/result-bounds.js +4 -2
- package/dist/tools/workspace/run-exec.d.ts +2 -2
- package/dist/tools/workspace/run-exec.js +3 -3
- package/dist/tools/workspace/scan-inputs.d.ts +8 -5
- package/dist/tools/workspace/scan-inputs.js +17 -5
- package/dist/tools/workspace/show-file.d.ts +1 -1
- package/dist/tools/workspace/show-file.js +2 -1
- package/dist/tools/workspace/show-plan.d.ts +8 -5
- package/dist/tools/workspace/show-plan.js +9 -8
- package/dist/tools/workspace/workspace-search.d.ts +41 -13
- package/dist/tools/workspace/workspace-search.js +27 -14
- package/dist/tools/workspace/write-file.d.ts +9 -7
- package/dist/workflows/execute-analysis-scheduler.d.ts +9 -9
- package/dist/workflows/execute-analysis-scheduler.js +6 -3
- package/dist/workflows/execute-analysis.d.ts +46 -62
- package/dist/workflows/execute-analysis.js +137 -219
- package/dist/workflows/pause.d.ts +71 -0
- package/dist/workflows/pause.js +173 -0
- package/dist/workflows/sandbox-step.d.ts +38 -61
- package/dist/workflows/sandbox-step.js +99 -106
- package/dist/workflows/test/sql-writes.d.ts +21 -0
- package/dist/workflows/test/sql-writes.js +36 -0
- package/dist/workspace/filesystem.d.ts +6 -6
- package/dist/workspace/filesystem.js +10 -8
- package/dist/workspace/paths.d.ts +1 -1
- package/dist/workspace/paths.js +15 -4
- package/dist/workspace/search-config.d.ts +2 -2
- package/dist/workspace/search-config.js +1 -1
- package/package.json +21 -22
- package/dist/loop/call-guard.d.ts +0 -50
- package/dist/loop/call-guard.js +0 -90
- package/dist/loop/continue-agent.d.ts +0 -40
- package/dist/loop/continue-agent.js +0 -38
- package/dist/loop/genai-spans.d.ts +0 -47
- package/dist/loop/genai-spans.js +0 -134
- package/dist/loop/run-agent.d.ts +0 -245
- package/dist/loop/run-agent.js +0 -1124
- package/dist/loop/run-step.d.ts +0 -29
- package/dist/loop/run-step.js +0 -34
- package/dist/loop/run-to-terminal.d.ts +0 -66
- package/dist/loop/run-to-terminal.js +0 -93
- package/dist/loop/tool-mask.d.ts +0 -23
- package/dist/loop/tool-mask.js +0 -46
- package/dist/providers/streaming-chat.d.ts +0 -32
- package/dist/providers/streaming-chat.js +0 -91
- package/dist/tasks/derive-table-exec.d.ts +0 -54
- package/dist/tasks/derive-table-exec.js +0 -86
- package/dist/workflows/suspension.d.ts +0 -32
- package/dist/workflows/suspension.js +0 -38
|
@@ -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;
|
|
@@ -2,11 +2,15 @@
|
|
|
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
|
*/
|
|
12
|
+
import { errorMessageOf } from "../../lib/thrown.js";
|
|
13
|
+
import { textOf } from "../../lib/unknown-text.js";
|
|
10
14
|
import { ok } from "neverthrow";
|
|
11
15
|
import { z } from "zod";
|
|
12
16
|
import { AnalogyReportSchema } from "@inflexa-ai/harness/contracts/analogy-report.js";
|
|
@@ -14,11 +18,11 @@ import { analogicalReasonerPrompt } from "../../prompts/analogical-reasoner.js";
|
|
|
14
18
|
import { composeSystemPrompt } from "../../agents/system-prompt.js";
|
|
15
19
|
import { forSubAgent } from "../../auth/types.js";
|
|
16
20
|
import { createNoopLogger } from "../../lib/console-logger.js";
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
21
|
+
import { runWithSalvage } from "../../loop/run-loop.js";
|
|
22
|
+
import { recordedInputOf } from "../../loop/tool-adapter.js";
|
|
19
23
|
import { defineTool } from "../define-tool.js";
|
|
20
24
|
import { createReadToolOutputTool } from "../read-tool-output.js";
|
|
21
|
-
import { createReportBlockerToolFor } from "../sandbox/report-blocker.js";
|
|
25
|
+
import { blockerOf, createReportBlockerToolFor, REPORT_BLOCKER_TOOL_ID } from "../sandbox/report-blocker.js";
|
|
22
26
|
// Cross-domain search tools the analogical-reasoner uses.
|
|
23
27
|
import { createSearchSemanticScholarTool } from "./search-semantic-scholar.js";
|
|
24
28
|
import { searchArxivTool } from "./search-arxiv.js";
|
|
@@ -32,33 +36,34 @@ const RESEARCH_MAX_ITERATIONS = 40;
|
|
|
32
36
|
const ANALOGY_SALVAGE_NUDGE = "You ended without a terminal outcome. Call submit_analogy_report with " +
|
|
33
37
|
"your report now, or report_blocker if phase 1 cannot run. Do not reply " +
|
|
34
38
|
"with prose.";
|
|
35
|
-
|
|
39
|
+
const SUBMIT_ANALOGY_REPORT_TOOL_ID = "submit_analogy_report";
|
|
40
|
+
function createSubmitAnalogyReportTool() {
|
|
36
41
|
return defineTool({
|
|
37
|
-
id:
|
|
38
|
-
description: "
|
|
42
|
+
id: SUBMIT_ANALOGY_REPORT_TOOL_ID,
|
|
43
|
+
description: "Submit the analogy report: the problem summary, objects, " +
|
|
39
44
|
"relations, and key terms of phase 1, and each analogy with its " +
|
|
40
45
|
"coverage and its cited solutions from phase 2. Call it one time with " +
|
|
41
46
|
"the full report. If it rejects the report, correct the fields that it " +
|
|
42
|
-
"names and call it again.
|
|
47
|
+
"names and call it again. The last accepted report is the result.",
|
|
43
48
|
inputSchema: AnalogyReportSchema,
|
|
44
49
|
describeCall: "none",
|
|
45
|
-
execute:
|
|
46
|
-
// A report replaces a blocker, thus the report wins when one round records both.
|
|
47
|
-
cell.outcome = { kind: "report", report };
|
|
48
|
-
return ok({
|
|
49
|
-
recorded: true,
|
|
50
|
-
message: "Report recorded.",
|
|
51
|
-
});
|
|
52
|
-
},
|
|
50
|
+
execute: () => Promise.resolve(ok({ recorded: true, message: "Report recorded. Stop now." })),
|
|
53
51
|
});
|
|
54
52
|
}
|
|
55
|
-
|
|
53
|
+
/** The last report of a run that its call accepted. The input schema of the tool checked it. */
|
|
54
|
+
export function acceptedReportOf(steps) {
|
|
55
|
+
let accepted;
|
|
56
|
+
for (const step of steps) {
|
|
57
|
+
for (const call of step.calls) {
|
|
58
|
+
if (call.toolName !== SUBMIT_ANALOGY_REPORT_TOOL_ID || call.output?.outcome !== "ok")
|
|
59
|
+
continue;
|
|
60
|
+
accepted = recordedInputOf(AnalogyReportSchema, call.input) ?? accepted;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return accepted;
|
|
64
|
+
}
|
|
65
|
+
function createAnalogyBlockerTool() {
|
|
56
66
|
return createReportBlockerToolFor({
|
|
57
|
-
// A blocker never replaces a recorded outcome, thus it never replaces a report.
|
|
58
|
-
record: (outcome) => {
|
|
59
|
-
if (cell.outcome === null)
|
|
60
|
-
cell.outcome = outcome;
|
|
61
|
-
},
|
|
62
67
|
blockedWhen: "Ends the analogy research with no report. Call it only when the " +
|
|
63
68
|
"problem is empty or incoherent, thus phase 1 cannot extract its " +
|
|
64
69
|
"objects and relations.",
|
|
@@ -119,17 +124,63 @@ export function buildResearchPrompt(input) {
|
|
|
119
124
|
return lines.join("\n");
|
|
120
125
|
}
|
|
121
126
|
/** Build the `generate_analogy_report` delegation tool bound to its provider. */
|
|
122
|
-
export function createGenerateAnalogyReportTool(deps) {
|
|
127
|
+
export function createGenerateAnalogyReportTool(deps, registerSubAgent) {
|
|
123
128
|
const logger = (deps.logger ?? createNoopLogger()).named("generate-analogy-report");
|
|
124
129
|
const ncbi = createNcbiTools(deps.bioKeys);
|
|
125
130
|
const searchTools = [
|
|
126
|
-
createSearchSemanticScholarTool({
|
|
131
|
+
createSearchSemanticScholarTool({ apiKey: deps.bioKeys.semanticScholar }),
|
|
127
132
|
searchArxivTool,
|
|
128
133
|
createSearchGithubReposTool({ githubToken: deps.bioKeys.github }),
|
|
129
134
|
ncbi.pubmed,
|
|
130
135
|
...(deps.toolOutputStore ? [createReadToolOutputTool(deps.toolOutputStore)] : []),
|
|
131
136
|
];
|
|
132
137
|
const systemPrompt = composeSystemPrompt(analogicalReasonerPrompt);
|
|
138
|
+
const research = registerSubAgent(AGENT_ID, async ({ payload: input, ctx, loop }) => {
|
|
139
|
+
const childSession = forSubAgent(ctx.session, AGENT_ID);
|
|
140
|
+
// The order and the definitions of the tools stay fixed across calls so the cache-keyed prefix holds.
|
|
141
|
+
const submitReportTool = createSubmitAnalogyReportTool();
|
|
142
|
+
const blockerTool = createAnalogyBlockerTool();
|
|
143
|
+
const agent = {
|
|
144
|
+
id: AGENT_ID,
|
|
145
|
+
systemPrompt,
|
|
146
|
+
model: deps.model,
|
|
147
|
+
tools: [...searchTools, submitReportTool, blockerTool],
|
|
148
|
+
maxIterations: RESEARCH_MAX_ITERATIONS,
|
|
149
|
+
};
|
|
150
|
+
let steps;
|
|
151
|
+
try {
|
|
152
|
+
const run = await runWithSalvage(agent, [{ role: "user", content: buildResearchPrompt(input) }], childSession, {
|
|
153
|
+
...loop,
|
|
154
|
+
provider: deps.provider,
|
|
155
|
+
logger,
|
|
156
|
+
usageRecorder: deps.usageRecorder,
|
|
157
|
+
toolOutputStore: deps.toolOutputStore,
|
|
158
|
+
}, {
|
|
159
|
+
tools: [SUBMIT_ANALOGY_REPORT_TOOL_ID, REPORT_BLOCKER_TOOL_ID],
|
|
160
|
+
nudge: ANALOGY_SALVAGE_NUDGE,
|
|
161
|
+
hasOutcome: (done) => acceptedReportOf(done) !== undefined || blockerOf(done) !== null,
|
|
162
|
+
});
|
|
163
|
+
steps = run.steps;
|
|
164
|
+
}
|
|
165
|
+
catch (err) {
|
|
166
|
+
const message = errorMessageOf(err) ?? textOf(err);
|
|
167
|
+
return {
|
|
168
|
+
schemaVersion: "1",
|
|
169
|
+
error: {
|
|
170
|
+
kind: "extraction-failed",
|
|
171
|
+
message: `Analogy research failed: ${message}`.slice(0, 240),
|
|
172
|
+
},
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
// A report wins over a blocker.
|
|
176
|
+
const report = acceptedReportOf(steps);
|
|
177
|
+
if (report !== undefined)
|
|
178
|
+
return report;
|
|
179
|
+
const blocker = blockerOf(steps);
|
|
180
|
+
if (blocker !== null)
|
|
181
|
+
return { schemaVersion: "1", error: { kind: "extraction-failed", message: blocker.reason } };
|
|
182
|
+
return buildExtractionFailedEnvelope();
|
|
183
|
+
});
|
|
133
184
|
return defineTool({
|
|
134
185
|
id: "generate_analogy_report",
|
|
135
186
|
description: "Idea-generation engine. Extracts structural analogies for an open-ended " +
|
|
@@ -156,55 +207,8 @@ export function createGenerateAnalogyReportTool(deps) {
|
|
|
156
207
|
"failure, thus surface the message and ask the user to narrow the problem.",
|
|
157
208
|
inputSchema: generateAnalogyReportInputSchema,
|
|
158
209
|
describeCall: "none",
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
// Each call builds fresh tool closures over its own cell. Their order and
|
|
162
|
-
// definitions stay fixed across calls so the cache-keyed prefix holds.
|
|
163
|
-
const cell = { outcome: null };
|
|
164
|
-
const submitReportTool = createSubmitAnalogyReportTool(cell);
|
|
165
|
-
const blockerTool = createAnalogyBlockerTool(cell);
|
|
166
|
-
const agent = {
|
|
167
|
-
id: AGENT_ID,
|
|
168
|
-
systemPrompt,
|
|
169
|
-
model: deps.model,
|
|
170
|
-
tools: [...searchTools, submitReportTool, blockerTool],
|
|
171
|
-
maxIterations: RESEARCH_MAX_ITERATIONS,
|
|
172
|
-
};
|
|
173
|
-
try {
|
|
174
|
-
await runToTerminal(agent, [{ role: "user", content: buildResearchPrompt(input) }], childSession, {
|
|
175
|
-
provider: deps.provider,
|
|
176
|
-
signal: ctx.signal,
|
|
177
|
-
emit: ctx.emit,
|
|
178
|
-
runStep: passthroughStep,
|
|
179
|
-
resolved: () => cell.outcome !== null,
|
|
180
|
-
logger,
|
|
181
|
-
usageRecorder: deps.usageRecorder,
|
|
182
|
-
toolOutputStore: deps.toolOutputStore,
|
|
183
|
-
// Fold the child's calls into the turn total the root loop reports.
|
|
184
|
-
turnUsage: ctx.turnUsage,
|
|
185
|
-
// Keeps the usage record keys of two parallel dispatches disjoint —
|
|
186
|
-
// same frame, same call path, same loop-local step names.
|
|
187
|
-
invocationId: ctx.invocationId,
|
|
188
|
-
}, { tools: [submitReportTool, blockerTool], nudge: ANALOGY_SALVAGE_NUDGE });
|
|
189
|
-
}
|
|
190
|
-
catch (err) {
|
|
191
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
192
|
-
return ok({
|
|
193
|
-
schemaVersion: "1",
|
|
194
|
-
error: {
|
|
195
|
-
kind: "extraction-failed",
|
|
196
|
-
message: `Analogy research failed: ${message}`.slice(0, 240),
|
|
197
|
-
},
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
const outcome = cell.outcome;
|
|
201
|
-
if (outcome?.kind === "report")
|
|
202
|
-
return ok(outcome.report);
|
|
203
|
-
if (outcome?.kind === "blocker") {
|
|
204
|
-
return ok({ schemaVersion: "1", error: { kind: "extraction-failed", message: outcome.reason } });
|
|
205
|
-
}
|
|
206
|
-
return ok(buildExtractionFailedEnvelope());
|
|
207
|
-
},
|
|
210
|
+
startsWorkflow: true,
|
|
211
|
+
execute: async (input, ctx) => ok(await research(input, ctx)),
|
|
208
212
|
});
|
|
209
213
|
}
|
|
210
214
|
/** The envelope of a run that recorded no outcome, also after its salvage. */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* generatePlan — a loop-driving tool: a focused
|
|
3
|
-
*
|
|
2
|
+
* generatePlan — a loop-driving tool: a focused agent loop that builds an
|
|
3
|
+
* analysis plan (a DAG of steps).
|
|
4
4
|
*
|
|
5
5
|
* The dataset's facts are NOT an input. They are read here, server-side, from
|
|
6
6
|
* the analysis's persisted data profile — the one durable record of what the
|
|
@@ -10,20 +10,20 @@
|
|
|
10
10
|
* caller-typed dataset summary would be a model re-transcribing a record the
|
|
11
11
|
* database already holds, and it would lose fidelity at every hop.
|
|
12
12
|
*
|
|
13
|
-
* The tool drives an internal "planner" agent that
|
|
14
|
-
*
|
|
13
|
+
* The tool drives an internal "planner" agent that gives its outcome through
|
|
14
|
+
* three terminal tools. None of them ends the run, and none writes:
|
|
15
15
|
*
|
|
16
|
-
* - submit_plan(plan) →
|
|
17
|
-
*
|
|
18
|
-
* - request_clarification(…) →
|
|
19
|
-
* - report_blocker(reason) →
|
|
16
|
+
* - submit_plan(plan) → checks a candidate; gives back the accepted
|
|
17
|
+
* plan or structured issues
|
|
18
|
+
* - request_clarification(…) → the planner needs more context
|
|
19
|
+
* - report_blocker(reason) → no viable plan
|
|
20
20
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* terminal-tool surface above.
|
|
21
|
+
* After the run, the tool selects the outcome from the recorded calls — the
|
|
22
|
+
* last accepted plan, else the last clarification, else the first blocker —
|
|
23
|
+
* and persists an accepted plan under an id that a rerun of the call gives again.
|
|
25
24
|
*/
|
|
26
25
|
import type { Pool } from "pg";
|
|
26
|
+
import type { SubAgentRegistrar } from "../../loop/sub-agent.js";
|
|
27
27
|
import type { ToolOutputStore } from "../../loop/tool-output.js";
|
|
28
28
|
import { type ChatProvider } from "../../providers/types.js";
|
|
29
29
|
import type { UsageRecorder } from "../../billing/usage-recorder.js";
|
|
@@ -33,7 +33,7 @@ import { type BioToolKeys } from "../bio/keys.js";
|
|
|
33
33
|
import { type KnowledgeClient, type KnowledgeRecommendAnswer } from "../knowledge/index.js";
|
|
34
34
|
import { type ResourcePolicy } from "../../config/resource-limits.js";
|
|
35
35
|
import type { Logger } from "../../lib/logger.js";
|
|
36
|
-
export
|
|
36
|
+
export type GeneratePlanDeps = EnvironmentStorePaths & {
|
|
37
37
|
/**
|
|
38
38
|
* The conversation-role backend the planner is pinned to. Keeping the
|
|
39
39
|
* provider and its model label in one value prevents composition roots from
|
|
@@ -51,7 +51,7 @@ export interface GeneratePlanDeps extends EnvironmentStorePaths {
|
|
|
51
51
|
* default guidance and validation skips the ceiling check.
|
|
52
52
|
*/
|
|
53
53
|
readonly resourcePolicy?: ResourcePolicy;
|
|
54
|
-
/** Diagnostic sink. Absent, the tool runs silently — see `
|
|
54
|
+
/** Diagnostic sink. Absent, the tool runs silently — see `LoopOptions.logger`. */
|
|
55
55
|
readonly logger?: Logger;
|
|
56
56
|
/** LLM usage-accounting seam for the planner loop; omitted falls back to the no-op recorder. */
|
|
57
57
|
readonly usageRecorder?: UsageRecorder;
|
|
@@ -66,7 +66,7 @@ export interface GeneratePlanDeps extends EnvironmentStorePaths {
|
|
|
66
66
|
* the open-source host.
|
|
67
67
|
*/
|
|
68
68
|
readonly knowledge?: KnowledgeClient;
|
|
69
|
-
}
|
|
69
|
+
};
|
|
70
70
|
/**
|
|
71
71
|
* The search tools of the planner — built one time, not per invocation.
|
|
72
72
|
*
|
|
@@ -83,4 +83,4 @@ export declare function buildPlannerSearchTools(deps: GeneratePlanDeps, hooks?:
|
|
|
83
83
|
readonly onRecommend?: (answer: KnowledgeRecommendAnswer) => void;
|
|
84
84
|
}): Tool[];
|
|
85
85
|
/** Build the `generate_plan` tool bound to its provider and pool. */
|
|
86
|
-
export declare function createGeneratePlanTool(deps: GeneratePlanDeps): Tool;
|
|
86
|
+
export declare function createGeneratePlanTool(deps: GeneratePlanDeps, registerSubAgent: SubAgentRegistrar): Tool;
|