@xingular/harness 0.1.7 → 1.1.1

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 (819) hide show
  1. package/CHANGELOG.md +125 -1
  2. package/LICENSE +202 -0
  3. package/NOTICE.md +22 -0
  4. package/README.md +239 -86
  5. package/THIRD_PARTY_LICENSES.md +942 -0
  6. package/dist/cli.js +17853 -13114
  7. package/dist/sdk/accounts/accounts.d.ts +165 -0
  8. package/dist/sdk/accounts/accounts.js +730 -0
  9. package/dist/sdk/accounts/choices.d.ts +23 -0
  10. package/dist/sdk/accounts/choices.js +62 -0
  11. package/dist/sdk/accounts/env.d.ts +78 -0
  12. package/dist/sdk/accounts/env.js +294 -0
  13. package/dist/sdk/accounts/secrets.d.ts +16 -0
  14. package/dist/sdk/accounts/secrets.js +40 -0
  15. package/dist/sdk/accounts/store.d.ts +114 -0
  16. package/dist/sdk/accounts/store.js +255 -0
  17. package/dist/sdk/agents/builtin.d.ts +2 -0
  18. package/dist/sdk/agents/builtin.js +34 -0
  19. package/dist/sdk/agents/narrow.d.ts +13 -0
  20. package/dist/sdk/agents/narrow.js +29 -0
  21. package/dist/sdk/agents/profiles.d.ts +80 -0
  22. package/dist/sdk/agents/profiles.js +221 -0
  23. package/dist/sdk/annotations/bridge.d.ts +42 -0
  24. package/dist/sdk/annotations/bridge.js +264 -0
  25. package/dist/sdk/annotations/capture.d.ts +116 -0
  26. package/dist/sdk/annotations/capture.js +308 -0
  27. package/dist/sdk/annotations/delivery.d.ts +72 -0
  28. package/dist/sdk/annotations/delivery.js +130 -0
  29. package/dist/sdk/annotations/inspect.d.ts +10 -0
  30. package/dist/sdk/annotations/inspect.js +33 -0
  31. package/dist/sdk/annotations/isolated.d.ts +6 -0
  32. package/dist/sdk/annotations/isolated.js +51 -0
  33. package/dist/sdk/annotations/pageScript.d.ts +28 -0
  34. package/dist/sdk/annotations/pageScript.js +570 -0
  35. package/dist/sdk/annotations/part.d.ts +10 -0
  36. package/dist/sdk/annotations/part.js +144 -0
  37. package/dist/sdk/annotations/queue.d.ts +4 -0
  38. package/dist/sdk/annotations/queue.js +40 -0
  39. package/dist/sdk/annotations/serverMethods.d.ts +3 -0
  40. package/dist/sdk/annotations/serverMethods.js +62 -0
  41. package/dist/sdk/annotations/store.d.ts +160 -0
  42. package/dist/sdk/annotations/store.js +386 -0
  43. package/dist/sdk/browser/config.d.ts +16 -0
  44. package/dist/sdk/browser/config.js +22 -0
  45. package/dist/sdk/browser/diagnostics.d.ts +4 -0
  46. package/dist/sdk/browser/diagnostics.js +38 -0
  47. package/dist/sdk/browser/index.d.ts +28 -0
  48. package/dist/sdk/browser/index.js +72 -0
  49. package/dist/sdk/browser/network.d.ts +10 -0
  50. package/dist/sdk/browser/network.js +59 -0
  51. package/dist/sdk/browser/serverMethods.d.ts +3 -0
  52. package/dist/sdk/browser/serverMethods.js +7 -0
  53. package/dist/sdk/browser/session.d.ts +85 -0
  54. package/dist/sdk/browser/session.js +228 -0
  55. package/dist/sdk/browser/tools.d.ts +8 -0
  56. package/dist/sdk/browser/tools.js +329 -0
  57. package/dist/sdk/capabilities/api.d.ts +22 -0
  58. package/dist/sdk/capabilities/api.js +54 -0
  59. package/dist/sdk/capabilities/runSnapshot.d.ts +18 -0
  60. package/dist/sdk/capabilities/runSnapshot.js +47 -0
  61. package/dist/sdk/capabilities/types.d.ts +29 -0
  62. package/dist/sdk/capabilities/types.js +1 -0
  63. package/dist/sdk/cli.d.ts +2 -0
  64. package/dist/sdk/cli.js +150 -0
  65. package/dist/sdk/core/bus.d.ts +23 -0
  66. package/dist/sdk/core/bus.js +76 -0
  67. package/dist/sdk/core/caller.d.ts +22 -0
  68. package/dist/sdk/core/caller.js +16 -0
  69. package/dist/sdk/core/changes.d.ts +15 -0
  70. package/dist/sdk/core/changes.js +15 -0
  71. package/dist/sdk/core/effort.d.ts +2 -0
  72. package/dist/sdk/core/effort.js +1 -0
  73. package/dist/sdk/core/env.d.ts +18 -0
  74. package/dist/sdk/core/env.js +8 -0
  75. package/dist/sdk/core/errors.d.ts +15 -0
  76. package/dist/sdk/core/errors.js +24 -0
  77. package/dist/sdk/core/frontmatter.d.ts +12 -0
  78. package/dist/sdk/core/frontmatter.js +50 -0
  79. package/dist/sdk/core/fs.d.ts +18 -0
  80. package/dist/sdk/core/fs.js +106 -0
  81. package/dist/sdk/core/index.d.ts +24 -0
  82. package/dist/sdk/core/index.js +187 -0
  83. package/dist/sdk/core/path.d.ts +7 -0
  84. package/dist/sdk/core/path.js +79 -0
  85. package/dist/sdk/core/projects.d.ts +18 -0
  86. package/dist/sdk/core/projects.js +67 -0
  87. package/dist/sdk/core/secrets.d.ts +2 -0
  88. package/dist/sdk/core/secrets.js +5 -0
  89. package/dist/sdk/core/text.d.ts +7 -0
  90. package/dist/sdk/core/text.js +40 -0
  91. package/dist/sdk/doctor/checks.d.ts +5 -0
  92. package/dist/sdk/doctor/checks.js +208 -0
  93. package/dist/sdk/doctor/probe.d.ts +4 -0
  94. package/dist/sdk/doctor/probe.js +92 -0
  95. package/dist/sdk/doctor/serverMethods.d.ts +3 -0
  96. package/dist/sdk/doctor/serverMethods.js +8 -0
  97. package/dist/sdk/doctor/service.d.ts +23 -0
  98. package/dist/sdk/doctor/service.js +144 -0
  99. package/dist/sdk/doctor/types.d.ts +141 -0
  100. package/dist/sdk/doctor/types.js +29 -0
  101. package/dist/sdk/harness.d.ts +148 -0
  102. package/dist/sdk/harness.js +338 -0
  103. package/dist/sdk/history/lessonPrompt.d.ts +2 -0
  104. package/dist/sdk/history/lessonPrompt.js +15 -0
  105. package/dist/sdk/history/lessons.d.ts +52 -0
  106. package/dist/sdk/history/lessons.js +173 -0
  107. package/dist/sdk/history/recall.d.ts +68 -0
  108. package/dist/sdk/history/recall.js +199 -0
  109. package/dist/sdk/history/serverMethods.d.ts +3 -0
  110. package/dist/sdk/history/serverMethods.js +8 -0
  111. package/dist/sdk/history/trajectory.d.ts +7 -0
  112. package/dist/sdk/history/trajectory.js +216 -0
  113. package/dist/sdk/hub/catalog.json +123 -0
  114. package/dist/sdk/hub/cli.d.ts +7 -0
  115. package/dist/sdk/hub/cli.js +81 -0
  116. package/dist/sdk/hub/hub.d.ts +74 -0
  117. package/dist/sdk/hub/hub.js +474 -0
  118. package/dist/sdk/hub/schema.d.ts +280 -0
  119. package/dist/sdk/hub/schema.js +78 -0
  120. package/dist/sdk/hub/serverMethods.d.ts +3 -0
  121. package/dist/sdk/hub/serverMethods.js +11 -0
  122. package/dist/sdk/index.d.ts +73 -0
  123. package/dist/sdk/index.js +55 -0
  124. package/dist/sdk/mcp/connections.d.ts +83 -0
  125. package/dist/sdk/mcp/connections.js +676 -0
  126. package/dist/sdk/mcp/manager.d.ts +26 -0
  127. package/dist/sdk/mcp/manager.js +124 -0
  128. package/dist/sdk/mcp/oauth.d.ts +35 -0
  129. package/dist/sdk/mcp/oauth.js +171 -0
  130. package/dist/sdk/mcp/scopeMigration.d.ts +19 -0
  131. package/dist/sdk/mcp/scopeMigration.js +198 -0
  132. package/dist/sdk/mcp/serverMethods.d.ts +3 -0
  133. package/dist/sdk/mcp/serverMethods.js +22 -0
  134. package/dist/sdk/mcp/service.d.ts +160 -0
  135. package/dist/sdk/mcp/service.js +510 -0
  136. package/dist/sdk/mcp/types.d.ts +131 -0
  137. package/dist/sdk/mcp/types.js +49 -0
  138. package/dist/sdk/pi/runtime.d.ts +13 -0
  139. package/dist/sdk/pi/runtime.js +31 -0
  140. package/dist/sdk/plugins/api.d.ts +66 -0
  141. package/dist/sdk/plugins/api.js +155 -0
  142. package/dist/sdk/plugins/attachments.d.ts +46 -0
  143. package/dist/sdk/plugins/attachments.js +111 -0
  144. package/dist/sdk/plugins/builtin.d.ts +7 -0
  145. package/dist/sdk/plugins/builtin.js +163 -0
  146. package/dist/sdk/plugins/builtinRegistry.d.ts +53 -0
  147. package/dist/sdk/plugins/builtinRegistry.js +49 -0
  148. package/dist/sdk/plugins/catalogue.d.ts +29 -0
  149. package/dist/sdk/plugins/catalogue.js +196 -0
  150. package/dist/sdk/plugins/cli.d.ts +13 -0
  151. package/dist/sdk/plugins/cli.js +188 -0
  152. package/dist/sdk/plugins/discover.d.ts +42 -0
  153. package/dist/sdk/plugins/discover.js +115 -0
  154. package/dist/sdk/plugins/firstParty.d.ts +50 -0
  155. package/dist/sdk/plugins/firstParty.js +113 -0
  156. package/dist/sdk/plugins/hooks.d.ts +94 -0
  157. package/dist/sdk/plugins/hooks.js +162 -0
  158. package/dist/sdk/plugins/identity.d.ts +19 -0
  159. package/dist/sdk/plugins/identity.js +48 -0
  160. package/dist/sdk/plugins/install.d.ts +20 -0
  161. package/dist/sdk/plugins/install.js +110 -0
  162. package/dist/sdk/plugins/inventory.d.ts +22 -0
  163. package/dist/sdk/plugins/inventory.js +110 -0
  164. package/dist/sdk/plugins/manifest.d.ts +13 -0
  165. package/dist/sdk/plugins/manifest.js +56 -0
  166. package/dist/sdk/plugins/plugins.d.ts +104 -0
  167. package/dist/sdk/plugins/plugins.js +164 -0
  168. package/dist/sdk/plugins/runtime.d.ts +9 -0
  169. package/dist/sdk/plugins/runtime.js +95 -0
  170. package/dist/sdk/plugins/trust.d.ts +44 -0
  171. package/dist/sdk/plugins/trust.js +120 -0
  172. package/dist/sdk/plugins/types.d.ts +159 -0
  173. package/dist/sdk/plugins/types.js +7 -0
  174. package/dist/sdk/prompt/compile.d.ts +177 -0
  175. package/dist/sdk/prompt/compile.js +413 -0
  176. package/dist/sdk/refine/cli.d.ts +4 -0
  177. package/dist/sdk/refine/cli.js +186 -0
  178. package/dist/sdk/refine/demo.d.ts +21 -0
  179. package/dist/sdk/refine/demo.js +114 -0
  180. package/dist/sdk/refine/evidence.d.ts +55 -0
  181. package/dist/sdk/refine/evidence.js +330 -0
  182. package/dist/sdk/refine/host.d.ts +51 -0
  183. package/dist/sdk/refine/host.js +76 -0
  184. package/dist/sdk/refine/ledger.d.ts +48 -0
  185. package/dist/sdk/refine/ledger.js +76 -0
  186. package/dist/sdk/refine/library.d.ts +55 -0
  187. package/dist/sdk/refine/library.js +177 -0
  188. package/dist/sdk/refine/pi.d.ts +72 -0
  189. package/dist/sdk/refine/pi.js +248 -0
  190. package/dist/sdk/refine/prompts.d.ts +45 -0
  191. package/dist/sdk/refine/prompts.js +390 -0
  192. package/dist/sdk/refine/recursion.d.ts +113 -0
  193. package/dist/sdk/refine/recursion.js +258 -0
  194. package/dist/sdk/refine/runner.d.ts +81 -0
  195. package/dist/sdk/refine/runner.js +150 -0
  196. package/dist/sdk/refine/selection.d.ts +57 -0
  197. package/dist/sdk/refine/selection.js +251 -0
  198. package/dist/sdk/refine/serverMethods.d.ts +3 -0
  199. package/dist/sdk/refine/serverMethods.js +20 -0
  200. package/dist/sdk/refine/service.d.ts +84 -0
  201. package/dist/sdk/refine/service.js +165 -0
  202. package/dist/sdk/refine/suite.d.ts +67 -0
  203. package/dist/sdk/refine/suite.js +174 -0
  204. package/dist/sdk/refine/trajectory.d.ts +9 -0
  205. package/dist/sdk/refine/trajectory.js +68 -0
  206. package/dist/sdk/refine/types.d.ts +77 -0
  207. package/dist/sdk/refine/types.js +10 -0
  208. package/dist/sdk/server/methods.d.ts +3 -0
  209. package/dist/sdk/server/methods.js +293 -0
  210. package/dist/sdk/server/params.d.ts +4 -0
  211. package/dist/sdk/server/params.js +11 -0
  212. package/dist/sdk/server/remote.d.ts +19 -0
  213. package/dist/sdk/server/remote.js +84 -0
  214. package/dist/sdk/server/rpc.d.ts +20 -0
  215. package/dist/sdk/server/rpc.js +102 -0
  216. package/dist/sdk/server/serve.d.ts +10 -0
  217. package/dist/sdk/server/serve.js +18 -0
  218. package/dist/sdk/sessions/approvals.d.ts +47 -0
  219. package/dist/sdk/sessions/approvals.js +119 -0
  220. package/dist/sdk/sessions/continuation.d.ts +48 -0
  221. package/dist/sdk/sessions/continuation.js +85 -0
  222. package/dist/sdk/sessions/contracts.d.ts +551 -0
  223. package/dist/sdk/sessions/contracts.js +338 -0
  224. package/dist/sdk/sessions/extensionUi.d.ts +19 -0
  225. package/dist/sdk/sessions/extensionUi.js +64 -0
  226. package/dist/sdk/sessions/history.d.ts +16 -0
  227. package/dist/sdk/sessions/history.js +68 -0
  228. package/dist/sdk/sessions/lineageJoin.d.ts +2 -0
  229. package/dist/sdk/sessions/lineageJoin.js +61 -0
  230. package/dist/sdk/sessions/planMode.d.ts +39 -0
  231. package/dist/sdk/sessions/planMode.js +93 -0
  232. package/dist/sdk/sessions/policy.d.ts +43 -0
  233. package/dist/sdk/sessions/policy.js +1 -0
  234. package/dist/sdk/sessions/pricing.d.ts +34 -0
  235. package/dist/sdk/sessions/pricing.js +40 -0
  236. package/dist/sdk/sessions/reasoningSummaries.d.ts +11 -0
  237. package/dist/sdk/sessions/reasoningSummaries.js +61 -0
  238. package/dist/sdk/sessions/registry.d.ts +103 -0
  239. package/dist/sdk/sessions/registry.js +386 -0
  240. package/dist/sdk/sessions/runIndex.d.ts +21 -0
  241. package/dist/sdk/sessions/runIndex.js +65 -0
  242. package/dist/sdk/sessions/runStore.d.ts +66 -0
  243. package/dist/sdk/sessions/runStore.js +337 -0
  244. package/dist/sdk/sessions/runner.d.ts +213 -0
  245. package/dist/sdk/sessions/runner.js +589 -0
  246. package/dist/sdk/sessions/sessions.d.ts +152 -0
  247. package/dist/sdk/sessions/sessions.js +461 -0
  248. package/dist/sdk/sessions/sideQuestionServerMethods.d.ts +3 -0
  249. package/dist/sdk/sessions/sideQuestionServerMethods.js +19 -0
  250. package/dist/sdk/sessions/sideQuestions.d.ts +66 -0
  251. package/dist/sdk/sessions/sideQuestions.js +290 -0
  252. package/dist/sdk/sessions/subagentServerMethods.d.ts +3 -0
  253. package/dist/sdk/sessions/subagentServerMethods.js +41 -0
  254. package/dist/sdk/sessions/subagentService.d.ts +52 -0
  255. package/dist/sdk/sessions/subagentService.js +265 -0
  256. package/dist/sdk/sessions/subagents.d.ts +58 -0
  257. package/dist/sdk/sessions/subagents.js +87 -0
  258. package/dist/sdk/terminal/accountsMenu.d.ts +46 -0
  259. package/dist/sdk/terminal/accountsMenu.js +392 -0
  260. package/dist/sdk/terminal/browser.d.ts +62 -0
  261. package/dist/sdk/terminal/browser.js +41 -0
  262. package/dist/sdk/terminal/browserControl.d.ts +29 -0
  263. package/dist/sdk/terminal/browserControl.js +186 -0
  264. package/dist/sdk/terminal/cli.d.ts +20 -0
  265. package/dist/sdk/terminal/cli.js +121 -0
  266. package/dist/sdk/terminal/client.d.ts +15 -0
  267. package/dist/sdk/terminal/client.js +126 -0
  268. package/dist/sdk/terminal/commandHelp.d.ts +17 -0
  269. package/dist/sdk/terminal/commandHelp.js +20 -0
  270. package/dist/sdk/terminal/control.d.ts +4 -0
  271. package/dist/sdk/terminal/control.js +25 -0
  272. package/dist/sdk/terminal/controller.d.ts +78 -0
  273. package/dist/sdk/terminal/controller.js +383 -0
  274. package/dist/sdk/terminal/hubMenu.d.ts +10 -0
  275. package/dist/sdk/terminal/hubMenu.js +34 -0
  276. package/dist/sdk/terminal/launch.d.ts +5 -0
  277. package/dist/sdk/terminal/launch.js +27 -0
  278. package/dist/sdk/terminal/logs.d.ts +14 -0
  279. package/dist/sdk/terminal/logs.js +59 -0
  280. package/dist/sdk/terminal/opentui/subagentsWidget.d.ts +28 -0
  281. package/dist/sdk/terminal/opentui/subagentsWidget.js +52 -0
  282. package/dist/sdk/terminal/piExtension.d.ts +6 -0
  283. package/dist/sdk/terminal/piExtension.js +377 -0
  284. package/dist/sdk/terminal/pluginMenu.d.ts +34 -0
  285. package/dist/sdk/terminal/pluginMenu.js +101 -0
  286. package/dist/sdk/terminal/socket.d.ts +73 -0
  287. package/dist/sdk/terminal/socket.js +287 -0
  288. package/dist/sdk/terminal/standalone.d.ts +20 -0
  289. package/dist/sdk/terminal/standalone.js +186 -0
  290. package/dist/sdk/terminal/subagentMonitor.d.ts +38 -0
  291. package/dist/sdk/terminal/subagentMonitor.js +121 -0
  292. package/dist/sdk/terminal/terminals.d.ts +212 -0
  293. package/dist/sdk/terminal/terminals.js +1108 -0
  294. package/dist/sdk/terminal/trajectory.d.ts +10 -0
  295. package/dist/sdk/terminal/trajectory.js +30 -0
  296. package/dist/sdk/terminal/tui/annotateCommand.d.ts +3 -0
  297. package/dist/sdk/terminal/tui/annotateCommand.js +22 -0
  298. package/dist/sdk/terminal/tui/chrome.d.ts +64 -0
  299. package/dist/sdk/terminal/tui/chrome.js +169 -0
  300. package/dist/sdk/terminal/tui/clipboardFiles.d.ts +11 -0
  301. package/dist/sdk/terminal/tui/clipboardFiles.js +74 -0
  302. package/dist/sdk/terminal/tui/commandPages.d.ts +11 -0
  303. package/dist/sdk/terminal/tui/commandPages.js +111 -0
  304. package/dist/sdk/terminal/tui/commands.d.ts +46 -0
  305. package/dist/sdk/terminal/tui/commands.js +399 -0
  306. package/dist/sdk/terminal/tui/dialogGeometry.d.ts +27 -0
  307. package/dist/sdk/terminal/tui/dialogGeometry.js +52 -0
  308. package/dist/sdk/terminal/tui/dialogs.d.ts +80 -0
  309. package/dist/sdk/terminal/tui/dialogs.js +370 -0
  310. package/dist/sdk/terminal/tui/keybindings.d.ts +11 -0
  311. package/dist/sdk/terminal/tui/keybindings.js +49 -0
  312. package/dist/sdk/terminal/tui/list.d.ts +73 -0
  313. package/dist/sdk/terminal/tui/list.js +196 -0
  314. package/dist/sdk/terminal/tui/modeChoices.d.ts +42 -0
  315. package/dist/sdk/terminal/tui/modeChoices.js +70 -0
  316. package/dist/sdk/terminal/tui/modelPicker.d.ts +55 -0
  317. package/dist/sdk/terminal/tui/modelPicker.js +150 -0
  318. package/dist/sdk/terminal/tui/mouse.d.ts +3 -0
  319. package/dist/sdk/terminal/tui/mouse.js +3 -0
  320. package/dist/sdk/terminal/tui/page.d.ts +17 -0
  321. package/dist/sdk/terminal/tui/page.js +1 -0
  322. package/dist/sdk/terminal/tui/pageOverlay.d.ts +27 -0
  323. package/dist/sdk/terminal/tui/pageOverlay.js +156 -0
  324. package/dist/sdk/terminal/tui/pages/accountsPage.d.ts +76 -0
  325. package/dist/sdk/terminal/tui/pages/accountsPage.js +409 -0
  326. package/dist/sdk/terminal/tui/pages/agentsPage.d.ts +74 -0
  327. package/dist/sdk/terminal/tui/pages/agentsPage.js +190 -0
  328. package/dist/sdk/terminal/tui/pages/annotatePage.d.ts +94 -0
  329. package/dist/sdk/terminal/tui/pages/annotatePage.js +341 -0
  330. package/dist/sdk/terminal/tui/pages/browserPage.d.ts +87 -0
  331. package/dist/sdk/terminal/tui/pages/browserPage.js +738 -0
  332. package/dist/sdk/terminal/tui/pages/componentsPage.d.ts +47 -0
  333. package/dist/sdk/terminal/tui/pages/componentsPage.js +119 -0
  334. package/dist/sdk/terminal/tui/pages/doctorPage.d.ts +39 -0
  335. package/dist/sdk/terminal/tui/pages/doctorPage.js +233 -0
  336. package/dist/sdk/terminal/tui/pages/hubPage.d.ts +39 -0
  337. package/dist/sdk/terminal/tui/pages/hubPage.js +128 -0
  338. package/dist/sdk/terminal/tui/pages/logPage.d.ts +38 -0
  339. package/dist/sdk/terminal/tui/pages/logPage.js +189 -0
  340. package/dist/sdk/terminal/tui/pages/notesPage.d.ts +75 -0
  341. package/dist/sdk/terminal/tui/pages/notesPage.js +201 -0
  342. package/dist/sdk/terminal/tui/pages/permissionsPage.d.ts +44 -0
  343. package/dist/sdk/terminal/tui/pages/permissionsPage.js +124 -0
  344. package/dist/sdk/terminal/tui/pages/pluginsPage.d.ts +57 -0
  345. package/dist/sdk/terminal/tui/pages/pluginsPage.js +243 -0
  346. package/dist/sdk/terminal/tui/pages/settingsPage.d.ts +63 -0
  347. package/dist/sdk/terminal/tui/pages/settingsPage.js +103 -0
  348. package/dist/sdk/terminal/tui/pages/subagentsPage.d.ts +23 -0
  349. package/dist/sdk/terminal/tui/pages/subagentsPage.js +70 -0
  350. package/dist/sdk/terminal/tui/pages/trajectoryPage.d.ts +65 -0
  351. package/dist/sdk/terminal/tui/pages/trajectoryPage.js +450 -0
  352. package/dist/sdk/terminal/tui/pages/worktreesPage.d.ts +72 -0
  353. package/dist/sdk/terminal/tui/pages/worktreesPage.js +203 -0
  354. package/dist/sdk/terminal/tui/piAdapter.d.ts +18 -0
  355. package/dist/sdk/terminal/tui/piAdapter.js +48 -0
  356. package/dist/sdk/terminal/tui/planMode.d.ts +2 -0
  357. package/dist/sdk/terminal/tui/planMode.js +2 -0
  358. package/dist/sdk/terminal/tui/pluginCommands.d.ts +14 -0
  359. package/dist/sdk/terminal/tui/pluginCommands.js +27 -0
  360. package/dist/sdk/terminal/tui/questionPicker.d.ts +20 -0
  361. package/dist/sdk/terminal/tui/questionPicker.js +150 -0
  362. package/dist/sdk/terminal/tui/questions.d.ts +21 -0
  363. package/dist/sdk/terminal/tui/questions.js +42 -0
  364. package/dist/sdk/terminal/tui/runtime.d.ts +114 -0
  365. package/dist/sdk/terminal/tui/runtime.js +443 -0
  366. package/dist/sdk/terminal/tui/search.d.ts +22 -0
  367. package/dist/sdk/terminal/tui/search.js +60 -0
  368. package/dist/sdk/terminal/tui/selection.d.ts +16 -0
  369. package/dist/sdk/terminal/tui/selection.js +16 -0
  370. package/dist/sdk/terminal/tui/sessionUi.d.ts +3 -0
  371. package/dist/sdk/terminal/tui/sessionUi.js +30 -0
  372. package/dist/sdk/terminal/tui/settingsModel.d.ts +14 -0
  373. package/dist/sdk/terminal/tui/settingsModel.js +114 -0
  374. package/dist/sdk/terminal/tui/sideQuestion.d.ts +53 -0
  375. package/dist/sdk/terminal/tui/sideQuestion.js +230 -0
  376. package/dist/sdk/terminal/tui/skillInvocation.d.ts +9 -0
  377. package/dist/sdk/terminal/tui/skillInvocation.js +43 -0
  378. package/dist/sdk/terminal/tui/status.d.ts +18 -0
  379. package/dist/sdk/terminal/tui/status.js +67 -0
  380. package/dist/sdk/terminal/tui/theme.d.ts +45 -0
  381. package/dist/sdk/terminal/tui/theme.js +176 -0
  382. package/dist/sdk/terminal/tui/treeModel.d.ts +79 -0
  383. package/dist/sdk/terminal/tui/treeModel.js +483 -0
  384. package/dist/sdk/terminal/tui/treePicker.d.ts +49 -0
  385. package/dist/sdk/terminal/tui/treePicker.js +251 -0
  386. package/dist/sdk/terminal/tui/ui.d.ts +49 -0
  387. package/dist/sdk/terminal/tui/ui.js +149 -0
  388. package/dist/sdk/terminal/tui/workingStatus.d.ts +9 -0
  389. package/dist/sdk/terminal/tui/workingStatus.js +229 -0
  390. package/dist/sdk/tools/askUser.d.ts +6 -0
  391. package/dist/sdk/tools/askUser.js +92 -0
  392. package/dist/sdk/tools/checklist.d.ts +9 -0
  393. package/dist/sdk/tools/checklist.js +54 -0
  394. package/dist/sdk/tools/definitions.d.ts +30 -0
  395. package/dist/sdk/tools/definitions.js +117 -0
  396. package/dist/sdk/tools/dispatch.d.ts +16 -0
  397. package/dist/sdk/tools/dispatch.js +67 -0
  398. package/dist/sdk/tools/harnessTools.d.ts +8 -0
  399. package/dist/sdk/tools/harnessTools.js +20 -0
  400. package/dist/sdk/tools/sessionName.d.ts +7 -0
  401. package/dist/sdk/tools/sessionName.js +31 -0
  402. package/dist/sdk/tools/spawnSubagent.d.ts +4 -0
  403. package/dist/sdk/tools/spawnSubagent.js +58 -0
  404. package/dist/sdk/tools/types.d.ts +48 -0
  405. package/dist/sdk/tools/types.js +1 -0
  406. package/dist/sdk/variant/components.d.ts +34 -0
  407. package/dist/sdk/variant/components.js +230 -0
  408. package/dist/sdk/variant/materialise.d.ts +66 -0
  409. package/dist/sdk/variant/materialise.js +81 -0
  410. package/dist/sdk/variant/migrate.d.ts +4 -0
  411. package/dist/sdk/variant/migrate.js +41 -0
  412. package/dist/sdk/variant/seed.d.ts +20 -0
  413. package/dist/sdk/variant/seed.js +116 -0
  414. package/dist/sdk/variant/store.d.ts +82 -0
  415. package/dist/sdk/variant/store.js +151 -0
  416. package/dist/sdk/variant/surface.d.ts +56 -0
  417. package/dist/sdk/variant/surface.js +81 -0
  418. package/dist/sdk/variant/trust.d.ts +27 -0
  419. package/dist/sdk/variant/trust.js +64 -0
  420. package/dist/sdk/variant/variant.d.ts +71 -0
  421. package/dist/sdk/variant/variant.js +331 -0
  422. package/dist/sdk/web/markdown.d.ts +10 -0
  423. package/dist/sdk/web/markdown.js +66 -0
  424. package/dist/sdk/web/part.d.ts +10 -0
  425. package/dist/sdk/web/part.js +6 -0
  426. package/dist/sdk/web/safeRequest.d.ts +34 -0
  427. package/dist/sdk/web/safeRequest.js +175 -0
  428. package/dist/sdk/web/search.d.ts +53 -0
  429. package/dist/sdk/web/search.js +168 -0
  430. package/dist/sdk/web/serverMethods.d.ts +3 -0
  431. package/dist/sdk/web/serverMethods.js +7 -0
  432. package/dist/sdk/web/text.d.ts +2 -0
  433. package/dist/sdk/web/text.js +7 -0
  434. package/dist/sdk/web/tools.d.ts +22 -0
  435. package/dist/sdk/web/tools.js +195 -0
  436. package/dist/sdk/web/turndown-plugin-gfm.d.ts +4 -0
  437. package/dist/sdk/wiki/notes.d.ts +68 -0
  438. package/dist/sdk/wiki/notes.js +297 -0
  439. package/dist/sdk/wiki/serverMethods.d.ts +3 -0
  440. package/dist/sdk/wiki/serverMethods.js +26 -0
  441. package/dist/sdk/worktrees/cli.d.ts +11 -0
  442. package/dist/sdk/worktrees/cli.js +146 -0
  443. package/dist/sdk/worktrees/copy.d.ts +9 -0
  444. package/dist/sdk/worktrees/copy.js +111 -0
  445. package/dist/sdk/worktrees/git.d.ts +16 -0
  446. package/dist/sdk/worktrees/git.js +81 -0
  447. package/dist/sdk/worktrees/serverMethods.d.ts +3 -0
  448. package/dist/sdk/worktrees/serverMethods.js +30 -0
  449. package/dist/sdk/worktrees/service.d.ts +73 -0
  450. package/dist/sdk/worktrees/service.js +483 -0
  451. package/dist/sdk/worktrees/setup.d.ts +23 -0
  452. package/dist/sdk/worktrees/setup.js +65 -0
  453. package/dist/sdk/worktrees/types.d.ts +91 -0
  454. package/dist/sdk/worktrees/types.js +1 -0
  455. package/dist/sdk/world/actions.d.ts +23 -0
  456. package/dist/sdk/world/actions.js +31 -0
  457. package/dist/sdk/world/cli.d.ts +12 -0
  458. package/dist/sdk/world/cli.js +166 -0
  459. package/dist/sdk/world/images.d.ts +20 -0
  460. package/dist/sdk/world/images.js +48 -0
  461. package/dist/sdk/world/untrusted.d.ts +12 -0
  462. package/dist/sdk/world/untrusted.js +20 -0
  463. package/dist/sdk/world/world.d.ts +67 -0
  464. package/dist/sdk/world/world.js +79 -0
  465. package/dist/terminal-opentui.js +20778 -0
  466. package/dist/terminal-pi.js +794 -518
  467. package/docs/README.md +42 -0
  468. package/docs/architecture/00-overview.md +171 -0
  469. package/docs/architecture/01-extension-points.md +78 -0
  470. package/docs/architecture/02-sessions-and-runs.md +203 -0
  471. package/docs/architecture/03-variants.md +103 -0
  472. package/docs/architecture/04-prompt.md +122 -0
  473. package/docs/architecture/05-refinement.md +107 -0
  474. package/docs/architecture/06-plugins-and-capabilities.md +129 -0
  475. package/docs/architecture/07-tools-and-gate.md +103 -0
  476. package/docs/architecture/08-memory-and-history.md +94 -0
  477. package/docs/architecture/09-accounts-and-connectors.md +98 -0
  478. package/docs/architecture/10-server-protocol.md +193 -0
  479. package/docs/architecture/11-terminal.md +261 -0
  480. package/docs/architecture/12-storage.md +75 -0
  481. package/docs/architecture/13-world-tools.md +45 -0
  482. package/docs/architecture/14-surfaces-and-parity.md +89 -0
  483. package/docs/architecture/README.md +125 -0
  484. package/docs/architecture/proposals/PROP-0001-reporting-section.md +106 -0
  485. package/docs/architecture/proposals/PROP-0002-retain-rollout-workspaces.md +104 -0
  486. package/docs/architecture/proposals/PROP-0003-executor-settings.md +81 -0
  487. package/docs/architecture/proposals/PROP-0004-flexible-reporting-guidance.md +71 -0
  488. package/docs/architecture/proposals/PROP-0005-xharness-cli-name.md +78 -0
  489. package/docs/architecture/proposals/PROP-0006-run-checklist.md +70 -0
  490. package/docs/architecture/proposals/PROP-0007-run-continuation.md +80 -0
  491. package/docs/architecture/proposals/PROP-0008-lessons-from-runs.md +80 -0
  492. package/docs/architecture/proposals/PROP-0009-foundation-and-variants.md +78 -0
  493. package/docs/architecture/proposals/PROP-0010-session-names.md +73 -0
  494. package/docs/architecture/proposals/PROP-0011-doctor.md +63 -0
  495. package/docs/architecture/proposals/PROP-0012-release-baseline.md +56 -0
  496. package/docs/architecture/proposals/PROP-0013-resource-browser.md +58 -0
  497. package/docs/architecture/proposals/PROP-0014-fullscreen-browser-tabs.md +58 -0
  498. package/docs/architecture/proposals/PROP-0015-one-capability-surface.md +88 -0
  499. package/docs/architecture/proposals/PROP-0016-managed-worktrees.md +156 -0
  500. package/docs/architecture/proposals/PROP-0017-page-annotations.md +127 -0
  501. package/docs/architecture/proposals/PROP-0018-annotation-queue-and-app-targets.md +179 -0
  502. package/docs/architecture/proposals/PROP-0019-contextual-side-questions.md +122 -0
  503. package/docs/architecture/proposals/PROP-0020-builtin-feature-plugins.md +105 -0
  504. package/docs/architecture/proposals/PROP-0021-command-namespaces-and-duplicates.md +99 -0
  505. package/docs/architecture/proposals/PROP-0022-plan-only-questions.md +102 -0
  506. package/docs/architecture/proposals/PROP-0023-xagent-cli-name.md +61 -0
  507. package/docs/architecture/proposals/PROP-0024-question-sketch-previews.md +130 -0
  508. package/docs/architecture/proposals/PROP-0025-contextual-question-wireframes.md +49 -0
  509. package/docs/architecture/proposals/PROP-0026-connected-sketch-display.md +94 -0
  510. package/docs/architecture/proposals/PROP-0027-xingular-agent-product-identity.md +60 -0
  511. package/docs/architecture/proposals/PROP-0028-normalize-question-wireframes.md +55 -0
  512. package/docs/architecture/proposals/PROP-0029-agent-profiles.md +124 -0
  513. package/docs/architecture/proposals/PROP-0030-subagent-title.md +86 -0
  514. package/docs/architecture/proposals/README.md +101 -0
  515. package/docs/decisions/ADR-0002-native-subagent-lifecycle.md +49 -0
  516. package/docs/decisions/ADR-0003-shared-asynchronous-subagents.md +70 -0
  517. package/docs/decisions/ADR-0004-fullscreen-terminal-layout.md +50 -0
  518. package/docs/decisions/ADR-0005-app-provided-oauth-clients.md +54 -0
  519. package/docs/decisions/ADR-0006-opentui-only-terminal.md +47 -0
  520. package/docs/decisions/ADR-0007-reporting-section.md +33 -0
  521. package/docs/decisions/ADR-0008-flexible-reporting-guidance.md +38 -0
  522. package/docs/decisions/ADR-0009-xharness-command.md +39 -0
  523. package/docs/decisions/ADR-0010-lessons-in-the-wiki.md +31 -0
  524. package/docs/decisions/ADR-0011-foundation-and-variants.md +28 -0
  525. package/docs/decisions/ADR-0012-native-session-names.md +34 -0
  526. package/docs/decisions/ADR-0013-doctor.md +27 -0
  527. package/docs/decisions/ADR-0014-public-release-baseline.md +22 -0
  528. package/docs/decisions/ADR-0015-resource-browser.md +28 -0
  529. package/docs/decisions/ADR-0016-fullscreen-browser-tabs.md +31 -0
  530. package/docs/decisions/ADR-0017-one-capability-surface.md +34 -0
  531. package/docs/decisions/ADR-0018-builtin-feature-plugins.md +35 -0
  532. package/docs/decisions/ADR-0019-managed-git-worktrees.md +31 -0
  533. package/docs/decisions/ADR-0020-page-annotations.md +37 -0
  534. package/docs/decisions/ADR-0021-required-command-namespaces.md +40 -0
  535. package/docs/decisions/ADR-0022-plan-only-question-tools.md +34 -0
  536. package/docs/decisions/ADR-0023-contextual-side-question-runs.md +35 -0
  537. package/docs/decisions/ADR-0024-xagent-command.md +40 -0
  538. package/docs/decisions/ADR-0025-question-choice-sketches.md +49 -0
  539. package/docs/decisions/ADR-0026-contextual-question-wireframes.md +58 -0
  540. package/docs/decisions/ADR-0027-connected-sketch-display.md +60 -0
  541. package/docs/decisions/ADR-0028-xingular-agent-product-identity.md +56 -0
  542. package/docs/decisions/ADR-0029-normalized-question-wireframe-borders.md +33 -0
  543. package/docs/decisions/ADR-0030-agent-profiles.md +43 -0
  544. package/docs/doctor.md +80 -0
  545. package/docs/experiments/EXP-0001-terminal-input-latency/plan.md +81 -0
  546. package/docs/experiments/EXP-0001-terminal-input-latency/results.md +46 -0
  547. package/docs/experiments/EXP-0002-opentui-typing-latency/plan.md +70 -0
  548. package/docs/experiments/EXP-0002-opentui-typing-latency/results.md +92 -0
  549. package/docs/features/README.md +46 -0
  550. package/docs/features/automations/README.md +41 -0
  551. package/docs/features/cores/README.md +39 -0
  552. package/docs/features/google-harness2/README.md +52 -0
  553. package/docs/features/integrations/README.md +40 -0
  554. package/docs/features/interfaces/README.md +29 -0
  555. package/docs/features/memory/README.md +28 -0
  556. package/docs/future-work.md +48 -0
  557. package/docs/parity.md +78 -0
  558. package/docs/releases/1.0.0.md +40 -0
  559. package/docs/releases/4.0.0.md +46 -0
  560. package/docs/releases/README.md +41 -0
  561. package/docs/study/00-index.md +83 -0
  562. package/docs/study/arms/00-matrix.md +20 -0
  563. package/docs/study/arms/01-system-prompt.md +211 -0
  564. package/docs/study/arms/02-tools.md +79 -0
  565. package/docs/study/arms/03-subagents.md +90 -0
  566. package/docs/study/arms/04-skills.md +75 -0
  567. package/docs/study/arms/05-context-management.md +90 -0
  568. package/docs/study/arms/06-memory.md +90 -0
  569. package/docs/study/arms/07-governance.md +71 -0
  570. package/docs/study/arms/08-execution.md +69 -0
  571. package/docs/study/arms/09-observability.md +60 -0
  572. package/docs/study/arms/10-refinement.md +110 -0
  573. package/docs/study/autonomous-engineering-sources.md +277 -0
  574. package/docs/study/autonomy-sources.md +147 -0
  575. package/docs/study/btw-comparison.md +37 -0
  576. package/docs/study/feature-gap-review.md +42 -0
  577. package/docs/study/insights.md +123 -0
  578. package/docs/study/proactive-autonomy.md +408 -0
  579. package/docs/study/roadmap.md +72 -0
  580. package/docs/study/sources/claude-code.md +44 -0
  581. package/docs/study/sources/deepseek-harness.md +102 -0
  582. package/docs/study/sources/harness2.md +50 -0
  583. package/docs/study/sources/kimi-cli.md +42 -0
  584. package/docs/study/sources/omp.md +93 -0
  585. package/docs/study/sources/opencode.md +43 -0
  586. package/docs/study/sources/openhands.md +46 -0
  587. package/docs/study/sources/smolagents.md +40 -0
  588. package/docs/study/sources/swe-agent.md +34 -0
  589. package/docs/study/tui-resource-browser.md +78 -0
  590. package/docs/system-prompt-design.md +196 -0
  591. package/docs/terminal-tui.md +707 -58
  592. package/package.json +43 -13
  593. package/docs/evidence/terminal-2026-10-17/120x40-completed-transcript.ansi.gz +0 -0
  594. package/docs/evidence/terminal-2026-10-17/40x20-settings-interaction.ansi.gz +0 -0
  595. package/docs/evidence/terminal-2026-10-17/40x20-settings-keyboard.ansi.gz +0 -0
  596. package/docs/evidence/terminal-2026-10-17/40x20-welcome.ansi.gz +0 -0
  597. package/docs/evidence/terminal-2026-10-17/80x24-approval-0.ansi.gz +0 -0
  598. package/docs/evidence/terminal-2026-10-17/80x24-question.ansi.gz +0 -0
  599. package/docs/evidence/terminal-2026-10-17/verification.json +0 -130
  600. package/docs/evidence/terminal-2026-10-17-followup/120x40-completed-transcript.ansi.gz +0 -0
  601. package/docs/evidence/terminal-2026-10-17-followup/40x20-settings-interaction.ansi.gz +0 -0
  602. package/docs/evidence/terminal-2026-10-17-followup/40x20-settings-keyboard.ansi.gz +0 -0
  603. package/docs/evidence/terminal-2026-10-17-followup/40x20-welcome.ansi.gz +0 -0
  604. package/docs/evidence/terminal-2026-10-17-followup/80x24-approval-0.ansi.gz +0 -0
  605. package/docs/evidence/terminal-2026-10-17-followup/80x24-plugin-light.ansi.gz +0 -0
  606. package/docs/evidence/terminal-2026-10-17-followup/80x24-question-batch.ansi.gz +0 -0
  607. package/docs/evidence/terminal-2026-10-17-followup/80x24-question.ansi.gz +0 -0
  608. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-approval-0.ansi.gz +0 -0
  609. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-plugin-light.ansi.gz +0 -0
  610. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-question-batch.ansi.gz +0 -0
  611. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-question.ansi.gz +0 -0
  612. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/verification.json +0 -95
  613. package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-approval-0.ansi.gz +0 -0
  614. package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-plugin-light.ansi.gz +0 -0
  615. package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-question-batch.ansi.gz +0 -0
  616. package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-question.ansi.gz +0 -0
  617. package/docs/evidence/terminal-2026-10-17-followup/global-install/README.md +0 -27
  618. package/docs/evidence/terminal-2026-10-17-followup/global-install/shell-command-80x24.ansi.gz +0 -0
  619. package/docs/evidence/terminal-2026-10-17-followup/global-install/shell-command.json +0 -18
  620. package/docs/evidence/terminal-2026-10-17-followup/global-install/verification.json +0 -95
  621. package/docs/evidence/terminal-2026-10-17-followup/harness-reference-80x24.json.gz +0 -0
  622. package/docs/evidence/terminal-2026-10-17-followup/harness-reference-final-80x24.json.gz +0 -0
  623. package/docs/evidence/terminal-2026-10-17-followup/harness-reference-scenario.json +0 -60
  624. package/docs/evidence/terminal-2026-10-17-followup/live-codex/README.md +0 -24
  625. package/docs/evidence/terminal-2026-10-17-followup/live-codex/complete-80x24.ansi.gz +0 -0
  626. package/docs/evidence/terminal-2026-10-17-followup/live-codex/verification.json +0 -57
  627. package/docs/evidence/terminal-2026-10-17-followup/omp-reference-80x24-early.json.gz +0 -0
  628. package/docs/evidence/terminal-2026-10-17-followup/omp-reference-80x24.json.gz +0 -0
  629. package/docs/evidence/terminal-2026-10-17-followup/omp-reference-scenario.json +0 -58
  630. package/docs/evidence/terminal-2026-10-17-followup/omp-supplemental-static.json.gz +0 -0
  631. package/docs/evidence/terminal-2026-10-17-followup/rea-artifacts.json +0 -320
  632. package/docs/evidence/terminal-2026-10-17-followup/reference-comparison.json +0 -30
  633. package/docs/evidence/terminal-2026-10-17-followup/reference-comparison.md +0 -133
  634. package/docs/evidence/terminal-2026-10-17-followup/reference-source-observations.json +0 -20
  635. package/docs/evidence/terminal-2026-10-17-followup/verification.json +0 -207
  636. package/src/accounts/accounts.test.ts +0 -333
  637. package/src/accounts/accounts.ts +0 -658
  638. package/src/accounts/env.test.ts +0 -95
  639. package/src/accounts/env.ts +0 -338
  640. package/src/accounts/secrets.ts +0 -50
  641. package/src/accounts/store.ts +0 -338
  642. package/src/capabilities/api.ts +0 -75
  643. package/src/capabilities/runSnapshot.ts +0 -59
  644. package/src/capabilities/types.ts +0 -34
  645. package/src/cli.ts +0 -118
  646. package/src/core/bus.ts +0 -34
  647. package/src/core/changes.ts +0 -33
  648. package/src/core/env.ts +0 -27
  649. package/src/core/errors.ts +0 -32
  650. package/src/core/frontmatter.ts +0 -47
  651. package/src/core/fs.test.ts +0 -38
  652. package/src/core/fs.ts +0 -92
  653. package/src/core/index.ts +0 -193
  654. package/src/core/path.test.ts +0 -14
  655. package/src/core/path.ts +0 -79
  656. package/src/core/projects.ts +0 -90
  657. package/src/core/text.ts +0 -39
  658. package/src/harness.ts +0 -312
  659. package/src/hub/catalog.json +0 -123
  660. package/src/hub/cli.ts +0 -59
  661. package/src/hub/hub.test.ts +0 -205
  662. package/src/hub/hub.ts +0 -256
  663. package/src/hub/schema.ts +0 -81
  664. package/src/index.ts +0 -75
  665. package/src/mcp/connections.ts +0 -614
  666. package/src/mcp/manager.ts +0 -130
  667. package/src/mcp/oauth.ts +0 -195
  668. package/src/mcp/scopeMigration.test.ts +0 -79
  669. package/src/mcp/scopeMigration.ts +0 -204
  670. package/src/mcp/service.test.ts +0 -376
  671. package/src/mcp/service.ts +0 -549
  672. package/src/mcp/types.ts +0 -108
  673. package/src/memory/api.test.ts +0 -82
  674. package/src/memory/api.ts +0 -303
  675. package/src/memory/blocks.test.ts +0 -78
  676. package/src/memory/blocks.ts +0 -408
  677. package/src/memory/caller.ts +0 -69
  678. package/src/memory/curation.test.ts +0 -163
  679. package/src/memory/curation.ts +0 -64
  680. package/src/memory/dispatch.ts +0 -59
  681. package/src/memory/facts.test.ts +0 -41
  682. package/src/memory/facts.ts +0 -248
  683. package/src/memory/graph.ts +0 -103
  684. package/src/memory/health.test.ts +0 -130
  685. package/src/memory/health.ts +0 -74
  686. package/src/memory/maintainer.ts +0 -272
  687. package/src/memory/maintenance.test.ts +0 -176
  688. package/src/memory/maintenance.ts +0 -518
  689. package/src/memory/migrate.ts +0 -79
  690. package/src/memory/operations.ts +0 -150
  691. package/src/memory/proposals.test.ts +0 -168
  692. package/src/memory/proposals.ts +0 -584
  693. package/src/memory/recall.test.ts +0 -115
  694. package/src/memory/recall.ts +0 -278
  695. package/src/memory/references.ts +0 -77
  696. package/src/memory/runContext.ts +0 -93
  697. package/src/memory/secrets.ts +0 -6
  698. package/src/memory/store.test.ts +0 -66
  699. package/src/memory/store.ts +0 -385
  700. package/src/memory/wiki.test.ts +0 -47
  701. package/src/memory/wiki.ts +0 -422
  702. package/src/memory/wikiIndex.test.ts +0 -88
  703. package/src/memory/wikiIndex.ts +0 -116
  704. package/src/plugins/api.ts +0 -181
  705. package/src/plugins/attachments.test.ts +0 -84
  706. package/src/plugins/attachments.ts +0 -141
  707. package/src/plugins/builtin.ts +0 -82
  708. package/src/plugins/catalogue.test.ts +0 -254
  709. package/src/plugins/catalogue.ts +0 -251
  710. package/src/plugins/cli.ts +0 -184
  711. package/src/plugins/discover.ts +0 -151
  712. package/src/plugins/firstParty.test.ts +0 -143
  713. package/src/plugins/firstParty.ts +0 -129
  714. package/src/plugins/hooks.test.ts +0 -250
  715. package/src/plugins/hooks.ts +0 -239
  716. package/src/plugins/identity.ts +0 -37
  717. package/src/plugins/install.test.ts +0 -107
  718. package/src/plugins/install.ts +0 -106
  719. package/src/plugins/inventory.ts +0 -123
  720. package/src/plugins/manifest.ts +0 -76
  721. package/src/plugins/plugins.test.ts +0 -205
  722. package/src/plugins/plugins.ts +0 -189
  723. package/src/plugins/proposal.ts +0 -121
  724. package/src/plugins/runtime.test.ts +0 -40
  725. package/src/plugins/runtime.ts +0 -82
  726. package/src/plugins/trust.ts +0 -142
  727. package/src/plugins/types.ts +0 -149
  728. package/src/prompt/compile.test.ts +0 -261
  729. package/src/prompt/compile.ts +0 -732
  730. package/src/server/methods.ts +0 -349
  731. package/src/server/remote.ts +0 -77
  732. package/src/server/rpc.ts +0 -116
  733. package/src/server/serve.ts +0 -28
  734. package/src/server/server.test.ts +0 -174
  735. package/src/sessions/approvals.ts +0 -118
  736. package/src/sessions/contracts.ts +0 -336
  737. package/src/sessions/conversation.test.ts +0 -177
  738. package/src/sessions/extensionSession.test.ts +0 -74
  739. package/src/sessions/extensionUi.test.ts +0 -65
  740. package/src/sessions/extensionUi.ts +0 -102
  741. package/src/sessions/history.ts +0 -51
  742. package/src/sessions/lineageJoin.ts +0 -75
  743. package/src/sessions/policy.ts +0 -36
  744. package/src/sessions/pricing.ts +0 -60
  745. package/src/sessions/questionBatches.test.ts +0 -110
  746. package/src/sessions/reasoningSummaries.ts +0 -59
  747. package/src/sessions/registry.ts +0 -381
  748. package/src/sessions/runIndex.ts +0 -99
  749. package/src/sessions/runStore.test.ts +0 -152
  750. package/src/sessions/runStore.ts +0 -332
  751. package/src/sessions/runner.ts +0 -604
  752. package/src/sessions/runtimeResources.test.ts +0 -61
  753. package/src/sessions/sessions.test.ts +0 -549
  754. package/src/sessions/sessions.ts +0 -339
  755. package/src/skills/registry.test.ts +0 -104
  756. package/src/skills/registry.ts +0 -413
  757. package/src/terminal/accountsMenu.test.ts +0 -225
  758. package/src/terminal/accountsMenu.ts +0 -382
  759. package/src/terminal/cli.ts +0 -149
  760. package/src/terminal/client.ts +0 -74
  761. package/src/terminal/control.test.ts +0 -23
  762. package/src/terminal/control.ts +0 -23
  763. package/src/terminal/controller.ts +0 -291
  764. package/src/terminal/hubMenu.ts +0 -24
  765. package/src/terminal/launch.test.ts +0 -25
  766. package/src/terminal/launch.ts +0 -48
  767. package/src/terminal/piExtension.lifecycle.test.ts +0 -55
  768. package/src/terminal/piExtension.ts +0 -259
  769. package/src/terminal/pluginControl.test.ts +0 -146
  770. package/src/terminal/pluginMenu.ts +0 -112
  771. package/src/terminal/socket.test.ts +0 -71
  772. package/src/terminal/socket.ts +0 -232
  773. package/src/terminal/standalone.test.ts +0 -167
  774. package/src/terminal/standalone.ts +0 -153
  775. package/src/terminal/terminal.test.ts +0 -399
  776. package/src/terminal/terminals.ts +0 -553
  777. package/src/terminal/tui/application.test.ts +0 -114
  778. package/src/terminal/tui/application.ts +0 -491
  779. package/src/terminal/tui/commands.test.ts +0 -218
  780. package/src/terminal/tui/commands.ts +0 -361
  781. package/src/terminal/tui/dialogs.ts +0 -301
  782. package/src/terminal/tui/editor.test.ts +0 -84
  783. package/src/terminal/tui/editor.ts +0 -79
  784. package/src/terminal/tui/keybindings.test.ts +0 -22
  785. package/src/terminal/tui/keybindings.ts +0 -50
  786. package/src/terminal/tui/piAdapter.ts +0 -62
  787. package/src/terminal/tui/presentation.test.ts +0 -79
  788. package/src/terminal/tui/questions.test.ts +0 -41
  789. package/src/terminal/tui/questions.ts +0 -47
  790. package/src/terminal/tui/runtime.socket.test.ts +0 -104
  791. package/src/terminal/tui/runtime.test.ts +0 -215
  792. package/src/terminal/tui/runtime.ts +0 -388
  793. package/src/terminal/tui/sessionUi.ts +0 -24
  794. package/src/terminal/tui/settings.test.ts +0 -150
  795. package/src/terminal/tui/settings.ts +0 -188
  796. package/src/terminal/tui/status.test.ts +0 -70
  797. package/src/terminal/tui/status.ts +0 -109
  798. package/src/terminal/tui/theme.ts +0 -174
  799. package/src/terminal/tui/tools.test.ts +0 -145
  800. package/src/terminal/tui/tools.ts +0 -142
  801. package/src/terminal/tui/transcript.test.ts +0 -25
  802. package/src/terminal/tui/transcript.ts +0 -124
  803. package/src/terminal/tui/ui.test.ts +0 -313
  804. package/src/terminal/tui/ui.ts +0 -166
  805. package/src/terminal/tui/welcome.ts +0 -102
  806. package/src/tools/askUser.test.ts +0 -69
  807. package/src/tools/askUser.ts +0 -59
  808. package/src/tools/definitions.ts +0 -187
  809. package/src/tools/maintenance.ts +0 -24
  810. package/src/tools/memoryTools.ts +0 -22
  811. package/src/tools/pluginPropose.ts +0 -41
  812. package/src/tools/registryWrite.test.ts +0 -101
  813. package/src/tools/registryWrite.ts +0 -182
  814. package/src/tools/spawnSubagent.ts +0 -92
  815. package/src/tools/types.ts +0 -39
  816. package/src/web/safeRequest.ts +0 -171
  817. package/src/web/text.ts +0 -53
  818. package/src/web/tools.ts +0 -134
  819. package/src/web/web.test.ts +0 -141
@@ -0,0 +1,58 @@
1
+ ---
2
+ id: PROP-0014
3
+ title: Full-screen resource browser with persistent section tabs
4
+ status: Implemented
5
+ created: 2026-10-23
6
+ updated: 2026-10-23
7
+ affects: [11-terminal.md, terminal-tui.md]
8
+ ---
9
+
10
+ # PROP-0014: Full-screen resource browser with persistent section tabs
11
+
12
+ Accepted by the user's request to implement the agreed plan on 2026-10-23.
13
+
14
+ ## Problem
15
+
16
+ The browser's centered panel, section dropdown and wide sidebar consume space and hide
17
+ navigation when inspecting a resource. The user requested a full-page screen with component tabs.
18
+
19
+ ## Affected rules
20
+
21
+ The terminal guide states: “The browser keeps the centered dialog size policy.”
22
+ This proposal replaces that browser layout contract. INV-TUI-1 through INV-TUI-6 remain intact.
23
+
24
+ ## Proposal
25
+
26
+ Every resource-browser command opens the full terminal. Overview, Foundation, Variant, Skills,
27
+ Plugins, Connections, Tools and Library occupy a persistent top tab strip. Narrow terminals
28
+ show the active tab and previous/next navigation. Tab moves focus; arrows change the focused tab;
29
+ mouse selection selects a tab directly. Each section retains search and resource selection.
30
+
31
+ At 88 content columns, inventory and inspector share the screen; details, actions and content
32
+ stay beside the list. Narrow screens show details and content within the active tab. Escape
33
+ returns through content, inspection and search before closing. Other command pages retain
34
+ centered presentation. Browser actions retain existing confirmations and protected services.
35
+
36
+ ## Alternatives
37
+
38
+ Keeping the centered browser leaves insufficient working space. Full-width lists with replacement
39
+ detail views hide useful context on wide terminals. A c1–c8 primary tab strip was considered;
40
+ the user selected resource sections instead.
41
+
42
+ ## Consequences
43
+
44
+ This is foundation UI behavior. TerminalPage gains optional presentation and direct tab selection.
45
+ There is no server protocol, stored data, account, loader or gate change.
46
+
47
+ ## Migration
48
+
49
+ Existing command destinations and resource state are preserved. No migration is needed.
50
+ The UI change is reversible without touching stored data.
51
+
52
+ ## Checks
53
+
54
+ Cover page geometry, keyboard and mouse tab selection, inspection, scrolling, responsive resize,
55
+ shortcut destinations, and draft preservation. Run typecheck, tests, build, the isolated browser
56
+ PTY suite and the consuming application's required checks. No real model requests are needed.
57
+
58
+ Related decision: [ADR-0016](../../decisions/ADR-0016-fullscreen-browser-tabs.md).
@@ -0,0 +1,88 @@
1
+ ---
2
+ id: PROP-0015
3
+ title: One capability surface — the Harness terminal and every host offer the same capabilities
4
+ status: Accepted
5
+ created: 2026-10-23
6
+ updated: 2026-10-23
7
+ affects: [INV-BND-2, new INV-PAR-1..4, 00-overview.md, 11-terminal.md, new 14-surfaces-and-parity.md, AGENTS.md]
8
+ ---
9
+
10
+ # PROP-0015: One capability surface
11
+
12
+ Accepted by the user's approval of the parity plan on 2026-10-23. Related decision:
13
+ [ADR-0017](../../decisions/ADR-0017-one-capability-surface.md).
14
+
15
+ ## Problem
16
+
17
+ Two front ends sit on the same harness: the Harness-owned terminal (`xharness`) and the App.
18
+ Capabilities a person uses grew in the App alone (web annotations, managed worktrees, agent
19
+ organizations, delegated work), so the terminal cannot do what the App does, and a reader cannot
20
+ tell which repository owns a feature. The App also carried an orchestration layer (agents as
21
+ product objects, routed chats, group chats, a reporting tree, delegated work queues) that no other
22
+ host could reuse and that was never verified in a running app.
23
+
24
+ The owner decided on 2026-10-23 that the App is a richer presentation of the Harness and that the
25
+ terminal and the App offer the same capabilities, with room reserved for future host-only
26
+ surfaces such as interactive agent output ("OpenUI").
27
+
28
+ ## Affected rules
29
+
30
+ - 00-overview "Stays in the application: agents, groups, conversations, tasks and coordination,
31
+ projects and worktrees, App browser UI and tab sharing, computer use, windows, the PTY, the
32
+ keychain, and application UI."
33
+ - `INV-BND-2` lists "worktree" among application concepts.
34
+ - 11-terminal describes the terminal as one frontend, with no parity obligation.
35
+
36
+ ## Proposal
37
+
38
+ A new page, [14 Surfaces and parity](../14-surfaces-and-parity.md), states four invariants:
39
+
40
+ - **INV-PAR-1** Every capability a person can use in a host is a Harness capability: a foundation
41
+ service, a `WorldPart`, or a first-party plugin, reachable through server methods. The standalone
42
+ terminal surfaces it. A host is a presentation of it.
43
+ - **INV-PAR-2** A capability is complete only when its terminal surface and its host surface both
44
+ pass acceptance. It lands in the Harness first, together with its terminal surface.
45
+ - **INV-PAR-3** A host-backed capability needs an operating-system object only a host has (a
46
+ WebKit tab, a native computer bridge, a keychain). The Harness defines its generic contract and a
47
+ terminal fallback. Without a fallback, the terminal shows the capability as unavailable with the
48
+ reason, in `/doctor` and `/tools`.
49
+ - **INV-PAR-4** A host-only surface is presentation that cannot exist in a terminal. It owns no
50
+ capability: its actions are Harness methods or tools, its data lives in Harness records, the
51
+ terminal shows a text fallback, and each one is listed in the host's register by an owner
52
+ decision. A generic rich-output event for such surfaces needs its own proposal; the name is
53
+ reserved, nothing is designed.
54
+
55
+ 00-overview changes:
56
+
57
+ - "Belongs in the harness" gains managed worktrees (PROP-0016) and page annotations (PROP-0017).
58
+ - "Stays in the application" becomes: windows, the PTY, the keychain, native operating-system
59
+ bridges (WebKit tabs, computer control), presentation, and registered host-only surfaces.
60
+ - `INV-BND-2` no longer lists "worktree" as an application concept once PROP-0016 lands.
61
+
62
+ A non-binding register, [`docs/parity.md`](../../parity.md), lists every capability with its
63
+ Harness owner, its terminal surface, its host surface and its status.
64
+
65
+ ## Alternatives
66
+
67
+ - **Keep the App as the full product and the terminal as a developer tool.** Rejected by the owner:
68
+ it keeps two products and the ownership confusion.
69
+ - **Strict identity of the two front ends.** Rejected: some presentation (rich panes, interactive
70
+ output) cannot exist in a terminal. INV-PAR-4 bounds that category instead.
71
+ - **Do nothing.** The gap grows with every App feature.
72
+
73
+ ## Consequences
74
+
75
+ - New user capabilities are Harness work first, with their terminal surface.
76
+ - Hosts may still add tools through `ToolProvider`, but a tool a person relies on is either a
77
+ Harness capability or a declared host-backed capability (INV-PAR-3).
78
+ - The server protocol gains method groups only through the proposals that add each capability.
79
+
80
+ ## Migration
81
+
82
+ No stored data changes. Existing gaps are recorded in `docs/parity.md` with IDs (`PAR-NNN`) and
83
+ closed one at a time.
84
+
85
+ ## Checks
86
+
87
+ Documentation change. Link check of the edited pages; each later capability brings its own tests
88
+ on both surfaces.
@@ -0,0 +1,156 @@
1
+ ---
2
+ id: PROP-0016
3
+ title: Managed git worktrees as a Harness capability, in the terminal and every host
4
+ status: Implemented
5
+ created: 2026-10-23
6
+ updated: 2026-10-23
7
+ affects: [INV-BND-2, D-5, INV-STO-3, INV-SRV-1, 00-overview.md, 02-sessions-and-runs.md, 10-server-protocol.md, 11-terminal.md, 12-storage.md, 14-surfaces-and-parity.md]
8
+ ---
9
+
10
+ # PROP-0016: Managed git worktrees
11
+
12
+ Accepted by the user's approval of the parity plan on 2026-10-23 (PROP-0015, ADR-0017).
13
+ Implemented in the working tree on 2026-10-23: `src/worktrees/`, `Sessions.run`, `Terminals`,
14
+ `xharness --worktree`, `xharness worktree`, `/worktree`; spec pages 00, 02, 10, 11, 12 updated.
15
+ The App source has create integration; remaining App actions are tracked as PAR-012. Harness and
16
+ terminal implementation is included in the 4.0.0 candidate. The owner chose the Codex model:
17
+ managed, disposable worktrees with automatic pruning and a handoff back to the main checkout.
18
+
19
+ ## Problem
20
+
21
+ Worktrees exist only in the App (`App/src-tauri/src/projects.rs`: `create_worktree`,
22
+ `list_worktrees`), with no removal, so thread, task and Solo worktrees accumulate. The terminal
23
+ runs in its launch folder only (`terminal/standalone.ts`), with no way to isolate a session's
24
+ edits. `RunRecord.worktreeId` is an opaque App field (drift D-5). Under INV-PAR-1 a capability a
25
+ person uses must be a Harness capability with a terminal surface.
26
+
27
+ ## Affected rules
28
+
29
+ - 00-overview "Stays in the application: … projects and worktrees …".
30
+ - `INV-BND-2` lists "worktree" as an application concept.
31
+ - Drift D-5: `RunRecord` carries `worktreeId` and `handoffId`, which are application concepts.
32
+ - `INV-STO-3`: a new top-level folder is an architecture change.
33
+ - `INV-SRV-1`: a new method group.
34
+
35
+ ## Proposal
36
+
37
+ ### Model
38
+
39
+ A **worktree** is a linked git worktree of a repository (the *source checkout*) that the Harness
40
+ created or adopted. It has an id, a repository root, a path, a name, a branch or a detached HEAD,
41
+ the ref and commit it started from, a kind and an origin.
42
+
43
+ - **Managed** worktrees (the default) are disposable, usually one per session, on a detached HEAD.
44
+ They are pruned automatically.
45
+ - **Permanent** worktrees are named, may host several sessions, and are never pruned.
46
+ - **Create branch** gives a worktree a branch under a configurable prefix (default `wt/`).
47
+
48
+ ### Creation
49
+
50
+ `create({ repo, name?, baseRef?, kind?, carryChanges? })`:
51
+
52
+ 1. Resolve the source checkout's top level; refuse a folder that is not a git repository with at
53
+ least one commit.
54
+ 2. `git worktree add --detach <path> <baseRef>` (default `HEAD`), with repository filter drivers
55
+ switched off (`GIT_LFS_SKIP_SMUDGE=1`, `-c filter.lfs.*` cleared), never through a shell.
56
+ 3. When `carryChanges` (default true for `baseRef: HEAD`), apply the source checkout's
57
+ uncommitted tracked changes (`git diff HEAD --binary` piped to `git apply`) and copy its
58
+ untracked, non-ignored files, as Codex does.
59
+ 4. Copy ignored files matched by `.worktreeinclude` (gitignore syntax, matched by git itself). A
60
+ file is copied only when it does not exist in the worktree; symlinks are skipped; a per-file
61
+ (5 MB) and total (100 MB) cap applies; the result lists what was copied and skipped.
62
+ 5. Run the repository's setup script `.xharness/worktree-setup` when it exists and its exact text
63
+ is trusted by hash (`worktrees.setup.trust`). It runs with `HARNESS_WORKTREE_PATH`,
64
+ `HARNESS_WORKTREE_SOURCE`, `HARNESS_WORKTREE_NAME`, a 10-minute timeout, and its output in a log
65
+ file. An untrusted script is reported, never run.
66
+
67
+ ### Lifecycle
68
+
69
+ - **Lease and lock.** A session that runs in a worktree holds a lease (session id, process id) and
70
+ `git worktree lock --reason`. The lease is released on dispose; a lease whose process is gone is
71
+ released on `open` (recovery).
72
+ - **Prune.** `prune({ keep })` keeps the `keep` (default 15) most recently used managed worktrees
73
+ per repository and removes older ones that hold no lease. Permanent, leased and locked-by-others
74
+ worktrees are never pruned.
75
+ - **Snapshot before removal.** Every removal of a worktree with uncommitted changes or commits not
76
+ on any other branch first records them: `git stash create` (with untracked files committed into a
77
+ temporary index) and `git update-ref refs/xharness/snapshots/<id> <commit>`. `restore({ id })`
78
+ recreates the worktree from its snapshot.
79
+ - **Remove.** `remove({ id, force? })` refuses a leased worktree, and refuses dirty work unless
80
+ `force`, in which case it snapshots first.
81
+ - **Handoff.** `handoff({ id, direction: 'toSource' | 'toWorktree' })` moves uncommitted changes
82
+ between the worktree and the source checkout through git (`diff --binary` and `apply --3way`,
83
+ plus untracked files). It refuses when the target has uncommitted changes, when a branch would be
84
+ checked out twice, or when the patch does not apply cleanly; nothing is changed on refusal.
85
+ - **Adopt.** `adopt({ path })` registers an existing linked worktree (for example ones a host
86
+ created earlier) with origin `adopted`. It moves nothing.
87
+
88
+ ### Sessions and runs
89
+
90
+ `SessionRunInput` and `TerminalPrepareInput` accept `worktreeId`. The Harness resolves the working
91
+ folder from the registry, takes the lease, and records `RunRecord.worktreeId`, which now has
92
+ Harness meaning. A caller that passes a folder without `worktreeId` behaves as before. D-5 narrows
93
+ to `handoffId`.
94
+
95
+ ### Storage
96
+
97
+ ```text
98
+ <state dir>/worktrees.json registry, owner: worktrees/registry.ts
99
+ <state dir>/worktrees/<repoKey>/<name>/ checkouts (device-local)
100
+ <state dir>/worktrees/logs/<id>.setup.log setup output
101
+ <state dir>/worktree-setup-trust.json trusted setup-script hashes, owner-only
102
+ ```
103
+
104
+ `repoKey` is a slug of the source folder's name and a short hash of its real path. Checkouts are
105
+ device-local and may be large, so they live in the state directory (`INV-STO-1`). A host may set
106
+ `HarnessOptions.worktrees = { root?, branchPrefix?, keep? }`.
107
+
108
+ ### Server methods
109
+
110
+ New group `worktrees`: `list { repo? }`, `status { id }`, `create`, `branch { id, name }`,
111
+ `handoff { id, direction }`, `remove { id, force? }`, `restore { id }`, `prune { repo?, keep? }`,
112
+ `adopt { path }`, `setup.trust { repo, hash }`. Terminal equivalents use the control key
113
+ (INV-TUI-4).
114
+
115
+ ### Terminal
116
+
117
+ - `xharness --worktree [name]` (`-w`) starts the terminal in a new managed worktree of the current
118
+ repository (or reuses the named one).
119
+ - `xharness worktree list|new|rm|prune|adopt|restore`.
120
+ - `/worktree` opens a page: list with branch, changes and last use; actions new, switch, create
121
+ branch, hand off, remove, restore, prune, trust setup script. Switching uses the terminal
122
+ relaunch loop with the new folder.
123
+
124
+ ### INV-BND-2
125
+
126
+ "worktree" leaves the list of application concepts; a worktree is now a Harness object.
127
+
128
+ ## Alternatives
129
+
130
+ - **Keep worktrees in the App.** Breaks INV-PAR-1; the terminal could not isolate a session.
131
+ - **Claude Code's opt-in named worktrees only.** The owner chose Codex's managed model; named
132
+ permanent worktrees are kept as the second kind.
133
+ - **Inside the repository** (`.claude/worktrees`, `.agents/worktrees`). Puts large device-local
134
+ folders where editors and tools index them; the state directory avoids that.
135
+ - **Copy-on-write clones** (omp). Faster for large ignored folders but platform-specific; left for
136
+ a later option.
137
+
138
+ ## Consequences
139
+
140
+ - Hosts call `worktrees.*` instead of running git themselves. The App's `projects.rs` worktree
141
+ code is replaced; its existing worktrees can be adopted on the person's command.
142
+ - New folders in the state directory; no data-root change.
143
+ - The terminal gains a command-line flag, a command and a page.
144
+
145
+ ## Migration
146
+
147
+ Nothing moves automatically. `adopt` registers existing worktrees when a person asks. The change
148
+ can be undone by removing the registry; checkouts stay valid git worktrees.
149
+
150
+ ## Checks
151
+
152
+ Unit tests on temporary repositories: create (detached, branch, carry changes), include copy (no
153
+ overwrite, symlink skip, caps), setup trust gate, lease and lock, recovery of a stale lease, prune
154
+ order and protection, snapshot and restore, remove refusal, handoff both ways and its refusals,
155
+ adopt. Terminal page model tests. `npm run typecheck`, `npm test`, `npm run prove`, and the App's
156
+ checks.
@@ -0,0 +1,127 @@
1
+ ---
2
+ id: PROP-0017
3
+ title: Page annotations as a Harness capability, captured in the headed browser or a host's web view
4
+ status: Implemented
5
+ created: 2026-10-23
6
+ updated: 2026-10-23
7
+ affects: [INV-STO-3, INV-SRV-1, 07-tools-and-gate.md, 10-server-protocol.md, 11-terminal.md, 12-storage.md, 13-world-tools.md, 14-surfaces-and-parity.md]
8
+ ---
9
+
10
+ # PROP-0017: Page annotations
11
+
12
+ Accepted by the user's approval of the parity plan on 2026-10-23 (PROP-0015, ADR-0017). The owner
13
+ chose capture through a visible (headed) Harness browser window when only the terminal runs.
14
+ Implemented in the working tree on 2026-10-23: `src/annotations/`, the `annotations` world part,
15
+ `annotations.*` methods, `/notes` and `/annotate`; spec pages 07, 10, 11, 12, 13 updated. The App
16
+ source changes migrate the prior store into Harness and provide the Annotate panel; acceptance of
17
+ native WKWebView gestures remains outstanding. The Harness implementation is included in the 4.0.0
18
+ candidate.
19
+
20
+ ## Problem
21
+
22
+ Web annotations exist only in the App (`App/src-tauri/src/browser_annotations/`, FEAT-0016): a
23
+ person marks a page, a text range or an element in an App WebKit tab, writes a note, and shares it
24
+ with an agent, which reads it with `browser_annotations_list` / `browser_annotations_read`. The
25
+ store, the page script and the tools are App code, so the terminal has no annotations (INV-PAR-1).
26
+
27
+ ## Affected rules
28
+
29
+ - 13-world-tools: "The App owns its shared WebKit browser UI, private/shared tab policy, …" — the
30
+ WebKit capture surface stays with the host; the store, tools and page script move here.
31
+ - `INV-STO-3`: new data-root folder `annotations/`.
32
+ - `INV-SRV-1`: new method group `annotations`.
33
+
34
+ ## Proposal
35
+
36
+ ### Records
37
+
38
+ A **note** is `{ id, version, source, target, body, tags, status, author, createdAt, updatedAt,
39
+ grants, history }`, the format of the App store, so existing notes import unchanged:
40
+
41
+ - `source`: `{ url, title, capturedAt }` plus an optional opaque `surface` string from the capturing
42
+ front end.
43
+ - `target`: `page`, `text { exact, prefix, suffix, start, end }` (Unicode code points over
44
+ normalised page text), or `element { tag, role, name, text, context, selector }`.
45
+ - `status`: `open` or `resolved`. `version` increases on every change; update and delete name the
46
+ version they expect (compare-and-swap). The last 100 change receipts are kept, without earlier
47
+ bodies. At most 10,000 notes.
48
+ - `grants`: `{ principal: { sessionId? , agentId? }, binding?: string, grantedAt }[]`. `binding` is
49
+ an opaque host string (the App uses its tab and sharing epoch); the Harness compares it, never
50
+ interprets it. Sharing and revoking are a person's action through the methods below, never a
51
+ model's.
52
+
53
+ Notes are one JSON file each under `<data root>/annotations/`, written atomically, owned by
54
+ `annotations/store.ts`. The store is synchronous, like the Wiki.
55
+
56
+ ### Page script
57
+
58
+ `annotations/pageScript.js` is the App's page script, moved: plain DOM code with a pull model
59
+ (`identity`, `begin`, `capture`, `cancel`, `resolve`, `reveal`). The page never calls out; the
60
+ front end polls it. It runs in the page's own script world, as in the App, so a page can tamper
61
+ with it: every result is untrusted and validated by the store before it is saved. A host reads the
62
+ same source with `annotations.pageScript`.
63
+
64
+ ### Tools
65
+
66
+ A world part `annotations` (plugin id `annotations`, switchable, on by default) offers two
67
+ read-only tools to SDK and terminal sessions:
68
+
69
+ - `page_notes_list { url?, status?, offset? }` — up to 20 summaries, 12,000 characters total.
70
+ - `page_notes_read { id }` — the full note, marked untrusted.
71
+
72
+ A tool returns only notes granted to the calling session or agent. A binding is the host's handle
73
+ for revocation: when what it stands for ends (a tab closes or is shared again), the host calls
74
+ `annotations.revokeBinding` and every grant made with it ends. The Harness never interprets a
75
+ binding. The part is separate from the browser part, so a host that replaces the browser
76
+ (`browser: false`) still has annotations.
77
+
78
+ ### Server methods
79
+
80
+ Group `annotations`: `list { url?, query?, status?, offset? }`, `read { id }`,
81
+ `create { source, target, body, tags }`, `update { id, expectedVersion, patch }`,
82
+ `delete { id, expectedVersion }`, `share { id, principal, binding? }`,
83
+ `unshare { id, principal }`, `revokeBinding { binding }`, `import { notes }` (keeps ids; used once
84
+ by a host migrating its own store), `pageScript` (the page helper's source for a host's web view).
85
+
86
+ ### Terminal capture
87
+
88
+ - `/annotate [url]` opens a visible capture browser for the terminal session (its own window and
89
+ its own profile, `<state dir>/browser/profiles/person`, separate from the agent's browser),
90
+ navigates when a URL is given, and runs the page script there. The person selects
91
+ text or an element in the Chromium window and presses Capture in the terminal; the terminal pulls
92
+ the selection, asks for a body and tags, and saves the note. `/annotate --page <url>` saves a
93
+ page note without opening a window.
94
+ - `/notes` lists notes for the current page or all notes, with search and status filter, and offers
95
+ edit, resolve or reopen, share with this session, unshare, delete and reveal (highlight in the
96
+ headed window; result `matched`, `ambiguous` or `unresolved`).
97
+
98
+ ### Host capture
99
+
100
+ A host with its own web view (the App's WebKit tabs) runs the same page script there and calls the
101
+ same methods. The host keeps its tab and sharing policy and passes it as the grant's binding.
102
+
103
+ ## Alternatives
104
+
105
+ - **Keep annotations in the App.** Breaks INV-PAR-1.
106
+ - **Terminal-only capture from page text and the accessibility snapshot.** The owner chose the
107
+ headed window, which captures exactly what the person selects. Snapshot picking can be added
108
+ later as a fallback.
109
+ - **Put the tools in the browser part.** A host that replaces the browser would lose them.
110
+
111
+ ## Consequences
112
+
113
+ - New data-root folder `annotations/`, new method group, two new model tools.
114
+ - The App's store and tools are replaced by Harness calls; its WebKit capture stays.
115
+
116
+ ## Migration
117
+
118
+ The App imports its existing `<data root>/browser-annotations/*.json` once with
119
+ `annotations.import`, keeping ids, then renames the old folder `browser-annotations.migrated`. If
120
+ the import fails, nothing is renamed and the App reports it.
121
+
122
+ ## Checks
123
+
124
+ Store tests ported from the App's `store.rs` tests (compare-and-swap, cap, history, target
125
+ validation, code-point offsets); grant tests (an unshared note is invisible, a binding mismatch is
126
+ refused); page-script tests; capture and reveal with a fake browser launcher; terminal page model
127
+ tests. `npm run typecheck`, `npm test`, `npm run prove`, and the App's checks.
@@ -0,0 +1,179 @@
1
+ ---
2
+ id: PROP-0018
3
+ title: Inspector-style page notes, a fix queue to the agent, and app windows as capture targets
4
+ status: Implemented
5
+ created: 2026-10-23
6
+ updated: 2026-10-23
7
+ affects: [INV-STO-3, INV-SRV-1, 07-tools-and-gate.md, 10-server-protocol.md, 11-terminal.md, 12-storage.md, 13-world-tools.md, 14-surfaces-and-parity.md]
8
+ ---
9
+
10
+ # PROP-0018: Inspector, fix queue and app targets for page notes
11
+
12
+ Requested by the owner on 2026-10-23. They chose these four things:
13
+ - the popover's three choices: Save, Queue, Send now
14
+ - the popover drawn inside the page
15
+ - Electron over its DevTools port, and real Tauri windows on macOS, as targets
16
+ - the Harness and terminal first, then the App pane
17
+
18
+ Implemented for the Harness and terminal on 2026-10-23 and in the App source on 2026-10-24 (store migration, `page_notes_*` tools, Annotate panel). The Harness implementation is included in the 4.0.0 candidate. Native WKWebView gestures still need acceptance in the running App.
19
+
20
+ ## Problem
21
+
22
+ Page notes (PROP-0017) take several prompts each. The person picks a kind, confirms in the terminal, types the note in the terminal, then shares it. A note never reaches the agent unless the person asks the agent to read it. Capture works only on http(s) pages, in a new browser context. So a person cannot point at a component of the app they are building, say what to change, and have the agent do it, and they cannot do it at all in a desktop app's own window.
23
+
24
+ ## Affected rules
25
+
26
+ - `INV-SRV-1`: new methods `annotations.queue`, `dequeue`, `confirm`, `queued`, `createAndAct`, `compose`, `delivered`, `send`, `annotations.capture.*` and `annotations.bridge.start`. All are additive.
27
+ - `INV-STO-3`: one new state-directory file, `<state dir>/notes-bridge.json`, which holds the page bridge's port and token. It is owned by `annotations/bridge.ts`.
28
+ - 07: a new model tool, `page_notes_mark_fixed`. It is the first page-note tool that writes.
29
+ - 13: "Capture happens in the terminal's visible browser or in a host web view" now also covers app windows, either over a loopback DevTools port or through the page bridge.
30
+
31
+ ## Proposal
32
+
33
+ ### Records
34
+
35
+ A note gains an optional `delivery`:
36
+ `{ state: 'queued' | 'sent' | 'fixed', sessionId, queuedAt, autoSend?, confirm?, sentAt?, runId?, fixedAt?, summary? }`.
37
+
38
+ - `status` (`open` | `resolved`) is unchanged, and only a person resolves a note.
39
+ - Queueing a note shares it with that session, because the agent must be able to read what it is asked to fix.
40
+ - New history operations: `queue`, `dequeue`, `deliver`, `mark_fixed`.
41
+ - A note captured in an app window carries `source.app: { kind: 'cdp' | 'bridge', name }`. Its URL may then also use `file:`, `app:`, `tauri:`, `electron:` or `asset:`, still without credentials. Web notes keep the http(s) rule.
42
+
43
+ ### Inspector and popover
44
+
45
+ `begin` takes a third kind, `inspect`.
46
+ - Hovering draws an outline and a `tag.class W×H` chip.
47
+ - A click, or a drag over text, opens a popover beside the target. It has a comment box and three buttons:
48
+ - **Create annotation**: `save`
49
+ - **Ask agent to fix**: `queue`
50
+ - **Proceed now**: `send`
51
+ - ⌘/Ctrl+Enter is Proceed now; with Shift it is queue.
52
+ - Everything is drawn in a closed shadow root.
53
+ - The page never receives the press or click on what is inspected, nor anything typed in the popover.
54
+ - Inputs, secrets, `[data-sensitive]` elements, frames, shadow roots and custom elements are never picked, as in PROP-0017.
55
+ - The inspector stays on after each comment.
56
+ - A new operation, `next`, returns `{ active, documentId, url, title, result }`, one comment at a time.
57
+ - `toast` shows a short status in the page.
58
+ - The helper's global key moves to `…page.v2`.
59
+
60
+ ### Trust
61
+
62
+ What the page helper returns is page data. Whether a "Proceed now" goes straight to the agent depends on **where the helper ran**, decided by the Harness:
63
+ - **Chromium (the capture browser and DevTools-attached apps):** the helper runs in an isolated script world (`Page.createIsolatedWorld`). The DOM is shared, but the JavaScript globals are not, so the page cannot read or forge results. These results are trusted and sent directly.
64
+ - **Page bridge and host web views without isolation:** results are untrusted. A send becomes a queued note with `confirm: true`, which the person confirms in the panel before it goes out.
65
+
66
+ A host's `annotations.createAndAct` passes `trusted: true` only for comments from its own UI or an isolated world.
67
+
68
+ ### Delivery
69
+
70
+ `compose(notes)` builds one instruction for a batch:
71
+ - It contains each note's id, where it is, the element (tag, role, name, selector, text) or the quoted text, and the person's comment.
72
+ - Page-derived text is labelled untrusted and fenced; the comment is in a `comment` fence.
73
+ - It asks the agent to call `page_notes_mark_fixed`.
74
+ - A batch holds at most 20 notes.
75
+
76
+ The `NoteDeliveries` service (`annotations/delivery.ts`) handles sending:
77
+ - **Terminal session:** the batch goes out as a new run through `TerminalSessions.send`, and the notes become `sent` with that run id. If the session is busy, the notes stay queued with `autoSend`.
78
+ - **Host session:** the reply is `{ state: 'host', text, ids }`. The host starts the run (`sessions.run`) and reports it with `annotations.delivered`.
79
+ - **When a run ends** (`runs.listen`, after 250 ms), the session's `autoSend` notes go out. Notes still waiting for a person's confirmation are skipped. For a host session, the service emits the notice `annotations.ready`.
80
+ - Every change emits `annotations.changed`.
81
+
82
+ ### Model tool
83
+
84
+ `page_notes_mark_fixed { id, summary }` works only on a note shared with the caller. It sets `delivery.state = 'fixed'` with the summary. It never resolves a note and never changes grants. It is not read-only, so it is unavailable in plan mode.
85
+
86
+ ### Capture targets
87
+
88
+ `AnnotationCapture` captures in one target per key:
89
+ - **`web`:** the visible browser window from PROP-0017. Its helper calls now run in an isolated world.
90
+ - **`cdp`:** an app started with a DevTools port, attached with `connectOverCDP` to a loopback address only. It uses the app's own windows, and nothing is routed or opened. Releasing the target disconnects; the app keeps running. The default name is `App at <host:port>`.
91
+ - **`bridge`:** a loopback HTTP server (`annotations/bridge.ts`) serves `/page-notes.js?token=…`. That script is the page helper plus a long-poll loop that pulls operations and posts replies.
92
+ - The port and token are kept in `notes-bridge.json`, so the script tag in an app stays valid across restarts.
93
+ - Requests need the token and the host name `127.0.0.1:<port>` or `localhost:<port>`, which blocks DNS rebinding.
94
+ - At most 32 windows; a window is dropped after 45 s without a poll.
95
+
96
+ Methods (`key`, `windows`, `selectWindow`, `inspect`, `stopInspect`, `next`, `toast`) behave the same for all three.
97
+
98
+ `inspectStep` (`annotations/inspect.ts`) is the one loop step the terminal and hosts share. It:
99
+ 1. reads the next comment;
100
+ 2. creates the note with `source.surface` and `source.app`;
101
+ 3. applies the action with the target's trust;
102
+ 4. shows a toast in the page.
103
+
104
+ ### Server methods
105
+
106
+ | Method | Input | Reply |
107
+ |---|---|---|
108
+ | `annotations.queue` | `{ id, sessionId, expectedVersion?, autoSend? }` | `Note` |
109
+ | `annotations.dequeue` | `{ id, expectedVersion? }` | `Note` |
110
+ | `annotations.confirm` | `{ id, expectedVersion? }` | `Note` |
111
+ | `annotations.queued` | `{ sessionId }` | `{ notes }`, oldest first |
112
+ | `annotations.createAndAct` | `{ note, action, sessionId?, trusted? }` | `{ note, send }` |
113
+ | `annotations.compose` | `{ sessionId, ids? }` | `{ text, ids }` |
114
+ | `annotations.delivered` | `{ ids, sessionId, runId }` | `{ notes }` |
115
+ | `annotations.send` | `{ sessionId, ids? }` | `{ state: sent \| busy \| host \| empty, … }` |
116
+ | `annotations.capture.attach` | `{ key, kind, endpoint?, name? }` | `{ kind, app, windows, bridge? }` |
117
+ | `annotations.capture.target` | `{ key }` | `{ kind, app, inspecting, windows }` |
118
+ | `annotations.capture.selectWindow` | `{ key, window }` | `{}` |
119
+ | `annotations.capture.open` | `{ key, url? }` | `{ url, title }` |
120
+ | `annotations.capture.inspect` / `stopInspect` | `{ key }` | `{ captureId }` / `{}` |
121
+ | `annotations.capture.next` | `{ key, sessionId?, surface? }` | `{ active, trusted, app, note, send, message, … }` |
122
+ | `annotations.capture.release` | `{ key }` | `{}` |
123
+ | `annotations.bridge.start` | `{}` | `{ port, token, scriptUrl, snippet }` |
124
+
125
+ ### Terminal
126
+
127
+ `/annotate` is now a full-screen pane. The browser window or the app's window is the canvas, and the pane is the panel beside it.
128
+
129
+ Ways to start it:
130
+ - `/annotate [url]`: a web page or dev server
131
+ - `/annotate --app <DevTools address | port> [name]`: an app over its DevTools port
132
+ - `/annotate --bridge [name]`: shows the script tag to load in the app
133
+
134
+ The pane:
135
+ - The header shows the target, the window, and whether the inspector is on.
136
+ - Sections: **Queue (N)**, **Sent and fixed**, and **Saved**.
137
+ - Keys:
138
+
139
+ | Key | Action |
140
+ |---|---|
141
+ | `i` | inspector on/off |
142
+ | `s` | send the queue, confirming page-origin notes first |
143
+ | `x` | take the selected note out of the queue |
144
+ | `t` | choose a window |
145
+ | `Enter` | note menu: reveal, send, confirm, queue, unqueue, edit, resolve, delete |
146
+
147
+ - It polls `terminal.annotations.next` every 400 ms while the inspector is on.
148
+
149
+ New terminal routes: `target`, `attach`, `windows`, `selectWindow`, `inspect`, `stopInspect`, `next`, `queue`, `dequeue`, `confirm`, `send`. They queue and send only to the terminal's own session and need the control key. `/notes` stays the plain list.
150
+
151
+ ## Alternatives
152
+
153
+ - **The host draws the popover.** The App's native web view covers React content, and each host would build its own. The owner chose in-page drawing.
154
+ - **A WebSocket bridge.** It would need a new dependency. Long-polling over plain HTTP is enough for one person's clicks, and `text/plain` posts avoid CORS preflights.
155
+ - **Trust whatever the page reports.** A hostile page could start a run with its own text. The isolated world, plus confirmation where isolation is impossible, prevents that.
156
+ - **Do nothing.** The owner's request goes unmet.
157
+
158
+ ## Consequences
159
+
160
+ - **Notes:** the record has a new optional field; older notes read unchanged.
161
+ - **Protocol:** additive methods and notices.
162
+ - **Hosts:** the App replaces its bottom-strip panel with a pane, and calls `annotations.*`, `annotations.capture.*` for app targets, and `compose`/`delivered` around its own `sessions.run`.
163
+ - **Agent tools:** sessions get a third page-note tool.
164
+
165
+ ## Migration
166
+
167
+ No data migration: `delivery` is optional. The App's PAR-011 migration (`annotations.import`) is unchanged. The bridge settings file is created on first use and can be deleted to get a new port and token.
168
+
169
+ ## Checks
170
+
171
+ | What | Where |
172
+ |---|---|
173
+ | Queue, delivery, busy and auto-send, confirmation, host hand-off, mark fixed, app URLs | `annotations/delivery.test.ts` |
174
+ | Inspector in a real page: element, text drag, sensitive field refused, Escape, toast, cancel | `annotations/pageScript.test.ts` |
175
+ | Isolated world (the page cannot see the helper), reload re-arm, DevTools attach leaves the app running, bridge round-trip as untrusted, stable port and token | `annotations/capture.test.ts` |
176
+ | Bridge token, host-name check and relay | `annotations/bridge.test.ts` |
177
+ | Pane | `terminal/tui/pages/annotatePage.test.ts` |
178
+ | Terminal send and auto-send on run end | `terminal/terminal.test.ts` |
179
+ | Host compose and delivered | `npm run prove` |