@inflexa-ai/harness 0.45.0 → 0.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -3
- package/dist/agents/conversation-agent.d.ts +19 -3
- package/dist/agents/conversation-agent.js +49 -30
- package/dist/agents/report-session-agent.d.ts +15 -15
- package/dist/agents/report-session-agent.js +23 -15
- package/dist/agents/sandbox/index.d.ts +1 -1
- package/dist/agents/sandbox/index.js +1 -1
- package/dist/agents/sandbox/shared.d.ts +35 -16
- package/dist/agents/sandbox/shared.js +63 -24
- package/dist/agents/sandbox/translational-safety-agent.js +26 -0
- package/dist/agents/sandbox/types.d.ts +26 -3
- package/dist/agents/sandbox/validate-skills.d.ts +2 -2
- package/dist/agents/sandbox/validate-skills.js +3 -1
- package/dist/agents/sandbox-catalog.d.ts +16 -2
- package/dist/agents/sandbox-catalog.js +22 -3
- package/dist/agents/system-prompt.d.ts +2 -2
- package/dist/app/approve-plan.d.ts +5 -2
- package/dist/app/approve-plan.js +1 -1
- package/dist/app/chat-turn-workflow.d.ts +114 -0
- package/dist/app/chat-turn-workflow.js +307 -0
- package/dist/app/chat-turn.d.ts +85 -57
- package/dist/app/chat-turn.js +125 -99
- package/dist/app/data-profile-orientation.js +10 -8
- package/dist/app/data-profile-view.d.ts +4 -4
- package/dist/app/data-profile-view.js +9 -8
- package/dist/app/in-process-turn.d.ts +42 -0
- package/dist/app/in-process-turn.js +139 -0
- package/dist/app/message-assembly.d.ts +10 -4
- package/dist/app/message-assembly.js +13 -8
- package/dist/app/report-session-runtime.d.ts +4 -4
- package/dist/app/report-session-runtime.js +36 -21
- package/dist/app/spawn-report-session.d.ts +33 -28
- package/dist/app/spawn-report-session.js +25 -40
- package/dist/app/synthesize-run.d.ts +22 -16
- package/dist/app/synthesize-run.js +41 -35
- package/dist/app/work.d.ts +96 -0
- package/dist/app/work.js +147 -0
- package/dist/auth/local-auth-context.d.ts +1 -3
- package/dist/auth/local-auth-context.js +1 -3
- package/dist/auth/local-run-authorizer.d.ts +1 -1
- package/dist/auth/local-run-authorizer.js +5 -3
- package/dist/auth/types.d.ts +26 -26
- package/dist/billing/cached-resolver.d.ts +4 -4
- package/dist/billing/run-charge.d.ts +5 -8
- package/dist/billing/run-charge.js +2 -2
- package/dist/billing/usage-recorder.d.ts +9 -9
- package/dist/citations/aggregate.js +1 -1
- package/dist/citations/clients/arxiv.d.ts +2 -2
- package/dist/citations/clients/arxiv.js +12 -4
- package/dist/citations/clients/common.js +4 -2
- package/dist/citations/clients/crossref.d.ts +2 -2
- package/dist/citations/clients/crossref.js +37 -37
- package/dist/citations/clients/doi-registry.js +15 -16
- package/dist/citations/clients/pubmed.d.ts +2 -2
- package/dist/citations/clients/pubmed.js +20 -13
- package/dist/citations/clients/semantic-scholar.d.ts +2 -2
- package/dist/citations/clients/semantic-scholar.js +9 -9
- package/dist/citations/compare.js +2 -2
- package/dist/citations/match.d.ts +2 -2
- package/dist/citations/match.js +12 -7
- package/dist/citations/normalize.js +35 -26
- package/dist/citations/plan.js +6 -2
- package/dist/citations/resolve.d.ts +6 -6
- package/dist/citations/resolve.js +34 -25
- package/dist/citations/types.d.ts +77 -77
- package/dist/config/environment-stores.d.ts +10 -8
- package/dist/config/resource-limits.js +1 -3
- package/dist/contracts/analogy-report.d.ts +7 -7
- package/dist/contracts/analogy-report.js +2 -2
- package/dist/contracts/chat-events.d.ts +46 -22
- package/dist/contracts/chat-events.js +1 -1
- package/dist/contracts/chat-frame.d.ts +15 -5
- package/dist/contracts/chat-frame.js +67 -40
- package/dist/contracts/chat-parts.d.ts +130 -67
- package/dist/contracts/chat-parts.js +1 -0
- package/dist/contracts/content-url.js +16 -2
- package/dist/contracts/data-profile.d.ts +38 -38
- package/dist/contracts/index.d.ts +3 -3
- package/dist/contracts/index.js +1 -1
- package/dist/contracts/message.d.ts +6 -6
- package/dist/contracts/organ-system.d.ts +11 -11
- package/dist/contracts/part-registry.d.ts +5 -4
- package/dist/contracts/part-registry.js +5 -0
- package/dist/contracts/profile-vocabulary.d.ts +11 -10
- package/dist/contracts/profile-vocabulary.js +10 -3
- package/dist/contracts/report-blocks.d.ts +329 -329
- package/dist/contracts/report-reference.d.ts +105 -81
- package/dist/contracts/report-reference.js +30 -13
- package/dist/contracts/schemas/chat-events.d.ts +45 -6
- package/dist/contracts/schemas/chat-events.js +16 -0
- package/dist/contracts/schemas/chat-parts.d.ts +214 -102
- package/dist/contracts/schemas/chat-parts.js +50 -7
- package/dist/contracts/schemas/index.d.ts +1 -1
- package/dist/contracts/schemas/index.js +1 -1
- package/dist/contracts/severity.d.ts +1 -1
- package/dist/contracts/structure-source.d.ts +3 -3
- package/dist/contracts/structure-source.js +6 -2
- package/dist/contracts/subagent-activity.d.ts +2 -2
- package/dist/contracts/subagent-activity.js +5 -3
- package/dist/contracts/usage.d.ts +2 -2
- package/dist/data/safety-panel-schema.d.ts +25 -25
- package/dist/data/safety-panel-schema.js +13 -4
- package/dist/execution/artifact-metadata.d.ts +23 -15
- package/dist/execution/artifact-metadata.js +33 -10
- package/dist/execution/artifact-record.d.ts +2 -2
- package/dist/execution/artifact-registration.d.ts +5 -5
- package/dist/execution/artifact-registry.d.ts +8 -8
- package/dist/execution/dbos-run-launcher.d.ts +24 -4
- package/dist/execution/dbos-run-launcher.js +58 -4
- package/dist/execution/dbos-workflow-purger.d.ts +7 -6
- package/dist/execution/dbos-workflow-purger.js +29 -21
- package/dist/execution/input-signature.d.ts +2 -2
- package/dist/execution/post-step-pipeline.d.ts +9 -9
- package/dist/execution/post-step-pipeline.js +1 -1
- package/dist/execution/post-step.js +2 -2
- package/dist/execution/reconcile-manifest.d.ts +4 -4
- package/dist/execution/reconcile-manifest.js +3 -2
- package/dist/execution/run-authorizer.d.ts +46 -37
- package/dist/execution/run-authorizer.js +8 -8
- package/dist/execution/run-canceler.d.ts +39 -17
- package/dist/execution/run-canceler.js +137 -28
- package/dist/execution/run-end-record.d.ts +29 -0
- package/dist/execution/run-end-record.js +27 -0
- package/dist/execution/run-event-parts.d.ts +0 -8
- package/dist/execution/run-event-parts.js +29 -24
- package/dist/execution/run-event-stream.d.ts +8 -8
- package/dist/execution/run-event-stream.js +3 -4
- package/dist/execution/run-launcher.d.ts +4 -4
- package/dist/execution/run-synthesis.d.ts +49 -48
- package/dist/execution/run-synthesis.js +96 -255
- package/dist/execution/staged-input.d.ts +2 -2
- package/dist/execution/step-summary.d.ts +6 -6
- package/dist/execution/step-summary.js +4 -8
- package/dist/execution/topo-sort.js +4 -3
- package/dist/execution/workflow-purger.d.ts +2 -2
- package/dist/index.d.ts +25 -24
- package/dist/index.js +36 -37
- package/dist/input-sanitization.js +9 -2
- package/dist/input-scan/clustering.d.ts +6 -6
- package/dist/input-scan/clustering.js +11 -5
- package/dist/input-scan/companions.js +3 -2
- package/dist/input-scan/detect-sets.d.ts +2 -2
- package/dist/input-scan/detect-sets.js +25 -21
- package/dist/input-scan/enrich.d.ts +6 -6
- package/dist/input-scan/enrich.js +29 -12
- package/dist/input-scan/formats.d.ts +2 -2
- package/dist/input-scan/formats.js +8 -2
- package/dist/input-scan/markers.d.ts +2 -2
- package/dist/input-scan/markers.js +14 -5
- package/dist/input-scan/menu.d.ts +10 -10
- package/dist/input-scan/menu.js +0 -0
- package/dist/input-scan/quarantine.d.ts +2 -2
- package/dist/input-scan/quarantine.js +23 -18
- package/dist/input-scan/readout-budget.d.ts +2 -2
- package/dist/input-scan/readout-budget.js +1 -1
- package/dist/input-scan/readout.d.ts +2 -2
- package/dist/input-scan/readout.js +47 -34
- package/dist/input-scan/scan.d.ts +2 -2
- package/dist/input-scan/scan.js +7 -5
- package/dist/input-scan/set-types.d.ts +28 -28
- package/dist/input-scan/shapes.d.ts +4 -4
- package/dist/input-scan/shapes.js +0 -0
- package/dist/input-scan/templates.d.ts +10 -10
- package/dist/input-scan/templates.js +30 -22
- package/dist/input-scan/tokens.d.ts +6 -4
- package/dist/input-scan/tokens.js +100 -38
- package/dist/input-scan/types.d.ts +22 -22
- package/dist/lib/async-utils.d.ts +3 -7
- package/dist/lib/async-utils.js +5 -9
- package/dist/lib/cache.js +1 -1
- package/dist/lib/chrome.d.ts +46 -6
- package/dist/lib/console-logger.js +2 -2
- package/dist/lib/db-result.d.ts +22 -6
- package/dist/lib/db-result.js +9 -13
- package/dist/lib/eyes.d.ts +4 -4
- package/dist/lib/eyes.js +1 -1
- package/dist/lib/fs-helpers.js +18 -6
- package/dist/lib/fs-result.d.ts +1 -0
- package/dist/lib/fs-result.js +5 -6
- package/dist/lib/hooks.d.ts +23 -7
- package/dist/lib/hooks.js +17 -3
- package/dist/lib/host-concurrency.js +3 -2
- package/dist/lib/logger.d.ts +2 -2
- package/dist/lib/logger.js +2 -1
- package/dist/lib/metrics.d.ts +1 -1
- package/dist/lib/null-proto.d.ts +6 -0
- package/dist/lib/null-proto.js +17 -0
- package/dist/lib/otel-spans.d.ts +1 -1
- package/dist/lib/otel-spans.js +9 -5
- package/dist/lib/otel.d.ts +4 -2
- package/dist/lib/otel.js +10 -2
- package/dist/lib/page-capture.d.ts +8 -8
- package/dist/lib/page-capture.js +9 -4
- package/dist/lib/parse-json.d.ts +5 -0
- package/dist/lib/parse-json.js +12 -0
- package/dist/lib/present.d.ts +12 -0
- package/dist/lib/present.js +39 -0
- package/dist/lib/rate-limit.d.ts +4 -4
- package/dist/lib/rate-limit.js +12 -13
- package/dist/lib/regulatory-corpus/fetch-fda-guidance.d.ts +4 -4
- package/dist/lib/regulatory-corpus/fetch-fda-guidance.js +4 -10
- package/dist/lib/regulatory-corpus/fetch-ich.d.ts +4 -4
- package/dist/lib/regulatory-corpus/fetch-ich.js +18 -14
- package/dist/lib/regulatory-corpus/normalize-whitespace.d.ts +6 -0
- package/dist/lib/regulatory-corpus/normalize-whitespace.js +41 -0
- package/dist/lib/regulatory-corpus.d.ts +10 -10
- package/dist/lib/regulatory-corpus.js +3 -1
- package/dist/lib/result.d.ts +10 -11
- package/dist/lib/result.js +15 -13
- package/dist/lib/storage.d.ts +2 -2
- package/dist/lib/test/async-iterable.d.ts +9 -0
- package/dist/lib/test/async-iterable.js +28 -0
- package/dist/lib/test/request-url.d.ts +5 -0
- package/dist/lib/test/request-url.js +7 -0
- package/dist/lib/test/result-assert.d.ts +12 -0
- package/dist/lib/test/result-assert.js +17 -0
- package/dist/lib/test/text-shapes.d.ts +24 -0
- package/dist/lib/test/text-shapes.js +63 -0
- package/dist/lib/text.d.ts +22 -0
- package/dist/lib/text.js +68 -0
- package/dist/lib/thrown.d.ts +18 -0
- package/dist/lib/thrown.js +30 -0
- package/dist/lib/unknown-array.d.ts +6 -0
- package/dist/lib/unknown-array.js +8 -0
- package/dist/lib/unknown-containers.d.ts +14 -0
- package/dist/lib/unknown-containers.js +17 -0
- package/dist/lib/unknown-text.d.ts +8 -0
- package/dist/lib/unknown-text.js +28 -0
- package/dist/lib/zod-issue-shape.d.ts +1 -1
- package/dist/lib/zod-issue-shape.js +31 -31
- package/dist/lib/zod-issues.d.ts +3 -3
- package/dist/lib/zod-issues.js +30 -17
- package/dist/literature/sources/arxiv.d.ts +6 -6
- package/dist/literature/sources/arxiv.js +92 -35
- package/dist/literature/sources/http.d.ts +2 -2
- package/dist/literature/sources/http.js +16 -15
- package/dist/literature/sources/pubmed.d.ts +16 -16
- package/dist/literature/sources/pubmed.js +96 -61
- package/dist/literature/sources/semantic-scholar.d.ts +8 -8
- package/dist/literature/sources/semantic-scholar.js +22 -13
- package/dist/loop/accounting.d.ts +63 -0
- package/dist/loop/accounting.js +141 -0
- package/dist/loop/call-policy.d.ts +73 -0
- package/dist/loop/call-policy.js +109 -0
- package/dist/loop/chat-stream.d.ts +62 -0
- package/dist/loop/chat-stream.js +237 -0
- package/dist/loop/compaction.d.ts +14 -9
- package/dist/loop/compaction.js +17 -0
- package/dist/loop/metrics.d.ts +12 -15
- package/dist/loop/metrics.js +14 -26
- package/dist/loop/run-loop.d.ts +233 -0
- package/dist/loop/run-loop.js +770 -0
- package/dist/loop/sub-agent.d.ts +61 -0
- package/dist/loop/sub-agent.js +161 -0
- package/dist/loop/tool-adapter.d.ts +98 -0
- package/dist/loop/tool-adapter.js +364 -0
- package/dist/loop/tool-detail.d.ts +1 -1
- package/dist/loop/tool-detail.js +6 -5
- package/dist/loop/tool-outcome.d.ts +1 -1
- package/dist/loop/tool-output.d.ts +4 -4
- package/dist/loop/tool-output.js +2 -2
- package/dist/loop/turn-credentials.d.ts +34 -0
- package/dist/loop/turn-credentials.js +73 -0
- package/dist/loop/types.d.ts +34 -37
- package/dist/loop/types.js +2 -7
- package/dist/memory/ai-sdk-message-storage.d.ts +5 -5
- package/dist/memory/ai-sdk-message-storage.js +13 -11
- package/dist/memory/card-builders.d.ts +14 -14
- package/dist/memory/card-builders.js +19 -15
- package/dist/memory/conversation-display-recorder.d.ts +22 -6
- package/dist/memory/conversation-display-recorder.js +64 -20
- package/dist/memory/conversation-display-replay.js +3 -2
- package/dist/memory/conversation-display-storage.d.ts +15 -7
- package/dist/memory/conversation-display-storage.js +141 -36
- package/dist/memory/conversation-view.d.ts +4 -4
- package/dist/memory/conversation-view.js +5 -4
- package/dist/memory/count-tokens.js +10 -8
- package/dist/memory/derive-thread-title.d.ts +0 -13
- package/dist/memory/derive-thread-title.js +2 -1
- package/dist/memory/message-backfill.d.ts +12 -5
- package/dist/memory/message-backfill.js +5 -3
- package/dist/memory/thread-history.d.ts +66 -24
- package/dist/memory/thread-history.js +212 -79
- package/dist/memory/thread-store.d.ts +26 -17
- package/dist/memory/thread-store.js +15 -9
- package/dist/memory/tool-call-integrity.d.ts +2 -2
- package/dist/memory/tool-call-integrity.js +4 -3
- package/dist/memory/working-memory.d.ts +16 -12
- package/dist/memory/working-memory.js +72 -61
- package/dist/prompts/briefing.d.ts +63 -9
- package/dist/prompts/briefing.js +130 -3
- package/dist/prompts/planner.js +13 -2
- package/dist/prompts/synthesis-agent.d.ts +1 -1
- package/dist/prompts/synthesis-agent.js +6 -14
- package/dist/provenance/collector.d.ts +6 -6
- package/dist/provenance/collector.js +15 -8
- package/dist/provenance/exec-frame.d.ts +2 -2
- package/dist/provenance/exec-frame.js +6 -1
- package/dist/provenance/seam.d.ts +24 -19
- package/dist/provenance/seam.js +7 -5
- package/dist/provenance/types.d.ts +6 -6
- package/dist/providers/ai-sdk.d.ts +113 -62
- package/dist/providers/ai-sdk.js +303 -458
- package/dist/providers/embedding.d.ts +2 -2
- package/dist/providers/embedding.js +1 -1
- package/dist/providers/errors.d.ts +22 -2
- package/dist/providers/errors.js +98 -50
- package/dist/providers/prompt-cache.d.ts +8 -8
- package/dist/providers/prompt-cache.js +13 -11
- package/dist/providers/reasoning.d.ts +2 -2
- package/dist/providers/reasoning.js +2 -2
- package/dist/providers/types.d.ts +59 -92
- package/dist/reference-data/catalog.d.ts +2 -15
- package/dist/reference-data/catalog.js +166 -10
- package/dist/reference-data/receipt.d.ts +2 -2
- package/dist/report-model/assert-rules.js +1 -1
- package/dist/report-model/authoring-grammar.d.ts +209 -231
- package/dist/report-model/block-walk.d.ts +10 -10
- package/dist/report-model/block-walk.js +2 -0
- package/dist/report-model/draft-finish.d.ts +8 -8
- package/dist/report-model/draft-finish.js +1 -1
- package/dist/report-model/draft-hash.js +8 -7
- package/dist/report-model/draft-operations.d.ts +22 -10
- package/dist/report-model/draft-operations.js +48 -30
- package/dist/report-model/draft-read.d.ts +19 -7
- package/dist/report-model/draft-read.js +16 -6
- package/dist/report-model/draft.d.ts +844 -2
- package/dist/report-model/draft.js +3 -1
- package/dist/report-model/fixture-resolver.js +39 -16
- package/dist/report-model/pin-snapshot.d.ts +2 -2
- package/dist/report-model/pin-snapshot.js +15 -15
- package/dist/report-model/production-resolver.d.ts +18 -18
- package/dist/report-model/production-resolver.js +50 -42
- package/dist/report-model/reference-resolver.d.ts +26 -10
- package/dist/report-model/reference-resolver.js +68 -5
- package/dist/report-model/reference-stamp.js +30 -38
- package/dist/report-model/structural-validation.js +12 -4
- package/dist/report-model/validate.d.ts +7 -7
- package/dist/report-model/validate.js +6 -6
- package/dist/report-render/assets.d.ts +2 -2
- package/dist/report-render/assets.js +27 -3
- package/dist/report-render/chart-export.d.ts +10 -2
- package/dist/report-render/chart-export.js +37 -11
- package/dist/report-render/chart-presets.d.ts +8 -8
- package/dist/report-render/chart-presets.js +3 -3
- package/dist/report-render/chart-renderers.d.ts +23 -16
- package/dist/report-render/chart-renderers.js +74 -53
- package/dist/report-render/chart-toolbox.d.ts +2 -2
- package/dist/report-render/chart-toolbox.js +7 -6
- package/dist/report-render/chart.d.ts +15 -16
- package/dist/report-render/chart.js +369 -252
- package/dist/report-render/design.d.ts +36 -297
- package/dist/report-render/design.js +0 -12
- package/dist/report-render/figures/common.d.ts +12 -12
- package/dist/report-render/figures/common.js +42 -31
- package/dist/report-render/figures/dendrogram.d.ts +3 -3
- package/dist/report-render/figures/dendrogram.js +10 -10
- package/dist/report-render/figures/dense.js +15 -8
- package/dist/report-render/figures/dotplot.js +46 -33
- package/dist/report-render/figures/embedding.js +52 -43
- package/dist/report-render/figures/equal-units.d.ts +10 -10
- package/dist/report-render/figures/equal-units.js +27 -27
- package/dist/report-render/figures/forest.js +9 -7
- package/dist/report-render/figures/gsea.js +21 -11
- package/dist/report-render/figures/heatmap.js +13 -9
- package/dist/report-render/figures/index.d.ts +10 -10
- package/dist/report-render/figures/index.js +4 -2
- package/dist/report-render/figures/km.js +10 -9
- package/dist/report-render/figures/label-room.d.ts +12 -12
- package/dist/report-render/figures/label-room.js +7 -2
- package/dist/report-render/figures/locuszoom.d.ts +2 -2
- package/dist/report-render/figures/locuszoom.js +59 -31
- package/dist/report-render/figures/lollipop.js +3 -2
- package/dist/report-render/figures/ma.js +8 -4
- package/dist/report-render/figures/manhattan.d.ts +1 -2
- package/dist/report-render/figures/manhattan.js +52 -34
- package/dist/report-render/figures/oncoprint.js +4 -5
- package/dist/report-render/figures/pca.js +25 -11
- package/dist/report-render/figures/qq.js +20 -9
- package/dist/report-render/figures/roc.js +1 -1
- package/dist/report-render/figures/sankey.d.ts +2 -2
- package/dist/report-render/figures/sankey.js +11 -10
- package/dist/report-render/figures/upset.d.ts +6 -6
- package/dist/report-render/figures/upset.js +7 -4
- package/dist/report-render/figures/volcano.js +12 -10
- package/dist/report-render/hybrid-svg.d.ts +4 -4
- package/dist/report-render/hybrid-svg.js +7 -5
- package/dist/report-render/number-format.d.ts +4 -4
- package/dist/report-render/number-format.js +62 -27
- package/dist/report-render/page.js +2 -1
- package/dist/report-render/provenance-data.d.ts +2 -2
- package/dist/report-render/references.d.ts +4 -4
- package/dist/report-render/render.d.ts +2 -2
- package/dist/report-render/render.js +10 -11
- package/dist/report-render/script-json.js +1 -1
- package/dist/report-render/table-data.d.ts +6 -6
- package/dist/report-render/test/options.d.ts +49 -0
- package/dist/report-render/test/options.js +143 -0
- package/dist/report-render/test/page-function.d.ts +19 -0
- package/dist/report-render/test/page-function.js +33 -0
- package/dist/report-render/types.d.ts +10 -10
- package/dist/report-render/value-bridge.d.ts +4 -4
- package/dist/report-render/value-bridge.js +27 -14
- package/dist/report-render/views/chart-view.d.ts +2 -2
- package/dist/report-render/views/chart-view.js +2 -2
- package/dist/report-render/views/lineage.d.ts +6 -6
- package/dist/report-render/views/lineage.js +2 -0
- package/dist/report-render/views/page-view.d.ts +2 -2
- package/dist/report-render/views/page-view.js +1 -0
- package/dist/report-render/views/prose.js +25 -8
- package/dist/report-render/views/references-view.js +12 -1
- package/dist/report-render/views/values.js +1 -1
- package/dist/runtime/assemble.d.ts +53 -26
- package/dist/runtime/assemble.js +103 -56
- package/dist/runtime/boot.d.ts +8 -7
- package/dist/runtime/boot.js +1 -1
- package/dist/runtime/connection-budget.d.ts +6 -6
- package/dist/runtime/connection-budget.js +1 -1
- package/dist/runtime/dbos.d.ts +29 -19
- package/dist/runtime/dbos.js +35 -20
- package/dist/runtime/result-serialization.js +18 -5
- package/dist/runtime/shutdown.d.ts +2 -2
- package/dist/sandbox/client.d.ts +7 -3
- package/dist/sandbox/cpu-files.d.ts +2 -2
- package/dist/sandbox/cpu-files.js +21 -4
- package/dist/sandbox/create-sandbox.d.ts +7 -8
- package/dist/sandbox/create-sandbox.js +6 -12
- package/dist/sandbox/docker-client.d.ts +48 -3
- package/dist/sandbox/docker-client.js +10 -6
- package/dist/sandbox/estimate-data-profile-resources.js +2 -7
- package/dist/sandbox/exec-outcome.d.ts +2 -2
- package/dist/sandbox/exec-outcome.js +1 -1
- package/dist/sandbox/exec.d.ts +10 -6
- package/dist/sandbox/exec.js +27 -12
- package/dist/sandbox/execution-id.js +14 -6
- package/dist/sandbox/farm.d.ts +2 -2
- package/dist/sandbox/farm.js +22 -27
- package/dist/sandbox/identity.d.ts +7 -0
- package/dist/sandbox/identity.js +14 -3
- package/dist/sandbox/image-packages.d.ts +26 -4
- package/dist/sandbox/image-packages.js +29 -27
- package/dist/sandbox/k8s-client.d.ts +35 -8
- package/dist/sandbox/k8s-client.js +6 -5
- package/dist/sandbox/labels.js +1 -0
- package/dist/sandbox/liveness.js +3 -1
- package/dist/sandbox/mount-plan.d.ts +10 -10
- package/dist/sandbox/mount-plan.js +13 -14
- package/dist/sandbox/notification-sweep.d.ts +4 -4
- package/dist/sandbox/notification-sweep.js +4 -7
- package/dist/sandbox/package-identity.d.ts +6 -13
- package/dist/sandbox/package-identity.js +46 -28
- package/dist/sandbox/reaper.d.ts +10 -10
- package/dist/sandbox/reaper.js +4 -6
- package/dist/sandbox/sandbox-error.d.ts +2 -9
- package/dist/sandbox/sandbox-error.js +21 -8
- package/dist/sandbox/sandbox-step-translate.d.ts +8 -5
- package/dist/sandbox/sandbox-step-translate.js +22 -8
- package/dist/sandbox/step-sandbox.d.ts +47 -0
- package/dist/sandbox/step-sandbox.js +53 -0
- package/dist/sandbox/types.d.ts +18 -19
- package/dist/sandbox/types.js +1 -1
- package/dist/schemas/artifact-manifest.d.ts +4 -4
- package/dist/schemas/data-profile-schemas.d.ts +351 -306
- package/dist/schemas/file-metadata.js +2 -4
- package/dist/schemas/plan-schemas.d.ts +79 -25
- package/dist/schemas/plan-schemas.js +1 -1
- package/dist/schemas/run-synthesis.d.ts +95 -26
- package/dist/schemas/run-synthesis.js +3 -1
- package/dist/schemas/validate-plan.d.ts +4 -4
- package/dist/schemas/validate-plan.js +17 -5
- package/dist/schemas/workflow-state.d.ts +127 -14
- package/dist/schemas/workflow-state.js +56 -2
- package/dist/state/active-turns.d.ts +36 -0
- package/dist/state/active-turns.js +67 -0
- package/dist/state/analyses-metrics.d.ts +8 -8
- package/dist/state/analyses-metrics.js +4 -4
- package/dist/state/analyses.d.ts +0 -14
- package/dist/state/analyses.js +0 -32
- package/dist/state/artifacts.d.ts +47 -18
- package/dist/state/artifacts.js +48 -7
- package/dist/state/data-profile.d.ts +2 -2
- package/dist/state/db.d.ts +12 -2
- package/dist/state/db.js +5 -0
- package/dist/state/edit-intents.d.ts +4 -0
- package/dist/state/edit-intents.js +71 -0
- package/dist/state/index.d.ts +5 -5
- package/dist/state/index.js +3 -3
- package/dist/state/init.d.ts +2 -1
- package/dist/state/init.js +5 -2
- package/dist/state/migrations/20260927120000_baseline.js +3 -1
- package/dist/state/migrations/20261026120000_add_the_edit_intents.d.ts +7 -0
- package/dist/state/migrations/20261026120000_add_the_edit_intents.js +21 -0
- package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.d.ts +7 -0
- package/dist/state/migrations/20261027120000_record_the_applied_memory_edits.js +16 -0
- package/dist/state/migrations/20261027120100_store_the_authoring_results.d.ts +8 -0
- package/dist/state/migrations/20261027120100_store_the_authoring_results.js +20 -0
- package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.d.ts +7 -0
- package/dist/state/migrations/20261027120200_key_the_groups_of_a_turn.js +12 -0
- package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.d.ts +7 -0
- package/dist/state/migrations/20261027120300_mark_the_active_turn_of_a_thread.js +11 -0
- package/dist/state/migrations/20261028120000_record_the_paused_work.d.ts +7 -0
- package/dist/state/migrations/20261028120000_record_the_paused_work.js +25 -0
- package/dist/state/migrations/20261028120100_end_the_suspended_runs.d.ts +8 -0
- package/dist/state/migrations/20261028120100_end_the_suspended_runs.js +13 -0
- package/dist/state/migrations/20261029120000_reference_the_run_mandate.d.ts +7 -0
- package/dist/state/migrations/20261029120000_reference_the_run_mandate.js +23 -0
- package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.d.ts +7 -0
- package/dist/state/migrations/20261029120100_record_the_run_session_of_a_pause.js +11 -0
- package/dist/state/migrations/index.js +18 -0
- package/dist/state/paused-work.d.ts +52 -0
- package/dist/state/paused-work.js +105 -0
- package/dist/state/plans.d.ts +27 -8
- package/dist/state/plans.js +14 -11
- package/dist/state/purge-analysis.d.ts +6 -6
- package/dist/state/purge-analysis.js +10 -2
- package/dist/state/report-session-state.d.ts +43 -18
- package/dist/state/report-session-state.js +43 -4
- package/dist/state/report-versions.d.ts +16 -11
- package/dist/state/report-versions.js +5 -3
- package/dist/state/runs.d.ts +70 -25
- package/dist/state/runs.js +127 -64
- package/dist/state/schema.d.ts +18 -21
- package/dist/state/schema.js +4 -5
- package/dist/state/snapshot-parse.d.ts +2 -2
- package/dist/state/snapshot-parse.js +14 -8
- package/dist/state/step-executions.d.ts +29 -8
- package/dist/state/step-executions.js +28 -4
- package/dist/state/tool-outputs.d.ts +2 -2
- package/dist/state/tool-outputs.js +2 -1
- package/dist/state/vector-store.d.ts +16 -16
- package/dist/state/vector-store.js +11 -7
- package/dist/tasks/data-profile-absorb.d.ts +3 -3
- package/dist/tasks/data-profile-absorb.js +21 -16
- package/dist/tasks/data-profile-activity.d.ts +5 -5
- package/dist/tasks/data-profile-activity.js +5 -5
- package/dist/tasks/data-profile-index.d.ts +4 -4
- package/dist/tasks/data-profile-index.js +32 -17
- package/dist/tasks/data-profile-resolve.d.ts +8 -8
- package/dist/tasks/data-profile-resolve.js +88 -62
- package/dist/tasks/data-profile.d.ts +40 -31
- package/dist/tasks/data-profile.js +138 -95
- package/dist/tasks/extract-values.d.ts +26 -79
- package/dist/tasks/extract-values.js +48 -108
- package/dist/tasks/refresh-regulatory-corpus.d.ts +4 -20
- package/dist/tasks/refresh-regulatory-corpus.js +12 -8
- package/dist/tasks/regulatory-corpus-boot-refresh.d.ts +2 -2
- package/dist/tasks/regulatory-corpus-boot-refresh.js +12 -10
- package/dist/testing.d.ts +60 -0
- package/dist/testing.js +96 -0
- package/dist/tools/ad-hoc-router.d.ts +11 -9
- package/dist/tools/ad-hoc-router.js +80 -51
- package/dist/tools/analysis-invocation.d.ts +7 -0
- package/dist/tools/analysis-invocation.js +29 -5
- package/dist/tools/approval/contract.d.ts +8 -52
- package/dist/tools/approval/contract.js +7 -36
- package/dist/tools/approval/gateway.d.ts +27 -28
- package/dist/tools/approval/gateway.js +33 -130
- package/dist/tools/approval/queries.d.ts +6 -11
- package/dist/tools/approval/queries.js +43 -29
- package/dist/tools/approval/uuidv7.js +2 -2
- package/dist/tools/bio/chembl.d.ts +3 -3
- package/dist/tools/bio/chembl.js +10 -0
- package/dist/tools/bio/comptox.d.ts +25 -8
- package/dist/tools/bio/comptox.js +4 -2
- package/dist/tools/bio/drug-gene-interactions.d.ts +27 -17
- package/dist/tools/bio/drug-gene-interactions.js +11 -8
- package/dist/tools/bio/gene-disease-evidence.d.ts +61 -15
- package/dist/tools/bio/gene-disease-evidence.js +10 -6
- package/dist/tools/bio/gene-preclinical-profile.d.ts +11 -11
- package/dist/tools/bio/keys.d.ts +2 -2
- package/dist/tools/bio/keys.js +3 -3
- package/dist/tools/bio/lookup-annotation.d.ts +5 -5
- package/dist/tools/bio/lookup-annotation.js +3 -0
- package/dist/tools/bio/opentargets.d.ts +1 -1
- package/dist/tools/bio/opentargets.js +6 -0
- package/dist/tools/bio/pubchem.d.ts +2 -2
- package/dist/tools/bio/pubchem.js +6 -0
- package/dist/tools/bio/pubmed.d.ts +26 -16
- package/dist/tools/bio/pubmed.js +9 -3
- package/dist/tools/bio/search-clinical-trials.d.ts +4 -4
- package/dist/tools/bio/search-clinical-trials.js +5 -1
- package/dist/tools/bio/search-faers.d.ts +2 -2
- package/dist/tools/bio/search-faers.js +1 -1
- package/dist/tools/bio/search-gene.d.ts +2 -2
- package/dist/tools/bio/search-gene.js +1 -0
- package/dist/tools/bio/search-geo-datasets.d.ts +4 -4
- package/dist/tools/bio/search-geo-datasets.js +5 -5
- package/dist/tools/bio/search-interactions.d.ts +1 -1
- package/dist/tools/bio/search-patents.d.ts +28 -22
- package/dist/tools/bio/search-patents.js +20 -17
- package/dist/tools/bio/search-protein.d.ts +2 -2
- package/dist/tools/bio/search-protein.js +1 -1
- package/dist/tools/bio/search-regulatory-approvals.d.ts +64 -18
- package/dist/tools/bio/search-regulatory-approvals.js +21 -16
- package/dist/tools/bio/target-safety.d.ts +8 -8
- package/dist/tools/bio/target-safety.js +11 -6
- package/dist/tools/capability-data.d.ts +40 -0
- package/dist/tools/capability-data.js +74 -0
- package/dist/tools/define-tool.d.ts +55 -46
- package/dist/tools/define-tool.js +39 -27
- package/dist/tools/display/normalize-echart-spec.d.ts +2 -2
- package/dist/tools/display/normalize-echart-spec.js +51 -27
- package/dist/tools/display/show-user.d.ts +2 -2
- package/dist/tools/display/show-user.js +1 -1
- package/dist/tools/execute-analysis.d.ts +54 -17
- package/dist/tools/execute-analysis.js +193 -62
- package/dist/tools/knowledge/check.d.ts +182 -0
- package/dist/tools/knowledge/check.js +94 -0
- package/dist/tools/knowledge/client.d.ts +351 -0
- package/dist/tools/knowledge/client.js +319 -0
- package/dist/tools/knowledge/environment.d.ts +78 -0
- package/dist/tools/knowledge/environment.js +116 -0
- package/dist/tools/knowledge/index.d.ts +49 -0
- package/dist/tools/knowledge/index.js +70 -0
- package/dist/tools/knowledge/local-slots.d.ts +62 -0
- package/dist/tools/knowledge/local-slots.js +184 -0
- package/dist/tools/knowledge/pin.d.ts +14 -0
- package/dist/tools/knowledge/pin.js +17 -0
- package/dist/tools/knowledge/recommend.d.ts +67 -0
- package/dist/tools/knowledge/recommend.js +106 -0
- package/dist/tools/knowledge/situation.d.ts +143 -0
- package/dist/tools/knowledge/situation.js +157 -0
- package/dist/tools/knowledge/skeleton.d.ts +69 -0
- package/dist/tools/knowledge/skeleton.js +201 -0
- package/dist/tools/knowledge/template.d.ts +139 -0
- package/dist/tools/knowledge/template.js +273 -0
- package/dist/tools/lib/alphafold-client.js +2 -1
- package/dist/tools/lib/amass-client.d.ts +28 -28
- package/dist/tools/lib/amass-client.js +20 -10
- package/dist/tools/lib/api-utils.d.ts +13 -3
- package/dist/tools/lib/api-utils.js +17 -3
- package/dist/tools/lib/bgee-client.d.ts +6 -6
- package/dist/tools/lib/bgee-client.js +16 -10
- package/dist/tools/lib/cbioportal-client.d.ts +4 -4
- package/dist/tools/lib/cbioportal-client.js +9 -8
- package/dist/tools/lib/chembl-client.d.ts +14 -14
- package/dist/tools/lib/chembl-client.js +11 -4
- package/dist/tools/lib/clinical-benchmarks-client.d.ts +4 -4
- package/dist/tools/lib/clinical-benchmarks-client.js +4 -7
- package/dist/tools/lib/clinical-trials-client.d.ts +18 -18
- package/dist/tools/lib/clinical-trials-client.js +10 -10
- package/dist/tools/lib/clinvar-client.d.ts +2 -2
- package/dist/tools/lib/clinvar-client.js +6 -6
- package/dist/tools/lib/ctx-ops.d.ts +23 -23
- package/dist/tools/lib/ctx-ops.js +13 -10
- package/dist/tools/lib/dgidb-client.d.ts +6 -6
- package/dist/tools/lib/dgidb-client.js +10 -12
- package/dist/tools/lib/disgenet-client.d.ts +4 -4
- package/dist/tools/lib/ema-client.d.ts +2 -2
- package/dist/tools/lib/ensembl-client.d.ts +4 -4
- package/dist/tools/lib/ensembl-client.js +5 -4
- package/dist/tools/lib/gwas-catalog-client.d.ts +4 -4
- package/dist/tools/lib/gwas-catalog-client.js +17 -17
- package/dist/tools/lib/html-text.d.ts +6 -0
- package/dist/tools/lib/html-text.js +9 -0
- package/dist/tools/lib/identifier-resolver.d.ts +4 -4
- package/dist/tools/lib/identifier-resolver.js +7 -3
- package/dist/tools/lib/impc-client.d.ts +8 -8
- package/dist/tools/lib/impc-client.js +46 -35
- package/dist/tools/lib/iuphar-client.d.ts +2 -2
- package/dist/tools/lib/iuphar-client.js +7 -16
- package/dist/tools/lib/monarch-client.d.ts +4 -4
- package/dist/tools/lib/openfda-client.d.ts +22 -22
- package/dist/tools/lib/openfda-client.js +23 -22
- package/dist/tools/lib/opentargets-client.d.ts +12 -12
- package/dist/tools/lib/pathway-client.d.ts +4 -4
- package/dist/tools/lib/pathway-client.js +15 -19
- package/dist/tools/lib/pharmgkb-client.d.ts +2 -2
- package/dist/tools/lib/pharmgkb-client.js +1 -1
- package/dist/tools/lib/protein-family-modality.d.ts +2 -2
- package/dist/tools/lib/protein-family-modality.js +0 -2
- package/dist/tools/lib/protein-family-normalize.js +7 -0
- package/dist/tools/lib/pubchem-client.d.ts +2 -2
- package/dist/tools/lib/pubchem-client.js +1 -0
- package/dist/tools/lib/pubchem-ops.d.ts +4 -4
- package/dist/tools/lib/pubchem-ops.js +8 -0
- package/dist/tools/lib/pubmed-client.d.ts +9 -9
- package/dist/tools/lib/pubmed-client.js +1 -1
- package/dist/tools/lib/string-client.d.ts +6 -6
- package/dist/tools/lib/uniprot-client.d.ts +8 -8
- package/dist/tools/lib/uniprot-client.js +5 -1
- package/dist/tools/memory/update-working-memory.d.ts +16 -13
- package/dist/tools/memory/update-working-memory.js +21 -3
- package/dist/tools/read-tool-output.js +8 -2
- package/dist/tools/registry.d.ts +2 -2
- package/dist/tools/report-authoring/authoring-tools.d.ts +54 -23
- package/dist/tools/report-authoring/authoring-tools.js +128 -62
- package/dist/tools/report-session/derive-table.d.ts +19 -59
- package/dist/tools/report-session/derive-table.js +120 -122
- package/dist/tools/report-session/examine-page.d.ts +6 -6
- package/dist/tools/report-session/examine-page.js +14 -12
- package/dist/tools/report-session/list-artifacts.d.ts +6 -6
- package/dist/tools/report-session/list-artifacts.js +5 -5
- package/dist/tools/report-session/page-faults.d.ts +6 -6
- package/dist/tools/report-session/page-faults.js +3 -1
- package/dist/tools/report-session/preview-report.d.ts +4 -3
- package/dist/tools/report-session/preview-report.js +26 -7
- package/dist/tools/report-session/record-version.d.ts +9 -4
- package/dist/tools/report-session/record-version.js +16 -9
- package/dist/tools/report-session/session-page-publisher.d.ts +6 -6
- package/dist/tools/research/generate-analogy-report.d.ts +14 -7
- package/dist/tools/research/generate-analogy-report.js +80 -76
- package/dist/tools/research/generate-plan.d.ts +39 -16
- package/dist/tools/research/generate-plan.js +565 -338
- package/dist/tools/research/guarded-address.d.ts +20 -0
- package/dist/tools/research/guarded-address.js +149 -0
- package/dist/tools/research/inspect-data-profile.d.ts +27 -20
- package/dist/tools/research/inspect-data-profile.js +26 -25
- package/dist/tools/research/inspect-run.d.ts +54 -27
- package/dist/tools/research/inspect-run.js +50 -40
- package/dist/tools/research/literature-reviewer.d.ts +8 -7
- package/dist/tools/research/literature-reviewer.js +29 -28
- package/dist/tools/research/search-arxiv.d.ts +1 -1
- package/dist/tools/research/search-arxiv.js +1 -1
- package/dist/tools/research/search-github-repos.d.ts +10 -7
- package/dist/tools/research/search-github-repos.js +25 -22
- package/dist/tools/research/search-semantic-scholar.js +1 -1
- package/dist/tools/research/searxng-engine.d.ts +40 -0
- package/dist/tools/research/searxng-engine.js +122 -0
- package/dist/tools/research/web-fetch.d.ts +127 -0
- package/dist/tools/research/web-fetch.js +618 -0
- package/dist/tools/research/web-search.d.ts +84 -0
- package/dist/tools/research/web-search.js +117 -0
- package/dist/tools/sandbox/link-packages.d.ts +11 -7
- package/dist/tools/sandbox/link-packages.js +11 -8
- package/dist/tools/sandbox/list-available-packages.d.ts +24 -12
- package/dist/tools/sandbox/list-available-packages.js +43 -29
- package/dist/tools/sandbox/list-available-refs.d.ts +38 -14
- package/dist/tools/sandbox/list-available-refs.js +119 -37
- package/dist/tools/sandbox/report-blocker.d.ts +30 -37
- package/dist/tools/sandbox/report-blocker.js +22 -68
- package/dist/tools/sandbox/skills.d.ts +16 -12
- package/dist/tools/sandbox/skills.js +16 -12
- package/dist/tools/sandbox/submit-file-metadata.d.ts +12 -9
- package/dist/tools/sandbox/submit-file-metadata.js +18 -21
- package/dist/tools/start-report-session.d.ts +13 -5
- package/dist/tools/start-report-session.js +35 -8
- package/dist/tools/terminal-text.d.ts +14 -0
- package/dist/tools/terminal-text.js +51 -0
- package/dist/tools/workspace/decision-record.d.ts +81 -0
- package/dist/tools/workspace/decision-record.js +127 -0
- package/dist/tools/workspace/edit-file.d.ts +59 -18
- package/dist/tools/workspace/edit-file.js +98 -15
- package/dist/tools/workspace/execute-command.d.ts +31 -12
- package/dist/tools/workspace/execute-command.js +37 -8
- package/dist/tools/workspace/file-stat.d.ts +6 -3
- package/dist/tools/workspace/grep.d.ts +10 -7
- package/dist/tools/workspace/grep.js +9 -3
- package/dist/tools/workspace/index.d.ts +1 -0
- package/dist/tools/workspace/index.js +1 -0
- package/dist/tools/workspace/list-files.d.ts +6 -3
- package/dist/tools/workspace/mutator.d.ts +28 -15
- package/dist/tools/workspace/mutator.js +107 -53
- package/dist/tools/workspace/read-file.d.ts +8 -5
- package/dist/tools/workspace/result-bounds.d.ts +5 -5
- package/dist/tools/workspace/result-bounds.js +4 -2
- package/dist/tools/workspace/run-exec.d.ts +2 -2
- package/dist/tools/workspace/run-exec.js +3 -3
- package/dist/tools/workspace/scan-inputs.d.ts +8 -5
- package/dist/tools/workspace/scan-inputs.js +17 -5
- package/dist/tools/workspace/show-file.d.ts +1 -1
- package/dist/tools/workspace/show-file.js +2 -1
- package/dist/tools/workspace/show-plan.d.ts +8 -5
- package/dist/tools/workspace/show-plan.js +9 -8
- package/dist/tools/workspace/workspace-search.d.ts +41 -13
- package/dist/tools/workspace/workspace-search.js +27 -14
- package/dist/tools/workspace/write-file.d.ts +9 -7
- package/dist/workflows/execute-analysis-scheduler.d.ts +9 -9
- package/dist/workflows/execute-analysis-scheduler.js +6 -3
- package/dist/workflows/execute-analysis.d.ts +100 -76
- package/dist/workflows/execute-analysis.js +380 -247
- package/dist/workflows/pause.d.ts +71 -0
- package/dist/workflows/pause.js +173 -0
- package/dist/workflows/sandbox-step.d.ts +50 -61
- package/dist/workflows/sandbox-step.js +99 -106
- package/dist/workflows/test/sql-writes.d.ts +21 -0
- package/dist/workflows/test/sql-writes.js +36 -0
- package/dist/workspace/filesystem.d.ts +6 -6
- package/dist/workspace/filesystem.js +10 -8
- package/dist/workspace/paths.d.ts +1 -1
- package/dist/workspace/paths.js +15 -4
- package/dist/workspace/search-config.d.ts +2 -2
- package/dist/workspace/search-config.js +1 -1
- package/package.json +25 -22
- package/dist/loop/continue-agent.d.ts +0 -40
- package/dist/loop/continue-agent.js +0 -38
- package/dist/loop/genai-spans.d.ts +0 -47
- package/dist/loop/genai-spans.js +0 -134
- package/dist/loop/run-agent.d.ts +0 -236
- package/dist/loop/run-agent.js +0 -1110
- package/dist/loop/run-step.d.ts +0 -29
- package/dist/loop/run-step.js +0 -34
- package/dist/loop/run-to-terminal.d.ts +0 -66
- package/dist/loop/run-to-terminal.js +0 -90
- package/dist/loop/tool-mask.d.ts +0 -23
- package/dist/loop/tool-mask.js +0 -46
- package/dist/providers/streaming-chat.d.ts +0 -32
- package/dist/providers/streaming-chat.js +0 -91
- package/dist/tasks/derive-table-exec.d.ts +0 -54
- package/dist/tasks/derive-table-exec.js +0 -86
- package/dist/workflows/suspension.d.ts +0 -32
- package/dist/workflows/suspension.js +0 -38
|
@@ -12,16 +12,16 @@
|
|
|
12
12
|
* owns eviction, coalescing, and expiry — the deep, drift-prone plumbing.
|
|
13
13
|
*/
|
|
14
14
|
import { ResultAsync } from "neverthrow";
|
|
15
|
-
export
|
|
15
|
+
export type CachedResolverMetrics = {
|
|
16
16
|
onHit(): void;
|
|
17
17
|
/** Recorded once per upstream fetch — coalesced callers do not count. */
|
|
18
18
|
onMiss(): void;
|
|
19
|
-
}
|
|
20
|
-
export
|
|
19
|
+
};
|
|
20
|
+
export type CachedResolverConfig<In, Out, E> = {
|
|
21
21
|
readonly ttlMs: number;
|
|
22
22
|
readonly maxEntries: number;
|
|
23
23
|
readonly keyFn: (input: In) => string;
|
|
24
24
|
readonly fetch: (input: In) => ResultAsync<Out, E>;
|
|
25
25
|
readonly metrics?: CachedResolverMetrics;
|
|
26
|
-
}
|
|
26
|
+
};
|
|
27
27
|
export declare function createCachedResolver<In, Out, E>(cfg: CachedResolverConfig<In, Out, E>): (input: In) => ResultAsync<Out, E>;
|
|
@@ -6,21 +6,18 @@
|
|
|
6
6
|
* external running-charge bracket; OSS wires a no-op. The harness only ever sees this
|
|
7
7
|
* interface — the body brackets the run, the embedder owns the ledger.
|
|
8
8
|
*
|
|
9
|
-
* `open` is a gate: an `err` ends the run before a step starts, or
|
|
10
|
-
* when the host
|
|
9
|
+
* `open` is a gate: an `err` ends the run before a step starts, or pauses it
|
|
10
|
+
* when the host sets the suspend flag. `close` is a notice: an `err` is logged, and the terminal
|
|
11
11
|
* status of the run does not change (see `lib/hooks.ts`).
|
|
12
12
|
*/
|
|
13
13
|
import type { ResultAsync } from "neverthrow";
|
|
14
14
|
import type { AgentSession } from "../auth/types.js";
|
|
15
15
|
import type { GateFailure, NoticeFailure } from "../lib/hooks.js";
|
|
16
|
-
/**
|
|
16
|
+
/** The outcome of a run that ended. A paused run does not end, thus it closes no charge. */
|
|
17
17
|
export type RunChargeOutcome = {
|
|
18
18
|
readonly kind: "ok" | "error" | "canceled";
|
|
19
|
-
} | {
|
|
20
|
-
readonly kind: "suspended";
|
|
21
|
-
readonly reason: string;
|
|
22
19
|
};
|
|
23
|
-
export
|
|
20
|
+
export type RunCharge = {
|
|
24
21
|
/** Open the run's running charge at init. */
|
|
25
22
|
open(args: {
|
|
26
23
|
analysisId: string;
|
|
@@ -34,4 +31,4 @@ export interface RunCharge {
|
|
|
34
31
|
outcome: RunChargeOutcome;
|
|
35
32
|
session: AgentSession;
|
|
36
33
|
}): ResultAsync<void, NoticeFailure>;
|
|
37
|
-
}
|
|
34
|
+
};
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
* external running-charge bracket; OSS wires a no-op. The harness only ever sees this
|
|
7
7
|
* interface — the body brackets the run, the embedder owns the ledger.
|
|
8
8
|
*
|
|
9
|
-
* `open` is a gate: an `err` ends the run before a step starts, or
|
|
10
|
-
* when the host
|
|
9
|
+
* `open` is a gate: an `err` ends the run before a step starts, or pauses it
|
|
10
|
+
* when the host sets the suspend flag. `close` is a notice: an `err` is logged, and the terminal
|
|
11
11
|
* status of the run does not change (see `lib/hooks.ts`).
|
|
12
12
|
*/
|
|
13
13
|
export {};
|
|
@@ -15,16 +15,16 @@ import type { Scope } from "../auth/types.js";
|
|
|
15
15
|
import type { NoticeFailure } from "../lib/hooks.js";
|
|
16
16
|
import type { ChatUsage } from "../providers/types.js";
|
|
17
17
|
/** One completed LLM call's token usage, with the attribution held at the call site. */
|
|
18
|
-
export
|
|
18
|
+
export type LlmUsageRecord = {
|
|
19
19
|
/**
|
|
20
20
|
* Idempotency key. Stable across every replay of the same call: under a
|
|
21
21
|
* `RunFrame` it composes the `runId`, the frame's `stepId` when it carries
|
|
22
22
|
* one, the session's provenance call path, the dispatching tool call's id
|
|
23
|
-
* when the loop runs nested inside one, and the
|
|
24
|
-
*
|
|
25
|
-
* freshly minted. Every component past
|
|
26
|
-
*
|
|
27
|
-
*
|
|
23
|
+
* when the loop runs nested inside one, and the response id of the call,
|
|
24
|
+
* which the checkpoint of the call keeps; outside a `RunFrame` (the chat
|
|
25
|
+
* path, where no replay exists) it is freshly minted. Every component past
|
|
26
|
+
* the frame is load-bearing, because loops routinely share a frame: the
|
|
27
|
+
* `stepId` keeps sibling step workflows of one run
|
|
28
28
|
* apart, the call path keeps distinct agent chains under one frame apart,
|
|
29
29
|
* and the invocation id keeps parallel dispatches of one sub-agent apart.
|
|
30
30
|
* The harness guarantees key stability, not at-most-once delivery —
|
|
@@ -48,7 +48,7 @@ export interface LlmUsageRecord {
|
|
|
48
48
|
readonly servedModelId?: string;
|
|
49
49
|
/** What the provider reported. Unreported figures stay absent, never zeroed. */
|
|
50
50
|
readonly usage: ChatUsage;
|
|
51
|
-
}
|
|
51
|
+
};
|
|
52
52
|
/**
|
|
53
53
|
* Records one `LlmUsageRecord` per completed LLM call.
|
|
54
54
|
*
|
|
@@ -59,6 +59,6 @@ export interface LlmUsageRecord {
|
|
|
59
59
|
* make a run slower, but a realization that throws before it returns a
|
|
60
60
|
* `ResultAsync` still fails the run it was only meant to observe.
|
|
61
61
|
*/
|
|
62
|
-
export
|
|
62
|
+
export type UsageRecorder = {
|
|
63
63
|
record(record: LlmUsageRecord): ResultAsync<void, NoticeFailure>;
|
|
64
|
-
}
|
|
64
|
+
};
|
|
@@ -35,7 +35,7 @@ export function aggregateCitationResolution(input, normalized, sourceOutcomes, m
|
|
|
35
35
|
normalized,
|
|
36
36
|
sourceOutcomes: [...sourceOutcomes],
|
|
37
37
|
candidates,
|
|
38
|
-
|
|
38
|
+
selectedClusterId: selected?.id,
|
|
39
39
|
comparisons,
|
|
40
40
|
conflicts: detectCitationConflicts(candidates),
|
|
41
41
|
verdict,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { CitationSourceClient } from "../types.js";
|
|
2
2
|
import type { SourceHttpOptions } from "../../literature/sources/http.js";
|
|
3
|
-
export
|
|
3
|
+
export type ArxivCitationClientOptions = SourceHttpOptions & {
|
|
4
4
|
readonly maxCandidates?: number;
|
|
5
|
-
}
|
|
5
|
+
};
|
|
6
6
|
export declare function createArxivCitationClient(options?: ArxivCitationClientOptions): CitationSourceClient;
|
|
@@ -10,7 +10,7 @@ function arxivRecord(paper) {
|
|
|
10
10
|
identifiers: { arxiv: identifier },
|
|
11
11
|
title: paper.title,
|
|
12
12
|
authors: paper.authors,
|
|
13
|
-
|
|
13
|
+
year,
|
|
14
14
|
venue: "arXiv",
|
|
15
15
|
url: paper.url,
|
|
16
16
|
};
|
|
@@ -22,9 +22,17 @@ export function createArxivCitationClient(options = {}) {
|
|
|
22
22
|
async resolve(request, signal) {
|
|
23
23
|
if (!request.plan.applicable)
|
|
24
24
|
return sourceOutcome("arxiv", request.plan.operation, "not_applicable", 0, [], request.plan.reason);
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
if (request.plan.operation === "arxiv_exact") {
|
|
26
|
+
const arxivId = request.normalized.identifiers.arxiv;
|
|
27
|
+
if (arxivId === undefined)
|
|
28
|
+
return sourceOutcome("arxiv", request.plan.operation, "unavailable", 0, [], "the exact plan carries no arXiv identifier");
|
|
29
|
+
const result = await source.lookupExact(arxivId, options.maxCandidates ?? 5, signal);
|
|
30
|
+
if (result.status !== "ok")
|
|
31
|
+
return sourceOutcome("arxiv", request.plan.operation, result.status, 1, [], result.detail);
|
|
32
|
+
const records = result.value.map(arxivRecord);
|
|
33
|
+
return sourceOutcome("arxiv", request.plan.operation, records.length === 0 ? "no_data" : "ok", 1, records);
|
|
34
|
+
}
|
|
35
|
+
const result = await source.search({ query: request.input.title ?? request.input.citation, limit: options.maxCandidates ?? 5 }, signal);
|
|
28
36
|
if (result.status !== "ok")
|
|
29
37
|
return sourceOutcome("arxiv", request.plan.operation, result.status, 1, [], result.detail);
|
|
30
38
|
const records = result.value.map(arxivRecord);
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
// oxlint-disable-next-line eslint-js/no-restricted-syntax -- a publication year stands alone in untyped metadata; the boundaries keep the tail of a longer number out.
|
|
2
|
+
const YEAR_PATTERN = /\b(1[5-9]\d{2}|20\d{2}|21\d{2})\b/;
|
|
1
3
|
export function notApplicableOutcome(plan) {
|
|
2
4
|
return {
|
|
3
5
|
source: plan.source,
|
|
@@ -15,7 +17,7 @@ export function sourceOutcome(source, operation, status, requestCount, records =
|
|
|
15
17
|
status,
|
|
16
18
|
requestCount,
|
|
17
19
|
records,
|
|
18
|
-
|
|
20
|
+
detail,
|
|
19
21
|
};
|
|
20
22
|
}
|
|
21
23
|
/**
|
|
@@ -31,7 +33,7 @@ export function parseYear(value) {
|
|
|
31
33
|
return value;
|
|
32
34
|
if (typeof value !== "string")
|
|
33
35
|
return undefined;
|
|
34
|
-
const match = value.match(
|
|
36
|
+
const match = value.match(YEAR_PATTERN);
|
|
35
37
|
return match?.[1] === undefined ? undefined : Number(match[1]);
|
|
36
38
|
}
|
|
37
39
|
export function firstNonEmpty(values) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { CitationSourceClient } from "../types.js";
|
|
2
2
|
import { type SourceHttpOptions } from "../../literature/sources/http.js";
|
|
3
|
-
export
|
|
3
|
+
export type CrossrefClientOptions = SourceHttpOptions & {
|
|
4
4
|
readonly mailto?: string;
|
|
5
5
|
readonly userAgent?: string;
|
|
6
6
|
readonly maxCandidates?: number;
|
|
7
|
-
}
|
|
7
|
+
};
|
|
8
8
|
export declare function createCrossrefClient(options?: CrossrefClientOptions): CitationSourceClient;
|
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { encodeDoiPath, firstNonEmpty, parseYear, sourceOutcome } from "./common.js";
|
|
3
|
+
import { firstSegmentOf } from "../../lib/text.js";
|
|
3
4
|
import { requestJson } from "../../literature/sources/http.js";
|
|
4
|
-
const CrossrefItemSchema = z
|
|
5
|
-
.object({
|
|
5
|
+
const CrossrefItemSchema = z.looseObject({
|
|
6
6
|
DOI: z.string().optional(),
|
|
7
7
|
URL: z.string().optional(),
|
|
8
8
|
title: z.array(z.string()).optional(),
|
|
9
|
-
author: z.array(z.
|
|
9
|
+
author: z.array(z.looseObject({ given: z.string().optional(), family: z.string().optional(), name: z.string().optional() })).optional(),
|
|
10
10
|
issued: z.object({ "date-parts": z.array(z.array(z.number())).optional() }).optional(),
|
|
11
11
|
published: z.object({ "date-parts": z.array(z.array(z.number())).optional() }).optional(),
|
|
12
12
|
"container-title": z.array(z.string()).optional(),
|
|
13
13
|
volume: z.string().optional(),
|
|
14
14
|
page: z.string().optional(),
|
|
15
|
-
})
|
|
16
|
-
.passthrough();
|
|
15
|
+
});
|
|
17
16
|
const ExactSchema = z.object({ message: CrossrefItemSchema });
|
|
18
|
-
const SearchSchema = z.object({ message: z.
|
|
17
|
+
const SearchSchema = z.object({ message: z.looseObject({ items: z.array(CrossrefItemSchema) }) });
|
|
19
18
|
function crossrefRecord(item, index) {
|
|
20
19
|
const doi = item.DOI?.toLocaleLowerCase("en-US");
|
|
21
20
|
const sourceRecordId = firstNonEmpty([doi, item.URL, `candidate-${index}`]);
|
|
@@ -30,14 +29,14 @@ function crossrefRecord(item, index) {
|
|
|
30
29
|
return {
|
|
31
30
|
source: "crossref",
|
|
32
31
|
sourceRecordId,
|
|
33
|
-
identifiers: {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
32
|
+
identifiers: { doi },
|
|
33
|
+
title,
|
|
34
|
+
authors: authors !== undefined && authors.length > 0 ? authors : undefined,
|
|
35
|
+
year: dateParts?.[0] === undefined ? undefined : parseYear(dateParts[0]),
|
|
36
|
+
venue,
|
|
37
|
+
volume: item.volume,
|
|
38
|
+
firstPage: firstSegmentOf(item.page, "-–"),
|
|
39
|
+
url: item.URL,
|
|
41
40
|
};
|
|
42
41
|
}
|
|
43
42
|
export function createCrossrefClient(options = {}) {
|
|
@@ -66,29 +65,30 @@ export function createCrossrefClient(options = {}) {
|
|
|
66
65
|
}
|
|
67
66
|
const doi = request.normalized.identifiers.doi;
|
|
68
67
|
const exact = request.plan.operation === "crossref_doi_if_owned";
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
68
|
+
let url;
|
|
69
|
+
if (exact) {
|
|
70
|
+
if (doi === undefined)
|
|
71
|
+
return sourceOutcome("crossref", request.plan.operation, "unavailable", 0, [], "the exact plan carries no DOI");
|
|
72
|
+
const target = new URL(`https://api.crossref.org/works/${encodeDoiPath(doi)}`);
|
|
73
|
+
if (options.mailto)
|
|
74
|
+
target.searchParams.set("mailto", options.mailto);
|
|
75
|
+
url = target.toString();
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
const params = new URLSearchParams({
|
|
79
|
+
"query.bibliographic": request.input.citation,
|
|
80
|
+
rows: String(options.maxCandidates ?? 5),
|
|
81
|
+
});
|
|
82
|
+
if (options.mailto)
|
|
83
|
+
params.set("mailto", options.mailto);
|
|
84
|
+
url = `https://api.crossref.org/works?${params}`;
|
|
85
|
+
}
|
|
86
|
+
const fetched = exact
|
|
87
|
+
? await requestJson(url, ExactSchema, options, signal, { headers }).then((result) => result.status === "ok" ? { status: "ok", value: [result.value.message] } : result)
|
|
88
|
+
: await requestJson(url, SearchSchema, options, signal, { headers }).then((result) => result.status === "ok" ? { status: "ok", value: result.value.message.items } : result);
|
|
89
|
+
if (fetched.status !== "ok")
|
|
90
|
+
return sourceOutcome("crossref", request.plan.operation, fetched.status, 1, [], fetched.detail);
|
|
91
|
+
const records = fetched.value.flatMap((item, index) => {
|
|
92
92
|
const record = crossrefRecord(item, index);
|
|
93
93
|
return record === undefined ? [] : [record];
|
|
94
94
|
});
|
|
@@ -1,22 +1,21 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { encodeDoiPath, firstNonEmpty, parseYear, sourceOutcome } from "./common.js";
|
|
3
|
+
import { firstSegmentOf } from "../../lib/text.js";
|
|
3
4
|
import { requestJson } from "../../literature/sources/http.js";
|
|
4
|
-
const HandleResponseSchema = z.
|
|
5
|
-
const RegistrationAgencySchema = z.array(z.
|
|
6
|
-
const CslMetadataSchema = z
|
|
7
|
-
.object({
|
|
5
|
+
const HandleResponseSchema = z.looseObject({ responseCode: z.number() });
|
|
6
|
+
const RegistrationAgencySchema = z.array(z.looseObject({ DOI: z.string().optional(), RA: z.string().optional() }));
|
|
7
|
+
const CslMetadataSchema = z.looseObject({
|
|
8
8
|
DOI: z.string().optional(),
|
|
9
9
|
id: z.string().optional(),
|
|
10
10
|
title: z.union([z.string(), z.array(z.string())]).optional(),
|
|
11
|
-
author: z.array(z.
|
|
11
|
+
author: z.array(z.looseObject({ given: z.string().optional(), family: z.string().optional(), literal: z.string().optional() })).optional(),
|
|
12
12
|
issued: z.object({ "date-parts": z.array(z.array(z.number())).optional() }).optional(),
|
|
13
13
|
published: z.object({ "date-parts": z.array(z.array(z.number())).optional() }).optional(),
|
|
14
14
|
"container-title": z.union([z.string(), z.array(z.string())]).optional(),
|
|
15
15
|
volume: z.string().optional(),
|
|
16
16
|
page: z.string().optional(),
|
|
17
17
|
URL: z.string().optional(),
|
|
18
|
-
})
|
|
19
|
-
.passthrough();
|
|
18
|
+
});
|
|
20
19
|
function scalar(value) {
|
|
21
20
|
return Array.isArray(value) ? firstNonEmpty(value) : firstNonEmpty([value]);
|
|
22
21
|
}
|
|
@@ -31,14 +30,14 @@ function cslRecord(doi, registrationAgency, metadata) {
|
|
|
31
30
|
source: "doi_registry",
|
|
32
31
|
sourceRecordId: doi,
|
|
33
32
|
identifiers: { doi },
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
33
|
+
title,
|
|
34
|
+
authors: authors !== undefined && authors.length > 0 ? authors : undefined,
|
|
35
|
+
year: dateParts?.[0] === undefined ? undefined : parseYear(dateParts[0]),
|
|
36
|
+
venue,
|
|
37
|
+
volume: metadata?.volume,
|
|
38
|
+
firstPage: firstSegmentOf(metadata?.page, "-–"),
|
|
39
|
+
registrationAgency,
|
|
40
|
+
url: metadata?.URL,
|
|
42
41
|
};
|
|
43
42
|
}
|
|
44
43
|
export function createDoiRegistryClient(options = {}) {
|
|
@@ -86,7 +85,7 @@ export function createDoiRegistryClient(options = {}) {
|
|
|
86
85
|
type: "doi",
|
|
87
86
|
identifier: doi,
|
|
88
87
|
exists: true,
|
|
89
|
-
|
|
88
|
+
registrationAgency,
|
|
90
89
|
metadataAvailable: metadata !== undefined,
|
|
91
90
|
},
|
|
92
91
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { CitationSourceClient } from "../types.js";
|
|
2
2
|
import { type PubmedSourceOptions } from "../../literature/sources/pubmed.js";
|
|
3
|
-
export
|
|
3
|
+
export type PubmedCitationClientOptions = PubmedSourceOptions & {
|
|
4
4
|
readonly maxCandidates?: number;
|
|
5
|
-
}
|
|
5
|
+
};
|
|
6
6
|
export declare function createPubmedCitationClient(options?: PubmedCitationClientOptions): CitationSourceClient;
|
|
@@ -5,11 +5,11 @@ function pubmedRecord(article) {
|
|
|
5
5
|
return {
|
|
6
6
|
source: "pubmed",
|
|
7
7
|
sourceRecordId: article.pmid,
|
|
8
|
-
identifiers: { pmid: article.pmid,
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
identifiers: { pmid: article.pmid, doi: article.doi ? article.doi.toLocaleLowerCase("en-US") : undefined },
|
|
9
|
+
title: article.title ? article.title : undefined,
|
|
10
|
+
authors: article.authors.length > 0 ? article.authors : undefined,
|
|
11
|
+
year,
|
|
12
|
+
venue: article.journal ? article.journal : undefined,
|
|
13
13
|
url: `https://pubmed.ncbi.nlm.nih.gov/${article.pmid}/`,
|
|
14
14
|
};
|
|
15
15
|
}
|
|
@@ -21,16 +21,19 @@ export function createPubmedCitationClient(options = {}) {
|
|
|
21
21
|
let requestCount = 0;
|
|
22
22
|
let pmids;
|
|
23
23
|
if (request.plan.operation === "pubmed_exact") {
|
|
24
|
-
|
|
24
|
+
const pmid = request.normalized.identifiers.pmid;
|
|
25
|
+
if (pmid === undefined)
|
|
26
|
+
return sourceOutcome("pubmed", request.plan.operation, "unavailable", 0, [], "the exact plan carries no PMID");
|
|
27
|
+
pmids = [pmid];
|
|
25
28
|
}
|
|
26
29
|
else if (request.plan.operation === "pubmed_structured") {
|
|
27
30
|
requestCount += 1;
|
|
28
31
|
const match = await source.matchCitation({
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
venue: request.input.venue,
|
|
33
|
+
year: request.input.year,
|
|
34
|
+
volume: request.input.volume,
|
|
35
|
+
firstPage: request.input.firstPage,
|
|
36
|
+
firstAuthor: request.input.authors?.[0],
|
|
34
37
|
key: "citation-0",
|
|
35
38
|
}, signal);
|
|
36
39
|
if (match.status !== "ok")
|
|
@@ -39,7 +42,7 @@ export function createPubmedCitationClient(options = {}) {
|
|
|
39
42
|
}
|
|
40
43
|
else {
|
|
41
44
|
requestCount += 1;
|
|
42
|
-
const term = request.plan.operation === "pubmed_doi" ? `${request.normalized.identifiers.doi}[AID]` : `${request.input.title ?? ""}[Title]`;
|
|
45
|
+
const term = request.plan.operation === "pubmed_doi" ? `${String(request.normalized.identifiers.doi)}[AID]` : `${request.input.title ?? ""}[Title]`;
|
|
43
46
|
const search = await source.searchIds(term, options.maxCandidates ?? 5, signal);
|
|
44
47
|
if (search.status !== "ok")
|
|
45
48
|
return sourceOutcome("pubmed", request.plan.operation, search.status, requestCount, [], search.detail);
|
|
@@ -77,7 +80,11 @@ export function createPubmedCitationClient(options = {}) {
|
|
|
77
80
|
if (results[index] === undefined)
|
|
78
81
|
results[index] = await resolve(request, signal);
|
|
79
82
|
}));
|
|
80
|
-
return results.map((result) =>
|
|
83
|
+
return results.map((result) => {
|
|
84
|
+
if (result === undefined)
|
|
85
|
+
throw new Error("the pubmed batch left an outcome unresolved");
|
|
86
|
+
return result;
|
|
87
|
+
});
|
|
81
88
|
}
|
|
82
89
|
return { source: "pubmed", resolve, resolveMany };
|
|
83
90
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { CitationSourceClient } from "../types.js";
|
|
2
2
|
import { type SemanticScholarSourceOptions } from "../../literature/sources/semantic-scholar.js";
|
|
3
|
-
export
|
|
3
|
+
export type SemanticScholarCitationClientOptions = SemanticScholarSourceOptions & {
|
|
4
4
|
readonly maxCandidates?: number;
|
|
5
|
-
}
|
|
5
|
+
};
|
|
6
6
|
export declare function createSemanticScholarCitationClient(options?: SemanticScholarCitationClientOptions): CitationSourceClient;
|
|
@@ -13,16 +13,16 @@ function semanticRecord(paper) {
|
|
|
13
13
|
source: "semantic_scholar",
|
|
14
14
|
sourceRecordId: paper.id,
|
|
15
15
|
identifiers: {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
doi,
|
|
17
|
+
pmid,
|
|
18
|
+
arxiv,
|
|
19
|
+
corpusId,
|
|
20
20
|
},
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
title: paper.title,
|
|
22
|
+
authors: paper.authors.length > 0 ? paper.authors : undefined,
|
|
23
|
+
year: paper.year,
|
|
24
|
+
venue: paper.venue,
|
|
25
|
+
url: paper.url,
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
28
|
export function createSemanticScholarCitationClient(options = {}) {
|
|
@@ -10,7 +10,7 @@ function recordValue(record, field) {
|
|
|
10
10
|
return record[field];
|
|
11
11
|
}
|
|
12
12
|
function normalizedValue(field, value) {
|
|
13
|
-
if (field === "authors")
|
|
13
|
+
if (field === "authors" && Array.isArray(value))
|
|
14
14
|
return value.map(normalizeAuthor).sort().join("|");
|
|
15
15
|
if (field === "year")
|
|
16
16
|
return String(value);
|
|
@@ -20,7 +20,7 @@ function authorMatch(supplied, source) {
|
|
|
20
20
|
return supplied.every((author) => source.some((candidate) => authorNamesMatch(author, candidate)));
|
|
21
21
|
}
|
|
22
22
|
function fieldMatches(field, supplied, source) {
|
|
23
|
-
if (field === "authors")
|
|
23
|
+
if (field === "authors" && Array.isArray(supplied) && Array.isArray(source))
|
|
24
24
|
return authorMatch(supplied, source);
|
|
25
25
|
if (field === "year")
|
|
26
26
|
return Math.abs(Number(supplied) - Number(source)) <= 1;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { CitationCandidateCluster, CitationInput, CitationRecord, NormalizedCitation } from "./types.js";
|
|
2
|
-
export
|
|
2
|
+
export type CitationMatchConfig = {
|
|
3
3
|
readonly minimumScore: number;
|
|
4
4
|
readonly separationMargin: number;
|
|
5
5
|
readonly clusterSimilarity: number;
|
|
6
6
|
readonly relatedVersionSimilarity: number;
|
|
7
|
-
}
|
|
7
|
+
};
|
|
8
8
|
export declare const DEFAULT_MATCH_CONFIG: CitationMatchConfig;
|
|
9
9
|
export declare function tokenSimilarity(left: string, right: string): number;
|
|
10
10
|
export declare function clusterCitationRecords(input: CitationInput, normalized: NormalizedCitation, records: readonly CitationRecord[], config?: CitationMatchConfig): CitationCandidateCluster[];
|
package/dist/citations/match.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
+
import { presentAt } from "../lib/present.js";
|
|
2
3
|
import { authorNamesMatch, normalizeAuthor, normalizeComparable } from "./normalize.js";
|
|
3
4
|
export const DEFAULT_MATCH_CONFIG = {
|
|
4
5
|
minimumScore: 0.72,
|
|
@@ -36,7 +37,11 @@ function authorSimilarity(left, right) {
|
|
|
36
37
|
return intersection / Math.min(a.length, b.length);
|
|
37
38
|
}
|
|
38
39
|
function identifierEntries(identifiers) {
|
|
39
|
-
|
|
40
|
+
// Object.entries types the values as `string`, but a record can carry a key set to
|
|
41
|
+
// `undefined` (the clients build `identifiers: { doi }` verbatim), so the entry value
|
|
42
|
+
// is widened to keep the skip of undefined values.
|
|
43
|
+
const entries = Object.entries(identifiers);
|
|
44
|
+
return entries.flatMap(([kind, value]) => (value === undefined ? [] : [`${kind}:${value.toLocaleLowerCase("en-US")}`]));
|
|
40
45
|
}
|
|
41
46
|
function sharesStrongIdentifier(left, right) {
|
|
42
47
|
const rightIds = new Set(identifierEntries(right.identifiers));
|
|
@@ -69,7 +74,7 @@ class UnionFind {
|
|
|
69
74
|
this.parent = Array.from({ length: size }, (_, index) => index);
|
|
70
75
|
}
|
|
71
76
|
find(index) {
|
|
72
|
-
const parent = this.parent
|
|
77
|
+
const parent = presentAt(this.parent, index, "the parent link");
|
|
73
78
|
if (parent === index)
|
|
74
79
|
return index;
|
|
75
80
|
const root = this.find(parent);
|
|
@@ -111,8 +116,8 @@ function containsId(cluster, key) {
|
|
|
111
116
|
function addRelatedVersions(clusters, config) {
|
|
112
117
|
for (let left = 0; left < clusters.length; left += 1) {
|
|
113
118
|
for (let right = left + 1; right < clusters.length; right += 1) {
|
|
114
|
-
const a = clusters
|
|
115
|
-
const b = clusters
|
|
119
|
+
const a = presentAt(clusters, left, "the left cluster");
|
|
120
|
+
const b = presentAt(clusters, right, "the right cluster");
|
|
116
121
|
const similarity = Math.max(...a.records.flatMap((one) => b.records.map((two) => recordSimilarity(one, two))));
|
|
117
122
|
if (similarity < config.relatedVersionSimilarity)
|
|
118
123
|
continue;
|
|
@@ -139,8 +144,8 @@ export function clusterCitationRecords(input, normalized, records, config = DEFA
|
|
|
139
144
|
const union = new UnionFind(records.length);
|
|
140
145
|
for (let left = 0; left < records.length; left += 1) {
|
|
141
146
|
for (let right = left + 1; right < records.length; right += 1) {
|
|
142
|
-
const a = records
|
|
143
|
-
const b = records
|
|
147
|
+
const a = presentAt(records, left, "the left record");
|
|
148
|
+
const b = presentAt(records, right, "the right record");
|
|
144
149
|
if (sharesStrongIdentifier(a, b))
|
|
145
150
|
union.union(left, right);
|
|
146
151
|
else if ((!hasStrongIdentifier(a) || !hasStrongIdentifier(b)) && recordSimilarity(a, b) >= config.clusterSimilarity)
|
|
@@ -150,7 +155,7 @@ export function clusterCitationRecords(input, normalized, records, config = DEFA
|
|
|
150
155
|
const grouped = new Map();
|
|
151
156
|
for (let index = 0; index < records.length; index += 1) {
|
|
152
157
|
const root = union.find(index);
|
|
153
|
-
grouped.set(root, [...(grouped.get(root) ?? []), records
|
|
158
|
+
grouped.set(root, [...(grouped.get(root) ?? []), presentAt(records, index, "the record")]);
|
|
154
159
|
}
|
|
155
160
|
const clusters = [...grouped.values()].map((members) => ({
|
|
156
161
|
id: stableClusterId(members),
|