open-multi-agent-kit 0.80.6 → 0.80.7
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/CHANGELOG.md +11 -1
- package/README.md +22 -14
- package/dist/cli/config-selector.d.ts +1 -1
- package/dist/cli/config-selector.d.ts.map +1 -1
- package/dist/cli/config-selector.js +1 -1
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +9 -8
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session.d.ts +45 -6
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +197 -13
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-storage.d.ts +4 -1
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +5 -5
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/bash-executor.d.ts.map +1 -1
- package/dist/core/bash-executor.js +1 -1
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/command-safety.d.ts +11 -0
- package/dist/core/command-safety.d.ts.map +1 -0
- package/dist/core/command-safety.js +528 -0
- package/dist/core/command-safety.js.map +1 -0
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +14 -4
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +18 -1
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +80 -42
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/pruner-policy.d.ts +84 -0
- package/dist/core/compaction/pruner-policy.d.ts.map +1 -0
- package/dist/core/compaction/pruner-policy.js +273 -0
- package/dist/core/compaction/pruner-policy.js.map +1 -0
- package/dist/core/context-graph-identity-resolution.d.ts +114 -0
- package/dist/core/context-graph-identity-resolution.d.ts.map +1 -0
- package/dist/core/context-graph-identity-resolution.js +127 -0
- package/dist/core/context-graph-identity-resolution.js.map +1 -0
- package/dist/core/context-graph-memory-store.d.ts +153 -0
- package/dist/core/context-graph-memory-store.d.ts.map +1 -0
- package/dist/core/context-graph-memory-store.js +377 -0
- package/dist/core/context-graph-memory-store.js.map +1 -0
- package/dist/core/context-graph-ontology-generation.d.ts +104 -0
- package/dist/core/context-graph-ontology-generation.d.ts.map +1 -0
- package/dist/core/context-graph-ontology-generation.js +135 -0
- package/dist/core/context-graph-ontology-generation.js.map +1 -0
- package/dist/core/context-graph-ontology-registry.d.ts +766 -0
- package/dist/core/context-graph-ontology-registry.d.ts.map +1 -0
- package/dist/core/context-graph-ontology-registry.js +1133 -0
- package/dist/core/context-graph-ontology-registry.js.map +1 -0
- package/dist/core/context-graph-policy.d.ts +68 -0
- package/dist/core/context-graph-policy.d.ts.map +1 -0
- package/dist/core/context-graph-policy.js +221 -0
- package/dist/core/context-graph-policy.js.map +1 -0
- package/dist/core/context-graph-reasoning.d.ts +130 -0
- package/dist/core/context-graph-reasoning.d.ts.map +1 -0
- package/dist/core/context-graph-reasoning.js +442 -0
- package/dist/core/context-graph-reasoning.js.map +1 -0
- package/dist/core/context-graph-retrieval.d.ts +120 -0
- package/dist/core/context-graph-retrieval.d.ts.map +1 -0
- package/dist/core/context-graph-retrieval.js +288 -0
- package/dist/core/context-graph-retrieval.js.map +1 -0
- package/dist/core/contract-verification.d.ts +78 -0
- package/dist/core/contract-verification.d.ts.map +1 -0
- package/dist/core/contract-verification.js +110 -0
- package/dist/core/contract-verification.js.map +1 -0
- package/dist/core/exact-cache-policy.d.ts +100 -0
- package/dist/core/exact-cache-policy.d.ts.map +1 -0
- package/dist/core/exact-cache-policy.js +175 -0
- package/dist/core/exact-cache-policy.js.map +1 -0
- package/dist/core/exec.d.ts +2 -0
- package/dist/core/exec.d.ts.map +1 -1
- package/dist/core/exec.js +1 -0
- package/dist/core/exec.js.map +1 -1
- package/dist/core/export-html/template.js +2 -2
- package/dist/core/extensions/builtin/command-safety-gate.d.ts +77 -0
- package/dist/core/extensions/builtin/command-safety-gate.d.ts.map +1 -0
- package/dist/core/extensions/builtin/command-safety-gate.js +147 -0
- package/dist/core/extensions/builtin/command-safety-gate.js.map +1 -0
- package/dist/core/extensions/loader.d.ts +4 -4
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +94 -56
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +1 -1
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +38 -10
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/freedom/banner.d.ts +14 -0
- package/dist/core/freedom/banner.d.ts.map +1 -0
- package/dist/core/freedom/banner.js +22 -0
- package/dist/core/freedom/banner.js.map +1 -0
- package/dist/core/freedom/config.d.ts +27 -0
- package/dist/core/freedom/config.d.ts.map +1 -0
- package/dist/core/freedom/config.js +216 -0
- package/dist/core/freedom/config.js.map +1 -0
- package/dist/core/freedom/index.d.ts +23 -0
- package/dist/core/freedom/index.d.ts.map +1 -0
- package/dist/core/freedom/index.js +19 -0
- package/dist/core/freedom/index.js.map +1 -0
- package/dist/core/freedom/policy.d.ts +42 -0
- package/dist/core/freedom/policy.d.ts.map +1 -0
- package/dist/core/freedom/policy.js +47 -0
- package/dist/core/freedom/policy.js.map +1 -0
- package/dist/core/freedom/safety-floor.d.ts +73 -0
- package/dist/core/freedom/safety-floor.d.ts.map +1 -0
- package/dist/core/freedom/safety-floor.js +275 -0
- package/dist/core/freedom/safety-floor.js.map +1 -0
- package/dist/core/harness-control-events.d.ts +13 -1
- package/dist/core/harness-control-events.d.ts.map +1 -1
- package/dist/core/harness-control-events.js +216 -41
- package/dist/core/harness-control-events.js.map +1 -1
- package/dist/core/harness-control-replay.d.ts +7 -2
- package/dist/core/harness-control-replay.d.ts.map +1 -1
- package/dist/core/harness-control-replay.js +36 -4
- package/dist/core/harness-control-replay.js.map +1 -1
- package/dist/core/headroom-middleware.d.ts +35 -0
- package/dist/core/headroom-middleware.d.ts.map +1 -0
- package/dist/core/headroom-middleware.js +166 -0
- package/dist/core/headroom-middleware.js.map +1 -0
- package/dist/core/hook-inventory.d.ts +23 -0
- package/dist/core/hook-inventory.d.ts.map +1 -0
- package/dist/core/hook-inventory.js +50 -0
- package/dist/core/hook-inventory.js.map +1 -0
- package/dist/core/lean-context-middleware.d.ts +12 -0
- package/dist/core/lean-context-middleware.d.ts.map +1 -0
- package/dist/core/lean-context-middleware.js +87 -0
- package/dist/core/lean-context-middleware.js.map +1 -0
- package/dist/core/lean-context-policy.d.ts +45 -0
- package/dist/core/lean-context-policy.d.ts.map +1 -0
- package/dist/core/lean-context-policy.js +108 -0
- package/dist/core/lean-context-policy.js.map +1 -0
- package/dist/core/loadout-access-policy.d.ts +41 -0
- package/dist/core/loadout-access-policy.d.ts.map +1 -0
- package/dist/core/loadout-access-policy.js +182 -0
- package/dist/core/loadout-access-policy.js.map +1 -0
- package/dist/core/loadout-runtime.d.ts +84 -0
- package/dist/core/loadout-runtime.d.ts.map +1 -0
- package/dist/core/loadout-runtime.js +157 -0
- package/dist/core/loadout-runtime.js.map +1 -0
- package/dist/core/loadouts.d.ts +147 -0
- package/dist/core/loadouts.d.ts.map +1 -0
- package/dist/core/loadouts.js +442 -0
- package/dist/core/loadouts.js.map +1 -0
- package/dist/core/mcp-inventory.d.ts +34 -0
- package/dist/core/mcp-inventory.d.ts.map +1 -1
- package/dist/core/mcp-inventory.js +53 -1
- package/dist/core/mcp-inventory.js.map +1 -1
- package/dist/core/mcp-presets.d.ts +57 -0
- package/dist/core/mcp-presets.d.ts.map +1 -0
- package/dist/core/mcp-presets.js +81 -0
- package/dist/core/mcp-presets.js.map +1 -0
- package/dist/core/model-registry.d.ts +1 -0
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +40 -17
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +1 -0
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/native-adoption-benchmark.d.ts +166 -0
- package/dist/core/native-adoption-benchmark.d.ts.map +1 -0
- package/dist/core/native-adoption-benchmark.js +624 -0
- package/dist/core/native-adoption-benchmark.js.map +1 -0
- package/dist/core/observability-trace.d.ts +80 -0
- package/dist/core/observability-trace.d.ts.map +1 -0
- package/dist/core/observability-trace.js +140 -0
- package/dist/core/observability-trace.js.map +1 -0
- package/dist/core/orchestration/checkpoint.d.ts +83 -0
- package/dist/core/orchestration/checkpoint.d.ts.map +1 -0
- package/dist/core/orchestration/checkpoint.js +152 -0
- package/dist/core/orchestration/checkpoint.js.map +1 -0
- package/dist/core/orchestration/errors.d.ts +74 -0
- package/dist/core/orchestration/errors.d.ts.map +1 -0
- package/dist/core/orchestration/errors.js +52 -0
- package/dist/core/orchestration/errors.js.map +1 -0
- package/dist/core/orchestration/merge-queue.d.ts +121 -0
- package/dist/core/orchestration/merge-queue.d.ts.map +1 -0
- package/dist/core/orchestration/merge-queue.js +149 -0
- package/dist/core/orchestration/merge-queue.js.map +1 -0
- package/dist/core/orchestration/recovery.d.ts +106 -0
- package/dist/core/orchestration/recovery.d.ts.map +1 -0
- package/dist/core/orchestration/recovery.js +110 -0
- package/dist/core/orchestration/recovery.js.map +1 -0
- package/dist/core/orchestration/replay-ledger.d.ts +76 -0
- package/dist/core/orchestration/replay-ledger.d.ts.map +1 -0
- package/dist/core/orchestration/replay-ledger.js +395 -0
- package/dist/core/orchestration/replay-ledger.js.map +1 -0
- package/dist/core/orchestration/scheduler-state.d.ts +78 -0
- package/dist/core/orchestration/scheduler-state.d.ts.map +1 -0
- package/dist/core/orchestration/scheduler-state.js +185 -0
- package/dist/core/orchestration/scheduler-state.js.map +1 -0
- package/dist/core/orchestration/scheduler-store.d.ts +309 -0
- package/dist/core/orchestration/scheduler-store.d.ts.map +1 -0
- package/dist/core/orchestration/scheduler-store.js +368 -0
- package/dist/core/orchestration/scheduler-store.js.map +1 -0
- package/dist/core/orchestration/sqlite-scheduler-store.d.ts +57 -0
- package/dist/core/orchestration/sqlite-scheduler-store.d.ts.map +1 -0
- package/dist/core/orchestration/sqlite-scheduler-store.js +528 -0
- package/dist/core/orchestration/sqlite-scheduler-store.js.map +1 -0
- package/dist/core/orchestration/transaction-coordinator.d.ts +217 -0
- package/dist/core/orchestration/transaction-coordinator.d.ts.map +1 -0
- package/dist/core/orchestration/transaction-coordinator.js +281 -0
- package/dist/core/orchestration/transaction-coordinator.js.map +1 -0
- package/dist/core/orchestration/verification-contract.d.ts +197 -0
- package/dist/core/orchestration/verification-contract.d.ts.map +1 -0
- package/dist/core/orchestration/verification-contract.js +145 -0
- package/dist/core/orchestration/verification-contract.js.map +1 -0
- package/dist/core/package-composition.d.ts +68 -0
- package/dist/core/package-composition.d.ts.map +1 -0
- package/dist/core/package-composition.js +304 -0
- package/dist/core/package-composition.js.map +1 -0
- package/dist/core/package-gallery.d.ts +124 -0
- package/dist/core/package-gallery.d.ts.map +1 -0
- package/dist/core/package-gallery.js +392 -0
- package/dist/core/package-gallery.js.map +1 -0
- package/dist/core/package-manager.d.ts +69 -0
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +367 -69
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/package-procurement.d.ts +268 -0
- package/dist/core/package-procurement.d.ts.map +1 -0
- package/dist/core/package-procurement.js +697 -0
- package/dist/core/package-procurement.js.map +1 -0
- package/dist/core/package-trial-runtime.d.ts +75 -0
- package/dist/core/package-trial-runtime.d.ts.map +1 -0
- package/dist/core/package-trial-runtime.js +73 -0
- package/dist/core/package-trial-runtime.js.map +1 -0
- package/dist/core/package-trial-sandbox.d.ts +27 -0
- package/dist/core/package-trial-sandbox.d.ts.map +1 -0
- package/dist/core/package-trial-sandbox.js +102 -0
- package/dist/core/package-trial-sandbox.js.map +1 -0
- package/dist/core/policy-overlays-runtime.d.ts +141 -0
- package/dist/core/policy-overlays-runtime.d.ts.map +1 -0
- package/dist/core/policy-overlays-runtime.js +720 -0
- package/dist/core/policy-overlays-runtime.js.map +1 -0
- package/dist/core/read-anchor-registry.d.ts +27 -0
- package/dist/core/read-anchor-registry.d.ts.map +1 -0
- package/dist/core/read-anchor-registry.js +103 -0
- package/dist/core/read-anchor-registry.js.map +1 -0
- package/dist/core/read-anchors.d.ts +110 -0
- package/dist/core/read-anchors.d.ts.map +1 -0
- package/dist/core/read-anchors.js +193 -0
- package/dist/core/read-anchors.js.map +1 -0
- package/dist/core/read-content-cache.d.ts +22 -0
- package/dist/core/read-content-cache.d.ts.map +1 -0
- package/dist/core/read-content-cache.js +79 -0
- package/dist/core/read-content-cache.js.map +1 -0
- package/dist/core/recovery-checkpoint.d.ts +196 -0
- package/dist/core/recovery-checkpoint.d.ts.map +1 -0
- package/dist/core/recovery-checkpoint.js +382 -0
- package/dist/core/recovery-checkpoint.js.map +1 -0
- package/dist/core/resolve-config-value.d.ts +1 -1
- package/dist/core/resolve-config-value.d.ts.map +1 -1
- package/dist/core/resolve-config-value.js +30 -2
- package/dist/core/resolve-config-value.js.map +1 -1
- package/dist/core/resource-loader.d.ts +23 -21
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +93 -15
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/sandbox/backend.d.ts +25 -0
- package/dist/core/sandbox/backend.d.ts.map +1 -0
- package/dist/core/sandbox/backend.js +150 -0
- package/dist/core/sandbox/backend.js.map +1 -0
- package/dist/core/sandbox/env.d.ts +6 -0
- package/dist/core/sandbox/env.d.ts.map +1 -0
- package/dist/core/sandbox/env.js +46 -0
- package/dist/core/sandbox/env.js.map +1 -0
- package/dist/core/sandbox/path-resolver.d.ts +4 -0
- package/dist/core/sandbox/path-resolver.d.ts.map +1 -0
- package/dist/core/sandbox/path-resolver.js +44 -0
- package/dist/core/sandbox/path-resolver.js.map +1 -0
- package/dist/core/sandbox/policy.d.ts +87 -0
- package/dist/core/sandbox/policy.d.ts.map +1 -0
- package/dist/core/sandbox/policy.js +280 -0
- package/dist/core/sandbox/policy.js.map +1 -0
- package/dist/core/sandbox/spawn.d.ts +20 -0
- package/dist/core/sandbox/spawn.d.ts.map +1 -0
- package/dist/core/sandbox/spawn.js +80 -0
- package/dist/core/sandbox/spawn.js.map +1 -0
- package/dist/core/sdk.d.ts +83 -4
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +143 -55
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/semantic-cache-policy.d.ts +45 -0
- package/dist/core/semantic-cache-policy.d.ts.map +1 -0
- package/dist/core/semantic-cache-policy.js +220 -0
- package/dist/core/semantic-cache-policy.js.map +1 -0
- package/dist/core/session-digest.d.ts +57 -0
- package/dist/core/session-digest.d.ts.map +1 -0
- package/dist/core/session-digest.js +193 -0
- package/dist/core/session-digest.js.map +1 -0
- package/dist/core/session-manager.d.ts +2 -2
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +5 -4
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +14 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +43 -2
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +25 -7
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/telemetry.d.ts.map +1 -1
- package/dist/core/telemetry.js +1 -1
- package/dist/core/telemetry.js.map +1 -1
- package/dist/core/timings.d.ts +1 -1
- package/dist/core/timings.d.ts.map +1 -1
- package/dist/core/timings.js +2 -2
- package/dist/core/timings.js.map +1 -1
- package/dist/core/tools/bash.d.ts +28 -3
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +53 -10
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit.d.ts +12 -0
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +24 -0
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/find.d.ts +3 -0
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +3 -0
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts +3 -0
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +4 -1
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/index.d.ts +1 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/ls.d.ts +3 -0
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js +3 -0
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/output-accumulator.d.ts.map +1 -1
- package/dist/core/tools/output-accumulator.js +1 -1
- package/dist/core/tools/output-accumulator.js.map +1 -1
- package/dist/core/tools/read.d.ts +13 -0
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +29 -2
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/write.d.ts +3 -0
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +3 -0
- package/dist/core/tools/write.js.map +1 -1
- package/dist/index.d.ts +19 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -2
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +4 -6
- package/dist/main.js.map +1 -1
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +1 -1
- package/dist/migrations.js.map +1 -1
- package/dist/modes/interactive/components/control-panel-gradient-motion.d.ts +28 -0
- package/dist/modes/interactive/components/control-panel-gradient-motion.d.ts.map +1 -0
- package/dist/modes/interactive/components/control-panel-gradient-motion.js +146 -0
- package/dist/modes/interactive/components/control-panel-gradient-motion.js.map +1 -0
- package/dist/modes/interactive/components/control-panel-gradient.d.ts +27 -0
- package/dist/modes/interactive/components/control-panel-gradient.d.ts.map +1 -0
- package/dist/modes/interactive/components/control-panel-gradient.js +127 -0
- package/dist/modes/interactive/components/control-panel-gradient.js.map +1 -0
- package/dist/modes/interactive/components/control-panel.d.ts +28 -1
- package/dist/modes/interactive/components/control-panel.d.ts.map +1 -1
- package/dist/modes/interactive/components/control-panel.js +153 -3
- package/dist/modes/interactive/components/control-panel.js.map +1 -1
- package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
- package/dist/modes/interactive/components/earendil-announcement.js +1 -1
- package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-editor.js +1 -1
- package/dist/modes/interactive/components/extension-editor.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +8 -0
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/mcp-selector.d.ts +2 -0
- package/dist/modes/interactive/components/mcp-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/mcp-selector.js +18 -1
- package/dist/modes/interactive/components/mcp-selector.js.map +1 -1
- package/dist/modes/interactive/components/model-selector-state.d.ts +101 -0
- package/dist/modes/interactive/components/model-selector-state.d.ts.map +1 -0
- package/dist/modes/interactive/components/model-selector-state.js +261 -0
- package/dist/modes/interactive/components/model-selector-state.js.map +1 -0
- package/dist/modes/interactive/components/model-selector.d.ts +44 -10
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +163 -110
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/theme-selector.d.ts +1 -0
- package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/theme-selector.js +10 -1
- package/dist/modes/interactive/components/theme-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +4 -2
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +61 -13
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/omk-blackboard.json +91 -0
- package/dist/modes/interactive/theme/omk-freedom-grid.json +91 -0
- package/dist/modes/interactive/theme/omk-neon-ops.json +90 -0
- package/dist/modes/interactive/theme/omk-slate-light.json +91 -0
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +14 -0
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/print-mode.d.ts +2 -2
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +2 -2
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +4 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +114 -49
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/utils/clipboard-image.d.ts.map +1 -1
- package/dist/utils/clipboard-image.js +1 -1
- package/dist/utils/clipboard-image.js.map +1 -1
- package/dist/utils/omk-user-agent.d.ts +2 -0
- package/dist/utils/omk-user-agent.d.ts.map +1 -0
- package/dist/utils/{pi-user-agent.js → omk-user-agent.js} +2 -2
- package/dist/utils/omk-user-agent.js.map +1 -0
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js +1 -1
- package/dist/utils/tools-manager.js.map +1 -1
- package/dist/utils/version-check.d.ts +5 -5
- package/dist/utils/version-check.d.ts.map +1 -1
- package/dist/utils/version-check.js +8 -11
- package/dist/utils/version-check.js.map +1 -1
- package/dist/utils/windows-self-update.d.ts.map +1 -1
- package/dist/utils/windows-self-update.js +1 -1
- package/dist/utils/windows-self-update.js.map +1 -1
- package/docs/packages.md +47 -6
- package/docs/prompt-templates.md +2 -0
- package/docs/usage.md +16 -6
- package/examples/README.md +1 -1
- package/examples/extensions/README.md +11 -11
- package/examples/extensions/auto-commit-on-exit.ts +6 -6
- package/examples/extensions/bash-spawn-hook.ts +4 -4
- package/examples/extensions/bookmark.ts +5 -5
- package/examples/extensions/border-status-editor.ts +7 -7
- package/examples/extensions/built-in-tool-renderer.ts +6 -6
- package/examples/extensions/claude-rules.ts +4 -4
- package/examples/extensions/commands.ts +5 -5
- package/examples/extensions/confirm-destructive.ts +3 -3
- package/examples/extensions/custom-compaction.ts +3 -3
- package/examples/extensions/custom-footer.ts +2 -2
- package/examples/extensions/custom-header.ts +5 -5
- package/examples/extensions/custom-provider-anthropic/index.ts +4 -4
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +3 -3
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/dirty-repo-guard.ts +7 -7
- package/examples/extensions/doom-overlay/README.md +3 -3
- package/examples/extensions/doom-overlay/doom/build.sh +2 -2
- package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +1 -1
- package/examples/extensions/doom-overlay/index.ts +3 -3
- package/examples/extensions/dynamic-resources/dynamic.json +1 -1
- package/examples/extensions/dynamic-resources/index.ts +2 -2
- package/examples/extensions/dynamic-tools.ts +4 -4
- package/examples/extensions/event-bus.ts +8 -8
- package/examples/extensions/file-trigger.ts +3 -3
- package/examples/extensions/git-checkpoint.ts +7 -7
- package/examples/extensions/git-merge-and-resolve.ts +14 -14
- package/examples/extensions/github-issue-autocomplete.ts +6 -6
- package/examples/extensions/gondolin/index.ts +16 -16
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/handoff.ts +2 -2
- package/examples/extensions/hello.ts +2 -2
- package/examples/extensions/hidden-thinking-label.ts +4 -4
- package/examples/extensions/inline-bash.ts +5 -5
- package/examples/extensions/input-transform-streaming.ts +5 -5
- package/examples/extensions/input-transform.ts +5 -5
- package/examples/extensions/interactive-shell.ts +3 -3
- package/examples/extensions/mac-system-theme.ts +5 -5
- package/examples/extensions/message-renderer.ts +4 -4
- package/examples/extensions/minimal-mode.ts +9 -9
- package/examples/extensions/modal-editor.ts +3 -3
- package/examples/extensions/model-status.ts +3 -3
- package/examples/extensions/notify.ts +5 -5
- package/examples/extensions/overlay-qa-tests.ts +20 -20
- package/examples/extensions/overlay-test.ts +3 -3
- package/examples/extensions/permission-gate.ts +2 -2
- package/examples/extensions/pirate.ts +4 -4
- package/examples/extensions/plan-mode/index.ts +22 -22
- package/examples/extensions/preset.ts +30 -30
- package/examples/extensions/prompt-customizer.ts +3 -3
- package/examples/extensions/protected-paths.ts +2 -2
- package/examples/extensions/provider-payload.ts +5 -5
- package/examples/extensions/qna.ts +2 -2
- package/examples/extensions/question.ts +2 -2
- package/examples/extensions/questionnaire.ts +2 -2
- package/examples/extensions/rainbow-editor.ts +3 -3
- package/examples/extensions/reload-runtime.ts +4 -4
- package/examples/extensions/rpc-demo.ts +10 -10
- package/examples/extensions/sandbox/index.ts +17 -17
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/send-user-message.ts +13 -13
- package/examples/extensions/session-name.ts +4 -4
- package/examples/extensions/shutdown-command.ts +10 -10
- package/examples/extensions/snake.ts +3 -3
- package/examples/extensions/space-invaders.ts +3 -3
- package/examples/extensions/ssh.ts +12 -12
- package/examples/extensions/status-line.ts +4 -4
- package/examples/extensions/structured-output.ts +2 -2
- package/examples/extensions/subagent/README.md +13 -13
- package/examples/extensions/subagent/agents.ts +2 -2
- package/examples/extensions/subagent/index.ts +53 -21
- package/examples/extensions/summarize.ts +2 -2
- package/examples/extensions/system-prompt-header.ts +3 -3
- package/examples/extensions/tic-tac-toe.ts +15 -15
- package/examples/extensions/timed-confirm.ts +4 -4
- package/examples/extensions/titlebar-spinner.ts +9 -9
- package/examples/extensions/todo.ts +5 -5
- package/examples/extensions/tool-override.ts +5 -5
- package/examples/extensions/tools.ts +10 -10
- package/examples/extensions/trigger-compact.ts +3 -3
- package/examples/extensions/truncated-tool.ts +3 -3
- package/examples/extensions/widget-placement.ts +2 -2
- package/examples/extensions/with-deps/index.ts +2 -2
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/examples/extensions/working-indicator.ts +7 -7
- package/examples/extensions/working-message-test.ts +3 -3
- package/examples/sdk/01-minimal.ts +1 -1
- package/examples/sdk/03-custom-prompt.ts +1 -1
- package/examples/sdk/04-skills.ts +1 -1
- package/examples/sdk/05-tools.ts +1 -1
- package/examples/sdk/06-extensions.ts +11 -11
- package/examples/sdk/07-context-files.ts +2 -0
- package/examples/sdk/08-prompt-templates.ts +1 -1
- package/examples/sdk/09-api-keys-and-oauth.ts +2 -2
- package/examples/sdk/README.md +2 -2
- package/node_modules/@earendil-works/omk-agent-core/README.md +488 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/agent-loop.d.ts +24 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/agent-loop.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/agent-loop.js +553 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/agent-loop.js.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/agent.d.ts +118 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/agent.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/agent.js +402 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/agent.js.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/agent-harness.d.ts +95 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/agent-harness.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/agent-harness.js +996 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/agent-harness.js.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/branch-summarization.d.ts +53 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/branch-summarization.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/branch-summarization.js +175 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/branch-summarization.js.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/compaction.d.ts +117 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/compaction.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/compaction.js +568 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/compaction.js.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/utils.d.ts +25 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/utils.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/utils.js +131 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/compaction/utils.js.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/env/nodejs.d.ts +51 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/env/nodejs.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/env/nodejs.js +510 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/env/nodejs.js.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/messages.d.ts +51 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/messages.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/messages.js +102 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/messages.js.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/prompt-templates.d.ts +48 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/prompt-templates.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/prompt-templates.js +230 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/prompt-templates.js.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-repo.d.ts +26 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-repo.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-repo.js +101 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-repo.js.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-storage.d.ts +36 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-storage.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-storage.js +273 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/jsonl-storage.js.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-repo.d.ts +18 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-repo.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-repo.js +42 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-repo.js.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-storage.d.ts +25 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-storage.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-storage.js +114 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/memory-storage.js.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/repo-utils.d.ts +11 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/repo-utils.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/repo-utils.js +39 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/repo-utils.js.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/session.d.ts +33 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/session.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/session.js +210 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/session.js.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/uuid.d.ts +2 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/uuid.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/uuid.js +50 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/session/uuid.js.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/skills.d.ts +44 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/skills.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/skills.js +311 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/skills.js.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/system-prompt.d.ts +3 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/system-prompt.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/system-prompt.js +30 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/system-prompt.js.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/types.d.ts +616 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/types.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/types.js +94 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/types.js.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/shell-output.d.ts +14 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/shell-output.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/shell-output.js +126 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/shell-output.js.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/truncate.d.ts +70 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/truncate.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/truncate.js +297 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/harness/utils/truncate.js.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/index.d.ts +20 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/index.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/index.js +25 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/index.js.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/node.d.ts +3 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/node.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/node.js +3 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/node.js.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/proxy.d.ts +69 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/proxy.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/proxy.js +278 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/proxy.js.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/types.d.ts +393 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/types.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/types.js +2 -0
- package/node_modules/@earendil-works/omk-agent-core/dist/types.js.map +1 -0
- package/node_modules/@earendil-works/omk-agent-core/package.json +60 -0
- package/node_modules/@earendil-works/omk-ai/README.md +1389 -0
- package/node_modules/@earendil-works/omk-ai/dist/api-registry.d.ts +20 -0
- package/node_modules/@earendil-works/omk-ai/dist/api-registry.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/api-registry.js +44 -0
- package/node_modules/@earendil-works/omk-ai/dist/api-registry.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/bedrock-provider.d.ts +5 -0
- package/node_modules/@earendil-works/omk-ai/dist/bedrock-provider.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/bedrock-provider.js +6 -0
- package/node_modules/@earendil-works/omk-ai/dist/bedrock-provider.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/cli.d.ts +3 -0
- package/node_modules/@earendil-works/omk-ai/dist/cli.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/cli.js +130 -0
- package/node_modules/@earendil-works/omk-ai/dist/cli.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/env-api-keys.d.ts +20 -0
- package/node_modules/@earendil-works/omk-ai/dist/env-api-keys.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/env-api-keys.js +199 -0
- package/node_modules/@earendil-works/omk-ai/dist/env-api-keys.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/image-models.d.ts +10 -0
- package/node_modules/@earendil-works/omk-ai/dist/image-models.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/image-models.generated.d.ts +515 -0
- package/node_modules/@earendil-works/omk-ai/dist/image-models.generated.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/image-models.generated.js +517 -0
- package/node_modules/@earendil-works/omk-ai/dist/image-models.generated.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/image-models.js +23 -0
- package/node_modules/@earendil-works/omk-ai/dist/image-models.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/images-api-registry.d.ts +14 -0
- package/node_modules/@earendil-works/omk-ai/dist/images-api-registry.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/images-api-registry.js +22 -0
- package/node_modules/@earendil-works/omk-ai/dist/images-api-registry.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/images.d.ts +4 -0
- package/node_modules/@earendil-works/omk-ai/dist/images.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/images.js +16 -0
- package/node_modules/@earendil-works/omk-ai/dist/images.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/index.d.ts +33 -0
- package/node_modules/@earendil-works/omk-ai/dist/index.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/index.js +21 -0
- package/node_modules/@earendil-works/omk-ai/dist/index.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/models.d.ts +18 -0
- package/node_modules/@earendil-works/omk-ai/dist/models.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/models.generated.d.ts +18762 -0
- package/node_modules/@earendil-works/omk-ai/dist/models.generated.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/models.generated.js +17197 -0
- package/node_modules/@earendil-works/omk-ai/dist/models.generated.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/models.js +78 -0
- package/node_modules/@earendil-works/omk-ai/dist/models.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/oauth.d.ts +2 -0
- package/node_modules/@earendil-works/omk-ai/dist/oauth.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/oauth.js +2 -0
- package/node_modules/@earendil-works/omk-ai/dist/oauth.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/provider-network.d.ts +39 -0
- package/node_modules/@earendil-works/omk-ai/dist/provider-network.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/provider-network.js +170 -0
- package/node_modules/@earendil-works/omk-ai/dist/provider-network.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/amazon-bedrock.d.ts +38 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/amazon-bedrock.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/amazon-bedrock.js +826 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/amazon-bedrock.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/anthropic.d.ts +77 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/anthropic.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/anthropic.js +1123 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/anthropic.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/azure-openai-responses.d.ts +15 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/azure-openai-responses.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/azure-openai-responses.js +221 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/azure-openai-responses.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/cloudflare.d.ts +13 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/cloudflare.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/cloudflare.js +26 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/cloudflare.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/faux.d.ts +56 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/faux.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/faux.js +368 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/faux.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/github-copilot-headers.d.ts +8 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/github-copilot-headers.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/github-copilot-headers.js +29 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/github-copilot-headers.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/google-shared.d.ts +70 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/google-shared.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/google-shared.js +331 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/google-shared.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/google-vertex.d.ts +15 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/google-vertex.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/google-vertex.js +442 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/google-vertex.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/google.d.ts +13 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/google.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/google.js +402 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/google.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/images/openrouter.d.ts +3 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/images/openrouter.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/images/openrouter.js +128 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/images/openrouter.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/images/register-builtins.d.ts +4 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/images/register-builtins.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/images/register-builtins.js +34 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/images/register-builtins.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/mistral.d.ts +25 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/mistral.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/mistral.js +534 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/mistral.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-codex-responses.d.ts +30 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-codex-responses.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-codex-responses.js +1171 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-codex-responses.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-completions.d.ts +19 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-completions.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-completions.js +977 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-completions.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-prompt-cache.d.ts +11 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-prompt-cache.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-prompt-cache.js +22 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-prompt-cache.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses-shared.d.ts +18 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses-shared.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses-shared.js +496 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses-shared.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses.d.ts +13 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses.js +233 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/openai-responses.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/register-builtins.d.ts +35 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/register-builtins.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/register-builtins.js +254 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/register-builtins.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/simple-options.d.ts +8 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/simple-options.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/simple-options.js +42 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/simple-options.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/tool-schema.d.ts +13 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/tool-schema.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/tool-schema.js +82 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/tool-schema.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/transform-messages.d.ts +8 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/transform-messages.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/transform-messages.js +184 -0
- package/node_modules/@earendil-works/omk-ai/dist/providers/transform-messages.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/session-resources.d.ts +4 -0
- package/node_modules/@earendil-works/omk-ai/dist/session-resources.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/session-resources.js +22 -0
- package/node_modules/@earendil-works/omk-ai/dist/session-resources.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/stream.d.ts +8 -0
- package/node_modules/@earendil-works/omk-ai/dist/stream.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/stream.js +77 -0
- package/node_modules/@earendil-works/omk-ai/dist/stream.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/types.d.ts +570 -0
- package/node_modules/@earendil-works/omk-ai/dist/types.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/types.js +2 -0
- package/node_modules/@earendil-works/omk-ai/dist/types.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/abort-signals.d.ts +6 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/abort-signals.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/abort-signals.js +34 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/abort-signals.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/diagnostics.d.ts +19 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/diagnostics.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/diagnostics.js +25 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/diagnostics.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/event-stream.d.ts +21 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/event-stream.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/event-stream.js +81 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/event-stream.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/hash.d.ts +3 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/hash.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/hash.js +14 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/hash.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/headers.d.ts +2 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/headers.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/headers.js +8 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/headers.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/json-parse.d.ts +16 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/json-parse.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/json-parse.js +113 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/json-parse.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/node-http-proxy.d.ts +10 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/node-http-proxy.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/node-http-proxy.js +97 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/node-http-proxy.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/anthropic.d.ts +25 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/anthropic.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/anthropic.js +335 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/anthropic.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/device-code.d.ts +21 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/device-code.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/device-code.js +56 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/device-code.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/github-copilot.d.ts +30 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/github-copilot.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/github-copilot.js +280 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/github-copilot.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/index.d.ts +58 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/index.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/index.js +122 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/index.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/oauth-page.d.ts +3 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/oauth-page.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/oauth-page.js +105 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/oauth-page.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/openai-codex.d.ts +43 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/openai-codex.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/openai-codex.js +487 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/openai-codex.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/pkce.d.ts +13 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/pkce.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/pkce.js +31 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/pkce.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/types.d.ts +64 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/types.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/types.js +2 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/oauth/types.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/overflow.d.ts +57 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/overflow.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/overflow.js +154 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/overflow.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/sanitize-unicode.d.ts +22 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/sanitize-unicode.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/sanitize-unicode.js +26 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/sanitize-unicode.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/typebox-helpers.d.ts +17 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/typebox-helpers.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/typebox-helpers.js +21 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/typebox-helpers.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/validation.d.ts +18 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/validation.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/validation.js +281 -0
- package/node_modules/@earendil-works/omk-ai/dist/utils/validation.js.map +1 -0
- package/node_modules/@earendil-works/omk-ai/package.json +106 -0
- package/node_modules/@earendil-works/omk-tui/README.md +791 -0
- package/node_modules/@earendil-works/omk-tui/dist/autocomplete.d.ts +54 -0
- package/node_modules/@earendil-works/omk-tui/dist/autocomplete.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/autocomplete.js +632 -0
- package/node_modules/@earendil-works/omk-tui/dist/autocomplete.js.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/box.d.ts +22 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/box.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/box.js +104 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/box.js.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/cancellable-loader.d.ts +22 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/cancellable-loader.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/cancellable-loader.js +35 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/cancellable-loader.js.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/editor.d.ts +249 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/editor.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/editor.js +1857 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/editor.js.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/image.d.ts +28 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/image.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/image.js +89 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/image.js.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/input.d.ts +37 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/input.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/input.js +378 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/input.js.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/loader.d.ts +31 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/loader.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/loader.js +69 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/loader.js.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/markdown.d.ts +96 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/markdown.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/markdown.js +644 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/markdown.js.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/select-list.d.ts +50 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/select-list.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/select-list.js +159 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/select-list.js.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/settings-list.d.ts +50 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/settings-list.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/settings-list.js +185 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/settings-list.js.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/spacer.d.ts +12 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/spacer.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/spacer.js +23 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/spacer.js.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/text.d.ts +19 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/text.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/text.js +89 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/text.js.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/truncated-text.d.ts +13 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/truncated-text.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/truncated-text.js +51 -0
- package/node_modules/@earendil-works/omk-tui/dist/components/truncated-text.js.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/editor-component.d.ts +39 -0
- package/node_modules/@earendil-works/omk-tui/dist/editor-component.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/editor-component.js +2 -0
- package/node_modules/@earendil-works/omk-tui/dist/editor-component.js.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/fuzzy.d.ts +16 -0
- package/node_modules/@earendil-works/omk-tui/dist/fuzzy.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/fuzzy.js +110 -0
- package/node_modules/@earendil-works/omk-tui/dist/fuzzy.js.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/index.d.ts +23 -0
- package/node_modules/@earendil-works/omk-tui/dist/index.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/index.js +32 -0
- package/node_modules/@earendil-works/omk-tui/dist/index.js.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/keybindings.d.ts +212 -0
- package/node_modules/@earendil-works/omk-tui/dist/keybindings.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/keybindings.js +252 -0
- package/node_modules/@earendil-works/omk-tui/dist/keybindings.js.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/keys.d.ts +184 -0
- package/node_modules/@earendil-works/omk-tui/dist/keys.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/keys.js +1173 -0
- package/node_modules/@earendil-works/omk-tui/dist/keys.js.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/kill-ring.d.ts +28 -0
- package/node_modules/@earendil-works/omk-tui/dist/kill-ring.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/kill-ring.js +44 -0
- package/node_modules/@earendil-works/omk-tui/dist/kill-ring.js.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/native-modifiers.d.ts +3 -0
- package/node_modules/@earendil-works/omk-tui/dist/native-modifiers.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/native-modifiers.js +53 -0
- package/node_modules/@earendil-works/omk-tui/dist/native-modifiers.js.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/stdin-buffer.d.ts +50 -0
- package/node_modules/@earendil-works/omk-tui/dist/stdin-buffer.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/stdin-buffer.js +361 -0
- package/node_modules/@earendil-works/omk-tui/dist/stdin-buffer.js.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/terminal-image.d.ts +90 -0
- package/node_modules/@earendil-works/omk-tui/dist/terminal-image.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/terminal-image.js +366 -0
- package/node_modules/@earendil-works/omk-tui/dist/terminal-image.js.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/terminal.d.ts +113 -0
- package/node_modules/@earendil-works/omk-tui/dist/terminal.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/terminal.js +472 -0
- package/node_modules/@earendil-works/omk-tui/dist/terminal.js.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/tui.d.ts +242 -0
- package/node_modules/@earendil-works/omk-tui/dist/tui.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/tui.js +1221 -0
- package/node_modules/@earendil-works/omk-tui/dist/tui.js.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/undo-stack.d.ts +17 -0
- package/node_modules/@earendil-works/omk-tui/dist/undo-stack.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/undo-stack.js +25 -0
- package/node_modules/@earendil-works/omk-tui/dist/undo-stack.js.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/utils.d.ts +84 -0
- package/node_modules/@earendil-works/omk-tui/dist/utils.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/utils.js +1032 -0
- package/node_modules/@earendil-works/omk-tui/dist/utils.js.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/word-navigation.d.ts +25 -0
- package/node_modules/@earendil-works/omk-tui/dist/word-navigation.d.ts.map +1 -0
- package/node_modules/@earendil-works/omk-tui/dist/word-navigation.js +96 -0
- package/node_modules/@earendil-works/omk-tui/dist/word-navigation.js.map +1 -0
- package/node_modules/@earendil-works/omk-tui/native/darwin/prebuilds/darwin-arm64/darwin-modifiers.node +0 -0
- package/node_modules/@earendil-works/omk-tui/native/darwin/prebuilds/darwin-x64/darwin-modifiers.node +0 -0
- package/node_modules/@earendil-works/omk-tui/native/win32/prebuilds/win32-arm64/win32-console-mode.node +0 -0
- package/node_modules/@earendil-works/omk-tui/native/win32/prebuilds/win32-x64/win32-console-mode.node +0 -0
- package/node_modules/@earendil-works/omk-tui/package.json +47 -0
- package/package.json +22 -6
- package/dist/utils/pi-user-agent.d.ts +0 -2
- package/dist/utils/pi-user-agent.d.ts.map +0 -1
- package/dist/utils/pi-user-agent.js.map +0 -1
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
export type ContextGraphTraversalMode = "dependency" | "reverse-impact" | "neighbors" | "tests";
|
|
2
|
+
export interface ContextGraphNode {
|
|
3
|
+
readonly id: string;
|
|
4
|
+
readonly reliability?: number;
|
|
5
|
+
readonly changeFrequency?: number;
|
|
6
|
+
readonly failureRate?: number;
|
|
7
|
+
readonly complexity?: number;
|
|
8
|
+
readonly centrality?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface ContextGraphEdge {
|
|
11
|
+
readonly id?: string;
|
|
12
|
+
readonly source: string;
|
|
13
|
+
readonly target: string;
|
|
14
|
+
readonly kind?: string;
|
|
15
|
+
readonly reliability?: number;
|
|
16
|
+
readonly weight?: number;
|
|
17
|
+
}
|
|
18
|
+
export interface NormalizedContextGraphEdge extends ContextGraphEdge {
|
|
19
|
+
readonly id: string;
|
|
20
|
+
readonly kind: string;
|
|
21
|
+
}
|
|
22
|
+
export interface MultiSourceDijkstraInput {
|
|
23
|
+
readonly nodes: readonly ContextGraphNode[];
|
|
24
|
+
readonly edges: readonly ContextGraphEdge[];
|
|
25
|
+
readonly sources: readonly string[];
|
|
26
|
+
readonly mode: ContextGraphTraversalMode;
|
|
27
|
+
readonly maxCost?: number;
|
|
28
|
+
}
|
|
29
|
+
export interface DijkstraPredecessor {
|
|
30
|
+
readonly nodeId: string;
|
|
31
|
+
readonly edge: NormalizedContextGraphEdge;
|
|
32
|
+
}
|
|
33
|
+
export interface DijkstraPathStep {
|
|
34
|
+
readonly nodeId: string;
|
|
35
|
+
readonly edge: NormalizedContextGraphEdge;
|
|
36
|
+
}
|
|
37
|
+
export interface MultiSourceDijkstraResult {
|
|
38
|
+
readonly distances: ReadonlyMap<string, number>;
|
|
39
|
+
readonly predecessors: ReadonlyMap<string, DijkstraPredecessor>;
|
|
40
|
+
readonly paths: ReadonlyMap<string, readonly DijkstraPathStep[]>;
|
|
41
|
+
readonly nodePaths: ReadonlyMap<string, readonly string[]>;
|
|
42
|
+
readonly settledNodeIds: readonly string[];
|
|
43
|
+
}
|
|
44
|
+
export interface DependencyCycleInput {
|
|
45
|
+
readonly nodes: readonly ContextGraphNode[];
|
|
46
|
+
readonly edges: readonly ContextGraphEdge[];
|
|
47
|
+
}
|
|
48
|
+
export interface ImpactPropagationInput {
|
|
49
|
+
readonly nodes: readonly ContextGraphNode[];
|
|
50
|
+
readonly edges: readonly ContextGraphEdge[];
|
|
51
|
+
readonly changedNodeIds: readonly string[];
|
|
52
|
+
readonly threshold?: number;
|
|
53
|
+
readonly decay?: number;
|
|
54
|
+
}
|
|
55
|
+
export interface ImpactPropagationHit {
|
|
56
|
+
readonly nodeId: string;
|
|
57
|
+
readonly score: number;
|
|
58
|
+
}
|
|
59
|
+
export interface ImpactPropagationResult {
|
|
60
|
+
readonly scores: ReadonlyMap<string, number>;
|
|
61
|
+
readonly impacted: readonly ImpactPropagationHit[];
|
|
62
|
+
}
|
|
63
|
+
export interface SetCoverTarget {
|
|
64
|
+
readonly id: string;
|
|
65
|
+
readonly weight?: number;
|
|
66
|
+
}
|
|
67
|
+
export interface WeightedTestCoverage {
|
|
68
|
+
readonly targetId: string;
|
|
69
|
+
readonly weight?: number;
|
|
70
|
+
}
|
|
71
|
+
export type TestCoverageInput = string | WeightedTestCoverage;
|
|
72
|
+
export interface TestCoverageCandidate {
|
|
73
|
+
readonly id: string;
|
|
74
|
+
readonly covers: readonly TestCoverageInput[];
|
|
75
|
+
readonly cost?: number;
|
|
76
|
+
readonly reliability?: number;
|
|
77
|
+
}
|
|
78
|
+
export interface GreedyWeightedSetCoverInput {
|
|
79
|
+
readonly targets: readonly SetCoverTarget[];
|
|
80
|
+
readonly tests: readonly TestCoverageCandidate[];
|
|
81
|
+
}
|
|
82
|
+
export interface GreedyWeightedSetCoverResult {
|
|
83
|
+
readonly selectedTests: readonly TestCoverageCandidate[];
|
|
84
|
+
readonly coveredTargetIds: readonly string[];
|
|
85
|
+
readonly uncoveredTargetIds: readonly string[];
|
|
86
|
+
readonly totalCost: number;
|
|
87
|
+
readonly totalWeightCovered: number;
|
|
88
|
+
}
|
|
89
|
+
export interface HotspotScoringInput {
|
|
90
|
+
readonly nodes: readonly ContextGraphNode[];
|
|
91
|
+
readonly edges: readonly ContextGraphEdge[];
|
|
92
|
+
readonly weights?: Partial<HotspotScoreWeights>;
|
|
93
|
+
}
|
|
94
|
+
export interface HotspotScoreWeights {
|
|
95
|
+
readonly changeFrequency: number;
|
|
96
|
+
readonly failureRate: number;
|
|
97
|
+
readonly complexity: number;
|
|
98
|
+
readonly fanIn: number;
|
|
99
|
+
readonly fanOut: number;
|
|
100
|
+
readonly reverseImpact: number;
|
|
101
|
+
readonly centrality: number;
|
|
102
|
+
readonly reliabilityRisk: number;
|
|
103
|
+
}
|
|
104
|
+
export interface HotspotScoreBreakdown {
|
|
105
|
+
readonly changeFrequency: number;
|
|
106
|
+
readonly failureRate: number;
|
|
107
|
+
readonly complexity: number;
|
|
108
|
+
readonly fanIn: number;
|
|
109
|
+
readonly fanOut: number;
|
|
110
|
+
readonly reverseImpact: number;
|
|
111
|
+
readonly centrality: number;
|
|
112
|
+
readonly reliabilityRisk: number;
|
|
113
|
+
}
|
|
114
|
+
export interface HotspotScore {
|
|
115
|
+
readonly nodeId: string;
|
|
116
|
+
readonly score: number;
|
|
117
|
+
readonly breakdown: HotspotScoreBreakdown;
|
|
118
|
+
}
|
|
119
|
+
export declare const reliabilityToTraversalCost: (reliability?: number) => number;
|
|
120
|
+
export declare const runMultiSourceDijkstra: (input: MultiSourceDijkstraInput) => MultiSourceDijkstraResult;
|
|
121
|
+
export declare const detectDependencyCycles: (input: DependencyCycleInput) => string[][];
|
|
122
|
+
export declare const propagateImpact: (input: ImpactPropagationInput) => ImpactPropagationResult;
|
|
123
|
+
export declare const selectTestsByGreedyWeightedSetCover: (input: GreedyWeightedSetCoverInput) => GreedyWeightedSetCoverResult;
|
|
124
|
+
export declare const scoreGraphHotspots: (input: HotspotScoringInput) => HotspotScore[];
|
|
125
|
+
export declare const multiSourceDijkstra: (input: MultiSourceDijkstraInput) => MultiSourceDijkstraResult;
|
|
126
|
+
export declare const findDependencyCycles: (input: DependencyCycleInput) => string[][];
|
|
127
|
+
export declare const propagateReverseImpact: (input: ImpactPropagationInput) => ImpactPropagationResult;
|
|
128
|
+
export declare const selectTestsByWeightedSetCover: (input: GreedyWeightedSetCoverInput) => GreedyWeightedSetCoverResult;
|
|
129
|
+
export declare const scoreHotspots: (input: HotspotScoringInput) => HotspotScore[];
|
|
130
|
+
//# sourceMappingURL=context-graph-reasoning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-graph-reasoning.d.ts","sourceRoot":"","sources":["../../src/core/context-graph-reasoning.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,yBAAyB,GAAG,YAAY,GAAG,gBAAgB,GAAG,WAAW,GAAG,OAAO,CAAC;AAEhG,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,0BAA2B,SAAQ,gBAAgB;IACnE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,wBAAwB;IACxC,QAAQ,CAAC,KAAK,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC5C,QAAQ,CAAC,KAAK,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,yBAAyB,CAAC;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,0BAA0B,CAAC;CAC1C;AAED,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,0BAA0B,CAAC;CAC1C;AAED,MAAM,WAAW,yBAAyB;IACzC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAChE,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAC,CAAC;IACjE,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IAC3D,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C;AAED,MAAM,WAAW,oBAAoB;IACpC,QAAQ,CAAC,KAAK,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC5C,QAAQ,CAAC,KAAK,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,sBAAsB;IACtC,QAAQ,CAAC,KAAK,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC5C,QAAQ,CAAC,KAAK,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC5C,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACvC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,SAAS,oBAAoB,EAAE,CAAC;CACnD;AAED,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,oBAAoB,CAAC;AAE9D,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC9C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,2BAA2B;IAC3C,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;IAC5C,QAAQ,CAAC,KAAK,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACjD;AAED,MAAM,WAAW,4BAA4B;IAC5C,QAAQ,CAAC,aAAa,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACzD,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,KAAK,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC5C,QAAQ,CAAC,KAAK,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC5C,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC;CAC1C;AA+BD,eAAO,MAAM,0BAA0B,kCAGtC,CAAC;AAEF,eAAO,MAAM,sBAAsB,gEAiElC,CAAC;AAEF,eAAO,MAAM,sBAAsB,6CAkDlC,CAAC;AAEF,eAAO,MAAM,eAAe,4DAyC3B,CAAC;AAEF,eAAO,MAAM,mCAAmC,sEA6C/C,CAAC;AAEF,eAAO,MAAM,kBAAkB,gDAsC9B,CAAC;AAEF,eAAO,MAAM,mBAAmB,gEAAyB,CAAC;AAC1D,eAAO,MAAM,oBAAoB,6CAAyB,CAAC;AAC3D,eAAO,MAAM,sBAAsB,4DAAkB,CAAC;AACtD,eAAO,MAAM,6BAA6B,sEAAsC,CAAC;AACjF,eAAO,MAAM,aAAa,gDAAqB,CAAC","sourcesContent":["export type ContextGraphTraversalMode = \"dependency\" | \"reverse-impact\" | \"neighbors\" | \"tests\";\n\nexport interface ContextGraphNode {\n\treadonly id: string;\n\treadonly reliability?: number;\n\treadonly changeFrequency?: number;\n\treadonly failureRate?: number;\n\treadonly complexity?: number;\n\treadonly centrality?: number;\n}\n\nexport interface ContextGraphEdge {\n\treadonly id?: string;\n\treadonly source: string;\n\treadonly target: string;\n\treadonly kind?: string;\n\treadonly reliability?: number;\n\treadonly weight?: number;\n}\n\nexport interface NormalizedContextGraphEdge extends ContextGraphEdge {\n\treadonly id: string;\n\treadonly kind: string;\n}\n\nexport interface MultiSourceDijkstraInput {\n\treadonly nodes: readonly ContextGraphNode[];\n\treadonly edges: readonly ContextGraphEdge[];\n\treadonly sources: readonly string[];\n\treadonly mode: ContextGraphTraversalMode;\n\treadonly maxCost?: number;\n}\n\nexport interface DijkstraPredecessor {\n\treadonly nodeId: string;\n\treadonly edge: NormalizedContextGraphEdge;\n}\n\nexport interface DijkstraPathStep {\n\treadonly nodeId: string;\n\treadonly edge: NormalizedContextGraphEdge;\n}\n\nexport interface MultiSourceDijkstraResult {\n\treadonly distances: ReadonlyMap<string, number>;\n\treadonly predecessors: ReadonlyMap<string, DijkstraPredecessor>;\n\treadonly paths: ReadonlyMap<string, readonly DijkstraPathStep[]>;\n\treadonly nodePaths: ReadonlyMap<string, readonly string[]>;\n\treadonly settledNodeIds: readonly string[];\n}\n\nexport interface DependencyCycleInput {\n\treadonly nodes: readonly ContextGraphNode[];\n\treadonly edges: readonly ContextGraphEdge[];\n}\n\nexport interface ImpactPropagationInput {\n\treadonly nodes: readonly ContextGraphNode[];\n\treadonly edges: readonly ContextGraphEdge[];\n\treadonly changedNodeIds: readonly string[];\n\treadonly threshold?: number;\n\treadonly decay?: number;\n}\n\nexport interface ImpactPropagationHit {\n\treadonly nodeId: string;\n\treadonly score: number;\n}\n\nexport interface ImpactPropagationResult {\n\treadonly scores: ReadonlyMap<string, number>;\n\treadonly impacted: readonly ImpactPropagationHit[];\n}\n\nexport interface SetCoverTarget {\n\treadonly id: string;\n\treadonly weight?: number;\n}\n\nexport interface WeightedTestCoverage {\n\treadonly targetId: string;\n\treadonly weight?: number;\n}\n\nexport type TestCoverageInput = string | WeightedTestCoverage;\n\nexport interface TestCoverageCandidate {\n\treadonly id: string;\n\treadonly covers: readonly TestCoverageInput[];\n\treadonly cost?: number;\n\treadonly reliability?: number;\n}\n\nexport interface GreedyWeightedSetCoverInput {\n\treadonly targets: readonly SetCoverTarget[];\n\treadonly tests: readonly TestCoverageCandidate[];\n}\n\nexport interface GreedyWeightedSetCoverResult {\n\treadonly selectedTests: readonly TestCoverageCandidate[];\n\treadonly coveredTargetIds: readonly string[];\n\treadonly uncoveredTargetIds: readonly string[];\n\treadonly totalCost: number;\n\treadonly totalWeightCovered: number;\n}\n\nexport interface HotspotScoringInput {\n\treadonly nodes: readonly ContextGraphNode[];\n\treadonly edges: readonly ContextGraphEdge[];\n\treadonly weights?: Partial<HotspotScoreWeights>;\n}\n\nexport interface HotspotScoreWeights {\n\treadonly changeFrequency: number;\n\treadonly failureRate: number;\n\treadonly complexity: number;\n\treadonly fanIn: number;\n\treadonly fanOut: number;\n\treadonly reverseImpact: number;\n\treadonly centrality: number;\n\treadonly reliabilityRisk: number;\n}\n\nexport interface HotspotScoreBreakdown {\n\treadonly changeFrequency: number;\n\treadonly failureRate: number;\n\treadonly complexity: number;\n\treadonly fanIn: number;\n\treadonly fanOut: number;\n\treadonly reverseImpact: number;\n\treadonly centrality: number;\n\treadonly reliabilityRisk: number;\n}\n\nexport interface HotspotScore {\n\treadonly nodeId: string;\n\treadonly score: number;\n\treadonly breakdown: HotspotScoreBreakdown;\n}\n\ninterface TraversalEdge {\n\treadonly from: string;\n\treadonly to: string;\n\treadonly edge: NormalizedContextGraphEdge;\n\treadonly cost: number;\n\treadonly direction: \"forward\" | \"reverse\";\n}\n\ninterface TestSelectionCandidate {\n\treadonly test: TestCoverageCandidate;\n\treadonly gain: number;\n\treadonly ratio: number;\n\treadonly effectiveCost: number;\n\treadonly coveredTargetIds: readonly string[];\n}\n\nconst MIN_RELIABILITY = 0.001;\nconst FLOAT_EPSILON = 1e-12;\nconst DEFAULT_HOTSPOT_WEIGHTS: HotspotScoreWeights = {\n\tchangeFrequency: 0.18,\n\tfailureRate: 0.22,\n\tcomplexity: 0.15,\n\tfanIn: 0.15,\n\tfanOut: 0.05,\n\treverseImpact: 0.15,\n\tcentrality: 0.05,\n\treliabilityRisk: 0.05,\n};\n\nexport const reliabilityToTraversalCost = (reliability = 1): number => {\n\tconst normalizedReliability = Math.max(MIN_RELIABILITY, clamp01(reliability));\n\treturn 1 / normalizedReliability;\n};\n\nexport const runMultiSourceDijkstra = (input: MultiSourceDijkstraInput): MultiSourceDijkstraResult => {\n\tconst nodeIds = collectNodeIds(input.nodes, input.edges);\n\tconst traversalEdges = buildTraversalEdges(input.edges, input.mode);\n\tconst adjacency = buildTraversalAdjacency(traversalEdges);\n\tconst sources = uniqueSorted(input.sources.map(normalizeId).filter((source) => source.length > 0));\n\tconst distances = new Map<string, number>();\n\tconst predecessors = new Map<string, DijkstraPredecessor>();\n\tconst pathKeys = new Map<string, string>();\n\tconst frontier = new Set<string>();\n\tconst settledNodeIds: string[] = [];\n\tconst maxCost = normalizePositiveNumber(input.maxCost, Number.POSITIVE_INFINITY);\n\n\tfor (const source of sources) {\n\t\tnodeIds.add(source);\n\t\tdistances.set(source, 0);\n\t\tpathKeys.set(source, source);\n\t\tfrontier.add(source);\n\t}\n\n\twhile (frontier.size > 0) {\n\t\tconst currentNodeId = pickLowestCostNode(frontier, distances, pathKeys);\n\t\tif (currentNodeId === undefined) break;\n\n\t\tfrontier.delete(currentNodeId);\n\t\tsettledNodeIds.push(currentNodeId);\n\t\tconst currentDistance = distances.get(currentNodeId) ?? Number.POSITIVE_INFINITY;\n\t\tconst currentPathKey = pathKeys.get(currentNodeId) ?? currentNodeId;\n\n\t\tfor (const traversalEdge of adjacency.get(currentNodeId) ?? []) {\n\t\t\tconst candidateDistance = currentDistance + traversalEdge.cost;\n\t\t\tif (candidateDistance > maxCost + FLOAT_EPSILON) continue;\n\n\t\t\tconst candidatePathKey = `${currentPathKey}\\0${traversalEdge.to}\\0${traversalEdge.edge.id}`;\n\t\t\tconst existingDistance = distances.get(traversalEdge.to);\n\t\t\tconst existingPathKey = pathKeys.get(traversalEdge.to);\n\t\t\tif (\n\t\t\t\texistingDistance === undefined ||\n\t\t\t\tcandidateDistance < existingDistance - FLOAT_EPSILON ||\n\t\t\t\t(Math.abs(candidateDistance - existingDistance) <= FLOAT_EPSILON &&\n\t\t\t\t\t(existingPathKey === undefined || candidatePathKey.localeCompare(existingPathKey) < 0))\n\t\t\t) {\n\t\t\t\tdistances.set(traversalEdge.to, candidateDistance);\n\t\t\t\tpathKeys.set(traversalEdge.to, candidatePathKey);\n\t\t\t\tpredecessors.set(traversalEdge.to, { nodeId: currentNodeId, edge: traversalEdge.edge });\n\t\t\t\tfrontier.add(traversalEdge.to);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst sortedReachableNodeIds = [...distances.keys()].sort((a, b) => a.localeCompare(b));\n\tconst paths = new Map<string, readonly DijkstraPathStep[]>();\n\tconst nodePaths = new Map<string, readonly string[]>();\n\tfor (const nodeId of sortedReachableNodeIds) {\n\t\tconst builtPath = buildPath(nodeId, predecessors);\n\t\tpaths.set(nodeId, builtPath.edgeSteps);\n\t\tnodePaths.set(nodeId, builtPath.nodeIds);\n\t}\n\n\treturn {\n\t\tdistances,\n\t\tpredecessors,\n\t\tpaths,\n\t\tnodePaths,\n\t\tsettledNodeIds,\n\t};\n};\n\nexport const detectDependencyCycles = (input: DependencyCycleInput): string[][] => {\n\tconst nodeIds = [...collectNodeIds(input.nodes, input.edges)].sort((a, b) => a.localeCompare(b));\n\tconst adjacency = buildDependencyAdjacency(input.edges, \"forward\");\n\tconst selfLoops = new Set(\n\t\tnormalizeEdges(input.edges)\n\t\t\t.filter((edge) => isDependencyEdge(edge) && edge.source === edge.target)\n\t\t\t.map((edge) => edge.source),\n\t);\n\tconst indexes = new Map<string, number>();\n\tconst lowLinks = new Map<string, number>();\n\tconst stack: string[] = [];\n\tconst stacked = new Set<string>();\n\tconst cycles: string[][] = [];\n\tlet nextIndex = 0;\n\n\tconst visit = (nodeId: string): void => {\n\t\tindexes.set(nodeId, nextIndex);\n\t\tlowLinks.set(nodeId, nextIndex);\n\t\tnextIndex += 1;\n\t\tstack.push(nodeId);\n\t\tstacked.add(nodeId);\n\n\t\tfor (const nextNodeId of adjacency.get(nodeId) ?? []) {\n\t\t\tif (!indexes.has(nextNodeId)) {\n\t\t\t\tvisit(nextNodeId);\n\t\t\t\tlowLinks.set(nodeId, Math.min(lowLinks.get(nodeId) ?? 0, lowLinks.get(nextNodeId) ?? 0));\n\t\t\t} else if (stacked.has(nextNodeId)) {\n\t\t\t\tlowLinks.set(nodeId, Math.min(lowLinks.get(nodeId) ?? 0, indexes.get(nextNodeId) ?? 0));\n\t\t\t}\n\t\t}\n\n\t\tif (lowLinks.get(nodeId) !== indexes.get(nodeId)) return;\n\n\t\tconst component: string[] = [];\n\t\twhile (stack.length > 0) {\n\t\t\tconst member = stack.pop();\n\t\t\tif (member === undefined) break;\n\t\t\tstacked.delete(member);\n\t\t\tcomponent.push(member);\n\t\t\tif (member === nodeId) break;\n\t\t}\n\n\t\tif (component.length > 1 || selfLoops.has(nodeId)) cycles.push(component.sort((a, b) => a.localeCompare(b)));\n\t};\n\n\tfor (const nodeId of nodeIds) {\n\t\tif (!indexes.has(nodeId)) visit(nodeId);\n\t}\n\n\treturn cycles.sort(compareStringLists);\n};\n\nexport const propagateImpact = (input: ImpactPropagationInput): ImpactPropagationResult => {\n\tconst traversalEdges = buildTraversalEdges(input.edges, \"reverse-impact\");\n\tconst adjacency = buildTraversalAdjacency(traversalEdges);\n\tconst threshold = clamp01(input.threshold ?? 0);\n\tconst decay = input.decay === undefined ? 1 : clamp01(input.decay);\n\tconst scores = new Map<string, number>();\n\tconst frontier = new Set<string>();\n\tconst settled = new Set<string>();\n\tconst changedNodeIds = uniqueSorted(input.changedNodeIds.map(normalizeId).filter((nodeId) => nodeId.length > 0));\n\n\tfor (const nodeId of changedNodeIds) {\n\t\tscores.set(nodeId, 1);\n\t\tfrontier.add(nodeId);\n\t}\n\n\twhile (frontier.size > 0) {\n\t\tconst nodeId = pickHighestScoreNode(frontier, scores);\n\t\tif (nodeId === undefined) break;\n\n\t\tfrontier.delete(nodeId);\n\t\tsettled.add(nodeId);\n\t\tconst currentScore = scores.get(nodeId) ?? 0;\n\n\t\tfor (const traversalEdge of adjacency.get(nodeId) ?? []) {\n\t\t\tconst propagatedScore = currentScore * clamp01(traversalEdge.edge.reliability ?? 1) * decay;\n\t\t\tif (propagatedScore <= FLOAT_EPSILON || propagatedScore < threshold - FLOAT_EPSILON) continue;\n\n\t\t\tconst existingScore = scores.get(traversalEdge.to);\n\t\t\tif (existingScore === undefined || propagatedScore > existingScore + FLOAT_EPSILON) {\n\t\t\t\tscores.set(traversalEdge.to, propagatedScore);\n\t\t\t\tif (!settled.has(traversalEdge.to)) frontier.add(traversalEdge.to);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst impacted = [...scores.entries()]\n\t\t.filter(([, score]) => score >= threshold - FLOAT_EPSILON)\n\t\t.map(([nodeId, score]) => ({ nodeId, score }))\n\t\t.sort(compareImpactHits);\n\n\treturn { scores, impacted };\n};\n\nexport const selectTestsByGreedyWeightedSetCover = (\n\tinput: GreedyWeightedSetCoverInput,\n): GreedyWeightedSetCoverResult => {\n\tconst targetWeights = normalizeTargetWeights(input.targets);\n\tconst remainingTargetIds = new Set(targetWeights.keys());\n\tconst selectedTests: TestCoverageCandidate[] = [];\n\tconst selectedTestIds = new Set<string>();\n\tlet totalCost = 0;\n\tlet totalWeightCovered = 0;\n\n\twhile (remainingTargetIds.size > 0) {\n\t\tlet bestCandidate: TestSelectionCandidate | undefined;\n\t\tfor (const test of [...input.tests].sort((a, b) => a.id.localeCompare(b.id))) {\n\t\t\tif (selectedTestIds.has(test.id)) continue;\n\n\t\t\tconst candidate = scoreTestSelectionCandidate(test, remainingTargetIds, targetWeights);\n\t\t\tif (candidate.gain <= FLOAT_EPSILON) continue;\n\t\t\tif (bestCandidate === undefined || compareTestSelectionCandidates(candidate, bestCandidate) < 0) {\n\t\t\t\tbestCandidate = candidate;\n\t\t\t}\n\t\t}\n\n\t\tif (bestCandidate === undefined) break;\n\n\t\tselectedTests.push(bestCandidate.test);\n\t\tselectedTestIds.add(bestCandidate.test.id);\n\t\ttotalCost += bestCandidate.effectiveCost;\n\t\ttotalWeightCovered += bestCandidate.gain;\n\t\tfor (const targetId of bestCandidate.coveredTargetIds) {\n\t\t\tremainingTargetIds.delete(targetId);\n\t\t}\n\t}\n\n\tconst uncoveredTargetIds = [...remainingTargetIds].sort((a, b) => a.localeCompare(b));\n\tconst coveredTargetIds = [...targetWeights.keys()]\n\t\t.filter((targetId) => !remainingTargetIds.has(targetId))\n\t\t.sort((a, b) => a.localeCompare(b));\n\n\treturn {\n\t\tselectedTests,\n\t\tcoveredTargetIds,\n\t\tuncoveredTargetIds,\n\t\ttotalCost,\n\t\ttotalWeightCovered,\n\t};\n};\n\nexport const scoreGraphHotspots = (input: HotspotScoringInput): HotspotScore[] => {\n\tconst nodeIds = collectNodeIds(input.nodes, input.edges);\n\tconst nodeById = new Map(input.nodes.map((node) => [normalizeId(node.id), node]));\n\tconst dependencyEdges = normalizeEdges(input.edges).filter(isDependencyEdge);\n\tconst fanInSources = new Map<string, Set<string>>();\n\tconst fanOutTargets = new Map<string, Set<string>>();\n\n\tfor (const edge of dependencyEdges) {\n\t\taddSetValue(fanInSources, edge.target, edge.source);\n\t\taddSetValue(fanOutTargets, edge.source, edge.target);\n\t}\n\n\tconst reverseReachableCounts = calculateReverseReachableCounts([...nodeIds], dependencyEdges);\n\tconst maxFanIn = maxMapSetSize(fanInSources);\n\tconst maxFanOut = maxMapSetSize(fanOutTargets);\n\tconst maxReverseReachable = Math.max(1, ...reverseReachableCounts.values());\n\tconst weights = { ...DEFAULT_HOTSPOT_WEIGHTS, ...input.weights };\n\n\treturn [...nodeIds]\n\t\t.map((nodeId) => {\n\t\t\tconst node = nodeById.get(nodeId);\n\t\t\tconst breakdown = {\n\t\t\t\tchangeFrequency: clamp01(node?.changeFrequency ?? 0),\n\t\t\t\tfailureRate: clamp01(node?.failureRate ?? 0),\n\t\t\t\tcomplexity: clamp01(node?.complexity ?? 0),\n\t\t\t\tfanIn: normalizeRatio(fanInSources.get(nodeId)?.size ?? 0, maxFanIn),\n\t\t\t\tfanOut: normalizeRatio(fanOutTargets.get(nodeId)?.size ?? 0, maxFanOut),\n\t\t\t\treverseImpact: normalizeRatio(reverseReachableCounts.get(nodeId) ?? 0, maxReverseReachable),\n\t\t\t\tcentrality: clamp01(node?.centrality ?? 0),\n\t\t\t\treliabilityRisk: 1 - clamp01(node?.reliability ?? 1),\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tnodeId,\n\t\t\t\tscore: calculateHotspotScore(breakdown, weights),\n\t\t\t\tbreakdown,\n\t\t\t};\n\t\t})\n\t\t.sort(compareHotspotScores);\n};\n\nexport const multiSourceDijkstra = runMultiSourceDijkstra;\nexport const findDependencyCycles = detectDependencyCycles;\nexport const propagateReverseImpact = propagateImpact;\nexport const selectTestsByWeightedSetCover = selectTestsByGreedyWeightedSetCover;\nexport const scoreHotspots = scoreGraphHotspots;\n\nconst buildPath = (\n\tnodeId: string,\n\tpredecessors: ReadonlyMap<string, DijkstraPredecessor>,\n): { readonly edgeSteps: readonly DijkstraPathStep[]; readonly nodeIds: readonly string[] } => {\n\tconst reversedSteps: DijkstraPathStep[] = [];\n\tconst reversedNodeIds = [nodeId];\n\tlet currentNodeId = nodeId;\n\tconst seen = new Set<string>();\n\n\twhile (!seen.has(currentNodeId)) {\n\t\tseen.add(currentNodeId);\n\t\tconst predecessor = predecessors.get(currentNodeId);\n\t\tif (predecessor === undefined) break;\n\t\treversedSteps.push({ nodeId: currentNodeId, edge: predecessor.edge });\n\t\tcurrentNodeId = predecessor.nodeId;\n\t\treversedNodeIds.push(currentNodeId);\n\t}\n\n\treturn {\n\t\tedgeSteps: reversedSteps.reverse(),\n\t\tnodeIds: reversedNodeIds.reverse(),\n\t};\n};\n\nconst buildTraversalEdges = (edges: readonly ContextGraphEdge[], mode: ContextGraphTraversalMode): TraversalEdge[] => {\n\tconst traversalEdges: TraversalEdge[] = [];\n\tfor (const edge of normalizeEdges(edges)) {\n\t\tif (mode === \"dependency\" && isDependencyEdge(edge)) {\n\t\t\ttraversalEdges.push(makeTraversalEdge(edge, edge.source, edge.target, \"forward\"));\n\t\t} else if (mode === \"reverse-impact\" && isDependencyEdge(edge)) {\n\t\t\ttraversalEdges.push(makeTraversalEdge(edge, edge.target, edge.source, \"reverse\"));\n\t\t} else if (mode === \"neighbors\") {\n\t\t\ttraversalEdges.push(makeTraversalEdge(edge, edge.source, edge.target, \"forward\"));\n\t\t\tif (edge.source !== edge.target)\n\t\t\t\ttraversalEdges.push(makeTraversalEdge(edge, edge.target, edge.source, \"reverse\"));\n\t\t} else if (mode === \"tests\" && isTestEdge(edge)) {\n\t\t\ttraversalEdges.push(makeTraversalEdge(edge, edge.source, edge.target, \"forward\"));\n\t\t\tif (edge.source !== edge.target)\n\t\t\t\ttraversalEdges.push(makeTraversalEdge(edge, edge.target, edge.source, \"reverse\"));\n\t\t}\n\t}\n\treturn traversalEdges.sort(compareTraversalEdges);\n};\n\nconst makeTraversalEdge = (\n\tedge: NormalizedContextGraphEdge,\n\tfrom: string,\n\tto: string,\n\tdirection: \"forward\" | \"reverse\",\n): TraversalEdge => ({\n\tfrom,\n\tto,\n\tedge,\n\tcost: calculateTraversalEdgeCost(edge),\n\tdirection,\n});\n\nconst calculateTraversalEdgeCost = (edge: ContextGraphEdge): number => {\n\tconst baseCost = normalizePositiveNumber(edge.weight, 1);\n\treturn baseCost * reliabilityToTraversalCost(edge.reliability ?? 1);\n};\n\nconst buildTraversalAdjacency = (\n\ttraversalEdges: readonly TraversalEdge[],\n): ReadonlyMap<string, readonly TraversalEdge[]> => {\n\tconst adjacency = new Map<string, TraversalEdge[]>();\n\tfor (const traversalEdge of traversalEdges) {\n\t\tconst existing = adjacency.get(traversalEdge.from) ?? [];\n\t\tadjacency.set(traversalEdge.from, [...existing, traversalEdge].sort(compareTraversalEdges));\n\t}\n\treturn adjacency;\n};\n\nconst buildDependencyAdjacency = (\n\tedges: readonly ContextGraphEdge[],\n\tdirection: \"forward\" | \"reverse\",\n): ReadonlyMap<string, readonly string[]> => {\n\tconst adjacency = new Map<string, Set<string>>();\n\tfor (const edge of normalizeEdges(edges).filter(isDependencyEdge)) {\n\t\tconst from = direction === \"forward\" ? edge.source : edge.target;\n\t\tconst to = direction === \"forward\" ? edge.target : edge.source;\n\t\taddSetValue(adjacency, from, to);\n\t}\n\treturn new Map(\n\t\t[...adjacency.entries()].map(([nodeId, neighbors]) => [\n\t\t\tnodeId,\n\t\t\t[...neighbors].sort((a, b) => a.localeCompare(b)),\n\t\t]),\n\t);\n};\n\nconst normalizeEdges = (edges: readonly ContextGraphEdge[]): NormalizedContextGraphEdge[] =>\n\tedges.flatMap((edge, index) => {\n\t\tconst source = normalizeId(edge.source);\n\t\tconst target = normalizeId(edge.target);\n\t\tif (source.length === 0 || target.length === 0) return [];\n\t\tconst kind = (edge.kind ?? \"related\").trim() || \"related\";\n\t\tconst explicitId = edge.id?.trim();\n\t\tconst id = explicitId && explicitId.length > 0 ? explicitId : `${kind}:${source}->${target}:${index}`;\n\t\treturn [{ ...edge, id, source, target, kind }];\n\t});\n\nconst collectNodeIds = (nodes: readonly ContextGraphNode[], edges: readonly ContextGraphEdge[]): Set<string> => {\n\tconst nodeIds = new Set<string>();\n\tfor (const node of nodes) {\n\t\tconst nodeId = normalizeId(node.id);\n\t\tif (nodeId.length > 0) nodeIds.add(nodeId);\n\t}\n\tfor (const edge of normalizeEdges(edges)) {\n\t\tnodeIds.add(edge.source);\n\t\tnodeIds.add(edge.target);\n\t}\n\treturn nodeIds;\n};\n\nconst pickLowestCostNode = (\n\tfrontier: ReadonlySet<string>,\n\tdistances: ReadonlyMap<string, number>,\n\tpathKeys: ReadonlyMap<string, string>,\n): string | undefined =>\n\t[...frontier].sort((a, b) => {\n\t\tconst distanceDelta =\n\t\t\t(distances.get(a) ?? Number.POSITIVE_INFINITY) - (distances.get(b) ?? Number.POSITIVE_INFINITY);\n\t\tif (Math.abs(distanceDelta) > FLOAT_EPSILON) return distanceDelta;\n\t\treturn (pathKeys.get(a) ?? a).localeCompare(pathKeys.get(b) ?? b) || a.localeCompare(b);\n\t})[0];\n\nconst pickHighestScoreNode = (frontier: ReadonlySet<string>, scores: ReadonlyMap<string, number>): string | undefined =>\n\t[...frontier].sort((a, b) => (scores.get(b) ?? 0) - (scores.get(a) ?? 0) || a.localeCompare(b))[0];\n\nconst scoreTestSelectionCandidate = (\n\ttest: TestCoverageCandidate,\n\tremainingTargetIds: ReadonlySet<string>,\n\ttargetWeights: ReadonlyMap<string, number>,\n): TestSelectionCandidate => {\n\tconst coverage = normalizeCoverage(test.covers);\n\tconst coveredTargetIds = [...remainingTargetIds]\n\t\t.filter((targetId) => (coverage.get(targetId) ?? 0) > 0)\n\t\t.sort((a, b) => a.localeCompare(b));\n\tconst gain = coveredTargetIds.reduce(\n\t\t(sum, targetId) => sum + (targetWeights.get(targetId) ?? 0) * (coverage.get(targetId) ?? 0),\n\t\t0,\n\t);\n\tconst effectiveCost = normalizePositiveNumber(test.cost, 1) * reliabilityToTraversalCost(test.reliability ?? 1);\n\treturn {\n\t\ttest,\n\t\tgain,\n\t\tratio: gain / effectiveCost,\n\t\teffectiveCost,\n\t\tcoveredTargetIds,\n\t};\n};\n\nconst normalizeCoverage = (covers: readonly TestCoverageInput[]): ReadonlyMap<string, number> => {\n\tconst coverage = new Map<string, number>();\n\tfor (const cover of covers) {\n\t\tconst targetId = typeof cover === \"string\" ? normalizeId(cover) : normalizeId(cover.targetId);\n\t\tif (targetId.length === 0) continue;\n\t\tconst weight = typeof cover === \"string\" ? 1 : normalizePositiveNumber(cover.weight, 1);\n\t\tcoverage.set(targetId, Math.max(coverage.get(targetId) ?? 0, weight));\n\t}\n\treturn coverage;\n};\n\nconst normalizeTargetWeights = (targets: readonly SetCoverTarget[]): ReadonlyMap<string, number> => {\n\tconst targetWeights = new Map<string, number>();\n\tfor (const target of targets) {\n\t\tconst targetId = normalizeId(target.id);\n\t\tif (targetId.length === 0) continue;\n\t\ttargetWeights.set(\n\t\t\ttargetId,\n\t\t\tMath.max(targetWeights.get(targetId) ?? 0, normalizePositiveNumber(target.weight, 1)),\n\t\t);\n\t}\n\treturn new Map([...targetWeights.entries()].sort(([a], [b]) => a.localeCompare(b)));\n};\n\nconst calculateReverseReachableCounts = (\n\tnodeIds: readonly string[],\n\tdependencyEdges: readonly NormalizedContextGraphEdge[],\n): ReadonlyMap<string, number> => {\n\tconst reverseAdjacency = buildDependencyAdjacency(dependencyEdges, \"reverse\");\n\tconst counts = new Map<string, number>();\n\tfor (const nodeId of nodeIds) {\n\t\tconst visited = new Set<string>();\n\t\tconst queue = [...(reverseAdjacency.get(nodeId) ?? [])];\n\t\twhile (queue.length > 0) {\n\t\t\tconst current = queue.shift();\n\t\t\tif (current === undefined || current === nodeId || visited.has(current)) continue;\n\t\t\tvisited.add(current);\n\t\t\tqueue.push(...(reverseAdjacency.get(current) ?? []));\n\t\t}\n\t\tcounts.set(nodeId, visited.size);\n\t}\n\treturn counts;\n};\n\nconst calculateHotspotScore = (breakdown: HotspotScoreBreakdown, weights: HotspotScoreWeights): number =>\n\tclamp01(\n\t\tbreakdown.changeFrequency * weights.changeFrequency +\n\t\t\tbreakdown.failureRate * weights.failureRate +\n\t\t\tbreakdown.complexity * weights.complexity +\n\t\t\tbreakdown.fanIn * weights.fanIn +\n\t\t\tbreakdown.fanOut * weights.fanOut +\n\t\t\tbreakdown.reverseImpact * weights.reverseImpact +\n\t\t\tbreakdown.centrality * weights.centrality +\n\t\t\tbreakdown.reliabilityRisk * weights.reliabilityRisk,\n\t);\n\nconst compareTraversalEdges = (a: TraversalEdge, b: TraversalEdge): number =>\n\ta.from.localeCompare(b.from) ||\n\ta.to.localeCompare(b.to) ||\n\ta.cost - b.cost ||\n\ta.edge.id.localeCompare(b.edge.id) ||\n\ta.direction.localeCompare(b.direction);\n\nconst compareImpactHits = (a: ImpactPropagationHit, b: ImpactPropagationHit): number =>\n\tb.score - a.score || a.nodeId.localeCompare(b.nodeId);\n\nconst compareHotspotScores = (a: HotspotScore, b: HotspotScore): number =>\n\tb.score - a.score || a.nodeId.localeCompare(b.nodeId);\n\nconst compareStringLists = (a: readonly string[], b: readonly string[]): number =>\n\ta[0]?.localeCompare(b[0] ?? \"\") || a.length - b.length || a.join(\"\\0\").localeCompare(b.join(\"\\0\"));\n\nconst compareTestSelectionCandidates = (a: TestSelectionCandidate, b: TestSelectionCandidate): number =>\n\tb.ratio - a.ratio || b.gain - a.gain || a.effectiveCost - b.effectiveCost || a.test.id.localeCompare(b.test.id);\n\nconst isDependencyEdge = (edge: ContextGraphEdge): boolean => edge.kind === \"dependency\";\n\nconst isTestEdge = (edge: ContextGraphEdge): boolean =>\n\tedge.kind === \"test\" || edge.kind === \"tests\" || edge.kind === \"coverage\";\n\nconst addSetValue = <TKey, TValue>(map: Map<TKey, Set<TValue>>, key: TKey, value: TValue): void => {\n\tconst existing = map.get(key);\n\tif (existing === undefined) {\n\t\tmap.set(key, new Set([value]));\n\t\treturn;\n\t}\n\texisting.add(value);\n};\n\nconst maxMapSetSize = <TKey, TValue>(map: ReadonlyMap<TKey, ReadonlySet<TValue>>): number =>\n\tMath.max(1, ...[...map.values()].map((items) => items.size));\n\nconst normalizeRatio = (value: number, maxValue: number): number => {\n\tif (!Number.isFinite(value) || !Number.isFinite(maxValue) || maxValue <= 0) return 0;\n\treturn clamp01(value / maxValue);\n};\n\nconst normalizePositiveNumber = (value: number | undefined, fallback: number): number =>\n\tvalue !== undefined && Number.isFinite(value) && value > 0 ? value : fallback;\n\nconst normalizeId = (id: string): string => id.trim();\n\nconst uniqueSorted = (values: readonly string[]): string[] => [...new Set(values)].sort((a, b) => a.localeCompare(b));\n\nconst clamp01 = (value: number): number => {\n\tif (!Number.isFinite(value) || value <= 0) return 0;\n\tif (value >= 1) return 1;\n\treturn value;\n};\n"]}
|
|
@@ -0,0 +1,442 @@
|
|
|
1
|
+
const MIN_RELIABILITY = 0.001;
|
|
2
|
+
const FLOAT_EPSILON = 1e-12;
|
|
3
|
+
const DEFAULT_HOTSPOT_WEIGHTS = {
|
|
4
|
+
changeFrequency: 0.18,
|
|
5
|
+
failureRate: 0.22,
|
|
6
|
+
complexity: 0.15,
|
|
7
|
+
fanIn: 0.15,
|
|
8
|
+
fanOut: 0.05,
|
|
9
|
+
reverseImpact: 0.15,
|
|
10
|
+
centrality: 0.05,
|
|
11
|
+
reliabilityRisk: 0.05,
|
|
12
|
+
};
|
|
13
|
+
export const reliabilityToTraversalCost = (reliability = 1) => {
|
|
14
|
+
const normalizedReliability = Math.max(MIN_RELIABILITY, clamp01(reliability));
|
|
15
|
+
return 1 / normalizedReliability;
|
|
16
|
+
};
|
|
17
|
+
export const runMultiSourceDijkstra = (input) => {
|
|
18
|
+
const nodeIds = collectNodeIds(input.nodes, input.edges);
|
|
19
|
+
const traversalEdges = buildTraversalEdges(input.edges, input.mode);
|
|
20
|
+
const adjacency = buildTraversalAdjacency(traversalEdges);
|
|
21
|
+
const sources = uniqueSorted(input.sources.map(normalizeId).filter((source) => source.length > 0));
|
|
22
|
+
const distances = new Map();
|
|
23
|
+
const predecessors = new Map();
|
|
24
|
+
const pathKeys = new Map();
|
|
25
|
+
const frontier = new Set();
|
|
26
|
+
const settledNodeIds = [];
|
|
27
|
+
const maxCost = normalizePositiveNumber(input.maxCost, Number.POSITIVE_INFINITY);
|
|
28
|
+
for (const source of sources) {
|
|
29
|
+
nodeIds.add(source);
|
|
30
|
+
distances.set(source, 0);
|
|
31
|
+
pathKeys.set(source, source);
|
|
32
|
+
frontier.add(source);
|
|
33
|
+
}
|
|
34
|
+
while (frontier.size > 0) {
|
|
35
|
+
const currentNodeId = pickLowestCostNode(frontier, distances, pathKeys);
|
|
36
|
+
if (currentNodeId === undefined)
|
|
37
|
+
break;
|
|
38
|
+
frontier.delete(currentNodeId);
|
|
39
|
+
settledNodeIds.push(currentNodeId);
|
|
40
|
+
const currentDistance = distances.get(currentNodeId) ?? Number.POSITIVE_INFINITY;
|
|
41
|
+
const currentPathKey = pathKeys.get(currentNodeId) ?? currentNodeId;
|
|
42
|
+
for (const traversalEdge of adjacency.get(currentNodeId) ?? []) {
|
|
43
|
+
const candidateDistance = currentDistance + traversalEdge.cost;
|
|
44
|
+
if (candidateDistance > maxCost + FLOAT_EPSILON)
|
|
45
|
+
continue;
|
|
46
|
+
const candidatePathKey = `${currentPathKey}\0${traversalEdge.to}\0${traversalEdge.edge.id}`;
|
|
47
|
+
const existingDistance = distances.get(traversalEdge.to);
|
|
48
|
+
const existingPathKey = pathKeys.get(traversalEdge.to);
|
|
49
|
+
if (existingDistance === undefined ||
|
|
50
|
+
candidateDistance < existingDistance - FLOAT_EPSILON ||
|
|
51
|
+
(Math.abs(candidateDistance - existingDistance) <= FLOAT_EPSILON &&
|
|
52
|
+
(existingPathKey === undefined || candidatePathKey.localeCompare(existingPathKey) < 0))) {
|
|
53
|
+
distances.set(traversalEdge.to, candidateDistance);
|
|
54
|
+
pathKeys.set(traversalEdge.to, candidatePathKey);
|
|
55
|
+
predecessors.set(traversalEdge.to, { nodeId: currentNodeId, edge: traversalEdge.edge });
|
|
56
|
+
frontier.add(traversalEdge.to);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const sortedReachableNodeIds = [...distances.keys()].sort((a, b) => a.localeCompare(b));
|
|
61
|
+
const paths = new Map();
|
|
62
|
+
const nodePaths = new Map();
|
|
63
|
+
for (const nodeId of sortedReachableNodeIds) {
|
|
64
|
+
const builtPath = buildPath(nodeId, predecessors);
|
|
65
|
+
paths.set(nodeId, builtPath.edgeSteps);
|
|
66
|
+
nodePaths.set(nodeId, builtPath.nodeIds);
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
distances,
|
|
70
|
+
predecessors,
|
|
71
|
+
paths,
|
|
72
|
+
nodePaths,
|
|
73
|
+
settledNodeIds,
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
export const detectDependencyCycles = (input) => {
|
|
77
|
+
const nodeIds = [...collectNodeIds(input.nodes, input.edges)].sort((a, b) => a.localeCompare(b));
|
|
78
|
+
const adjacency = buildDependencyAdjacency(input.edges, "forward");
|
|
79
|
+
const selfLoops = new Set(normalizeEdges(input.edges)
|
|
80
|
+
.filter((edge) => isDependencyEdge(edge) && edge.source === edge.target)
|
|
81
|
+
.map((edge) => edge.source));
|
|
82
|
+
const indexes = new Map();
|
|
83
|
+
const lowLinks = new Map();
|
|
84
|
+
const stack = [];
|
|
85
|
+
const stacked = new Set();
|
|
86
|
+
const cycles = [];
|
|
87
|
+
let nextIndex = 0;
|
|
88
|
+
const visit = (nodeId) => {
|
|
89
|
+
indexes.set(nodeId, nextIndex);
|
|
90
|
+
lowLinks.set(nodeId, nextIndex);
|
|
91
|
+
nextIndex += 1;
|
|
92
|
+
stack.push(nodeId);
|
|
93
|
+
stacked.add(nodeId);
|
|
94
|
+
for (const nextNodeId of adjacency.get(nodeId) ?? []) {
|
|
95
|
+
if (!indexes.has(nextNodeId)) {
|
|
96
|
+
visit(nextNodeId);
|
|
97
|
+
lowLinks.set(nodeId, Math.min(lowLinks.get(nodeId) ?? 0, lowLinks.get(nextNodeId) ?? 0));
|
|
98
|
+
}
|
|
99
|
+
else if (stacked.has(nextNodeId)) {
|
|
100
|
+
lowLinks.set(nodeId, Math.min(lowLinks.get(nodeId) ?? 0, indexes.get(nextNodeId) ?? 0));
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (lowLinks.get(nodeId) !== indexes.get(nodeId))
|
|
104
|
+
return;
|
|
105
|
+
const component = [];
|
|
106
|
+
while (stack.length > 0) {
|
|
107
|
+
const member = stack.pop();
|
|
108
|
+
if (member === undefined)
|
|
109
|
+
break;
|
|
110
|
+
stacked.delete(member);
|
|
111
|
+
component.push(member);
|
|
112
|
+
if (member === nodeId)
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
if (component.length > 1 || selfLoops.has(nodeId))
|
|
116
|
+
cycles.push(component.sort((a, b) => a.localeCompare(b)));
|
|
117
|
+
};
|
|
118
|
+
for (const nodeId of nodeIds) {
|
|
119
|
+
if (!indexes.has(nodeId))
|
|
120
|
+
visit(nodeId);
|
|
121
|
+
}
|
|
122
|
+
return cycles.sort(compareStringLists);
|
|
123
|
+
};
|
|
124
|
+
export const propagateImpact = (input) => {
|
|
125
|
+
const traversalEdges = buildTraversalEdges(input.edges, "reverse-impact");
|
|
126
|
+
const adjacency = buildTraversalAdjacency(traversalEdges);
|
|
127
|
+
const threshold = clamp01(input.threshold ?? 0);
|
|
128
|
+
const decay = input.decay === undefined ? 1 : clamp01(input.decay);
|
|
129
|
+
const scores = new Map();
|
|
130
|
+
const frontier = new Set();
|
|
131
|
+
const settled = new Set();
|
|
132
|
+
const changedNodeIds = uniqueSorted(input.changedNodeIds.map(normalizeId).filter((nodeId) => nodeId.length > 0));
|
|
133
|
+
for (const nodeId of changedNodeIds) {
|
|
134
|
+
scores.set(nodeId, 1);
|
|
135
|
+
frontier.add(nodeId);
|
|
136
|
+
}
|
|
137
|
+
while (frontier.size > 0) {
|
|
138
|
+
const nodeId = pickHighestScoreNode(frontier, scores);
|
|
139
|
+
if (nodeId === undefined)
|
|
140
|
+
break;
|
|
141
|
+
frontier.delete(nodeId);
|
|
142
|
+
settled.add(nodeId);
|
|
143
|
+
const currentScore = scores.get(nodeId) ?? 0;
|
|
144
|
+
for (const traversalEdge of adjacency.get(nodeId) ?? []) {
|
|
145
|
+
const propagatedScore = currentScore * clamp01(traversalEdge.edge.reliability ?? 1) * decay;
|
|
146
|
+
if (propagatedScore <= FLOAT_EPSILON || propagatedScore < threshold - FLOAT_EPSILON)
|
|
147
|
+
continue;
|
|
148
|
+
const existingScore = scores.get(traversalEdge.to);
|
|
149
|
+
if (existingScore === undefined || propagatedScore > existingScore + FLOAT_EPSILON) {
|
|
150
|
+
scores.set(traversalEdge.to, propagatedScore);
|
|
151
|
+
if (!settled.has(traversalEdge.to))
|
|
152
|
+
frontier.add(traversalEdge.to);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
const impacted = [...scores.entries()]
|
|
157
|
+
.filter(([, score]) => score >= threshold - FLOAT_EPSILON)
|
|
158
|
+
.map(([nodeId, score]) => ({ nodeId, score }))
|
|
159
|
+
.sort(compareImpactHits);
|
|
160
|
+
return { scores, impacted };
|
|
161
|
+
};
|
|
162
|
+
export const selectTestsByGreedyWeightedSetCover = (input) => {
|
|
163
|
+
const targetWeights = normalizeTargetWeights(input.targets);
|
|
164
|
+
const remainingTargetIds = new Set(targetWeights.keys());
|
|
165
|
+
const selectedTests = [];
|
|
166
|
+
const selectedTestIds = new Set();
|
|
167
|
+
let totalCost = 0;
|
|
168
|
+
let totalWeightCovered = 0;
|
|
169
|
+
while (remainingTargetIds.size > 0) {
|
|
170
|
+
let bestCandidate;
|
|
171
|
+
for (const test of [...input.tests].sort((a, b) => a.id.localeCompare(b.id))) {
|
|
172
|
+
if (selectedTestIds.has(test.id))
|
|
173
|
+
continue;
|
|
174
|
+
const candidate = scoreTestSelectionCandidate(test, remainingTargetIds, targetWeights);
|
|
175
|
+
if (candidate.gain <= FLOAT_EPSILON)
|
|
176
|
+
continue;
|
|
177
|
+
if (bestCandidate === undefined || compareTestSelectionCandidates(candidate, bestCandidate) < 0) {
|
|
178
|
+
bestCandidate = candidate;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
if (bestCandidate === undefined)
|
|
182
|
+
break;
|
|
183
|
+
selectedTests.push(bestCandidate.test);
|
|
184
|
+
selectedTestIds.add(bestCandidate.test.id);
|
|
185
|
+
totalCost += bestCandidate.effectiveCost;
|
|
186
|
+
totalWeightCovered += bestCandidate.gain;
|
|
187
|
+
for (const targetId of bestCandidate.coveredTargetIds) {
|
|
188
|
+
remainingTargetIds.delete(targetId);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
const uncoveredTargetIds = [...remainingTargetIds].sort((a, b) => a.localeCompare(b));
|
|
192
|
+
const coveredTargetIds = [...targetWeights.keys()]
|
|
193
|
+
.filter((targetId) => !remainingTargetIds.has(targetId))
|
|
194
|
+
.sort((a, b) => a.localeCompare(b));
|
|
195
|
+
return {
|
|
196
|
+
selectedTests,
|
|
197
|
+
coveredTargetIds,
|
|
198
|
+
uncoveredTargetIds,
|
|
199
|
+
totalCost,
|
|
200
|
+
totalWeightCovered,
|
|
201
|
+
};
|
|
202
|
+
};
|
|
203
|
+
export const scoreGraphHotspots = (input) => {
|
|
204
|
+
const nodeIds = collectNodeIds(input.nodes, input.edges);
|
|
205
|
+
const nodeById = new Map(input.nodes.map((node) => [normalizeId(node.id), node]));
|
|
206
|
+
const dependencyEdges = normalizeEdges(input.edges).filter(isDependencyEdge);
|
|
207
|
+
const fanInSources = new Map();
|
|
208
|
+
const fanOutTargets = new Map();
|
|
209
|
+
for (const edge of dependencyEdges) {
|
|
210
|
+
addSetValue(fanInSources, edge.target, edge.source);
|
|
211
|
+
addSetValue(fanOutTargets, edge.source, edge.target);
|
|
212
|
+
}
|
|
213
|
+
const reverseReachableCounts = calculateReverseReachableCounts([...nodeIds], dependencyEdges);
|
|
214
|
+
const maxFanIn = maxMapSetSize(fanInSources);
|
|
215
|
+
const maxFanOut = maxMapSetSize(fanOutTargets);
|
|
216
|
+
const maxReverseReachable = Math.max(1, ...reverseReachableCounts.values());
|
|
217
|
+
const weights = { ...DEFAULT_HOTSPOT_WEIGHTS, ...input.weights };
|
|
218
|
+
return [...nodeIds]
|
|
219
|
+
.map((nodeId) => {
|
|
220
|
+
const node = nodeById.get(nodeId);
|
|
221
|
+
const breakdown = {
|
|
222
|
+
changeFrequency: clamp01(node?.changeFrequency ?? 0),
|
|
223
|
+
failureRate: clamp01(node?.failureRate ?? 0),
|
|
224
|
+
complexity: clamp01(node?.complexity ?? 0),
|
|
225
|
+
fanIn: normalizeRatio(fanInSources.get(nodeId)?.size ?? 0, maxFanIn),
|
|
226
|
+
fanOut: normalizeRatio(fanOutTargets.get(nodeId)?.size ?? 0, maxFanOut),
|
|
227
|
+
reverseImpact: normalizeRatio(reverseReachableCounts.get(nodeId) ?? 0, maxReverseReachable),
|
|
228
|
+
centrality: clamp01(node?.centrality ?? 0),
|
|
229
|
+
reliabilityRisk: 1 - clamp01(node?.reliability ?? 1),
|
|
230
|
+
};
|
|
231
|
+
return {
|
|
232
|
+
nodeId,
|
|
233
|
+
score: calculateHotspotScore(breakdown, weights),
|
|
234
|
+
breakdown,
|
|
235
|
+
};
|
|
236
|
+
})
|
|
237
|
+
.sort(compareHotspotScores);
|
|
238
|
+
};
|
|
239
|
+
export const multiSourceDijkstra = runMultiSourceDijkstra;
|
|
240
|
+
export const findDependencyCycles = detectDependencyCycles;
|
|
241
|
+
export const propagateReverseImpact = propagateImpact;
|
|
242
|
+
export const selectTestsByWeightedSetCover = selectTestsByGreedyWeightedSetCover;
|
|
243
|
+
export const scoreHotspots = scoreGraphHotspots;
|
|
244
|
+
const buildPath = (nodeId, predecessors) => {
|
|
245
|
+
const reversedSteps = [];
|
|
246
|
+
const reversedNodeIds = [nodeId];
|
|
247
|
+
let currentNodeId = nodeId;
|
|
248
|
+
const seen = new Set();
|
|
249
|
+
while (!seen.has(currentNodeId)) {
|
|
250
|
+
seen.add(currentNodeId);
|
|
251
|
+
const predecessor = predecessors.get(currentNodeId);
|
|
252
|
+
if (predecessor === undefined)
|
|
253
|
+
break;
|
|
254
|
+
reversedSteps.push({ nodeId: currentNodeId, edge: predecessor.edge });
|
|
255
|
+
currentNodeId = predecessor.nodeId;
|
|
256
|
+
reversedNodeIds.push(currentNodeId);
|
|
257
|
+
}
|
|
258
|
+
return {
|
|
259
|
+
edgeSteps: reversedSteps.reverse(),
|
|
260
|
+
nodeIds: reversedNodeIds.reverse(),
|
|
261
|
+
};
|
|
262
|
+
};
|
|
263
|
+
const buildTraversalEdges = (edges, mode) => {
|
|
264
|
+
const traversalEdges = [];
|
|
265
|
+
for (const edge of normalizeEdges(edges)) {
|
|
266
|
+
if (mode === "dependency" && isDependencyEdge(edge)) {
|
|
267
|
+
traversalEdges.push(makeTraversalEdge(edge, edge.source, edge.target, "forward"));
|
|
268
|
+
}
|
|
269
|
+
else if (mode === "reverse-impact" && isDependencyEdge(edge)) {
|
|
270
|
+
traversalEdges.push(makeTraversalEdge(edge, edge.target, edge.source, "reverse"));
|
|
271
|
+
}
|
|
272
|
+
else if (mode === "neighbors") {
|
|
273
|
+
traversalEdges.push(makeTraversalEdge(edge, edge.source, edge.target, "forward"));
|
|
274
|
+
if (edge.source !== edge.target)
|
|
275
|
+
traversalEdges.push(makeTraversalEdge(edge, edge.target, edge.source, "reverse"));
|
|
276
|
+
}
|
|
277
|
+
else if (mode === "tests" && isTestEdge(edge)) {
|
|
278
|
+
traversalEdges.push(makeTraversalEdge(edge, edge.source, edge.target, "forward"));
|
|
279
|
+
if (edge.source !== edge.target)
|
|
280
|
+
traversalEdges.push(makeTraversalEdge(edge, edge.target, edge.source, "reverse"));
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
return traversalEdges.sort(compareTraversalEdges);
|
|
284
|
+
};
|
|
285
|
+
const makeTraversalEdge = (edge, from, to, direction) => ({
|
|
286
|
+
from,
|
|
287
|
+
to,
|
|
288
|
+
edge,
|
|
289
|
+
cost: calculateTraversalEdgeCost(edge),
|
|
290
|
+
direction,
|
|
291
|
+
});
|
|
292
|
+
const calculateTraversalEdgeCost = (edge) => {
|
|
293
|
+
const baseCost = normalizePositiveNumber(edge.weight, 1);
|
|
294
|
+
return baseCost * reliabilityToTraversalCost(edge.reliability ?? 1);
|
|
295
|
+
};
|
|
296
|
+
const buildTraversalAdjacency = (traversalEdges) => {
|
|
297
|
+
const adjacency = new Map();
|
|
298
|
+
for (const traversalEdge of traversalEdges) {
|
|
299
|
+
const existing = adjacency.get(traversalEdge.from) ?? [];
|
|
300
|
+
adjacency.set(traversalEdge.from, [...existing, traversalEdge].sort(compareTraversalEdges));
|
|
301
|
+
}
|
|
302
|
+
return adjacency;
|
|
303
|
+
};
|
|
304
|
+
const buildDependencyAdjacency = (edges, direction) => {
|
|
305
|
+
const adjacency = new Map();
|
|
306
|
+
for (const edge of normalizeEdges(edges).filter(isDependencyEdge)) {
|
|
307
|
+
const from = direction === "forward" ? edge.source : edge.target;
|
|
308
|
+
const to = direction === "forward" ? edge.target : edge.source;
|
|
309
|
+
addSetValue(adjacency, from, to);
|
|
310
|
+
}
|
|
311
|
+
return new Map([...adjacency.entries()].map(([nodeId, neighbors]) => [
|
|
312
|
+
nodeId,
|
|
313
|
+
[...neighbors].sort((a, b) => a.localeCompare(b)),
|
|
314
|
+
]));
|
|
315
|
+
};
|
|
316
|
+
const normalizeEdges = (edges) => edges.flatMap((edge, index) => {
|
|
317
|
+
const source = normalizeId(edge.source);
|
|
318
|
+
const target = normalizeId(edge.target);
|
|
319
|
+
if (source.length === 0 || target.length === 0)
|
|
320
|
+
return [];
|
|
321
|
+
const kind = (edge.kind ?? "related").trim() || "related";
|
|
322
|
+
const explicitId = edge.id?.trim();
|
|
323
|
+
const id = explicitId && explicitId.length > 0 ? explicitId : `${kind}:${source}->${target}:${index}`;
|
|
324
|
+
return [{ ...edge, id, source, target, kind }];
|
|
325
|
+
});
|
|
326
|
+
const collectNodeIds = (nodes, edges) => {
|
|
327
|
+
const nodeIds = new Set();
|
|
328
|
+
for (const node of nodes) {
|
|
329
|
+
const nodeId = normalizeId(node.id);
|
|
330
|
+
if (nodeId.length > 0)
|
|
331
|
+
nodeIds.add(nodeId);
|
|
332
|
+
}
|
|
333
|
+
for (const edge of normalizeEdges(edges)) {
|
|
334
|
+
nodeIds.add(edge.source);
|
|
335
|
+
nodeIds.add(edge.target);
|
|
336
|
+
}
|
|
337
|
+
return nodeIds;
|
|
338
|
+
};
|
|
339
|
+
const pickLowestCostNode = (frontier, distances, pathKeys) => [...frontier].sort((a, b) => {
|
|
340
|
+
const distanceDelta = (distances.get(a) ?? Number.POSITIVE_INFINITY) - (distances.get(b) ?? Number.POSITIVE_INFINITY);
|
|
341
|
+
if (Math.abs(distanceDelta) > FLOAT_EPSILON)
|
|
342
|
+
return distanceDelta;
|
|
343
|
+
return (pathKeys.get(a) ?? a).localeCompare(pathKeys.get(b) ?? b) || a.localeCompare(b);
|
|
344
|
+
})[0];
|
|
345
|
+
const pickHighestScoreNode = (frontier, scores) => [...frontier].sort((a, b) => (scores.get(b) ?? 0) - (scores.get(a) ?? 0) || a.localeCompare(b))[0];
|
|
346
|
+
const scoreTestSelectionCandidate = (test, remainingTargetIds, targetWeights) => {
|
|
347
|
+
const coverage = normalizeCoverage(test.covers);
|
|
348
|
+
const coveredTargetIds = [...remainingTargetIds]
|
|
349
|
+
.filter((targetId) => (coverage.get(targetId) ?? 0) > 0)
|
|
350
|
+
.sort((a, b) => a.localeCompare(b));
|
|
351
|
+
const gain = coveredTargetIds.reduce((sum, targetId) => sum + (targetWeights.get(targetId) ?? 0) * (coverage.get(targetId) ?? 0), 0);
|
|
352
|
+
const effectiveCost = normalizePositiveNumber(test.cost, 1) * reliabilityToTraversalCost(test.reliability ?? 1);
|
|
353
|
+
return {
|
|
354
|
+
test,
|
|
355
|
+
gain,
|
|
356
|
+
ratio: gain / effectiveCost,
|
|
357
|
+
effectiveCost,
|
|
358
|
+
coveredTargetIds,
|
|
359
|
+
};
|
|
360
|
+
};
|
|
361
|
+
const normalizeCoverage = (covers) => {
|
|
362
|
+
const coverage = new Map();
|
|
363
|
+
for (const cover of covers) {
|
|
364
|
+
const targetId = typeof cover === "string" ? normalizeId(cover) : normalizeId(cover.targetId);
|
|
365
|
+
if (targetId.length === 0)
|
|
366
|
+
continue;
|
|
367
|
+
const weight = typeof cover === "string" ? 1 : normalizePositiveNumber(cover.weight, 1);
|
|
368
|
+
coverage.set(targetId, Math.max(coverage.get(targetId) ?? 0, weight));
|
|
369
|
+
}
|
|
370
|
+
return coverage;
|
|
371
|
+
};
|
|
372
|
+
const normalizeTargetWeights = (targets) => {
|
|
373
|
+
const targetWeights = new Map();
|
|
374
|
+
for (const target of targets) {
|
|
375
|
+
const targetId = normalizeId(target.id);
|
|
376
|
+
if (targetId.length === 0)
|
|
377
|
+
continue;
|
|
378
|
+
targetWeights.set(targetId, Math.max(targetWeights.get(targetId) ?? 0, normalizePositiveNumber(target.weight, 1)));
|
|
379
|
+
}
|
|
380
|
+
return new Map([...targetWeights.entries()].sort(([a], [b]) => a.localeCompare(b)));
|
|
381
|
+
};
|
|
382
|
+
const calculateReverseReachableCounts = (nodeIds, dependencyEdges) => {
|
|
383
|
+
const reverseAdjacency = buildDependencyAdjacency(dependencyEdges, "reverse");
|
|
384
|
+
const counts = new Map();
|
|
385
|
+
for (const nodeId of nodeIds) {
|
|
386
|
+
const visited = new Set();
|
|
387
|
+
const queue = [...(reverseAdjacency.get(nodeId) ?? [])];
|
|
388
|
+
while (queue.length > 0) {
|
|
389
|
+
const current = queue.shift();
|
|
390
|
+
if (current === undefined || current === nodeId || visited.has(current))
|
|
391
|
+
continue;
|
|
392
|
+
visited.add(current);
|
|
393
|
+
queue.push(...(reverseAdjacency.get(current) ?? []));
|
|
394
|
+
}
|
|
395
|
+
counts.set(nodeId, visited.size);
|
|
396
|
+
}
|
|
397
|
+
return counts;
|
|
398
|
+
};
|
|
399
|
+
const calculateHotspotScore = (breakdown, weights) => clamp01(breakdown.changeFrequency * weights.changeFrequency +
|
|
400
|
+
breakdown.failureRate * weights.failureRate +
|
|
401
|
+
breakdown.complexity * weights.complexity +
|
|
402
|
+
breakdown.fanIn * weights.fanIn +
|
|
403
|
+
breakdown.fanOut * weights.fanOut +
|
|
404
|
+
breakdown.reverseImpact * weights.reverseImpact +
|
|
405
|
+
breakdown.centrality * weights.centrality +
|
|
406
|
+
breakdown.reliabilityRisk * weights.reliabilityRisk);
|
|
407
|
+
const compareTraversalEdges = (a, b) => a.from.localeCompare(b.from) ||
|
|
408
|
+
a.to.localeCompare(b.to) ||
|
|
409
|
+
a.cost - b.cost ||
|
|
410
|
+
a.edge.id.localeCompare(b.edge.id) ||
|
|
411
|
+
a.direction.localeCompare(b.direction);
|
|
412
|
+
const compareImpactHits = (a, b) => b.score - a.score || a.nodeId.localeCompare(b.nodeId);
|
|
413
|
+
const compareHotspotScores = (a, b) => b.score - a.score || a.nodeId.localeCompare(b.nodeId);
|
|
414
|
+
const compareStringLists = (a, b) => a[0]?.localeCompare(b[0] ?? "") || a.length - b.length || a.join("\0").localeCompare(b.join("\0"));
|
|
415
|
+
const compareTestSelectionCandidates = (a, b) => b.ratio - a.ratio || b.gain - a.gain || a.effectiveCost - b.effectiveCost || a.test.id.localeCompare(b.test.id);
|
|
416
|
+
const isDependencyEdge = (edge) => edge.kind === "dependency";
|
|
417
|
+
const isTestEdge = (edge) => edge.kind === "test" || edge.kind === "tests" || edge.kind === "coverage";
|
|
418
|
+
const addSetValue = (map, key, value) => {
|
|
419
|
+
const existing = map.get(key);
|
|
420
|
+
if (existing === undefined) {
|
|
421
|
+
map.set(key, new Set([value]));
|
|
422
|
+
return;
|
|
423
|
+
}
|
|
424
|
+
existing.add(value);
|
|
425
|
+
};
|
|
426
|
+
const maxMapSetSize = (map) => Math.max(1, ...[...map.values()].map((items) => items.size));
|
|
427
|
+
const normalizeRatio = (value, maxValue) => {
|
|
428
|
+
if (!Number.isFinite(value) || !Number.isFinite(maxValue) || maxValue <= 0)
|
|
429
|
+
return 0;
|
|
430
|
+
return clamp01(value / maxValue);
|
|
431
|
+
};
|
|
432
|
+
const normalizePositiveNumber = (value, fallback) => value !== undefined && Number.isFinite(value) && value > 0 ? value : fallback;
|
|
433
|
+
const normalizeId = (id) => id.trim();
|
|
434
|
+
const uniqueSorted = (values) => [...new Set(values)].sort((a, b) => a.localeCompare(b));
|
|
435
|
+
const clamp01 = (value) => {
|
|
436
|
+
if (!Number.isFinite(value) || value <= 0)
|
|
437
|
+
return 0;
|
|
438
|
+
if (value >= 1)
|
|
439
|
+
return 1;
|
|
440
|
+
return value;
|
|
441
|
+
};
|
|
442
|
+
//# sourceMappingURL=context-graph-reasoning.js.map
|