@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
package/dist/lib/eyes.d.ts
CHANGED
|
@@ -26,20 +26,20 @@ import { type ChromeConfig } from "./chrome.js";
|
|
|
26
26
|
* page navigation reads a `file://` URL of the host tree. The caller resolves the root already, thus the
|
|
27
27
|
* scope hands it over and a realization holds no second resolver.
|
|
28
28
|
*/
|
|
29
|
-
export
|
|
29
|
+
export type EyesScope = {
|
|
30
30
|
readonly analysisId: string;
|
|
31
31
|
readonly workspaceRoot: string;
|
|
32
|
-
}
|
|
32
|
+
};
|
|
33
33
|
/**
|
|
34
34
|
* One acquired browser, and the end of the lease.
|
|
35
35
|
*
|
|
36
36
|
* `browserUrl` is the endpoint that a capture connects to. `release` ends the lease of the caller. The shape
|
|
37
37
|
* binds no duration, thus one look and a longer interactive hold read the same.
|
|
38
38
|
*/
|
|
39
|
-
export
|
|
39
|
+
export type EyesLease = {
|
|
40
40
|
readonly browserUrl: string;
|
|
41
41
|
release(): Promise<void>;
|
|
42
|
-
}
|
|
42
|
+
};
|
|
43
43
|
/**
|
|
44
44
|
* The eyes seam. One call gives one lease over one scope.
|
|
45
45
|
*
|
package/dist/lib/eyes.js
CHANGED
|
@@ -36,7 +36,7 @@ export function createStaticEyes(chrome) {
|
|
|
36
36
|
throw new Error("static eyes need a browser endpoint, and the chrome config names none");
|
|
37
37
|
}
|
|
38
38
|
const browserUrl = chrome.browserUrl;
|
|
39
|
-
return
|
|
39
|
+
return (_scope) => Promise.resolve({
|
|
40
40
|
browserUrl,
|
|
41
41
|
release: async () => {
|
|
42
42
|
// The standing sidecar outlives every look, thus nothing ends here.
|
package/dist/lib/fs-helpers.js
CHANGED
|
@@ -5,6 +5,8 @@ import { createHash } from "node:crypto";
|
|
|
5
5
|
import { constants as fsConstants, createReadStream } from "node:fs";
|
|
6
6
|
import { access, mkdir, open, realpath } from "node:fs/promises";
|
|
7
7
|
import { dirname, resolve, sep } from "node:path";
|
|
8
|
+
import { isAllHex } from "./text.js";
|
|
9
|
+
import { errorOf } from "./thrown.js";
|
|
8
10
|
/**
|
|
9
11
|
* Compute SHA-256 hash of in-memory content.
|
|
10
12
|
* Returns `sha256:<hex>` format.
|
|
@@ -34,7 +36,14 @@ export async function computeSha256File(filePath) {
|
|
|
34
36
|
* an attestation invariant violation, not something to paper over.
|
|
35
37
|
*/
|
|
36
38
|
export function hasValidContentHash(hash) {
|
|
37
|
-
|
|
39
|
+
if (!hash)
|
|
40
|
+
return false;
|
|
41
|
+
const colon = hash.indexOf(":");
|
|
42
|
+
if (colon === -1)
|
|
43
|
+
return false;
|
|
44
|
+
const algorithm = hash.slice(0, colon).toLowerCase();
|
|
45
|
+
const isAlgorithmChar = (char) => (char >= "a" && char <= "z") || (char >= "0" && char <= "9");
|
|
46
|
+
return algorithm.length > 0 && Array.from(algorithm).every(isAlgorithmChar) && colon + 1 < hash.length && isAllHex(hash.slice(colon + 1));
|
|
38
47
|
}
|
|
39
48
|
/**
|
|
40
49
|
* Check whether a file exists (access-based, no stat overhead).
|
|
@@ -73,7 +82,10 @@ export async function classifyWithinRoot(confinementRoot, absPath) {
|
|
|
73
82
|
real = await realpath(absPath);
|
|
74
83
|
}
|
|
75
84
|
catch (cause) {
|
|
76
|
-
|
|
85
|
+
// Node's fs rejects with an `ErrnoException`, so the code read covers every real rejection;
|
|
86
|
+
// a non-Error throw carries no errno code and propagates.
|
|
87
|
+
const causeError = errorOf(cause);
|
|
88
|
+
const code = causeError !== undefined && "code" in causeError ? causeError.code : undefined;
|
|
77
89
|
// A path (or symlink target) that does not resolve leaks nothing; let the
|
|
78
90
|
// caller's own not-found/fallback path handle it. Genuine faults (e.g.
|
|
79
91
|
// EACCES traversing a directory) propagate.
|
|
@@ -105,10 +117,10 @@ export async function writeFileWithinRoot(workspaceRoot, absPath, data) {
|
|
|
105
117
|
if (realDir !== realRoot && !realDir.startsWith(realRoot + sep)) {
|
|
106
118
|
throw new Error(`writeFileWithinRoot: parent directory escapes the workspace root via a symlink: ${absPath}`);
|
|
107
119
|
}
|
|
108
|
-
//
|
|
109
|
-
//
|
|
110
|
-
//
|
|
111
|
-
const flags = fsConstants.O_WRONLY | fsConstants.O_CREAT | fsConstants.O_TRUNC |
|
|
120
|
+
// A platform may lack `O_NOFOLLOW` — absent at runtime even though the
|
|
121
|
+
// constants type says number. The bitwise OR coerces an absent flag to 0,
|
|
122
|
+
// so the open stays valid without a nullish guard on the flag.
|
|
123
|
+
const flags = fsConstants.O_WRONLY | fsConstants.O_CREAT | fsConstants.O_TRUNC | fsConstants.O_NOFOLLOW;
|
|
112
124
|
const fh = await open(target, flags, 0o644);
|
|
113
125
|
try {
|
|
114
126
|
await fh.writeFile(data);
|
package/dist/lib/fs-result.d.ts
CHANGED
|
@@ -64,6 +64,7 @@ export type FsError = {
|
|
|
64
64
|
readonly path?: string;
|
|
65
65
|
readonly cause: unknown;
|
|
66
66
|
};
|
|
67
|
+
export declare function errnoOf(cause: unknown): string | undefined;
|
|
67
68
|
/** True when the throw is a plain "this path isn't here" — `ENOENT`/`ENOTDIR`. */
|
|
68
69
|
export declare function isAbsent(cause: unknown): boolean;
|
|
69
70
|
/** A one-line, user-facing description of an `FsError` for logs and error bodies. */
|
package/dist/lib/fs-result.js
CHANGED
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
* (`card-builders`) `.unwrapOr(null)` / `.match` to preserve their "any failure
|
|
30
30
|
* → fall back to a chip" behaviour.
|
|
31
31
|
*/
|
|
32
|
+
import { z } from "zod";
|
|
32
33
|
import { ResultAsync, err, ok } from "neverthrow";
|
|
33
34
|
const _assertDomainError = true;
|
|
34
35
|
/** errno codes that mean "the path is absent" — the caller's concern, mapped to
|
|
@@ -36,12 +37,10 @@ const _assertDomainError = true;
|
|
|
36
37
|
const ABSENT_CODES = new Set(["ENOENT", "ENOTDIR"]);
|
|
37
38
|
/** errno codes that mean "permission denied". */
|
|
38
39
|
const PERMISSION_CODES = new Set(["EACCES", "EPERM"]);
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
return undefined;
|
|
40
|
+
const ErrnoCauseSchema = z.object({ code: z.string() });
|
|
41
|
+
export function errnoOf(cause) {
|
|
42
|
+
const parsed = ErrnoCauseSchema.safeParse(cause);
|
|
43
|
+
return parsed.success ? parsed.data.code : undefined;
|
|
45
44
|
}
|
|
46
45
|
/** True when the throw is a plain "this path isn't here" — `ENOENT`/`ENOTDIR`. */
|
|
47
46
|
export function isAbsent(cause) {
|
package/dist/lib/hooks.d.ts
CHANGED
|
@@ -20,16 +20,32 @@
|
|
|
20
20
|
*/
|
|
21
21
|
import { ResultAsync } from "neverthrow";
|
|
22
22
|
import type { Logger } from "./logger.js";
|
|
23
|
-
export
|
|
23
|
+
export type GateFailure = {
|
|
24
24
|
readonly reason: string;
|
|
25
25
|
/** True when the host asks the harness to suspend the work in place of a failure. */
|
|
26
26
|
readonly suspend: boolean;
|
|
27
|
-
}
|
|
28
|
-
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* The settlement a gate's `ResultAsync` resolves to, read structurally. An embedder whose neverthrow is
|
|
30
|
+
* a second package copy resolves a settlement that holds the same members without the harness class,
|
|
31
|
+
* and `passGate` reads it the same way.
|
|
32
|
+
*/
|
|
33
|
+
export type GateSettlement<T> = {
|
|
34
|
+
isOk(): true;
|
|
35
|
+
readonly value: T;
|
|
36
|
+
} | {
|
|
37
|
+
isOk(): false;
|
|
38
|
+
readonly error: GateFailure;
|
|
39
|
+
};
|
|
40
|
+
/** A gate result that an embedder's own neverthrow copy produced: a thenable over the settlement. */
|
|
41
|
+
export type ForeignGateResult<T> = {
|
|
42
|
+
then(onfulfilled: (settled: GateSettlement<T>) => unknown): unknown;
|
|
43
|
+
};
|
|
44
|
+
export type NoticeFailure = {
|
|
29
45
|
readonly reason: string;
|
|
30
|
-
}
|
|
31
|
-
export type GateName = "RunAuthorizer.authorize" | "RunCharge.open" | "ArtifactRegistry.register" | "resolveRequestHeaders" | "resolveSandboxLabels";
|
|
32
|
-
export type NoticeName = "RunAuthorizer.revoke" | "RunAuthorizer.
|
|
46
|
+
};
|
|
47
|
+
export type GateName = "RunAuthorizer.authorize" | "RunAuthorizer.renew" | "RunCharge.open" | "ArtifactRegistry.register" | "resolveRequestHeaders" | "resolveSandboxLabels";
|
|
48
|
+
export type NoticeName = "RunAuthorizer.revoke" | "RunAuthorizer.revokeByMandateId" | "RunAuthorizer.suspend" | "RunCharge.close" | "ArtifactRegistry.sync" | "UsageRecorder.record" | "notifyDataProfileSettled";
|
|
33
49
|
export type GateRefusal = {
|
|
34
50
|
readonly kind: "failed";
|
|
35
51
|
readonly gate: GateName;
|
|
@@ -45,5 +61,5 @@ export type GateRefusal = {
|
|
|
45
61
|
* checkpoint recipes (`runtime/result-serialization.ts`) recognize the class,
|
|
46
62
|
* and a replay reads the same outcome.
|
|
47
63
|
*/
|
|
48
|
-
export declare function passGate<T>(gate: GateName, result: ResultAsync<T, GateFailure>): ResultAsync<T, GateRefusal>;
|
|
64
|
+
export declare function passGate<T>(gate: GateName, result: ResultAsync<T, GateFailure> | ForeignGateResult<T>): ResultAsync<T, GateRefusal>;
|
|
49
65
|
export declare function deliverNotice(log: Logger, notice: NoticeName, result: ResultAsync<void, NoticeFailure>): Promise<boolean>;
|
package/dist/lib/hooks.js
CHANGED
|
@@ -19,6 +19,17 @@
|
|
|
19
19
|
* branches on it.
|
|
20
20
|
*/
|
|
21
21
|
import { err, ok, ResultAsync } from "neverthrow";
|
|
22
|
+
function settlementOk(settled) {
|
|
23
|
+
return settled.isOk();
|
|
24
|
+
}
|
|
25
|
+
/** Await the gate result and read it as one settlement, whichever package copy produced it. */
|
|
26
|
+
async function settlementOf(result) {
|
|
27
|
+
if (result instanceof ResultAsync) {
|
|
28
|
+
const settled = await result;
|
|
29
|
+
return settled.isOk() ? { isOk: () => true, value: settled.value } : { isOk: () => false, error: settled.error };
|
|
30
|
+
}
|
|
31
|
+
return await result;
|
|
32
|
+
}
|
|
22
33
|
/**
|
|
23
34
|
* The host can build its `Result` with its own copy of neverthrow. The helper
|
|
24
35
|
* gives the outcome again as a `Result` of the copy of the harness. Thus the
|
|
@@ -26,9 +37,12 @@ import { err, ok, ResultAsync } from "neverthrow";
|
|
|
26
37
|
* and a replay reads the same outcome.
|
|
27
38
|
*/
|
|
28
39
|
export function passGate(gate, result) {
|
|
29
|
-
return new ResultAsync(
|
|
30
|
-
|
|
31
|
-
|
|
40
|
+
return new ResultAsync((async () => {
|
|
41
|
+
const settled = await settlementOf(result);
|
|
42
|
+
if (settlementOk(settled))
|
|
43
|
+
return ok(settled.value);
|
|
44
|
+
return err({ kind: settled.error.suspend ? "suspended" : "failed", gate, reason: settled.error.reason });
|
|
45
|
+
})());
|
|
32
46
|
}
|
|
33
47
|
export async function deliverNotice(log, notice, result) {
|
|
34
48
|
const delivered = await result;
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
* import { withHost } from "../../lib/host-concurrency.js";
|
|
13
13
|
* const result = await withHost("chembl", () => chembl.getMechanism(id));
|
|
14
14
|
*/
|
|
15
|
+
const DEFAULT_HOST_LIMIT = 4;
|
|
15
16
|
const DEFAULT_LIMITS = {
|
|
16
17
|
chembl: 4,
|
|
17
18
|
openfda: 4,
|
|
@@ -31,13 +32,13 @@ const DEFAULT_LIMITS = {
|
|
|
31
32
|
ema: 2,
|
|
32
33
|
pubchem: 4,
|
|
33
34
|
"annotation-llm": 4,
|
|
34
|
-
default:
|
|
35
|
+
default: DEFAULT_HOST_LIMIT,
|
|
35
36
|
};
|
|
36
37
|
const budgets = new Map();
|
|
37
38
|
function getBudget(host) {
|
|
38
39
|
let b = budgets.get(host);
|
|
39
40
|
if (!b) {
|
|
40
|
-
b = { limit: DEFAULT_LIMITS[host] ??
|
|
41
|
+
b = { limit: DEFAULT_LIMITS[host] ?? DEFAULT_HOST_LIMIT, inUse: 0, queue: [] };
|
|
41
42
|
budgets.set(host, b);
|
|
42
43
|
}
|
|
43
44
|
return b;
|
package/dist/lib/logger.d.ts
CHANGED
|
@@ -34,7 +34,7 @@ export type LogFields = Record<string, unknown>;
|
|
|
34
34
|
* this contract to match one of them would model the published surface on a
|
|
35
35
|
* single consumer's choice.
|
|
36
36
|
*/
|
|
37
|
-
export
|
|
37
|
+
export type Logger = {
|
|
38
38
|
debug(msg: string, fields?: LogFields): void;
|
|
39
39
|
info(msg: string, fields?: LogFields): void;
|
|
40
40
|
warn(msg: string, fields?: LogFields): void;
|
|
@@ -74,7 +74,7 @@ export interface Logger {
|
|
|
74
74
|
* implementation — a realization with no opinion just references it.
|
|
75
75
|
*/
|
|
76
76
|
errorFields(err: unknown): LogFields;
|
|
77
|
-
}
|
|
77
|
+
};
|
|
78
78
|
/**
|
|
79
79
|
* The default `Logger.errorFields`: `err` carries the message, `stack` rides as
|
|
80
80
|
* its own field when there is one.
|
package/dist/lib/logger.js
CHANGED
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
* when something has gone wrong. `createConsoleLogger` (`./console-logger.ts`)
|
|
20
20
|
* is the one sanctioned console site.
|
|
21
21
|
*/
|
|
22
|
+
import { textOf } from "./unknown-text.js";
|
|
22
23
|
/**
|
|
23
24
|
* The default `Logger.errorFields`: `err` carries the message, `stack` rides as
|
|
24
25
|
* its own field when there is one.
|
|
@@ -33,5 +34,5 @@ export function defaultErrorFields(err) {
|
|
|
33
34
|
if (err instanceof Error) {
|
|
34
35
|
return err.stack ? { err: err.message, stack: err.stack } : { err: err.message };
|
|
35
36
|
}
|
|
36
|
-
return { err:
|
|
37
|
+
return { err: textOf(err) };
|
|
37
38
|
}
|
package/dist/lib/metrics.d.ts
CHANGED
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
*/
|
|
34
34
|
import type { StepExecutionStatus } from "../state/schema.js";
|
|
35
35
|
/** Terminal status of a run, the same as the run ledger. */
|
|
36
|
-
export type RunOutcome = "completed" | "partial" | "failed" | "canceled"
|
|
36
|
+
export type RunOutcome = "completed" | "partial" | "failed" | "canceled";
|
|
37
37
|
/** The workflow family a run belongs to. */
|
|
38
38
|
export type RunWorkflow = "analysis" | "data_profile";
|
|
39
39
|
/** Terminal status of an executed step. A blocker is a failure to deliver, so `blocked` maps here to `failed`. */
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A record with a null prototype, for maps whose keys come from outside the
|
|
3
|
+
* process (stored snapshots, ledger paths). A key such as `__proto__` stays an
|
|
4
|
+
* ordinary entry and never reaches a prototype slot, on writes and on reads.
|
|
5
|
+
*/
|
|
6
|
+
export declare function nullProtoRecord<T>(): Record<string, T>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A record with a null prototype, for maps whose keys come from outside the
|
|
3
|
+
* process (stored snapshots, ledger paths). A key such as `__proto__` stays an
|
|
4
|
+
* ordinary entry and never reaches a prototype slot, on writes and on reads.
|
|
5
|
+
*/
|
|
6
|
+
export function nullProtoRecord() {
|
|
7
|
+
const created = Object.create(null);
|
|
8
|
+
// Object.create(null) always yields an object, so the guard never refuses;
|
|
9
|
+
// it moves the parser's `any` out of the returned record. The empty record
|
|
10
|
+
// holds no member, so it is a `Record<string, T>` for every `T`.
|
|
11
|
+
if (!isRecordOf(created))
|
|
12
|
+
throw new Error("Object.create(null) did not yield an object");
|
|
13
|
+
return created;
|
|
14
|
+
}
|
|
15
|
+
function isRecordOf(value) {
|
|
16
|
+
return typeof value === "object" && value !== null;
|
|
17
|
+
}
|
package/dist/lib/otel-spans.d.ts
CHANGED
|
@@ -74,7 +74,7 @@ export declare function stableSpan(dbosName: string, name: string, attributes: A
|
|
|
74
74
|
* writes no client span. Sandbox-server records no spans, and the step span
|
|
75
75
|
* around the call already covers it.
|
|
76
76
|
*/
|
|
77
|
-
export declare function untracedFetch(fetchImpl: typeof fetch, url: string, init: RequestInit & {
|
|
77
|
+
export declare function untracedFetch(fetchImpl: typeof fetch, url: string, init: Omit<RequestInit, "headers"> & {
|
|
78
78
|
headers?: Record<string, string>;
|
|
79
79
|
}): Promise<Response>;
|
|
80
80
|
/**
|
package/dist/lib/otel-spans.js
CHANGED
|
@@ -96,7 +96,7 @@ export function stableSpan(dbosName, name, attributes) {
|
|
|
96
96
|
if (span === undefined || !span.isRecording())
|
|
97
97
|
return;
|
|
98
98
|
// The API `Span` has no name accessor; the SDK span the provider hands out does.
|
|
99
|
-
if (span.name !== dbosName)
|
|
99
|
+
if (!("name" in span) || span.name !== dbosName)
|
|
100
100
|
return;
|
|
101
101
|
span.updateName(name);
|
|
102
102
|
span.setAttributes(attributes);
|
|
@@ -124,6 +124,10 @@ export function untracedFetch(fetchImpl, url, init) {
|
|
|
124
124
|
export function passThroughTracer(tracer, passesThrough) {
|
|
125
125
|
return new PassThroughTracer(tracer, passesThrough);
|
|
126
126
|
}
|
|
127
|
+
/** Run `fn(span)` under `contextWithSpan`, so the callback's own result type survives the context switch. */
|
|
128
|
+
function runWithSpan(contextWithSpan, span, fn) {
|
|
129
|
+
return context.with(contextWithSpan, () => fn(span));
|
|
130
|
+
}
|
|
127
131
|
class PassThroughTracer {
|
|
128
132
|
inner;
|
|
129
133
|
passesThrough;
|
|
@@ -140,11 +144,11 @@ class PassThroughTracer {
|
|
|
140
144
|
}
|
|
141
145
|
// The inner tracer cannot take this call: its own `startActiveSpan` calls its own `startSpan`, past the rule.
|
|
142
146
|
startActiveSpan(name, ...rest) {
|
|
143
|
-
const
|
|
144
|
-
const options = rest.length
|
|
145
|
-
const
|
|
147
|
+
const parentContext = rest.length === 3 ? (rest[1] ?? context.active()) : context.active();
|
|
148
|
+
const options = rest.length === 1 ? {} : rest[0];
|
|
149
|
+
const fn = rest.length === 3 ? rest[2] : rest.length === 2 ? rest[1] : rest[0];
|
|
146
150
|
const span = this.startSpan(name, options, parentContext);
|
|
147
|
-
return
|
|
151
|
+
return runWithSpan(trace.setSpan(parentContext, span), span, fn);
|
|
148
152
|
}
|
|
149
153
|
}
|
|
150
154
|
/** The name of the span that the enclosing `passThroughSpan` declared. */
|
package/dist/lib/otel.d.ts
CHANGED
|
@@ -39,14 +39,14 @@
|
|
|
39
39
|
import type { Logger } from "./logger.js";
|
|
40
40
|
/** The SDK's own default when neither the host nor the environment says otherwise. */
|
|
41
41
|
export declare const DEFAULT_METRIC_EXPORT_INTERVAL_MS = 60000;
|
|
42
|
-
export
|
|
42
|
+
export type InitOtelOptions = {
|
|
43
43
|
/** Diagnostics sink; omitted falls back to no-op. */
|
|
44
44
|
readonly logger?: Logger;
|
|
45
45
|
/** `service.name` when `OTEL_SERVICE_NAME` is unset. Default `cortex`. */
|
|
46
46
|
readonly serviceName?: string;
|
|
47
47
|
/** `service.version` — the host's package version. Omitted leaves the attribute unset. */
|
|
48
48
|
readonly serviceVersion?: string;
|
|
49
|
-
}
|
|
49
|
+
};
|
|
50
50
|
/**
|
|
51
51
|
* `OTEL_METRICS_EXPORTER=none` turns metric export off while the OTLP endpoint
|
|
52
52
|
* stays set for traces. Any other value (including unset) keeps the OTLP
|
|
@@ -79,3 +79,5 @@ export declare function shutdownOtel(): Promise<void>;
|
|
|
79
79
|
export declare function __resetOtelForTest(): Promise<void>;
|
|
80
80
|
/** Test hook: whether `initOtel` registered a metric-exporting MeterProvider. Test-only. */
|
|
81
81
|
export declare function __otelMeterProviderRegisteredForTest(): boolean;
|
|
82
|
+
/** Test hook: the attributes of the resource the registered TracerProvider carries. Test-only. */
|
|
83
|
+
export declare function __otelTracerResourceForTest(): Record<string, unknown> | undefined;
|
package/dist/lib/otel.js
CHANGED
|
@@ -38,6 +38,7 @@
|
|
|
38
38
|
*/
|
|
39
39
|
import { context, propagation, metrics, trace } from "@opentelemetry/api";
|
|
40
40
|
import { createNoopLogger } from "./console-logger.js";
|
|
41
|
+
import { trimTrailingOf } from "./text.js";
|
|
41
42
|
import { createHarnessSampler, DbosSpanProcessor, HarnessTracerProvider } from "./otel-spans.js";
|
|
42
43
|
import { W3CTraceContextPropagator } from "@opentelemetry/core";
|
|
43
44
|
import { MeterProvider, PeriodicExportingMetricReader } from "@opentelemetry/sdk-metrics";
|
|
@@ -50,6 +51,7 @@ import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from "@opentelemetry/semantic
|
|
|
50
51
|
export const DEFAULT_METRIC_EXPORT_INTERVAL_MS = 60_000;
|
|
51
52
|
let initialized = false;
|
|
52
53
|
let registeredTracerProvider;
|
|
54
|
+
let registeredTracerResource;
|
|
53
55
|
let registeredMeterProvider;
|
|
54
56
|
/**
|
|
55
57
|
* `OTEL_METRICS_EXPORTER=none` turns metric export off while the OTLP endpoint
|
|
@@ -108,7 +110,7 @@ export function initOtel(options = {}) {
|
|
|
108
110
|
{
|
|
109
111
|
const spanProcessors = [];
|
|
110
112
|
if (endpoint) {
|
|
111
|
-
const base = endpoint
|
|
113
|
+
const base = trimTrailingOf(endpoint, "/");
|
|
112
114
|
spanProcessors.push(new DbosSpanProcessor(new BatchSpanProcessor(new OTLPTraceExporter({ url: `${base}/v1/traces` }))));
|
|
113
115
|
}
|
|
114
116
|
const tracerProvider = new HarnessTracerProvider({
|
|
@@ -118,6 +120,7 @@ export function initOtel(options = {}) {
|
|
|
118
120
|
});
|
|
119
121
|
tracerProvider.register();
|
|
120
122
|
registeredTracerProvider = tracerProvider;
|
|
123
|
+
registeredTracerResource = resource.attributes;
|
|
121
124
|
// Debug: verify registration actually worked
|
|
122
125
|
const testTracer = trace.getTracer("otel-init-check");
|
|
123
126
|
const testSpan = testTracer.startSpan("init-check");
|
|
@@ -140,7 +143,7 @@ export function initOtel(options = {}) {
|
|
|
140
143
|
// With no MeterProvider registered the API's global no-op provider serves
|
|
141
144
|
// every instrument, so the record sites stay valid when export is off.
|
|
142
145
|
if (endpoint && !metricsExportDisabled()) {
|
|
143
|
-
const base = endpoint
|
|
146
|
+
const base = trimTrailingOf(endpoint, "/");
|
|
144
147
|
const metricExporter = new OTLPMetricExporter({
|
|
145
148
|
url: `${base}/v1/metrics`,
|
|
146
149
|
});
|
|
@@ -178,6 +181,7 @@ export async function shutdownOtel() {
|
|
|
178
181
|
export async function __resetOtelForTest() {
|
|
179
182
|
await shutdownOtel();
|
|
180
183
|
registeredTracerProvider = undefined;
|
|
184
|
+
registeredTracerResource = undefined;
|
|
181
185
|
registeredMeterProvider = undefined;
|
|
182
186
|
trace.disable();
|
|
183
187
|
metrics.disable();
|
|
@@ -189,3 +193,7 @@ export async function __resetOtelForTest() {
|
|
|
189
193
|
export function __otelMeterProviderRegisteredForTest() {
|
|
190
194
|
return registeredMeterProvider !== undefined;
|
|
191
195
|
}
|
|
196
|
+
/** Test hook: the attributes of the resource the registered TracerProvider carries. Test-only. */
|
|
197
|
+
export function __otelTracerResourceForTest() {
|
|
198
|
+
return registeredTracerResource;
|
|
199
|
+
}
|
|
@@ -30,19 +30,19 @@
|
|
|
30
30
|
*/
|
|
31
31
|
import { type ChromeConfig } from "./chrome.js";
|
|
32
32
|
/** One request that the page could not load, with the reason that the browser gave. */
|
|
33
|
-
export
|
|
33
|
+
export type FailedRequest = {
|
|
34
34
|
url: string;
|
|
35
35
|
reason: string;
|
|
36
|
-
}
|
|
36
|
+
};
|
|
37
37
|
/** One picture of a capture: the base64 bytes, and the document rows that a slice holds. */
|
|
38
|
-
export
|
|
38
|
+
export type CapturedShot = {
|
|
39
39
|
readonly base64: string;
|
|
40
40
|
/** The vertical document range of a slice, in CSS pixels. Absent on a whole-document or window picture. */
|
|
41
41
|
readonly range?: {
|
|
42
42
|
readonly fromY: number;
|
|
43
43
|
readonly toY: number;
|
|
44
44
|
};
|
|
45
|
-
}
|
|
45
|
+
};
|
|
46
46
|
/**
|
|
47
47
|
* What the pictures hold together. `full` is one shot of the whole document. `tiled` is consecutive vertical
|
|
48
48
|
* slices in document order; `capturedPx` is the height the slices cover and `totalPx` is the document height,
|
|
@@ -69,7 +69,7 @@ export type CaptureCoverage = {
|
|
|
69
69
|
readonly kind: "no-block";
|
|
70
70
|
};
|
|
71
71
|
/** The pictures and the faults of one page capture. */
|
|
72
|
-
export
|
|
72
|
+
export type PageCapture = {
|
|
73
73
|
/**
|
|
74
74
|
* The pictures in document order: one shot under `full` and `viewport`, the slices under `tiled` and
|
|
75
75
|
* `block`, and none under `no-block`.
|
|
@@ -78,7 +78,7 @@ export interface PageCapture {
|
|
|
78
78
|
coverage: CaptureCoverage;
|
|
79
79
|
consoleErrors: string[];
|
|
80
80
|
failedRequests: FailedRequest[];
|
|
81
|
-
}
|
|
81
|
+
};
|
|
82
82
|
/**
|
|
83
83
|
* The capture seam. It navigates to a page URL, and it gives back the screenshots and the faults. The seam
|
|
84
84
|
* speaks the throw protocol, because the chrome connection does. A test injects a seam that reads no
|
|
@@ -86,14 +86,14 @@ export interface PageCapture {
|
|
|
86
86
|
*/
|
|
87
87
|
export type CapturePage = (url: string, options?: CaptureOptions) => Promise<PageCapture>;
|
|
88
88
|
/** The extra settle steps and the target of one capture. A call site that needs none passes nothing. */
|
|
89
|
-
export
|
|
89
|
+
export type CaptureOptions = {
|
|
90
90
|
/** A CSS selector to wait for after the readiness signal. The wait is best-effort. */
|
|
91
91
|
readonly waitForSelector?: string;
|
|
92
92
|
/** An extra settle time in milliseconds after the readiness signal, for a late paint. */
|
|
93
93
|
readonly waitMs?: number;
|
|
94
94
|
/** The id of the one block to capture. Absent, the capture takes the whole document. */
|
|
95
95
|
readonly blockId?: string;
|
|
96
|
-
}
|
|
96
|
+
};
|
|
97
97
|
/**
|
|
98
98
|
* Capture one page: the screenshots, the console errors, and the failed requests.
|
|
99
99
|
*
|
package/dist/lib/page-capture.js
CHANGED
|
@@ -28,6 +28,8 @@
|
|
|
28
28
|
* The capture speaks the throw protocol, because the chrome connection does. A caller that needs a typed
|
|
29
29
|
* outcome guards the call.
|
|
30
30
|
*/
|
|
31
|
+
import { setTimeout as sleep } from "node:timers/promises";
|
|
32
|
+
import { errorOf } from "./thrown.js";
|
|
31
33
|
import { withPage } from "./chrome.js";
|
|
32
34
|
import { PAGE_NAV_TIMEOUT_MS, PAGE_READY_TIMEOUT_MS, THEME_READY_EVENT, THEME_READY_SENTINEL } from "../report-render/page.js";
|
|
33
35
|
import { BLOCK_ID_ATTRIBUTE } from "../report-render/views/block-mark.js";
|
|
@@ -69,10 +71,11 @@ const BLOCK_MARGIN_PX = 16;
|
|
|
69
71
|
function waitForThemeReady(sentinel, event, timeout) {
|
|
70
72
|
return new Promise((resolve) => {
|
|
71
73
|
// The sentinel name arrives as a value, thus no declared property of the global object describes it.
|
|
72
|
-
if (window
|
|
74
|
+
if (Reflect.get(window, sentinel)) {
|
|
73
75
|
resolve();
|
|
74
76
|
return;
|
|
75
77
|
}
|
|
78
|
+
// oxlint-disable-next-line eslint-js/no-restricted-syntax -- the browser runs this body as page source, so the node timers module does not exist here; the timer bounds a page that never signals.
|
|
76
79
|
const timer = setTimeout(() => {
|
|
77
80
|
resolve();
|
|
78
81
|
}, timeout);
|
|
@@ -98,6 +101,7 @@ async function measureTotalHeight(page) {
|
|
|
98
101
|
const measured = await page.evaluate(measureScrollHeight).catch(() => undefined);
|
|
99
102
|
return typeof measured === "number" && Number.isFinite(measured) ? measured : 0;
|
|
100
103
|
}
|
|
104
|
+
/** A document area of one capture, in CSS pixels: the columns from `x`, and the rows from `fromY` to `toY`. */
|
|
101
105
|
/**
|
|
102
106
|
* Capture the rows of one area as slices, in document order. Each slice clips {@link TILE_HEIGHT_PX} rows,
|
|
103
107
|
* and the last slice ends at the area or at the budget, whichever comes first.
|
|
@@ -181,8 +185,9 @@ async function captureShots(page) {
|
|
|
181
185
|
catch (refusedViewport) {
|
|
182
186
|
// The two refusals together are the account of a dead look, and the caller reports the second one
|
|
183
187
|
// alone. Thus the first one rides as the cause, and no reader of that report loses half of it.
|
|
184
|
-
|
|
185
|
-
|
|
188
|
+
const refusedViewportError = errorOf(refusedViewport);
|
|
189
|
+
if (refusedViewportError !== undefined && refusedViewportError.cause === undefined) {
|
|
190
|
+
refusedViewportError.cause = refused;
|
|
186
191
|
}
|
|
187
192
|
throw refusedViewport;
|
|
188
193
|
}
|
|
@@ -229,7 +234,7 @@ export function capturePage(chrome, url, options = {}) {
|
|
|
229
234
|
}
|
|
230
235
|
if (options.waitMs !== undefined && options.waitMs > 0) {
|
|
231
236
|
const settle = options.waitMs;
|
|
232
|
-
await
|
|
237
|
+
await sleep(settle);
|
|
233
238
|
}
|
|
234
239
|
// The pictures must show the whole document at the layout that a reader gets. Thus a defect below the
|
|
235
240
|
// fold is visible, and a question about content that never appeared has an answer.
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** Parse `text` and validate it with `schema`: malformed text throws the parse's `SyntaxError`, a schema failure throws the `ZodError`. */
|
|
3
|
+
export declare function parseJsonAs<T>(text: string, schema: z.ZodType<T>): T;
|
|
4
|
+
/** Parse `text`, validate it with `schema`, and give the zod result. A malformed text still throws the parse's `SyntaxError`; only the schema outcome is a result. */
|
|
5
|
+
export declare function safeParseJsonAs<T>(text: string, schema: z.ZodType<T>): z.ZodSafeParseResult<T>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
function parseJsonText(text) {
|
|
2
|
+
// oxlint-disable-next-line eslint-js/no-restricted-syntax -- the one JSON.parse of the tree: every caller states the schema its boundary assumes.
|
|
3
|
+
return JSON.parse(text);
|
|
4
|
+
}
|
|
5
|
+
/** Parse `text` and validate it with `schema`: malformed text throws the parse's `SyntaxError`, a schema failure throws the `ZodError`. */
|
|
6
|
+
export function parseJsonAs(text, schema) {
|
|
7
|
+
return schema.parse(parseJsonText(text));
|
|
8
|
+
}
|
|
9
|
+
/** Parse `text`, validate it with `schema`, and give the zod result. A malformed text still throws the parse's `SyntaxError`; only the schema outcome is a result. */
|
|
10
|
+
export function safeParseJsonAs(text, schema) {
|
|
11
|
+
return schema.safeParse(parseJsonText(text));
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A positional or keyed read whose construction guarantees presence, replacing
|
|
3
|
+
* a non-null assertion with a failure that names the read. A helper serves only
|
|
4
|
+
* a guaranteed read — a lookup that can miss takes its module's absence path,
|
|
5
|
+
* because a throw there would turn a handled absence into a crash.
|
|
6
|
+
*/
|
|
7
|
+
export declare function presentFirst<T>(values: readonly T[], what?: string): T;
|
|
8
|
+
export declare function presentAt<T>(values: readonly T[], index: number, what?: string): T;
|
|
9
|
+
export declare function presentLast<T>(values: readonly T[], what?: string): T;
|
|
10
|
+
export declare function presentFind<T>(values: readonly T[], matches: (value: T) => boolean, what?: string): T;
|
|
11
|
+
export declare function presentGet<V>(source: Map<string, V> | Readonly<Record<string, V>>, key: string, what?: string): V;
|
|
12
|
+
export declare function presentGet<K, V>(source: Map<K, V>, key: K, what?: string): V;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A positional or keyed read whose construction guarantees presence, replacing
|
|
3
|
+
* a non-null assertion with a failure that names the read. A helper serves only
|
|
4
|
+
* a guaranteed read — a lookup that can miss takes its module's absence path,
|
|
5
|
+
* because a throw there would turn a handled absence into a crash.
|
|
6
|
+
*/
|
|
7
|
+
function absent(what) {
|
|
8
|
+
return new Error(`${what} is absent`);
|
|
9
|
+
}
|
|
10
|
+
export function presentFirst(values, what) {
|
|
11
|
+
const first = values[0];
|
|
12
|
+
if (first === undefined)
|
|
13
|
+
throw absent(what ?? "the first element");
|
|
14
|
+
return first;
|
|
15
|
+
}
|
|
16
|
+
export function presentAt(values, index, what) {
|
|
17
|
+
const value = values[index];
|
|
18
|
+
if (value === undefined)
|
|
19
|
+
throw absent(what ?? `the element at index ${index}`);
|
|
20
|
+
return value;
|
|
21
|
+
}
|
|
22
|
+
export function presentLast(values, what) {
|
|
23
|
+
const last = values[values.length - 1];
|
|
24
|
+
if (last === undefined)
|
|
25
|
+
throw absent(what ?? "the last element");
|
|
26
|
+
return last;
|
|
27
|
+
}
|
|
28
|
+
export function presentFind(values, matches, what) {
|
|
29
|
+
const found = values.find(matches);
|
|
30
|
+
if (found === undefined)
|
|
31
|
+
throw absent(what ?? "the matching element");
|
|
32
|
+
return found;
|
|
33
|
+
}
|
|
34
|
+
export function presentGet(source, key, what) {
|
|
35
|
+
const value = source instanceof Map ? source.get(key) : source[key];
|
|
36
|
+
if (value === undefined)
|
|
37
|
+
throw absent(what ?? `the entry for "${key}"`);
|
|
38
|
+
return value;
|
|
39
|
+
}
|
package/dist/lib/rate-limit.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export
|
|
1
|
+
export type RateLimitConfig = {
|
|
2
2
|
readonly maxConcurrency: number;
|
|
3
3
|
readonly requestsPerSecond: number;
|
|
4
4
|
/**
|
|
@@ -8,11 +8,11 @@ export interface RateLimitConfig {
|
|
|
8
8
|
*/
|
|
9
9
|
readonly maxRetries: number;
|
|
10
10
|
readonly maxRetryDelayMs: number;
|
|
11
|
-
}
|
|
12
|
-
export
|
|
11
|
+
};
|
|
12
|
+
export type RateLimitRuntime = {
|
|
13
13
|
readonly now?: () => number;
|
|
14
14
|
readonly sleep?: (milliseconds: number, signal?: AbortSignal) => Promise<void>;
|
|
15
|
-
}
|
|
15
|
+
};
|
|
16
16
|
export declare function sleepWithSignal(milliseconds: number, signal?: AbortSignal): Promise<void>;
|
|
17
17
|
export declare class BoundedRateLimiter {
|
|
18
18
|
private readonly config;
|