@xingular/harness 1.1.1 → 1.3.1-unstable.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 (264) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/README.md +36 -28
  3. package/dist/cli.js +10837 -6159
  4. package/dist/sdk/accounts/accounts.d.ts +27 -3
  5. package/dist/sdk/accounts/accounts.js +78 -24
  6. package/dist/sdk/accounts/secrets.d.ts +12 -0
  7. package/dist/sdk/accounts/secrets.js +114 -7
  8. package/dist/sdk/accounts/store.d.ts +26 -1
  9. package/dist/sdk/accounts/store.js +1 -1
  10. package/dist/sdk/agents/builtin.js +18 -4
  11. package/dist/sdk/agents/planResearch.d.ts +27 -0
  12. package/dist/sdk/agents/planResearch.js +82 -0
  13. package/dist/sdk/agents/profiles.d.ts +5 -1
  14. package/dist/sdk/agents/profiles.js +21 -5
  15. package/dist/sdk/annotations/pageScript.js +349 -48
  16. package/dist/sdk/annotations/part.js +34 -23
  17. package/dist/sdk/annotations/store.d.ts +7 -0
  18. package/dist/sdk/annotations/store.js +13 -5
  19. package/dist/sdk/browser/backend.d.ts +16 -0
  20. package/dist/sdk/browser/backend.js +17 -0
  21. package/dist/sdk/browser/contracts.d.ts +19 -0
  22. package/dist/sdk/browser/contracts.js +116 -0
  23. package/dist/sdk/browser/tools.d.ts +1 -4
  24. package/dist/sdk/browser/tools.js +14 -91
  25. package/dist/sdk/capabilities/runSnapshot.js +10 -4
  26. package/dist/sdk/cli.js +5 -4
  27. package/dist/sdk/commands/list.d.ts +3 -0
  28. package/dist/sdk/commands/list.js +75 -0
  29. package/dist/sdk/commands/registry.d.ts +258 -0
  30. package/dist/sdk/commands/registry.js +48 -0
  31. package/dist/sdk/commands/routes.d.ts +16 -0
  32. package/dist/sdk/commands/routes.js +33 -0
  33. package/dist/sdk/core/commandBudget.d.ts +23 -0
  34. package/dist/sdk/core/commandBudget.js +57 -0
  35. package/dist/sdk/core/index.js +17 -1
  36. package/dist/sdk/core/interactiveProfile.d.ts +46 -0
  37. package/dist/sdk/core/interactiveProfile.js +143 -0
  38. package/dist/sdk/core/shell.d.ts +20 -0
  39. package/dist/sdk/core/shell.js +73 -0
  40. package/dist/sdk/core/workspace.d.ts +13 -0
  41. package/dist/sdk/core/workspace.js +88 -0
  42. package/dist/sdk/core/workspaceBashTool.d.ts +20 -0
  43. package/dist/sdk/core/workspaceBashTool.js +50 -0
  44. package/dist/sdk/core/workspaceSandbox.d.ts +41 -0
  45. package/dist/sdk/core/workspaceSandbox.js +360 -0
  46. package/dist/sdk/core/workspaceWriteOperations.d.ts +33 -0
  47. package/dist/sdk/core/workspaceWriteOperations.js +224 -0
  48. package/dist/sdk/doctor/checks.js +71 -12
  49. package/dist/sdk/doctor/types.d.ts +2 -2
  50. package/dist/sdk/harness.d.ts +7 -0
  51. package/dist/sdk/harness.js +42 -2
  52. package/dist/sdk/hub/hub.js +5 -3
  53. package/dist/sdk/index.d.ts +8 -3
  54. package/dist/sdk/index.js +4 -1
  55. package/dist/sdk/pi/runtime.d.ts +2 -1
  56. package/dist/sdk/pi/runtime.js +2 -2
  57. package/dist/sdk/plugins/builtin.js +32 -15
  58. package/dist/sdk/plugins/builtinRegistry.d.ts +10 -3
  59. package/dist/sdk/plugins/builtinRegistry.js +30 -8
  60. package/dist/sdk/plugins/catalogue.js +2 -1
  61. package/dist/sdk/plugins/commandPrefix.d.ts +8 -0
  62. package/dist/sdk/plugins/commandPrefix.js +21 -0
  63. package/dist/sdk/plugins/firstParty.d.ts +1 -1
  64. package/dist/sdk/plugins/firstParty.js +8 -2
  65. package/dist/sdk/plugins/install.d.ts +6 -2
  66. package/dist/sdk/plugins/install.js +29 -5
  67. package/dist/sdk/plugins/inventory.js +6 -5
  68. package/dist/sdk/plugins/manifest.d.ts +2 -0
  69. package/dist/sdk/plugins/manifest.js +2 -1
  70. package/dist/sdk/plugins/surfaces.d.ts +5 -0
  71. package/dist/sdk/plugins/surfaces.js +11 -0
  72. package/dist/sdk/plugins/types.d.ts +15 -0
  73. package/dist/sdk/prompt/compile.d.ts +14 -0
  74. package/dist/sdk/prompt/compile.js +65 -31
  75. package/dist/sdk/prompt/standard.d.ts +17 -0
  76. package/dist/sdk/prompt/standard.js +21 -0
  77. package/dist/sdk/server/methods.js +22 -2
  78. package/dist/sdk/server/remote.js +36 -11
  79. package/dist/sdk/sessions/compactionCheckpoint.d.ts +11 -0
  80. package/dist/sdk/sessions/compactionCheckpoint.js +79 -0
  81. package/dist/sdk/sessions/continuation.d.ts +7 -2
  82. package/dist/sdk/sessions/continuation.js +11 -6
  83. package/dist/sdk/sessions/contracts.d.ts +190 -4
  84. package/dist/sdk/sessions/contracts.js +71 -8
  85. package/dist/sdk/sessions/control.d.ts +72 -0
  86. package/dist/sdk/sessions/control.js +158 -0
  87. package/dist/sdk/sessions/initialBash.d.ts +7 -0
  88. package/dist/sdk/sessions/initialBash.js +7 -0
  89. package/dist/sdk/sessions/planMode.d.ts +14 -3
  90. package/dist/sdk/sessions/planMode.js +74 -17
  91. package/dist/sdk/sessions/registry.d.ts +1 -1
  92. package/dist/sdk/sessions/registry.js +2 -2
  93. package/dist/sdk/sessions/runStore.d.ts +14 -0
  94. package/dist/sdk/sessions/runStore.js +38 -1
  95. package/dist/sdk/sessions/runner.d.ts +40 -2
  96. package/dist/sdk/sessions/runner.js +161 -13
  97. package/dist/sdk/sessions/sessions.d.ts +23 -3
  98. package/dist/sdk/sessions/sessions.js +225 -22
  99. package/dist/sdk/sessions/subagentService.d.ts +24 -0
  100. package/dist/sdk/sessions/subagentService.js +225 -26
  101. package/dist/sdk/sessions/subagents.d.ts +10 -1
  102. package/dist/sdk/sessions/subagents.js +4 -0
  103. package/dist/sdk/sessions/workSlice.d.ts +106 -0
  104. package/dist/sdk/sessions/workSlice.js +329 -0
  105. package/dist/sdk/sessions/workspaceBoundary.d.ts +15 -0
  106. package/dist/sdk/sessions/workspaceBoundary.js +46 -0
  107. package/dist/sdk/terminal/browserControl.js +2 -1
  108. package/dist/sdk/terminal/controller.d.ts +31 -3
  109. package/dist/sdk/terminal/controller.js +81 -29
  110. package/dist/sdk/terminal/opentui/ansi.d.ts +25 -0
  111. package/dist/sdk/terminal/opentui/ansi.js +192 -0
  112. package/dist/sdk/terminal/opentui/model.d.ts +163 -0
  113. package/dist/sdk/terminal/opentui/model.js +482 -0
  114. package/dist/sdk/terminal/opentui/subagentsWidget.d.ts +3 -3
  115. package/dist/sdk/terminal/opentui/subagentsWidget.js +7 -5
  116. package/dist/sdk/terminal/opentui/theme.d.ts +43 -0
  117. package/dist/sdk/terminal/opentui/theme.js +88 -0
  118. package/dist/sdk/terminal/piExtension.d.ts +6 -1
  119. package/dist/sdk/terminal/piExtension.js +177 -63
  120. package/dist/sdk/terminal/standalone.d.ts +7 -0
  121. package/dist/sdk/terminal/standalone.js +72 -13
  122. package/dist/sdk/terminal/subagentMonitor.d.ts +28 -6
  123. package/dist/sdk/terminal/subagentMonitor.js +61 -9
  124. package/dist/sdk/terminal/terminals.d.ts +26 -2
  125. package/dist/sdk/terminal/terminals.js +325 -43
  126. package/dist/sdk/terminal/trajectory.d.ts +6 -1
  127. package/dist/sdk/terminal/trajectory.js +8 -0
  128. package/dist/sdk/terminal/tui/annotateCommand.d.ts +1 -1
  129. package/dist/sdk/terminal/tui/annotateCommand.js +3 -3
  130. package/dist/sdk/terminal/tui/chrome.d.ts +4 -0
  131. package/dist/sdk/terminal/tui/chrome.js +13 -0
  132. package/dist/sdk/terminal/tui/commandPages.d.ts +3 -1
  133. package/dist/sdk/terminal/tui/commandPages.js +17 -4
  134. package/dist/sdk/terminal/tui/commands.d.ts +6 -0
  135. package/dist/sdk/terminal/tui/commands.js +213 -124
  136. package/dist/sdk/terminal/tui/list.d.ts +14 -1
  137. package/dist/sdk/terminal/tui/list.js +96 -14
  138. package/dist/sdk/terminal/tui/pageOverlay.js +21 -5
  139. package/dist/sdk/terminal/tui/pages/annotatePage.d.ts +1 -1
  140. package/dist/sdk/terminal/tui/pages/browserPage.js +5 -4
  141. package/dist/sdk/terminal/tui/pages/hubPage.d.ts +14 -1
  142. package/dist/sdk/terminal/tui/pages/hubPage.js +192 -28
  143. package/dist/sdk/terminal/tui/pages/notesPage.d.ts +5 -5
  144. package/dist/sdk/terminal/tui/pages/notesPage.js +18 -18
  145. package/dist/sdk/terminal/tui/pages/pluginsPage.d.ts +8 -6
  146. package/dist/sdk/terminal/tui/pages/pluginsPage.js +206 -28
  147. package/dist/sdk/terminal/tui/pages/subagentsPage.d.ts +1 -0
  148. package/dist/sdk/terminal/tui/pages/subagentsPage.js +104 -19
  149. package/dist/sdk/terminal/tui/pages/usagePage.d.ts +43 -0
  150. package/dist/sdk/terminal/tui/pages/usagePage.js +370 -0
  151. package/dist/sdk/terminal/tui/piAdapter.d.ts +1 -2
  152. package/dist/sdk/terminal/tui/piAdapter.js +3 -5
  153. package/dist/sdk/terminal/tui/pluginCommands.d.ts +2 -0
  154. package/dist/sdk/terminal/tui/pluginCommands.js +13 -9
  155. package/dist/sdk/terminal/tui/runtime.js +23 -3
  156. package/dist/sdk/terminal/tui/sessionPicker.d.ts +40 -0
  157. package/dist/sdk/terminal/tui/sessionPicker.js +141 -0
  158. package/dist/sdk/tools/checkpoint.d.ts +27 -0
  159. package/dist/sdk/tools/checkpoint.js +154 -0
  160. package/dist/sdk/tools/getCapabilities.d.ts +31 -0
  161. package/dist/sdk/tools/getCapabilities.js +34 -0
  162. package/dist/sdk/tools/sessionName.d.ts +2 -0
  163. package/dist/sdk/tools/sessionName.js +5 -3
  164. package/dist/sdk/tools/spawnSubagent.js +11 -8
  165. package/dist/sdk/tools/todo.d.ts +15 -0
  166. package/dist/sdk/tools/todo.js +64 -0
  167. package/dist/sdk/usage/analytics.d.ts +20 -0
  168. package/dist/sdk/usage/analytics.js +151 -0
  169. package/dist/sdk/usage/ledger.d.ts +38 -0
  170. package/dist/sdk/usage/ledger.js +142 -0
  171. package/dist/sdk/usage/limits/adapters.d.ts +11 -0
  172. package/dist/sdk/usage/limits/adapters.js +349 -0
  173. package/dist/sdk/usage/limits/capture.d.ts +8 -0
  174. package/dist/sdk/usage/limits/capture.js +47 -0
  175. package/dist/sdk/usage/limits/http.d.ts +12 -0
  176. package/dist/sdk/usage/limits/http.js +51 -0
  177. package/dist/sdk/usage/limits/normalize.d.ts +15 -0
  178. package/dist/sdk/usage/limits/normalize.js +211 -0
  179. package/dist/sdk/usage/limits/service.d.ts +30 -0
  180. package/dist/sdk/usage/limits/service.js +176 -0
  181. package/dist/sdk/usage/limits/types.d.ts +65 -0
  182. package/dist/sdk/usage/limits/types.js +1 -0
  183. package/dist/sdk/usage/serverMethods.d.ts +3 -0
  184. package/dist/sdk/usage/serverMethods.js +22 -0
  185. package/dist/sdk/usage/service.d.ts +32 -0
  186. package/dist/sdk/usage/service.js +66 -0
  187. package/dist/sdk/usage/settings.d.ts +7 -0
  188. package/dist/sdk/usage/settings.js +28 -0
  189. package/dist/sdk/usage/types.d.ts +60 -0
  190. package/dist/sdk/usage/types.js +4 -0
  191. package/dist/terminal-opentui.js +9204 -4812
  192. package/dist/terminal-pi.js +1848 -272
  193. package/docs/architecture/00-overview.md +1 -1
  194. package/docs/architecture/01-extension-points.md +1 -1
  195. package/docs/architecture/02-sessions-and-runs.md +169 -36
  196. package/docs/architecture/04-prompt.md +55 -15
  197. package/docs/architecture/06-plugins-and-capabilities.md +36 -15
  198. package/docs/architecture/07-tools-and-gate.md +131 -25
  199. package/docs/architecture/08-memory-and-history.md +4 -2
  200. package/docs/architecture/09-accounts-and-connectors.md +39 -3
  201. package/docs/architecture/10-server-protocol.md +71 -9
  202. package/docs/architecture/11-terminal.md +148 -60
  203. package/docs/architecture/12-storage.md +30 -2
  204. package/docs/architecture/13-world-tools.md +22 -1
  205. package/docs/architecture/14-surfaces-and-parity.md +58 -8
  206. package/docs/architecture/README.md +20 -17
  207. package/docs/architecture/proposals/PROP-0006-run-checklist.md +2 -0
  208. package/docs/architecture/proposals/PROP-0017-page-annotations.md +6 -2
  209. package/docs/architecture/proposals/PROP-0018-annotation-queue-and-app-targets.md +1 -1
  210. package/docs/architecture/proposals/PROP-0031-plugin-command-owner-namespaces.md +54 -0
  211. package/docs/architecture/proposals/PROP-0032-planning-quality.md +196 -0
  212. package/docs/architecture/proposals/PROP-0033-compaction-plan-checkpoints.md +75 -0
  213. package/docs/architecture/proposals/PROP-0034-conversation-fast-mode.md +120 -0
  214. package/docs/architecture/proposals/PROP-0035-retain-subagent-status.md +47 -0
  215. package/docs/architecture/proposals/PROP-0036-first-class-harness-commands.md +59 -0
  216. package/docs/architecture/proposals/PROP-0037-workspace-write-boundary.md +63 -0
  217. package/docs/architecture/proposals/PROP-0038-annotate-open-shadow-roots.md +73 -0
  218. package/docs/architecture/proposals/PROP-0039-workspace-boundary-hardening.md +139 -0
  219. package/docs/architecture/proposals/PROP-0040-one-launch-path.md +87 -0
  220. package/docs/architecture/proposals/PROP-0041-bounded-work-slices.md +258 -0
  221. package/docs/architecture/proposals/PROP-0042-usage-and-provider-limits.md +127 -0
  222. package/docs/architecture/proposals/PROP-0043-read-only-plan-bash.md +74 -0
  223. package/docs/architecture/proposals/PROP-0044-work-slice-defaults.md +93 -0
  224. package/docs/architecture/proposals/PROP-0045-rename-checklist-to-todo.md +132 -0
  225. package/docs/architecture/proposals/PROP-0046-progress-aware-stall-guards.md +82 -0
  226. package/docs/architecture/proposals/PROP-0047-plugins-hub-separation.md +122 -0
  227. package/docs/architecture/proposals/README.md +24 -6
  228. package/docs/decisions/ADR-0001-owned-terminal.md +1 -1
  229. package/docs/decisions/ADR-0021-required-command-namespaces.md +1 -1
  230. package/docs/decisions/ADR-0031-plugin-command-owner-namespaces.md +37 -0
  231. package/docs/decisions/ADR-0032-compaction-run-checkpoints.md +33 -0
  232. package/docs/decisions/ADR-0033-plan-mode-research-delegation.md +47 -0
  233. package/docs/decisions/ADR-0034-first-class-harness-terminal-commands.md +25 -0
  234. package/docs/decisions/ADR-0035-one-launch-path.md +40 -0
  235. package/docs/decisions/ADR-0036-workspace-write-operation-boundary.md +54 -0
  236. package/docs/decisions/ADR-0037-usage-ledger-and-provider-limits.md +44 -0
  237. package/docs/decisions/ADR-0038-plan-bash-os-read-only.md +29 -0
  238. package/docs/decisions/ADR-0039-progress-aware-stall-guards.md +39 -0
  239. package/docs/decisions/ADR-0040-architecture-change-workflow.md +31 -0
  240. package/docs/decisions/ADR-0041-plugins-hub-separation.md +41 -0
  241. package/docs/decisions/ADR-0042-windows-shell-without-sandbox.md +40 -0
  242. package/docs/decisions/ADR-0043-parents-continue-stopped-subagents.md +49 -0
  243. package/docs/doctor.md +14 -1
  244. package/docs/experiments/EXP-0003-performance-audit/data/session-runtime-replication.json +420 -0
  245. package/docs/experiments/EXP-0003-performance-audit/data/session-runtime.json +420 -0
  246. package/docs/experiments/EXP-0003-performance-audit/data/terminal-compact.json +376 -0
  247. package/docs/experiments/EXP-0003-performance-audit/data/terminal-history.json +422 -0
  248. package/docs/experiments/EXP-0003-performance-audit/data/terminal-question.json +95 -0
  249. package/docs/experiments/EXP-0003-performance-audit/data/terminal-wide.json +1036 -0
  250. package/docs/experiments/EXP-0003-performance-audit/plan.md +109 -0
  251. package/docs/experiments/EXP-0003-performance-audit/results.md +151 -0
  252. package/docs/handoff-2026-10-25-app-parity-and-solo-tabs.md +202 -0
  253. package/docs/parity.md +83 -27
  254. package/docs/releases/1.1.1.md +28 -0
  255. package/docs/releases/1.2.0.md +49 -0
  256. package/docs/releases/1.3.0.md +21 -0
  257. package/docs/releases/4.0.0.md +10 -9
  258. package/docs/releases/README.md +35 -30
  259. package/docs/study/00-index.md +3 -0
  260. package/docs/study/STUDY-0003-long-horizon-runs.md +210 -0
  261. package/docs/terminal-tui.md +162 -82
  262. package/package.json +4 -3
  263. package/dist/sdk/tools/checklist.d.ts +0 -9
  264. package/dist/sdk/tools/checklist.js +0 -54
package/docs/parity.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Capability parity register
2
2
 
3
- **Status:** descriptive register, as of 2026-10-24. The binding rules are
3
+ **Status:** descriptive register, as of 2026-11-19. The binding rules are
4
4
  [14 Surfaces and parity](architecture/14-surfaces-and-parity.md) (`INV-PAR-1`–`INV-PAR-4`).
5
5
 
6
6
  Every capability a person can use is a Harness capability. The standalone terminal (`xagent`)
@@ -12,44 +12,98 @@ Host-only surfaces (presentation a terminal cannot show, `INV-PAR-4`) are not li
12
12
  host keeps its own register. The App's is
13
13
  [`App/docs/architecture/app-only-surfaces.md`](../../App/docs/architecture/app-only-surfaces.md).
14
14
 
15
- Status: **parity** (both surfaces pass), **terminal only**, **host only** (a gap), **planned**,
16
- **host-backed** (needs a host object; terminal fallback named).
15
+ Status: **parity** only where both surfaces passed acceptance; **implemented** means source routes
16
+ exist but acceptance is not certified; **terminal only**, **host only**, **partial**, **planned**,
17
+ and **host-backed** (needs a host object; terminal fallback named). A slash-command row marked
18
+ implemented is not a parity claim; acceptance is tracked per command.
17
19
 
18
20
  ## Register
19
21
 
20
22
  | Capability | Harness owner | Method or tool | Terminal surface | App surface | Status | Gap |
21
23
  |---|---|---|---|---|---|---|
22
24
  | Sessions and turns | `sessions/` | `sessions.run`, `terminal.*` | the terminal itself | Solo chat | parity | — |
23
- | Plan mode | `sessions/planMode.ts` | `plan: true` | `/plan`, Shift+Tab, plan card | plan request, PlanCard | parity | — |
24
- | Bash command mode | `sessions/sessions.ts` | `initialBashCommand` | `!command` | `!command` in the composer | parity | — |
25
+ | Plan mode | `sessions/planMode.ts` | `plan: true` | `/plan`, Shift+Tab, plan card; bounded plan/todo context is restored after compaction | plan request, PlanCard; shared Harness checkpoint behavior | parity | — |
26
+ | Capability discovery | `tools/getCapabilities.ts` | read-only `get_capabilities` | terminal extension reports Pi's active tools and schemas; shared plan allowlist includes it | structured Harness run uses the same tool; no duplicate App-owned tool | implemented; acceptance not recertified | — |
27
+ | Bash command mode | `sessions/sessions.ts`, `sessions/initialBash.ts` | `initialBashCommand`; Bash `workspaceWriteScope` | `!command` defaults to workspace; `!outside command` asks before running once | same `!command` and `!outside command` composer semantics | parity | — |
28
+ | Workspace-scoped writes | `core/workspace.ts`, `sessions/workspaceBoundary.ts`, `core/workspaceBashTool.ts`, `core/workspaceSandbox.ts`, `core/workspaceWriteOperations.ts` | pinned non-root `RunRecord.workspaceRoot`; native `edit`/`write`; Bash scope | revalidated atomic native writes; external-hard-link scan and Bash sandbox (Windows: no sandbox, each Bash call asks once, plan-mode Bash refused; ADR-0042); complete escaped outside command in scrollable approval details (deny if too small); no output-triggered retry | same Harness gate and full approval action in scrollable App details; App policy can tighten scope; Full Permission remains the eligible explicit bypass | parity | — |
25
29
  | Side questions | `sessions/sideQuestions.ts` | `sideQuestions.start/read/interrupt`; terminal `terminal.sideQuestions.*` | `/btw` contextual dock with scroll and copy | side-question dock through the shared service | parity | — |
26
30
  | Approvals and standing approvals | `sessions/approvals.ts` | `approvals.*` | decision dock, `/permissions` | approvals dock, settings | parity | — |
27
- | Questions (`ask_user`) | `tools/askUser.ts` | `ask_user`; terminal `ask_user_question` | plan-mode dock: strict aligned columns, bounded body scroll, 80×24 source sketch viewport; connected structural projection with high-confidence boundary normalization (PROP-0026, PROP-0028) | plan-mode form accepts the same 80×24 ASCII source contract with literal preview and accessible overflow; no typography change required | parity; terminal projection verified in isolated fixtures | — |
28
- | Subagents | `sessions/subagentService.ts` | `spawn_subagent` (requires `title`, PROP-0030), `subagents.*` | `/subagents` page and live rows under the status line (mark, profile, parent-set title, `n of m tasks`) | reply trajectory | parity | — |
29
- | Agent profiles | `agents/profiles.ts` | `spawn_subagent { agent }`, `agents.list/get/create/remove`; terminal `terminal.agents.*` | `/agents` page: browse, create, edit in `$EDITOR`, copy, delete | not shown; `RunRecord.profile` available | terminal done; App planned | PAR-010 |
30
- | Run checklist | `tools/checklist.ts` | `checklist_write`, `runs.checklist`; terminal `checklist` telemetry | registered in terminal sessions and their subagents; each write shows as a checklist block in the transcript; a subagent row shows its `n of m tasks` | not shown | terminal done; App planned | PAR-001 |
31
+ | Questions (`ask_user`) | `tools/askUser.ts` | shared `ask_user` tool | plan-mode dock: strict aligned columns, bounded body scroll, 80×24 source sketch viewport; connected structural projection with high-confidence boundary normalization (PROP-0026, PROP-0028) | plan-mode form accepts the same 80×24 ASCII source contract with literal preview and accessible overflow; no typography change required | parity; terminal projection verified in isolated fixtures | — |
32
+ | Subagents | `sessions/subagentService.ts` | `spawn_subagent` (requires `title`, PROP-0030; `continue` resumes a stopped child, ADR-0043), `subagents.*`; plan mode allows only named eligible read-only research profiles | `/subagents` page with the `main` row pinned first, and live rows under the status line (mark, profile, parent-set title, `n of m tasks`), both rebuilt from saved runs when a conversation reopens; plan-mode research delegation uses the same Harness gate | reply trajectory; plan-mode research delegation uses the same Harness gate | parity | — |
33
+ | Agent profiles | `agents/profiles.ts` | `spawn_subagent { agent }`, `agents.list/get/create/remove`; terminal `terminal.agents.*` | `/agents` page: browse, create, edit in `$EDITOR`, copy, delete | Solo `/agents` lists profiles; profile details and management are not wired | partial | PAR-010 |
34
+ | Run todo list | `tools/todo.ts` | `todo_write`, `runs.todo` (`runs.checklist` deprecated); terminal `todo` telemetry | registered in terminal sessions and their subagents; each write shows as a todo block in the transcript; `/todo` shows the current list; a subagent row shows its `n of m tasks` | `/todo` shows the current list on demand; each write is not rendered inline | terminal done; App shows it on demand | PAR-001 |
31
35
  | Continuation of a stopped run | `sessions/continuation.ts` | `continueFrom`, `runs.continuation` | not offered (`/resume` reopens history only) | not offered | planned | PAR-003 |
36
+ | Bounded replies and checkpoints (PROP-0041) | `sessions/workSlice.ts`, `tools/checkpoint.ts`, `sessions/runner.ts` | `checkpoint_write`, `workSlice`, `runs.continuation.checkpoint`, `checkpoint`/`heartbeat` events | guard on every terminal reply with the shared tool; the handoff is recorded on the run; no checkpoint card or slice control yet | not wired | implemented; terminal card, App presentation and `/slices` open | PAR-004 |
32
37
  | Accounts | `accounts/` | `accounts.*` | `/accounts` | Accounts | parity | — |
33
38
  | Models and effort | `accounts/choices.ts` | — | `/model`, `/effort` | composer pickers | parity | — |
34
39
  | Skills | `plugins/`, `tools/dispatch.ts` | `skill_load` | `$name`, `/skill:name`, browser Skills tab | Capability, composer | parity | — |
35
- | Plugins and Hub | `plugins/`, `hub/` | `plugins.*`, `hub.*` | resource browser | Capability | parity | — |
40
+ | Plugins and Hub | `plugins/`, `hub/` | `plugins.*`, `hub.*` | full-screen `/plugins` local manager; separate full-screen `/hub` Community catalog with bounded registry/document Preview (no Pi-package Preview) | local Plugins manager; Community Hub with payload Preview for non-package entries | parity | — |
36
41
  | Connected apps (MCP) | `mcp/` | `connections.*`, broker tools | resource browser Connections tab | Connections | parity | — |
37
42
  | Web search and page reading | `web/` | `web_search`, `web_fetch` | world tools | world tools | parity | — |
38
- | Isolated browser | `browser/` | `browser_*` | world tools, headed on request, `/settings` Browser tab | App WebKit tabs (host-backed) | host-backed | — |
39
- | Page annotations | `annotations/` (PROP-0017, PROP-0018) | `annotations.*`, `annotations.capture.*`, `page_notes_*` | `/plugin:annotate` pane (inspector, queue, app windows over DevTools or the page bridge), `/plugin:notes` | website tab Annotate panel (inspector, queue to the focused thread, app windows through `annotations.capture.*`) | parity in the working tree; native WKWebView gestures unaccepted | PAR-011 |
40
- | Managed worktrees | `worktrees/` (PROP-0016) | `worktrees.*` | `--worktree`, `/worktree`, `xagent worktree` | working group **Create worktree** (`worktrees.create`) | partial | PAR-012 |
41
- | Wiki notes (model tools) | `wiki/`, `tools/` | `wiki_*` | `xagent-wiki` shell command only | tools | host only | PAR-002 |
42
- | History and trajectory (model tools) | `history/` | `history_*`, `trajectory_*` | shell command, `/trajectory` page | tools, trajectory views | host only | PAR-002 |
43
+ | Isolated browser | `browser/` | shared `browser_*` schemas | isolated world tools, headed on request, `/settings` Browser tab | native WebKit: navigate, tabs, visible-text read and page scroll without refs; unsupported operations refuse explicitly | partial; native backend gap | PAR-015 |
44
+ | Web annotations | `annotations/` (PROP-0017, PROP-0018, PROP-0038) | `annotations.*`, `annotations.capture.*`, `page_notes_*` | `/annotate:` pane (also `/annotate:annotate`), `/annotate:notes` saved list | website tab Annotate panel (inspector, queue to the focused thread, app windows through `annotations.capture.*`) | parity in the working tree; native WKWebView gestures unaccepted | PAR-011 |
45
+ | Managed worktrees | `worktrees/` (PROP-0016) | `worktrees.*` | `--worktree`, `/worktree`, `xagent worktree` | Solo `/worktree` lists records only; Solo starts sessions in the project folder and has no worktree level | partial | PAR-012 |
46
+ | Wiki notes (model tools) | `wiki/`, `tools/` | `wiki_*` | `Terminals.ownTools` registers Wiki-read tools through the session socket; `xagent-wiki` remains a person-facing shell utility | structured Harness tools | implemented on both; acceptance not recertified | PAR-002: acceptance not recertified |
47
+ | History and trajectory (model tools) | `history/` | `history_*`, `trajectory_*` | `Terminals.ownTools` registers model tools through the session socket; `/trajectory` page; `/history` navigates session branches | structured tools and trajectory views | implemented on both; acceptance not recertified | PAR-002: acceptance not recertified |
43
48
  | Wiki browsing | `wiki/` | `wiki.*` | none | Wiki | host only | PAR-005 |
44
49
  | Variants and refinement | `variant/`, `refine/` | `harnesses.*`, `refine.*` | browser Variant tab (read-only), `xagent refine` | Harness screen | host only | PAR-004 |
45
- | Output trim and budget guard plugins | `plugins/firstParty.ts` | — | not loaded in terminals | loaded | host only | PAR-006 |
50
+ | Output trim and budget guard plugins | `plugins/firstParty.ts` | trusted first-party hooks | `firstParty.list` loads enabled hooks in `terminal/piExtension.ts` | structured Harness sessions load enabled hooks | implemented on both; acceptance not recertified | PAR-006: acceptance not recertified |
46
51
  | Doctor | `doctor/` | `doctor.*` | `/doctor` | diagnostics | parity | — |
47
52
  | Run inspection | `sessions/runStore.ts` | `runs.*` | `/trajectory`, `/log` | run views, analytics | parity | — |
48
- | Session catalog (sessions per folder) | — | — | per-folder history | Solo thread list | planned | PAR-008 |
49
- | Folder choice and recent folders | `core/projects.ts` | — | launch folder only | working groups | planned | PAR-009 |
53
+ | Usage analytics | `usage/` (PROP-0042) | `usage.summary`, `usage.sync` | `/usage:`, `/usage:analysis` page (Analysis tab) | not wired | terminal implemented; host planned | PAR-016 |
54
+ | Provider limits | `usage/limits/` (PROP-0042) | `usage.limits` | `/usage:limit` page (Limits tab) | not wired | terminal implemented; host planned | PAR-016 |
55
+ | Session catalog (sessions per folder) | `sessions/` saved-history controls; shared catalog not implemented | `sessions.*` controls; no cross-surface catalog method | `/session` selects native Pi histories in the current folder | `/session` reads `bridge.agent.threads(SOLO_ID)`, maps each thread to its project folder, and filters by current effective account; `all` broadens only this App list | planned; catalogs differ | PAR-008 |
56
+ | Folder choice and recent folders | project/worktree selection remains surface-specific | launch `cwd`, `--worktree`, `/worktree` | starts in launch folder; explicit worktree commands | Solo sidebar is Project › Session; new sessions use the project's folder, with no folder/worktree level | planned; no shared recent-folder picker | PAR-009 |
50
57
  | Computer control | — | `computer_*` (host tools) | unavailable, with reason | macOS bridge (host-backed) | host-backed | PAR-007 |
51
58
  | Shared files vault | — | `files_*` (host tools) | none | Files | host only | PAR-007 |
52
59
 
60
+ ## Core slash-command surfaces (PROP-0040)
61
+
62
+ These are the fixed `CORE_COMMANDS` entries. The App column records the current Solo source route,
63
+ not a claim that it has passed acceptance. `commands.list`, a handler-completeness test, and source
64
+ presence do not certify parity. Each command needs its own acceptance evidence; dynamic
65
+ plugin/extension, prompt-template and skill commands are listed by `commands.list` but are not in
66
+ this fixed table.
67
+
68
+ | Command | Terminal surface | App Solo route in source | Acceptance / remaining gap |
69
+ |---|---|---|---|
70
+ | `/help` | Command list and palette | Searchable command picker; selection fills the composer | Not certified per command |
71
+ | `/plan` | Plan request / mode toggle | Plan request; bare form toggles persistent plan mode; model Bash runs read-only (PROP-0043) | Not certified per command |
72
+ | `/btw` (`/side`) | Contextual side-question dock | Shared side-question service; bare form dismisses the dock | Not certified per command |
73
+ | `/new` | New conversation | Replaces focused tab with a draft; archives its saved session | Not certified per command |
74
+ | `/stop` | Interrupt current reply | Stops the focused session's reply | Not certified per command |
75
+ | `/session` (`/resume`) | Search/select native saved history in the current folder | Lists App Solo threads by folder and effective account; `all` widens only within that App list | PAR-008: separate catalogs; no native-history path opening; not certified |
76
+ | `/history` (`/tree`) | Navigate branches in the current native session | Calls `session.navigate` with stable native entry ID; same-session navigation, optional summary, no fork fallback | Route uses Harness `sessions.navigate`; per-command acceptance pending |
77
+ | `/fork` | Fork from a user message | Uses session tree/fork and opens the new session | Not certified per command |
78
+ | `/clone` | Clone the current branch | Uses session clone and opens the copy | Not certified per command |
79
+ | `/model` | Choose model | App model picker updates session runtime | Not certified per command |
80
+ | `/effort` | Choose reasoning effort | Updates session runtime effort | Not certified per command |
81
+ | `/thinking` | Toggle thinking display | Toggles transcript thinking visibility | Not certified per command |
82
+ | `/name` | Name the native session | Renames the saved session | Not certified per command |
83
+ | `/compact` | Compact current context | Runs Harness compact command | Not certified per command |
84
+ | `/copy` | Copy last reply | Copies last reply to the clipboard | Not certified per command |
85
+ | `/export` | Export HTML or JSONL | Runs Harness session export; relative paths resolve from the project folder | Not certified per command |
86
+ | `/trajectory` | Inspect recorded runs | Opens trajectory view for the requested or latest run | Not certified per command |
87
+ | `/reload` | Reload trusted resources and keybindings | Reloads Harness resources and refreshes command discovery | Not certified per command |
88
+ | `/accounts` | Accounts page | Opens App Accounts | Not certified per command |
89
+ | `/permissions` | Permissions page | Opens App approval settings | Not certified per command |
90
+ | `/harness` | Harness resource browser | Opens App Harness screen | Not certified per command |
91
+ | `/skills` | Skills browser shortcut | Opens Capability skills | Not certified per command |
92
+ | `/connections` | Connections browser | Opens App connectors | Not certified per command |
93
+ | `/mcp` | Connections browser shortcut | Opens the same App connectors view | Not certified per command |
94
+ | `/tools` | Tools page | Opens Capability tools | Not certified per command |
95
+ | `/plugins` | Full-screen local Plugins manager | Opens local Plugins manager | Not certified per command |
96
+ | `/hub` | Separate full-screen Community Hub catalog | Opens Community Hub | Not certified per command |
97
+ | `/components` | Components browser | Opens App Harness components | Not certified per command |
98
+ | `/settings` | Terminal settings | Opens App settings | Not certified per command |
99
+ | `/doctor` | Doctor checks, including explicitly confirmed live probes | Runs local readiness checks only | Not certified; App route does not expose live checks |
100
+ | `/worktree` | Managed-worktree page and actions | Lists worktrees; Solo has no typed create/status/remove methods wired, and no worktree level | PAR-012; management actions unavailable; not certified |
101
+ | `/subagents` | Live monitor and roster with the `main` row, restored on reopen | Opens latest run's trajectory, not a dedicated subagent roster | Not certified; surfaces differ |
102
+ | `/agents` | Browse/create/edit/copy/delete profiles | Lists profiles only; detail/create/remove methods are not wired into Solo | PAR-010; management actions unavailable; not certified |
103
+ | `/log` | Harness diagnostics and current run events | Opens latest run's trajectory, not a separate log reader | Not certified; surfaces differ |
104
+ | `/hotkeys` | Keyboard controls | Opens App shortcut settings | Not certified per command |
105
+ | `/quit` | Restore terminal and exit | Closes the focused Solo tab; does not exit the App | Not certified per command |
106
+
53
107
  The terminal-only display amendments [PROP-0026](architecture/proposals/PROP-0026-connected-sketch-display.md)
54
108
  and [PROP-0028](architecture/proposals/PROP-0028-normalize-question-wireframes.md) permit connected
55
109
  structural glyphs, frame-attached standalone dividers, and high-confidence boundary normalization
@@ -62,17 +116,19 @@ or live-model sketch quality.
62
116
 
63
117
  | ID | Gap | Planned change |
64
118
  |---|---|---|
65
- | PAR-001 | Checklist absent from the App | The terminal registers the tool and renders a checklist block; the App renders it too. |
66
- | PAR-002 | Wiki, history and trajectory reach terminal models only through a shell command | Register the harness tools in terminal sessions; retire the shell commands (drift D-4). |
119
+ | PAR-001 | Todo list not rendered inline in the App | Both surfaces can show the current list: the terminal renders each write as a todo block and `/todo` shows a snapshot; the App's `/todo` shows a read-only list. The App still does not draw an inline block for each write. |
120
+ | PAR-002 | Acceptance of terminal-model History/Wiki/skill tools | Source gap resolved: `Terminals.ownTools` registers History/trajectory, Wiki-read and skill tools over the session socket; `xagent-wiki` is a user-facing shell utility, not the model's only route. Acceptance has not been recertified in this documentation pass. |
67
121
  | PAR-003 | Continuation unused | `/resume` lists interrupted runs and continues one with `continueFrom`; the App offers Continue. |
68
122
  | PAR-004 | Refinement and adoption only in the App | Variant tab actions: start, candidates, adopt, trust. |
69
123
  | PAR-005 | Wiki browsing only in the App | A `/wiki` page over `wiki.*`. |
70
- | PAR-006 | First-party hook plugins not loaded in terminals | Load them through the terminal's trusted selection. |
124
+ | PAR-006 | Acceptance of terminal first-party hooks | Source gap resolved: enabled hooks are returned by protected `firstParty.list` and loaded by `terminal/piExtension.ts`. Acceptance has not been recertified in this documentation pass. |
71
125
  | PAR-007 | Host tools without a Harness owner | Decide each: computer control stays host-backed (terminal shows unavailable); the files vault becomes a Harness capability or is dropped. |
72
- | PAR-008 | Separate session catalogs | A Harness session catalog per folder, read by both front ends (needs a proposal). |
73
- | PAR-009 | Folder choice | Built on PAR-008: recent folders in both front ends. |
74
- | PAR-010 | Agent profiles absent from the App | An Agents screen over `agents.*`, and the profile name and colour on subagent rows (PROP-0029). |
75
- | PAR-011 | Page annotations | Harness, terminal and App source done (PROP-0017, PROP-0018, 2026-10-24): the App calls `annotations.*`, imports its old notes once, uses the `page_notes_*` tools, and has the Annotate panel. Open: acceptance of the inspector and selection gestures in the running App's WKWebView. |
76
- | PAR-012 | Managed worktrees | Harness and terminal done (PROP-0016). The App creates through `worktrees.create`; its groups do not yet offer hand off, prune, restore or managed worktrees per thread. |
77
- | PAR-014 | Connected terminal sketch display | Closed by [PROP-0026 verification](evidence/terminal-connected-sketches/README.md) and extended by [PROP-0028 verification](evidence/terminal-wireframe-normalization/README.md): production PTY fixtures cover connected corners/tees, title-bearing rules, missing and whitespace-shifted side edges, internal table widths, frame-attached dividers, resize/panning and unchanged raw persistence/answers. Harness and host checks passed. Host literal rendering remains permitted; no host implementation change was required. This is fixture verification, not an every-font or live-model guarantee. |
126
+ | PAR-008 | Separate session catalogs | Proposal approved; shared catalog is not implemented. Terminal `/session` selects native Pi history in the current folder. App `/session` reads Solo `agent.threads`, maps threads through Solo project groups, and filters to the current effective account and folder; `/session all` broadens only within that App catalog. It cannot open an arbitrary native session path. No cross-surface catalog or visibility guarantee exists. |
127
+ | PAR-009 | Shared folder/recent-project choice | Terminal starts from its launch `cwd` and can switch through its worktree surface. App Solo uses Project › Session and starts new sessions in the selected project's folder; it has no folder/worktree level or shared recent-folder picker. |
128
+ | PAR-010 | Agent profile management in Solo | App Solo `/agents` can list profiles. Although the renderer allowlist includes `agents.get`, Solo does not wrap it; `agents.create/remove` are not exposed there. Profile details and management actions are unavailable, unlike terminal `/agents`. |
129
+ | PAR-011 | Web annotations | Harness, terminal and App source done (PROP-0017, PROP-0018, 2026-10-24): the App calls `annotations.*`, imports its old notes once, uses the `page_notes_*` tools, and has the Annotate panel. Open: acceptance of the inspector and selection gestures in the running App's WKWebView. PROP-0038 (2026-10-25): both front ends share the page helper, so open shadow roots work in the terminal's capture browser and the App's tabs alike; composed text capture, save, resolve and reveal were exercised in an isolated App WKWebView, inspector clicks were not. |
130
+ | PAR-012 | Managed worktree management in Solo | Harness and terminal provide full worktree operations (PROP-0016). Solo `/worktree` lists records only: its renderer adapter does not wire typed `worktrees.create`, `status` or `remove` calls, and Solo session creation stays at the project folder with no worktree level. Handoff, branch, prune, restore and setup-trust actions are also absent from this Solo surface. |
78
131
  | PAR-013 | Expanded question wireframes and terminal layout | Closed by [PROP-0025 verification](evidence/terminal-question-wireframes/README.md): four-size production PTY acceptance covers aligned compact columns, body scrolling, pinned controls, Shift+arrow sketch panning and live resizing. Host contracts accept 80×24 literal ASCII sketches (1,943 bytes); six isolated browser tests include exact-boundary content, accessible overflow and unchanged selection/answers. This is controlled fixture acceptance, not live-provider or native Tauri evidence. |
132
+ | PAR-014 | Connected terminal sketch display | Closed by [PROP-0026 verification](evidence/terminal-connected-sketches/README.md) and extended by [PROP-0028 verification](evidence/terminal-wireframe-normalization/README.md): production PTY fixtures cover connected corners/tees, title-bearing rules, missing and whitespace-shifted side edges, internal table widths, frame-attached dividers, resize/panning and unchanged raw persistence/answers. Harness and host checks passed. Host literal rendering remains permitted; no host implementation change was required. This is fixture verification, not an every-font or live-model guarantee. |
133
+ | PAR-016 | Usage analytics and provider limits in the App | The terminal has `/usage:analysis` and `/usage:limit` over `usage.*`. The App presents the same capability: an analytics view and a per-account provider limit view. |
134
+ | PAR-015 | Native WebKit browser-tool coverage | The shared browser schema is wider than the native backend. Native WebKit supports navigation, tabs, visible-text reads and scrolling without refs. Accessibility snapshots, snapshot-ref interactions (including click/type/select/ref-scroll), browser screenshots, waits and keyboard presses return an explicit `browser_unsupported` refusal before effects; there is no automatic switch to the isolated Harness browser. See page 13 and the native backend's `surfaces` note. |
@@ -0,0 +1,28 @@
1
+ # Xingular Harness 1.1.1
2
+
3
+ The first published release of the 1.1 line, and npm `latest`. It follows the published 1.0.0
4
+ baseline. The 1.1.0 tag was pushed, but its release run stopped before publishing, so nothing was
5
+ published under 1.1.0.
6
+
7
+ ## Agent profiles and named subagents
8
+
9
+ - A subagent can start from a named profile: the built-in `worker` and `explorer`, a person's
10
+ `<data root>/agents/<name>.md`, a repository's `.xingular/agents/<name>.md`, or a variant's c5
11
+ subagent. A profile narrows the child's tools and plugins and may choose its variant, model and
12
+ effort (PROP-0029, ADR-0030).
13
+ - The parent names each subagent. `spawn_subagent` requires a short `title`; `subagents.spawn`
14
+ takes an optional one (PROP-0030). The live roster, `/subagents` and the transcript show the
15
+ title.
16
+ - The terminal runs the checklist tool and shows each write as a checklist block. An in-progress
17
+ item shows a yellow dot, and a running subagent's row shows the working spinner in its profile's
18
+ colour.
19
+
20
+ ## Release pipeline
21
+
22
+ - The release pack and smoke scripts take their npm cache from the system temp folder. They
23
+ previously used a macOS-only path, which failed on Linux runners.
24
+ - The `/help` terminal check matches the documented grouped, scrollable help: it pages until every
25
+ group is seen, and its expected group is `Plugins`.
26
+
27
+ Checks for this release: `npm run ci` (148 test files, 1111 tests), the exact-tarball fresh
28
+ installation smoke test including the packaged terminal, and the release preflight.
@@ -0,0 +1,49 @@
1
+ # Xingular Harness 1.2.0
2
+
3
+ This release builds on the published 1.1.1 line.
4
+
5
+ ## Compatibility note
6
+
7
+ The filesystem root cannot be used as an active workspace, because that would make the boundary
8
+ meaningless. The workspace boundary is intentionally stricter: model-controlled writes outside the active project,
9
+ including writes to temporary directories, require a one-call approval unless the eligible Full
10
+ Permission switch is explicitly enabled. Remembered per-tool grants do not cover them; unattended
11
+ runs cannot request approval. The Full Permission switch remains off by default. A workspace with
12
+ an external hard-link alias blocks default-scope Bash until the alias is removed or the file is
13
+ replaced with a copy. Native writes use atomic replacement and preserve ordinary file mode where
14
+ possible; ACLs and extended attributes are not guaranteed to survive replacement. On macOS, the
15
+ sandbox also blocks workspace-local hard-link creation.
16
+
17
+ ## Workspace write boundary
18
+
19
+ Model-controlled file writes and Bash are scoped to the active project workspace by default. Native
20
+ write/edit operations revalidate the target and atomically replace the directory entry under an
21
+ OS-enforced write scope, so an in-workspace hard link does not modify an outside alias. Default Bash
22
+ scans for external hard links and runs in an OS sandbox that prevents cross-boundary hard-link
23
+ creation; unavailable or incomplete enforcement fails closed. Reads remain unchanged. Explicit
24
+ outside Bash writes require pre-execution one-call approval and run exactly once (`workspaceWriteScope:
25
+ 'outside'`; in the terminal composer, `!outside <command>`). The approval shows the complete quoted
26
+ command in scrollable details; if the terminal is too small to show both details and choices, the
27
+ request is denied. Command output cannot trigger approval or automatic retry. Runs record their
28
+ resolved `workspaceRoot`; older run records remain readable.
29
+ Protection from a separate same-user process outside Harness is not provided.
30
+
31
+ ## Planning and run continuity
32
+
33
+ Plan mode now requires evidence-grounded repository research and can delegate bounded read-only investigations to eligible research profiles. After compaction, active runs rehydrate the latest checklist and plan instructions. The terminal keeps the latest subagent status visible until its next run.
34
+
35
+ ## Terminal commands and annotations
36
+
37
+ Plugin-owned terminal commands use `/<owner-prefix>:<command>`, while Harness-owned routes such as `/doctor`, `/worktree`, `/trajectory`, `/subagents`, and `/agents` are first-class core commands. Prior command forms remain hidden compatibility aliases for one release; migrate scripts and keybindings to the canonical names.
38
+
39
+ The annotation inspector now supports content in open shadow roots, including composed selections and targets. Closed shadow roots and frames remain unsupported, and existing document-only annotations retain their behavior.
40
+
41
+ ## Terminal interaction
42
+
43
+ `/session` without a path now opens a searchable saved-session picker. Composer history includes user prompts, Bash commands and executed slash commands; browsing temporarily replaces the draft and restores its cursor, mode and attachments when it returns. Compact question docks now size each tab independently, keep nested sketches scrollable, and preserve page-footer hints at narrow widths.
44
+
45
+ ## Performance evidence
46
+
47
+ Adds reproducible PTY and session-runtime profiling and publishes the [EXP-0003 report](../experiments/EXP-0003-performance-audit/results.md). That report is a 1.1.1 baseline captured from a dirty worktree, not a clean 1.2.0 benchmark; it also records a failed narrow-width `/settings` footer check and other measurement limits.
48
+
49
+ Node 22.19 or later is required. Building or running the standalone terminal also requires Bun 1.3.14 or later. See the project license and notices for third-party terms.
@@ -0,0 +1,21 @@
1
+ # Xingular Harness 1.3.0
2
+
3
+ This minor release builds on 1.2.0 with clearer run progress, more reliable work-slice limits, bounded plan research, and distinct local-plugin and Community Hub experiences.
4
+
5
+ ## Run progress and work slices
6
+
7
+ - `session_name` guidance names the session before the first tool call when a request needs tools or changes state. Multi-step work uses `todo_write`; the prompt and tool descriptions share the same concrete guidance.
8
+ - The run checklist is now a todo list: `todo_write`, `todo.updated`, `runs.todo`, the `todo` plugin and a terminal todo block. `/todo` displays the current list without a model request; `/checklist` remains an alias. Existing `checklist.updated` events are still read, and legacy pinned tools and server methods remain available as deprecated compatibility aliases for one release.
9
+ - Work slices default to 320 tool calls and 60 minutes, with no token cap unless configured. Stall detection recognizes meaningful progress, bounds repeated calls by name and arguments within each reply, and resets its counters between replies.
10
+ - Plan research can delegate only to named profiles whose effective tools and plugins qualify for read-only research. The active plan and latest todo list are restored after compaction.
11
+
12
+ ## Plugins and Community Hub
13
+
14
+ - `/plugins` is a dedicated local plugin manager for installed packages, switching, trust, settings, install, update and removal. `/hub` is a separate Community catalog with Catalog and Installed views; Installed retains receipts from every channel and labels each channel.
15
+ - Hub shows cached or bundled catalog entries before refreshing remotely, and exposes origin, refresh time and stale/error status. Registry/document entries keep a bounded payload Preview; Pi packages have no payload Preview. Hub-owned packages remain pinned to receipt versions: removal is receipt-aware, and floating plugin updates cannot silently replace them.
16
+ - No catalog schema or storage migration is required; existing receipts, settings and trust remain intact. The broad `/harness` resource browser remains available.
17
+
18
+ ## Terminal
19
+
20
+ - Skill completion and syntax highlighting distinguish enabled skill invocations, command names and arguments while retaining the existing composer workflow.
21
+ - Doctor's Bash readiness check now requires the platform write-boundary sandbox. Its live check runs one fixed, no-network command through the same workspace boundary as normal Bash, reports only the exit status, and stays subject to policy without being widened by Full Permission.
@@ -8,11 +8,11 @@ terminal command namespace, documented below. Earlier published versions remain
8
8
 
9
9
  - Managed Git worktrees for sessions and the terminal, with leases, guarded setup scripts, handoff,
10
10
  pruning, restoration, and bounded snapshots that preserve uncommitted work.
11
- - Page annotations and queued notes, including capture, review, resolution, sharing, and delivery
12
- through Harness methods and terminal `/plugin:annotate` and `/plugin:notes` pages.
11
+ - Web annotations and queued comments, including capture, review, resolution, sharing, and delivery
12
+ through Harness methods and terminal `/annotate:` and `/annotate:notes` pages.
13
13
  - A unified terminal resource browser with persistent full-screen sections for browser tabs,
14
14
  plugins, skills, connectors, variants, and other Harness resources.
15
- - A full-screen `/trajectory` Runs/Events browser with searchable event details, selected-event
15
+ - A full-screen `/history:trajectory` Runs/Events browser with searchable event details, selected-event
16
16
  JSON, and a responsive split-pane layout.
17
17
  - Additional terminal controls for browser settings, plugin settings, and subagent activity.
18
18
  - Fix Node 22 SQLite parameter binding in recall and run indexes, and guard worktree Git calls
@@ -31,12 +31,13 @@ credentials are configured inside an isolated Harness account.
31
31
 
32
32
  The new server methods are additive. The published executable is `xagent`, replacing the earlier
33
33
  `xharness` candidate command without a compatibility alias; scripts using that candidate name must
34
- be updated. Required built-in plugin commands use unprefixed names:
35
- `/subagents`, `/trajectory`, `/doctor`, and `/worktree`. Optional built-in and third-party extension
36
- commands use `/plugin:<command>`; the optional page-annotation commands remain `/plugin:notes` and
37
- `/plugin:annotate`. Update scripts and keybindings that used the earlier candidate's prefixed forms
38
- for required commands. Existing session, variant, account, plugin, and browser contracts remain in
39
- place. Install this exact version or use the `latest` tag; historical versions remain available.
34
+ be updated. All plugin-owned terminal commands use `/<owner-prefix>:<command>`: for example,
35
+ `/subagents:subagents`, `/history:trajectory`, `/doctor:doctor`, `/worktrees:worktree`, and
36
+ `/annotate:annotate`. The annotation prefix root `/annotate:` opens the default capture pane, and
37
+ `/annotate:notes` opens saved annotations. Existing `/plugin:<command>` and former bare required-plugin
38
+ forms remain hidden compatibility aliases for one release. Existing session, variant, account, plugin,
39
+ and browser contracts remain in place. Install this exact version or use the `latest` tag; historical
40
+ versions remain available.
40
41
 
41
42
  ## Verification scope
42
43
 
@@ -1,41 +1,46 @@
1
1
  # Release procedure
2
2
 
3
- 1. Review and commit completed Harness changes on the active release branch. Review App
3
+ 1. Review and commit the completed Harness changes on the active release branch. Review App
4
4
  compatibility changes separately. Preserve old tags and exclude outputs, external references,
5
5
  and caches.
6
- 2. Run npm run ci and the required App checks on unrestricted macOS/Linux runners. Install Bun
7
- 1.4.2 and use Node 22.19.0 for the release build. Do not waive failing checks.
8
- 3. Run npm run release:pack. The unique output folder contains the candidate tarball, inventory,
9
- SHA-256 checksum and npm integrity. Run npm run release:smoke -- <tarball> --terminal for a fresh
10
- dependency installation and packaged SDK/server/terminal checks. --offline reuses the checkout's
11
- installed dependency tree and is only a local smoke check, not fresh-install acceptance.
12
- 4. Run npm run release:preflight. Verify npm scope ownership and trusted-publisher settings for
13
- tanntnny/xingular-harness and workflow release.yml, with direct publishing enabled. No login is
14
- started automatically. An already-used target version or unreachable registry blocks publication.
15
- 5. Present the exact commit, candidate inventory/hash, notes and check results for approval. Pushing
16
- the matching v<version> tag triggers publication; do not push it before this approval. Preserve
17
- historical tags.
18
- 6. After approval, push the reviewed commits and tag. The workflow runs both OS checks, packages
19
- and tests one candidate, then publishes that same tarball with OIDC provenance and --tag latest.
20
- No local publishing token is needed. It verifies registry integrity/provenance and creates a
21
- GitHub release. Inspect registry state before retrying any failed publication.
6
+ 2. Run `npm run ci` and the required App checks. Require green CI on Ubuntu and macOS; install Bun
7
+ 1.4.2 and use Node 22.19.0. Do not waive failing checks.
8
+ 3. Run `npm run release:pack` and inspect the candidate inventory, SHA-256 and npm integrity. Run
9
+ `npm run release:smoke -- <tarball> --terminal` for a fresh-install SDK/server/terminal check;
10
+ `--offline` is only a local smoke check, not fresh-install acceptance.
11
+ 4. Run `npm run release:preflight`. Verify npm scope ownership and trusted-publisher settings for
12
+ `tanntnny/xingular-harness` and `release.yml`, with direct publishing enabled. Configure the
13
+ GitHub `npm-publish` environment with required reviewers. No login is started automatically; an
14
+ already-used version, unreachable registry, or missing publishing configuration blocks release.
15
+ 5. Candidate approval is a pre-tag gate. Present the exact clean commit, candidate inventory,
16
+ SHA-256, npm integrity, release notes and check results for approval. Do not create or push the
17
+ matching `v<version>` tag until the person explicitly approves that candidate.
18
+ 6. After candidate approval, push the reviewed commit and matching tag. The workflow reruns CI on
19
+ both OSes, builds one candidate, and smoke-tests that exact tarball on both OSes. Before approving
20
+ the protected `npm-publish` environment, compare the uploaded candidate's commit, SHA-256 and npm
21
+ integrity with the approved local candidate; stop if they differ. This environment approval is a
22
+ separate publication gate. The publish job publishes that same tarball with OIDC provenance and
23
+ `--tag latest`, then verifies registry integrity/provenance and creates a GitHub release. No local
24
+ publishing token is needed. Inspect registry state before retrying any failed publication.
22
25
 
23
26
  A published version cannot be replaced. Corrections require a later version. This package's
24
27
  intentional 1.0.0 reset does not rewrite historical decisions or claim an ordering above older
25
28
  2.x–5.x development versions. Publication status and local evidence belong in the candidate report.
26
29
 
27
- ## 4.0.0 candidate preparation
30
+ ## Historical 4.0.0 candidate evidence
28
31
 
29
- Local checks on the candidate source passed: Harness `npm run ci` (typecheck, 134 test files with
30
- 1,004 passing tests and 3 skipped, plus the standalone proof); App typecheck, `npm test` (566 renderer
31
- tests, 47 sidecar tests, and 7 dev-signing tests passed with 1 skipped), layer check, and Rust tests
32
- (168 passed, 1 ignored); and App UI consistency. The registry lists 1.0.0 as `latest` and 4.0.0 as
33
- unused. The clean-tree release preflight passed. Exact-tarball packaging and a fresh-install smoke
34
- test passed, including the packaged SDK, types, CLI, server and isolated terminal. The tagged
35
- preflight, two-OS CI, and exact-tarball smoke are enforced by the release workflow. The npm
36
- trusted-publisher configuration for `tanntnny/xingular-harness` and `release.yml` requires
37
- package-owner verification; `npm login` does not verify that setting.
32
+ The following report records a prior candidate and registry snapshot; it is not evidence for any
33
+ current candidate or a description of the current release gates.
38
34
 
39
- The release workflow runs its full CI and exact-tarball smoke test on both Ubuntu and macOS before
40
- publishing. Branch upload and the matching release-tag push are separate GitHub side effects; only
41
- the tag triggers publication. No local test failure is waived by this note.
35
+ At the time, local checks on that candidate source passed: Harness `npm run ci` (typecheck, 134 test
36
+ files with 1,004 passing tests and 3 skipped, plus the standalone proof); App typecheck, `npm test`
37
+ (566 renderer tests, 47 sidecar tests, and 7 dev-signing tests passed with 1 skipped), layer check,
38
+ and Rust tests (168 passed, 1 ignored); and App UI consistency. The registry snapshot listed 1.0.0 as
39
+ `latest` and 4.0.0 as unused. Its clean-tree preflight, exact-tarball packaging and fresh-install
40
+ smoke test passed. The package-owner verification of npm trusted-publisher configuration for
41
+ `tanntnny/xingular-harness` and `release.yml` was still required; `npm login` does not verify that
42
+ setting. These results and registry values are historical.
43
+
44
+ At that time, the workflow ran full CI and exact-tarball smoke on Ubuntu and macOS before publishing.
45
+ The current workflow and approval gates are described above. No local test failure was waived by the
46
+ historical report.
@@ -20,6 +20,9 @@ written and the claim moves to checked behavior. Cite material as
20
20
  side question, and checked-out external implementations.
21
21
  - [Harness feature-gap review](feature-gap-review.md) — task/goal management, long-running work,
22
22
  memory, execution isolation, verification, and observability gaps against the studied peers.
23
+ - [Why a long run takes hours](STUDY-0003-long-horizon-runs.md) — measured diagnosis of two 70–97
24
+ minute replies (447 and 266 tool calls, 5 and 2 compactions, zero assistant text), what other
25
+ harnesses do about it, and the fixes proposed in [PROP-0041](../architecture/proposals/PROP-0041-bounded-work-slices.md).
23
26
 
24
27
  ## Sources
25
28