@zhivex-ai/harness 1.5.0 → 1.6.3

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 (61) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +3 -1
  3. package/SUPPORT.md +1 -1
  4. package/contracts/stable-api-signatures.json +7 -7
  5. package/dist/acp-cli.js +7 -7
  6. package/dist/approvals/auto-approve.d.ts +137 -0
  7. package/dist/audit/index.js +2 -2
  8. package/dist/{audit-pack-kvw7ng34.js → audit-pack-s9n693by.js} +3 -3
  9. package/dist/{cli-entry-75j3r49b.js → cli-entry-1epvek01.js} +2 -2
  10. package/dist/{cli-entry-q8bgkn9m.js → cli-entry-mbcq96nx.js} +18 -17
  11. package/dist/{cli-entry-928p8h41.js → cli-entry-nyzyvf24.js} +75 -11
  12. package/dist/{cli-entry-h2yc9x37.js → cli-entry-rsx0wpvs.js} +10 -2
  13. package/dist/{cli-vyrytn3m.js → cli-yxvq8qf1.js} +6 -6
  14. package/dist/cli.js +2 -2
  15. package/dist/compat/code-support.js +5 -5
  16. package/dist/engine/acp.js +8 -8
  17. package/dist/engine/client.js +7 -7
  18. package/dist/engine/desktop-state-v1.js +4 -4
  19. package/dist/engine/index.js +10 -10
  20. package/dist/engine/mcp-stdio-v1.js +4 -4
  21. package/dist/engine/service.js +8 -8
  22. package/dist/hostile-repository-demo.js +100 -27
  23. package/dist/{index-vvzc5ezz.js → index-2yyfg69h.js} +1 -1
  24. package/dist/{index-pq3kz1r8.js → index-3wwfn5n6.js} +18 -17
  25. package/dist/{index-63gbp0cz.js → index-4mn6m3bq.js} +1 -1
  26. package/dist/{index-jpdvn09j.js → index-5nmm0642.js} +1 -1
  27. package/dist/{index-wwthv10a.js → index-amjttjaj.js} +1 -1
  28. package/dist/{index-5zbq9ztj.js → index-hhrnrqfc.js} +1 -1
  29. package/dist/{index-vc7yxz50.js → index-j466sekf.js} +4 -4
  30. package/dist/{index-96ezrvg2.js → index-nxmk6re7.js} +2 -2
  31. package/dist/{index-xfedewpt.js → index-rgqzdgv6.js} +2 -2
  32. package/dist/{index-6fp7kdpx.js → index-vn91b9z1.js} +12 -4
  33. package/dist/{index-ggstwr0v.js → index-w0m1nckc.js} +74 -10
  34. package/dist/index.js +9 -9
  35. package/dist/providers/bedrock.d.ts +1 -1
  36. package/dist/review/reveal-invisible.d.ts +13 -0
  37. package/dist/service-cli.js +8 -8
  38. package/dist/{service-client-cli-v6qptg9x.js → service-client-cli-xbj7j5kj.js} +3 -3
  39. package/dist/verify-historical-migrations.js +100 -27
  40. package/dist/workspace/text-integrity.d.ts +19 -0
  41. package/dist/workspace/workspace.d.ts +8 -3
  42. package/dist/zhx.js +2 -2
  43. package/docs/AUTO_APPROVE.md +51 -0
  44. package/docs/AZURE_OPENAI.md +4 -4
  45. package/docs/BEDROCK.md +4 -4
  46. package/docs/CLI.md +13 -0
  47. package/docs/CODE_RELEASE.md +21 -0
  48. package/docs/CREDENTIALS.md +1 -1
  49. package/docs/DURABLE_OPERATIONS.md +1 -1
  50. package/docs/ENGINE_API.md +1 -1
  51. package/docs/EXTENSIBILITY.md +1 -1
  52. package/docs/FIRST_USE.md +6 -6
  53. package/docs/MINIMUM_TASK_AUTHORITY.md +5 -5
  54. package/docs/PROJECT_MEMORY.md +1 -1
  55. package/docs/TOOL_POLICY.md +3 -0
  56. package/docs/VERTEX.md +2 -2
  57. package/docs/WEB_LIMITS.md +2 -2
  58. package/docs/adr/0002-isolated-mcp-stdio.md +1 -1
  59. package/evaluations/representative-assembly-matrix.json +37 -1
  60. package/examples/README.md +3 -3
  61. package/package.json +18 -17
@@ -0,0 +1,51 @@
1
+ # Opt-in auto-approve
2
+
3
+ Manual is the default. Nothing is applied until a person decides.
4
+
5
+ | Mode | What can proceed without a prompt |
6
+ | --- | --- |
7
+ | `manual` | Nothing. This is today's review. |
8
+ | `auto-edits` | File edits whose paths stay inside the workspace root. |
9
+ | `auto-limits` | Those edits, plus commands whose executable is on the allowlist. |
10
+
11
+ ## Always ask
12
+
13
+ These wait for a person in every mode, including when the command is allowlisted:
14
+
15
+ - Network or egress, including `curl`, `wget`, `ssh`, and any command that carries an `http` or `https` URL.
16
+ - Deletes outside the workspace.
17
+ - Writes outside the workspace root.
18
+ - Secret or credential files (`.env`, `credentials`, `.npmrc`, `.pypirc`, `.netrc`, `id_rsa`, `id_ed25519`, `*.pem`, `*.key`, and a `secrets` or `credentials` directory).
19
+ - `git push`.
20
+ - Package publish (`npm`, `pnpm`, `yarn`, `bun`, `cargo`).
21
+ - Any operation once a spend or token limit is already reached.
22
+
23
+ There is no flag that skips this list. A batch that mixes a safe edit with one of these stays on the review screen. `--approval-mode auto` and `--yes` are the older approve-all switch used by non-interactive runs. They are not this feature. Tool policy and explicit host review still apply.
24
+
25
+ ## Where it is set
26
+
27
+ The workspace file is `.zhivex-harness/approval.json`. That directory is already protected from workspace tools.
28
+
29
+ ```json
30
+ {
31
+ "mode": "auto-limits",
32
+ "commandAllowlist": ["bun", "git"]
33
+ }
34
+ ```
35
+
36
+ Allowlist entries are exact executable names. Wildcards and paths are rejected. `git` on the list still does not allow `git push`.
37
+
38
+ The CLI flag and a session command override the file for this process:
39
+
40
+ ```sh
41
+ zhivex-code --auto-approve auto-edits
42
+ zhivex-code --auto-approve auto-limits --auto-approve-allow bun --auto-approve-allow git
43
+ ```
44
+
45
+ In the terminal, `/auto-approve` shows the mode, `/auto-approve manual` changes this session, and `/auto-approve workspace manual` writes the file. `m` during a review, or `/manual`, returns to Manual without rewriting the file. The status line names the mode.
46
+
47
+ In the web workspace the header chip shows the same mode. The dialog can save it for this session or this workspace. `m`, while you are not typing, returns to Manual for the session.
48
+
49
+ ## Audit and undo
50
+
51
+ Each auto-approved operation is appended to `.zhivex-harness/auto-approvals.jsonl` with the mode, the reason, and a bounded snapshot of the previous file text (256 KiB of UTF-8). `/undo` restores the latest snapshot when every file still matches the approved text. The web Approvals dialog does the same per change. A later edit, a binary file, or a snapshot that was too large is not reverted.
@@ -4,14 +4,14 @@ Azure OpenAI is a separate provider (`azure-openai`). It does not reuse
4
4
  `OPENAI_API_KEY` or `OPENAI_BASE_URL`. No live Harness certification has been
5
5
  run for this route. Prices are not copied from the public OpenAI catalog.
6
6
 
7
- Published `@zhivex-ai/azure-openai@0.7.8` is the adapter pinned by this tree.
8
- It requires Core `^1.34.0`, and this checkout pins `@zhivex-ai/core@1.34.0`.
7
+ Published `@zhivex-ai/azure-openai@0.8.0` is the adapter pinned by this tree.
8
+ It requires Core `^1.36.0`, and this checkout pins `@zhivex-ai/core@1.37.0`.
9
9
  Language models report Tier A. Hosted tool gates such as tool search follow
10
10
  the model id (`gpt-5.4` and `gpt-6-astra` in this adapter). An opaque
11
11
  deployment name does not receive those gates unless a deployment map names
12
12
  the base model.
13
13
 
14
- Published 0.7.8 accepts a deployments map and a token provider for Microsoft
14
+ Published 0.8.0 accepts a deployments map and a token provider for Microsoft
15
15
  Entra ID. This route still authenticates with an API key and does not pass a
16
16
  token provider.
17
17
 
@@ -30,7 +30,7 @@ deployment name is not also sent as `model`. When it is omitted, requests use
30
30
  `AZURE_OPENAI_DEPLOYMENTS` is optional JSON, at most 8192 characters and 32
31
31
  entries. Each entry is `"name": "gpt-5.4"` or `"name": { "model": "gpt-5.4" }`.
32
32
  Deployment names and model ids are restricted to simple identifier characters.
33
- Harness passes the map to the adapter. Published 0.7.8 uses the base model for
33
+ Harness passes the map to the adapter. Published 0.8.0 uses the base model for
34
34
  capabilities and request shape while the request still uses the deployment
35
35
  name. Harness also overlays those capability flags.
36
36
 
package/docs/BEDROCK.md CHANGED
@@ -4,8 +4,8 @@ Bedrock is a separate provider (`bedrock`). It is not enabled by the Anthropic
4
4
  direct API route. No live Harness certification has been run for this route.
5
5
  Pricing and context limits are not inferred.
6
6
 
7
- Published `@zhivex-ai/bedrock@2.0.7` is the adapter pinned by this tree. It
8
- requires Core `^1.34.0`, and this checkout pins `@zhivex-ai/core@1.34.0`.
7
+ Published `@zhivex-ai/bedrock@2.1.0` is the adapter pinned by this tree. It
8
+ requires Core `^1.36.0`, and this checkout pins `@zhivex-ai/core@1.37.0`.
9
9
  This integration reports the installed adapter's labels and does not relabel
10
10
  them.
11
11
 
@@ -14,7 +14,7 @@ them.
14
14
  `BEDROCK_RUNTIME` is optional. An empty value or `converse` selects the Converse
15
15
  API. `openai` selects the OpenAI-compatible runtime. Any other value is rejected.
16
16
 
17
- Converse reports Tier B on the published 2.0.7 adapter: reasoning is supported
17
+ Converse reports Tier B on the published 2.1.0 adapter: reasoning is supported
18
18
  and `toolChoiceNone` is true. Approval requests stay false on that runtime.
19
19
  Harness reports that installed label.
20
20
 
@@ -28,7 +28,7 @@ not read `OPENAI_API_KEY` or `OPENAI_BASE_URL` for this route.
28
28
  Converse uses the AWS SDK default credential chain: instance roles, SSO,
29
29
  shared config, and environment credentials. Set `AWS_REGION` or
30
30
  `AWS_DEFAULT_REGION` to a region such as `us-east-1`. `AWS_PROFILE` is part of
31
- the transport fingerprint. Published 2.0.7 accepts a profile and static
31
+ the transport fingerprint. Published 2.1.0 accepts a profile and static
32
32
  credentials on the adapter. This route does not pass `AWS_PROFILE`. When
33
33
  `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` are both set, and no bearer
34
34
  token is set, Converse uses that static pair and an optional
package/docs/CLI.md CHANGED
@@ -549,6 +549,19 @@ model with a small billable request. See [credentials](CREDENTIALS.md).
549
549
  `/approvals` opens the mode picker; `/approvals ask`, `/approvals auto`, and
550
550
  `/approvals restricted` switch directly. The composer and `/status` show the active
551
551
  mode. Auto approves gated actions within existing workspace and execution policies.
552
+
553
+ Opt-in auto-approve is separate from `--yes`. `--auto-approve manual` is the default.
554
+ `--auto-approve auto-edits` applies file edits inside the workspace root.
555
+ `--auto-approve auto-limits` also runs commands whose executable is passed with
556
+ repeatable `--auto-approve-allow`. The same choice can live in
557
+ `.zhivex-harness/approval.json`, which tools cannot rewrite. A session choice from
558
+ `/auto-approve` or the `m` key wins until the process exits and does not rewrite the
559
+ file. Network or egress, deletes outside the workspace, writes outside the root,
560
+ secret or credential files, `git push`, package publish, and any operation already
561
+ over a spend or token limit always wait for a person. Allowlisting `git` or `npm`
562
+ does not bypass those. Every auto-approved edit is appended to
563
+ `.zhivex-harness/auto-approvals.jsonl`. `/undo` restores that edit when the file
564
+ still matches the approved text. See [auto-approve](AUTO_APPROVE.md).
552
565
  Bounded dependency inspection runs without a separate approval in every mode.
553
566
  Restricted denies gated actions. Mode changes apply only to this CLI process and are blocked
554
567
  while work is active or awaiting approval; use `/pending`, `/approve`, or `/deny`
@@ -1,5 +1,26 @@
1
1
  # Code release procedure
2
2
 
3
+ ## Prepared patch: Code 0.4.2
4
+
5
+ Code `0.4.2` pins Harness `1.6.3` exactly and is pending publication to `latest`. Published Code `0.4.1` and Harness `1.6.2` remain unchanged. The private Web development dependency stays on the published Harness `1.6.2` so clean CI can install its frozen lockfile before the candidate exists in the registry; offline tests explicitly link the built `1.6.3` candidate.
6
+
7
+ After Harness publication and registry/provenance verification, use annotated `code-v0.4.2` on the same reviewed main SHA, `channel=latest`, `mode=oidc`, and the protected `release-code.yml` workflow. The final Code gate must resolve the real published Harness dependency without candidate overrides, then verify retained-artifact installation and provenance. Local paired-artifact tests do not substitute for that registry gate. See [the preparation report](https://github.com/Zhivex/zhivex-harness/blob/main/docs/reports/RELEASE_1_6_3_CODE_0_4_2.md).
8
+
9
+ ## Published patch: Code 0.4.1
10
+
11
+ Harness `1.6.2` is published on npm `latest`. `@zhivex-ai/code` `0.4.1` is
12
+ published on `latest`, pinned exactly to Harness `1.6.2`. The engine bump is
13
+ its only change. Published npm Code `0.4.0` remains pinned to
14
+ Harness `1.5.0` and is not republished. Annotated `code-v0.4.1` on the reviewed
15
+ main SHA, `channel=latest`, ran through the protected workflow and its
16
+ environment approval.
17
+
18
+ ## Previous preparation: Harness 1.6.2 did not release Code
19
+
20
+ Harness `1.6.2` was prepared while `@zhivex-ai/code` stayed version `0.4.0`,
21
+ with its source pin on `1.6.2` for installed acceptance. No `code-v*` tag was
22
+ created for that engine bump.
23
+
3
24
  ## Pending patch: 2026-10-16
4
25
 
5
26
  The source version is `1.5.0`, pending publication to `latest`. This checkout
@@ -86,7 +86,7 @@ Set an https `AZURE_OPENAI_ENDPOINT` before saving a key. Optional
86
86
  `AZURE_OPENAI_API_VERSION` and `AZURE_OPENAI_DEPLOYMENTS` stay in the
87
87
  environment and are not written to the keychain. A managed
88
88
  `AZURE_OPENAI_API_KEY` is allowed together with that endpoint. Published
89
- `@zhivex-ai/azure-openai@0.7.8` accepts a token provider, and this route still
89
+ `@zhivex-ai/azure-openai@0.8.0` accepts a token provider, and this route still
90
90
  stores and sends the API key. See [Azure OpenAI](AZURE_OPENAI.md).
91
91
 
92
92
  ## Qwen interactive setup
@@ -70,7 +70,7 @@ Loading a run reconstructs its complete state for compatibility with approvals,
70
70
 
71
71
  Logical backups contain hydrated history rather than database references, so restoration does not require the original artifact tables. Exports up to 64 MiB retain the legacy JSON format; larger exports use the versioned `ZHIVEX-STATE-SEGMENTS-1` transport with bounded frames, including split strings. RC13 reads both formats and verifies the same logical checksum before import. Older versions cannot read segmented exports. File I/O and checksum serialization are incremental; the public backup/import APIs still hydrate the complete logical bundle in memory. Segmented files have no aggregate 64 MiB ceiling. A state-limit failure records a bounded terminal diagnostic on the last durable checkpoint; the unsaved payload is not claimed as preserved. Use `/status` to inspect the failed run before `/continue`. Recovery retains tool journal receipts and never re-executes an operation itself.
72
72
 
73
- The current source pins Core 1.34.0 and Agents 1.11.0. New stores require no
73
+ The current source pins Core 1.37.0 and Agents 1.12.0. New stores require no
74
74
  conversion. Before upgrading an existing shared SDK store, stop its workers and
75
75
  upgrade them together with a complete backup. Verified legacy runs retain their
76
76
  physical keys and remain readable; new runs use canonical keys that distinguish
@@ -1,7 +1,7 @@
1
1
  # Engine API and Code integration
2
2
 
3
3
  The terminal-independent package entrypoints shipped in Harness 1.3.0 and remain
4
- in published Harness 1.4.0 (npm `latest`). This checkout is Harness 1.5.0, pending publication. They are not present in Harness 1.2.0.
4
+ in Harness 1.6.2, published on npm `latest`. They are not present in Harness 1.2.0.
5
5
  The protected workflow validated the exact stable tarball, live gates and
6
6
  registry integrity/provenance; local candidate smoke remains contributor evidence. Do not install registry 1.2.0 and
7
7
  expect the new entrypoints to exist.
@@ -8,7 +8,7 @@ Built-in registrations are Meta, Qwen, OpenAI, Gemini, Anthropic, Vertex, Amazon
8
8
 
9
9
  Library callers can use `DEFAULT_PROVIDER_REGISTRY`, `BUILTIN_PROVIDER_REGISTRATIONS`, `createProviderRegistry`, or `DEFAULT_PROVIDER_REGISTRY.extend(...)`, then pass the registry to `resolveHarnessConfig`, `createProviderModel`, provider diagnostics, or `createHarness({ providerRegistry })`. Registration IDs, environment-variable names, defaults, diagnostics, and factories are validated before they become selectable.
10
10
 
11
- The coordinated stable SDK batch pins `@zhivex-ai/agents@1.11.0`, `@zhivex-ai/core@1.34.0`, `@zhivex-ai/meta@0.2.9`, `@zhivex-ai/qwen@0.16.4`, `@zhivex-ai/openai@0.16.0`, `@zhivex-ai/gemini@0.13.0`, `@zhivex-ai/anthropic@0.14.0`, `@zhivex-ai/vertex@1.2.7`, `@zhivex-ai/bedrock@2.0.7`, and `@zhivex-ai/azure-openai@0.7.8`. Qwen 0.16.2 types malformed Responses tool arguments and malformed SSE events; Core 1.34.0 satisfies Agents, OpenAI and Vertex `^1.31.0`, Anthropic `^1.30.0`, Qwen `^1.29.0`, and the provisional Bedrock and Azure OpenAI `^1.34.0` ranges. These exact versions are pinned in the lockfile. Stable SDK publication does not replace Harness release-bound certification. Qwen `0.11.x` normalizes missing, placeholder, and continuation tool-call identifiers inside the adapter; Harness retains its deterministic provider-boundary normalizer as defense in depth until the exact candidate passes the complete release-bound representative matrix. A Core override keeps one runtime contract identity across every adapter, while Core `1.13.0` corrects compaction usage accounting and interaction-group retention. OpenAI `0.11.2` preserves synthetic assistant history in Responses, so the harness no longer requires its compaction transport or accounting workarounds.
11
+ The coordinated stable SDK batch pins `@zhivex-ai/agents@1.12.0`, `@zhivex-ai/core@1.37.0`, `@zhivex-ai/meta@0.3.0`, `@zhivex-ai/qwen@0.18.1`, `@zhivex-ai/openai@0.17.0`, `@zhivex-ai/gemini@0.14.0`, `@zhivex-ai/anthropic@0.15.0`, `@zhivex-ai/vertex@1.3.0`, `@zhivex-ai/bedrock@2.1.0`, and `@zhivex-ai/azure-openai@0.8.0`. Qwen 0.18.1 depends on Core `^1.37.0` and rejects non-string portable-decision instructions. Qwen 0.16.2 types malformed Responses tool arguments and malformed SSE events; Core 1.37.0 satisfies Agents `^1.34.0` and the provider adapters' `^1.36.0` floors. Vertex 1.3.0 requires OpenAI `^0.17.0`, Anthropic `^0.15.0`, and Gemini `^0.14.0`. These exact versions are pinned in the lockfile. Stable SDK publication does not replace Harness release-bound certification. Qwen `0.11.x` normalizes missing, placeholder, and continuation tool-call identifiers inside the adapter; Harness retains its deterministic provider-boundary normalizer as defense in depth until the exact candidate passes the complete release-bound representative matrix. A Core override keeps one runtime contract identity across every adapter, while Core `1.13.0` corrects compaction usage accounting and interaction-group retention. OpenAI `0.11.2` preserves synthetic assistant history in Responses, so the harness no longer requires its compaction transport or accounting workarounds.
12
12
 
13
13
  OpenAI is based on the GPT-5.6 family: `gpt-5.6-luna` is the default, with `gpt-5.6-terra` and `gpt-5.6-sol` available through `--model`. Availability remains organization-dependent while the upstream family is in limited preview, and the adapter uses the Responses API by default.
14
14
 
package/docs/FIRST_USE.md CHANGED
@@ -1,13 +1,13 @@
1
1
  # First use
2
2
 
3
- This guide targets stable `1.5.0`, pending publication to npm `latest`. The versioned install commands below become available only after protected publication. npm `latest` remains stable 1.4.1 until that publication.
3
+ This guide targets source candidate `1.6.3`, pending publication. Registry commands below apply after publication; current npm `latest` remains `1.6.2`.
4
4
 
5
5
  ## Install and start
6
6
 
7
7
  Install Node.js 22.13.0 or newer and Git. Then:
8
8
 
9
9
  ```sh
10
- npm install -g @zhivex-ai/harness@1.5.0
10
+ npm install -g @zhivex-ai/harness@1.6.3
11
11
  cd /path/to/your/project
12
12
  zhx
13
13
  ```
@@ -82,16 +82,16 @@ For command execution, configure [OCI isolation](EXECUTION_ENVIRONMENTS.md).
82
82
  With Bun 1.4.0 or newer and a supported Node runtime:
83
83
 
84
84
  ```sh
85
- bun add --global @zhivex-ai/harness@1.5.0
85
+ bun add --global @zhivex-ai/harness@1.6.3
86
86
  zhx
87
87
  ```
88
88
 
89
89
  For a disposable version/help/environment check without a global installation:
90
90
 
91
91
  ```sh
92
- bunx @zhivex-ai/harness@1.5.0 --version
93
- bunx @zhivex-ai/harness@1.5.0 --help
94
- bunx @zhivex-ai/harness@1.5.0 doctor
92
+ bunx @zhivex-ai/harness@1.6.3 --version
93
+ bunx @zhivex-ai/harness@1.6.3 --help
94
+ bunx @zhivex-ai/harness@1.6.3 doctor
95
95
  ```
96
96
 
97
97
  For source development, use the [contributor guide](https://github.com/Zhivex/zhivex-harness/blob/main/CONTRIBUTING.md).
@@ -52,11 +52,11 @@ dispatch/cap behavior, not provider billing guarantees or model quality.
52
52
 
53
53
  | Route | Direct guided task | Verified wire cap and dispatch boundary |
54
54
  | --- | --- | --- |
55
- | Built-in OpenAI (`@zhivex-ai/openai` 0.16.0) | Supported | Responses `max_output_tokens`; Chat `max_tokens` without reasoning or `max_completion_tokens` with reasoning; `maxRetries=0`, `maxProviderRequests=1` |
56
- | Built-in Anthropic API key (`@zhivex-ai/anthropic` 0.14.0) | Supported | Messages `max_tokens`; non-refreshable built-in credentials; `maxRetries=0` |
57
- | Built-in Gemini (`@zhivex-ai/gemini` 0.13.0) | Supported | `generationConfig.maxOutputTokens`; `maxRetries=0` |
58
- | Built-in Vertex (`@zhivex-ai/vertex` 1.2.7) | Supported | `generationConfig.maxOutputTokens`; real ADC callback, synthetic credential source in tests; `maxRetries=0` |
59
- | Qwen (`@zhivex-ai/qwen` 0.16.4) | Blocked as Code primary | Explicit Chat-mode middleware tested with capped `max_tokens`; Code has no explicit mode selector and Responses rejects `maxTokens` |
55
+ | Built-in OpenAI (`@zhivex-ai/openai` 0.17.0) | Supported | Responses `max_output_tokens`; Chat `max_tokens` without reasoning or `max_completion_tokens` with reasoning; `maxRetries=0`, `maxProviderRequests=1` |
56
+ | Built-in Anthropic API key (`@zhivex-ai/anthropic` 0.15.0) | Supported | Messages `max_tokens`; non-refreshable built-in credentials; `maxRetries=0` |
57
+ | Built-in Gemini (`@zhivex-ai/gemini` 0.14.0) | Supported | `generationConfig.maxOutputTokens`; `maxRetries=0` |
58
+ | Built-in Vertex (`@zhivex-ai/vertex` 1.3.0) | Supported | `generationConfig.maxOutputTokens`; real ADC callback, synthetic credential source in tests; `maxRetries=0` |
59
+ | Qwen (`@zhivex-ai/qwen` 0.18.1) | Blocked as Code primary | Explicit Chat-mode middleware tested with capped `max_tokens`; Code has no explicit mode selector and Responses rejects `maxTokens` |
60
60
  | Meta | Blocked | Harness continuation fetch can replay a 400 response outside SDK retry admission |
61
61
  | Injected/custom adapters, refreshable Anthropic OAuth | Blocked | No vetted transport provenance; OAuth transport can replay a 401 after refresh outside ordinary retry admission |
62
62
  | Mock | Offline tests only | Synthetic usage is never billing evidence |
@@ -7,7 +7,7 @@ generated automatically; hosts may submit a suggestion for operator review.
7
7
 
8
8
  ## CLI
9
9
 
10
- Use `zhx` or `zhivex-code` with Harness 1.5.0 (Code 0.4.0), pending publication. Commands
10
+ Use `zhx` with Harness 1.6.2, published on `latest`. `zhivex-code` is Code 0.4.1, published on `latest` and pinned exactly to Harness 1.6.2. Commands
11
11
  print bounded JSON, including the selected workspace/scope hashes. Quote content
12
12
  as one argument. Memory commands do not start a model or read credentials.
13
13
 
@@ -32,6 +32,9 @@ The strongest matching decision wins: deny, then ask_user, then allow. Allow
32
32
  does not grant filesystem permissions or remove an existing approval. ask_user
33
33
  uses the current approval mechanism, including its configured automatic mode;
34
34
  it does not independently require a human. Human-only review is separate work.
35
+ Opt-in auto-approve (`manual`, `auto-edits`, `auto-limits`) never bypasses a deny,
36
+ an explicit host review, or the always-ask list (network, secrets, git push,
37
+ package publish, paths outside the workspace, and an already reached spend or token limit).
35
38
 
36
39
  Built-in file resolvers cover read_file, read_files, propose_edits, apply_patch,
37
40
  apply_reviewed_edits, apply_reviewed_replacement, move_file and quarantine_file.
package/docs/VERTEX.md CHANGED
@@ -44,7 +44,7 @@ Errors expose bounded categories for authentication, permission, unavailable
44
44
  model/route, rate limit and server failures. Raw Google payloads, token values,
45
45
  credential paths and service-account identities are not retained in errors.
46
46
 
47
- The integration pins `@zhivex-ai/vertex@1.2.7` with Core 1.34.0 and
48
- `google-auth-library@11.1.0`. Deterministic tests exercise the installed SDK's
47
+ The integration pins `@zhivex-ai/vertex@1.3.0` with Core 1.37.0 and
48
+ `google-auth-library@11.3.1`. Deterministic tests exercise the installed SDK's
49
49
  transport, streaming, signed continuation, approval/reopen and route mismatch.
50
50
  They are not evidence of a live project, renewable ADC or IAM authorization.
@@ -3,8 +3,8 @@
3
3
  New interactive Web/terminal tasks have no accumulated spend, token, step,
4
4
  tool-call or duration cap unless configured. This change uses the published SDK contract from
5
5
  Zhivex/zhivex-ai-sdk PR 142 (Core/SDK 1.31.0, Agents 1.11.0). Direct Harness, Code
6
- and the root Core override now pin Core 1.34.0; Agents stays 1.11.0.
7
- Provider package pins are Anthropic 0.14.0, OpenAI 0.16.0 and Vertex 1.2.7.
6
+ and the root Core override now pin Core 1.37.0; Agents is 1.12.0.
7
+ Provider package pins are Anthropic 0.15.0, OpenAI 0.17.0 and Vertex 1.3.0.
8
8
  Headless policies and release gates remain unchanged.
9
9
 
10
10
  The Web header opens the approved gradual configuration modal. Next task settings
@@ -20,7 +20,7 @@ activate stdio, change configuration schema 1, or claim isolated execution passe
20
20
  options with abort, timeout/idempotency key, and an HTTP transport; no executable
21
21
  stdio factory was found in that dependency. The control-plane transport enum is
22
22
  not an executor.
23
- - The current pin is `@zhivex-ai/core` 1.34.0, which includes an experimental
23
+ - The current pin is `@zhivex-ai/core` 1.37.0, which includes an experimental
24
24
  stdio client. Harness still does not treat that factory as the OCI boundary.
25
25
 
26
26
  MCP stdio uses UTF-8 newline-delimited JSON-RPC on stdin/stdout; stderr is a
@@ -64,7 +64,11 @@
64
64
  "v1.4.0-rc.8",
65
65
  "v1.4.0",
66
66
  "v1.4.1",
67
- "v1.5.0"
67
+ "v1.5.0",
68
+ "v1.6.0",
69
+ "v1.6.1",
70
+ "v1.6.2",
71
+ "v1.6.3"
68
72
  ],
69
73
  "expectedModels": [
70
74
  {
@@ -570,6 +574,38 @@
570
574
  "qwen": "qwen3.8-flash",
571
575
  "openai": "gpt-6-luna"
572
576
  }
577
+ },
578
+ {
579
+ "releaseTag": "v1.6.0",
580
+ "models": {
581
+ "meta": "muse-spark-1.3-contributor",
582
+ "qwen": "qwen3.8-flash",
583
+ "openai": "gpt-6-luna"
584
+ }
585
+ },
586
+ {
587
+ "releaseTag": "v1.6.1",
588
+ "models": {
589
+ "meta": "muse-spark-1.3-contributor",
590
+ "qwen": "qwen3.8-flash",
591
+ "openai": "gpt-6-luna"
592
+ }
593
+ },
594
+ {
595
+ "releaseTag": "v1.6.2",
596
+ "models": {
597
+ "meta": "muse-spark-1.3-contributor",
598
+ "qwen": "qwen3.8-flash",
599
+ "openai": "gpt-6-luna"
600
+ }
601
+ },
602
+ {
603
+ "releaseTag": "v1.6.3",
604
+ "models": {
605
+ "meta": "muse-spark-1.3-contributor",
606
+ "qwen": "qwen3.8-flash",
607
+ "openai": "gpt-6-luna"
608
+ }
573
609
  }
574
610
  ],
575
611
  "expectedCases": [
@@ -2,19 +2,19 @@
2
2
 
3
3
  ## Isolated Bun installation
4
4
 
5
- Requirements: Bun 1.4.0+, Node.js 22.13.0+, and Git on macOS or Linux. After protected stable publication, this installs the 1.5.0 artifact in a temporary consumer, without building the source checkout or changing global tools:
5
+ Requirements: Bun 1.4.0+, Node.js 22.13.0+, and Git on macOS or Linux. After publication, this installs the 1.6.3 artifact in a temporary consumer, without building the source checkout or changing global tools:
6
6
 
7
7
  ```bash
8
8
  harness_demo_dir=$(mktemp -d)
9
9
  cd "$harness_demo_dir"
10
10
  printf '{"name":"harness-first-run","private":true}\n' > package.json
11
- bun add --exact --ignore-scripts @zhivex-ai/harness@1.5.0
11
+ bun add --exact --ignore-scripts @zhivex-ai/harness@1.6.3
12
12
  ./node_modules/.bin/zhx --version
13
13
  ./node_modules/.bin/zhx --help
14
14
  ./node_modules/.bin/zhx doctor --provider openai --json
15
15
  ```
16
16
 
17
- Version must print `1.5.0`; help lists commands. Doctor does not contact a provider. Without `OPENAI_API_KEY`, it reports the missing credential and exits with code `3`; inspect the JSON checks before proceeding. A directory without Git initialization can also produce a diagnostic warning. No paid model call is required for these checks. Both `zhx` and `zhivex-harness` are installed aliases; Bun manages installation, and their shebang runs Node.
17
+ Version must print `1.6.3`; help lists commands. Doctor does not contact a provider. Without `OPENAI_API_KEY`, it reports the missing credential and exits with code `3`; inspect the JSON checks before proceeding. A directory without Git initialization can also produce a diagnostic warning. No paid model call is required for these checks. Both `zhx` and `zhivex-harness` are installed aliases; Bun manages installation, and their shebang runs Node.
18
18
 
19
19
  To continue in your actual project, use the [global installation and credential setup](../README.md#quick-start), then `zhx init --profile daily --provider openai` and `zhx doctor --profile daily`. Real tasks require the selected provider credential in the process environment. Profiles store provider/model choices, never credentials. See [CLI](../docs/CLI.md) and [support](../SUPPORT.md).
20
20
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhivex-ai/harness",
3
- "version": "1.5.0",
3
+ "version": "1.6.3",
4
4
  "description": "Governed, provider-portable runtime for coding agents with durable approvals and isolated repository execution.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -100,6 +100,7 @@
100
100
  "LICENSE",
101
101
  "docs/CHANGE_ENVELOPES.md",
102
102
  "docs/CLI.md",
103
+ "docs/AUTO_APPROVE.md",
103
104
  "docs/WEB_LIMITS.md",
104
105
  "docs/CODE_RELEASE.md",
105
106
  "docs/CODE_WEB_TASKS.md",
@@ -216,26 +217,26 @@
216
217
  "smoke:mcp:installed": "bun run build && bun scripts/mcp-installed-smoke.ts"
217
218
  },
218
219
  "dependencies": {
219
- "@zhivex-ai/agents": "1.11.0",
220
- "@zhivex-ai/anthropic": "0.14.0",
221
- "@zhivex-ai/azure-openai": "0.7.8",
222
- "@zhivex-ai/bedrock": "2.0.7",
223
- "@zhivex-ai/core": "1.34.0",
224
- "@zhivex-ai/gemini": "0.13.0",
225
- "@zhivex-ai/meta": "0.2.9",
226
- "@zhivex-ai/openai": "0.16.0",
227
- "@zhivex-ai/qwen": "0.16.4",
228
- "@zhivex-ai/vertex": "1.2.7",
229
- "google-auth-library": "11.1.0",
230
- "zod": "4.6.5"
220
+ "@zhivex-ai/agents": "1.12.0",
221
+ "@zhivex-ai/anthropic": "0.15.0",
222
+ "@zhivex-ai/azure-openai": "0.8.0",
223
+ "@zhivex-ai/bedrock": "2.1.0",
224
+ "@zhivex-ai/core": "1.37.0",
225
+ "@zhivex-ai/gemini": "0.14.0",
226
+ "@zhivex-ai/meta": "0.3.0",
227
+ "@zhivex-ai/openai": "0.17.0",
228
+ "@zhivex-ai/qwen": "0.18.1",
229
+ "@zhivex-ai/vertex": "1.3.0",
230
+ "google-auth-library": "11.3.1",
231
+ "zod": "4.6.7"
231
232
  },
232
233
  "overrides": {
233
- "@zhivex-ai/core": "1.34.0"
234
+ "@zhivex-ai/core": "1.37.0"
234
235
  },
235
236
  "devDependencies": {
236
- "@agentclientprotocol/sdk": "1.8.0",
237
+ "@agentclientprotocol/sdk": "2.1.0",
237
238
  "@modelcontextprotocol/server": "2.3.1",
238
- "@types/bun": "1.4.2",
239
+ "@types/bun": "1.4.4",
239
240
  "@types/node": "^26.6.5",
240
241
  "typescript": "7.0.2",
241
242
  "typescript-compiler-api": "npm:typescript@6.0.3"
@@ -246,6 +247,6 @@
246
247
  },
247
248
  "packageManager": "bun@1.4.0",
248
249
  "optionalDependencies": {
249
- "@napi-rs/keyring": "2.1.1"
250
+ "@napi-rs/keyring": "2.1.2"
250
251
  }
251
252
  }