trail-code 0.0.0-stage → 0.28.0-semantic.3
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/LICENSE +21 -0
- package/README.md +567 -2
- package/dist/ai/crux.d.ts +88 -0
- package/dist/ai/crux.d.ts.map +1 -0
- package/dist/ai/crux.js +219 -0
- package/dist/ai/crux.js.map +1 -0
- package/dist/ai/failure.d.ts +60 -0
- package/dist/ai/failure.d.ts.map +1 -0
- package/dist/ai/failure.js +86 -0
- package/dist/ai/failure.js.map +1 -0
- package/dist/ai/llm/anthropic.d.ts +37 -0
- package/dist/ai/llm/anthropic.d.ts.map +1 -0
- package/dist/ai/llm/anthropic.js +144 -0
- package/dist/ai/llm/anthropic.js.map +1 -0
- package/dist/ai/llm/factory.d.ts +28 -0
- package/dist/ai/llm/factory.d.ts.map +1 -0
- package/dist/ai/llm/factory.js +36 -0
- package/dist/ai/llm/factory.js.map +1 -0
- package/dist/ai/llm/litellm.d.ts +34 -0
- package/dist/ai/llm/litellm.d.ts.map +1 -0
- package/dist/ai/llm/litellm.js +45 -0
- package/dist/ai/llm/litellm.js.map +1 -0
- package/dist/ai/llm/openai.d.ts +145 -0
- package/dist/ai/llm/openai.d.ts.map +1 -0
- package/dist/ai/llm/openai.js +629 -0
- package/dist/ai/llm/openai.js.map +1 -0
- package/dist/ai/llm/orcarouter.d.ts +34 -0
- package/dist/ai/llm/orcarouter.d.ts.map +1 -0
- package/dist/ai/llm/orcarouter.js +45 -0
- package/dist/ai/llm/orcarouter.js.map +1 -0
- package/dist/ai/llm/recover-tool.d.ts +21 -0
- package/dist/ai/llm/recover-tool.d.ts.map +1 -0
- package/dist/ai/llm/recover-tool.js +109 -0
- package/dist/ai/llm/recover-tool.js.map +1 -0
- package/dist/ai/llm/types.d.ts +122 -0
- package/dist/ai/llm/types.d.ts.map +1 -0
- package/dist/ai/llm/types.js +33 -0
- package/dist/ai/llm/types.js.map +1 -0
- package/dist/ai/providers.d.ts +59 -0
- package/dist/ai/providers.d.ts.map +1 -0
- package/dist/ai/providers.js +54 -0
- package/dist/ai/providers.js.map +1 -0
- package/dist/ai/summarize.d.ts +25 -0
- package/dist/ai/summarize.d.ts.map +1 -0
- package/dist/ai/summarize.js +34 -0
- package/dist/ai/summarize.js.map +1 -0
- package/dist/ai/synthesize.d.ts +40 -0
- package/dist/ai/synthesize.d.ts.map +1 -0
- package/dist/ai/synthesize.js +230 -0
- package/dist/ai/synthesize.js.map +1 -0
- package/dist/ask/ask.d.ts +199 -0
- package/dist/ask/ask.d.ts.map +1 -0
- package/dist/ask/ask.js +1291 -0
- package/dist/ask/ask.js.map +1 -0
- package/dist/ask/file-rank.d.ts +72 -0
- package/dist/ask/file-rank.d.ts.map +1 -0
- package/dist/ask/file-rank.js +160 -0
- package/dist/ask/file-rank.js.map +1 -0
- package/dist/ask/file-selection.d.ts +22 -0
- package/dist/ask/file-selection.d.ts.map +1 -0
- package/dist/ask/file-selection.js +66 -0
- package/dist/ask/file-selection.js.map +1 -0
- package/dist/ask/fuse.d.ts +195 -0
- package/dist/ask/fuse.d.ts.map +1 -0
- package/dist/ask/fuse.js +344 -0
- package/dist/ask/fuse.js.map +1 -0
- package/dist/ask/graphrank.d.ts +61 -0
- package/dist/ask/graphrank.d.ts.map +1 -0
- package/dist/ask/graphrank.js +130 -0
- package/dist/ask/graphrank.js.map +1 -0
- package/dist/ask/index-file.d.ts +44 -0
- package/dist/ask/index-file.d.ts.map +1 -0
- package/dist/ask/index-file.js +128 -0
- package/dist/ask/index-file.js.map +1 -0
- package/dist/ask/semantic.d.ts +42 -0
- package/dist/ask/semantic.d.ts.map +1 -0
- package/dist/ask/semantic.js +293 -0
- package/dist/ask/semantic.js.map +1 -0
- package/dist/bin/graft.d.ts +3 -0
- package/dist/bin/graft.d.ts.map +1 -0
- package/dist/bin/graft.js +14 -0
- package/dist/bin/graft.js.map +1 -0
- package/dist/bin/trail.d.ts +3 -0
- package/dist/bin/trail.d.ts.map +1 -0
- package/dist/bin/trail.js +13 -0
- package/dist/bin/trail.js.map +1 -0
- package/dist/blast/blast-cli.d.ts +35 -0
- package/dist/blast/blast-cli.d.ts.map +1 -0
- package/dist/blast/blast-cli.js +155 -0
- package/dist/blast/blast-cli.js.map +1 -0
- package/dist/blast/blast.d.ts +128 -0
- package/dist/blast/blast.d.ts.map +1 -0
- package/dist/blast/blast.js +383 -0
- package/dist/blast/blast.js.map +1 -0
- package/dist/blast/diff.d.ts +53 -0
- package/dist/blast/diff.d.ts.map +1 -0
- package/dist/blast/diff.js +193 -0
- package/dist/blast/diff.js.map +1 -0
- package/dist/blast/evidence.d.ts +51 -0
- package/dist/blast/evidence.d.ts.map +1 -0
- package/dist/blast/evidence.js +162 -0
- package/dist/blast/evidence.js.map +1 -0
- package/dist/blast/modules.d.ts +33 -0
- package/dist/blast/modules.d.ts.map +1 -0
- package/dist/blast/modules.js +83 -0
- package/dist/blast/modules.js.map +1 -0
- package/dist/blast/name.d.ts +74 -0
- package/dist/blast/name.d.ts.map +1 -0
- package/dist/blast/name.js +269 -0
- package/dist/blast/name.js.map +1 -0
- package/dist/blast/owners.d.ts +85 -0
- package/dist/blast/owners.d.ts.map +1 -0
- package/dist/blast/owners.js +272 -0
- package/dist/blast/owners.js.map +1 -0
- package/dist/blast/render.d.ts +46 -0
- package/dist/blast/render.d.ts.map +1 -0
- package/dist/blast/render.js +422 -0
- package/dist/blast/render.js.map +1 -0
- package/dist/blast/viz.d.ts +37 -0
- package/dist/blast/viz.d.ts.map +1 -0
- package/dist/blast/viz.js +180 -0
- package/dist/blast/viz.js.map +1 -0
- package/dist/brand.d.ts +111 -0
- package/dist/brand.d.ts.map +1 -0
- package/dist/brand.js +282 -0
- package/dist/brand.js.map +1 -0
- package/dist/claude/build-progress.d.ts +30 -0
- package/dist/claude/build-progress.d.ts.map +1 -0
- package/dist/claude/build-progress.js +81 -0
- package/dist/claude/build-progress.js.map +1 -0
- package/dist/claude/hermes-skill-template.d.ts +16 -0
- package/dist/claude/hermes-skill-template.d.ts.map +1 -0
- package/dist/claude/hermes-skill-template.js +154 -0
- package/dist/claude/hermes-skill-template.js.map +1 -0
- package/dist/claude/init.d.ts +65 -0
- package/dist/claude/init.d.ts.map +1 -0
- package/dist/claude/init.js +258 -0
- package/dist/claude/init.js.map +1 -0
- package/dist/claude/paths.d.ts +9 -0
- package/dist/claude/paths.d.ts.map +1 -0
- package/dist/claude/paths.js +22 -0
- package/dist/claude/paths.js.map +1 -0
- package/dist/claude/session-metrics.d.ts +73 -0
- package/dist/claude/session-metrics.d.ts.map +1 -0
- package/dist/claude/session-metrics.js +209 -0
- package/dist/claude/session-metrics.js.map +1 -0
- package/dist/claude/settings-merge.d.ts +76 -0
- package/dist/claude/settings-merge.d.ts.map +1 -0
- package/dist/claude/settings-merge.js +283 -0
- package/dist/claude/settings-merge.js.map +1 -0
- package/dist/claude/skill-template.d.ts +13 -0
- package/dist/claude/skill-template.d.ts.map +1 -0
- package/dist/claude/skill-template.js +290 -0
- package/dist/claude/skill-template.js.map +1 -0
- package/dist/claude/state.d.ts +85 -0
- package/dist/claude/state.d.ts.map +1 -0
- package/dist/claude/state.js +88 -0
- package/dist/claude/state.js.map +1 -0
- package/dist/claude/stats.d.ts +5 -0
- package/dist/claude/stats.d.ts.map +1 -0
- package/dist/claude/stats.js +24 -0
- package/dist/claude/stats.js.map +1 -0
- package/dist/cli-epilogue.d.ts +12 -0
- package/dist/cli-epilogue.d.ts.map +1 -0
- package/dist/cli-epilogue.js +72 -0
- package/dist/cli-epilogue.js.map +1 -0
- package/dist/cli-meta.d.ts +82 -0
- package/dist/cli-meta.d.ts.map +1 -0
- package/dist/cli-meta.js +238 -0
- package/dist/cli-meta.js.map +1 -0
- package/dist/cli-picker.d.ts +139 -0
- package/dist/cli-picker.d.ts.map +1 -0
- package/dist/cli-picker.js +439 -0
- package/dist/cli-picker.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1638 -0
- package/dist/cli.js.map +1 -0
- package/dist/context/batches.d.ts +29 -0
- package/dist/context/batches.d.ts.map +1 -0
- package/dist/context/batches.js +130 -0
- package/dist/context/batches.js.map +1 -0
- package/dist/context/build.d.ts +57 -0
- package/dist/context/build.d.ts.map +1 -0
- package/dist/context/build.js +396 -0
- package/dist/context/build.js.map +1 -0
- package/dist/context/check.d.ts +42 -0
- package/dist/context/check.d.ts.map +1 -0
- package/dist/context/check.js +162 -0
- package/dist/context/check.js.map +1 -0
- package/dist/context/map-dir.d.ts +13 -0
- package/dist/context/map-dir.d.ts.map +1 -0
- package/dist/context/map-dir.js +81 -0
- package/dist/context/map-dir.js.map +1 -0
- package/dist/context/node-file.d.ts +109 -0
- package/dist/context/node-file.d.ts.map +1 -0
- package/dist/context/node-file.js +390 -0
- package/dist/context/node-file.js.map +1 -0
- package/dist/context/price.d.ts +49 -0
- package/dist/context/price.d.ts.map +1 -0
- package/dist/context/price.js +83 -0
- package/dist/context/price.js.map +1 -0
- package/dist/context/savings.d.ts +67 -0
- package/dist/context/savings.d.ts.map +1 -0
- package/dist/context/savings.js +125 -0
- package/dist/context/savings.js.map +1 -0
- package/dist/engine.d.ts +85 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +122 -0
- package/dist/engine.js.map +1 -0
- package/dist/graph/bindings.d.ts +64 -0
- package/dist/graph/bindings.d.ts.map +1 -0
- package/dist/graph/bindings.js +713 -0
- package/dist/graph/bindings.js.map +1 -0
- package/dist/graph/build-run.d.ts +25 -0
- package/dist/graph/build-run.d.ts.map +1 -0
- package/dist/graph/build-run.js +121 -0
- package/dist/graph/build-run.js.map +1 -0
- package/dist/graph/build.d.ts +88 -0
- package/dist/graph/build.d.ts.map +1 -0
- package/dist/graph/build.js +386 -0
- package/dist/graph/build.js.map +1 -0
- package/dist/graph/cards.d.ts +46 -0
- package/dist/graph/cards.d.ts.map +1 -0
- package/dist/graph/cards.js +280 -0
- package/dist/graph/cards.js.map +1 -0
- package/dist/graph/check.d.ts +25 -0
- package/dist/graph/check.d.ts.map +1 -0
- package/dist/graph/check.js +192 -0
- package/dist/graph/check.js.map +1 -0
- package/dist/graph/container.d.ts +63 -0
- package/dist/graph/container.d.ts.map +1 -0
- package/dist/graph/container.js +191 -0
- package/dist/graph/container.js.map +1 -0
- package/dist/graph/depth-parser.d.ts +61 -0
- package/dist/graph/depth-parser.d.ts.map +1 -0
- package/dist/graph/depth-parser.js +153 -0
- package/dist/graph/depth-parser.js.map +1 -0
- package/dist/graph/enrich.d.ts +62 -0
- package/dist/graph/enrich.d.ts.map +1 -0
- package/dist/graph/enrich.js +258 -0
- package/dist/graph/enrich.js.map +1 -0
- package/dist/graph/extract-cache.d.ts +101 -0
- package/dist/graph/extract-cache.d.ts.map +1 -0
- package/dist/graph/extract-cache.js +199 -0
- package/dist/graph/extract-cache.js.map +1 -0
- package/dist/graph/extract.d.ts +85 -0
- package/dist/graph/extract.d.ts.map +1 -0
- package/dist/graph/extract.js +2377 -0
- package/dist/graph/extract.js.map +1 -0
- package/dist/graph/fingerprint.d.ts +76 -0
- package/dist/graph/fingerprint.d.ts.map +1 -0
- package/dist/graph/fingerprint.js +160 -0
- package/dist/graph/fingerprint.js.map +1 -0
- package/dist/graph/generic.d.ts +74 -0
- package/dist/graph/generic.d.ts.map +1 -0
- package/dist/graph/generic.js +773 -0
- package/dist/graph/generic.js.map +1 -0
- package/dist/graph/invariants.d.ts +33 -0
- package/dist/graph/invariants.d.ts.map +1 -0
- package/dist/graph/invariants.js +52 -0
- package/dist/graph/invariants.js.map +1 -0
- package/dist/graph/load.d.ts +29 -0
- package/dist/graph/load.d.ts.map +1 -0
- package/dist/graph/load.js +97 -0
- package/dist/graph/load.js.map +1 -0
- package/dist/graph/lsp/client.d.ts +61 -0
- package/dist/graph/lsp/client.d.ts.map +1 -0
- package/dist/graph/lsp/client.js +217 -0
- package/dist/graph/lsp/client.js.map +1 -0
- package/dist/graph/lsp/enrich.d.ts +11 -0
- package/dist/graph/lsp/enrich.d.ts.map +1 -0
- package/dist/graph/lsp/enrich.js +163 -0
- package/dist/graph/lsp/enrich.js.map +1 -0
- package/dist/graph/lsp/registry.d.ts +22 -0
- package/dist/graph/lsp/registry.d.ts.map +1 -0
- package/dist/graph/lsp/registry.js +71 -0
- package/dist/graph/lsp/registry.js.map +1 -0
- package/dist/graph/map.d.ts +107 -0
- package/dist/graph/map.d.ts.map +1 -0
- package/dist/graph/map.js +239 -0
- package/dist/graph/map.js.map +1 -0
- package/dist/graph/markdown.d.ts +22 -0
- package/dist/graph/markdown.d.ts.map +1 -0
- package/dist/graph/markdown.js +143 -0
- package/dist/graph/markdown.js.map +1 -0
- package/dist/graph/native.d.ts +46 -0
- package/dist/graph/native.d.ts.map +1 -0
- package/dist/graph/native.js +169 -0
- package/dist/graph/native.js.map +1 -0
- package/dist/graph/queries/c.scm +13 -0
- package/dist/graph/queries/c_sharp.scm +19 -0
- package/dist/graph/queries/clojure.scm +58 -0
- package/dist/graph/queries/cpp.scm +23 -0
- package/dist/graph/queries/dart.scm +42 -0
- package/dist/graph/queries/elixir.scm +54 -0
- package/dist/graph/queries/gleam.scm +51 -0
- package/dist/graph/queries/java.scm +20 -0
- package/dist/graph/queries/kotlin.scm +43 -0
- package/dist/graph/queries/lua.scm +36 -0
- package/dist/graph/queries/nix.scm +32 -0
- package/dist/graph/queries/php.scm +40 -0
- package/dist/graph/queries/ruby.scm +65 -0
- package/dist/graph/queries/rust.scm +41 -0
- package/dist/graph/queries/scala.scm +66 -0
- package/dist/graph/queries/solidity.scm +43 -0
- package/dist/graph/queries/swift.scm +51 -0
- package/dist/graph/refresh.d.ts +106 -0
- package/dist/graph/refresh.d.ts.map +1 -0
- package/dist/graph/refresh.js +430 -0
- package/dist/graph/refresh.js.map +1 -0
- package/dist/graph/relations.d.ts +14 -0
- package/dist/graph/relations.d.ts.map +1 -0
- package/dist/graph/relations.js +8 -0
- package/dist/graph/relations.js.map +1 -0
- package/dist/graph/resolve.d.ts +17 -0
- package/dist/graph/resolve.d.ts.map +1 -0
- package/dist/graph/resolve.js +716 -0
- package/dist/graph/resolve.js.map +1 -0
- package/dist/graph/root.d.ts +11 -0
- package/dist/graph/root.d.ts.map +1 -0
- package/dist/graph/root.js +40 -0
- package/dist/graph/root.js.map +1 -0
- package/dist/graph/scopes.d.ts +40 -0
- package/dist/graph/scopes.d.ts.map +1 -0
- package/dist/graph/scopes.js +383 -0
- package/dist/graph/scopes.js.map +1 -0
- package/dist/graph/seed.d.ts +38 -0
- package/dist/graph/seed.d.ts.map +1 -0
- package/dist/graph/seed.js +229 -0
- package/dist/graph/seed.js.map +1 -0
- package/dist/graph/source-files.d.ts +46 -0
- package/dist/graph/source-files.d.ts.map +1 -0
- package/dist/graph/source-files.js +118 -0
- package/dist/graph/source-files.js.map +1 -0
- package/dist/graph/traverse-cli.d.ts +55 -0
- package/dist/graph/traverse-cli.d.ts.map +1 -0
- package/dist/graph/traverse-cli.js +189 -0
- package/dist/graph/traverse-cli.js.map +1 -0
- package/dist/graph/traverse.d.ts +112 -0
- package/dist/graph/traverse.d.ts.map +1 -0
- package/dist/graph/traverse.js +192 -0
- package/dist/graph/traverse.js.map +1 -0
- package/dist/graph/types.d.ts +78 -0
- package/dist/graph/types.d.ts.map +1 -0
- package/dist/graph/types.js +14 -0
- package/dist/graph/types.js.map +1 -0
- package/dist/graph/wasm-runtime.d.ts +19 -0
- package/dist/graph/wasm-runtime.d.ts.map +1 -0
- package/dist/graph/wasm-runtime.js +38 -0
- package/dist/graph/wasm-runtime.js.map +1 -0
- package/dist/graph/workspace-cli.d.ts +56 -0
- package/dist/graph/workspace-cli.d.ts.map +1 -0
- package/dist/graph/workspace-cli.js +111 -0
- package/dist/graph/workspace-cli.js.map +1 -0
- package/dist/graph/workspace.d.ts +172 -0
- package/dist/graph/workspace.d.ts.map +1 -0
- package/dist/graph/workspace.js +714 -0
- package/dist/graph/workspace.js.map +1 -0
- package/dist/graph/write.d.ts +13 -0
- package/dist/graph/write.d.ts.map +1 -0
- package/dist/graph/write.js +86 -0
- package/dist/graph/write.js.map +1 -0
- package/dist/hosts/antigravity.d.ts +14 -0
- package/dist/hosts/antigravity.d.ts.map +1 -0
- package/dist/hosts/antigravity.js +59 -0
- package/dist/hosts/antigravity.js.map +1 -0
- package/dist/hosts/auto.d.ts +37 -0
- package/dist/hosts/auto.d.ts.map +1 -0
- package/dist/hosts/auto.js +141 -0
- package/dist/hosts/auto.js.map +1 -0
- package/dist/hosts/claude-global.d.ts +72 -0
- package/dist/hosts/claude-global.d.ts.map +1 -0
- package/dist/hosts/claude-global.js +230 -0
- package/dist/hosts/claude-global.js.map +1 -0
- package/dist/hosts/config-write.d.ts +36 -0
- package/dist/hosts/config-write.d.ts.map +1 -0
- package/dist/hosts/config-write.js +64 -0
- package/dist/hosts/config-write.js.map +1 -0
- package/dist/hosts/init.d.ts +28 -0
- package/dist/hosts/init.d.ts.map +1 -0
- package/dist/hosts/init.js +89 -0
- package/dist/hosts/init.js.map +1 -0
- package/dist/hosts/instructions.d.ts +14 -0
- package/dist/hosts/instructions.d.ts.map +1 -0
- package/dist/hosts/instructions.js +95 -0
- package/dist/hosts/instructions.js.map +1 -0
- package/dist/hosts/mcp-config.d.ts +78 -0
- package/dist/hosts/mcp-config.d.ts.map +1 -0
- package/dist/hosts/mcp-config.js +251 -0
- package/dist/hosts/mcp-config.js.map +1 -0
- package/dist/hosts/plan.d.ts +32 -0
- package/dist/hosts/plan.d.ts.map +1 -0
- package/dist/hosts/plan.js +73 -0
- package/dist/hosts/plan.js.map +1 -0
- package/dist/hosts/registry.d.ts +41 -0
- package/dist/hosts/registry.d.ts.map +1 -0
- package/dist/hosts/registry.js +164 -0
- package/dist/hosts/registry.js.map +1 -0
- package/dist/hosts/retract.d.ts +47 -0
- package/dist/hosts/retract.d.ts.map +1 -0
- package/dist/hosts/retract.js +520 -0
- package/dist/hosts/retract.js.map +1 -0
- package/dist/hosts/sections.d.ts +47 -0
- package/dist/hosts/sections.d.ts.map +1 -0
- package/dist/hosts/sections.js +127 -0
- package/dist/hosts/sections.js.map +1 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/ingest/fs.d.ts +79 -0
- package/dist/ingest/fs.d.ts.map +1 -0
- package/dist/ingest/fs.js +306 -0
- package/dist/ingest/fs.js.map +1 -0
- package/dist/init-guard.d.ts +16 -0
- package/dist/init-guard.d.ts.map +1 -0
- package/dist/init-guard.js +27 -0
- package/dist/init-guard.js.map +1 -0
- package/dist/mcp/instructions.d.ts +5 -0
- package/dist/mcp/instructions.d.ts.map +1 -0
- package/dist/mcp/instructions.js +64 -0
- package/dist/mcp/instructions.js.map +1 -0
- package/dist/mcp/kept-listing.d.ts +27 -0
- package/dist/mcp/kept-listing.d.ts.map +1 -0
- package/dist/mcp/kept-listing.js +63 -0
- package/dist/mcp/kept-listing.js.map +1 -0
- package/dist/mcp/server.d.ts +4 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +147 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tool-names.d.ts +27 -0
- package/dist/mcp/tool-names.d.ts.map +1 -0
- package/dist/mcp/tool-names.js +47 -0
- package/dist/mcp/tool-names.js.map +1 -0
- package/dist/mcp/tools.d.ts +22 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +440 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/node-version.d.ts +15 -0
- package/dist/node-version.d.ts.map +1 -0
- package/dist/node-version.js +23 -0
- package/dist/node-version.js.map +1 -0
- package/dist/search/grep-cli.d.ts +35 -0
- package/dist/search/grep-cli.d.ts.map +1 -0
- package/dist/search/grep-cli.js +115 -0
- package/dist/search/grep-cli.js.map +1 -0
- package/dist/search/grep.d.ts +60 -0
- package/dist/search/grep.d.ts.map +1 -0
- package/dist/search/grep.js +143 -0
- package/dist/search/grep.js.map +1 -0
- package/dist/search/ignored-code.d.ts +9 -0
- package/dist/search/ignored-code.d.ts.map +1 -0
- package/dist/search/ignored-code.js +73 -0
- package/dist/search/ignored-code.js.map +1 -0
- package/dist/search/user-regexp.d.ts +26 -0
- package/dist/search/user-regexp.d.ts.map +1 -0
- package/dist/search/user-regexp.js +150 -0
- package/dist/search/user-regexp.js.map +1 -0
- package/dist/telemetry/contract.d.ts +117 -0
- package/dist/telemetry/contract.d.ts.map +1 -0
- package/dist/telemetry/contract.js +341 -0
- package/dist/telemetry/contract.js.map +1 -0
- package/dist/telemetry/flush.d.ts +21 -0
- package/dist/telemetry/flush.d.ts.map +1 -0
- package/dist/telemetry/flush.js +85 -0
- package/dist/telemetry/flush.js.map +1 -0
- package/dist/telemetry/gate.d.ts +30 -0
- package/dist/telemetry/gate.d.ts.map +1 -0
- package/dist/telemetry/gate.js +81 -0
- package/dist/telemetry/gate.js.map +1 -0
- package/dist/telemetry/identity.d.ts +40 -0
- package/dist/telemetry/identity.d.ts.map +1 -0
- package/dist/telemetry/identity.js +80 -0
- package/dist/telemetry/identity.js.map +1 -0
- package/dist/telemetry/index.d.ts +18 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +16 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/key.d.ts +21 -0
- package/dist/telemetry/key.d.ts.map +1 -0
- package/dist/telemetry/key.js +49 -0
- package/dist/telemetry/key.js.map +1 -0
- package/dist/telemetry/notice.d.ts +19 -0
- package/dist/telemetry/notice.d.ts.map +1 -0
- package/dist/telemetry/notice.js +93 -0
- package/dist/telemetry/notice.js.map +1 -0
- package/dist/telemetry/queue.d.ts +35 -0
- package/dist/telemetry/queue.d.ts.map +1 -0
- package/dist/telemetry/queue.js +162 -0
- package/dist/telemetry/queue.js.map +1 -0
- package/dist/telemetry/send.d.ts +19 -0
- package/dist/telemetry/send.d.ts.map +1 -0
- package/dist/telemetry/send.js +84 -0
- package/dist/telemetry/send.js.map +1 -0
- package/dist/telemetry/sessions.d.ts +25 -0
- package/dist/telemetry/sessions.d.ts.map +1 -0
- package/dist/telemetry/sessions.js +104 -0
- package/dist/telemetry/sessions.js.map +1 -0
- package/dist/telemetry/track.d.ts +62 -0
- package/dist/telemetry/track.d.ts.map +1 -0
- package/dist/telemetry/track.js +143 -0
- package/dist/telemetry/track.js.map +1 -0
- package/dist/upkeep-run.d.ts +22 -0
- package/dist/upkeep-run.d.ts.map +1 -0
- package/dist/upkeep-run.js +85 -0
- package/dist/upkeep-run.js.map +1 -0
- package/dist/upkeep.d.ts +127 -0
- package/dist/upkeep.d.ts.map +1 -0
- package/dist/upkeep.js +252 -0
- package/dist/upkeep.js.map +1 -0
- package/dist/util/actions-folder.d.ts +2 -0
- package/dist/util/actions-folder.d.ts.map +1 -0
- package/dist/util/actions-folder.js +9 -0
- package/dist/util/actions-folder.js.map +1 -0
- package/dist/util/browser.d.ts +3 -0
- package/dist/util/browser.d.ts.map +1 -0
- package/dist/util/browser.js +14 -0
- package/dist/util/browser.js.map +1 -0
- package/dist/util/child-process.d.ts +15 -0
- package/dist/util/child-process.d.ts.map +1 -0
- package/dist/util/child-process.js +15 -0
- package/dist/util/child-process.js.map +1 -0
- package/dist/util/front-matter.d.ts +46 -0
- package/dist/util/front-matter.d.ts.map +1 -0
- package/dist/util/front-matter.js +113 -0
- package/dist/util/front-matter.js.map +1 -0
- package/dist/util/id.d.ts +7 -0
- package/dist/util/id.d.ts.map +1 -0
- package/dist/util/id.js +14 -0
- package/dist/util/id.js.map +1 -0
- package/dist/util/paths.d.ts +29 -0
- package/dist/util/paths.d.ts.map +1 -0
- package/dist/util/paths.js +71 -0
- package/dist/util/paths.js.map +1 -0
- package/dist/util/private-file.d.ts +14 -0
- package/dist/util/private-file.d.ts.map +1 -0
- package/dist/util/private-file.js +82 -0
- package/dist/util/private-file.js.map +1 -0
- package/dist/util/source.d.ts +4 -0
- package/dist/util/source.d.ts.map +1 -0
- package/dist/util/source.js +12 -0
- package/dist/util/source.js.map +1 -0
- package/dist/util/spinner.d.ts +15 -0
- package/dist/util/spinner.d.ts.map +1 -0
- package/dist/util/spinner.js +52 -0
- package/dist/util/spinner.js.map +1 -0
- package/dist/util/state.d.ts +120 -0
- package/dist/util/state.d.ts.map +1 -0
- package/dist/util/state.js +264 -0
- package/dist/util/state.js.map +1 -0
- package/dist/vendor/grammars/tree-sitter-go.LICENSE +21 -0
- package/dist/vendor/grammars/tree-sitter-go.wasm +0 -0
- package/dist/vendor/grammars/tree-sitter-java.LICENSE +21 -0
- package/dist/vendor/grammars/tree-sitter-java.wasm +0 -0
- package/dist/vendor/grammars/tree-sitter-kotlin.LICENSE +9 -0
- package/dist/vendor/grammars/tree-sitter-kotlin.wasm +0 -0
- package/dist/vendor/grammars/tree-sitter-php.LICENSE +22 -0
- package/dist/vendor/grammars/tree-sitter-php.wasm +0 -0
- package/dist/vendor/grammars/tree-sitter-python.LICENSE +21 -0
- package/dist/vendor/grammars/tree-sitter-python.wasm +0 -0
- package/dist/vendor/grammars/tree-sitter-r.LICENSE +9 -0
- package/dist/vendor/grammars/tree-sitter-r.wasm +0 -0
- package/dist/vendor/grammars/tree-sitter-swift.LICENSE +21 -0
- package/dist/vendor/grammars/tree-sitter-swift.wasm +0 -0
- package/dist/vendor/grammars/tree-sitter-tsx.wasm +0 -0
- package/dist/vendor/grammars/tree-sitter-typescript.LICENSE +21 -0
- package/dist/vendor/grammars/tree-sitter-typescript.wasm +0 -0
- package/dist/viewer/app.js +2 -0
- package/dist/viewer/index.html +49 -0
- package/dist/viewer/style.css +154 -0
- package/dist/viz/assemble.d.ts +83 -0
- package/dist/viz/assemble.d.ts.map +1 -0
- package/dist/viz/assemble.js +101 -0
- package/dist/viz/assemble.js.map +1 -0
- package/dist/viz/export.d.ts +39 -0
- package/dist/viz/export.d.ts.map +1 -0
- package/dist/viz/export.js +98 -0
- package/dist/viz/export.js.map +1 -0
- package/dist/viz/serve.d.ts +13 -0
- package/dist/viz/serve.d.ts.map +1 -0
- package/dist/viz/serve.js +130 -0
- package/dist/viz/serve.js.map +1 -0
- package/package.json +115 -4
- package/scripts/build-grammar-wasm.mjs +112 -0
- package/scripts/build-viewer.mjs +44 -0
- package/scripts/graph-quality.mjs +117 -0
- package/scripts/pack-trail.mjs +53 -0
- package/scripts/postinstall.mjs +65 -0
- package/scripts/run-tests.mjs +72 -0
- package/scripts/stamp-telemetry-key.mjs +56 -0
- package/scripts/tally-audit.mjs +140 -0
- package/scripts/vendor-grammars.mjs +53 -0
|
@@ -0,0 +1,440 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The MCP tools, as pure functions over the existing engine.
|
|
3
|
+
* `callTool` never throws — hosts get soft errors as isError content.
|
|
4
|
+
*/
|
|
5
|
+
import { Graft } from '../engine.js';
|
|
6
|
+
import { formatAsk, formatAskWithSaved, skeleton, formatSkeleton } from '../ask/ask.js';
|
|
7
|
+
import { formatCheckReport } from '../context/check.js';
|
|
8
|
+
import { formatGraphCheckReport } from '../graph/check.js';
|
|
9
|
+
import { loadGraphCached } from '../graph/load.js';
|
|
10
|
+
import { ensureFreshChildren, ensureFreshGraph, refreshNote } from '../graph/refresh.js';
|
|
11
|
+
import { contextDirFor } from '../context/node-file.js';
|
|
12
|
+
import { resolveSymbol, edgeWalk } from '../graph/traverse.js';
|
|
13
|
+
import { callersSavings, headerOf, hitLine, looseNoteFor } from '../graph/traverse-cli.js';
|
|
14
|
+
import { withSavings, setInputRate } from '../context/savings.js';
|
|
15
|
+
import { sessionInputRate } from '../claude/session-metrics.js';
|
|
16
|
+
import { grepGraph } from '../search/grep.js';
|
|
17
|
+
import { formatGrepResult, zeroHitNote } from '../search/grep-cli.js';
|
|
18
|
+
import { ignoredCode } from '../search/ignored-code.js';
|
|
19
|
+
import { buildRepoMap, formatRepoMap } from '../graph/map.js';
|
|
20
|
+
import { federateAsk, federateCallers, federateCheck, federateGrep, federateMap, federateSemantic, readWorkspace, } from '../graph/workspace.js';
|
|
21
|
+
import { join } from 'node:path';
|
|
22
|
+
import { embedNodes, searchSemantic } from '../ask/semantic.js';
|
|
23
|
+
import { canonicalToolName } from './tool-names.js';
|
|
24
|
+
import { cmd } from '../brand.js';
|
|
25
|
+
const noGraph = () => `no graph found — run \`${cmd('graft build')}\` first`;
|
|
26
|
+
function unknownSymbolText(query) {
|
|
27
|
+
return `no symbol "${query}" in the graph — check spelling or run \`${cmd('graft build')}\``;
|
|
28
|
+
}
|
|
29
|
+
export const TOOLS = [
|
|
30
|
+
{
|
|
31
|
+
name: 'trail_set_scope',
|
|
32
|
+
description: 'Set the default scope for all subsequent trail queries in this session. Call once at session start with the current working directory. All trail_find_code, trail_search_semantic, trail_trace_calls and trail_find_all calls will automatically narrow to this path without needing an explicit `in` parameter.',
|
|
33
|
+
inputSchema: {
|
|
34
|
+
type: 'object',
|
|
35
|
+
properties: {
|
|
36
|
+
path: { type: 'string', description: 'Absolute path of the current project/workspace (e.g. C:/Users/user/Desarrollo/default-core/frontend). The server computes the relative scope automatically.' },
|
|
37
|
+
},
|
|
38
|
+
required: ['path'],
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: 'trail_find_code',
|
|
43
|
+
description: 'Query the repo context graph in plain words. Returns ranked nodes with exact file:line spans and the relevant source inlined — usually the full answer, no file reads needed.',
|
|
44
|
+
inputSchema: {
|
|
45
|
+
type: 'object',
|
|
46
|
+
properties: {
|
|
47
|
+
query: { type: 'string', description: 'what you want to understand, in plain words' },
|
|
48
|
+
limit: { type: 'number', description: 'max results (default 5)' },
|
|
49
|
+
full: {
|
|
50
|
+
type: 'boolean',
|
|
51
|
+
description: 'inline whole definition spans instead of the default ≤8-line crux excerpts',
|
|
52
|
+
},
|
|
53
|
+
in: {
|
|
54
|
+
type: 'string',
|
|
55
|
+
description: 'narrow to nodes under this path prefix, filtered before scoring (segment-aware, like scopeOf)',
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
required: ['query'],
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: 'trail_file_api',
|
|
63
|
+
description: "Signatures-only view of one file — every definition's signature + line span, ~10× cheaper than reading the file ($0, no LLM).",
|
|
64
|
+
inputSchema: {
|
|
65
|
+
type: 'object',
|
|
66
|
+
properties: {
|
|
67
|
+
file: { type: 'string', description: 'repo-relative path (or unique basename) of the file' },
|
|
68
|
+
},
|
|
69
|
+
required: ['file'],
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
name: 'trail_check_freshness',
|
|
74
|
+
description: 'Report whether the committed graph is in sync with the code (drift check).',
|
|
75
|
+
inputSchema: { type: 'object', properties: {} },
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
name: 'trail_build',
|
|
79
|
+
description: 'Rebuild the code graph and semantic index for this workspace. Use when trail_check_freshness reports the graph is stale, after adding new files, or when semantic search returns no results. Runs in the background — returns immediately; the index is ready within a few minutes.',
|
|
80
|
+
inputSchema: {
|
|
81
|
+
type: 'object',
|
|
82
|
+
properties: {
|
|
83
|
+
include_md: { type: 'boolean', description: 'Index .md files as nodes (headings → symbols). Persists for future builds.' },
|
|
84
|
+
semantic: { type: 'boolean', description: 'Rebuild the semantic (embedding) index. Default true.' },
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
name: 'trail_trace_calls',
|
|
90
|
+
description: 'Structural edges for a symbol, over call/reference/import/implements/extends ($0, no LLM). Defaults to direct callers (who depends on it). Set direction:"out" for callees (what it calls); set depth>1 (or depth:"all" for the full closure) to walk transitively for the full blast radius — every source that breaks if it changes. Run before a multi-file refactor to find ALL affected files.',
|
|
91
|
+
inputSchema: {
|
|
92
|
+
type: 'object',
|
|
93
|
+
properties: {
|
|
94
|
+
symbol: { type: 'string', description: 'bare name, qualified (Class.method), or package-qualified (pkg.Fn); a file path also works' },
|
|
95
|
+
direction: {
|
|
96
|
+
type: 'string',
|
|
97
|
+
enum: ['in', 'out'],
|
|
98
|
+
description: '"in" (default) = callers/dependents; "out" = callees/dependencies',
|
|
99
|
+
},
|
|
100
|
+
depth: { description: 'transitive walk depth for blast radius (default 1 = direct edges only); pass "all" for the full connected closure — every source that would be affected' },
|
|
101
|
+
in: { type: 'string', description: 'narrow matches to nodes at or under this repo-relative path prefix, e.g. server/src' },
|
|
102
|
+
},
|
|
103
|
+
required: ['symbol'],
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
name: 'trail_find_all',
|
|
108
|
+
description: 'Regex search over the graph\'s indexed files, hits grouped by innermost enclosing symbol and ranked by incoming-edge count (coupling) — which hit matters, not just where it is.',
|
|
109
|
+
inputSchema: {
|
|
110
|
+
type: 'object',
|
|
111
|
+
properties: {
|
|
112
|
+
pattern: { type: 'string', description: 'regex pattern (or literal string with fixed: true)' },
|
|
113
|
+
in: { type: 'string', description: 'narrow to files at or under this repo-relative path prefix, e.g. server/src' },
|
|
114
|
+
ignore_case: { type: 'boolean', description: 'case-insensitive match' },
|
|
115
|
+
fixed: { type: 'boolean', description: 'treat pattern as a literal string, not a regex' },
|
|
116
|
+
},
|
|
117
|
+
required: ['pattern'],
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
name: 'trail_repo_map',
|
|
122
|
+
description: 'Token-budgeted repo orientation — directory clusters, per-directory hubs, and global hotspots computed purely from the wiring graph ($0, no LLM). Use this to get oriented in an unfamiliar repo before diving into files.',
|
|
123
|
+
inputSchema: {
|
|
124
|
+
type: 'object',
|
|
125
|
+
properties: {
|
|
126
|
+
max_dirs: { type: 'number', description: 'max directory entries shown, rest counted into dropped (default 16)' },
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
name: 'trail_search_semantic',
|
|
132
|
+
description: 'Semantic (embedding-based) search over the code graph — finds nodes by meaning, not just keywords. Best for specs and docs (.md); for code symbols use trail_find_code instead.',
|
|
133
|
+
inputSchema: {
|
|
134
|
+
type: 'object',
|
|
135
|
+
properties: {
|
|
136
|
+
query: { type: 'string', description: 'plain-language description of what you are looking for' },
|
|
137
|
+
limit: { type: 'number', description: 'max results (default 5)' },
|
|
138
|
+
in: { type: 'string', description: 'narrow to a specific repo or path prefix, e.g. "default-core/frontend" or "default-core" — searches only children whose path starts with this prefix' },
|
|
139
|
+
},
|
|
140
|
+
required: ['query'],
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
];
|
|
144
|
+
/** Render every resolved match's header + edge report (or the loud zero-edge
|
|
145
|
+
* note), one block per match, joined with a blank line — the same grouping
|
|
146
|
+
* `graft callers` uses for multi-match symbols. `showDepth` tags each hit with
|
|
147
|
+
* its BFS depth (for transitive `depth>1` walks). */
|
|
148
|
+
function renderMatches(direction, showDepth, matches, hitsFor) {
|
|
149
|
+
return matches
|
|
150
|
+
.map((m) => {
|
|
151
|
+
const hits = hitsFor(m);
|
|
152
|
+
const lines = [headerOf(m)];
|
|
153
|
+
if (hits.length === 0)
|
|
154
|
+
lines.push(looseNoteFor(direction, m.name, matches.length));
|
|
155
|
+
else
|
|
156
|
+
for (const h of hits)
|
|
157
|
+
lines.push(hitLine(direction, h, showDepth));
|
|
158
|
+
return lines.join('\n');
|
|
159
|
+
})
|
|
160
|
+
.join('\n\n');
|
|
161
|
+
}
|
|
162
|
+
/** When the MCP server is rooted at a workspace parent, the ask/callers/grep/
|
|
163
|
+
* map/check tools federate across the children — identical to the CLI. Returns
|
|
164
|
+
* null for tools that don't federate (skeleton is per-file), so the caller
|
|
165
|
+
* falls through to the normal single-graph path. */
|
|
166
|
+
async function callWorkspaceTool(root, dirOverride, name, args) {
|
|
167
|
+
switch (name) {
|
|
168
|
+
case 'graft_find_code': {
|
|
169
|
+
const query = String(args.query ?? '');
|
|
170
|
+
if (!query)
|
|
171
|
+
return { text: 'graft_find_code requires a query', isError: true };
|
|
172
|
+
const limit = typeof args.limit === 'number' ? args.limit : 5;
|
|
173
|
+
const inArg = typeof args.in === 'string' && args.in ? args.in : undefined;
|
|
174
|
+
const r = federateAsk(root, dirOverride, query, { limit, source: true, full: args.full === true, in: inArg });
|
|
175
|
+
return { text: formatAsk(r), isError: false };
|
|
176
|
+
}
|
|
177
|
+
case 'graft_trace_calls': {
|
|
178
|
+
const symbol = String(args.symbol ?? args.file ?? '');
|
|
179
|
+
if (!symbol)
|
|
180
|
+
return { text: 'graft_trace_calls requires a symbol', isError: true };
|
|
181
|
+
const { text, found } = federateCallers(root, dirOverride, symbol, {
|
|
182
|
+
direction: args.direction === 'out' ? 'out' : 'in',
|
|
183
|
+
depth: typeof args.depth === 'number' && Number.isFinite(args.depth) ? args.depth : undefined,
|
|
184
|
+
in: typeof args.in === 'string' && args.in ? args.in : undefined,
|
|
185
|
+
});
|
|
186
|
+
return { text, isError: !found };
|
|
187
|
+
}
|
|
188
|
+
case 'graft_find_all': {
|
|
189
|
+
const pattern = String(args.pattern ?? '');
|
|
190
|
+
if (!pattern)
|
|
191
|
+
return { text: 'graft_find_all requires a pattern', isError: true };
|
|
192
|
+
const { result, coverage } = federateGrep(root, dirOverride, pattern, {
|
|
193
|
+
ignoreCase: typeof args.ignore_case === 'boolean' ? args.ignore_case : undefined,
|
|
194
|
+
fixed: typeof args.fixed === 'boolean' ? args.fixed : undefined,
|
|
195
|
+
});
|
|
196
|
+
const text = result.totalHits === 0 ? zeroHitNote(result) : formatGrepResult(result);
|
|
197
|
+
return { text: coverage ? `${text}\n${coverage}` : text, isError: false };
|
|
198
|
+
}
|
|
199
|
+
case 'graft_repo_map': {
|
|
200
|
+
const maxDirs = typeof args.max_dirs === 'number' && Number.isFinite(args.max_dirs) && args.max_dirs > 0 ? args.max_dirs : undefined;
|
|
201
|
+
return { text: federateMap(root, dirOverride, { maxDirs }), isError: false };
|
|
202
|
+
}
|
|
203
|
+
case 'graft_check_freshness': {
|
|
204
|
+
const { text } = await federateCheck(root, dirOverride);
|
|
205
|
+
return { text, isError: false };
|
|
206
|
+
}
|
|
207
|
+
case 'graft_search_semantic': {
|
|
208
|
+
const query = String(args.query ?? '');
|
|
209
|
+
if (!query)
|
|
210
|
+
return { text: 'graft_search_semantic requires a query', isError: true };
|
|
211
|
+
const limit = typeof args.limit === 'number' ? args.limit : 5;
|
|
212
|
+
const { text, isError } = await federateSemantic(root, dirOverride, query, limit);
|
|
213
|
+
return { text, isError };
|
|
214
|
+
}
|
|
215
|
+
default:
|
|
216
|
+
return null;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
/** Tools whose whole job is to REPORT drift. Rebuilding first would make
|
|
220
|
+
* `graft_check_freshness` answer about a graph it just fixed, i.e. always "OK". */
|
|
221
|
+
const NO_REFRESH_TOOLS = new Set(['graft_check_freshness']);
|
|
222
|
+
/**
|
|
223
|
+
* The pre-0.8.1 tool names, still accepted, live in the dependency-free
|
|
224
|
+
* `tool-names.ts` (shared with the engine-free session hooks). The names were the
|
|
225
|
+
* reason for renaming: when a host defers graft's schemas it shows the model the
|
|
226
|
+
* *names alone* — no descriptions — so `graft_ask` had to compete with `Grep` on
|
|
227
|
+
* 9 characters. The new names say what they do; the aliases keep old callers
|
|
228
|
+
* (skills, saved prompts, notes) from 404-ing. Re-exported here so existing
|
|
229
|
+
* importers of `canonicalToolName` from this module keep working.
|
|
230
|
+
*/
|
|
231
|
+
export { canonicalToolName };
|
|
232
|
+
export async function callTool(root, requestedName, args, dirOverride) {
|
|
233
|
+
try {
|
|
234
|
+
const name = canonicalToolName(requestedName);
|
|
235
|
+
const ws = readWorkspace(root, dirOverride);
|
|
236
|
+
// Freshness first: an answer that cites file:line has to be about the code as
|
|
237
|
+
// it is right now, including edits nobody has committed (or even saved through
|
|
238
|
+
// this agent). ~3ms when nothing moved; a structural, $0 rebuild when it did.
|
|
239
|
+
// Same reason as the CLI's `noteQuery`: price this session's tokens once,
|
|
240
|
+
// here, so the formatters downstream can put a dollar figure in the nudge.
|
|
241
|
+
setInputRate(sessionInputRate(root));
|
|
242
|
+
let note = null;
|
|
243
|
+
if (!NO_REFRESH_TOOLS.has(name)) {
|
|
244
|
+
const r = ws
|
|
245
|
+
? await ensureFreshChildren(root, ws.children, { contextDir: dirOverride })
|
|
246
|
+
: await ensureFreshGraph(root, { contextDir: dirOverride });
|
|
247
|
+
note = refreshNote(r);
|
|
248
|
+
}
|
|
249
|
+
const fed = ws ? await callWorkspaceTool(root, dirOverride, name, args) : null;
|
|
250
|
+
const res = fed ?? (await callSingleTool(root, name, args, dirOverride));
|
|
251
|
+
return note ? { ...res, text: `${note}\n${res.text}` } : res;
|
|
252
|
+
}
|
|
253
|
+
catch (err) {
|
|
254
|
+
return { text: err instanceof Error ? err.message : String(err), isError: true };
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
/** The single-graph path: every tool, answered from one repo's graph. */
|
|
258
|
+
async function callSingleTool(root, name, args, dirOverride) {
|
|
259
|
+
switch (name) {
|
|
260
|
+
case 'graft_find_code': {
|
|
261
|
+
const query = String(args.query ?? '');
|
|
262
|
+
if (!query)
|
|
263
|
+
return { text: 'graft_find_code requires a query', isError: true };
|
|
264
|
+
const limit = typeof args.limit === 'number' ? args.limit : 5;
|
|
265
|
+
const engine = new Graft({ contextDir: dirOverride });
|
|
266
|
+
const inArg = typeof args.in === 'string' && args.in ? args.in : undefined;
|
|
267
|
+
const r = engine.ask(root, query, { limit, source: true, full: args.full === true, in: inArg });
|
|
268
|
+
// Same event the CLI's `ask` reports: the tokens it saved.
|
|
269
|
+
// One render serves both the answer and the saving the event reports.
|
|
270
|
+
const { text, savedTokens } = formatAskWithSaved(r);
|
|
271
|
+
void savedTokens; // lookup recording removed (trail-solo-grafo)
|
|
272
|
+
return { text, isError: false };
|
|
273
|
+
}
|
|
274
|
+
case 'graft_file_api': {
|
|
275
|
+
const file = String(args.file ?? '');
|
|
276
|
+
if (!file)
|
|
277
|
+
return { text: 'graft_file_api requires a file', isError: true };
|
|
278
|
+
const r = skeleton(root, file, { contextDir: dirOverride });
|
|
279
|
+
return { text: formatSkeleton(r), isError: !r.entries.length && !!r.note };
|
|
280
|
+
}
|
|
281
|
+
case 'graft_check_freshness': {
|
|
282
|
+
const engine = new Graft({ contextDir: dirOverride });
|
|
283
|
+
const r = engine.check(root);
|
|
284
|
+
const g = await engine.checkGraph(root);
|
|
285
|
+
const parts = [formatCheckReport(r)];
|
|
286
|
+
if (!g.missing)
|
|
287
|
+
parts.push(formatGraphCheckReport(g));
|
|
288
|
+
return { text: parts.join('\n\n'), isError: false };
|
|
289
|
+
}
|
|
290
|
+
case 'trail_build': {
|
|
291
|
+
// Spawn trail build as a detached background process.
|
|
292
|
+
const { spawn: _spawn } = await import('node:child_process');
|
|
293
|
+
const { graftCliPath } = await import('../claude/paths.js');
|
|
294
|
+
const cliPath = graftCliPath();
|
|
295
|
+
if (!cliPath)
|
|
296
|
+
return { text: 'trail CLI not found — is trail-code installed?', isError: true };
|
|
297
|
+
const extraArgs = [];
|
|
298
|
+
if (args.include_md === true)
|
|
299
|
+
extraArgs.push('--include-md');
|
|
300
|
+
if (args.semantic === false)
|
|
301
|
+
extraArgs.push('--no-semantic');
|
|
302
|
+
const child = _spawn(process.execPath, [cliPath, 'build', root, ...extraArgs], {
|
|
303
|
+
detached: true,
|
|
304
|
+
stdio: 'ignore',
|
|
305
|
+
windowsHide: true,
|
|
306
|
+
});
|
|
307
|
+
child.unref();
|
|
308
|
+
return {
|
|
309
|
+
text: `trail build started in background for ${root}${extraArgs.length ? ` (${extraArgs.join(' ')})` : ''}.\nThe index will be ready in a few minutes. Use trail_check_freshness to verify when done.`,
|
|
310
|
+
isError: false,
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
case 'graft_trace_calls': {
|
|
314
|
+
// One tool covers callers (direction:in, the default), callees
|
|
315
|
+
// (direction:out), and blast radius (depth>1). edgeWalk handles the
|
|
316
|
+
// file-seed aggregation that the old graft_blast_radius did: for a
|
|
317
|
+
// file at depth>1 it walks the file node AND every symbol defined in
|
|
318
|
+
// it, so dependents that call into a symbol (targeting the SYMBOL id,
|
|
319
|
+
// never the FILE id) aren't silently dropped.
|
|
320
|
+
const symbol = String(args.symbol ?? args.file ?? '');
|
|
321
|
+
if (!symbol)
|
|
322
|
+
return { text: 'graft_trace_calls requires a symbol', isError: true };
|
|
323
|
+
const w = loadGraphCached(contextDirFor(root, dirOverride));
|
|
324
|
+
if (!w)
|
|
325
|
+
return { text: noGraph(), isError: true };
|
|
326
|
+
const inOpt = typeof args.in === 'string' && args.in ? { in: args.in } : {};
|
|
327
|
+
const matches = resolveSymbol(w, symbol, inOpt);
|
|
328
|
+
if (matches.length === 0)
|
|
329
|
+
return { text: unknownSymbolText(symbol), isError: true };
|
|
330
|
+
const direction = args.direction === 'out' ? 'out' : 'in';
|
|
331
|
+
// `depth: "all"` (or a huge number) walks the full transitive closure —
|
|
332
|
+
// every connected source — terminating when no new node is reached.
|
|
333
|
+
const depth = args.depth === 'all' || args.depth === 'full'
|
|
334
|
+
? Number.POSITIVE_INFINITY
|
|
335
|
+
: typeof args.depth === 'number' && Number.isFinite(args.depth) && args.depth >= 1
|
|
336
|
+
? Math.floor(args.depth)
|
|
337
|
+
: 1;
|
|
338
|
+
const results = matches.map((m) => ({ symbol: m, hits: edgeWalk(w, m, direction, depth) }));
|
|
339
|
+
const byId = new Map(results.map((r) => [r.symbol.id, r.hits]));
|
|
340
|
+
const body = renderMatches(direction, depth > 1, matches, (m) => byId.get(m.id) ?? []);
|
|
341
|
+
const text = withSavings(body, callersSavings(w, results));
|
|
342
|
+
return { text, isError: false };
|
|
343
|
+
}
|
|
344
|
+
case 'graft_find_all': {
|
|
345
|
+
const pattern = String(args.pattern ?? '');
|
|
346
|
+
if (!pattern)
|
|
347
|
+
return { text: 'graft_find_all requires a pattern', isError: true };
|
|
348
|
+
const w = loadGraphCached(contextDirFor(root, dirOverride));
|
|
349
|
+
if (!w)
|
|
350
|
+
return { text: noGraph(), isError: true };
|
|
351
|
+
const result = grepGraph(w, root, pattern, {
|
|
352
|
+
ignoreCase: typeof args.ignore_case === 'boolean' ? args.ignore_case : undefined,
|
|
353
|
+
fixed: typeof args.fixed === 'boolean' ? args.fixed : undefined,
|
|
354
|
+
in: typeof args.in === 'string' && args.in ? args.in : undefined,
|
|
355
|
+
});
|
|
356
|
+
if (result.totalHits === 0)
|
|
357
|
+
return { text: zeroHitNote(result, ignoredCode(root)), isError: false };
|
|
358
|
+
return { text: formatGrepResult(result), isError: false };
|
|
359
|
+
}
|
|
360
|
+
case 'graft_repo_map': {
|
|
361
|
+
const w = loadGraphCached(contextDirFor(root, dirOverride));
|
|
362
|
+
if (!w)
|
|
363
|
+
return { text: noGraph(), isError: true };
|
|
364
|
+
const maxDirs = typeof args.max_dirs === 'number' && Number.isFinite(args.max_dirs) && args.max_dirs > 0 ? args.max_dirs : undefined;
|
|
365
|
+
const map = buildRepoMap(w, { maxDirs });
|
|
366
|
+
return { text: formatRepoMap(map), isError: false };
|
|
367
|
+
}
|
|
368
|
+
case 'trail_search_semantic':
|
|
369
|
+
case 'graft_search_semantic': {
|
|
370
|
+
const query = String(args.query ?? '');
|
|
371
|
+
if (!query)
|
|
372
|
+
return { text: 'graft_search_semantic requires a query', isError: true };
|
|
373
|
+
const limit = typeof args.limit === 'number' ? args.limit : 5;
|
|
374
|
+
const inPrefix = typeof args.in === 'string' && args.in ? args.in.replace(/\/$/, '') : null;
|
|
375
|
+
const contextDir = contextDirFor(root, dirOverride);
|
|
376
|
+
// Workspace: federate semantic search across children's embedding DBs.
|
|
377
|
+
// When `in` is specified, only search children whose path starts with the prefix.
|
|
378
|
+
const ws = readWorkspace(root, dirOverride);
|
|
379
|
+
if (ws && ws.children.length > 0) {
|
|
380
|
+
const { join: pjoin } = await import('node:path');
|
|
381
|
+
const { existsSync: pExists } = await import('node:fs');
|
|
382
|
+
const allHits = [];
|
|
383
|
+
const children = inPrefix
|
|
384
|
+
? ws.children.filter(c => c === inPrefix || c.startsWith(inPrefix + '/'))
|
|
385
|
+
: ws.children;
|
|
386
|
+
if (inPrefix && children.length === 0) {
|
|
387
|
+
return { text: `no workspace repos match "in=${inPrefix}" — available: ${ws.children.slice(0, 5).join(', ')}`, isError: true };
|
|
388
|
+
}
|
|
389
|
+
for (const child of children) {
|
|
390
|
+
const childRoot = pjoin(root, child);
|
|
391
|
+
const childCtx = contextDirFor(childRoot);
|
|
392
|
+
const childDb = pjoin(childCtx, '.cache', 'embeddings.db');
|
|
393
|
+
if (!pExists(childDb))
|
|
394
|
+
continue;
|
|
395
|
+
try {
|
|
396
|
+
const childHits = await searchSemantic(query, childDb, limit);
|
|
397
|
+
for (const h of childHits) {
|
|
398
|
+
allHits.push({ ...h, file_path: h.file_path.startsWith(child) ? h.file_path : `${child}/${h.file_path}` });
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
catch { /* child DB not ready — skip */ }
|
|
402
|
+
}
|
|
403
|
+
if (allHits.length === 0)
|
|
404
|
+
return { text: 'no semantic matches found', isError: false };
|
|
405
|
+
const sorted = allHits.sort((a, b) => b.score - a.score).slice(0, limit);
|
|
406
|
+
const filtered = sorted.filter(h => h.score > 0.01);
|
|
407
|
+
if (filtered.length === 0)
|
|
408
|
+
return { text: 'no semantic matches found — try trail_find_code for lexical search', isError: false };
|
|
409
|
+
const lines = filtered.map((h, i) => `${i + 1}. ${h.file_path} · ${h.symbol} (score: ${h.score.toFixed(3)})\n ${h.snippet}`);
|
|
410
|
+
return { text: lines.join('\n\n'), isError: false };
|
|
411
|
+
}
|
|
412
|
+
// Single repo: search directly.
|
|
413
|
+
const w = loadGraphCached(contextDir);
|
|
414
|
+
if (!w)
|
|
415
|
+
return { text: noGraph(), isError: true };
|
|
416
|
+
const embeddableNodes = w.nodes.filter(n => n.kind !== 'file');
|
|
417
|
+
if (embeddableNodes.length === 0) {
|
|
418
|
+
return {
|
|
419
|
+
text: 'No indexable symbols found — ensure `trail build --semantic` parsed source files'
|
|
420
|
+
+ ' (verify .gitignore is not excluding your source directory)',
|
|
421
|
+
isError: true,
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
const dbPath = join(contextDir, '.cache', 'embeddings.db');
|
|
425
|
+
// Idempotent: skips re-embed if DB already populated.
|
|
426
|
+
await embedNodes(embeddableNodes, dbPath);
|
|
427
|
+
const hits = await searchSemantic(query, dbPath, limit);
|
|
428
|
+
if (hits.length === 0)
|
|
429
|
+
return { text: 'no semantic matches found', isError: false };
|
|
430
|
+
const filtered = hits.filter(h => h.score > 0.05);
|
|
431
|
+
if (filtered.length === 0)
|
|
432
|
+
return { text: 'no semantic matches found above threshold', isError: false };
|
|
433
|
+
const lines = filtered.map((h, i) => `${i + 1}. ${h.file_path} · ${h.symbol} (score: ${h.score})\n ${h.snippet}`);
|
|
434
|
+
return { text: lines.join('\n\n'), isError: false };
|
|
435
|
+
}
|
|
436
|
+
default:
|
|
437
|
+
return { text: `unknown tool: ${name}`, isError: true };
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAgC,MAAM,sBAAsB,CAAC;AAC7F,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EACL,WAAW,EACX,eAAe,EACf,aAAa,EACb,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,aAAa,GACd,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAQlC,MAAM,OAAO,GAAG,GAAW,EAAE,CAAC,0BAA0B,GAAG,CAAC,aAAa,CAAC,UAAU,CAAC;AAErF,SAAS,iBAAiB,CAAC,KAAa;IACtC,OAAO,cAAc,KAAK,4CAA4C,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC;AAC/F,CAAC;AAED,MAAM,CAAC,MAAM,KAAK,GAAc;IAC9B;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,kTAAkT;QAC/T,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6JAA6J,EAAE;aACrM;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB;KACF;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EACT,+KAA+K;QACjL,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6CAA6C,EAAE;gBACrF,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yBAAyB,EAAE;gBACjE,IAAI,EAAE;oBACJ,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,4EAA4E;iBAC1F;gBACD,EAAE,EAAE;oBACF,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,+FAA+F;iBAC7G;aACF;YACD,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB;KACF;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,+HAA+H;QACjI,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qDAAqD,EAAE;aAC7F;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB;KACF;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EAAE,4EAA4E;QACzF,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;KAChD;IACD;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,qRAAqR;QAClS,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,4EAA4E,EAAE;gBAC1H,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,uDAAuD,EAAE;aACpG;SACF;KACF;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EACT,qYAAqY;QACvY,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4FAA4F,EAAE;gBACrI,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC;oBACnB,WAAW,EAAE,mEAAmE;iBACjF;gBACD,KAAK,EAAE,EAAE,WAAW,EAAE,yJAAyJ,EAAE;gBACjL,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qFAAqF,EAAE;aAC3H;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB;KACF;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,kLAAkL;QACpL,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oDAAoD,EAAE;gBAC9F,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6EAA6E,EAAE;gBAClH,WAAW,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,wBAAwB,EAAE;gBACvE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,gDAAgD,EAAE;aAC1F;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;SACtB;KACF;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,4NAA4N;QAC9N,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qEAAqE,EAAE;aACjH;SACF;KACF;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EAAE,iLAAiL;QAC9L,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wDAAwD,EAAE;gBAChG,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yBAAyB,EAAE;gBACjE,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sJAAsJ,EAAE;aAC5L;YACD,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB;KACF;CACF,CAAC;AAEF;;;qDAGqD;AACrD,SAAS,aAAa,CACpB,SAAoB,EACpB,SAAkB,EAClB,OAAiB,EACjB,OAAiC;IAEjC,OAAO,OAAO;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,KAAK,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;;YAC9E,KAAK,MAAM,CAAC,IAAI,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;QACxE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC;SACD,IAAI,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC;AAED;;;oDAGoD;AACpD,KAAK,UAAU,iBAAiB,CAC9B,IAAY,EACZ,WAA+B,EAC/B,IAAY,EACZ,IAA6B;IAE7B,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK;gBAAE,OAAO,EAAE,IAAI,EAAE,kCAAkC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC/E,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9D,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAC3E,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC9G,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAChD,CAAC;QACD,KAAK,mBAAmB,CAAC,CAAC,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YACtD,IAAI,CAAC,MAAM;gBAAE,OAAO,EAAE,IAAI,EAAE,qCAAqC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACnF,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE;gBACjE,SAAS,EAAE,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;gBAClD,KAAK,EAAE,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;gBAC7F,EAAE,EAAE,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;aACjE,CAAC,CAAC;YACH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC;QACnC,CAAC;QACD,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YAC3C,IAAI,CAAC,OAAO;gBAAE,OAAO,EAAE,IAAI,EAAE,mCAAmC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAClF,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE;gBACpE,UAAU,EAAE,OAAO,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;gBAChF,KAAK,EAAE,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;aAChE,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACrF,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC5E,CAAC;QACD,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;YACrI,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC/E,CAAC;QACD,KAAK,uBAAuB,CAAC,CAAC,CAAC;YAC7B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YACxD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAClC,CAAC;QACD,KAAK,uBAAuB,CAAC,CAAC,CAAC;YAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK;gBAAE,OAAO,EAAE,IAAI,EAAE,wCAAwC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACrF,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9D,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAClF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC3B,CAAC;QACD;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED;mFACmF;AACnF,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC;AAE5D;;;;;;;;GAQG;AACH,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAE7B,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,IAAY,EACZ,aAAqB,EACrB,IAA6B,EAC7B,WAAoB;IAEpB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC;QAC9C,MAAM,EAAE,GAAG,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC5C,8EAA8E;QAC9E,+EAA+E;QAC/E,8EAA8E;QAC9E,0EAA0E;QAC1E,2EAA2E;QAC3E,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;QACrC,IAAI,IAAI,GAAkB,IAAI,CAAC;QAC/B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,EAAE;gBACV,CAAC,CAAC,MAAM,mBAAmB,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;gBAC3E,CAAC,CAAC,MAAM,gBAAgB,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;YAC9D,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;QACD,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/E,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;QACzE,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,KAAK,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IAC/D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,IAAI,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACnF,CAAC;AACH,CAAC;AAED,yEAAyE;AACzE,KAAK,UAAU,cAAc,CAC3B,IAAY,EACZ,IAAY,EACZ,IAA6B,EAC7B,WAAoB;IAEpB,QAAQ,IAAI,EAAE,CAAC;QACX,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK;gBAAE,OAAO,EAAE,IAAI,EAAE,kCAAkC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC/E,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9D,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;YACtD,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAC3E,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAChG,2DAA2D;YAC3D,sEAAsE;YACtE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;YACpD,KAAK,WAAW,CAAC,CAAC,8CAA8C;YAChE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAClC,CAAC;QACD,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YACrC,IAAI,CAAC,IAAI;gBAAE,OAAO,EAAE,IAAI,EAAE,gCAAgC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC5E,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;YAC5D,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7E,CAAC;QACD,KAAK,uBAAuB,CAAC,CAAC,CAAC;YAC7B,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;YACtD,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACxC,MAAM,KAAK,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,CAAC,CAAC,CAAC,OAAO;gBAAE,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC;YACtD,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACtD,CAAC;QACD,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,sDAAsD;YACtD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;YAC7D,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;YAC5D,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;YAC/B,IAAI,CAAC,OAAO;gBAAE,OAAO,EAAE,IAAI,EAAE,gDAAgD,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC/F,MAAM,SAAS,GAAa,EAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;gBAAE,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC7D,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK;gBAAE,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC,EAAE;gBAC7E,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,QAAQ;gBACf,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;YACH,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,OAAO;gBACL,IAAI,EAAE,yCAAyC,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,6FAA6F;gBACtM,OAAO,EAAE,KAAK;aACf,CAAC;QACJ,CAAC;QACD,KAAK,mBAAmB,CAAC,CAAC,CAAC;YACzB,+DAA+D;YAC/D,oEAAoE;YACpE,mEAAmE;YACnE,qEAAqE;YACrE,sEAAsE;YACtE,8CAA8C;YAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YACtD,IAAI,CAAC,MAAM;gBAAE,OAAO,EAAE,IAAI,EAAE,qCAAqC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACnF,MAAM,CAAC,GAAG,eAAe,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;YAC5D,IAAI,CAAC,CAAC;gBAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAClD,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5E,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;YAChD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACpF,MAAM,SAAS,GAAc,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;YACrE,wEAAwE;YACxE,oEAAoE;YACpE,MAAM,KAAK,GACT,IAAI,CAAC,KAAK,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;gBAC3C,CAAC,CAAC,MAAM,CAAC,iBAAiB;gBAC1B,CAAC,CAAC,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC;oBAChF,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;oBACxB,CAAC,CAAC,CAAC,CAAC;YACV,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5F,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChE,MAAM,IAAI,GAAG,aAAa,CAAC,SAAS,EAAE,KAAK,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;YACvF,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YAC3D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAClC,CAAC;QACD,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YAC3C,IAAI,CAAC,OAAO;gBAAE,OAAO,EAAE,IAAI,EAAE,mCAAmC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAClF,MAAM,CAAC,GAAG,eAAe,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;YAC5D,IAAI,CAAC,CAAC;gBAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAClD,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE;gBACzC,UAAU,EAAE,OAAO,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;gBAChF,KAAK,EAAE,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;gBAC/D,EAAE,EAAE,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;aACjE,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,SAAS,KAAK,CAAC;gBAAE,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YACpG,OAAO,EAAE,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC5D,CAAC;QACD,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,MAAM,CAAC,GAAG,eAAe,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;YAC5D,IAAI,CAAC,CAAC;gBAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAClD,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;YACrI,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YACzC,OAAO,EAAE,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACtD,CAAC;QACD,KAAK,uBAAuB,CAAC;QAC7B,KAAK,uBAAuB,CAAC,CAAC,CAAC;YAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK;gBAAE,OAAO,EAAE,IAAI,EAAE,wCAAwC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACrF,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9D,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5F,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAEpD,uEAAuE;YACvE,kFAAkF;YAClF,MAAM,EAAE,GAAG,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAC5C,IAAI,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;gBAClD,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;gBACxD,MAAM,OAAO,GAA+C,EAAE,CAAC;gBAC/D,MAAM,QAAQ,GAAG,QAAQ;oBACvB,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC;oBACzE,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC;gBAChB,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACtC,OAAO,EAAE,IAAI,EAAE,gCAAgC,QAAQ,kBAAkB,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gBACjI,CAAC;gBACD,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;oBAC7B,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;oBACrC,MAAM,QAAQ,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;oBAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;oBAC3D,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;wBAAE,SAAS;oBAChC,IAAI,CAAC;wBACH,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;wBAC9D,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;4BAC1B,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;wBAC7G,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC,CAAC,+BAA+B,CAAC,CAAC;gBAC7C,CAAC;gBACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,EAAE,IAAI,EAAE,2BAA2B,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;gBACvF,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBACzE,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;gBACpD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,EAAE,IAAI,EAAE,oEAAoE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;gBACjI,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAClC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,CAAC,MAAM,aAAa,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAC1F,CAAC;gBACF,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YACtD,CAAC;YAED,gCAAgC;YAChC,MAAM,CAAC,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;YACtC,IAAI,CAAC,CAAC;gBAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAClD,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;YAC/D,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjC,OAAO;oBACL,IAAI,EAAE,kFAAkF;0BACnF,6DAA6D;oBAClE,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;YAC3D,sDAAsD;YACtD,MAAM,UAAU,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;YAC1C,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;YACxD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,EAAE,IAAI,EAAE,2BAA2B,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YACpF,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;YAClD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,EAAE,IAAI,EAAE,2CAA2C,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YACxG,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAClC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,CAAC,MAAM,aAAa,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,OAAO,EAAE,CAC/E,CAAC;YACF,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACtD,CAAC;QACH;YACE,OAAO,EAAE,IAAI,EAAE,iBAAiB,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC5D,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The oldest Node trail runs on, checked by the bin before anything else loads.
|
|
3
|
+
*
|
|
4
|
+
* `process.getBuiltinModule`, which the hooks and the past-session look-back
|
|
5
|
+
* use, arrived in Node 22.3 and was backported to 20.16; 21 never got it. On an
|
|
6
|
+
* older Node most commands seem fine and `trail init` quietly reads no past
|
|
7
|
+
* sessions ("process.getBuiltinModule is not a function"), so the check is up
|
|
8
|
+
* front. npm only warns about `engines`, in a block most people scroll past.
|
|
9
|
+
*
|
|
10
|
+
* No imports, so an old Node gets this far whatever the rest of the code needs.
|
|
11
|
+
*/
|
|
12
|
+
export declare function nodeSupported(version?: string): boolean;
|
|
13
|
+
/** The plain message for an unsupported Node, or null when this one is fine. */
|
|
14
|
+
export declare function nodeTooOld(command: string, pkg: string, version?: string): string | null;
|
|
15
|
+
//# sourceMappingURL=node-version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-version.d.ts","sourceRoot":"","sources":["../src/node-version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE,MAA8B,GAAG,OAAO,CAG9E;AAED,gFAAgF;AAChF,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,MAA8B,GAAG,MAAM,GAAG,IAAI,CAM/G"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The oldest Node trail runs on, checked by the bin before anything else loads.
|
|
3
|
+
*
|
|
4
|
+
* `process.getBuiltinModule`, which the hooks and the past-session look-back
|
|
5
|
+
* use, arrived in Node 22.3 and was backported to 20.16; 21 never got it. On an
|
|
6
|
+
* older Node most commands seem fine and `trail init` quietly reads no past
|
|
7
|
+
* sessions ("process.getBuiltinModule is not a function"), so the check is up
|
|
8
|
+
* front. npm only warns about `engines`, in a block most people scroll past.
|
|
9
|
+
*
|
|
10
|
+
* No imports, so an old Node gets this far whatever the rest of the code needs.
|
|
11
|
+
*/
|
|
12
|
+
export function nodeSupported(version = process.versions.node) {
|
|
13
|
+
const [major, minor] = version.split(".").map(Number);
|
|
14
|
+
return major > 22 || (major === 22 && minor >= 3) || (major === 20 && minor >= 16);
|
|
15
|
+
}
|
|
16
|
+
/** The plain message for an unsupported Node, or null when this one is fine. */
|
|
17
|
+
export function nodeTooOld(command, pkg, version = process.versions.node) {
|
|
18
|
+
if (nodeSupported(version))
|
|
19
|
+
return null;
|
|
20
|
+
return (`✗ ${command} needs Node 22.3 or newer (20.16 works too); this is Node ${version}.\n` +
|
|
21
|
+
` Update Node (https://nodejs.org, or \`nvm install 22\` if you use nvm), then run \`npm i -g ${pkg}\` again.`);
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=node-version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-version.js","sourceRoot":"","sources":["../src/node-version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,UAAU,aAAa,CAAC,UAAkB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACnE,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtD,OAAO,KAAK,GAAG,EAAE,IAAI,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC;AACrF,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,GAAW,EAAE,UAAkB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAC9F,IAAI,aAAa,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,OAAO,CACL,KAAK,OAAO,6DAA6D,OAAO,KAAK;QACrF,iGAAiG,GAAG,WAAW,CAChH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type GrepResult } from "./grep.js";
|
|
2
|
+
export interface GrepCliOptions {
|
|
3
|
+
ignoreCase?: boolean;
|
|
4
|
+
fixed?: boolean;
|
|
5
|
+
in?: string;
|
|
6
|
+
json?: boolean;
|
|
7
|
+
/** the top-level `--dir` override, so this command respects it like every other. */
|
|
8
|
+
globalDir?: string;
|
|
9
|
+
}
|
|
10
|
+
/** `"<pattern>" — N hits in M symbols across K files (searched T indexed files)` */
|
|
11
|
+
export declare function formatGrepHeader(result: GrepResult): string;
|
|
12
|
+
/** Full human report: header, blank line, then one block per group (header +
|
|
13
|
+
* indented hit lines), each block separated by a blank line. */
|
|
14
|
+
export declare function formatGrepResult(result: GrepResult): string;
|
|
15
|
+
/** Loud, actionable zero-hit note (never a bare empty result) — printed to
|
|
16
|
+
* stderr; the caller still exits 0, since "no hits in the indexed graph" is
|
|
17
|
+
* not an error, just a reason to fall back to a real grep.
|
|
18
|
+
*
|
|
19
|
+
* Truncation is never silent, even on the zero-hit path: if some indexed
|
|
20
|
+
* files couldn't be read (`truncated.files > 0`), that's called out too —
|
|
21
|
+
* otherwise a zero-hit result on a stale graph or wrong root reads as "no
|
|
22
|
+
* matches" when really some files were never searched at all.
|
|
23
|
+
*
|
|
24
|
+
* `ignored`: git-ignored code under the root (see `ignoredCode`). When there
|
|
25
|
+
* is some, the note names it instead of saying all the code was searched. */
|
|
26
|
+
export declare function zeroHitNote(result: GrepResult, ignored?: string[]): string;
|
|
27
|
+
/**
|
|
28
|
+
* Resolve the graph at `dir` (respecting `--dir`), run `grepGraph`, and print
|
|
29
|
+
* either the human report or `--json`. Exits the process (code 1) when
|
|
30
|
+
* there's no graph at all or the pattern fails to compile as a regex — both
|
|
31
|
+
* are caller-facing mistakes, not recoverable states. Zero hits is NOT an
|
|
32
|
+
* error: it prints a loud note to stderr and exits 0.
|
|
33
|
+
*/
|
|
34
|
+
export declare function runGrepCommand(pattern: string, dir: string, opts: GrepCliOptions): void;
|
|
35
|
+
//# sourceMappingURL=grep-cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grep-cli.d.ts","sourceRoot":"","sources":["../../src/search/grep-cli.ts"],"names":[],"mappings":"AAaA,OAAO,EAA6B,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAIvE,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,oFAAoF;IACpF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAaD,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAG3D;AAYD;gEACgE;AAChE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAS3D;AAED;;;;;;;;;;6EAU6E;AAC7E,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,GAAE,MAAM,EAAO,GAAG,MAAM,CAQ9E;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CAgCvF"}
|