triss-coworker 0.37.1 → 0.37.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/CHANGELOG.md +59 -19
  2. package/README.md +128 -46
  3. package/THIRD_PARTY_NOTICES +26 -0
  4. package/bin/triss.js +4 -4
  5. package/docs/cli-reference.md +10 -0
  6. package/docs/compatibility.md +16 -0
  7. package/docs/configuration.md +19 -10
  8. package/docs/data-flows.md +20 -0
  9. package/docs/deprecations.md +7 -0
  10. package/docs/engines/crush.md +60 -0
  11. package/docs/engines/index.md +9 -0
  12. package/docs/{opencode-go.md → engines/opencode-go.md} +3 -2
  13. package/docs/{opencode-zen.md → engines/opencode-zen.md} +8 -5
  14. package/docs/{opencode2.md → engines/opencode2.md} +9 -7
  15. package/docs/getting-started.md +12 -0
  16. package/docs/mcp.md +21 -7
  17. package/docs/{reliable-delegation-release-a.md → reliable-delegation-contract.md} +76 -38
  18. package/docs/security-model.md +16 -0
  19. package/docs/troubleshooting.md +15 -0
  20. package/package.json +29 -9
  21. package/src/coder-credential-proxy.js +3 -3
  22. package/src/coder-engines/crush.js +17 -23
  23. package/src/coder-engines/opencode2.js +10 -16
  24. package/src/coder-git-mediator.js +1 -1
  25. package/src/coder-lease.js +3 -2
  26. package/src/coder-models.js +10 -10
  27. package/src/coder-orchestration.js +4 -4
  28. package/src/coder-process-supervisor.js +2 -2
  29. package/src/coder-result-owner-adapter.js +4 -4
  30. package/src/coder-result-quarantine.js +1 -1
  31. package/src/coder-result-registry-codec.js +1 -1
  32. package/src/coder-result-transitions.js +2 -2
  33. package/src/coder-result.js +5 -5
  34. package/src/coder-run-state.js +5 -5
  35. package/src/coder-sandbox.js +5 -5
  36. package/src/coder-session-inventory-codec.js +1 -1
  37. package/src/coder-session-owner-adapter.js +3 -3
  38. package/src/coder-session-store.js +4 -4
  39. package/src/coder-session-transitions.js +3 -3
  40. package/src/coder-state-backup.js +5 -5
  41. package/src/coder-state.js +3 -3
  42. package/src/coder-write-quota.js +3 -3
  43. package/src/commands/coder-state-backup.js +1 -1
  44. package/src/commands/coder.js +166 -147
  45. package/src/commands/review.js +7 -7
  46. package/src/config-defaults.js +20 -0
  47. package/src/config.js +3 -3
  48. package/src/fixed-kernel-lock.js +3 -3
  49. package/src/integrations/_contract.js +1 -1
  50. package/src/managed-root.js +3 -3
  51. package/src/mcp/handlers.js +3 -3
  52. package/src/mcp/review-core.js +10 -10
  53. package/src/mcp/tools.js +1 -1
  54. package/src/opencode-config.js +11 -11
  55. package/src/opencode2-preflight.js +36 -33
  56. package/src/owned-process-journal.js +2 -2
  57. package/src/owned-process-reconcile.js +35 -5
  58. package/src/provider-errors.js +3 -3
  59. package/src/review-executor.js +9 -9
  60. package/src/review-git.js +6 -6
  61. package/src/review-input.js +2 -2
  62. package/src/review-live.js +2 -2
  63. package/src/review-payload.js +13 -13
  64. package/src/review-pr-fetch.js +4 -4
  65. package/src/review-pr-identity.js +3 -3
  66. package/src/review-pr-metadata.js +5 -5
  67. package/src/review-pr-registry.js +3 -3
  68. package/src/review-pr.js +7 -7
  69. package/src/review-scoped.js +2 -2
  70. package/src/usage.js +5 -6
  71. package/src/web.js +2 -1
  72. package/src/worktree-fingerprint.js +2 -2
  73. package/templates/claude-full.md +163 -3
  74. package/templates/claude.md +11 -1
  75. package/templates/codex-full.md +162 -2
  76. package/templates/codex.md +11 -1
  77. package/docs/coder-agent-plan.md +0 -929
  78. package/docs/coder-model-management-plan.md +0 -1328
  79. package/docs/coder-one-shot-provider-plan.md +0 -140
  80. package/docs/coder-process-lifecycle-plan.md +0 -62
  81. package/docs/codex-workflow-improvements-plan.md +0 -350
  82. package/docs/crush-glm-integration.md +0 -294
  83. package/docs/crush-issues.md +0 -270
  84. package/docs/crush-restrict-issues.md +0 -170
  85. package/docs/deepseek-harness-provider-bundle-plan.md +0 -529
  86. package/docs/extending.md +0 -260
  87. package/docs/glm-clients.md +0 -569
  88. package/docs/openai-compatible-coder-plan.md +0 -259
  89. package/docs/opencode-go-support-plan.md +0 -145
  90. package/docs/opencode2-engine-plan.md +0 -1280
  91. package/docs/reliable-delegation-contract-plan.md +0 -5477
  92. package/docs/review-stdin-plan.md +0 -465
  93. package/docs/update-system-plan.md +0 -1302
  94. package/docs/usage-accounting-plan.md +0 -993
  95. package/src/release-a-acceptance.js +0 -605
package/CHANGELOG.md CHANGED
@@ -7,8 +7,50 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.37.2] — 2026-08-20
11
+
12
+ ### Added
13
+
14
+ - **Host-agent delegation workflow guidance** — a single documented
15
+ one-host/one-coder workflow: the host plans and decides, sends one complete
16
+ task packet to one `triss coder run`, the coder investigates, implements,
17
+ tests, debugs, and self-verifies, and the host inspects the actual diff and
18
+ makes the final decision. Taught consistently in `README.md`, the full
19
+ cookbooks (`templates/codex-full.md`, `templates/claude-full.md`), the nano
20
+ templates (`templates/codex.md`, `templates/claude.md`), and the
21
+ authoritative `docs/reliable-delegation-contract.md`.
22
+
23
+ ### Changed
24
+
25
+ - Coder and researcher agent templates now state the approval boundary
26
+ explicitly: the coder never commits, pushes, deploys, or touches anything
27
+ outside its checkout and reports truthfully; the researcher is a
28
+ research-only specialist and not a mandatory precursor to coder work.
29
+
30
+ ### Documentation
31
+
32
+ - Scope the constant `expectation: "either"` output field and the
33
+ `run_files_changed` change-evidence field to the `opencode`/`crush`
34
+ engines in `docs/reliable-delegation-contract.md` and `docs/mcp.md`; the
35
+ `opencode2` beta envelope reports neither and uses `files_changed`
36
+ instead.
37
+
38
+ ### Artifact integrity (0.37.2)
39
+
40
+ - `triss-dsh-provider-bundle-0.37.2.tgz` — sha256
41
+ `0327051792f0fe0d5431619aee7e2dee120fbbdb744b3e7f9afdd0eb958740b9`,
42
+ integrity
43
+ `sha512-BBZlA9OiA8pIp+n+GJ9RBX4+yPQpRoKjQLx8KY/5ZIlqRCMUJ5SResBEuVpPiMI9UDTnWq2rQp5JI/6TVh0Y7w==`
44
+ (computed with the pinned release npm 11.6.2 via `npm pack`; `npm pack`
45
+ output is byte-deterministic).
46
+ - Root `triss-coworker-0.37.2.tgz` sha256 is reproducible via `npm pack` at
47
+ tag `v0.37.2` (the root tarball ships `CHANGELOG.md`, so its hash cannot be
48
+ recorded inside this file); registry verification compares the packed
49
+ artifact against the published tarball byte-for-byte.
50
+
10
51
  ## [0.37.1] — 2026-08-19
11
52
 
53
+
12
54
  ### Fixed
13
55
 
14
56
  - Propagate cancellation through the main MCP review path and fail closed
@@ -35,8 +77,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
35
77
 
36
78
  ### Added
37
79
 
38
- - **Reliable delegation (Release C)** — sequential sharding per
39
- `docs/reliable-delegation-contract-plan.md`:
80
+ - **Reliable delegation (sharding acceptance)** — sequential sharding per the
81
+ public `docs/reliable-delegation-contract.md`:
40
82
  - `--payload-mode shard` CLI + MCP shard parity: source-ordered
41
83
  whole-file shards (a file is never split across shards);
42
84
  - sequential executor with first-failure stop, cancellation
@@ -49,13 +91,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
49
91
  never completed prose or raw diff content;
50
92
  - `evidence + shard` and `shard + --stream` rejected before any model
51
93
  call;
52
- - Release C synthetic acceptance (`--synthetic --release C`) and live
53
- acceptance (`--live --release C`; PASS / SKIPPED_NO_CREDENTIALS /
94
+ - sharding synthetic acceptance (`--synthetic --suite sharding`) and live
95
+ acceptance (`--live --suite sharding`; PASS / SKIPPED_NO_CREDENTIALS /
54
96
  BLOCKED_ENVIRONMENT recorded separately, never upgraded to success).
55
97
 
56
- - **Reliable delegation (Release B)** — bounded single review, exact PR
57
- diff acquisition, and the issue trust boundary per
58
- `docs/reliable-delegation-contract-plan.md`:
98
+ - **Reliable delegation (review acceptance)** — bounded single review, exact PR
99
+ diff acquisition, and the issue trust boundary per the public
100
+ `docs/reliable-delegation-contract.md`:
59
101
  - reloadable review limits (`TRISS_REVIEW_SINGLE_MAX_BYTES`,
60
102
  `TRISS_REVIEW_SHARD_MAX_BYTES`, `TRISS_REVIEW_TOTAL_MAX_BYTES`,
61
103
  `TRISS_REVIEW_MAX_SHARDS`) with atomic validation and full-default
@@ -122,7 +164,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
122
164
  (`usage_source: "opencode2"`, terminal-error precedence, no fabricated
123
165
  zeros), namespaces sessions per engine, and rides the shared opencode-v1
124
166
  configuration backend for `coder model set` / rollback. See
125
- docs/opencode2.md and docs/opencode2-engine-plan.md.
167
+ docs/engines/opencode2.md and docs/opencode2-engine-plan.md.
126
168
 
127
169
  ### Security (opencode2 engine beta)
128
170
 
@@ -150,7 +192,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
150
192
  canonical parser (comments and trailing commas no longer abort the run),
151
193
  and `parseOpenCodeDocument` drops trailing commas followed by comments.
152
194
 
153
- ### Fixed (review rounds 4–6)
195
+ ### Fixed
154
196
 
155
197
  - Dual legacy/native config forms (`provider`+`providers`,
156
198
  `plugin`+`plugins`, `permission`+`permissions`) reject — the pinned build
@@ -176,7 +218,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
176
218
  rejects BEFORE any credential/config write with actionable guidance; a
177
219
  fresh V2 init warns that the shared deny-everything policy removes the
178
220
  allowlisted commands from plain V1 runs (documented in
179
- docs/opencode2.md, including two new troubleshooting rows).
221
+ docs/engines/opencode2.md, including two new troubleshooting rows).
180
222
  - Model inspection tolerates unrelated hostile config shapes (a non-string
181
223
  plugin reference, unreadable directories) — the post-commit audit of a
182
224
  successful `coder model set` no longer rolls back over them; `coder
@@ -209,12 +251,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
209
251
 
210
252
  ### Added
211
253
 
212
- - **Reliable delegation (Release A)** — coder envelope v2 orchestration per
213
- `docs/reliable-delegation-contract-plan.md`:
254
+ - **Reliable delegation (session acceptance)** — coder envelope v2 orchestration
255
+ per the public `docs/reliable-delegation-contract.md`:
214
256
  - envelope fields `session_slug`, `result_retention`, `result_id`, and
215
257
  `execution_capabilities` (eight honest `enforced|best_effort|unavailable`
216
258
  values + `effective_isolation`) on every safe envelope
217
- (`docs/reliable-delegation-release-a.md`);
259
+ (`docs/reliable-delegation-contract.md`);
218
260
  - v2 session CLI: `triss coder session list`, `triss coder session clean
219
261
  <slug> --engine <opencode|crush>` (per-engine store only, legacy
220
262
  `.triss/sessions.json` never touched);
@@ -229,7 +271,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
229
271
  phase-aware manifest machine, completion-marker hashing);
230
272
  - credential proxy (loopback one-run token) on both engines — the real
231
273
  provider key never reaches the engine environment; every run requires
232
- the proxy (Release A rejects runs when it is unavailable);
274
+ the proxy (session acceptance rejects runs when it is unavailable);
233
275
  - pure provider error classifier with stable public codes
234
276
  (`TRISS_PROVIDER_AUTH/POLICY/RATE/TIMEOUT/NOT_FOUND/CONNECTION/UNKNOWN/
235
277
  CONFLICT/EMPTY`);
@@ -762,7 +804,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
762
804
  tools (which now light up on `ZHIPU_API_KEY` **or** `OPENCODE_API_KEY`). (#12)
763
805
  - `--allow-unsafe-bash` on `triss coder init` — explicit opt-in to proceed when
764
806
  an existing `opencode.json` has no deny-first bash policy. (#12)
765
- - New `docs/opencode-zen.md` deep-dive (auth, live catalogue, precedence, setup
807
+ - New `docs/engines/opencode-zen.md` deep-dive (auth, live catalogue, precedence, setup
766
808
  gates, privacy, MCP, verification). (#12)
767
809
 
768
810
  ### Changed
@@ -805,9 +847,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
805
847
  npm version. (#10)
806
848
  - New `docs/glm-clients.md` — a single reference for how Triss talks to
807
849
  GLM (both engines, key/endpoint routing, model selection, usage modes,
808
- and the safety model), and `docs/crush-issues.md` /
809
- `docs/crush-restrict-issues.md` capturing the crush maintainer bug
810
- reports. (#10)
850
+ and the safety model), plus two Crush maintainer bug reports. (#10)
811
851
 
812
852
  ### Changed
813
853
 
@@ -1226,7 +1266,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1226
1266
 
1227
1267
  ### Fixed
1228
1268
 
1229
- - Documentation-audit fixes (P0 + P1 from `triss` self-audit).
1269
+ - Documentation-audit security and correctness fixes from a `triss` self-audit.
1230
1270
 
1231
1271
  ## [0.12.0] — 2026-05-07
1232
1272
 
package/README.md CHANGED
@@ -24,7 +24,7 @@ GitHub Issues, and GitLab Issues, so your agent can search, read, create,
24
24
  update, comment on, and transition work items without pulling thousands of
25
25
  tokens of tracker chatter into its own context. Adding a new provider
26
26
  (Notion, Asana, Sentry, ...) takes one folder — see
27
- [docs/extending.md](docs/extending.md).
27
+ [extension guide](https://github.com/ayleen/triss-coworker/blob/main/docs/extending.md).
28
28
 
29
29
  ---
30
30
 
@@ -56,7 +56,8 @@ tokens of tracker chatter into its own context. Adding a new provider
56
56
  yarn, git, tar, unzip, or a checksum utility once a standalone Release exists.
57
57
  - A **DeepSeek API key** (free tier works) for the worker model: <https://platform.deepseek.com/>.
58
58
 
59
- Triss has no other runtime dependencies.
59
+ No external service or system-wide binary is required for the core CLI. npm
60
+ dependencies are installed with the package.
60
61
 
61
62
  ## Install
62
63
 
@@ -305,7 +306,7 @@ The exposed tool set is **filtered by configured credentials**:
305
306
  `MOONSHOT_API_KEY` (Moonshot Kimi), or `KIMI_API_KEY` (Kimi for Coding)
306
307
  (setup: `triss coder init`). `triss_coder_run` takes an optional `engine`
307
308
  (`opencode` V1 default; `--engine opencode2` beta — see
308
- [opencode2.md](docs/opencode2.md) — or `crush`); its timeout defaults to
309
+ [opencode2.md](docs/engines/opencode2.md) — or `crush`); its timeout defaults to
309
310
  1500s (25 min) over MCP, above the CLI's 900s, since coding runs are
310
311
  expected to be long; override per call via the `timeout` arg. For
311
312
  runs that may exceed it, use `triss coder run` on the CLI instead.
@@ -314,9 +315,8 @@ Add credentials later → restart session → new tools appear automatically.
314
315
 
315
316
  Full reference: [docs/mcp.md](docs/mcp.md).
316
317
 
317
- The root `CLAUDE.md` and `AGENTS.md` in this repository are contributor
318
- instructions for working on Triss itself. The files under `templates/` are
319
- what `triss init` and `triss agent-help` render into other projects:
318
+ The files under `templates/` are what `triss init` and `triss agent-help`
319
+ render into other projects:
320
320
  `claude.md` / `codex.md` are the nano variants written by `init`, and
321
321
  `claude-full.md` / `codex-full.md` are the long cookbook served by
322
322
  `agent-help`.
@@ -326,6 +326,70 @@ what `triss init` and `triss agent-help` render into other projects:
326
326
  The expensive primary agent decides **what** to do. Triss does the **reading
327
327
  and writing**.
328
328
 
329
+ ### Recommended host-agent workflow
330
+
331
+ Keep one primary agent and one coder per implementation stream. You (the
332
+ expensive primary agent) understand the request, decide the plan, and own
333
+ architecture, authorization, and final acceptance; the coder owns the
334
+ repository investigation, implementation, tests, debugging, and
335
+ self-verification; you then inspect the actual diff and evidence and make
336
+ the final decision. Do not default to a researcher -> planner -> coder ->
337
+ verifier -> reviewer chain — use `triss ask` / `triss fetch` for
338
+ research-only work and `triss review` only when complexity, security
339
+ sensitivity, or regression risk materially improves confidence. Split work
340
+ across coders only when the streams are independently executable with
341
+ explicit merge or handoff boundaries. Prefer a fresh run without intentional
342
+ session reuse: pass the complete task packet to every run and rely on
343
+ `--session` / `--continue` only for deliberate continuation.
344
+
345
+ Pass the whole plan as one task packet — Goal, Plan, Constraints, Relevant
346
+ context, Success criteria, Validation, Return — via `triss coder run --stdin`
347
+ for long prompts or as the MCP `prompt` string:
348
+
349
+ ```bash
350
+ triss coder run --stdin --isolate <<'TASK'
351
+ Goal
352
+ - Add the requested behavior.
353
+
354
+ Plan
355
+ - Follow the host-approved implementation steps.
356
+
357
+ Constraints
358
+ - Preserve existing public behavior outside the requested scope.
359
+ - Do not commit, push, deploy, or modify files outside this checkout.
360
+
361
+ Relevant context
362
+ - Known entry points, related files, prior findings, errors, or reference behavior.
363
+ - Include only context needed for this task; let the coder inspect the repository for the rest.
364
+
365
+ Success criteria
366
+ - Focused regression tests pass.
367
+ - The final diff contains only the requested change.
368
+
369
+ Validation
370
+ - Run the relevant repository-native focused tests.
371
+
372
+ Return
373
+ - Outcome, files changed, checks, and unresolved blockers.
374
+ TASK
375
+ ```
376
+
377
+ `triss agent-help` prints the generated host-agent cookbook and the final
378
+ acceptance checklist.
379
+
380
+ Existing `triss coder init` installations keep their generated agent files
381
+ (`init` never overwrites them, so re-running it alone will not refresh
382
+ them). To adopt the stronger coder/researcher roles:
383
+
384
+ - local scope: merge or replace `./.opencode/agents/coder.md` /
385
+ `./.opencode/agents/researcher.md`;
386
+ - global scope (the `triss coder init` default): merge or replace
387
+ `~/.config/opencode/agents/coder.md` /
388
+ `~/.config/opencode/agents/researcher.md`;
389
+ - to regenerate them, back up or remove the generated files first, then
390
+ re-run `triss coder init` with the matching explicit `--local` / `--global`
391
+ scope.
392
+
329
393
  | Command | Does | Replaces |
330
394
  | --------------- | ----------------------------------------------------- | ----------------------------------- |
331
395
  | `triss ask` | Reads files, URLs, and/or piped stdin — returns a summary | The agent reading the source itself |
@@ -337,8 +401,8 @@ and writing**.
337
401
  | `triss review` | Code review on a branch, PR, or explicitly piped diff (linked ticket only for branch/PR) | The agent reading the whole diff |
338
402
  | `triss commit-msg` | Generates a commit message from staged diff | Hand-writing or copy-pasting from web LLMs |
339
403
  | `triss usage` | Cumulative cost / token usage with per-project breakdown | Squinting at stderr after each call |
340
- | `triss coder init` | Sets up a coding agent (default `opencode` V1 engine; `--engine opencode2` for the V2 beta — shares the `opencode.json` config, see [docs/opencode2.md](docs/opencode2.md); `--engine crush` for crush): provider key/profile (`--provider worker` reuses `TRISS_WORKER_*`; Z.AI GLM default; Zen, Go, and Kimi are also supported), config, permission policy, and agent templates. Blocks (non-zero) on an unsafe existing `opencode.json` — missing deny-first bash policy (override with `--allow-unsafe-bash`) or a stale/cross-provider `small_model`. | Manually installing/configuring opencode |
341
- | `triss coder run` | Spawns the coding agent (the OpenAI-compatible Triss worker, GLM, Kimi, OpenCode Zen, or OpenCode Go) and prints one JSON envelope (`--engine opencode|opencode2|crush` — opencode V1 default, opencode2 beta per [docs/opencode2.md](docs/opencode2.md); `--isolate` for a disposable worktree — opencode defaults to isolate-OFF, crush defaults to isolate-ON; crush adds opt-in `--restrict`/`--no-restrict` for its CLI allowlist). **POSIX only** (macOS/Linux) — refuses to run on Windows. | Manually driving `opencode run` and parsing its ndjson stream |
404
+ | `triss coder init` | Sets up a coding agent (default `opencode` V1 engine; `--engine opencode2` for the V2 beta — shares the `opencode.json` config, see [docs/engines/opencode2.md](docs/engines/opencode2.md); `--engine crush` for crush): provider key/profile (`--provider worker` reuses `TRISS_WORKER_*`; Z.AI GLM default; Zen, Go, and Kimi are also supported), config, permission policy, and agent templates. Blocks (non-zero) on an unsafe existing `opencode.json` — missing deny-first bash policy (override with `--allow-unsafe-bash`) or a stale/cross-provider `small_model`. | Manually installing/configuring opencode |
405
+ | `triss coder run` | Spawns the coding agent (the OpenAI-compatible Triss worker, GLM, Kimi, OpenCode Zen, or OpenCode Go) and prints one JSON envelope (`--engine opencode|opencode2|crush` — opencode V1 default, opencode2 beta per [docs/engines/opencode2.md](docs/engines/opencode2.md); `--isolate` for a disposable worktree — opencode defaults to isolate-OFF, crush defaults to isolate-ON; crush adds opt-in `--restrict`/`--no-restrict` for its CLI allowlist). **POSIX only** (macOS/Linux) — refuses to run on Windows. | Manually driving `opencode run` and parsing its ndjson stream |
342
406
  | `triss coder clean` | Removes finished `.triss/wt` isolation worktrees (`--all` forces all) | Manually finding and deleting stale git worktrees |
343
407
  | `triss coder session` | Lists / cleans inactive v2 sessions per engine (`--engine opencode|crush`) | Hand-patching the session store |
344
408
  | `triss coder result` | Lists / cleans retained result artifacts (enforced result-store quota) | Finding result-store files by hand |
@@ -569,10 +633,10 @@ triss review --files src/a.js test/b.test.js # literal file selection (after --
569
633
  triss review --issue ENG-42 # explicit tracker issue (never inferred from prose)
570
634
  ```
571
635
 
572
- ### Reliable delegation — review safety (Release B)
636
+ ### Reliable delegation — review safety (review acceptance)
573
637
 
574
- Review runs are bounded and fail closed (see
575
- [`docs/reliable-delegation-release-a.md`](docs/reliable-delegation-release-a.md)):
638
+ Review runs are bounded and fail closed (see the
639
+ [`docs/reliable-delegation-contract.md`](docs/reliable-delegation-contract.md)):
576
640
 
577
641
  - **Limits**: single request (256 KiB default / 1 MiB hard max), shard
578
642
  (96 KiB / 256 KiB), total corpus (4 MiB / 16 MiB), shard count (64 /
@@ -593,7 +657,7 @@ Review runs are bounded and fail closed (see
593
657
  - **Empty responses** fail with `TRISS_PROVIDER_EMPTY` instead of
594
658
  producing a clean verdict; usable non-empty text is never trimmed.
595
659
 
596
- ### Sharding (Release C)
660
+ ### Sequential review sharding
597
661
 
598
662
  `triss review --payload-mode shard` runs source-ordered whole-file shards
599
663
  sequentially. A file is never split across shards; the first failure or
@@ -659,7 +723,7 @@ default timeout, configurable via `--timeout <ms>`.
659
723
  Delegates an implementation task to a cheap coding agent — the existing
660
724
  OpenAI-compatible Triss worker, GLM, Kimi,
661
725
  OpenCode Zen, or OpenCode Go models (the `opencode` V1 engine by default;
662
- `opencode2` beta — see [docs/opencode2.md](docs/opencode2.md) — or `crush`; see
726
+ `opencode2` beta — see [docs/engines/opencode2.md](docs/engines/opencode2.md) — or `crush`; see
663
727
  **Engines** below) instead of the primary model writing
664
728
  the code itself.
665
729
 
@@ -676,16 +740,26 @@ triss coder state backup --project <path> # Section 15 rollback backup
676
740
  triss coder state validate --project <path> --backup <dir>
677
741
  ```
678
742
 
679
- Every `triss coder run` envelope (and the matching MCP tool) carries the
680
- Release A contract fields: `session_slug` (explicit slug or an anonymous
681
- generated one — never an implicit persistent conversation), `result_retention`
743
+ Every `triss coder run` envelope on the `opencode` and `crush` engines
744
+ (and the matching MCP tool) carries the session acceptance contract fields:
745
+ `session_slug` (explicit slug or a generated per-run slug — never an
746
+ implicit persistent conversation), `result_retention`
682
747
  / `result_id` (`retained` only for isolated changed runs with enforced
683
748
  result-store quota and a successful reservation), and `execution_capabilities`
684
749
  (eight honest `enforced|best_effort|unavailable` values plus
685
- `effective_isolation`). Non-isolated `files_changed` is `null`; the only
686
- changes-expectation evidence is `run_files_changed`. Process completion is not
687
- task satisfaction — use `--expect changes --isolate` and inspect `git status`
688
- yourself. Unavailable OS sandbox/cleanup/lock/quota does not block a
750
+ `effective_isolation`). The `opencode2` beta engine still returns the older
751
+ envelope shape (`session_id`, `exit_reason`, `final_text`, `files_changed`,
752
+ `diff_stat`, `worktree`, `usage`, `warnings`) without these fields — use its
753
+ `files_changed` / `diff_stat` / `worktree` as evidence there. Non-isolated `files_changed` is `null`; the only
754
+ changes-expectation evidence is `run_files_changed`. Process completion and a
755
+ non-empty final text are not task satisfaction — use `--isolate`, check
756
+ `run_files_changed` in the envelope, and verify the retained worktree/diff
757
+ directly when the envelope returns one (a run with `worktree: null` and an
758
+ empty `run_files_changed` — or empty `files_changed` on the `opencode2` beta
759
+ — produced no retained deliverable): `git status --short`,
760
+ then review the staged patch with `git diff --cached` and any unstaged
761
+ changes with `git diff` (Triss stages the deliverable changes before
762
+ returning the envelope). Unavailable OS sandbox/cleanup/lock/quota does not block a
689
763
  non-isolated/best-effort run but provides none of those guarantees; explicit
690
764
  or default isolation needs `--allow-best-effort-caller-worktree` (default
691
765
  off) or fails before spawn with `TRISS_CODER_ISOLATION_ENFORCEMENT_REQUIRED`
@@ -697,8 +771,8 @@ repository or worktree creation failure — slug/branch conflicts like
697
771
  `best_effort_caller_worktree`: stderr and envelope `warnings` carry
698
772
  `TRISS_CODER_ISOLATION_DOWNGRADED` and `effective_isolation` becomes
699
773
  `best_effort_caller_worktree` (advisory-only, `files_changed` is `null`,
700
- edits may reach the caller worktree). Full details:
701
- `docs/reliable-delegation-release-a.md`.
774
+ edits may reach the caller worktree). Full details are in the
775
+ [`docs/reliable-delegation-contract.md`](docs/reliable-delegation-contract.md).
702
776
 
703
777
  `triss coder init` first asks which provider to configure — **Z.AI GLM**
704
778
  (default), the existing **Triss worker** (`--provider worker`, aliases
@@ -715,8 +789,8 @@ providers need no probe at all — their plans use different keys
715
789
  (`MOONSHOT_API_KEY` vs `KIMI_API_KEY`), so the choice already names the
716
790
  endpoint. Either way it lets you pick the model interactively. See the
717
791
  **Providers** section below and
718
- [docs/opencode-zen.md](docs/opencode-zen.md) and
719
- [docs/opencode-go.md](docs/opencode-go.md) for the OpenCode provider deep-dives.
792
+ [docs/engines/opencode-zen.md](docs/engines/opencode-zen.md) and
793
+ [docs/engines/opencode-go.md](docs/engines/opencode-go.md) for the OpenCode provider deep-dives.
720
794
 
721
795
  Prints one JSON envelope to stdout — `files_changed`, `diff_stat`, and
722
796
  `worktree` tell you what to review; `--isolate` runs the agent in a
@@ -726,7 +800,8 @@ waits for any residual process in the selected engine's process group, so tests
726
800
  clients cannot keep locks or write files after completion. MCP cancellation is
727
801
  forwarded to the same cleanup path. `--session <slug>` continues the same opencode
728
802
  conversation across calls. **POSIX only** (macOS/Linux) for now. See
729
- `docs/glm-clients.md` for the full picture of how Triss talks to GLM
803
+ the [GLM client guide](https://github.com/ayleen/triss-coworker/blob/main/docs/glm-clients.md)
804
+ for the full picture of how Triss talks to GLM
730
805
  (all engines, key/endpoint routing, models, and every usage mode),
731
806
  `docs/configuration.md` for the coder env vars, and `docs/mcp.md` for the
732
807
  MCP tool equivalents.
@@ -748,8 +823,9 @@ CLI flag > env > crush.json `permissions.run.restrict` > default OFF). For
748
823
  Z.AI GLM, the opencode engines and crush all use the single `ZHIPU_API_KEY`
749
824
  (crush ≥0.1.1 reads it natively; triss also forwards it as `ZAI_API_KEY`
750
825
  for older binaries; see
751
- **Providers** below for the opencode-only OpenCode alternatives). See
752
- `docs/crush-restrict-issues.md` for the live-verified bug facts.
826
+ **Providers** below for the opencode-only OpenCode alternatives). See the
827
+ [Crush engine guide](docs/engines/crush.md) for the supported configuration,
828
+ safety boundaries, and current upstream limitations.
753
829
 
754
830
  **Providers** — the `opencode` engine isn't limited to Z.AI. The required
755
831
  API key follows the model's `<provider>/` prefix: `triss-worker/*` reuses
@@ -858,7 +934,7 @@ override within the current provider; use `--provider` + `--model` and optional
858
934
  `--small-model` to switch the complete pair for one run. The deny-first
859
935
  `opencode.json` bash policy applies to every provider.
860
936
  Full details, the model catalogue, and every configuration path are in
861
- [docs/opencode-zen.md](docs/opencode-zen.md) and [docs/opencode-go.md](docs/opencode-go.md).
937
+ [docs/engines/opencode-zen.md](docs/engines/opencode-zen.md) and [docs/engines/opencode-go.md](docs/engines/opencode-go.md).
862
938
 
863
939
  If your Z.AI plan hits its usage limit, `triss coder run` fails fast with
864
940
  the reset time converted to your local timezone (Z.AI reports it in
@@ -883,7 +959,7 @@ Not every engine speaks every provider:
883
959
  | Engine | Providers served |
884
960
  | ---------- | ------------------------------------------------- |
885
961
  | `opencode` | Triss worker, Z.AI GLM, OpenCode Zen, OpenCode Go, Moonshot, Kimi for Coding |
886
- | `opencode2` | Same provider routing as V1 (shares `opencode.json`; one-shot `--provider` / `--small-model` overlays rejected — see [docs/opencode2.md](docs/opencode2.md)) |
962
+ | `opencode2` | Same provider routing as V1 (shares `opencode.json`; one-shot `--provider` / `--small-model` overlays rejected — see [docs/engines/opencode2.md](docs/engines/opencode2.md)) |
887
963
  | `crush` | Z.AI GLM (coding-plan only) |
888
964
 
889
965
  `triss coder init` drives setup in that order — **engine, then provider,
@@ -935,8 +1011,9 @@ Triss surfaces that replacement command rather than auto-switching you
935
1011
  to GLM.
936
1012
 
937
1013
  Full flag reference, the model catalogues, key/endpoint routing, and
938
- the stale-model recovery flow are in [docs/glm-clients.md](docs/glm-clients.md),
939
- [docs/opencode-zen.md](docs/opencode-zen.md), [docs/opencode-go.md](docs/opencode-go.md), and
1014
+ the stale-model recovery flow are in the
1015
+ [GLM client guide](https://github.com/ayleen/triss-coworker/blob/main/docs/glm-clients.md),
1016
+ [docs/engines/opencode-zen.md](docs/engines/opencode-zen.md), [docs/engines/opencode-go.md](docs/engines/opencode-go.md), and
940
1017
  [docs/configuration.md](docs/configuration.md).
941
1018
 
942
1019
  ## Integrations
@@ -975,7 +1052,8 @@ hints live in the on-demand cookbook, not in the always-loaded block.)
975
1052
 
976
1053
  The plugin contract is one folder + one file. A working **GitHub Issues**
977
1054
  integration in ~80 lines is documented end-to-end in
978
- [**docs/extending.md**](docs/extending.md). High-level recipe:
1055
+ [**extension guide**](https://github.com/ayleen/triss-coworker/blob/main/docs/extending.md).
1056
+ High-level recipe:
979
1057
 
980
1058
  1. Create `src/integrations/<name>/index.js`.
981
1059
  2. `export default { name, description, envVars, register(program, { wrap }) {}, agentInstructions: { claude, codex } }`.
@@ -1190,15 +1268,17 @@ rules of thumb.
1190
1268
  ## Security & privacy
1191
1269
 
1192
1270
  The short version for a vendor security review — full details in
1193
- [SECURITY.md](SECURITY.md):
1271
+ [SECURITY.md](https://github.com/ayleen/triss-coworker/blob/main/SECURITY.md):
1194
1272
 
1195
1273
  - **Local-first.** Triss is a CLI/MCP server on your machine, not a hosted
1196
1274
  service. It stores nothing server-side and has **no telemetry** — zero
1197
1275
  data goes to the Triss developers.
1198
- - **Two outbound flows, both yours to configure.** Prompts and selected
1199
- context go to the model endpoint you set (`TRISS_WORKER_BASE_URL`,
1200
- DeepSeek by default); tracker commands talk to the Jira/Linear/GitHub/…
1201
- instances you configured. Nothing else leaves the machine.
1276
+ - **Outbound data is explicit and documented.** Model commands and coder
1277
+ engines may send selected repository content to the configured provider;
1278
+ integrations call their configured services; a credential-free GitHub
1279
+ Releases check runs when the update cache is due. The complete recipient,
1280
+ payload, trigger, and opt-out table is in
1281
+ [docs/data-flows.md](docs/data-flows.md).
1202
1282
  - **Data residency is a config option.** Need an EU processor, a DPA, or
1203
1283
  zero retention? Point the worker at Azure OpenAI, Bedrock, Mistral, or a
1204
1284
  self-hosted model — see [provider recipes](#provider-recipes).
@@ -1208,11 +1288,12 @@ The short version for a vendor security review — full details in
1208
1288
  - **Guardrails.** SSRF guard on all agent-controlled fetches, path sandbox
1209
1289
  in MCP mode, response-size caps, secret masking in output. Residual risks
1210
1290
  are documented, not hidden.
1211
- - **Auditable supply chain.** Plain ESM, no build step, seven direct
1212
- dependencies, committed lockfile, `npm audit` kept clean.
1291
+ - **Auditable supply chain.** npm contents are allowlisted and smoke-tested;
1292
+ the standalone artifact has a deterministic source-to-artifact pipeline.
1293
+ Direct and transitive npm dependencies remain part of the installed code.
1213
1294
 
1214
1295
  Report vulnerabilities via GitHub Security Advisories
1215
- ([SECURITY.md](SECURITY.md#reporting-vulnerabilities)).
1296
+ ([SECURITY.md](https://github.com/ayleen/triss-coworker/blob/main/SECURITY.md#reporting-vulnerabilities)).
1216
1297
 
1217
1298
  ## Roadmap
1218
1299
 
@@ -1223,9 +1304,8 @@ wizard · bash + zsh completions · `--stdin` · `triss review [PR]` ·
1223
1304
  `triss chat` · MCP server · Cost tracking · `triss commit-msg` · GitHub /
1224
1305
  Confluence / GitLab integrations · Streaming output for `ask`/`chat`/
1225
1306
  `review` · Codex `AGENTS.md` rules · Path-safety sandbox in MCP mode ·
1226
- test suite · Reliable delegation, Release A — coder envelope v2,
1227
- session/result stores, credential proxy, and Section 15 rollback ·
1228
- Reliable delegation, Releases B/C — bounded review corpus limits, exact
1307
+ test suite · Reliable delegation — coder envelope v2, session/result stores,
1308
+ credential proxy, bounded review corpus limits, exact
1229
1309
  merge-base diff identity, disposable PR bare repos, and sequential
1230
1310
  whole-file review sharding · `triss exec` deterministic routing ·
1231
1311
  `triss coder` (opencode V1 default, opencode2 beta, crush) with worktree
@@ -1237,16 +1317,18 @@ provider recipe blocks for Kimi, Ollama, and OpenRouter.
1237
1317
  - [ ] Crush upstream `permissions.run` enforcement (currently inert —
1238
1318
  the working allowlist is the CLI `--restrict` flags).
1239
1319
  - [ ] opencode2 beta graduation: real credential isolation and
1240
- fixture-verified subagent support (see [docs/opencode2.md](docs/opencode2.md)).
1320
+ fixture-verified subagent support (see [docs/engines/opencode2.md](docs/engines/opencode2.md)).
1241
1321
 
1242
1322
  ## Contributing and security
1243
1323
 
1244
- Contributions are welcome; start with [CONTRIBUTING.md](CONTRIBUTING.md)
1324
+ Contributions are welcome; start with
1325
+ [CONTRIBUTING.md](https://github.com/ayleen/triss-coworker/blob/main/CONTRIBUTING.md)
1245
1326
  for local setup, test commands, and the project conventions.
1246
1327
 
1247
1328
  Security-sensitive changes deserve extra care because Triss sits between an
1248
1329
  agent, your filesystem, web URLs, and tracker credentials. See
1249
- [SECURITY.md](SECURITY.md) for the reporting path and the current trust
1330
+ [SECURITY.md](https://github.com/ayleen/triss-coworker/blob/main/SECURITY.md)
1331
+ for the reporting path and the current trust
1250
1332
  boundaries.
1251
1333
 
1252
1334
  ## Changelog
@@ -0,0 +1,26 @@
1
+ Triss Coworker third-party notices
2
+ ==================================
3
+
4
+ The npm package installs the following direct runtime dependencies. Their
5
+ license texts and transitive notices are distributed with those packages:
6
+
7
+ - @modelcontextprotocol/sdk — MIT
8
+ - commander — MIT
9
+ - dotenv — BSD-2-Clause
10
+ - linkedom — ISC
11
+ - openai — Apache-2.0
12
+ - picocolors — ISC
13
+ - turndown — MIT
14
+
15
+ The project concept acknowledges `imkunal007219/claude-coworker-model`, an
16
+ MIT-licensed project, in README.md:
17
+
18
+ Copyright (c) 2026 Kunal Bhardwaj
19
+ https://github.com/imkunal007219/claude-coworker-model
20
+
21
+ This notice records attribution and does not assert that its source code is
22
+ bundled in Triss.
23
+
24
+ The complete resolved dependency graph is recorded in package-lock.json. The
25
+ standalone artifact bundles production npm dependencies and includes this
26
+ notice alongside their package license files.
package/bin/triss.js CHANGED
@@ -346,7 +346,7 @@ coder
346
346
  .description('Install/configure a coding engine (opencode default, opencode2 beta, or crush), provider key, permission policy, and agent templates')
347
347
  .option('-g, --global', 'save to the global scope (~/.config/triss/.env, ~/.config/opencode/)')
348
348
  .option('-l, --local', 'save to the project scope (./.triss.env, ./opencode.json)')
349
- .option('--engine <name>', 'coding engine to configure: opencode (default), opencode2 (beta — shares the opencode.json config; see docs/opencode2.md), or crush')
349
+ .option('--engine <name>', 'coding engine to configure: opencode (default), opencode2 (beta — shares the opencode.json config; see docs/engines/opencode2.md), or crush')
350
350
  .option('--provider <name>', 'opencode engine model provider: zai, worker (existing OpenAI-compatible TRISS_WORKER_* profile), opencode-zen, opencode-go, moonshot, or kimi-for-coding')
351
351
  .option('--allow-unverified', 'requires explicit --provider opencode-go (alias: go): allow the built-in fallback only after a temporary network or HTTP 408/429/500/502/503/504 catalogue failure (never bypasses 401/403, empty, or invalid responses)')
352
352
  .option('--allow-unsafe-bash', 'proceed even if an existing opencode.json has no deny-first bash policy (the agent runs with --auto)')
@@ -355,7 +355,7 @@ coder
355
355
  coder
356
356
  .command('run [prompt]')
357
357
  .description('Spawn a coding agent — GLM, the OpenAI-compatible Triss worker, Kimi, OpenCode Zen, or OpenCode Go (opencode default; opencode2 beta or --engine crush) — and print a JSON envelope to stdout')
358
- .option('--engine <name>', 'coding engine: opencode (default), opencode2 (beta — see docs/opencode2.md), or crush')
358
+ .option('--engine <name>', 'coding engine: opencode (default), opencode2 (beta — see docs/engines/opencode2.md), or crush')
359
359
  .option('--session <id>', 'triss-side session slug, mapped to a real opencode session id in .triss/sessions.json')
360
360
  .option('--continue', 'continue the most recent opencode session (maps to opencode --continue)')
361
361
  .option('--agent <name>', 'agent template to use (V1 default: coder; opencode2 beta uses its built-in primary agent unless set)')
@@ -458,7 +458,7 @@ coderState
458
458
  .requiredOption('--project <absolute-path>', 'absolute path of the validated project root')
459
459
  .action((opts) => wrap(runCoderStateReset)(opts));
460
460
 
461
- // `coder session` group (v2 session CLI contract, Atomic 23).
461
+ // `coder session` group (v2 session CLI contract).
462
462
  const coderSession = coder
463
463
  .command('session')
464
464
  .description('List or clean v2 isolated sessions (per-engine store; legacy .triss/sessions.json is never touched)');
@@ -475,7 +475,7 @@ coderSession
475
475
  .requiredOption('--engine <name>', 'coding engine: opencode or crush (MANDATORY)')
476
476
  .action((slug, opts) => wrap(runCoderSessionClean)(slug, opts));
477
477
 
478
- // `coder result` group (retained-result CLI, Atomic 23).
478
+ // `coder result` group (retained-result CLI contract).
479
479
  const coderResult = coder
480
480
  .command('result')
481
481
  .description('List or clean retained result artifacts (never persistent sessions)');
@@ -0,0 +1,10 @@
1
+ # CLI reference
2
+
3
+ The executable reference is `triss --help` and each command's `--help` output.
4
+ The main command groups are model delegation (`ask`, `chat`, `write`, `fetch`,
5
+ `review`, `commit-msg`), coder engines (`coder`), MCP setup (`mcp`), tracker
6
+ integrations, configuration, usage accounting, and updates.
7
+
8
+ Machine consumers should prefer documented JSON modes and treat their schema
9
+ version as part of the contract. Human-readable output may evolve without a
10
+ schema migration.
@@ -0,0 +1,16 @@
1
+ # Compatibility and stability
2
+
3
+ | Component | Status |
4
+ | --- | --- |
5
+ | Core `ask` and `review` CLI | stable |
6
+ | MCP protocol surface | beta |
7
+ | JSON envelopes | versioned contract |
8
+ | OpenCode 1 engine | stable |
9
+ | OpenCode 2 engine | beta |
10
+ | Crush engine | experimental |
11
+ | Best-effort isolation | limited security boundary |
12
+ | Update system | stable |
13
+ | Individual integrations | stable or beta as documented by each integration |
14
+
15
+ Node.js 22 and 24 are tested. Provider availability, model identifiers, and
16
+ third-party CLI behavior can change independently of Triss.