@xingular/harness 1.0.0 → 1.2.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 (397) hide show
  1. package/CHANGELOG.md +46 -5
  2. package/README.md +75 -21
  3. package/dist/cli.js +17421 -8711
  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.d.ts +2 -0
  11. package/dist/sdk/agents/builtin.js +48 -0
  12. package/dist/sdk/agents/narrow.d.ts +13 -0
  13. package/dist/sdk/agents/narrow.js +29 -0
  14. package/dist/sdk/agents/planResearch.d.ts +5 -0
  15. package/dist/sdk/agents/planResearch.js +19 -0
  16. package/dist/sdk/agents/profiles.d.ts +81 -0
  17. package/dist/sdk/agents/profiles.js +226 -0
  18. package/dist/sdk/annotations/bridge.d.ts +42 -0
  19. package/dist/sdk/annotations/bridge.js +264 -0
  20. package/dist/sdk/annotations/capture.d.ts +116 -0
  21. package/dist/sdk/annotations/capture.js +308 -0
  22. package/dist/sdk/annotations/delivery.d.ts +72 -0
  23. package/dist/sdk/annotations/delivery.js +130 -0
  24. package/dist/sdk/annotations/inspect.d.ts +10 -0
  25. package/dist/sdk/annotations/inspect.js +33 -0
  26. package/dist/sdk/annotations/isolated.d.ts +6 -0
  27. package/dist/sdk/annotations/isolated.js +51 -0
  28. package/dist/sdk/annotations/pageScript.d.ts +28 -0
  29. package/dist/sdk/annotations/pageScript.js +871 -0
  30. package/dist/sdk/annotations/part.d.ts +10 -0
  31. package/dist/sdk/annotations/part.js +155 -0
  32. package/dist/sdk/annotations/queue.d.ts +4 -0
  33. package/dist/sdk/annotations/queue.js +40 -0
  34. package/dist/sdk/annotations/serverMethods.d.ts +3 -0
  35. package/dist/sdk/annotations/serverMethods.js +62 -0
  36. package/dist/sdk/annotations/store.d.ts +167 -0
  37. package/dist/sdk/annotations/store.js +394 -0
  38. package/dist/sdk/browser/backend.d.ts +16 -0
  39. package/dist/sdk/browser/backend.js +17 -0
  40. package/dist/sdk/browser/contracts.d.ts +19 -0
  41. package/dist/sdk/browser/contracts.js +116 -0
  42. package/dist/sdk/browser/index.d.ts +14 -3
  43. package/dist/sdk/browser/index.js +11 -4
  44. package/dist/sdk/browser/serverMethods.d.ts +3 -0
  45. package/dist/sdk/browser/serverMethods.js +7 -0
  46. package/dist/sdk/browser/session.d.ts +1 -0
  47. package/dist/sdk/browser/session.js +45 -9
  48. package/dist/sdk/browser/tools.d.ts +1 -4
  49. package/dist/sdk/browser/tools.js +14 -91
  50. package/dist/sdk/cli.js +24 -15
  51. package/dist/sdk/commands/list.d.ts +3 -0
  52. package/dist/sdk/commands/list.js +75 -0
  53. package/dist/sdk/commands/registry.d.ts +250 -0
  54. package/dist/sdk/commands/registry.js +47 -0
  55. package/dist/sdk/commands/routes.d.ts +16 -0
  56. package/dist/sdk/commands/routes.js +33 -0
  57. package/dist/sdk/core/bus.js +1 -1
  58. package/dist/sdk/core/commandBudget.d.ts +23 -0
  59. package/dist/sdk/core/commandBudget.js +57 -0
  60. package/dist/sdk/core/env.d.ts +1 -1
  61. package/dist/sdk/core/env.js +1 -1
  62. package/dist/sdk/core/index.js +17 -1
  63. package/dist/sdk/core/interactiveProfile.d.ts +46 -0
  64. package/dist/sdk/core/interactiveProfile.js +143 -0
  65. package/dist/sdk/core/workspace.d.ts +13 -0
  66. package/dist/sdk/core/workspace.js +88 -0
  67. package/dist/sdk/core/workspaceBashTool.d.ts +4 -0
  68. package/dist/sdk/core/workspaceBashTool.js +36 -0
  69. package/dist/sdk/core/workspaceSandbox.d.ts +31 -0
  70. package/dist/sdk/core/workspaceSandbox.js +320 -0
  71. package/dist/sdk/core/workspaceWriteOperations.d.ts +22 -0
  72. package/dist/sdk/core/workspaceWriteOperations.js +206 -0
  73. package/dist/sdk/doctor/serverMethods.d.ts +3 -0
  74. package/dist/sdk/doctor/serverMethods.js +8 -0
  75. package/dist/sdk/doctor/types.d.ts +2 -2
  76. package/dist/sdk/harness.d.ts +22 -0
  77. package/dist/sdk/harness.js +84 -5
  78. package/dist/sdk/history/recall.js +8 -8
  79. package/dist/sdk/history/serverMethods.d.ts +3 -0
  80. package/dist/sdk/history/serverMethods.js +8 -0
  81. package/dist/sdk/hub/cli.d.ts +1 -1
  82. package/dist/sdk/hub/cli.js +1 -1
  83. package/dist/sdk/hub/schema.d.ts +1 -1
  84. package/dist/sdk/hub/serverMethods.d.ts +3 -0
  85. package/dist/sdk/hub/serverMethods.js +11 -0
  86. package/dist/sdk/index.d.ts +16 -1
  87. package/dist/sdk/index.js +10 -0
  88. package/dist/sdk/mcp/connections.js +14 -7
  89. package/dist/sdk/mcp/serverMethods.d.ts +3 -0
  90. package/dist/sdk/mcp/serverMethods.js +22 -0
  91. package/dist/sdk/pi/runtime.d.ts +2 -1
  92. package/dist/sdk/pi/runtime.js +2 -2
  93. package/dist/sdk/plugins/builtin.d.ts +1 -0
  94. package/dist/sdk/plugins/builtin.js +145 -33
  95. package/dist/sdk/plugins/builtinRegistry.d.ts +60 -0
  96. package/dist/sdk/plugins/builtinRegistry.js +71 -0
  97. package/dist/sdk/plugins/catalogue.js +2 -1
  98. package/dist/sdk/plugins/cli.d.ts +1 -1
  99. package/dist/sdk/plugins/cli.js +4 -3
  100. package/dist/sdk/plugins/commandPrefix.d.ts +8 -0
  101. package/dist/sdk/plugins/commandPrefix.js +21 -0
  102. package/dist/sdk/plugins/firstParty.d.ts +1 -1
  103. package/dist/sdk/plugins/firstParty.js +8 -2
  104. package/dist/sdk/plugins/inventory.js +4 -3
  105. package/dist/sdk/plugins/manifest.d.ts +2 -0
  106. package/dist/sdk/plugins/manifest.js +2 -1
  107. package/dist/sdk/plugins/surfaces.d.ts +5 -0
  108. package/dist/sdk/plugins/surfaces.js +11 -0
  109. package/dist/sdk/plugins/types.d.ts +15 -0
  110. package/dist/sdk/prompt/compile.d.ts +19 -2
  111. package/dist/sdk/prompt/compile.js +79 -26
  112. package/dist/sdk/prompt/standard.d.ts +17 -0
  113. package/dist/sdk/prompt/standard.js +21 -0
  114. package/dist/sdk/refine/cli.d.ts +1 -1
  115. package/dist/sdk/refine/cli.js +2 -2
  116. package/dist/sdk/refine/serverMethods.d.ts +3 -0
  117. package/dist/sdk/refine/serverMethods.js +20 -0
  118. package/dist/sdk/server/methods.js +27 -86
  119. package/dist/sdk/server/params.d.ts +4 -0
  120. package/dist/sdk/server/params.js +11 -0
  121. package/dist/sdk/server/remote.js +36 -11
  122. package/dist/sdk/sessions/compactionCheckpoint.d.ts +11 -0
  123. package/dist/sdk/sessions/compactionCheckpoint.js +79 -0
  124. package/dist/sdk/sessions/continuation.d.ts +3 -0
  125. package/dist/sdk/sessions/continuation.js +5 -1
  126. package/dist/sdk/sessions/contracts.d.ts +185 -0
  127. package/dist/sdk/sessions/contracts.js +101 -4
  128. package/dist/sdk/sessions/control.d.ts +72 -0
  129. package/dist/sdk/sessions/control.js +158 -0
  130. package/dist/sdk/sessions/initialBash.d.ts +7 -0
  131. package/dist/sdk/sessions/initialBash.js +7 -0
  132. package/dist/sdk/sessions/planMode.d.ts +18 -4
  133. package/dist/sdk/sessions/planMode.js +82 -16
  134. package/dist/sdk/sessions/reasoningSummaries.d.ts +2 -2
  135. package/dist/sdk/sessions/reasoningSummaries.js +3 -3
  136. package/dist/sdk/sessions/registry.d.ts +2 -1
  137. package/dist/sdk/sessions/registry.js +6 -3
  138. package/dist/sdk/sessions/runIndex.js +7 -7
  139. package/dist/sdk/sessions/runStore.d.ts +14 -0
  140. package/dist/sdk/sessions/runStore.js +38 -1
  141. package/dist/sdk/sessions/runner.d.ts +40 -2
  142. package/dist/sdk/sessions/runner.js +163 -15
  143. package/dist/sdk/sessions/sessions.d.ts +40 -8
  144. package/dist/sdk/sessions/sessions.js +279 -27
  145. package/dist/sdk/sessions/sideQuestionServerMethods.d.ts +3 -0
  146. package/dist/sdk/sessions/sideQuestionServerMethods.js +19 -0
  147. package/dist/sdk/sessions/sideQuestions.d.ts +66 -0
  148. package/dist/sdk/sessions/sideQuestions.js +290 -0
  149. package/dist/sdk/sessions/subagentServerMethods.d.ts +3 -0
  150. package/dist/sdk/sessions/subagentServerMethods.js +41 -0
  151. package/dist/sdk/sessions/subagentService.d.ts +22 -2
  152. package/dist/sdk/sessions/subagentService.js +93 -16
  153. package/dist/sdk/sessions/subagents.d.ts +9 -1
  154. package/dist/sdk/sessions/subagents.js +19 -0
  155. package/dist/sdk/sessions/workSlice.d.ts +103 -0
  156. package/dist/sdk/sessions/workSlice.js +297 -0
  157. package/dist/sdk/sessions/workspaceBoundary.d.ts +15 -0
  158. package/dist/sdk/sessions/workspaceBoundary.js +46 -0
  159. package/dist/sdk/terminal/browser.d.ts +62 -0
  160. package/dist/sdk/terminal/browser.js +41 -0
  161. package/dist/sdk/terminal/browserControl.d.ts +29 -0
  162. package/dist/sdk/terminal/browserControl.js +187 -0
  163. package/dist/sdk/terminal/commandHelp.d.ts +17 -0
  164. package/dist/sdk/terminal/commandHelp.js +20 -0
  165. package/dist/sdk/terminal/controller.d.ts +15 -1
  166. package/dist/sdk/terminal/controller.js +67 -8
  167. package/dist/sdk/terminal/opentui/subagentsWidget.d.ts +28 -0
  168. package/dist/sdk/terminal/opentui/subagentsWidget.js +52 -0
  169. package/dist/sdk/terminal/opentui/theme.d.ts +43 -0
  170. package/dist/sdk/terminal/opentui/theme.js +87 -0
  171. package/dist/sdk/terminal/piExtension.d.ts +6 -1
  172. package/dist/sdk/terminal/piExtension.js +169 -84
  173. package/dist/sdk/terminal/socket.d.ts +6 -3
  174. package/dist/sdk/terminal/socket.js +40 -9
  175. package/dist/sdk/terminal/standalone.d.ts +9 -0
  176. package/dist/sdk/terminal/standalone.js +118 -19
  177. package/dist/sdk/terminal/subagentMonitor.d.ts +47 -0
  178. package/dist/sdk/terminal/subagentMonitor.js +152 -0
  179. package/dist/sdk/terminal/terminals.d.ts +60 -7
  180. package/dist/sdk/terminal/terminals.js +598 -47
  181. package/dist/sdk/terminal/trajectory.js +2 -2
  182. package/dist/sdk/terminal/tui/annotateCommand.d.ts +3 -0
  183. package/dist/sdk/terminal/tui/annotateCommand.js +22 -0
  184. package/dist/sdk/terminal/tui/commandPages.d.ts +7 -1
  185. package/dist/sdk/terminal/tui/commandPages.js +57 -6
  186. package/dist/sdk/terminal/tui/commands.d.ts +10 -4
  187. package/dist/sdk/terminal/tui/commands.js +269 -65
  188. package/dist/sdk/terminal/tui/dialogGeometry.d.ts +2 -2
  189. package/dist/sdk/terminal/tui/dialogGeometry.js +4 -2
  190. package/dist/sdk/terminal/tui/dialogs.d.ts +6 -1
  191. package/dist/sdk/terminal/tui/dialogs.js +9 -2
  192. package/dist/sdk/terminal/tui/list.d.ts +14 -1
  193. package/dist/sdk/terminal/tui/list.js +96 -14
  194. package/dist/sdk/terminal/tui/modelPicker.js +1 -6
  195. package/dist/sdk/terminal/tui/page.d.ts +3 -0
  196. package/dist/sdk/terminal/tui/pageOverlay.js +27 -7
  197. package/dist/sdk/terminal/tui/pages/accountsPage.d.ts +26 -4
  198. package/dist/sdk/terminal/tui/pages/accountsPage.js +264 -36
  199. package/dist/sdk/terminal/tui/pages/agentsPage.d.ts +74 -0
  200. package/dist/sdk/terminal/tui/pages/agentsPage.js +190 -0
  201. package/dist/sdk/terminal/tui/pages/annotatePage.d.ts +94 -0
  202. package/dist/sdk/terminal/tui/pages/annotatePage.js +341 -0
  203. package/dist/sdk/terminal/tui/pages/browserPage.d.ts +87 -0
  204. package/dist/sdk/terminal/tui/pages/browserPage.js +738 -0
  205. package/dist/sdk/terminal/tui/pages/doctorPage.d.ts +2 -0
  206. package/dist/sdk/terminal/tui/pages/doctorPage.js +103 -15
  207. package/dist/sdk/terminal/tui/pages/notesPage.d.ts +75 -0
  208. package/dist/sdk/terminal/tui/pages/notesPage.js +201 -0
  209. package/dist/sdk/terminal/tui/pages/pluginsPage.d.ts +0 -5
  210. package/dist/sdk/terminal/tui/pages/pluginsPage.js +9 -3
  211. package/dist/sdk/terminal/tui/pages/settingsPage.d.ts +8 -0
  212. package/dist/sdk/terminal/tui/pages/settingsPage.js +16 -1
  213. package/dist/sdk/terminal/tui/pages/subagentsPage.d.ts +24 -0
  214. package/dist/sdk/terminal/tui/pages/subagentsPage.js +152 -0
  215. package/dist/sdk/terminal/tui/pages/trajectoryPage.d.ts +12 -5
  216. package/dist/sdk/terminal/tui/pages/trajectoryPage.js +156 -83
  217. package/dist/sdk/terminal/tui/pages/usagePage.d.ts +43 -0
  218. package/dist/sdk/terminal/tui/pages/usagePage.js +370 -0
  219. package/dist/sdk/terminal/tui/pages/worktreesPage.d.ts +72 -0
  220. package/dist/sdk/terminal/tui/pages/worktreesPage.js +203 -0
  221. package/dist/sdk/terminal/tui/piAdapter.d.ts +1 -2
  222. package/dist/sdk/terminal/tui/piAdapter.js +3 -5
  223. package/dist/sdk/terminal/tui/planMode.d.ts +1 -1
  224. package/dist/sdk/terminal/tui/planMode.js +1 -1
  225. package/dist/sdk/terminal/tui/pluginCommands.d.ts +16 -0
  226. package/dist/sdk/terminal/tui/pluginCommands.js +31 -0
  227. package/dist/sdk/terminal/tui/questions.d.ts +2 -0
  228. package/dist/sdk/terminal/tui/runtime.js +27 -5
  229. package/dist/sdk/terminal/tui/sessionPicker.d.ts +40 -0
  230. package/dist/sdk/terminal/tui/sessionPicker.js +141 -0
  231. package/dist/sdk/terminal/tui/settingsModel.d.ts +2 -0
  232. package/dist/sdk/terminal/tui/settingsModel.js +32 -2
  233. package/dist/sdk/terminal/tui/sideQuestion.d.ts +26 -26
  234. package/dist/sdk/terminal/tui/sideQuestion.js +131 -98
  235. package/dist/sdk/terminal/tui/ui.d.ts +2 -0
  236. package/dist/sdk/terminal/tui/ui.js +1 -0
  237. package/dist/sdk/tools/askUser.js +26 -8
  238. package/dist/sdk/tools/checklist.js +3 -2
  239. package/dist/sdk/tools/checkpoint.d.ts +27 -0
  240. package/dist/sdk/tools/checkpoint.js +154 -0
  241. package/dist/sdk/tools/getCapabilities.d.ts +31 -0
  242. package/dist/sdk/tools/getCapabilities.js +34 -0
  243. package/dist/sdk/tools/harnessTools.d.ts +2 -0
  244. package/dist/sdk/tools/harnessTools.js +1 -1
  245. package/dist/sdk/tools/spawnSubagent.js +14 -4
  246. package/dist/sdk/usage/analytics.d.ts +20 -0
  247. package/dist/sdk/usage/analytics.js +151 -0
  248. package/dist/sdk/usage/ledger.d.ts +38 -0
  249. package/dist/sdk/usage/ledger.js +142 -0
  250. package/dist/sdk/usage/limits/adapters.d.ts +11 -0
  251. package/dist/sdk/usage/limits/adapters.js +349 -0
  252. package/dist/sdk/usage/limits/capture.d.ts +8 -0
  253. package/dist/sdk/usage/limits/capture.js +47 -0
  254. package/dist/sdk/usage/limits/http.d.ts +12 -0
  255. package/dist/sdk/usage/limits/http.js +51 -0
  256. package/dist/sdk/usage/limits/normalize.d.ts +15 -0
  257. package/dist/sdk/usage/limits/normalize.js +211 -0
  258. package/dist/sdk/usage/limits/service.d.ts +30 -0
  259. package/dist/sdk/usage/limits/service.js +176 -0
  260. package/dist/sdk/usage/limits/types.d.ts +65 -0
  261. package/dist/sdk/usage/limits/types.js +1 -0
  262. package/dist/sdk/usage/serverMethods.d.ts +3 -0
  263. package/dist/sdk/usage/serverMethods.js +22 -0
  264. package/dist/sdk/usage/service.d.ts +32 -0
  265. package/dist/sdk/usage/service.js +66 -0
  266. package/dist/sdk/usage/settings.d.ts +7 -0
  267. package/dist/sdk/usage/settings.js +28 -0
  268. package/dist/sdk/usage/types.d.ts +60 -0
  269. package/dist/sdk/usage/types.js +4 -0
  270. package/dist/sdk/web/part.d.ts +10 -0
  271. package/dist/sdk/web/part.js +6 -0
  272. package/dist/sdk/web/serverMethods.d.ts +3 -0
  273. package/dist/sdk/web/serverMethods.js +7 -0
  274. package/dist/sdk/wiki/serverMethods.d.ts +3 -0
  275. package/dist/sdk/wiki/serverMethods.js +26 -0
  276. package/dist/sdk/worktrees/cli.d.ts +11 -0
  277. package/dist/sdk/worktrees/cli.js +146 -0
  278. package/dist/sdk/worktrees/copy.d.ts +9 -0
  279. package/dist/sdk/worktrees/copy.js +111 -0
  280. package/dist/sdk/worktrees/git.d.ts +16 -0
  281. package/dist/sdk/worktrees/git.js +81 -0
  282. package/dist/sdk/worktrees/serverMethods.d.ts +3 -0
  283. package/dist/sdk/worktrees/serverMethods.js +30 -0
  284. package/dist/sdk/worktrees/service.d.ts +73 -0
  285. package/dist/sdk/worktrees/service.js +483 -0
  286. package/dist/sdk/worktrees/setup.d.ts +23 -0
  287. package/dist/sdk/worktrees/setup.js +65 -0
  288. package/dist/sdk/worktrees/types.d.ts +91 -0
  289. package/dist/sdk/worktrees/types.js +1 -0
  290. package/dist/sdk/world/cli.d.ts +2 -2
  291. package/dist/sdk/world/cli.js +6 -6
  292. package/dist/sdk/world/world.d.ts +3 -1
  293. package/dist/sdk/world/world.js +8 -9
  294. package/dist/terminal-opentui.js +16456 -5966
  295. package/dist/terminal-pi.js +1579 -573
  296. package/docs/README.md +22 -2
  297. package/docs/architecture/00-overview.md +28 -16
  298. package/docs/architecture/02-sessions-and-runs.md +184 -25
  299. package/docs/architecture/03-variants.md +10 -2
  300. package/docs/architecture/04-prompt.md +65 -7
  301. package/docs/architecture/06-plugins-and-capabilities.md +57 -4
  302. package/docs/architecture/07-tools-and-gate.md +112 -17
  303. package/docs/architecture/08-memory-and-history.md +4 -2
  304. package/docs/architecture/09-accounts-and-connectors.md +39 -1
  305. package/docs/architecture/10-server-protocol.md +168 -4
  306. package/docs/architecture/11-terminal.md +251 -8
  307. package/docs/architecture/12-storage.md +45 -3
  308. package/docs/architecture/13-world-tools.md +49 -6
  309. package/docs/architecture/14-surfaces-and-parity.md +136 -0
  310. package/docs/architecture/README.md +17 -4
  311. package/docs/architecture/proposals/PROP-0006-run-checklist.md +4 -2
  312. package/docs/architecture/proposals/PROP-0013-resource-browser.md +58 -0
  313. package/docs/architecture/proposals/PROP-0014-fullscreen-browser-tabs.md +58 -0
  314. package/docs/architecture/proposals/PROP-0015-one-capability-surface.md +88 -0
  315. package/docs/architecture/proposals/PROP-0016-managed-worktrees.md +156 -0
  316. package/docs/architecture/proposals/PROP-0017-page-annotations.md +131 -0
  317. package/docs/architecture/proposals/PROP-0018-annotation-queue-and-app-targets.md +179 -0
  318. package/docs/architecture/proposals/PROP-0019-contextual-side-questions.md +122 -0
  319. package/docs/architecture/proposals/PROP-0020-builtin-feature-plugins.md +105 -0
  320. package/docs/architecture/proposals/PROP-0021-command-namespaces-and-duplicates.md +99 -0
  321. package/docs/architecture/proposals/PROP-0022-plan-only-questions.md +102 -0
  322. package/docs/architecture/proposals/PROP-0023-xagent-cli-name.md +61 -0
  323. package/docs/architecture/proposals/PROP-0024-question-sketch-previews.md +130 -0
  324. package/docs/architecture/proposals/PROP-0025-contextual-question-wireframes.md +49 -0
  325. package/docs/architecture/proposals/PROP-0026-connected-sketch-display.md +94 -0
  326. package/docs/architecture/proposals/PROP-0027-xingular-agent-product-identity.md +60 -0
  327. package/docs/architecture/proposals/PROP-0028-normalize-question-wireframes.md +55 -0
  328. package/docs/architecture/proposals/PROP-0029-agent-profiles.md +124 -0
  329. package/docs/architecture/proposals/PROP-0030-subagent-title.md +86 -0
  330. package/docs/architecture/proposals/PROP-0031-plugin-command-owner-namespaces.md +54 -0
  331. package/docs/architecture/proposals/PROP-0032-planning-quality.md +196 -0
  332. package/docs/architecture/proposals/PROP-0033-compaction-plan-checkpoints.md +75 -0
  333. package/docs/architecture/proposals/PROP-0034-conversation-fast-mode.md +120 -0
  334. package/docs/architecture/proposals/PROP-0035-retain-subagent-status.md +47 -0
  335. package/docs/architecture/proposals/PROP-0036-first-class-harness-commands.md +59 -0
  336. package/docs/architecture/proposals/PROP-0037-workspace-write-boundary.md +63 -0
  337. package/docs/architecture/proposals/PROP-0038-annotate-open-shadow-roots.md +73 -0
  338. package/docs/architecture/proposals/PROP-0039-workspace-boundary-hardening.md +139 -0
  339. package/docs/architecture/proposals/PROP-0040-one-launch-path.md +87 -0
  340. package/docs/architecture/proposals/PROP-0041-bounded-work-slices.md +247 -0
  341. package/docs/architecture/proposals/PROP-0042-usage-and-provider-limits.md +127 -0
  342. package/docs/architecture/proposals/PROP-0043-read-only-plan-bash.md +74 -0
  343. package/docs/architecture/proposals/README.md +39 -0
  344. package/docs/decisions/ADR-0001-owned-terminal.md +1 -1
  345. package/docs/decisions/ADR-0009-xharness-command.md +6 -5
  346. package/docs/decisions/ADR-0014-public-release-baseline.md +3 -2
  347. package/docs/decisions/ADR-0015-resource-browser.md +28 -0
  348. package/docs/decisions/ADR-0016-fullscreen-browser-tabs.md +31 -0
  349. package/docs/decisions/ADR-0017-one-capability-surface.md +34 -0
  350. package/docs/decisions/ADR-0018-builtin-feature-plugins.md +35 -0
  351. package/docs/decisions/ADR-0019-managed-git-worktrees.md +31 -0
  352. package/docs/decisions/ADR-0020-page-annotations.md +37 -0
  353. package/docs/decisions/ADR-0021-required-command-namespaces.md +40 -0
  354. package/docs/decisions/ADR-0022-plan-only-question-tools.md +34 -0
  355. package/docs/decisions/ADR-0023-contextual-side-question-runs.md +35 -0
  356. package/docs/decisions/ADR-0024-xagent-command.md +40 -0
  357. package/docs/decisions/ADR-0025-question-choice-sketches.md +49 -0
  358. package/docs/decisions/ADR-0026-contextual-question-wireframes.md +58 -0
  359. package/docs/decisions/ADR-0027-connected-sketch-display.md +60 -0
  360. package/docs/decisions/ADR-0028-xingular-agent-product-identity.md +56 -0
  361. package/docs/decisions/ADR-0029-normalized-question-wireframe-borders.md +33 -0
  362. package/docs/decisions/ADR-0030-agent-profiles.md +43 -0
  363. package/docs/decisions/ADR-0031-plugin-command-owner-namespaces.md +37 -0
  364. package/docs/decisions/ADR-0032-compaction-run-checkpoints.md +33 -0
  365. package/docs/decisions/ADR-0033-plan-mode-research-delegation.md +47 -0
  366. package/docs/decisions/ADR-0034-first-class-harness-terminal-commands.md +25 -0
  367. package/docs/decisions/ADR-0035-one-launch-path.md +40 -0
  368. package/docs/decisions/ADR-0036-workspace-write-operation-boundary.md +54 -0
  369. package/docs/decisions/ADR-0037-usage-ledger-and-provider-limits.md +44 -0
  370. package/docs/decisions/ADR-0038-plan-bash-os-read-only.md +29 -0
  371. package/docs/doctor.md +10 -4
  372. package/docs/experiments/EXP-0003-performance-audit/data/session-runtime-replication.json +420 -0
  373. package/docs/experiments/EXP-0003-performance-audit/data/session-runtime.json +420 -0
  374. package/docs/experiments/EXP-0003-performance-audit/data/terminal-compact.json +376 -0
  375. package/docs/experiments/EXP-0003-performance-audit/data/terminal-history.json +422 -0
  376. package/docs/experiments/EXP-0003-performance-audit/data/terminal-question.json +95 -0
  377. package/docs/experiments/EXP-0003-performance-audit/data/terminal-wide.json +1036 -0
  378. package/docs/experiments/EXP-0003-performance-audit/plan.md +109 -0
  379. package/docs/experiments/EXP-0003-performance-audit/results.md +151 -0
  380. package/docs/features/README.md +26 -0
  381. package/docs/features/interfaces/README.md +1 -1
  382. package/docs/future-work.md +48 -0
  383. package/docs/handoff-2026-10-25-app-parity-and-solo-tabs.md +202 -0
  384. package/docs/parity.md +134 -0
  385. package/docs/releases/1.0.0.md +2 -2
  386. package/docs/releases/1.1.1.md +28 -0
  387. package/docs/releases/1.2.0.md +49 -0
  388. package/docs/releases/4.0.0.md +47 -0
  389. package/docs/releases/README.md +37 -27
  390. package/docs/study/00-index.md +8 -0
  391. package/docs/study/STUDY-0003-long-horizon-runs.md +210 -0
  392. package/docs/study/autonomous-engineering-sources.md +277 -0
  393. package/docs/study/autonomy-sources.md +147 -0
  394. package/docs/study/proactive-autonomy.md +408 -0
  395. package/docs/study/tui-resource-browser.md +78 -0
  396. package/docs/terminal-tui.md +386 -113
  397. package/package.json +6 -5
@@ -0,0 +1,35 @@
1
+ # ADR-0018 — Built-in feature modules and namespaced commands
2
+
3
+ Status: Accepted (owner requested implementation of the plan, 2026-10-24).
4
+ Related: [PROP-0020](../architecture/proposals/PROP-0020-builtin-feature-plugins.md),
5
+ [06 Plugins and capabilities](../architecture/06-plugins-and-capabilities.md),
6
+ [11 Terminal](../architecture/11-terminal.md).
7
+
8
+ ## Context
9
+
10
+ First-party plugin descriptors existed, but runtime assembly, server handlers and TUI command
11
+ dispatch were centralized in separate files. Plugin commands shared the same unprefixed namespace
12
+ as core commands. Duplicate Pi extension commands were silently assigned suffixes by the SDK.
13
+
14
+ ## Decision
15
+
16
+ Use a typed internal registry for built-in plugin modules. Modules own their existing plugin
17
+ descriptor and may supply world parts, public method handlers, terminal command metadata and
18
+ lifecycle. Foundation keeps plugin loading and trust, capability attachment and gating, the TUI
19
+ framework, and the generic isolated browser engine. Plugin commands use `/plugin:<command>`;
20
+ duplicate names are rejected with owner diagnostics. The ownership taxonomy is documentation only.
21
+
22
+ Retire old unprefixed forms for doctor, worktree, trajectory, subagents, notes and annotate at the
23
+ cutover. Public server methods and stored data keep their current names and shapes.
24
+
25
+ ## Alternatives
26
+
27
+ Keeping direct central dispatch preserves the current drift between plugin descriptions and
28
+ runtime ownership. Exposing categories in public metadata adds a schema without a runtime need.
29
+ Letting the SDK suffix duplicate commands makes their identity depend on extension load order.
30
+
31
+ ## Consequences
32
+
33
+ New Harness-managed features register through the built-in plugin registry. The terminal owns the
34
+ page adapter and UI; feature plugins contribute namespaced command metadata. Embedding hosts see
35
+ the existing method table and capability contracts.
@@ -0,0 +1,31 @@
1
+ # ADR-0019 — Managed Git worktrees are a Harness capability
2
+
3
+ Status: Accepted (owner approved the parity plan, 2026-10-23).
4
+ Related: [PROP-0016](../architecture/proposals/PROP-0016-managed-worktrees.md),
5
+ [02 Sessions and runs](../architecture/02-sessions-and-runs.md),
6
+ [14 Surfaces and parity](../architecture/14-surfaces-and-parity.md).
7
+
8
+ ## Context
9
+
10
+ Worktrees isolate source changes, but an App-only implementation leaves terminal users without
11
+ that capability and lets each host invent its own lifecycle and safety rules.
12
+
13
+ ## Decision
14
+
15
+ The Harness owns the worktree registry, lifecycle, session leases, and server methods. Managed
16
+ worktrees are disposable detached checkouts in device-local state; permanent worktrees are retained.
17
+ Creating a worktree disables repository filters, carries source changes only under the defined
18
+ copy/apply rules, and runs setup scripts only after exact-text trust. Leases prevent concurrent
19
+ removal; removal snapshots recoverable work before deleting a checkout. Hosts call `worktrees.*`
20
+ rather than managing these records independently, and the terminal provides the reference surface.
21
+
22
+ ## Alternatives
23
+
24
+ Keeping the feature in the App breaks terminal/host parity. Putting large worktree checkouts inside
25
+ source repositories pollutes them and makes the data visible to tools and editors. Platform-specific
26
+ copy-on-write clones were deferred in favor of Git's portable linked-worktree behavior.
27
+
28
+ ## Consequences
29
+
30
+ `worktreeId` identifies a Harness-managed worktree in a run. Worktree state is device-local under
31
+ the Harness state directory. Hosts can present richer controls but do not own lifecycle or safety.
@@ -0,0 +1,37 @@
1
+ # ADR-0020 — Page annotations and delivery are Harness-owned
2
+
3
+ Status: Accepted (owner approved the parity plan and capture workflow, 2026-10-23).
4
+ Related: [PROP-0017](../architecture/proposals/PROP-0017-page-annotations.md),
5
+ [PROP-0018](../architecture/proposals/PROP-0018-annotation-queue-and-app-targets.md),
6
+ [07 Tools and the gate](../architecture/07-tools-and-the-gate.md),
7
+ [13 World tools](../architecture/13-world-tools.md),
8
+ [14 Surfaces and parity](../architecture/14-surfaces-and-parity.md).
9
+
10
+ ## Context
11
+
12
+ Page annotations and the agent's ability to read or act on them must work in both the standalone
13
+ terminal and embedding hosts. Keeping the note store and tools inside one host would split state and
14
+ behavior; trusting arbitrary page-script output could let a page initiate unintended work.
15
+
16
+ ## Decision
17
+
18
+ The Harness owns the canonical note store, sharing grants, page-note tools, queue and delivery
19
+ lifecycle, and generic capture contract. The terminal captures in its visible isolated browser; a
20
+ host supplies its own web-view or application-window adapter through the same contract. Capture
21
+ results are trusted only when they come from an isolated script world or the host's own UI; otherwise
22
+ sending requires person confirmation. Page-derived content remains untrusted in the delivered
23
+ instruction. A person controls sharing, queueing, confirmation, and resolution; the agent may mark a
24
+ shared note fixed but cannot resolve it or change grants.
25
+
26
+ ## Alternatives
27
+
28
+ A terminal-only capture path would not support host web views. Host-owned stores and tools would
29
+ create different behavior and duplicated data. Trusting page content or automatically sending
30
+ unisolated results would grant a page authority it must not have.
31
+
32
+ ## Consequences
33
+
34
+ Notes and grants have one Harness-owned representation and work through the terminal or a host.
35
+ Hosts retain ownership of native windows and browser UI while using Harness methods for notes,
36
+ sharing, and delivery. The server contract can represent capture targets without naming an
37
+ application.
@@ -0,0 +1,40 @@
1
+ # ADR-0021 — Required built-in commands use the bare namespace
2
+
3
+ Status: Superseded by [ADR-0031](ADR-0031-plugin-command-owner-namespaces.md).
4
+ Supersedes: The command-namespace portion of [ADR-0018](ADR-0018-builtin-feature-plugins.md).
5
+ Related: [PROP-0021](../architecture/proposals/PROP-0021-command-namespaces-and-duplicates.md),
6
+ [11 Terminal](../architecture/11-terminal.md),
7
+ [14 Surfaces and parity](../architecture/14-surfaces-and-parity.md).
8
+
9
+ ## Context
10
+
11
+ The terminal has a set of required built-in features whose pages are part of normal Harness use.
12
+ Putting their commands behind `/plugin:` made them less direct to use. Separately, built-in and
13
+ loaded extension commands could both appear when their names matched a core command, alias or
14
+ prompt. Duplicate bridge registrations also exposed `/plugin:accounts`, `/plugin:hub`, and
15
+ `/plugin:plugins` beside their existing core commands.
16
+
17
+ ## Decision
18
+
19
+ Commands owned by a required built-in plugin use the bare terminal namespace: `/subagents`,
20
+ `/trajectory`, `/doctor`, and `/worktree`. Optional built-in plugin commands, currently
21
+ `/plugin:notes` and `/plugin:annotate`, and Pi extension commands remain under `/plugin:<command>`.
22
+ Core commands `/accounts`, `/hub`, `/plugins`, and `/mcp` remain unprefixed.
23
+
24
+ An existing bare core command, alias, required built-in command, or loaded prompt reserves its
25
+ name. A colliding `/plugin:<name>` is absent from completion/help and direct invocation explains
26
+ which bare command to use. Duplicate extension registrations retain owner-path diagnostics. Remove
27
+ the bridge registrations that duplicate `/accounts`, `/hub`, and `/plugins`.
28
+
29
+ ## Alternatives
30
+
31
+ Keeping all built-in commands namespaced preserves duplicate entries and makes required features
32
+ less direct to invoke. Unprefixing every built-in plugin command would also change the optional,
33
+ switchable Annotations commands. Suppressing only a fixed list of observed duplicate names would
34
+ allow the same problem to recur as plugins or prompts are added.
35
+
36
+ ## Consequences
37
+
38
+ Required built-in command metadata determines the namespace used by terminal completion, help and
39
+ dispatch. A third-party extension whose command collides with a bare command or prompt must use a
40
+ different command name to expose both. There is no protocol or storage change.
@@ -0,0 +1,34 @@
1
+ # ADR-0022 — Question tools are available only in attended plan runs
2
+
3
+ Status: Accepted (owner requested implementation of PROP-0022, 2026-10-24).
4
+ Related: [PROP-0022](../architecture/proposals/PROP-0022-plan-only-questions.md),
5
+ [02 Sessions and runs](../architecture/02-sessions-and-runs.md),
6
+ [11 Terminal](../architecture/11-terminal.md),
7
+ [14 Surfaces and parity](../architecture/14-surfaces-and-parity.md).
8
+
9
+ ## Context
10
+
11
+ Ordinary chat exposed the Harness-owned `ask_user` tool, while the terminal also activated its
12
+ single-question `ask_user_question` tool in normal mode. Hiding the required `ask-user` plugin would
13
+ also remove it from plan mode and contradict its required-plugin contract. The callable tool set
14
+ must instead be resolved by run mode.
15
+
16
+ ## Decision
17
+
18
+ Newly resolved normal runs omit `ask_user` before their capability set is frozen, regardless of a
19
+ wider requested tool list. An attended plan run may receive it, subject to the caller's narrower
20
+ capabilities. Automatic, probe, improver and reflection runs do not receive it. In the terminal,
21
+ normal mode deactivates both question tools; a plan request temporarily enables the registered
22
+ question tools and restores the previous active set on success, error or interruption.
23
+
24
+ The required `ask-user` built-in remains attached and has no user-facing switch. Approval prompts
25
+ and ordinary assistant text are unaffected. A continuation preserves the earlier frozen capability
26
+ set; if that snapshot includes `ask_user`, an automatic or refinement-triggered continuation is
27
+ rejected with `continuation_mismatch` rather than silently narrowing the snapshot or allowing an
28
+ unattended question.
29
+
30
+ ## Consequences
31
+
32
+ Normal and plan requests can have different provider tool schemas, so no cache-preservation claim is
33
+ made; measure any provider-cache effect only under `INV-PRM-8`. Existing records and attachments need
34
+ no migration. The App relies on the Harness-resolved tool set and adds no separate preference.
@@ -0,0 +1,35 @@
1
+ # ADR-0023: Contextual side questions are Harness runs
2
+
3
+ **Status:** Accepted
4
+ **Date:** 2026-10-24
5
+ **Proposal:** [PROP-0019](../architecture/proposals/PROP-0019-contextual-side-questions.md)
6
+
7
+ ## Context
8
+
9
+ The terminal and App had separate `/btw` implementations. The terminal used a short, in-memory
10
+ Pi session; the App used a bounded, tracked run. Their answers could not consistently use the main
11
+ run's instructions or public tool evidence, and they had different lifecycle and observability.
12
+
13
+ ## Decision
14
+
15
+ The Harness owns one side-question service. It creates an independent run with no variant and an
16
+ empty frozen capability set. The service uses a redacted projection of the main run's effective
17
+ prompt, visible transcript, and persisted public events, including tool inputs and results. It
18
+ excludes hidden reasoning and attachment bytes. Context is bounded, credential-like material is
19
+ redacted, and transcript/tool content cannot add permissions. Terminal and host surfaces use the
20
+ same service and ordinary run-event contract.
21
+
22
+ ## Consequences
23
+
24
+ Side answers are separately recorded and can be inspected with ordinary run history and usage.
25
+ They never enter or steer the parent conversation. No persistent side-thread store or migration is
26
+ needed. The terminal presents a temporary scrollable dock; a host keeps its own presentation. The
27
+ App's read-only native file tools use the operating system's read boundary across absolute and home
28
+ paths; the App's host gate continues to protect edits, writes and shell commands.
29
+
30
+ ## Rejected options
31
+
32
+ - Keeping a separate in-memory terminal session would preserve different answers and observability.
33
+ - Sending hidden reasoning, images or the main run's tools would expose more than a side answer
34
+ needs and could let it act independently.
35
+ - Persisting side threads would require retention, deletion and synchronization rules.
@@ -0,0 +1,40 @@
1
+ ---
2
+ id: ADR-0024
3
+ title: Publish the Harness CLI as xagent
4
+ status: accepted
5
+ created: 2026-10-24
6
+ updated: 2026-10-24
7
+ related: [PROP-0023]
8
+ supersedes: ADR-0009
9
+ ---
10
+
11
+ # ADR-0024 — Publish the Harness CLI as xagent
12
+
13
+ ## Context and decision drivers
14
+
15
+ The Harness CLI's no-subcommand path starts the standalone OpenTUI terminal. The current executable
16
+ name, `xharness`, is being replaced by the requested shorter product command, `xagent`. The
17
+ published command is part of the package's public interface.
18
+
19
+ ## Decision
20
+
21
+ Publish `@xingular/harness` with one executable, `xagent`, mapped to `dist/cli.js`. Invoking
22
+ `xagent` without arguments starts the existing OpenTUI terminal. Do not retain `xharness` as a
23
+ compatibility alias. Keep the package name, `terminal` alias, host subcommands, data/state directory
24
+ names, and `XINGULAR_HARNESS_*` environment variables unchanged.
25
+
26
+ This supersedes ADR-0009's executable-name decision and the `xharness` command-name portion of
27
+ ADR-0014. Other release-baseline decisions remain unchanged.
28
+
29
+ ## Consequences
30
+
31
+ - Users and scripts that invoke `xharness` must migrate to `xagent`.
32
+ - No account, data, or state migration is required.
33
+ - If `xharness` has already been released, replacing it requires a new major version; this change is
34
+ intended for the unpublished 4.0.0 candidate.
35
+
36
+ ## Implementation and verification
37
+
38
+ - The `bin` mapping and CLI help are tested by [`src/cli.test.ts`](../../src/cli.test.ts).
39
+ - The implementation and migration notes are tracked in
40
+ [PROP-0023](../architecture/proposals/PROP-0023-xagent-cli-name.md).
@@ -0,0 +1,49 @@
1
+ ---
2
+ id: ADR-0025
3
+ title: Store bounded ASCII sketches with question requests
4
+ status: accepted
5
+ created: 2026-10-24
6
+ updated: 2026-10-24
7
+ related: [PROP-0024, INV-RUN-3, INV-PAR-1, INV-PAR-2]
8
+ supersedes: null
9
+ superseded_by: null
10
+ ---
11
+
12
+ # ADR-0025 — Store bounded ASCII sketches with question requests
13
+
14
+ **Accepted by the product owner on 2026-10-24.**
15
+
16
+ ## Context
17
+
18
+ Choice labels and descriptions do not always communicate a layout or other compact visual
19
+ comparison. Both question surfaces need the same safely bounded representation, and the validated
20
+ `question.requested` event is the existing shared contract through which they receive choice data.
21
+
22
+ ## Decision
23
+
24
+ - A question may set `uiSketch: true` to enable sketch previews. Each offered choice must then
25
+ provide its own `sketch`; without the flag, a choice must not provide a sketch.
26
+ - Sketches are literal text of 1–8 LF-separated lines, at most 32 printable ASCII characters per
27
+ line, with at least one visible character. The complete value is at most 263 bytes. Tabs, CR,
28
+ control characters, escape sequences and non-ASCII text are invalid. Valid text, including
29
+ interior blank lines and trailing spaces, is preserved exactly.
30
+ - Harness validates the flag/choice relationship and text bounds before emitting a request. The
31
+ persisted `question.requested` event may carry the metadata; `question.answered` and
32
+ `QuestionAnswer` remain unchanged. Older request events remain valid.
33
+ - The terminal and hosts render one shared monospace preview below the choices, following the
34
+ hovered or focused choice. They render the sketch as text, not Markdown, ANSI or executable rich
35
+ output.
36
+
37
+ ## Consequences
38
+
39
+ - The existing event schema and persistence path carry the preview; no event kind, image type,
40
+ storage file or protocol version is added. No data migration is needed.
41
+ - Hosts mirror the optional schema fields. Surface parity requires the terminal and each host to
42
+ present the same choice sketches without changing answer semantics.
43
+ - The strict ASCII and dimension limits keep the diagram readable in a 40-column terminal and
44
+ prevent markup, terminal controls and unbounded content from entering the question surface.
45
+
46
+ ## Implementation and verification
47
+
48
+ Implemented under [PROP-0024](../architecture/proposals/PROP-0024-question-sketch-previews.md).
49
+ Verification evidence is recorded with that proposal and in the App's implementation-stage log.
@@ -0,0 +1,58 @@
1
+ ---
2
+ id: ADR-0026
3
+ title: Align question columns and preserve contextual ASCII wireframes
4
+ status: accepted
5
+ created: 2026-10-24
6
+ updated: 2026-10-24
7
+ related: [PROP-0025, ADR-0025, INV-RUN-3, INV-PAR-1, INV-PAR-2]
8
+ supersedes: null
9
+ superseded_by: null
10
+ ---
11
+
12
+ # ADR-0026 — Align question columns and preserve contextual ASCII wireframes
13
+
14
+ **Accepted by the product owner on 2026-10-24** through the plan “Fix TUI question columns and sketch previews”. This is foundation work.
15
+
16
+ ## Context
17
+
18
+ Content-dependent choice rows do not align label and description boundaries. The original 32×8
19
+ sketch limit cannot express contextual UI panels, and a caption plus left rule adds redundant
20
+ preview chrome. ADR-0025 records the original sketch contract and its historical evidence; this
21
+ decision amends its bounds and presentation without replacing the optional sketch/answer model.
22
+
23
+ ## Decision
24
+
25
+ - Use one measured layout across every choice: marker gutter, one-third label cell, two-cell gap,
26
+ remaining description cell. Wrap within cells, retain empty description cells, and never stack
27
+ columns at compact widths. Use `(Rec.)` when the label column is fewer than 14 cells and a compact
28
+ dock hint below 60 terminal columns.
29
+ - Accept 1–24 LF-separated lines of at most 80 printable ASCII characters each (1,943 bytes
30
+ maximum), with at least one visible character. Reject tabs, CR, controls, escapes and Unicode;
31
+ preserve whitespace literally. Both question tools and validated request events use these bounds.
32
+ - Ask models for contextual UI wireframes containing actual panel/table structure and neighboring
33
+ elements, consistent across alternatives. This is generation guidance, not schema enforcement.
34
+ - Render one shared border-only literal preview without a visible caption or extra left rule.
35
+ Preserve content without wrapping, reflow or truncation; bounded two-axis scrolling exposes
36
+ overflow. Hover/focus chooses the preview without changing the staged answer.
37
+ - Bound and vertically scroll the dock body, keeping tabs and answer/action controls outside it.
38
+ PageUp/PageDown and Ctrl+Home/End scroll that body while the dock is active. Shift+arrows pan the
39
+ sketch; ordinary arrows keep question/choice navigation. Bring focused choices and notes into view.
40
+ - Terminal and hosts accept the same metadata and preserve literal content. Host presentation may
41
+ differ, but the expanded contract requires acceptance on both surfaces under INV-PAR-1/2.
42
+
43
+ ## Consequences
44
+
45
+ Existing sketches and events remain valid without a data rewrite. Readers enforcing the old limits
46
+ must update before accepting larger events; rolling readers back requires avoiding sketches above
47
+ those limits. `uiSketch` still requires a sketch on every choice and forbids sketches when disabled.
48
+ `question.answered`, `QuestionAnswer`, the gate, prompt compilation and storage ownership do not
49
+ change. No image format, event kind or executable rich-output contract is introduced.
50
+
51
+ ## Implementation and verification
52
+
53
+ The accepted design is [PROP-0025](../architecture/proposals/PROP-0025-contextual-question-wireframes.md).
54
+ Implementation and isolated terminal/host acceptance are recorded in the
55
+ [retained verification](../evidence/terminal-question-wireframes/README.md), including four terminal
56
+ sizes, live resizing, sketch panning, literal persistence and the host's expanded-boundary fixture.
57
+ Earlier PROP-0024/ADR-0025 evidence remains historical; the new evidence does not claim live-model
58
+ diagram quality, every emulator's behavior or native Tauri presentation.
@@ -0,0 +1,60 @@
1
+ ---
2
+ id: ADR-0027
3
+ title: Project structural ASCII sketch lines into connected terminal borders
4
+ status: accepted
5
+ created: 2026-10-24
6
+ updated: 2026-10-24
7
+ related: [PROP-0026, ADR-0026, ADR-0029, INV-RUN-3, INV-PAR-1, INV-PAR-2]
8
+ supersedes: null
9
+ superseded_by: null
10
+ ---
11
+
12
+ # ADR-0027 — Project structural ASCII sketch lines into connected terminal borders
13
+
14
+ **Design accepted by the product owner on 2026-10-24** with “yes, fix it” after screenshot review.
15
+ This foundation presentation change is implemented and verified in isolated production fixtures;
16
+ see [retained evidence](../evidence/terminal-connected-sketches/README.md).
17
+
18
+ ## Context
19
+
20
+ ASCII `+|-` table frames appear disconnected in the terminal, and bare hyphen dividers do not
21
+ reach the preview frame. ADR-0026's absolute literal-render promise prevents correcting those
22
+ structural lines without a documented exception. Raw ASCII persistence and shared host metadata
23
+ remain appropriate; the problem is terminal typography, not the question contract.
24
+
25
+ ## Decision
26
+
27
+ Adopt [PROP-0026](../architecture/proposals/PROP-0026-connected-sketch-display.md). The terminal
28
+ preview in `src/terminal/opentui/sketchPanel.ts` uses a bounded structural display projection:
29
+
30
+ - Recognized ASCII table-border rows and enclosed vertical table edges become connected
31
+ box-drawing glyphs. Internal framed tables retain their original widths and positions.
32
+ - Bare standalone hyphen divider rows expand to the larger of the panel viewport width and the
33
+ original sketch's widest line, joining the outer single-line preview frame with `├` and `┤`.
34
+ - No global substitution: prose, content operators and ordinary pipes remain literal. Unrecognized
35
+ rows remain literal. Whitespace and geometry remain unchanged except for recognized structural
36
+ border glyphs and standalone-divider expansion, subject to the high-confidence boundary-cell
37
+ repair separately specified by [ADR-0029](ADR-0029-normalized-question-wireframe-borders.md).
38
+ - Keep bounded two-axis panning, with no wrapping, reflow, truncation or markup interpretation.
39
+ Focus, selection, navigation and answers do not change.
40
+
41
+ The validated source remains at most 80 printable ASCII columns by 24 lines. Persist that source
42
+ literally, including whitespace; never save projected Unicode or divider expansion. No wire/schema
43
+ or answer change is introduced. Hosts may retain literal previews of the same source. INV-PAR-1/2
44
+ require equivalent capability and accepted metadata, not identical structural typography.
45
+
46
+ ## Consequences
47
+
48
+ This amends only ADR-0026's terminal literal-render requirement and cross-surface typography
49
+ promise; its bounds, raw persistence, layout and answer decisions remain in force. No migration or
50
+ host code change is needed. Reverting the display projection does not affect saved events.
51
+ Historical decisions and verification evidence remain unchanged.
52
+
53
+ ## Verification status
54
+
55
+ The [PROP-0026 verification](../evidence/terminal-connected-sketches/README.md) covers structural
56
+ recognition, content preservation, four terminal sizes, resizing/panning, original ASCII persistence
57
+ and unchanged answers, alongside Harness and host checks. The later [ADR-0029 verification](../evidence/terminal-wireframe-normalization/README.md)
58
+ covers title-bearing rules and bounded repair of missing or displaced frame edges. Prior PROP-0025
59
+ evidence remains a record of the old presentation. Fixture verification is not owner visual
60
+ acceptance, an every-font guarantee or evidence of live-model diagram quality.
@@ -0,0 +1,56 @@
1
+ ---
2
+ id: ADR-0028
3
+ title: Use Xingular Agent as the default Harness product identity
4
+ status: accepted
5
+ created: 2026-10-24
6
+ updated: 2026-10-24
7
+ related: [PROP-0027, INV-BND-2, 00-overview.md, 04-prompt.md, 11-terminal.md]
8
+ supersedes: null
9
+ superseded_by: null
10
+ ---
11
+
12
+ # ADR-0028 — Use Xingular Agent as the default Harness product identity
13
+
14
+ The product owner accepted [PROP-0027](../architecture/proposals/PROP-0027-xingular-agent-product-identity.md)
15
+ on 2026-10-24.
16
+
17
+ ## Context
18
+
19
+ The standalone terminal is Harness-owned, but its welcome and Harness-authored prompt identity used
20
+ the default product name `Xingular Harness`. The requested product identity is `Xingular Agent`,
21
+ with a terminal welcome that presents an orange `X` mark and blue `A G E N T` label. Changing the
22
+ default affects product identity text beyond the welcome, including compiled prompts and Wiki text;
23
+ embedding hosts may need their own name.
24
+
25
+ ## Decision
26
+
27
+ Adopt PROP-0027:
28
+
29
+ - Set `DEFAULT_PRODUCT_NAME` to `Xingular Agent`; continue honoring an explicit `productName` from
30
+ an embedding host.
31
+ - Revise `INV-BND-2` to permit the exact canonical product identity `Xingular Agent` as the
32
+ default. Continue to prohibit application concepts, application-specific behavior and other
33
+ application names in Harness code and person/model-visible text.
34
+ - Format a multiword product name in the empty welcome as the first letter of its first word in the
35
+ orange block mark and the remaining word(s), letter-spaced, in blue. Thus the default shows `X`
36
+ and `A G E N T`. A single-word name remains the mark without a subline.
37
+ - Keep the centered greeting, tagline, `/help` hint, model/thinking status, composer and status bar;
38
+ use the existing orange and blue theme accents without adding tokens or changing other surfaces.
39
+
40
+ ## Consequences
41
+
42
+ - Consumers that omit `productName` see `Xingular Agent` in Harness-authored product identity
43
+ text. Consumers that supply their own name are unchanged.
44
+ - Existing prompt packs, runs and Wiki notes are not rewritten; newly compiled prompt identity and
45
+ new Wiki text use the default in effect at creation time.
46
+ - No capability, API, storage layout or wire schema changes.
47
+
48
+ ## Verification status
49
+
50
+ Implemented and verified on 2026-10-24.
51
+
52
+ - Harness: `npm run typecheck`, `npm test` (143 files passed; 3 skipped), `npm run build`, and
53
+ `npm run prove` passed. Focused PTY verification passed at 40x20, 80x24 and 120x40, including
54
+ the `/help` transition.
55
+ - Xingular Agent: `npm run typecheck`, `npm test` (566 renderer and 67 sidecar tests passed),
56
+ `npm run check:layers`, and `cd src-tauri && cargo test` passed.
@@ -0,0 +1,33 @@
1
+ ---
2
+ id: ADR-0029
3
+ title: Normalize high-confidence question wireframe borders in the terminal preview
4
+ status: accepted
5
+ created: 2026-10-24
6
+ updated: 2026-10-24
7
+ related: [PROP-0028, ADR-0026, ADR-0027, INV-PAR-1, INV-PAR-2]
8
+ ---
9
+
10
+ # ADR-0029 — Normalize high-confidence question wireframe borders in the terminal preview
11
+
12
+ ## Context
13
+
14
+ The terminal displays bounded, model-authored ASCII sketches. The existing connected-glyph projection misses text-bearing top rules and rows with missing or misaligned side edges. The raw source remains the right shared contract, but its terminal display needs a narrowly constrained frame-repair rule.
15
+
16
+ ## Decision
17
+
18
+ Adopt [PROP-0028](../architecture/proposals/PROP-0028-normalize-question-wireframes.md). The terminal may normalize only high-confidence, explicitly framed sketch boundaries:
19
+
20
+ - Recognize title-bearing border rows and establish outer columns from matched frame rules.
21
+ - Align a boundary character only across whitespace, or fill a missing boundary cell only where it is whitespace.
22
+ - Preserve interior text, nested frame geometry, ambiguous rows, and ordinary content literally; no global symbol replacement.
23
+ - Keep the source ASCII byte-for-byte in persistence and retain the existing question schema, answer payload, viewport and panning behavior.
24
+
25
+ Hosts may continue rendering the same source literally. This decision changes terminal typography only; it adds no capability or host contract.
26
+
27
+ ## Consequences
28
+
29
+ A valid framed sketch can display connected corners and continuous vertical edges even when its source omitted or misplaced a boundary glyph. Repairs are projection-only and deliberately conservative; ambiguous or content-conflicting rows remain untouched. No migration is required.
30
+
31
+ ## Verification
32
+
33
+ Use structural unit fixtures and isolated production PTY runs at compact and wide terminal sizes. Verify the displayed topology, panning/resizing, and byte-for-byte source and answer preservation. This does not claim that every emulator/font renders box glyphs identically or that live-model sketches always describe the intended design.
@@ -0,0 +1,43 @@
1
+ ---
2
+ id: ADR-0030
3
+ title: Agent profiles, one checklist per agent, and the subagent roster under the status line
4
+ status: accepted
5
+ created: 2026-10-24
6
+ updated: 2026-10-24
7
+ related: [PROP-0029, PROP-0006, ADR-0003, INV-RUN-2, INV-CAP-1, INV-PAR-1]
8
+ ---
9
+
10
+ # ADR-0030 — Agent profiles, one checklist per agent, and the subagent roster under the status line
11
+
12
+ ## Context
13
+
14
+ People want to start subagents of a known kind, such as a worker that edits and an explorer that
15
+ only reads, and to follow their progress from the terminal. Subagents were copies of the parent
16
+ or instruction-only c5 definitions, the terminal did not register the checklist tool, and the
17
+ roster sat above the composer with a heading and no indication of each child's kind or progress.
18
+
19
+ ## Decision
20
+
21
+ - Adopt [PROP-0029](../architecture/proposals/PROP-0029-agent-profiles.md): agent profiles are
22
+ Markdown files (built-in, `<data root>/agents/`, `<project>/.xingular/agents/`, then c5 names)
23
+ that a spawn resolves by name. A profile narrows tools and plugins and may choose a variant,
24
+ model and effort. It never widens the parent's capabilities.
25
+ - Progress stays **one checklist per run** (PROP-0006). The parent's list is the plan the person
26
+ watches. Each child keeps its own list, and the roster shows its `n of m tasks`. There is no
27
+ shared, claimable task pool.
28
+ - The terminal registers `checklist_write`, shows each write as a checklist block, and the prompt's
29
+ Progress group asks the model to keep it current because the person follows work from it.
30
+ - The roster sits under the status line after one blank line, with no heading. Each row reads: status
31
+ mark, profile name in its colour, session name, tasks.
32
+
33
+ ## Consequences
34
+
35
+ Profiles are a foundation feature, not variant data: refinement does not change them. A project
36
+ can carry profiles in its repository. The App gets the same capability through `agents.*` and
37
+ `RunRecord.profile`; it has no Agents screen yet (parity `planned`).
38
+
39
+ ## Verification
40
+
41
+ Unit tests for profiles, narrowing, spawn, the monitor, the roster and the Agents page;
42
+ `npm run prove`; and a loopback PTY run that checks the blank row under the status line, the row
43
+ order, and the profile colours.
@@ -0,0 +1,37 @@
1
+ # ADR-0031 — Plugin commands use owner-qualified namespaces
2
+
3
+ Status: Accepted (PROP-0031, 2026-10-25).
4
+ Supersedes: The command-namespace decision in [ADR-0021](ADR-0021-required-command-namespaces.md).
5
+ Related: [PROP-0031](../architecture/proposals/PROP-0031-plugin-command-owner-namespaces.md),
6
+ [11 Terminal](../architecture/11-terminal.md),
7
+ [14 Surfaces and parity](../architecture/14-surfaces-and-parity.md),
8
+ [06 Plugins and capabilities](../architecture/06-plugins-and-capabilities.md).
9
+
10
+ ## Context
11
+
12
+ The generic `/plugin:<command>` form hid command ownership for optional built-ins and Pi extensions,
13
+ while required built-ins used a separate bare-command rule. Both forms left a global collision surface
14
+ and made help, completion and invocation inconsistent across owners. Annotation routes also used the
15
+ generic plugin prefix despite the plugin's annotation-focused purpose.
16
+
17
+ ## Decision
18
+
19
+ Every plugin-owned terminal command is invoked as `/<owner-prefix>:<command>`, regardless of whether
20
+ the owner is a required built-in, optional built-in or Pi extension. Core terminal commands remain
21
+ unprefixed, and `/skill:<name>` remains reserved for skill invocation. Built-in plugins use stable
22
+ prefixes; Pi packages may set `harness.commandPrefix` and otherwise derive the prefix from normalized
23
+ package identity, while loose extensions use normalized extension names. Prefixes identify owners and
24
+ must be unique; duplicate commands within an owner and owner-prefix collisions are rejected with
25
+ source diagnostics.
26
+
27
+ A built-in plugin module may choose a default command for its namespace root. Web annotations uses `/annotate:` for
28
+ capture, `/annotate:annotate` as an equivalent alias, and `/annotate:notes` for saved annotations.
29
+ For one release, the previous `/plugin:<command>` and bare required-plugin forms remain hidden
30
+ compatibility aliases when unambiguous. They are omitted from help and completion.
31
+
32
+ ## Consequences
33
+
34
+ The namespace rule applies uniformly to completion, help, highlighting and dispatch. Plugin packages
35
+ may opt into a stable custom prefix with `harness.commandPrefix`. The compatibility aliases expire
36
+ after one release and should not be used for new scripts or keybindings. This changes no server method,
37
+ capability identifier, account data or annotation storage format.
@@ -0,0 +1,33 @@
1
+ # ADR-0032 — Rehydrate bounded run checkpoints after compaction
2
+
3
+ Status: Accepted (PROP-0033, 2026-10-25).
4
+ Related: [PROP-0033](../architecture/proposals/PROP-0033-compaction-plan-checkpoints.md),
5
+ [02 Sessions and runs](../architecture/02-sessions-and-runs.md),
6
+ [04 Prompt](../architecture/04-prompt.md),
7
+ [11 Terminal](../architecture/11-terminal.md),
8
+ [14 Surfaces and parity](../architecture/14-surfaces-and-parity.md).
9
+
10
+ ## Context
11
+
12
+ Pi preserves the native conversation transcript when compacting, but subsequent model requests use a
13
+ summary and recent messages. The Harness already records the latest checklist as a run event and
14
+ restores it when a stopped run is continued; an active run lacked equivalent rehydration after
15
+ compaction. SDK plan instructions are dynamic context and may also be included in the summarized
16
+ span.
17
+
18
+ ## Decision
19
+
20
+ After compaction, each model request in the still-active run receives one bounded, ephemeral context
21
+ message when a checklist or applicable plan instructions exist to restore. It contains the current
22
+ request and available state. The prompt compiler assembles this content, and one Harness-owned
23
+ extension provides the same behavior to embedded sessions and the terminal. The extension state is run-scoped and clears on
24
+ settlement or branch navigation. The context message is not persisted to the native transcript or
25
+ run-event stream; existing session history, checklist events and continuation records remain the
26
+ sources of durable state. Hidden reasoning is never captured.
27
+
28
+ ## Consequences
29
+
30
+ Post-compaction requests carry a small additional context block until the active run settles. The
31
+ feature adds no storage, event, server method, tool, permission or stable-system-prompt change. Plan
32
+ mode's existing gate remains authoritative. Runs without an explicit checklist or active plan state
33
+ receive no checkpoint.