@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,98 @@
1
+ # 09 Accounts and connectors
2
+
3
+ ## Purpose
4
+
5
+ **Accounts** are isolated Pi identities: each has its own agent folder, credentials, sessions and
6
+ history, so one person can use several providers and subscriptions without them mixing.
7
+ **Connectors** (connected apps) are MCP servers a session reaches through a broker, with scoped
8
+ access, approval of non-read calls, and redaction. The **Hub** installs exact catalog versions of
9
+ skills, prompts, rules and Pi packages.
10
+
11
+ ## Components
12
+
13
+ | Type / function | Module | Role |
14
+ |---|---|---|
15
+ | `Accounts` | `accounts/accounts.ts` | Accounts and pools: `resolve`, `context`, `runtime`, `models`, `status`, sign-in (`loginStart`, `loginStatus`, `loginRespond`, `loginCancel`), `setApiKey`, `signOut`, terminal accounting. |
16
+ | `isolateProcess`, `ensureSharedDir`, `sharedDir` | `accounts/env.ts` | Isolated launch environments. |
17
+ | account store, audit | `accounts/store.ts` | The registry and audit log. |
18
+ | `SecretStore`, `secretKey`, `fileSecretStore`, `memorySecretStore` | `accounts/secrets.ts` | Where credentials live (page 01). |
19
+ | `ConnectedApps` | `mcp/service.ts` | The broker: `grant`, `session`, `expose`, `tools`, `revokeRun`, `callUnattended`, traces. |
20
+ | `Connections` | `mcp/connections.ts` | Saved connections, scopes, secrets, `redactEvent`, `scrub`. |
21
+ | `McpManager` | `mcp/manager.ts` | MCP clients. |
22
+ | OAuth | `mcp/oauth.ts` | Sign-in; an application's own registered clients (`AppOAuthClients`). |
23
+ | `Hub` | `hub/hub.ts`, `hub/schema.ts` | Catalog, preview, install, uninstall, receipts. |
24
+
25
+ ## Contracts
26
+
27
+ - **Account folder.** Every Pi session gets its account's own agent folder
28
+ (`PI_CODING_AGENT_DIR`) under `<state dir>/accounts/`. Settings, skills, prompts and
29
+ instructions are shared through links to `_shared/pi/`; credentials, sessions and history stay
30
+ in the account's own folder.
31
+ - **Resolution.** A new session may name an account, a pool, or neither (the default). Once
32
+ started, it stays on that account.
33
+ - **Sign-in progress** lives in the running process only. `accounts.loginStatus` recovers the
34
+ current code or prompt with a revision; it is never written to account files.
35
+ - **Broker tools.** `mcp_list_tools` and `mcp_call_tool`. A connection reaches a session only if
36
+ its scope allows the caller and the policy's `connections` keeps it. Calls that are not reads
37
+ are approved through the gate. Each call's redacted result is traced in `mcp-context.json`.
38
+ - **`apps.expose(tools)`** offers the application's own tools through the broker, which is how a
39
+ terminal session reaches them.
40
+ - **Hub.** `hub.list`, `get`, `preview`, `install`, `uninstall`, `readDocument`. Pi packages need
41
+ an exact npm version or a full Git commit. Documents are saved as inert JSON.
42
+
43
+ ## Invariants
44
+
45
+ - **INV-ACC-1** Accounts are isolated. A session runs in its account's own Pi folder, never in
46
+ `~/.pi`. The process drops inherited credential variables (`*_API_KEY`, `*_AUTH_TOKEN`,
47
+ `*_OAUTH_TOKEN`, `*_ACCESS_TOKEN`, `CODEX_HOME`, `CLAUDE_CONFIG_DIR`, `PI_CODING_AGENT_DIR`)
48
+ before any session starts.
49
+ - **INV-ACC-2** An account is never exchanged for another. A pinned session that cannot use its
50
+ account fails. Changing account for a terminal is an explicit person's action that restarts
51
+ the child.
52
+ - **INV-ACC-3** The harness never writes a secret to its own files; it asks the `SecretStore`.
53
+ The default file store is owner-only (`0600`).
54
+ - **INV-ACC-4** A terminal's `/accounts` goes through the session socket's `accounts.*` calls, and
55
+ every one needs the session's control key. A command the model runs in the shell cannot make
56
+ an account change.
57
+ - **INV-MCP-1** Connector secrets live in the `SecretStore`; `connections.json` holds no secret.
58
+ Run events and traces are redacted before they are stored or shown.
59
+ - **INV-MCP-2** A session reaches only the connections its scope and the policy allow, and loses
60
+ them when its run ends (`revokeRun`).
61
+ - **INV-MCP-3** An application's OAuth client is usable only by a catalog entry it lists, and
62
+ nothing of it is stored.
63
+ - **INV-MCP-4** Hub installation grants no attachment, trust, credential or permission. Writes
64
+ are serialized; existing registry files are never overwritten; uninstall removes only the exact
65
+ receipt's resources and revokes its attachment choices.
66
+
67
+ ## Data
68
+
69
+ ```text
70
+ <state dir>/accounts/ registry, per-account Pi agent folders, _shared/pi/, audit log
71
+ <state dir>/secrets.json default SecretStore (owner-only)
72
+ <state dir>/connections.json connected apps, no secrets
73
+ <state dir>/hub/catalog.json catalog cache
74
+ <data root>/hub/ installed documents and provenance
75
+ <data root>/runs/<id>/mcp-context.json
76
+ ```
77
+
78
+ ## Source map
79
+
80
+ `src/accounts/*.ts`, `src/mcp/*.ts`, `src/hub/*.ts`. Decision:
81
+ [ADR-0005](../decisions/ADR-0005-app-provided-oauth-clients.md).
82
+
83
+ ## Account and connector diagnostics
84
+
85
+ `Accounts.inspect` reads credentials and a non-refreshing Pi model catalogue through a read-only
86
+ credential store. It never refreshes OAuth tokens or verifies a key over the network. `/doctor`
87
+ labels this local readiness. A selected live model probe sends one synthetic request, caps output
88
+ at 64 tokens, and records usage through the normal run writer. It never substitutes an account.
89
+ MCP live diagnostics connect and list tools on the selected scoped connector, without calling
90
+ connector tools or starting sign-in. Disposable grants and clients are closed afterwards.
91
+
92
+ ## Terminal connection setup
93
+
94
+ The unified browser exposes existing connection save/test/sign-in/sign-out/remove services through
95
+ private terminal controls (PROP-0013). New definitions are saved disabled. Saving does not connect,
96
+ sign in or approve tools. Secrets use masked fields and the existing secret store; snapshots omit
97
+ saved credential values and scrub connection errors/tool metadata. Hub documents remain inert until
98
+ a person explicitly chooses setup and completes the normal validated connection form.
@@ -0,0 +1,193 @@
1
+ # 10 Server protocol
2
+
3
+ ## Purpose
4
+
5
+ A host that is not a Node program embeds the harness as a child process and talks to it over
6
+ newline-delimited JSON on stdin and stdout. The protocol exposes the same in-process API a Node
7
+ application uses, run events as they are saved, state-change notices, and calls from the harness
8
+ to the host for the extension points the host supplies.
9
+
10
+ ## Components
11
+
12
+ | Type / function | Module | Role |
13
+ |---|---|---|
14
+ | `RpcPeer`, `Transport`, `stdioTransport`, `PROTOCOL_VERSION` | `server/rpc.ts` | Framing, requests, replies, host calls. |
15
+ | `methods(harness)` | `server/methods.ts` | Merges Foundation handlers with built-in plugin handlers from `BuiltinPluginRegistry` and rejects overlapping ownership. |
16
+ | `serve`, `attach` | `server/serve.ts` | Registers the table, forwards events and notices. |
17
+ | `remoteSecrets`, remote policy, directory, tools | `server/remote.ts` | Extension points supplied by the host over the protocol. |
18
+ | CLI `serve` | `src/cli.ts` | `serve --state <dir> --data <dir> --name <product> [--builtins <dir>] [--host-secrets] [--host-policy] [--host-tools] [--host-directory]`. |
19
+
20
+ ## Contracts
21
+
22
+ ```text
23
+ host → harness { v: 1, id, method, params } harness → host { v: 1, id, result | error }
24
+ harness → host { v: 1, event } a run event, validated, after it is saved
25
+ harness → host { v: 1, notice } state changed: read it again
26
+ harness → host { v: 1, id, call, params } host → harness { v: 1, id, result | error }
27
+ ```
28
+
29
+ - stdout carries only protocol lines; diagnostics go to stderr.
30
+ - Run events use the validated, persisted payload schemas in page 02. `question.requested` may carry
31
+ the optional bounded ASCII sketch metadata described there; the server relays it without changing
32
+ answer payloads or the protocol framing (PROP-0024).
33
+ - `harness.methods` lists every method. Groups in the table: `accounts`, `harnesses`, `runs`,
34
+ `connections`, `plugins`, `wiki`, `refine`, `capabilities`, `hub`, `terminal`, `approvals`,
35
+ `harness`, `subagents`, `agents`, `sessions`, `sideQuestions`, `library`, `recall`, `context`,
36
+ `worktrees`, `annotations`.
37
+ - Host calls (only with the matching `--host-*` flag): `secrets.get|set|delete`,
38
+ `policy.scope|authorize|approval|connections`, `tools.call`. The host registers tools with
39
+ `tools.register` and names with `directory.set`, and describes its parts with
40
+ `plugins.describe`.
41
+ - `refine.start` takes `{ task, k?, mode?, improver?, executor?, baseVersion?, retainWorkspaces?, id? }`;
42
+ `refine.candidates` returns each execution with `workspace: string | null` (page 05, PROP-0002, PROP-0003).
43
+ - `runs.checklist { runId }` returns the run's latest checklist, `[]` when it wrote none (PROP-0006).
44
+ - `agents.list { cwd? }` returns `{ profiles, problems }`; `agents.get { cwd?, name }` one profile;
45
+ `agents.create { cwd?, name, scope: 'global' | 'project', from? }` writes the template or a copy
46
+ and refuses an existing file; `agents.remove { cwd?, name, scope }` deletes a person's own file.
47
+ `subagents.spawn` takes `agent` as a profile name and returns `agent` and `unavailableTools`
48
+ (PROP-0029). It takes an optional `title` (at most six words); without one the child's title is
49
+ the first line of its brief (PROP-0030).
50
+ - `runs.continuation { runId, sessionDir? }` returns a `Continuation`, and `sessions.run` accepts
51
+ `continueFrom` (page 02, PROP-0007). `harness.status` reports `recovery.interruptedRunIds`.
52
+ - Errors carry a stable `code`, a message and an optional hint (`core/errors.ts`).
53
+
54
+ ## Invariants
55
+
56
+ - **INV-SRV-1** `src/server/methods.ts` is the contract for every non-Node host. Adding a method
57
+ to an existing group is an additive change (update this page). Renaming, removing, or changing
58
+ the params or result shape of a method is an architecture change.
59
+ - **INV-SRV-2** A method handler calls the same in-process API a Node application uses. The server
60
+ holds no logic of its own beyond parameter checking.
61
+ - **INV-SRV-3** Events reach the host only after they are persisted and redacted (`INV-RUN-3`).
62
+ - **INV-SRV-4** Changing the framing or `PROTOCOL_VERSION` is an architecture change.
63
+ - **INV-SRV-5** The harness works with none of the host calls supplied (`INV-EXT-2`).
64
+ - **INV-SRV-6** After a change to the server, the CLI or startup, `npm run prove` must pass: it
65
+ starts the server on a throwaway data root with no application present and exercises accounts,
66
+ variants, the Wiki, the prompt, connected apps, a recorded session, a plugin hook and the
67
+ refinement demo. The App's sidecar tests parse every reply with its schemas and must pass too.
68
+
69
+ Built-in feature modules may contribute handlers through `BuiltinPluginRegistry`, but the
70
+ `methods(harness)` result remains the public contract. Plugin module ownership does not rename
71
+ methods or change their params, result shapes or authorization paths (PROP-0020).
72
+
73
+ ## Source map
74
+
75
+ `src/server/*.ts`, `src/cli.ts`, `src/core/errors.ts`, `scripts/prove-standalone.mjs`.
76
+
77
+ ## Doctor jobs (PROP-0011)
78
+
79
+ | Method | Input | Reply |
80
+ |---|---|---|
81
+ | `doctor.start` | `{ context: { caller, cwd, accountId, model, tools, variant?, capabilities? }, mode?: "local" \| "live", checks?: string[], confirmed?: boolean }` | `DoctorReport` |
82
+ | `doctor.read` | `{ id }` | `DoctorReport` |
83
+ | `doctor.cancel` | `{ id }` | `DoctorReport` |
84
+
85
+ A trusted host attests confirmation for the exact selected live checks. Live mode requires both
86
+ `confirmed: true` and non-empty `checks`. Terminal equivalents are `terminal.doctor.*`; every call
87
+ requires the control key and each job belongs to its originating terminal. The terminal supplies
88
+ its account and pinned variant; the controlled frontend supplies its current model and tool list.
89
+
90
+ Reports carry job state (`running`, `completed`, `cancelled`), progress, timestamps, selected
91
+ account/model, findings, and available live-check notices. Findings distinguish `local` from
92
+ `live` and statuses `pass`, `warning`, `fail`, `disabled`, `blocked`, `unverified`. Schemas and
93
+ Node types are exported. Jobs are in-memory until shutdown; real live-run records remain.
94
+
95
+ ## Side questions (PROP-0019)
96
+
97
+ | Method | Input | Reply |
98
+ |---|---|---|
99
+ | `sideQuestions.start` | `{ question, cwd, caller, context?: { instructions?, transcript?, references? }, parentRunId?, parentSessionId?, accountId?, model?, effort?, runId?, sessionId? }` | `{ runId, sessionId, nativeSessionId }` |
100
+ | `sideQuestions.read` | `{ runId, sessionId, afterSequence? }` | `{ run: RunRecord, events: RunEvent[] }` |
101
+ | `sideQuestions.interrupt` | `{ runId, sessionId }` | `{ runId }` |
102
+
103
+ The Harness builds bounded context from the parent's persisted effective prompt and public events
104
+ plus the surface's visible transcript. Read and interrupt require the side run's session id. The
105
+ standalone terminal exposes the same operations through control-key-protected
106
+ `terminal.sideQuestions.*` calls; its caller identity, account and working folder come from terminal
107
+ preparation, not client-supplied values.
108
+
109
+ Remote `tools.register` may include `diagnostics: [{ id, category, title, tools, probe?: { notice,
110
+ tool, input, contains } }]`. The host answers `tools.diagnose({ id, context })` with `{ status,
111
+ evidence, remedy? }` for local inspection. A probe is a declared registered tool call through
112
+ the gate, with an expected response marker; it cannot supply arbitrary executable code.
113
+
114
+ ## Private terminal resource controls (PROP-0013)
115
+
116
+ These methods are session-socket controls, not additions to the public host RPC table. All
117
+ require the claimed terminal control key; account, working directory and variant pin come
118
+ from preparation, never from the request.
119
+
120
+ | Method | Input | Reply |
121
+ |---|---|---|
122
+ | `terminal.browser.config` | `{}` | `{ allowPrivate }`, the device-local private-address setting |
123
+ | `terminal.browser.configure` | `{ allowPrivate: boolean }` | `{ allowPrivate }`, updated setting |
124
+ | `terminal.browser.snapshot` | `{ refresh?: boolean }` | `BrowserSnapshot`: resources, plugins, safe connection records, pinned/latest variant identity and Hub overview |
125
+ | `terminal.browser.read` | `{ id, latest?: boolean }` | `{ content }`, bounded enumerated resource content |
126
+ | `terminal.browser.importSkill` | `{ path }` | `{}`, validated bounded local bundle imported into the existing library |
127
+ | `terminal.browser.hubPreview` | `{ id, version, offset? }` | Existing `HubPreviewPage` |
128
+ | `terminal.browser.hubDocument` | `{ id, version }` | Existing verified installed document |
129
+ | `terminal.browser.connections.appClients` | `{}` | Existing available application OAuth catalog IDs |
130
+ | `terminal.browser.connections.save` | `{ input: ConnectionInput }` | Existing safe `Connection` record |
131
+ | `terminal.browser.connections.test\|signIn\|signOut\|remove` | `{ id }` | Existing connection service result |
132
+
133
+ Protected `plugins.install { source }` and `plugins.remove { pluginId }` delegate to the package
134
+ service. Optional matching callbacks extend `PluginControl`; hosts without them receive a clear
135
+ unsupported-operation error. No protocol version or persisted schema changes.
136
+
137
+ ## Worktrees (PROP-0016)
138
+
139
+ | Method | Input | Reply |
140
+ |---|---|---|
141
+ | `worktrees.list` | `{ repo? }` | active `WorktreeRecord[]` (of the repository `repo` is in) |
142
+ | `worktrees.removed` | `{ repo? }` | removed records that `restore` can bring back |
143
+ | `worktrees.status` | `{ id }` | `WorktreeStatus`: exists, head, changed paths, commits since it started |
144
+ | `worktrees.create` | `{ repo, name?, baseRef?, branch?, kind?, carryChanges?, setup? }` | `{ worktree, carried, included, setup }` |
145
+ | `worktrees.branch` | `{ id, name }` | the record, on branch `<prefix><name>` |
146
+ | `worktrees.handoff` | `{ id, direction: "toSource" \| "toWorktree", move? }` | `{ direction, patched, copied, stash }` |
147
+ | `worktrees.remove` | `{ id, force? }` | `{ worktree, snapshot }` |
148
+ | `worktrees.restore` | `{ id }` | the record |
149
+ | `worktrees.prune` | `{ repo?, keep? }` | `{ removed, failed }` |
150
+ | `worktrees.adopt` | `{ path }` | the record (kind `permanent`, origin `adopted`) |
151
+ | `worktrees.setup.trust` | `{ repo, hash }` | `{}` |
152
+
153
+ Errors: `not_a_repository`, `repository_empty`, `worktree_exists`, `branch_exists`,
154
+ `worktree_in_use`, `worktree_has_work`, `worktree_removed`, `worktree_missing`, `not_a_worktree`,
155
+ `handoff_target_dirty`, `handoff_conflict`, `git_failed`, `git_unavailable`. The terminal reaches the
156
+ same service through `terminal.worktrees.*` routes, which need the control key (`INV-TUI-4`).
157
+
158
+ ## Page notes (PROP-0017)
159
+
160
+ | Method | Input | Reply |
161
+ |---|---|---|
162
+ | `annotations.list` | `{ url?, query?, status?, offset?, limit? }` | `{ notes, total }`, newest first |
163
+ | `annotations.read` | `{ id }` | `Note` |
164
+ | `annotations.create` | `{ source, target, body, tags? }` | `Note` (private) |
165
+ | `annotations.update` | `{ id, expectedVersion, patch: { body?, tags?, status?, target? } }` | `Note` |
166
+ | `annotations.delete` | `{ id, expectedVersion }` | `{}` |
167
+ | `annotations.share` | `{ id, principal: { sessionId } \| { agentId }, binding? }` | `Note` |
168
+ | `annotations.unshare` | `{ id, principal }` | `Note` |
169
+ | `annotations.revokeBinding` | `{ binding }` | `{ revoked }` |
170
+ | `annotations.import` | `{ notes }` | `{ imported, skipped }` (ids kept) |
171
+ | `annotations.pageScript` | `{}` | `{ script }`: the page helper, with `__ARGS__` for one operation |
172
+ | `annotations.queue` | `{ id, sessionId, expectedVersion?, autoSend? }` | `Note`, shared with the session and queued (PROP-0018) |
173
+ | `annotations.dequeue` / `annotations.confirm` | `{ id, expectedVersion? }` | `Note` |
174
+ | `annotations.queued` | `{ sessionId }` | `{ notes }`, oldest first |
175
+ | `annotations.createAndAct` | `{ note, action: save \| queue \| send, sessionId?, trusted? }` | `{ note, send }`; an untrusted send waits for `confirm` |
176
+ | `annotations.compose` | `{ sessionId, ids? }` | `{ text, ids }`: one instruction for a host's own `sessions.run` |
177
+ | `annotations.delivered` | `{ ids, sessionId, runId }` | `{ notes }`, marked sent |
178
+ | `annotations.send` | `{ sessionId, ids? }` | `{ state: sent \| busy \| host \| empty, … }` |
179
+ | `annotations.capture.attach` | `{ key, kind: web \| cdp \| bridge, endpoint?, name? }` | `{ kind, app, windows, bridge? }` |
180
+ | `annotations.capture.target` | `{ key }` | `{ kind, app, inspecting, windows }` |
181
+ | `annotations.capture.selectWindow` | `{ key, window }` | `{}` |
182
+ | `annotations.capture.open` | `{ key, url? }` | `{ url, title }` |
183
+ | `annotations.capture.inspect` / `stopInspect` | `{ key }` | `{ captureId }` / `{}` |
184
+ | `annotations.capture.next` | `{ key, sessionId?, surface? }` | `{ active, trusted, app, note, send, message, … }` |
185
+ | `annotations.capture.release` | `{ key }` | `{}` |
186
+ | `annotations.bridge.start` | `{}` | `{ port, token, scriptUrl, snippet }` |
187
+
188
+ Notices: `annotations.changed { sessionId, ids }` after any queue, send or fix;
189
+ `annotations.ready { sessionId, ids }` when a host session's waiting notes should be sent now.
190
+
191
+ Errors: `version_conflict`, `not_found`, `annotation_limit`, `invalid_request`, `invalid_data`. The
192
+ terminal reaches the same store through `terminal.annotations.*`, which shares only with its own
193
+ session and needs the control key (`INV-TUI-4`).
@@ -0,0 +1,261 @@
1
+ # 11 Terminal
2
+
3
+ ## Purpose
4
+
5
+ The harness owns a generic interactive terminal application (`xagent`) over a
6
+ persistent Pi session on a variant. It is the standalone way to use the harness, and an
7
+ embedding application can host it in its own PTY. Detail, screen layout and verification evidence
8
+ are in [`../terminal-tui.md`](../terminal-tui.md); this page states the binding parts.
9
+
10
+ ## Components
11
+
12
+ | Type / module | Role |
13
+ |---|---|
14
+ | `Terminals` (`terminal/terminals.ts`) | Parent side: `prepare` (account, compiled context, trusted resources, run writer) returns a launch specification; `send`, `state`, `input`, `dispose`. |
15
+ | `src/terminal/opentui/` (`app.ts`, `root.tsx`) | The OpenTUI/Solid frontend: lifecycle, submission, commands, decisions, composition, transcript, composer, dialogs. |
16
+ | `src/terminal/opentui/attachments.ts`, `composerMarks.ts` | Composer attachments: pasted images and collapsed large pastes, their atomic labels, and expansion into the prompt text and Pi image content on send. |
17
+ | `src/terminal/tui/runtime.ts` | `AgentSessionRuntime` over `createAgentSession`, `ModelRuntime`, `SessionManager`, `DefaultResourceLoader`. |
18
+ | `src/terminal/socket.ts`, `client.ts`, `control.ts`, `controller.ts` | The session socket, the private control key, and the run controller. |
19
+ | `src/terminal/piExtension.ts` | The bridge extension, loaded last as the trusted inline gate. |
20
+ | `src/terminal/cli.ts` | Wiki and connected-apps commands for the session's shell. |
21
+
22
+ ```text
23
+ Harness parent: account + compiled context + trusted resources + run writer
24
+ | launch specification / session socket
25
+ Harness terminal child (Bun): OpenTUI application + persistent Pi AgentSessionRuntime
26
+ | typed native events / plugin UI callbacks
27
+ Screen: transcript above the composer, centred dialogs, full-screen resource browser
28
+ ```
29
+
30
+ ## Contracts
31
+
32
+ - The published executable is `xagent`; `xharness` is not retained as a compatibility alias. With no command, `xagent` starts the interactive terminal. `terminal` remains an explicit alias, and `serve` remains the host-facing RPC path.
33
+ - `TerminalAssets` is `{ node, cli, piExtension, openTui }`. The command is Bun with
34
+ `--conditions=browser` and `dist/terminal-opentui.js`; no global `pi` is needed.
35
+ - The `piExtension` path is the final prepared extension argument; the runtime loads it as the
36
+ final trusted inline factory.
37
+ - The terminal compiles its prompt once (`compile` + `render`) and keeps that pack; each run
38
+ records a copy (page 04).
39
+ - Normal mode keeps `ask_user` and `ask_user_question` out of the active tool set. A plan request
40
+ enables the registered question tools alongside its read-only set and restores the normal set on
41
+ success, failure or interruption. See page 02 and the [terminal guide](../terminal-tui.md).
42
+ - Standalone defaults: `~/.xingular-harness/{data,state}`; `npm run dev` uses
43
+ `~/.xingular-harness-dev/{data,state}`.
44
+ - An empty conversation shows a centered welcome using `env.productName` (default `Xingular Agent`):
45
+ the first letter of a multiword name is the orange block mark and its remaining words are letter-spaced
46
+ in blue. The welcome adds a greeting, tagline and `/help` hint without replacing the composer or
47
+ status bar. Explicit host product names use the same generic formatting.
48
+ - `xagent --worktree [name]` (`-w`) starts in a new managed worktree of the current repository,
49
+ or in the named one, and prunes older managed worktrees (PROP-0016). A session that names a
50
+ worktree holds it for its whole life. `/worktree` switches folders by asking the host to restart
51
+ the frontend there (`TerminalRelaunch.cwd`), as a new conversation: Pi keeps one history per
52
+ working folder.
53
+ - Slash-command aliases share one registry entry: `/session (resume)` switches saved sessions,
54
+ `/history (tree)` navigates branches in the current session, and `/btw (side)` asks a side
55
+ question through the Harness `SideQuestions` service. It uses the same account/model/effort,
56
+ mirrors the main run's redacted prompt and public evidence, starts a separate tool-free run, and
57
+ leaves the main conversation untouched. The dock streams, scrolls and copies the complete answer.
58
+ Aliases remain callable and searchable, but help and palette show only the canonical
59
+ entry. Commands owned by required built-in plugins and core terminal commands are unprefixed.
60
+ Optional built-in plugin and Pi extension commands use `/plugin:<command>`. A bare command or
61
+ prompt owns its name; a colliding `/plugin:<command>` is omitted and rejected with a hint to use
62
+ the bare command. Prompt templates and `/skill:<name>` otherwise keep their existing forms.
63
+
64
+ ## Invariants
65
+
66
+ - **INV-TUI-1** OpenTUI is the only terminal frontend. Pi's `InteractiveMode` is never constructed
67
+ ([ADR-0006](../decisions/ADR-0006-opentui-only-terminal.md)).
68
+ - **INV-TUI-2** The harness owns screen composition, input, scrolling, command routing and plugin
69
+ UI. Pi owns the execution runtime, native history and rich content components. A host owns the
70
+ PTY and process supervision ([ADR-0001](../decisions/ADR-0001-owned-terminal.md)).
71
+ - **INV-TUI-3** Execution, account isolation, trust, authorization and run recording stay behind
72
+ their existing layers. The terminal adds no second path for any of them; its runs are written
73
+ through the controller and the run store.
74
+ - **INV-TUI-4** Changes made through the session socket (`plugins.attach|detach|trust|untrust|configure`,
75
+ `accounts.*`, Hub installs, `terminal.browser.*`, `terminal.worktrees.*`,
76
+ `terminal.annotations.*`, `terminal.sideQuestions.*`) require the control key the trusted terminal process claimed once
77
+ (`control.claim`). The session's shell can read the session token, so the token alone is never
78
+ enough.
79
+ - **INV-TUI-5** Every resource reload revalidates the original trusted selection; changed or
80
+ revoked code needs review and a fresh terminal.
81
+ - **INV-TUI-6** `sessions.run` stays the embedding and unattended path. The terminal keeps a
82
+ persistent child instead of opening a session per turn.
83
+ - **INV-TUI-7** Required built-in plugin commands use their unprefixed names; optional built-in
84
+ plugin commands and Pi extension commands use `/plugin:<command>`. Completions and help show each
85
+ command in its canonical namespace. Bare core commands, aliases, required built-in commands and
86
+ loaded prompts reserve their names; a colliding prefixed command is hidden and rejected with a hint
87
+ to use the bare command. Duplicate extension names are rejected with owner diagnostics. Old
88
+ prefixed forms of required built-in commands are not aliases.
89
+
90
+ ## Source map
91
+
92
+ `src/terminal/**`. Decisions: ADR-0001, [ADR-0004](../decisions/ADR-0004-fullscreen-terminal-layout.md)
93
+ (superseded), ADR-0006, [ADR-0021](../decisions/ADR-0021-required-command-namespaces.md),
94
+ [ADR-0024](../decisions/ADR-0024-xagent-command.md),
95
+ [ADR-0027](../decisions/ADR-0027-connected-sketch-display.md),
96
+ [ADR-0028](../decisions/ADR-0028-xingular-agent-product-identity.md). Experiments:
97
+ EXP-0001, EXP-0002 in `../experiments/`.
98
+
99
+ ## Session name in the working line (PROP-0010)
100
+
101
+ The bridge registers `session_name` against Pi's `getSessionName` / `setSessionName` APIs.
102
+ The native `session_info_changed` event invalidates the frontend's cached snapshot and
103
+ refreshes the working line. Both the active and retained completion line append
104
+ ` – <name>` after duration and token rate, for example
105
+ `Working (2m, 50 tok/s) – Add web browser integrations`. Unnamed sessions omit the suffix.
106
+ Names use the existing terminal text sanitization, remain outside the verb shimmer, and
107
+ truncate at the right edge. Manual `/name` and existing long names remain supported.
108
+
109
+ ## Doctor command
110
+
111
+ `/doctor` opens a command page and runs local readiness checks. Refresh and retry are local;
112
+ Live checks opens an explicit selection followed by account/model, destination, cost and isolation
113
+ confirmation. The page polls structured reports, retains findings after cancellation, and cancels
114
+ on close. No command text is sent to the conversation model. See [Doctor](../doctor.md).
115
+
116
+ ## Resource browser (PROP-0013)
117
+
118
+ `/harness` owns shared navigation for Foundation, Variant, Skills, Plugins, Connections, Tools
119
+ and Library. `/skills`, `/plugins`, `/connections` (`/mcp`), `/tools`, `/hub` and `/components`
120
+ are shortcuts into that browser. Current availability comes from the live resource loader and
121
+ active tool registry, independently of saved configuration and the latest variant head.
122
+
123
+ Every `terminal.browser.*` call requires the private control key, including bounded resource
124
+ inspection, local imports, connection management and browser settings. Package install/remove use protected
125
+ `plugins.install|remove`. These are adapters to the existing services, not another loader,
126
+ attachment store, gate or secret store. Browsing neither executes plugin code nor connects MCP.
127
+ The browser uses the full terminal with persistent section tabs (PROP-0014); wide screens keep
128
+ inventory beside details, actions and content, while compact screens keep inline details under
129
+ the same tabs. Other command pages remain centered except `/settings` and `/accounts`, which use
130
+ full-screen page layouts. Accounts keeps Accounts/Pools tabs, search and account-service operations.
131
+ Wide terminals show selected-account details beside the list; Enter or a primary click opens grouped
132
+ actions in that inspector. Compact terminals replace the list with a full-page account detail view
133
+ and its grouped actions. Enter opens the selected account; Escape returns to the list while
134
+ preserving its section, query and selection across navigation and resizing. Tab/Shift+Tab moves focus
135
+ between tabs, the list and (when open) actions; Left/Right changes a focused tab and Up/Down moves
136
+ the focused list or action list. Account actions retain their Session, Account, Sign-in and Remove
137
+ groups; pool actions remain grouped under Manage and Remove. See the
138
+ [terminal guide](../terminal-tui.md#blocks-and-pages) for layout and interaction.
139
+
140
+ `/settings` is a full-screen page with category tabs, search, settings list and the device-local
141
+ Browser tab for `allowPrivate`. Enabling private address access requires confirmation and allows both
142
+ agent browsing and annotation capture to reach localhost and private networks. It is off by default.
143
+
144
+ ## Worktrees command (PROP-0016)
145
+
146
+ `/worktree` opens a page of the managed worktrees of the repository the session works in: make a
147
+ managed or permanent worktree, switch the terminal to one (or back to the main checkout), create a
148
+ branch on a detached one, hand changes off in either direction, remove one (with a snapshot when it
149
+ holds work, never the one this terminal uses), restore a removed one, prune older ones, and trust
150
+ the repository's setup script. The page calls `terminal.worktrees.*` routes, which use the same
151
+ `Worktrees` service as the `worktrees.*` server methods. `xagent worktree <command>` offers the
152
+ same actions from a shell.
153
+
154
+ ## Question dock
155
+
156
+ Pending questions appear in a flat block above the composer, with a tab for each 1–2 word question
157
+ label above its title. Tabs can be clicked; Left/Right also switch questions and preserve staged
158
+ answers. The header has no pager or collapse control, and the dock stays expanded until the answer
159
+ is submitted or Escape cancels the pending question. While it is active, the chat composer and its
160
+ lower status bar are hidden. `n` opens a note for the focused selected choice; Tab and Shift+Tab
161
+ navigate existing note fields, the free-text answer and the action without creating notes. Notes
162
+ and the “Something else” answer wrap across lines. Choice recommendations remain visual only and
163
+ never preselect an answer.
164
+
165
+ Every choice uses one shared measured layout: a marker gutter, a one-third label cell, a two-cell
166
+ gap, and the remaining description cell. Column boundaries align across all rows at every terminal
167
+ width, including compact widths. Text wraps within its cell; a missing description keeps its cell
168
+ and columns never stack. Recommendation text uses `(Rec.)` when the label column is fewer than 14
169
+ cells. Below 60 terminal columns, the dock uses a compact hint.
170
+
171
+ The dock body has bounded height and vertical scrolling; question tabs and answer/action controls
172
+ stay outside that scrolling region. PageUp/PageDown scroll the body and Ctrl+Home/End jump to its
173
+ beginning/end while the dock is active, rather than scrolling the transcript. Focused choices and
174
+ note fields are brought into view. Ordinary arrows retain question/choice navigation; Shift+arrows
175
+ pan the sketch horizontally or vertically.
176
+
177
+ When a question sets `uiSketch: true`, one shared border-only monospace preview below the choices
178
+ shows the hovered or focused choice's ASCII wireframe, with no visible caption or extra left rule.
179
+ Sketch source supports up to 80 columns by 24 lines (page 02) and remains literal ASCII in
180
+ persistence. The terminal uses a bounded structural display projection: recognized ASCII table-border
181
+ rows—including a title between horizontal runs—and enclosed vertical table edges become connected
182
+ box-drawing glyphs, while internal framed tables retain their original widths and positions. For a
183
+ high-confidence frame with matched `+` corners, missing or slightly displaced side edges may be
184
+ filled or moved only through whitespace to the established boundary columns; interior text is never
185
+ moved or overwritten, and conflicting or ambiguous rows remain literal. Bare standalone hyphen
186
+ divider rows expand to `max(panel viewport width, original sketch widest line)` and join the outer
187
+ single-line preview frame with `├` and `┤`. This is not a global `+|-` substitution: prose, content
188
+ operators, ordinary pipes and unrecognized rows remain literal. Source sketches and all persisted
189
+ whitespace remain unchanged; only the display projection adjusts recognized boundary cells.
190
+
191
+ There is no wrapping, reflow, truncation or markup interpretation. A bounded two-axis viewport makes
192
+ all overflow reachable by panning. Moving focus changes the preview without changing the staged
193
+ answer. Projected glyphs and expanded dividers never enter persisted events or answers; the wire
194
+ contract is unchanged. See [PROP-0025](proposals/PROP-0025-contextual-question-wireframes.md),
195
+ [ADR-0026](../decisions/ADR-0026-contextual-question-wireframes.md) and the approved display amendment
196
+ [PROP-0026](proposals/PROP-0026-connected-sketch-display.md) /
197
+ [ADR-0027](../decisions/ADR-0027-connected-sketch-display.md), and
198
+ [PROP-0028](proposals/PROP-0028-normalize-question-wireframes.md) /
199
+ [ADR-0029](../decisions/ADR-0029-normalized-question-wireframe-borders.md). Isolated production
200
+ PTY verification is retained in `docs/evidence/terminal-wireframe-normalization/`; it establishes
201
+ cell topology for bounded fixtures, not every emulator/font or live-model sketch quality.
202
+
203
+ ## Page notes commands (PROP-0017)
204
+
205
+ `/plugin:notes` lists the page notes kept in the data root, with search, and offers reveal, edit, resolve or
206
+ reopen, share with this session or stop sharing, and delete. `/plugin:annotate [url]` starts a new note: it
207
+ opens a visible capture browser (its own window and profile, separate from the agent's browser), and
208
+ the person notes the whole page, selects text, or clicks an element there, then confirms in the
209
+ terminal. A note is private until shared; this session's agent then reads it with `page_notes_list`
210
+ and `page_notes_read`.
211
+
212
+ `/plugin:annotate` is the annotate pane (PROP-0018): a full-screen page beside the window being inspected.
213
+
214
+ - **Ways to start it:**
215
+ - `/plugin:annotate [url]`: the browser window
216
+ - `/plugin:annotate --app <DevTools address | port> [name]`: an app's own windows over its DevTools port
217
+ - `/plugin:annotate --bridge [name]`: app windows that load the page bridge script, which the pane shows
218
+ - **The inspector** (`i`) outlines components on hover. A click or a text drag opens a popover in the page with Create annotation, Ask agent to fix, and Proceed now.
219
+ - **Sections:** Queue, Sent and fixed (with the agent's summary), and Saved.
220
+ - **Other keys:** `s` sends the queue as one run of this session, confirming notes that came from a page-world script first; `x` takes a note out of the queue; `t` picks a window.
221
+ - **Routes:** `terminal.annotations.target|attach|windows|selectWindow|inspect|stopInspect|next|queue|dequeue|confirm|send` act only on this terminal's session and need the control key.
222
+
223
+ ## Checklist (PROP-0006, PAR-001)
224
+
225
+ Terminal sessions register the shared `checklist_write` tool. The extension validates each list
226
+ with the same tool code and sends it as `checklist` telemetry; the controller emits it as
227
+ `checklist.updated` on the active run, so `runs.checklist` and continuation read terminal runs too.
228
+ The gate treats it as read-only, plan mode allows it, and terminal children inherit it. The
229
+ transcript shows each write as a checklist block (`✓` done, `●` in progress (warning yellow), `○` pending) under a
230
+ `Checklist · n of m done` header instead of a tool row; a failed or malformed call stays a tool row.
231
+
232
+ ## Subagent activity monitor
233
+
234
+ During an active parent run, the terminal polls a private read-only monitor once per second. It
235
+ projects the flat set of child and nested-child runs with task, status, elapsed time, the latest
236
+ tool name, the child's agent profile (name and colour, PROP-0029), the title the parent gave it
237
+ (PROP-0030), and counts from the child's own checklist. The child's own `session_name` is not
238
+ projected; it names the child's session, not its row. Tool summaries, other
239
+ arguments, output and checklist item text never enter the monitor. The latest completed tool name
240
+ remains visible across one-second snapshots until new tool or response activity replaces it. The
241
+ monitor exposes no controls to steer or stop children.
242
+
243
+ The live rows sit under the status line, after one blank row, with no heading. Each row reads, in
244
+ order: the status mark (`○` queued, a running row that shows the working spinner's frame in the profile's colour (warning for a copy of the parent), `●` waiting in the accent,
245
+ `✓` done, `✕` failed, `!` stopped), the profile name in its colour (`subagent`, muted, for a copy
246
+ of the parent), the title the parent gave the child (PROP-0030), and `n of m tasks` when the child
247
+ keeps a checklist. Active rows come first, at most three, then `+N more · /subagents`; a narrow
248
+ terminal cuts the title first. `/subagents` opens the searchable full roster with the same fields.
249
+ Finished rows remain until the parent run settles. The projection is volatile and scoped to that
250
+ parent run; it is not a persisted event or public server method.
251
+
252
+ ## Agent profiles (PROP-0029)
253
+
254
+ `/agents` opens the Agents page over `terminal.agents.list|create|remove`, which call the same
255
+ `agents/profiles.ts` functions as `agents.*`. It lists built-in, global, project and variant
256
+ profiles, and files that cannot be read. The detail pane shows the colour, description, tools,
257
+ plugins, variant, model, effort, file and instructions. Enter on a row offers: for a person's own
258
+ profile, edit (opens the file in `$VISUAL`/`$EDITOR` with the renderer suspended), copy and delete
259
+ (confirmed); for a built-in or variant profile, copy. New profile asks for a name and a place
260
+ (project or global), writes the template and opens it. The terminal passes its pinned variant to
261
+ `Subagents.register`, so the variant's c5 names are profiles there too.
@@ -0,0 +1,75 @@
1
+ # 12 Storage
2
+
3
+ ## Purpose
4
+
5
+ The harness keeps two folders. The **data root** holds knowledge and history that may be shared
6
+ or synced: variants, refinements, the library, the Wiki, runs. The **state directory** holds
7
+ device-local state that must never travel with the data: accounts, secrets, approvals, trust,
8
+ connections, sockets. Files are the source of truth everywhere; the only database is a derived
9
+ index.
10
+
11
+ ## Layout
12
+
13
+ ```text
14
+ <data root>/
15
+ variants/<scope>/ versions/<fingerprint>/{variant/, version.json}, head.json, lineage.jsonl, restores.jsonl (03)
16
+ refine/<id>/ summary.json, task.json, variants/, rollouts/, sessions/, context/, selection/, reflection/, improver/, or matrix.json + suite.json for evaluation matrices (05)
17
+ rollouts/<label>/workspace/ only when started with retainWorkspaces
18
+ library/<scope>/<area>/ INDEX.md, variants/<task>/{variant/, EXPERIENCE.md} (05)
19
+ annotations/<id>.json page notes (13, PROP-0017)
20
+ wiki/ home.md, library/ (library/lessons/ from the lessons plugin), projects/<slug>/ (08)
21
+ reflection/improver/lesson-<run id>/ a reflection's native history and reply (08)
22
+ wiki-history/ earlier versions of notes (08)
23
+ legacy/ an earlier Wiki's data, moved once (08)
24
+ registry/ skills/, prompts/, rules/: the component library (03)
25
+ plugins/<name>/ packages kept with the data (06)
26
+ trash/plugins/ removed packages (06)
27
+ hub/ installed documents and provenance (09)
28
+ runs/<id>/ run.json, events.jsonl, owner.json, subagents.json, context.json, caller.json, capabilities.json, mcp-context.json (02)
29
+ config/ plugin-attachments.json and settings the harness reads (06)
30
+ agents/<name>.md a person's global agent profiles; agents/profiles.ts owns it (02, PROP-0029)
31
+ index.sqlite derived index (FTS5) (08)
32
+ projects.json read only: the application owns it
33
+
34
+ <state dir>/
35
+ accounts/ registry, per-account Pi agent folders, _shared/pi/, audit log (09)
36
+ secrets.json default SecretStore, owner-only (09)
37
+ approvals.json standing approvals (07)
38
+ plugin-trust.json, variant-plugin-trust.json, plugin-registered.json, plugin-hooks.json (03, 06)
39
+ connections.json connected apps, no secrets (09)
40
+ hub/catalog.json catalog cache (09)
41
+ run/ terminal commands, and one session socket per Harness process,
42
+ harness-<pid>-<random>.sock; files of ended processes are pruned (11)
43
+ worktrees.json managed worktree registry (02, PROP-0016)
44
+ worktrees/<repo>/<name>/ managed worktree checkouts; worktrees/logs/ setup output (PROP-0016)
45
+ worktree-setup-trust.json trusted setup-script hashes, owner-only (PROP-0016)
46
+ browser/ isolated browser settings and profiles (13)
47
+ notes-bridge.json the page bridge's port and token, kept so an app's script tag stays valid (13, PROP-0018)
48
+ harness.log standalone terminal diagnostics
49
+ ```
50
+
51
+ Side-question runs use the ordinary `runs/<id>/` records. Their temporary Pi native history is
52
+ created under the operating system temporary directory and removed when the run ends; it is not
53
+ retained in the data root or state directory.
54
+
55
+ ## Invariants
56
+
57
+ - **INV-STO-1** Device-local state (credentials, approvals, trust, connections, sockets) is never
58
+ written to the data root, and knowledge or history is never written to the state directory.
59
+ - **INV-STO-2** Files are the source of truth. `index.sqlite` can be deleted and rebuilt
60
+ (`INV-MEM-5`); its migrations are append-only (`INV-MEM-6`).
61
+ - **INV-STO-3** Each folder has one owning module, named on its page. Another module reads it
62
+ through that module's functions. A new top-level folder or a new file in `runs/<id>/` is an
63
+ architecture change.
64
+ - **INV-STO-4** `projects.json` belongs to the application; the harness only reads it.
65
+ Project agent profiles live in the repository at `<project>/.xingular/agents/<name>.md`; the
66
+ harness writes them only through `agents.create` and `agents.remove` (PROP-0029).
67
+ - **INV-STO-5** Migrations of stored data are one-way and safe: the old data is backed up or left
68
+ as it was when a migration fails, and the failure is reported in `Recovery.migrationError`.
69
+ - **INV-STO-6** Writes of shared JSON files are atomic (`core/fs.ts::atomicWrite`, `writeJson`).
70
+ - **INV-STO-7** Files holding trust or secrets are owner-only (`0600`).
71
+
72
+ ## Source map
73
+
74
+ `src/harness.ts` (`open`), `src/core/fs.ts`, `src/core/index.ts`, and the store module of each
75
+ part, listed on its page.