@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
|
@@ -9,7 +9,7 @@ import { createVectorStore } from "../state/vector-store.js";
|
|
|
9
9
|
import { unwrapOrThrow } from "../lib/result.js";
|
|
10
10
|
/** Derive the vector index name for an analysis. */
|
|
11
11
|
export function searchIndexName(resourceId) {
|
|
12
|
-
return `search_${resourceId.
|
|
12
|
+
return `search_${resourceId.replaceAll("-", "_")}`;
|
|
13
13
|
}
|
|
14
14
|
const _ensuredIndexes = new Set();
|
|
15
15
|
/**
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@inflexa-ai/harness",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Host-agnostic bioinformatics agent harness —
|
|
3
|
+
"version": "0.46.0",
|
|
4
|
+
"description": "Host-agnostic bioinformatics agent harness — an agent loop on the AI SDK, DBOS-durable workflows, sandboxed compute.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "dist/index.js",
|
|
@@ -39,28 +39,30 @@
|
|
|
39
39
|
"format": "prettier --write src/",
|
|
40
40
|
"format:file": "prettier --write",
|
|
41
41
|
"gallery:data": "bash scripts/gallery-data.sh",
|
|
42
|
-
"lint": "
|
|
42
|
+
"lint": "bun --bun oxlint",
|
|
43
43
|
"lint:python": "ruff check src/input-scan/decoder && ruff format --check src/input-scan/decoder",
|
|
44
44
|
"prepare": "tsc -p tsconfig.build.json && node scripts/copy-assets.mjs",
|
|
45
45
|
"prepublishOnly": "bun run build && bun run smoke",
|
|
46
46
|
"smoke": "node scripts/smoke.mjs",
|
|
47
47
|
"test:full": "bash scripts/test-full.sh",
|
|
48
48
|
"test:python": "python3 -m pytest src/input-scan/decoder -q",
|
|
49
|
-
"typecheck": "
|
|
49
|
+
"typecheck": "inflexa-typecheck"
|
|
50
50
|
},
|
|
51
51
|
"dependencies": {
|
|
52
|
-
"@ai-sdk/anthropic": "^4.0.
|
|
53
|
-
"@ai-sdk/openai": "^4.0.
|
|
54
|
-
"@ai-sdk/openai-compatible": "^3.0.
|
|
55
|
-
"@ai-sdk/otel": "^1.0.
|
|
56
|
-
"@ai-sdk/provider": "^4.0.
|
|
57
|
-
"@ai-sdk/provider-utils": "5.0.
|
|
52
|
+
"@ai-sdk/anthropic": "^4.0.89",
|
|
53
|
+
"@ai-sdk/openai": "^4.0.103",
|
|
54
|
+
"@ai-sdk/openai-compatible": "^3.0.79",
|
|
55
|
+
"@ai-sdk/otel": "^1.0.154",
|
|
56
|
+
"@ai-sdk/provider": "^4.0.34",
|
|
57
|
+
"@ai-sdk/provider-utils": "5.0.69",
|
|
58
58
|
"@anthropic-ai/sdk": "^0.116.0",
|
|
59
|
-
"@dbos-inc/dbos-sdk": "^
|
|
59
|
+
"@dbos-inc/dbos-sdk": "^5.3.0",
|
|
60
|
+
"@dbos-inc/vercel-ai": "0.5.4",
|
|
60
61
|
"@fontsource-variable/space-grotesk": "5.1.1",
|
|
61
62
|
"@fontsource/ibm-plex-mono": "5.1.1",
|
|
62
63
|
"@inflexa-ai/tsprov": "0.6.0",
|
|
63
64
|
"@kubernetes/client-node": "^1.4.0",
|
|
65
|
+
"@mozilla/readability": "^0.6.0",
|
|
64
66
|
"@opentelemetry/api": "^1.9.1",
|
|
65
67
|
"@opentelemetry/core": "^2.9.0",
|
|
66
68
|
"@opentelemetry/exporter-metrics-otlp-http": "^0.219.0",
|
|
@@ -72,8 +74,9 @@
|
|
|
72
74
|
"@opentelemetry/semantic-conventions": "^1.43.0",
|
|
73
75
|
"@types/dockerode": "^3.3.47",
|
|
74
76
|
"@types/pg": "^8.20.0",
|
|
77
|
+
"@types/turndown": "^5.0.6",
|
|
75
78
|
"ag-grid-community": "36.1.0",
|
|
76
|
-
"ai": "^7.0.
|
|
79
|
+
"ai": "^7.0.154",
|
|
77
80
|
"cheerio": "^1.2.0",
|
|
78
81
|
"dockerode": "^4.0.12",
|
|
79
82
|
"echarts": "6.1.0",
|
|
@@ -82,6 +85,7 @@
|
|
|
82
85
|
"hyparquet": "^1.28.1",
|
|
83
86
|
"js-tiktoken": "^1.0.21",
|
|
84
87
|
"kysely": "^0.29.6",
|
|
88
|
+
"linkedom": "^0.18.14",
|
|
85
89
|
"mime": "^4.1.0",
|
|
86
90
|
"nanoid": "^5.1.16",
|
|
87
91
|
"neverthrow": "^8.2.0",
|
|
@@ -90,6 +94,7 @@
|
|
|
90
94
|
"pdf-parse": "^2.4.5",
|
|
91
95
|
"pg": "^8.22.0",
|
|
92
96
|
"puppeteer-core": "^23.11.1",
|
|
97
|
+
"turndown": "^7.2.4",
|
|
93
98
|
"zod": "^4.4.3"
|
|
94
99
|
},
|
|
95
100
|
"overrides": {
|
|
@@ -100,26 +105,24 @@
|
|
|
100
105
|
"uuid": "^11.1.1"
|
|
101
106
|
},
|
|
102
107
|
"devDependencies": {
|
|
103
|
-
"@ai-sdk/amazon-bedrock": "^5.0.
|
|
104
|
-
"@
|
|
108
|
+
"@ai-sdk/amazon-bedrock": "^5.0.125",
|
|
109
|
+
"@inflexa-ai/oxlint-plugin": "0.8.0",
|
|
110
|
+
"@inflexa-ai/typecheck": "0.8.0",
|
|
105
111
|
"@types/bun": "latest",
|
|
112
|
+
"@types/json-schema": "^7.0.15",
|
|
106
113
|
"@types/node": "^24.13.3",
|
|
107
114
|
"@types/pdf-parse": "^1.1.5",
|
|
115
|
+
"@typescript/native": "npm:typescript@7.0.2",
|
|
108
116
|
"csstree-validator": "^4.0.1",
|
|
109
|
-
"eslint": "^10.7.0",
|
|
110
|
-
"eslint-plugin-neverthrow": "^1.1.4",
|
|
111
|
-
"globals": "^17.7.0",
|
|
112
117
|
"html-validate": "^11.6.2",
|
|
118
|
+
"oxlint": "1.85.0",
|
|
119
|
+
"oxlint-tsgolint": "7.0.2003",
|
|
113
120
|
"prettier": "^3.9.5",
|
|
114
121
|
"testcontainers": "^10.28.0",
|
|
115
|
-
"typescript": "^6.0.3"
|
|
116
|
-
"typescript-eslint": "^8.64.0"
|
|
122
|
+
"typescript": "^6.0.3"
|
|
117
123
|
},
|
|
118
124
|
"publishConfig": {
|
|
119
125
|
"access": "public",
|
|
120
126
|
"registry": "https://registry.npmjs.org"
|
|
121
|
-
},
|
|
122
|
-
"patchedDependencies": {
|
|
123
|
-
"eslint-plugin-neverthrow@1.1.4": "patches/eslint-plugin-neverthrow@1.1.4.patch"
|
|
124
127
|
}
|
|
125
128
|
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A signed thinking block is bound to the exact prefix of its request, and the
|
|
3
|
-
* prompt cache keys on that same prefix.
|
|
4
|
-
* A continuation must extend the conversation, never replay it under a new
|
|
5
|
-
* system prompt or tool set.
|
|
6
|
-
*/
|
|
7
|
-
import type { AgentSession } from "../auth/types.js";
|
|
8
|
-
import { type AgentFinish, type RequestRefusal, type RunAgentOptions, type StepNameFormatter } from "./run-agent.js";
|
|
9
|
-
import type { ToolMask } from "./tool-mask.js";
|
|
10
|
-
import type { AgentDefinition, LoopMessage } from "./types.js";
|
|
11
|
-
export interface ContinuationRequest {
|
|
12
|
-
/** Appended as a synthetic user message. */
|
|
13
|
-
readonly text: string;
|
|
14
|
-
/** The requests still declare every tool of the agent, even when masked. */
|
|
15
|
-
readonly mask: ToolMask;
|
|
16
|
-
/** The continuation runs no wrap-up at its cap. */
|
|
17
|
-
readonly maxRequests: number;
|
|
18
|
-
/** Prefixes each step name (`<namespace>:<name>`) so its cache key cannot match the conversation's own. */
|
|
19
|
-
readonly stepNamespace: string;
|
|
20
|
-
/**
|
|
21
|
-
* When set, metrics and token counts are attributed to this id instead of
|
|
22
|
-
* `agent.id`, through `forSubAgent`. Omitted, both stay the agent's own.
|
|
23
|
-
*/
|
|
24
|
-
readonly accountingAgentId?: string;
|
|
25
|
-
/** A `provider` error with the status `400` or `413` ends the continuation with the finish reason `error`, and no throw. */
|
|
26
|
-
readonly endOnRequestRefusal?: boolean;
|
|
27
|
-
}
|
|
28
|
-
export interface ContinuationResult {
|
|
29
|
-
/** The new messages only, starting with the synthetic request. */
|
|
30
|
-
readonly messages: LoopMessage[];
|
|
31
|
-
readonly finish: AgentFinish;
|
|
32
|
-
/** The refusal that ended a continuation with `endOnRequestRefusal`. */
|
|
33
|
-
readonly refusal?: RequestRefusal;
|
|
34
|
-
}
|
|
35
|
-
export declare function namespacedStepNames(base: StepNameFormatter, namespace: string): StepNameFormatter;
|
|
36
|
-
/**
|
|
37
|
-
* `agent` and `opts` must match the conversation's own, since each request
|
|
38
|
-
* extends its cached prefix. `conversation` itself is never changed.
|
|
39
|
-
*/
|
|
40
|
-
export declare function continueAgent(agent: AgentDefinition, conversation: readonly LoopMessage[], request: ContinuationRequest, session: AgentSession, opts: RunAgentOptions): Promise<ContinuationResult>;
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A signed thinking block is bound to the exact prefix of its request, and the
|
|
3
|
-
* prompt cache keys on that same prefix.
|
|
4
|
-
* A continuation must extend the conversation, never replay it under a new
|
|
5
|
-
* system prompt or tool set.
|
|
6
|
-
*/
|
|
7
|
-
import { forSubAgent } from "../auth/types.js";
|
|
8
|
-
import { traceAgentRun } from "./genai-spans.js";
|
|
9
|
-
import { DEFAULT_STEP_NAME_FORMATTER, isTurnRoot, openLoop, } from "./run-agent.js";
|
|
10
|
-
export function namespacedStepNames(base, namespace) {
|
|
11
|
-
return {
|
|
12
|
-
llm: (i) => `${namespace}:${base.llm(i)}`,
|
|
13
|
-
tool: (name, id) => `${namespace}:${base.tool(name, id)}`,
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* `agent` and `opts` must match the conversation's own, since each request
|
|
18
|
-
* extends its cached prefix. `conversation` itself is never changed.
|
|
19
|
-
*/
|
|
20
|
-
export function continueAgent(agent, conversation, request, session, opts) {
|
|
21
|
-
const accountingAgentId = request.accountingAgentId;
|
|
22
|
-
const runSession = accountingAgentId === undefined ? session : forSubAgent(session, accountingAgentId);
|
|
23
|
-
const metricAgentId = accountingAgentId ?? agent.id;
|
|
24
|
-
return traceAgentRun(metricAgentId, runSession, isTurnRoot(opts), async () => {
|
|
25
|
-
const loop = openLoop(agent, conversation, runSession, opts, metricAgentId);
|
|
26
|
-
const outcome = await loop.runSegment({
|
|
27
|
-
mask: request.mask,
|
|
28
|
-
maxRequests: request.maxRequests,
|
|
29
|
-
stepNames: namespacedStepNames(opts.formatStepName ?? DEFAULT_STEP_NAME_FORMATTER, request.stepNamespace),
|
|
30
|
-
firstIndex: 0,
|
|
31
|
-
requestText: request.text,
|
|
32
|
-
...(request.endOnRequestRefusal === true ? { endsOnRequestRefusal: true } : {}),
|
|
33
|
-
});
|
|
34
|
-
const result = outcome === "capped" ? await loop.endCapped() : outcome;
|
|
35
|
-
const refusal = outcome === "capped" ? undefined : outcome.refusal;
|
|
36
|
-
return { messages: result.messages.slice(conversation.length), finish: result.finish, ...(refusal === undefined ? {} : { refusal }) };
|
|
37
|
-
});
|
|
38
|
-
}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* OpenTelemetry GenAI spans for the agent loop: `invoke_agent` around a run of
|
|
3
|
-
* `runAgent`, and `execute_tool` around each tool call that it dispatches. The AI
|
|
4
|
-
* SDK traces the model calls (`providers/ai-sdk.ts`). It never sees the loop or
|
|
5
|
-
* the tools, because the harness runs both itself.
|
|
6
|
-
*
|
|
7
|
-
* The root of a turn opens its own trace, and a link carries it back to the run.
|
|
8
|
-
* A run lasts hours and writes tens of thousands of spans, thus one trace of a
|
|
9
|
-
* whole run passes the size limit of the trace store and no reader can follow
|
|
10
|
-
* it. `inflexa.run_id` holds the turns of one run together.
|
|
11
|
-
*
|
|
12
|
-
* An `execute_tool` span is ERROR when our code fails the call. A failure that a
|
|
13
|
-
* tool returns as data, for example a sandbox command that exits non-zero, is
|
|
14
|
-
* normal iteration of the agent, and its span stays OK.
|
|
15
|
-
*/
|
|
16
|
-
import type { ToolCallPart } from "ai";
|
|
17
|
-
import type { AgentSession } from "../auth/types.js";
|
|
18
|
-
import type { ToolOutcome } from "./tool-outcome.js";
|
|
19
|
-
interface AgentRun {
|
|
20
|
-
readonly finish: {
|
|
21
|
-
readonly reason: string;
|
|
22
|
-
readonly cappedOut: boolean;
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Run one agent loop under an `invoke_agent` span. A turn root starts a new
|
|
27
|
-
* trace; a loop under a turn stays in the trace of that turn.
|
|
28
|
-
*/
|
|
29
|
-
export declare function traceAgentRun<T extends AgentRun>(agentName: string, session: AgentSession, turnRoot: boolean, run: () => Promise<T>): Promise<T>;
|
|
30
|
-
/** Run one tool call under an `execute_tool` span that records how the call ended. */
|
|
31
|
-
export declare function traceToolCall<T>(call: Pick<ToolCallPart, "toolName" | "toolCallId">, run: () => Promise<T>, outcomeOf: (value: T) => ToolOutcome): Promise<T>;
|
|
32
|
-
/**
|
|
33
|
-
* Record an exception that a tool threw on the active `execute_tool` span.
|
|
34
|
-
* `error.type` is the code of the error when it has one, else its name.
|
|
35
|
-
*/
|
|
36
|
-
export declare function recordToolException(err: Error): void;
|
|
37
|
-
/**
|
|
38
|
-
* Label a tool failure that is not an exception on the active `execute_tool`
|
|
39
|
-
* span. `message` is text that our tool wrote, never text from the model.
|
|
40
|
-
*/
|
|
41
|
-
export declare function labelToolFailure(type: string, message?: string): void;
|
|
42
|
-
/**
|
|
43
|
-
* Label a tool call whose input failed validation on the active `execute_tool`
|
|
44
|
-
* span. `issues` is the shape of the failure, with no value of the input.
|
|
45
|
-
*/
|
|
46
|
-
export declare function labelToolValidationFailure(issues: readonly string[]): void;
|
|
47
|
-
export {};
|
package/dist/loop/genai-spans.js
DELETED
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* OpenTelemetry GenAI spans for the agent loop: `invoke_agent` around a run of
|
|
3
|
-
* `runAgent`, and `execute_tool` around each tool call that it dispatches. The AI
|
|
4
|
-
* SDK traces the model calls (`providers/ai-sdk.ts`). It never sees the loop or
|
|
5
|
-
* the tools, because the harness runs both itself.
|
|
6
|
-
*
|
|
7
|
-
* The root of a turn opens its own trace, and a link carries it back to the run.
|
|
8
|
-
* A run lasts hours and writes tens of thousands of spans, thus one trace of a
|
|
9
|
-
* whole run passes the size limit of the trace store and no reader can follow
|
|
10
|
-
* it. `inflexa.run_id` holds the turns of one run together.
|
|
11
|
-
*
|
|
12
|
-
* An `execute_tool` span is ERROR when our code fails the call. A failure that a
|
|
13
|
-
* tool returns as data, for example a sandbox command that exits non-zero, is
|
|
14
|
-
* normal iteration of the agent, and its span stays OK.
|
|
15
|
-
*/
|
|
16
|
-
import { context, SpanStatusCode, trace, TraceFlags } from "@opentelemetry/api";
|
|
17
|
-
import { isTracingSuppressed } from "@opentelemetry/core";
|
|
18
|
-
/**
|
|
19
|
-
* Run one agent loop under an `invoke_agent` span. A turn root starts a new
|
|
20
|
-
* trace; a loop under a turn stays in the trace of that turn.
|
|
21
|
-
*/
|
|
22
|
-
export function traceAgentRun(agentName, session, turnRoot, run) {
|
|
23
|
-
const attributes = {
|
|
24
|
-
"gen_ai.operation.name": "invoke_agent",
|
|
25
|
-
"gen_ai.agent.name": agentName,
|
|
26
|
-
...conversationAttributes(session),
|
|
27
|
-
...runFrameAttributes(session),
|
|
28
|
-
};
|
|
29
|
-
return withSpan(`invoke_agent ${agentName}`, turnRoot ? turnRootOptions(attributes) : { attributes }, async (span) => {
|
|
30
|
-
const result = await run();
|
|
31
|
-
span.setAttributes({ "gen_ai.response.finish_reasons": [result.finish.reason], "inflexa.agent.capped_out": result.finish.cappedOut });
|
|
32
|
-
return result;
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
/** Run one tool call under an `execute_tool` span that records how the call ended. */
|
|
36
|
-
export function traceToolCall(call, run, outcomeOf) {
|
|
37
|
-
const attributes = { "gen_ai.operation.name": "execute_tool", "gen_ai.tool.name": call.toolName, "gen_ai.tool.call.id": call.toolCallId };
|
|
38
|
-
return withSpan(`execute_tool ${call.toolName}`, { attributes }, async (span) => {
|
|
39
|
-
const value = await run();
|
|
40
|
-
const outcome = outcomeOf(value);
|
|
41
|
-
span.setAttribute("inflexa.tool.outcome", outcome);
|
|
42
|
-
if (outcome === "error")
|
|
43
|
-
span.setStatus({ code: SpanStatusCode.ERROR });
|
|
44
|
-
return value;
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
/** The cap of `inflexa.tool.error`, in characters. */
|
|
48
|
-
const TOOL_ERROR_MAX_CHARS = 1_000;
|
|
49
|
-
/**
|
|
50
|
-
* Record an exception that a tool threw on the active `execute_tool` span.
|
|
51
|
-
* `error.type` is the code of the error when it has one, else its name.
|
|
52
|
-
*/
|
|
53
|
-
export function recordToolException(err) {
|
|
54
|
-
const span = trace.getActiveSpan();
|
|
55
|
-
if (span === undefined)
|
|
56
|
-
return;
|
|
57
|
-
span.recordException(err);
|
|
58
|
-
span.setAttribute("error.type", errorTypeOf(err));
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Label a tool failure that is not an exception on the active `execute_tool`
|
|
62
|
-
* span. `message` is text that our tool wrote, never text from the model.
|
|
63
|
-
*/
|
|
64
|
-
export function labelToolFailure(type, message) {
|
|
65
|
-
const span = trace.getActiveSpan();
|
|
66
|
-
if (span === undefined)
|
|
67
|
-
return;
|
|
68
|
-
span.setAttribute("error.type", type);
|
|
69
|
-
if (message !== undefined)
|
|
70
|
-
span.setAttribute("inflexa.tool.error", message.slice(0, TOOL_ERROR_MAX_CHARS));
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Label a tool call whose input failed validation on the active `execute_tool`
|
|
74
|
-
* span. `issues` is the shape of the failure, with no value of the input.
|
|
75
|
-
*/
|
|
76
|
-
export function labelToolValidationFailure(issues) {
|
|
77
|
-
const span = trace.getActiveSpan();
|
|
78
|
-
if (span === undefined)
|
|
79
|
-
return;
|
|
80
|
-
span.setAttributes({ "error.type": "validation", "inflexa.tool.validation.issues": [...issues] });
|
|
81
|
-
}
|
|
82
|
-
function errorTypeOf(err) {
|
|
83
|
-
const code = "code" in err ? err.code : undefined;
|
|
84
|
-
if ((typeof code === "string" && code !== "") || typeof code === "number")
|
|
85
|
-
return String(code);
|
|
86
|
-
return err.name === "" ? "_OTHER" : err.name;
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* The options of a turn root. `root: true` drops the parent before the sampler
|
|
90
|
-
* runs, thus the sampler takes its root branch and a decision from above is
|
|
91
|
-
* lost. A turn under suppressed tracing, or under a trace that is not sampled
|
|
92
|
-
* (an untraced workflow), therefore keeps its parent and stays unrecorded.
|
|
93
|
-
*/
|
|
94
|
-
function turnRootOptions(attributes) {
|
|
95
|
-
const active = context.active();
|
|
96
|
-
if (isTracingSuppressed(active))
|
|
97
|
-
return { attributes };
|
|
98
|
-
const ambient = trace.getSpanContext(active);
|
|
99
|
-
if (ambient === undefined || !trace.isSpanContextValid(ambient))
|
|
100
|
-
return { root: true, attributes };
|
|
101
|
-
if ((ambient.traceFlags & TraceFlags.SAMPLED) === 0)
|
|
102
|
-
return { attributes };
|
|
103
|
-
// The span that started the turn: the workflow span of the run, or the request span.
|
|
104
|
-
return { root: true, links: [{ context: ambient, attributes: { "inflexa.link.kind": "caller" } }], attributes };
|
|
105
|
-
}
|
|
106
|
-
function withSpan(name, options, run) {
|
|
107
|
-
return trace.getTracer("@inflexa-ai/harness").startActiveSpan(name, options, async (span) => {
|
|
108
|
-
try {
|
|
109
|
-
return await run(span);
|
|
110
|
-
}
|
|
111
|
-
catch (err) {
|
|
112
|
-
// A cancellation is the caller's decision, not a failure.
|
|
113
|
-
const cancelled = err instanceof Error && err.name === "AbortError";
|
|
114
|
-
if (!cancelled) {
|
|
115
|
-
span.setStatus({ code: SpanStatusCode.ERROR });
|
|
116
|
-
if (err instanceof Error)
|
|
117
|
-
span.recordException(err);
|
|
118
|
-
}
|
|
119
|
-
throw err;
|
|
120
|
-
}
|
|
121
|
-
finally {
|
|
122
|
-
span.end();
|
|
123
|
-
}
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
function runFrameAttributes({ runFrame }) {
|
|
127
|
-
if (runFrame === undefined)
|
|
128
|
-
return {};
|
|
129
|
-
return { "inflexa.run_id": runFrame.runId, ...(runFrame.stepId === undefined ? {} : { "inflexa.step_id": runFrame.stepId }) };
|
|
130
|
-
}
|
|
131
|
-
/** The thread is the conversation. The analysis is not: it holds many threads. */
|
|
132
|
-
function conversationAttributes({ scope }) {
|
|
133
|
-
return scope.threadId === undefined ? {} : { "gen_ai.conversation.id": scope.threadId };
|
|
134
|
-
}
|
package/dist/loop/run-agent.d.ts
DELETED
|
@@ -1,236 +0,0 @@
|
|
|
1
|
-
import { type FinishReason } from "ai";
|
|
2
|
-
import type { AgentSession } from "../auth/types.js";
|
|
3
|
-
import type { UsageRecorder } from "../billing/usage-recorder.js";
|
|
4
|
-
import type { Logger } from "../lib/logger.js";
|
|
5
|
-
import { type CompactionPolicy } from "./compaction.js";
|
|
6
|
-
import type { AgentChat, ChatRequest, ChatResponse, PromptCachePolicy, ReasoningPolicy } from "../providers/types.js";
|
|
7
|
-
import { type AskApproval, type AskRequest } from "../tools/approval/contract.js";
|
|
8
|
-
import { type AgentRunUsage } from "./metrics.js";
|
|
9
|
-
import { type ToolBudget, type ToolMask } from "./tool-mask.js";
|
|
10
|
-
import { type ToolOutputStore } from "./tool-output.js";
|
|
11
|
-
import type { AgentDefinition, EmitFn, LoopMessage, RunStep } from "./types.js";
|
|
12
|
-
export interface AgentFinish {
|
|
13
|
-
readonly reason: FinishReason | "aborted" | "max_iterations" | "denied";
|
|
14
|
-
/**
|
|
15
|
-
* The endpoint's own word for the stop, when the provider captured one —
|
|
16
|
-
* `reason` normalizes it (an Anthropic `refusal` becomes `content-filter`).
|
|
17
|
-
*/
|
|
18
|
-
readonly rawFinishReason?: string;
|
|
19
|
-
readonly cappedOut: boolean;
|
|
20
|
-
readonly truncationRecoveries: number;
|
|
21
|
-
/**
|
|
22
|
-
* What this loop's own LLM calls reported, the forced wrap-up included.
|
|
23
|
-
* Absent when no call reported anything — never an all-zero figure.
|
|
24
|
-
*/
|
|
25
|
-
readonly usage?: AgentRunUsage;
|
|
26
|
-
/**
|
|
27
|
-
* The whole turn's total, every descendant loop included. Present only on
|
|
28
|
-
* the loop that created the turn accumulator — the run whose options
|
|
29
|
-
* carried none, which is by construction the turn's root.
|
|
30
|
-
*/
|
|
31
|
-
readonly turnUsage?: AgentRunUsage;
|
|
32
|
-
}
|
|
33
|
-
export interface RunAgentResult {
|
|
34
|
-
readonly messages: LoopMessage[];
|
|
35
|
-
readonly finish: AgentFinish;
|
|
36
|
-
}
|
|
37
|
-
/** A request that the provider refused for its content: the HTTP status and the text of the provider error. */
|
|
38
|
-
export interface RequestRefusal {
|
|
39
|
-
readonly status: number;
|
|
40
|
-
readonly message: string;
|
|
41
|
-
}
|
|
42
|
-
/** The result of a segment. A segment that ends on a refusal of its request carries the refusal. */
|
|
43
|
-
export interface SegmentResult extends RunAgentResult {
|
|
44
|
-
readonly refusal?: RequestRefusal;
|
|
45
|
-
}
|
|
46
|
-
/** The messages that the loop appended after the last call of the round sink. */
|
|
47
|
-
export interface AgentRound {
|
|
48
|
-
readonly messages: readonly LoopMessage[];
|
|
49
|
-
}
|
|
50
|
-
export interface StepNameFormatter {
|
|
51
|
-
llm(iteration: number): string;
|
|
52
|
-
tool(toolName: string, toolUseId: string): string;
|
|
53
|
-
}
|
|
54
|
-
export declare const DEFAULT_STEP_NAME_FORMATTER: StepNameFormatter;
|
|
55
|
-
export interface RunAgentOptions {
|
|
56
|
-
readonly provider: AgentChat;
|
|
57
|
-
readonly signal: AbortSignal;
|
|
58
|
-
readonly emit: EmitFn;
|
|
59
|
-
/**
|
|
60
|
-
* The round sink. The loop awaits it before each model request, at each exit, and before a throw.
|
|
61
|
-
* A durable loop passes no sink, because DBOS replays the loop body.
|
|
62
|
-
*/
|
|
63
|
-
readonly onRound?: (round: AgentRound) => Promise<void>;
|
|
64
|
-
/**
|
|
65
|
-
* The compaction policy. Each request then sends the view of the transcript, and the loop compacts
|
|
66
|
-
* before a task request whose view passes the budget. A durable loop passes no policy, because
|
|
67
|
-
* `recordsAfter` reads the database outside a step.
|
|
68
|
-
*/
|
|
69
|
-
readonly compaction?: CompactionPolicy;
|
|
70
|
-
/**
|
|
71
|
-
* The messages that open the turn of a chat thread: the user message and its context records. The loop appends
|
|
72
|
-
* them after the turn-start compaction, thus the conversation holds each message in the order that it was sent.
|
|
73
|
-
* Absent: `initial` holds the whole conversation.
|
|
74
|
-
*/
|
|
75
|
-
readonly turnInput?: readonly LoopMessage[];
|
|
76
|
-
/**
|
|
77
|
-
* Per-turn user-approval seam threaded into every tool's `ToolContext` as
|
|
78
|
-
* `ctx.ask`. A conversation tool calls it to pause for an explicit user
|
|
79
|
-
* decision; the caller (the turn) wires the realization that surfaces the
|
|
80
|
-
* prompt and returns the reply. Omitted on non-interactive paths (workflow
|
|
81
|
-
* contexts, headless embedders): approval then resolves to the shipped
|
|
82
|
-
* deny-by-default `UnavailableAsk`, so a tool that asks where nothing can
|
|
83
|
-
* answer is denied rather than left waiting on a surface that never responds.
|
|
84
|
-
*/
|
|
85
|
-
readonly ask?: (request: AskRequest) => Promise<AskApproval>;
|
|
86
|
-
readonly runStep: RunStep;
|
|
87
|
-
readonly formatStepName?: StepNameFormatter;
|
|
88
|
-
readonly isFatalLoopError?: (err: unknown) => boolean;
|
|
89
|
-
/**
|
|
90
|
-
* Tool choice for every request of this run: part of the prefix that the
|
|
91
|
-
* prompt cache and a signed thinking block bind to.
|
|
92
|
-
*/
|
|
93
|
-
readonly toolChoice?: ChatRequest["toolChoice"];
|
|
94
|
-
/**
|
|
95
|
-
* Optional outcome predicate for loop-driving agents whose result is
|
|
96
|
-
* recorded by a tool into closure state. Checked immediately after each
|
|
97
|
-
* dispatch round, once every sibling tool result has been appended.
|
|
98
|
-
*/
|
|
99
|
-
readonly resolved?: () => boolean;
|
|
100
|
-
/**
|
|
101
|
-
* Tools allowed to run per request. The full tool set stays declared either
|
|
102
|
-
* way, since it is part of the cache/thinking-block prefix.
|
|
103
|
-
*/
|
|
104
|
-
readonly toolMask?: ToolMask;
|
|
105
|
-
/** Max calls per tool for this run; a call in the same round counts against the budget too. */
|
|
106
|
-
readonly toolBudget?: ToolBudget;
|
|
107
|
-
/**
|
|
108
|
-
* Prompt-cache policy for every LLM call this run makes. Defaults to
|
|
109
|
-
* `DEFAULT_PROMPT_CACHE` (5m) — an agent loop always re-sends its prefix, so
|
|
110
|
-
* it breaks even by the second iteration. A host whose endpoint ignores or
|
|
111
|
-
* charges badly for cache directives passes `"off"`.
|
|
112
|
-
*
|
|
113
|
-
* The policy lives here, on the run, rather than on the provider, precisely
|
|
114
|
-
* so it applies to loops and *not* to the one-shot LLM calls made elsewhere
|
|
115
|
-
* (report generation): those would pay the
|
|
116
|
-
* cache-write premium for a cache nothing ever reads back.
|
|
117
|
-
*/
|
|
118
|
-
readonly promptCache?: PromptCachePolicy;
|
|
119
|
-
/**
|
|
120
|
-
* The reasoning effort for each LLM call of this run, the forced wrap-up
|
|
121
|
-
* included. Anthropic discards its message cache when the top-level
|
|
122
|
-
* effort changes, so the run must send the same value, or none, throughout.
|
|
123
|
-
*/
|
|
124
|
-
readonly reasoning?: ReasoningPolicy;
|
|
125
|
-
/**
|
|
126
|
-
* Diagnostic sink for the run's own lifecycle. Optional because `runAgent` is
|
|
127
|
-
* called from tools, workflow bodies, and test rigs alike — silence is the
|
|
128
|
-
* correct behaviour for a caller that wires nothing, and the noop fallback
|
|
129
|
-
* gives it without every call site threading `?.`.
|
|
130
|
-
*
|
|
131
|
-
* Distinct from `emit`, which feeds a user-facing surface: every host filters
|
|
132
|
-
* sub-agent events off that surface by `callPath` depth, so a sub-agent's
|
|
133
|
-
* progress is emitted and then dropped. This is where it survives.
|
|
134
|
-
*/
|
|
135
|
-
readonly logger?: Logger;
|
|
136
|
-
/**
|
|
137
|
-
* Per-call LLM usage-accounting seam. Omitted falls back to the no-op
|
|
138
|
-
* recorder. `record` is a notice: the loop does not wait for its result,
|
|
139
|
-
* and it logs the reason of an `err` when the result arrives.
|
|
140
|
-
*/
|
|
141
|
-
readonly usageRecorder?: UsageRecorder;
|
|
142
|
-
/** Keeps the text of each cut tool result. A run with no store cuts, and it keeps nothing. */
|
|
143
|
-
readonly toolOutputStore?: ToolOutputStore;
|
|
144
|
-
/**
|
|
145
|
-
* The turn's usage accumulator, supplied by whatever ran this loop as part
|
|
146
|
-
* of a larger turn (a sub-agent-running tool passes `ctx.turnUsage`). A run
|
|
147
|
-
* that receives none creates its own and is therefore the turn's root: it
|
|
148
|
-
* alone reports `turnUsage` on its finish.
|
|
149
|
-
*/
|
|
150
|
-
readonly turnUsage?: AgentRunUsage;
|
|
151
|
-
/**
|
|
152
|
-
* The id of the tool call this loop runs inside, supplied by a
|
|
153
|
-
* sub-agent-running tool from its `ctx.invocationId`. It is what separates
|
|
154
|
-
* two dispatches of the *same* sub-agent in one round — they share the run
|
|
155
|
-
* frame, the call path, and every loop-local step name — in the usage
|
|
156
|
-
* record key. The data profile gives the workflow id of its attempt,
|
|
157
|
-
* because each profile runs under the same constant frame. Absent for any
|
|
158
|
-
* other loop that is not nested inside a tool dispatch (a chat turn's
|
|
159
|
-
* root, a workflow step body, a background task).
|
|
160
|
-
*/
|
|
161
|
-
readonly invocationId?: string;
|
|
162
|
-
}
|
|
163
|
-
/** A run that receives no turn accumulator is the turn's root. See `RunAgentOptions.turnUsage`. */
|
|
164
|
-
export declare const isTurnRoot: (opts: RunAgentOptions) => boolean;
|
|
165
|
-
export declare function runAgent(agent: AgentDefinition, initial: readonly LoopMessage[], session: AgentSession, opts: RunAgentOptions): Promise<RunAgentResult>;
|
|
166
|
-
/** The harness request of the wrap-up at the iteration cap. */
|
|
167
|
-
export declare const WRAP_UP_REQUEST = "You reached the limit of tool rounds for this run, thus no tool can run now. Answer in text with the results that you have.";
|
|
168
|
-
/** The cap of wrap-up requests: one answer, and one more request after a refused call. */
|
|
169
|
-
export declare const WRAP_UP_MAX_REQUESTS = 2;
|
|
170
|
-
/** One stretch of model requests of a conversation, under one mask. */
|
|
171
|
-
export interface LoopSegment {
|
|
172
|
-
/** The tools that can run for each request of the segment. Absent lets each declared tool run. */
|
|
173
|
-
readonly mask: ToolMask | undefined;
|
|
174
|
-
readonly maxRequests: number;
|
|
175
|
-
readonly stepNames: StepNameFormatter;
|
|
176
|
-
/** The `index` of the first request of the segment in its `iteration` events. */
|
|
177
|
-
readonly firstIndex: number;
|
|
178
|
-
/** A harness request that the segment appends, as a synthetic user message, before its first request. */
|
|
179
|
-
readonly requestText?: string;
|
|
180
|
-
/**
|
|
181
|
-
* The segment runs after the iteration cap: its requests do not count as
|
|
182
|
-
* iterations, and the last one always ends the run, whatever its reply.
|
|
183
|
-
*/
|
|
184
|
-
readonly closesCappedRun?: boolean;
|
|
185
|
-
/** The loop compacts before a request of the segment whose view passes the budget of the policy. */
|
|
186
|
-
readonly checksBudget?: boolean;
|
|
187
|
-
/** A refusal of a request, a `provider` error with the status `400` or `413`, ends the segment with no new message. */
|
|
188
|
-
readonly endsOnRequestRefusal?: boolean;
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* One conversation, open for its segments. Each segment extends the same
|
|
192
|
-
* prefix (system prompt, tools, tool choice) as the one before it.
|
|
193
|
-
*/
|
|
194
|
-
export interface OpenLoop {
|
|
195
|
-
/**
|
|
196
|
-
* Compact the conversation when the last request passed the turn-start budget, and then append the input of the
|
|
197
|
-
* turn. The result of the run when an abort ends the compaction, or `undefined` when the run continues.
|
|
198
|
-
*/
|
|
199
|
-
startTurn(input: readonly LoopMessage[]): Promise<RunAgentResult | undefined>;
|
|
200
|
-
/** Run one segment: the result of the run when a reply ends it, or `"capped"` when the segment used its cap. */
|
|
201
|
-
runSegment(segment: LoopSegment): Promise<SegmentResult | "capped">;
|
|
202
|
-
/** End a run after its last segment used its cap. */
|
|
203
|
-
endCapped(): Promise<RunAgentResult>;
|
|
204
|
-
}
|
|
205
|
-
/**
|
|
206
|
-
* Open the loop over one conversation. `metricAgentId` is the id that usage
|
|
207
|
-
* and run metrics count under, which is not always `agent.id`.
|
|
208
|
-
*/
|
|
209
|
-
export declare function openLoop(agent: AgentDefinition, initial: readonly LoopMessage[], session: AgentSession, opts: RunAgentOptions, metricAgentId: string): OpenLoop;
|
|
210
|
-
/** What one completed LLM call is accounted under. */
|
|
211
|
-
export interface ChatCallAccounting {
|
|
212
|
-
readonly session: AgentSession;
|
|
213
|
-
readonly agentId: string;
|
|
214
|
-
readonly callPath: readonly string[];
|
|
215
|
-
/**
|
|
216
|
-
* The deterministic name inside the record key, for example `llm-{n}` for
|
|
217
|
-
* a loop call or `adhoc-route` for a direct call.
|
|
218
|
-
*/
|
|
219
|
-
readonly stepName: string;
|
|
220
|
-
/** The id of the tool call that makes the call, when the call runs inside a tool dispatch. */
|
|
221
|
-
readonly invocationId?: string;
|
|
222
|
-
readonly usageRecorder: UsageRecorder;
|
|
223
|
-
/** The sink that the notice helper logs the reason of a recorder `err` to. */
|
|
224
|
-
readonly logger: Logger;
|
|
225
|
-
/** The accumulators that the usage of the call folds into, for example the run total and the turn total. */
|
|
226
|
-
readonly rollups: readonly AgentRunUsage[];
|
|
227
|
-
}
|
|
228
|
-
/**
|
|
229
|
-
* Called at the fold point, before any run-ending branch, so an aborted or
|
|
230
|
-
* dead run is still accounted. Token counters grow inside the call's step
|
|
231
|
-
* body, not here, because a replay re-delivers the stored reply to this
|
|
232
|
-
* function too; the record re-sends under the same idempotency key, which an
|
|
233
|
-
* upserting sink counts once.
|
|
234
|
-
*/
|
|
235
|
-
export declare function accountForChatCall(reply: ChatResponse, call: ChatCallAccounting): void;
|
|
236
|
-
export declare function finalText(messages: readonly LoopMessage[]): string;
|