neko-harness 0.5.2 → 0.5.4

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/README.md CHANGED
@@ -6,6 +6,8 @@ A local AI coding assistant for the terminal, the browser and your phone: it rea
6
6
 
7
7
  > The Chinese version is the master copy. If this page and [`docs/README.zh-CN.md`](docs/README.zh-CN.md) disagree, the Chinese page is correct.
8
8
 
9
+ ![neko coding assistant: one agent for the terminal, the web UI and the phone](docs/assets/neko-poster-light.webp)
10
+
9
11
  ## Contents
10
12
 
11
13
  - [Requirements](#requirements)
@@ -85,11 +87,12 @@ Keys can come from environment variables instead (`DEEPSEEK_API_KEY`, `OPENROUTE
85
87
  - **Background jobs.** The `job` tool moves long commands (`npm run dev`, `uv run …`) to the background, up to 4 at a time. When one finishes the assistant is told and keeps going; live output and manual stops live in the web top bar **Jobs** and TUI `/jobs`. Jobs still running when the gateway restarts are marked lost and never re-run.
86
88
  - **Todos.** For multi-step work the assistant keeps an ordered, read-only todo list. Web top bar **Todo n/m**, TUI `/todos`, progress entry on the mobile chat page. It is saved with the session and survives restarts and compaction; subagents cannot use it.
87
89
  - **Questions.** When a decision is missing, the assistant asks with `ask_user`: single or multiple choice — a recommended option is marked but never preselected — with optional text, or skip. Answer above the composer in the web UI, with `Ctrl+O` or `/question` in the TUI, or on the mobile chat page. The answer counts only once submitted (`Enter` in the TUI); the assistant stays paused meanwhile and messages you send queue behind the answer. Questions and options are plain text.
90
+ - **Codemode.** Instead of one tool call per step, the assistant can write a short JavaScript script that calls `read`, `grep`, `edit`, `bash` and other tools in one go. Three modes: `off` (default), `on` (the script tool is offered next to the normal tools) and `only` (the model sees just the script tool plus todos, questions and subagents). Pick the mode in TUI `/codemode`, web **Settings → Codemode** or `codemode.mode` in the config file; a saved value wins over the config file and applies to new sessions only. Nested calls show as a list on the tool card, and edits made from a script appear in the workspace changes like any other edit. A script runs in a worker (at most 2 at a time, 256 MiB each) with a 60 s wait; approvals and plan mode apply to nested calls as usual.
88
91
  - **Web search.** Tavily by default — keyless mode is rate-limited until you add a key — or DeepSeek search and fetch, reusing your DeepSeek key. Pick the provider in web **Settings → Web search**, TUI `/search`, or `webSearch.provider` in the config file. DeepSeek search bills per successful request (CNY 5 per 1000).
89
92
 
90
93
  ### Clients
91
94
 
92
- **Web** — chat, workspace sidebar (files, changes, open in editor), skill market, and settings: `/settings` Model services, `/settings/search` Web search, `/settings/context` Context, `/settings/appearance` Appearance, `/settings/language` Language, `/settings/mobile` Mobile pairing, `/about` About and updates. The workspace, job and subagent panels share one width: drag its edge (or use ←/→ and Home/End, double-click to reset); it is remembered in the browser.
95
+ **Web** — chat, workspace sidebar (files, changes, open in editor), skill market, and settings: `/settings` Model services, `/settings/search` Web search, `/settings/context` Context, `/settings/codemode` Codemode, `/settings/appearance` Appearance, `/settings/language` Language, `/settings/mobile` Mobile pairing, `/about` About and updates. The workspace, job and subagent panels share one width: drag its edge (or use ←/→ and Home/End, double-click to reset); it is remembered in the browser.
93
96
 
94
97
  The web UI is available in Chinese (default) and English: switch it in **Settings → Language**. **Settings → Appearance** sets the theme (Sakura, Paper or Ink) and the chat typography (font, size, weight, line height). Both are stored in the browser only, apply to that browser alone, and do not affect the TUI or the mobile app.
95
98
 
@@ -100,6 +103,8 @@ The web UI is available in Chinese (default) and English: switch it in **Setting
100
103
  | `/login`, `/model`, `/think` | providers and keys, model, thinking level |
101
104
  | `/new`, `/sessions`, `/fork`, `/archive` | sessions |
102
105
  | `/compact`, `/context` | compaction, pruning and their settings |
106
+ | `/continue` | run again on the same context after a run that ended without an answer (the web UI shows a **Continue** button) |
107
+ | `/codemode` | codemode mode (off, on, only) for new sessions |
103
108
  | `/copy`, `/export` | copy the last answer, export the session |
104
109
  | `/agents`, `/jobs`, `/todos`, `/question`, `/plan` | delegated work, background jobs, todos, questions, plan mode |
105
110
  | `/search`, `/skills`, `/theme`, `/language`, `/version`, `/help` | search provider, skill market, theme, language, version and updates, shortcuts |
@@ -152,6 +157,7 @@ CLI flags > config file > built-in defaults. `neko tui --help`, `neko web --help
152
157
  "defaultModel": { "provider": "deepseek", "modelId": "deepseek-flash" },
153
158
  "thinkingLevel": "high",
154
159
  "webSearch": { "provider": "tavily" },
160
+ "codemode": { "mode": "off" },
155
161
  "context": {
156
162
  "compaction": { "enabled": true, "triggerPercent": 80, "keepRecentTokens": 20000 },
157
163
  "pruning": { "enabled": false, "triggerPercent": 35, "keepRecent": 10 }
@@ -169,11 +175,13 @@ CLI flags > config file > built-in defaults. `neko tui --help`, `neko web --help
169
175
  | `webSearch.provider` | Initial search provider, `tavily` or `deepseek`; a choice saved in the UI wins |
170
176
  | `context.compaction` | `enabled`, `triggerPercent` (1–99), `keepRecentTokens`; unset fields keep the native policy |
171
177
  | `context.pruning` | `enabled`, `triggerPercent` (1–99), `keepRecent`, `minChars`, `minSavePercent`; off by default |
178
+ | `codemode.mode` | `off` (default), `on` or `only`; applies to new sessions, a choice saved in the UI wins |
179
+ | `maxTurns` | Tool rounds one run may take in new sessions and their subagents (integer ≥ 1, unset means no limit); a run that reaches it stops and can be continued |
172
180
  | `shell.path` | Git Bash `bash.exe` on Windows (a WSL `bash.exe` is rejected) |
173
181
 
174
182
  ### Data and environment
175
183
 
176
- - `~/.neko/neko.sqlite` — sessions, messages, documents and settings, including the values saved from the UIs (default model, enabled providers, context settings, search provider).
184
+ - `~/.neko/neko.sqlite` — sessions, messages, documents and settings, including the values saved from the UIs (default model, enabled providers, context settings, codemode mode, search provider).
177
185
  - `~/.neko/credentials.json` — keys saved in the UI, in plain text for your user. Resetting a provider's key means removing it from the UI or this file.
178
186
  - `~/.neko/gateway-server-id`, socket and port files — gateway discovery used by the UIs; replaced automatically. `~/.neko/update-check.json` caches the last update check.
179
187
  - Environment variables: one per provider (`DEEPSEEK_API_KEY`, `OPENROUTER_API_KEY`, `OPENCODE_API_KEY`, …), `TAVILY_API_KEY` for web search, `NEKO_THEME` for the TUI theme, `NEKO_LANG` for the TUI language.