@phuetz/code-buddy 1.3.0 → 1.3.2

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.
Files changed (66) hide show
  1. package/README.md +64 -22
  2. package/dist/agent/autonomous/agentic-coding-runner.d.ts +2 -2
  3. package/dist/agent/autonomous/agentic-coding-runner.js +24 -24
  4. package/dist/agent/autonomous/checkpoint-manager.d.ts +2 -2
  5. package/dist/agent/base-agent.d.ts +1 -1
  6. package/dist/agent/base-agent.js +1 -1
  7. package/dist/agent/hermes-tool-parity-local.js +2 -2
  8. package/dist/agent/tool-handler.js +2 -2
  9. package/dist/codebuddy/providers/provider-chatgpt-responses.d.ts +4 -0
  10. package/dist/codebuddy/providers/provider-chatgpt-responses.js +34 -13
  11. package/dist/codebuddy/providers/provider-openai-compat.js +8 -0
  12. package/dist/codebuddy/tool-definitions/code-explorer-tools.d.ts +8 -0
  13. package/dist/codebuddy/tool-definitions/code-explorer-tools.js +24 -0
  14. package/dist/codebuddy/tool-definitions/graph-tools.d.ts +1 -1
  15. package/dist/codebuddy/tool-definitions/graph-tools.js +1 -1
  16. package/dist/codebuddy/tool-definitions/index.d.ts +1 -1
  17. package/dist/codebuddy/tool-definitions/index.js +2 -2
  18. package/dist/codebuddy/tools.d.ts +2 -2
  19. package/dist/codebuddy/tools.js +13 -13
  20. package/dist/collaboration/ai-colab-manager.js +9 -4
  21. package/dist/commands/cli/code-explorer-commands.d.ts +7 -0
  22. package/dist/commands/cli/code-explorer-commands.js +40 -0
  23. package/dist/commands/cli/native-engine-commands.js +64 -0
  24. package/dist/commands/handlers/graph-handlers.d.ts +1 -1
  25. package/dist/commands/handlers/graph-handlers.js +1 -1
  26. package/dist/config/model-tools.js +1 -1
  27. package/dist/daemon/autonomous-loop.d.ts +0 -7
  28. package/dist/daemon/autonomous-loop.js +24 -14
  29. package/dist/fleet/capability-registry.js +9 -1
  30. package/dist/fleet/colab-store.d.ts +109 -3
  31. package/dist/fleet/colab-store.js +181 -6
  32. package/dist/index.js +28 -11
  33. package/dist/kanban/colab-kanban-adapter.d.ts +31 -0
  34. package/dist/kanban/colab-kanban-adapter.js +232 -0
  35. package/dist/knowledge/community-detector.d.ts +1 -1
  36. package/dist/knowledge/community-detector.js +1 -1
  37. package/dist/knowledge/process-detector.d.ts +1 -1
  38. package/dist/knowledge/process-detector.js +1 -1
  39. package/dist/plugins/{gitnexus/GitNexusMCPClient.d.ts → code-explorer/CodeExplorerMCPClient.d.ts} +9 -9
  40. package/dist/plugins/{gitnexus/GitNexusMCPClient.js → code-explorer/CodeExplorerMCPClient.js} +17 -17
  41. package/dist/plugins/{gitnexus/GitNexusManager.d.ts → code-explorer/CodeExplorerManager.d.ts} +16 -16
  42. package/dist/plugins/{gitnexus/GitNexusManager.js → code-explorer/CodeExplorerManager.js} +35 -35
  43. package/dist/plugins/code-explorer/index.d.ts +9 -0
  44. package/dist/plugins/code-explorer/index.js +8 -0
  45. package/dist/providers/provider-catalog.js +23 -1
  46. package/dist/services/prompt-builder.js +9 -9
  47. package/dist/skills/parser.js +1 -1
  48. package/dist/tools/{gitnexus-tool.d.ts → code-explorer-tool.d.ts} +9 -9
  49. package/dist/tools/{gitnexus-tool.js → code-explorer-tool.js} +16 -16
  50. package/dist/tools/metadata.js +3 -3
  51. package/dist/tools/registry/code-explorer-tools.d.ts +18 -0
  52. package/dist/tools/registry/{gitnexus-tools.js → code-explorer-tools.js} +14 -14
  53. package/dist/tools/registry/graph-tools.d.ts +1 -1
  54. package/dist/tools/registry/graph-tools.js +1 -1
  55. package/dist/tools/registry/index.d.ts +1 -1
  56. package/dist/tools/registry/index.js +6 -6
  57. package/dist/tools/registry/kanban-tools.d.ts +1 -1
  58. package/dist/tools/registry/kanban-tools.js +2 -2
  59. package/package.json +2 -2
  60. package/dist/codebuddy/tool-definitions/gitnexus-tools.d.ts +0 -8
  61. package/dist/codebuddy/tool-definitions/gitnexus-tools.js +0 -24
  62. package/dist/commands/cli/gitnexus-commands.d.ts +0 -7
  63. package/dist/commands/cli/gitnexus-commands.js +0 -42
  64. package/dist/plugins/gitnexus/index.d.ts +0 -9
  65. package/dist/plugins/gitnexus/index.js +0 -8
  66. package/dist/tools/registry/gitnexus-tools.d.ts +0 -18
package/README.md CHANGED
@@ -17,7 +17,7 @@
17
17
  <p align="center">
18
18
  <a href="https://github.com/phuetz/code-buddy/stargazers"><img src="https://img.shields.io/github/stars/phuetz/code-buddy?style=flat-square&logo=github&color=feca57&label=Star" alt="GitHub stars"/></a>
19
19
  <img src="https://img.shields.io/badge/Tests-27K%2B-00d26a?style=flat-square&logo=jest" alt="Tests"/>
20
- <img src="https://img.shields.io/badge/v1.3.0-GA-blueviolet?style=flat-square" alt="Version 1.3.0 GA"/>
20
+ <img src="https://img.shields.io/badge/v1.3.1-GA-blueviolet?style=flat-square" alt="Version 1.3.1 GA"/>
21
21
  </p>
22
22
 
23
23
  <br/>
@@ -45,7 +45,7 @@ Watch a **local model reason on screen, then use real tools to do the work** —
45
45
  [Proof ✅](docs/proof.md) ·
46
46
  [Quick Start](#quick-start) ·
47
47
  [In action](#in-action) ·
48
- [Features](#features) ·
48
+ [What it does](#what-code-buddy-does) ·
49
49
  [FAQ](docs/faq.md) ·
50
50
  [Docs](#documentation) ·
51
51
  [Contributing](#contributing)
@@ -279,26 +279,68 @@ The CLI guards this: on Node < 22, `buddy gui` prints a clear upgrade message in
279
279
 
280
280
  ---
281
281
 
282
- ## Features
283
-
284
- | Category | Highlights | Docs |
285
- |:---------|:-----------|:-----|
286
- | **AI Providers** | 15 providers (Grok, Claude, GPT, Gemini, Ollama, LM Studio, AWS Bedrock, Azure, Groq, Together, Fireworks, OpenRouter, vLLM, Copilot, Mistral), circuit breaker, model pairs | [providers.md](docs/providers.md) |
287
- | **Tools** | ~110 tools with RAG selection, multi-strategy edit matching, Codex-style `apply_patch`, streaming, BM25 tool search, code-exec sandbox | [tools-reference.md](docs/tools-reference.md) |
288
- | **Commands** | 190+ slash commands & CLI subcommands (`/goal`, `/dev`, `/pr`, `/lint`, `/switch`, `/think`, `/batch`, …) | [commands.md](docs/commands.md) |
289
- | **Cowork Desktop** | Electron cockpit, embedded engine, backend health/start controls, model settings, permission rules, visual workflows, traces, artifacts, MCP/skills/plugins | [cowork.md](docs/cowork.md), [ARCHITECTURE.md](cowork/ARCHITECTURE.md) |
290
- | **Agents** | Multi-agent orchestration (5-tool API), 8 specialized agents, SWE agent, planning flow, A2A protocol, batch decomposition, agent teams | [agents.md](docs/agents.md) |
291
- | **Goal loops** | `/goal` + `/subgoal` Ralph loop — a judge model re-checks completion every turn and auto-continues until done (turn budget, pause/resume, fail-open); headless `buddy goal`, board goal-mode, peer-session goals | [fleet-guide.md](docs/fleet-guide.md) |
292
- | **Reasoning** | Tree-of-Thought + MCTS (4 depth levels), extended thinking, auto-escalation, `/think` | [reasoning.md](docs/reasoning.md) |
293
- | **Fleet & Autonomy** | Peer-to-peer hub (`peer.chat` / `peer.tool.invoke` / `peer_delegate`), A2A + ACP + MCP interop, 24/7 autonomous service (`buddy autonomy install`), event-driven daemon, free-first local→Tailscale→paid tiering | [fleet-guide.md](docs/fleet-guide.md) |
294
- | **Security** | Guardian Agent (AI risk scoring), OS/Docker/OpenShell sandbox, SSRF guard, secrets vault, write/exec policy, loop & omission detection, output sanitizer | [security.md](docs/security.md) |
295
- | **Context Engine** | Smart compression, tool-output masking, image pruning, transcript repair, pre-compaction flush, JIT context, importance-weighted window | [context-engine.md](docs/context-engine.md) |
296
- | **Channels** | 20+ messaging channels (Telegram, Discord, Slack, WhatsApp, Signal, Teams, Matrix, …), DM pairing, send policy | [channels.md](docs/channels.md) |
297
- | **Companion & Vision** | ChatGPT-backed identity, voice/TTS, proactive check-ins, self-evaluation, mission board; opt-in webcam + MediaPipe face/hand/pose percepts, local face enrollment | [commands.md](docs/commands.md) |
298
- | **Memory & Knowledge** | Persistent + semantic + decision + coding-style memory, cross-session ICM, knowledge-base injection, 40 bundled skills, runtime self-authored skills | [context-engine.md](docs/context-engine.md) |
299
- | **Infrastructure** | HTTP server (OpenAI-compatible), WebSocket gateway, daemon, cron, device nodes, canvas/A2UI, cloud deploy configs, MCP, plugins | [infrastructure.md](docs/infrastructure.md) |
300
- | **Configuration** | Env vars, TOML config with profiles, model-aware limits, per-agent params, i18n (6 locales), personas | [configuration.md](docs/configuration.md) |
301
- | **Git & Code Intel** | Auto-commit (Aider-style), `/pr`, merge-conflict resolver, LSP rename/refactor, bug finder (25+ patterns, 6 langs), OpenAPI generator, IDE extensions | [development.md](docs/development.md) |
282
+ ## What Code Buddy does
283
+
284
+ Code Buddy is one engine terminal, desktop, and HTTP — that an LLM drives to read code, edit files, run commands, search the web, open PRs, and plan complex work. Below is the whole surface, explained. Jump to any area:
285
+
286
+ | Area | In one line | Deep dive |
287
+ |:-----|:------------|:----------|
288
+ | [Providers & login](#providers--login) | 15 LLM providers + ChatGPT/xAI login at **$0** flat-fee, auto-failover, ensembles | [providers.md](docs/providers.md) |
289
+ | [The agentic loop](#the-agentic-loop) | autonomous tool-calling with a middleware pipeline + confirm-before-execute | [CLAUDE.md](CLAUDE.md) |
290
+ | [~110 tools](#110-tools) | edit/shell/web/browser/docs/media, RAG-selected, 5-strategy edit matching | [tools-reference.md](docs/tools-reference.md) |
291
+ | [Reasoning](#reasoning) | extended thinking + Tree-of-Thought / MCTS, `/think` | [reasoning.md](docs/reasoning.md) |
292
+ | [Goal loops & autonomy](#goal-loops--autonomy) | Ralph loop + LLM judge, YOLO, a 24/7 daemon | [fleet-guide.md](docs/fleet-guide.md) |
293
+ | [Multi-AI Fleet](#multi-ai-fleet) | peers call each other's models + read-only tools over WebSocket | [fleet-guide.md](docs/fleet-guide.md) |
294
+ | [Self-improvement](#self-improvement) | authors + empirically gates its own tools/skills (opt-in) | [CLAUDE.md](CLAUDE.md) |
295
+ | [Skills](#skills) | 40 bundled (Office/research/automation) + authored + imported, firewalled | [commands.md](docs/commands.md) |
296
+ | [Memory & context](#memory--context) | compression, importance-weighted window, JIT project context | [context-engine.md](docs/context-engine.md) |
297
+ | [Security & sandboxing](#security--sandboxing) | Guardian risk-scorer, permission modes, sandbox tiers, SSRF guard, secrets | [security.md](docs/security.md) |
298
+ | [Server & infrastructure](#server--infrastructure) | OpenAI-compatible HTTP, WS gateway, daemon, cron | [infrastructure.md](docs/infrastructure.md) |
299
+ | [Channels](#channels) | 20+ messaging platforms with DM-pairing access control | [channels.md](docs/channels.md) |
300
+ | [Git & code intelligence](#git--code-intelligence) | auto-commit, `/pr`, LSP rename, bug finder, the Code Explorer graph | [development.md](docs/development.md) |
301
+ | [Config & modes](#config--modes) | TOML profiles, permission/agent/security modes, model-aware limits | [configuration.md](docs/configuration.md) |
302
+
303
+ ### Providers & login
304
+ Code Buddy talks to **15 LLM providers** through one OpenAI-compatible dispatcher (`src/codebuddy/client.ts`), picking exactly one strategy at startup: Grok, Claude, GPT, Gemini, Ollama, LM Studio, AWS Bedrock, Azure, Groq, Together, Fireworks, OpenRouter, vLLM, Copilot, Mistral. **`buddy login`** signs into a ChatGPT Plus/Pro subscription (routed via OpenAI's Codex Responses backend) and **`buddy login xai`** into SuperGrok — both **flat-fee, no API key, cost reported `$0.0000`** (no per-token metering). Multiple logins coexist: **`buddy llm`** lists them, **`buddy llm ensemble "<q>"`** asks them all and synthesizes one answer, and `CODEBUDDY_LLM_FAILOVER=1` auto-continues on the next active LLM when one errors (per-provider circuit breakers). `[model_pairs]` in TOML splits an *architect* and *editor* model. **Validated live (2026-06-23, real keys / local):** chat works on **Mistral, Ollama, Gemini, xAI/Grok, OpenRouter and DeepSeek**; agentic tool-use (real `create_file`/`bash` calls) is confirmed on **Mistral** and **Grok**. Ollama/Grok/ChatGPT are also reproduced in [`docs/proof.md`](docs/proof.md). Anthropic is wired but its key needs API credits to verify. Other listed providers share the same dispatcher but aren't individually load-tested here.
305
+
306
+ ### The agentic loop
307
+ The core is a stateful multi-turn loop (`src/agent/execution/agent-executor.ts`, `runTurnLoop`): the LLM proposes tool calls, the executor validates + confirms + runs them, feeds results back, and loops until done or you stop. A **middleware pipeline** (`src/agent/middleware/`) adds turn/cost limits, reasoning injection, workflow guards, auto-repair, and quality gates in priority order. Before any risky action the **ConfirmationService** checks permission mode → declarative rules → session flags → the Guardian Agent, and fail-closed guards block catastrophic commands (`rm -rf /`, fork bombs, `drop database`). Run it interactively (`buddy`), one-shot (`buddy -p "<task>"`), or fully autonomous (`buddy --yolo`).
308
+
309
+ ### ~110 tools
310
+ The agent has **~110 tools** — file edit, shell, web search (5-provider fallback), a real headless browser, PDF/Office, media/vision, code-exec, agent orchestration — and uses **RAG selection** to send only the relevant ones each turn (BM25 `tool_search` as fallback). Edits land even in refactored code via a **5-strategy cascade**: exact → flexible (trim/indent) → regex (tokenized) → fuzzy (Levenshtein 10%) → LCS (90%). It also speaks Codex-style **`apply_patch`**, and `code_exec` runs LLM-written JavaScript in a `vm` sandbox (no `process`/`require`, 30s). Extend it with MCP servers (auto-discovered from `.codebuddy/mcp.json`), plugins, or new tool classes.
311
+
312
+ ### Reasoning
313
+ Two systems: **Extended Thinking** (provider budget tokens — off/minimal/low/medium/high/xhigh) and Code Buddy's own **Tree-of-Thought + MCTS** with four depths (shallow CoT → beam search → MCTS → exhaustive). A reasoning middleware auto-detects complex queries and injects guidance; `/think`, `/megathink`, and `/ultrathink` set the depth, and the `reason` tool streams its search. (MCTSr Q-value `Q(a) = 0.5·(min(R) + mean(R))`.)
314
+
315
+ ### Goal loops & autonomy
316
+ A **goal loop** is autonomy with a referee: the agent acts, an LLM **judge** checks the goal after each turn, and it self-corrects until done or the turn budget runs out — no hand-written retry logic. Drive it with `/goal "<objective>"` + `/subgoal` (numbered criteria), or headless `buddy goal`. **`buddy --yolo`** grants 400 tool rounds under a `$100` cap with guardrails, and the **24/7 autonomous daemon** (`buddy autonomy install`) claims tasks from a shared queue and runs them free-first (local → Tailscale → paid).
317
+
318
+ ### Multi-AI Fleet
319
+ Run several Code Buddy instances as **peers on a WebSocket mesh** that observe each other's events live and call each other's models + read-only tools: `peer.chat` (one-shot), `peer.chat-session.*` (multi-turn, persisted), and `peer.tool.invoke` (remote read-only tools, behind three security gates that fail closed). **`/fleet route "<prompt>"`** classifies a task, gathers peer capabilities, runs a privacy lint (SSN/IBAN/card detection), and recommends a delegation; `/fleet listen|send|status|history` manage the mesh. It interops over A2A + ACP + MCP.
320
+
321
+ ### Self-improvement
322
+ An empirically-gated loop (`src/agent/self-improvement/`) that improves Code Buddy's *learned* layer — never its own `src/`. It can author its own **lessons**, **tools** (`register_tool`, sandboxed, namespaced `authored__*`), and **skills**, each passing a gate before it's kept: tools must pass **held-out** behavioral cases the proposer never sees (a tool that hardcodes the visible answers fails fresh inputs → rejected), and skills pass a prompt-injection **firewall**. It's **opt-in and off by default** (`CODEBUDDY_SELF_IMPROVE=true`); `buddy improve status|cycle|tools|skills` drive it.
323
+
324
+ ### Skills
325
+ Skills are procedural guidance (Markdown + frontmatter + triggers) the agent discovers and injects by topic. **40 are bundled**, including ones that build real Office docs and run analysis in *visible* Python steps (preflight libs → write script → run → verify): `xlsx`/`docx`/`pptx`, `doc-ingest` (PDF/Office → Markdown), `data-charts` (pandas/matplotlib), `web-automate` (Playwright), `web-research` (cited briefs). The agent can also **author** its own skills and **import** external ones from Hermes / OpenClaw — every imported skill is scanned by a **firewall** that quarantines prompt-injection/exfiltration payloads (`buddy skills import|imported|list`).
326
+
327
+ ### Memory & context
328
+ For long sessions, `ContextManagerV2` compresses with a sliding window + **importance-weighted scoring** (errors 0.95, decisions 0.90, code 0.70, chat 0.25 — high-value messages survive truncation), masks old tool output, prunes stale images, and repairs the transcript after compaction. **JIT context** loads nearby `CODEBUDDY.md`/`CONTEXT.md`/`AGENTS.md` files when a tool touches a path, and each turn injects `<lessons_context>` and `<todo_context>`. Durable facts persist to bounded project/user memory (`/memory recent|remember|recall`), security-scanned against injection/secret-exfiltration.
329
+
330
+ ### Security & sandboxing
331
+ Layered, fail-closed safety: the **Guardian Agent** scores each operation 0–100 (auto-approve <80, prompt 80–90, deny ≥90; read-only tools skip the LLM call), **permission modes** (`plan`/`acceptEdits`/`dontAsk`/`bypassPermissions`), **sandbox tiers** (read-only / workspace-write / full-access via bubblewrap·landlock·seatbelt, with `.git`/`.ssh`/`.aws` always read-only), an **SSRF guard** (blocks private ranges + IPv4/IPv6 bypass vectors with a DNS check before every fetch), an AES-256-GCM **secrets vault** (`buddy secrets`), a **write policy** (`strict` forces `apply_patch`), and an **output sanitizer** that strips model-leakage tokens.
332
+
333
+ ### Server & infrastructure
334
+ **`buddy server`** exposes an HTTP API (port 3000) including an **OpenAI-compatible `/api/chat/completions`**, plus a **WebSocket gateway** (3001) for desktop/mobile clients (device pairing, presence, Origin-hardened, JWT in production). A **daemon** runs 24/7 with auto-restart, a heartbeat checklist, daily session reset, and a cross-platform service installer (systemd/launchd/Task Scheduler). **Cron** scheduling (`buddy cron add`) supports no-LLM `--watchdog` monitors and `--pre-check` gates so an expensive LLM run only fires when something actually changed.
335
+
336
+ ### Channels
337
+ Code Buddy runs on **20+ messaging platforms** — Telegram, Discord, Slack, WhatsApp, Signal, Matrix, IRC, Nostr, Mattermost, Nextcloud Talk, iMessage (real persistent transports with auto-reconnect) plus REST/webhook adapters (Teams, Google Chat, Feishu, LINE, ntfy, DingTalk, WeCom, …). **DM pairing** prevents unauthorized credit burn: an unknown user gets a 6-char code (15-min TTL) you approve via `buddy pairing approve`. (A few niche adapters — Twitch/Tlon/Gmail — are in-process stubs, and Feishu real-time *inbound* needs the Lark SDK installed.)
338
+
339
+ ### Git & code intelligence
340
+ `buddy dev run` plans + implements + tests + **auto-commits** with a Conventional-Commit message; **`/pr`** opens a summarized PR; `lsp_rename`/`lsp_code_action` drive language servers for safe refactors; the **bug finder** flags 25+ patterns across 6 languages. For whole-repo understanding, the optional **[Code Explorer](https://github.com/phuetz/code-explorer)** (the `gitnexus` MCP server — a standalone Rust code-intelligence engine) pre-indexes the repo into a knowledge graph with 31 tools for impact/blast-radius, coupling, hotspots, and execution traces, answering structural questions with ~40× less context. Code Buddy also runs as an **ACP** agent (`buddy acp`) so editors like Zed can drive it natively.
341
+
342
+ ### Config & modes
343
+ Configure via env vars, **TOML profiles** (`[profiles.<name>]`, `buddy --profile`), and per-project `.codebuddy/settings.json`. **Permission modes** gate approvals, **agent modes** (`plan`/`code`/`ask`/`architect`) restrict the tool surface, and **security modes** (`suggest`/`auto-edit`/`full-auto`) tune the approval flow. Per-model capabilities (context window, max output, patch format) live in `src/config/model-tools.ts`. The UI ships in **English and French (complete)**; `de`/`es`/`ja`/`zh` are registered locale scaffolds that currently fall back to English.
302
344
 
303
345
  ---
304
346
 
@@ -2,7 +2,7 @@ import { type AgenticCodingApprovalDecision, type AgenticCodingExecutionGate, ty
2
2
  import { type AgenticCodingCheckpoint } from './checkpoint-manager.js';
3
3
  import { normalizeGitPath, isPathAllowedByContract, resolveRepoPath } from './agentic-coding-paths.js';
4
4
  export { normalizeGitPath, isPathAllowedByContract, resolveRepoPath };
5
- import { type GitNexusContext, type WorldModelInvariants } from '../../tools/gitnexus-tool.js';
5
+ import { type CodeExplorerContext, type WorldModelInvariants } from '../../tools/code-explorer-tool.js';
6
6
  import type { FleetDispatchProfile } from '../../fleet/dispatch-profile.js';
7
7
  import { persistRunArtifact, applyDeclaredEdits, previewDeclaredEdits, runVerificationCommands } from './agentic-coding-edits.js';
8
8
  export { persistRunArtifact, applyDeclaredEdits, previewDeclaredEdits, runVerificationCommands };
@@ -1648,7 +1648,7 @@ export interface AgenticCodingRunReport {
1648
1648
  verificationRequested: boolean;
1649
1649
  workflow: AgenticCodingWorkflowReport;
1650
1650
  workflowBuilderProposal?: AgenticCodingWorkflowBuilderProposalReport;
1651
- gitnexusEvidence?: GitNexusContext;
1651
+ codeexplorerEvidence?: CodeExplorerContext;
1652
1652
  worldModelInvariants?: WorldModelInvariants | null;
1653
1653
  }
1654
1654
  export interface AgenticCodingObservabilityReport {
@@ -12,7 +12,7 @@ import { normalizeGitPath, isPathAllowedByContract, resolveRepoPath, } from './a
12
12
  // Re-export the extracted path helpers for backward compatibility — they used
13
13
  // to be defined in this module and are imported from here elsewhere.
14
14
  export { normalizeGitPath, isPathAllowedByContract, resolveRepoPath };
15
- import { GitNexusTool } from '../../tools/gitnexus-tool.js';
15
+ import { CodeExplorerTool } from '../../tools/code-explorer-tool.js';
16
16
  import { evaluateScope } from '../scope-awareness.js';
17
17
  import { getActiveRunStore, RunStore } from '../../observability/run-store.js';
18
18
  import { ConfirmationService } from '../../utils/confirmation-service.js';
@@ -2473,13 +2473,13 @@ export function buildAgenticCodingEditProposalProducerDispatch(report, artifacts
2473
2473
  `Recommended tool call: ${fleet.invocation?.tool ?? 'none'} ${JSON.stringify(fleet.invocation?.args ?? {})}`,
2474
2474
  ...fleet.safety.map((note) => `- ${note}`),
2475
2475
  ] : []),
2476
- ...(report.gitnexusEvidence ? [
2476
+ ...(report.codeexplorerEvidence ? [
2477
2477
  '',
2478
- '=== GitNexus Context & Insights ===',
2479
- `Likely Files to Edit: ${JSON.stringify(report.gitnexusEvidence.likelyFiles)}`,
2480
- `Dependent Symbols: ${JSON.stringify(report.gitnexusEvidence.dependentSymbols)}`,
2481
- `Tests to Watch: ${JSON.stringify(report.gitnexusEvidence.testsToWatch)}`,
2482
- `Notes: ${report.gitnexusEvidence.notes || 'None'}`
2478
+ '=== CodeExplorer Context & Insights ===',
2479
+ `Likely Files to Edit: ${JSON.stringify(report.codeexplorerEvidence.likelyFiles)}`,
2480
+ `Dependent Symbols: ${JSON.stringify(report.codeexplorerEvidence.dependentSymbols)}`,
2481
+ `Tests to Watch: ${JSON.stringify(report.codeexplorerEvidence.testsToWatch)}`,
2482
+ `Notes: ${report.codeexplorerEvidence.notes || 'None'}`
2483
2483
  ] : []),
2484
2484
  ...(report.worldModelInvariants ? [
2485
2485
  '',
@@ -2847,7 +2847,7 @@ export function aggregateReports(reports, originalContract, options, status) {
2847
2847
  }
2848
2848
  const uniqueBlockedReasons = Array.from(new Set(blockedReasons));
2849
2849
  const uniqueValidationErrors = Array.from(new Set(validationErrors));
2850
- const gitnexusEvidence = reports.find(r => r.gitnexusEvidence)?.gitnexusEvidence;
2850
+ const codeexplorerEvidence = reports.find(r => r.codeexplorerEvidence)?.codeexplorerEvidence;
2851
2851
  const worldModelInvariants = reports.find(r => r.worldModelInvariants)?.worldModelInvariants;
2852
2852
  const plan = buildExecutionPlan({
2853
2853
  approvalDecision: undefined,
@@ -2901,7 +2901,7 @@ export function aggregateReports(reports, originalContract, options, status) {
2901
2901
  verification,
2902
2902
  verificationRequested: Boolean(options.runVerification),
2903
2903
  workflow: buildWorkflowReport(plan),
2904
- gitnexusEvidence,
2904
+ codeexplorerEvidence,
2905
2905
  worldModelInvariants,
2906
2906
  };
2907
2907
  }
@@ -2972,7 +2972,7 @@ export function buildFinalReport(checkpoint) {
2972
2972
  verification,
2973
2973
  verificationRequested: Boolean(options.runVerification),
2974
2974
  workflow: buildWorkflowReport(plan),
2975
- gitnexusEvidence: checkpoint.gitnexusEvidence,
2975
+ codeexplorerEvidence: checkpoint.codeexplorerEvidence,
2976
2976
  worldModelInvariants: checkpoint.worldModelInvariants,
2977
2977
  };
2978
2978
  }
@@ -3173,24 +3173,24 @@ export async function runAgenticCodingCell(options) {
3173
3173
  const repo = contract?.repo ?? '';
3174
3174
  const rulesFiles = contract ? await collectRulesFiles(contract.repo) : [];
3175
3175
  const executionGate = contract ? assessAgenticCodingExecutionGate(contract) : undefined;
3176
- let gitnexusEvidence;
3176
+ let codeexplorerEvidence;
3177
3177
  let worldModelInvariants = null;
3178
- if (checkpointToResume?.gitnexusEvidence) {
3179
- gitnexusEvidence = checkpointToResume.gitnexusEvidence;
3178
+ if (checkpointToResume?.codeexplorerEvidence) {
3179
+ codeexplorerEvidence = checkpointToResume.codeexplorerEvidence;
3180
3180
  }
3181
3181
  else if (contract) {
3182
- observability.stepStart('gitnexus-context', { task: contract.task });
3183
- const gitnexus = new GitNexusTool();
3184
- gitnexusEvidence = await gitnexus.ask(contract.task);
3185
- observability.stepEnd('gitnexus-context', { hasEvidence: Boolean(gitnexusEvidence) });
3182
+ observability.stepStart('code-explorer-context', { task: contract.task });
3183
+ const codeExplorer = new CodeExplorerTool();
3184
+ codeexplorerEvidence = await codeExplorer.ask(contract.task);
3185
+ observability.stepEnd('code-explorer-context', { hasEvidence: Boolean(codeexplorerEvidence) });
3186
3186
  }
3187
3187
  if (checkpointToResume?.worldModelInvariants !== undefined) {
3188
3188
  worldModelInvariants = checkpointToResume.worldModelInvariants;
3189
3189
  }
3190
3190
  else if (contract) {
3191
3191
  observability.stepStart('world-model-read', { repo: contract.repo });
3192
- const gitnexus = new GitNexusTool();
3193
- worldModelInvariants = await gitnexus.readWorldModel();
3192
+ const codeExplorer = new CodeExplorerTool();
3193
+ worldModelInvariants = await codeExplorer.readWorldModel();
3194
3194
  observability.stepEnd('world-model-read', { hasInvariants: Boolean(worldModelInvariants) });
3195
3195
  }
3196
3196
  let dirtyFiles = [];
@@ -3249,7 +3249,7 @@ export async function runAgenticCodingCell(options) {
3249
3249
  verificationRequested: Boolean(options.runVerification),
3250
3250
  workflow: buildWorkflowReport(plan),
3251
3251
  workflowBuilderProposal,
3252
- gitnexusEvidence,
3252
+ codeexplorerEvidence,
3253
3253
  worldModelInvariants,
3254
3254
  });
3255
3255
  }
@@ -3277,7 +3277,7 @@ export async function runAgenticCodingCell(options) {
3277
3277
  contract: finalContract,
3278
3278
  step: 'initialized',
3279
3279
  timestamp: new Date().toISOString(),
3280
- gitnexusEvidence,
3280
+ codeexplorerEvidence,
3281
3281
  worldModelInvariants,
3282
3282
  });
3283
3283
  observability.stepEnd('checkpoint-save', { checkpointStep: 'initialized', runId: options.runId });
@@ -3473,7 +3473,7 @@ export async function runAgenticCodingCell(options) {
3473
3473
  edges: [],
3474
3474
  },
3475
3475
  workflowBuilderProposal,
3476
- gitnexusEvidence,
3476
+ codeexplorerEvidence,
3477
3477
  worldModelInvariants,
3478
3478
  };
3479
3479
  const tempArtifacts = deriveAgenticCodingProposalLoopArtifacts(options.editProposalFile || path.join(path.dirname(taskFile), 'proposal-loop.json'));
@@ -3611,7 +3611,7 @@ export async function runAgenticCodingCell(options) {
3611
3611
  verificationRequested: Boolean(options.runVerification),
3612
3612
  workflow: buildWorkflowReport(plan),
3613
3613
  workflowBuilderProposal,
3614
- gitnexusEvidence,
3614
+ codeexplorerEvidence,
3615
3615
  worldModelInvariants,
3616
3616
  });
3617
3617
  }
@@ -5550,7 +5550,7 @@ export function buildAgenticCodingProposalLoopCoworkWorkspace(check, queue, step
5550
5550
  kind: 'agentic-coding-harness-contract',
5551
5551
  label: 'Harness / security and orchestration contract',
5552
5552
  mode: 'passive',
5553
- objective: 'Converge Cowork, Code Buddy, GitNexus, Fleet and workflow artifacts around explicit authority boundaries.',
5553
+ objective: 'Converge Cowork, Code Buddy, CodeExplorer, Fleet and workflow artifacts around explicit authority boundaries.',
5554
5554
  safetyNotes: [
5555
5555
  'Harness data is display metadata only.',
5556
5556
  'It defines what each artifact means; it does not execute, approve, write memory, push or deploy.',
@@ -1,6 +1,6 @@
1
1
  import { AgenticCodingTaskContract } from './agentic-coding-contract.js';
2
2
  import type { AgenticCodingRunOptions, AgenticCodingRunReport, AgenticCodingVerificationResult } from './agentic-coding-runner.js';
3
- import { GitNexusContext, WorldModelInvariants } from '../../tools/gitnexus-tool.js';
3
+ import { CodeExplorerContext, WorldModelInvariants } from '../../tools/code-explorer-tool.js';
4
4
  export interface AgenticCodingCheckpoint {
5
5
  runId: string;
6
6
  options: AgenticCodingRunOptions;
@@ -12,7 +12,7 @@ export interface AgenticCodingCheckpoint {
12
12
  reports?: AgenticCodingRunReport[];
13
13
  timestamp: string;
14
14
  verification?: AgenticCodingVerificationResult[];
15
- gitnexusEvidence?: GitNexusContext;
15
+ codeexplorerEvidence?: CodeExplorerContext;
16
16
  worldModelInvariants?: WorldModelInvariants | null;
17
17
  }
18
18
  export declare function getCheckpointPath(runId: string): string;
@@ -192,7 +192,7 @@ export declare abstract class BaseAgent extends EventEmitter implements Agent {
192
192
  getMCPClient(): MCPClient;
193
193
  protected initializeMCP(): void;
194
194
  /** Resolves once MCP server initialization has settled (or no-op if MCP was
195
- * never started). Headless/one-shot callers await this so the gitnexus-style
195
+ * never started). Headless/one-shot callers await this so the code-explorer-style
196
196
  * MCP tools are registered before the first turn instead of racing init. */
197
197
  getMCPReady(): Promise<void>;
198
198
  getContextStats(): import("./facades/agent-context-facade.js").ContextStats;
@@ -317,7 +317,7 @@ export class BaseAgent extends EventEmitter {
317
317
  this.infrastructureFacade.initializeMCP();
318
318
  }
319
319
  /** Resolves once MCP server initialization has settled (or no-op if MCP was
320
- * never started). Headless/one-shot callers await this so the gitnexus-style
320
+ * never started). Headless/one-shot callers await this so the code-explorer-style
321
321
  * MCP tools are registered before the first turn instead of racing init. */
322
322
  getMCPReady() {
323
323
  return this.infrastructureFacade.getMCPReady();
@@ -1,4 +1,4 @@
1
- import { CORE_TOOLS, MORPH_EDIT_TOOL, isMorphEnabled, SEARCH_TOOLS, TODO_TOOLS, KANBAN_TOOLS, MESSAGING_TOOLS, YUANBAO_TOOLS, HOMEASSISTANT_TOOLS, MOA_TOOLS, SPOTIFY_TOOLS, X_SEARCH_TOOLS, FEISHU_TOOLS, CRON_TOOLS, WEB_TOOLS, ADVANCED_TOOLS, MULTIMODAL_TOOLS, COMPUTER_CONTROL_TOOLS, BROWSER_TOOLS, CANVAS_TOOLS, AGENT_TOOLS, FIRECRAWL_TOOLS, LSP_TOOLS, SECRETS_TOOLS, ADVISOR_TOOLS, ASK_USER_QUESTION_TOOLS, EXIT_PLAN_MODE_TOOLS, CODEBASE_REPLACE_TOOLS, SESSION_TOOLS, GITNEXUS_TOOLS, } from '../codebuddy/tool-definitions/index.js';
1
+ import { CORE_TOOLS, MORPH_EDIT_TOOL, isMorphEnabled, SEARCH_TOOLS, TODO_TOOLS, KANBAN_TOOLS, MESSAGING_TOOLS, YUANBAO_TOOLS, HOMEASSISTANT_TOOLS, MOA_TOOLS, SPOTIFY_TOOLS, X_SEARCH_TOOLS, FEISHU_TOOLS, CRON_TOOLS, WEB_TOOLS, ADVANCED_TOOLS, MULTIMODAL_TOOLS, COMPUTER_CONTROL_TOOLS, BROWSER_TOOLS, CANVAS_TOOLS, AGENT_TOOLS, FIRECRAWL_TOOLS, LSP_TOOLS, SECRETS_TOOLS, ADVISOR_TOOLS, ASK_USER_QUESTION_TOOLS, EXIT_PLAN_MODE_TOOLS, CODEBASE_REPLACE_TOOLS, SESSION_TOOLS, CODE_EXPLORER_TOOLS, } from '../codebuddy/tool-definitions/index.js';
2
2
  import { FLEET_TOOLS } from '../codebuddy/fleet-tool-defs.js';
3
3
  import { buildHermesToolParityManifest, } from './hermes-tool-parity-manifest.js';
4
4
  export function collectOfflineBuiltinTools() {
@@ -32,7 +32,7 @@ export function collectOfflineBuiltinTools() {
32
32
  CODEBASE_REPLACE_TOOLS,
33
33
  SESSION_TOOLS,
34
34
  FLEET_TOOLS,
35
- GITNEXUS_TOOLS,
35
+ CODE_EXPLORER_TOOLS,
36
36
  ];
37
37
  const byName = new Map();
38
38
  for (const tool of groups.flat()) {
@@ -16,7 +16,7 @@
16
16
  * Tool instances are lazy-loaded on first access for optimal startup time.
17
17
  */
18
18
  import { TextEditorTool, MorphEditorTool, ImageTool, BashTool, } from "../tools/index.js";
19
- import { getFormalToolRegistry, createTextEditorTools, createBashTools, createLsTools, createSearchTools, createWebTools, createTodoTools, createCronjobTools, createDockerTools, createKubernetesTools, createGitTools, createMiscTools, createBrowserTools, createProcessTools, createVisionTools, createScriptTools, createPlanTools, createKnowledgeTools, createRelationshipIntelligenceTools, createInternetScoutTools, createLeadScoutTools, createBrowserOperatorTools, createWindowsTools, createMemoryTools, createParallelTools, createAttentionTools, createSkillsInspectionTools, createLessonsTools, createUserModelTools, createAliasTools, createMultimodalTools, createAdvancedTools, createCanvasTools, createLspTools, createMergeConflictTools, createVulnScannerTools, createCodebaseReplaceTools, createAdvisorTools, createFleetTools, createAskUserQuestionTools, createExitPlanModeTools, createGuiTools, createSessionTools, createGitNexusTools, createScreenpipeTools, } from "../tools/registry/index.js";
19
+ import { getFormalToolRegistry, createTextEditorTools, createBashTools, createLsTools, createSearchTools, createWebTools, createTodoTools, createCronjobTools, createDockerTools, createKubernetesTools, createGitTools, createMiscTools, createBrowserTools, createProcessTools, createVisionTools, createScriptTools, createPlanTools, createKnowledgeTools, createRelationshipIntelligenceTools, createInternetScoutTools, createLeadScoutTools, createBrowserOperatorTools, createWindowsTools, createMemoryTools, createParallelTools, createAttentionTools, createSkillsInspectionTools, createLessonsTools, createUserModelTools, createAliasTools, createMultimodalTools, createAdvancedTools, createCanvasTools, createLspTools, createMergeConflictTools, createVulnScannerTools, createCodebaseReplaceTools, createAdvisorTools, createFleetTools, createAskUserQuestionTools, createExitPlanModeTools, createGuiTools, createSessionTools, createCodeExplorerTools, createScreenpipeTools, } from "../tools/registry/index.js";
20
20
  import { createRegisterToolTool } from "../tools/register-tool-handler.js";
21
21
  import { getMCPManager } from "../codebuddy/tools.js";
22
22
  import { getErrorMessage } from "../errors/index.js";
@@ -238,7 +238,7 @@ export class ToolHandler {
238
238
  ...createExitPlanModeTools(),
239
239
  ...createGuiTools(),
240
240
  ...createSessionTools(),
241
- ...createGitNexusTools(),
241
+ ...createCodeExplorerTools(),
242
242
  ...createScreenpipeTools(),
243
243
  // Self-improvement: the agent can author its own tools (opt-in only).
244
244
  ...(process.env.CODEBUDDY_SELF_IMPROVE === 'true' ? [createRegisterToolTool()] : []),
@@ -124,6 +124,10 @@ export declare class ChatGptResponsesProvider implements Provider {
124
124
  */
125
125
  private lastTurnReasoningItems;
126
126
  private disableModelFallback;
127
+ /** The model this provider was constructed with (the user's configured
128
+ * session model). Never mutated by per-call overrides or fallback, so it is
129
+ * the safe remap target when a mis-routed / non-Codex model arrives. */
130
+ private readonly configuredModel;
127
131
  constructor(opts: ChatGptResponsesProviderOptions);
128
132
  setModel(model: string): void;
129
133
  chat(messages: CodeBuddyMessage[], tools?: CodeBuddyTool[], opts?: ChatOptions): Promise<CodeBuddyResponse>;
@@ -54,11 +54,7 @@ function pickFallbackModel(current) {
54
54
  return FALLBACK_MODELS[idx + 1] ?? null;
55
55
  }
56
56
  /** Models served only by the classic OpenAI API — the ChatGPT/Codex backend
57
- * never exposes them. When one reaches this provider WITHOUT an explicit user
58
- * choice (e.g. a secondary call inheriting the global `gpt-4o` config default
59
- * instead of the active session model), remap proactively to the known-good
60
- * Codex model. This skips a guaranteed-failed round-trip and the noisy
61
- * user-facing warning. (smoke-test finding F7, 2026-05-29) */
57
+ * never exposes them. (smoke-test finding F7, 2026-05-29) */
62
58
  const CODEX_UNSUPPORTED_MODELS = new Set([
63
59
  'gpt-4o',
64
60
  'gpt-4o-mini',
@@ -66,13 +62,33 @@ const CODEX_UNSUPPORTED_MODELS = new Set([
66
62
  'gpt-4',
67
63
  'gpt-3.5-turbo',
68
64
  ]);
69
- function resolveCodexModel(model, hasExplicitModel) {
70
- if (!hasExplicitModel && CODEX_UNSUPPORTED_MODELS.has(model)) {
71
- const remapped = FALLBACK_MODELS[0] ?? 'gpt-5.2';
72
- logger.debug(`[chatgpt-responses] "${model}" is not served by the Codex backend; using "${remapped}". Set --model to override.`);
73
- return remapped;
74
- }
75
- return model;
65
+ /** True when the ChatGPT/Codex backend can actually serve `model`: the gpt-5
66
+ * family, the o-series reasoning models, and codex-suffixed slugs. Classic
67
+ * gpt-4* (CODEX_UNSUPPORTED_MODELS) and other vendors' models (grok-*,
68
+ * claude-*, gemini-*, …) are NOT served and would 400. */
69
+ function isCodexServableModel(model) {
70
+ if (CODEX_UNSUPPORTED_MODELS.has(model))
71
+ return false;
72
+ if (FALLBACK_MODELS.includes(model))
73
+ return true;
74
+ return /^gpt-5/i.test(model) || /^o[1-9]/i.test(model) || /codex/i.test(model);
75
+ }
76
+ /** When a model the Codex backend cannot serve reaches this provider WITHOUT an
77
+ * explicit `--model`, remap proactively — preferring the user's configured
78
+ * session model — instead of firing a guaranteed-failed round-trip (and a
79
+ * confusing fallback to yet another unsupported slug). Two real mis-routes hit
80
+ * this: a secondary call inheriting a classic `gpt-4o` default (F7), and the
81
+ * agent's task-router handing back a `grok-*` coding model on a ChatGPT session
82
+ * (which otherwise 400s, then falls back to gpt-5.2 and 400s again → crash).
83
+ * An explicit `--model` is always respected. (cross-vendor fix, 2026-06-21) */
84
+ function resolveCodexModel(model, hasExplicitModel, configuredModel) {
85
+ if (hasExplicitModel || isCodexServableModel(model))
86
+ return model;
87
+ const target = configuredModel && isCodexServableModel(configuredModel)
88
+ ? configuredModel
89
+ : (FALLBACK_MODELS[0] ?? 'gpt-5.2');
90
+ logger.debug(`[chatgpt-responses] "${model}" is not served by the Codex backend; using "${target}". Set --model to override.`);
91
+ return target;
76
92
  }
77
93
  // ─────────────────────────────────────────────────────────────────────
78
94
  // Provider implementation
@@ -96,10 +112,15 @@ export class ChatGptResponsesProvider {
96
112
  */
97
113
  lastTurnReasoningItems = [];
98
114
  disableModelFallback;
115
+ /** The model this provider was constructed with (the user's configured
116
+ * session model). Never mutated by per-call overrides or fallback, so it is
117
+ * the safe remap target when a mis-routed / non-Codex model arrives. */
118
+ configuredModel;
99
119
  constructor(opts) {
100
120
  this.authProvider = opts.authProvider;
101
121
  this.refreshAuth = opts.refreshAuth ?? opts.authProvider;
102
122
  this.currentModel = opts.model;
123
+ this.configuredModel = opts.model;
103
124
  this.promptCacheKey = `cb-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
104
125
  this.disableModelFallback = opts.disableModelFallback ?? false;
105
126
  }
@@ -148,7 +169,7 @@ export class ChatGptResponsesProvider {
148
169
  };
149
170
  }
150
171
  async *chatStream(messages, tools = [], opts = {}) {
151
- const model = resolveCodexModel(opts.model ?? this.currentModel, opts.model != null);
172
+ const model = resolveCodexModel(opts.model ?? this.currentModel, opts.model != null, this.configuredModel);
152
173
  // If this is a brand-new conversational turn (last user message has
153
174
  // no preceding tool round in messages), drop any stale reasoning
154
175
  // blobs from the previous turn — they belonged to a different
@@ -317,6 +317,14 @@ export class OpenAICompatProvider {
317
317
  if (this.isLocalInference()) {
318
318
  return false;
319
319
  }
320
+ // `search_parameters` is an xAI/Grok-specific field. Sending it to other
321
+ // OpenAI-compatible providers (Mistral, Groq, Together, Fireworks, …)
322
+ // is rejected with HTTP 422. When search is off (the default) there is
323
+ // nothing to send anyway, so omit the field — a plain request must never
324
+ // carry a disabled-search config that breaks the upstream.
325
+ if (!searchParams.mode || searchParams.mode === 'off') {
326
+ return false;
327
+ }
320
328
  if (this.isXaiProvider()) {
321
329
  logger.debug('Skipping deprecated search_parameters for xAI provider', {
322
330
  source: 'OpenAICompatProvider',
@@ -0,0 +1,8 @@
1
+ /**
2
+ * CodeExplorer Tool Definitions
3
+ *
4
+ * OpenAI function calling schema for the CodeExplorer tool.
5
+ */
6
+ import type { CodeBuddyTool } from './types.js';
7
+ export declare const CODE_EXPLORER_ASK_TOOL: CodeBuddyTool;
8
+ export declare const CODE_EXPLORER_TOOLS: CodeBuddyTool[];
@@ -0,0 +1,24 @@
1
+ /**
2
+ * CodeExplorer Tool Definitions
3
+ *
4
+ * OpenAI function calling schema for the CodeExplorer tool.
5
+ */
6
+ export const CODE_EXPLORER_ASK_TOOL = {
7
+ type: 'function',
8
+ function: {
9
+ name: 'code_explorer_ask',
10
+ description: 'Consult CodeExplorer for a query or code understanding request. Returns related files, dependent symbols, tests to watch, and technical recommendations. This is a read-only tool.',
11
+ parameters: {
12
+ type: 'object',
13
+ properties: {
14
+ query: {
15
+ type: 'string',
16
+ description: 'The query or task description to ask CodeExplorer about.',
17
+ },
18
+ },
19
+ required: ['query'],
20
+ },
21
+ },
22
+ };
23
+ export const CODE_EXPLORER_TOOLS = [CODE_EXPLORER_ASK_TOOL];
24
+ //# sourceMappingURL=code-explorer-tools.js.map
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Graph Tool Definitions — GitNexus Knowledge Graph
2
+ * Graph Tool Definitions — CodeExplorer Knowledge Graph
3
3
  *
4
4
  * OpenAI function calling schemas for:
5
5
  * - analyze_impact: Blast radius analysis for symbol changes
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Graph Tool Definitions — GitNexus Knowledge Graph
2
+ * Graph Tool Definitions — CodeExplorer Knowledge Graph
3
3
  *
4
4
  * OpenAI function calling schemas for:
5
5
  * - analyze_impact: Blast radius analysis for symbol changes
@@ -37,6 +37,6 @@ export { EXIT_PLAN_MODE_TOOL, EXIT_PLAN_MODE_TOOLS, } from './exit-plan-mode-too
37
37
  export { CODEBASE_REPLACE_TOOL, CODEBASE_REPLACE_TOOLS, } from './codebase-replace-tools.js';
38
38
  export { GENERATE_DOCUMENT_TOOL, DOCUMENT_GENERATOR_TOOLS, } from './document-tools.js';
39
39
  export { SESSION_TOOLS } from './session-tools.js';
40
- export { GITNEXUS_ASK_TOOL, GITNEXUS_TOOLS, } from './gitnexus-tools.js';
40
+ export { CODE_EXPLORER_ASK_TOOL, CODE_EXPLORER_TOOLS, } from './code-explorer-tools.js';
41
41
  export type { CodeBuddyTool as Tool } from './types.js';
42
42
  export * from "./windows-tools.js";
@@ -68,7 +68,7 @@ export { CODEBASE_REPLACE_TOOL, CODEBASE_REPLACE_TOOLS, } from './codebase-repla
68
68
  export { GENERATE_DOCUMENT_TOOL, DOCUMENT_GENERATOR_TOOLS, } from './document-tools.js';
69
69
  // Session tools (multi-agent coordination — Phase E wake)
70
70
  export { SESSION_TOOLS } from './session-tools.js';
71
- // GitNexus tools
72
- export { GITNEXUS_ASK_TOOL, GITNEXUS_TOOLS, } from './gitnexus-tools.js';
71
+ // CodeExplorer tools
72
+ export { CODE_EXPLORER_ASK_TOOL, CODE_EXPLORER_TOOLS, } from './code-explorer-tools.js';
73
73
  export * from "./windows-tools.js";
74
74
  //# sourceMappingURL=index.js.map
@@ -27,8 +27,8 @@ export declare function getBuiltinToolNames(): string[];
27
27
  export declare function initializeToolRegistry(): void;
28
28
  export declare function getMCPManager(): MCPManager;
29
29
  /**
30
- * True when the Code Explorer (gitnexus) MCP tools are connected — i.e. at least
31
- * one `mcp__gitnexus__*` tool is registered. Used to conditionally steer the
30
+ * True when the Code Explorer (code-explorer) MCP tools are connected — i.e. at least
31
+ * one `mcp__code-explorer__*` tool is registered. Used to conditionally steer the
32
32
  * agent toward Code Explorer for relationship/impact questions. Returns false
33
33
  * (no behavior change) whenever Code Explorer is not installed.
34
34
  */