@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/README.md CHANGED
@@ -1,30 +1,63 @@
1
1
  # Xingular Harness
2
2
 
3
- A Pi agent harness, as one TypeScript package (`@xingular/harness`). It is everything a model
4
- needs to work for someone over time, and nothing about any particular application:
5
-
6
- | Part | Folder | What it does |
3
+ A Pi agent harness built on **recursive harnessing** ([Harness²](https://arxiv.org/abs/2610.14224),
4
+ Apache-2.0, Google LLC), as one TypeScript package (`@xingular/harness`). It lets a running host
5
+ improve the harness itself, with model weights fixed. To say that precisely, the harness has two
6
+ halves:
7
+
8
+ - **The foundation is fixed.** Pi sessions, the prompt compiler, the run recorder, the tool gate,
9
+ accounts, plugin-code trust, the refinement method and the extension points. Only a release
10
+ changes it.
11
+ - **A Harness Variant (HV) mutates.** It is what a model is told and can load: eight components
12
+ (c1–c8) for one scope. Each scope has versioned, validated HVs; a run pins one version, and
13
+ refinement proposes a better HV that a person adopts.
14
+
15
+ *The foundation runs a variant, records how it went, and lets refinement propose a better
16
+ variant; only a person adopts one.* Refinement edits a copy of a variant and never the
17
+ foundation. See [Foundation and variants](docs/architecture/00-overview.md#foundation-and-variants).
18
+
19
+ Recursive refinement proposes HV improvements from run evidence. A person adopts candidates;
20
+ model weights and the foundation stay fixed. See the [Google Harness² feature guide](docs/features/google-harness2/README.md)
21
+ for the method and HV components.
22
+
23
+ | Area | Main features | Guide |
7
24
  |---|---|---|
8
- | Accounts | `src/accounts/` | Several isolated Pi accounts and pools, sign-in, model lists, health and limits. A session keeps the account it started with. |
9
- | Sessions | `src/sessions/` | Pi SDK turns, run records and `events.jsonl`, interrupt, approvals, questions, recovery after a crash. |
10
- | Prompt | `src/prompt/` | The system prompt compiled from sections with budgets and profiles; a stable prefix, and changing state delivered as updates in native history. |
11
- | Memory | `src/memory/` | The Wiki: pages, facts, memory blocks, revisions, proposals with an evidence gate, undo, an Inbox, recall over past runs, and sleep-time consolidation. |
12
- | Skills | `src/skills/` | Skills, prompts, and rules: a person's own in the data root, and built-in ones shipped with the harness or the application. |
13
- | Plugins | `src/plugins/` | What a Pi session loads, chosen by the harness and never by Pi's own discovery; trust for a working folder's code; the list of every plugin and what reaches one caller. |
14
- | Tools | `src/tools/` | Tool definitions, the memory tools, `ask_user`; a gate that asks the application's policy, then standing approvals, then the person. |
15
- | Connected apps | `src/mcp/` | MCP connections, OAuth, per-session grants, redaction, a trace of what each call returned. |
16
- | Terminal | `src/terminal/` | A Harness-owned terminal frontend over persistent Pi sessions, isolated accounts, compiled instructions, the tool gate and telemetry bridge, native history, plugin UI, `/plugins`, `/hub`, `/accounts`, and the existing session socket. |
17
- | Server | `src/server/` | The same API over newline-delimited JSON, for a host that is not a Node program. |
18
-
19
- It was split out of Xingular Agent, which is now an application built on it.
20
- The [documentation index](docs/README.md) links current terminal architecture and decisions.
25
+ | Core runtime | Accounts, sessions and runs, prompt compilation, tool governance | [Cores](docs/features/cores/README.md) |
26
+ | Harness² | HVs, recursive refinement, answer-free selection, experience library | [Google Harness²](docs/features/google-harness2/README.md) |
27
+ | Automations | Subagents, recovery, optional run reflections, plugin hooks | [Automations](docs/features/automations/README.md) |
28
+ | Memory | Wiki notes, run recall, trajectory search and reads | [Memory](docs/features/memory/README.md) |
29
+ | Integrations | Application extension points, plugins, connected apps and Hub | [Integrations](docs/features/integrations/README.md) |
30
+ | Interfaces | Node embedding, standalone terminal and JSON-lines server | [Interfaces](docs/features/interfaces/README.md) |
31
+
32
+ The binding design of every part is the [architecture specification](docs/architecture/README.md).
33
+
34
+ Try refinement with no model and no credentials: `npm run build && node dist/cli.js refine demo --k 2`.
35
+ The [feature guide](docs/features/README.md) groups capabilities by area; the [documentation
36
+ index](docs/README.md) links the architecture and other project records.
21
37
 
22
38
  ### Session options for applications
23
39
 
24
- - `subagents: { maxDepth }` offers `spawn_subagent`: the model may start a child run of the same caller (`relation: 'subagent'`). The child has no more tools than the parent and settles before the tool returns.
40
+ - Interactive sessions offer `spawn_subagent` and `wait_subagents` by default. `subagents: null` disables them; `{ maxDepth }` configures native nesting (default one, maximum three), independently of the host caller depth. Unattended sessions remain disabled unless the host explicitly supplies subagent options. A frozen capability set can narrow these tools further.
41
+ - `harness.subagents.spawn({ parentRunId, brief, agent?, tools?, wait? })` opens a fresh child of the same caller with no wider capabilities. `agent` names an agent profile (below). It returns `{ runId, nativeSessionId, agent?, unavailableTools? }` once open; `wait: true` also waits for settlement. `harness.subagents.wait({ parentRunId, runIds? })` joins selected direct children, or the current children when omitted, and returns their outcomes. `results` reads the same bounded outcome records without waiting. RPC exposes `subagents.spawn`, `subagents.wait`, and `subagents.results`; `sessions.spawnSubagent` remains a compatibility alias.
42
+ - **Agent profiles** (PROP-0029) are what a subagent starts from: the built-in `worker` (reads, edits, writes, runs commands) and `explorer` (reads only), a person's own `<data root>/agents/<name>.md`, a repository's `<project>/.xingular/agents/<name>.md`, and the variant's c5 subagents, later ones winning. A profile is Markdown with frontmatter (`description`, `color`, `tools`, `plugins`, `variant`, `model`, `effort`) and its body is the role. It only narrows the parent's tools and plugins. `listProfiles`, `resolveProfile`, `createProfile` and `removeProfile` (RPC `agents.list|get|create|remove`) read and write them, and the child's `RunRecord.profile` names the one it used.
43
+ - The model's `spawn_subagent` returns immediately by default; `wait: true` returns an inline result. `wait_subagents` joins selected children. The SDK and standalone terminal share this execution service. Terminal calls use its private control channel, including when connected apps are disabled.
44
+ - Parents receive results at native turn boundaries and join outstanding children before completing. Typed native-history receipts prevent duplicate automatic delivery; explicit waits can reread results. Ownership is recorded before startup so an explicit resume can recover even a lost spawn return. Startup reservations without a run become interrupted outcomes. A restarted Harness never restarts model work automatically. Recovery requires the same recorded account, caller, working folder, and selected history branch. Session IDs are opaque; consumers follow `parentRunId` and `relation`.
25
45
  - `providers: false` runs a session with the harness's own tools only.
26
- - On the caller, `vaultAccess: 'propose'` writes no memory directly, and `recallExcludeAgents` hides those agents' conversations from recall.
27
- - `maintenanceRunTrigger: false` (a harness option) leaves memory to explicit proposals and scheduled merges.
46
+ - `variant: { scope }` runs the session on that scope's head variant (or `{ scope, version }`, or `{ dir }` for a variant on disk). The version is pinned for the run and recorded on it.
47
+ - On the caller, `recallExcludeAgents` hides those agents' conversations from history and trajectory tools.
48
+ - `harnessTools: false` runs a session without the History, Wiki and skill tools (and without `ask_user` and `checklist_write`).
49
+ - Every session with harness tools gets `checklist_write`: the model sends its whole checklist (`pending`, `in_progress`, `completed`, at most 50 steps) and the run records it as a `checklist.updated` event. `checklistOf(events)` or the `runs.checklist` method reads the latest one. Plan mode allows it.
50
+ - `continueFrom: <run id>` continues a run that stopped before it finished (interrupted or failed) as a new run. `harness.recovery.interruptedRunIds` lists the runs `open` marked interrupted, and `continuationOf(root, runId, sessionDir)` (`runs.continuation`) says whether one can be continued and what it left: checklist, unanswered approvals and questions, the last tool and whether it finished, unfinished subagents. The new run reopens the same native history, records `resumedFromRunId`, keeps the account, variant version and capability set (`continuation_mismatch` otherwise), and the model is told where the earlier run stopped. The harness never continues a run by itself; which runs to continue, and when, is the application's choice.
51
+ - The first-party `lessons` plugin (off by default) reflects on a completed top-level run with enough tool calls and may keep one general lesson in the Wiki under `library/lessons/`, in refinement's cue/lesson shape. It uses the run's own account and model, read-only file tools, and is capped (`minToolCalls`, `maxLessons`, `maxChars`). See PROP-0008.
52
+
53
+ Every session also gets `trajectory_search` and `trajectory_read` from the built-in History plugin.
54
+ Search lists runs in the current data root, including active runs, with filters and a continuation
55
+ cursor. Read returns pages of the canonical execution events, including captured prompt/context,
56
+ tool, decision, retry, compaction, and usage evidence. Active runs show the latest events saved so
57
+ far; settled reads stop at the first outcome. Payloads are bounded and marked when truncated, and
58
+ the tools omit account identifiers, credential fields, attachment bytes, native adapter payloads,
59
+ and provider reasoning text or summaries.
60
+ They report recorded evidence without scoring runs, and do not backfill older records.
28
61
 
29
62
  ## Using it from Node
30
63
 
@@ -32,16 +65,19 @@ The [documentation index](docs/README.md) links current terminal architecture an
32
65
  import { createHarness } from '@xingular/harness'
33
66
 
34
67
  const harness = createHarness({
35
- dataRoot: '/path/to/data', // knowledge and history: wiki/, registry/, runs/, index.sqlite
68
+ dataRoot: '/path/to/data', // variants/, library/, refine/, wiki/, registry/, runs/, index.sqlite
36
69
  stateDir: '/path/to/state', // device-local: accounts, approvals, connections, sockets
37
- productName: 'My App', // how the harness names itself to a model (default 'Xingular Harness')
70
+ productName: 'My App', // how the harness names itself to a model (default 'Xingular Agent')
38
71
  secrets, // SecretStore; defaults to an owner-only file in stateDir
39
72
  policy, // ToolPolicy: what a run may do, and what needs a person
40
73
  directory, // names for the ids the application uses
41
74
  builtins: ['/path/to/builtin'], // folders of built-in skills, prompts, and rules
42
- plugins: [myPlugin] // the application's own parts, described as plugins
75
+ plugins: [myPlugin], // the application's own parts, described as plugins
76
+ refineHost // where refinement executions work, as whom, with which tools
43
77
  })
44
78
 
79
+ harness.refine.start({ task: { id, scope: 'agent-1', prompt }, k: 1, mode: 'parallel' })
80
+
45
81
  harness.sessions.provide((session) => myTools(session)) // the application's own tools
46
82
  harness.runs.listen((event, run) => show(event)) // every run event, after it is saved
47
83
 
@@ -49,6 +85,7 @@ await harness.sessions.run({
49
85
  run: { id, sessionId },
50
86
  cwd, sessionDir, text,
51
87
  caller: { agentId, agentName, actor: 'Chat' },
88
+ variant: { scope: 'agent-1' },
52
89
  launch: { sections: [{ id: 'identity', title: 'Identity', body, budget: 2000, order: 10 }] },
53
90
  tools: { allow: ['read', 'bash', 'my_tool'], gated: ['bash'] }
54
91
  })
@@ -56,14 +93,14 @@ await harness.sessions.run({
56
93
 
57
94
  ## How an application extends it
58
95
 
59
- The harness knows a caller (an opaque id that owns memory), never an agent, a group, or a task.
60
- An application adds what it knows through six points:
96
+ The harness knows a caller and a harness scope (opaque ids), never an agent, a group, or a task.
97
+ An application adds what it knows through seven points:
61
98
 
62
99
  1. **Prompt sections** (`Launch.sections`, `Launch.toolGroups`, `Launch.references`). Each
63
- section has an `order` and may be `dynamic`. The harness adds its own (`blocks` 30, `rules` 40,
64
- `references` 50, `skills` 60, `knowledge` 80, `tools` 90), applies budgets and the caller's
65
- context profile, keeps stable sections in the system prompt, and sends dynamic ones as
66
- updates.
100
+ section has an `order` and may be `dynamic`. The harness adds its own (`system` 25,
101
+ `guardrails` 40, `memory` 45, `references` 50, `subagents` 64, `scripts` 66, `wiki` 80,
102
+ `tools` 90), applies budgets, keeps stable sections in the system prompt, and sends dynamic
103
+ ones as updates.
67
104
  2. **Tool providers** (`harness.sessions.provide`). A provider returns `ToolSpec`s for a session;
68
105
  only the names in the session's `allow` list are registered, in that order.
69
106
  A tool may return `attachments` as `{ id, name, mimeType }` references. The harness records
@@ -72,9 +109,6 @@ An application adds what it knows through six points:
72
109
  The harness provides the web tools itself: `webTools({ secrets })` gives `web_search` (Brave Search,
73
110
  key read from the secret store) and `web_fetch` (checked reads of public pages). An application
74
111
  passes it to `harness.sessions.provide` and switches the names on for each agent.
75
- `registryTools({ harness })` gives `registry_write` (a skill, rule, or prompt) and `plugin_write`
76
- (a plugin). Each writes for the calling agent only: the item is on for that agent, and a plugin's
77
- code is trusted once written. An item others already use goes to the Inbox instead.
78
112
  3. **`ToolPolicy`**. `scope` says whether a call is inside what the run may do (or needs one
79
113
  approval). A decision with `humanOnly` is for a person alone: the always-approve switch and
80
114
  remembered answers do not apply to it. `authorize` says whether the tool is still switched on;
@@ -87,6 +121,11 @@ An application adds what it knows through six points:
87
121
  the application and says which tools, prompt sections and tool groups it provides. It is data:
88
122
  it changes what `plugins.list` and `plugins.inventory` report, never what runs. `WEB_PLUGIN`
89
123
  describes the web tools. A host that is not a Node program sends them with `plugins.describe`.
124
+ 7. **`RefineHost`** (`HarnessOptions.refineHost`). Where a refinement execution works
125
+ (`prepareWorkspace`: an isolated folder, such as a git worktree), as whom and with which tools
126
+ (`session`), and what it produced (`deliverable`). Executions run as unattended runs with
127
+ trigger `probe`, so a `ToolPolicy` can refuse anything with effects outside that folder;
128
+ improver sessions run with trigger `improver`, file tools only, on a copy of the evidence.
90
129
 
91
130
  `apps.expose(...)` additionally offers the application's tools through the connected-apps
92
131
  broker (`mcp_list_tools`, `mcp_call_tool`), which is how a terminal session reaches them.
@@ -95,7 +134,7 @@ broker (`mcp_list_tools`, `mcp_call_tool`), which is how a terminal session reac
95
134
 
96
135
  A plugin is a bundle with a title, a description and contributions: instructions, skills,
97
136
  commands, tools, connections, code (a Pi extension) and themes. A Pi package is a plugin as it
98
- is; so are the harness's own parts (Memory, Wiki, History, Ask the user, Connected apps, Pi), the
137
+ is; so are the harness's own parts (Harness, Wiki, History, Subagents, Ask the user, Connected apps, Pi), the
99
138
  application's, a person's registry ("Yours"), the folder every account shares, and what a
100
139
  working folder brings.
101
140
 
@@ -129,11 +168,10 @@ working folder brings.
129
168
  input does so before the gate sees it. Every resource reload revalidates the parent's original
130
169
  trusted selection; changed or revoked code requires review and a fresh terminal.
131
170
  - **A required part can be extended.** A package names the part it adds to and, optionally, a
132
- hooks file: `"harness": { "extends": ["memory"], "hooks": "./hooks.mjs" }`. The harness runs
133
- hooks itself (`src/plugins/hooks.ts`), in its own process, because most memory is written while
134
- no session is open. `export default function (harness) { harness.on('memory.saved', async
135
- (event, ctx) => …) }`; the events are `memory.saved`, `memory.block.changed`,
136
- `wiki.page.saved` and `history.run.ended`. A hook is told after the write and cannot stop it,
171
+ hooks file: `"harness": { "extends": ["wiki"], "hooks": "./hooks.mjs" }`. The harness runs
172
+ hooks itself (`src/plugins/hooks.ts`), in its own process, because notes are often written while
173
+ no session is open. `export default function (harness) { harness.on('wiki.page.saved', async
174
+ (event, ctx) => …) }`; the events are `wiki.page.saved` and `history.run.ended`. A hook is told after the write and cannot stop it,
137
175
  has 30 seconds, and what it throws is kept in `plugin-hooks.json` and shown on its plugin. It
138
176
  runs only while its plugin is switched on for everyone and trusted; what is loaded is checked
139
177
  against that before each delivery. `ctx.call(connection, tool, args)` reaches a connected app
@@ -157,10 +195,11 @@ working folder brings.
157
195
  terminal process claims once (`control.claim`) and shares with its bridge in memory; the socket's
158
196
  `plugins.list` is open to the session, and `plugins.attach`, `plugins.detach`, `plugins.trust`
159
197
  and `plugins.untrust` refuse without that key. A change applies when the session restarts.
160
- Outside a session, `xingular-harness plugins list | show | install | remove | update | attach |
198
+ Outside a session, `xagent plugins list | show | install | remove | update | attach |
161
199
  detach | trust | untrust` acts directly, as the person who typed it; `trust` shows the files
162
200
  and wants a typed yes or `--yes`. It does not open the data root, so it settles no run.
163
- - **Unattended runs and memory maintenance load no extension**, as before.
201
+ - **Unattended runs load no extension found on disk.** A variant's own trusted plugins still
202
+ load, so a refinement probe runs the plugin it is testing.
164
203
  - **A person switches things on and off for a scope.** `plugins.attach` and `plugins.detach`
165
204
  take a plugin's or a contribution's `id` and a `scope` (`{}` for everywhere, `{ agentId }`, or
166
205
  `{ projectId }`). The narrowest scope that says something wins: an agent, then a project, then
@@ -204,7 +243,8 @@ table. With the `--host-*` flags the harness calls the host for `secrets.get|set
204
243
  `policy.scope|authorize|approval|connections`, and `tools.call`; the host registers its tools
205
244
  with `tools.register` and its names with `directory.set`.
206
245
 
207
- `skills.import` accepts complete user-owned skill folders:
246
+ `variants.importComponents` adds complete skill folders, or single-file rules and prompts, to the
247
+ component library:
208
248
 
209
249
  ```ts
210
250
  { skills: [{ name, files: [{ path, content, encoding }] }] }
@@ -215,7 +255,8 @@ It validates bounded relative paths and file encodings, requires a root
215
255
  has no knowledge of the application feature that may call it.
216
256
 
217
257
  `npm run prove` starts that server on a throwaway data root, with no application present, and
218
- exercises accounts, memory, skills, the prompt, connected apps, and a recorded session.
258
+ exercises accounts, variants, the Wiki, the prompt, connected apps, a recorded session, a
259
+ plugin hook, and the refinement demo end to end.
219
260
 
220
261
  ## Run it as a standalone Harness terminal
221
262
 
@@ -223,13 +264,12 @@ After the CLI package is published to npm or your company's npm registry, instal
223
264
 
224
265
  ```sh
225
266
  npm install --global @xingular/harness
226
- xingular-harness
267
+ xagent
227
268
  ```
228
269
 
229
- The machine needs Node 22.19 or newer. Harness runs its own terminal frontend through the
230
- active Node runtime on every platform, using its pinned Pi SDK; no separate global `pi`
231
- installation is required. On first launch, it creates a `Default` isolated account. Use
232
- `/accounts` or `/login` to sign in.
270
+ The machine needs Node 22.19 or newer and Bun 1.3.14 or newer. Harness runs its own OpenTUI
271
+ terminal frontend with Bun, using its pinned Pi SDK; no separate global `pi` installation is
272
+ required. On first launch, it creates a `Default` isolated account. Use `/accounts` to sign in.
233
273
 
234
274
  Provider sign-in progress lives in the running Harness process. An embedding application can call
235
275
  `accounts.loginStatus` after reconnecting to recover the current device code or prompt by account;
@@ -244,30 +284,95 @@ npm run dev
244
284
  ```
245
285
 
246
286
  `npm run dev` rebuilds the CLI and opens the Harness terminal in the current working directory.
247
- It uses the normal Harness data and state directories. Press `/quit` or Ctrl+C to close it.
248
- For separate development data, pass the usual `--data <dir>` and `--state <dir>` arguments:
249
- `npm run dev -- --data <dir> --state <dir>`.
250
-
251
- Building a checkout does not update an existing global `xingular-harness` installation.
287
+ It uses separate development directories by default: `~/.xingular-harness-dev/data` and
288
+ `~/.xingular-harness-dev/state`. This keeps development harness data and device settings—including
289
+ accounts, Pi settings, approvals, and connections—separate from the installed command. Press
290
+ `/quit`, Ctrl+C or Ctrl+D to close it. Override either directory with `--data <dir>` or
291
+ `--state <dir>`; for example: `npm run dev -- --data <dir> --state <dir>`. An omitted option keeps
292
+ its development specific default.
293
+
294
+ The OpenTUI/Solid frontend is the only terminal. Install Bun 1.3.14 or newer and run
295
+ `npm run build:tui` (or `npm run build`); without Bun the build fails rather than producing a
296
+ terminal that cannot start. The harness runs `dist/terminal-opentui.js`, which uses the same
297
+ session runtime, accounts, command pages, approvals, questions, plugins and run records as the
298
+ embedded SDK. See [the terminal guide](docs/terminal-tui.md).
299
+
300
+ ### Worktrees
301
+
302
+ Run `xagent --worktree` (or `-w [name]`) inside a git repository to start in a fresh managed
303
+ worktree: a detached checkout under `<state dir>/worktrees/` that carries your uncommitted
304
+ changes, copies ignored files named in `.worktreeinclude`, and runs the repository's
305
+ `.xharness/worktree-setup` once you trust it (`xagent worktree trust-setup`). The 15 most recent
306
+ managed worktrees per repository are kept; older ones are pruned, and unsaved work is kept as a
307
+ snapshot you can restore. `/plugin:worktree` in a session, `xagent worktree <command>` in a shell, and
308
+ the `worktrees.*` server methods offer the same actions: new, switch, create branch, hand off to
309
+ or from the main checkout, remove, restore, prune and adopt. An application passes a worktree's id
310
+ as `run.worktreeId` and the session works in it. See
311
+ [PROP-0016](docs/architecture/proposals/PROP-0016-managed-worktrees.md).
312
+
313
+ ### Page notes
314
+
315
+ `/plugin:annotate [url]` opens a visible capture browser (its own window and profile, separate from the
316
+ agent's browser). Note the whole page, select a passage, or click an element there, then write the
317
+ note in the terminal. `/plugin:notes` lists, edits, resolves, reveals and deletes notes. A note is private
318
+ until you share it with the session; its agent then reads it with `page_notes_list` and
319
+ `page_notes_read`, with quoted page text marked untrusted. Notes live in `<data root>/annotations/`
320
+ and the `annotations.*` server methods give a host the same store. A host with its own web view
321
+ runs the same page helper (`annotations.pageScript`). See
322
+ [PROP-0017](docs/architecture/proposals/PROP-0017-page-annotations.md).
323
+
324
+ `/plugin:annotate` turns this into an inspector:
325
+ - Hover a component in the browser or an app window, click it, and write a comment in the popover.
326
+ - Then keep it as a note, add it to the agent's queue, or send it now. The agent reports back with `page_notes_mark_fixed`.
327
+ - App windows work two ways:
328
+ - **DevTools port:** start an Electron app with `--remote-debugging-port=9229` and run `/plugin:annotate --app 9229`.
329
+ - **Page bridge:** for a macOS web view such as Tauri, run `/plugin:annotate --bridge` and load the script tag it shows while developing the app. Allow `http://127.0.0.1:<port>` in the app's `script-src` and `connect-src`.
330
+ - A host drives the same flow with `annotations.capture.*`, and sends to its own sessions with `annotations.compose` and `annotations.delivered`.
331
+
332
+ See [PROP-0018](docs/architecture/proposals/PROP-0018-annotation-queue-and-app-targets.md).
333
+
334
+ Building a checkout does not update an existing global `xagent` installation.
252
335
  To replace that command with this checkout, run `npm pack`, then install the exact tarball
253
336
  filename it prints with `npm install --global ./<tarball-filename>`. This is a local install;
254
337
  it does not publish a release. Close an already-running terminal session and launch the command
255
338
  again to load the new frontend. A package version alone cannot distinguish an unreleased local
256
339
  build from an older installed build with the same version.
257
340
 
258
- This opens the Harness-owned terminal frontend in the current working directory. Its
259
- presentation follows the inspected Oh My Pi 18.11.3 titanium and light palettes, centered welcome, filled
260
- status band and curved `╰─` prompt, with Harness identity and existing capabilities. Harness
261
- owns screen composition, editing/input dispatch, scrolling, command routing and plugin UI;
262
- Pi supplies the persistent execution runtime, native history and rich content components.
263
- The existing isolated account, compiled context, approval gate, telemetry and Wiki/socket
264
- commands remain behind the terminal. No Pi `InteractiveMode` is constructed.
265
-
266
- `/resume` stays inside the prepared history and working folder; `/import` accepts an explicitly
267
- selected native JSONL file only for the same working folder. Cancel an active response before
268
- changing or reloading a session. Full OMP visual parity is not established by the current
269
- verification. See [terminal architecture and evidence](docs/terminal-tui.md),
270
- [the decision](docs/decisions/ADR-0001-owned-terminal.md), and [third-party notices](NOTICE.md).
341
+ This opens the Harness-owned OpenTUI terminal in the current working directory. Its presentation
342
+ uses the Harness titanium palette and an OpenCode-inspired layout: the transcript above a
343
+ borderless composer with the working status above it and the model, context and token line below.
344
+ Harness owns screen composition, editing/input dispatch, scrolling, command routing and plugin UI;
345
+ Pi supplies the persistent execution runtime, native history and rich content components. The
346
+ existing isolated account, compiled context, approval gate, telemetry and Wiki/socket commands
347
+ remain behind the terminal. No Pi `InteractiveMode` is constructed.
348
+
349
+ Core terminal commands stay unprefixed. Built-in and Pi extension plugin commands use
350
+ `/plugin:<command>`; for example, annotate a page with `/plugin:annotate https://example.com`.
351
+ Old unprefixed plugin command forms are no longer aliases.
352
+
353
+ `/resume` stays inside the prepared account history and working folder. Cancel an active response
354
+ before changing or reloading a session. Full OMP visual parity is not established by the current
355
+ verification. `/harness` opens one browser for Foundation, Variant, Skills, Plugins,
356
+ Connections (MCP), Tools and Library. `/skills`, `/plugins`, `/connections` (`/mcp`) and `/tools`
357
+ open its sections directly; `/hub` opens Discover and `/components` opens Library. Resource
358
+ sections share Installed / Discover, source filters, search and a detail inspector. Tab focuses
359
+ controls, arrows change the focused choice, Ctrl+F returns to search and Escape goes back.
360
+ Skills show actual session availability even with invocation shortcuts off. With shortcuts on,
361
+ Use inserts `$name` into the draft without sending it; typing `$` also completes loaded skills.
362
+ To keep an existing message and attachments, open Ctrl+K, choose Skills, then Use.
363
+ Variant inspection distinguishes the pinned session version from the latest saved version.
364
+ Adding a library skill or rule creates a validated version for future sessions.
365
+
366
+ `/accounts`, `/permissions`, `/settings`, `/plugin:trajectory` and `/log` retain their own centered pages.
367
+ `/permissions` reviews device-local Pi terminal grants and the Full Permission switch; tool grants
368
+ apply across terminal sessions sharing this Harness state, and Full Permission requires confirmation.
369
+ `/plugin:trajectory` opens recorded runs for the current native conversation,
370
+ with event navigation and a detail inspector. `/log` shows a static, redacted snapshot of Harness
371
+ diagnostics and run events for the current conversation; press Escape to close. See
372
+ [terminal architecture and evidence](docs/terminal-tui.md),
373
+ [the ownership decision](docs/decisions/ADR-0001-owned-terminal.md),
374
+ [the OpenTUI-only decision](docs/decisions/ADR-0006-opentui-only-terminal.md), and
375
+ [third-party notices](NOTICE.md).
271
376
 
272
377
  ### `/accounts` in the terminal
273
378
 
@@ -279,36 +384,46 @@ command the model runs in the shell cannot make it.
279
384
  A running session stays on the account it started with. To use another account for this
280
385
  session, choose **Use for this session**: the terminal child restarts and the same conversation
281
386
  resumes on that account. Removing an account that a running terminal is using is refused. Only
282
- terminals in this process are counted, so an account used by another running `xingular-harness` window can
387
+ terminals in this process are counted, so an account used by another running `xagent` window can
283
388
  still be removed; that session then asks for another account the next time it starts.
284
389
 
285
- The default data and device state directories are `~/.xingular-harness/data` and
286
- `~/.xingular-harness/state`. Override them with `--data <dir>` and `--state <dir>`. Session
287
- history is stored per working directory and can be reopened with the terminal's `/resume`
288
- command. The explicit `terminal` command is an alias for the default launch. Use `--help` to see the commands;
289
- `serve` remains the host-facing RPC service for integrations such as Xingular Agent/App.
390
+ The installed standalone command defaults to `~/.xingular-harness/data` and
391
+ `~/.xingular-harness/state`; `npm run dev` instead defaults to the separate
392
+ `~/.xingular-harness-dev/data` and `~/.xingular-harness-dev/state`. Override either with
393
+ `--data <dir>` and `--state <dir>`. Session history is stored per working directory and can be
394
+ reopened with the terminal's `/resume` command. The explicit `terminal` command is an alias for
395
+ the default launch. Use `--help` to see the commands; `serve` remains the host-facing RPC service
396
+ for integrations such as Xingular Agent/App.
290
397
 
291
398
  ## Storage
292
399
 
293
400
  ```
294
401
  <data root>/
295
- wiki/ home.md, library/, projects/<slug>/, facts/, blocks/, revisions, inbox, log
296
- registry/ skills/, prompts/, rules/ (a person's own; never copied)
402
+ variants/<scope>/ versions/<fingerprint>/variant/, head.json, lineage.jsonl (the eight components)
403
+ refine/<id>/ summary.json, task.json, variants/<label>/, rollouts/, context/, selection/, reflection/, improver/
404
+ library/<scope>/<area>/ INDEX.md, variants/<task>/{variant/, EXPERIENCE.md} (the experience library)
405
+ wiki/ home.md, library/, projects/<slug>/ (project notes)
406
+ wiki-history/ earlier versions of notes
407
+ legacy/ what an earlier Wiki kept (memory blocks, facts, revisions, Inbox), moved once
408
+ registry/ skills/, prompts/, rules/ (the component library; the Hub installs here)
297
409
  plugins/<name>/ packages kept with a person's data; each is found as an installed plugin
298
- runs/<id>/ run.json, events.jsonl, context.json, caller.json
299
- config/ context profiles, what is switched on for whom (plugin-attachments.json),
410
+ runs/<id>/ run.json, events.jsonl, context.json, caller.json, subagents.json (reserved child IDs)
411
+ config/ what is switched on for whom (plugin-attachments.json),
300
412
  settings the harness reads
301
- index.sqlite a rebuildable index of Wiki entries and runs (FTS5)
413
+ agents/<name>.md a person's agent profiles (a repository keeps its own in .xingular/agents/)
414
+ index.sqlite a rebuildable index of runs for recall (FTS5)
302
415
  projects.json read only: the application owns it
303
416
 
304
417
  <state dir>/
305
418
  accounts/ registry, per-account Pi agent folders, audit log
306
419
  approvals.json standing approvals
307
420
  plugin-trust.json the code a person trusted, by hash, and whether earlier packages were taken over
421
+ variant-plugin-trust.json harness-variant plugin code a person trusted, and scopes whose probes may run improver code
308
422
  plugin-registered.json what each extension registered the last time a session loaded it
309
423
  plugin-hooks.json what each hooks file listens for and how its last run went
310
424
  connections.json connected apps (secrets are in the SecretStore)
311
425
  run/ the session socket and the terminal commands
426
+ harness.log diagnostics from the standalone terminal, kept off its screen
312
427
  ```
313
428
 
314
429
  The files are the source of truth; `index.sqlite` can be deleted and rebuilt
@@ -318,28 +433,39 @@ The files are the source of truth; `index.sqlite` can be deleted and rebuilt
318
433
 
319
434
  ```sh
320
435
  npm run ci # typecheck, unit/golden tests, and standalone proof; matches GitHub CI
321
- npm run build # dist/cli.js (the xingular-harness command) and dist/terminal-pi.js
436
+ npm run build # dist/cli.js, dist/terminal-pi.js, and the OpenTUI frontend
437
+ npm run build:tui # only the OpenTUI frontend
322
438
  ```
323
439
 
324
- Node 22.19 or newer.
440
+ Node 22.19 or newer and Bun 1.3.14 or newer.
325
441
 
326
442
  ## Images
327
443
 
328
- `SessionRunInput.requiresImageInput` optionally requires a vision-capable resolved Pi model before a prompt is delivered. The check includes direct `images` input, and the generic tool wrapper rejects image results on text-only models. Direct prompt images use Pi's `{ type: 'image', data, mimeType }` content shape. Applications own file formats, attachment selection, extraction and image preparation; the Harness only transports typed image content and validates model capability.
444
+ `SessionRunInput.requiresImageInput` optionally requires a vision-capable resolved Pi model before a prompt is delivered. The check includes direct `images` input, and the generic tool wrapper rejects image results on text-only models. Direct prompt images use Pi's `{ type: 'image', data, mimeType }` content shape. Applications own attachment selection, extraction and image preparation; the Harness transports typed image content and validates model capability. In the standalone terminal, pasting Finder-copied HEIC/HEIF files on macOS converts them to temporary PNGs so Pi can read their pixels. See [the terminal guide](docs/terminal-tui.md#clipboard-image-paste).
445
+
446
+ `SessionRunInput.initialBashCommand` is an opt-in for one new interactive user turn. It must match
447
+ the leading `!` command in `text`; Harness checks it through the same per-call gate as model-issued
448
+ Bash, executes it once in Pi's native session, records its bounded result, and asks the model to
449
+ inspect that result before replying. Automatic, plan, resumed, relation, probe, and improver runs
450
+ cannot carry it. See the [terminal guide](docs/terminal-tui.md#bash-command-mode).
329
451
 
330
452
  ## Curated Hub
331
453
 
332
- `xingular-harness hub list [--refresh]`, `hub show publisher/name@version`, and
454
+ `xagent hub list [--refresh]`, `xagent hub show publisher/name@version`, and
333
455
  `hub install publisher/name@version` browse and install exact catalog versions. `/hub` offers the
334
456
  same review in the interactive terminal, using its private control key for installation. Both the
335
- terminal and embedding applications use `hub.list`, `hub.get`, `hub.install`, and `hub.readDocument`.
336
- `hub.get { id, version, preview: true }` verifies data payload bytes without installing them.
457
+ terminal and embedding applications use `hub.list`, `hub.get`, `hub.preview`, `hub.install`,
458
+ `hub.uninstall`, and `hub.readDocument`. `hub.get { id, version, preview: true }` verifies data
459
+ payload bytes without installing them. `hub.preview { id, version, offset }` returns bounded,
460
+ UTF-8-safe pages of up to 16 KiB from a verified payload.
337
461
 
338
462
  Registry bundles import complete skills or single Markdown prompts/rules, disabled. Pi packages
339
463
  reuse the existing installer and require an exact npm version or full GitHub commit. Documents
340
464
  are saved as inert JSON for a compatible host to interpret; the harness does not apply them.
341
465
  Installation grants no attachment, trust, credentials, or permission. Writes are serialized and
342
- existing registry files are never overwritten.
466
+ existing registry files are never overwritten. Receipts report whether their resources are intact;
467
+ uninstall removes only the exact receipt's resources, including local edits within those paths, and
468
+ revokes its attachment choices.
343
469
 
344
470
  Installed documents and provenance live under `<data root>/hub/`; the catalog cache is
345
471
  `<state dir>/hub/catalog.json`. An offline snapshot ships with the package. Explicit refresh keeps
@@ -358,9 +484,36 @@ An embedding application may set `externalMaintenance: true`, supply trusted `Ca
358
484
  `vaultAccess` (`self` or `curator`), and register `maintenanceTools`/`MAINTENANCE_PLUGIN`.
359
485
  Self callers directly edit only their own writable persona/notes; shared knowledge and text-resource
360
486
  writes become persistent proposals. Curator tools read original evidence, compare captured target
361
- revisions, apply reviewed changes, persist receipts and undo without overwriting later edits.
487
+ revisions, read all host-assigned requests together, and apply reconciled Wiki proposals as one
488
+ undoable change set. Resource proposals keep their own receipts; executable proposals remain inert
489
+ until the user reviews/trusts them. Later user edits are never overwritten.
362
490
  `maintenance.list`, `maintenance.review` and `maintenance.retry` let the host dispatch its own
363
491
  recorded sessions. Curator runs do not recursively queue maintenance. Optional assigned IDs freeze
364
492
  which requests a batch may claim. These fields are trusted host context, never model arguments.
365
- Executable proposals remain inert until the user reviews/trusts them. Standalone callers that omit
366
- this option retain the existing lifecycle and direct-write contract.
493
+ `maintenance_read_batch` reads those assigned requests together; `maintenance_apply_batch` records
494
+ one decision for each and applies the evidence-checked Wiki set atomically. Standalone callers that
495
+ omit this option retain the existing lifecycle and direct-write contract.
496
+
497
+ ## Readiness diagnostics
498
+
499
+ Use `/plugin:doctor` in the terminal for local readiness checks and explicitly selected live probes. The same
500
+ structured jobs are available through `harness.doctor` and `doctor.*` server methods. See
501
+ [Doctor](docs/doctor.md) for coverage, consent, isolation, and provider callbacks.
502
+
503
+ ## Public 4.0.0 release candidate
504
+
505
+ The public package is ESM: import from `@xingular/harness` or supported subpaths such as
506
+ `@xingular/harness/variant/seed`. JavaScript and declarations are shipped in `dist/sdk`; a
507
+ TypeScript loader is not required. Node 22.19 or later is required. The interactive terminal
508
+ also requires Bun (release builds use 1.4.2); the CLI reports its version with `xagent --version`.
509
+ Original project code is Apache-2.0. See LICENSE, NOTICE.md and THIRD_PARTY_LICENSES.md.
510
+
511
+ A host providing its own browser tools sets `browser: false` on `createHarness` to disable the
512
+ generic backend and prevent tool-name collisions. The desktop App uses this for shared tabs.
513
+ The default standalone Harness keeps its isolated browser backend enabled.
514
+
515
+ This additive release follows the published 1.0.0 baseline, which intentionally reset development
516
+ numbering while preserving older published versions. See [4.0.0 release notes](docs/releases/4.0.0.md),
517
+ [1.0.0 release notes](docs/releases/1.0.0.md), and the [release procedure](docs/releases/README.md).
518
+ Publication requires registry verification, green CI on supported operating systems, and approval of
519
+ the exact candidate and tag push.