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,78 @@
|
|
|
1
|
+
import type { PlannedWrite } from './plan.js';
|
|
2
|
+
import { type ConfigWrite } from './config-write.js';
|
|
3
|
+
import { type Brand } from '../brand.js';
|
|
4
|
+
/** MCP registration reports the same write-result record every installer does. */
|
|
5
|
+
export type McpWrite = ConfigWrite;
|
|
6
|
+
/** A planned MCP write, plus the detail needed to actually perform it. */
|
|
7
|
+
export interface McpTarget extends PlannedWrite {
|
|
8
|
+
format: 'json' | 'toml';
|
|
9
|
+
/** JSON only: the top-level key holding the server map. */
|
|
10
|
+
topKey?: string;
|
|
11
|
+
/** JSON only: the server entry to merge in under `key`. */
|
|
12
|
+
entry?: object;
|
|
13
|
+
/** The server's name in the file: `graft`, or `trail` in a repo that uses trail. */
|
|
14
|
+
key: Brand;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* JSON hosts: `{ command, args }`.
|
|
18
|
+
*
|
|
19
|
+
* `GRAFT_MCP_NPX=1` forces the `npx` form — the escape hatch for a machine whose
|
|
20
|
+
* global install is stale or shadowed, and what the tests set so their expectations
|
|
21
|
+
* don't depend on whether the machine running them happens to have graft installed.
|
|
22
|
+
* `opts.onPath` is the same override for direct unit tests of both branches.
|
|
23
|
+
*/
|
|
24
|
+
export declare function serverEntry(opts?: {
|
|
25
|
+
onPath?: boolean;
|
|
26
|
+
brand?: 'graft' | 'trail';
|
|
27
|
+
}): {
|
|
28
|
+
command: string;
|
|
29
|
+
args: string[];
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* `key` is the server's name in the file (`graft`, or `trail` in a repo that
|
|
33
|
+
* uses trail); `drop` names entries this write replaces, so a repo moving to
|
|
34
|
+
* trail doesn't start the same server twice.
|
|
35
|
+
*/
|
|
36
|
+
export declare function mergeJsonKey(id: string, path: string, topKey: string, entry: object, key?: string, drop?: string[]): McpWrite;
|
|
37
|
+
/**
|
|
38
|
+
* Remove the `[mcp_servers.graft]` table (or `name`'s) from a TOML config, returning the rest.
|
|
39
|
+
*
|
|
40
|
+
* Line-based on purpose: a real parse-and-reserialize would reformat the user's
|
|
41
|
+
* whole file. The table runs from its header to the next `[`-header or EOF, which
|
|
42
|
+
* is exactly the shape {@link upsertCodexToml} appends. Exported so the writer and
|
|
43
|
+
* `retract.ts` can never disagree about what "graft's section" means.
|
|
44
|
+
*/
|
|
45
|
+
export declare function stripTomlSection(text: string, name?: Brand): {
|
|
46
|
+
rest: string;
|
|
47
|
+
found: boolean;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Register graft in a TOML config, replacing any section a previous version left.
|
|
51
|
+
*
|
|
52
|
+
* The old behaviour was to skip entirely once the header existed, which froze the
|
|
53
|
+
* launch command at whatever the first init wrote: a repo wired when graft wasn't
|
|
54
|
+
* on PATH kept the slow `npx` form forever, and no upgrade could correct it. Strip
|
|
55
|
+
* and re-append instead, so this converges like every other writer — foreign
|
|
56
|
+
* tables are untouched either way.
|
|
57
|
+
*/
|
|
58
|
+
export declare function upsertCodexToml(id: string, path: string, name?: Brand): McpWrite;
|
|
59
|
+
/**
|
|
60
|
+
* The MCP config files selecting these hosts would touch — pure, no writes.
|
|
61
|
+
* Codex's target is the user-level `~/.codex/config.toml`, so it is scoped
|
|
62
|
+
* 'global': registering there affects every project on the machine.
|
|
63
|
+
*
|
|
64
|
+
* `name` is the repo's name for the tool: under trail the server is `trail`,
|
|
65
|
+
* launched as `trail mcp` (or `npx -y trail-code mcp`). The files
|
|
66
|
+
* are the same either way.
|
|
67
|
+
*/
|
|
68
|
+
export declare function mcpTargets(repo: string, ids: string[], opts?: {
|
|
69
|
+
home?: string;
|
|
70
|
+
name?: Brand;
|
|
71
|
+
}): McpTarget[];
|
|
72
|
+
export declare function registerMcpConfigs(repo: string, ids: string[], opts?: {
|
|
73
|
+
home?: string;
|
|
74
|
+
global?: boolean;
|
|
75
|
+
name?: Brand;
|
|
76
|
+
laptop?: string[];
|
|
77
|
+
}): McpWrite[];
|
|
78
|
+
//# sourceMappingURL=mcp-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-config.d.ts","sourceRoot":"","sources":["../../src/hosts/mcp-config.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAEtD,kFAAkF;AAClF,MAAM,MAAM,QAAQ,GAAG,WAAW,CAAC;AAEnC,0EAA0E;AAC1E,MAAM,WAAW,SAAU,SAAQ,YAAY;IAC7C,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oFAAoF;IACpF,GAAG,EAAE,KAAK,CAAC;CACZ;AA+BD;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;CAAO,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAM3H;AAYD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAU,EAAE,IAAI,GAAE,MAAM,EAAO,GAAG,QAAQ,CAgBlI;AAOD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,KAAe,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAYtG;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,KAAe,GAAG,QAAQ,CAiBzF;AAqBD;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EAAE,EACb,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,KAAK,CAAA;CAAO,GACzC,SAAS,EAAE,CAqDb;AAoBD,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EAAE,EACb,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,KAAK,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAO,GAC9E,QAAQ,EAAE,CAUZ"}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Register the graft MCP server in each host's config.
|
|
3
|
+
* JSON hosts get a keyed merge (other servers preserved; unparseable files
|
|
4
|
+
* are never rewritten). The TOML host gets an append-if-absent section.
|
|
5
|
+
*
|
|
6
|
+
* `mcpTargets()` is the pure "which files would this touch" half, so `graft
|
|
7
|
+
* init --dry-run` and the picker can report paths without writing;
|
|
8
|
+
* `registerMcpConfigs()` walks that same list to do the writing.
|
|
9
|
+
*/
|
|
10
|
+
import { WINHIDE } from "../util/child-process.js";
|
|
11
|
+
import { readFileSync, writeFileSync, mkdirSync, existsSync, statSync } from 'node:fs';
|
|
12
|
+
import { spawnSync } from 'node:child_process';
|
|
13
|
+
import { dirname, join } from 'node:path';
|
|
14
|
+
import { homedir } from 'node:os';
|
|
15
|
+
import { readJsonObject } from './config-write.js';
|
|
16
|
+
import { trailOnPath } from '../brand.js';
|
|
17
|
+
/**
|
|
18
|
+
* How to launch the MCP server, decided once at init time.
|
|
19
|
+
*
|
|
20
|
+
* `npx -y` resolves the package before it can serve: measured at a 211 ms
|
|
21
|
+
* spawn→`initialize` handshake against 80 ms for the installed binary, five runs
|
|
22
|
+
* each. The harness registers a server's tools only once that handshake lands, and
|
|
23
|
+
* a slow one can miss the first request entirely — in a traced session graft's
|
|
24
|
+
* tools arrived 13.9 s in, four model turns too late to shape the approach. (That
|
|
25
|
+
* 13.9 s is NOT explained by 130 ms; the gap's cause is still unknown. This is the
|
|
26
|
+
* cheap half of the fix, not the whole of it.)
|
|
27
|
+
*
|
|
28
|
+
* Deliberately a bare command name, never an absolute path: these files get
|
|
29
|
+
* committed and shared, and this repo carried the scar of the alternative — a
|
|
30
|
+
* checked-in hook shim with another machine's home directory baked into it. A
|
|
31
|
+
* bare `graft` works on any machine that has it installed; `npx` remains the
|
|
32
|
+
* fallback for machines that don't.
|
|
33
|
+
*/
|
|
34
|
+
const NPX_LAUNCH = { command: 'npx', args: ['-y', '@nanonets/graft', 'mcp'] };
|
|
35
|
+
const BIN_LAUNCH = { command: 'graft', args: ['mcp'] };
|
|
36
|
+
// The same server under trail's name, for a repo that uses trail: its tools are
|
|
37
|
+
// `trail_*` (and it still answers `graft_*`).
|
|
38
|
+
const TRAIL_NPX_LAUNCH = { command: 'npx', args: ['-y', 'trail-code', 'mcp'] };
|
|
39
|
+
const TRAIL_BIN_LAUNCH = { command: 'trail', args: ['mcp'] };
|
|
40
|
+
function graftOnPath() {
|
|
41
|
+
const r = spawnSync('graft', ['--version'], { ...WINHIDE, stdio: 'ignore', timeout: 5000 });
|
|
42
|
+
return r.status === 0;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* JSON hosts: `{ command, args }`.
|
|
46
|
+
*
|
|
47
|
+
* `GRAFT_MCP_NPX=1` forces the `npx` form — the escape hatch for a machine whose
|
|
48
|
+
* global install is stale or shadowed, and what the tests set so their expectations
|
|
49
|
+
* don't depend on whether the machine running them happens to have graft installed.
|
|
50
|
+
* `opts.onPath` is the same override for direct unit tests of both branches.
|
|
51
|
+
*/
|
|
52
|
+
export function serverEntry(opts = {}) {
|
|
53
|
+
const trail = opts.brand === 'trail';
|
|
54
|
+
const forced = process.env.GRAFT_MCP_NPX;
|
|
55
|
+
if (forced !== undefined && forced !== '' && forced !== '0' && forced !== 'false')
|
|
56
|
+
return trail ? TRAIL_NPX_LAUNCH : NPX_LAUNCH;
|
|
57
|
+
if (trail)
|
|
58
|
+
return (opts.onPath ?? trailOnPath()) ? TRAIL_BIN_LAUNCH : TRAIL_NPX_LAUNCH;
|
|
59
|
+
return (opts.onPath ?? graftOnPath()) ? BIN_LAUNCH : NPX_LAUNCH;
|
|
60
|
+
}
|
|
61
|
+
function opencodeEntry(name = 'graft') {
|
|
62
|
+
const { command, args } = serverEntry({ brand: name });
|
|
63
|
+
return { type: 'local', command: [command, ...args], enabled: true };
|
|
64
|
+
}
|
|
65
|
+
function dirExists(p) {
|
|
66
|
+
try {
|
|
67
|
+
return statSync(p).isDirectory();
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* `key` is the server's name in the file (`graft`, or `trail` in a repo that
|
|
75
|
+
* uses trail); `drop` names entries this write replaces, so a repo moving to
|
|
76
|
+
* trail doesn't start the same server twice.
|
|
77
|
+
*/
|
|
78
|
+
export function mergeJsonKey(id, path, topKey, entry, key = 'graft', drop = []) {
|
|
79
|
+
const loaded = readJsonObject(path);
|
|
80
|
+
if (loaded === 'unparseable')
|
|
81
|
+
return { id, path, action: 'skipped-unparseable' };
|
|
82
|
+
const { root, existed } = loaded;
|
|
83
|
+
const bucket = (root[topKey] ??= {});
|
|
84
|
+
if (typeof bucket !== 'object' || bucket === null || Array.isArray(bucket)) {
|
|
85
|
+
return { id, path, action: 'skipped-unparseable' };
|
|
86
|
+
}
|
|
87
|
+
const dropping = drop.filter((k) => k in bucket);
|
|
88
|
+
if (JSON.stringify(bucket[key]) === JSON.stringify(entry) && dropping.length === 0)
|
|
89
|
+
return { id, path, action: 'unchanged' };
|
|
90
|
+
const action = existed ? 'updated' : 'created';
|
|
91
|
+
for (const k of dropping)
|
|
92
|
+
delete bucket[k];
|
|
93
|
+
bucket[key] = entry;
|
|
94
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
95
|
+
writeFileSync(path, `${JSON.stringify(root, null, 2)}\n`);
|
|
96
|
+
return { id, path, action };
|
|
97
|
+
}
|
|
98
|
+
/** The `[mcp_servers.graft]` (or `.trail`) table header, as written and as matched. */
|
|
99
|
+
function tomlHeader(name) {
|
|
100
|
+
return `[mcp_servers.${name}]`;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Remove the `[mcp_servers.graft]` table (or `name`'s) from a TOML config, returning the rest.
|
|
104
|
+
*
|
|
105
|
+
* Line-based on purpose: a real parse-and-reserialize would reformat the user's
|
|
106
|
+
* whole file. The table runs from its header to the next `[`-header or EOF, which
|
|
107
|
+
* is exactly the shape {@link upsertCodexToml} appends. Exported so the writer and
|
|
108
|
+
* `retract.ts` can never disagree about what "graft's section" means.
|
|
109
|
+
*/
|
|
110
|
+
export function stripTomlSection(text, name = 'graft') {
|
|
111
|
+
const lines = text.split('\n');
|
|
112
|
+
const header = tomlHeader(name);
|
|
113
|
+
const start = lines.findIndex((l) => l.trim() === header);
|
|
114
|
+
if (start === -1)
|
|
115
|
+
return { rest: text, found: false };
|
|
116
|
+
let end = start + 1;
|
|
117
|
+
while (end < lines.length && !lines[end].trimStart().startsWith('['))
|
|
118
|
+
end++;
|
|
119
|
+
const rest = [...lines.slice(0, start), ...lines.slice(end)]
|
|
120
|
+
.join('\n')
|
|
121
|
+
.replace(/\n{3,}/g, '\n\n')
|
|
122
|
+
.replace(/^\n+/, '');
|
|
123
|
+
return { rest, found: true };
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Register graft in a TOML config, replacing any section a previous version left.
|
|
127
|
+
*
|
|
128
|
+
* The old behaviour was to skip entirely once the header existed, which froze the
|
|
129
|
+
* launch command at whatever the first init wrote: a repo wired when graft wasn't
|
|
130
|
+
* on PATH kept the slow `npx` form forever, and no upgrade could correct it. Strip
|
|
131
|
+
* and re-append instead, so this converges like every other writer — foreign
|
|
132
|
+
* tables are untouched either way.
|
|
133
|
+
*/
|
|
134
|
+
export function upsertCodexToml(id, path, name = 'graft') {
|
|
135
|
+
const existed = existsSync(path);
|
|
136
|
+
const text = existed ? readFileSync(path, 'utf8') : '';
|
|
137
|
+
const { command, args } = serverEntry({ brand: name });
|
|
138
|
+
const argList = args.map((a) => JSON.stringify(a)).join(", ");
|
|
139
|
+
const section = `${tomlHeader(name)}\ncommand = \"${command}\"\nargs = [${argList}]\n`;
|
|
140
|
+
const own = stripTomlSection(text, name);
|
|
141
|
+
// Under trail, graft's table goes: the same server, listed once.
|
|
142
|
+
const { rest, found: oldFound } = name === 'trail' ? stripTomlSection(own.rest, 'graft') : { rest: own.rest, found: false };
|
|
143
|
+
const found = own.found && !oldFound;
|
|
144
|
+
// Byte-identical already: don't rewrite the file just to reorder it.
|
|
145
|
+
if (found && text === appendSection(rest, section))
|
|
146
|
+
return { id, path, action: 'unchanged' };
|
|
147
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
148
|
+
writeFileSync(path, appendSection(rest, section));
|
|
149
|
+
return { id, path, action: existed ? 'updated' : 'created' };
|
|
150
|
+
}
|
|
151
|
+
/** Append a section after exactly one blank line, or at the top of an empty file. */
|
|
152
|
+
function appendSection(text, section) {
|
|
153
|
+
if (text.trim() === '')
|
|
154
|
+
return section;
|
|
155
|
+
const sep = text.endsWith('\n\n') ? '' : text.endsWith('\n') ? '\n' : '\n\n';
|
|
156
|
+
return `${text}${sep}${section}`;
|
|
157
|
+
}
|
|
158
|
+
function jsonTarget(hostId, id, path, topKey, entry, scope = 'repo', key = 'graft') {
|
|
159
|
+
return { hostId, id, path, scope, kind: 'mcp', what: `${topKey}.${key}`, format: 'json', topKey, entry, key };
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* The MCP config files selecting these hosts would touch — pure, no writes.
|
|
163
|
+
* Codex's target is the user-level `~/.codex/config.toml`, so it is scoped
|
|
164
|
+
* 'global': registering there affects every project on the machine.
|
|
165
|
+
*
|
|
166
|
+
* `name` is the repo's name for the tool: under trail the server is `trail`,
|
|
167
|
+
* launched as `trail mcp` (or `npx -y trail-code mcp`). The files
|
|
168
|
+
* are the same either way.
|
|
169
|
+
*/
|
|
170
|
+
export function mcpTargets(repo, ids, opts = {}) {
|
|
171
|
+
const home = opts.home ?? homedir();
|
|
172
|
+
const name = opts.name ?? 'graft';
|
|
173
|
+
const entry = serverEntry({ brand: name });
|
|
174
|
+
const json = (hostId, id, path, topKey, e, scope = 'repo') => jsonTarget(hostId, id, path, topKey, e, scope, name);
|
|
175
|
+
const out = [];
|
|
176
|
+
for (const id of ids) {
|
|
177
|
+
switch (id) {
|
|
178
|
+
case 'cursor':
|
|
179
|
+
out.push(json(id, id, join(repo, '.cursor', 'mcp.json'), 'mcpServers', entry));
|
|
180
|
+
break;
|
|
181
|
+
case 'gemini':
|
|
182
|
+
out.push(json(id, id, join(repo, '.gemini', 'settings.json'), 'mcpServers', entry));
|
|
183
|
+
break;
|
|
184
|
+
case 'antigravity':
|
|
185
|
+
// Antigravity reads MCP from its OWN registry, separate from Gemini CLI's
|
|
186
|
+
// `.gemini/settings.json` — a global `~/.gemini/config/mcp_config.json` (the
|
|
187
|
+
// gap #62 reported). Standard `{command,args}` under `mcpServers`. Global
|
|
188
|
+
// scope: it applies to every workspace opened in Antigravity.
|
|
189
|
+
out.push(json(id, 'antigravity', join(home, '.gemini', 'config', 'mcp_config.json'), 'mcpServers', entry, 'global'));
|
|
190
|
+
break;
|
|
191
|
+
case 'kiro':
|
|
192
|
+
out.push(json(id, id, join(repo, '.kiro', 'settings', 'mcp.json'), 'mcpServers', entry));
|
|
193
|
+
break;
|
|
194
|
+
case 'grok':
|
|
195
|
+
// Grok reads MCP from repo-level `.grok/config.toml` (`[mcp_servers.<name>]`),
|
|
196
|
+
// the same TOML shape Codex uses at ~/.codex/config.toml.
|
|
197
|
+
out.push({
|
|
198
|
+
hostId: id, id: 'grok', path: join(repo, '.grok', 'config.toml'),
|
|
199
|
+
scope: 'repo', kind: 'mcp', what: tomlHeader(name), format: 'toml', key: name,
|
|
200
|
+
});
|
|
201
|
+
break;
|
|
202
|
+
case 'agents':
|
|
203
|
+
// Guarded on the CLI actually being installed, so a plan only ever
|
|
204
|
+
// lists files a real run would touch.
|
|
205
|
+
if (dirExists(join(home, '.codex'))) {
|
|
206
|
+
out.push({
|
|
207
|
+
hostId: id, id: 'codex', path: join(home, '.codex', 'config.toml'),
|
|
208
|
+
scope: 'global', kind: 'mcp', what: tomlHeader(name), format: 'toml', key: name,
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
if (dirExists(join(home, '.config', 'opencode'))) {
|
|
212
|
+
out.push(json(id, 'opencode', join(repo, 'opencode.json'), 'mcp', opencodeEntry(name)));
|
|
213
|
+
}
|
|
214
|
+
break;
|
|
215
|
+
default:
|
|
216
|
+
break; // copilot / windsurf / adal: no MCP target in this phase
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return out;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Whether a machine-wide config already runs the server under trail's name.
|
|
223
|
+
* Every repo on the machine reads it, and `trail mcp` serves a repo still on
|
|
224
|
+
* graft too, so a graft repo leaves it alone rather than list the server twice.
|
|
225
|
+
*/
|
|
226
|
+
function trailServerIn(t) {
|
|
227
|
+
if (t.format === 'toml') {
|
|
228
|
+
try {
|
|
229
|
+
return stripTomlSection(readFileSync(t.path, 'utf8'), 'trail').found;
|
|
230
|
+
}
|
|
231
|
+
catch {
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
const loaded = readJsonObject(t.path);
|
|
236
|
+
const bucket = loaded === 'unparseable' ? undefined : loaded.root[t.topKey];
|
|
237
|
+
return typeof bucket === 'object' && bucket !== null && !Array.isArray(bucket) && 'trail' in bucket;
|
|
238
|
+
}
|
|
239
|
+
export function registerMcpConfigs(repo, ids, opts = {}) {
|
|
240
|
+
const name = opts.name ?? 'graft';
|
|
241
|
+
return mcpTargets(repo, ids, opts)
|
|
242
|
+
.filter((t) => t.scope !== 'global' || (opts.global !== false && (opts.laptop === undefined || opts.laptop.includes(t.hostId))))
|
|
243
|
+
.map((t) => {
|
|
244
|
+
if (name === 'graft' && t.scope === 'global' && trailServerIn(t))
|
|
245
|
+
return { id: t.id, path: t.path, action: 'unchanged' };
|
|
246
|
+
return t.format === 'toml'
|
|
247
|
+
? upsertCodexToml(t.id, t.path, name)
|
|
248
|
+
: mergeJsonKey(t.id, t.path, t.topKey, t.entry, name, name === 'trail' ? ['graft'] : []);
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
//# sourceMappingURL=mcp-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../../src/hosts/mcp-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/** Where a write lands. 'global' = outside the repo, affects every project. */
|
|
2
|
+
export type WriteScope = 'repo' | 'global';
|
|
3
|
+
export interface PlannedWrite {
|
|
4
|
+
/** The selectable host this write belongs to ('claude', 'agents', 'cursor', …). */
|
|
5
|
+
hostId: string;
|
|
6
|
+
/** Reporting id — differs from hostId where one host writes several configs
|
|
7
|
+
* (the 'agents' host covers both 'codex' and 'opencode'). */
|
|
8
|
+
id: string;
|
|
9
|
+
path: string;
|
|
10
|
+
scope: WriteScope;
|
|
11
|
+
kind: 'instruction' | 'mcp' | 'hook' | 'claude' | 'skill';
|
|
12
|
+
/** Short human label for what changes in that file. */
|
|
13
|
+
what: string;
|
|
14
|
+
}
|
|
15
|
+
export interface HostPlan {
|
|
16
|
+
id: string;
|
|
17
|
+
name: string;
|
|
18
|
+
detected: boolean;
|
|
19
|
+
writes: PlannedWrite[];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Every host graft can wire, each with the full set of files selecting it would
|
|
23
|
+
* touch. Claude Code comes first — it's the deep integration and the picker's
|
|
24
|
+
* default. `ids`, when given, restricts the plan to those hosts.
|
|
25
|
+
*/
|
|
26
|
+
export declare function planInit(repo: string, opts?: {
|
|
27
|
+
home?: string;
|
|
28
|
+
ids?: string[];
|
|
29
|
+
}): HostPlan[];
|
|
30
|
+
/** Flatten a plan down to the writes for the selected host ids. */
|
|
31
|
+
export declare function selectedWrites(plan: HostPlan[], ids: string[]): PlannedWrite[];
|
|
32
|
+
//# sourceMappingURL=plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/hosts/plan.ts"],"names":[],"mappings":"AAmBA,+EAA+E;AAC/E,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE3C,MAAM,WAAW,YAAY;IAC3B,mFAAmF;IACnF,MAAM,EAAE,MAAM,CAAC;IACf;kEAC8D;IAC9D,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,UAAU,CAAC;IAClB,IAAI,EAAE,aAAa,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC1D,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,YAAY,EAAE,CAAC;CACxB;AAqBD;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;CAAO,GAAG,QAAQ,EAAE,CAwB/F;AAED,mEAAmE;AACnE,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAE9E"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What `graft init` *would* write, computed before anything is written.
|
|
3
|
+
*
|
|
4
|
+
* The picker and `--dry-run` both need the exact path list up front, so every
|
|
5
|
+
* writer in the init path (instruction files, MCP configs, hooks, the Claude
|
|
6
|
+
* Code layer) exposes a pure `*Targets()` function and then consumes that same
|
|
7
|
+
* list to do its writing. One source of truth, so a plan can never drift from
|
|
8
|
+
* what a real run touches.
|
|
9
|
+
*/
|
|
10
|
+
import { join } from 'node:path';
|
|
11
|
+
import { homedir } from 'node:os';
|
|
12
|
+
import { statSync } from 'node:fs';
|
|
13
|
+
import { HOSTS, detectHosts, hostRelPath, hostWiringName } from './registry.js';
|
|
14
|
+
import { mcpTargets } from './mcp-config.js';
|
|
15
|
+
import { antigravitySkillTargets } from './antigravity.js';
|
|
16
|
+
import { claudeTargets } from '../claude/init.js';
|
|
17
|
+
import { brand } from '../brand.js';
|
|
18
|
+
import { claudeGlobalTargets } from './claude-global.js';
|
|
19
|
+
function probeFor(home, repo) {
|
|
20
|
+
return {
|
|
21
|
+
home, repo,
|
|
22
|
+
dirExists: (p) => { try {
|
|
23
|
+
return statSync(p).isDirectory();
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return false;
|
|
27
|
+
} },
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/** The instruction-file write for one host, derived from its registry entry. */
|
|
31
|
+
function instructionTarget(repo, host, name) {
|
|
32
|
+
return {
|
|
33
|
+
hostId: host.id,
|
|
34
|
+
id: host.id,
|
|
35
|
+
path: join(repo, hostRelPath(host, name)),
|
|
36
|
+
scope: 'repo',
|
|
37
|
+
kind: 'instruction',
|
|
38
|
+
what: host.kind === 'owned' ? `${name}-owned file` : `fenced ${name} section`,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Every host graft can wire, each with the full set of files selecting it would
|
|
43
|
+
* touch. Claude Code comes first — it's the deep integration and the picker's
|
|
44
|
+
* default. `ids`, when given, restricts the plan to those hosts.
|
|
45
|
+
*/
|
|
46
|
+
export function planInit(repo, opts = {}) {
|
|
47
|
+
const home = opts.home ?? homedir();
|
|
48
|
+
const probe = probeFor(home, repo);
|
|
49
|
+
const detected = new Set(detectHosts(probe).map((h) => h.id));
|
|
50
|
+
const name = hostWiringName(repo, brand());
|
|
51
|
+
const plans = [
|
|
52
|
+
// Repo writes plus the user-level copy under `~/.claude` — the picker and
|
|
53
|
+
// `--dry-run` render 'global' writes in their own section, so a user sees
|
|
54
|
+
// what lands outside the repo before agreeing to it.
|
|
55
|
+
{ id: 'claude', name: 'Claude Code', detected: true, writes: [...claudeTargets(repo, brand()), ...claudeGlobalTargets(home, brand())] },
|
|
56
|
+
...HOSTS.map((host) => ({
|
|
57
|
+
id: host.id,
|
|
58
|
+
name: host.name,
|
|
59
|
+
detected: detected.has(host.id),
|
|
60
|
+
writes: [
|
|
61
|
+
instructionTarget(repo, host, name),
|
|
62
|
+
...mcpTargets(repo, [host.id], { home, name }),
|
|
63
|
+
...(host.id === 'antigravity' ? antigravitySkillTargets(home, name) : []),
|
|
64
|
+
],
|
|
65
|
+
})),
|
|
66
|
+
];
|
|
67
|
+
return opts.ids ? plans.filter((p) => opts.ids.includes(p.id)) : plans;
|
|
68
|
+
}
|
|
69
|
+
/** Flatten a plan down to the writes for the selected host ids. */
|
|
70
|
+
export function selectedWrites(plan, ids) {
|
|
71
|
+
return plan.filter((p) => ids.includes(p.id)).flatMap((p) => p.writes);
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/hosts/plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type Brand } from '../brand.js';
|
|
2
|
+
export interface DetectProbe {
|
|
3
|
+
home: string;
|
|
4
|
+
repo: string;
|
|
5
|
+
dirExists(path: string): boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface HostTarget {
|
|
8
|
+
id: string;
|
|
9
|
+
name: string;
|
|
10
|
+
kind: 'section' | 'owned';
|
|
11
|
+
/** Target file, relative to the repo root, under graft's names (see `hostRelPath`). */
|
|
12
|
+
relPath: string;
|
|
13
|
+
/** The text, in the spelling of the repo's name for the tool. */
|
|
14
|
+
content(name?: Brand): string;
|
|
15
|
+
detect(probe: DetectProbe): boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare const HOSTS: HostTarget[];
|
|
18
|
+
export declare function hostIds(): string[];
|
|
19
|
+
export declare function detectHosts(probe: DetectProbe): HostTarget[];
|
|
20
|
+
/**
|
|
21
|
+
* A host's file under `name`. A file the tool owns carries its name, like
|
|
22
|
+
* Claude Code's skill and shims do (`.cursor/rules/trail.mdc`,
|
|
23
|
+
* `.adal/skills/trail/SKILL.md`); a shared file is the same file either way.
|
|
24
|
+
*/
|
|
25
|
+
export declare function hostRelPath(host: HostTarget, name: Brand): string;
|
|
26
|
+
/** Cursor's hooks shim is repo-local, so it carries the repo's name too. */
|
|
27
|
+
export declare function cursorHookShimRelPath(name: Brand): string;
|
|
28
|
+
/**
|
|
29
|
+
* Whether another agent's files in `repo` are already under trail's names: a
|
|
30
|
+
* trail-named file, or a shared file holding trail's block.
|
|
31
|
+
*/
|
|
32
|
+
export declare function hostsWiredForTrail(repo: string): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* The name the other agents' wiring goes by in `repo`, decided the way Claude
|
|
35
|
+
* Code's is (`wiringName` in claude/init.ts): trail's where `trail init` is
|
|
36
|
+
* wiring it now (`initBrand`) or the repo is already on trail, graft's
|
|
37
|
+
* everywhere else. Read from the repo, not the machine, so a teammate on
|
|
38
|
+
* graft refreshing the files writes the same ones and never flips them back.
|
|
39
|
+
*/
|
|
40
|
+
export declare function hostWiringName(repo: string, initBrand?: Brand): Brand;
|
|
41
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/hosts/registry.ts"],"names":[],"mappings":"AAaA,OAAO,EAAqB,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAE5D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAC1B,uFAAuF;IACvF,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC9B,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC;CACrC;AAED,eAAO,MAAM,KAAK,EAAE,UAAU,EA+F7B,CAAC;AAEF,wBAAgB,OAAO,IAAI,MAAM,EAAE,CAElC;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,UAAU,EAAE,CAE5D;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,GAAG,MAAM,CAEjE;AAED,4EAA4E;AAC5E,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,CAEzD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAkBxD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,KAAK,GAAG,KAAK,CAErE"}
|