@navels/neal 0.6.4 → 0.6.6

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.
@@ -180,7 +180,7 @@ export function renderInlinedRangeDiffSection(args) {
180
180
  return [
181
181
  `## Inlined commit-range diff from Neal (${args.rangeLabel})`,
182
182
  '',
183
- 'You have read-only repository tools (read and search, no shell) but no commit-range diff tool, so Neal has inlined the commit-range diff below.',
183
+ 'You have read-only repository access but no commit-range diff tool, so Neal has inlined the commit-range diff below. That access may be dedicated read and search tools, or a shell running in a read-only sandbox; if it is a shell, use it only to read files and search the tree, never to write.',
184
184
  'This inlined diff is the source of truth for exactly what this range changed, including deletions and renames that head-state file reads cannot reveal. Use your read tools to verify the surrounding code.',
185
185
  '',
186
186
  args.diff.trim() === '' ? '(empty diff)' : truncateInlineSectionBody(args.diff),
@@ -23,7 +23,7 @@ export function getCodeReviewFalsificationLines(context) {
23
23
  : `Review that ${context.rangeLabel} directly with repository tools. The ${context.rangeLabel} is the source of truth for this review.`);
24
24
  }
25
25
  if (mode === 'read-only') {
26
- lines.push('A diff shows only changed hunks; declarations such as imports, struct fields, or helpers may exist in unchanged parts of the file. Absence from the diff is not evidence of absence from the repository — open the affected file with your read tools and verify before claiming a missing import or missing declaration.');
26
+ lines.push('A diff shows only changed hunks; declarations such as imports, struct fields, or helpers may exist in unchanged parts of the file. Absence from the diff is not evidence of absence from the repository — open the affected file with your read tools and verify before claiming a missing import or missing declaration.', 'Your read tools may be dedicated read and search tools, or a shell running in a read-only sandbox. If your only repository tool is that shell, use it to read files and search the tree (for example cat, sed -n, grep, ls); it cannot write, and you must not try to.');
27
27
  }
28
28
  if (context.gitInspectionExamples) {
29
29
  if (mode === 'tool-access') {
@@ -406,7 +406,7 @@ export const PROMPT_SPECS = [
406
406
  },
407
407
  {
408
408
  id: 'scope_reviewer',
409
- version: 5,
409
+ version: 6,
410
410
  changelog: [
411
411
  {
412
412
  version: 1,
@@ -428,6 +428,10 @@ export const PROMPT_SPECS = [
428
428
  version: 5,
429
429
  renderSha: 'e8dcb976d0ea22e9026e09a87d7dde93c8513334f62ad89472ebefe91771754b',
430
430
  },
431
+ {
432
+ version: 6,
433
+ renderSha: 'ed8d66b768a869817ff4c6b3d127b0f6f3958dff3cf57e036cc27c21800201a4',
434
+ },
431
435
  ],
432
436
  role: 'reviewer',
433
437
  purpose: 'Review execute-scope results for correctness, verification coverage, and meaningful progress toward the active parent objective.',
@@ -584,7 +588,7 @@ export const PROMPT_SPECS = [
584
588
  },
585
589
  {
586
590
  id: 'completion_reviewer',
587
- version: 5,
591
+ version: 6,
588
592
  changelog: [
589
593
  {
590
594
  version: 1,
@@ -606,6 +610,10 @@ export const PROMPT_SPECS = [
606
610
  version: 5,
607
611
  renderSha: '7930cec95560ad880bba94a7ae48e68c621805787261e295c4c405d09235c87b',
608
612
  },
613
+ {
614
+ version: 6,
615
+ renderSha: '079a57a685c33aaba5b9a6b919ed4cb961a79f89e770ed6ede85020b618addd6',
616
+ },
609
617
  ],
610
618
  role: 'reviewer',
611
619
  purpose: 'Judge whole-plan completion and decide whether Neal should accept completion, continue execution, or block for operator input.',
@@ -57,7 +57,7 @@ export function buildReviewFindingsInlinedDiffSection(context) {
57
57
  return [
58
58
  '## Inlined Selected-Range Diff',
59
59
  '',
60
- 'You have read-only repository tools (read and search, no shell) but no commit-range diff tool, so the full selected-range diff is inlined below.',
60
+ 'You have read-only repository access but no commit-range diff tool, so the full selected-range diff is inlined below. That access may be dedicated read and search tools, or a shell running in a read-only sandbox; if it is a shell, use it only to read files and search the tree, never to write.',
61
61
  'This inlined diff is the source of truth for what the resolved range actually changed, including deletions and renames that head-state file reads cannot reveal.',
62
62
  `Resolved range: ${context.externalBaseCommit}..${context.externalHeadCommit}.`,
63
63
  'Verify draft claims against the surrounding code with your read tools; absence from a diff hunk is not evidence of absence from the repository.',
package/docs/compat.md CHANGED
@@ -53,6 +53,9 @@ neal compat [--model <slug>] [--role coder|reviewer|planner|all] [--reference op
53
53
 
54
54
  - `--role` (default `all`) selects which role(s) to test: `coder`, `reviewer`,
55
55
  `planner`, or `all`.
56
+ - With no flags at all, every role runs on your configured provider and model,
57
+ which is how to verify a native slug (`openai-codex` or `anthropic-claude`);
58
+ `--model` always routes the candidate to `openai-compatible`.
56
59
  - `--model <slug>` runs the slug on the **`openai-compatible`** provider in the
57
60
  candidate role (provider forced to `openai-compatible`, any configured effort
58
61
  dropped, so the slug drives a clean OpenRouter call). When omitted, the
@@ -156,6 +156,24 @@ don't support tool use.
156
156
  | `openai-codex` | supported | supported | supported |
157
157
  | `anthropic-claude` | supported | supported | supported |
158
158
 
159
+ ### Native model slugs run through the fixtures
160
+
161
+ The adapters above are supported by construction. A row here means a specific
162
+ slug has also been run through `neal compat`. To add one, put the slug in your
163
+ config and run `neal compat` with no flags: every role then runs on your
164
+ configured provider and model (`--model` always routes to `openai-compatible`,
165
+ so it can't test a native slug). Cells are passed/total, same as the whitelist.
166
+
167
+ | Slug | Provider | Coder | Reviewer | Planner | Run |
168
+ | --- | --- | --- | --- | --- | --- |
169
+ | `claude-fable-5-1` | `anthropic-claude` | 2/2 | not run | 1/1 | 2026-09-04 |
170
+ | `gpt-6-astra` | `openai-codex` | not run | 2/2 pairs | not run | 2026-09-04 |
171
+
172
+ `gpt-6-astra` as reviewer needs the read-only doctrine wording from #57. Before
173
+ that, the doctrine told a Codex reviewer it had no shell, and Astra took it at
174
+ its word and blocked every reviewer fixture for lack of a read tool; with the
175
+ wording fixed it passed 4/4.
176
+
159
177
  ## Reproducing / extending
160
178
 
161
179
  ```
@@ -52,7 +52,9 @@ is gated on it as a whole.
52
52
  opens and merges the release-preparation PR (version bump + changelog), and
53
53
  runs the Publish workflow through the npm 2FA approval. See
54
54
  [docs/release.md](release.md). Urgent bumps (a fix neal needs immediately)
55
- may skip the Renovate soak with a manual PR. Qualify them the same way.
55
+ may skip the Renovate soak with a manual PR: `scripts/bump-native-sdks.sh`
56
+ opens one at the current latest releases. Qualify it the same way. Leave
57
+ Renovate's own SDK PR open; it closes itself once the manual bump merges.
56
58
 
57
59
  ## TypeScript 6 and 7 side by side
58
60
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@navels/neal",
3
- "version": "0.6.4",
3
+ "version": "0.6.6",
4
4
  "description": "A source-first multi-agent CLI for planning, executing, reviewing, and resuming scoped code changes.",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -56,8 +56,8 @@
56
56
  },
57
57
  "dependencies": {
58
58
  "@ai-sdk/openai-compatible": "3.0.39",
59
- "@anthropic-ai/claude-agent-sdk": "0.3.252",
60
- "@openai/codex-sdk": "0.151.0",
59
+ "@anthropic-ai/claude-agent-sdk": "0.3.260",
60
+ "@openai/codex-sdk": "0.153.2",
61
61
  "ai": "7.0.83",
62
62
  "dotenv": "^17.4.2",
63
63
  "yaml": "^2.9.0",