@akon-labs/nexus-cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5342 -0
- package/LICENSE +22 -0
- package/README.md +677 -0
- package/dist/bun/cli.d.ts +3 -0
- package/dist/bun/cli.d.ts.map +1 -0
- package/dist/bun/cli.js +11 -0
- package/dist/bun/cli.js.map +1 -0
- package/dist/bun/register-bedrock.d.ts +2 -0
- package/dist/bun/register-bedrock.d.ts.map +1 -0
- package/dist/bun/register-bedrock.js +4 -0
- package/dist/bun/register-bedrock.js.map +1 -0
- package/dist/bun/restore-sandbox-env.d.ts +17 -0
- package/dist/bun/restore-sandbox-env.d.ts.map +1 -0
- package/dist/bun/restore-sandbox-env.js +36 -0
- package/dist/bun/restore-sandbox-env.js.map +1 -0
- package/dist/cli/args.d.ts +59 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +408 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/config-selector.d.ts +16 -0
- package/dist/cli/config-selector.d.ts.map +1 -0
- package/dist/cli/config-selector.js +31 -0
- package/dist/cli/config-selector.js.map +1 -0
- package/dist/cli/credential-print.d.ts +23 -0
- package/dist/cli/credential-print.d.ts.map +1 -0
- package/dist/cli/credential-print.js +118 -0
- package/dist/cli/credential-print.js.map +1 -0
- package/dist/cli/experimental/auth.d.ts +16 -0
- package/dist/cli/experimental/auth.d.ts.map +1 -0
- package/dist/cli/experimental/auth.js +13 -0
- package/dist/cli/experimental/auth.js.map +1 -0
- package/dist/cli/experimental/cli.d.ts +6 -0
- package/dist/cli/experimental/cli.d.ts.map +1 -0
- package/dist/cli/experimental/cli.js +5 -0
- package/dist/cli/experimental/cli.js.map +1 -0
- package/dist/cli/experimental/command-options.d.ts +17 -0
- package/dist/cli/experimental/command-options.d.ts.map +1 -0
- package/dist/cli/experimental/command-options.js +35 -0
- package/dist/cli/experimental/command-options.js.map +1 -0
- package/dist/cli/experimental/command.d.ts +63 -0
- package/dist/cli/experimental/command.d.ts.map +1 -0
- package/dist/cli/experimental/command.js +130 -0
- package/dist/cli/experimental/command.js.map +1 -0
- package/dist/cli/experimental/commands/client.d.ts +13 -0
- package/dist/cli/experimental/commands/client.d.ts.map +1 -0
- package/dist/cli/experimental/commands/client.js +25 -0
- package/dist/cli/experimental/commands/client.js.map +1 -0
- package/dist/cli/experimental/commands/pi.d.ts +15 -0
- package/dist/cli/experimental/commands/pi.d.ts.map +1 -0
- package/dist/cli/experimental/commands/pi.js +28 -0
- package/dist/cli/experimental/commands/pi.js.map +1 -0
- package/dist/cli/experimental/commands/server.d.ts +13 -0
- package/dist/cli/experimental/commands/server.d.ts.map +1 -0
- package/dist/cli/experimental/commands/server.js +25 -0
- package/dist/cli/experimental/commands/server.js.map +1 -0
- package/dist/cli/experimental/transport-address.d.ts +10 -0
- package/dist/cli/experimental/transport-address.d.ts.map +1 -0
- package/dist/cli/experimental/transport-address.js +38 -0
- package/dist/cli/experimental/transport-address.js.map +1 -0
- package/dist/cli/file-processor.d.ts +15 -0
- package/dist/cli/file-processor.d.ts.map +1 -0
- package/dist/cli/file-processor.js +70 -0
- package/dist/cli/file-processor.js.map +1 -0
- package/dist/cli/initial-message.d.ts +18 -0
- package/dist/cli/initial-message.d.ts.map +1 -0
- package/dist/cli/initial-message.js +22 -0
- package/dist/cli/initial-message.js.map +1 -0
- package/dist/cli/list-models.d.ts +9 -0
- package/dist/cli/list-models.d.ts.map +1 -0
- package/dist/cli/list-models.js +98 -0
- package/dist/cli/list-models.js.map +1 -0
- package/dist/cli/project-trust.d.ts +10 -0
- package/dist/cli/project-trust.d.ts.map +1 -0
- package/dist/cli/project-trust.js +48 -0
- package/dist/cli/project-trust.js.map +1 -0
- package/dist/cli/require-login.d.ts +30 -0
- package/dist/cli/require-login.d.ts.map +1 -0
- package/dist/cli/require-login.js +96 -0
- package/dist/cli/require-login.js.map +1 -0
- package/dist/cli/session-picker.d.ts +10 -0
- package/dist/cli/session-picker.d.ts.map +1 -0
- package/dist/cli/session-picker.js +36 -0
- package/dist/cli/session-picker.js.map +1 -0
- package/dist/cli/startup-ui.d.ts +20 -0
- package/dist/cli/startup-ui.d.ts.map +1 -0
- package/dist/cli/startup-ui.js +185 -0
- package/dist/cli/startup-ui.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +69740 -0
- package/dist/cli.js.map +1 -0
- package/dist/client/index.d.ts +3 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +425 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/remote-session.d.ts +53 -0
- package/dist/client/remote-session.d.ts.map +1 -0
- package/dist/client/remote-session.js +340 -0
- package/dist/client/remote-session.js.map +1 -0
- package/dist/client/transcript.d.ts +12 -0
- package/dist/client/transcript.d.ts.map +1 -0
- package/dist/client/transcript.js +98 -0
- package/dist/client/transcript.js.map +1 -0
- package/dist/config.d.ts +99 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +482 -0
- package/dist/config.js.map +1 -0
- package/dist/core/agent-session-runtime.d.ts +119 -0
- package/dist/core/agent-session-runtime.d.ts.map +1 -0
- package/dist/core/agent-session-runtime.js +309 -0
- package/dist/core/agent-session-runtime.js.map +1 -0
- package/dist/core/agent-session-services.d.ts +86 -0
- package/dist/core/agent-session-services.d.ts.map +1 -0
- package/dist/core/agent-session-services.js +134 -0
- package/dist/core/agent-session-services.js.map +1 -0
- package/dist/core/agent-session.d.ts +644 -0
- package/dist/core/agent-session.d.ts.map +1 -0
- package/dist/core/agent-session.js +2687 -0
- package/dist/core/agent-session.js.map +1 -0
- package/dist/core/auth-guidance.d.ts +5 -0
- package/dist/core/auth-guidance.d.ts.map +1 -0
- package/dist/core/auth-guidance.js +39 -0
- package/dist/core/auth-guidance.js.map +1 -0
- package/dist/core/auth-storage.d.ts +62 -0
- package/dist/core/auth-storage.d.ts.map +1 -0
- package/dist/core/auth-storage.js +350 -0
- package/dist/core/auth-storage.js.map +1 -0
- package/dist/core/bash-executor.d.ts +32 -0
- package/dist/core/bash-executor.d.ts.map +1 -0
- package/dist/core/bash-executor.js +111 -0
- package/dist/core/bash-executor.js.map +1 -0
- package/dist/core/cache-stats.d.ts +49 -0
- package/dist/core/cache-stats.d.ts.map +1 -0
- package/dist/core/cache-stats.js +101 -0
- package/dist/core/cache-stats.js.map +1 -0
- package/dist/core/compaction/branch-summarization.d.ts +98 -0
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -0
- package/dist/core/compaction/branch-summarization.js +246 -0
- package/dist/core/compaction/branch-summarization.js.map +1 -0
- package/dist/core/compaction/compaction.d.ts +137 -0
- package/dist/core/compaction/compaction.d.ts.map +1 -0
- package/dist/core/compaction/compaction.js +645 -0
- package/dist/core/compaction/compaction.js.map +1 -0
- package/dist/core/compaction/index.d.ts +7 -0
- package/dist/core/compaction/index.d.ts.map +1 -0
- package/dist/core/compaction/index.js +7 -0
- package/dist/core/compaction/index.js.map +1 -0
- package/dist/core/compaction/utils.d.ts +38 -0
- package/dist/core/compaction/utils.d.ts.map +1 -0
- package/dist/core/compaction/utils.js +142 -0
- package/dist/core/compaction/utils.js.map +1 -0
- package/dist/core/defaults.d.ts +3 -0
- package/dist/core/defaults.d.ts.map +1 -0
- package/dist/core/defaults.js +2 -0
- package/dist/core/defaults.js.map +1 -0
- package/dist/core/diagnostics.d.ts +15 -0
- package/dist/core/diagnostics.d.ts.map +1 -0
- package/dist/core/diagnostics.js +2 -0
- package/dist/core/diagnostics.js.map +1 -0
- package/dist/core/event-bus.d.ts +9 -0
- package/dist/core/event-bus.d.ts.map +1 -0
- package/dist/core/event-bus.js +25 -0
- package/dist/core/event-bus.js.map +1 -0
- package/dist/core/exec.d.ts +29 -0
- package/dist/core/exec.d.ts.map +1 -0
- package/dist/core/exec.js +75 -0
- package/dist/core/exec.js.map +1 -0
- package/dist/core/experimental.d.ts +2 -0
- package/dist/core/experimental.d.ts.map +1 -0
- package/dist/core/experimental.js +5 -0
- package/dist/core/experimental.js.map +1 -0
- package/dist/core/export-html/ansi-to-html.d.ts +22 -0
- package/dist/core/export-html/ansi-to-html.d.ts.map +1 -0
- package/dist/core/export-html/ansi-to-html.js +249 -0
- package/dist/core/export-html/ansi-to-html.js.map +1 -0
- package/dist/core/export-html/index.d.ts +37 -0
- package/dist/core/export-html/index.d.ts.map +1 -0
- package/dist/core/export-html/index.js +226 -0
- package/dist/core/export-html/index.js.map +1 -0
- package/dist/core/export-html/template.css +1066 -0
- package/dist/core/export-html/template.html +55 -0
- package/dist/core/export-html/template.js +1864 -0
- package/dist/core/export-html/tool-renderer.d.ts +34 -0
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -0
- package/dist/core/export-html/tool-renderer.js +108 -0
- package/dist/core/export-html/tool-renderer.js.map +1 -0
- package/dist/core/export-html/vendor/highlight.min.js +1213 -0
- package/dist/core/export-html/vendor/marked.min.js +78 -0
- package/dist/core/extensions/index.d.ts +12 -0
- package/dist/core/extensions/index.d.ts.map +1 -0
- package/dist/core/extensions/index.js +9 -0
- package/dist/core/extensions/index.js.map +1 -0
- package/dist/core/extensions/loader.d.ts +23 -0
- package/dist/core/extensions/loader.d.ts.map +1 -0
- package/dist/core/extensions/loader.js +581 -0
- package/dist/core/extensions/loader.js.map +1 -0
- package/dist/core/extensions/runner.d.ts +173 -0
- package/dist/core/extensions/runner.d.ts.map +1 -0
- package/dist/core/extensions/runner.js +967 -0
- package/dist/core/extensions/runner.js.map +1 -0
- package/dist/core/extensions/types.d.ts +1288 -0
- package/dist/core/extensions/types.d.ts.map +1 -0
- package/dist/core/extensions/types.js +45 -0
- package/dist/core/extensions/types.js.map +1 -0
- package/dist/core/extensions/wrapper.d.ts +20 -0
- package/dist/core/extensions/wrapper.d.ts.map +1 -0
- package/dist/core/extensions/wrapper.js +41 -0
- package/dist/core/extensions/wrapper.js.map +1 -0
- package/dist/core/footer-data-provider.d.ts +64 -0
- package/dist/core/footer-data-provider.d.ts.map +1 -0
- package/dist/core/footer-data-provider.js +338 -0
- package/dist/core/footer-data-provider.js.map +1 -0
- package/dist/core/graph-rail-store.d.ts +94 -0
- package/dist/core/graph-rail-store.d.ts.map +1 -0
- package/dist/core/graph-rail-store.js +86 -0
- package/dist/core/graph-rail-store.js.map +1 -0
- package/dist/core/http-dispatcher.d.ts +22 -0
- package/dist/core/http-dispatcher.d.ts.map +1 -0
- package/dist/core/http-dispatcher.js +96 -0
- package/dist/core/http-dispatcher.js.map +1 -0
- package/dist/core/index.d.ts +13 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +13 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/keybindings.d.ts +395 -0
- package/dist/core/keybindings.d.ts.map +1 -0
- package/dist/core/keybindings.js +297 -0
- package/dist/core/keybindings.js.map +1 -0
- package/dist/core/messages.d.ts +77 -0
- package/dist/core/messages.d.ts.map +1 -0
- package/dist/core/messages.js +123 -0
- package/dist/core/messages.js.map +1 -0
- package/dist/core/model-config.d.ts +566 -0
- package/dist/core/model-config.d.ts.map +1 -0
- package/dist/core/model-config.js +253 -0
- package/dist/core/model-config.js.map +1 -0
- package/dist/core/model-registry.d.ts +45 -0
- package/dist/core/model-registry.d.ts.map +1 -0
- package/dist/core/model-registry.js +107 -0
- package/dist/core/model-registry.js.map +1 -0
- package/dist/core/model-resolver.d.ts +127 -0
- package/dist/core/model-resolver.d.ts.map +1 -0
- package/dist/core/model-resolver.js +541 -0
- package/dist/core/model-resolver.js.map +1 -0
- package/dist/core/model-runtime.d.ts +97 -0
- package/dist/core/model-runtime.d.ts.map +1 -0
- package/dist/core/model-runtime.js +594 -0
- package/dist/core/model-runtime.js.map +1 -0
- package/dist/core/models-dev-catalog.d.ts +63 -0
- package/dist/core/models-dev-catalog.d.ts.map +1 -0
- package/dist/core/models-dev-catalog.js +105 -0
- package/dist/core/models-dev-catalog.js.map +1 -0
- package/dist/core/models-store.d.ts +22 -0
- package/dist/core/models-store.d.ts.map +1 -0
- package/dist/core/models-store.js +114 -0
- package/dist/core/models-store.js.map +1 -0
- package/dist/core/observatory-cache.d.ts +16 -0
- package/dist/core/observatory-cache.d.ts.map +1 -0
- package/dist/core/observatory-cache.js +55 -0
- package/dist/core/observatory-cache.js.map +1 -0
- package/dist/core/output-guard.d.ts +7 -0
- package/dist/core/output-guard.d.ts.map +1 -0
- package/dist/core/output-guard.js +89 -0
- package/dist/core/output-guard.js.map +1 -0
- package/dist/core/package-manager.d.ts +213 -0
- package/dist/core/package-manager.d.ts.map +1 -0
- package/dist/core/package-manager.js +2169 -0
- package/dist/core/package-manager.js.map +1 -0
- package/dist/core/pi-manifest.d.ts +8 -0
- package/dist/core/pi-manifest.d.ts.map +1 -0
- package/dist/core/pi-manifest.js +25 -0
- package/dist/core/pi-manifest.js.map +1 -0
- package/dist/core/project-trust.d.ts +15 -0
- package/dist/core/project-trust.d.ts.map +1 -0
- package/dist/core/project-trust.js +59 -0
- package/dist/core/project-trust.js.map +1 -0
- package/dist/core/prompt-templates.d.ts +54 -0
- package/dist/core/prompt-templates.d.ts.map +1 -0
- package/dist/core/prompt-templates.js +236 -0
- package/dist/core/prompt-templates.js.map +1 -0
- package/dist/core/provider-attribution.d.ts +4 -0
- package/dist/core/provider-attribution.d.ts.map +1 -0
- package/dist/core/provider-attribution.js +73 -0
- package/dist/core/provider-attribution.js.map +1 -0
- package/dist/core/provider-composer.d.ts +56 -0
- package/dist/core/provider-composer.d.ts.map +1 -0
- package/dist/core/provider-composer.js +395 -0
- package/dist/core/provider-composer.js.map +1 -0
- package/dist/core/radius.d.ts +2 -0
- package/dist/core/radius.d.ts.map +1 -0
- package/dist/core/radius.js +2 -0
- package/dist/core/radius.js.map +1 -0
- package/dist/core/remote-catalog-provider.d.ts +5 -0
- package/dist/core/remote-catalog-provider.d.ts.map +1 -0
- package/dist/core/remote-catalog-provider.js +106 -0
- package/dist/core/remote-catalog-provider.js.map +1 -0
- package/dist/core/resolve-config-value.d.ts +30 -0
- package/dist/core/resolve-config-value.d.ts.map +1 -0
- package/dist/core/resolve-config-value.js +247 -0
- package/dist/core/resolve-config-value.js.map +1 -0
- package/dist/core/resource-loader.d.ts +221 -0
- package/dist/core/resource-loader.d.ts.map +1 -0
- package/dist/core/resource-loader.js +874 -0
- package/dist/core/resource-loader.js.map +1 -0
- package/dist/core/runtime-credentials.d.ts +15 -0
- package/dist/core/runtime-credentials.d.ts.map +1 -0
- package/dist/core/runtime-credentials.js +39 -0
- package/dist/core/runtime-credentials.js.map +1 -0
- package/dist/core/sdk.d.ts +106 -0
- package/dist/core/sdk.d.ts.map +1 -0
- package/dist/core/sdk.js +267 -0
- package/dist/core/sdk.js.map +1 -0
- package/dist/core/session-cwd.d.ts +19 -0
- package/dist/core/session-cwd.d.ts.map +1 -0
- package/dist/core/session-cwd.js +38 -0
- package/dist/core/session-cwd.js.map +1 -0
- package/dist/core/session-manager.d.ts +356 -0
- package/dist/core/session-manager.d.ts.map +1 -0
- package/dist/core/session-manager.js +1340 -0
- package/dist/core/session-manager.js.map +1 -0
- package/dist/core/settings-manager.d.ts +304 -0
- package/dist/core/settings-manager.d.ts.map +1 -0
- package/dist/core/settings-manager.js +912 -0
- package/dist/core/settings-manager.js.map +1 -0
- package/dist/core/skills.d.ts +60 -0
- package/dist/core/skills.d.ts.map +1 -0
- package/dist/core/skills.js +387 -0
- package/dist/core/skills.js.map +1 -0
- package/dist/core/slash-commands.d.ts +21 -0
- package/dist/core/slash-commands.d.ts.map +1 -0
- package/dist/core/slash-commands.js +39 -0
- package/dist/core/slash-commands.js.map +1 -0
- package/dist/core/source-info.d.ts +18 -0
- package/dist/core/source-info.d.ts.map +1 -0
- package/dist/core/source-info.js +19 -0
- package/dist/core/source-info.js.map +1 -0
- package/dist/core/system-prompt.d.ts +28 -0
- package/dist/core/system-prompt.d.ts.map +1 -0
- package/dist/core/system-prompt.js +130 -0
- package/dist/core/system-prompt.js.map +1 -0
- package/dist/core/telemetry.d.ts +3 -0
- package/dist/core/telemetry.d.ts.map +1 -0
- package/dist/core/telemetry.js +10 -0
- package/dist/core/telemetry.js.map +1 -0
- package/dist/core/timings.d.ts +6 -0
- package/dist/core/timings.d.ts.map +1 -0
- package/dist/core/timings.js +42 -0
- package/dist/core/timings.js.map +1 -0
- package/dist/core/tools/bash.d.ts +70 -0
- package/dist/core/tools/bash.d.ts.map +1 -0
- package/dist/core/tools/bash.js +389 -0
- package/dist/core/tools/bash.js.map +1 -0
- package/dist/core/tools/edit-diff.d.ts +106 -0
- package/dist/core/tools/edit-diff.d.ts.map +1 -0
- package/dist/core/tools/edit-diff.js +424 -0
- package/dist/core/tools/edit-diff.js.map +1 -0
- package/dist/core/tools/edit.d.ts +51 -0
- package/dist/core/tools/edit.d.ts.map +1 -0
- package/dist/core/tools/edit.js +284 -0
- package/dist/core/tools/edit.js.map +1 -0
- package/dist/core/tools/file-mutation-queue.d.ts +6 -0
- package/dist/core/tools/file-mutation-queue.d.ts.map +1 -0
- package/dist/core/tools/file-mutation-queue.js +52 -0
- package/dist/core/tools/file-mutation-queue.js.map +1 -0
- package/dist/core/tools/find.d.ts +38 -0
- package/dist/core/tools/find.d.ts.map +1 -0
- package/dist/core/tools/find.js +298 -0
- package/dist/core/tools/find.js.map +1 -0
- package/dist/core/tools/grep.d.ts +37 -0
- package/dist/core/tools/grep.d.ts.map +1 -0
- package/dist/core/tools/grep.js +304 -0
- package/dist/core/tools/grep.js.map +1 -0
- package/dist/core/tools/index.d.ts +43 -0
- package/dist/core/tools/index.d.ts.map +1 -0
- package/dist/core/tools/index.js +129 -0
- package/dist/core/tools/index.js.map +1 -0
- package/dist/core/tools/ls.d.ts +37 -0
- package/dist/core/tools/ls.d.ts.map +1 -0
- package/dist/core/tools/ls.js +167 -0
- package/dist/core/tools/ls.js.map +1 -0
- package/dist/core/tools/output-accumulator.d.ts +52 -0
- package/dist/core/tools/output-accumulator.d.ts.map +1 -0
- package/dist/core/tools/output-accumulator.js +185 -0
- package/dist/core/tools/output-accumulator.js.map +1 -0
- package/dist/core/tools/path-utils.d.ts +10 -0
- package/dist/core/tools/path-utils.d.ts.map +1 -0
- package/dist/core/tools/path-utils.js +99 -0
- package/dist/core/tools/path-utils.js.map +1 -0
- package/dist/core/tools/read.d.ts +35 -0
- package/dist/core/tools/read.d.ts.map +1 -0
- package/dist/core/tools/read.js +284 -0
- package/dist/core/tools/read.js.map +1 -0
- package/dist/core/tools/render-utils.d.ts +24 -0
- package/dist/core/tools/render-utils.d.ts.map +1 -0
- package/dist/core/tools/render-utils.js +65 -0
- package/dist/core/tools/render-utils.js.map +1 -0
- package/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
- package/dist/core/tools/tool-definition-wrapper.js +36 -0
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -0
- package/dist/core/tools/truncate.d.ts +70 -0
- package/dist/core/tools/truncate.d.ts.map +1 -0
- package/dist/core/tools/truncate.js +215 -0
- package/dist/core/tools/truncate.js.map +1 -0
- package/dist/core/tools/websearch.d.ts +29 -0
- package/dist/core/tools/websearch.d.ts.map +1 -0
- package/dist/core/tools/websearch.js +145 -0
- package/dist/core/tools/websearch.js.map +1 -0
- package/dist/core/tools/write.d.ts +26 -0
- package/dist/core/tools/write.d.ts.map +1 -0
- package/dist/core/tools/write.js +197 -0
- package/dist/core/tools/write.js.map +1 -0
- package/dist/core/trust-manager.d.ts +36 -0
- package/dist/core/trust-manager.d.ts.map +1 -0
- package/dist/core/trust-manager.js +202 -0
- package/dist/core/trust-manager.js.map +1 -0
- package/dist/core/usage-totals.d.ts +19 -0
- package/dist/core/usage-totals.d.ts.map +1 -0
- package/dist/core/usage-totals.js +52 -0
- package/dist/core/usage-totals.js.map +1 -0
- package/dist/extensions/gitnexus/augment.d.ts +4 -0
- package/dist/extensions/gitnexus/augment.d.ts.map +1 -0
- package/dist/extensions/gitnexus/augment.js +60 -0
- package/dist/extensions/gitnexus/augment.js.map +1 -0
- package/dist/extensions/gitnexus/changes.d.ts +3 -0
- package/dist/extensions/gitnexus/changes.d.ts.map +1 -0
- package/dist/extensions/gitnexus/changes.js +58 -0
- package/dist/extensions/gitnexus/changes.js.map +1 -0
- package/dist/extensions/gitnexus/client.d.ts +39 -0
- package/dist/extensions/gitnexus/client.d.ts.map +1 -0
- package/dist/extensions/gitnexus/client.js +173 -0
- package/dist/extensions/gitnexus/client.js.map +1 -0
- package/dist/extensions/gitnexus/config.d.ts +25 -0
- package/dist/extensions/gitnexus/config.d.ts.map +1 -0
- package/dist/extensions/gitnexus/config.js +42 -0
- package/dist/extensions/gitnexus/config.js.map +1 -0
- package/dist/extensions/gitnexus/device-auth.d.ts +60 -0
- package/dist/extensions/gitnexus/device-auth.d.ts.map +1 -0
- package/dist/extensions/gitnexus/device-auth.js +130 -0
- package/dist/extensions/gitnexus/device-auth.js.map +1 -0
- package/dist/extensions/gitnexus/gateway.d.ts +57 -0
- package/dist/extensions/gitnexus/gateway.d.ts.map +1 -0
- package/dist/extensions/gitnexus/gateway.js +139 -0
- package/dist/extensions/gitnexus/gateway.js.map +1 -0
- package/dist/extensions/gitnexus/index.d.ts +14 -0
- package/dist/extensions/gitnexus/index.d.ts.map +1 -0
- package/dist/extensions/gitnexus/index.js +189 -0
- package/dist/extensions/gitnexus/index.js.map +1 -0
- package/dist/extensions/gitnexus/observatory.d.ts +13 -0
- package/dist/extensions/gitnexus/observatory.d.ts.map +1 -0
- package/dist/extensions/gitnexus/observatory.js +189 -0
- package/dist/extensions/gitnexus/observatory.js.map +1 -0
- package/dist/extensions/gitnexus/prompt.d.ts +11 -0
- package/dist/extensions/gitnexus/prompt.d.ts.map +1 -0
- package/dist/extensions/gitnexus/prompt.js +50 -0
- package/dist/extensions/gitnexus/prompt.js.map +1 -0
- package/dist/extensions/gitnexus/render.d.ts +61 -0
- package/dist/extensions/gitnexus/render.d.ts.map +1 -0
- package/dist/extensions/gitnexus/render.js +391 -0
- package/dist/extensions/gitnexus/render.js.map +1 -0
- package/dist/extensions/gitnexus/resolve.d.ts +22 -0
- package/dist/extensions/gitnexus/resolve.d.ts.map +1 -0
- package/dist/extensions/gitnexus/resolve.js +54 -0
- package/dist/extensions/gitnexus/resolve.js.map +1 -0
- package/dist/extensions/gitnexus/skills/gitnexus-debugging/SKILL.md +89 -0
- package/dist/extensions/gitnexus/skills/gitnexus-debugging/mcp.json +8 -0
- package/dist/extensions/gitnexus/skills/gitnexus-exploring/SKILL.md +78 -0
- package/dist/extensions/gitnexus/skills/gitnexus-exploring/mcp.json +8 -0
- package/dist/extensions/gitnexus/skills/gitnexus-guide/SKILL.md +64 -0
- package/dist/extensions/gitnexus/skills/gitnexus-guide/mcp.json +8 -0
- package/dist/extensions/gitnexus/skills/gitnexus-impact-analysis/SKILL.md +97 -0
- package/dist/extensions/gitnexus/skills/gitnexus-impact-analysis/mcp.json +8 -0
- package/dist/extensions/gitnexus/skills/gitnexus-pr-review/SKILL.md +163 -0
- package/dist/extensions/gitnexus/skills/gitnexus-refactoring/SKILL.md +121 -0
- package/dist/extensions/gitnexus/skills/gitnexus-refactoring/mcp.json +8 -0
- package/dist/extensions/gitnexus/tools.d.ts +15 -0
- package/dist/extensions/gitnexus/tools.d.ts.map +1 -0
- package/dist/extensions/gitnexus/tools.js +187 -0
- package/dist/extensions/gitnexus/tools.js.map +1 -0
- package/dist/extensions/index.d.ts +3 -0
- package/dist/extensions/index.d.ts.map +1 -0
- package/dist/extensions/index.js +10 -0
- package/dist/extensions/index.js.map +1 -0
- package/dist/extensions/llama/client.d.ts +61 -0
- package/dist/extensions/llama/client.d.ts.map +1 -0
- package/dist/extensions/llama/client.js +302 -0
- package/dist/extensions/llama/client.js.map +1 -0
- package/dist/extensions/llama/huggingface.d.ts +23 -0
- package/dist/extensions/llama/huggingface.d.ts.map +1 -0
- package/dist/extensions/llama/huggingface.js +141 -0
- package/dist/extensions/llama/huggingface.js.map +1 -0
- package/dist/extensions/llama/index.d.ts +3 -0
- package/dist/extensions/llama/index.d.ts.map +1 -0
- package/dist/extensions/llama/index.js +217 -0
- package/dist/extensions/llama/index.js.map +1 -0
- package/dist/extensions/llama/provider.d.ts +10 -0
- package/dist/extensions/llama/provider.d.ts.map +1 -0
- package/dist/extensions/llama/provider.js +121 -0
- package/dist/extensions/llama/provider.js.map +1 -0
- package/dist/extensions/llama/ui.d.ts +42 -0
- package/dist/extensions/llama/ui.d.ts.map +1 -0
- package/dist/extensions/llama/ui.js +416 -0
- package/dist/extensions/llama/ui.js.map +1 -0
- package/dist/extensions/mcp/client.d.ts +86 -0
- package/dist/extensions/mcp/client.d.ts.map +1 -0
- package/dist/extensions/mcp/client.js +275 -0
- package/dist/extensions/mcp/client.js.map +1 -0
- package/dist/extensions/mcp/config.d.ts +41 -0
- package/dist/extensions/mcp/config.d.ts.map +1 -0
- package/dist/extensions/mcp/config.js +85 -0
- package/dist/extensions/mcp/config.js.map +1 -0
- package/dist/extensions/mcp/index.d.ts +18 -0
- package/dist/extensions/mcp/index.d.ts.map +1 -0
- package/dist/extensions/mcp/index.js +95 -0
- package/dist/extensions/mcp/index.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +69874 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +12 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +792 -0
- package/dist/main.js.map +1 -0
- package/dist/migrations.d.ts +33 -0
- package/dist/migrations.d.ts.map +1 -0
- package/dist/migrations.js +281 -0
- package/dist/migrations.js.map +1 -0
- package/dist/modes/index.d.ts +10 -0
- package/dist/modes/index.d.ts.map +1 -0
- package/dist/modes/index.js +8 -0
- package/dist/modes/index.js.map +1 -0
- package/dist/modes/interactive/components/assistant-message.d.ts +32 -0
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/assistant-message.js +177 -0
- package/dist/modes/interactive/components/assistant-message.js.map +1 -0
- package/dist/modes/interactive/components/bash-execution.d.ts +34 -0
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -0
- package/dist/modes/interactive/components/bash-execution.js +175 -0
- package/dist/modes/interactive/components/bash-execution.js.map +1 -0
- package/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -0
- package/dist/modes/interactive/components/bordered-loader.js +54 -0
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -0
- package/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/branch-summary-message.js +44 -0
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -0
- package/dist/modes/interactive/components/command-palette.d.ts +12 -0
- package/dist/modes/interactive/components/command-palette.d.ts.map +1 -0
- package/dist/modes/interactive/components/command-palette.js +67 -0
- package/dist/modes/interactive/components/command-palette.js.map +1 -0
- package/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/compaction-summary-message.js +45 -0
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -0
- package/dist/modes/interactive/components/config-selector.d.ts +102 -0
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/config-selector.js +761 -0
- package/dist/modes/interactive/components/config-selector.js.map +1 -0
- package/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
- package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -0
- package/dist/modes/interactive/components/countdown-timer.js +33 -0
- package/dist/modes/interactive/components/countdown-timer.js.map +1 -0
- package/dist/modes/interactive/components/custom-editor.d.ts +23 -0
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -0
- package/dist/modes/interactive/components/custom-editor.js +85 -0
- package/dist/modes/interactive/components/custom-editor.js.map +1 -0
- package/dist/modes/interactive/components/custom-entry.d.ts +19 -0
- package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -0
- package/dist/modes/interactive/components/custom-entry.js +52 -0
- package/dist/modes/interactive/components/custom-entry.js.map +1 -0
- package/dist/modes/interactive/components/custom-message.d.ts +22 -0
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/custom-message.js +87 -0
- package/dist/modes/interactive/components/custom-message.js.map +1 -0
- package/dist/modes/interactive/components/dialog-frame.d.ts +37 -0
- package/dist/modes/interactive/components/dialog-frame.d.ts.map +1 -0
- package/dist/modes/interactive/components/dialog-frame.js +53 -0
- package/dist/modes/interactive/components/dialog-frame.js.map +1 -0
- package/dist/modes/interactive/components/diff.d.ts +12 -0
- package/dist/modes/interactive/components/diff.d.ts.map +1 -0
- package/dist/modes/interactive/components/diff.js +133 -0
- package/dist/modes/interactive/components/diff.js.map +1 -0
- package/dist/modes/interactive/components/dynamic-border.d.ts +19 -0
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -0
- package/dist/modes/interactive/components/dynamic-border.js +36 -0
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -0
- package/dist/modes/interactive/components/extension-editor.d.ts +21 -0
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-editor.js +98 -0
- package/dist/modes/interactive/components/extension-editor.js.map +1 -0
- package/dist/modes/interactive/components/extension-input.d.ts +23 -0
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-input.js +61 -0
- package/dist/modes/interactive/components/extension-input.js.map +1 -0
- package/dist/modes/interactive/components/extension-selector.d.ts +26 -0
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/extension-selector.js +83 -0
- package/dist/modes/interactive/components/extension-selector.js.map +1 -0
- package/dist/modes/interactive/components/first-time-setup.d.ts +25 -0
- package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -0
- package/dist/modes/interactive/components/first-time-setup.js +103 -0
- package/dist/modes/interactive/components/first-time-setup.js.map +1 -0
- package/dist/modes/interactive/components/footer.d.ts +30 -0
- package/dist/modes/interactive/components/footer.d.ts.map +1 -0
- package/dist/modes/interactive/components/footer.js +108 -0
- package/dist/modes/interactive/components/footer.js.map +1 -0
- package/dist/modes/interactive/components/graph-rail.d.ts +44 -0
- package/dist/modes/interactive/components/graph-rail.d.ts.map +1 -0
- package/dist/modes/interactive/components/graph-rail.js +332 -0
- package/dist/modes/interactive/components/graph-rail.js.map +1 -0
- package/dist/modes/interactive/components/index.d.ts +33 -0
- package/dist/modes/interactive/components/index.d.ts.map +1 -0
- package/dist/modes/interactive/components/index.js +34 -0
- package/dist/modes/interactive/components/index.js.map +1 -0
- package/dist/modes/interactive/components/keybinding-hints.d.ts +13 -0
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -0
- package/dist/modes/interactive/components/keybinding-hints.js +36 -0
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -0
- package/dist/modes/interactive/components/landing-panel.d.ts +14 -0
- package/dist/modes/interactive/components/landing-panel.d.ts.map +1 -0
- package/dist/modes/interactive/components/landing-panel.js +141 -0
- package/dist/modes/interactive/components/landing-panel.js.map +1 -0
- package/dist/modes/interactive/components/login-dialog.d.ts +52 -0
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -0
- package/dist/modes/interactive/components/login-dialog.js +188 -0
- package/dist/modes/interactive/components/login-dialog.js.map +1 -0
- package/dist/modes/interactive/components/markdown-transform.d.ts +3 -0
- package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -0
- package/dist/modes/interactive/components/markdown-transform.js +19 -0
- package/dist/modes/interactive/components/markdown-transform.js.map +1 -0
- package/dist/modes/interactive/components/mermaid.d.ts +11 -0
- package/dist/modes/interactive/components/mermaid.d.ts.map +1 -0
- package/dist/modes/interactive/components/mermaid.js +80 -0
- package/dist/modes/interactive/components/mermaid.js.map +1 -0
- package/dist/modes/interactive/components/message-layout.d.ts +4 -0
- package/dist/modes/interactive/components/message-layout.d.ts.map +1 -0
- package/dist/modes/interactive/components/message-layout.js +4 -0
- package/dist/modes/interactive/components/message-layout.js.map +1 -0
- package/dist/modes/interactive/components/model-selector.d.ts +54 -0
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/model-selector.js +325 -0
- package/dist/modes/interactive/components/model-selector.js.map +1 -0
- package/dist/modes/interactive/components/nexus-logo.d.ts +25 -0
- package/dist/modes/interactive/components/nexus-logo.d.ts.map +1 -0
- package/dist/modes/interactive/components/nexus-logo.js +115 -0
- package/dist/modes/interactive/components/nexus-logo.js.map +1 -0
- package/dist/modes/interactive/components/oauth-selector.d.ts +33 -0
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/oauth-selector.js +163 -0
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -0
- package/dist/modes/interactive/components/panel.d.ts +7 -0
- package/dist/modes/interactive/components/panel.d.ts.map +1 -0
- package/dist/modes/interactive/components/panel.js +18 -0
- package/dist/modes/interactive/components/panel.js.map +1 -0
- package/dist/modes/interactive/components/response-separator.d.ts +13 -0
- package/dist/modes/interactive/components/response-separator.d.ts.map +1 -0
- package/dist/modes/interactive/components/response-separator.js +23 -0
- package/dist/modes/interactive/components/response-separator.js.map +1 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +46 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/scoped-models-selector.js +328 -0
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector-search.js +155 -0
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -0
- package/dist/modes/interactive/components/session-selector.d.ts +99 -0
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/session-selector.js +887 -0
- package/dist/modes/interactive/components/session-selector.js.map +1 -0
- package/dist/modes/interactive/components/settings-selector.d.ts +81 -0
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/settings-selector.js +613 -0
- package/dist/modes/interactive/components/settings-selector.js.map +1 -0
- package/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/show-images-selector.js +39 -0
- package/dist/modes/interactive/components/show-images-selector.js.map +1 -0
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/skill-invocation-message.js +47 -0
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -0
- package/dist/modes/interactive/components/status-indicator.d.ts +37 -0
- package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -0
- package/dist/modes/interactive/components/status-indicator.js +116 -0
- package/dist/modes/interactive/components/status-indicator.js.map +1 -0
- package/dist/modes/interactive/components/theme-selector.d.ts +11 -0
- package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/theme-selector.js +50 -0
- package/dist/modes/interactive/components/theme-selector.js.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.js +52 -0
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -0
- package/dist/modes/interactive/components/tool-execution.d.ts +70 -0
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -0
- package/dist/modes/interactive/components/tool-execution.js +384 -0
- package/dist/modes/interactive/components/tool-execution.js.map +1 -0
- package/dist/modes/interactive/components/tree-selector.d.ts +94 -0
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/tree-selector.js +1245 -0
- package/dist/modes/interactive/components/tree-selector.js.map +1 -0
- package/dist/modes/interactive/components/trust-selector.d.ts +23 -0
- package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/trust-selector.js +91 -0
- package/dist/modes/interactive/components/trust-selector.js.map +1 -0
- package/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/user-message-selector.js +114 -0
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -0
- package/dist/modes/interactive/components/user-message.d.ts +17 -0
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/user-message.js +51 -0
- package/dist/modes/interactive/components/user-message.js.map +1 -0
- package/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
- package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -0
- package/dist/modes/interactive/components/visual-truncate.js +33 -0
- package/dist/modes/interactive/components/visual-truncate.js.map +1 -0
- package/dist/modes/interactive/external-editor.d.ts +12 -0
- package/dist/modes/interactive/external-editor.d.ts.map +1 -0
- package/dist/modes/interactive/external-editor.js +37 -0
- package/dist/modes/interactive/external-editor.js.map +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts +436 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-mode.js +5462 -0
- package/dist/modes/interactive/interactive-mode.js.map +1 -0
- package/dist/modes/interactive/model-search.d.ts +12 -0
- package/dist/modes/interactive/model-search.d.ts.map +1 -0
- package/dist/modes/interactive/model-search.js +15 -0
- package/dist/modes/interactive/model-search.js.map +1 -0
- package/dist/modes/interactive/theme/brand.d.ts +38 -0
- package/dist/modes/interactive/theme/brand.d.ts.map +1 -0
- package/dist/modes/interactive/theme/brand.js +108 -0
- package/dist/modes/interactive/theme/brand.js.map +1 -0
- package/dist/modes/interactive/theme/catppuccin-mocha.json +66 -0
- package/dist/modes/interactive/theme/dark.json +93 -0
- package/dist/modes/interactive/theme/dracula.json +66 -0
- package/dist/modes/interactive/theme/ember.json +85 -0
- package/dist/modes/interactive/theme/gruvbox.json +66 -0
- package/dist/modes/interactive/theme/light.json +91 -0
- package/dist/modes/interactive/theme/nord.json +66 -0
- package/dist/modes/interactive/theme/theme-controller.d.ts +32 -0
- package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -0
- package/dist/modes/interactive/theme/theme-controller.js +111 -0
- package/dist/modes/interactive/theme/theme-controller.js.map +1 -0
- package/dist/modes/interactive/theme/theme-schema.json +344 -0
- package/dist/modes/interactive/theme/theme.d.ts +129 -0
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -0
- package/dist/modes/interactive/theme/theme.js +1101 -0
- package/dist/modes/interactive/theme/theme.js.map +1 -0
- package/dist/modes/interactive/theme/tokyonight.json +66 -0
- package/dist/modes/json-event.d.ts +28 -0
- package/dist/modes/json-event.d.ts.map +1 -0
- package/dist/modes/json-event.js +12 -0
- package/dist/modes/json-event.js.map +1 -0
- package/dist/modes/print-mode.d.ts +28 -0
- package/dist/modes/print-mode.d.ts.map +1 -0
- package/dist/modes/print-mode.js +153 -0
- package/dist/modes/print-mode.js.map +1 -0
- package/dist/modes/rpc/jsonl.d.ts +17 -0
- package/dist/modes/rpc/jsonl.d.ts.map +1 -0
- package/dist/modes/rpc/jsonl.js +49 -0
- package/dist/modes/rpc/jsonl.js.map +1 -0
- package/dist/modes/rpc/rpc-client.d.ts +247 -0
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-client.js +488 -0
- package/dist/modes/rpc/rpc-client.js.map +1 -0
- package/dist/modes/rpc/rpc-mode.d.ts +20 -0
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-mode.js +654 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -0
- package/dist/modes/rpc/rpc-types.d.ts +457 -0
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -0
- package/dist/modes/rpc/rpc-types.js +8 -0
- package/dist/modes/rpc/rpc-types.js.map +1 -0
- package/dist/package-manager-cli.d.ts +8 -0
- package/dist/package-manager-cli.d.ts.map +1 -0
- package/dist/package-manager-cli.js +777 -0
- package/dist/package-manager-cli.js.map +1 -0
- package/dist/rpc-entry.d.ts +3 -0
- package/dist/rpc-entry.d.ts.map +1 -0
- package/dist/rpc-entry.js +69740 -0
- package/dist/rpc-entry.js.map +1 -0
- package/dist/utils/abort.d.ts +5 -0
- package/dist/utils/abort.d.ts.map +1 -0
- package/dist/utils/abort.js +48 -0
- package/dist/utils/abort.js.map +1 -0
- package/dist/utils/ansi.d.ts +2 -0
- package/dist/utils/ansi.d.ts.map +1 -0
- package/dist/utils/ansi.js +52 -0
- package/dist/utils/ansi.js.map +1 -0
- package/dist/utils/child-process.d.ts +18 -0
- package/dist/utils/child-process.d.ts.map +1 -0
- package/dist/utils/child-process.js +106 -0
- package/dist/utils/child-process.js.map +1 -0
- package/dist/utils/clipboard-image.d.ts +11 -0
- package/dist/utils/clipboard-image.d.ts.map +1 -0
- package/dist/utils/clipboard-image.js +245 -0
- package/dist/utils/clipboard-image.js.map +1 -0
- package/dist/utils/clipboard-native.d.ts +11 -0
- package/dist/utils/clipboard-native.d.ts.map +1 -0
- package/dist/utils/clipboard-native.js +20 -0
- package/dist/utils/clipboard-native.js.map +1 -0
- package/dist/utils/clipboard.d.ts +4 -0
- package/dist/utils/clipboard.d.ts.map +1 -0
- package/dist/utils/clipboard.js +161 -0
- package/dist/utils/clipboard.js.map +1 -0
- package/dist/utils/deprecation.d.ts +4 -0
- package/dist/utils/deprecation.d.ts.map +1 -0
- package/dist/utils/deprecation.js +13 -0
- package/dist/utils/deprecation.js.map +1 -0
- package/dist/utils/exif-orientation.d.ts +5 -0
- package/dist/utils/exif-orientation.d.ts.map +1 -0
- package/dist/utils/exif-orientation.js +158 -0
- package/dist/utils/exif-orientation.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +8 -0
- package/dist/utils/frontmatter.d.ts.map +1 -0
- package/dist/utils/frontmatter.js +26 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/dist/utils/fs-watch.d.ts +5 -0
- package/dist/utils/fs-watch.d.ts.map +1 -0
- package/dist/utils/fs-watch.js +25 -0
- package/dist/utils/fs-watch.js.map +1 -0
- package/dist/utils/git.d.ts +26 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +195 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/html.d.ts +7 -0
- package/dist/utils/html.d.ts.map +1 -0
- package/dist/utils/html.js +40 -0
- package/dist/utils/html.js.map +1 -0
- package/dist/utils/image-convert.d.ts +10 -0
- package/dist/utils/image-convert.d.ts.map +1 -0
- package/dist/utils/image-convert.js +45 -0
- package/dist/utils/image-convert.js.map +1 -0
- package/dist/utils/image-process.d.ts +18 -0
- package/dist/utils/image-process.d.ts.map +1 -0
- package/dist/utils/image-process.js +83 -0
- package/dist/utils/image-process.js.map +1 -0
- package/dist/utils/image-resize-core.d.ts +30 -0
- package/dist/utils/image-resize-core.d.ts.map +1 -0
- package/dist/utils/image-resize-core.js +124 -0
- package/dist/utils/image-resize-core.js.map +1 -0
- package/dist/utils/image-resize-worker.d.ts +2 -0
- package/dist/utils/image-resize-worker.d.ts.map +1 -0
- package/dist/utils/image-resize-worker.js +31 -0
- package/dist/utils/image-resize-worker.js.map +1 -0
- package/dist/utils/image-resize.d.ts +16 -0
- package/dist/utils/image-resize.d.ts.map +1 -0
- package/dist/utils/image-resize.js +97 -0
- package/dist/utils/image-resize.js.map +1 -0
- package/dist/utils/json.d.ts +3 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +7 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/management-http.d.ts +23 -0
- package/dist/utils/management-http.d.ts.map +1 -0
- package/dist/utils/management-http.js +50 -0
- package/dist/utils/management-http.js.map +1 -0
- package/dist/utils/mime.d.ts +3 -0
- package/dist/utils/mime.d.ts.map +1 -0
- package/dist/utils/mime.js +110 -0
- package/dist/utils/mime.js.map +1 -0
- package/dist/utils/open-browser.d.ts +9 -0
- package/dist/utils/open-browser.d.ts.map +1 -0
- package/dist/utils/open-browser.js +22 -0
- package/dist/utils/open-browser.js.map +1 -0
- package/dist/utils/paths.d.ts +34 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +114 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/photon.d.ts +21 -0
- package/dist/utils/photon.d.ts.map +1 -0
- package/dist/utils/photon.js +121 -0
- package/dist/utils/photon.js.map +1 -0
- package/dist/utils/pi-user-agent.d.ts +2 -0
- package/dist/utils/pi-user-agent.d.ts.map +1 -0
- package/dist/utils/pi-user-agent.js +5 -0
- package/dist/utils/pi-user-agent.js.map +1 -0
- package/dist/utils/shell.d.ts +31 -0
- package/dist/utils/shell.d.ts.map +1 -0
- package/dist/utils/shell.js +202 -0
- package/dist/utils/shell.js.map +1 -0
- package/dist/utils/sleep.d.ts +5 -0
- package/dist/utils/sleep.d.ts.map +1 -0
- package/dist/utils/sleep.js +17 -0
- package/dist/utils/sleep.js.map +1 -0
- package/dist/utils/syntax-highlight.d.ts +12 -0
- package/dist/utils/syntax-highlight.d.ts.map +1 -0
- package/dist/utils/syntax-highlight.js +118 -0
- package/dist/utils/syntax-highlight.js.map +1 -0
- package/dist/utils/tool-result-images.d.ts +19 -0
- package/dist/utils/tool-result-images.d.ts.map +1 -0
- package/dist/utils/tool-result-images.js +45 -0
- package/dist/utils/tool-result-images.js.map +1 -0
- package/dist/utils/tools-manager.d.ts +3 -0
- package/dist/utils/tools-manager.d.ts.map +1 -0
- package/dist/utils/tools-manager.js +326 -0
- package/dist/utils/tools-manager.js.map +1 -0
- package/dist/utils/version-check.d.ts +19 -0
- package/dist/utils/version-check.d.ts.map +1 -0
- package/dist/utils/version-check.js +98 -0
- package/dist/utils/version-check.js.map +1 -0
- package/dist/utils/windows-self-update.d.ts +3 -0
- package/dist/utils/windows-self-update.d.ts.map +1 -0
- package/dist/utils/windows-self-update.js +77 -0
- package/dist/utils/windows-self-update.js.map +1 -0
- package/docs/compaction.md +401 -0
- package/docs/containerization.md +111 -0
- package/docs/custom-provider.md +774 -0
- package/docs/development.md +71 -0
- package/docs/docs.json +156 -0
- package/docs/environment-variables.md +98 -0
- package/docs/extensions.md +2987 -0
- package/docs/images/doom-extension.png +0 -0
- package/docs/images/exy.png +0 -0
- package/docs/images/interactive-mode.png +0 -0
- package/docs/images/tree-view.png +0 -0
- package/docs/index.md +84 -0
- package/docs/json.md +91 -0
- package/docs/keybindings.md +226 -0
- package/docs/llama-cpp.md +99 -0
- package/docs/models.md +565 -0
- package/docs/packages.md +228 -0
- package/docs/prompt-templates.md +96 -0
- package/docs/providers.md +310 -0
- package/docs/quickstart.md +167 -0
- package/docs/rpc.md +1578 -0
- package/docs/sdk.md +1205 -0
- package/docs/security.md +59 -0
- package/docs/session-format.md +438 -0
- package/docs/sessions.md +145 -0
- package/docs/settings.md +322 -0
- package/docs/shell-aliases.md +13 -0
- package/docs/skills.md +231 -0
- package/docs/terminal-setup.md +142 -0
- package/docs/termux.md +127 -0
- package/docs/themes.md +299 -0
- package/docs/tmux.md +63 -0
- package/docs/tui.md +942 -0
- package/docs/usage.md +305 -0
- package/docs/windows.md +17 -0
- package/examples/README.md +25 -0
- package/examples/extensions/README.md +213 -0
- package/examples/extensions/auto-commit-on-exit.ts +49 -0
- package/examples/extensions/bash-spawn-hook.ts +30 -0
- package/examples/extensions/bookmark.ts +50 -0
- package/examples/extensions/border-status-editor.ts +150 -0
- package/examples/extensions/built-in-tool-renderer.ts +249 -0
- package/examples/extensions/claude-rules.ts +86 -0
- package/examples/extensions/commands.ts +72 -0
- package/examples/extensions/confirm-destructive.ts +59 -0
- package/examples/extensions/custom-compaction.ts +117 -0
- package/examples/extensions/custom-footer.ts +64 -0
- package/examples/extensions/custom-header.ts +73 -0
- package/examples/extensions/custom-provider-anthropic/index.ts +611 -0
- package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
- package/examples/extensions/custom-provider-anthropic/package.json +19 -0
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +405 -0
- package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
- package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -0
- package/examples/extensions/dirty-repo-guard.ts +56 -0
- package/examples/extensions/doom-overlay/README.md +46 -0
- package/examples/extensions/doom-overlay/doom/build/doom.js +21 -0
- package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
- package/examples/extensions/doom-overlay/doom/build.sh +152 -0
- package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -0
- package/examples/extensions/doom-overlay/doom-component.ts +132 -0
- package/examples/extensions/doom-overlay/doom-engine.ts +173 -0
- package/examples/extensions/doom-overlay/doom-keys.ts +104 -0
- package/examples/extensions/doom-overlay/index.ts +74 -0
- package/examples/extensions/doom-overlay/wad-finder.ts +55 -0
- package/examples/extensions/dynamic-resources/SKILL.md +8 -0
- package/examples/extensions/dynamic-resources/dynamic.json +79 -0
- package/examples/extensions/dynamic-resources/dynamic.md +5 -0
- package/examples/extensions/dynamic-resources/index.ts +15 -0
- package/examples/extensions/dynamic-tools.ts +74 -0
- package/examples/extensions/entry-renderer.ts +41 -0
- package/examples/extensions/event-bus.ts +43 -0
- package/examples/extensions/file-trigger.ts +41 -0
- package/examples/extensions/git-checkpoint.ts +53 -0
- package/examples/extensions/git-merge-and-resolve.ts +115 -0
- package/examples/extensions/github-issue-autocomplete.ts +185 -0
- package/examples/extensions/gondolin/index.ts +531 -0
- package/examples/extensions/gondolin/package-lock.json +185 -0
- package/examples/extensions/gondolin/package.json +19 -0
- package/examples/extensions/handoff.ts +190 -0
- package/examples/extensions/hello.ts +26 -0
- package/examples/extensions/hidden-thinking-label.ts +53 -0
- package/examples/extensions/inline-bash.ts +94 -0
- package/examples/extensions/input-transform-streaming.ts +39 -0
- package/examples/extensions/input-transform.ts +43 -0
- package/examples/extensions/interactive-shell.ts +196 -0
- package/examples/extensions/kimi-deferred-tools.ts +61 -0
- package/examples/extensions/mac-system-theme.ts +47 -0
- package/examples/extensions/message-renderer.ts +59 -0
- package/examples/extensions/minimal-mode.ts +426 -0
- package/examples/extensions/modal-editor.ts +85 -0
- package/examples/extensions/model-status.ts +31 -0
- package/examples/extensions/notify.ts +55 -0
- package/examples/extensions/overlay-qa-tests.ts +1450 -0
- package/examples/extensions/overlay-test.ts +153 -0
- package/examples/extensions/permission-gate.ts +34 -0
- package/examples/extensions/pirate.ts +47 -0
- package/examples/extensions/plan-mode/README.md +66 -0
- package/examples/extensions/plan-mode/index.ts +390 -0
- package/examples/extensions/plan-mode/utils.ts +168 -0
- package/examples/extensions/preset.ts +436 -0
- package/examples/extensions/project-trust.ts +64 -0
- package/examples/extensions/prompt-customizer.ts +97 -0
- package/examples/extensions/protected-paths.ts +30 -0
- package/examples/extensions/provider-payload.ts +18 -0
- package/examples/extensions/qna.ts +118 -0
- package/examples/extensions/question.ts +286 -0
- package/examples/extensions/questionnaire.ts +448 -0
- package/examples/extensions/rainbow-editor.ts +88 -0
- package/examples/extensions/reload-runtime.ts +37 -0
- package/examples/extensions/rpc-demo.ts +118 -0
- package/examples/extensions/sandbox/index.ts +321 -0
- package/examples/extensions/sandbox/package-lock.json +92 -0
- package/examples/extensions/sandbox/package.json +19 -0
- package/examples/extensions/send-user-message.ts +97 -0
- package/examples/extensions/session-name.ts +27 -0
- package/examples/extensions/shutdown-command.ts +63 -0
- package/examples/extensions/snake.ts +343 -0
- package/examples/extensions/space-invaders.ts +560 -0
- package/examples/extensions/ssh.ts +220 -0
- package/examples/extensions/status-line.ts +32 -0
- package/examples/extensions/structured-output.ts +65 -0
- package/examples/extensions/subagent/README.md +175 -0
- package/examples/extensions/subagent/agents/planner.md +37 -0
- package/examples/extensions/subagent/agents/reviewer.md +35 -0
- package/examples/extensions/subagent/agents/scout.md +50 -0
- package/examples/extensions/subagent/agents/worker.md +24 -0
- package/examples/extensions/subagent/agents.ts +126 -0
- package/examples/extensions/subagent/index.ts +1015 -0
- package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
- package/examples/extensions/subagent/prompts/implement.md +10 -0
- package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
- package/examples/extensions/summarize.ts +199 -0
- package/examples/extensions/system-prompt-header.ts +17 -0
- package/examples/extensions/tic-tac-toe.ts +1008 -0
- package/examples/extensions/timed-confirm.ts +70 -0
- package/examples/extensions/titlebar-spinner.ts +58 -0
- package/examples/extensions/todo.ts +297 -0
- package/examples/extensions/tool-override.ts +144 -0
- package/examples/extensions/tools.ts +146 -0
- package/examples/extensions/trigger-compact.ts +50 -0
- package/examples/extensions/truncated-tool.ts +195 -0
- package/examples/extensions/widget-placement.ts +9 -0
- package/examples/extensions/with-deps/index.ts +32 -0
- package/examples/extensions/with-deps/package-lock.json +31 -0
- package/examples/extensions/with-deps/package.json +22 -0
- package/examples/extensions/working-indicator.ts +123 -0
- package/examples/extensions/working-message-test.ts +25 -0
- package/examples/rpc-extension-ui.ts +641 -0
- package/examples/sdk/01-minimal.ts +26 -0
- package/examples/sdk/02-custom-model.ts +49 -0
- package/examples/sdk/03-custom-prompt.ts +75 -0
- package/examples/sdk/04-skills.ts +55 -0
- package/examples/sdk/05-tools.ts +48 -0
- package/examples/sdk/06-extensions.ts +99 -0
- package/examples/sdk/07-context-files.ts +47 -0
- package/examples/sdk/08-prompt-templates.ts +51 -0
- package/examples/sdk/09-api-keys-and-oauth.ts +34 -0
- package/examples/sdk/10-settings.ts +53 -0
- package/examples/sdk/11-sessions.ts +52 -0
- package/examples/sdk/12-full-control.ts +74 -0
- package/examples/sdk/13-session-runtime.ts +67 -0
- package/examples/sdk/README.md +140 -0
- package/npm-shrinkwrap.json +1817 -0
- package/package.json +145 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/extensions/gitnexus/tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C;;;;GAIG;AAEH,MAAM,WAAW,mBAAmB;IACnC,MAAM,EAAE,cAAc,CAAC;IACvB,2EAA2E;IAC3E,WAAW,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACtC,GAAG,EAAE,MAAM,CAAC;CACZ;AA8GD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,mBAAmB,GAAG,cAAc,EAAE,CAwG9E","sourcesContent":["import { spawnSync } from \"node:child_process\";\nimport { Type } from \"typebox\";\nimport type { ToolDefinition } from \"../../core/extensions/types.ts\";\nimport { graphRailStore } from \"../../core/graph-rail-store.ts\";\nimport { GitNexusClient } from \"./client.ts\";\nimport { type ImpactData, parseHubJson, type QueryData } from \"./render.ts\";\n\n/**\n * The six model-visible GitNexus tools, wrapping hub MCP tools 1:1.\n * Descriptions are ported near-verbatim from the hub's own MCP tool\n * descriptions — they are battle-tested with Claude/codex; do not rewrite.\n */\n\nexport interface GitNexusToolContext {\n\tclient: GitNexusClient;\n\t/** Default repo for calls that omit `repo` (the resolved current repo). */\n\tcurrentRepo: () => string | undefined;\n\tcwd: string;\n}\n\ninterface HubCallArgs {\n\t[key: string]: unknown;\n}\n\n/** Copy the first present alias onto `canonical` — models fumble param names (t2: target= for name=). */\nfunction aliasParam(args: Record<string, unknown>, canonical: string, aliases: string[]): Record<string, unknown> {\n\tif (args[canonical] !== undefined) return args;\n\tfor (const alias of aliases) {\n\t\tif (args[alias] !== undefined) {\n\t\t\tconst { [alias]: value, ...rest } = args;\n\t\t\treturn { ...rest, [canonical]: value };\n\t\t}\n\t}\n\treturn args;\n}\n\nfunction textResult(text: string) {\n\treturn { content: [{ type: \"text\" as const, text }], details: { source: \"gitnexus\" } };\n}\n\n/** Feed the side rail from successful graph tool results. Never throws. */\nfunction feedRailFromResult(toolName: string, args: Record<string, unknown>, text: string): void {\n\ttry {\n\t\tif (toolName === \"gitnexus_impact\") {\n\t\t\tconst data = parseHubJson<ImpactData>(text);\n\t\t\tif (!data?.target?.name || !data.byDepth) return;\n\t\t\tgraphRailStore.setImpact({\n\t\t\t\ttarget: data.target.name,\n\t\t\t\tfilePath: data.target.filePath,\n\t\t\t\trisk: data.risk ?? \"UNKNOWN\",\n\t\t\t\tbyDepth: data.byDepth,\n\t\t\t\tprocesses: (data.affected_processes ?? [])\n\t\t\t\t\t.map((p) => (typeof p === \"string\" ? p : (p.name ?? \"\")))\n\t\t\t\t\t.filter(Boolean),\n\t\t\t\tmodules: (data.affected_modules ?? [])\n\t\t\t\t\t.filter((m) => m.name)\n\t\t\t\t\t.map((m) => ({ name: m.name ?? \"\", hits: m.hits ?? 0, direct: m.impact === \"direct\" })),\n\t\t\t\tat: Date.now(),\n\t\t\t});\n\t\t} else if (toolName === \"gitnexus_list_repos\") {\n\t\t\t// list_repos returns markdown: `- **owner/name** (12,345 symbols, ...)`\n\t\t\tconst repos: Array<{ name: string; symbols: string }> = [];\n\t\t\tfor (const match of text.matchAll(/^- \\*\\*(.+?)\\*\\* \\((\\d[\\d,]*) symbols/gm)) {\n\t\t\t\trepos.push({ name: match[1] ?? \"\", symbols: match[2] ?? \"\" });\n\t\t\t}\n\t\t\tif (repos.length > 0) graphRailStore.setRepoList(repos);\n\t\t} else if (toolName === \"gitnexus_query\") {\n\t\t\tconst data = parseHubJson<QueryData>(text);\n\t\t\tif (!data?.processes) return;\n\t\t\tgraphRailStore.setQuery({\n\t\t\t\tquery: String(args.query ?? \"\"),\n\t\t\t\tflows: data.processes.slice(0, 4).map((p) => ({\n\t\t\t\t\tsummary: p.summary ?? \"(flow)\",\n\t\t\t\t\t...(p.step_count !== undefined ? { stepCount: p.step_count } : {}),\n\t\t\t\t})),\n\t\t\t\tat: Date.now(),\n\t\t\t});\n\t\t}\n\t} catch {\n\t\t// rail is cosmetic; tool results must never fail because of it\n\t}\n}\n\nfunction makeHubTool(\n\tctx: GitNexusToolContext,\n\toptions: {\n\t\tname: string;\n\t\thubTool: string;\n\t\tlabel: string;\n\t\tdescription: string;\n\t\tpromptSnippet?: string;\n\t\tpromptGuidelines?: string[];\n\t\tparameters: ReturnType<typeof Type.Object>;\n\t\tprepareArguments?: (args: unknown) => Record<string, unknown>;\n\t\tmapArgs?: (params: Record<string, unknown>) => HubCallArgs;\n\t},\n): ToolDefinition {\n\treturn {\n\t\tname: options.name,\n\t\tlabel: options.label,\n\t\tdescription: options.description,\n\t\t...(options.promptSnippet ? { promptSnippet: options.promptSnippet } : {}),\n\t\t...(options.promptGuidelines ? { promptGuidelines: options.promptGuidelines } : {}),\n\t\t...(options.prepareArguments ? { prepareArguments: options.prepareArguments } : {}),\n\t\tparameters: options.parameters,\n\t\texecutionMode: \"parallel\",\n\t\texecute: async (_id, params, signal) => {\n\t\t\tconst raw = (params ?? {}) as Record<string, unknown>;\n\t\t\tconst mapped = options.mapArgs ? options.mapArgs(raw) : { ...raw };\n\t\t\tif (mapped.repo === undefined) {\n\t\t\t\tconst current = ctx.currentRepo();\n\t\t\t\tif (current) mapped.repo = current;\n\t\t\t}\n\t\t\tconst result = await ctx.client.callTool(options.hubTool, mapped, signal);\n\t\t\tconst text = GitNexusClient.text(result);\n\t\t\tgraphRailStore.recordGraphCall();\n\t\t\tfeedRailFromResult(options.name, mapped, text);\n\t\t\treturn textResult(text);\n\t\t},\n\t};\n}\n\nconst repoParam = Type.Optional(\n\tType.String({\n\t\tdescription: \"Indexed repository name or @group. Omit for the current repository.\",\n\t}),\n);\n\nexport function createGitNexusTools(ctx: GitNexusToolContext): ToolDefinition[] {\n\tconst query = makeHubTool(ctx, {\n\t\tname: \"gitnexus_query\",\n\t\thubTool: \"query\",\n\t\tlabel: \"GitNexus query\",\n\t\tdescription:\n\t\t\t\"Query the code knowledge graph for execution flows related to a concept. Returns processes (call chains) ranked by relevance, each with its symbols and file locations. WHEN TO USE: understanding how code works together — execution flows and relationships, not just file matches. Complements grep. AFTER THIS: use gitnexus_context on a specific symbol for its 360-degree view.\",\n\t\tpromptSnippet: \"gitnexus_query: find execution flows by concept in the knowledge graph\",\n\t\tparameters: Type.Object({\n\t\t\tquery: Type.String({ description: \"Natural language or keyword search query\" }),\n\t\t\tgoal: Type.Optional(Type.String({ description: \"What you want to find. Helps ranking.\" })),\n\t\t\ttask_context: Type.Optional(Type.String({ description: \"What you are working on. Helps ranking.\" })),\n\t\t\tlimit: Type.Optional(Type.Number({ description: \"Max processes to return (default 5)\" })),\n\t\t\trepo: repoParam,\n\t\t}),\n\t});\n\n\tconst context = makeHubTool(ctx, {\n\t\tname: \"gitnexus_context\",\n\t\thubTool: \"context\",\n\t\tlabel: \"GitNexus context\",\n\t\tdescription:\n\t\t\t\"360-degree view of a single code symbol: categorized incoming/outgoing references (calls, imports, extends, implements, overrides, field reads/writes), process participation, and file location. WHEN TO USE: after gitnexus_query, or whenever you need all callers/callees of a symbol. AFTER THIS: use gitnexus_impact if you plan to change it.\",\n\t\tpromptSnippet: \"gitnexus_context: all callers/callees/flows of one symbol\",\n\t\tparameters: Type.Object({\n\t\t\tname: Type.String({ description: 'Symbol name (e.g. \"validateUser\", \"AuthService\")' }),\n\t\t\tfile_path: Type.Optional(Type.String({ description: \"File path to disambiguate common names\" })),\n\t\t\tkind: Type.Optional(Type.String({ description: \"Kind filter, e.g. 'Function' | 'Class' | 'Method'\" })),\n\t\t\trepo: repoParam,\n\t\t}),\n\t\tprepareArguments: (args: unknown) =>\n\t\t\taliasParam((args ?? {}) as Record<string, unknown>, \"name\", [\"target\", \"symbol\"]),\n\t});\n\n\tconst impact = makeHubTool(ctx, {\n\t\tname: \"gitnexus_impact\",\n\t\thubTool: \"impact\",\n\t\tlabel: \"GitNexus impact\",\n\t\tdescription:\n\t\t\t\"Blast-radius analysis before changing a symbol: direct callers (d=1 WILL BREAK), indirect dependents (d=2 should test), transitive (d=3), affected processes, and a risk level. WHEN TO USE: BEFORE modifying any function/class/method. Report HIGH/CRITICAL results to the user before proceeding.\",\n\t\tpromptSnippet: \"gitnexus_impact: blast radius + risk before editing a symbol\",\n\t\tpromptGuidelines: [\n\t\t\t\"Before editing a function, class, or method that the graph knows, run gitnexus_impact on it first and surface HIGH/CRITICAL risk to the user.\",\n\t\t],\n\t\tparameters: Type.Object({\n\t\t\ttarget: Type.String({ description: \"Symbol to analyze\" }),\n\t\t\tdirection: Type.Optional(\n\t\t\t\tType.String({ description: '\"upstream\" (callers, default), \"downstream\" (callees), or \"both\"' }),\n\t\t\t),\n\t\t\trepo: repoParam,\n\t\t}),\n\t\tprepareArguments: (args: unknown) =>\n\t\t\taliasParam((args ?? {}) as Record<string, unknown>, \"target\", [\"name\", \"symbol\"]),\n\t\tmapArgs: (params) => ({ direction: \"upstream\", ...params }),\n\t});\n\n\tconst detectChanges = makeHubTool(ctx, {\n\t\tname: \"gitnexus_detect_changes\",\n\t\thubTool: \"detect_changes\",\n\t\tlabel: \"GitNexus detect changes\",\n\t\tdescription:\n\t\t\t\"Map the current git diff to indexed symbols and trace which execution flows are impacted. WHEN TO USE: before committing — to understand what your changes affect and what to test.\",\n\t\tpromptSnippet: \"gitnexus_detect_changes: map local diff to affected flows\",\n\t\tparameters: Type.Object({ repo: repoParam }),\n\t\tmapArgs: (params) => {\n\t\t\tconst diff = spawnSync(\"git\", [\"diff\", \"--name-only\", \"HEAD\"], {\n\t\t\t\tcwd: ctx.cwd,\n\t\t\t\tencoding: \"utf8\",\n\t\t\t\ttimeout: 5000,\n\t\t\t});\n\t\t\tconst changed = (diff.stdout ?? \"\")\n\t\t\t\t.split(\"\\n\")\n\t\t\t\t.map((l) => l.trim())\n\t\t\t\t.filter(Boolean);\n\t\t\treturn { ...params, changed_files: changed };\n\t\t},\n\t});\n\n\tconst cypher = makeHubTool(ctx, {\n\t\tname: \"gitnexus_cypher\",\n\t\thubTool: \"cypher\",\n\t\tlabel: \"GitNexus cypher\",\n\t\tdescription:\n\t\t\t\"Execute a Cypher query against the code knowledge graph. Nodes: File, Function, Class, Method, Interface, Community, Process. All edges via CodeRelation with a `type` property (CALLS, IMPORTS, EXTENDS, IMPLEMENTS, HAS_METHOD, ACCESSES, STEP_IN_PROCESS, ...). WHEN TO USE: precise structural questions the other tools cannot answer.\",\n\t\tpromptGuidelines: [\n\t\t\t\"Prefer gitnexus_query/context/impact; reach for gitnexus_cypher only when they cannot express the question.\",\n\t\t],\n\t\tparameters: Type.Object({\n\t\t\tquery: Type.String({ description: \"Cypher query to execute\" }),\n\t\t\trepo: repoParam,\n\t\t}),\n\t});\n\n\tconst listRepos = makeHubTool(ctx, {\n\t\tname: \"gitnexus_list_repos\",\n\t\thubTool: \"list_repos\",\n\t\tlabel: \"GitNexus repos\",\n\t\tdescription:\n\t\t\t\"List all repositories (and multi-repo @groups) indexed on GitNexus, with symbol/relationship counts and indexed dates. WHEN TO USE: to discover or refresh what you can query across repositories.\",\n\t\tparameters: Type.Object({}),\n\t\tmapArgs: () => ({}),\n\t});\n\n\treturn [query, context, impact, detectChanges, cypher, listRepos];\n}\n"]}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
import { Type } from "typebox";
|
|
3
|
+
import { graphRailStore } from "../../core/graph-rail-store.js";
|
|
4
|
+
import { GitNexusClient } from "./client.js";
|
|
5
|
+
import { parseHubJson } from "./render.js";
|
|
6
|
+
/** Copy the first present alias onto `canonical` — models fumble param names (t2: target= for name=). */
|
|
7
|
+
function aliasParam(args, canonical, aliases) {
|
|
8
|
+
if (args[canonical] !== undefined)
|
|
9
|
+
return args;
|
|
10
|
+
for (const alias of aliases) {
|
|
11
|
+
if (args[alias] !== undefined) {
|
|
12
|
+
const { [alias]: value, ...rest } = args;
|
|
13
|
+
return { ...rest, [canonical]: value };
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return args;
|
|
17
|
+
}
|
|
18
|
+
function textResult(text) {
|
|
19
|
+
return { content: [{ type: "text", text }], details: { source: "gitnexus" } };
|
|
20
|
+
}
|
|
21
|
+
/** Feed the side rail from successful graph tool results. Never throws. */
|
|
22
|
+
function feedRailFromResult(toolName, args, text) {
|
|
23
|
+
try {
|
|
24
|
+
if (toolName === "gitnexus_impact") {
|
|
25
|
+
const data = parseHubJson(text);
|
|
26
|
+
if (!data?.target?.name || !data.byDepth)
|
|
27
|
+
return;
|
|
28
|
+
graphRailStore.setImpact({
|
|
29
|
+
target: data.target.name,
|
|
30
|
+
filePath: data.target.filePath,
|
|
31
|
+
risk: data.risk ?? "UNKNOWN",
|
|
32
|
+
byDepth: data.byDepth,
|
|
33
|
+
processes: (data.affected_processes ?? [])
|
|
34
|
+
.map((p) => (typeof p === "string" ? p : (p.name ?? "")))
|
|
35
|
+
.filter(Boolean),
|
|
36
|
+
modules: (data.affected_modules ?? [])
|
|
37
|
+
.filter((m) => m.name)
|
|
38
|
+
.map((m) => ({ name: m.name ?? "", hits: m.hits ?? 0, direct: m.impact === "direct" })),
|
|
39
|
+
at: Date.now(),
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
else if (toolName === "gitnexus_list_repos") {
|
|
43
|
+
// list_repos returns markdown: `- **owner/name** (12,345 symbols, ...)`
|
|
44
|
+
const repos = [];
|
|
45
|
+
for (const match of text.matchAll(/^- \*\*(.+?)\*\* \((\d[\d,]*) symbols/gm)) {
|
|
46
|
+
repos.push({ name: match[1] ?? "", symbols: match[2] ?? "" });
|
|
47
|
+
}
|
|
48
|
+
if (repos.length > 0)
|
|
49
|
+
graphRailStore.setRepoList(repos);
|
|
50
|
+
}
|
|
51
|
+
else if (toolName === "gitnexus_query") {
|
|
52
|
+
const data = parseHubJson(text);
|
|
53
|
+
if (!data?.processes)
|
|
54
|
+
return;
|
|
55
|
+
graphRailStore.setQuery({
|
|
56
|
+
query: String(args.query ?? ""),
|
|
57
|
+
flows: data.processes.slice(0, 4).map((p) => ({
|
|
58
|
+
summary: p.summary ?? "(flow)",
|
|
59
|
+
...(p.step_count !== undefined ? { stepCount: p.step_count } : {}),
|
|
60
|
+
})),
|
|
61
|
+
at: Date.now(),
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// rail is cosmetic; tool results must never fail because of it
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
function makeHubTool(ctx, options) {
|
|
70
|
+
return {
|
|
71
|
+
name: options.name,
|
|
72
|
+
label: options.label,
|
|
73
|
+
description: options.description,
|
|
74
|
+
...(options.promptSnippet ? { promptSnippet: options.promptSnippet } : {}),
|
|
75
|
+
...(options.promptGuidelines ? { promptGuidelines: options.promptGuidelines } : {}),
|
|
76
|
+
...(options.prepareArguments ? { prepareArguments: options.prepareArguments } : {}),
|
|
77
|
+
parameters: options.parameters,
|
|
78
|
+
executionMode: "parallel",
|
|
79
|
+
execute: async (_id, params, signal) => {
|
|
80
|
+
const raw = (params ?? {});
|
|
81
|
+
const mapped = options.mapArgs ? options.mapArgs(raw) : { ...raw };
|
|
82
|
+
if (mapped.repo === undefined) {
|
|
83
|
+
const current = ctx.currentRepo();
|
|
84
|
+
if (current)
|
|
85
|
+
mapped.repo = current;
|
|
86
|
+
}
|
|
87
|
+
const result = await ctx.client.callTool(options.hubTool, mapped, signal);
|
|
88
|
+
const text = GitNexusClient.text(result);
|
|
89
|
+
graphRailStore.recordGraphCall();
|
|
90
|
+
feedRailFromResult(options.name, mapped, text);
|
|
91
|
+
return textResult(text);
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
const repoParam = Type.Optional(Type.String({
|
|
96
|
+
description: "Indexed repository name or @group. Omit for the current repository.",
|
|
97
|
+
}));
|
|
98
|
+
export function createGitNexusTools(ctx) {
|
|
99
|
+
const query = makeHubTool(ctx, {
|
|
100
|
+
name: "gitnexus_query",
|
|
101
|
+
hubTool: "query",
|
|
102
|
+
label: "GitNexus query",
|
|
103
|
+
description: "Query the code knowledge graph for execution flows related to a concept. Returns processes (call chains) ranked by relevance, each with its symbols and file locations. WHEN TO USE: understanding how code works together — execution flows and relationships, not just file matches. Complements grep. AFTER THIS: use gitnexus_context on a specific symbol for its 360-degree view.",
|
|
104
|
+
promptSnippet: "gitnexus_query: find execution flows by concept in the knowledge graph",
|
|
105
|
+
parameters: Type.Object({
|
|
106
|
+
query: Type.String({ description: "Natural language or keyword search query" }),
|
|
107
|
+
goal: Type.Optional(Type.String({ description: "What you want to find. Helps ranking." })),
|
|
108
|
+
task_context: Type.Optional(Type.String({ description: "What you are working on. Helps ranking." })),
|
|
109
|
+
limit: Type.Optional(Type.Number({ description: "Max processes to return (default 5)" })),
|
|
110
|
+
repo: repoParam,
|
|
111
|
+
}),
|
|
112
|
+
});
|
|
113
|
+
const context = makeHubTool(ctx, {
|
|
114
|
+
name: "gitnexus_context",
|
|
115
|
+
hubTool: "context",
|
|
116
|
+
label: "GitNexus context",
|
|
117
|
+
description: "360-degree view of a single code symbol: categorized incoming/outgoing references (calls, imports, extends, implements, overrides, field reads/writes), process participation, and file location. WHEN TO USE: after gitnexus_query, or whenever you need all callers/callees of a symbol. AFTER THIS: use gitnexus_impact if you plan to change it.",
|
|
118
|
+
promptSnippet: "gitnexus_context: all callers/callees/flows of one symbol",
|
|
119
|
+
parameters: Type.Object({
|
|
120
|
+
name: Type.String({ description: 'Symbol name (e.g. "validateUser", "AuthService")' }),
|
|
121
|
+
file_path: Type.Optional(Type.String({ description: "File path to disambiguate common names" })),
|
|
122
|
+
kind: Type.Optional(Type.String({ description: "Kind filter, e.g. 'Function' | 'Class' | 'Method'" })),
|
|
123
|
+
repo: repoParam,
|
|
124
|
+
}),
|
|
125
|
+
prepareArguments: (args) => aliasParam((args ?? {}), "name", ["target", "symbol"]),
|
|
126
|
+
});
|
|
127
|
+
const impact = makeHubTool(ctx, {
|
|
128
|
+
name: "gitnexus_impact",
|
|
129
|
+
hubTool: "impact",
|
|
130
|
+
label: "GitNexus impact",
|
|
131
|
+
description: "Blast-radius analysis before changing a symbol: direct callers (d=1 WILL BREAK), indirect dependents (d=2 should test), transitive (d=3), affected processes, and a risk level. WHEN TO USE: BEFORE modifying any function/class/method. Report HIGH/CRITICAL results to the user before proceeding.",
|
|
132
|
+
promptSnippet: "gitnexus_impact: blast radius + risk before editing a symbol",
|
|
133
|
+
promptGuidelines: [
|
|
134
|
+
"Before editing a function, class, or method that the graph knows, run gitnexus_impact on it first and surface HIGH/CRITICAL risk to the user.",
|
|
135
|
+
],
|
|
136
|
+
parameters: Type.Object({
|
|
137
|
+
target: Type.String({ description: "Symbol to analyze" }),
|
|
138
|
+
direction: Type.Optional(Type.String({ description: '"upstream" (callers, default), "downstream" (callees), or "both"' })),
|
|
139
|
+
repo: repoParam,
|
|
140
|
+
}),
|
|
141
|
+
prepareArguments: (args) => aliasParam((args ?? {}), "target", ["name", "symbol"]),
|
|
142
|
+
mapArgs: (params) => ({ direction: "upstream", ...params }),
|
|
143
|
+
});
|
|
144
|
+
const detectChanges = makeHubTool(ctx, {
|
|
145
|
+
name: "gitnexus_detect_changes",
|
|
146
|
+
hubTool: "detect_changes",
|
|
147
|
+
label: "GitNexus detect changes",
|
|
148
|
+
description: "Map the current git diff to indexed symbols and trace which execution flows are impacted. WHEN TO USE: before committing — to understand what your changes affect and what to test.",
|
|
149
|
+
promptSnippet: "gitnexus_detect_changes: map local diff to affected flows",
|
|
150
|
+
parameters: Type.Object({ repo: repoParam }),
|
|
151
|
+
mapArgs: (params) => {
|
|
152
|
+
const diff = spawnSync("git", ["diff", "--name-only", "HEAD"], {
|
|
153
|
+
cwd: ctx.cwd,
|
|
154
|
+
encoding: "utf8",
|
|
155
|
+
timeout: 5000,
|
|
156
|
+
});
|
|
157
|
+
const changed = (diff.stdout ?? "")
|
|
158
|
+
.split("\n")
|
|
159
|
+
.map((l) => l.trim())
|
|
160
|
+
.filter(Boolean);
|
|
161
|
+
return { ...params, changed_files: changed };
|
|
162
|
+
},
|
|
163
|
+
});
|
|
164
|
+
const cypher = makeHubTool(ctx, {
|
|
165
|
+
name: "gitnexus_cypher",
|
|
166
|
+
hubTool: "cypher",
|
|
167
|
+
label: "GitNexus cypher",
|
|
168
|
+
description: "Execute a Cypher query against the code knowledge graph. Nodes: File, Function, Class, Method, Interface, Community, Process. All edges via CodeRelation with a `type` property (CALLS, IMPORTS, EXTENDS, IMPLEMENTS, HAS_METHOD, ACCESSES, STEP_IN_PROCESS, ...). WHEN TO USE: precise structural questions the other tools cannot answer.",
|
|
169
|
+
promptGuidelines: [
|
|
170
|
+
"Prefer gitnexus_query/context/impact; reach for gitnexus_cypher only when they cannot express the question.",
|
|
171
|
+
],
|
|
172
|
+
parameters: Type.Object({
|
|
173
|
+
query: Type.String({ description: "Cypher query to execute" }),
|
|
174
|
+
repo: repoParam,
|
|
175
|
+
}),
|
|
176
|
+
});
|
|
177
|
+
const listRepos = makeHubTool(ctx, {
|
|
178
|
+
name: "gitnexus_list_repos",
|
|
179
|
+
hubTool: "list_repos",
|
|
180
|
+
label: "GitNexus repos",
|
|
181
|
+
description: "List all repositories (and multi-repo @groups) indexed on GitNexus, with symbol/relationship counts and indexed dates. WHEN TO USE: to discover or refresh what you can query across repositories.",
|
|
182
|
+
parameters: Type.Object({}),
|
|
183
|
+
mapArgs: () => ({}),
|
|
184
|
+
});
|
|
185
|
+
return [query, context, impact, detectChanges, cypher, listRepos];
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/extensions/gitnexus/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAmB,YAAY,EAAkB,MAAM,aAAa,CAAC;AAmB5E,2GAAyG;AACzG,SAAS,UAAU,CAAC,IAA6B,EAAE,SAAiB,EAAE,OAAiB,EAA2B;IACjH,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC/C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;YACzC,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;QACxC,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AAAA,CACZ;AAED,SAAS,UAAU,CAAC,IAAY,EAAE;IACjC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC;AAAA,CACvF;AAED,2EAA2E;AAC3E,SAAS,kBAAkB,CAAC,QAAgB,EAAE,IAA6B,EAAE,IAAY,EAAQ;IAChG,IAAI,CAAC;QACJ,IAAI,QAAQ,KAAK,iBAAiB,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,YAAY,CAAa,IAAI,CAAC,CAAC;YAC5C,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAO;YACjD,cAAc,CAAC,SAAS,CAAC;gBACxB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;gBACxB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;gBAC9B,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,SAAS;gBAC5B,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,SAAS,EAAE,CAAC,IAAI,CAAC,kBAAkB,IAAI,EAAE,CAAC;qBACxC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;qBACxD,MAAM,CAAC,OAAO,CAAC;gBACjB,OAAO,EAAE,CAAC,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAAC;qBACpC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;qBACrB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC,CAAC;gBACxF,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;aACd,CAAC,CAAC;QACJ,CAAC;aAAM,IAAI,QAAQ,KAAK,qBAAqB,EAAE,CAAC;YAC/C,wEAAwE;YACxE,MAAM,KAAK,GAA6C,EAAE,CAAC;YAC3D,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,yCAAyC,CAAC,EAAE,CAAC;gBAC9E,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC/D,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,cAAc,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACzD,CAAC;aAAM,IAAI,QAAQ,KAAK,gBAAgB,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,YAAY,CAAY,IAAI,CAAC,CAAC;YAC3C,IAAI,CAAC,IAAI,EAAE,SAAS;gBAAE,OAAO;YAC7B,cAAc,CAAC,QAAQ,CAAC;gBACvB,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC/B,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC7C,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,QAAQ;oBAC9B,GAAG,CAAC,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAClE,CAAC,CAAC;gBACH,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;aACd,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,+DAA+D;IAChE,CAAC;AAAA,CACD;AAED,SAAS,WAAW,CACnB,GAAwB,EACxB,OAUC,EACgB;IACjB,OAAO;QACN,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,aAAa,EAAE,UAAU;QACzB,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;YACvC,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAA4B,CAAC;YACtD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC;YACnE,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC/B,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;gBAClC,IAAI,OAAO;oBAAE,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;YACpC,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YAC1E,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzC,cAAc,CAAC,eAAe,EAAE,CAAC;YACjC,kBAAkB,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YAC/C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;QAAA,CACxB;KACD,CAAC;AAAA,CACF;AAED,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAC9B,IAAI,CAAC,MAAM,CAAC;IACX,WAAW,EAAE,qEAAqE;CAClF,CAAC,CACF,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,GAAwB,EAAoB;IAC/E,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC9B,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,OAAO;QAChB,KAAK,EAAE,gBAAgB;QACvB,WAAW,EACV,2XAAyX;QAC1X,aAAa,EAAE,wEAAwE;QACvF,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;YACvB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,0CAA0C,EAAE,CAAC;YAC/E,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,uCAAuC,EAAE,CAAC,CAAC;YAC1F,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,yCAAyC,EAAE,CAAC,CAAC;YACpG,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,qCAAqC,EAAE,CAAC,CAAC;YACzF,IAAI,EAAE,SAAS;SACf,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;QAChC,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,SAAS;QAClB,KAAK,EAAE,kBAAkB;QACzB,WAAW,EACV,sVAAsV;QACvV,aAAa,EAAE,2DAA2D;QAC1E,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;YACvB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,kDAAkD,EAAE,CAAC;YACtF,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,wCAAwC,EAAE,CAAC,CAAC;YAChG,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,mDAAmD,EAAE,CAAC,CAAC;YACtG,IAAI,EAAE,SAAS;SACf,CAAC;QACF,gBAAgB,EAAE,CAAC,IAAa,EAAE,EAAE,CACnC,UAAU,CAAC,CAAC,IAAI,IAAI,EAAE,CAA4B,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;KAClF,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE;QAC/B,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,QAAQ;QACjB,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACV,sSAAsS;QACvS,aAAa,EAAE,8DAA8D;QAC7E,gBAAgB,EAAE;YACjB,+IAA+I;SAC/I;QACD,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;YACvB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC;YACzD,SAAS,EAAE,IAAI,CAAC,QAAQ,CACvB,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,kEAAkE,EAAE,CAAC,CAChG;YACD,IAAI,EAAE,SAAS;SACf,CAAC;QACF,gBAAgB,EAAE,CAAC,IAAa,EAAE,EAAE,CACnC,UAAU,CAAC,CAAC,IAAI,IAAI,EAAE,CAA4B,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAClF,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,CAAC;KAC3D,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE;QACtC,IAAI,EAAE,yBAAyB;QAC/B,OAAO,EAAE,gBAAgB;QACzB,KAAK,EAAE,yBAAyB;QAChC,WAAW,EACV,uLAAqL;QACtL,aAAa,EAAE,2DAA2D;QAC1E,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC5C,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC;YACpB,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE;gBAC9D,GAAG,EAAE,GAAG,CAAC,GAAG;gBACZ,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,IAAI;aACb,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;iBACjC,KAAK,CAAC,IAAI,CAAC;iBACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBACpB,MAAM,CAAC,OAAO,CAAC,CAAC;YAClB,OAAO,EAAE,GAAG,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC;QAAA,CAC7C;KACD,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE;QAC/B,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,QAAQ;QACjB,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACV,6UAA6U;QAC9U,gBAAgB,EAAE;YACjB,6GAA6G;SAC7G;QACD,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;YACvB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,yBAAyB,EAAE,CAAC;YAC9D,IAAI,EAAE,SAAS;SACf,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE;QAClC,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE,YAAY;QACrB,KAAK,EAAE,gBAAgB;QACvB,WAAW,EACV,oMAAoM;QACrM,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;KACnB,CAAC,CAAC;IAEH,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;AAAA,CAClE","sourcesContent":["import { spawnSync } from \"node:child_process\";\nimport { Type } from \"typebox\";\nimport type { ToolDefinition } from \"../../core/extensions/types.ts\";\nimport { graphRailStore } from \"../../core/graph-rail-store.ts\";\nimport { GitNexusClient } from \"./client.ts\";\nimport { type ImpactData, parseHubJson, type QueryData } from \"./render.ts\";\n\n/**\n * The six model-visible GitNexus tools, wrapping hub MCP tools 1:1.\n * Descriptions are ported near-verbatim from the hub's own MCP tool\n * descriptions — they are battle-tested with Claude/codex; do not rewrite.\n */\n\nexport interface GitNexusToolContext {\n\tclient: GitNexusClient;\n\t/** Default repo for calls that omit `repo` (the resolved current repo). */\n\tcurrentRepo: () => string | undefined;\n\tcwd: string;\n}\n\ninterface HubCallArgs {\n\t[key: string]: unknown;\n}\n\n/** Copy the first present alias onto `canonical` — models fumble param names (t2: target= for name=). */\nfunction aliasParam(args: Record<string, unknown>, canonical: string, aliases: string[]): Record<string, unknown> {\n\tif (args[canonical] !== undefined) return args;\n\tfor (const alias of aliases) {\n\t\tif (args[alias] !== undefined) {\n\t\t\tconst { [alias]: value, ...rest } = args;\n\t\t\treturn { ...rest, [canonical]: value };\n\t\t}\n\t}\n\treturn args;\n}\n\nfunction textResult(text: string) {\n\treturn { content: [{ type: \"text\" as const, text }], details: { source: \"gitnexus\" } };\n}\n\n/** Feed the side rail from successful graph tool results. Never throws. */\nfunction feedRailFromResult(toolName: string, args: Record<string, unknown>, text: string): void {\n\ttry {\n\t\tif (toolName === \"gitnexus_impact\") {\n\t\t\tconst data = parseHubJson<ImpactData>(text);\n\t\t\tif (!data?.target?.name || !data.byDepth) return;\n\t\t\tgraphRailStore.setImpact({\n\t\t\t\ttarget: data.target.name,\n\t\t\t\tfilePath: data.target.filePath,\n\t\t\t\trisk: data.risk ?? \"UNKNOWN\",\n\t\t\t\tbyDepth: data.byDepth,\n\t\t\t\tprocesses: (data.affected_processes ?? [])\n\t\t\t\t\t.map((p) => (typeof p === \"string\" ? p : (p.name ?? \"\")))\n\t\t\t\t\t.filter(Boolean),\n\t\t\t\tmodules: (data.affected_modules ?? [])\n\t\t\t\t\t.filter((m) => m.name)\n\t\t\t\t\t.map((m) => ({ name: m.name ?? \"\", hits: m.hits ?? 0, direct: m.impact === \"direct\" })),\n\t\t\t\tat: Date.now(),\n\t\t\t});\n\t\t} else if (toolName === \"gitnexus_list_repos\") {\n\t\t\t// list_repos returns markdown: `- **owner/name** (12,345 symbols, ...)`\n\t\t\tconst repos: Array<{ name: string; symbols: string }> = [];\n\t\t\tfor (const match of text.matchAll(/^- \\*\\*(.+?)\\*\\* \\((\\d[\\d,]*) symbols/gm)) {\n\t\t\t\trepos.push({ name: match[1] ?? \"\", symbols: match[2] ?? \"\" });\n\t\t\t}\n\t\t\tif (repos.length > 0) graphRailStore.setRepoList(repos);\n\t\t} else if (toolName === \"gitnexus_query\") {\n\t\t\tconst data = parseHubJson<QueryData>(text);\n\t\t\tif (!data?.processes) return;\n\t\t\tgraphRailStore.setQuery({\n\t\t\t\tquery: String(args.query ?? \"\"),\n\t\t\t\tflows: data.processes.slice(0, 4).map((p) => ({\n\t\t\t\t\tsummary: p.summary ?? \"(flow)\",\n\t\t\t\t\t...(p.step_count !== undefined ? { stepCount: p.step_count } : {}),\n\t\t\t\t})),\n\t\t\t\tat: Date.now(),\n\t\t\t});\n\t\t}\n\t} catch {\n\t\t// rail is cosmetic; tool results must never fail because of it\n\t}\n}\n\nfunction makeHubTool(\n\tctx: GitNexusToolContext,\n\toptions: {\n\t\tname: string;\n\t\thubTool: string;\n\t\tlabel: string;\n\t\tdescription: string;\n\t\tpromptSnippet?: string;\n\t\tpromptGuidelines?: string[];\n\t\tparameters: ReturnType<typeof Type.Object>;\n\t\tprepareArguments?: (args: unknown) => Record<string, unknown>;\n\t\tmapArgs?: (params: Record<string, unknown>) => HubCallArgs;\n\t},\n): ToolDefinition {\n\treturn {\n\t\tname: options.name,\n\t\tlabel: options.label,\n\t\tdescription: options.description,\n\t\t...(options.promptSnippet ? { promptSnippet: options.promptSnippet } : {}),\n\t\t...(options.promptGuidelines ? { promptGuidelines: options.promptGuidelines } : {}),\n\t\t...(options.prepareArguments ? { prepareArguments: options.prepareArguments } : {}),\n\t\tparameters: options.parameters,\n\t\texecutionMode: \"parallel\",\n\t\texecute: async (_id, params, signal) => {\n\t\t\tconst raw = (params ?? {}) as Record<string, unknown>;\n\t\t\tconst mapped = options.mapArgs ? options.mapArgs(raw) : { ...raw };\n\t\t\tif (mapped.repo === undefined) {\n\t\t\t\tconst current = ctx.currentRepo();\n\t\t\t\tif (current) mapped.repo = current;\n\t\t\t}\n\t\t\tconst result = await ctx.client.callTool(options.hubTool, mapped, signal);\n\t\t\tconst text = GitNexusClient.text(result);\n\t\t\tgraphRailStore.recordGraphCall();\n\t\t\tfeedRailFromResult(options.name, mapped, text);\n\t\t\treturn textResult(text);\n\t\t},\n\t};\n}\n\nconst repoParam = Type.Optional(\n\tType.String({\n\t\tdescription: \"Indexed repository name or @group. Omit for the current repository.\",\n\t}),\n);\n\nexport function createGitNexusTools(ctx: GitNexusToolContext): ToolDefinition[] {\n\tconst query = makeHubTool(ctx, {\n\t\tname: \"gitnexus_query\",\n\t\thubTool: \"query\",\n\t\tlabel: \"GitNexus query\",\n\t\tdescription:\n\t\t\t\"Query the code knowledge graph for execution flows related to a concept. Returns processes (call chains) ranked by relevance, each with its symbols and file locations. WHEN TO USE: understanding how code works together — execution flows and relationships, not just file matches. Complements grep. AFTER THIS: use gitnexus_context on a specific symbol for its 360-degree view.\",\n\t\tpromptSnippet: \"gitnexus_query: find execution flows by concept in the knowledge graph\",\n\t\tparameters: Type.Object({\n\t\t\tquery: Type.String({ description: \"Natural language or keyword search query\" }),\n\t\t\tgoal: Type.Optional(Type.String({ description: \"What you want to find. Helps ranking.\" })),\n\t\t\ttask_context: Type.Optional(Type.String({ description: \"What you are working on. Helps ranking.\" })),\n\t\t\tlimit: Type.Optional(Type.Number({ description: \"Max processes to return (default 5)\" })),\n\t\t\trepo: repoParam,\n\t\t}),\n\t});\n\n\tconst context = makeHubTool(ctx, {\n\t\tname: \"gitnexus_context\",\n\t\thubTool: \"context\",\n\t\tlabel: \"GitNexus context\",\n\t\tdescription:\n\t\t\t\"360-degree view of a single code symbol: categorized incoming/outgoing references (calls, imports, extends, implements, overrides, field reads/writes), process participation, and file location. WHEN TO USE: after gitnexus_query, or whenever you need all callers/callees of a symbol. AFTER THIS: use gitnexus_impact if you plan to change it.\",\n\t\tpromptSnippet: \"gitnexus_context: all callers/callees/flows of one symbol\",\n\t\tparameters: Type.Object({\n\t\t\tname: Type.String({ description: 'Symbol name (e.g. \"validateUser\", \"AuthService\")' }),\n\t\t\tfile_path: Type.Optional(Type.String({ description: \"File path to disambiguate common names\" })),\n\t\t\tkind: Type.Optional(Type.String({ description: \"Kind filter, e.g. 'Function' | 'Class' | 'Method'\" })),\n\t\t\trepo: repoParam,\n\t\t}),\n\t\tprepareArguments: (args: unknown) =>\n\t\t\taliasParam((args ?? {}) as Record<string, unknown>, \"name\", [\"target\", \"symbol\"]),\n\t});\n\n\tconst impact = makeHubTool(ctx, {\n\t\tname: \"gitnexus_impact\",\n\t\thubTool: \"impact\",\n\t\tlabel: \"GitNexus impact\",\n\t\tdescription:\n\t\t\t\"Blast-radius analysis before changing a symbol: direct callers (d=1 WILL BREAK), indirect dependents (d=2 should test), transitive (d=3), affected processes, and a risk level. WHEN TO USE: BEFORE modifying any function/class/method. Report HIGH/CRITICAL results to the user before proceeding.\",\n\t\tpromptSnippet: \"gitnexus_impact: blast radius + risk before editing a symbol\",\n\t\tpromptGuidelines: [\n\t\t\t\"Before editing a function, class, or method that the graph knows, run gitnexus_impact on it first and surface HIGH/CRITICAL risk to the user.\",\n\t\t],\n\t\tparameters: Type.Object({\n\t\t\ttarget: Type.String({ description: \"Symbol to analyze\" }),\n\t\t\tdirection: Type.Optional(\n\t\t\t\tType.String({ description: '\"upstream\" (callers, default), \"downstream\" (callees), or \"both\"' }),\n\t\t\t),\n\t\t\trepo: repoParam,\n\t\t}),\n\t\tprepareArguments: (args: unknown) =>\n\t\t\taliasParam((args ?? {}) as Record<string, unknown>, \"target\", [\"name\", \"symbol\"]),\n\t\tmapArgs: (params) => ({ direction: \"upstream\", ...params }),\n\t});\n\n\tconst detectChanges = makeHubTool(ctx, {\n\t\tname: \"gitnexus_detect_changes\",\n\t\thubTool: \"detect_changes\",\n\t\tlabel: \"GitNexus detect changes\",\n\t\tdescription:\n\t\t\t\"Map the current git diff to indexed symbols and trace which execution flows are impacted. WHEN TO USE: before committing — to understand what your changes affect and what to test.\",\n\t\tpromptSnippet: \"gitnexus_detect_changes: map local diff to affected flows\",\n\t\tparameters: Type.Object({ repo: repoParam }),\n\t\tmapArgs: (params) => {\n\t\t\tconst diff = spawnSync(\"git\", [\"diff\", \"--name-only\", \"HEAD\"], {\n\t\t\t\tcwd: ctx.cwd,\n\t\t\t\tencoding: \"utf8\",\n\t\t\t\ttimeout: 5000,\n\t\t\t});\n\t\t\tconst changed = (diff.stdout ?? \"\")\n\t\t\t\t.split(\"\\n\")\n\t\t\t\t.map((l) => l.trim())\n\t\t\t\t.filter(Boolean);\n\t\t\treturn { ...params, changed_files: changed };\n\t\t},\n\t});\n\n\tconst cypher = makeHubTool(ctx, {\n\t\tname: \"gitnexus_cypher\",\n\t\thubTool: \"cypher\",\n\t\tlabel: \"GitNexus cypher\",\n\t\tdescription:\n\t\t\t\"Execute a Cypher query against the code knowledge graph. Nodes: File, Function, Class, Method, Interface, Community, Process. All edges via CodeRelation with a `type` property (CALLS, IMPORTS, EXTENDS, IMPLEMENTS, HAS_METHOD, ACCESSES, STEP_IN_PROCESS, ...). WHEN TO USE: precise structural questions the other tools cannot answer.\",\n\t\tpromptGuidelines: [\n\t\t\t\"Prefer gitnexus_query/context/impact; reach for gitnexus_cypher only when they cannot express the question.\",\n\t\t],\n\t\tparameters: Type.Object({\n\t\t\tquery: Type.String({ description: \"Cypher query to execute\" }),\n\t\t\trepo: repoParam,\n\t\t}),\n\t});\n\n\tconst listRepos = makeHubTool(ctx, {\n\t\tname: \"gitnexus_list_repos\",\n\t\thubTool: \"list_repos\",\n\t\tlabel: \"GitNexus repos\",\n\t\tdescription:\n\t\t\t\"List all repositories (and multi-repo @groups) indexed on GitNexus, with symbol/relationship counts and indexed dates. WHEN TO USE: to discover or refresh what you can query across repositories.\",\n\t\tparameters: Type.Object({}),\n\t\tmapArgs: () => ({}),\n\t});\n\n\treturn [query, context, impact, detectChanges, cypher, listRepos];\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAMnE,eAAO,MAAM,iBAAiB,EAAE,eAAe,EAI9C,CAAC","sourcesContent":["import type { InlineExtension } from \"../core/extensions/types.ts\";\nimport gitnexusExtension from \"./gitnexus/index.ts\";\nimport mcpExtension from \"./mcp/index.ts\";\n\n// llama.cpp support lives in ./llama and is kept in tree but not registered.\n// Re-add `{ name: \"llama.cpp\", factory: llamaExtension, hidden: true }` to turn it back on.\nexport const builtInExtensions: InlineExtension[] = [\n\t{ name: \"gitnexus\", factory: gitnexusExtension },\n\t// No-op until the user writes an mcp.json; connecting nothing costs nothing.\n\t{ name: \"mcp\", factory: mcpExtension },\n];\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import gitnexusExtension from "./gitnexus/index.js";
|
|
2
|
+
import mcpExtension from "./mcp/index.js";
|
|
3
|
+
// llama.cpp support lives in ./llama and is kept in tree but not registered.
|
|
4
|
+
// Re-add `{ name: "llama.cpp", factory: llamaExtension, hidden: true }` to turn it back on.
|
|
5
|
+
export const builtInExtensions = [
|
|
6
|
+
{ name: "gitnexus", factory: gitnexusExtension },
|
|
7
|
+
// No-op until the user writes an mcp.json; connecting nothing costs nothing.
|
|
8
|
+
{ name: "mcp", factory: mcpExtension },
|
|
9
|
+
];
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":"AACA,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAE1C,6EAA6E;AAC7E,4FAA4F;AAC5F,MAAM,CAAC,MAAM,iBAAiB,GAAsB;IACnD,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB,EAAE;IAChD,6EAA6E;IAC7E,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE;CACtC,CAAC","sourcesContent":["import type { InlineExtension } from \"../core/extensions/types.ts\";\nimport gitnexusExtension from \"./gitnexus/index.ts\";\nimport mcpExtension from \"./mcp/index.ts\";\n\n// llama.cpp support lives in ./llama and is kept in tree but not registered.\n// Re-add `{ name: \"llama.cpp\", factory: llamaExtension, hidden: true }` to turn it back on.\nexport const builtInExtensions: InlineExtension[] = [\n\t{ name: \"gitnexus\", factory: gitnexusExtension },\n\t// No-op until the user writes an mcp.json; connecting nothing costs nothing.\n\t{ name: \"mcp\", factory: mcpExtension },\n];\n"]}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export type LlamaModelStatus = "unloaded" | "loading" | "loaded" | "downloading" | "sleeping";
|
|
2
|
+
export interface LlamaModelInfo {
|
|
3
|
+
id: string;
|
|
4
|
+
aliases?: string[];
|
|
5
|
+
status: {
|
|
6
|
+
value: LlamaModelStatus;
|
|
7
|
+
args?: string[];
|
|
8
|
+
failed?: boolean;
|
|
9
|
+
exit_code?: number;
|
|
10
|
+
progress?: Record<string, {
|
|
11
|
+
done: number;
|
|
12
|
+
total: number;
|
|
13
|
+
}>;
|
|
14
|
+
};
|
|
15
|
+
architecture?: {
|
|
16
|
+
input_modalities?: string[];
|
|
17
|
+
output_modalities?: string[];
|
|
18
|
+
};
|
|
19
|
+
source?: string;
|
|
20
|
+
meta?: {
|
|
21
|
+
n_ctx?: number;
|
|
22
|
+
n_ctx_train?: number;
|
|
23
|
+
size?: number;
|
|
24
|
+
ftype?: string;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export interface LlamaModelsResponse {
|
|
28
|
+
data: LlamaModelInfo[];
|
|
29
|
+
object?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface LlamaModelEvent {
|
|
32
|
+
model: string;
|
|
33
|
+
event: string;
|
|
34
|
+
data?: unknown;
|
|
35
|
+
}
|
|
36
|
+
export interface LlamaProgress {
|
|
37
|
+
message: string;
|
|
38
|
+
ratio?: number;
|
|
39
|
+
detail?: string;
|
|
40
|
+
}
|
|
41
|
+
export declare function formatBytes(bytes: number): string;
|
|
42
|
+
export declare function normalizeLlamaServerUrl(value: string): string;
|
|
43
|
+
export declare function llamaInferenceUrl(serverUrl: string): string;
|
|
44
|
+
export declare class LlamaClient {
|
|
45
|
+
readonly serverUrl: string;
|
|
46
|
+
private readonly apiKey;
|
|
47
|
+
constructor(serverUrl: string, apiKey?: string);
|
|
48
|
+
private request;
|
|
49
|
+
list(options?: {
|
|
50
|
+
reload?: boolean;
|
|
51
|
+
signal?: AbortSignal;
|
|
52
|
+
}): Promise<LlamaModelInfo[]>;
|
|
53
|
+
load(model: string, signal?: AbortSignal): Promise<void>;
|
|
54
|
+
unload(model: string, signal?: AbortSignal): Promise<void>;
|
|
55
|
+
unloadAndWait(model: string, signal?: AbortSignal): Promise<void>;
|
|
56
|
+
download(model: string, signal?: AbortSignal): Promise<void>;
|
|
57
|
+
watch(onEvent: (event: LlamaModelEvent) => void, signal?: AbortSignal): Promise<void>;
|
|
58
|
+
loadAndWait(model: string, onProgress: (progress: LlamaProgress) => void, signal?: AbortSignal): Promise<LlamaModelInfo>;
|
|
59
|
+
downloadAndWait(model: string, onProgress: (progress: LlamaProgress) => void, signal?: AbortSignal): Promise<LlamaModelInfo[]>;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/extensions/llama/client.ts"],"names":[],"mappings":"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","sourcesContent":["export type LlamaModelStatus = \"unloaded\" | \"loading\" | \"loaded\" | \"downloading\" | \"sleeping\";\n\nexport interface LlamaModelInfo {\n\tid: string;\n\taliases?: string[];\n\tstatus: {\n\t\tvalue: LlamaModelStatus;\n\t\targs?: string[];\n\t\tfailed?: boolean;\n\t\texit_code?: number;\n\t\tprogress?: Record<string, { done: number; total: number }>;\n\t};\n\tarchitecture?: {\n\t\tinput_modalities?: string[];\n\t\toutput_modalities?: string[];\n\t};\n\tsource?: string;\n\tmeta?: {\n\t\tn_ctx?: number;\n\t\tn_ctx_train?: number;\n\t\tsize?: number;\n\t\tftype?: string;\n\t};\n}\n\nexport interface LlamaModelsResponse {\n\tdata: LlamaModelInfo[];\n\tobject?: string;\n}\n\nexport interface LlamaModelEvent {\n\tmodel: string;\n\tevent: string;\n\tdata?: unknown;\n}\n\nexport interface LlamaProgress {\n\tmessage: string;\n\tratio?: number;\n\tdetail?: string;\n}\n\nfunction errorMessage(payload: unknown, fallback: string): string {\n\tif (typeof payload !== \"object\" || payload === null) return fallback;\n\tconst error = (payload as { error?: unknown }).error;\n\tif (typeof error !== \"object\" || error === null) return fallback;\n\tconst message = (error as { message?: unknown }).message;\n\treturn typeof message === \"string\" && message ? message : fallback;\n}\n\nfunction isModelInfo(value: unknown): value is LlamaModelInfo {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tconst candidate = value as { id?: unknown; status?: { value?: unknown } };\n\treturn typeof candidate.id === \"string\" && typeof candidate.status?.value === \"string\";\n}\n\nfunction linkSignal(source: AbortSignal | undefined, target: AbortController): () => void {\n\tif (!source) return () => {};\n\tif (source.aborted) {\n\t\ttarget.abort(source.reason);\n\t\treturn () => {};\n\t}\n\tconst abort = () => target.abort(source.reason);\n\tsource.addEventListener(\"abort\", abort, { once: true });\n\treturn () => source.removeEventListener(\"abort\", abort);\n}\n\nfunction sleep(ms: number, signal?: AbortSignal): Promise<void> {\n\treturn new Promise((resolve, reject) => {\n\t\tif (signal?.aborted) {\n\t\t\treject(signal.reason ?? new Error(\"Cancelled\"));\n\t\t\treturn;\n\t\t}\n\t\tconst abort = () => {\n\t\t\tclearTimeout(timeout);\n\t\t\treject(signal?.reason ?? new Error(\"Cancelled\"));\n\t\t};\n\t\tconst timeout = setTimeout(() => {\n\t\t\tsignal?.removeEventListener(\"abort\", abort);\n\t\t\tresolve();\n\t\t}, ms);\n\t\tsignal?.addEventListener(\"abort\", abort, { once: true });\n\t});\n}\n\nfunction parseLoadProgress(data: unknown): LlamaProgress | undefined {\n\tif (typeof data !== \"object\" || data === null) return undefined;\n\tconst progress = (data as { progress?: unknown }).progress;\n\tif (typeof progress !== \"object\" || progress === null) return undefined;\n\tconst value = progress as { stages?: unknown; current?: unknown; stage?: unknown; value?: unknown };\n\tconst stage =\n\t\ttypeof value.current === \"string\" ? value.current : typeof value.stage === \"string\" ? value.stage : undefined;\n\tconst stages = Array.isArray(value.stages)\n\t\t? value.stages.filter((entry): entry is string => typeof entry === \"string\")\n\t\t: [];\n\tconst stageRatio = typeof value.value === \"number\" ? Math.max(0, Math.min(1, value.value)) : undefined;\n\tlet ratio = stageRatio;\n\tif (stage && stages.length > 0) {\n\t\tconst index = stages.indexOf(stage);\n\t\tif (index >= 0) ratio = (index + (stageRatio ?? 0)) / stages.length;\n\t}\n\treturn {\n\t\tmessage: stage ? `Loading ${stage.replaceAll(\"_\", \" \")}` : \"Loading model\",\n\t\tratio,\n\t};\n}\n\nfunction parseDownloadProgress(data: unknown): LlamaProgress | undefined {\n\tif (typeof data !== \"object\" || data === null) return undefined;\n\tconst nested = (data as { progress?: unknown }).progress;\n\tconst files = typeof nested === \"object\" && nested !== null ? nested : data;\n\tlet done = 0;\n\tlet total = 0;\n\tfor (const value of Object.values(files as Record<string, unknown>)) {\n\t\tif (typeof value !== \"object\" || value === null) continue;\n\t\tconst entry = value as { done?: unknown; total?: unknown };\n\t\tif (typeof entry.done !== \"number\" || typeof entry.total !== \"number\") continue;\n\t\tdone += entry.done;\n\t\ttotal += entry.total;\n\t}\n\tif (total <= 0) return undefined;\n\treturn {\n\t\tmessage: \"Downloading model\",\n\t\tratio: done / total,\n\t\tdetail: `${formatBytes(done)} / ${formatBytes(total)}`,\n\t};\n}\n\nexport function formatBytes(bytes: number): string {\n\tif (bytes < 1024) return `${bytes} B`;\n\tconst units = [\"KiB\", \"MiB\", \"GiB\", \"TiB\"];\n\tlet value = bytes / 1024;\n\tlet unit = units[0]!;\n\tfor (let index = 1; index < units.length && value >= 1024; index++) {\n\t\tvalue /= 1024;\n\t\tunit = units[index]!;\n\t}\n\treturn `${value >= 10 ? value.toFixed(1) : value.toFixed(2)} ${unit}`;\n}\n\nexport function normalizeLlamaServerUrl(value: string): string {\n\tconst url = new URL(value.trim());\n\tif (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n\t\tthrow new Error(\"Server URL must use http or https\");\n\t}\n\turl.hash = \"\";\n\turl.search = \"\";\n\turl.pathname = url.pathname.replace(/\\/+$/u, \"\").replace(/\\/v1$/u, \"\") || \"/\";\n\treturn url.toString().replace(/\\/$/u, \"\");\n}\n\nexport function llamaInferenceUrl(serverUrl: string): string {\n\treturn `${normalizeLlamaServerUrl(serverUrl)}/v1`;\n}\n\nexport class LlamaClient {\n\treadonly serverUrl: string;\n\tprivate readonly apiKey: string | undefined;\n\n\tconstructor(serverUrl: string, apiKey?: string) {\n\t\tthis.serverUrl = normalizeLlamaServerUrl(serverUrl);\n\t\tthis.apiKey = apiKey;\n\t}\n\n\tprivate async request(path: string, init: RequestInit = {}): Promise<unknown> {\n\t\tconst headers = new Headers(init.headers);\n\t\tif (init.body !== undefined) headers.set(\"Content-Type\", \"application/json\");\n\t\tif (this.apiKey) headers.set(\"Authorization\", `Bearer ${this.apiKey}`);\n\t\tconst timeout = AbortSignal.timeout(15_000);\n\t\tconst signal = init.signal ? AbortSignal.any([init.signal, timeout]) : timeout;\n\t\tconst response = await fetch(`${this.serverUrl}${path}`, { ...init, headers, signal });\n\t\tlet payload: unknown;\n\t\ttry {\n\t\t\tpayload = await response.json();\n\t\t} catch {\n\t\t\tpayload = undefined;\n\t\t}\n\t\tif (!response.ok) throw new Error(errorMessage(payload, `llama.cpp returned HTTP ${response.status}`));\n\t\treturn payload;\n\t}\n\n\tasync list(options: { reload?: boolean; signal?: AbortSignal } = {}): Promise<LlamaModelInfo[]> {\n\t\tconst payload = await this.request(`/models${options.reload ? \"?reload=1\" : \"\"}`, { signal: options.signal });\n\t\tif (typeof payload !== \"object\" || payload === null || !Array.isArray((payload as { data?: unknown }).data)) {\n\t\t\tthrow new Error(\"llama.cpp returned an invalid model catalog\");\n\t\t}\n\t\tconst data = (payload as { data: unknown[] }).data;\n\t\tif (!data.every(isModelInfo)) throw new Error(\"Server is not running in llama.cpp router mode\");\n\t\treturn data;\n\t}\n\n\tasync load(model: string, signal?: AbortSignal): Promise<void> {\n\t\tawait this.request(\"/models/load\", { method: \"POST\", body: JSON.stringify({ model }), signal });\n\t}\n\n\tasync unload(model: string, signal?: AbortSignal): Promise<void> {\n\t\tawait this.request(\"/models/unload\", { method: \"POST\", body: JSON.stringify({ model }), signal });\n\t}\n\n\tasync unloadAndWait(model: string, signal?: AbortSignal): Promise<void> {\n\t\tawait this.unload(model, signal);\n\t\twhile (true) {\n\t\t\tconst entry = (await this.list({ signal })).find((candidate) => candidate.id === model);\n\t\t\tif (!entry || entry.status.value === \"unloaded\") return;\n\t\t\tawait sleep(100, signal);\n\t\t}\n\t}\n\n\tasync download(model: string, signal?: AbortSignal): Promise<void> {\n\t\tawait this.request(\"/models\", { method: \"POST\", body: JSON.stringify({ model }), signal });\n\t}\n\n\tasync watch(onEvent: (event: LlamaModelEvent) => void, signal?: AbortSignal): Promise<void> {\n\t\tconst headers = new Headers();\n\t\tif (this.apiKey) headers.set(\"Authorization\", `Bearer ${this.apiKey}`);\n\t\tconst response = await fetch(`${this.serverUrl}/models/sse`, { headers, signal });\n\t\tif (!response.ok || !response.body) throw new Error(`llama.cpp SSE returned HTTP ${response.status}`);\n\t\tconst reader = response.body.getReader();\n\t\tconst decoder = new TextDecoder();\n\t\tlet buffer = \"\";\n\t\twhile (true) {\n\t\t\tconst chunk = await reader.read();\n\t\t\tif (chunk.done) break;\n\t\t\tbuffer += decoder.decode(chunk.value, { stream: true }).replaceAll(\"\\r\\n\", \"\\n\");\n\t\t\tlet boundary = buffer.indexOf(\"\\n\\n\");\n\t\t\twhile (boundary >= 0) {\n\t\t\t\tconst frame = buffer.slice(0, boundary);\n\t\t\t\tbuffer = buffer.slice(boundary + 2);\n\t\t\t\tconst data = frame\n\t\t\t\t\t.split(\"\\n\")\n\t\t\t\t\t.filter((line) => line.startsWith(\"data:\"))\n\t\t\t\t\t.map((line) => line.slice(5).trimStart())\n\t\t\t\t\t.join(\"\\n\");\n\t\t\t\tif (data) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst event = JSON.parse(data) as LlamaModelEvent;\n\t\t\t\t\t\tif (event && typeof event.model === \"string\" && typeof event.event === \"string\") onEvent(event);\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// Ignore malformed events; catalog polling remains authoritative.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tboundary = buffer.indexOf(\"\\n\\n\");\n\t\t\t}\n\t\t}\n\t}\n\n\tasync loadAndWait(\n\t\tmodel: string,\n\t\tonProgress: (progress: LlamaProgress) => void,\n\t\tsignal?: AbortSignal,\n\t): Promise<LlamaModelInfo> {\n\t\tconst watcher = new AbortController();\n\t\tconst unlink = linkSignal(signal, watcher);\n\t\tlet eventLoaded = false;\n\t\tlet eventError: string | undefined;\n\t\tvoid this.watch((event) => {\n\t\t\tif (event.model !== model) return;\n\t\t\tif (event.event !== \"model_status\" && event.event !== \"status_change\") return;\n\t\t\tconst data = event.data as { status?: unknown } | undefined;\n\t\t\tif (data?.status === \"loaded\") eventLoaded = true;\n\t\t\tif (data?.status === \"unloaded\") eventError = \"Model failed to load\";\n\t\t\tconst progress = parseLoadProgress(event.data);\n\t\t\tif (progress) onProgress(progress);\n\t\t}, watcher.signal).catch(() => {});\n\t\ttry {\n\t\t\tawait this.load(model, signal);\n\t\t\tonProgress({ message: \"Loading model\" });\n\t\t\twhile (true) {\n\t\t\t\tif (signal?.aborted) throw signal.reason ?? new Error(\"Cancelled\");\n\t\t\t\tconst entry = (await this.list({ signal })).find((candidate) => candidate.id === model);\n\t\t\t\tif (entry?.status.value === \"loaded\") return entry;\n\t\t\t\tif (eventLoaded && !entry) return { id: model, status: { value: \"loaded\" } };\n\t\t\t\tif (entry?.status.failed || eventError) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\tentry?.status.exit_code === undefined\n\t\t\t\t\t\t\t? (eventError ?? \"Model failed to load\")\n\t\t\t\t\t\t\t: `Model exited with code ${entry.status.exit_code}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tawait sleep(250, signal);\n\t\t\t}\n\t\t} finally {\n\t\t\tunlink();\n\t\t\twatcher.abort();\n\t\t}\n\t}\n\n\tasync downloadAndWait(\n\t\tmodel: string,\n\t\tonProgress: (progress: LlamaProgress) => void,\n\t\tsignal?: AbortSignal,\n\t): Promise<LlamaModelInfo[]> {\n\t\tconst watcher = new AbortController();\n\t\tconst unlink = linkSignal(signal, watcher);\n\t\tlet finished = false;\n\t\tlet failure: string | undefined;\n\t\tlet sawDownloading = false;\n\t\tlet polls = 0;\n\t\tvoid this.watch((event) => {\n\t\t\tif (event.model !== model) return;\n\t\t\tif (event.event === \"download_finished\") finished = true;\n\t\t\tif (event.event === \"download_failed\") failure = errorMessage(event.data, \"Download failed\");\n\t\t\tif (event.event === \"download_progress\") {\n\t\t\t\tsawDownloading = true;\n\t\t\t\tconst progress = parseDownloadProgress(event.data);\n\t\t\t\tif (progress) onProgress(progress);\n\t\t\t}\n\t\t}, watcher.signal).catch(() => {});\n\t\ttry {\n\t\t\tawait this.download(model, signal);\n\t\t\tonProgress({ message: \"Downloading model\" });\n\t\t\twhile (true) {\n\t\t\t\tif (signal?.aborted) throw signal.reason ?? new Error(\"Cancelled\");\n\t\t\t\tif (failure) throw new Error(failure);\n\t\t\t\tconst models = await this.list({ signal });\n\t\t\t\tpolls++;\n\t\t\t\tconst entry = models.find((candidate) => candidate.id === model);\n\t\t\t\tif (entry?.status.value === \"downloading\") {\n\t\t\t\t\tsawDownloading = true;\n\t\t\t\t\tconst progress = parseDownloadProgress(entry.status.progress);\n\t\t\t\t\tif (progress) onProgress(progress);\n\t\t\t\t} else if (finished || (entry && (sawDownloading || polls >= 2))) {\n\t\t\t\t\treturn this.list({ reload: true, signal });\n\t\t\t\t}\n\t\t\t\tawait sleep(500, signal);\n\t\t\t}\n\t\t} finally {\n\t\t\tunlink();\n\t\t\twatcher.abort();\n\t\t}\n\t}\n}\n"]}
|