@zhivex-ai/harness 1.4.0 → 1.5.0
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 +32 -10
- package/README.md +7 -5
- package/SUPPORT.md +2 -2
- package/contracts/client-protocol-v1.schema.json +593 -0
- package/contracts/engine-api.json +156 -0
- package/contracts/public-api.json +12 -0
- package/contracts/stable-api-signatures.json +36 -36
- package/dist/acp-cli.js +54 -20
- package/dist/approvals/approval-diff.d.ts +2 -1
- package/dist/approvals/approval-preview.d.ts +1 -1
- package/dist/audit/index.d.ts +3 -0
- package/dist/audit/index.js +482 -0
- package/dist/audit/pack.d.ts +72 -0
- package/dist/audit-pack-kvw7ng34.js +532 -0
- package/dist/cli/arguments.d.ts +3 -1
- package/dist/cli/audit-pack.d.ts +24 -0
- package/dist/cli/cli-credentials.d.ts +6 -0
- package/dist/cli/cli-profiles.d.ts +4 -2
- package/dist/cli/node-engine.d.ts +2 -0
- package/dist/cli-entry-75j3r49b.js +484 -0
- package/dist/cli-entry-928p8h41.js +10067 -0
- package/dist/cli-entry-h2yc9x37.js +10350 -0
- package/dist/{cli-entry-20w6nh0k.js → cli-entry-hdtfef27.js} +439 -19
- package/dist/{cli-entry-w0hterjs.js → cli-entry-q8bgkn9m.js} +40 -13
- package/dist/{cli-2h37qyvg.js → cli-vyrytn3m.js} +253 -644
- package/dist/cli.js +27 -2
- package/dist/client/json-contracts.d.ts +4 -0
- package/dist/client/protocol.d.ts +133 -0
- package/dist/client/task-control-host.d.ts +400 -0
- package/dist/client/task-projection-host.d.ts +12 -0
- package/dist/client/task-projection.d.ts +168 -0
- package/dist/compat/code-support.js +28 -22
- package/dist/{config-qt69hkqj.js → config-r9fdhce6.js} +3 -3
- package/dist/{config-j9624t6t.js → config-vyajmksy.js} +1 -1
- package/dist/engine/acp.js +15 -11
- package/dist/engine/client.js +14 -10
- package/dist/engine/desktop-providers-v1.d.ts +2 -0
- package/dist/engine/desktop-providers-v1.js +23 -3
- package/dist/engine/desktop-state-v1.js +11 -8
- package/dist/engine/index.d.ts +3 -0
- package/dist/engine/index.js +101 -554
- package/dist/engine/mcp-stdio-v1.js +8 -6
- package/dist/engine/models.js +76 -4
- package/dist/engine/protocol.d.ts +2 -0
- package/dist/engine/protocol.js +110 -0
- package/dist/engine/service.js +15 -11
- package/dist/hostile-repository-demo.js +1232 -564
- package/dist/{index-8zjmnyw5.js → index-1265j7t2.js} +73 -6
- package/dist/{index-nmjdwd4p.js → index-4gt045j0.js} +109 -1
- package/dist/{index-pdmevfxv.js → index-5zbq9ztj.js} +5 -259
- package/dist/{index-6dft2vev.js → index-63gbp0cz.js} +5 -3
- package/dist/index-6dxrbnxm.js +719 -0
- package/dist/{index-pp474137.js → index-6fp7kdpx.js} +769 -933
- package/dist/{index-61gthdz6.js → index-8sm2a1wa.js} +1 -1
- package/dist/{index-rkbf7dqg.js → index-96ezrvg2.js} +57 -13
- package/dist/index-bt2p8x7r.js +329 -0
- package/dist/index-c39197wq.js +552 -0
- package/dist/{index-m82cfspw.js → index-eps3c3g6.js} +877 -963
- package/dist/{index-s2k2edts.js → index-fqqz1yt8.js} +110 -1544
- package/dist/{index-m34q25jj.js → index-ggstwr0v.js} +192 -838
- package/dist/index-jpdvn09j.js +490 -0
- package/dist/{index-xqxeypt5.js → index-mzydbzp8.js} +76 -4
- package/dist/index-pq3kz1r8.js +269 -0
- package/dist/{index-wg1sd3at.js → index-qfsrrnz6.js} +1 -1
- package/dist/{index-937cb7y8.js → index-vc7yxz50.js} +561 -35
- package/dist/{index-5jhgatga.js → index-vvzc5ezz.js} +7 -6
- package/dist/index-wwthv10a.js +1507 -0
- package/dist/{index-tfzta544.js → index-xfedewpt.js} +17 -9
- package/dist/index-yx52bt4a.js +511 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +93 -77
- package/dist/integrations/mcp-stdio-tools.d.ts +4 -1
- package/dist/internal/desktop/providers.d.ts +2 -0
- package/dist/models/catalog.d.ts +2 -0
- package/dist/persistence/sqlite-database.d.ts +1 -0
- package/dist/providers/azure-openai.d.ts +14 -0
- package/dist/providers/bedrock.d.ts +23 -0
- package/dist/providers/providers.d.ts +1 -1
- package/dist/runtime/budget-ledger-scope.d.ts +14 -0
- package/dist/runtime/durable-review-group.d.ts +33 -0
- package/dist/runtime/harness.d.ts +11 -0
- package/dist/runtime/run-interruption.d.ts +7 -0
- package/dist/runtime/shared-budget.d.ts +30 -0
- package/dist/runtime/task-continuity.d.ts +300 -77
- package/dist/service-cli.js +15 -11
- package/dist/{service-client-cli-fn54ev6w.js → service-client-cli-v6qptg9x.js} +400 -305
- package/dist/tools/workspace.d.ts +2 -2
- package/dist/verify-historical-migrations.js +1237 -566
- package/dist/workspace/edit-contracts.d.ts +2 -2
- package/dist/workspace/path-policy.d.ts +2 -1
- package/dist/workspace/workspace.d.ts +13 -0
- package/dist/zhx.js +27 -2
- package/docs/AUDIT_PACK.md +99 -0
- package/docs/AZURE_OPENAI.md +53 -0
- package/docs/BEDROCK.md +56 -0
- package/docs/CLI.md +15 -0
- package/docs/CLIENT_PROTOCOL.md +178 -0
- package/docs/CODE_RELEASE.md +59 -7
- package/docs/CODE_WEB_TASKS.md +116 -0
- package/docs/CONTEXT_ENGINEERING.md +59 -0
- package/docs/CREDENTIALS.md +21 -0
- package/docs/DURABLE_OPERATIONS.md +93 -1
- package/docs/ENGINE_API.md +5 -2
- package/docs/EXTENSIBILITY.md +8 -4
- package/docs/FIRST_USE.md +6 -6
- package/docs/MINIMUM_TASK_AUTHORITY.md +3 -3
- package/docs/PROJECT_MEMORY.md +1 -1
- package/docs/PUBLIC_SECURITY.md +14 -1
- package/docs/README.md +6 -1
- package/docs/REPOSITORY_EDITING.md +1 -1
- package/docs/STABILITY.md +3 -1
- package/docs/SUPPORT_MATRIX.md +1 -1
- package/docs/SUPPORT_MATRIX_1_1.md +1 -1
- package/docs/TOOL_POLICY.md +4 -1
- package/docs/USAGE.md +3 -1
- package/docs/VERTEX.md +2 -2
- package/docs/WEB_LIMITS.md +4 -3
- package/docs/adr/0002-isolated-mcp-stdio.md +7 -4
- package/docs/support-matrix-1.1.json +3 -1
- package/docs/support-matrix.json +6 -4
- package/evaluations/code-task-ui.json +20 -0
- package/evaluations/representative-assembly-matrix.json +19 -1
- package/evaluations/task-projection.json +10 -0
- package/evaluations/task-recovery-lab.json +60 -0
- package/examples/README.md +3 -3
- package/package.json +23 -13
- package/dist/cli-entry-4ngptr62.js +0 -19900
- package/dist/index-m49jx72n.js +0 -220
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Code web tasks — CODE-HU-05
|
|
2
|
+
|
|
3
|
+
Canonical story: https://app.notion.com/p/3ef777b104f681309854c8f1e73803f1.
|
|
4
|
+
This screen sits on the experimental task evidence read (`task.get` /
|
|
5
|
+
`task.projection.v1`) and the experimental task controls (`task.control.v1`).
|
|
6
|
+
It extends the existing browser in `packages/web`, packaged by `packages/code`.
|
|
7
|
+
It does not create a second client, an IDE, a file tree, an SDK patch, or a release.
|
|
8
|
+
An operator reviews the host evidence and explicitly accepts that snapshot before
|
|
9
|
+
treating the delivery as acknowledged. Continuation is a separate confirmed
|
|
10
|
+
action on a fresh review ticket; model prose and a completed run are not acceptance.
|
|
11
|
+
|
|
12
|
+
## Operator flow
|
|
13
|
+
|
|
14
|
+
1. Open `zhivex-code web`, open Sessions, choose an allowed project and create an empty session.
|
|
15
|
+
Choose **Define task**. Enter the goal, exact existing editable files, package
|
|
16
|
+
checks and explicit input/output/total token limits for the entire task.
|
|
17
|
+
2. Review each proposed edit or check through the existing exact approval controls.
|
|
18
|
+
Mark every changed file viewed before approval. Execution, deterministic
|
|
19
|
+
checks, and human acceptance remain separate statuses.
|
|
20
|
+
3. Open **Result, checks and provenance** for paths, contract/current-byte identity,
|
|
21
|
+
required checks and human requirements. The renderer displays host evidence;
|
|
22
|
+
assistant prose does not establish a passing check or permission.
|
|
23
|
+
4. Open **Task budget and continuation** for confirmed usage, reservations,
|
|
24
|
+
unknown held exposure and remaining tokens. The account covers all task turns;
|
|
25
|
+
do not add its values to the existing per-run monitor. Missing pricing stays
|
|
26
|
+
unknown; monetary values are estimates, never invoices.
|
|
27
|
+
5. Choose **Review task** to obtain a bounded fresh Git diff and a five-minute
|
|
28
|
+
review ticket. Explicitly acknowledge the diff and requirements before
|
|
29
|
+
**Accept this snapshot**. This records operator acknowledgement separately
|
|
30
|
+
from engine checks; it does not commit, merge or assert measured quality.
|
|
31
|
+
6. **Correct requirements** adds a pending requirement without a model call.
|
|
32
|
+
**Continue task** requires another explicit instruction and confirmation.
|
|
33
|
+
Both preserve the original account; continuation may consume its remaining
|
|
34
|
+
credit for model/compaction work, approved edits and checks. Back, Escape,
|
|
35
|
+
Close, reload and reconnect do not execute work.
|
|
36
|
+
|
|
37
|
+
## Interruption and handoff
|
|
38
|
+
|
|
39
|
+
Cancel initially means requested, not confirmed. A confirmed local cancelled run
|
|
40
|
+
does not prove provider termination. Missing provider usage retains unknown
|
|
41
|
+
exposure and blocks continuation. A lost/failed command response requires reading
|
|
42
|
+
state through Reconnect; it is never automatically retried. Relaunch reopens the
|
|
43
|
+
same durable task, contract, checks, budget and effects without depending on the
|
|
44
|
+
chat transcript or claiming human minutes.
|
|
45
|
+
|
|
46
|
+
The runtime records the first interruption source while relaying its signal;
|
|
47
|
+
nested cancellation signals cannot change a caller cancellation into an
|
|
48
|
+
unclassified failure. It settles local interruption only after the execution
|
|
49
|
+
owner releases its lease. The session index can observe `cancel_requested`
|
|
50
|
+
directly from `created` when busy reads have not yet observed `running`.
|
|
51
|
+
Neither change confirms provider termination or releases unknown exposure.
|
|
52
|
+
|
|
53
|
+
A continuation rejected before admission retains a failed session attempt linked
|
|
54
|
+
to its previous admitted task. The panel explicitly identifies retained evidence;
|
|
55
|
+
checks stale against changed bytes cannot authorize acceptance. The rejected
|
|
56
|
+
attempt does not fabricate budget admission or consumption. A fresh review targets
|
|
57
|
+
the observed admitted run and must satisfy current host checks again.
|
|
58
|
+
|
|
59
|
+
## Authority and limits
|
|
60
|
+
|
|
61
|
+
- The browser sends a bounded operator brief, never a contract, receipt, policy,
|
|
62
|
+
credential, ledger or execution grant. The host resolves package checks and
|
|
63
|
+
compiles the existing task contract.
|
|
64
|
+
- Initially native Unix workspaces only: clean Git baseline, selected tracked
|
|
65
|
+
visible files (at most 20, each at most 64 KiB), at most eight package checks,
|
|
66
|
+
no subagents. Existing exact edit/check approvals remain mandatory.
|
|
67
|
+
- Reviews bind browser identity/workspace, service connection, session, run
|
|
68
|
+
revision, contract, snapshot, budget revision and Git identity. They are
|
|
69
|
+
one-use and expire after five minutes. Account exclusion plus run CAS protects
|
|
70
|
+
acceptance; continuation rechecks admission after host preparation.
|
|
71
|
+
- Git failure, process-output truncation, oversized review, hidden files,
|
|
72
|
+
missing/changed receipts or uncertain effects fail closed. The diff is plain
|
|
73
|
+
escaped text with host-path/secret redaction. Redacted or truncated review
|
|
74
|
+
content disables acceptance. No arbitrary file-reading route
|
|
75
|
+
or generic browser command dispatcher is added.
|
|
76
|
+
- The existing public projection reducer ignores duplicate/older snapshots,
|
|
77
|
+
rejects changed epochs/scopes and requests refresh for conflicts. Task reads
|
|
78
|
+
are sequential and cancelled on selection changes. Existing activity cursor
|
|
79
|
+
expiry recovery is retained; no activity event grants mutation authority.
|
|
80
|
+
- Ordinary chat remains available in ordinary sessions. Once task authority is
|
|
81
|
+
retained, `run.start` cannot bypass task continuation/accounting. Older hosts
|
|
82
|
+
without negotiated controls show an unsupported state.
|
|
83
|
+
|
|
84
|
+
## Offline acceptance and reproducibility
|
|
85
|
+
|
|
86
|
+
The frozen HU75 greeting fixture remains SHA256
|
|
87
|
+
`473a9e2144b0042b1b46ef54f915de693045df89d6175bde42a3393d2b083263`.
|
|
88
|
+
`packages/web/scripts/task-browser-journey.mjs` drives actual packaged Code and
|
|
89
|
+
Chromium at desktop/mobile sizes. Its preload replaces provider fetch with a
|
|
90
|
+
synthetic transport and blocks every other fetch; it does not fabricate SDK
|
|
91
|
+
state, tool receipts or check outcomes. `node check.mjs` and exact approvals run
|
|
92
|
+
through the real host/service/engine. This is automated operator input, not a
|
|
93
|
+
human pilot or semantic-quality measurement.
|
|
94
|
+
|
|
95
|
+
The integrated installed runner binds clean source, exact Harness/Code tarball
|
|
96
|
+
hashes and their shared installed engine. It runs the existing recovery/projection
|
|
97
|
+
consumers plus the Code UI journey, then verifies hashes and cleanup. Preserve
|
|
98
|
+
all initial failures separately; only final reports for the exact reviewed SHA
|
|
99
|
+
certify that candidate. Browser fixtures cover normal acceptance, multiple tabs,
|
|
100
|
+
obsolete review, edit/back/Escape, explicit continuation/double click, workspace
|
|
101
|
+
switch, unknown usage on cancellation, reload and process restart. Existing Web
|
|
102
|
+
security/browser gates and projection reducer tests cover host/CSRF/path boundaries,
|
|
103
|
+
expired cursors, stale epochs, reordered/duplicate pages and unavailable evidence.
|
|
104
|
+
|
|
105
|
+
Run the source suites and existing browser regression before the installed runner:
|
|
106
|
+
|
|
107
|
+
```sh
|
|
108
|
+
node scripts/code-task-ui-installed.mjs /absolute/harness.tgz /absolute/code.tgz /absolute/node /absolute/evidence
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
The runner requires a clean source checkout and uses an explicit exact candidate
|
|
112
|
+
engine override in its isolated npm consumer; published pins remain unchanged.
|
|
113
|
+
Use `CI=1`, `umask 022` and the repository-required test policy root. Human minutes,
|
|
114
|
+
real quality, real costs and external-team outcomes remain unmeasured. A real
|
|
115
|
+
3–5-team pilot and any paid provider campaign need separate authorization; this
|
|
116
|
+
change does not authorize HU74, a release or promotion to latest.
|
|
@@ -451,3 +451,62 @@ unchanged; the model must issue a corrected request, and edits still require
|
|
|
451
451
|
current read evidence and approval.
|
|
452
452
|
|
|
453
453
|
Project memory is a separate kind of explicit operator context in the existing durable memory table. It is projected per request as untrusted data, with revision-based review and hard byte/entry budgets. It does not become project instructions or skills. See [Project memory](PROJECT_MEMORY.md).
|
|
454
|
+
|
|
455
|
+
### Semantic compaction with bounded subagents
|
|
456
|
+
|
|
457
|
+
When semantic compaction and subagents are enabled without a shared budget
|
|
458
|
+
coordinator, Harness uses serial tool execution. This follows the SDK's supported
|
|
459
|
+
combination and retains its rejection of paid compaction with uncoordinated
|
|
460
|
+
parallel children. Callers cannot enable that incompatible combination by setting
|
|
461
|
+
`toolExecution.parallel` alone. Other runs retain their existing scheduling.
|
|
462
|
+
|
|
463
|
+
Applications can opt in to a shared token pool through the Beta
|
|
464
|
+
`HarnessRunOptions.sharedBudget` option:
|
|
465
|
+
|
|
466
|
+
```ts
|
|
467
|
+
const result = await runHarness(harness, {
|
|
468
|
+
runId: "bounded-inspection-42",
|
|
469
|
+
prompt: "Inspect and review the API boundary."
|
|
470
|
+
}, {
|
|
471
|
+
sharedBudget: {
|
|
472
|
+
modelReservation: {
|
|
473
|
+
inputTokens: 20000, outputTokens: 1000, totalTokens: 21000
|
|
474
|
+
},
|
|
475
|
+
childModelReservation: {
|
|
476
|
+
inputTokens: 10000, outputTokens: 1000, totalTokens: 11000
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
});
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
These example reservations are host-owned conservative bounds for each request,
|
|
483
|
+
not recommended limits for every model or task. Choose them for the admitted
|
|
484
|
+
route and context. The SDK coordinator reuses the configured parent input,
|
|
485
|
+
output and total ceilings, atomically admitting primary calls, child lifetime
|
|
486
|
+
allocations and auxiliary compaction. Each child has an SDK subpool inside its
|
|
487
|
+
parent allocation. There is no second Harness token ledger. A child allocation
|
|
488
|
+
that cannot fit fails before its model dispatch; unused or unknown consumption
|
|
489
|
+
is not converted into a fresh allowance. An individual model request is capped
|
|
490
|
+
at the reserved output, and an estimated input request above its reservation is
|
|
491
|
+
rejected before transport. The estimator is not a provider tokenizer or a billing
|
|
492
|
+
guarantee; actual over-reservation receipts are recorded and rejected by the SDK
|
|
493
|
+
before tool execution. Unknown receipts keep their allocation held.
|
|
494
|
+
|
|
495
|
+
Child allocations must satisfy the SDK's component-sum contract. Under the
|
|
496
|
+
existing default child ceilings (30000 input, 8000 output, 36000 total), shared
|
|
497
|
+
execution narrows the input allocation to 28000. It preserves the 36000 total
|
|
498
|
+
and 8000 output authorization; it never increases the total to 38000. The narrowed
|
|
499
|
+
budget is visible in the child runtime manifest. Legacy execution retains its
|
|
500
|
+
configured child ceilings.
|
|
501
|
+
|
|
502
|
+
The option requires finite token limits and uses the Harness scope. A resumed
|
|
503
|
+
run must use its original reservation policy and complete SDK budget ledger;
|
|
504
|
+
changing the policy, opting an existing legacy run into a fresh pool or restoring
|
|
505
|
+
only a run snapshot fails closed. Supply the same option on approval resumes.
|
|
506
|
+
The SDK also prevents resuming a bound run without its coordinator. Unknown
|
|
507
|
+
compaction or reservation consumption still requires operational reconciliation;
|
|
508
|
+
this tranche does not add a reconciliation API or clear reservations automatically.
|
|
509
|
+
Qwen routes are excluded from this option until an output-cap route is certified.
|
|
510
|
+
It does not add a service/wire-protocol field or enable this token pool for
|
|
511
|
+
application-owned review groups. Monetary accounting and its existing output
|
|
512
|
+
clamp remain separate. No provider calls are required by the regression suite.
|
package/docs/CREDENTIALS.md
CHANGED
|
@@ -68,6 +68,27 @@ the console offers to use the saved destination for this session or cancel. It n
|
|
|
68
68
|
sends a managed key to an arbitrary shell-defined endpoint. Custom endpoints still
|
|
69
69
|
require explicit environment credentials.
|
|
70
70
|
|
|
71
|
+
## Amazon Bedrock
|
|
72
|
+
|
|
73
|
+
Converse does not store an API key. Set `AWS_REGION` or `AWS_DEFAULT_REGION` in
|
|
74
|
+
the launching environment and leave credentials to the AWS SDK default chain.
|
|
75
|
+
`AWS_PROFILE` selects a profile through that chain. The credentials screen
|
|
76
|
+
explains this and does not write a key.
|
|
77
|
+
|
|
78
|
+
`BEDROCK_RUNTIME=openai` requires an https `BEDROCK_OPENAI_BASE_URL`. The key
|
|
79
|
+
may be `BEDROCK_API_KEY` or `AWS_BEARER_TOKEN_BEDROCK` in the environment, or a
|
|
80
|
+
keychain/temporary `BEDROCK_API_KEY`. The base URL is not an override that
|
|
81
|
+
blocks a managed key. See [Bedrock](BEDROCK.md).
|
|
82
|
+
|
|
83
|
+
## Azure OpenAI
|
|
84
|
+
|
|
85
|
+
Set an https `AZURE_OPENAI_ENDPOINT` before saving a key. Optional
|
|
86
|
+
`AZURE_OPENAI_API_VERSION` and `AZURE_OPENAI_DEPLOYMENTS` stay in the
|
|
87
|
+
environment and are not written to the keychain. A managed
|
|
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
|
|
90
|
+
stores and sends the API key. See [Azure OpenAI](AZURE_OPENAI.md).
|
|
91
|
+
|
|
71
92
|
## Qwen interactive setup
|
|
72
93
|
|
|
73
94
|
Open `/credentials` → Qwen → save or temporary → Standard API or QwenCloud Token
|
|
@@ -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
|
|
73
|
+
The current source pins Core 1.34.0 and Agents 1.11.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
|
|
@@ -277,3 +277,95 @@ approvals, and provider per-request limits remain enforced. Stored numeric token
|
|
|
277
277
|
ceilings are inactive until `unlimitedTokens` is set back to `false`.
|
|
278
278
|
|
|
279
279
|
Next-version [project memory](PROJECT_MEMORY.md) reuses the existing SDK memory table and state export records. Historical state is not harvested into curated memory. Forget/clear remove current memory content, while backups, run histories and SQLite WAL retention remain separate. Older importers reject the new reserved memory key safely.
|
|
280
|
+
|
|
281
|
+
## Durable review groups (Beta)
|
|
282
|
+
|
|
283
|
+
`runHarnessReviewGroup` retains its ephemeral v1 contract. Applications can opt in
|
|
284
|
+
through `runHarnessDurableReviewGroup(harness, { groupId, prompt })`. The new API
|
|
285
|
+
uses the Harness scope, an application-owned root and a fixed roster of at most
|
|
286
|
+
two read-only explorer/reviewer members. This first implementation schedules
|
|
287
|
+
members serially. It requires a store with atomic idempotency claims, CAS saves
|
|
288
|
+
and fenced acquire/renew/release leases; the default SQLite backend supports them.
|
|
289
|
+
Custom stores must honor these contracts. No database schema migration is needed.
|
|
290
|
+
|
|
291
|
+
```ts
|
|
292
|
+
import {
|
|
293
|
+
runHarnessDurableReviewGroup,
|
|
294
|
+
inspectHarnessReviewGroup,
|
|
295
|
+
cancelHarnessReviewGroup
|
|
296
|
+
} from "@zhivex-ai/harness";
|
|
297
|
+
|
|
298
|
+
const result = await runHarnessDurableReviewGroup(harness, {
|
|
299
|
+
groupId: "review-request-42",
|
|
300
|
+
prompt: "Inspect the public API boundary."
|
|
301
|
+
});
|
|
302
|
+
const snapshot = await inspectHarnessReviewGroup(harness, result.groupId);
|
|
303
|
+
// Cancellation can be requested from another worker using the same scope/store.
|
|
304
|
+
const cancellation = await cancelHarnessReviewGroup(harness, result.groupId);
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
A repeated ID must have the same prompt, ordered profiles, scope and member
|
|
308
|
+
runtime bindings. A mismatch fails before a model request. Completed members
|
|
309
|
+
replay their durable receipts; an interrupted group resumes the original member
|
|
310
|
+
IDs. A concurrent caller receives a retryable state conflict while the group
|
|
311
|
+
worker lease is held. After a worker dies, wait for lease expiry before retrying.
|
|
312
|
+
Inspection reconstructs results without executing a member. Keep the complete
|
|
313
|
+
state store when backing up or restoring; deleting a root or member is not a
|
|
314
|
+
supported way to reset a request.
|
|
315
|
+
|
|
316
|
+
Execution statuses include `blocked`, `partial`, `waiting_approval`, `suspended`,
|
|
317
|
+
`timed_out`, `cancel_requested` and `cancelled`. `partial` means all members are
|
|
318
|
+
terminal and some completed while others did not. Completion describes execution;
|
|
319
|
+
existing evidence and acceptance contracts still determine acceptance. The root
|
|
320
|
+
is visible to ordinary run inspection; its SDK status maps `partial` to `failed`,
|
|
321
|
+
and `blocked` maps to `suspended`, with the richer value in `harnessReviewGroupStatusV1`. Use group inspection for
|
|
322
|
+
the full result. Approvals are not automatically resumed by this API.
|
|
323
|
+
|
|
324
|
+
Cancellation records intention under the same fenced root lease used for fresh
|
|
325
|
+
member admission. Each admission is recorded before claiming a child checkpoint.
|
|
326
|
+
Subsequent model requests also check the root before dispatch. Already admitted
|
|
327
|
+
requests can finish late; cancellation does not roll back an external effect.
|
|
328
|
+
Terminal children are preserved, and active children receive durable cancellation
|
|
329
|
+
requests. Inactive queued, approval or suspended checkpoints become cancelled.
|
|
330
|
+
Once the group worker sees an in-flight member return, a child left at
|
|
331
|
+
`cancel_requested` is settled to `cancelled` before the root snapshot is saved.
|
|
332
|
+
Inspection while that request is still in flight stays `cancel_requested`.
|
|
333
|
+
Confirmation requires every admitted child to have a terminal checkpoint. A cut
|
|
334
|
+
between recorded admission and child persistence remains `cancel_requested`
|
|
335
|
+
because the claim is uncertain; this tranche does not provide an automatic
|
|
336
|
+
reconciliation API for that cut. Repeated cancellation rechecks the fixed roster.
|
|
337
|
+
|
|
338
|
+
Generic cancellation of the root also closes group admission, but callers should
|
|
339
|
+
use the group cancellation API to preserve terminal member receipts; the SDK
|
|
340
|
+
's generic tree-cancellation semantics are unchanged.
|
|
341
|
+
|
|
342
|
+
This fence applies to the opt-in application-owned review group. It does not fix
|
|
343
|
+
the SDK's general parent/subagent admission and cancellation primitives. No
|
|
344
|
+
exactly-once guarantee for external effects, distributed scheduling or research
|
|
345
|
+
workflow acceptance is implied. Model tests use only offline mocks. Regressions
|
|
346
|
+
in `tests/durable-review-group.test.ts` cover repeated identity, interruption,
|
|
347
|
+
terminal preservation, concurrent callers and separate-process SQLite control.
|
|
348
|
+
|
|
349
|
+
Terminal replay reconciles the root's persisted status, member summaries and richer
|
|
350
|
+
group status before returning, including recovery after a cut following child
|
|
351
|
+
completion. Cancellation also reconciles its reconstructed projection. Internal
|
|
352
|
+
worker checkpoints are children of the group: they become `running` while leased,
|
|
353
|
+
`suspended` after an interrupted or blocked attempt, and terminal only after the
|
|
354
|
+
root's terminal projection is persisted. Recovery repairs an idle legacy worker
|
|
355
|
+
without taking ownership from a live worker. Default terminal cleanup can collect
|
|
356
|
+
finished groups and their workers; suspended coordination remains resumable.
|
|
357
|
+
|
|
358
|
+
New member records include an optional `checkpointed` marker, saved after the SDK
|
|
359
|
+
child claim and before request dispatch. If a previously persisted child disappears,
|
|
360
|
+
recovery blocks before transport and requires the complete backup. Existing records
|
|
361
|
+
without that marker remain readable; admitted members with missing receipts are
|
|
362
|
+
conservatively blocked. Admission and model dispatch also recheck receipt presence
|
|
363
|
+
under the root lock, so a stale caller snapshot cannot bypass the guard. Cleanup
|
|
364
|
+
while a group is active can remove an older terminal child's receipt and leave the
|
|
365
|
+
group blocked; it must not be used to reset or restart that child. Cancellation may
|
|
366
|
+
remain uncertain in this case. Retention deleting the entire group expires its
|
|
367
|
+
stored identity; no permanent deduplication beyond retained state is promised.
|
|
368
|
+
|
|
369
|
+
Groups modified by the checkpoint-marker fix require a current artifact. Older
|
|
370
|
+
artifacts with strict pre-marker schemas cannot read the additional marker;
|
|
371
|
+
downgrades require restoring a complete pre-upgrade backup.
|
package/docs/ENGINE_API.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Engine API and Code integration
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
Harness 1.
|
|
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.
|
|
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.
|
|
@@ -18,6 +18,7 @@ expect the new entrypoints to exist.
|
|
|
18
18
|
| `@zhivex-ai/harness/code-support` | Named host helpers used by Code, including a read-only SQLite diagnostic projection | Node |
|
|
19
19
|
| `@zhivex-ai/harness/models` | Beta catalog schemas, bundled metadata, model selection and display helpers; no host loading | Browser or Node |
|
|
20
20
|
| `@zhivex-ai/harness/mcp/stdio/v1` | Experimental host admission, isolated MCP sessions, recovery and reconciliation; see [host flow](MCP_STDIO.md) | Node or Bun |
|
|
21
|
+
| `@zhivex-ai/harness/audit` | Experimental audit pack export and HMAC verification; see [audit pack](AUDIT_PACK.md) | Node |
|
|
21
22
|
| `@zhivex-ai/harness/desktop/v1/state` | Versioned host-only snapshot, validation, safe-file-read and lease handoff operations for Desktop updates | Node |
|
|
22
23
|
|
|
23
24
|
[`contracts/engine-api.json`](../contracts/engine-api.json) enumerates every named
|
|
@@ -208,6 +209,8 @@ Publishing Code requires a compatible Harness release, authenticated scope/name
|
|
|
208
209
|
verification and the release compatibility gates in
|
|
209
210
|
[ADR 0001](https://github.com/Zhivex/zhivex-harness/blob/main/docs/adr/0001-harness-code-public-boundary.md).
|
|
210
211
|
Local packing does not establish npm permissions or public availability.
|
|
212
|
+
The additive [task projection v1](CLIENT_PROTOCOL.md#task-projection-v1-har-hu-73) exposes existing task evidence through the client/service without moving execution or judgment into a renderer. `/protocol` exports its bounded schema and pure snapshot reducer.
|
|
213
|
+
|
|
211
214
|
## Experimental task acceptance contracts
|
|
212
215
|
|
|
213
216
|
`runHarness(host, input, { taskAcceptance })` accepts application-owned requirements
|
package/docs/EXTENSIBILITY.md
CHANGED
|
@@ -4,11 +4,11 @@ Zhivex Harness `0.11.x` combines governed external tools and bounded multi-agent
|
|
|
4
4
|
|
|
5
5
|
## Provider registry
|
|
6
6
|
|
|
7
|
-
Built-in registrations are Meta, Qwen, OpenAI, and
|
|
7
|
+
Built-in registrations are Meta, Qwen, OpenAI, Gemini, Anthropic, Vertex, Amazon Bedrock, and Azure OpenAI. Bedrock and Azure OpenAI are provisional and are not part of the default live certification cohort. Each registration owns its descriptor, default model, credential names, capability/support labels, factory, and declarative diagnostics. The registry never dynamically imports provider code or returns credential/endpoint values from diagnostics.
|
|
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.
|
|
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.
|
|
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
|
|
|
@@ -81,14 +81,18 @@ Library callers can inject a custom `McpClient`. Trusted read-only annotations a
|
|
|
81
81
|
|
|
82
82
|
## MCP result boundary
|
|
83
83
|
|
|
84
|
-
MCP descriptions and results are untrusted. The harness:
|
|
84
|
+
MCP descriptions and results are untrusted data, including text that looks like an identifier, digest, or configuration value. The harness:
|
|
85
85
|
|
|
86
86
|
- bounds discovery pages, discovered tools, time, and response bytes;
|
|
87
87
|
- validates declared input and structured-output schemas through the SDK MCP registry;
|
|
88
88
|
- propagates abort signals, timeout intent, and idempotency keys;
|
|
89
89
|
- rejects common prompt-injection directives before they enter model context;
|
|
90
90
|
- records server permissions and risk in tool metadata;
|
|
91
|
-
- promotes network, write, or external-side-effect calls to durable interrupt approval
|
|
91
|
+
- promotes network, write, or external-side-effect calls to durable interrupt approval;
|
|
92
|
+
- removes exact secret values before a result is published;
|
|
93
|
+
- when a server was admitted with secret references, flags known encodings of those secrets and other high-entropy encoded tokens in tool results.
|
|
94
|
+
|
|
95
|
+
That flagging is optional and incomplete. Split, encrypted, or low-entropy encodings can still appear. Discovery schemas are rejected rather than rewritten when they contain an exact secret. Treat every MCP result as data, not as instructions and not as proof that a credential is absent.
|
|
92
96
|
|
|
93
97
|
The injection filter is deliberately conservative and may reject legitimate security documentation containing imperative attack text. Use a separate trusted preprocessing boundary if that content must be analyzed; do not disable the harness boundary for an untrusted server.
|
|
94
98
|
|
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.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.
|
|
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.5.0
|
|
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.5.0
|
|
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.5.0 --version
|
|
93
|
+
bunx @zhivex-ai/harness@1.5.0 --help
|
|
94
|
+
bunx @zhivex-ai/harness@1.5.0 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,10 +52,10 @@ 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.
|
|
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
57
|
| Built-in Gemini (`@zhivex-ai/gemini` 0.13.0) | Supported | `generationConfig.maxOutputTokens`; `maxRetries=0` |
|
|
58
|
-
| Built-in Vertex (`@zhivex-ai/vertex` 1.2.
|
|
58
|
+
| Built-in Vertex (`@zhivex-ai/vertex` 1.2.7) | Supported | `generationConfig.maxOutputTokens`; real ADC callback, synthetic credential source in tests; `maxRetries=0` |
|
|
59
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` |
|
|
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 |
|
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` or `zhivex-code` with Harness 1.
|
|
10
|
+
Use `zhx` or `zhivex-code` with Harness 1.5.0 (Code 0.4.0), pending publication. 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/PUBLIC_SECURITY.md
CHANGED
|
@@ -13,7 +13,9 @@ The repository is public. GitHub documents the following controls as available w
|
|
|
13
13
|
- CodeQL code scanning on standard GitHub-hosted runners; and
|
|
14
14
|
- standard GitHub-hosted Actions runners.
|
|
15
15
|
|
|
16
|
-
The repository additionally uses a `main` ruleset with pull-request review, review-thread resolution, linear history, and required CI checks. Repository Actions default to read-only permissions; individual jobs must request any narrower write capability explicitly.
|
|
16
|
+
The repository additionally uses a `main` ruleset with pull-request review, review-thread resolution, linear history, and required CI checks. Repository Actions default to read-only permissions; individual jobs must request any narrower write capability explicitly. CI lints `.github/workflows` with actionlint 1.7.12 and shellcheck. The checksum and the shellcheck exceptions for quoted node/bun programs are pinned in `.github/workflows/ci.yml`.
|
|
17
|
+
|
|
18
|
+
Harness release, Code release, and live certification each call `.github/workflows/resolve-protected-release-ref.yml` from a job with empty permissions and no secrets. The call uses a relative `./` path, so GitHub loads that file from the same commit as the dispatched workflow. An off-main tag or branch can rewrite the resolver or omit the call. The resolver is defense in depth, not the trust boundary. The boundary is external: the `npm` and `live-certification` environments accept deployments only from the selected tag patterns below, and a tag ruleset lets only maintainers create matching tags and blocks updates and deletions. When the dispatched workflow still contains the resolver, it requires `GITHUB_REF` to be exactly `refs/tags/<tag>` for both Harness and Code. It then accepts only an annotated `vX.Y.Z`, `vX.Y.Z-rc.N`, `code-vX.Y.Z`, or `code-vX.Y.Z-rc.N` tag, peels it to a full commit SHA, and continues only when that commit is the workflow commit and an ancestor of `main`. Later jobs check out that SHA. `id-token: write` is requested only on those later jobs: Harness and Code publication on the `npm` environment, Code provenance generation, and Vertex workload identity on the `live-certification` environment. The environment still withholds that token unless the workflow ref is an allowed deployment tag. npm provenance, the Rekor HTTP 409 reuse for an identical DSSE entry, and the registry verification step are unchanged. Pinning `uses:` to a commit SHA in this repository or in another repository does not replace the environment rules or the tag ruleset: the workflow file selected by the dispatched ref still chooses the `uses:` value and can delete the call.
|
|
17
19
|
|
|
18
20
|
References:
|
|
19
21
|
|
|
@@ -37,3 +39,14 @@ If the repository becomes private or internal, treat every security feature and
|
|
|
37
39
|
The `live-certification` GitHub environment is the only workflow scope authorized to hold provider credentials. Whether credentials are currently configured is mutable repository state and is intentionally not asserted by this document; maintainers must verify it at dispatch time. Adding or rotating credentials transfers sensitive provider keys into GitHub and requires an explicit maintainer decision.
|
|
38
40
|
|
|
39
41
|
The release workflow fails closed when those credentials are absent: npm publication depends on the base, orchestration, routing, and model-directed OCI live gates running against the exact annotated release tag and source commit. When credentials are configured, they are exposed only to the final provider-call step; checkout, runtime setup, dependency installation, tag verification, and deterministic OCI validation do not receive them. Local credentials are never copied to GitHub automatically.
|
|
42
|
+
|
|
43
|
+
## Environment protection to confirm manually
|
|
44
|
+
|
|
45
|
+
The workflow file cannot create GitHub environment rules or rulesets. Before the next npm publication or live certification, set these repository settings. They are the trust boundary.
|
|
46
|
+
|
|
47
|
+
- `npm`: required reviewers. Deployment branches and tags must be **Selected tags** with patterns `v*` and `code-v*` only. Do not include `main`, all branches, or any other pattern. This environment remains the Trusted Publishing environment for `release.yml` and `release-code.yml`.
|
|
48
|
+
- `live-certification`: required reviewers. Deployment branches and tags must be **Selected tags** with pattern `v*` only. Do not include `main`, any branch, or `code-v*`. Provider secrets and Vertex variables stay in this environment.
|
|
49
|
+
- Tag ruleset for patterns `v*` and `code-v*`: enable **Restrict creations**, **Restrict updates**, and **Restrict deletions**. Put only the Maintain role on the bypass list, so only maintainers can create matching tags and nobody can update or delete them. Repository admins can still bypass a ruleset unless the organization disables bypass; do not add a broader bypass list.
|
|
50
|
+
- Dispatch Harness release, Code release, and live certification from the exact tag ref (`refs/tags/vX.Y.Z`, `refs/tags/vX.Y.Z-rc.N`, `refs/tags/code-vX.Y.Z`, or `refs/tags/code-vX.Y.Z-rc.N`). A dispatch from `main` or any other ref is not a deployment tag, so these environments do not grant secrets or `id-token: write`. The resolver rejects that ref as well when the dispatched workflow still contains the check, including when the branch commit equals the tag.
|
|
51
|
+
- Approve a deployment only after the resolve job log shows `resolved <tag> to <sha>` and that SHA equals the workflow commit (`github.sha`).
|
|
52
|
+
- Environment patterns are coarse `fnmatch` globs. The resolver's regular expression is stricter, but it runs only when the workflow file on the dispatched ref still calls it. A ref the ruleset and the environment exclude never receives secrets or `id-token: write`, even if its workflow omits the resolver.
|
package/docs/README.md
CHANGED
|
@@ -9,6 +9,8 @@ Start with [First use](FIRST_USE.md). You only need `zhx` for everyday conversat
|
|
|
9
9
|
- [Usage reference](USAGE.md): scripts, providers and security boundaries.
|
|
10
10
|
- [Model catalog administration](MODEL_CATALOG.md): shared CLI/Desktop recommendations and remote distribution.
|
|
11
11
|
- [Anthropic direct API](ANTHROPIC.md): provisional setup and continuity contract.
|
|
12
|
+
- [Amazon Bedrock](BEDROCK.md): provisional Converse and OpenAI-compatible routes.
|
|
13
|
+
- [Azure OpenAI](AZURE_OPENAI.md): provisional endpoint, deployment, and API-key route.
|
|
12
14
|
- [Credentials](CREDENTIALS.md): system keychain, temporary keys and automation.
|
|
13
15
|
- [Project instructions and context](CONTEXT_ENGINEERING.md).
|
|
14
16
|
- [Execution environments](EXECUTION_ENVIRONMENTS.md): isolated command execution.
|
|
@@ -23,9 +25,12 @@ Start with [First use](FIRST_USE.md). You only need `zhx` for everyday conversat
|
|
|
23
25
|
- [CLI reference](CLI.md): command options, JSON/JSONL and exit codes.
|
|
24
26
|
- [Extensibility](EXTENSIBILITY.md): providers, MCP, routing and subagents.
|
|
25
27
|
- [API stability](STABILITY.md) and [deprecations](DEPRECATIONS.md).
|
|
26
|
-
- [Local service](LOCAL_SERVICE.md) and [client protocol](CLIENT_PROTOCOL.md).
|
|
28
|
+
- [Local service](LOCAL_SERVICE.md) and [client protocol](CLIENT_PROTOCOL.md), including the experimental [task evidence read](CLIENT_PROTOCOL.md#task-projection-v1-har-hu-73).
|
|
29
|
+
- [Code web tasks](CODE_WEB_TASKS.md): operator review and explicit snapshot acceptance before continuation.
|
|
30
|
+
- [Installed recovery laboratory](https://github.com/Zhivex/zhivex-harness/blob/main/docs/TASK_RECOVERY_LAB.md): contributor fixtures for the evidence read. The laboratory guide stays in the repository and is not part of the published package.
|
|
27
31
|
- [Experimental ACP text sessions](ACP.md) and [workspace checkpoint restoration](WORKSPACE_CHECKPOINTS.md).
|
|
28
32
|
- [Durable operations](DURABLE_OPERATIONS.md), [repository editing](REPOSITORY_EDITING.md) and [change envelopes](CHANGE_ENVELOPES.md).
|
|
33
|
+
- [Audit pack](AUDIT_PACK.md): experimental signed export of one run or guided task.
|
|
29
34
|
- [Threat model](THREAT_MODEL.md) and [public repository security](PUBLIC_SECURITY.md).
|
|
30
35
|
|
|
31
36
|
## Contribute and maintain
|
|
@@ -72,7 +72,7 @@ The terminal prints the complete `apply_patch` approval arguments rather than tr
|
|
|
72
72
|
|
|
73
73
|
`quarantine_file` requires the current digest and moves the file into harness-owned state. The result includes a `quarantineId` used for recovery. The model has no permanent-delete tool.
|
|
74
74
|
|
|
75
|
-
`restore_file`
|
|
75
|
+
`restore_file` requires a quarantine identifier, the destination path, and the expected digest of the quarantined bytes. It does not fall back to the original path or restore bytes the operator did not pin. Restore is conflict-safe: it never overwrites an existing destination. The approval preview shows that destination and the quarantined text for the pinned digest. A successful restore is recorded independently from the quarantine operation.
|
|
76
76
|
|
|
77
77
|
Quarantine is a recovery boundary, not a backup system. Retention and permanent cleanup remain operator responsibilities. Do not manually edit quarantine manifests or payloads while a run is active.
|
|
78
78
|
|
package/docs/STABILITY.md
CHANGED
|
@@ -18,6 +18,8 @@ Beta APIs may change in a minor with changelog and migration guidance. Experimen
|
|
|
18
18
|
|
|
19
19
|
The host-only `/mcp/stdio/v1` entry point and `CreateHarnessOptions.isolatedMcpSession` option are experimental additive capabilities. Workspace MCP configuration does not enable stdio; see [host admission and lifecycle](MCP_STDIO.md).
|
|
20
20
|
|
|
21
|
-
The semantic compactor, compaction recommendations, declarative tool policy (including `toolPolicyFile` and `--tool-policy`), progress monitor, ACP text-session adapter,
|
|
21
|
+
The semantic compactor, compaction recommendations, declarative tool policy (including `toolPolicyFile` and `--tool-policy`), progress monitor, ACP text-session adapter, workspace checkpoint restoration APIs, and the `@zhivex-ai/harness/audit` subpath are experimental. `export-audit` and `verify-audit` are additive CLI commands. Their `--out` and `--signing-key-file` flags stay outside `CLI_OPTION_NAMES` and `CLI_COMMAND_OPTION_CONTRACTS`, so the stable option tuple and command-option declaration do not change. See [audit pack](AUDIT_PACK.md). ACP implements the documented text-session subset; it does not claim full editor interoperability. Deterministic compaction and the existing client protocol remain available. See [tool policy semantics](TOOL_POLICY.md), [ACP limitations](ACP.md), [context behavior](CONTEXT_ENGINEERING.md), and [checkpoint constraints](WORKSPACE_CHECKPOINTS.md).
|
|
22
|
+
|
|
23
|
+
Task evidence reads (`task.get`, capability `task.projection.v1`) and operator task controls (`task.start`, `task.review`, `task.keep`, `task.revise`, `task.continue`, capability `task.control.v1`) are experimental additions on client protocol major 1. They do not change protocol version 1, existing command meanings, or the stable declaration signature baseline. The browser-safe projection schema and reducer are experimental exports of the existing `/protocol` entry. See [task projection](CLIENT_PROTOCOL.md#task-projection-v1-har-hu-73) and [task controls](CLIENT_PROTOCOL.md#task-controls-code-hu-05-experimental).
|
|
22
24
|
|
|
23
25
|
Before `1.0.0-rc.1`, maintainers classified every current runtime and type export as stable, beta, or experimental. The gate rejects unreviewed additions, removals, omissions, and membership in more than one tier so future stability changes remain deliberate. Root aliases remain available during 1.x; any future beta subpath must be additive until the next major release.
|
package/docs/SUPPORT_MATRIX.md
CHANGED
|
@@ -10,7 +10,7 @@ The machine-readable source is [`support-matrix.json`](./support-matrix.json). `
|
|
|
10
10
|
| OCI | Docker on Linux | — | Podman | managed remote sandbox |
|
|
11
11
|
| Target package manager | npm | Bun | pnpm, Yarn | — |
|
|
12
12
|
| MCP | bounded Streamable HTTP | — | broader remote implementations | stdio |
|
|
13
|
-
| Provider | Meta `muse-spark-1.
|
|
13
|
+
| Provider | Meta `muse-spark-1.3-contributor`, Qwen `qwen3.8-flash`, OpenAI `gpt-6-luna` | — | Gemini, Anthropic, Vertex (ADC), Amazon Bedrock, Azure OpenAI | undocumented providers |
|
|
14
14
|
|
|
15
15
|
Provider evidence is release-, account-, endpoint-, model-, and date-bound. A provider is supported for a release only when the exact candidate passes base, orchestration, routing, and model-directed execution gates. The table does not imply upstream feature parity.
|
|
16
16
|
|
|
@@ -10,7 +10,7 @@ The machine-readable source is [`support-matrix-1.1.json`](./support-matrix-1.1.
|
|
|
10
10
|
| OCI | Docker on Linux | — | Podman | managed remote sandbox |
|
|
11
11
|
| Target package manager | npm | Bun | pnpm, Yarn | — |
|
|
12
12
|
| MCP | bounded Streamable HTTP | — | broader remote implementations | stdio |
|
|
13
|
-
| Provider | Meta `muse-spark-1.3`, Qwen `qwen3.8-max`, OpenAI `gpt-6-luna` | — | Gemini | undocumented providers |
|
|
13
|
+
| Provider | Meta `muse-spark-1.3`, Qwen `qwen3.8-max`, OpenAI `gpt-6-luna` | — | Gemini, Amazon Bedrock, Azure OpenAI | undocumented providers |
|
|
14
14
|
|
|
15
15
|
Provider evidence is release-, account-, endpoint-, model-, and date-bound. A provider is supported for a release only when the exact candidate passes base, orchestration, routing, and model-directed execution gates. The table does not imply upstream feature parity.
|
|
16
16
|
|
package/docs/TOOL_POLICY.md
CHANGED
|
@@ -62,7 +62,10 @@ channels without compatible review evidence receive EXPLICIT_REVIEW_REQUIRED and
|
|
|
62
62
|
leave the operation pending. The local CLI in ask mode displays a complete bounded
|
|
63
63
|
payload and issues host evidence after explicit confirmation, without cached session
|
|
64
64
|
grants. With this policy, `resume --approve` also requires interactive review;
|
|
65
|
-
noninteractive invocation remains pending.
|
|
65
|
+
noninteractive invocation remains pending. `zhivex-code web --tool-policy` applies that file only when a single
|
|
66
|
+
`--workspace` is set. More than one workspace with a shared policy is a usage
|
|
67
|
+
error, so projects cannot inherit each other's approvals. `zhivex-code project add
|
|
68
|
+
--tool-policy <path>` records a policy for that folder alone. Desktop accepts the operator-owned
|
|
66
69
|
policy through its `--tool-policy` startup argument. Its main process consumes a
|
|
67
70
|
bounded, expiring review ticket and sends the exact decision to the runtime through
|
|
68
71
|
their private process channel. The renderer cannot issue review evidence, and the
|
package/docs/USAGE.md
CHANGED
|
@@ -149,8 +149,10 @@ zhivex-harness run --execution oci --oci-shell ask "use a reviewed shell pipelin
|
|
|
149
149
|
| Qwen | `qwen3.8-max` | `DASHSCOPE_API_KEY` or `QWEN_API_KEY` · RC.10 default; fresh release-bound certification pending. |
|
|
150
150
|
| OpenAI | `gpt-6-luna` | `OPENAI_API_KEY` · new default; fresh release-bound certification required |
|
|
151
151
|
| Gemini | `gemini-3.6-flash` | `GEMINI_API_KEY` or `GOOGLE_GENERATIVE_AI_API_KEY` · provisional until the harness live matrix passes |
|
|
152
|
+
| Amazon Bedrock | `anthropic.claude-haiku-5-5` | AWS credential chain plus `AWS_REGION` or `AWS_DEFAULT_REGION` · provisional; `BEDROCK_RUNTIME=openai` is a separate Tier A path and is not live-certified |
|
|
153
|
+
| Azure OpenAI | `gpt-5.4` | `AZURE_OPENAI_API_KEY` and https `AZURE_OPENAI_ENDPOINT` · provisional until the harness live matrix passes |
|
|
152
154
|
|
|
153
|
-
Override any model with `--model`. Optional provider overrides are `META_BASE_URL`, `QWEN_BASE_URL`, `QWEN_WORKSPACE_ID`, `QWEN_REGION`, `OPENAI_BASE_URL`, and `GEMINI_BASE_URL`. Non-credential transport settings are hash-bound to durable resumes without persisting their values.
|
|
155
|
+
Override any model with `--model`. Optional provider overrides are `META_BASE_URL`, `QWEN_BASE_URL`, `QWEN_WORKSPACE_ID`, `QWEN_REGION`, `OPENAI_BASE_URL`, and `GEMINI_BASE_URL`. Bedrock also reads `AWS_REGION`, `AWS_DEFAULT_REGION`, `AWS_PROFILE`, `BEDROCK_RUNTIME`, and `BEDROCK_OPENAI_BASE_URL`. Azure OpenAI also reads `AZURE_OPENAI_ENDPOINT`, `AZURE_OPENAI_API_VERSION`, and `AZURE_OPENAI_DEPLOYMENTS`. Non-credential transport settings are hash-bound to durable resumes without persisting their values.
|
|
154
156
|
|
|
155
157
|
The exact `v1.0.0` release passed protected base, delegation, routing and model-directed OCI gates for Meta, Qwen and OpenAI on 2026-09-20. The representative matrix passed 14/14 cases per provider on its authorized second attempt. Gemini remains provisional. See the [release evidence](https://github.com/Zhivex/zhivex-harness/blob/main/docs/LIVE_CERTIFICATION.md#current-public-status) for artifact identity and the preserved first-attempt failure. Controlled and official-SDK MCP interoperability are separate transport evidence. Credential detection and deterministic tests do not replace real provider certification.
|
|
156
158
|
|
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.0
|
|
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
|
|
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,9 @@
|
|
|
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
|
|
7
|
-
Provider package pins,
|
|
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.
|
|
8
|
+
Headless policies and release gates remain unchanged.
|
|
8
9
|
|
|
9
10
|
The Web header opens the approved gradual configuration modal. Next task settings
|
|
10
11
|
override project settings once, including an empty override. Project settings
|
|
@@ -21,7 +22,7 @@ Unsupported pricing tiers and unaccounted auxiliary usage make the estimate
|
|
|
21
22
|
unavailable. The price source is visible on the run. No money is reserved and this
|
|
22
23
|
is not a guaranteed financial cap.
|
|
23
24
|
|
|
24
|
-
**
|
|
25
|
+
**Notify** records a notice and lets the run continue. **Stop** requests the
|
|
25
26
|
existing active-run cancellation once, after observing the threshold. An in-flight
|
|
26
27
|
operation or final response can exceed it; completed work is not rolled back.
|
|
27
28
|
Consumption and durable effects remain recorded. Cancellation produces a cancelled
|