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,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `graft build`, run from `graft init` as one line that redraws in place.
|
|
3
|
+
*
|
|
4
|
+
* `buildGraphIfMissing` hands the child the terminal, which prints a `parsing
|
|
5
|
+
* N/M: path` line and four more after it. That is the right output for someone
|
|
6
|
+
* who ran `graft build`, and five lines of someone else's output in the middle
|
|
7
|
+
* of init. Here the child's output is read instead: its progress becomes the
|
|
8
|
+
* spinner's `1,204 of 1,942 files`, its totals become init's one summary line,
|
|
9
|
+
* and any warning or error it printed is passed on whole.
|
|
10
|
+
*/
|
|
11
|
+
import { spawn } from "node:child_process";
|
|
12
|
+
import { hasGraftIndex } from "../graph/root.js";
|
|
13
|
+
import { startSpinner } from "../util/spinner.js";
|
|
14
|
+
const n = (s) => Number((s ?? "0").replace(/,/g, "")) || 0;
|
|
15
|
+
/** The totals out of `graft build`'s stdout, or null when it printed none. */
|
|
16
|
+
export function parseBuildSummary(stdout) {
|
|
17
|
+
const wiring = /✓ wiring: ([\d,]+) nodes.*?, ([\d,]+) edges/.exec(stdout);
|
|
18
|
+
if (!wiring)
|
|
19
|
+
return null;
|
|
20
|
+
const parsed = /parsed: [\d,]+ of ([\d,]+) files/.exec(stdout);
|
|
21
|
+
return { nodes: n(wiring[1]), edges: n(wiring[2]), files: n(parsed?.[1]) };
|
|
22
|
+
}
|
|
23
|
+
/** The last `parsing N/M` in a chunk of the child's stderr. */
|
|
24
|
+
export function parseProgress(chunk) {
|
|
25
|
+
let last = null;
|
|
26
|
+
for (const m of chunk.matchAll(/(?:parsing|summarizing) (\d+)\/(\d+)/g))
|
|
27
|
+
last = { index: n(m[1]), total: n(m[2]) };
|
|
28
|
+
return last;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Build the graph for `dir` unless it has one, showing progress on a spinner.
|
|
32
|
+
*
|
|
33
|
+
* `built: false` with no `failed` means there was nothing to do (`--no-build`,
|
|
34
|
+
* or a graph already there). Warning and error lines the build printed come
|
|
35
|
+
* back in `messages`, for the caller to print in full.
|
|
36
|
+
*/
|
|
37
|
+
export async function buildGraphWithProgress(dir, opts) {
|
|
38
|
+
if (opts.build === false || !opts.cliPath || hasGraftIndex(dir))
|
|
39
|
+
return { built: false, messages: [] };
|
|
40
|
+
const spinner = startSpinner("building the graph");
|
|
41
|
+
let stdout = "";
|
|
42
|
+
let stderr = "";
|
|
43
|
+
const fmt = (x) => x.toLocaleString("en-US");
|
|
44
|
+
// Base: 10 min per repo for semantic embedding, minimum 10 min, maximum 120 min.
|
|
45
|
+
const perRepo = 10 * 60_000;
|
|
46
|
+
const repos = Math.max(1, opts.childCount ?? 1);
|
|
47
|
+
const timeoutMs = Math.min(Math.max(repos * perRepo, 10 * 60_000), 120 * 60_000);
|
|
48
|
+
const code = await new Promise((resolve) => {
|
|
49
|
+
const child = spawn(process.execPath, [...process.execArgv, opts.cliPath, "build", "."], {
|
|
50
|
+
cwd: dir,
|
|
51
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
52
|
+
windowsHide: true,
|
|
53
|
+
});
|
|
54
|
+
const timer = setTimeout(() => child.kill(), timeoutMs);
|
|
55
|
+
timer.unref?.();
|
|
56
|
+
child.stdout.setEncoding("utf8");
|
|
57
|
+
child.stderr.setEncoding("utf8");
|
|
58
|
+
child.stdout.on("data", (d) => (stdout += d));
|
|
59
|
+
child.stderr.on("data", (d) => {
|
|
60
|
+
stderr += d;
|
|
61
|
+
const p = parseProgress(d);
|
|
62
|
+
if (p)
|
|
63
|
+
spinner.update(`building the graph · ${fmt(p.index)} of ${fmt(p.total)} files`);
|
|
64
|
+
});
|
|
65
|
+
child.on("error", () => resolve(null));
|
|
66
|
+
child.on("close", (c) => {
|
|
67
|
+
clearTimeout(timer);
|
|
68
|
+
resolve(c);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
spinner.stop();
|
|
72
|
+
const messages = `${stdout}\n${stderr.replace(/\r[^\n]*/g, "\n")}`
|
|
73
|
+
.split("\n")
|
|
74
|
+
.map((l) => l.trimEnd())
|
|
75
|
+
.filter((l) => /^\s*[⚠✗]/.test(l));
|
|
76
|
+
const graph = parseBuildSummary(stdout) ?? undefined;
|
|
77
|
+
if (code !== 0)
|
|
78
|
+
return { built: false, failed: true, messages };
|
|
79
|
+
return { built: true, graph, messages };
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=build-progress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-progress.js","sourceRoot":"","sources":["../../src/claude/build-progress.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hermes-specific trail skill template.
|
|
3
|
+
*
|
|
4
|
+
* Hermes (Nous Research) reads skills from its own profile directory
|
|
5
|
+
* (~/.hermes/skills/ or %LOCALAPPDATA%/hermes/skills/) and requires YAML
|
|
6
|
+
* frontmatter with name/description/category/triggers.
|
|
7
|
+
*
|
|
8
|
+
* This is separate from the Claude Code skill (skill-template.ts) because
|
|
9
|
+
* the formats differ. Both describe the same reduced surface: the code map and
|
|
10
|
+
* its nine MCP tools. There is no learnings/knowledge layer any more, so nothing
|
|
11
|
+
* here may name a command or tool the binary does not expose — an agent that
|
|
12
|
+
* reads a skill telling it to run a removed command fails with total confidence.
|
|
13
|
+
*/
|
|
14
|
+
import { type Brand } from "../brand.js";
|
|
15
|
+
export declare function hermesSkillTemplate(brand?: Brand): string;
|
|
16
|
+
//# sourceMappingURL=hermes-skill-template.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hermes-skill-template.d.ts","sourceRoot":"","sources":["../../src/claude/hermes-skill-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAW,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAElD,wBAAgB,mBAAmB,CAAC,KAAK,GAAE,KAAe,GAAG,MAAM,CA0IlE"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hermes-specific trail skill template.
|
|
3
|
+
*
|
|
4
|
+
* Hermes (Nous Research) reads skills from its own profile directory
|
|
5
|
+
* (~/.hermes/skills/ or %LOCALAPPDATA%/hermes/skills/) and requires YAML
|
|
6
|
+
* frontmatter with name/description/category/triggers.
|
|
7
|
+
*
|
|
8
|
+
* This is separate from the Claude Code skill (skill-template.ts) because
|
|
9
|
+
* the formats differ. Both describe the same reduced surface: the code map and
|
|
10
|
+
* its nine MCP tools. There is no learnings/knowledge layer any more, so nothing
|
|
11
|
+
* here may name a command or tool the binary does not expose — an agent that
|
|
12
|
+
* reads a skill telling it to run a removed command fails with total confidence.
|
|
13
|
+
*/
|
|
14
|
+
import { inBrand } from "../brand.js";
|
|
15
|
+
export function hermesSkillTemplate(brand = "graft") {
|
|
16
|
+
return inBrand(`---
|
|
17
|
+
name: trail
|
|
18
|
+
description: >
|
|
19
|
+
Use for ANY task in a trail-indexed repo. Runs trail ask before exploring and
|
|
20
|
+
trail callers before changing a symbol. The index refreshes itself on every
|
|
21
|
+
query and works in git worktrees with no setup.
|
|
22
|
+
category: devops
|
|
23
|
+
triggers:
|
|
24
|
+
- trail ask / trail grep / trail callers / trail map / trail skeleton
|
|
25
|
+
- code search in trail- or graft-indexed repos
|
|
26
|
+
- blast radius before changing a symbol
|
|
27
|
+
- querying the map from a git worktree
|
|
28
|
+
- semantic search over specs and .md docs
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
# trail — el código en un grafo, no en la cabeza del agente
|
|
32
|
+
|
|
33
|
+
Un grafo de llamadas construido con tree-sitter (sin LLM, sin API key, $0), expuesto
|
|
34
|
+
como CLI y como 9 tools MCP. No genera documentación que alguien tenga que mantener:
|
|
35
|
+
responde consultas sobre el código tal como está en el working tree.
|
|
36
|
+
|
|
37
|
+
## Cuándo usarlo
|
|
38
|
+
|
|
39
|
+
- **Antes de explorar código**, correr \`trail ask "<tarea>" --source\` — incluso para
|
|
40
|
+
"¿dónde está X?" o "¿cómo funciona Y?", antes de grep o de abrir archivos.
|
|
41
|
+
- **Antes de cambiar un símbolo**, correr \`trail callers <sym>\` para ver el blast radius.
|
|
42
|
+
- **Para orientarse** en un repo desconocido, \`trail map\` primero.
|
|
43
|
+
- **Para specs y docs** (.md), \`trail_search_semantic\`.
|
|
44
|
+
|
|
45
|
+
## Herramientas MCP — cuál usar
|
|
46
|
+
|
|
47
|
+
Las 9 tools: \`trail_set_scope\`, \`trail_find_code\`, \`trail_file_api\`,
|
|
48
|
+
\`trail_check_freshness\`, \`trail_build\`, \`trail_trace_calls\`, \`trail_find_all\`,
|
|
49
|
+
\`trail_repo_map\`, \`trail_search_semantic\`.
|
|
50
|
+
|
|
51
|
+
| Tool | Para qué | Cuándo |
|
|
52
|
+
|---|---|---|
|
|
53
|
+
| \`trail_find_code\` | Búsqueda léxica | **Código**: funciones, símbolos, variables, clases |
|
|
54
|
+
| \`trail_find_all\` | Grep exhaustivo | Todas las ocurrencias de un literal, agrupadas por símbolo |
|
|
55
|
+
| \`trail_trace_calls\` | Grafo de llamadas | Blast radius antes de cambiar algo (\`direction\`, \`depth\`) |
|
|
56
|
+
| \`trail_file_api\` | Firmas del archivo | Ver la API sin leer el archivo completo |
|
|
57
|
+
| \`trail_repo_map\` | Mapa del repo | Orientarse en un repo o workspace desconocido |
|
|
58
|
+
| \`trail_search_semantic\` | Búsqueda conceptual | **Solo specs/docs** en lenguaje natural (.md) |
|
|
59
|
+
| \`trail_check_freshness\` | Estado del índice | ¿El mapa coincide con el working tree? |
|
|
60
|
+
| \`trail_build\` | Rebuild en background | Reconstruir grafo + índice semántico |
|
|
61
|
+
| \`trail_set_scope\` | Fijar scope de sesión | Acotar todas las consultas a un subtree del workspace |
|
|
62
|
+
|
|
63
|
+
> **Regla del semántico**: \`trail_search_semantic\` embebe lenguaje natural, así que
|
|
64
|
+
> rinde en \`.md\` (specs, docs, cartas de sistema) y aporta poco en código.
|
|
65
|
+
> Para un nombre de símbolo usar siempre \`trail_find_code\`.
|
|
66
|
+
>
|
|
67
|
+
> ✅ \`trail_search_semantic("cómo funciona la cuota mínima")\` → encuentra specs
|
|
68
|
+
> ❌ \`trail_search_semantic("retomarCopiaEnProceso")\` → no matchea código
|
|
69
|
+
> ✅ \`trail_find_code("retomarCopiaEnProceso")\` → encuentra el símbolo exacto
|
|
70
|
+
|
|
71
|
+
## CLI equivalente (cuando el servidor MCP no está activo)
|
|
72
|
+
|
|
73
|
+
\`\`\`
|
|
74
|
+
trail ask "<pregunta>" --source # localizar + entender
|
|
75
|
+
trail grep "<literal>" # exhaustivo — todas las ocurrencias
|
|
76
|
+
trail callers <sym> --depth 2 # blast radius antes de cambiar
|
|
77
|
+
trail skeleton <archivo> # API del archivo en ~200 tokens
|
|
78
|
+
trail map # orientación del repo o workspace
|
|
79
|
+
trail build # reconstruir el mapa (incluye cards e INDEX.md)
|
|
80
|
+
trail status # estado del mapa, frescura y tokens ahorrados
|
|
81
|
+
trail blast --base origin/main # blast radius de un diff (para CI)
|
|
82
|
+
trail viz # grafo interactivo en el browser
|
|
83
|
+
\`\`\`
|
|
84
|
+
|
|
85
|
+
\`trail build --deep\` usa un LLM para resumir símbolos: es opt-in y necesita API key.
|
|
86
|
+
|
|
87
|
+
## Worktrees
|
|
88
|
+
|
|
89
|
+
Un git worktree enlazado (\`.git\` es un archivo, no un directorio) no tiene índice
|
|
90
|
+
propio, porque el mapa vive en el cache git-ignored. **No hay nada que ejecutar
|
|
91
|
+
antes**: la primera consulta copia el grafo del checkout principal y lo parchea con
|
|
92
|
+
el diff entre las dos ramas, así que la respuesta es sobre el código de *ese*
|
|
93
|
+
worktree, no sobre la rama del principal. El índice semántico viaja igual.
|
|
94
|
+
|
|
95
|
+
## Refresco por drift
|
|
96
|
+
|
|
97
|
+
Toda consulta compara el fingerprint del índice contra el working tree:
|
|
98
|
+
|
|
99
|
+
- **Hasta 50 archivos cambiados**: se re-extraen antes de responder. Una edición
|
|
100
|
+
recién hecha ya está en el grafo y la respuesta no lleva advertencia.
|
|
101
|
+
- **Más de 50** (un cambio de rama, el merge de trabajo ajeno): se dispara un
|
|
102
|
+
rebuild en background y la respuesta empieza con
|
|
103
|
+
\`[stale: N files changed, rebuilding in background]\`. Significa "esta respuesta
|
|
104
|
+
puede ser anterior al cambio": volver a preguntar en un momento, sin reformular.
|
|
105
|
+
- El índice semántico se refresca siempre en background: cargar el modelo local
|
|
106
|
+
cuesta segundos y no debe bloquear una consulta léxica.
|
|
107
|
+
|
|
108
|
+
Por eso no hace falta \`trail build\` después de un merge. El checkout principal
|
|
109
|
+
tampoco necesita quedarse en una rama concreta: cada path consultado responde sobre
|
|
110
|
+
su propio working tree.
|
|
111
|
+
|
|
112
|
+
## Scope en workspace grande
|
|
113
|
+
|
|
114
|
+
**Siempre acotar al repo correcto** con \`--in\` (CLI) o \`in=\` (MCP). Sin eso, las
|
|
115
|
+
búsquedas federan sobre todos los repos del workspace y traen hits de otros clientes.
|
|
116
|
+
|
|
117
|
+
\`\`\`
|
|
118
|
+
# MCP
|
|
119
|
+
trail_find_code(query="EvaluacionDetalle", in="default-core/frontend")
|
|
120
|
+
trail_search_semantic(query="cuota minima", in="default-core")
|
|
121
|
+
|
|
122
|
+
# CLI
|
|
123
|
+
trail ask "EvaluacionDetalle" --in default-core/frontend/
|
|
124
|
+
\`\`\`
|
|
125
|
+
|
|
126
|
+
En workspaces con repos compound (ej. \`default-core/frontend\`), usar el path
|
|
127
|
+
completo: \`in="default-core"\` no es un scope válido.
|
|
128
|
+
|
|
129
|
+
## Cómo leer el resultado
|
|
130
|
+
|
|
131
|
+
- Los hits traen \`covers:\` con el \`file:line\` exacto: citar desde ahí, no re-abrir
|
|
132
|
+
el archivo para "verificar".
|
|
133
|
+
- Si un span viene truncado ("+N more lines"), abrir el archivo en ese rango exacto.
|
|
134
|
+
- \`trail ask\` devuelve top-N; para "todas las ocurrencias" usar \`trail grep\`.
|
|
135
|
+
- No pasar la salida por \`head\`/\`tail\`: ya viene acotada y reporta lo que omitió.
|
|
136
|
+
|
|
137
|
+
## Configuración del servidor MCP (Hermes)
|
|
138
|
+
|
|
139
|
+
\`\`\`yaml
|
|
140
|
+
mcp_servers:
|
|
141
|
+
trail:
|
|
142
|
+
command: C:/Users/<user>/AppData/Roaming/npm/trail.cmd # o "trail" en Linux/macOS
|
|
143
|
+
args:
|
|
144
|
+
- mcp
|
|
145
|
+
- C:/ruta/al/workspace
|
|
146
|
+
env:
|
|
147
|
+
PYTHONUTF8: "1"
|
|
148
|
+
\`\`\`
|
|
149
|
+
|
|
150
|
+
Si \`trail\` no está instalado: \`npm install -g trail-code --ignore-scripts\`
|
|
151
|
+
y después \`trail init\` en el repo.
|
|
152
|
+
`, brand);
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=hermes-skill-template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hermes-skill-template.js","sourceRoot":"","sources":["../../src/claude/hermes-skill-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,OAAO,EAAc,MAAM,aAAa,CAAC;AAElD,MAAM,UAAU,mBAAmB,CAAC,QAAe,OAAO;IACxD,OAAO,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwIhB,EAAE,KAAK,CAAC,CAAC;AACV,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { type GlobalWrite } from '../hosts/claude-global.js';
|
|
2
|
+
import { type McpWrite } from '../hosts/mcp-config.js';
|
|
3
|
+
import type { PlannedWrite } from '../hosts/plan.js';
|
|
4
|
+
import { type Brand } from '../brand.js';
|
|
5
|
+
/** trail's committed hook path (kept for retract/upkeep references). */
|
|
6
|
+
export declare const TRAIL_HOOK: string;
|
|
7
|
+
/** The status line's shim path (kept for retract/upkeep references). */
|
|
8
|
+
export declare const TRAIL_STATUSLINE: string;
|
|
9
|
+
/** Where trail's skill goes: the user's own `~/.claude`, never the repo. */
|
|
10
|
+
export declare function trailSkillPath(home?: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* Where trail's Hermes skill goes: the user's Hermes profile skills directory.
|
|
13
|
+
* On Windows: %LOCALAPPDATA%/hermes/skills/trail/SKILL.md
|
|
14
|
+
* On Linux/macOS: ~/.hermes/skills/trail/SKILL.md
|
|
15
|
+
*/
|
|
16
|
+
export declare function hermesSkillPath(home?: string): string;
|
|
17
|
+
/** Whether the Hermes skills directory exists on this machine. */
|
|
18
|
+
export declare function hermesInstalled(home?: string): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* The files `runInit` writes — pure, no writes, so `--dry-run` and the picker
|
|
21
|
+
* can report them up front.
|
|
22
|
+
*/
|
|
23
|
+
export declare function claudeTargets(dir: string, initBrand?: Brand, home?: string): PlannedWrite[];
|
|
24
|
+
/**
|
|
25
|
+
* The name the Claude Code wiring goes by in `dir`.
|
|
26
|
+
*/
|
|
27
|
+
export declare function wiringName(dir: string, initBrand?: Brand): Brand;
|
|
28
|
+
/**
|
|
29
|
+
* `claudeTargets` under one name.
|
|
30
|
+
* trail-solo-grafo: hook.cjs and settings.json writing removed; kept for retract/plan compatibility.
|
|
31
|
+
*/
|
|
32
|
+
export declare function claudeTargetsFor(dir: string, name: Brand, home?: string): PlannedWrite[];
|
|
33
|
+
/**
|
|
34
|
+
* The layout every graft repo has: shims in `.claude/helpers/`, the skill in `.claude/skills/`.
|
|
35
|
+
*/
|
|
36
|
+
export declare function legacyClaudeTargets(dir: string, name: Brand): PlannedWrite[];
|
|
37
|
+
/**
|
|
38
|
+
* Build the graph if it isn't there yet.
|
|
39
|
+
*/
|
|
40
|
+
export declare function buildGraphIfMissing(dir: string, opts: {
|
|
41
|
+
build?: boolean;
|
|
42
|
+
cliPath?: string;
|
|
43
|
+
}): boolean;
|
|
44
|
+
export interface InitResult {
|
|
45
|
+
settingsPath: string;
|
|
46
|
+
shims: string[];
|
|
47
|
+
skill: string;
|
|
48
|
+
mcp: McpWrite | null;
|
|
49
|
+
global: GlobalWrite[];
|
|
50
|
+
warnings: string[];
|
|
51
|
+
built: boolean;
|
|
52
|
+
}
|
|
53
|
+
export declare function runInit(dir: string, opts?: {
|
|
54
|
+
build?: boolean;
|
|
55
|
+
cliPath?: string;
|
|
56
|
+
statusline?: boolean;
|
|
57
|
+
global?: boolean;
|
|
58
|
+
home?: string;
|
|
59
|
+
brand?: Brand;
|
|
60
|
+
}): InitResult;
|
|
61
|
+
/**
|
|
62
|
+
* Keep a personal file out of git without touching the repo's `.gitignore`.
|
|
63
|
+
*/
|
|
64
|
+
export declare function keepOutOfGit(dir: string, rel: string): void;
|
|
65
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/claude/init.ts"],"names":[],"mappings":"AAIA,OAAO,EAA6C,KAAK,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAIxG,OAAO,EAA6B,KAAK,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGlF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAqB,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAE5D,wEAAwE;AACxE,eAAO,MAAM,UAAU,QAA6B,CAAC;AACrD,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,QAAmC,CAAC;AACjE,4EAA4E;AAC5E,wBAAgB,cAAc,CAAC,IAAI,GAAE,MAAkB,GAAG,MAAM,CAE/D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,GAAE,MAAkB,GAAG,MAAM,CAMhE;AAED,kEAAkE;AAClE,wBAAgB,eAAe,CAAC,IAAI,GAAE,MAAkB,GAAG,OAAO,CAKjE;AAcD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE,CAE3F;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,KAAK,GAAG,KAAK,CAEhE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAE,MAAkB,GAAG,YAAY,EAAE,CAUnG;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,YAAY,EAAE,CAU5E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAQrG;AAeD,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,OAAO,CACrB,GAAG,EAAE,MAAM,EACX,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAO,GACrH,UAAU,CAsBZ;AAyFD;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAgB3D"}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import { mkdirSync, writeFileSync, readFileSync, rmSync, rmdirSync, existsSync, appendFileSync } from 'node:fs';
|
|
2
|
+
import { join, dirname, resolve, isAbsolute } from 'node:path';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
import { execFileSync } from 'node:child_process';
|
|
5
|
+
import { disableGraftServerIn, installClaudeGlobal } from '../hosts/claude-global.js';
|
|
6
|
+
import { mergeGraftSettings } from './settings-merge.js';
|
|
7
|
+
import { skillTemplate } from './skill-template.js';
|
|
8
|
+
import { hermesSkillTemplate } from './hermes-skill-template.js';
|
|
9
|
+
import { mergeJsonKey, serverEntry } from '../hosts/mcp-config.js';
|
|
10
|
+
import { readJsonObject } from '../hosts/config-write.js';
|
|
11
|
+
import { hasGraftIndex } from '../graph/root.js';
|
|
12
|
+
import { repoWiredForTrail } from '../brand.js';
|
|
13
|
+
/** trail's committed hook path (kept for retract/upkeep references). */
|
|
14
|
+
export const TRAIL_HOOK = join('.trail', 'hook.cjs');
|
|
15
|
+
/** The status line's shim path (kept for retract/upkeep references). */
|
|
16
|
+
export const TRAIL_STATUSLINE = join('.trail', 'statusline.cjs');
|
|
17
|
+
/** Where trail's skill goes: the user's own `~/.claude`, never the repo. */
|
|
18
|
+
export function trailSkillPath(home = homedir()) {
|
|
19
|
+
return join(home, '.claude', 'skills', 'trail', 'SKILL.md');
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Where trail's Hermes skill goes: the user's Hermes profile skills directory.
|
|
23
|
+
* On Windows: %LOCALAPPDATA%/hermes/skills/trail/SKILL.md
|
|
24
|
+
* On Linux/macOS: ~/.hermes/skills/trail/SKILL.md
|
|
25
|
+
*/
|
|
26
|
+
export function hermesSkillPath(home = homedir()) {
|
|
27
|
+
if (process.platform === 'win32') {
|
|
28
|
+
const local = process.env.LOCALAPPDATA ?? join(home, 'AppData', 'Local');
|
|
29
|
+
return join(local, 'hermes', 'skills', 'trail', 'SKILL.md');
|
|
30
|
+
}
|
|
31
|
+
return join(home, '.hermes', 'skills', 'trail', 'SKILL.md');
|
|
32
|
+
}
|
|
33
|
+
/** Whether the Hermes skills directory exists on this machine. */
|
|
34
|
+
export function hermesInstalled(home = homedir()) {
|
|
35
|
+
const dir = process.platform === 'win32'
|
|
36
|
+
? join(process.env.LOCALAPPDATA ?? join(home, 'AppData', 'Local'), 'hermes', 'skills')
|
|
37
|
+
: join(home, '.hermes', 'skills');
|
|
38
|
+
return existsSync(dir);
|
|
39
|
+
}
|
|
40
|
+
/** Write `entry` into `.trail/.gitignore` to keep the cache out of git. */
|
|
41
|
+
function ignoreInTrailDir(root, entry) {
|
|
42
|
+
const trailDir = join(root, '.trail');
|
|
43
|
+
mkdirSync(trailDir, { recursive: true });
|
|
44
|
+
const giPath = join(trailDir, '.gitignore');
|
|
45
|
+
let current = '';
|
|
46
|
+
try {
|
|
47
|
+
current = readFileSync(giPath, 'utf8');
|
|
48
|
+
}
|
|
49
|
+
catch { /* new file */ }
|
|
50
|
+
if (!current.split('\n').some(l => l.trim() === entry.trim())) {
|
|
51
|
+
writeFileSync(giPath, current ? `${current.trimEnd()}\n${entry}\n` : `${entry}\n`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* The files `runInit` writes — pure, no writes, so `--dry-run` and the picker
|
|
56
|
+
* can report them up front.
|
|
57
|
+
*/
|
|
58
|
+
export function claudeTargets(dir, initBrand, home) {
|
|
59
|
+
return claudeTargetsFor(dir, wiringName(dir, initBrand), home);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* The name the Claude Code wiring goes by in `dir`.
|
|
63
|
+
*/
|
|
64
|
+
export function wiringName(dir, initBrand) {
|
|
65
|
+
return initBrand === 'trail' || repoWiredForTrail(dir) ? 'trail' : 'graft';
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* `claudeTargets` under one name.
|
|
69
|
+
* trail-solo-grafo: hook.cjs and settings.json writing removed; kept for retract/plan compatibility.
|
|
70
|
+
*/
|
|
71
|
+
export function claudeTargetsFor(dir, name, home = homedir()) {
|
|
72
|
+
if (name !== 'trail')
|
|
73
|
+
return legacyClaudeTargets(dir, name);
|
|
74
|
+
const t = (path, what) => ({ hostId: 'claude', id: 'claude', path, scope: 'repo', kind: 'claude', what });
|
|
75
|
+
return [
|
|
76
|
+
t(join(dir, '.claude', 'settings.json'), 'trail SessionStart hook, shared'),
|
|
77
|
+
t(join(dir, TRAIL_HOOK), 'hooks shim, shared'),
|
|
78
|
+
t(join(dir, '.claude', 'settings.local.json'), 'trail statusline + allowlist, yours'),
|
|
79
|
+
t(join(dir, TRAIL_STATUSLINE), 'statusline shim, git-ignored'),
|
|
80
|
+
{ hostId: 'claude', id: 'claude', path: trailSkillPath(home), scope: 'global', kind: 'claude', what: 'trail skill' },
|
|
81
|
+
];
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* The layout every graft repo has: shims in `.claude/helpers/`, the skill in `.claude/skills/`.
|
|
85
|
+
*/
|
|
86
|
+
export function legacyClaudeTargets(dir, name) {
|
|
87
|
+
const t = (path, what, kind = 'claude') => ({ hostId: 'claude', id: 'claude', path, scope: 'repo', kind, what });
|
|
88
|
+
return [
|
|
89
|
+
t(join(dir, '.claude', 'settings.json'), `${name} statusline + hook blocks`),
|
|
90
|
+
t(join(dir, '.claude', 'helpers', `${name}-statusline.cjs`), 'statusline shim'),
|
|
91
|
+
t(join(dir, '.claude', 'helpers', `${name}-hooks.cjs`), 'hooks shim'),
|
|
92
|
+
t(join(dir, '.claude', 'skills', name, 'SKILL.md'), `${name} skill`),
|
|
93
|
+
t(join(dir, '.mcp.json'), `mcpServers.${name}`, 'mcp'),
|
|
94
|
+
];
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Build the graph if it isn't there yet.
|
|
98
|
+
*/
|
|
99
|
+
export function buildGraphIfMissing(dir, opts) {
|
|
100
|
+
if (opts.build === false || !opts.cliPath || hasGraftIndex(dir))
|
|
101
|
+
return false;
|
|
102
|
+
try {
|
|
103
|
+
execFileSync(process.execPath, [...process.execArgv, opts.cliPath, 'build', '.'], { cwd: dir, stdio: 'inherit', timeout: 300000, windowsHide: true });
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/** The repo's settings as an object to merge into. */
|
|
111
|
+
function readSettings(path) {
|
|
112
|
+
let text;
|
|
113
|
+
try {
|
|
114
|
+
text = readFileSync(path, 'utf8');
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
return {};
|
|
118
|
+
}
|
|
119
|
+
if (!text.trim())
|
|
120
|
+
return {};
|
|
121
|
+
try {
|
|
122
|
+
const parsed = JSON.parse(text);
|
|
123
|
+
return parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? parsed : null;
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
export function runInit(dir, opts = {}) {
|
|
130
|
+
if (wiringName(dir, opts.brand) === 'trail')
|
|
131
|
+
return runTrailInit(dir, opts);
|
|
132
|
+
// graft brand: write settings (no hooks), skill, MCP. Shims removed (trail-solo-grafo).
|
|
133
|
+
const [settings, _statusline, _hooks, skill, mcpTarget] = legacyClaudeTargets(dir, 'graft').map((t) => t.path);
|
|
134
|
+
mkdirSync(dirname(skill), { recursive: true });
|
|
135
|
+
const settingsPath = settings;
|
|
136
|
+
const existing = readSettings(settingsPath);
|
|
137
|
+
const { merged, warnings } = mergeGraftSettings(existing ?? {}, { statusline: opts.statusline, name: 'graft' });
|
|
138
|
+
if (existing)
|
|
139
|
+
writeFileSync(settingsPath, `${JSON.stringify(merged, null, 2)}\n`);
|
|
140
|
+
else
|
|
141
|
+
warnings.push(notPlainJson('.claude/settings.json', "graft's settings"));
|
|
142
|
+
const skillPath = skill;
|
|
143
|
+
writeFileSync(skillPath, skillTemplate('graft'));
|
|
144
|
+
const mcp = mergeJsonKey('claude', mcpTarget, 'mcpServers', serverEntry({ brand: 'graft' }), 'graft');
|
|
145
|
+
const global = opts.global === false ? [] : installClaudeGlobal(opts.home ?? homedir(), 'graft');
|
|
146
|
+
const built = buildGraphIfMissing(dir, opts);
|
|
147
|
+
return { settingsPath, shims: [], skill: skillPath, mcp, global, warnings, built };
|
|
148
|
+
}
|
|
149
|
+
/** The warning for a settings file init left alone because it isn't plain JSON. */
|
|
150
|
+
function notPlainJson(file, what) {
|
|
151
|
+
return `Left ${file} as it was: it isn't plain JSON (a comment or a trailing comma?), and rewriting it would lose what's in it. Make it plain JSON and run init again to add ${what} there.`;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* `runInit` for a repo on trail.
|
|
155
|
+
* trail-solo-grafo: writes only .trail/ dir, Hermes skill, and MCP config.
|
|
156
|
+
* Hook shim (.trail/hook.cjs), statusline shim, .claude/settings.json, and
|
|
157
|
+
* knowledge hook plugin are NOT written.
|
|
158
|
+
*/
|
|
159
|
+
function runTrailInit(dir, opts) {
|
|
160
|
+
const home = opts.home ?? homedir();
|
|
161
|
+
const global = opts.global !== false;
|
|
162
|
+
// Create the .trail/ directory and git-ignore the cache inside it.
|
|
163
|
+
mkdirSync(join(dir, '.trail'), { recursive: true });
|
|
164
|
+
ignoreInTrailDir(dir, 'cache/');
|
|
165
|
+
const warnings = [];
|
|
166
|
+
let skillPath = '';
|
|
167
|
+
if (global) {
|
|
168
|
+
// Write the trail Claude skill.
|
|
169
|
+
const skill = trailSkillPath(home);
|
|
170
|
+
mkdirSync(dirname(skill), { recursive: true });
|
|
171
|
+
writeFileSync(skill, skillTemplate('trail'));
|
|
172
|
+
skillPath = skill;
|
|
173
|
+
// Write the Hermes skill when Hermes is installed on this machine.
|
|
174
|
+
if (hermesInstalled(home)) {
|
|
175
|
+
const hPath = hermesSkillPath(home);
|
|
176
|
+
mkdirSync(dirname(hPath), { recursive: true });
|
|
177
|
+
writeFileSync(hPath, hermesSkillTemplate('trail'));
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
// Clean up any old hook/shim/skill files a previous init may have written.
|
|
181
|
+
clearOldLayout(dir);
|
|
182
|
+
const globalWrites = global ? installClaudeGlobal(home, 'trail') : [];
|
|
183
|
+
if (global)
|
|
184
|
+
globalWrites.push(disableGraftServerIn(home, resolve(dir)));
|
|
185
|
+
const built = buildGraphIfMissing(dir, opts);
|
|
186
|
+
// settings path: nothing written now; return empty string.
|
|
187
|
+
return { settingsPath: '', shims: [], skill: skillPath, mcp: null, global: globalWrites, warnings, built };
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Remove old hook/shim/skill files a previous init may have written.
|
|
191
|
+
*/
|
|
192
|
+
function clearOldLayout(dir, opts = {}) {
|
|
193
|
+
for (const n of ['graft', 'trail']) {
|
|
194
|
+
const [, oldSl, oldHk, oldSkill] = legacyClaudeTargets(dir, n).map((t) => t.path);
|
|
195
|
+
if (!opts.keepShims) {
|
|
196
|
+
rmSync(oldSl, { force: true });
|
|
197
|
+
rmSync(oldHk, { force: true });
|
|
198
|
+
}
|
|
199
|
+
rmSync(dirname(oldSkill), { recursive: true, force: true });
|
|
200
|
+
}
|
|
201
|
+
for (const d of [join(dir, '.claude', 'helpers'), join(dir, '.claude', 'skills')]) {
|
|
202
|
+
try {
|
|
203
|
+
rmdirSync(d);
|
|
204
|
+
}
|
|
205
|
+
catch { /* holds the user's files, or was never there */ }
|
|
206
|
+
}
|
|
207
|
+
// Remove old .trail/hook.cjs and .trail/statusline.cjs if they exist.
|
|
208
|
+
rmSync(join(dir, TRAIL_HOOK), { force: true });
|
|
209
|
+
rmSync(join(dir, TRAIL_STATUSLINE), { force: true });
|
|
210
|
+
dropServer(join(dir, '.mcp.json'), ['trail', 'graft']);
|
|
211
|
+
}
|
|
212
|
+
/** Take trail's (or graft's) server out of an `.mcp.json`. */
|
|
213
|
+
function dropServer(path, names) {
|
|
214
|
+
try {
|
|
215
|
+
const loaded = readJsonObject(path);
|
|
216
|
+
if (loaded === 'unparseable' || !loaded.existed)
|
|
217
|
+
return;
|
|
218
|
+
const root = loaded.root;
|
|
219
|
+
const servers = root.mcpServers;
|
|
220
|
+
if (!servers || typeof servers !== 'object' || !names.some((n) => n in servers))
|
|
221
|
+
return;
|
|
222
|
+
for (const n of names)
|
|
223
|
+
delete servers[n];
|
|
224
|
+
if (Object.keys(servers).length === 0)
|
|
225
|
+
delete root.mcpServers;
|
|
226
|
+
if (Object.keys(root).length === 0)
|
|
227
|
+
rmSync(path, { force: true });
|
|
228
|
+
else
|
|
229
|
+
writeFileSync(path, `${JSON.stringify(root, null, 2)}\n`);
|
|
230
|
+
}
|
|
231
|
+
catch { /* leave it as the user has it */ }
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Keep a personal file out of git without touching the repo's `.gitignore`.
|
|
235
|
+
*/
|
|
236
|
+
export function keepOutOfGit(dir, rel) {
|
|
237
|
+
try {
|
|
238
|
+
execFileSync('git', ['check-ignore', '-q', '--', rel], { cwd: dir, stdio: 'ignore', windowsHide: true });
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
catch (e) {
|
|
242
|
+
if (e.status !== 1)
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
try {
|
|
246
|
+
let exclude = execFileSync('git', ['rev-parse', '--git-path', 'info/exclude'], { cwd: dir, encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'], windowsHide: true }).trim();
|
|
247
|
+
if (!isAbsolute(exclude))
|
|
248
|
+
exclude = join(dir, exclude);
|
|
249
|
+
const line = `/${rel.split('\\').join('/')}`;
|
|
250
|
+
const text = existsSync(exclude) ? readFileSync(exclude, 'utf8') : '';
|
|
251
|
+
if (text.split('\n').some((l) => l.trim() === line))
|
|
252
|
+
return;
|
|
253
|
+
mkdirSync(dirname(exclude), { recursive: true });
|
|
254
|
+
appendFileSync(exclude, `${text && !text.endsWith('\n') ? '\n' : ''}${line}\n`);
|
|
255
|
+
}
|
|
256
|
+
catch { /* best-effort */ }
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/claude/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAa,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC3H,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAoB,MAAM,2BAA2B,CAAC;AACxG,OAAO,EAAE,kBAAkB,EAAqC,MAAM,qBAAqB,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAiB,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,iBAAiB,EAAc,MAAM,aAAa,CAAC;AAE5D,wEAAwE;AACxE,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AACrD,wEAAwE;AACxE,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;AACjE,4EAA4E;AAC5E,MAAM,UAAU,cAAc,CAAC,OAAe,OAAO,EAAE;IACrD,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AAC9D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe,OAAO,EAAE;IACtD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACzE,OAAO,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AAC9D,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,eAAe,CAAC,OAAe,OAAO,EAAE;IACtD,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO;QACtC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC;QACtF,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACpC,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,2EAA2E;AAC3E,SAAS,gBAAgB,CAAC,IAAY,EAAE,KAAa;IACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACtC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC5C,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,CAAC;QAAC,OAAO,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC;IACxE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAC9D,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;IACrF,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW,EAAE,SAAiB,EAAE,IAAa;IACzE,OAAO,gBAAgB,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC;AACjE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW,EAAE,SAAiB;IACvD,OAAO,SAAS,KAAK,OAAO,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;AAC7E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW,EAAE,IAAW,EAAE,OAAe,OAAO,EAAE;IACjF,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC5D,MAAM,CAAC,GAAG,CAAC,IAAY,EAAE,IAAY,EAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACxI,OAAO;QACL,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,eAAe,CAAC,EAAE,iCAAiC,CAAC;QAC3E,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,oBAAoB,CAAC;QAC9C,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,qBAAqB,CAAC,EAAE,qCAAqC,CAAC;QACrF,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,EAAE,8BAA8B,CAAC;QAC9D,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE;KACrH,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW,EAAE,IAAW;IAC1D,MAAM,CAAC,GAAG,CAAC,IAAY,EAAE,IAAY,EAAE,OAA6B,QAAQ,EAAgB,EAAE,CAC5F,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACxE,OAAO;QACL,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,eAAe,CAAC,EAAE,GAAG,IAAI,2BAA2B,CAAC;QAC5E,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;QAC/E,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,YAAY,CAAC,EAAE,YAAY,CAAC;QACrE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE,GAAG,IAAI,QAAQ,CAAC;QACpE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,cAAc,IAAI,EAAE,EAAE,KAAK,CAAC;KACvD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW,EAAE,IAA2C;IAC1F,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,aAAa,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9E,IAAI,CAAC;QACH,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACtJ,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,sDAAsD;AACtD,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QAAC,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,EAAE,CAAC;IAAC,CAAC;IAC/D,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAC5B,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzC,OAAO,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,MAA8B,CAAC,CAAC,CAAC,IAAI,CAAC;IACjH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAYD,MAAM,UAAU,OAAO,CACrB,GAAW,EACX,OAAoH,EAAE;IAEtH,IAAI,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,OAAO;QAAE,OAAO,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC5E,wFAAwF;IACxF,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,GAAG,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAE/G,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/C,MAAM,YAAY,GAAG,QAAQ,CAAC;IAC9B,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;IAC5C,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,kBAAkB,CAAC,QAAQ,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAChH,IAAI,QAAQ;QAAE,aAAa,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;;QAC7E,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,uBAAuB,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAE9E,MAAM,SAAS,GAAG,KAAK,CAAC;IACxB,aAAa,CAAC,SAAS,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IAEjD,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IAEtG,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,IAAI,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;IAEjG,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC7C,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACrF,CAAC;AAED,mFAAmF;AACnF,SAAS,YAAY,CAAC,IAAY,EAAE,IAAY;IAC9C,OAAO,QAAQ,IAAI,4JAA4J,IAAI,SAAS,CAAC;AAC/L,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CACnB,GAAW,EACX,IAAkG;IAElG,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC;IAErC,mEAAmE;IACnE,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,gBAAgB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAEhC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,MAAM,EAAE,CAAC;QACX,gCAAgC;QAChC,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QACnC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;QAC7C,SAAS,GAAG,KAAK,CAAC;QAElB,mEAAmE;QACnE,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;YACpC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/C,aAAa,CAAC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,2EAA2E;IAC3E,cAAc,CAAC,GAAG,CAAC,CAAC;IAEpB,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE,IAAI,MAAM;QAAE,YAAY,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAExE,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC7C,2DAA2D;IAC3D,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC7G,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,GAAW,EAAE,OAAgC,EAAE;IACrE,KAAK,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAU,EAAE,CAAC;QAC5C,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,GAAG,mBAAmB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAClF,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/B,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACjC,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;QAClF,IAAI,CAAC;YAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,gDAAgD,CAAC,CAAC;IAClF,CAAC;IACD,sEAAsE;IACtE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,8DAA8D;AAC9D,SAAS,UAAU,CAAC,IAAY,EAAE,KAAe;IAC/C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,MAAM,KAAK,aAAa,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO;QACxD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC;QAChC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC;YAAE,OAAO;QACxF,KAAK,MAAM,CAAC,IAAI,KAAK;YAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,UAAU,CAAC;QAC9D,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;;YAC7D,aAAa,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC,CAAC,iCAAiC,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,GAAW;IACnD,IAAI,CAAC;QACH,YAAY,CAAC,KAAK,EAAE,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACzG,OAAO;IACT,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAK,CAAyB,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;IACtD,CAAC;IACD,IAAI,CAAC;QACH,IAAI,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,cAAc,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9K,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC;YAAE,OAAO;QAC5D,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,cAAc,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;IAClF,CAAC;IAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Absolute path to the graft CLI (`<pkgRoot>/dist/cli.js`), resolved from this module. */
|
|
2
|
+
export declare function graftCliPath(): string;
|
|
3
|
+
/** Absolute path to this package's `dist/claude` dir. Baked into the generated shims at
|
|
4
|
+
* init time as their primary resolution candidate, so the statusline/hooks find graft
|
|
5
|
+
* without runtime guesswork — correct regardless of how Node was installed. */
|
|
6
|
+
export declare function claudeDistDir(): string;
|
|
7
|
+
/** Absolute path to a sibling script in the claude dir (e.g. `sync-run.js`). */
|
|
8
|
+
export declare function claudeScriptPath(name: string): string;
|
|
9
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/claude/paths.ts"],"names":[],"mappings":"AASA,2FAA2F;AAC3F,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;+EAE+E;AAC/E,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD"}
|