@zhivex-ai/harness 1.5.0 → 1.6.2
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/CHANGELOG.md +20 -0
- package/README.md +1 -1
- package/SUPPORT.md +1 -1
- package/contracts/stable-api-signatures.json +7 -7
- package/dist/acp-cli.js +7 -7
- package/dist/approvals/auto-approve.d.ts +137 -0
- package/dist/audit/index.js +2 -2
- package/dist/{audit-pack-kvw7ng34.js → audit-pack-fckpqfsb.js} +3 -3
- package/dist/{cli-vyrytn3m.js → cli-84en174d.js} +6 -6
- package/dist/{cli-entry-q8bgkn9m.js → cli-entry-10th5awp.js} +16 -15
- package/dist/{cli-entry-h2yc9x37.js → cli-entry-4g2ewcnw.js} +10 -2
- package/dist/{cli-entry-928p8h41.js → cli-entry-6amx4mcc.js} +75 -11
- package/dist/{cli-entry-75j3r49b.js → cli-entry-z1pbjrg4.js} +2 -2
- package/dist/cli.js +2 -2
- package/dist/compat/code-support.js +5 -5
- package/dist/engine/acp.js +8 -8
- package/dist/engine/client.js +7 -7
- package/dist/engine/desktop-state-v1.js +4 -4
- package/dist/engine/index.js +10 -10
- package/dist/engine/mcp-stdio-v1.js +4 -4
- package/dist/engine/service.js +8 -8
- package/dist/hostile-repository-demo.js +98 -25
- package/dist/{index-96ezrvg2.js → index-1pn0ecs4.js} +2 -2
- package/dist/{index-5zbq9ztj.js → index-2r4f0p4n.js} +1 -1
- package/dist/{index-63gbp0cz.js → index-4mn6m3bq.js} +1 -1
- package/dist/{index-vvzc5ezz.js → index-74f9yhfh.js} +1 -1
- package/dist/{index-wwthv10a.js → index-amjttjaj.js} +1 -1
- package/dist/{index-vc7yxz50.js → index-paf7z8kn.js} +4 -4
- package/dist/{index-6fp7kdpx.js → index-pf73y4gt.js} +12 -4
- package/dist/{index-xfedewpt.js → index-rgqzdgv6.js} +2 -2
- package/dist/{index-pq3kz1r8.js → index-rz7wmp71.js} +16 -15
- package/dist/{index-ggstwr0v.js → index-w0m1nckc.js} +74 -10
- package/dist/{index-jpdvn09j.js → index-zrz4rs7p.js} +1 -1
- package/dist/index.js +9 -9
- package/dist/providers/bedrock.d.ts +1 -1
- package/dist/review/reveal-invisible.d.ts +13 -0
- package/dist/service-cli.js +8 -8
- package/dist/{service-client-cli-v6qptg9x.js → service-client-cli-pp5z4dmf.js} +3 -3
- package/dist/verify-historical-migrations.js +98 -25
- package/dist/workspace/text-integrity.d.ts +19 -0
- package/dist/workspace/workspace.d.ts +8 -3
- package/dist/zhx.js +2 -2
- package/docs/AUTO_APPROVE.md +51 -0
- package/docs/AZURE_OPENAI.md +4 -4
- package/docs/BEDROCK.md +4 -4
- package/docs/CLI.md +13 -0
- package/docs/CODE_RELEASE.md +8 -0
- package/docs/CREDENTIALS.md +1 -1
- package/docs/DURABLE_OPERATIONS.md +1 -1
- package/docs/ENGINE_API.md +1 -1
- package/docs/EXTENSIBILITY.md +1 -1
- package/docs/FIRST_USE.md +6 -6
- package/docs/MINIMUM_TASK_AUTHORITY.md +5 -5
- package/docs/PROJECT_MEMORY.md +1 -1
- package/docs/TOOL_POLICY.md +3 -0
- package/docs/VERTEX.md +2 -2
- package/docs/WEB_LIMITS.md +2 -2
- package/docs/adr/0002-isolated-mcp-stdio.md +1 -1
- package/evaluations/representative-assembly-matrix.json +28 -1
- package/examples/README.md +3 -3
- package/package.json +16 -15
|
@@ -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.
|
package/docs/AZURE_OPENAI.md
CHANGED
|
@@ -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.
|
|
8
|
-
It requires Core `^1.
|
|
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.36.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.
|
|
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.
|
|
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
|
|
8
|
-
requires Core `^1.
|
|
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.36.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
|
|
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
|
|
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`
|
package/docs/CODE_RELEASE.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Code release procedure
|
|
2
2
|
|
|
3
|
+
## Harness 1.6.2 does not release Code
|
|
4
|
+
|
|
5
|
+
Harness source is `1.6.2`, pending publication to `latest`. Installed
|
|
6
|
+
acceptance requires the Code source pin to equal that candidate, so
|
|
7
|
+
`@zhivex-ai/code` stays version `0.4.0` and pins `@zhivex-ai/harness` to
|
|
8
|
+
`1.6.2`. Published npm Code `0.4.0` remains pinned to Harness `1.5.0`. Do not
|
|
9
|
+
republish `0.4.0` and do not create a `code-v*` tag for this engine bump.
|
|
10
|
+
|
|
3
11
|
## Pending patch: 2026-10-16
|
|
4
12
|
|
|
5
13
|
The source version is `1.5.0`, pending publication to `latest`. This checkout
|
package/docs/CREDENTIALS.md
CHANGED
|
@@ -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.
|
|
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.
|
|
73
|
+
The current source pins Core 1.36.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
|
package/docs/ENGINE_API.md
CHANGED
|
@@ -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.
|
|
4
|
+
in published Harness 1.4.0 (npm `latest`). This checkout is Harness 1.6.2, pending publication. 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.
|
package/docs/EXTENSIBILITY.md
CHANGED
|
@@ -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
|
+
The coordinated stable SDK batch pins `@zhivex-ai/agents@1.12.0`, `@zhivex-ai/core@1.36.0`, `@zhivex-ai/meta@0.3.0`, `@zhivex-ai/qwen@0.18.0`, `@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.16.2 types malformed Responses tool arguments and malformed SSE events; Core 1.36.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.
|
|
3
|
+
This guide targets stable `1.6.2`, pending publication to npm `latest`. The versioned install commands below become available only after protected publication. npm `latest` remains stable 1.5.0 until that publication.
|
|
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.
|
|
10
|
+
npm install -g @zhivex-ai/harness@1.6.2
|
|
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.
|
|
85
|
+
bun add --global @zhivex-ai/harness@1.6.2
|
|
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.
|
|
93
|
-
bunx @zhivex-ai/harness@1.
|
|
94
|
-
bunx @zhivex-ai/harness@1.
|
|
92
|
+
bunx @zhivex-ai/harness@1.6.2 --version
|
|
93
|
+
bunx @zhivex-ai/harness@1.6.2 --help
|
|
94
|
+
bunx @zhivex-ai/harness@1.6.2 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.
|
|
56
|
-
| Built-in Anthropic API key (`@zhivex-ai/anthropic` 0.
|
|
57
|
-
| Built-in Gemini (`@zhivex-ai/gemini` 0.
|
|
58
|
-
| Built-in Vertex (`@zhivex-ai/vertex` 1.
|
|
59
|
-
| Qwen (`@zhivex-ai/qwen` 0.
|
|
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.0) | 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 |
|
package/docs/PROJECT_MEMORY.md
CHANGED
|
@@ -7,7 +7,7 @@ generated automatically; hosts may submit a suggestion for operator review.
|
|
|
7
7
|
|
|
8
8
|
## CLI
|
|
9
9
|
|
|
10
|
-
Use `zhx`
|
|
10
|
+
Use `zhx` with Harness 1.6.2, pending publication. `zhivex-code` stays on Code 0.4.0. Its source pin is Harness 1.6.2; published Code 0.4.0 remains pinned to Harness 1.5.0. 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
|
|
package/docs/TOOL_POLICY.md
CHANGED
|
@@ -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.
|
|
48
|
-
`google-auth-library@11.1
|
|
47
|
+
The integration pins `@zhivex-ai/vertex@1.3.0` with Core 1.36.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.
|
package/docs/WEB_LIMITS.md
CHANGED
|
@@ -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.
|
|
7
|
-
Provider package pins are Anthropic 0.
|
|
6
|
+
and the root Core override now pin Core 1.36.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.
|
|
23
|
+
- The current pin is `@zhivex-ai/core` 1.36.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,10 @@
|
|
|
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"
|
|
68
71
|
],
|
|
69
72
|
"expectedModels": [
|
|
70
73
|
{
|
|
@@ -570,6 +573,30 @@
|
|
|
570
573
|
"qwen": "qwen3.8-flash",
|
|
571
574
|
"openai": "gpt-6-luna"
|
|
572
575
|
}
|
|
576
|
+
},
|
|
577
|
+
{
|
|
578
|
+
"releaseTag": "v1.6.0",
|
|
579
|
+
"models": {
|
|
580
|
+
"meta": "muse-spark-1.3-contributor",
|
|
581
|
+
"qwen": "qwen3.8-flash",
|
|
582
|
+
"openai": "gpt-6-luna"
|
|
583
|
+
}
|
|
584
|
+
},
|
|
585
|
+
{
|
|
586
|
+
"releaseTag": "v1.6.1",
|
|
587
|
+
"models": {
|
|
588
|
+
"meta": "muse-spark-1.3-contributor",
|
|
589
|
+
"qwen": "qwen3.8-flash",
|
|
590
|
+
"openai": "gpt-6-luna"
|
|
591
|
+
}
|
|
592
|
+
},
|
|
593
|
+
{
|
|
594
|
+
"releaseTag": "v1.6.2",
|
|
595
|
+
"models": {
|
|
596
|
+
"meta": "muse-spark-1.3-contributor",
|
|
597
|
+
"qwen": "qwen3.8-flash",
|
|
598
|
+
"openai": "gpt-6-luna"
|
|
599
|
+
}
|
|
573
600
|
}
|
|
574
601
|
],
|
|
575
602
|
"expectedCases": [
|
package/examples/README.md
CHANGED
|
@@ -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
|
+
Requirements: Bun 1.4.0+, Node.js 22.13.0+, and Git on macOS or Linux. After protected stable publication, this installs the 1.6.2 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.
|
|
11
|
+
bun add --exact --ignore-scripts @zhivex-ai/harness@1.6.2
|
|
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.
|
|
17
|
+
Version must print `1.6.2`; 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.
|
|
3
|
+
"version": "1.6.2",
|
|
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.
|
|
220
|
-
"@zhivex-ai/anthropic": "0.
|
|
221
|
-
"@zhivex-ai/azure-openai": "0.
|
|
222
|
-
"@zhivex-ai/bedrock": "2.0
|
|
223
|
-
"@zhivex-ai/core": "1.
|
|
224
|
-
"@zhivex-ai/gemini": "0.
|
|
225
|
-
"@zhivex-ai/meta": "0.
|
|
226
|
-
"@zhivex-ai/openai": "0.
|
|
227
|
-
"@zhivex-ai/qwen": "0.
|
|
228
|
-
"@zhivex-ai/vertex": "1.
|
|
229
|
-
"google-auth-library": "11.1
|
|
230
|
-
"zod": "4.6.
|
|
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.36.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.0",
|
|
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.
|
|
234
|
+
"@zhivex-ai/core": "1.36.0"
|
|
234
235
|
},
|
|
235
236
|
"devDependencies": {
|
|
236
237
|
"@agentclientprotocol/sdk": "1.8.0",
|
|
237
238
|
"@modelcontextprotocol/server": "2.3.1",
|
|
238
|
-
"@types/bun": "1.4.
|
|
239
|
+
"@types/bun": "1.4.3",
|
|
239
240
|
"@types/node": "^26.6.5",
|
|
240
241
|
"typescript": "7.0.2",
|
|
241
242
|
"typescript-compiler-api": "npm:typescript@6.0.3"
|