carthagent 1.0.7 → 1.1.0-beta.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 (303) hide show
  1. package/README.md +140 -83
  2. package/bin/ctg.mjs +14 -732
  3. package/docs/beta-rewards-e2e-plan.md +48 -0
  4. package/docs/beta-rewards-e2e-results.md +84 -0
  5. package/docs/cloud-onboarding-acceptance.md +65 -0
  6. package/docs/glyph-review/host-chrome-glyph-compatibility-v4.md +83 -0
  7. package/docs/glyph-review/test-isolation-v1.md +26 -0
  8. package/docs/glyph-review/typecheck-base.log +1 -0
  9. package/docs/glyph-review/typecheck-v4.log +1 -0
  10. package/docs/glyph-review/unicode-inventory-v4.csv +402 -0
  11. package/docs/help-dispatch-review.md +69 -0
  12. package/docs/launch-readiness-live-results.md +65 -0
  13. package/docs/legacy-cli.md +150 -0
  14. package/docs/live-theme-plugin-api.md +18 -0
  15. package/docs/native-cli.md +102 -0
  16. package/docs/native-compatibility.md +16 -0
  17. package/docs/native-daily-quests.md +132 -0
  18. package/docs/native-glyph-pty.md +59 -0
  19. package/docs/native-manual-testing.md +336 -0
  20. package/docs/native-slash-acceptance-handoff.md +49 -0
  21. package/docs/native-terminal-paired-failure-2026-10-17.md +40 -0
  22. package/docs/native-terminal-performance.md +310 -0
  23. package/docs/native-terminal-semantics-evidence/README.md +25 -0
  24. package/docs/native-terminal-semantics-evidence/controlled-host-model-selftest.json +16 -0
  25. package/docs/native-terminal-semantics-evidence/current-acceptance-status.json +59 -0
  26. package/docs/native-terminal-semantics-evidence/final-binary-focused-85bb44a.json +154 -0
  27. package/docs/native-terminal-semantics-evidence/final-binary-full-incomplete-85bb44a.json +160 -0
  28. package/docs/native-terminal-semantics-evidence/final-binary-layout-85bb44a.json +149 -0
  29. package/docs/native-terminal-semantics-evidence/final-binary-layout-interactive-85bb44a.json +159 -0
  30. package/docs/native-terminal-semantics-evidence/final-binary-model-picker-escape-unchanged-85bb44a.json +44 -0
  31. package/docs/native-terminal-semantics-evidence/final-binary-model-picker-exact-identity-85bb44a.json +47 -0
  32. package/docs/native-terminal-semantics-evidence/final-binary-model-picker-unchanged-model-incomplete-85bb44a.json +58 -0
  33. package/docs/native-terminal-semantics-evidence/final-binary-model-selftest.json +16 -0
  34. package/docs/native-terminal-semantics-evidence/final-binary-picker-cancel-incomplete-85bb44a.json +62 -0
  35. package/docs/native-terminal-semantics-evidence/focused-clipboard-title-stale-binary.json +161 -0
  36. package/docs/native-terminal-semantics-evidence/layout-stale-binary-observation-not-accepted.json +153 -0
  37. package/docs/native-terminal-semantics-evidence/picker-latest-incomplete-attempt.json +62 -0
  38. package/docs/native-terminal-semantics-evidence/picker-previous-probe-pass.json +61 -0
  39. package/docs/native-terminal-semantics.md +89 -0
  40. package/docs/native-upgrade.md +175 -0
  41. package/docs/opencode-composed-source-review.md +89 -0
  42. package/docs/opencode-migration.md +225 -9
  43. package/docs/opencode-owned-runtime.md +241 -0
  44. package/docs/opencode-runtime.md +12 -0
  45. package/docs/opencode-theme-provider-proof/README.md +55 -0
  46. package/docs/opencode-theme-provider-proof/live-theme-api-base.patch +122 -0
  47. package/docs/opencode-theme-provider-proof/plugin-theme-provider.patch +107 -0
  48. package/docs/opencode-theme-provider-proof/session-ui-base.patch +1217 -0
  49. package/docs/owned-host-controls-proof.md +39 -0
  50. package/docs/owned-runtime-release-manifest.md +42 -0
  51. package/docs/owned-visual-clear-proof.md +40 -0
  52. package/docs/patches/opencode-v2.0.32-glyph-spinner-test-isolation-v1.patch +50 -0
  53. package/docs/patches/opencode-v2.0.32-glyphs.patch +3670 -0
  54. package/docs/patches/opencode-v2.0.32-help-dispatch.patch +156 -0
  55. package/docs/patches/opencode-v2.0.32-live-theme-api.patch +122 -0
  56. package/docs/patches/opencode-v2.0.32-session-ui-combined-v1.patch +5272 -0
  57. package/docs/patches/opencode-v2.0.32-session-ui-combined-v2.patch +6052 -0
  58. package/docs/patches/opencode-v2.0.32-session-ui-combined-v3.patch +8657 -0
  59. package/docs/patches/opencode-v2.0.32-session-ui-combined-v4.patch +9928 -0
  60. package/docs/patches/opencode-v2.0.32-session-ui-combined-v5.patch +13965 -0
  61. package/docs/patches/opencode-v2.0.32-session-ui.patch +5137 -0
  62. package/docs/release-notes-beta.1.md +60 -0
  63. package/docs/release-notes-beta.2.md +60 -0
  64. package/docs/release-notes-native-draft.md +73 -0
  65. package/docs/release-notes-preview.10.md +121 -0
  66. package/docs/release-notes-preview.11.md +76 -0
  67. package/docs/release-notes-preview.12.md +55 -0
  68. package/docs/release-notes-preview.13.md +68 -0
  69. package/docs/release-notes-preview.9.md +130 -0
  70. package/docs/source-preview.md +120 -0
  71. package/evaluate.mjs +28 -1
  72. package/lib/budget.mjs +1 -1
  73. package/lib/cloud/client.mjs +13 -7
  74. package/lib/codegraph.mjs +1 -1
  75. package/lib/delivery-review.mjs +19 -6
  76. package/lib/delivery.mjs +3 -2
  77. package/lib/environment.mjs +8 -0
  78. package/lib/guidance.mjs +1 -1
  79. package/lib/opencode/cli-runtime.mjs +1188 -0
  80. package/lib/opencode/cli.mjs +253 -0
  81. package/lib/opencode/credentials.mjs +63 -8
  82. package/lib/opencode/demo.mjs +53 -0
  83. package/lib/opencode/evaluation-budget-plugin/index.ts +3 -0
  84. package/lib/opencode/evaluation.mjs +32 -12
  85. package/lib/opencode/headless.mjs +22 -5
  86. package/lib/opencode/provider-policy.mjs +23 -0
  87. package/lib/opencode/review.mjs +37 -16
  88. package/lib/opencode/runtime-artifact.mjs +335 -0
  89. package/lib/opencode/runtime-github-transport.mjs +121 -0
  90. package/lib/opencode/runtime-release.json +36 -0
  91. package/lib/opencode/runtime.mjs +299 -20
  92. package/lib/opencode/service.mjs +77 -35
  93. package/lib/opencode/session-options.mjs +6 -2
  94. package/lib/opencode/update.mjs +222 -0
  95. package/lib/opencode/workspace.mjs +1 -1
  96. package/lib/planning-advice.mjs +2 -2
  97. package/lib/providers/experiential.mjs +2 -2
  98. package/lib/providers/names.mjs +1 -1
  99. package/lib/tui/framing.mjs +1 -80
  100. package/lib/tui/models.mjs +1 -1
  101. package/lib/update.mjs +10 -1
  102. package/package.json +33 -7
  103. package/plugins/carthagent/README.md +23 -0
  104. package/plugins/carthagent/src/bootstrap.ts +1 -1
  105. package/plugins/carthagent/src/daily-evidence.mjs +57 -0
  106. package/plugins/carthagent/src/daily-quests-rpc.ts +50 -0
  107. package/plugins/carthagent/src/daily-source-rpc.ts +52 -0
  108. package/plugins/carthagent/src/index.ts +71 -24
  109. package/plugins/carthagent/src/rpc.ts +51 -6
  110. package/plugins/carthagent/src/server/codegraph.ts +12 -5
  111. package/plugins/carthagent/src/server/daily-quests-rpc.ts +277 -0
  112. package/plugins/carthagent/src/server/daily-source-rpc.ts +243 -0
  113. package/plugins/carthagent/src/server/delivery.ts +227 -112
  114. package/plugins/carthagent/src/server/framing.mjs +80 -0
  115. package/plugins/carthagent/src/server/policy.ts +1 -1
  116. package/plugins/carthagent/src/server/providers.ts +65 -36
  117. package/plugins/carthagent/src/server/session-controls.ts +3 -1
  118. package/plugins/carthagent/src/server/ship-agents.ts +77 -0
  119. package/plugins/carthagent/src/server/ship-context.mjs +60 -0
  120. package/plugins/carthagent/src/server/ship-guidance.ts +41 -0
  121. package/plugins/carthagent/src/server/ship-rpc.ts +71 -0
  122. package/plugins/carthagent/src/server/voyages-rpc.ts +280 -0
  123. package/plugins/carthagent/src/testing.ts +5 -0
  124. package/plugins/carthagent/src/tui.tsx +506 -0
  125. package/plugins/carthagent/src/ui/client.ts +127 -0
  126. package/plugins/carthagent/src/ui/commands.ts +70 -0
  127. package/plugins/carthagent/src/ui/daily-editor-focus.mjs +52 -0
  128. package/plugins/carthagent/src/ui/daily-editor.mjs +4 -0
  129. package/plugins/carthagent/src/ui/daily-quests-events.mjs +18 -0
  130. package/plugins/carthagent/src/ui/daily-quests-state.mjs +218 -0
  131. package/plugins/carthagent/src/ui/daily-quests.tsx +235 -0
  132. package/plugins/carthagent/src/ui/host-state.ts +42 -0
  133. package/plugins/carthagent/src/ui/model-command.ts +32 -0
  134. package/plugins/carthagent/src/ui/native-navigation.ts +23 -0
  135. package/plugins/carthagent/src/ui/native-review.d.mts +33 -0
  136. package/plugins/carthagent/src/ui/native-review.mjs +159 -0
  137. package/plugins/carthagent/src/ui/resume-session.mjs +34 -0
  138. package/plugins/carthagent/src/ui/select-mouse.ts +17 -0
  139. package/plugins/carthagent/src/ui/session-preferences.d.mts +7 -0
  140. package/plugins/carthagent/src/ui/session-preferences.mjs +14 -0
  141. package/plugins/carthagent/src/ui/theme-provision.d.mts +3 -0
  142. package/plugins/carthagent/src/ui/theme-provision.mjs +134 -0
  143. package/plugins/carthagent/src/ui/voyages-navigation-state.mjs +56 -0
  144. package/plugins/carthagent/src/ui/voyages-navigation.tsx +131 -0
  145. package/plugins/carthagent/src/ui/voyages-state.mjs +165 -0
  146. package/plugins/carthagent/src/ui/voyages.tsx +131 -0
  147. package/plugins/carthagent/src/ui/workspace-live.ts +61 -0
  148. package/plugins/carthagent/src/ui/workspace.tsx +379 -0
  149. package/plugins/carthagent/src/voyages-rpc.ts +64 -0
  150. package/plugins/carthagent/src/workspace-rpc.ts +36 -0
  151. package/plugins/carthagent/tests/commands.test.ts +107 -0
  152. package/plugins/carthagent/tests/session-preferences.test.mjs +41 -0
  153. package/plugins/carthagent/tests/voyages-navigation.test.tsx +269 -0
  154. package/plugins/carthagent/themes/carthage.json +67 -0
  155. package/plugins/carthagent/tui.ts +26 -1
  156. package/script/ctg/build-owned-runtime.sh +166 -0
  157. package/tests/budget-engine.test.mjs +4 -3
  158. package/tests/cli.test.mjs +52 -96
  159. package/tests/cloud-client.test.mjs +2 -2
  160. package/tests/daily-evidence.test.mjs +62 -0
  161. package/tests/delivery-review.test.mjs +57 -2
  162. package/tests/delivery.test.mjs +22 -1
  163. package/tests/experiential-extension.test.mjs +2 -2
  164. package/tests/experiential.test.mjs +1 -1
  165. package/tests/fixtures/native-discovery-plugin/server.ts +15 -0
  166. package/tests/generate-owned-runtime-release.test.mjs +354 -0
  167. package/tests/installed-runtime-contract.test.mjs +43 -0
  168. package/tests/native-cli-host-smoke.mjs +457 -0
  169. package/tests/native-daily-editor-focus.test.mjs +213 -0
  170. package/tests/native-daily-editor.test.mjs +43 -0
  171. package/tests/native-daily-quests-layout.test.mjs +55 -0
  172. package/tests/native-daily-quests-rpc.test.mjs +456 -0
  173. package/tests/native-daily-quests-ui.test.mjs +778 -0
  174. package/tests/native-daily-source.test.mjs +525 -0
  175. package/tests/native-demo-ui.test.mjs +48 -0
  176. package/tests/native-evaluation-admission.test.mjs +24 -0
  177. package/tests/native-fixture-browser-cleanup.test.mjs +65 -0
  178. package/tests/native-fixture-runtime.test.mjs +111 -0
  179. package/tests/native-fixture-stop-diagnostics.test.mjs +67 -0
  180. package/tests/native-glyph-pty.test.mjs +107 -0
  181. package/tests/native-manual-projects.test.mjs +170 -0
  182. package/tests/native-model-command.test.mjs +67 -0
  183. package/tests/native-owned-runtime-env.test.mjs +140 -0
  184. package/tests/native-paired-guards.test.mjs +464 -0
  185. package/tests/native-provider-policy.test.mjs +33 -0
  186. package/tests/native-pty-invocation.test.mjs +114 -0
  187. package/tests/native-pty-runtime.test.mjs +45 -0
  188. package/tests/native-resume-session.test.mjs +46 -0
  189. package/tests/native-review-consumer.test.mjs +286 -0
  190. package/tests/native-runtime-identity.test.mjs +214 -0
  191. package/tests/native-select-mouse.test.mjs +23 -0
  192. package/tests/native-ship-guidance.test.mjs +16 -0
  193. package/tests/native-ship-parity.test.mjs +526 -0
  194. package/tests/native-ship-plan.test.mjs +85 -0
  195. package/tests/native-ship-rpc.test.mjs +83 -0
  196. package/tests/native-ui-commands.test.mjs +6 -0
  197. package/tests/native-voyages-layout.test.mjs +28 -0
  198. package/tests/native-voyages-navigation.test.mjs +169 -0
  199. package/tests/native-voyages-rpc.test.mjs +397 -0
  200. package/tests/native-voyages-ui.test.mjs +307 -0
  201. package/tests/opencode-atomic-write.test.mjs +55 -0
  202. package/tests/opencode-cli.test.mjs +1312 -0
  203. package/tests/opencode-codegraph-plugin.test.mjs +47 -0
  204. package/tests/opencode-delivery.test.mjs +16 -0
  205. package/tests/opencode-providers.test.mjs +248 -20
  206. package/tests/opencode-runtime.test.mjs +597 -8
  207. package/tests/opencode-session-controls.test.mjs +15 -0
  208. package/tests/opencode-ship-rpc.test.mjs +71 -0
  209. package/tests/opencode-update.test.mjs +475 -0
  210. package/tests/opencode-workspace.test.mjs +51 -2
  211. package/tests/owned-runtime-publish-workflow.test.mjs +477 -0
  212. package/tests/release-workflow.test.mjs +46 -0
  213. package/tests/runtime-artifact.test.mjs +269 -0
  214. package/tests/runtime-development-trust.test.mjs +231 -0
  215. package/tests/runtime-github-transport.test.mjs +132 -0
  216. package/tests/runtime-token-env.test.mjs +23 -0
  217. package/tests/server.test.mjs +3 -1
  218. package/tests/ship-telemetry.test.mjs +1 -1
  219. package/tests/source-preview.test.mjs +253 -0
  220. package/tests/test_native_terminal_probe.py +76 -0
  221. package/tests/test_native_terminal_semantics.py +232 -0
  222. package/tests/tui.test.mjs +2 -2
  223. package/tests/update.test.mjs +42 -5
  224. package/tests/verify-draft-runtime-gate.test.mjs +280 -0
  225. package/tests/verify-owned-runtime-release.test.mjs +371 -0
  226. package/tests/workspace-live.test.mjs +127 -0
  227. package/tools/benchmark/diagnose-request.mjs +59 -36
  228. package/tools/benchmark/eval-common.mjs +3 -3
  229. package/tools/benchmark/evaluators.test.mjs +4 -4
  230. package/tools/benchmark/guard.test.mjs +35 -2
  231. package/tools/benchmark/guard.ts +20 -7
  232. package/tools/benchmark/planning-startup.test.mjs +30 -34
  233. package/tools/benchmark/runner.mjs +12 -7
  234. package/tools/benchmark/runner.test.mjs +23 -7
  235. package/tools/benchmark/upstream-error.test.mjs +16 -2
  236. package/tools/generate-owned-runtime-release.mjs +217 -0
  237. package/tools/installed-runtime-contract.mjs +16 -0
  238. package/tools/manual-runtime-manifest.mjs +39 -0
  239. package/tools/native-fixture-browser-cleanup.mjs +59 -0
  240. package/tools/native-fixture-stop-diagnostics.mjs +45 -0
  241. package/tools/native-fixture.mjs +199 -40
  242. package/tools/native-glyph-helpers.py +127 -0
  243. package/tools/native-glyph-pty.py +144 -0
  244. package/tools/native-manual-projects.mjs +259 -0
  245. package/tools/native-manual.mjs +338 -0
  246. package/tools/native-model-picker-acceptance.py +306 -0
  247. package/tools/native-owned-runtime-env.sh +47 -0
  248. package/tools/native-paired-guards.mjs +282 -0
  249. package/tools/native-paired-manifest.mjs +72 -0
  250. package/tools/native-paired-orchestration.sh +51 -0
  251. package/tools/native-plugin-readiness.mjs +33 -0
  252. package/tools/native-plugin-readiness.test.mjs +53 -0
  253. package/tools/native-pty-invocation.mjs +26 -0
  254. package/tools/native-pty-runtime.mjs +83 -0
  255. package/tools/native-pty-smoke.py +147 -24
  256. package/tools/native-public-repo-shell-result.mjs +13 -0
  257. package/tools/native-public-repo-shell-result.test.mjs +28 -0
  258. package/tools/native-runtime-identity.mjs +201 -0
  259. package/tools/native-slash-acceptance-env.py +38 -0
  260. package/tools/native-terminal-semantics.py +882 -0
  261. package/tools/owned-shell-observer/index.ts +16 -0
  262. package/tools/owned-shell-observer/package.json +1 -0
  263. package/tools/owned-visual-clear-env.py +48 -0
  264. package/tools/owned-visual-clear-model.py +21 -0
  265. package/tools/pinned-owned-runtime-inputs.mjs +46 -0
  266. package/tools/prepare-native-manual.mjs +122 -0
  267. package/tools/run-native-terminal-paired.sh +403 -0
  268. package/tools/runtime-token-env.mjs +8 -0
  269. package/tools/seed-native-switch-fixture.mjs +79 -0
  270. package/tools/test-native-controls.mjs +3 -1
  271. package/tools/test-native-daily-quests.mjs +65 -0
  272. package/tools/test-native-default-cli.mjs +106 -0
  273. package/tools/test-native-delivery-host.mjs +102 -20
  274. package/tools/test-native-evaluation.mjs +7 -3
  275. package/tools/test-native-glyph-pty.mjs +94 -0
  276. package/tools/test-native-host.mjs +91 -65
  277. package/tools/test-native-outcomes.mjs +3 -1
  278. package/tools/test-native-package.mjs +206 -38
  279. package/tools/test-native-performance.mjs +26 -0
  280. package/tools/test-native-product.mjs +90 -0
  281. package/tools/test-native-pty.mjs +34 -9
  282. package/tools/test-native-public-repo.mjs +224 -0
  283. package/tools/test-native-refresh-reentry.mjs +106 -0
  284. package/tools/test-native-report.mjs +27 -20
  285. package/tools/test-native-review.mjs +75 -0
  286. package/tools/test-native-runtime.mjs +120 -0
  287. package/tools/test-native-ship-models.mjs +176 -0
  288. package/tools/test-native-ship-walkthrough.mjs +96 -0
  289. package/tools/test-native-slash-commands.mjs +125 -0
  290. package/tools/test-native-slash-commands.py +242 -0
  291. package/tools/test-native-swe-host.mjs +224 -55
  292. package/tools/test-native-tasks.mjs +77 -0
  293. package/tools/test-native-terminal-performance.py +887 -0
  294. package/tools/test-native-terminal-readiness.sh +85 -0
  295. package/tools/test-native-terminal-semantics-installed.mjs +38 -0
  296. package/tools/test-native-visual-clear-installed.mjs +48 -0
  297. package/tools/test-owned-host-controls.mjs +238 -0
  298. package/tools/test-owned-opencode-runtime.mjs +35 -0
  299. package/tools/test-owned-visual-clear-env.py +120 -0
  300. package/tools/test-owned-visual-clear.py +373 -0
  301. package/tools/verify-draft-runtime-gate.mjs +138 -0
  302. package/tools/verify-owned-runtime-release.mjs +114 -0
  303. package/tools/verify-release-version.mjs +21 -1
@@ -0,0 +1,175 @@
1
+ # Native Carthagent beta: upgrade and migration guide
2
+
3
+ **1.1.0-beta.1** uses the native console by default. `ctg native` is a compatibility
4
+ alias; `CTG_NATIVE` no longer selects a different console. Stable 1.0.7 remains
5
+ the legacy release. Select the beta explicitly through the beta channel or its
6
+ exact published version.
7
+
8
+ See the [beta.1 release notes](release-notes-beta.1.md) and
9
+ [launch-readiness report](launch-readiness-live-results.md) for current evidence
10
+ and beta limitations.
11
+
12
+ ## Before you try it
13
+
14
+ - The native route uses a checksum-pinned CTG-owned runtime compatible with OpenCode **2.0.32**. It
15
+ does not use, install over, update, or borrow authentication from a regular
16
+ OpenCode installation. Selecting the beta release is explicit; no shell-wide routing toggle is needed.
17
+ - Native OpenCode settings, auth, database/sessions, state, and cache belong to
18
+ the CTG profile under `~/.carthagent/opencode/`. `CTG_OPENCODE_HOME` can
19
+ override that profile root. The old CLI's Carthagent data is separate too.
20
+ Project/worktree delivery reports and native task metadata live in their
21
+ respective workspaces; task state is recorded in `.harness/`.
22
+ - Existing Pi sessions are **read-only archives**, not native sessions. There
23
+ is no transcript continuation, conversion, or import. Keep the old
24
+ installation and source data until you have independently confirmed the
25
+ archive contains what you need.
26
+ - Read the exact release notes for installed-package acceptance and platform
27
+ limitations. Earlier migration findings remain in the
28
+ [migration ledger](opencode-migration.md) and
29
+ [terminal evidence](native-terminal-semantics.md); they are historical evidence,
30
+ not a claim that every command or platform has been verified by a live model.
31
+
32
+ ## Try the native route from a checkout
33
+
34
+ The default resolver acquires only the platform archive pinned by the packaged
35
+ release manifest, validates source/patch/lock and archive/executable checksums,
36
+ and caches it in the private Carthagent profile. It never falls back to a system
37
+ or upstream binary after selecting the owned runtime. An explicit developer
38
+ artifact is a separate, validated staging path—not an end-user update mechanism.
39
+
40
+ After installing dependencies in a checkout of a published source tag:
41
+
42
+ ```sh
43
+ node bin/ctg.mjs --help
44
+ node bin/ctg.mjs
45
+ node bin/ctg.mjs "Investigate the failing tests"
46
+ ```
47
+
48
+ The native service refreshes after a verified owned runtime or launcher update.
49
+ Sessions and credentials remain in the profile; an unauthenticated or foreign
50
+ process is never stopped just because its registration looks stale.
51
+
52
+ The native launcher preserves familiar commands and aliases: `tui`/`ui`/
53
+ `interactive`, `resume`/`sessions`, `continue`, `status`/`s`, `check`/`c`,
54
+ `hash`/`fingerprint`, `login`/`auth`, `account`/`cloud`, `serve`/`web`/`start`,
55
+ and `update`/`upgrade`. See [native CLI](native-cli.md) for implemented flags,
56
+ failure behavior, and unsupported options. In particular, do not assume an old
57
+ flag is enforced merely because its name is accepted: unsupported `--bash-cap`
58
+ and `--isolate` fail closed, and policy/budget flags require enforcement
59
+ capabilities advertised by the active plugin.
60
+
61
+ ## Projects, tasks, worktrees, and sessions
62
+
63
+ The native UI is based on OpenCode's project and session model. A CTG task
64
+ creates an OpenCode worktree and a separate root session located in that
65
+ worktree; CTG stores the task/parent relationship in workspace metadata. It
66
+ does not create a nested OpenCode child session. Worktree separation provides
67
+ independent checkout directories, but do not infer that every host, credential,
68
+ or external process behavior is isolated by a worktree.
69
+
70
+ Resume and continue operate on native sessions associated with the current
71
+ workspace. A project workspace view may present known task, worktree, and
72
+ session records together. These do not turn legacy transcripts into sessions.
73
+ Normal project discovery, host UI behavior, and complete cross-platform
74
+ interaction remain acceptance items; consult the ledger rather than assuming a
75
+ preview feature is fully supported.
76
+
77
+ ## Legacy archive (read-only)
78
+
79
+ The archive CLI supports list/search/read/export. Configure or retain the
80
+ legacy session archive at its existing location; the native adapter exposes it
81
+ for reading and does not mutate those transcripts:
82
+
83
+ ```sh
84
+ node bin/ctg.mjs archive list
85
+ node bin/ctg.mjs archive search "query"
86
+ node bin/ctg.mjs archive read <archive-id>
87
+ node bin/ctg.mjs archive export <archive-id> --format jsonl
88
+ ```
89
+
90
+ Archive output is not an import format. Start a new native session and provide
91
+ any context you need yourself; no session identity or execution history is
92
+ carried forward.
93
+
94
+ ## Headless commands and JSONL
95
+
96
+ `-p`/`--print` runs a headless task and prints assistant text. `--json` emits
97
+ JSONL lifecycle records for the selected native session, including tool starts,
98
+ tool results, completed assistant messages, and a terminal outcome. `ctg status
99
+ --json` is a separate versioned delivery status snapshot, not execution JSONL.
100
+ Headless invocations need a prompt; when stdout is not a TTY the CLI selects
101
+ headless mode automatically. A resume-picker request in headless mode becomes
102
+ continuation of the latest native session for that workspace.
103
+
104
+ ```sh
105
+ node bin/ctg.mjs -p "Summarize this project"
106
+ node bin/ctg.mjs --json -p "Run the declared checks"
107
+ node bin/ctg.mjs status --json
108
+ ```
109
+
110
+ JSONL consumers should use the terminal outcome and exit status, not the
111
+ presence of assistant text alone: successful completion requires the completed
112
+ assistant turn and a successful native terminal outcome. Failed, interrupted,
113
+ and unresolved turns are not success. `-p` text is not a live tool-event stream.
114
+
115
+ ## Release installation and update
116
+
117
+ Only published releases are installable; a draft is not an update. From an
118
+ installation with channel support:
119
+
120
+ ```sh
121
+ ctg update --channel beta --check
122
+ ctg update --channel beta
123
+ ctg
124
+ ```
125
+
126
+ The exact-version installation form is:
127
+
128
+ ```sh
129
+ npm install -g carthagent@1.1.0-beta.1
130
+ ```
131
+
132
+ `ctg update --check` checks for
133
+ an available release. `lib/opencode/update.mjs` contains the shared,
134
+ release-validated update operation: for npm-installed Carthagent it installs
135
+ the validated exact release spec; for a source clone it requires a clean
136
+ working tree, fetches the selected origin tag into a private ref, resolves that
137
+ fetched tag to a commit, checks out the commit detached, then reinstalls
138
+ dependencies and the global package. It does not overwrite existing local tags
139
+ or proceed with dirty files. The native CLI's current `update` command path is
140
+ separate: it installs the validated release spec for npm installs and refuses
141
+ to check out into its active source tree, including a clean clone. Use the
142
+ non-forced manual procedure below for that source-tree path; do not assume
143
+ uncomposed CLI/UI wiring changes this behavior. Preserve and review local work
144
+ first:
145
+
146
+ ```sh
147
+ git status --short
148
+ git diff # review and preserve any edits before proceeding
149
+ git fetch origin --tags
150
+ git checkout --detach v1.1.0-beta.1 # published release; no force option
151
+ npm ci
152
+ ```
153
+
154
+ Do not discard or overwrite local changes to make this procedure succeed. If
155
+ the checkout has work you need, commit it or preserve it outside the checkout
156
+ before changing revisions; resolve conflicts or recovery deliberately rather
157
+ than using a destructive reset. The updater is Carthagent's updater, not a
158
+ regular OpenCode updater. Beta.1 inherits the native-default CLI from the previews.
159
+ Use `ctg update --channel stable` to return to the legacy stable release; neither
160
+ channel switching nor service refresh deletes profiles or legacy transcripts.
161
+ Do not install a moving branch or guess an unpublished version.
162
+
163
+ ## Acceptance status and help
164
+
165
+ The current acceptance contract and evidence are maintained in:
166
+
167
+ - [Preview.9 candidate notes and remaining release gates](release-notes-preview.9.md)
168
+ - [Historical migration delivery ledger](opencode-migration.md#delivery-ledger)
169
+ - [Native runtime acceptance matrix](native-compatibility.md)
170
+ - [Terminal probe and evidence caveats](native-terminal-semantics.md)
171
+ - [Historical native migration draft (not current routing/install guidance)](release-notes-native-draft.md)
172
+
173
+ These documents intentionally distinguish component/test results from complete
174
+ installed-product acceptance. A command's presence, successful unit test, or
175
+ documentation entry does not by itself mark an acceptance gate complete.
@@ -0,0 +1,89 @@
1
+ # Final OpenCode source composition review checkpoint
2
+
3
+ This review checkpoint composes patches on clean upstream OpenCode `v2.0.32`
4
+ source `843a6c514e606b436a7fe713422ace0a93ad3d61`, in this order:
5
+
6
+ 1. Session/runtime patch (pre-composition SHA-256
7
+ `36379e0bf4ec0f63929c12b5ac96dfc73df60b124cef9f4adeb36d86287bc92f`).
8
+ 2. Approved natural `/help` patch (SHA-256
9
+ `c1ce7d983be8ecdd3481b16da103fb32d144b0ec01f894915a110b46acdc6fe5`).
10
+ 3. Approved live-theme API patch (SHA-256
11
+ `0bcb1462688c00a09564e9874c3e01429baf92fe004bfc6400704fb24133c123`).
12
+ 4. Approved glyph-v4 patch (SHA-256
13
+ `37d93c0dfd5c52bd4536136fb53618580a29d682644848433f3b2ee4726d98a4`).
14
+
15
+ The approved base combined source patch is
16
+ `docs/patches/opencode-v2.0.32-session-ui.patch`; its SHA-256 is
17
+ `81e86a4c139e02ebd077e1b635a62ea804ec60b6ae20100893cb6d9f73b06d62`. A
18
+ separate combined candidate is recorded at
19
+ `docs/patches/opencode-v2.0.32-session-ui-combined-v3.patch` with SHA-256
20
+ `75d6484112881481b178bde583f9ff4e5d36cbac2fdf19d000339795b9485ce2`; it adds
21
+ the approved spinner test-isolation and real-provider theme proof patches. The
22
+ candidate recipe and packaged runtime identity both pin this digest; the
23
+ historical base recipe/runtime identity remain recorded in Git, and the base
24
+ patch remains unchanged. Frozen
25
+ lockfile installation, TUI typecheck, and the exact combined glyph/keymap/theme/
26
+ provider run passed (19 tests / 188 assertions in one Bun process with
27
+ `--timeout 60000`). The workflow fixture passed all 6 tests with Node 26 after
28
+ updating its patch-path assertion. Independent review approved corrected head
29
+ `0e38142bff30ca2a8b2a66394e5055d541fce489`, including an isolated Windows-style
30
+ checkout-to-recipe handoff reaching Bun installation and dirty-input rejection.
31
+ These source checks do not establish final-artifact acceptance. The three
32
+ standalone review patches remain
33
+ separately published and unchanged. The base composition was
34
+ applied to a clean detached upstream checkout and its reverse-application check
35
+ and `git diff --check` pass. The glyph patch’s two `/help`-overlapping files
36
+ were integrated by applying `/help` first and glyph v4 afterward; the resulting
37
+ autocomplete/prompt imports and keymap test changes are present once in the
38
+ combined patch.
39
+
40
+ Source approvals and author test reports are recorded separately: glyph v4
41
+ source approval (11 tests / 146 assertions), `/help` keymap suite (5/5), and
42
+ live-theme focused tests/typecheck. These do not approve the combined patch and
43
+ do not substitute for an independent composition review. This is a source-review
44
+ checkpoint only: do not build until the exact combined patch is independently
45
+ approved. The previous v1 patch was built on Linux x64 before the Linux runner
46
+ marquee assertion was corrected; that binary is historical and is not an
47
+ artifact for this v2 digest. Final v2 binaries and cross-platform prebuilds,
48
+ theme PTY, glyph matrix, `/help`, and title restoration proofs remain outstanding.
49
+
50
+ The unrelated draft-release asset transport design is intentionally not
51
+ implemented by this composition. A separate review must decide whether a
52
+ repo-scoped, ephemeral CI credential may be used only for authenticated draft
53
+ asset retrieval through the production resolver, preserving the packaged
54
+ manifest/digests and default no-override selection. No credential values or
55
+ transport code were used here.
56
+
57
+ Reproducible workflow fixture coverage lives in
58
+ `tests/owned-runtime-publish-workflow.test.mjs`. It extracts the literal
59
+ validate, verify, and upload Bash blocks from this workflow YAML and executes
60
+ them with bounded temporary fixtures. It verifies review-branch prebuild SHA
61
+ binding and rejects publish validation from a non-default branch; the positive
62
+ publish path verifies five tiny USTAR archives and the packaged trust root,
63
+ then a fake `gh` captures exactly seven assets for byte comparison. Tampered
64
+ archive and stale annotated-tag cases both assert zero captured uploads. This is
65
+ automated mocked workflow coverage, not a real dispatch or release. Although
66
+ the fixture accepts a reviewed-branch prebuild SHA, GitHub only registers
67
+ `workflow_dispatch` for a workflow file present on the default branch. This
68
+ workflow was subsequently registered by reviewed bootstrap #197, merged as
69
+ `bd1292c8c4` after green CI. Parent dispatched real prebuild run `39089640210`
70
+ against exact source `70882269e25ebcb62c843f9265345342b9e6844d` for planned
71
+ version `1.1.0`. Its build results remain pending.
72
+
73
+ This focused TUI candidate verification is not the parent repository's full
74
+ quality run and does not include the separate native CLI test-browser isolation
75
+ change `d4983b57328a187e8be6bc0e2c6bd2dda7518920`; apply or merge that change in
76
+ its applicable parent integration lineage before running or claiming parent
77
+ full quality. It is not part of this upstream OpenCode patch.
78
+
79
+ The release workflow permits a non-publishing prebuild from a reviewed branch
80
+ to avoid requiring product merge before native candidate generation. It binds
81
+ the requested source SHA to that dispatch's exact workflow commit. The publish
82
+ phase remains default-branch-only and compares the candidate with the final
83
+ tagged package trust root; prebuild is not merge or release approval.
84
+
85
+ The pinned external release generator still reads the legacy patch pathname.
86
+ Both candidate-generation calls therefore copy the candidate patch bytes to
87
+ that pathname only inside the disposable CTG checkout used by the workflow;
88
+ the checked-in base patch remains unchanged. Fixture assertions cover both
89
+ adaptation points.