@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
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
* specific class every one of its values satisfies.
|
|
13
13
|
*/
|
|
14
14
|
import { KNOWN_EXTENSIONS } from "./formats.js";
|
|
15
|
+
import { isAllDigits, isAllHex } from "../lib/text.js";
|
|
16
|
+
import { presentAt, presentFirst } from "../lib/present.js";
|
|
15
17
|
import { MAX_OPAQUE_ID_MEAN_RUN, MAX_OPAQUE_ID_SEPARATOR_FRACTION, MAX_SUFFIX_TOKEN_LENGTH, MIN_OPAQUE_ID_CASE_FLIPS, MIN_OPAQUE_ID_CHAR_CLASSES, MIN_OPAQUE_ID_DIGIT_FRACTION, MIN_OPAQUE_ID_LENGTH, OPAQUE_ID_CASE_FLIP_DIVISOR, } from "./tuning.js";
|
|
16
18
|
export const ID_SYMBOL = "ID";
|
|
17
19
|
export const DIGIT_SYMBOL = "#";
|
|
@@ -33,45 +35,106 @@ export function splitStem(fileName) {
|
|
|
33
35
|
const parts = fileName.split(".");
|
|
34
36
|
let cut = parts.length;
|
|
35
37
|
while (cut > 1) {
|
|
36
|
-
const candidate = parts
|
|
38
|
+
const candidate = presentAt(parts, cut - 1, "the trailing extension part").toLowerCase();
|
|
37
39
|
if (!KNOWN_EXTENSIONS.has(candidate) || candidate.length > MAX_SUFFIX_TOKEN_LENGTH)
|
|
38
40
|
break;
|
|
39
41
|
cut--;
|
|
40
42
|
}
|
|
41
43
|
return { stem: parts.slice(0, cut).join("."), suffix: parts.slice(cut).join(".").toLowerCase() };
|
|
42
44
|
}
|
|
45
|
+
// oxlint-disable-next-line eslint-js/no-restricted-syntax -- the fixed 8-4-4-4-12 hex groups are what make an identifier machine-issued rather than written.
|
|
43
46
|
const UUID_PATTERN = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
|
|
44
|
-
const
|
|
45
|
-
|
|
47
|
+
const DIGEST_HEX_LENGTHS = new Set([32, 40, 64]);
|
|
48
|
+
// oxlint-disable-next-line eslint-js/no-restricted-syntax -- captures year, month, and day out of `2026-08-24` or `2026_08_24` for the calendar range check below.
|
|
46
49
|
const DELIMITED_DATE_PATTERN = /^(\d{4})[-_](\d{2})[-_](\d{2})$/;
|
|
50
|
+
// oxlint-disable-next-line eslint-js/no-restricted-syntax -- the same capture for the compact `20260824` form.
|
|
47
51
|
const COMPACT_DATE_PATTERN = /^(\d{4})(\d{2})(\d{2})$/;
|
|
52
|
+
// oxlint-disable-next-line eslint-js/no-restricted-syntax -- finds a date fused inside a longer run; the lookarounds keep digits outside the date in their own runs.
|
|
53
|
+
const EMBEDDED_DATE_PATTERN = /(?<![0-9])(?:\d{4}[-_]\d{2}[-_]\d{2}|\d{8})(?![0-9])/g;
|
|
54
|
+
// oxlint-disable-next-line eslint-js/no-restricted-syntax -- letter and digit runs are the shape whose mean length separates written words from random class-mixed tokens.
|
|
55
|
+
const ALPHA_DIGIT_RUN_PATTERN = /[A-Za-z]+|[0-9]+/g;
|
|
56
|
+
// oxlint-disable-next-line eslint-js/no-restricted-syntax -- splits a run into letter, digit, and `-_=` separator tokens; the three classes are the token lattice below.
|
|
57
|
+
const TOKEN_RUN_PATTERN = /[A-Za-z]+|[0-9]+|[-_=]+/g;
|
|
58
|
+
// oxlint-disable-next-line eslint-js/no-restricted-syntax -- splits a path segment into base64url-charset runs and the runs outside that charset, each whole.
|
|
59
|
+
const SEGMENT_RUN_PATTERN = /[A-Za-z0-9\-_=]+|[^A-Za-z0-9\-_=]+/g;
|
|
60
|
+
// oxlint-disable-next-line eslint-js/no-restricted-syntax -- an alphanumeric run of three or more characters inside a shared affix is identifier material to mask.
|
|
61
|
+
const MASKABLE_RUN_PATTERN = /[A-Za-z0-9]{3,}/g;
|
|
62
|
+
function isAsciiUpper(char) {
|
|
63
|
+
return char >= "A" && char <= "Z";
|
|
64
|
+
}
|
|
65
|
+
function isAsciiLower(char) {
|
|
66
|
+
return char >= "a" && char <= "z";
|
|
67
|
+
}
|
|
68
|
+
export function isAsciiLetter(char) {
|
|
69
|
+
return isAsciiUpper(char) || isAsciiLower(char);
|
|
70
|
+
}
|
|
71
|
+
export function isAsciiDigit(char) {
|
|
72
|
+
return char >= "0" && char <= "9";
|
|
73
|
+
}
|
|
74
|
+
function isBase64UrlSymbol(char) {
|
|
75
|
+
return char === "-" || char === "_" || char === "=";
|
|
76
|
+
}
|
|
77
|
+
function isAlphanumeric(char) {
|
|
78
|
+
return isAsciiLetter(char) || isAsciiDigit(char);
|
|
79
|
+
}
|
|
80
|
+
function hasAsciiUpper(value) {
|
|
81
|
+
return Array.from(value).some(isAsciiUpper);
|
|
82
|
+
}
|
|
83
|
+
function hasAsciiLower(value) {
|
|
84
|
+
return Array.from(value).some(isAsciiLower);
|
|
85
|
+
}
|
|
86
|
+
function hasAsciiLetter(value) {
|
|
87
|
+
return Array.from(value).some(isAsciiLetter);
|
|
88
|
+
}
|
|
89
|
+
function hasAsciiDigit(value) {
|
|
90
|
+
return Array.from(value).some(isAsciiDigit);
|
|
91
|
+
}
|
|
92
|
+
function hasAlphanumeric(value) {
|
|
93
|
+
return Array.from(value).some(isAlphanumeric);
|
|
94
|
+
}
|
|
95
|
+
function isBase64UrlRun(value) {
|
|
96
|
+
return value.length > 0 && Array.from(value).every((char) => isAlphanumeric(char) || isBase64UrlSymbol(char));
|
|
97
|
+
}
|
|
98
|
+
function isHexRun(value) {
|
|
99
|
+
return value.length > 0 && isAllHex(value);
|
|
100
|
+
}
|
|
48
101
|
function charClassCount(value) {
|
|
49
102
|
let classes = 0;
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
103
|
+
if (hasAsciiUpper(value))
|
|
104
|
+
classes++;
|
|
105
|
+
if (hasAsciiLower(value))
|
|
106
|
+
classes++;
|
|
107
|
+
if (hasAsciiDigit(value))
|
|
108
|
+
classes++;
|
|
109
|
+
if (Array.from(value).some(isBase64UrlSymbol))
|
|
110
|
+
classes++;
|
|
53
111
|
return classes;
|
|
54
112
|
}
|
|
55
113
|
function meanRunLength(value) {
|
|
56
|
-
const runs = value.match(
|
|
114
|
+
const runs = value.match(ALPHA_DIGIT_RUN_PATTERN) ?? [];
|
|
57
115
|
if (runs.length === 0)
|
|
58
116
|
return 0;
|
|
59
117
|
return runs.reduce((total, run) => total + run.length, 0) / runs.length;
|
|
60
118
|
}
|
|
61
119
|
function caseTransitions(value) {
|
|
120
|
+
const chars = value.split("");
|
|
62
121
|
let flips = 0;
|
|
63
|
-
for (let i = 1; i <
|
|
64
|
-
const before =
|
|
65
|
-
const after =
|
|
66
|
-
if (
|
|
122
|
+
for (let i = 1; i < chars.length; i++) {
|
|
123
|
+
const before = presentAt(chars, i - 1, "case-run characters");
|
|
124
|
+
const after = presentAt(chars, i, "case-run characters");
|
|
125
|
+
if (!isAsciiLetter(before) || !isAsciiLetter(after))
|
|
67
126
|
continue;
|
|
68
127
|
if ((before === before.toUpperCase()) !== (after === after.toUpperCase()))
|
|
69
128
|
flips++;
|
|
70
129
|
}
|
|
71
130
|
return flips;
|
|
72
131
|
}
|
|
73
|
-
function
|
|
74
|
-
|
|
132
|
+
function charFraction(value, matches) {
|
|
133
|
+
let count = 0;
|
|
134
|
+
for (const char of value)
|
|
135
|
+
if (matches(char))
|
|
136
|
+
count++;
|
|
137
|
+
return count / value.length;
|
|
75
138
|
}
|
|
76
139
|
/**
|
|
77
140
|
* A machine-issued identifier: a UUID, a fixed-length hex digest, or a long
|
|
@@ -86,20 +149,20 @@ function fractionOf(value, pattern) {
|
|
|
86
149
|
export function isOpaqueId(value) {
|
|
87
150
|
if (UUID_PATTERN.test(value))
|
|
88
151
|
return true;
|
|
89
|
-
if (
|
|
152
|
+
if (isHexRun(value) && DIGEST_HEX_LENGTHS.has(value.length))
|
|
90
153
|
return true;
|
|
91
154
|
if (value.length < MIN_OPAQUE_ID_LENGTH)
|
|
92
155
|
return false;
|
|
93
|
-
if (!
|
|
156
|
+
if (!isBase64UrlRun(value))
|
|
94
157
|
return false;
|
|
95
158
|
if (charClassCount(value) < MIN_OPAQUE_ID_CHAR_CLASSES)
|
|
96
159
|
return false;
|
|
97
160
|
const flipBudget = Math.max(MIN_OPAQUE_ID_CASE_FLIPS, Math.floor(value.length / OPAQUE_ID_CASE_FLIP_DIVISOR));
|
|
98
161
|
if (caseTransitions(value) >= flipBudget)
|
|
99
162
|
return true;
|
|
100
|
-
if (
|
|
163
|
+
if (charFraction(value, isBase64UrlSymbol) > MAX_OPAQUE_ID_SEPARATOR_FRACTION)
|
|
101
164
|
return false;
|
|
102
|
-
return meanRunLength(value) <= MAX_OPAQUE_ID_MEAN_RUN &&
|
|
165
|
+
return meanRunLength(value) <= MAX_OPAQUE_ID_MEAN_RUN && charFraction(value, isAsciiDigit) >= MIN_OPAQUE_ID_DIGIT_FRACTION;
|
|
103
166
|
}
|
|
104
167
|
/** A calendar date written compactly or with a single separator: `20260824`, `2026-08-24`. */
|
|
105
168
|
export function isDateToken(value) {
|
|
@@ -111,11 +174,11 @@ export function isDateToken(value) {
|
|
|
111
174
|
const day = Number(parts[3]);
|
|
112
175
|
return year >= 1900 && year <= 2999 && month >= 1 && month <= 12 && day >= 1 && day <= 31;
|
|
113
176
|
}
|
|
114
|
-
const EMBEDDED_DATE_PATTERN = /(?<![0-9])(?:\d{4}[-_]\d{2}[-_]\d{2}|\d{8})(?![0-9])/g;
|
|
115
177
|
function pushRuns(text, into) {
|
|
116
|
-
for (const run of text.matchAll(
|
|
178
|
+
for (const run of text.matchAll(TOKEN_RUN_PATTERN)) {
|
|
117
179
|
const value = run[0];
|
|
118
|
-
const
|
|
180
|
+
const head = value.charAt(0);
|
|
181
|
+
const kind = isAsciiDigit(head) ? "digit" : isAsciiLetter(head) ? "alpha" : "delim";
|
|
119
182
|
into.push({ kind, value });
|
|
120
183
|
}
|
|
121
184
|
}
|
|
@@ -130,9 +193,9 @@ function pushRuns(text, into) {
|
|
|
130
193
|
*/
|
|
131
194
|
export function tokenizeSegment(segment) {
|
|
132
195
|
const tokens = [];
|
|
133
|
-
for (const match of segment.matchAll(
|
|
196
|
+
for (const match of segment.matchAll(SEGMENT_RUN_PATTERN)) {
|
|
134
197
|
const value = match[0];
|
|
135
|
-
if (
|
|
198
|
+
if (!hasAlphanumeric(value)) {
|
|
136
199
|
tokens.push({ kind: "delim", value });
|
|
137
200
|
continue;
|
|
138
201
|
}
|
|
@@ -164,7 +227,7 @@ export function tokenizeName(fileName) {
|
|
|
164
227
|
for (let i = 0; i < parts.length; i++) {
|
|
165
228
|
if (i > 0)
|
|
166
229
|
tokens.push({ kind: "delim", value: "." });
|
|
167
|
-
tokens.push(...tokenizeSegment(parts
|
|
230
|
+
tokens.push(...tokenizeSegment(presentAt(parts, i, "stem dot-parts")));
|
|
168
231
|
}
|
|
169
232
|
return { tokens, suffix };
|
|
170
233
|
}
|
|
@@ -191,7 +254,7 @@ export function classifyValues(values) {
|
|
|
191
254
|
if (values.length === 0)
|
|
192
255
|
return { tokenClass: "any" };
|
|
193
256
|
if (values.length === 1) {
|
|
194
|
-
const only = values
|
|
257
|
+
const only = presentFirst(values, "the single value");
|
|
195
258
|
if (isDateToken(only))
|
|
196
259
|
return { tokenClass: "date" };
|
|
197
260
|
if (isOpaqueId(only))
|
|
@@ -200,24 +263,22 @@ export function classifyValues(values) {
|
|
|
200
263
|
}
|
|
201
264
|
if (values.every((value) => isDateToken(value)))
|
|
202
265
|
return { tokenClass: "date" };
|
|
203
|
-
if (values.every((value) =>
|
|
204
|
-
const width = values
|
|
266
|
+
if (values.every((value) => value.length > 0 && isAllDigits(value))) {
|
|
267
|
+
const width = presentFirst(values, "digit values").length;
|
|
205
268
|
return values.every((value) => value.length === width) ? { tokenClass: "digits-fixed", width } : { tokenClass: "digits" };
|
|
206
269
|
}
|
|
207
|
-
if (values.every((value) =>
|
|
270
|
+
if (values.every((value) => isHexRun(value) && value.length >= 4))
|
|
208
271
|
return { tokenClass: "hex" };
|
|
209
272
|
if (values.every((value) => isOpaqueId(value))) {
|
|
210
273
|
const lengths = values.map((value) => value.length);
|
|
211
274
|
return { tokenClass: "opaque-id", minLength: Math.min(...lengths), maxLength: Math.max(...lengths) };
|
|
212
275
|
}
|
|
213
|
-
if (values.every((value) =>
|
|
276
|
+
if (values.every((value) => value.length > 0 && Array.from(value).every(isAsciiLetter)))
|
|
214
277
|
return { tokenClass: "word" };
|
|
215
278
|
const skeletons = new Set(values.map((value) => maskSegment(value)));
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
return { tokenClass: "pattern", skeleton };
|
|
220
|
-
}
|
|
279
|
+
const [skeleton] = skeletons;
|
|
280
|
+
if (skeleton !== undefined && skeletons.size === 1 && (skeleton.includes(DIGIT_SYMBOL) || skeleton.includes(ID_SYMBOL) || skeleton.includes(DATE_SYMBOL))) {
|
|
281
|
+
return { tokenClass: "pattern", skeleton };
|
|
221
282
|
}
|
|
222
283
|
return { tokenClass: "any" };
|
|
223
284
|
}
|
|
@@ -230,7 +291,8 @@ export function classifyValues(values) {
|
|
|
230
291
|
export function commonAffixes(values) {
|
|
231
292
|
if (values.length < 2)
|
|
232
293
|
return { prefix: "", suffix: "" };
|
|
233
|
-
|
|
294
|
+
const head = presentFirst(values, "affix values");
|
|
295
|
+
let prefix = head;
|
|
234
296
|
for (const value of values) {
|
|
235
297
|
let i = 0;
|
|
236
298
|
while (i < prefix.length && i < value.length && prefix[i] === value[i])
|
|
@@ -239,7 +301,7 @@ export function commonAffixes(values) {
|
|
|
239
301
|
if (!prefix)
|
|
240
302
|
break;
|
|
241
303
|
}
|
|
242
|
-
let suffix =
|
|
304
|
+
let suffix = head.slice(prefix.length);
|
|
243
305
|
for (const value of values) {
|
|
244
306
|
const rest = value.slice(prefix.length);
|
|
245
307
|
let i = 0;
|
|
@@ -259,9 +321,9 @@ export function commonAffixes(values) {
|
|
|
259
321
|
* member happened to share it.
|
|
260
322
|
*/
|
|
261
323
|
export function maskAffix(affix) {
|
|
262
|
-
return affix.replace(
|
|
263
|
-
const mixedCase =
|
|
264
|
-
const alphanumeric =
|
|
324
|
+
return affix.replace(MASKABLE_RUN_PATTERN, (run) => {
|
|
325
|
+
const mixedCase = hasAsciiUpper(run) && hasAsciiLower(run);
|
|
326
|
+
const alphanumeric = hasAsciiLetter(run) && hasAsciiDigit(run);
|
|
265
327
|
return mixedCase || alphanumeric ? `<x${run.length}>` : run;
|
|
266
328
|
});
|
|
267
329
|
}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* into its submission would make its central judgement invisible.
|
|
11
11
|
*/
|
|
12
12
|
/** One file the walk found. `path` is relative to the analysis root. */
|
|
13
|
-
export
|
|
13
|
+
export type ScannedFile = {
|
|
14
14
|
readonly path: string;
|
|
15
15
|
readonly size: number;
|
|
16
16
|
/** Trailing extension components, outermost last: `sample.vcf.gz` → `["vcf", "gz"]`. */
|
|
@@ -19,7 +19,7 @@ export interface ScannedFile {
|
|
|
19
19
|
readonly format: string;
|
|
20
20
|
/** Compression wrapper reported ALONGSIDE the inner format, never in place of it. */
|
|
21
21
|
readonly wrapper?: string;
|
|
22
|
-
}
|
|
22
|
+
};
|
|
23
23
|
/**
|
|
24
24
|
* A filename position whose token differs across a shape's members.
|
|
25
25
|
*
|
|
@@ -27,7 +27,7 @@ export interface ScannedFile {
|
|
|
27
27
|
* identifier (`0001`…`800`) from a categorical label (`tumor`/`normal`) from a shard
|
|
28
28
|
* index (`chr1`…`chr22`), and those readings imply entirely different kinds.
|
|
29
29
|
*/
|
|
30
|
-
export
|
|
30
|
+
export type VariablePosition = {
|
|
31
31
|
/** Token index within the shape's name pattern — the `<n>` placeholder it fills. */
|
|
32
32
|
readonly index: number;
|
|
33
33
|
/** Literal text immediately preceding the token, when any (`PT` in `PT001`). */
|
|
@@ -35,35 +35,35 @@ export interface VariablePosition {
|
|
|
35
35
|
readonly distinctValues: number;
|
|
36
36
|
/** Bounded sample of the values observed at this position. */
|
|
37
37
|
readonly sampleValues: readonly string[];
|
|
38
|
-
}
|
|
38
|
+
};
|
|
39
39
|
/**
|
|
40
40
|
* How two variable positions vary together. A fully-crossed pair is a nested design
|
|
41
41
|
* (every subject × every timepoint); a partially-crossed one is not, and the
|
|
42
42
|
* difference is design evidence a flat file count destroys.
|
|
43
43
|
*/
|
|
44
|
-
export
|
|
44
|
+
export type PositionCooccurrence = {
|
|
45
45
|
readonly positions: readonly [number, number];
|
|
46
46
|
/** Distinct value pairs observed. */
|
|
47
47
|
readonly observedPairs: number;
|
|
48
48
|
/** Pairs the two value sets could form. `observedPairs === possiblePairs` is a full crossing. */
|
|
49
49
|
readonly possiblePairs: number;
|
|
50
|
-
}
|
|
50
|
+
};
|
|
51
51
|
/** Header fields read from a bounded prefix of one member of a shape. */
|
|
52
|
-
export
|
|
52
|
+
export type HeaderReadout = {
|
|
53
53
|
/** The member the readout came from. */
|
|
54
54
|
readonly path: string;
|
|
55
55
|
/** Decoder-reported fields, flat and bounded (`delimiter`, `columns`, `sampleCount`, …). */
|
|
56
56
|
readonly fields: Readonly<Record<string, string | number | boolean>>;
|
|
57
57
|
/** Why no readout is present, when the decode did not produce one. */
|
|
58
58
|
readonly unavailable?: string;
|
|
59
|
-
}
|
|
59
|
+
};
|
|
60
60
|
/**
|
|
61
61
|
* A set of files that are mechanically indistinguishable by name structure, format,
|
|
62
62
|
* and location. A shape is an observation, never a grouping of the dataset: the
|
|
63
63
|
* agent may split one shape into several kinds, cover several shapes with one kind,
|
|
64
64
|
* or ignore the shape entirely.
|
|
65
65
|
*/
|
|
66
|
-
export
|
|
66
|
+
export type FileShape = {
|
|
67
67
|
/** Stable within one manifest (`shape-1`, `shape-2`, …) so overlaps can name shapes. */
|
|
68
68
|
readonly id: string;
|
|
69
69
|
/** Directory the members share, relative to the analysis root. */
|
|
@@ -81,7 +81,7 @@ export interface FileShape {
|
|
|
81
81
|
readonly examplePaths: readonly string[];
|
|
82
82
|
/** Present once the header readout has run for this shape. */
|
|
83
83
|
readonly header?: HeaderReadout;
|
|
84
|
-
}
|
|
84
|
+
};
|
|
85
85
|
/**
|
|
86
86
|
* Value-set overlap between two shapes' variable positions, reported WITH its gaps.
|
|
87
87
|
*
|
|
@@ -89,7 +89,7 @@ export interface FileShape {
|
|
|
89
89
|
* text before comparing, and near-miss namings defeat it. Reported as evidence it is
|
|
90
90
|
* useful; asserted as a shared axis it is a guess a consumer cannot tell was guessed.
|
|
91
91
|
*/
|
|
92
|
-
export
|
|
92
|
+
export type ShapeValueOverlap = {
|
|
93
93
|
readonly shapes: readonly [string, string];
|
|
94
94
|
readonly positions: readonly [number, number];
|
|
95
95
|
readonly sharedValues: number;
|
|
@@ -99,13 +99,13 @@ export interface ShapeValueOverlap {
|
|
|
99
99
|
/** Bounded samples of the two gaps, so a near-complete correspondence names its misses. */
|
|
100
100
|
readonly onlyInFirstSample: readonly string[];
|
|
101
101
|
readonly onlyInSecondSample: readonly string[];
|
|
102
|
-
}
|
|
102
|
+
};
|
|
103
103
|
/** One member of the no-shared-structure aggregate. */
|
|
104
|
-
export
|
|
104
|
+
export type UnstructuredEntry = {
|
|
105
105
|
readonly path: string;
|
|
106
106
|
readonly size: number;
|
|
107
107
|
readonly format: string;
|
|
108
|
-
}
|
|
108
|
+
};
|
|
109
109
|
/**
|
|
110
110
|
* Files whose name structure matches no other file, in aggregate.
|
|
111
111
|
*
|
|
@@ -114,7 +114,7 @@ export interface UnstructuredEntry {
|
|
|
114
114
|
* capability exists to prevent. Whether these are notable singletons worth prose or
|
|
115
115
|
* an unclassified remainder is the agent's determination.
|
|
116
116
|
*/
|
|
117
|
-
export
|
|
117
|
+
export type UnstructuredFiles = {
|
|
118
118
|
readonly count: number;
|
|
119
119
|
readonly totalBytes: number;
|
|
120
120
|
/**
|
|
@@ -123,18 +123,18 @@ export interface UnstructuredFiles {
|
|
|
123
123
|
* one file each — under whatever large files failed to group.
|
|
124
124
|
*/
|
|
125
125
|
readonly sample: readonly UnstructuredEntry[];
|
|
126
|
-
}
|
|
126
|
+
};
|
|
127
127
|
/** How many files carry each detected format, across the whole scanned tree. */
|
|
128
|
-
export
|
|
128
|
+
export type FormatCount = {
|
|
129
129
|
readonly format: string;
|
|
130
130
|
readonly count: number;
|
|
131
|
-
}
|
|
131
|
+
};
|
|
132
132
|
/**
|
|
133
133
|
* The agent-facing manifest: bounded by construction, so injecting it into a briefing
|
|
134
134
|
* or returning it from `scan_inputs` costs a fixed amount of context whatever the tree
|
|
135
135
|
* size. The complete per-file list lives on {@link InputScan}, host-side.
|
|
136
136
|
*/
|
|
137
|
-
export
|
|
137
|
+
export type InputScanManifest = {
|
|
138
138
|
/** Path scanned, relative to the analysis root. */
|
|
139
139
|
readonly root: string;
|
|
140
140
|
readonly fileCount: number;
|
|
@@ -153,13 +153,13 @@ export interface InputScanManifest {
|
|
|
153
153
|
readonly shapes: readonly FileShape[];
|
|
154
154
|
readonly valueOverlaps: readonly ShapeValueOverlap[];
|
|
155
155
|
readonly unstructured: UnstructuredFiles;
|
|
156
|
-
}
|
|
156
|
+
};
|
|
157
157
|
/**
|
|
158
158
|
* The scan's full result. `files` is the complete enumeration — it stays host-side and
|
|
159
159
|
* backs coverage and the index projection; `manifest` is the bounded projection the
|
|
160
160
|
* agent reads.
|
|
161
161
|
*/
|
|
162
|
-
export
|
|
162
|
+
export type InputScan = {
|
|
163
163
|
readonly files: readonly ScannedFile[];
|
|
164
164
|
readonly manifest: InputScanManifest;
|
|
165
165
|
/**
|
|
@@ -169,4 +169,4 @@ export interface InputScan {
|
|
|
169
169
|
* tokenisation.
|
|
170
170
|
*/
|
|
171
171
|
readonly positionValues: ReadonlyMap<string, readonly (readonly string[])[]>;
|
|
172
|
-
}
|
|
172
|
+
};
|
|
@@ -7,16 +7,12 @@ export declare function sleep(ms: number): Promise<void>;
|
|
|
7
7
|
* Run each task with a cap on how many run at the same time, and give back the results in the order of
|
|
8
8
|
* the input.
|
|
9
9
|
*
|
|
10
|
-
* The
|
|
11
|
-
*
|
|
12
|
-
* is an array of thunks and not an array of promises, because a promise is already running when it is
|
|
13
|
-
* made, and a cap over a set of started promises caps nothing.
|
|
10
|
+
* The input is an array of thunks and not an array of promises, because a promise is already running when
|
|
11
|
+
* it is made, and a cap over a set of started promises caps nothing.
|
|
14
12
|
*
|
|
15
13
|
* `concurrency` must be a number at or above 1. p-queue throws a `TypeError` for any other value.
|
|
16
14
|
*
|
|
17
15
|
* The failure behavior is that of `Promise.all`. The first rejection rejects the whole call, and each
|
|
18
16
|
* task that the queue already started still runs to completion.
|
|
19
17
|
*/
|
|
20
|
-
export declare function allWithConcurrency<
|
|
21
|
-
-readonly [P in keyof T]: Awaited<T[P] extends () => infer R ? R : never>;
|
|
22
|
-
}>;
|
|
18
|
+
export declare function allWithConcurrency<R>(tasks: ReadonlyArray<() => R | PromiseLike<R>>, concurrency: number): Promise<Awaited<R>[]>;
|
package/dist/lib/async-utils.js
CHANGED
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Shared async utilities — sleep and a bounded-concurrency `Promise.all`.
|
|
3
3
|
*/
|
|
4
|
+
import { setTimeout as timerSleep } from "node:timers/promises";
|
|
4
5
|
import PQueue from "p-queue";
|
|
5
6
|
/** Promise-based delay. */
|
|
6
7
|
export function sleep(ms) {
|
|
7
|
-
return
|
|
8
|
+
return timerSleep(ms);
|
|
8
9
|
}
|
|
9
10
|
/**
|
|
10
11
|
* Run each task with a cap on how many run at the same time, and give back the results in the order of
|
|
11
12
|
* the input.
|
|
12
13
|
*
|
|
13
|
-
* The
|
|
14
|
-
*
|
|
15
|
-
* is an array of thunks and not an array of promises, because a promise is already running when it is
|
|
16
|
-
* made, and a cap over a set of started promises caps nothing.
|
|
14
|
+
* The input is an array of thunks and not an array of promises, because a promise is already running when
|
|
15
|
+
* it is made, and a cap over a set of started promises caps nothing.
|
|
17
16
|
*
|
|
18
17
|
* `concurrency` must be a number at or above 1. p-queue throws a `TypeError` for any other value.
|
|
19
18
|
*
|
|
@@ -22,8 +21,5 @@ export function sleep(ms) {
|
|
|
22
21
|
*/
|
|
23
22
|
export function allWithConcurrency(tasks, concurrency) {
|
|
24
23
|
const queue = new PQueue({ concurrency });
|
|
25
|
-
|
|
26
|
-
// above. The cast is sound because `addAll` maps the input array through `Promise.all`, which keeps
|
|
27
|
-
// the position of each task, and each element is the awaited return of the task at that position.
|
|
28
|
-
return queue.addAll(tasks);
|
|
24
|
+
return Promise.all(tasks.map((task) => queue.add(task)));
|
|
29
25
|
}
|
package/dist/lib/cache.js
CHANGED
|
@@ -27,7 +27,7 @@ export class BoundedTtlCache {
|
|
|
27
27
|
this.entries.set(key, { value, expiresAt: this.now() + ttlMs });
|
|
28
28
|
while (this.entries.size > this.maximum) {
|
|
29
29
|
const oldest = this.entries.keys().next().value;
|
|
30
|
-
if (oldest
|
|
30
|
+
if (typeof oldest !== "string")
|
|
31
31
|
break;
|
|
32
32
|
this.entries.delete(oldest);
|
|
33
33
|
}
|
package/dist/lib/chrome.d.ts
CHANGED
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
* A connection is lazy, and an endpoint connects again after a disconnect. Each endpoint also carries its own
|
|
9
9
|
* page gate. The gate bounds the pages that run at the same time against that one sidecar.
|
|
10
10
|
*/
|
|
11
|
-
import type {
|
|
11
|
+
import type { ConsoleMessage, HTTPRequest, MediaFeature, ScreenshotOptions, Viewport, WaitForOptions } from "puppeteer-core";
|
|
12
12
|
import type { Logger } from "./logger.js";
|
|
13
|
-
export
|
|
13
|
+
export type ChromeConfig = {
|
|
14
14
|
/** Operational logging seam; omitted falls back to no-op. */
|
|
15
15
|
readonly logger?: Logger;
|
|
16
16
|
/**
|
|
@@ -24,7 +24,7 @@ export interface ChromeConfig {
|
|
|
24
24
|
*/
|
|
25
25
|
readonly browserUrl?: string;
|
|
26
26
|
readonly maxPages?: number;
|
|
27
|
-
}
|
|
27
|
+
};
|
|
28
28
|
/**
|
|
29
29
|
* Whether the config names a browser to connect to. A composition with no endpoint has no eyes, and a
|
|
30
30
|
* caller reads that up front instead of failing once for each attempted connection.
|
|
@@ -36,7 +36,47 @@ export declare function hasBrowserUrl(cfg: ChromeConfig): cfg is ChromeConfig &
|
|
|
36
36
|
readonly browserUrl: string;
|
|
37
37
|
};
|
|
38
38
|
/** The connect operation of one endpoint. */
|
|
39
|
-
export type BrowserConnector = (browserUrl: string) => Promise<
|
|
39
|
+
export type BrowserConnector = (browserUrl: string) => Promise<ConnectedBrowser>;
|
|
40
|
+
/** A document area of one capture, in CSS pixels: the columns from `x`, and the rows from `fromY` to `toY`. */
|
|
41
|
+
export type CaptureArea = {
|
|
42
|
+
readonly x: number;
|
|
43
|
+
readonly width: number;
|
|
44
|
+
readonly fromY: number;
|
|
45
|
+
readonly toY: number;
|
|
46
|
+
};
|
|
47
|
+
/** The browser context that one look runs in. */
|
|
48
|
+
export type LookContext = {
|
|
49
|
+
newPage(): Promise<LookPage>;
|
|
50
|
+
close(): Promise<void>;
|
|
51
|
+
};
|
|
52
|
+
/** The page events that a look reads, with the payload each listener gets. */
|
|
53
|
+
export type LookPageEvents = {
|
|
54
|
+
console: ConsoleMessage;
|
|
55
|
+
pageerror: Error;
|
|
56
|
+
requestfailed: HTTPRequest;
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* The page surface that a look reads, with no vendor type in the shape. The evaluate member carries the
|
|
60
|
+
* three call forms the capture module drives, each with the return type that the read of the result needs.
|
|
61
|
+
*/
|
|
62
|
+
export type LookPage = {
|
|
63
|
+
on<Key extends keyof LookPageEvents>(event: Key, listener: (event: LookPageEvents[Key]) => void): unknown;
|
|
64
|
+
setViewport(viewport: Viewport): Promise<void>;
|
|
65
|
+
emulateMediaFeatures(features: MediaFeature[]): Promise<void>;
|
|
66
|
+
goto(url: string, options?: WaitForOptions): Promise<unknown>;
|
|
67
|
+
waitForSelector(selector: string, options?: WaitForOptions): Promise<unknown>;
|
|
68
|
+
screenshot(options: ScreenshotOptions): Promise<string | Uint8Array>;
|
|
69
|
+
evaluate(pageFunction: () => number): Promise<number | undefined>;
|
|
70
|
+
evaluate(pageFunction: (attribute: string, blockId: string, margin: number) => CaptureArea | null, attribute: string, blockId: string, margin: number): Promise<CaptureArea | null>;
|
|
71
|
+
evaluate(pageFunction: (...args: never[]) => unknown, ...args: unknown[]): Promise<unknown>;
|
|
72
|
+
};
|
|
73
|
+
/** The browser surface that the connection cache reads: the live flag, the socket, and the page factory. */
|
|
74
|
+
export type ConnectedBrowser = {
|
|
75
|
+
readonly connected: boolean;
|
|
76
|
+
on(event: "disconnected", listener: () => void): unknown;
|
|
77
|
+
wsEndpoint(): string;
|
|
78
|
+
createBrowserContext(): Promise<LookContext>;
|
|
79
|
+
};
|
|
40
80
|
/**
|
|
41
81
|
* Replace the connect operation, and give back the restore of the previous one.
|
|
42
82
|
*
|
|
@@ -48,5 +88,5 @@ export type BrowserConnector = (browserUrl: string) => Promise<Browser>;
|
|
|
48
88
|
* binding, thus a replacement never reaches a later file of the same test run.
|
|
49
89
|
*/
|
|
50
90
|
export declare function setBrowserConnector(next: BrowserConnector): () => void;
|
|
51
|
-
export declare function getBrowser(browserUrl?: string, injected?: Logger): Promise<
|
|
52
|
-
export declare function withPage<T>(cfg: ChromeConfig, fn: (page:
|
|
91
|
+
export declare function getBrowser(browserUrl?: string, injected?: Logger): Promise<ConnectedBrowser>;
|
|
92
|
+
export declare function withPage<T>(cfg: ChromeConfig, fn: (page: LookPage, context: LookContext) => Promise<T>): Promise<T>;
|
|
@@ -21,8 +21,8 @@ function prefixed(names, msg) {
|
|
|
21
21
|
function makeConsoleLogger(names, bindings) {
|
|
22
22
|
const emit = (level) => (msg, fields) => {
|
|
23
23
|
// The one sanctioned console site in the harness — writing to console is
|
|
24
|
-
// this function's entire contract. `no-console` exempts this file
|
|
25
|
-
// in
|
|
24
|
+
// this function's entire contract. `no-console` exempts this file and its test
|
|
25
|
+
// by path in oxlint.config.ts rather than by an inline disable here.
|
|
26
26
|
console[level](prefixed(names, msg), { ...bindings, ...fields });
|
|
27
27
|
};
|
|
28
28
|
return {
|
package/dist/lib/db-result.d.ts
CHANGED
|
@@ -18,13 +18,30 @@
|
|
|
18
18
|
* workflow-call seam (its `finally` only rolls back and releases).
|
|
19
19
|
*
|
|
20
20
|
* Consumers unwrap per their edge: HTTP routes `.match(...)`; DBOS step bodies
|
|
21
|
-
* `
|
|
22
|
-
*
|
|
21
|
+
* `unwrapOrThrow`; tool `execute` bodies `unwrapOrThrow` (the tool adapter of
|
|
22
|
+
* the loop turns a throw into an error tool result).
|
|
23
23
|
*/
|
|
24
24
|
import { ResultAsync } from "neverthrow";
|
|
25
|
-
import type { Pool, PoolClient } from "pg";
|
|
25
|
+
import type { Pool, PoolClient, QueryConfig, QueryResultRow } from "pg";
|
|
26
26
|
/** A query/mutation/connection accepted by the data-access layer. */
|
|
27
|
-
type Querier = Pool | PoolClient;
|
|
27
|
+
export type Querier = Pool | PoolClient;
|
|
28
|
+
/**
|
|
29
|
+
* What a transaction body reads of the client `withTransaction` opens: one
|
|
30
|
+
* structural `query`. A real `Pool` and `PoolClient` both satisfy it, and so
|
|
31
|
+
* does a test double that answers `query` alone.
|
|
32
|
+
*/
|
|
33
|
+
export type TransactionQuerier = {
|
|
34
|
+
query<R extends QueryResultRow = Record<string, unknown>>(queryTextOrConfig: string | QueryConfig, values?: unknown[]): Promise<{
|
|
35
|
+
rows: R[];
|
|
36
|
+
rowCount: number | null;
|
|
37
|
+
}>;
|
|
38
|
+
};
|
|
39
|
+
/** What `withTransaction` reads of the pool it borrows from: one `connect`. */
|
|
40
|
+
export type Connectable = {
|
|
41
|
+
connect(): Promise<TransactionQuerier & {
|
|
42
|
+
release(): void;
|
|
43
|
+
}>;
|
|
44
|
+
};
|
|
28
45
|
/**
|
|
29
46
|
* A storage-layer failure. Absence is deliberately NOT modelled: single-row
|
|
30
47
|
* reads return `ok(T | null)` and mutations against a missing row return
|
|
@@ -89,5 +106,4 @@ export declare function tryMutation<T>(op: string, fn: () => Promise<T>): Result
|
|
|
89
106
|
* transaction and releases the connection so a cancelled tx never poisons the
|
|
90
107
|
* pool.
|
|
91
108
|
*/
|
|
92
|
-
export declare function withTransaction<T>(pool:
|
|
93
|
-
export type { Querier };
|
|
109
|
+
export declare function withTransaction<T>(pool: Connectable, op: string, fn: (client: TransactionQuerier) => ResultAsync<T, DbError>): ResultAsync<T, DbError>;
|
package/dist/lib/db-result.js
CHANGED
|
@@ -18,9 +18,10 @@
|
|
|
18
18
|
* workflow-call seam (its `finally` only rolls back and releases).
|
|
19
19
|
*
|
|
20
20
|
* Consumers unwrap per their edge: HTTP routes `.match(...)`; DBOS step bodies
|
|
21
|
-
* `
|
|
22
|
-
*
|
|
21
|
+
* `unwrapOrThrow`; tool `execute` bodies `unwrapOrThrow` (the tool adapter of
|
|
22
|
+
* the loop turns a throw into an error tool result).
|
|
23
23
|
*/
|
|
24
|
+
import { z } from "zod";
|
|
24
25
|
import { ResultAsync, err, ok } from "neverthrow";
|
|
25
26
|
const _assertDomainError = true;
|
|
26
27
|
/** pg SQLSTATE classes that mean "connection is gone", mapped to `connection_failed`. */
|
|
@@ -41,21 +42,16 @@ const CONSTRAINT_SQLSTATE = {
|
|
|
41
42
|
"23502": "not_null",
|
|
42
43
|
"23514": "check",
|
|
43
44
|
};
|
|
45
|
+
const SqlstateCauseSchema = z.object({ code: z.string() });
|
|
44
46
|
function sqlstate(cause) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
return typeof code === "string" ? code : undefined;
|
|
48
|
-
}
|
|
49
|
-
return undefined;
|
|
47
|
+
const parsed = SqlstateCauseSchema.safeParse(cause);
|
|
48
|
+
return parsed.success ? parsed.data.code : undefined;
|
|
50
49
|
}
|
|
51
50
|
/** pg surfaces the tripped constraint's name on `.constraint`. */
|
|
51
|
+
const ConstraintCauseSchema = z.object({ constraint: z.string().min(1) });
|
|
52
52
|
function constraintName(cause) {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
if (typeof name === "string" && name.length > 0)
|
|
56
|
-
return name;
|
|
57
|
-
}
|
|
58
|
-
return "unknown";
|
|
53
|
+
const parsed = ConstraintCauseSchema.safeParse(cause);
|
|
54
|
+
return parsed.success ? parsed.data.constraint : "unknown";
|
|
59
55
|
}
|
|
60
56
|
/** A read throw → `connection_failed` for a connection SQLSTATE, else `query_failed`. */
|
|
61
57
|
function readError(op, cause) {
|