@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
package/docs/README.md CHANGED
@@ -1,10 +1,52 @@
1
1
  # Harness documentation
2
2
 
3
+ **Binding specification:** [Architecture](architecture/README.md). Code must follow it; a change
4
+ to it starts as a [proposal](architecture/proposals/README.md) the user reviews.
5
+
6
+ **Feature guide:** [Harness features](features/README.md) organizes current capabilities by area;
7
+ its pages are descriptive, while the architecture specification remains binding.
8
+
3
9
  Current implementation: [Harness terminal frontend](terminal-tui.md). The package-level
4
10
  [README](../README.md) describes the embedding API, accounts, plugins, memory and storage.
5
11
 
12
+ **Parity:** [Capability parity register](parity.md) lists every capability, its terminal surface
13
+ and its host surface ([14 Surfaces and parity](architecture/14-surfaces-and-parity.md) is binding).
14
+
15
+ **Future work:** [Feature backlog](future-work.md) records planned concepts. Backlog entries do not
16
+ change the binding architecture or describe implemented capabilities.
17
+
6
18
  | ID | Record | Type | Status | Related |
7
19
  |---|---|---|---|---|
20
+ | PROP-0026 | [Connect structural sketch lines in the terminal display](architecture/proposals/PROP-0026-connected-sketch-display.md) | Proposal | Implemented; working tree and isolated fixtures verified | [ADR-0027](decisions/ADR-0027-connected-sketch-display.md), [11 Terminal](architecture/11-terminal.md), [parity register](parity.md) |
21
+ | ADR-0027 | [Project structural ASCII sketch lines into connected terminal borders](decisions/ADR-0027-connected-sketch-display.md) | Decision | Accepted; working tree and isolated fixtures verified | [PROP-0026](architecture/proposals/PROP-0026-connected-sketch-display.md), [14 Surfaces and parity](architecture/14-surfaces-and-parity.md) |
22
+ | FW-0001 | [Agent Modes, starting with Router Agent Mode](future-work.md#fw-0001-agent-modes-starting-with-router-agent-mode) | Future work | Candidate; requires architecture proposal before implementation | [Architecture glossary](architecture/README.md#glossary), [Feature guide](features/README.md#planned-agent-modes) |
23
+ | PROP-0025 | [Strict question columns and contextual ASCII wireframes](architecture/proposals/PROP-0025-contextual-question-wireframes.md) | Proposal | Implemented; working tree and isolated fixtures verified | [ADR-0026](decisions/ADR-0026-contextual-question-wireframes.md), [11 Terminal](architecture/11-terminal.md), [parity register](parity.md) |
24
+ | ADR-0026 | [Align question columns and preserve contextual ASCII wireframes](decisions/ADR-0026-contextual-question-wireframes.md) | Decision | Accepted; working tree and isolated fixtures verified | [PROP-0025](architecture/proposals/PROP-0025-contextual-question-wireframes.md), [02 Sessions and runs](architecture/02-sessions-and-runs.md), [11 Terminal](architecture/11-terminal.md) |
25
+ | ADR-0025 | [Store bounded ASCII sketches with question requests](decisions/ADR-0025-question-choice-sketches.md) | Decision | Accepted; working tree implementation verified | [PROP-0024](architecture/proposals/PROP-0024-question-sketch-previews.md) |
26
+ | ADR-0024 | [Publish the Harness CLI as xagent](decisions/ADR-0024-xagent-command.md) | Decision | Accepted; implemented in the 4.0.0 candidate | [PROP-0023](architecture/proposals/PROP-0023-xagent-cli-name.md) |
27
+ | ADR-0020 | [Page annotations and delivery are Harness-owned](decisions/ADR-0020-page-annotations.md) | Decision | Accepted; 4.0.0 candidate | [PROP-0017](architecture/proposals/PROP-0017-page-annotations.md), [PROP-0018](architecture/proposals/PROP-0018-annotation-queue-and-app-targets.md), [parity register](parity.md) |
28
+ | ADR-0019 | [Managed Git worktrees are a Harness capability](decisions/ADR-0019-managed-git-worktrees.md) | Decision | Accepted; 4.0.0 candidate | [PROP-0016](architecture/proposals/PROP-0016-managed-worktrees.md), [parity register](parity.md) |
29
+ | ADR-0018 | [Built-in feature modules and namespaced commands](decisions/ADR-0018-builtin-feature-plugins.md) | Decision | Accepted; 4.0.0 candidate | [PROP-0020](architecture/proposals/PROP-0020-builtin-feature-plugins.md) |
30
+ | ADR-0017 | [One capability surface for the terminal and every host](decisions/ADR-0017-one-capability-surface.md) | Decision | Accepted; implementation in 4.0.0 candidate, App parity gaps tracked | [PROP-0015](architecture/proposals/PROP-0015-one-capability-surface.md), [PROP-0016](architecture/proposals/PROP-0016-managed-worktrees.md), [PROP-0017](architecture/proposals/PROP-0017-page-annotations.md), [parity register](parity.md) |
31
+ | ADR-0016 | [Full-screen browser tabs](decisions/ADR-0016-fullscreen-browser-tabs.md) | Decision | Accepted; working tree verified | [PROP-0014](architecture/proposals/PROP-0014-fullscreen-browser-tabs.md) |
32
+ | ADR-0015 | [Unified resource browser](decisions/ADR-0015-resource-browser.md) | Decision | Accepted; working tree verified | [PROP-0013](architecture/proposals/PROP-0013-resource-browser.md), [source study](study/tui-resource-browser.md) |
33
+ | ADR-0014 | [Public release baseline](decisions/ADR-0014-public-release-baseline.md) | Decision | Accepted; 1.0.0 published; 4.0.0 candidate in preparation | [Release procedure](releases/README.md), [PROP-0012](architecture/proposals/PROP-0012-release-baseline.md) |
34
+ | ADR-0013 | [Evidence-based diagnostics with opt-in live probes](decisions/ADR-0013-doctor.md) | Decision | Accepted; working tree implementation | [PROP-0011](architecture/proposals/PROP-0011-doctor.md), [Doctor guide](doctor.md) |
35
+ | SPEC | [Harness architecture specification](architecture/README.md) | Specification | Binding; as of 2026-10-21 | [Proposals](architecture/proposals/README.md), [Known drift](architecture/README.md#known-drift) |
36
+ | STUDY-0002 | [Proactive autonomy: a harness with its own readable agenda](study/proactive-autonomy.md) | Study | Research and three feature hypotheses; not implemented | [Proactive-system sources](study/autonomy-sources.md), [engineering sources](study/autonomous-engineering-sources.md), [known drift D-11](architecture/README.md#known-drift) |
37
+ | STUDY-0001 | [Agent-harness arm study](study/00-index.md) | Study | Arms 01–10 audited (core sources); matrix + roadmap done; remaining-source fills pending | [insights.md](study/insights.md), [roadmap.md](study/roadmap.md), [`/btw` comparison](study/btw-comparison.md) |
38
+ | DESIGN-0001 | [System-prompt design: fixed foundation + adapting harness](system-prompt-design.md) | Design | Draft — not yet accepted; refs current `compile.ts`/tree contracts | STUDY-0001 (arms 01, 10), [roadmap.md](study/roadmap.md) T1-1/9 |
39
+ | EXP-0001 | [Terminal input latency profile](experiments/EXP-0001-terminal-input-latency/plan.md) | Experiment | Completed on one local machine; slow-machine validation pending | ADR-0001, [Profile instructions](terminal-tui.md#input-performance-profile) |
40
+ | ADR-0012 | [Agents name their own native Pi sessions](decisions/ADR-0012-native-session-names.md) | Decision | Accepted; working tree implementation verified | [PROP-0010](architecture/proposals/PROP-0010-session-names.md) |
41
+ | ADR-0011 | [The harness is a fixed foundation running a mutating variant](decisions/ADR-0011-foundation-and-variants.md) | Decision | Accepted; implemented in 5.0.0 | [PROP-0009](architecture/proposals/PROP-0009-foundation-and-variants.md), [Foundation and variants](architecture/00-overview.md#foundation-and-variants) |
42
+ | ADR-0010 | [Lessons from ordinary runs live in the Wiki](decisions/ADR-0010-lessons-in-the-wiki.md) | Decision | Accepted; working tree implementation | [PROP-0008](architecture/proposals/PROP-0008-lessons-from-runs.md), [08 Memory and history](architecture/08-memory-and-history.md), [feature-gap review](study/feature-gap-review.md) |
43
+ | ADR-0009 | [Publish the Harness CLI as xharness](decisions/ADR-0009-xharness-command.md) | Decision | Superseded by ADR-0024 | [PROP-0005](architecture/proposals/PROP-0005-xharness-cli-name.md), [11 Terminal](architecture/11-terminal.md) |
44
+ | ADR-0007 | [A fixed Reporting section shapes the final reply](decisions/ADR-0007-reporting-section.md) | Decision | Accepted; working tree implementation | [PROP-0001](architecture/proposals/PROP-0001-reporting-section.md), [04 Prompt](architecture/04-prompt.md) |
45
+ | EXP-0002 | [OpenTUI typing latency against Pi and opencode](experiments/EXP-0002-opentui-typing-latency/plan.md) | Experiment | Completed on one local machine (Apple M2) | ADR-0006, EXP-0001, [Profile instructions](terminal-tui.md#input-performance-profile) |
46
+ | ADR-0006 | [OpenTUI is the only terminal frontend](decisions/ADR-0006-opentui-only-terminal.md) | Decision | Accepted; working tree implementation | ADR-0001, [Terminal architecture and evidence](terminal-tui.md) |
47
+ | ADR-0004 | [Fullscreen terminal layout with a fixed dock](decisions/ADR-0004-fullscreen-terminal-layout.md) | Decision | Superseded by ADR-0006 | ADR-0001, [Terminal architecture and evidence](terminal-tui.md) |
48
+ | ADR-0003 | [Shared asynchronous subagents with native-history delivery receipts](decisions/ADR-0003-shared-asynchronous-subagents.md) | Decision | Accepted; working tree implementation | ADR-0002, [Embedding API](../README.md) |
49
+ | ADR-0002 | [Native subagent lifecycle in Harness sessions](decisions/ADR-0002-native-subagent-lifecycle.md) | Decision | Superseded by ADR-0003 | [Embedding API](../README.md) |
8
50
  | ADR-0001 | [Own the terminal frontend and keep Pi as the session runtime](decisions/ADR-0001-owned-terminal.md) | Decision | Accepted; working tree implementation | [Terminal architecture and evidence](terminal-tui.md) |
9
51
 
10
52
  Living reference pages describe checked source behavior. Accepted decisions record the choice;
@@ -0,0 +1,171 @@
1
+ # 00 Overview
2
+
3
+ ## Purpose
4
+
5
+ `@xingular/harness` runs one agent run well, on Pi, for any application that embeds it. It owns
6
+ what a model is told (the variant and the compiled prompt), what it can do (tools, the gate,
7
+ connected apps), what it remembers (Wiki notes, run history), how a run is recorded, and how a variant
8
+ of the harness is improved from evidence (refinement). It knows a *caller*, a *session* and a
9
+ *run*. It does not know what an application is or what its objects mean.
10
+
11
+ ## Layers
12
+
13
+ ```text
14
+ Host (for example the App repo) presentation, windows, PTY, keychain, native OS bridges, host-only surfaces
15
+ │ seven extension points (01) and the server protocol (10)
16
+ Harness (this package) every capability: variants, prompt, sessions, runs, gate, Wiki, history,
17
+ plugins, MCP, refinement, world tools, worktrees, annotations,
18
+ and the reference terminal frontend
19
+ │ Pi SDK: createAgentSession, ModelRuntime, SessionManager, DefaultResourceLoader
20
+ Pi model calls, native JSONL history, tool execution, extensions
21
+ ```
22
+
23
+ - **Pi** supplies the model runtime, native history, tool execution and the extension API.
24
+ - **The harness** decides everything Pi is given: the account folder, the prompt, the tools, the
25
+ extensions, skills and prompts it may load, and the gate in front of each tool call. It records
26
+ every run. It owns every capability a person uses, and its standalone terminal surfaces each one
27
+ (page 14, `INV-PAR-1`).
28
+ - **A host** presents the same capabilities with its own UI, supplies what only it knows through
29
+ the extension points, and reads what the harness records. The terminal and a host offer the same
30
+ capabilities; a host may add registered host-only surfaces (`INV-PAR-4`).
31
+
32
+ **Belongs in the harness:** Pi sessions and accounts, variants and refinement
33
+ (Propose–Probe–Compose, selection, the experience library), the prompt compiler and its delivery,
34
+ project notes (the Wiki), recall, the tool gate and standing approvals, connectors (MCP), terminal
35
+ sessions and their owned standalone frontend, generic web/isolated-browser tools, managed git
36
+ worktrees (PROP-0016), page annotations (PROP-0017), and the server protocol.
37
+
38
+ **Stays in the host:** windows, the PTY, the keychain, native operating-system bridges (a WebKit
39
+ tab, computer control) behind Harness contracts (`INV-PAR-3`), presentation, and registered
40
+ host-only surfaces (`INV-PAR-4`). Orchestration across agents (organizations, routed chats, group
41
+ chats, delegated work queues) is not a Harness capability; a host that wants it must first bring it
42
+ here through a proposal, with a terminal surface.
43
+
44
+ This package is consumed as source by the App's sidecar and is meant to be embedded by other
45
+ applications, so a change here changes every application built on it.
46
+
47
+ The application side of the boundary is described in
48
+ [`App/docs/architecture/overview.md`](../../../App/docs/architecture/overview.md).
49
+
50
+ ## Foundation and variants
51
+
52
+ The harness has two halves, and every page uses these two words for them.
53
+
54
+ - The **foundation** is the part that is fixed. Code and release change it; nothing running
55
+ through it can. It is the Pi hookup, the prompt compiler and its budgets, sessions, runs and the
56
+ run recorder, the tool gate and standing approvals, accounts and their isolation, plugin-code
57
+ trust, the variant surface with its validator and always-on cap, the refinement method (its
58
+ budget identity and answer-free rule), the seven extension points and the server protocol.
59
+ - A **variant** is the part that mutates: one tree of eight components (c1–c8) for one scope,
60
+ stored as immutable, validated versions (page 03). A scope's *head* is the variant it runs now;
61
+ a *version* is a recorded variant; a *candidate* is a variant refinement proposed.
62
+
63
+ "The harness" means the foundation together with the variant it is running.
64
+
65
+ ```text
66
+ foundation ──runs──► variant (pinned head) ──► run record, events, trajectories
67
+ ▲ │
68
+ │ person adopts ▼
69
+ └────────── candidate variants ◄── refinement (improvers edit a copy)
70
+ ```
71
+
72
+ 1. The foundation runs a session on a pinned variant and records everything the run did.
73
+ 2. Refinement reads those records, lets improver sessions edit a *copy* of the variant, probes
74
+ each candidate and picks one final output without seeing a score (page 05).
75
+ 3. A person adopts a candidate. Only then does it become the head, and only with its plugin code
76
+ trusted. The next run pins the new head.
77
+
78
+ The rule between the halves is one-way. A variant decides what the agent is told and which
79
+ skills, scripts, subagents and plugins it may load. It cannot alter the compiler, the gate, the
80
+ recorder, accounts or trust: variant plugins run inside the tool loop, but the gate is always the
81
+ last extension loaded (`INV-GATE-2`). Refinement never edits the foundation (`INV-FND-1`) and has
82
+ one door into a variant (`INV-FND-2`).
83
+
84
+ When a rule is unclear, ask which half the thing belongs to. If an agent or an improver could
85
+ legitimately change it, it is a variant concern. If changing it would need a release, it is the
86
+ foundation. Page 04 and DESIGN-0001 draw the same line inside the prompt: foundation text is
87
+ contract prose about mechanics, variant text is work guidance.
88
+
89
+ The improver prompts in `refine/prompts.ts` and the evidence folder's `harness/` names keep the
90
+ Harness² paper's own vocabulary, where "the harness" is what the improver edits. They are method
91
+ text, and changing them would change the method (`INV-REF-3`).
92
+
93
+ ## Components
94
+
95
+ `Harness` (`src/harness.ts`) is the composition root. `createHarness(options)` builds one and
96
+ opens the data root.
97
+
98
+ | Member | Type | Module | Page |
99
+ |---|---|---|---|
100
+ | `env` | `HarnessEnv` (`root`, `directory`, `productName`) | `core/env.ts` | 01 |
101
+ | `accounts` | `Accounts` | `accounts/` | 09 |
102
+ | `sessions` | `Sessions` | `sessions/sessions.ts` | 02 |
103
+ | `runs` | `RunRegistry` | `sessions/registry.ts` | 02 |
104
+ | `subagents` | `Subagents` | `sessions/subagentService.ts` | 02 |
105
+ | `approvals` | `Approvals` | `sessions/approvals.ts` | 07 |
106
+ | `trust` | `VariantTrust` | `variant/trust.ts` | 03 |
107
+ | `refine` | `Refinements` | `refine/service.ts` | 05 |
108
+ | `plugins` | `Plugins` | `plugins/plugins.ts` | 06 |
109
+ | `hooks` | `Hooks` | `plugins/hooks.ts` | 06 |
110
+ | `apps` | `ConnectedApps` | `mcp/service.ts` | 09 |
111
+ | `hub` | `Hub` | `hub/hub.ts` | 09 |
112
+ | `terminals` | `Terminals` | `terminal/terminals.ts` | 11 |
113
+ | `worktrees` | `Worktrees` | `worktrees/service.ts` | 02, 14 |
114
+ | `bus` | `Bus` (state-changed notices) | `core/bus.ts` | 10 |
115
+
116
+ Modules with no member of their own: `variant/` (functions over the variant store), `prompt/compile.ts`,
117
+ `wiki/notes.ts`, `history/`, `tools/`, `capabilities/`, `server/`.
118
+
119
+ ### Lifecycle
120
+
121
+ 1. **Construct.** `isolateProcess` removes inherited credentials and points Pi's fallback folder
122
+ away from `~/.pi` before anything else. Stores and services are created.
123
+ 2. **Open a data root** (`open(dataRoot)`). Lays out folders, moves an earlier Wiki aside once,
124
+ migrates connection scopes, marks runs that never settled as interrupted (unless another live
125
+ process owns them), and syncs the recall index. Returns a `Recovery`, which lists the
126
+ interrupted runs; the application may continue one as a new run (`continueFrom`, page 02).
127
+ 3. **Serve.** Sessions, refinements, terminals and RPC calls run. Every run event is persisted,
128
+ then relayed to listeners; finished runs are indexed for recall and announced to hooks.
129
+ 4. **Close** (`close()`). Stops the hub, refinements, terminals and live runs, settles hooks,
130
+ closes connected apps and the index.
131
+
132
+ ## ETCLOVG: the harness's share
133
+
134
+ | Letter | The harness owns |
135
+ |---|---|
136
+ | **E** Execution | Isolated account folders, the Pi session, the terminal launch spec |
137
+ | **T** Tools | History, trajectory, Wiki notes, skill loading, `ask_user`, the run checklist, the connected-apps broker, the tool gate |
138
+ | **C** Context | The compiler, stable prefix and updates, the versioned variant (c1–c8), skills, on-demand Wiki notes |
139
+ | **L** Lifecycle | Run state, interrupt, recovery, approvals and questions, subagents, refinement |
140
+ | **O** Observability | Validated run events saved per run; usage counters |
141
+ | **V** Verification | Isolated refinement probes and answer-free selection |
142
+ | **G** Governance | The per-call gate, standing approvals, account pinning, redaction |
143
+
144
+ The host's column (PTY, windows, native bridges, presentation) is in the parent `AGENTS.md` and
145
+ the App's architecture pages. Page 14 states how the terminal and a host share capabilities.
146
+
147
+ ## Invariants
148
+
149
+ - **INV-BND-1** The harness imports nothing from an application. Application data reaches it only
150
+ through the extension points (page 01) or the server protocol (page 10).
151
+ - **INV-BND-2** The harness names no application or application concept (agent role, group, task,
152
+ pane, handoff, App browser workspace, computer use) in code paths it reads or text a model or
153
+ person sees, except for its canonical product name `Xingular Agent`. Text names the product through
154
+ `env.productName` (default `Xingular Agent`; `{product}` in a tool description); an embedding host
155
+ may supply another product name. Ids such as `agentId`, `projectId` and a variant `scope` are opaque;
156
+ names come from `Directory` or `CallerContext.agentName`. A managed git worktree is a Harness
157
+ object since PROP-0016.
158
+ - **INV-BND-3** A new need of one application is met by a generic extension point or option,
159
+ never by a branch on an application's name or concept.
160
+ - **INV-BND-4** Variants, the prompt compiler and Wiki notes are synchronous (`variant/`, `prompt/`,
161
+ `wiki/`). A synchronous function is the critical section; do not make them async. Accounts, Pi,
162
+ MCP and refinement are async.
163
+ - **INV-BND-5** The process never launches against `~/.pi`, `~/.codex` or `~/.claude`, and never
164
+ inherits a credential variable (`isolateProcess`, page 09).
165
+ - **INV-BND-6** Tests never make a model request; they use a fake `SessionFactory`.
166
+
167
+ ## Source map
168
+
169
+ `src/harness.ts`, `src/index.ts` (public exports), `src/core/` (env, caller, bus, errors, fs,
170
+ text, index), `src/cli.ts` (command line). Boundary decisions: [PROP-0015](proposals/PROP-0015-one-capability-surface.md),
171
+ [ADR-0017](../decisions/ADR-0017-one-capability-surface.md).
@@ -0,0 +1,78 @@
1
+ # 01 Extension points
2
+
3
+ ## Purpose
4
+
5
+ An application adds what it knows to the harness through exactly seven surfaces. They are the
6
+ whole interface in the application-to-harness direction; anything else an application needs is
7
+ added as a new generic surface, by proposal.
8
+
9
+ ## Components
10
+
11
+ Each surface is an option of `createHarness` (`HarnessOptions`) or a per-run input, and has a
12
+ server-protocol equivalent for a host that is not a Node program (page 10).
13
+
14
+ | # | Surface | Declared in | How it is supplied | Over the protocol |
15
+ |---|---|---|---|---|
16
+ | 1 | Prompt sections | `Launch` in `prompt/compile.ts` (`sections: HostSection[]`, `toolGroups: HostToolGroup[]`, `references: Reference[]`) | `SessionRunInput.launch` per run | `sessions.run` params |
17
+ | 2 | Tool providers | `ToolProvider`, `ToolSpec`, `ToolSession` in `tools/types.ts` | `harness.sessions.provide(provider)` | `tools.register` + host call `tools.call` (`--host-tools`) |
18
+ | 3 | `ToolPolicy` | `sessions/policy.ts` (`scope`, `authorize`, `approval`, `connections`) | `HarnessOptions.policy` | host calls `policy.*` (`--host-policy`) |
19
+ | 4 | `SecretStore` | `accounts/secrets.ts` (`get`, `set`, `delete`) | `HarnessOptions.secrets` (default: owner-only file in the state dir) | host calls `secrets.*` (`--host-secrets`) |
20
+ | 5 | `Directory` | `core/env.ts` (`agentName`, `sessionAgent`) | `HarnessOptions.directory` | `directory.set` (`--host-directory`) |
21
+ | 6 | Plugin descriptions | `PluginDescriptor` in `plugins/types.ts` | `HarnessOptions.plugins`, `harness.describe()` | `plugins.describe` |
22
+ | 7 | `RefineHost` | `refine/host.ts` (`prepareWorkspace`, `session`, `deliverable?`) | `HarnessOptions.refineHost` (default: temp copy of the source, Pi file and shell tools) | — (Node only today) |
23
+
24
+ The caller is not an extension point but the frame every call carries: `CallerContext`
25
+ (`core/caller.ts`) holds opaque `agentId`, `projectId`, `sessionId`, `runId`, `agentName`,
26
+ `actor` (`Chat` or `Code`), `surface`, `recallExcludeAgents` and an opaque `policyContext` that the
27
+ harness forwards to the policy and never reads.
28
+
29
+ ## Contracts
30
+
31
+ 1. **Prompt sections.** A `HostSection` has `id`, `title`, `body` (`null` declares a withdrawn
32
+ slot), `budget`, `order`, optional `dynamic` and `pinned`. The harness places it among its own
33
+ sections by `order` (page 04).
34
+ 2. **Tool providers.** Providers are asked in the order they were added, for each session. Only
35
+ names in the run's frozen capability set are registered. A `ToolResult` may carry
36
+ `attachments` as `{ id, name, mimeType }` references; bytes stay with the provider.
37
+ 3. **`ToolPolicy`.** `scope(call)` → `ScopeDecision { allowed, requiresApproval?, automatic?,
38
+ humanOnly?, allowGlobalApproval?, reason? }`; `authorize(call)` throws to block and is asked
39
+ again after an approval; `approval(...)` returns `ApprovalFacts { unattended?, readOnly?,
40
+ inScope? }`; `connections(...)` narrows the connected apps. With no policy, every enabled tool
41
+ may run and gated tools ask the person.
42
+ 4. **`SecretStore`.** Keys are `<account id>/<name>` (`secretKey`).
43
+ 5. **`Directory`.** Every lookup may answer `null`.
44
+ 6. **Plugin descriptions** are data. They change what `plugins.list` and `plugins.inventory`
45
+ report, never what runs. A descriptor with a harness plugin's id is ignored.
46
+ 7. **`RefineHost`.** `prepareWorkspace` returns an isolated folder (never one a person works in)
47
+ and an optional `cleanup`; `session` returns a `RolloutSession` (caller, tools, launch, model,
48
+ account); `deliverable` maps file names to readable text.
49
+
50
+ ## Invariants
51
+
52
+ - **INV-EXT-1** There are seven extension points. Adding, removing or changing the shape of one is
53
+ an architecture change (proposal required).
54
+ - **INV-EXT-2** Every extension point is optional. The harness runs with none of them supplied.
55
+ - **INV-EXT-3** An extension point carries data or decisions the application owns. It never
56
+ carries an application's name or a branch for one application (`INV-BND-3`).
57
+ - **INV-EXT-4** Each Node extension point has a protocol equivalent, or the page says it is
58
+ Node-only (today only `RefineHost`).
59
+ - **INV-EXT-5** `CallerContext` fields are trusted host context, never model arguments. A tool may
60
+ not let the model set them.
61
+
62
+ ## Data
63
+
64
+ None of its own. Secrets go to the `SecretStore`; everything else is passed per call.
65
+
66
+ ## Source map
67
+
68
+ `src/core/caller.ts`, `src/core/env.ts`, `src/prompt/compile.ts` (`Launch`), `src/tools/types.ts`,
69
+ `src/sessions/policy.ts`, `src/accounts/secrets.ts`, `src/plugins/types.ts`
70
+ (`PluginDescriptor`), `src/refine/host.ts`, `src/server/remote.ts` (protocol equivalents).
71
+
72
+ ## Provider diagnostics
73
+
74
+ Tool providers optionally carry `diagnostics(context)` metadata (PROP-0011). Checks expose local
75
+ readiness callbacks and declared live probes. Existing callable provider functions remain valid.
76
+ This extends surface 2; the number of extension points remains seven. `WorldPart` forwards the
77
+ same callback. Remote `tools.register` accepts diagnostic descriptors; `tools.diagnose` returns
78
+ local readiness data. Optional remote single-tool probe recipes go through the normal gate.
@@ -0,0 +1,203 @@
1
+ # 02 Sessions and runs
2
+
3
+ ## Purpose
4
+
5
+ A *session* is a native Pi conversation. A *run* is one tracked execution interval of a session:
6
+ one turn from a request to an outcome. The harness opens Pi for each run with a pinned account,
7
+ a pinned variant, a frozen capability set, a compiled prompt and a gated tool list, then
8
+ records everything the run does as validated events.
9
+
10
+ ## Components
11
+
12
+ | Type | Module | Role |
13
+ |---|---|---|
14
+ | `Sessions` | `sessions/sessions.ts` | Starts a turn: `run(input: SessionRunInput)`, `provide(provider)`. Builds the gate. |
15
+ | `runTurn`, `piSessionFactory`, `loadResources` | `sessions/runner.ts` | Opens the Pi session, loads resources in a fixed order, streams events, settles the run. |
16
+ | `RunRegistry`, `ActiveRun` | `sessions/registry.ts` | Live runs: `emit`, `requestApproval`, `requestAnswer(s)`, `onInterrupt`, `onSteer`, `finish`; `listen` for observers. |
17
+ | run store functions | `sessions/runStore.ts` | `saveRun`, `updateRun`, `persistEvent`, `appendEvent`, `readEvents`, `markInterruptedRuns`, `runFamily`, `listRuns`. |
18
+ | `RunRecord`, `RunEvent`, schemas | `sessions/contracts.ts` | The one contract every session shares. |
19
+ | `Subagents` | `sessions/subagentService.ts` | `spawn`, `wait`, `results`, delivery receipts, recovery. |
20
+ | `SideQuestions` | `sessions/sideQuestions.ts` | Starts, reads and interrupts independent tool-free runs using bounded context from the main conversation (PROP-0019). |
21
+ | plan mode | `sessions/planMode.ts` | `planSection`, `planRefusal`, `PLAN_READ_ONLY_TOOLS`. |
22
+ | `Approvals` | `sessions/approvals.ts` | Standing approvals (page 07). |
23
+ | history selection | `sessions/history.ts` | `selectHistory`: which native history file a run continues. |
24
+ | `runIndex`, `pricing`, `reasoningSummaries`, `lineageJoin`, `extensionUi` | `sessions/` | Run listing, cost, provider summaries, parent/child joins, extension UI as run events. |
25
+
26
+ ## Runtime flow of `sessions.run`
27
+
28
+ 1. Validate the input (`run.id`, `sessionId`, `text`; an `initialBashCommand` only on a new
29
+ interactive user turn).
30
+ 2. Select the native history (`selectHistory`) and resolve the account (`accounts.resolve`).
31
+ 3. Resolve the caller's capabilities, intersect with any narrower requested set, and **freeze**
32
+ them for the run (`capabilities/runSnapshot.ts::freezeRun`).
33
+ 4. **Pin** the variant once (`variant/materialise.ts::materialise`).
34
+ 5. `saveRun` with status `queued`, the account, `harnessScope` and `harnessVersion`.
35
+ 6. Compile the prompt (`sessionLaunch`, page 04): a stable system prompt and an optional context
36
+ update.
37
+ 7. `runs.start` the live run; build the tool list (broker, harness tools, the plan-eligible
38
+ `ask_user`, subagent tools, provider tools) and the gate.
39
+ 8. Open Pi through the `SessionFactory`, with resources loaded in order: disk extensions chosen by
40
+ the harness, variant extensions, inline extensions, and the gate last.
41
+ 9. Record `nativeSessionId`, register the run with `Subagents`, start `runTurn`, and return
42
+ `{ runId, nativeSessionId }`. The reply streams as run events.
43
+
44
+ A session that cannot open ends its run as `failed` and returns `nativeSessionId: null`.
45
+
46
+ ## Contracts
47
+
48
+ - **Run status:** `queued`, `running`, `waiting_for_approval`, `waiting_for_input`, `interrupted`,
49
+ `completed`, `failed`. The first four are active (`ACTIVE_STATUSES`).
50
+ - **Run events** (`runEventTypeSchema`): `started`, `context.snapshot`, `message.delta`,
51
+ `message.completed`, `message.steered`, `tool.started`, `tool.completed`, `retry.started`,
52
+ `retry.ended`, `compaction.started`, `compaction.ended`, `approval.requested`,
53
+ `approval.resolved`, `question.requested`, `question.answered`, `extension.notice`,
54
+ `reaction.added`, `agent.message`, `checklist.updated`, `artifact.added`, `file.changed`, `usage.updated`,
55
+ `account.status`, `status.changed`, `failed`, `completed`. Each has a payload schema in
56
+ `runEventPayloadSchemas`.
57
+ - **Question sketches** (PROP-0025, ADR-0026; originally PROP-0024, ADR-0025). `question.requested` may include `uiSketch: true`
58
+ and `sketch` text on each choice. If enabled, every choice must have a sketch; otherwise no
59
+ choice may carry one. A sketch is 1–24 LF-separated lines, at most 80 printable ASCII characters
60
+ per line (1,943 bytes maximum), with at least one visible character. Tabs, CR, other controls,
61
+ escape sequences and non-ASCII text are rejected. Whitespace, including interior blank lines and
62
+ trailing spaces, is preserved literally in the persisted request event. Tool guidance requests
63
+ contextual UI wireframes with actual panel/table structure and neighboring elements, consistent
64
+ across alternatives; generation quality is guidance, not a schema guarantee. Old events remain
65
+ valid without a data rewrite; readers with the old bounds must update before accepting larger
66
+ sketches. `question.answered` and `QuestionAnswer` are unchanged.
67
+ - **Checklist** (PROP-0006): `checklist.updated` carries the whole list the model last wrote with
68
+ `checklist_write`, `{ items: { text, status: pending | in_progress | completed }[] }`, at most 50
69
+ items. The latest event replaces every earlier one; `checklistOf(events)` reads it.
70
+ - **`RunRecord`** fields are listed in `sessions/contracts.ts`. `mode`, `harness`, `sessionType`,
71
+ `worktreeId`, `attachmentCount`, `exitCode`, `handoffId` and `trigger` belong to the
72
+ application: stored and returned, and only `mode` and `trigger` are read.
73
+ - **Triggers the harness reads:** `user` (may carry an initial Bash command), `probe` and
74
+ `improver` (refinement, page 05), `reflection` (lessons, page 08). Runs with the last three are
75
+ never asked about: the gate refuses what would need a person, and they receive no question tool.
76
+ Only attended plan runs may newly receive `ask_user`.
77
+ - **Side questions** (PROP-0019). `sideQuestions.start` creates a separate run with trigger and
78
+ relation `side-question`, a fresh native history, the selected account/model/effort, no variant,
79
+ and an empty frozen capability set. It combines the parent's persisted effective prompt and
80
+ public run events with the surface's visible transcript and selected references, after redaction
81
+ and fixed bounds. Hidden reasoning and attachment bytes are omitted. A supplied parent run must
82
+ belong to the supplied parent session. `sideQuestions.read` and `interrupt` require the side run's
83
+ session id. The run is not a subagent or continuation and never changes the parent.
84
+ - **Subagents.** `spawn_subagent` / `wait_subagents` for the model; `subagents.spawn`, `wait`,
85
+ `results` for the host (`sessions.spawnSubagent` is a compatibility alias). Child runs have
86
+ `relation: 'subagent'` and `parentRunId`. Nesting defaults to 1, at most 3 (`subagentDepth`).
87
+ The child's record carries `title`, the short name the parent gave it (PROP-0030).
88
+ - **Agent profiles** (PROP-0029). `agent` names a profile: built-in (`worker`, `explorer`),
89
+ `<data root>/agents/<name>.md`, `<project>/.xingular/agents/<name>.md`, or a c5 definition of
90
+ the parent's variant, later sources winning (`agents/profiles.ts`). A profile narrows the
91
+ child's tools and plugins (`agents/narrow.ts`), may choose its variant, model and effort, and
92
+ frames it with a "Your role" section. The child's record carries `profile`; the spawn result
93
+ carries `agent` and any `unavailableTools`. A run that may spawn lists every profile in its
94
+ `subagents` section.
95
+ - **Plan mode** (`plan: true`). The stable system prompt is unchanged. An attended plan run may
96
+ include `ask_user`, subject to the caller's frozen capabilities; the gate refuses everything
97
+ outside `PLAN_READ_ONLY_TOOLS`, provider tools marked `readOnly`, and calls a provider marks
98
+ `planModeSafe`. The plan instruction arrives as a dynamic section; for UI-related plans it asks
99
+ the model to explore distinct design directions, compare trade-offs and recommend one, using
100
+ contextual `uiSketch` questions when helpful. The reply ends with one `<proposed_plan>` block.
101
+ - **Continuation** (PROP-0007). `continuationOf(root, runId, sessionDir?)` (`runs.continuation`)
102
+ says whether a stopped run can be continued: `resumable`, a `reason` when not (`not_found`,
103
+ `active`, `completed`, `no_history`, `history_missing`), the exact native history to reopen,
104
+ the pinned account, variant version and capability set, the checklist, unanswered approvals and
105
+ questions, the last tool and whether it finished, and subagents that did not finish.
106
+ `SessionRunInput.continueFrom` starts a **new** run from it: it reopens that history, records
107
+ `resumedFromRunId`, pins the same account, variant version and capability set (anything different
108
+ fails with `continuation_mismatch`; a run that cannot be continued fails with
109
+ `continuation_unavailable`). If the earlier snapshot includes `ask_user`, an automatic or
110
+ refinement-triggered continuation fails with `continuation_mismatch` rather than narrowing it.
111
+ Empty text defaults to "Continue from where you stopped.", and the new run adds
112
+ a dynamic `continuation` section (order 26) saying where the earlier run stopped. The next run
113
+ without `continueFrom` withdraws it. `Recovery.interruptedRunIds` lists the runs `open` marked
114
+ interrupted.
115
+ - **Worktrees** (PROP-0016). When `run.worktreeId` names a worktree in the Harness registry
116
+ (`worktrees/`), the run works in that worktree's folder (the given `cwd` is replaced), holds a
117
+ lease on it (holder: the session id, with `git worktree lock`) until the run completes, fails or
118
+ is interrupted, and records the id. An id the registry does not know is stored and returned as
119
+ the caller's own field, as before. A terminal session holds its worktree for its whole life.
120
+ - **Usage** (`usage.updated`). `inputTokens` is uncached input; `cacheReadTokens` and
121
+ `cacheWriteTokens` are separate; `outputTokens` includes `reasoningTokens`. Totals are
122
+ cumulative for the run, not the native session. `contextTokens` is the latest request's size.
123
+ - **Provider reasoning summaries.** For supported Responses API families, when reasoning is
124
+ enabled the runner requests a `detailed` summary and records only the provider's explicit summary
125
+ (bounded to 4,000 characters) in request-level usage. This does not change reasoning effort or
126
+ guarantee a provider will return a summary; raw reasoning is not used as a substitute.
127
+
128
+ ## Invariants
129
+
130
+ - **INV-RUN-1** A run pins one account, one variant version and one capability set when it
131
+ starts. None of them changes during the run. A pinned account that cannot be used fails the
132
+ run; it is never swapped (`INV-ACC-2`). A side-question run is the explicit exception for the
133
+ variant: it pins no variant and uses the fixed Harness instruction plus a redacted main-run
134
+ context projection (PROP-0019).
135
+ - **INV-RUN-2** A run's capability set is written once (`freezeRun`). A resumed or duplicate launch
136
+ with a different set fails with `capabilities_frozen`. A child run's set is the intersection of
137
+ its parent's, its profile's tools and plugins, and what it asked for; it never widens.
138
+ - **INV-RUN-3** Every run event is validated against its schema, redacted, persisted, and only then
139
+ relayed to listeners, in order. An event that arrives after the run settled is kept as evidence
140
+ and never applied or relayed.
141
+ - **INV-RUN-4** A restarted harness never restarts model work. On `open`, runs left active are
142
+ marked `interrupted` unless another live process owns them (`owner.json`). Recovery of a
143
+ subagent needs the same account, caller, working folder and history branch. Continuing is always
144
+ a new run the application asks for with `continueFrom`; it pins the earlier run's account, variant
145
+ version and capability set, and the earlier run's record is never reopened.
146
+ - **INV-RUN-5** Unattended runs (`automatic: true`) load no extension found on disk, read no
147
+ context files, and never ask a person: anything that would need approval is refused. A variant's
148
+ own trusted plugins still load, except for side-question runs, which have no variant or plugin
149
+ code and use an empty capability set (PROP-0019).
150
+ - **INV-RUN-6** Only the harness writes `runs/<id>/`; an application reads it. `run.json`,
151
+ `events.jsonl`, `owner.json` and `subagents.json` are written only through
152
+ `sessions/runStore.ts`. Side files are written by their owning module: `context.json`
153
+ (`prompt/compile.ts`), `caller.json` (`sessions/sessions.ts`), `capabilities.json`
154
+ (`capabilities/runSnapshot.ts`), `mcp-context.json` (`mcp/service.ts`). Adding another writer
155
+ or side file needs a proposal. (See drift D-1.)
156
+ - **INV-RUN-7** Token accounting follows the usage contract above. Changing what a field means is
157
+ an architecture change.
158
+ - **INV-RUN-8** Plan mode keeps the stable system prompt but has mode-specific tools: an attended
159
+ plan may include `ask_user`, subject to the frozen caller capabilities; newly resolved normal,
160
+ automatic, probe, improver and reflection runs omit it. The terminal activates `ask_user` and
161
+ `ask_user_question` only for a plan request, then restores its normal set. Plan refusals happen
162
+ before approvals and no approval can lift them. Provider-cache effects of the tool-list difference
163
+ are not assumed (page 04, `INV-PRM-8`).
164
+ - **INV-RUN-9** Subagent results reach the parent at native turn boundaries, at most once
165
+ automatically (typed receipts in native history). A parent joins outstanding children before it
166
+ completes.
167
+ - **INV-RUN-10** An initial Bash command is allowed only on a new interactive user turn (not
168
+ automatic, plan, resumed, continuing, relation, probe or improver runs), must match the leading `!` command
169
+ in the text, and passes the same gate as model-issued Bash.
170
+ - **INV-RUN-11** A side-question run is independent, tool-free and temporary. It receives only a
171
+ bounded, redacted projection of the main run's effective prompt and public events plus the
172
+ surface's visible transcript and selected references. It excludes hidden reasoning and attachment
173
+ bytes, never reads the main native history, and never changes or steers the parent. Its own run
174
+ record and events use the normal store contract (PROP-0019).
175
+
176
+ ## Data
177
+
178
+ `<data root>/runs/<id>/`: `run.json`, `events.jsonl`, `owner.json`, `subagents.json`,
179
+ `context.json`, `caller.json`, `capabilities.json`, `mcp-context.json`. Native history lives in
180
+ the session directory the caller passes (`sessionDir`), owned by Pi. Side-question native history
181
+ uses a one-use OS temporary directory, removed when the run settles; its tracked run and events
182
+ remain in the ordinary run store.
183
+
184
+ ## Source map
185
+
186
+ `src/sessions/*.ts`, `src/capabilities/runSnapshot.ts`, `src/tools/spawnSubagent.ts`.
187
+ Decisions: [ADR-0002](../decisions/ADR-0002-native-subagent-lifecycle.md) (superseded),
188
+ [ADR-0003](../decisions/ADR-0003-shared-asynchronous-subagents.md),
189
+ [ADR-0022](../decisions/ADR-0022-plan-only-question-tools.md),
190
+ [ADR-0023](../decisions/ADR-0023-contextual-side-question-runs.md),
191
+ [ADR-0026](../decisions/ADR-0026-contextual-question-wireframes.md).
192
+
193
+ ## Native session names (PROP-0010)
194
+
195
+ `session_name({ name: string })` adds or revises the current Pi session's name in embedded
196
+ and terminal execution. The agent names meaningful work early and revises it when the overall
197
+ objective changes, including a manual name. Agent-submitted names are imperative sentences
198
+ of at most six whitespace-separated words; whitespace is normalized, and empty names,
199
+ terminal escapes, non-whitespace controls and longer names fail without writing. Identical
200
+ names are a no-op. Pi's native session-info history is the only storage; continuation and
201
+ reopen preserve it. Each child names only itself. There is no additional model request or
202
+ run-event schema. The normal capability selection and host gate apply; `harnessTools: false`
203
+ omits the tool. Plan mode permits it as session metadata maintenance.
@@ -0,0 +1,103 @@
1
+ # 03 Variants
2
+
3
+ ## Purpose
4
+
5
+ A **variant** is the part of the harness that is allowed to change: everything that shapes an
6
+ agent's behaviour apart from the model, the application's own sections and the foundation
7
+ (page 00). It is eight components (c1–c8, after Harness²). Each caller scope has
8
+ content-addressed, validated, immutable versions of its variant and a head, the variant it runs
9
+ now. A run pins one version. Refinement (page 05) proposes new variants; a person adopts them.
10
+
11
+ What a variant may contain is fixed by the foundation: the surface (`PI_SURFACE`), the validator
12
+ and the always-on cap. A variant can change what the agent is told and which skills, scripts,
13
+ subagents and plugins it may load. It cannot change the prompt compiler, the gate, the run
14
+ recorder, accounts or trust.
15
+
16
+ Earlier documents called this the "harness tree" and its invariants `INV-TREE-n`; those are now
17
+ `INV-VAR-n`.
18
+
19
+ ## Components
20
+
21
+ The surface is `PI_SURFACE` (`variant/surface.ts`), the one surface this harness runs.
22
+
23
+ | c | Component | Path in the variant | Reaches a run | Group |
24
+ |---|---|---|---|---|
25
+ | c1 | System prompt | `systemprompt.md` | always (prompt section `system`, order 25) | context |
26
+ | c2 | Guardrails | `guardrails.md` | always (`guardrails`, 40) | context |
27
+ | c3 | Memory | `memory.md` | always (`memory`, 45) | context |
28
+ | c4 | Tool guidance | `tool_guidance.md` | always (appended to the `tools` section) | tool interface |
29
+ | c5 | Subagents | `sub_agents/<name>/AGENT.md` | own context; instruction-only agent profiles, listed with the other profiles in `subagents` (64, PROP-0029) | orchestration |
30
+ | c6 | Skills | `skills/<name>/SKILL.md` (+ `scripts/`) | on demand, loaded by Pi as skills | context |
31
+ | c7 | Scripts | `scripts/<name>.py` or `.mjs` | on demand, listed in `scripts` (66) | tool interface |
32
+ | c8 | Plugins | `plugins/<name>.ts` | inside the tool loop, as Pi extensions | middleware |
33
+
34
+ | Type / function | Module | Role |
35
+ |---|---|---|
36
+ | `Variant` (path → text), `SurfaceSpec`, `ComponentInfo` | `variant/surface.ts` | The editable surface and its patterns. |
37
+ | `validate`, `readVariant`, `writeVariant`, `diffSummary`, `applyEdit`, `autotrigger` | `variant/variant.ts` | Validation and editing. |
38
+ | `commit`, `seed`, `restore`, `head`, `lineage`, `fingerprint` | `variant/store.ts` | Versions and the head. |
39
+ | `materialise`, `resolve`, `VariantChoice`, `Materialised` | `variant/materialise.ts` | Turns a version into prompt sections, skill paths and extension paths for one run. |
40
+ | `VariantTrust` | `variant/trust.ts` | Which plugin code a person trusted, by hash; which scopes let probes run improver code. |
41
+ | `seedVariant` | `variant/seed.ts` | A first variant for a scope. |
42
+ | component library | `variant/components.ts` | Reusable skills, prompts and rules under `registry/` and built-in folders. |
43
+
44
+ ## Contracts
45
+
46
+ - **`VariantChoice`**: `{ scope, version? }` (a scope's head or one version) or `{ dir, scope? }`
47
+ (a variant on disk, read and never written, such as a refinement candidate).
48
+ - **Version source** (`VersionSource`): `seed`, `edit`, `refinement`, `import`, `restore`.
49
+ - **Fingerprint**: first 16 hex characters of SHA-1 over sorted `path\0text\0` pairs.
50
+ - **Validation** (`validate`) refuses a variant when: always-on text (c1–c4) exceeds 24,000
51
+ characters; a file is off the surface; a skill lacks `description:` or its `name:` differs from
52
+ its folder; a skill is never named in the always-on text; a subagent lacks `description:`; a
53
+ script does not compile; a plugin has no default export; an always-on file or skill invokes a
54
+ script that is not in the variant.
55
+
56
+ ## Invariants
57
+
58
+ - **INV-FND-1** Only a variant mutates. No edit, improver session or adoption changes foundation
59
+ code, the surface, the validator or an invariant; those change by release, with a proposal.
60
+ - **INV-FND-2** A variant changes only by committing a new validated version (`commit` →
61
+ `validate`, `INV-VAR-2`), and a refinement moves a head only when a person adopts
62
+ (`INV-REF-6`). There is no other door.
63
+ - **INV-VAR-1** A variant is the only thing in the harness that shapes an agent's
64
+ instructions. The application adds its own sections through `Launch` (page 01); no other
65
+ harness code adds instruction text.
66
+ - **INV-VAR-2** Every saved version is validated (`commit` → `validate`). An invalid variant is
67
+ refused with every problem listed.
68
+ - **INV-VAR-3** A version is never edited. A change is a new version; `restore` moves the head
69
+ and appends to `restores.jsonl`.
70
+ - **INV-VAR-4** A run resolves its variant once and pins it; a child run or later turn uses the same
71
+ files even if the head moves. A child whose agent profile names another variant resolves and
72
+ pins that one when it starts (PROP-0029).
73
+ - **INV-VAR-5** c8 plugin code loads only when its exact text is trusted (SHA-256 in
74
+ `variant-plugin-trust.json`). A changed file asks again. The one exception: a refinement probe may
75
+ run improver-written code for a scope whose person allowed it (`probeCode`), and adopting that
76
+ variant still requires the code trusted.
77
+ - **INV-VAR-6** The always-on cap exists because every always-on character costs every run.
78
+ Raising it is an architecture change.
79
+ - **INV-VAR-7** Variant code is synchronous (`INV-BND-4`).
80
+
81
+ ## Data
82
+
83
+ ```text
84
+ <data root>/variants/<scope>/
85
+ versions/<fingerprint>/variant/<rel>
86
+ versions/<fingerprint>/version.json
87
+ head.json
88
+ lineage.jsonl
89
+ restores.jsonl
90
+ <state dir>/variant-plugin-trust.json
91
+ <data root>/registry/{skills,prompts,rules}/ (component library)
92
+ ```
93
+
94
+ ## Source map
95
+
96
+ `src/variant/*.ts` (`migrate.ts` renames state written before PROP-0009 on `open`). Method origin: Harness² (`harness2/core/tree.py`, Apache-2.0).
97
+
98
+ ## Terminal inspection
99
+
100
+ The resource browser retains the materialised preparation snapshot and labels it pinned. The
101
+ current scope head is separately labelled latest saved; browsing and comparison never rematerialise
102
+ the head as the running variant. Directory-backed variants remain browse-only. Library additions
103
+ use the existing validated commit door and affect future terminals.