Substantially expands locode's tool loop toward feature parity with Claude Code: - web_search / web_fetch: DuckDuckGo-backed search and URL fetching (HTML stripped to text) - git_status / git_commit: structured git tools with real diff/status/commit-list previews before any mutating operation is confirmed - agent tool: sub-agents run an isolated, headless tool loop sharing the parent's permissions; bounded by an explicit depth guard (no nested sub-agents) and a 120s hard timeout, independent of the toolset already excluding `agent` for sub-agent sessions - MCP client support (stdio + streamable HTTP transports) via the official SDK: locode connects to servers configured in `.mcp.json` or via `locode mcp add`, and exposes their tools alongside the built-in ones, namespaced as `mcp__<server>__<tool>` - Session persistence: conversations auto-save after every turn; `--continue`/`--resume`, `locode sessions list/rm`, and an interactive resume picker - Context compaction: tracks real token usage via `stream_options.include_usage` (falling back to a char-based estimate), auto-detects the model's context window (Ollama/LM Studio native APIs, cached, else a configurable default), and auto-summarizes the conversation at 85% usage or on demand via /compact - Status bar and welcome banner: added a context-usage indicator and fixed several dim-by-default colors that were hard to read Session/loop architecture changed to support all of this: Session now carries its own toolset (tools + registry + OpenAI schemas) built from local + MCP tools, so runTurn no longer depends on a fixed global tool list — the same mechanism that lets sub-agents inherit MCP tools while excluding `agent` itself. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
50 lines
1.1 KiB
JSON
50 lines
1.1 KiB
JSON
{
|
|
"name": "locode",
|
|
"version": "0.1.0",
|
|
"description": "Agentic coding CLI for local models served via Ollama and LM Studio",
|
|
"type": "module",
|
|
"bin": {
|
|
"locode": "dist/cli.js"
|
|
},
|
|
"files": [
|
|
"dist"
|
|
],
|
|
"engines": {
|
|
"node": ">=20"
|
|
},
|
|
"scripts": {
|
|
"build": "tsup",
|
|
"dev": "tsx src/cli.ts",
|
|
"typecheck": "tsc --noEmit",
|
|
"test": "vitest run",
|
|
"prepublishOnly": "npm run build"
|
|
},
|
|
"dependencies": {
|
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
"@vscode/ripgrep": "^1.18.0",
|
|
"commander": "^13.0.0",
|
|
"diff": "^9.0.0",
|
|
"env-paths": "^4.0.0",
|
|
"execa": "^9.6.1",
|
|
"fast-glob": "^3.3.3",
|
|
"ink": "^7.1.0",
|
|
"ink-select-input": "^6.2.0",
|
|
"ink-spinner": "^5.0.0",
|
|
"ink-text-input": "^6.0.0",
|
|
"marked": "^15.0.12",
|
|
"marked-terminal": "^7.3.0",
|
|
"openai": "^6.45.0",
|
|
"react": "^19.2.7",
|
|
"zod": "^4.4.3"
|
|
},
|
|
"devDependencies": {
|
|
"@types/marked-terminal": "^6.1.1",
|
|
"@types/node": "^22.10.0",
|
|
"@types/react": "^19.2.17",
|
|
"tsup": "^8.3.0",
|
|
"tsx": "^4.19.0",
|
|
"typescript": "^5.7.0",
|
|
"vitest": "^3.0.0"
|
|
}
|
|
}
|