@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.
Files changed (128) hide show
  1. package/CHANGELOG.md +32 -10
  2. package/README.md +7 -5
  3. package/SUPPORT.md +2 -2
  4. package/contracts/client-protocol-v1.schema.json +593 -0
  5. package/contracts/engine-api.json +156 -0
  6. package/contracts/public-api.json +12 -0
  7. package/contracts/stable-api-signatures.json +36 -36
  8. package/dist/acp-cli.js +54 -20
  9. package/dist/approvals/approval-diff.d.ts +2 -1
  10. package/dist/approvals/approval-preview.d.ts +1 -1
  11. package/dist/audit/index.d.ts +3 -0
  12. package/dist/audit/index.js +482 -0
  13. package/dist/audit/pack.d.ts +72 -0
  14. package/dist/audit-pack-kvw7ng34.js +532 -0
  15. package/dist/cli/arguments.d.ts +3 -1
  16. package/dist/cli/audit-pack.d.ts +24 -0
  17. package/dist/cli/cli-credentials.d.ts +6 -0
  18. package/dist/cli/cli-profiles.d.ts +4 -2
  19. package/dist/cli/node-engine.d.ts +2 -0
  20. package/dist/cli-entry-75j3r49b.js +484 -0
  21. package/dist/cli-entry-928p8h41.js +10067 -0
  22. package/dist/cli-entry-h2yc9x37.js +10350 -0
  23. package/dist/{cli-entry-20w6nh0k.js → cli-entry-hdtfef27.js} +439 -19
  24. package/dist/{cli-entry-w0hterjs.js → cli-entry-q8bgkn9m.js} +40 -13
  25. package/dist/{cli-2h37qyvg.js → cli-vyrytn3m.js} +253 -644
  26. package/dist/cli.js +27 -2
  27. package/dist/client/json-contracts.d.ts +4 -0
  28. package/dist/client/protocol.d.ts +133 -0
  29. package/dist/client/task-control-host.d.ts +400 -0
  30. package/dist/client/task-projection-host.d.ts +12 -0
  31. package/dist/client/task-projection.d.ts +168 -0
  32. package/dist/compat/code-support.js +28 -22
  33. package/dist/{config-qt69hkqj.js → config-r9fdhce6.js} +3 -3
  34. package/dist/{config-j9624t6t.js → config-vyajmksy.js} +1 -1
  35. package/dist/engine/acp.js +15 -11
  36. package/dist/engine/client.js +14 -10
  37. package/dist/engine/desktop-providers-v1.d.ts +2 -0
  38. package/dist/engine/desktop-providers-v1.js +23 -3
  39. package/dist/engine/desktop-state-v1.js +11 -8
  40. package/dist/engine/index.d.ts +3 -0
  41. package/dist/engine/index.js +101 -554
  42. package/dist/engine/mcp-stdio-v1.js +8 -6
  43. package/dist/engine/models.js +76 -4
  44. package/dist/engine/protocol.d.ts +2 -0
  45. package/dist/engine/protocol.js +110 -0
  46. package/dist/engine/service.js +15 -11
  47. package/dist/hostile-repository-demo.js +1232 -564
  48. package/dist/{index-8zjmnyw5.js → index-1265j7t2.js} +73 -6
  49. package/dist/{index-nmjdwd4p.js → index-4gt045j0.js} +109 -1
  50. package/dist/{index-pdmevfxv.js → index-5zbq9ztj.js} +5 -259
  51. package/dist/{index-6dft2vev.js → index-63gbp0cz.js} +5 -3
  52. package/dist/index-6dxrbnxm.js +719 -0
  53. package/dist/{index-pp474137.js → index-6fp7kdpx.js} +769 -933
  54. package/dist/{index-61gthdz6.js → index-8sm2a1wa.js} +1 -1
  55. package/dist/{index-rkbf7dqg.js → index-96ezrvg2.js} +57 -13
  56. package/dist/index-bt2p8x7r.js +329 -0
  57. package/dist/index-c39197wq.js +552 -0
  58. package/dist/{index-m82cfspw.js → index-eps3c3g6.js} +877 -963
  59. package/dist/{index-s2k2edts.js → index-fqqz1yt8.js} +110 -1544
  60. package/dist/{index-m34q25jj.js → index-ggstwr0v.js} +192 -838
  61. package/dist/index-jpdvn09j.js +490 -0
  62. package/dist/{index-xqxeypt5.js → index-mzydbzp8.js} +76 -4
  63. package/dist/index-pq3kz1r8.js +269 -0
  64. package/dist/{index-wg1sd3at.js → index-qfsrrnz6.js} +1 -1
  65. package/dist/{index-937cb7y8.js → index-vc7yxz50.js} +561 -35
  66. package/dist/{index-5jhgatga.js → index-vvzc5ezz.js} +7 -6
  67. package/dist/index-wwthv10a.js +1507 -0
  68. package/dist/{index-tfzta544.js → index-xfedewpt.js} +17 -9
  69. package/dist/index-yx52bt4a.js +511 -0
  70. package/dist/index.d.ts +3 -0
  71. package/dist/index.js +93 -77
  72. package/dist/integrations/mcp-stdio-tools.d.ts +4 -1
  73. package/dist/internal/desktop/providers.d.ts +2 -0
  74. package/dist/models/catalog.d.ts +2 -0
  75. package/dist/persistence/sqlite-database.d.ts +1 -0
  76. package/dist/providers/azure-openai.d.ts +14 -0
  77. package/dist/providers/bedrock.d.ts +23 -0
  78. package/dist/providers/providers.d.ts +1 -1
  79. package/dist/runtime/budget-ledger-scope.d.ts +14 -0
  80. package/dist/runtime/durable-review-group.d.ts +33 -0
  81. package/dist/runtime/harness.d.ts +11 -0
  82. package/dist/runtime/run-interruption.d.ts +7 -0
  83. package/dist/runtime/shared-budget.d.ts +30 -0
  84. package/dist/runtime/task-continuity.d.ts +300 -77
  85. package/dist/service-cli.js +15 -11
  86. package/dist/{service-client-cli-fn54ev6w.js → service-client-cli-v6qptg9x.js} +400 -305
  87. package/dist/tools/workspace.d.ts +2 -2
  88. package/dist/verify-historical-migrations.js +1237 -566
  89. package/dist/workspace/edit-contracts.d.ts +2 -2
  90. package/dist/workspace/path-policy.d.ts +2 -1
  91. package/dist/workspace/workspace.d.ts +13 -0
  92. package/dist/zhx.js +27 -2
  93. package/docs/AUDIT_PACK.md +99 -0
  94. package/docs/AZURE_OPENAI.md +53 -0
  95. package/docs/BEDROCK.md +56 -0
  96. package/docs/CLI.md +15 -0
  97. package/docs/CLIENT_PROTOCOL.md +178 -0
  98. package/docs/CODE_RELEASE.md +59 -7
  99. package/docs/CODE_WEB_TASKS.md +116 -0
  100. package/docs/CONTEXT_ENGINEERING.md +59 -0
  101. package/docs/CREDENTIALS.md +21 -0
  102. package/docs/DURABLE_OPERATIONS.md +93 -1
  103. package/docs/ENGINE_API.md +5 -2
  104. package/docs/EXTENSIBILITY.md +8 -4
  105. package/docs/FIRST_USE.md +6 -6
  106. package/docs/MINIMUM_TASK_AUTHORITY.md +3 -3
  107. package/docs/PROJECT_MEMORY.md +1 -1
  108. package/docs/PUBLIC_SECURITY.md +14 -1
  109. package/docs/README.md +6 -1
  110. package/docs/REPOSITORY_EDITING.md +1 -1
  111. package/docs/STABILITY.md +3 -1
  112. package/docs/SUPPORT_MATRIX.md +1 -1
  113. package/docs/SUPPORT_MATRIX_1_1.md +1 -1
  114. package/docs/TOOL_POLICY.md +4 -1
  115. package/docs/USAGE.md +3 -1
  116. package/docs/VERTEX.md +2 -2
  117. package/docs/WEB_LIMITS.md +4 -3
  118. package/docs/adr/0002-isolated-mcp-stdio.md +7 -4
  119. package/docs/support-matrix-1.1.json +3 -1
  120. package/docs/support-matrix.json +6 -4
  121. package/evaluations/code-task-ui.json +20 -0
  122. package/evaluations/representative-assembly-matrix.json +19 -1
  123. package/evaluations/task-projection.json +10 -0
  124. package/evaluations/task-recovery-lab.json +60 -0
  125. package/examples/README.md +3 -3
  126. package/package.json +23 -13
  127. package/dist/cli-entry-4ngptr62.js +0 -19900
  128. 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.
@@ -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 candidate pins Core 1.31.0 and Agents 1.11.0. New stores require no
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.
@@ -1,7 +1,7 @@
1
1
  # Engine API and Code integration
2
2
 
3
- This checkout adds terminal-independent package entrypoints for
4
- Harness 1.3.0 (published and verified on `latest`). They are not present in the previously published Harness 1.2.0.
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
@@ -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 Gemini. 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.
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.31.0`, `@zhivex-ai/meta@0.2.9`, `@zhivex-ai/qwen@0.16.4`, `@zhivex-ai/openai@0.14.1`, `@zhivex-ai/gemini@0.13.0`, `@zhivex-ai/anthropic@0.13.2`, and `@zhivex-ai/vertex@1.2.4`. Qwen 0.16.2 types malformed Responses tool arguments and malformed SSE events; Core 1.31.0 satisfies the updated Agents, Anthropic, OpenAI and Vertex `^1.30.0` ranges and Qwen `^1.29.0` range. 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.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.4.0`, pending publication to npm `latest`. The versioned install commands below become available only after protected publication. npm `latest` remains stable 1.3.0 until that publication.
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.4.0
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.4.0
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.4.0 --version
93
- bunx @zhivex-ai/harness@1.4.0 --help
94
- bunx @zhivex-ai/harness@1.4.0 doctor
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.14.1) | 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.13.2) | Supported | Messages `max_tokens`; non-refreshable built-in credentials; `maxRetries=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.4) | Supported | `generationConfig.maxOutputTokens`; real ADC callback, synthetic credential source in tests; `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
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 |
@@ -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.4.0 (Code 0.3.0), pending publication. Commands
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
 
@@ -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. The npm publication job is the only workflow path that requests `id-token: write`, and it uses the protected `npm` environment.
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` accepts a quarantine identifier and an optional workspace destination. Restore is conflict-safe: it never overwrites an existing destination, and an optional expected digest can bind the operation to the quarantined bytes the operator reviewed. A successful restore is recorded independently from the quarantine operation.
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, and workspace checkpoint restoration APIs are experimental. 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).
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.
@@ -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.2`, Qwen `qwen3.8-max`, OpenAI `gpt-5.6-luna` | — | Gemini, Anthropic, Vertex (ADC) | undocumented providers |
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
 
@@ -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. Desktop accepts the operator-owned
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.1.2` with Core 1.26.0 and
48
- `google-auth-library@11.0.2`. Deterministic tests exercise the installed SDK's
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.
@@ -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 Web Core/Agents pins and the root Core override use those verified releases.
7
- Provider package pins, headless policies and release gates remain unchanged.
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
- **Avisar** records a notice and lets the run continue. **Detener** requests the
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