@cerebriline/core 4.100.255 → 4.100.257

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 (48) hide show
  1. package/assets/prompt-templates/claude.md +123 -90
  2. package/assets/prompt-templates/deepseek.md +62 -20
  3. package/assets/prompt-templates/default.md +14 -14
  4. package/assets/prompt-templates/gemma.md +46 -18
  5. package/assets/prompt-templates/glm.md +60 -35
  6. package/assets/prompt-templates/kimi-k3.md +41 -32
  7. package/assets/prompt-templates/kimi.md +35 -31
  8. package/assets/prompt-templates/minimax-m3.1-flash.md +563 -0
  9. package/assets/prompt-templates/minimax.md +72 -92
  10. package/assets/prompt-templates/nemotron.md +50 -78
  11. package/assets/prompt-templates/qwen.md +83 -69
  12. package/dist/cloud/index.js +1 -1
  13. package/dist/document-reader-child.js +13 -13
  14. package/dist/extensions/config/prompt-template-review.d.ts +41 -1
  15. package/dist/extensions/context/agentic-compaction.d.ts +2 -1
  16. package/dist/extensions/context/capped-thinking.d.ts +24 -2
  17. package/dist/extensions/context/compaction-shared.d.ts +47 -11
  18. package/dist/extensions/context/compaction.d.ts +1 -1
  19. package/dist/extensions/context/council-compaction.d.ts +3 -1
  20. package/dist/extensions/context/replay-compaction.d.ts +1 -1
  21. package/dist/extensions/context/tool-ledger.d.ts +6 -0
  22. package/dist/extensions/tools/edit-verification.d.ts +7 -5
  23. package/dist/extensions/tools/executors/bash.d.ts +22 -0
  24. package/dist/extensions/tools/executors/document/formats.d.ts +6 -0
  25. package/dist/extensions/tools/executors/read-receipts.d.ts +12 -0
  26. package/dist/extensions/tools/helpers.d.ts +12 -0
  27. package/dist/extensions/tools/librarian-tools.d.ts +18 -0
  28. package/dist/extensions/tools/list-files.d.ts +1 -1
  29. package/dist/extensions/tools/schemas.d.ts +32 -0
  30. package/dist/extensions/tools/team/delegated-agent.d.ts +8 -1
  31. package/dist/hub/daemon/entry.js +609 -595
  32. package/dist/hub/index.js +626 -612
  33. package/dist/index.d.ts +2 -1
  34. package/dist/index.js +1403 -3740
  35. package/dist/remote/remote-helper-entry.js +1 -1
  36. package/dist/remote/remote-helper.js +1 -1
  37. package/dist/runtime/atomic/file-revisions.d.ts +2 -0
  38. package/dist/runtime/atomic/revision-capture.d.ts +1 -1
  39. package/dist/runtime/host/loop-cut-log.d.ts +18 -0
  40. package/dist/runtime/orchestration/session-runtime.d.ts +5 -0
  41. package/dist/runtime/safety/struggle-detector.d.ts +1 -1
  42. package/dist/services/llms/apihandler-agent-model-adapter.d.ts +4 -2
  43. package/dist/services/retrieval/tar-extract.d.ts +9 -0
  44. package/dist/session/persisted-tool-result-content.d.ts +10 -1
  45. package/dist/session/services/message-builder.d.ts +15 -1
  46. package/dist/session/tool-result-format-pin.d.ts +17 -0
  47. package/dist/types/config.d.ts +9 -2
  48. package/package.json +4 -4
@@ -7,17 +7,29 @@ match:
7
7
 
8
8
  <!-- PROVENANCE -- written by scripts/review-prompt-templates.mts, not by the model.
9
9
 
10
- Sections `grep`, `sed`, `awk` written by glm-5.3:cloud (Ollama family `glm_dsa_moe`) on 2026-09-12.
10
+ Sections `apply_patch`, `awk`, `editor`, `fetch_web_content`, `grep`, `read_files`, `search_codebase`, `sed`, `check_file` written by glm-5.3-flash-tpl2:latest (family declared as `glm5_next`, because the tag reports none of its own) on 2026-10-22.
11
+ Every other section is as it was. Before this run:
11
12
 
12
- Every other section is unchanged. Written by glm-5.3-flash-tpl2:latest (family declared as `glm5_next`, because the tag reports none of its own) on 2026-09-12.
13
- Run, with its log: prompt-reviews/regen/20260912-2340-glm-5.3-cloud
13
+ Sections `grep`, `sed`, `awk` written by glm-5.3:cloud (Ollama family `glm_dsa_moe`) on 2026-09-12.
14
+
15
+ Every other section is unchanged. Written by glm-5.3-flash-tpl2:latest (family declared as `glm5_next`, because the tag reports none of its own) on 2026-09-12.
16
+ Run, with its log: prompt-reviews/regen/20260912-2340-glm-5.3-cloud
17
+
18
+ Run, with its log: prompt-reviews/regen/20261022-0652-glm-5.3-flash-tpl2-latest
14
19
 
15
20
  Sampler asked for by the generator, overriding the model's own:
16
21
  temperature 0.2
17
22
 
18
23
  Sampler the tag sources (`/api/show`), which applies to every key
19
24
  the request above does not set:
20
- (none reported)
25
+ num_predict 131072
26
+ presence_penalty 0.1
27
+ repeat_last_n 2048
28
+ repeat_penalty 1.1
29
+ temperature 1
30
+ top_p 0.95
31
+ frequency_penalty 0.1
32
+ num_ctx 262144
21
33
 
22
34
  The script hands a model the prompt it would really receive, names the
23
35
  failures observed with models in its family, and asks for the version it
@@ -57,52 +69,56 @@ If the request is a simple question with no coding work in it, answer it directl
57
69
  {{CLINE_METADATA}}
58
70
 
59
71
  # tool: read_files
72
+
60
73
  Reads text and image files at absolute paths. This is how a file gets read — not `cat`, `head` or `tail` through `run_commands`.
61
74
 
62
75
  `files` is a list of objects, one per file: `path` (required), plus optional `start_line` and `end_line` for an inclusive one-based range on that file, and optional `line_numbers` — set it to `false` when you are reading in order to copy text into `editor`, because returned text carries a ` 92 | ` gutter that will not match anything if pasted into another tool.
63
76
 
64
- Read ranges, not files. A diagnostic, a stack trace, a `search_codebase` hit or a `ask_lsp` result already names a line: read about 30 lines either side of it, and widen only if what you needed turns out to lie outside. Reading a file whole is for when you have no line to start from and the file is genuinely small. Every line returned stays in the conversation for the rest of the task, so reading more than you need crowds out the room left to reason with. When you already know several files you need, read them all in one call, in the same response as your other independent calls. Binary files that are not images, and very large files, are not supported.
77
+ One read returns at most 2000 lines or ~47k characters; a longer file reports its total line count instead, and you page through it with `start_line`/`end_line` on that file's entry.
65
78
 
66
- Output: one object per requested file, in the order requested — `{query, result, success, error?}`. `query` echoes the path you asked for, as `path:start-end` when you gave a range. `result` is the content with every line prefixed by its number as ` 92 | text`; those numbers are how you aim an edit, and they are not in the file. A failed entry has `success: false` with the reason in `error`.
67
- {{DEFAULT}}
79
+ Read ranges, not files. A diagnostic, a stack trace, a `search_codebase` hit or an `ask_lsp` result already names a line: read about 30 lines either side of it, and widen only if what you needed turns out to lie outside. Reading a file whole is for when you have no line to start from and the file is genuinely small. Every line returned stays in the conversation for the rest of the task, so reading more than you need crowds out the room left to reason with. When you already know several files you need, read them all in one call, in the same response as your other independent calls. Binary files that are not images, and very large files, are not supported.
80
+
81
+ Output: one entry per requested file, in the order requested — each entry is named by the path you asked for, as `path:start-end` when you gave a range, and holds that file's content with every line prefixed by its number as ` 92 | text`; those numbers are how you aim an edit, and they are not in the file. A failed entry says that it failed and why.
68
82
 
69
83
  # tool: search_codebase
84
+
70
85
  Regex search across the codebase, for text. Symbol questions — where is this defined, what uses it, what implements it — belong to `ask_lsp`, which answers exactly in one call; a search here hands you several files to open and disambiguate by hand. Use this for what a language server cannot see: string literals, log messages, config keys, comments, and occurrences of a name you are pattern-matching rather than asking about as a symbol.
71
86
 
72
87
  `queries` is a list of regex strings — run every independent pattern in one call, alongside your other independent calls. `context_lines` (integer, default 2) sets how many lines surround each match. `max_per_file` (integer, default 1) reports one match per file, which answers "which files mention this"; raise it when you need every occurrence inside a file and where each one sits. Output past ~48k characters per query is middle-truncated, so a narrow pattern beats a broad one — search the distinctive part of the name, not the common prefix.
73
88
 
74
- Output: one object per pattern — `{query, result, success, error?}`. `query` is the pattern you sent; `result` is the matching lines with their file paths and line numbers. A pattern that matched nothing returns `success: true` with an empty `result`: that is an answer, not a failure, and re-running it will not change it.
75
- {{DEFAULT}}
89
+ Output: one entry per pattern — each entry is named by the pattern you sent and holds the matching lines with their file paths and line numbers, and a failed entry says that it failed and why. A pattern that matched nothing comes back empty, not failed: that is an answer, and re-running it will not change it.
76
90
 
77
91
  # tool: fetch_web_content
92
+
78
93
  Fetches web pages and extracts from each one what you asked for. Use it for documentation, API references, changelogs, and error messages you want explained — anything you would otherwise open and read in a browser.
79
94
 
80
95
  `requests` is a list of `{url, prompt}` objects, one per page. The `prompt` says what to pull out of that page, so make it specific — "the signature and return type of function X", "the section on rate limits" — not "tell me about this page". Fetch independent URLs together in one call, in the same response as your other independent calls.
81
96
 
82
- Output: one object per request, in order — `{query, result, success, error?}`. `query` is the URL; `result` is the extracted text for your prompt. A failed entry has `success: false` with the reason in `error`.
83
- {{DEFAULT}}
97
+ Output: one entry per request, in the order requested — each entry is named by the URL and holds what was extracted from that page for your prompt, as text. A failed entry says that it failed and why.
84
98
 
85
99
  # tool: editor
86
- Edits the text file at `path` (absolute). This, or `apply_patch`, is how a file gets changed — never `sed -i`, `echo >`, or a heredoc through `run_commands`.
87
100
 
88
- What you send decides what it does:
101
+ Edits the text file at `file_path` (absolute). This, or `apply_patch`, is how a file gets changed — never `sed -i`, `echo >`, or a heredoc through `run_commands`. What the call does is decided by which arguments you send:
102
+
89
103
  - Change some text: `old_text` + `new_text`. `old_text` must match exactly, indentation included. If it occurs more than once, add `occurrence` (one-based, in file order) to pick which one, or `replace_all: true` to change every one.
90
104
  - Change whole lines: `start_line` + `new_text`, with optional `end_line` (inclusive; defaults to `start_line`). No `old_text` needed, so it cannot be ambiguous — prefer this when the text is long, minified or repeated, and a diagnostic has already given you the line number. An empty `new_text` deletes the range.
91
- - Change characters on a line: `start_line` + `start_column` + `new_text`, with optional `end_line`/`end_column` (both inclusive; each defaults to its start). This is the unit a diagnostic speaks in — `Line 108, column 385` — and on a long or minified line it is the only edit that leaves the other 400 characters alone. `start_column` with no end replaces exactly one character.
105
+ - Change characters on a line: `start_line` + `start_column` + `new_text`, with optional `end_line`/`end_column` (both inclusive; each defaults to its start). This is the unit a diagnostic speaks in — `Line 12, column 640` — and on a long or minified line it is the only edit that leaves the other 400 characters alone. `start_column` with no end replaces exactly one character.
92
106
  - Insert without replacing: `insert_line` + `new_text` inserts before that line; `line_count + 1` appends at end of file. Add `insert_column` to insert inside that line, before the character at that column — this is how you add one missing bracket; `line_length + 1` appends at the end of the line.
93
107
  - Create a file, or replace one whole: `new_text` alone. A missing file is created; an existing file has every line replaced, which is allowed once you have read the file, since reading is what tells you what you are overwriting. `start_line: 1` with `end_line: <line count>` is the same write by another name. A whole-file write has no size limit, but reach for it only after a targeted edit has failed — a rewrite that is a little wrong quietly discards whatever you did not mean to touch. Do not delete a file to start fresh: this call is the clean slate, and a deleted file is just gone if the turn ends before you write it back.
94
108
 
95
- Read the lines you are about to change before you change them — an edit aimed at text you have not read in its current state will be refused. Your own edits move line numbers: any edit that changes the file's length shifts every line below it, so re-read a region before editing it a second time, and distrust line numbers carried over from an earlier turn, a task summary, or a diagnostic issued before your last edit.
109
+ Put the short arguments first — `file_path`, the line and column numbers, `old_text` — and `new_text` last: it is the long part of the call, and whatever is written after a long text is the part most easily left out.
96
110
 
97
- One edit at a time, confirmed, before the next — reads and searches batch; edits do not.
111
+ Read the lines you are about to change before you change them — an edit aimed at text you have not read in its current state will be refused. Your own edits move line numbers: an edit that changes the file's length shifts every line below it, so re-read a region before editing it a second time, and distrust line numbers carried over from an earlier turn, a task summary, or a diagnostic issued before your last edit.
98
112
 
99
- An edit replaces; it does not append. If `new_text` repeats the lines already in the range and then continues, the result is a second copy of them, and the call is refused — send only the text that should end up in that range.
113
+ An edit replaces the range or text you name. Repeating the lines already in the range at the top of `new_text` and then continuing is allowed — that is how you insert after them: the range says which lines you mean, so repeating them is your choice. What is refused is `new_text` that goes on to repeat lines from outside the range — that would append a second copy of text the file already has somewhere else — and the refusal names the lines it matched, so you can aim the next call at them.
100
114
 
101
- Output: a single `{query, result, success, error?}` object for this one edit — `query` is `edit:<path>` or `insert:<path>`, `result` describes what changed. That result is the confirmation the edit landed; do not re-read the file to check. A failed edit changes nothing: `success` is false, `error` names the fix, and resending the same call is not the fix. Text copied from a `read_files` result must have its `123 | ` gutter stripped first or it will not match.
102
- {{DEFAULT}}
115
+ One edit at a time, confirmed, before the next — reads and searches batch; edits do not.
116
+
117
+ Output: one result for this one edit, named `edit:<path>` or `insert:<path>`, describing what changed. That result is the confirmation the edit landed; do not re-read the file to check. A failed edit changes nothing: the result says it failed and names the fix, and the file is exactly as it was — resending the same call is not the fix. Text copied from a `read_files` result must have its `123 | ` gutter stripped first or it will not match.
103
118
 
104
119
  # tool: apply_patch
105
- Edits files with the freeform patch grammar — the second way to change a file, alongside `editor`. Pass the whole patch as the `input` string; do not route it through the shell.
120
+
121
+ Edits files with the canonical freeform patch grammar — the second way to change a file, alongside `editor`. Pass the whole patch as the `input` string; do not route it through the shell.
106
122
 
107
123
  *** Begin Patch
108
124
  *** Update File: path/to/file.ts
@@ -115,10 +131,23 @@ Edits files with the freeform patch grammar — the second way to change a file,
115
131
 
116
132
  Actions: `*** Add File: <path>`, `*** Update File: <path>`, `*** Delete File: <path>`, and `*** Move to: <new path>` on the line after an Update File header.
117
133
 
118
- Rules: in an Add File section every content line starts with `+`; in an Update section, context lines plus `-` and `+` lines describe the change; add `@@` markers when repeated code blocks need disambiguating; no line numbers — this format matches on context, so the context lines must be copied from the file as it stands now. Send the patch body directly; legacy shell wrappers such as `%%bash` and `apply_patch <<"EOF"` are accepted but not preferred.
134
+ Rules: in an Add File section every content line starts with `+`; in an Update section, context lines plus `-` and `+` lines describe the change; add `@@` markers when repeated code blocks need disambiguating; and there are no line numbers — the patch matches on context, so the context lines must be copied from the file as it stands now. Send the patch body directly; legacy shell wrappers such as `%%bash` and `apply_patch <<"EOF"` are accepted but not preferred.
119
135
 
120
- Output: a single `{query, result, success, error?}` object covering the whole patch; `result` says which files were added, updated, moved or deleted. `success: false` almost always means the context lines no longer match the file — re-read it and rebuild the patch from what is actually there instead of resending.
121
- {{DEFAULT}}
136
+ One whole patch — context lines copied from the file, one line added:
137
+
138
+ *** Begin Patch
139
+ *** Update File: src/page.tsx
140
+ @@
141
+ return (
142
+ <div>
143
+ <button onClick={() => console.log("clicked")}>Click me</button>
144
+ + <button onClick={() => console.log("cancel clicked")}>Cancel</button>
145
+ </div>
146
+ );
147
+ }
148
+ *** End Patch
149
+
150
+ Output: one result covering the whole patch, saying which files were added, updated, moved or deleted. A patch that did not apply — almost always because its context lines no longer match the file — comes back failed and says why; re-read the file and rebuild the patch from what is actually there instead of resending.
122
151
 
123
152
  # tool: ask_question
124
153
  Ask when you need the answer to proceed — a decision only the user can make, a requirement only they know. Not for permission: if the sensible path is clear, take it.
@@ -141,16 +170,16 @@ Runs one of the skills installed on this machine, by name, with optional `args`.
141
170
  {{DEFAULT}}
142
171
 
143
172
  # tool: check_file
144
- Asks the editor's language servers (LSP) for errors and warnings in the files you name. This is the linter — and the type checker, the syntax check, and the Problems panel, whichever word the question uses. It is how you find out whether a file is valid: milliseconds, for the files you name, no project build. Where a language server covers the file's language, it answers the same question as `tsc`, `eslint`, `ruff`, `mypy`, `go build` or `cargo check` — so do not run those through the shell for a one-file answer.
173
+
174
+ Asks the editor's language servers (LSP) for errors and warnings in the files you name. This is the linter — and the type checker, the syntax check, and the Problems panel, whichever word the question uses. It is how you find out whether a file is valid: milliseconds, for the files you name, no project build. Where a language server covers the file's language, it answers the same question as `tsc`, `eslint`, `biome`, `ruff`, `mypy`, `go build` or `cargo check` — so do not run those through the shell for a one-file answer.
145
175
 
146
176
  `paths` is a list of absolute paths; pass every file you want checked in one call.
147
177
 
148
- Call it after every edit, before you build on the edit; alongside whatever runs the code — tests, build, program, page — in the same response; on every file you changed before reporting the task finished; and on a file you are about to change, to learn what was already wrong with it. The report is live, current as of the moment you ask: if it still names a problem after your edit, the problem is still there, and a report from before the edit says nothing about the file as it stands now.
178
+ Call it whenever the question is about lint errors, diagnostics, warnings, type errors or syntax errors — "how many errors is the linter reporting?", "is it clean now?", "what is still broken?" You have no other way to know, and a report shown after an earlier edit does not answer it: that was true then, and you have edited since. Call it after every edit, before you build on the edit; alongside whatever runs the code — tests, build, program, page — in the same response; on every file you changed before reporting the task finished; and on a file you are about to change, to learn what was already wrong with it. The report is live, current as of the moment you ask: if it still names a problem after your edit, the problem is still there. Restarting a language server is neither possible nor necessary from here.
149
179
 
150
- Output: plain text, one section per file, each problem on its own line as `file:line:column` with its severity and message. A file with nothing wrong says so in one line. There is no object and no `success` field — a list of problems is this tool working, not failing.
180
+ Output: plain text, one section per file, each problem on its own line as `file:line:column` with its severity and message. A file with nothing wrong says so in one line. A list of problems is this tool working, not failing.
151
181
 
152
- Two things to read carefully. "No problems" is conclusive only where a language server covers that file, and it does not for every language on every machine: if you have reason to expect a problem, or the project has a checker the language servers do not run, run that checker with `run_commands` — tests and builds are always `run_commands`. And when a file's brackets do not match, a `Delimiter scan` section names the line to edit and how many brackets that line is out by, one line for each place the mismatch begins; a parse error is always reported where the parser gave up — the closing bracket — so the line named is the one the error itself cannot name. Fix every line the scan lists in one edit, and trust those lines over counting brackets yourself: the scan skips strings, comments and regex literals — brackets inside them — which counting characters does not. The scan runs whether or not the editor reported anything; inside an `.html` file's script it may be the only report you get.
153
- {{DEFAULT}}
182
+ Two things to read carefully. "No problems" is conclusive only where a language server covers that file, and it does not for every language on every machine: if you have reason to expect a problem, or the project has a checker the language servers do not run, run that checker with `run_commands` — tests and builds are always `run_commands`. And when a file's brackets do not match, a `Delimiter scan` section names the line to edit and how many brackets that line is out by, one line for each place the mismatch begins; a parse error is always reported where the parser gave up — the closing bracket — so the line named is the one the error itself cannot name. Work through every line the scan lists before re-checking — a file can be broken in several spots at once — and trust those lines over counting brackets yourself: the scan skips strings, comments and regex literals, which counting characters does not. The scan runs whether or not the editor reported anything; inside an `.html` file's script it may be the only report you get.
154
183
 
155
184
  # tool: list_files
156
185
  {{DEFAULT}}
@@ -307,8 +336,7 @@ Reach for this over `editor` when one mechanical change applies in many places o
307
336
 
308
337
  An in-place run is refused on a file you have not read, the same way an `editor` call is — and a script addressed by line number is refused unless you have read those lines. Read first. A line number in a script describes the file as you last read it — an edit that changes the file's length shifts every line below it — so re-read before aiming a line-numbered script at a file that has changed since.
309
338
 
310
- Output: one object per file, in the order listed — `{query, result, success, error?}`. `query` is `sed:<file>`; `result` is that file's printed output, or, for an in-place run, a sentence saying what was written. The files do not share a fate: one may be written while the next is refused, so read every entry. `success: false` means that file was NOT touched, and `error` says why. A script that matched nothing is `success: true` — it ran, there was nothing to do, and the file is as it was; running it again unchanged will not change it.
311
- {{DEFAULT}}
339
+ Output: one entry per file, in the order listed — each entry is named `sed:<file>` and holds that file's printed output, or, for an in-place run, a sentence saying what was written. The files do not share a fate: one may be written while the next is refused, so read every entry. A failed entry means that file was NOT touched, and it says why. A script that matched nothing has not failed — it ran, there was nothing to do, and the file is as it was; running it again unchanged will not change it.
312
340
 
313
341
  # tool: grep
314
342
 
@@ -322,9 +350,7 @@ Flags: `ignore_case`, `invert` (the lines that do not match), `word` (whole word
322
350
 
323
351
  Use it to find where something is before you read or edit it — it is cheaper than reading whole files, and a match records that you have read those lines.
324
352
 
325
- Output: a single `{query, result, success, error?}` for the whole call. `query` is `grep:<pattern>`; `result` holds the matching lines, each prefixed with its path and line number. A failed call has `success: false` and the reason in `error`. A pattern that matched nothing is still `success: true`, and `result` says so in words: that is an answer, not a failure, and running the same search again will not change it.
326
-
327
- {{DEFAULT}}
353
+ Output: one result for the whole call, named `grep:<pattern>`, holding the matching lines, each prefixed with its path and line number. A search that could not run comes back failed and says why. A pattern that matched nothing has not failed, and the result says so in words: that is an answer, and running the same search again will not change it.
328
354
 
329
355
  # tool: awk
330
356
 
@@ -336,8 +362,7 @@ This is the tool for questions about columns and totals, where `grep` would only
336
362
 
337
363
  It is read-only, and deliberately so: output redirection, pipes, `system()` and `getline` are all refused rather than quietly ignored. Use `sed` or `editor` to change a file.
338
364
 
339
- Output: a single `{query, result, success, error?}` for the whole call. `query` is `awk:<program>`; `result` is everything the program printed. A failed call has `success: false` and the reason in `error`. A program that printed nothing is still `success: true` — that is the program's answer, not a failure.
340
- {{DEFAULT}}
365
+ Output: one result for the whole call, named `awk:<program>`, holding everything the program printed. A program that could not run comes back failed and says why. A program that printed nothing has not failed — that is the program's answer.
341
366
 
342
367
  # tool: extract_document
343
368
  {{DEFAULT}}
@@ -7,32 +7,37 @@ match:
7
7
 
8
8
  <!-- PROVENANCE -- written by scripts/review-prompt-templates.mts, not by the model.
9
9
 
10
- Sections `read_files`, `editor`, `check_file` written by kimi-k3:cloud (Ollama family `kimi-k3`) on 2026-09-23.
10
+ Sections `apply_patch`, `awk`, `editor`, `fetch_web_content`, `grep`, `read_files`, `search_codebase`, `sed`, `check_file`, `run_commands` written by kimi-k3:cloud (Ollama family `kimi-k3`) on 2026-10-22.
11
11
  Every other section is as it was. Before this run:
12
12
 
13
- Sections `grep` and `run_commands` written by kimi-k3:cloud (Ollama
14
- family `kimi-k3`) on 2026-09-13 at temperature 0.6, clean on attempt 4.
15
- Run, with its log: prompt-reviews/regen/20260913-0452-kimi-k3-cloud
13
+ Sections `read_files`, `editor`, `check_file` written by kimi-k3:cloud (Ollama family `kimi-k3`) on 2026-09-23.
14
+ Every other section is as it was. Before this run:
16
15
 
17
- Section `awk` written by kimi-k3:cloud on 2026-09-13 at temperature 0.9,
18
- clean on attempt 3; the 0.6 run had changed one sentence of it and no
19
- more. Run, with its log: prompt-reviews/regen/20260913-0456-kimi-k3-cloud
16
+ Sections `grep` and `run_commands` written by kimi-k3:cloud (Ollama
17
+ family `kimi-k3`) on 2026-09-13 at temperature 0.6, clean on attempt 4.
18
+ Run, with its log: prompt-reviews/regen/20260913-0452-kimi-k3-cloud
20
19
 
21
- Section `sed` is still written by hand, from 2026-09-12. kimi-k3:cloud
22
- will not rewrite it. Asked six times on 2026-09-12 it returned the
23
- built-in text verbatim; asked again on 2026-09-13 at 0.6 and at 0.9 it
24
- returned the hand-written text with a single sentence extended, both
25
- times borrowing the tail of its own `grep` section to do it. Three
26
- sections of this file are the model's words and this one is not, which
27
- is the whole reason this header distinguishes them.
20
+ Section `awk` written by kimi-k3:cloud on 2026-09-13 at temperature 0.9,
21
+ clean on attempt 3; the 0.6 run had changed one sentence of it and no
22
+ more. Run, with its log: prompt-reviews/regen/20260913-0456-kimi-k3-cloud
28
23
 
29
- Every other section is unchanged. Written by kimi-k3:cloud (Ollama
30
- family `kimi-k3`) on 2026-09-12.
24
+ Section `sed` is still written by hand, from 2026-09-12. kimi-k3:cloud
25
+ will not rewrite it. Asked six times on 2026-09-12 it returned the
26
+ built-in text verbatim; asked again on 2026-09-13 at 0.6 and at 0.9 it
27
+ returned the hand-written text with a single sentence extended, both
28
+ times borrowing the tail of its own `grep` section to do it. Three
29
+ sections of this file are the model's words and this one is not, which
30
+ is the whole reason this header distinguishes them.
31
31
 
32
- Run, with its log: prompt-reviews/regen/20260923-1648-kimi-k3-cloud
32
+ Every other section is unchanged. Written by kimi-k3:cloud (Ollama
33
+ family `kimi-k3`) on 2026-09-12.
34
+
35
+ Run, with its log: prompt-reviews/regen/20260923-1648-kimi-k3-cloud
36
+
37
+ Run, with its log: prompt-reviews/regen/20261022-0650-kimi-k3-cloud
33
38
 
34
39
  Sampler asked for by the generator, overriding the model's own:
35
- temperature 0.7
40
+ temperature 0.2
36
41
 
37
42
  Sampler the tag sources (`/api/show`), which applies to every key
38
43
  the request above does not set:
@@ -105,9 +110,10 @@ Locate first, then read: a diagnostic or stack trace already names the line, `se
105
110
 
106
111
  Binary files that are not images and very large files are not supported.
107
112
 
108
- Output: one object per requested file, in the order requested — `{query, result, success, error?}`. `query` echoes the path you asked for (as `path:start-end` when you gave a range). `result` is that file's content, with every line prefixed by its number as ` 92 | text`. Those numbers are how you address an edit, and they are not in the file. Never paste them into another tool: text carrying a `92 | ` prefix will not match anything. When you are reading in order to copy text into `editor`, set `line_numbers: false` on that file's entry and get it clean.
113
+ Output: one entry per requested file, in the order requested — each entry names what it answers, then what came back, and a failed entry says that it failed and why. An entry is named by the path you asked for (as `path:start-end` when you gave a range), and what came back is that file's content, with every line prefixed by its number as ` 92 | text`. Those numbers are how you address an edit, and they are not in the file. Never paste them into another tool: text carrying a `92 | ` prefix will not match anything. When you are reading in order to copy text into `editor`, set `line_numbers: false` on that file's entry and get it clean.
109
114
 
110
115
  # tool: search_codebase
116
+
111
117
  Run regex searches across the codebase. Multiple independent patterns go in one call, together with other independent tool calls in the same response. Use for finding patterns, definitions, classes, imports, etc.
112
118
 
113
119
  Arguments:
@@ -117,7 +123,7 @@ Arguments:
117
123
 
118
124
  Output per query is middle-truncated beyond ~48k characters; specific patterns beat broad ones.
119
125
 
120
- Output: one object per pattern — `{query, result, success, error?}`. `query` is the pattern you sent. `result` is matching lines with file paths. A pattern that matched nothing has `success: true` and `result: []`; that is an answer, not a failure, and re-running it will not change it.
126
+ Output: one entry per pattern — each entry names what it answers, then what came back, and a failed entry says that it failed and why. An entry is named by the pattern you sent and holds the matching lines with their file paths. A pattern that matched nothing comes back empty, not failed; that is an answer, and re-running it will not change it.
121
127
 
122
128
  # tool: grep
123
129
 
@@ -132,7 +138,7 @@ Arguments:
132
138
 
133
139
  Use `search_codebase` when you do not yet know which files are involved — it takes several patterns at once and reports one hit per file, which answers "where is this". Use `grep` when you already know the file or directory and want grep's own semantics: every matching line, a count, an inverted match, a window of context. Neither answers questions about a symbol; `ask_lsp` does.
134
140
 
135
- Output: a single `{query, result, success, error?}`. `query` is `grep:<pattern>`. `result` is the matching lines prefixed with path and line number. A pattern that matched nothing has `success: true` and says so in words — that is an answer, not a failure, and re-running it will not change it. Lines returned here count as read.
141
+ Output: one result, named `grep:<pattern>`, holding the matching lines prefixed with their path and line number. A search that could not run says that it failed and why. A pattern that matched nothing is not a failure, and the result says so in words: that is an answer, and re-running the same search will not change it. Lines returned here count as read.
136
142
 
137
143
  # tool: awk
138
144
 
@@ -147,32 +153,34 @@ Use this for columnar questions and aggregations — summing a column, extractin
147
153
 
148
154
  This tool is read-only, and that is enforced rather than assumed: output redirection, pipes, `system()` and `getline` are refused. To modify a file, use `sed` or `editor`.
149
155
 
150
- Output: a single `{query, result, success, error?}`. `query` is `awk:<program>`. `result` is everything the program printed. A program that printed nothing has `success: true` — that is the program's answer.
156
+ Output: one result, named `awk:<program>`, holding everything the program printed. A program that could not run says that it failed and why. A program that printed nothing has not failed — that is the program's answer.
151
157
 
152
158
  # tool: extract_document
153
159
  {{DEFAULT}}
154
160
 
155
161
  # tool: fetch_web_content
162
+
156
163
  Fetch web pages and extract information using a prompt. Each request needs a `url` and a `prompt` describing what to extract. Batch independent URLs into one call, together with other independent tool calls in the same response.
157
164
 
158
- Output: one object per request — `{query, result, success, error?}`. `query` is the URL. `result` is the extracted text for your prompt. A failed entry has `success: false` with the reason in `error`.
165
+ Output: one entry per request — each entry names what it answers, then what came back, and a failed entry says that it failed and why. An entry is named by the URL and holds what was extracted from that page for your prompt, as text.
159
166
 
160
167
  # tool: editor
161
168
 
162
- Make precise edits to a single text file at `path`. Six modes, chosen by which arguments you send:
169
+ Make precise edits to a single text file at `file_path`. Six modes, chosen by which arguments you send:
163
170
 
164
171
  - Replace text: `old_text` plus `new_text`. When `old_text` occurs more than once, add `occurrence` (one-based, in file order) to pick one, or `replace_all: true` to change every one.
165
172
  - Replace lines: `start_line` plus `new_text`, with optional `end_line` (inclusive, defaults to `start_line`). No `old_text` needed. Prefer this when the text is long, minified or repeated: a diagnostic already gives you the line number, and a line number cannot be ambiguous. An empty `new_text` deletes the range.
166
- - Replace characters: `start_line` and `start_column` plus `new_text`, with optional `end_line`/`end_column` (both inclusive, each defaulting to its start). This is the unit a diagnostic speaks in — `Line 108, column 385` — and on a long or minified line it is the only edit that leaves the rest of the line untouched. `start_column` on its own replaces exactly one character.
173
+ - Replace characters: `start_line` and `start_column` plus `new_text`, with optional `end_line`/`end_column` (both inclusive, each defaulting to its start). This is the unit a diagnostic speaks in — `Line 12, column 640` — and on a long or minified line it is the only edit that leaves the rest of the line untouched. `start_column` on its own replaces exactly one character.
167
174
  - Insert: `insert_line` plus `new_text`, which adds text before that line without replacing anything. Use `line_count + 1` to append at EOF. Add `insert_column` to insert inside that line instead, before the character at that column — this is how you add one missing bracket, with `line_length + 1` appending at the end of the line.
168
175
  - Create or replace whole: `new_text` alone. Creates the file when it does not exist; replaces every line when it does, which needs the file read first. No size limit on this one — a file written whole cannot be split. Never `rm` a file to write it fresh: this is that, and a deleted file is gone if the turn ends first.
169
176
 
170
- Write the arguments in this order: `path` and every other short argument first — line and column numbers, `intent`, `task_progress`, `old_text` — and `new_text` last. The text you are writing is the long part of the call, and whatever is written after a long text is the part most easily left out.
177
+ Write the arguments in this order: `file_path` and every other short argument first — line and column numbers, `intent`, `task_progress`, `old_text` — and `new_text` last. The text you are writing is the long part of the call, and whatever is written after a long text is the part most easily left out.
171
178
  Use this rather than a shell command for anything that changes a file. Make one edit at a time and check it before starting the next: reads and searches cost nothing if one turns out to be unnecessary, but several edits made together and checked once leave several things to undo and no way to tell which one was wrong. Read the lines you are about to change before you change them: an edit aimed at a range you have not read in its current state is refused. Your own edits count — one that changes the file's length moves every line below it, so read that region again before editing it a second time. Line numbers taken from an earlier turn, from a task summary, or from a diagnostic issued before your last edit are the ones that go stale. Repeating the lines already in the range and then continuing is how you insert after them, and it is allowed — the range says which lines you mean, so repeating them is your own choice. What is refused is a `new_text` that goes on to repeat lines from *outside* the range: that appends a second copy of text already elsewhere in the file rather than replacing anything, and the refusal names the lines it matched so you can aim the next call at them.
172
179
 
173
- Output: a single `{query, result, success, error?}` object for this one edit, where `query` is `edit:<path>` or `insert:<path>` and `result` describes what changed. A failed edit changes nothing: `success` is false, `error` says why, and the file is exactly as it was. Do not resend the same call — `error` names the fix. In particular, text copied out of a `read_files` result must have its `123 | ` line-number gutter removed first.
180
+ Output: one result for this one edit, named `edit:<path>` or `insert:<path>`, describing what changed. A failed edit changes nothing: the result says it failed and why, and the file is exactly as it was. Do not resend the same call — the reason names the fix. In particular, text copied out of a `read_files` result must have its `123 | ` line-number gutter removed first.
174
181
 
175
182
  # tool: sed
183
+
176
184
  Apply a `sed` script to one or more files. Runs in this process, not through the shell.
177
185
 
178
186
  Arguments:
@@ -185,9 +193,10 @@ Use this when one mechanical change applies in many places or across many files
185
193
 
186
194
  The read rule is the same as `editor`'s and exists for the same reason: an in-place run is refused on a file you have not read, and a script addressed by line number is refused unless you have read those lines. In plan mode `in_place` is refused outright, as `sed -i` through the shell is; the preview still works.
187
195
 
188
- Output: one object per file — `{query, result, success, error?}`. `query` is `sed:<file>`. `result` is that file's output, or a sentence saying what was written. The files do not share a fate: one can be written while the next is refused, so read every entry. `success: false` means that file was **not** touched and `error` says why. A script that matched nothing has `success: true` — it ran, and that is its answer.
196
+ Output: one entry per file — each entry names what it answers, then what came back, and a failed entry says that it failed and why. An entry is named `sed:<file>` and holds that file's output, or a sentence saying what was written. The files do not share a fate: one may be written while the next is refused, so read every entry. A failed entry means that file was **not** touched, and it says why. A script that matched nothing has not failed — it ran, and that is its answer; running it again unchanged will not change it.
189
197
 
190
198
  # tool: apply_patch
199
+
191
200
  Apply a freeform patch to edit one or more files. Pass the patch text as `input`. Preferred format:
192
201
 
193
202
  *** Begin Patch
@@ -208,7 +217,7 @@ Rules:
208
217
  - No line numbers; context-based only.
209
218
  - Prefer sending the patch body directly. Legacy wrappers like `%%bash` are accepted but not preferred.
210
219
 
211
- Output: `{query, result, success, error?}` covering the whole patch. `result` lists added, updated, moved, or deleted files. If context lines no longer match, `success` is `false` and `error` says so — re-read the file and rebuild the patch from what is actually there rather than resending.
220
+ Output: one result covering the whole patch, saying which files were added, updated, moved or deleted. A patch that did not apply — usually because its context lines no longer match the file — comes back failed and says why; re-read the file and rebuild the patch from what is actually there rather than resending it.
212
221
 
213
222
  # tool: ask_question
214
223
  {{DEFAULT}}
@@ -222,7 +231,7 @@ Execute shell commands in the working directory. This is the tool for builds, te
222
231
 
223
232
  When you need multiple independent commands, send them all in one call. Each command runs in its own shell, so `cd` in one does not affect the next. Use absolute paths or chain with `&&` when a command depends on being in a specific directory.
224
233
 
225
- Output: one object per command, in order — `{query, result, success, error?}`, where `query` is the command string, `result` is stdout and stderr combined, and a failed command has `success: false` with the reason in `error`.
234
+ Output: one entry per command, in order — each entry names what it answers, then what came back, and a failed entry says that it failed and why. An entry is named by the command string and holds stdout and stderr combined.
226
235
 
227
236
  {{DEFAULT}}
228
237
 
@@ -245,7 +254,7 @@ Pass every file you want checked in one call.
245
254
 
246
255
  Read a clean result carefully. "No problems reported by the editor" is conclusive only where a language server covers that file, and it does not for every language on every machine. If this reports nothing and you have reason to expect a problem, or the project has a checker the language servers do not run, run that checker with `run_commands`. Tests and builds are always `run_commands`; this tool does not run them.
247
256
 
248
- Output: plain text, one section per file you named, each problem on its own line as `file:line:column` with its severity and message. A file with nothing wrong says so in one line. There is no object to unpack and no `success` field — problems being listed is this tool working, not failing.
257
+ Output: one section per file you named, each problem on its own line as `file:line:column` with its severity and message. A file with nothing wrong says so in one line. Problems being listed is this tool working, not failing.
249
258
 
250
259
  When a file's brackets do not match, a `Delimiter scan` section names the line to edit and how many brackets that line is out by, one line per place the trouble starts — a file can be broken in several spots at once, so work through every line it lists before re-checking rather than re-checking after each one. A parse error is always reported where the parser gave up, which is the closing bracket; the line named here is the one the error cannot name. Trust those lines over counting brackets yourself — the scan skips strings, comments and regex literals, which counting characters does not. It runs whether or not the editor reported anything, so it can appear beneath a file the editor called clean — no language server checks the script inside an `.html` file, and there this is the only report you will get.
251
260
 
@@ -254,7 +263,7 @@ List the files in the workspace. Use this to find out what exists, rather than r
254
263
 
255
264
  How to ask:
256
265
  - `path` — list one directory. Absolute, or relative to the workspace root. Omit it for the root.
257
- - `pattern` — a glob searched across the workspace, e.g. `**/*.html` or `**/manic_miner.*`. Use it when you know part of a name but not where it lives. Given this, `path` is ignored.
266
+ - `pattern` — a glob searched across the workspace, e.g. `**/*.html` or `**/config.*`. Use it when you know part of a name but not where it lives. Given this, `path` is ignored.
258
267
  - `max_results` — caps the listing.
259
268
 
260
269
  The excludes in the user's settings apply, so `node_modules`, `.git` and build output stay out of the way. A path outside the workspace is refused rather than listed.