@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
|
@@ -139,6 +139,8 @@ function gzipWrapper(buf) {
|
|
|
139
139
|
if (buf.length < 12)
|
|
140
140
|
return "gzip";
|
|
141
141
|
const flags = buf[3];
|
|
142
|
+
if (flags === undefined)
|
|
143
|
+
return "gzip";
|
|
142
144
|
const hasExtra = (flags & 0x04) !== 0;
|
|
143
145
|
if (!hasExtra)
|
|
144
146
|
return "gzip";
|
|
@@ -209,7 +211,7 @@ function textFormat(buf) {
|
|
|
209
211
|
return "cel";
|
|
210
212
|
if (head.startsWith("track ") || head.startsWith("fixedStep") || head.startsWith("variableStep"))
|
|
211
213
|
return "wig";
|
|
212
|
-
if (
|
|
214
|
+
if (head.startsWith("<?xml")) {
|
|
213
215
|
if (head.includes("<indexedmzML") || head.includes("<mzML"))
|
|
214
216
|
return "mzml";
|
|
215
217
|
if (head.includes("<mzXML"))
|
|
@@ -239,8 +241,12 @@ export function extensionChain(fileName) {
|
|
|
239
241
|
/** The extension chain with any compression wrappers stripped from the tail. */
|
|
240
242
|
export function innerExtensions(extensions) {
|
|
241
243
|
const inner = [...extensions];
|
|
242
|
-
|
|
244
|
+
for (;;) {
|
|
245
|
+
const last = inner[inner.length - 1];
|
|
246
|
+
if (last === undefined || !WRAPPER_EXTENSIONS.has(last))
|
|
247
|
+
break;
|
|
243
248
|
inner.pop();
|
|
249
|
+
}
|
|
244
250
|
return inner;
|
|
245
251
|
}
|
|
246
252
|
/**
|
|
@@ -9,11 +9,11 @@
|
|
|
9
9
|
* The catalogue is a floor, not a closed set.
|
|
10
10
|
*/
|
|
11
11
|
import type { MemberFile } from "./set-types.js";
|
|
12
|
-
export
|
|
12
|
+
export type MarkerUnit = {
|
|
13
13
|
readonly label: string;
|
|
14
14
|
readonly root: string;
|
|
15
15
|
readonly members: readonly MemberFile[];
|
|
16
|
-
}
|
|
16
|
+
};
|
|
17
17
|
/** The marker-claimed units of a tree, and the members no marker claimed. */
|
|
18
18
|
export declare function applyMarkers(files: readonly MemberFile[]): {
|
|
19
19
|
units: MarkerUnit[];
|
|
@@ -9,11 +9,16 @@
|
|
|
9
9
|
* The catalogue is a floor, not a closed set.
|
|
10
10
|
*/
|
|
11
11
|
import { basenameOf, dirnameOf } from "./tokens.js";
|
|
12
|
+
import { presentFirst } from "../lib/present.js";
|
|
12
13
|
/** A marker whose presence claims the directory it sits in, and nothing below it. */
|
|
13
14
|
const DIRECTORY_MARKERS = [
|
|
14
15
|
{
|
|
15
16
|
label: "feature-barcode-matrix",
|
|
16
|
-
requires: [
|
|
17
|
+
requires: [
|
|
18
|
+
nameIs("matrix.mtx", "matrix.mtx.gz"),
|
|
19
|
+
nameIs("barcodes.tsv", "barcodes.tsv.gz"),
|
|
20
|
+
nameIs("features.tsv", "features.tsv.gz", "genes.tsv", "genes.tsv.gz"),
|
|
21
|
+
],
|
|
17
22
|
},
|
|
18
23
|
];
|
|
19
24
|
/**
|
|
@@ -25,11 +30,15 @@ const DIRECTORY_MARKERS = [
|
|
|
25
30
|
*/
|
|
26
31
|
const SUBTREE_MARKERS = [
|
|
27
32
|
{ label: "study-manifest", name: "meta_study.txt" },
|
|
28
|
-
{ label: "dataset-descriptor", name: "dataset_description.json", corroborate:
|
|
33
|
+
{ label: "dataset-descriptor", name: "dataset_description.json", corroborate: (segment) => segment.startsWith("sub-") },
|
|
29
34
|
];
|
|
30
|
-
function
|
|
35
|
+
function nameIs(...names) {
|
|
36
|
+
const known = new Set(names);
|
|
37
|
+
return (name) => known.has(name);
|
|
38
|
+
}
|
|
39
|
+
function hasCorroboratingChild(files, root, matches) {
|
|
31
40
|
const prefix = root === "" ? "" : `${root}/`;
|
|
32
|
-
return files.some((file) => file.path.startsWith(prefix) &&
|
|
41
|
+
return files.some((file) => file.path.startsWith(prefix) && matches(presentFirst(file.path.slice(prefix.length).split("/"), "the first path segment")));
|
|
33
42
|
}
|
|
34
43
|
/** The marker-claimed units of a tree, and the members no marker claimed. */
|
|
35
44
|
export function applyMarkers(files) {
|
|
@@ -47,7 +56,7 @@ export function applyMarkers(files) {
|
|
|
47
56
|
for (const [directory, members] of byDirectory) {
|
|
48
57
|
const names = members.map((member) => basenameOf(member.path));
|
|
49
58
|
for (const marker of DIRECTORY_MARKERS) {
|
|
50
|
-
if (marker.requires.every((
|
|
59
|
+
if (marker.requires.every((matches) => names.some((name) => matches(name))))
|
|
51
60
|
directories.push({ label: marker.label, root: directory });
|
|
52
61
|
}
|
|
53
62
|
for (const marker of SUBTREE_MARKERS) {
|
|
@@ -43,13 +43,13 @@ export declare const MAX_CROSSED_SLOTS = 3;
|
|
|
43
43
|
* a full 24-member crossing or 8 members each at one timepoint, and the two are different
|
|
44
44
|
* experimental designs. The margins alone cannot tell them apart.
|
|
45
45
|
*/
|
|
46
|
-
export
|
|
46
|
+
export type SetCrossing = {
|
|
47
47
|
readonly setId: string;
|
|
48
48
|
readonly slotIds: readonly string[];
|
|
49
49
|
readonly observedCombinations: number;
|
|
50
50
|
/** The full cross product, or `null` when it is past counting. */
|
|
51
51
|
readonly possibleCombinations: number | null;
|
|
52
|
-
}
|
|
52
|
+
};
|
|
53
53
|
/**
|
|
54
54
|
* Measured overlap between two sets' slots, with its gaps.
|
|
55
55
|
*
|
|
@@ -57,7 +57,7 @@ export interface SetCrossing {
|
|
|
57
57
|
* dimension plausible; the values present in one and absent from the other are what make
|
|
58
58
|
* it checkable.
|
|
59
59
|
*/
|
|
60
|
-
export
|
|
60
|
+
export type SlotCorrespondence = {
|
|
61
61
|
readonly sets: readonly [string, string];
|
|
62
62
|
readonly slots: readonly [string, string];
|
|
63
63
|
readonly shared: number;
|
|
@@ -66,15 +66,15 @@ export interface SlotCorrespondence {
|
|
|
66
66
|
readonly sharedSample: readonly string[];
|
|
67
67
|
readonly onlyInFirstSample: readonly string[];
|
|
68
68
|
readonly onlyInSecondSample: readonly string[];
|
|
69
|
-
}
|
|
69
|
+
};
|
|
70
70
|
/** The tail the menu did not list, in aggregate. */
|
|
71
|
-
export
|
|
71
|
+
export type UnlistedSets = {
|
|
72
72
|
readonly sets: number;
|
|
73
73
|
readonly members: number;
|
|
74
74
|
readonly files: number;
|
|
75
75
|
readonly totalBytes: number;
|
|
76
|
-
}
|
|
77
|
-
export
|
|
76
|
+
};
|
|
77
|
+
export type SetMenu = {
|
|
78
78
|
readonly fileCount: number;
|
|
79
79
|
readonly keptFileCount: number;
|
|
80
80
|
/** The addressable entries. An operation may name one of these ids and no other. */
|
|
@@ -95,7 +95,7 @@ export interface SetMenu {
|
|
|
95
95
|
readonly truncated: boolean;
|
|
96
96
|
/** Leftovers whose header readout was elided by the readout budget. */
|
|
97
97
|
readonly readoutsElided: number;
|
|
98
|
-
}
|
|
98
|
+
};
|
|
99
99
|
/**
|
|
100
100
|
* Slot overlap across the listed sets, strongest first.
|
|
101
101
|
*
|
|
@@ -110,12 +110,12 @@ export declare function buildCorrespondences(detected: DetectedSets, sets: reado
|
|
|
110
110
|
* which is the whole content of the observation.
|
|
111
111
|
*/
|
|
112
112
|
export declare function buildCrossings(detected: DetectedSets, sets: readonly DetectedSet[]): SetCrossing[];
|
|
113
|
-
export
|
|
113
|
+
export type BuildSetMenuOptions = {
|
|
114
114
|
readonly headers?: ReadonlyMap<string, HeaderReadout>;
|
|
115
115
|
/** The walk stopped at its ceiling; see {@link SetMenu.truncated}. */
|
|
116
116
|
readonly truncated?: boolean;
|
|
117
117
|
readonly readoutsElided?: number;
|
|
118
|
-
}
|
|
118
|
+
};
|
|
119
119
|
/** Project a scan into the bounded menu the agent authors against. */
|
|
120
120
|
export declare function buildSetMenu(detected: DetectedSets, options?: BuildSetMenuOptions): SetMenu;
|
|
121
121
|
/**
|
package/dist/input-scan/menu.js
CHANGED
|
Binary file
|
|
@@ -10,8 +10,8 @@ import type { QuarantineReason, QuarantineSummary } from "./set-types.js";
|
|
|
10
10
|
import type { ScannedFile } from "./types.js";
|
|
11
11
|
/** The rule a path trips, or `undefined` when it trips none. */
|
|
12
12
|
export declare function quarantineReason(path: string): QuarantineReason | undefined;
|
|
13
|
-
export
|
|
13
|
+
export type QuarantineResult = {
|
|
14
14
|
readonly kept: readonly ScannedFile[];
|
|
15
15
|
readonly summary: QuarantineSummary;
|
|
16
|
-
}
|
|
16
|
+
};
|
|
17
17
|
export declare function quarantine(files: readonly ScannedFile[]): QuarantineResult;
|
|
@@ -7,38 +7,43 @@
|
|
|
7
7
|
* be reported: a wrongly quarantined file that no one can see is worse than the junk.
|
|
8
8
|
*/
|
|
9
9
|
import { MAX_QUARANTINE_SAMPLE } from "./tuning.js";
|
|
10
|
+
import { presentLast } from "../lib/present.js";
|
|
10
11
|
const EXACT_JUNK_NAMES = new Set([".DS_Store", "Thumbs.db", "desktop.ini"]);
|
|
12
|
+
// oxlint-disable-next-line eslint-js/no-restricted-syntax -- LibreOffice-style atomic writes suffix `.tmp-` with a full UUID; the dashed hex groups are the shape.
|
|
13
|
+
const TMP_UUID_SUFFIX = /\.tmp-[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}$/;
|
|
14
|
+
// oxlint-disable-next-line eslint-js/no-restricted-syntax -- the same writer without a UUID: `.tmp-` and at least eight hex digits.
|
|
15
|
+
const TMP_HEX_SUFFIX = /\.tmp-[0-9a-fA-F]{8,}$/;
|
|
11
16
|
const NAME_RULES = [
|
|
12
|
-
{
|
|
13
|
-
{
|
|
14
|
-
{
|
|
15
|
-
{
|
|
16
|
-
{
|
|
17
|
-
{
|
|
18
|
-
{
|
|
19
|
-
{
|
|
20
|
-
{
|
|
21
|
-
{
|
|
22
|
-
{
|
|
23
|
-
{
|
|
24
|
-
{
|
|
17
|
+
{ matches: (name) => name.startsWith("._"), reason: "os-junk" },
|
|
18
|
+
{ matches: (name) => name.startsWith("~$"), reason: "editor-temp" },
|
|
19
|
+
{ matches: (name) => name.endsWith("~"), reason: "editor-temp" },
|
|
20
|
+
{ matches: (name) => name.startsWith(".~lock.") && name.endsWith("#"), reason: "editor-temp" },
|
|
21
|
+
{ matches: (name) => name.endsWith(".swp"), reason: "editor-temp" },
|
|
22
|
+
{ matches: (name) => name.endsWith(".part"), reason: "partial-download" },
|
|
23
|
+
{ matches: (name) => name.endsWith(".filepart"), reason: "partial-download" },
|
|
24
|
+
{ matches: (name) => name.endsWith(".crdownload"), reason: "partial-download" },
|
|
25
|
+
{ matches: (name) => name.endsWith(".download"), reason: "partial-download" },
|
|
26
|
+
{ matches: (name) => name.endsWith(".tmp"), reason: "atomic-write-temp" },
|
|
27
|
+
{ matches: (name) => name.startsWith(".nfs"), reason: "atomic-write-temp" },
|
|
28
|
+
{ matches: (name) => TMP_UUID_SUFFIX.test(name), reason: "atomic-write-temp" },
|
|
29
|
+
{ matches: (name) => TMP_HEX_SUFFIX.test(name), reason: "atomic-write-temp" },
|
|
25
30
|
];
|
|
26
31
|
const SEGMENT_RULES = [
|
|
27
|
-
{
|
|
28
|
-
{
|
|
32
|
+
{ matches: (segment) => segment === "__MACOSX", reason: "os-junk" },
|
|
33
|
+
{ matches: (segment) => segment.startsWith(".Trash-"), reason: "os-junk" },
|
|
29
34
|
];
|
|
30
35
|
/** The rule a path trips, or `undefined` when it trips none. */
|
|
31
36
|
export function quarantineReason(path) {
|
|
32
37
|
const segments = path.split("/");
|
|
33
|
-
const name = segments
|
|
38
|
+
const name = presentLast(segments, "the path name");
|
|
34
39
|
if (EXACT_JUNK_NAMES.has(name))
|
|
35
40
|
return "os-junk";
|
|
36
41
|
for (const rule of NAME_RULES)
|
|
37
|
-
if (rule.
|
|
42
|
+
if (rule.matches(name))
|
|
38
43
|
return rule.reason;
|
|
39
44
|
for (const segment of segments)
|
|
40
45
|
for (const rule of SEGMENT_RULES)
|
|
41
|
-
if (rule.
|
|
46
|
+
if (rule.matches(segment))
|
|
42
47
|
return rule.reason;
|
|
43
48
|
return undefined;
|
|
44
49
|
}
|
|
@@ -19,11 +19,11 @@ import type { DetectedSet, DetectedSets, MemberFile, ReadoutSelection } from "./
|
|
|
19
19
|
*/
|
|
20
20
|
export declare const MAX_LEFTOVER_READOUTS = 64;
|
|
21
21
|
/** A file the selection named, with what the scan already knows about its bytes. */
|
|
22
|
-
export
|
|
22
|
+
export type ReadoutTarget = {
|
|
23
23
|
readonly path: string;
|
|
24
24
|
readonly format: string;
|
|
25
25
|
readonly wrapper?: string;
|
|
26
|
-
}
|
|
26
|
+
};
|
|
27
27
|
export declare function selectReadouts(sets: readonly DetectedSet[], leftovers: readonly MemberFile[]): ReadoutSelection;
|
|
28
28
|
/**
|
|
29
29
|
* The selection as readout targets. The format the scan detected rides along, so the
|
|
@@ -55,7 +55,7 @@ export function readoutTargets(detected) {
|
|
|
55
55
|
if (!member || seen.has(path))
|
|
56
56
|
continue;
|
|
57
57
|
seen.add(path);
|
|
58
|
-
targets.push({ path, format: member.format,
|
|
58
|
+
targets.push({ path, format: member.format, wrapper: member.wrapper });
|
|
59
59
|
}
|
|
60
60
|
return targets;
|
|
61
61
|
}
|
|
@@ -14,11 +14,11 @@ export declare const READOUT_PREFIX_BYTES = 262144;
|
|
|
14
14
|
/** Cap on the text window a readout inspects, whether decompressed or raw. */
|
|
15
15
|
export declare const READOUT_TEXT_BYTES = 262144;
|
|
16
16
|
export type ReadoutFields = Record<string, string | number | boolean>;
|
|
17
|
-
export
|
|
17
|
+
export type PrefixReadout = {
|
|
18
18
|
readonly fields: ReadoutFields;
|
|
19
19
|
/** Why the fields are thin or empty. Present alongside whatever WAS read. */
|
|
20
20
|
readonly unavailable?: string;
|
|
21
|
-
}
|
|
21
|
+
};
|
|
22
22
|
/**
|
|
23
23
|
* Read what a bounded prefix can say about a file.
|
|
24
24
|
*
|
|
@@ -10,6 +10,12 @@
|
|
|
10
10
|
* `enrich.ts`), which is what makes the whole surface testable from synthetic bytes.
|
|
11
11
|
*/
|
|
12
12
|
import { constants as zlibConstants, createGunzip, createZstdDecompress } from "node:zlib";
|
|
13
|
+
import { z } from "zod";
|
|
14
|
+
import { parseJsonAs } from "../lib/parse-json.js";
|
|
15
|
+
import { isUnknownArray } from "../lib/unknown-array.js";
|
|
16
|
+
import { parseUnknownRecord } from "../lib/unknown-containers.js";
|
|
17
|
+
import { collapseWhitespace, splitLines } from "../lib/text.js";
|
|
18
|
+
import { presentAt, presentFirst } from "../lib/present.js";
|
|
13
19
|
/** Bytes read from each file. The readout's whole per-file I/O budget. */
|
|
14
20
|
export const READOUT_PREFIX_BYTES = 262_144;
|
|
15
21
|
/** Cap on the text window a readout inspects, whether decompressed or raw. */
|
|
@@ -110,7 +116,7 @@ function decodeText(buf, format) {
|
|
|
110
116
|
return textFields(buf.subarray(0, READOUT_TEXT_BYTES).toString("utf8"), format);
|
|
111
117
|
}
|
|
112
118
|
function textFields(text, format) {
|
|
113
|
-
const lines = text
|
|
119
|
+
const lines = splitLines(text).filter((line) => line.trim() !== "");
|
|
114
120
|
const head = lines[0];
|
|
115
121
|
if (head === undefined)
|
|
116
122
|
return { fields: {}, unavailable: "no text in the prefix" };
|
|
@@ -127,7 +133,7 @@ function textFields(text, format) {
|
|
|
127
133
|
if (head.startsWith("@HD") || head.startsWith("@SQ"))
|
|
128
134
|
return samFields(lines);
|
|
129
135
|
if (head.startsWith("@") && lines.length > 1)
|
|
130
|
-
return { fields: { firstRecord: clip(head.slice(1), MAX_RECORD_CHARS), readLength: lines
|
|
136
|
+
return { fields: { firstRecord: clip(head.slice(1), MAX_RECORD_CHARS), readLength: presentAt(lines, 1, "prefix lines").length } };
|
|
131
137
|
return delimitedFields(lines) ?? { fields: { firstLine: clip(head, MAX_LINE_CHARS), linesInPrefix: lines.length } };
|
|
132
138
|
}
|
|
133
139
|
/**
|
|
@@ -163,14 +169,16 @@ function metaHeaderFields(lines) {
|
|
|
163
169
|
}
|
|
164
170
|
return { fields };
|
|
165
171
|
}
|
|
172
|
+
// oxlint-disable-next-line eslint-js/no-restricted-syntax -- the SAM header sort order: `SO:<value>` at the line start or after a tab, ending at the next tab.
|
|
173
|
+
const SAM_SORT_ORDER_FIELD = /(?:^|\t)SO:([^\t]+)/;
|
|
166
174
|
function samFields(lines) {
|
|
167
175
|
const fields = {
|
|
168
176
|
referenceSequences: countPrefixed(lines, "@SQ"),
|
|
169
177
|
readGroups: countPrefixed(lines, "@RG"),
|
|
170
178
|
};
|
|
171
|
-
const sortOrder =
|
|
179
|
+
const sortOrder = SAM_SORT_ORDER_FIELD.exec(lines.find((line) => line.startsWith("@HD")) ?? "");
|
|
172
180
|
if (sortOrder)
|
|
173
|
-
fields.sortOrder = clip(sortOrder
|
|
181
|
+
fields.sortOrder = clip(presentAt(sortOrder, 1, "the SO: capture group"), 20);
|
|
174
182
|
return { fields };
|
|
175
183
|
}
|
|
176
184
|
const DELIMITERS = [
|
|
@@ -200,7 +208,7 @@ function delimitedFields(lines) {
|
|
|
200
208
|
const headerIndex = lines.findIndex((line) => !line.startsWith("#"));
|
|
201
209
|
if (headerIndex < 0)
|
|
202
210
|
return undefined;
|
|
203
|
-
const header = lines
|
|
211
|
+
const header = presentAt(lines, headerIndex, "the header line");
|
|
204
212
|
const delimiter = sniffDelimiter(header);
|
|
205
213
|
if (delimiter === undefined)
|
|
206
214
|
return undefined;
|
|
@@ -228,10 +236,11 @@ function looksLikeHeader(columns) {
|
|
|
228
236
|
}
|
|
229
237
|
function splitDelimited(line, delimiter) {
|
|
230
238
|
const cells = [];
|
|
239
|
+
const chars = line.split("");
|
|
231
240
|
let current = "";
|
|
232
241
|
let quoted = false;
|
|
233
242
|
for (let index = 0; index < line.length; index++) {
|
|
234
|
-
const char = line
|
|
243
|
+
const char = presentAt(chars, index, "line characters");
|
|
235
244
|
if (quoted) {
|
|
236
245
|
if (char !== '"')
|
|
237
246
|
current += char;
|
|
@@ -257,18 +266,17 @@ function splitDelimited(line, delimiter) {
|
|
|
257
266
|
}
|
|
258
267
|
function jsonFields(text, lines) {
|
|
259
268
|
const whole = parseJson(text.slice(0, READOUT_TEXT_BYTES));
|
|
260
|
-
if (
|
|
269
|
+
if (isUnknownArray(whole)) {
|
|
261
270
|
const first = whole[0];
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
},
|
|
268
|
-
};
|
|
271
|
+
const fields = { jsonType: "array", elementCount: whole.length };
|
|
272
|
+
const firstRecord = parseUnknownRecord(first);
|
|
273
|
+
if (firstRecord !== undefined)
|
|
274
|
+
fields.firstElementKeys = joinKeys(Object.keys(firstRecord));
|
|
275
|
+
return { fields };
|
|
269
276
|
}
|
|
270
|
-
|
|
271
|
-
|
|
277
|
+
const wholeRecord = parseUnknownRecord(whole);
|
|
278
|
+
if (wholeRecord !== undefined) {
|
|
279
|
+
const keys = Object.keys(wholeRecord);
|
|
272
280
|
return { fields: { jsonType: "object", keyCount: keys.length, keys: joinKeys(keys) } };
|
|
273
281
|
}
|
|
274
282
|
if (whole !== undefined)
|
|
@@ -277,35 +285,43 @@ function jsonFields(text, lines) {
|
|
|
277
285
|
const candidates = lines.slice(0, MAX_META_LINES);
|
|
278
286
|
const parsed = candidates.map((line) => parseJson(line));
|
|
279
287
|
const complete = parsed.filter((value) => value !== undefined);
|
|
280
|
-
const record = parsed.
|
|
288
|
+
const record = parsed.reduce((found, value) => found ?? parseUnknownRecord(value), undefined);
|
|
281
289
|
if (record !== undefined && complete.length >= Math.max(1, candidates.length - 1)) {
|
|
282
290
|
return { fields: { jsonType: "json-lines", recordsInPrefix: lines.length, keys: joinKeys(Object.keys(record)) } };
|
|
283
291
|
}
|
|
284
|
-
return { fields: { firstLine: clip(lines
|
|
292
|
+
return { fields: { firstLine: clip(presentFirst(lines, "prefix lines"), MAX_LINE_CHARS) }, unavailable: "JSON document extends past the readout prefix" };
|
|
285
293
|
}
|
|
294
|
+
// oxlint-disable-next-line eslint-js/no-restricted-syntax -- a top-level YAML key: an identifier from the line start, then `:` and end of line or whitespace.
|
|
295
|
+
const YAML_TOP_LEVEL_KEY = /^([A-Za-z_][\w.-]*):(\s|$)/;
|
|
286
296
|
/** Top-level keys, read positionally: an unindented `key:` line opens a mapping entry. */
|
|
287
297
|
function yamlFields(lines) {
|
|
288
298
|
const keys = [];
|
|
289
299
|
for (const line of lines.slice(0, MAX_META_LINES)) {
|
|
290
|
-
const match =
|
|
300
|
+
const match = YAML_TOP_LEVEL_KEY.exec(line);
|
|
291
301
|
if (match)
|
|
292
|
-
keys.push(match
|
|
302
|
+
keys.push(presentAt(match, 1, "the yaml key capture"));
|
|
293
303
|
}
|
|
294
304
|
const documents = lines.filter((line) => line.trim() === "---").length;
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
linesInPrefix: lines.length,
|
|
300
|
-
...(documents > 0 ? { documentSeparators: documents } : {}),
|
|
301
|
-
},
|
|
305
|
+
const fields = {
|
|
306
|
+
topLevelKeyCount: keys.length,
|
|
307
|
+
topLevelKeys: joinKeys(keys),
|
|
308
|
+
linesInPrefix: lines.length,
|
|
302
309
|
};
|
|
310
|
+
if (documents > 0)
|
|
311
|
+
fields.documentSeparators = documents;
|
|
312
|
+
return { fields };
|
|
303
313
|
}
|
|
314
|
+
// oxlint-disable-next-line eslint-js/no-restricted-syntax -- an ATX heading opens with one to six `#` and a whitespace character.
|
|
315
|
+
const MARKDOWN_HEADING = /^#{1,6}\s/;
|
|
304
316
|
function markdownFields(lines) {
|
|
305
|
-
const headings = lines.filter((line) =>
|
|
317
|
+
const headings = lines.filter((line) => MARKDOWN_HEADING.test(line));
|
|
318
|
+
const first = headings[0] ?? presentFirst(lines, "prefix lines");
|
|
319
|
+
let markers = 0;
|
|
320
|
+
while (first.charAt(markers) === "#")
|
|
321
|
+
markers++;
|
|
306
322
|
return {
|
|
307
323
|
fields: {
|
|
308
|
-
title: clip((
|
|
324
|
+
title: clip(first.slice(markers).trimStart(), MAX_LINE_CHARS),
|
|
309
325
|
headings: headings.length,
|
|
310
326
|
linesInPrefix: lines.length,
|
|
311
327
|
},
|
|
@@ -313,15 +329,12 @@ function markdownFields(lines) {
|
|
|
313
329
|
}
|
|
314
330
|
function parseJson(text) {
|
|
315
331
|
try {
|
|
316
|
-
return
|
|
332
|
+
return parseJsonAs(text, z.json());
|
|
317
333
|
}
|
|
318
334
|
catch {
|
|
319
335
|
return undefined;
|
|
320
336
|
}
|
|
321
337
|
}
|
|
322
|
-
function isRecord(value) {
|
|
323
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
324
|
-
}
|
|
325
338
|
function joinKeys(keys) {
|
|
326
339
|
return clip(keys
|
|
327
340
|
.slice(0, MAX_COLUMNS_REPORTED)
|
|
@@ -332,5 +345,5 @@ function countPrefixed(lines, prefix) {
|
|
|
332
345
|
return lines.filter((line) => line.startsWith(prefix)).length;
|
|
333
346
|
}
|
|
334
347
|
function clip(text, limit) {
|
|
335
|
-
return text
|
|
348
|
+
return collapseWhitespace(text).slice(0, limit);
|
|
336
349
|
}
|
|
@@ -26,7 +26,7 @@ import type { InputScan, InputScanManifest, ScannedFile } from "./types.js";
|
|
|
26
26
|
* capability exists to remove.
|
|
27
27
|
*/
|
|
28
28
|
export declare const MAX_SCANNED_FILES = 100000;
|
|
29
|
-
export
|
|
29
|
+
export type ScanInputTreeArgs = {
|
|
30
30
|
readonly session: AgentSession;
|
|
31
31
|
readonly fs: WorkspaceFilesystem;
|
|
32
32
|
/** Directory to scan, relative to the analysis root (e.g. `data/inputs`). */
|
|
@@ -34,7 +34,7 @@ export interface ScanInputTreeArgs {
|
|
|
34
34
|
/** Walk ceiling; defaults to {@link MAX_SCANNED_FILES}. */
|
|
35
35
|
readonly limit?: number;
|
|
36
36
|
readonly signal?: AbortSignal;
|
|
37
|
-
}
|
|
37
|
+
};
|
|
38
38
|
/** Assemble a manifest from an already-walked file set. Pure — the seam of the unit tests. */
|
|
39
39
|
export declare function buildManifest(root: string, files: readonly ScannedFile[], truncated: boolean, limit?: number): InputScan;
|
|
40
40
|
/** Walk a staged input tree and observe its shapes. No model, no container. */
|
package/dist/input-scan/scan.js
CHANGED
|
@@ -36,6 +36,8 @@ async function walk(args) {
|
|
|
36
36
|
while (queue.length > 0) {
|
|
37
37
|
signal?.throwIfAborted();
|
|
38
38
|
const dir = queue.shift();
|
|
39
|
+
if (dir === undefined)
|
|
40
|
+
break;
|
|
39
41
|
const listing = unwrapOrThrow(await fs.list({ session, path: dir }));
|
|
40
42
|
// A directory that vanished mid-walk, or one the seam refuses, is not a scan
|
|
41
43
|
// failure — the tree is being described, not validated.
|
|
@@ -60,7 +62,7 @@ async function walk(args) {
|
|
|
60
62
|
size: entry.size ?? 0,
|
|
61
63
|
extensions,
|
|
62
64
|
format,
|
|
63
|
-
|
|
65
|
+
wrapper,
|
|
64
66
|
});
|
|
65
67
|
}
|
|
66
68
|
}
|
|
@@ -75,18 +77,18 @@ function formatCensus(files) {
|
|
|
75
77
|
/** Assemble a manifest from an already-walked file set. Pure — the seam of the unit tests. */
|
|
76
78
|
export function buildManifest(root, files, truncated, limit = MAX_SCANNED_FILES) {
|
|
77
79
|
const observed = observeShapes(files);
|
|
78
|
-
const
|
|
80
|
+
const base = {
|
|
79
81
|
root,
|
|
80
82
|
fileCount: files.length,
|
|
81
83
|
totalBytes: files.reduce((sum, f) => sum + f.size, 0),
|
|
82
84
|
truncated,
|
|
83
|
-
...(truncated ? { scanLimit: limit } : {}),
|
|
84
85
|
shapesTruncated: observed.shapesTruncated,
|
|
85
86
|
formats: formatCensus(files),
|
|
86
87
|
shapes: observed.shapes,
|
|
87
88
|
valueOverlaps: observed.valueOverlaps,
|
|
88
89
|
unstructured: observed.unstructured,
|
|
89
90
|
};
|
|
91
|
+
const manifest = truncated ? { ...base, scanLimit: limit } : base;
|
|
90
92
|
return { files, manifest, positionValues: observed.positionValues };
|
|
91
93
|
}
|
|
92
94
|
/** Walk a staged input tree and observe its shapes. No model, no container. */
|
|
@@ -105,7 +107,7 @@ export function formatBytes(bytes) {
|
|
|
105
107
|
value /= 1024;
|
|
106
108
|
unit++;
|
|
107
109
|
}
|
|
108
|
-
return `${value < 10 ? value.toFixed(1) : Math.round(value)} ${units[unit]}`;
|
|
110
|
+
return `${value < 10 ? value.toFixed(1) : Math.round(value)} ${String(units[unit])}`;
|
|
109
111
|
}
|
|
110
112
|
/**
|
|
111
113
|
* Render a manifest for a briefing or a tool result.
|
|
@@ -145,7 +147,7 @@ export function renderInputScanManifest(manifest) {
|
|
|
145
147
|
}
|
|
146
148
|
if (shape.header) {
|
|
147
149
|
const fields = Object.entries(shape.header.fields)
|
|
148
|
-
.map(([key, value]) => `${key}=${value}`)
|
|
150
|
+
.map(([key, value]) => `${key}=${String(value)}`)
|
|
149
151
|
.join(", ");
|
|
150
152
|
lines.push(` - header (${shape.header.path}): ${fields || shape.header.unavailable || "no fields read"}`);
|
|
151
153
|
}
|