@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/rate-limit.js
CHANGED
|
@@ -1,21 +1,20 @@
|
|
|
1
|
+
import { setTimeout as sleep } from "node:timers/promises";
|
|
2
|
+
import { errorOf } from "./thrown.js";
|
|
1
3
|
function abortReason(signal) {
|
|
2
|
-
return signal.reason
|
|
4
|
+
return errorOf(signal.reason) ?? new DOMException("The operation was aborted", "AbortError");
|
|
3
5
|
}
|
|
4
6
|
export function sleepWithSignal(milliseconds, signal) {
|
|
7
|
+
// The node wait consults the signal before any duration elapses, and its abort
|
|
8
|
+
// rejection is a fresh AbortError instead of `signal.reason` under the Bun test
|
|
9
|
+
// runtime, so the gates and the catch carry the reasons of this contract.
|
|
5
10
|
if (milliseconds <= 0)
|
|
6
11
|
return Promise.resolve();
|
|
7
|
-
if (signal
|
|
12
|
+
if (signal === undefined)
|
|
13
|
+
return sleep(milliseconds);
|
|
14
|
+
if (signal.aborted)
|
|
8
15
|
return Promise.reject(abortReason(signal));
|
|
9
|
-
return
|
|
10
|
-
|
|
11
|
-
signal?.removeEventListener("abort", onAbort);
|
|
12
|
-
resolve();
|
|
13
|
-
}, milliseconds);
|
|
14
|
-
const onAbort = () => {
|
|
15
|
-
clearTimeout(timeout);
|
|
16
|
-
reject(abortReason(signal));
|
|
17
|
-
};
|
|
18
|
-
signal?.addEventListener("abort", onAbort, { once: true });
|
|
16
|
+
return sleep(milliseconds, undefined, { signal }).catch(() => {
|
|
17
|
+
throw abortReason(signal);
|
|
19
18
|
});
|
|
20
19
|
}
|
|
21
20
|
class Semaphore {
|
|
@@ -33,7 +32,7 @@ class Semaphore {
|
|
|
33
32
|
return;
|
|
34
33
|
}
|
|
35
34
|
await new Promise((resolve, reject) => {
|
|
36
|
-
const waiter = { resolve, reject,
|
|
35
|
+
const waiter = { resolve, reject, signal };
|
|
37
36
|
if (signal !== undefined) {
|
|
38
37
|
waiter.onAbort = () => {
|
|
39
38
|
const index = this.waiters.indexOf(waiter);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export type FdaCenter = "CDER" | "CBER";
|
|
2
|
-
export
|
|
2
|
+
export type FdaDocStub = {
|
|
3
3
|
doc_id: string;
|
|
4
4
|
doc_title: string;
|
|
5
5
|
doc_url: string;
|
|
@@ -8,8 +8,8 @@ export interface FdaDocStub {
|
|
|
8
8
|
year?: string;
|
|
9
9
|
category?: string;
|
|
10
10
|
};
|
|
11
|
-
}
|
|
12
|
-
export
|
|
11
|
+
};
|
|
12
|
+
export type FdaDoc = {
|
|
13
13
|
doc_id: string;
|
|
14
14
|
doc_title: string;
|
|
15
15
|
doc_url: string;
|
|
@@ -19,7 +19,7 @@ export interface FdaDoc {
|
|
|
19
19
|
year?: string;
|
|
20
20
|
category?: string;
|
|
21
21
|
};
|
|
22
|
-
}
|
|
22
|
+
};
|
|
23
23
|
/**
|
|
24
24
|
* Return the curated FDA guidance stubs for `center`. The catalog is
|
|
25
25
|
* static; this function exists for parity with `fetchIchListing()` and as
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { load } from "cheerio";
|
|
2
2
|
import { PDFParse } from "pdf-parse";
|
|
3
|
+
import { normalizeWhitespace } from "./normalize-whitespace.js";
|
|
3
4
|
/**
|
|
4
5
|
* Curated catalog of FDA guidance documents to index into the corpus.
|
|
5
6
|
*
|
|
@@ -53,14 +54,14 @@ const FDA_GUIDANCES = [
|
|
|
53
54
|
* the seam where a future contributor can swap in dynamic discovery
|
|
54
55
|
* (e.g., headless-browser scraping or a vetted third-party index).
|
|
55
56
|
*/
|
|
56
|
-
export
|
|
57
|
-
return FDA_GUIDANCES.filter((g) => g.center === center).map((g) => ({
|
|
57
|
+
export function fetchFdaGuidanceListing(center) {
|
|
58
|
+
return Promise.resolve(FDA_GUIDANCES.filter((g) => g.center === center).map((g) => ({
|
|
58
59
|
doc_id: g.doc_id,
|
|
59
60
|
doc_title: g.doc_title,
|
|
60
61
|
doc_url: `https://www.fda.gov/media/${g.media_id}/download`,
|
|
61
62
|
center: g.center,
|
|
62
63
|
metadata: { year: g.year },
|
|
63
|
-
}));
|
|
64
|
+
})));
|
|
64
65
|
}
|
|
65
66
|
/**
|
|
66
67
|
* Download a single FDA guidance document and extract its text. Handles
|
|
@@ -98,10 +99,3 @@ export async function fetchAndExtractFdaDoc(stub) {
|
|
|
98
99
|
},
|
|
99
100
|
};
|
|
100
101
|
}
|
|
101
|
-
function normalizeWhitespace(s) {
|
|
102
|
-
return s
|
|
103
|
-
.replace(/[ \t]+/g, " ")
|
|
104
|
-
.replace(/\r/g, "")
|
|
105
|
-
.replace(/\n{3,}/g, "\n\n")
|
|
106
|
-
.trim();
|
|
107
|
-
}
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* `ich-<code>` with non-word chars sanitized.
|
|
13
13
|
*/
|
|
14
14
|
export type IchSeries = "S" | "E" | "M" | "Q";
|
|
15
|
-
export
|
|
15
|
+
export type IchStub = {
|
|
16
16
|
doc_id: string;
|
|
17
17
|
doc_title: string;
|
|
18
18
|
doc_url: string;
|
|
@@ -21,8 +21,8 @@ export interface IchStub {
|
|
|
21
21
|
metadata?: {
|
|
22
22
|
year?: string;
|
|
23
23
|
};
|
|
24
|
-
}
|
|
25
|
-
export
|
|
24
|
+
};
|
|
25
|
+
export type IchDoc = {
|
|
26
26
|
doc_id: string;
|
|
27
27
|
doc_title: string;
|
|
28
28
|
doc_url: string;
|
|
@@ -32,7 +32,7 @@ export interface IchDoc {
|
|
|
32
32
|
series: IchSeries;
|
|
33
33
|
year?: string;
|
|
34
34
|
};
|
|
35
|
-
}
|
|
35
|
+
};
|
|
36
36
|
/**
|
|
37
37
|
* Return the curated ICH guideline stubs. The catalog is static; this
|
|
38
38
|
* function exists for parity with `fetchFdaGuidanceListing()` and as the
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
* `ich-<code>` with non-word chars sanitized.
|
|
13
13
|
*/
|
|
14
14
|
import { PDFParse } from "pdf-parse";
|
|
15
|
+
import { normalizeWhitespace } from "./normalize-whitespace.js";
|
|
15
16
|
/**
|
|
16
17
|
* Curated catalog of ICH guidelines to index into the corpus.
|
|
17
18
|
*
|
|
@@ -124,14 +125,14 @@ const ICH_GUIDELINES = [
|
|
|
124
125
|
* function exists for parity with `fetchFdaGuidanceListing()` and as the
|
|
125
126
|
* seam where a future contributor can swap in dynamic discovery.
|
|
126
127
|
*/
|
|
127
|
-
export
|
|
128
|
-
return ICH_GUIDELINES.map((g) => ({
|
|
128
|
+
export function fetchIchListing() {
|
|
129
|
+
return Promise.resolve(ICH_GUIDELINES.map((g) => ({
|
|
129
130
|
doc_id: `ich-${slugify(g.code)}`,
|
|
130
131
|
doc_title: g.doc_title,
|
|
131
132
|
doc_url: g.url,
|
|
132
133
|
code: g.code,
|
|
133
134
|
series: g.series,
|
|
134
|
-
}));
|
|
135
|
+
})));
|
|
135
136
|
}
|
|
136
137
|
/**
|
|
137
138
|
* Download a single ICH guideline PDF and extract its text. Returns
|
|
@@ -158,16 +159,19 @@ export async function fetchAndExtractIchDoc(stub) {
|
|
|
158
159
|
},
|
|
159
160
|
};
|
|
160
161
|
}
|
|
161
|
-
function normalizeWhitespace(s) {
|
|
162
|
-
return s
|
|
163
|
-
.replace(/[ \t]+/g, " ")
|
|
164
|
-
.replace(/\r/g, "")
|
|
165
|
-
.replace(/\n{3,}/g, "\n\n")
|
|
166
|
-
.trim();
|
|
167
|
-
}
|
|
168
162
|
function slugify(s) {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
163
|
+
let out = "";
|
|
164
|
+
let inRun = false;
|
|
165
|
+
for (const char of s.toLowerCase()) {
|
|
166
|
+
const isSlugChar = (char >= "a" && char <= "z") || (char >= "0" && char <= "9");
|
|
167
|
+
if (!isSlugChar) {
|
|
168
|
+
inRun = true;
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
if (inRun && out.length > 0)
|
|
172
|
+
out += "-";
|
|
173
|
+
inRun = false;
|
|
174
|
+
out += char;
|
|
175
|
+
}
|
|
176
|
+
return out;
|
|
173
177
|
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whitespace normalization for fetched regulatory document text (HTML bodies and PDF
|
|
3
|
+
* extractions): space and tab runs collapse to one space, newline runs cap at one blank
|
|
4
|
+
* line, and the edges trim.
|
|
5
|
+
*/
|
|
6
|
+
export declare function normalizeWhitespace(s: string): string;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whitespace normalization for fetched regulatory document text (HTML bodies and PDF
|
|
3
|
+
* extractions): space and tab runs collapse to one space, newline runs cap at one blank
|
|
4
|
+
* line, and the edges trim.
|
|
5
|
+
*/
|
|
6
|
+
export function normalizeWhitespace(s) {
|
|
7
|
+
let out = "";
|
|
8
|
+
let inSpaceRun = false;
|
|
9
|
+
let newlineRun = 0;
|
|
10
|
+
const flushNewlineRun = () => {
|
|
11
|
+
out += "\n".repeat(Math.min(newlineRun, 2));
|
|
12
|
+
newlineRun = 0;
|
|
13
|
+
};
|
|
14
|
+
for (const char of s) {
|
|
15
|
+
// A CR joins the newline run it sits in — a CRLF pair merges through it, it never
|
|
16
|
+
// ends the run — and with no run pending it only ends a space run.
|
|
17
|
+
if (char === "\r") {
|
|
18
|
+
inSpaceRun = false;
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
if (char === "\n") {
|
|
22
|
+
inSpaceRun = false;
|
|
23
|
+
newlineRun += 1;
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
if (char === " " || char === "\t") {
|
|
27
|
+
if (newlineRun > 0)
|
|
28
|
+
flushNewlineRun();
|
|
29
|
+
if (!inSpaceRun)
|
|
30
|
+
out += " ";
|
|
31
|
+
inSpaceRun = true;
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
if (newlineRun > 0)
|
|
35
|
+
flushNewlineRun();
|
|
36
|
+
inSpaceRun = false;
|
|
37
|
+
out += char;
|
|
38
|
+
}
|
|
39
|
+
flushNewlineRun();
|
|
40
|
+
return out.trim();
|
|
41
|
+
}
|
|
@@ -16,15 +16,15 @@
|
|
|
16
16
|
import { ResultAsync } from "neverthrow";
|
|
17
17
|
import type { Pool } from "pg";
|
|
18
18
|
import { type DbError } from "./db-result.js";
|
|
19
|
-
export
|
|
19
|
+
export type ChunkOptions = {
|
|
20
20
|
maxTokens?: number;
|
|
21
21
|
overlapTokens?: number;
|
|
22
|
-
}
|
|
23
|
-
export
|
|
22
|
+
};
|
|
23
|
+
export type RawChunk = {
|
|
24
24
|
section: string | null;
|
|
25
25
|
index: number;
|
|
26
26
|
text: string;
|
|
27
|
-
}
|
|
27
|
+
};
|
|
28
28
|
/**
|
|
29
29
|
* Split `text` into overlapping chunks bounded by `maxTokens` (word-count
|
|
30
30
|
* approximation), respecting `## Heading` section boundaries where present.
|
|
@@ -41,7 +41,7 @@ export interface RawChunk {
|
|
|
41
41
|
* can reassemble the document order without inspecting section names.
|
|
42
42
|
*/
|
|
43
43
|
export declare function chunkText(text: string, opts?: ChunkOptions): RawChunk[];
|
|
44
|
-
export
|
|
44
|
+
export type ChunkRow = {
|
|
45
45
|
source: "FDA-CDER" | "FDA-CBER" | "ICH";
|
|
46
46
|
doc_id: string;
|
|
47
47
|
doc_title: string;
|
|
@@ -50,7 +50,7 @@ export interface ChunkRow {
|
|
|
50
50
|
embedding: number[];
|
|
51
51
|
}>;
|
|
52
52
|
metadata: Record<string, unknown>;
|
|
53
|
-
}
|
|
53
|
+
};
|
|
54
54
|
/**
|
|
55
55
|
* Replace-by-(source, doc_id): delete all existing chunks for the document
|
|
56
56
|
* then insert the new set in a single transaction.
|
|
@@ -60,11 +60,11 @@ export interface ChunkRow {
|
|
|
60
60
|
* back), not a `DbError`.
|
|
61
61
|
*/
|
|
62
62
|
export declare function upsertChunks(pool: Pool, row: ChunkRow): ResultAsync<void, DbError>;
|
|
63
|
-
export
|
|
63
|
+
export type SearchFilters = {
|
|
64
64
|
source?: "FDA-CDER" | "FDA-CBER" | "ICH";
|
|
65
65
|
topK?: number;
|
|
66
|
-
}
|
|
67
|
-
export
|
|
66
|
+
};
|
|
67
|
+
export type SearchHit = {
|
|
68
68
|
source: string;
|
|
69
69
|
doc_id: string;
|
|
70
70
|
doc_title: string;
|
|
@@ -72,7 +72,7 @@ export interface SearchHit {
|
|
|
72
72
|
section: string | null;
|
|
73
73
|
excerpt: string;
|
|
74
74
|
score: number;
|
|
75
|
-
}
|
|
75
|
+
};
|
|
76
76
|
/**
|
|
77
77
|
* Top-K cosine similarity search over cortex_regulatory_chunks.
|
|
78
78
|
*
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
* insert time.
|
|
15
15
|
*/
|
|
16
16
|
import { tryMutation, tryQuery, withTransaction } from "./db-result.js";
|
|
17
|
+
import { collapseWhitespace } from "./text.js";
|
|
17
18
|
/**
|
|
18
19
|
* Split `text` into overlapping chunks bounded by `maxTokens` (word-count
|
|
19
20
|
* approximation), respecting `## Heading` section boundaries where present.
|
|
@@ -36,6 +37,7 @@ export function chunkText(text, opts = {}) {
|
|
|
36
37
|
// This ensures a heading at position 0 (no preceding newline) is caught
|
|
37
38
|
// the same way as headings mid-document.
|
|
38
39
|
const normalised = text.startsWith("##") ? `\n${text}` : text;
|
|
40
|
+
// oxlint-disable-next-line eslint-js/no-restricted-syntax -- the split marker is a level-2 heading (newline, two hashes, whitespace); the whitespace run may cross the heading's own newline, which the string split cannot express.
|
|
39
41
|
const parts = normalised.split(/\n##\s+/);
|
|
40
42
|
// parts[0] is always the lead-in text before the first heading (may be
|
|
41
43
|
// empty when the document opens with a heading).
|
|
@@ -52,7 +54,7 @@ export function chunkText(text, opts = {}) {
|
|
|
52
54
|
const out = [];
|
|
53
55
|
let globalIdx = 0;
|
|
54
56
|
for (const sec of sections) {
|
|
55
|
-
const tokens = sec.body.split(
|
|
57
|
+
const tokens = collapseWhitespace(sec.body).split(" ").filter(Boolean);
|
|
56
58
|
if (tokens.length === 0)
|
|
57
59
|
continue;
|
|
58
60
|
// Slide a window of maxTokens tokens with advance = maxTokens - overlapTokens.
|
package/dist/lib/result.d.ts
CHANGED
|
@@ -23,14 +23,14 @@
|
|
|
23
23
|
* dialect of failure:
|
|
24
24
|
* - HTTP routes `.match(...)` a `Result` into a response.
|
|
25
25
|
* - The DBOS step boundary throws on an `err` that must fail or retry
|
|
26
|
-
* the step (`unwrapOrThrow`
|
|
26
|
+
* the step (`unwrapOrThrow`):
|
|
27
27
|
* durability records a step as failed — and retries / fails fast —
|
|
28
28
|
* ONLY on a thrown exception. A step can also return a `Result` as
|
|
29
29
|
* its value: `runtime/result-serialization.ts` keeps the `Ok` / `Err`
|
|
30
30
|
* class across the checkpoint, DBOS records the step as a success,
|
|
31
31
|
* and the body MUST use the `err`.
|
|
32
|
-
* -
|
|
33
|
-
* (`loop/
|
|
32
|
+
* - The tool adapter maps `err` into an error tool result
|
|
33
|
+
* (`loop/tool-adapter.ts`).
|
|
34
34
|
*
|
|
35
35
|
* Control-flow exceptions (DBOS cancellation, `AbortError`) are NOT failures
|
|
36
36
|
* and live OUTSIDE the `Result` error channel — they are thrown verbatim and
|
|
@@ -47,10 +47,10 @@ import { type Result } from "neverthrow";
|
|
|
47
47
|
* `SandboxError`), and ship a `describe*Error` formatter that turns one into
|
|
48
48
|
* a user-facing line. A step body's error channel is some `DomainError`.
|
|
49
49
|
*/
|
|
50
|
-
export
|
|
50
|
+
export type DomainError = {
|
|
51
51
|
readonly type: string;
|
|
52
52
|
readonly cause?: unknown;
|
|
53
|
-
}
|
|
53
|
+
};
|
|
54
54
|
/**
|
|
55
55
|
* A thrown wrapper for a structured error value that is not already an
|
|
56
56
|
* `Error`. The original value rides on `.cause`, so the cause-walking
|
|
@@ -77,21 +77,20 @@ export declare function toThrowable(value: unknown): Error;
|
|
|
77
77
|
*
|
|
78
78
|
* Use it ONLY where a throw is the boundary's failure contract:
|
|
79
79
|
*
|
|
80
|
-
* - **DBOS workflow/step bodies
|
|
81
|
-
* `loop/run-step.ts`). DBOS records a step as failed — and retries / fails
|
|
80
|
+
* - **DBOS workflow/step bodies**. DBOS records a step as failed — and retries / fails
|
|
82
81
|
* fast — only on a thrown exception; a *returned* `err` would be durably
|
|
83
82
|
* cached as a successful step output and replayed as success forever.
|
|
84
83
|
* - **Tool `execute` bodies**, where the loop's dispatch catch maps the
|
|
85
|
-
* throw into a model-visible error tool result (`loop/
|
|
84
|
+
* throw into a model-visible error tool result (`loop/tool-adapter.ts`).
|
|
86
85
|
* - **Driver edges whose protocol is a throw** (e.g. throw-to-rollback).
|
|
87
86
|
*
|
|
88
87
|
* Anywhere else, keep the `Result` flowing: return it, chain
|
|
89
88
|
* `.andThen`/`.map`/`.mapErr`, or `.match` both branches. Never reach for
|
|
90
89
|
* this to dodge error handling in composable domain logic.
|
|
91
90
|
*
|
|
92
|
-
* The `must-use-result`
|
|
93
|
-
* consuming its Result
|
|
94
|
-
*
|
|
91
|
+
* The `must-use-result` rule of the type check command recognizes
|
|
92
|
+
* `unwrapOrThrow(...)` as consuming its Result — do not rewrite call sites
|
|
93
|
+
* into inline `.match`+throw forms to appease the rule.
|
|
95
94
|
*/
|
|
96
95
|
export declare function unwrapOrThrow<T, E>(result: Result<T, E>): T;
|
|
97
96
|
/** Runtime brand check — is this value a neverthrow `Result`? */
|
package/dist/lib/result.js
CHANGED
|
@@ -23,14 +23,14 @@
|
|
|
23
23
|
* dialect of failure:
|
|
24
24
|
* - HTTP routes `.match(...)` a `Result` into a response.
|
|
25
25
|
* - The DBOS step boundary throws on an `err` that must fail or retry
|
|
26
|
-
* the step (`unwrapOrThrow`
|
|
26
|
+
* the step (`unwrapOrThrow`):
|
|
27
27
|
* durability records a step as failed — and retries / fails fast —
|
|
28
28
|
* ONLY on a thrown exception. A step can also return a `Result` as
|
|
29
29
|
* its value: `runtime/result-serialization.ts` keeps the `Ok` / `Err`
|
|
30
30
|
* class across the checkpoint, DBOS records the step as a success,
|
|
31
31
|
* and the body MUST use the `err`.
|
|
32
|
-
* -
|
|
33
|
-
* (`loop/
|
|
32
|
+
* - The tool adapter maps `err` into an error tool result
|
|
33
|
+
* (`loop/tool-adapter.ts`).
|
|
34
34
|
*
|
|
35
35
|
* Control-flow exceptions (DBOS cancellation, `AbortError`) are NOT failures
|
|
36
36
|
* and live OUTSIDE the `Result` error channel — they are thrown verbatim and
|
|
@@ -39,6 +39,8 @@
|
|
|
39
39
|
* Sites import `ok`/`err`/`Result`/`ResultAsync`/`fromPromise`/`fromThrowable`
|
|
40
40
|
* directly from `neverthrow`; this module owns only the cortex-specific glue.
|
|
41
41
|
*/
|
|
42
|
+
import { parseUnknownRecord } from "../lib/unknown-containers.js";
|
|
43
|
+
import { textOf } from "../lib/unknown-text.js";
|
|
42
44
|
import { Err, Ok } from "neverthrow";
|
|
43
45
|
/**
|
|
44
46
|
* A thrown wrapper for a structured error value that is not already an
|
|
@@ -58,16 +60,17 @@ export class ResultError extends Error {
|
|
|
58
60
|
function describe(value) {
|
|
59
61
|
if (value instanceof Error)
|
|
60
62
|
return value.message;
|
|
61
|
-
|
|
63
|
+
const record = parseUnknownRecord(value);
|
|
64
|
+
if (record !== undefined && "type" in record) {
|
|
62
65
|
// Prefer a human `message` field when the structured error carries one
|
|
63
66
|
// (e.g. a `ProviderError`) so the wrapped `Error.message` names the
|
|
64
67
|
// failure; fall back to the `type` discriminant otherwise.
|
|
65
|
-
const message =
|
|
68
|
+
const message = record["message"];
|
|
66
69
|
if (typeof message === "string" && message.length > 0)
|
|
67
70
|
return message;
|
|
68
|
-
return
|
|
71
|
+
return textOf(record["type"]);
|
|
69
72
|
}
|
|
70
|
-
return
|
|
73
|
+
return textOf(value);
|
|
71
74
|
}
|
|
72
75
|
/**
|
|
73
76
|
* Bridge a `Result` error value into a thrown `Error` at a boundary that
|
|
@@ -86,21 +89,20 @@ export function toThrowable(value) {
|
|
|
86
89
|
*
|
|
87
90
|
* Use it ONLY where a throw is the boundary's failure contract:
|
|
88
91
|
*
|
|
89
|
-
* - **DBOS workflow/step bodies
|
|
90
|
-
* `loop/run-step.ts`). DBOS records a step as failed — and retries / fails
|
|
92
|
+
* - **DBOS workflow/step bodies**. DBOS records a step as failed — and retries / fails
|
|
91
93
|
* fast — only on a thrown exception; a *returned* `err` would be durably
|
|
92
94
|
* cached as a successful step output and replayed as success forever.
|
|
93
95
|
* - **Tool `execute` bodies**, where the loop's dispatch catch maps the
|
|
94
|
-
* throw into a model-visible error tool result (`loop/
|
|
96
|
+
* throw into a model-visible error tool result (`loop/tool-adapter.ts`).
|
|
95
97
|
* - **Driver edges whose protocol is a throw** (e.g. throw-to-rollback).
|
|
96
98
|
*
|
|
97
99
|
* Anywhere else, keep the `Result` flowing: return it, chain
|
|
98
100
|
* `.andThen`/`.map`/`.mapErr`, or `.match` both branches. Never reach for
|
|
99
101
|
* this to dodge error handling in composable domain logic.
|
|
100
102
|
*
|
|
101
|
-
* The `must-use-result`
|
|
102
|
-
* consuming its Result
|
|
103
|
-
*
|
|
103
|
+
* The `must-use-result` rule of the type check command recognizes
|
|
104
|
+
* `unwrapOrThrow(...)` as consuming its Result — do not rewrite call sites
|
|
105
|
+
* into inline `.match`+throw forms to appease the rule.
|
|
104
106
|
*/
|
|
105
107
|
export function unwrapOrThrow(result) {
|
|
106
108
|
if (result.isErr())
|
package/dist/lib/storage.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ import { type Pool } from "pg";
|
|
|
12
12
|
* fields plus the optional pool-size override. Composition roots map their
|
|
13
13
|
* validated `Env` onto this; the harness never reaches for an env loader.
|
|
14
14
|
*/
|
|
15
|
-
export
|
|
15
|
+
export type PoolConfig = {
|
|
16
16
|
readonly host: string;
|
|
17
17
|
readonly port: string;
|
|
18
18
|
readonly database: string;
|
|
@@ -20,7 +20,7 @@ export interface PoolConfig {
|
|
|
20
20
|
readonly password: string;
|
|
21
21
|
readonly sslMode: "disable" | "require" | "verify-ca" | "verify-full";
|
|
22
22
|
readonly poolMax?: string;
|
|
23
|
-
}
|
|
23
|
+
};
|
|
24
24
|
/**
|
|
25
25
|
* Construct the application `pg.Pool`. Called exactly once, at the process
|
|
26
26
|
* composition root (`server.ts:main()`), and threaded as a constructor dep
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared AsyncIterable test helper. It yields the items in order, so a test
|
|
3
|
+
* drives a stream consumer with no timer.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Yields each item of the array in order. When `toThrow` is given, the
|
|
7
|
+
* iterator rejects with it after the last item instead of finishing.
|
|
8
|
+
*/
|
|
9
|
+
export declare function asyncIterableOf<T>(items: readonly T[], toThrow?: unknown): AsyncIterable<T>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared AsyncIterable test helper. It yields the items in order, so a test
|
|
3
|
+
* drives a stream consumer with no timer.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Yields each item of the array in order. When `toThrow` is given, the
|
|
7
|
+
* iterator rejects with it after the last item instead of finishing.
|
|
8
|
+
*/
|
|
9
|
+
export function asyncIterableOf(items, toThrow) {
|
|
10
|
+
let i = 0;
|
|
11
|
+
return {
|
|
12
|
+
[Symbol.asyncIterator]: () => ({
|
|
13
|
+
next: () => {
|
|
14
|
+
if (i < items.length) {
|
|
15
|
+
const value = items[i];
|
|
16
|
+
if (value === undefined)
|
|
17
|
+
return Promise.resolve({ done: true, value: undefined });
|
|
18
|
+
i += 1;
|
|
19
|
+
return Promise.resolve({ done: false, value });
|
|
20
|
+
}
|
|
21
|
+
// oxlint-disable-next-line typescript/prefer-promise-reject-errors -- a test rejects with the exact abort reason that the production stream carries (DOMException or Error), and the test matches it.
|
|
22
|
+
if (toThrow !== undefined)
|
|
23
|
+
return Promise.reject(toThrow);
|
|
24
|
+
return Promise.resolve({ done: true, value: undefined });
|
|
25
|
+
},
|
|
26
|
+
}),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The URL text of a fetch target, for test doubles that record what a client
|
|
3
|
+
* asked for: each member of the `fetch` input union names its URL itself.
|
|
4
|
+
*/
|
|
5
|
+
export function requestUrlText(input) {
|
|
6
|
+
return typeof input === "string" ? input : input instanceof URL ? input.href : input.url;
|
|
7
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Result assertion helper for the test files of several module families.
|
|
3
|
+
* The helper serves a guaranteed ok: a test that expects an err states it with
|
|
4
|
+
* `_unsafeUnwrapErr` directly.
|
|
5
|
+
*/
|
|
6
|
+
import type { Result, ResultAsync } from "neverthrow";
|
|
7
|
+
/**
|
|
8
|
+
* Awaits a `Result`-bearing call and unwraps the ok, so the call states that it
|
|
9
|
+
* succeeded. An err throws an `Error` with a stack and the err value as its
|
|
10
|
+
* `cause`, where `_unsafeUnwrap` throws a plain object with no stack.
|
|
11
|
+
*/
|
|
12
|
+
export declare function awaitOk<T, E>(call: Result<T, E> | Promise<Result<T, E>> | ResultAsync<T, E>): Promise<T>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Result assertion helper for the test files of several module families.
|
|
3
|
+
* The helper serves a guaranteed ok: a test that expects an err states it with
|
|
4
|
+
* `_unsafeUnwrapErr` directly.
|
|
5
|
+
*/
|
|
6
|
+
import { textOf } from "../unknown-text.js";
|
|
7
|
+
/**
|
|
8
|
+
* Awaits a `Result`-bearing call and unwraps the ok, so the call states that it
|
|
9
|
+
* succeeded. An err throws an `Error` with a stack and the err value as its
|
|
10
|
+
* `cause`, where `_unsafeUnwrap` throws a plain object with no stack.
|
|
11
|
+
*/
|
|
12
|
+
export async function awaitOk(call) {
|
|
13
|
+
const result = await call;
|
|
14
|
+
if (result.isErr())
|
|
15
|
+
throw new Error(`the call gave an err: ${textOf(result.error)}`, { cause: result.error });
|
|
16
|
+
return result.value;
|
|
17
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Text shapes that the test files of several module families assert: the lowercase
|
|
3
|
+
* hex digest family, the tool-output reference, the six-digit hex color, and the
|
|
4
|
+
* paired-surrogate invariants of cut text. Each predicate reads the string with the
|
|
5
|
+
* string methods and the char codes, so no pattern lives here.
|
|
6
|
+
*/
|
|
7
|
+
/** Whether `text` is exactly `length` lowercase hex characters. */
|
|
8
|
+
export declare function isLowerHexOfLength(text: string, length: number): boolean;
|
|
9
|
+
/** Whether `text` is a `sha256:` content hash over a 64-digit lowercase hex digest. */
|
|
10
|
+
export declare function isSha256Hash(text: string): boolean;
|
|
11
|
+
/** Whether `text` is a tool-output reference: `to_` over 20 lowercase hex characters. */
|
|
12
|
+
export declare function isToolOutputRef(text: string): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* The tool-output reference that a cut-result marker names, or undefined when the text
|
|
15
|
+
* names none. The marker reads `reference "to_<20 hex>"`, and the reference ends at its
|
|
16
|
+
* closing quote.
|
|
17
|
+
*/
|
|
18
|
+
export declare function referencedToolOutput(text: string): string | undefined;
|
|
19
|
+
/** Whether `text` is an RGB color in the six-digit lowercase hex form: `#1a2b3c`. */
|
|
20
|
+
export declare function isHexColor(text: string): boolean;
|
|
21
|
+
/** Whether `text` holds a high surrogate that no low surrogate follows. */
|
|
22
|
+
export declare function hasLoneHighSurrogate(text: string): boolean;
|
|
23
|
+
/** Whether `text` holds a low surrogate that no high surrogate precedes. */
|
|
24
|
+
export declare function hasLoneLowSurrogate(text: string): boolean;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Text shapes that the test files of several module families assert: the lowercase
|
|
3
|
+
* hex digest family, the tool-output reference, the six-digit hex color, and the
|
|
4
|
+
* paired-surrogate invariants of cut text. Each predicate reads the string with the
|
|
5
|
+
* string methods and the char codes, so no pattern lives here.
|
|
6
|
+
*/
|
|
7
|
+
function isLowerHex(text) {
|
|
8
|
+
return Array.from(text).every((char) => (char >= "0" && char <= "9") || (char >= "a" && char <= "f"));
|
|
9
|
+
}
|
|
10
|
+
/** Whether `text` is exactly `length` lowercase hex characters. */
|
|
11
|
+
export function isLowerHexOfLength(text, length) {
|
|
12
|
+
return text.length === length && isLowerHex(text);
|
|
13
|
+
}
|
|
14
|
+
/** Whether `text` is a `sha256:` content hash over a 64-digit lowercase hex digest. */
|
|
15
|
+
export function isSha256Hash(text) {
|
|
16
|
+
return text.startsWith("sha256:") && isLowerHexOfLength(text.slice("sha256:".length), 64);
|
|
17
|
+
}
|
|
18
|
+
/** Whether `text` is a tool-output reference: `to_` over 20 lowercase hex characters. */
|
|
19
|
+
export function isToolOutputRef(text) {
|
|
20
|
+
return text.startsWith("to_") && isLowerHexOfLength(text.slice("to_".length), 20);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* The tool-output reference that a cut-result marker names, or undefined when the text
|
|
24
|
+
* names none. The marker reads `reference "to_<20 hex>"`, and the reference ends at its
|
|
25
|
+
* closing quote.
|
|
26
|
+
*/
|
|
27
|
+
export function referencedToolOutput(text) {
|
|
28
|
+
const opener = 'reference "';
|
|
29
|
+
const at = text.indexOf(opener);
|
|
30
|
+
if (at < 0)
|
|
31
|
+
return undefined;
|
|
32
|
+
const start = at + opener.length;
|
|
33
|
+
const ref = text.slice(start, start + "to_".length + 20);
|
|
34
|
+
if (!isToolOutputRef(ref) || text.charAt(start + ref.length) !== '"')
|
|
35
|
+
return undefined;
|
|
36
|
+
return ref;
|
|
37
|
+
}
|
|
38
|
+
/** Whether `text` is an RGB color in the six-digit lowercase hex form: `#1a2b3c`. */
|
|
39
|
+
export function isHexColor(text) {
|
|
40
|
+
return text.startsWith("#") && isLowerHexOfLength(text.slice(1), 6);
|
|
41
|
+
}
|
|
42
|
+
function isHighSurrogate(unit) {
|
|
43
|
+
return unit >= 0xd800 && unit <= 0xdbff;
|
|
44
|
+
}
|
|
45
|
+
function isLowSurrogate(unit) {
|
|
46
|
+
return unit >= 0xdc00 && unit <= 0xdfff;
|
|
47
|
+
}
|
|
48
|
+
/** Whether `text` holds a high surrogate that no low surrogate follows. */
|
|
49
|
+
export function hasLoneHighSurrogate(text) {
|
|
50
|
+
for (let i = 0; i < text.length; i++) {
|
|
51
|
+
if (isHighSurrogate(text.charCodeAt(i)) && !isLowSurrogate(text.charCodeAt(i + 1)))
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
/** Whether `text` holds a low surrogate that no high surrogate precedes. */
|
|
57
|
+
export function hasLoneLowSurrogate(text) {
|
|
58
|
+
for (let i = 0; i < text.length; i++) {
|
|
59
|
+
if (isLowSurrogate(text.charCodeAt(i)) && !isHighSurrogate(text.charCodeAt(i - 1)))
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
return false;
|
|
63
|
+
}
|