@xingular/harness 0.1.7 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (819) hide show
  1. package/CHANGELOG.md +125 -1
  2. package/LICENSE +202 -0
  3. package/NOTICE.md +22 -0
  4. package/README.md +239 -86
  5. package/THIRD_PARTY_LICENSES.md +942 -0
  6. package/dist/cli.js +17853 -13114
  7. package/dist/sdk/accounts/accounts.d.ts +165 -0
  8. package/dist/sdk/accounts/accounts.js +730 -0
  9. package/dist/sdk/accounts/choices.d.ts +23 -0
  10. package/dist/sdk/accounts/choices.js +62 -0
  11. package/dist/sdk/accounts/env.d.ts +78 -0
  12. package/dist/sdk/accounts/env.js +294 -0
  13. package/dist/sdk/accounts/secrets.d.ts +16 -0
  14. package/dist/sdk/accounts/secrets.js +40 -0
  15. package/dist/sdk/accounts/store.d.ts +114 -0
  16. package/dist/sdk/accounts/store.js +255 -0
  17. package/dist/sdk/agents/builtin.d.ts +2 -0
  18. package/dist/sdk/agents/builtin.js +34 -0
  19. package/dist/sdk/agents/narrow.d.ts +13 -0
  20. package/dist/sdk/agents/narrow.js +29 -0
  21. package/dist/sdk/agents/profiles.d.ts +80 -0
  22. package/dist/sdk/agents/profiles.js +221 -0
  23. package/dist/sdk/annotations/bridge.d.ts +42 -0
  24. package/dist/sdk/annotations/bridge.js +264 -0
  25. package/dist/sdk/annotations/capture.d.ts +116 -0
  26. package/dist/sdk/annotations/capture.js +308 -0
  27. package/dist/sdk/annotations/delivery.d.ts +72 -0
  28. package/dist/sdk/annotations/delivery.js +130 -0
  29. package/dist/sdk/annotations/inspect.d.ts +10 -0
  30. package/dist/sdk/annotations/inspect.js +33 -0
  31. package/dist/sdk/annotations/isolated.d.ts +6 -0
  32. package/dist/sdk/annotations/isolated.js +51 -0
  33. package/dist/sdk/annotations/pageScript.d.ts +28 -0
  34. package/dist/sdk/annotations/pageScript.js +570 -0
  35. package/dist/sdk/annotations/part.d.ts +10 -0
  36. package/dist/sdk/annotations/part.js +144 -0
  37. package/dist/sdk/annotations/queue.d.ts +4 -0
  38. package/dist/sdk/annotations/queue.js +40 -0
  39. package/dist/sdk/annotations/serverMethods.d.ts +3 -0
  40. package/dist/sdk/annotations/serverMethods.js +62 -0
  41. package/dist/sdk/annotations/store.d.ts +160 -0
  42. package/dist/sdk/annotations/store.js +386 -0
  43. package/dist/sdk/browser/config.d.ts +16 -0
  44. package/dist/sdk/browser/config.js +22 -0
  45. package/dist/sdk/browser/diagnostics.d.ts +4 -0
  46. package/dist/sdk/browser/diagnostics.js +38 -0
  47. package/dist/sdk/browser/index.d.ts +28 -0
  48. package/dist/sdk/browser/index.js +72 -0
  49. package/dist/sdk/browser/network.d.ts +10 -0
  50. package/dist/sdk/browser/network.js +59 -0
  51. package/dist/sdk/browser/serverMethods.d.ts +3 -0
  52. package/dist/sdk/browser/serverMethods.js +7 -0
  53. package/dist/sdk/browser/session.d.ts +85 -0
  54. package/dist/sdk/browser/session.js +228 -0
  55. package/dist/sdk/browser/tools.d.ts +8 -0
  56. package/dist/sdk/browser/tools.js +329 -0
  57. package/dist/sdk/capabilities/api.d.ts +22 -0
  58. package/dist/sdk/capabilities/api.js +54 -0
  59. package/dist/sdk/capabilities/runSnapshot.d.ts +18 -0
  60. package/dist/sdk/capabilities/runSnapshot.js +47 -0
  61. package/dist/sdk/capabilities/types.d.ts +29 -0
  62. package/dist/sdk/capabilities/types.js +1 -0
  63. package/dist/sdk/cli.d.ts +2 -0
  64. package/dist/sdk/cli.js +150 -0
  65. package/dist/sdk/core/bus.d.ts +23 -0
  66. package/dist/sdk/core/bus.js +76 -0
  67. package/dist/sdk/core/caller.d.ts +22 -0
  68. package/dist/sdk/core/caller.js +16 -0
  69. package/dist/sdk/core/changes.d.ts +15 -0
  70. package/dist/sdk/core/changes.js +15 -0
  71. package/dist/sdk/core/effort.d.ts +2 -0
  72. package/dist/sdk/core/effort.js +1 -0
  73. package/dist/sdk/core/env.d.ts +18 -0
  74. package/dist/sdk/core/env.js +8 -0
  75. package/dist/sdk/core/errors.d.ts +15 -0
  76. package/dist/sdk/core/errors.js +24 -0
  77. package/dist/sdk/core/frontmatter.d.ts +12 -0
  78. package/dist/sdk/core/frontmatter.js +50 -0
  79. package/dist/sdk/core/fs.d.ts +18 -0
  80. package/dist/sdk/core/fs.js +106 -0
  81. package/dist/sdk/core/index.d.ts +24 -0
  82. package/dist/sdk/core/index.js +187 -0
  83. package/dist/sdk/core/path.d.ts +7 -0
  84. package/dist/sdk/core/path.js +79 -0
  85. package/dist/sdk/core/projects.d.ts +18 -0
  86. package/dist/sdk/core/projects.js +67 -0
  87. package/dist/sdk/core/secrets.d.ts +2 -0
  88. package/dist/sdk/core/secrets.js +5 -0
  89. package/dist/sdk/core/text.d.ts +7 -0
  90. package/dist/sdk/core/text.js +40 -0
  91. package/dist/sdk/doctor/checks.d.ts +5 -0
  92. package/dist/sdk/doctor/checks.js +208 -0
  93. package/dist/sdk/doctor/probe.d.ts +4 -0
  94. package/dist/sdk/doctor/probe.js +92 -0
  95. package/dist/sdk/doctor/serverMethods.d.ts +3 -0
  96. package/dist/sdk/doctor/serverMethods.js +8 -0
  97. package/dist/sdk/doctor/service.d.ts +23 -0
  98. package/dist/sdk/doctor/service.js +144 -0
  99. package/dist/sdk/doctor/types.d.ts +141 -0
  100. package/dist/sdk/doctor/types.js +29 -0
  101. package/dist/sdk/harness.d.ts +148 -0
  102. package/dist/sdk/harness.js +338 -0
  103. package/dist/sdk/history/lessonPrompt.d.ts +2 -0
  104. package/dist/sdk/history/lessonPrompt.js +15 -0
  105. package/dist/sdk/history/lessons.d.ts +52 -0
  106. package/dist/sdk/history/lessons.js +173 -0
  107. package/dist/sdk/history/recall.d.ts +68 -0
  108. package/dist/sdk/history/recall.js +199 -0
  109. package/dist/sdk/history/serverMethods.d.ts +3 -0
  110. package/dist/sdk/history/serverMethods.js +8 -0
  111. package/dist/sdk/history/trajectory.d.ts +7 -0
  112. package/dist/sdk/history/trajectory.js +216 -0
  113. package/dist/sdk/hub/catalog.json +123 -0
  114. package/dist/sdk/hub/cli.d.ts +7 -0
  115. package/dist/sdk/hub/cli.js +81 -0
  116. package/dist/sdk/hub/hub.d.ts +74 -0
  117. package/dist/sdk/hub/hub.js +474 -0
  118. package/dist/sdk/hub/schema.d.ts +280 -0
  119. package/dist/sdk/hub/schema.js +78 -0
  120. package/dist/sdk/hub/serverMethods.d.ts +3 -0
  121. package/dist/sdk/hub/serverMethods.js +11 -0
  122. package/dist/sdk/index.d.ts +73 -0
  123. package/dist/sdk/index.js +55 -0
  124. package/dist/sdk/mcp/connections.d.ts +83 -0
  125. package/dist/sdk/mcp/connections.js +676 -0
  126. package/dist/sdk/mcp/manager.d.ts +26 -0
  127. package/dist/sdk/mcp/manager.js +124 -0
  128. package/dist/sdk/mcp/oauth.d.ts +35 -0
  129. package/dist/sdk/mcp/oauth.js +171 -0
  130. package/dist/sdk/mcp/scopeMigration.d.ts +19 -0
  131. package/dist/sdk/mcp/scopeMigration.js +198 -0
  132. package/dist/sdk/mcp/serverMethods.d.ts +3 -0
  133. package/dist/sdk/mcp/serverMethods.js +22 -0
  134. package/dist/sdk/mcp/service.d.ts +160 -0
  135. package/dist/sdk/mcp/service.js +510 -0
  136. package/dist/sdk/mcp/types.d.ts +131 -0
  137. package/dist/sdk/mcp/types.js +49 -0
  138. package/dist/sdk/pi/runtime.d.ts +13 -0
  139. package/dist/sdk/pi/runtime.js +31 -0
  140. package/dist/sdk/plugins/api.d.ts +66 -0
  141. package/dist/sdk/plugins/api.js +155 -0
  142. package/dist/sdk/plugins/attachments.d.ts +46 -0
  143. package/dist/sdk/plugins/attachments.js +111 -0
  144. package/dist/sdk/plugins/builtin.d.ts +7 -0
  145. package/dist/sdk/plugins/builtin.js +163 -0
  146. package/dist/sdk/plugins/builtinRegistry.d.ts +53 -0
  147. package/dist/sdk/plugins/builtinRegistry.js +49 -0
  148. package/dist/sdk/plugins/catalogue.d.ts +29 -0
  149. package/dist/sdk/plugins/catalogue.js +196 -0
  150. package/dist/sdk/plugins/cli.d.ts +13 -0
  151. package/dist/sdk/plugins/cli.js +188 -0
  152. package/dist/sdk/plugins/discover.d.ts +42 -0
  153. package/dist/sdk/plugins/discover.js +115 -0
  154. package/dist/sdk/plugins/firstParty.d.ts +50 -0
  155. package/dist/sdk/plugins/firstParty.js +113 -0
  156. package/dist/sdk/plugins/hooks.d.ts +94 -0
  157. package/dist/sdk/plugins/hooks.js +162 -0
  158. package/dist/sdk/plugins/identity.d.ts +19 -0
  159. package/dist/sdk/plugins/identity.js +48 -0
  160. package/dist/sdk/plugins/install.d.ts +20 -0
  161. package/dist/sdk/plugins/install.js +110 -0
  162. package/dist/sdk/plugins/inventory.d.ts +22 -0
  163. package/dist/sdk/plugins/inventory.js +110 -0
  164. package/dist/sdk/plugins/manifest.d.ts +13 -0
  165. package/dist/sdk/plugins/manifest.js +56 -0
  166. package/dist/sdk/plugins/plugins.d.ts +104 -0
  167. package/dist/sdk/plugins/plugins.js +164 -0
  168. package/dist/sdk/plugins/runtime.d.ts +9 -0
  169. package/dist/sdk/plugins/runtime.js +95 -0
  170. package/dist/sdk/plugins/trust.d.ts +44 -0
  171. package/dist/sdk/plugins/trust.js +120 -0
  172. package/dist/sdk/plugins/types.d.ts +159 -0
  173. package/dist/sdk/plugins/types.js +7 -0
  174. package/dist/sdk/prompt/compile.d.ts +177 -0
  175. package/dist/sdk/prompt/compile.js +413 -0
  176. package/dist/sdk/refine/cli.d.ts +4 -0
  177. package/dist/sdk/refine/cli.js +186 -0
  178. package/dist/sdk/refine/demo.d.ts +21 -0
  179. package/dist/sdk/refine/demo.js +114 -0
  180. package/dist/sdk/refine/evidence.d.ts +55 -0
  181. package/dist/sdk/refine/evidence.js +330 -0
  182. package/dist/sdk/refine/host.d.ts +51 -0
  183. package/dist/sdk/refine/host.js +76 -0
  184. package/dist/sdk/refine/ledger.d.ts +48 -0
  185. package/dist/sdk/refine/ledger.js +76 -0
  186. package/dist/sdk/refine/library.d.ts +55 -0
  187. package/dist/sdk/refine/library.js +177 -0
  188. package/dist/sdk/refine/pi.d.ts +72 -0
  189. package/dist/sdk/refine/pi.js +248 -0
  190. package/dist/sdk/refine/prompts.d.ts +45 -0
  191. package/dist/sdk/refine/prompts.js +390 -0
  192. package/dist/sdk/refine/recursion.d.ts +113 -0
  193. package/dist/sdk/refine/recursion.js +258 -0
  194. package/dist/sdk/refine/runner.d.ts +81 -0
  195. package/dist/sdk/refine/runner.js +150 -0
  196. package/dist/sdk/refine/selection.d.ts +57 -0
  197. package/dist/sdk/refine/selection.js +251 -0
  198. package/dist/sdk/refine/serverMethods.d.ts +3 -0
  199. package/dist/sdk/refine/serverMethods.js +20 -0
  200. package/dist/sdk/refine/service.d.ts +84 -0
  201. package/dist/sdk/refine/service.js +165 -0
  202. package/dist/sdk/refine/suite.d.ts +67 -0
  203. package/dist/sdk/refine/suite.js +174 -0
  204. package/dist/sdk/refine/trajectory.d.ts +9 -0
  205. package/dist/sdk/refine/trajectory.js +68 -0
  206. package/dist/sdk/refine/types.d.ts +77 -0
  207. package/dist/sdk/refine/types.js +10 -0
  208. package/dist/sdk/server/methods.d.ts +3 -0
  209. package/dist/sdk/server/methods.js +293 -0
  210. package/dist/sdk/server/params.d.ts +4 -0
  211. package/dist/sdk/server/params.js +11 -0
  212. package/dist/sdk/server/remote.d.ts +19 -0
  213. package/dist/sdk/server/remote.js +84 -0
  214. package/dist/sdk/server/rpc.d.ts +20 -0
  215. package/dist/sdk/server/rpc.js +102 -0
  216. package/dist/sdk/server/serve.d.ts +10 -0
  217. package/dist/sdk/server/serve.js +18 -0
  218. package/dist/sdk/sessions/approvals.d.ts +47 -0
  219. package/dist/sdk/sessions/approvals.js +119 -0
  220. package/dist/sdk/sessions/continuation.d.ts +48 -0
  221. package/dist/sdk/sessions/continuation.js +85 -0
  222. package/dist/sdk/sessions/contracts.d.ts +551 -0
  223. package/dist/sdk/sessions/contracts.js +338 -0
  224. package/dist/sdk/sessions/extensionUi.d.ts +19 -0
  225. package/dist/sdk/sessions/extensionUi.js +64 -0
  226. package/dist/sdk/sessions/history.d.ts +16 -0
  227. package/dist/sdk/sessions/history.js +68 -0
  228. package/dist/sdk/sessions/lineageJoin.d.ts +2 -0
  229. package/dist/sdk/sessions/lineageJoin.js +61 -0
  230. package/dist/sdk/sessions/planMode.d.ts +39 -0
  231. package/dist/sdk/sessions/planMode.js +93 -0
  232. package/dist/sdk/sessions/policy.d.ts +43 -0
  233. package/dist/sdk/sessions/policy.js +1 -0
  234. package/dist/sdk/sessions/pricing.d.ts +34 -0
  235. package/dist/sdk/sessions/pricing.js +40 -0
  236. package/dist/sdk/sessions/reasoningSummaries.d.ts +11 -0
  237. package/dist/sdk/sessions/reasoningSummaries.js +61 -0
  238. package/dist/sdk/sessions/registry.d.ts +103 -0
  239. package/dist/sdk/sessions/registry.js +386 -0
  240. package/dist/sdk/sessions/runIndex.d.ts +21 -0
  241. package/dist/sdk/sessions/runIndex.js +65 -0
  242. package/dist/sdk/sessions/runStore.d.ts +66 -0
  243. package/dist/sdk/sessions/runStore.js +337 -0
  244. package/dist/sdk/sessions/runner.d.ts +213 -0
  245. package/dist/sdk/sessions/runner.js +589 -0
  246. package/dist/sdk/sessions/sessions.d.ts +152 -0
  247. package/dist/sdk/sessions/sessions.js +461 -0
  248. package/dist/sdk/sessions/sideQuestionServerMethods.d.ts +3 -0
  249. package/dist/sdk/sessions/sideQuestionServerMethods.js +19 -0
  250. package/dist/sdk/sessions/sideQuestions.d.ts +66 -0
  251. package/dist/sdk/sessions/sideQuestions.js +290 -0
  252. package/dist/sdk/sessions/subagentServerMethods.d.ts +3 -0
  253. package/dist/sdk/sessions/subagentServerMethods.js +41 -0
  254. package/dist/sdk/sessions/subagentService.d.ts +52 -0
  255. package/dist/sdk/sessions/subagentService.js +265 -0
  256. package/dist/sdk/sessions/subagents.d.ts +58 -0
  257. package/dist/sdk/sessions/subagents.js +87 -0
  258. package/dist/sdk/terminal/accountsMenu.d.ts +46 -0
  259. package/dist/sdk/terminal/accountsMenu.js +392 -0
  260. package/dist/sdk/terminal/browser.d.ts +62 -0
  261. package/dist/sdk/terminal/browser.js +41 -0
  262. package/dist/sdk/terminal/browserControl.d.ts +29 -0
  263. package/dist/sdk/terminal/browserControl.js +186 -0
  264. package/dist/sdk/terminal/cli.d.ts +20 -0
  265. package/dist/sdk/terminal/cli.js +121 -0
  266. package/dist/sdk/terminal/client.d.ts +15 -0
  267. package/dist/sdk/terminal/client.js +126 -0
  268. package/dist/sdk/terminal/commandHelp.d.ts +17 -0
  269. package/dist/sdk/terminal/commandHelp.js +20 -0
  270. package/dist/sdk/terminal/control.d.ts +4 -0
  271. package/dist/sdk/terminal/control.js +25 -0
  272. package/dist/sdk/terminal/controller.d.ts +78 -0
  273. package/dist/sdk/terminal/controller.js +383 -0
  274. package/dist/sdk/terminal/hubMenu.d.ts +10 -0
  275. package/dist/sdk/terminal/hubMenu.js +34 -0
  276. package/dist/sdk/terminal/launch.d.ts +5 -0
  277. package/dist/sdk/terminal/launch.js +27 -0
  278. package/dist/sdk/terminal/logs.d.ts +14 -0
  279. package/dist/sdk/terminal/logs.js +59 -0
  280. package/dist/sdk/terminal/opentui/subagentsWidget.d.ts +28 -0
  281. package/dist/sdk/terminal/opentui/subagentsWidget.js +52 -0
  282. package/dist/sdk/terminal/piExtension.d.ts +6 -0
  283. package/dist/sdk/terminal/piExtension.js +377 -0
  284. package/dist/sdk/terminal/pluginMenu.d.ts +34 -0
  285. package/dist/sdk/terminal/pluginMenu.js +101 -0
  286. package/dist/sdk/terminal/socket.d.ts +73 -0
  287. package/dist/sdk/terminal/socket.js +287 -0
  288. package/dist/sdk/terminal/standalone.d.ts +20 -0
  289. package/dist/sdk/terminal/standalone.js +186 -0
  290. package/dist/sdk/terminal/subagentMonitor.d.ts +38 -0
  291. package/dist/sdk/terminal/subagentMonitor.js +121 -0
  292. package/dist/sdk/terminal/terminals.d.ts +212 -0
  293. package/dist/sdk/terminal/terminals.js +1108 -0
  294. package/dist/sdk/terminal/trajectory.d.ts +10 -0
  295. package/dist/sdk/terminal/trajectory.js +30 -0
  296. package/dist/sdk/terminal/tui/annotateCommand.d.ts +3 -0
  297. package/dist/sdk/terminal/tui/annotateCommand.js +22 -0
  298. package/dist/sdk/terminal/tui/chrome.d.ts +64 -0
  299. package/dist/sdk/terminal/tui/chrome.js +169 -0
  300. package/dist/sdk/terminal/tui/clipboardFiles.d.ts +11 -0
  301. package/dist/sdk/terminal/tui/clipboardFiles.js +74 -0
  302. package/dist/sdk/terminal/tui/commandPages.d.ts +11 -0
  303. package/dist/sdk/terminal/tui/commandPages.js +111 -0
  304. package/dist/sdk/terminal/tui/commands.d.ts +46 -0
  305. package/dist/sdk/terminal/tui/commands.js +399 -0
  306. package/dist/sdk/terminal/tui/dialogGeometry.d.ts +27 -0
  307. package/dist/sdk/terminal/tui/dialogGeometry.js +52 -0
  308. package/dist/sdk/terminal/tui/dialogs.d.ts +80 -0
  309. package/dist/sdk/terminal/tui/dialogs.js +370 -0
  310. package/dist/sdk/terminal/tui/keybindings.d.ts +11 -0
  311. package/dist/sdk/terminal/tui/keybindings.js +49 -0
  312. package/dist/sdk/terminal/tui/list.d.ts +73 -0
  313. package/dist/sdk/terminal/tui/list.js +196 -0
  314. package/dist/sdk/terminal/tui/modeChoices.d.ts +42 -0
  315. package/dist/sdk/terminal/tui/modeChoices.js +70 -0
  316. package/dist/sdk/terminal/tui/modelPicker.d.ts +55 -0
  317. package/dist/sdk/terminal/tui/modelPicker.js +150 -0
  318. package/dist/sdk/terminal/tui/mouse.d.ts +3 -0
  319. package/dist/sdk/terminal/tui/mouse.js +3 -0
  320. package/dist/sdk/terminal/tui/page.d.ts +17 -0
  321. package/dist/sdk/terminal/tui/page.js +1 -0
  322. package/dist/sdk/terminal/tui/pageOverlay.d.ts +27 -0
  323. package/dist/sdk/terminal/tui/pageOverlay.js +156 -0
  324. package/dist/sdk/terminal/tui/pages/accountsPage.d.ts +76 -0
  325. package/dist/sdk/terminal/tui/pages/accountsPage.js +409 -0
  326. package/dist/sdk/terminal/tui/pages/agentsPage.d.ts +74 -0
  327. package/dist/sdk/terminal/tui/pages/agentsPage.js +190 -0
  328. package/dist/sdk/terminal/tui/pages/annotatePage.d.ts +94 -0
  329. package/dist/sdk/terminal/tui/pages/annotatePage.js +341 -0
  330. package/dist/sdk/terminal/tui/pages/browserPage.d.ts +87 -0
  331. package/dist/sdk/terminal/tui/pages/browserPage.js +738 -0
  332. package/dist/sdk/terminal/tui/pages/componentsPage.d.ts +47 -0
  333. package/dist/sdk/terminal/tui/pages/componentsPage.js +119 -0
  334. package/dist/sdk/terminal/tui/pages/doctorPage.d.ts +39 -0
  335. package/dist/sdk/terminal/tui/pages/doctorPage.js +233 -0
  336. package/dist/sdk/terminal/tui/pages/hubPage.d.ts +39 -0
  337. package/dist/sdk/terminal/tui/pages/hubPage.js +128 -0
  338. package/dist/sdk/terminal/tui/pages/logPage.d.ts +38 -0
  339. package/dist/sdk/terminal/tui/pages/logPage.js +189 -0
  340. package/dist/sdk/terminal/tui/pages/notesPage.d.ts +75 -0
  341. package/dist/sdk/terminal/tui/pages/notesPage.js +201 -0
  342. package/dist/sdk/terminal/tui/pages/permissionsPage.d.ts +44 -0
  343. package/dist/sdk/terminal/tui/pages/permissionsPage.js +124 -0
  344. package/dist/sdk/terminal/tui/pages/pluginsPage.d.ts +57 -0
  345. package/dist/sdk/terminal/tui/pages/pluginsPage.js +243 -0
  346. package/dist/sdk/terminal/tui/pages/settingsPage.d.ts +63 -0
  347. package/dist/sdk/terminal/tui/pages/settingsPage.js +103 -0
  348. package/dist/sdk/terminal/tui/pages/subagentsPage.d.ts +23 -0
  349. package/dist/sdk/terminal/tui/pages/subagentsPage.js +70 -0
  350. package/dist/sdk/terminal/tui/pages/trajectoryPage.d.ts +65 -0
  351. package/dist/sdk/terminal/tui/pages/trajectoryPage.js +450 -0
  352. package/dist/sdk/terminal/tui/pages/worktreesPage.d.ts +72 -0
  353. package/dist/sdk/terminal/tui/pages/worktreesPage.js +203 -0
  354. package/dist/sdk/terminal/tui/piAdapter.d.ts +18 -0
  355. package/dist/sdk/terminal/tui/piAdapter.js +48 -0
  356. package/dist/sdk/terminal/tui/planMode.d.ts +2 -0
  357. package/dist/sdk/terminal/tui/planMode.js +2 -0
  358. package/dist/sdk/terminal/tui/pluginCommands.d.ts +14 -0
  359. package/dist/sdk/terminal/tui/pluginCommands.js +27 -0
  360. package/dist/sdk/terminal/tui/questionPicker.d.ts +20 -0
  361. package/dist/sdk/terminal/tui/questionPicker.js +150 -0
  362. package/dist/sdk/terminal/tui/questions.d.ts +21 -0
  363. package/dist/sdk/terminal/tui/questions.js +42 -0
  364. package/dist/sdk/terminal/tui/runtime.d.ts +114 -0
  365. package/dist/sdk/terminal/tui/runtime.js +443 -0
  366. package/dist/sdk/terminal/tui/search.d.ts +22 -0
  367. package/dist/sdk/terminal/tui/search.js +60 -0
  368. package/dist/sdk/terminal/tui/selection.d.ts +16 -0
  369. package/dist/sdk/terminal/tui/selection.js +16 -0
  370. package/dist/sdk/terminal/tui/sessionUi.d.ts +3 -0
  371. package/dist/sdk/terminal/tui/sessionUi.js +30 -0
  372. package/dist/sdk/terminal/tui/settingsModel.d.ts +14 -0
  373. package/dist/sdk/terminal/tui/settingsModel.js +114 -0
  374. package/dist/sdk/terminal/tui/sideQuestion.d.ts +53 -0
  375. package/dist/sdk/terminal/tui/sideQuestion.js +230 -0
  376. package/dist/sdk/terminal/tui/skillInvocation.d.ts +9 -0
  377. package/dist/sdk/terminal/tui/skillInvocation.js +43 -0
  378. package/dist/sdk/terminal/tui/status.d.ts +18 -0
  379. package/dist/sdk/terminal/tui/status.js +67 -0
  380. package/dist/sdk/terminal/tui/theme.d.ts +45 -0
  381. package/dist/sdk/terminal/tui/theme.js +176 -0
  382. package/dist/sdk/terminal/tui/treeModel.d.ts +79 -0
  383. package/dist/sdk/terminal/tui/treeModel.js +483 -0
  384. package/dist/sdk/terminal/tui/treePicker.d.ts +49 -0
  385. package/dist/sdk/terminal/tui/treePicker.js +251 -0
  386. package/dist/sdk/terminal/tui/ui.d.ts +49 -0
  387. package/dist/sdk/terminal/tui/ui.js +149 -0
  388. package/dist/sdk/terminal/tui/workingStatus.d.ts +9 -0
  389. package/dist/sdk/terminal/tui/workingStatus.js +229 -0
  390. package/dist/sdk/tools/askUser.d.ts +6 -0
  391. package/dist/sdk/tools/askUser.js +92 -0
  392. package/dist/sdk/tools/checklist.d.ts +9 -0
  393. package/dist/sdk/tools/checklist.js +54 -0
  394. package/dist/sdk/tools/definitions.d.ts +30 -0
  395. package/dist/sdk/tools/definitions.js +117 -0
  396. package/dist/sdk/tools/dispatch.d.ts +16 -0
  397. package/dist/sdk/tools/dispatch.js +67 -0
  398. package/dist/sdk/tools/harnessTools.d.ts +8 -0
  399. package/dist/sdk/tools/harnessTools.js +20 -0
  400. package/dist/sdk/tools/sessionName.d.ts +7 -0
  401. package/dist/sdk/tools/sessionName.js +31 -0
  402. package/dist/sdk/tools/spawnSubagent.d.ts +4 -0
  403. package/dist/sdk/tools/spawnSubagent.js +58 -0
  404. package/dist/sdk/tools/types.d.ts +48 -0
  405. package/dist/sdk/tools/types.js +1 -0
  406. package/dist/sdk/variant/components.d.ts +34 -0
  407. package/dist/sdk/variant/components.js +230 -0
  408. package/dist/sdk/variant/materialise.d.ts +66 -0
  409. package/dist/sdk/variant/materialise.js +81 -0
  410. package/dist/sdk/variant/migrate.d.ts +4 -0
  411. package/dist/sdk/variant/migrate.js +41 -0
  412. package/dist/sdk/variant/seed.d.ts +20 -0
  413. package/dist/sdk/variant/seed.js +116 -0
  414. package/dist/sdk/variant/store.d.ts +82 -0
  415. package/dist/sdk/variant/store.js +151 -0
  416. package/dist/sdk/variant/surface.d.ts +56 -0
  417. package/dist/sdk/variant/surface.js +81 -0
  418. package/dist/sdk/variant/trust.d.ts +27 -0
  419. package/dist/sdk/variant/trust.js +64 -0
  420. package/dist/sdk/variant/variant.d.ts +71 -0
  421. package/dist/sdk/variant/variant.js +331 -0
  422. package/dist/sdk/web/markdown.d.ts +10 -0
  423. package/dist/sdk/web/markdown.js +66 -0
  424. package/dist/sdk/web/part.d.ts +10 -0
  425. package/dist/sdk/web/part.js +6 -0
  426. package/dist/sdk/web/safeRequest.d.ts +34 -0
  427. package/dist/sdk/web/safeRequest.js +175 -0
  428. package/dist/sdk/web/search.d.ts +53 -0
  429. package/dist/sdk/web/search.js +168 -0
  430. package/dist/sdk/web/serverMethods.d.ts +3 -0
  431. package/dist/sdk/web/serverMethods.js +7 -0
  432. package/dist/sdk/web/text.d.ts +2 -0
  433. package/dist/sdk/web/text.js +7 -0
  434. package/dist/sdk/web/tools.d.ts +22 -0
  435. package/dist/sdk/web/tools.js +195 -0
  436. package/dist/sdk/web/turndown-plugin-gfm.d.ts +4 -0
  437. package/dist/sdk/wiki/notes.d.ts +68 -0
  438. package/dist/sdk/wiki/notes.js +297 -0
  439. package/dist/sdk/wiki/serverMethods.d.ts +3 -0
  440. package/dist/sdk/wiki/serverMethods.js +26 -0
  441. package/dist/sdk/worktrees/cli.d.ts +11 -0
  442. package/dist/sdk/worktrees/cli.js +146 -0
  443. package/dist/sdk/worktrees/copy.d.ts +9 -0
  444. package/dist/sdk/worktrees/copy.js +111 -0
  445. package/dist/sdk/worktrees/git.d.ts +16 -0
  446. package/dist/sdk/worktrees/git.js +81 -0
  447. package/dist/sdk/worktrees/serverMethods.d.ts +3 -0
  448. package/dist/sdk/worktrees/serverMethods.js +30 -0
  449. package/dist/sdk/worktrees/service.d.ts +73 -0
  450. package/dist/sdk/worktrees/service.js +483 -0
  451. package/dist/sdk/worktrees/setup.d.ts +23 -0
  452. package/dist/sdk/worktrees/setup.js +65 -0
  453. package/dist/sdk/worktrees/types.d.ts +91 -0
  454. package/dist/sdk/worktrees/types.js +1 -0
  455. package/dist/sdk/world/actions.d.ts +23 -0
  456. package/dist/sdk/world/actions.js +31 -0
  457. package/dist/sdk/world/cli.d.ts +12 -0
  458. package/dist/sdk/world/cli.js +166 -0
  459. package/dist/sdk/world/images.d.ts +20 -0
  460. package/dist/sdk/world/images.js +48 -0
  461. package/dist/sdk/world/untrusted.d.ts +12 -0
  462. package/dist/sdk/world/untrusted.js +20 -0
  463. package/dist/sdk/world/world.d.ts +67 -0
  464. package/dist/sdk/world/world.js +79 -0
  465. package/dist/terminal-opentui.js +20778 -0
  466. package/dist/terminal-pi.js +794 -518
  467. package/docs/README.md +42 -0
  468. package/docs/architecture/00-overview.md +171 -0
  469. package/docs/architecture/01-extension-points.md +78 -0
  470. package/docs/architecture/02-sessions-and-runs.md +203 -0
  471. package/docs/architecture/03-variants.md +103 -0
  472. package/docs/architecture/04-prompt.md +122 -0
  473. package/docs/architecture/05-refinement.md +107 -0
  474. package/docs/architecture/06-plugins-and-capabilities.md +129 -0
  475. package/docs/architecture/07-tools-and-gate.md +103 -0
  476. package/docs/architecture/08-memory-and-history.md +94 -0
  477. package/docs/architecture/09-accounts-and-connectors.md +98 -0
  478. package/docs/architecture/10-server-protocol.md +193 -0
  479. package/docs/architecture/11-terminal.md +261 -0
  480. package/docs/architecture/12-storage.md +75 -0
  481. package/docs/architecture/13-world-tools.md +45 -0
  482. package/docs/architecture/14-surfaces-and-parity.md +89 -0
  483. package/docs/architecture/README.md +125 -0
  484. package/docs/architecture/proposals/PROP-0001-reporting-section.md +106 -0
  485. package/docs/architecture/proposals/PROP-0002-retain-rollout-workspaces.md +104 -0
  486. package/docs/architecture/proposals/PROP-0003-executor-settings.md +81 -0
  487. package/docs/architecture/proposals/PROP-0004-flexible-reporting-guidance.md +71 -0
  488. package/docs/architecture/proposals/PROP-0005-xharness-cli-name.md +78 -0
  489. package/docs/architecture/proposals/PROP-0006-run-checklist.md +70 -0
  490. package/docs/architecture/proposals/PROP-0007-run-continuation.md +80 -0
  491. package/docs/architecture/proposals/PROP-0008-lessons-from-runs.md +80 -0
  492. package/docs/architecture/proposals/PROP-0009-foundation-and-variants.md +78 -0
  493. package/docs/architecture/proposals/PROP-0010-session-names.md +73 -0
  494. package/docs/architecture/proposals/PROP-0011-doctor.md +63 -0
  495. package/docs/architecture/proposals/PROP-0012-release-baseline.md +56 -0
  496. package/docs/architecture/proposals/PROP-0013-resource-browser.md +58 -0
  497. package/docs/architecture/proposals/PROP-0014-fullscreen-browser-tabs.md +58 -0
  498. package/docs/architecture/proposals/PROP-0015-one-capability-surface.md +88 -0
  499. package/docs/architecture/proposals/PROP-0016-managed-worktrees.md +156 -0
  500. package/docs/architecture/proposals/PROP-0017-page-annotations.md +127 -0
  501. package/docs/architecture/proposals/PROP-0018-annotation-queue-and-app-targets.md +179 -0
  502. package/docs/architecture/proposals/PROP-0019-contextual-side-questions.md +122 -0
  503. package/docs/architecture/proposals/PROP-0020-builtin-feature-plugins.md +105 -0
  504. package/docs/architecture/proposals/PROP-0021-command-namespaces-and-duplicates.md +99 -0
  505. package/docs/architecture/proposals/PROP-0022-plan-only-questions.md +102 -0
  506. package/docs/architecture/proposals/PROP-0023-xagent-cli-name.md +61 -0
  507. package/docs/architecture/proposals/PROP-0024-question-sketch-previews.md +130 -0
  508. package/docs/architecture/proposals/PROP-0025-contextual-question-wireframes.md +49 -0
  509. package/docs/architecture/proposals/PROP-0026-connected-sketch-display.md +94 -0
  510. package/docs/architecture/proposals/PROP-0027-xingular-agent-product-identity.md +60 -0
  511. package/docs/architecture/proposals/PROP-0028-normalize-question-wireframes.md +55 -0
  512. package/docs/architecture/proposals/PROP-0029-agent-profiles.md +124 -0
  513. package/docs/architecture/proposals/PROP-0030-subagent-title.md +86 -0
  514. package/docs/architecture/proposals/README.md +101 -0
  515. package/docs/decisions/ADR-0002-native-subagent-lifecycle.md +49 -0
  516. package/docs/decisions/ADR-0003-shared-asynchronous-subagents.md +70 -0
  517. package/docs/decisions/ADR-0004-fullscreen-terminal-layout.md +50 -0
  518. package/docs/decisions/ADR-0005-app-provided-oauth-clients.md +54 -0
  519. package/docs/decisions/ADR-0006-opentui-only-terminal.md +47 -0
  520. package/docs/decisions/ADR-0007-reporting-section.md +33 -0
  521. package/docs/decisions/ADR-0008-flexible-reporting-guidance.md +38 -0
  522. package/docs/decisions/ADR-0009-xharness-command.md +39 -0
  523. package/docs/decisions/ADR-0010-lessons-in-the-wiki.md +31 -0
  524. package/docs/decisions/ADR-0011-foundation-and-variants.md +28 -0
  525. package/docs/decisions/ADR-0012-native-session-names.md +34 -0
  526. package/docs/decisions/ADR-0013-doctor.md +27 -0
  527. package/docs/decisions/ADR-0014-public-release-baseline.md +22 -0
  528. package/docs/decisions/ADR-0015-resource-browser.md +28 -0
  529. package/docs/decisions/ADR-0016-fullscreen-browser-tabs.md +31 -0
  530. package/docs/decisions/ADR-0017-one-capability-surface.md +34 -0
  531. package/docs/decisions/ADR-0018-builtin-feature-plugins.md +35 -0
  532. package/docs/decisions/ADR-0019-managed-git-worktrees.md +31 -0
  533. package/docs/decisions/ADR-0020-page-annotations.md +37 -0
  534. package/docs/decisions/ADR-0021-required-command-namespaces.md +40 -0
  535. package/docs/decisions/ADR-0022-plan-only-question-tools.md +34 -0
  536. package/docs/decisions/ADR-0023-contextual-side-question-runs.md +35 -0
  537. package/docs/decisions/ADR-0024-xagent-command.md +40 -0
  538. package/docs/decisions/ADR-0025-question-choice-sketches.md +49 -0
  539. package/docs/decisions/ADR-0026-contextual-question-wireframes.md +58 -0
  540. package/docs/decisions/ADR-0027-connected-sketch-display.md +60 -0
  541. package/docs/decisions/ADR-0028-xingular-agent-product-identity.md +56 -0
  542. package/docs/decisions/ADR-0029-normalized-question-wireframe-borders.md +33 -0
  543. package/docs/decisions/ADR-0030-agent-profiles.md +43 -0
  544. package/docs/doctor.md +80 -0
  545. package/docs/experiments/EXP-0001-terminal-input-latency/plan.md +81 -0
  546. package/docs/experiments/EXP-0001-terminal-input-latency/results.md +46 -0
  547. package/docs/experiments/EXP-0002-opentui-typing-latency/plan.md +70 -0
  548. package/docs/experiments/EXP-0002-opentui-typing-latency/results.md +92 -0
  549. package/docs/features/README.md +46 -0
  550. package/docs/features/automations/README.md +41 -0
  551. package/docs/features/cores/README.md +39 -0
  552. package/docs/features/google-harness2/README.md +52 -0
  553. package/docs/features/integrations/README.md +40 -0
  554. package/docs/features/interfaces/README.md +29 -0
  555. package/docs/features/memory/README.md +28 -0
  556. package/docs/future-work.md +48 -0
  557. package/docs/parity.md +78 -0
  558. package/docs/releases/1.0.0.md +40 -0
  559. package/docs/releases/4.0.0.md +46 -0
  560. package/docs/releases/README.md +41 -0
  561. package/docs/study/00-index.md +83 -0
  562. package/docs/study/arms/00-matrix.md +20 -0
  563. package/docs/study/arms/01-system-prompt.md +211 -0
  564. package/docs/study/arms/02-tools.md +79 -0
  565. package/docs/study/arms/03-subagents.md +90 -0
  566. package/docs/study/arms/04-skills.md +75 -0
  567. package/docs/study/arms/05-context-management.md +90 -0
  568. package/docs/study/arms/06-memory.md +90 -0
  569. package/docs/study/arms/07-governance.md +71 -0
  570. package/docs/study/arms/08-execution.md +69 -0
  571. package/docs/study/arms/09-observability.md +60 -0
  572. package/docs/study/arms/10-refinement.md +110 -0
  573. package/docs/study/autonomous-engineering-sources.md +277 -0
  574. package/docs/study/autonomy-sources.md +147 -0
  575. package/docs/study/btw-comparison.md +37 -0
  576. package/docs/study/feature-gap-review.md +42 -0
  577. package/docs/study/insights.md +123 -0
  578. package/docs/study/proactive-autonomy.md +408 -0
  579. package/docs/study/roadmap.md +72 -0
  580. package/docs/study/sources/claude-code.md +44 -0
  581. package/docs/study/sources/deepseek-harness.md +102 -0
  582. package/docs/study/sources/harness2.md +50 -0
  583. package/docs/study/sources/kimi-cli.md +42 -0
  584. package/docs/study/sources/omp.md +93 -0
  585. package/docs/study/sources/opencode.md +43 -0
  586. package/docs/study/sources/openhands.md +46 -0
  587. package/docs/study/sources/smolagents.md +40 -0
  588. package/docs/study/sources/swe-agent.md +34 -0
  589. package/docs/study/tui-resource-browser.md +78 -0
  590. package/docs/system-prompt-design.md +196 -0
  591. package/docs/terminal-tui.md +707 -58
  592. package/package.json +43 -13
  593. package/docs/evidence/terminal-2026-10-17/120x40-completed-transcript.ansi.gz +0 -0
  594. package/docs/evidence/terminal-2026-10-17/40x20-settings-interaction.ansi.gz +0 -0
  595. package/docs/evidence/terminal-2026-10-17/40x20-settings-keyboard.ansi.gz +0 -0
  596. package/docs/evidence/terminal-2026-10-17/40x20-welcome.ansi.gz +0 -0
  597. package/docs/evidence/terminal-2026-10-17/80x24-approval-0.ansi.gz +0 -0
  598. package/docs/evidence/terminal-2026-10-17/80x24-question.ansi.gz +0 -0
  599. package/docs/evidence/terminal-2026-10-17/verification.json +0 -130
  600. package/docs/evidence/terminal-2026-10-17-followup/120x40-completed-transcript.ansi.gz +0 -0
  601. package/docs/evidence/terminal-2026-10-17-followup/40x20-settings-interaction.ansi.gz +0 -0
  602. package/docs/evidence/terminal-2026-10-17-followup/40x20-settings-keyboard.ansi.gz +0 -0
  603. package/docs/evidence/terminal-2026-10-17-followup/40x20-welcome.ansi.gz +0 -0
  604. package/docs/evidence/terminal-2026-10-17-followup/80x24-approval-0.ansi.gz +0 -0
  605. package/docs/evidence/terminal-2026-10-17-followup/80x24-plugin-light.ansi.gz +0 -0
  606. package/docs/evidence/terminal-2026-10-17-followup/80x24-question-batch.ansi.gz +0 -0
  607. package/docs/evidence/terminal-2026-10-17-followup/80x24-question.ansi.gz +0 -0
  608. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-approval-0.ansi.gz +0 -0
  609. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-plugin-light.ansi.gz +0 -0
  610. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-question-batch.ansi.gz +0 -0
  611. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-question.ansi.gz +0 -0
  612. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/verification.json +0 -95
  613. package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-approval-0.ansi.gz +0 -0
  614. package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-plugin-light.ansi.gz +0 -0
  615. package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-question-batch.ansi.gz +0 -0
  616. package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-question.ansi.gz +0 -0
  617. package/docs/evidence/terminal-2026-10-17-followup/global-install/README.md +0 -27
  618. package/docs/evidence/terminal-2026-10-17-followup/global-install/shell-command-80x24.ansi.gz +0 -0
  619. package/docs/evidence/terminal-2026-10-17-followup/global-install/shell-command.json +0 -18
  620. package/docs/evidence/terminal-2026-10-17-followup/global-install/verification.json +0 -95
  621. package/docs/evidence/terminal-2026-10-17-followup/harness-reference-80x24.json.gz +0 -0
  622. package/docs/evidence/terminal-2026-10-17-followup/harness-reference-final-80x24.json.gz +0 -0
  623. package/docs/evidence/terminal-2026-10-17-followup/harness-reference-scenario.json +0 -60
  624. package/docs/evidence/terminal-2026-10-17-followup/live-codex/README.md +0 -24
  625. package/docs/evidence/terminal-2026-10-17-followup/live-codex/complete-80x24.ansi.gz +0 -0
  626. package/docs/evidence/terminal-2026-10-17-followup/live-codex/verification.json +0 -57
  627. package/docs/evidence/terminal-2026-10-17-followup/omp-reference-80x24-early.json.gz +0 -0
  628. package/docs/evidence/terminal-2026-10-17-followup/omp-reference-80x24.json.gz +0 -0
  629. package/docs/evidence/terminal-2026-10-17-followup/omp-reference-scenario.json +0 -58
  630. package/docs/evidence/terminal-2026-10-17-followup/omp-supplemental-static.json.gz +0 -0
  631. package/docs/evidence/terminal-2026-10-17-followup/rea-artifacts.json +0 -320
  632. package/docs/evidence/terminal-2026-10-17-followup/reference-comparison.json +0 -30
  633. package/docs/evidence/terminal-2026-10-17-followup/reference-comparison.md +0 -133
  634. package/docs/evidence/terminal-2026-10-17-followup/reference-source-observations.json +0 -20
  635. package/docs/evidence/terminal-2026-10-17-followup/verification.json +0 -207
  636. package/src/accounts/accounts.test.ts +0 -333
  637. package/src/accounts/accounts.ts +0 -658
  638. package/src/accounts/env.test.ts +0 -95
  639. package/src/accounts/env.ts +0 -338
  640. package/src/accounts/secrets.ts +0 -50
  641. package/src/accounts/store.ts +0 -338
  642. package/src/capabilities/api.ts +0 -75
  643. package/src/capabilities/runSnapshot.ts +0 -59
  644. package/src/capabilities/types.ts +0 -34
  645. package/src/cli.ts +0 -118
  646. package/src/core/bus.ts +0 -34
  647. package/src/core/changes.ts +0 -33
  648. package/src/core/env.ts +0 -27
  649. package/src/core/errors.ts +0 -32
  650. package/src/core/frontmatter.ts +0 -47
  651. package/src/core/fs.test.ts +0 -38
  652. package/src/core/fs.ts +0 -92
  653. package/src/core/index.ts +0 -193
  654. package/src/core/path.test.ts +0 -14
  655. package/src/core/path.ts +0 -79
  656. package/src/core/projects.ts +0 -90
  657. package/src/core/text.ts +0 -39
  658. package/src/harness.ts +0 -312
  659. package/src/hub/catalog.json +0 -123
  660. package/src/hub/cli.ts +0 -59
  661. package/src/hub/hub.test.ts +0 -205
  662. package/src/hub/hub.ts +0 -256
  663. package/src/hub/schema.ts +0 -81
  664. package/src/index.ts +0 -75
  665. package/src/mcp/connections.ts +0 -614
  666. package/src/mcp/manager.ts +0 -130
  667. package/src/mcp/oauth.ts +0 -195
  668. package/src/mcp/scopeMigration.test.ts +0 -79
  669. package/src/mcp/scopeMigration.ts +0 -204
  670. package/src/mcp/service.test.ts +0 -376
  671. package/src/mcp/service.ts +0 -549
  672. package/src/mcp/types.ts +0 -108
  673. package/src/memory/api.test.ts +0 -82
  674. package/src/memory/api.ts +0 -303
  675. package/src/memory/blocks.test.ts +0 -78
  676. package/src/memory/blocks.ts +0 -408
  677. package/src/memory/caller.ts +0 -69
  678. package/src/memory/curation.test.ts +0 -163
  679. package/src/memory/curation.ts +0 -64
  680. package/src/memory/dispatch.ts +0 -59
  681. package/src/memory/facts.test.ts +0 -41
  682. package/src/memory/facts.ts +0 -248
  683. package/src/memory/graph.ts +0 -103
  684. package/src/memory/health.test.ts +0 -130
  685. package/src/memory/health.ts +0 -74
  686. package/src/memory/maintainer.ts +0 -272
  687. package/src/memory/maintenance.test.ts +0 -176
  688. package/src/memory/maintenance.ts +0 -518
  689. package/src/memory/migrate.ts +0 -79
  690. package/src/memory/operations.ts +0 -150
  691. package/src/memory/proposals.test.ts +0 -168
  692. package/src/memory/proposals.ts +0 -584
  693. package/src/memory/recall.test.ts +0 -115
  694. package/src/memory/recall.ts +0 -278
  695. package/src/memory/references.ts +0 -77
  696. package/src/memory/runContext.ts +0 -93
  697. package/src/memory/secrets.ts +0 -6
  698. package/src/memory/store.test.ts +0 -66
  699. package/src/memory/store.ts +0 -385
  700. package/src/memory/wiki.test.ts +0 -47
  701. package/src/memory/wiki.ts +0 -422
  702. package/src/memory/wikiIndex.test.ts +0 -88
  703. package/src/memory/wikiIndex.ts +0 -116
  704. package/src/plugins/api.ts +0 -181
  705. package/src/plugins/attachments.test.ts +0 -84
  706. package/src/plugins/attachments.ts +0 -141
  707. package/src/plugins/builtin.ts +0 -82
  708. package/src/plugins/catalogue.test.ts +0 -254
  709. package/src/plugins/catalogue.ts +0 -251
  710. package/src/plugins/cli.ts +0 -184
  711. package/src/plugins/discover.ts +0 -151
  712. package/src/plugins/firstParty.test.ts +0 -143
  713. package/src/plugins/firstParty.ts +0 -129
  714. package/src/plugins/hooks.test.ts +0 -250
  715. package/src/plugins/hooks.ts +0 -239
  716. package/src/plugins/identity.ts +0 -37
  717. package/src/plugins/install.test.ts +0 -107
  718. package/src/plugins/install.ts +0 -106
  719. package/src/plugins/inventory.ts +0 -123
  720. package/src/plugins/manifest.ts +0 -76
  721. package/src/plugins/plugins.test.ts +0 -205
  722. package/src/plugins/plugins.ts +0 -189
  723. package/src/plugins/proposal.ts +0 -121
  724. package/src/plugins/runtime.test.ts +0 -40
  725. package/src/plugins/runtime.ts +0 -82
  726. package/src/plugins/trust.ts +0 -142
  727. package/src/plugins/types.ts +0 -149
  728. package/src/prompt/compile.test.ts +0 -261
  729. package/src/prompt/compile.ts +0 -732
  730. package/src/server/methods.ts +0 -349
  731. package/src/server/remote.ts +0 -77
  732. package/src/server/rpc.ts +0 -116
  733. package/src/server/serve.ts +0 -28
  734. package/src/server/server.test.ts +0 -174
  735. package/src/sessions/approvals.ts +0 -118
  736. package/src/sessions/contracts.ts +0 -336
  737. package/src/sessions/conversation.test.ts +0 -177
  738. package/src/sessions/extensionSession.test.ts +0 -74
  739. package/src/sessions/extensionUi.test.ts +0 -65
  740. package/src/sessions/extensionUi.ts +0 -102
  741. package/src/sessions/history.ts +0 -51
  742. package/src/sessions/lineageJoin.ts +0 -75
  743. package/src/sessions/policy.ts +0 -36
  744. package/src/sessions/pricing.ts +0 -60
  745. package/src/sessions/questionBatches.test.ts +0 -110
  746. package/src/sessions/reasoningSummaries.ts +0 -59
  747. package/src/sessions/registry.ts +0 -381
  748. package/src/sessions/runIndex.ts +0 -99
  749. package/src/sessions/runStore.test.ts +0 -152
  750. package/src/sessions/runStore.ts +0 -332
  751. package/src/sessions/runner.ts +0 -604
  752. package/src/sessions/runtimeResources.test.ts +0 -61
  753. package/src/sessions/sessions.test.ts +0 -549
  754. package/src/sessions/sessions.ts +0 -339
  755. package/src/skills/registry.test.ts +0 -104
  756. package/src/skills/registry.ts +0 -413
  757. package/src/terminal/accountsMenu.test.ts +0 -225
  758. package/src/terminal/accountsMenu.ts +0 -382
  759. package/src/terminal/cli.ts +0 -149
  760. package/src/terminal/client.ts +0 -74
  761. package/src/terminal/control.test.ts +0 -23
  762. package/src/terminal/control.ts +0 -23
  763. package/src/terminal/controller.ts +0 -291
  764. package/src/terminal/hubMenu.ts +0 -24
  765. package/src/terminal/launch.test.ts +0 -25
  766. package/src/terminal/launch.ts +0 -48
  767. package/src/terminal/piExtension.lifecycle.test.ts +0 -55
  768. package/src/terminal/piExtension.ts +0 -259
  769. package/src/terminal/pluginControl.test.ts +0 -146
  770. package/src/terminal/pluginMenu.ts +0 -112
  771. package/src/terminal/socket.test.ts +0 -71
  772. package/src/terminal/socket.ts +0 -232
  773. package/src/terminal/standalone.test.ts +0 -167
  774. package/src/terminal/standalone.ts +0 -153
  775. package/src/terminal/terminal.test.ts +0 -399
  776. package/src/terminal/terminals.ts +0 -553
  777. package/src/terminal/tui/application.test.ts +0 -114
  778. package/src/terminal/tui/application.ts +0 -491
  779. package/src/terminal/tui/commands.test.ts +0 -218
  780. package/src/terminal/tui/commands.ts +0 -361
  781. package/src/terminal/tui/dialogs.ts +0 -301
  782. package/src/terminal/tui/editor.test.ts +0 -84
  783. package/src/terminal/tui/editor.ts +0 -79
  784. package/src/terminal/tui/keybindings.test.ts +0 -22
  785. package/src/terminal/tui/keybindings.ts +0 -50
  786. package/src/terminal/tui/piAdapter.ts +0 -62
  787. package/src/terminal/tui/presentation.test.ts +0 -79
  788. package/src/terminal/tui/questions.test.ts +0 -41
  789. package/src/terminal/tui/questions.ts +0 -47
  790. package/src/terminal/tui/runtime.socket.test.ts +0 -104
  791. package/src/terminal/tui/runtime.test.ts +0 -215
  792. package/src/terminal/tui/runtime.ts +0 -388
  793. package/src/terminal/tui/sessionUi.ts +0 -24
  794. package/src/terminal/tui/settings.test.ts +0 -150
  795. package/src/terminal/tui/settings.ts +0 -188
  796. package/src/terminal/tui/status.test.ts +0 -70
  797. package/src/terminal/tui/status.ts +0 -109
  798. package/src/terminal/tui/theme.ts +0 -174
  799. package/src/terminal/tui/tools.test.ts +0 -145
  800. package/src/terminal/tui/tools.ts +0 -142
  801. package/src/terminal/tui/transcript.test.ts +0 -25
  802. package/src/terminal/tui/transcript.ts +0 -124
  803. package/src/terminal/tui/ui.test.ts +0 -313
  804. package/src/terminal/tui/ui.ts +0 -166
  805. package/src/terminal/tui/welcome.ts +0 -102
  806. package/src/tools/askUser.test.ts +0 -69
  807. package/src/tools/askUser.ts +0 -59
  808. package/src/tools/definitions.ts +0 -187
  809. package/src/tools/maintenance.ts +0 -24
  810. package/src/tools/memoryTools.ts +0 -22
  811. package/src/tools/pluginPropose.ts +0 -41
  812. package/src/tools/registryWrite.test.ts +0 -101
  813. package/src/tools/registryWrite.ts +0 -182
  814. package/src/tools/spawnSubagent.ts +0 -92
  815. package/src/tools/types.ts +0 -39
  816. package/src/web/safeRequest.ts +0 -171
  817. package/src/web/text.ts +0 -53
  818. package/src/web/tools.ts +0 -134
  819. package/src/web/web.test.ts +0 -141
@@ -0,0 +1,29 @@
1
+ import { z } from 'zod';
2
+ export const findingSchema = z.object({
3
+ id: z.string(), category: z.string(), title: z.string(),
4
+ status: z.enum(['pass', 'warning', 'fail', 'disabled', 'blocked', 'unverified']),
5
+ verification: z.enum(['local', 'live']), evidence: z.string(), remedy: z.string().optional(),
6
+ checkedAt: z.string()
7
+ });
8
+ export const doctorInputSchema = z.object({
9
+ context: z.object({
10
+ caller: z.record(z.string(), z.unknown()).default({}), cwd: z.string().min(1),
11
+ accountId: z.string().nullable(), model: z.string().nullable(), tools: z.array(z.string()),
12
+ variant: z.union([
13
+ z.object({ scope: z.string(), version: z.string().nullable().optional() }),
14
+ z.object({ dir: z.string(), scope: z.string().nullable().optional() })
15
+ ]).nullable().optional(),
16
+ capabilities: z.object({ version: z.literal(1), tools: z.array(z.string()), connectors: z.array(z.string()), contributions: z.array(z.string()) }).optional()
17
+ }),
18
+ mode: z.enum(['local', 'live']).default('local'),
19
+ checks: z.array(z.string()).default([]),
20
+ /** A trusted host attests that the person approved these exact checks. */
21
+ confirmed: z.boolean().default(false)
22
+ });
23
+ export const doctorReportSchema = z.object({
24
+ id: z.string(), state: z.enum(['running', 'completed', 'cancelled']),
25
+ startedAt: z.string(), endedAt: z.string().nullable(), mode: z.enum(['local', 'live']),
26
+ context: z.object({ accountId: z.string().nullable(), model: z.string().nullable() }),
27
+ completed: z.number(), total: z.number(), findings: z.array(findingSchema),
28
+ liveChecks: z.array(z.object({ id: z.string(), title: z.string(), notice: z.string() }))
29
+ });
@@ -0,0 +1,148 @@
1
+ import { Subagents } from "./sessions/subagentService.js";
2
+ import { Accounts } from "./accounts/accounts.js";
3
+ import { Hub, type HubOptions } from "./hub/hub.js";
4
+ import { type SecretStore } from "./accounts/secrets.js";
5
+ import { Bus } from "./core/bus.js";
6
+ import { type Directory, type HarnessEnv } from "./core/env.js";
7
+ import { ConnectedApps } from "./mcp/service.js";
8
+ import type { AppOAuthClients } from "./mcp/types.js";
9
+ import { Lessons } from "./history/lessons.js";
10
+ import type { RefineHost } from "./refine/host.js";
11
+ import { Refinements } from "./refine/service.js";
12
+ import { VariantTrust } from "./variant/trust.js";
13
+ import { World } from "./world/world.js";
14
+ import { Doctor } from "./doctor/service.js";
15
+ import type { Resolver } from "./plugins/discover.js";
16
+ import { Hooks } from "./plugins/hooks.js";
17
+ import { Plugins } from "./plugins/plugins.js";
18
+ import type { PluginDescriptor } from "./plugins/types.js";
19
+ import { Approvals } from "./sessions/approvals.js";
20
+ import type { ToolPolicy } from "./sessions/policy.js";
21
+ import { RunRegistry } from "./sessions/registry.js";
22
+ import type { SessionFactory } from "./sessions/runner.js";
23
+ import { Sessions } from "./sessions/sessions.js";
24
+ import { SideQuestions } from "./sessions/sideQuestions.js";
25
+ import { Terminals, type TerminalAssets } from "./terminal/terminals.js";
26
+ import { Worktrees } from "./worktrees/service.js";
27
+ import { AnnotationCapture } from "./annotations/capture.js";
28
+ import { NoteDeliveries } from "./annotations/delivery.js";
29
+ import type { WorktreesOptions } from "./worktrees/types.js";
30
+ export interface HarnessOptions {
31
+ /** Disable the generic backend when a host supplies its own browser tools. */
32
+ browser?: boolean;
33
+ hub?: HubOptions;
34
+ /** Where knowledge and history live. May be set later with `open`. */
35
+ dataRoot?: string | null;
36
+ /** Device-local state that never belongs in the data root: accounts, approvals, connections, sockets. */
37
+ stateDir: string;
38
+ /** Where credentials are kept. Defaults to an owner-only file in the state directory. */
39
+ secrets?: SecretStore;
40
+ /** How the harness names itself to a model. */
41
+ productName?: string;
42
+ directory?: Directory;
43
+ policy?: ToolPolicy;
44
+ /** Replaces Pi, for tests. */
45
+ sessionFactory?: SessionFactory;
46
+ /** Where refinement executions work and with what; without it, a temporary copy of the task's source and Pi's own tools. */
47
+ refineHost?: RefineHost;
48
+ /** Where the built commands a terminal session runs are, when they are not beside this package. */
49
+ assets?: TerminalAssets;
50
+ /** @deprecated Ignored. The Harness-owned OpenTUI frontend is the only terminal. */
51
+ piProgram?: () => string | null;
52
+ /** Folders of built-in skills, prompts, and rules for the component library, each laid out like `registry/`. */
53
+ builtins?: string[];
54
+ /**
55
+ * The application's own parts, described as plugins: which tools, prompt sections and tool
56
+ * groups each one provides. Data only; it changes what is listed, never what runs.
57
+ */
58
+ plugins?: PluginDescriptor[];
59
+ /** Replaces Pi's own search for extensions, skills, prompts and themes, for tests. */
60
+ resolver?: Resolver;
61
+ /**
62
+ * The application's own registered OAuth clients, so a connector it publishes needs no client
63
+ * from the person. Only a catalog entry listed in `ids` can use one, and nothing is stored.
64
+ */
65
+ oauthClients?: AppOAuthClients;
66
+ /** Replaces how a plugin's hooks file is read as a module, for tests. */
67
+ hookImporter?: (address: string) => Promise<unknown>;
68
+ /** Where managed worktrees are made, the prefix of branches they get, and how many `prune` keeps. */
69
+ worktrees?: WorktreesOptions;
70
+ }
71
+ /** What starting on a data root found and repaired. */
72
+ export interface Recovery {
73
+ interruptedRuns: number;
74
+ /** The runs marked interrupted, which the application may continue with `continueFrom`. */
75
+ interruptedRunIds: string[];
76
+ /** Notes in the Wiki. */
77
+ reindexedPages: number;
78
+ /** Where an earlier Wiki's memory, facts and revisions were moved, when they were. */
79
+ legacyWiki?: string | null;
80
+ /** Set when the storage migration failed; the old data is left as it was. */
81
+ migrationError: string | null;
82
+ }
83
+ declare class Env implements HarnessEnv {
84
+ readonly directory: Directory;
85
+ readonly productName: string;
86
+ dataRoot: string | null;
87
+ readonly bus: Bus;
88
+ constructor(dataRoot: string | null, directory: Directory, productName: string, bus: Bus);
89
+ get root(): string;
90
+ }
91
+ export declare class Harness {
92
+ private readonly browserEnabled;
93
+ readonly hub: Hub;
94
+ readonly bus: Bus;
95
+ readonly env: Env;
96
+ readonly stateDir: string;
97
+ readonly policy: ToolPolicy;
98
+ readonly accounts: Accounts;
99
+ readonly approvals: Approvals;
100
+ readonly runs: RunRegistry;
101
+ readonly apps: ConnectedApps;
102
+ readonly plugins: Plugins;
103
+ /** Code plugins gave the harness to run after memory, the Wiki or history changed. */
104
+ readonly hooks: Hooks;
105
+ /** Every part described as a plugin: the harness's own, then the application's. */
106
+ descriptors: readonly PluginDescriptor[];
107
+ applicationPlugins: ReadonlySet<string>;
108
+ readonly subagents: Subagents;
109
+ readonly sessions: Sessions;
110
+ /** Tool-free, run-backed questions over a redacted projection of the main conversation. */
111
+ readonly sideQuestions: SideQuestions;
112
+ /** Web, browser and computer tools (page 13). */
113
+ readonly world: World;
114
+ /** Which plugin code in variants a person trusted. */
115
+ readonly trust: VariantTrust;
116
+ /** Refinement: improving a variant from evidence of how it ran. */
117
+ readonly refine: Refinements;
118
+ /** Reflection on finished runs, when the `lessons` plugin is on (page 08). */
119
+ readonly lessons: Lessons;
120
+ refineHost: RefineHost | null;
121
+ readonly terminals: Terminals;
122
+ readonly doctor: Doctor;
123
+ /** Managed git worktrees sessions can work in (PROP-0016). */
124
+ readonly worktrees: Worktrees;
125
+ /** The terminal's visible browser for capturing page notes (PROP-0017). */
126
+ readonly noteCapture: AnnotationCapture;
127
+ /** Page notes on their way to a session (PROP-0018). */
128
+ readonly pageNotes: NoteDeliveries;
129
+ /** Resolves when what was loaded in the background at construction is in place. */
130
+ readonly ready: Promise<void>;
131
+ recovery: Recovery;
132
+ constructor(options: HarnessOptions);
133
+ get dataRoot(): string | null;
134
+ /** Sets the application's own parts, described as plugins. One with a harness plugin's id is ignored. */
135
+ describe(plugins: readonly PluginDescriptor[]): void;
136
+ /**
137
+ * Opens a data root: moves an earlier Wiki's memory and facts aside (once), lays out the Wiki,
138
+ * settles runs that never ended, and refreshes the history index. `agentIds` is accepted for
139
+ * hosts written against earlier versions and is not used.
140
+ */
141
+ open(dataRoot: string, _agentIds?: readonly string[]): Recovery;
142
+ /** Rebuilds the history index from the run records. Returns the notes in the Wiki. */
143
+ rebuildIndex(): number;
144
+ /** Stops live runs and refinements and releases the index. */
145
+ close(): Promise<void>;
146
+ }
147
+ export declare function createHarness(options: HarnessOptions): Harness;
148
+ export {};
@@ -0,0 +1,338 @@
1
+ // The harness, assembled: Pi sessions on isolated accounts, versioned variants that shape
2
+ // them, refinement that improves those variants from evidence, a compiled prompt, project notes,
3
+ // tools, and connected apps. An application embeds one of these and adds its own prompt
4
+ // sections, tools, and policy; nothing here knows what that application is.
5
+ import { Subagents } from "./sessions/subagentService.js";
6
+ import { mkdirSync } from 'node:fs';
7
+ import { join } from 'node:path';
8
+ import { Accounts } from "./accounts/accounts.js";
9
+ import { Hub } from "./hub/hub.js";
10
+ import * as capabilities from "./capabilities/api.js";
11
+ import { ensureSharedDir, isolateProcess } from "./accounts/env.js";
12
+ import { fileSecretStore } from "./accounts/secrets.js";
13
+ import { Bus, log } from "./core/bus.js";
14
+ import { DEFAULT_PRODUCT_NAME, EMPTY_DIRECTORY } from "./core/env.js";
15
+ import { HarnessError } from "./core/errors.js";
16
+ import { readJsonOr } from "./core/fs.js";
17
+ import { closeIndex } from "./core/index.js";
18
+ import { ConnectedApps } from "./mcp/service.js";
19
+ import { migrateConnectionScopes } from "./mcp/scopeMigration.js";
20
+ import { Lessons } from "./history/lessons.js";
21
+ import * as recall from "./history/recall.js";
22
+ import { Refinements } from "./refine/service.js";
23
+ import { configureBuiltins } from "./variant/components.js";
24
+ import { migrateVariantLayout } from "./variant/migrate.js";
25
+ import { VariantTrust } from "./variant/trust.js";
26
+ import * as notes from "./wiki/notes.js";
27
+ import * as pluginApi from "./plugins/api.js";
28
+ import * as pluginInstall from "./plugins/install.js";
29
+ import * as attachments from "./plugins/attachments.js";
30
+ import { HARNESS_PLUGINS } from "./plugins/builtin.js";
31
+ import { World } from "./world/world.js";
32
+ import { Doctor } from "./doctor/service.js";
33
+ import { builtinChecks } from "./doctor/checks.js";
34
+ import { diagnosticProbe } from "./doctor/probe.js";
35
+ import { Hooks } from "./plugins/hooks.js";
36
+ import { packageFolders, Plugins } from "./plugins/plugins.js";
37
+ import { approvalKey, Approvals } from "./sessions/approvals.js";
38
+ import { RunRegistry } from "./sessions/registry.js";
39
+ import { loadRun, markInterruptedRuns } from "./sessions/runStore.js";
40
+ import { Sessions } from "./sessions/sessions.js";
41
+ import { SideQuestions } from "./sessions/sideQuestions.js";
42
+ import { Terminals } from "./terminal/terminals.js";
43
+ import { Worktrees } from "./worktrees/service.js";
44
+ import { AnnotationCapture } from "./annotations/capture.js";
45
+ import { NoteDeliveries } from "./annotations/delivery.js";
46
+ class Env {
47
+ directory;
48
+ productName;
49
+ dataRoot;
50
+ bus;
51
+ constructor(dataRoot, directory, productName, bus) {
52
+ this.directory = directory;
53
+ this.productName = productName;
54
+ this.dataRoot = dataRoot;
55
+ this.bus = bus;
56
+ }
57
+ get root() {
58
+ if (!this.dataRoot)
59
+ throw new HarnessError('data_root_missing', 'Choose a data location first.', 'Open Settings → Projects and Storage.');
60
+ return this.dataRoot;
61
+ }
62
+ }
63
+ export class Harness {
64
+ browserEnabled;
65
+ hub;
66
+ bus = new Bus();
67
+ env;
68
+ stateDir;
69
+ policy;
70
+ accounts;
71
+ approvals;
72
+ runs;
73
+ apps;
74
+ plugins;
75
+ /** Code plugins gave the harness to run after memory, the Wiki or history changed. */
76
+ hooks;
77
+ /** Every part described as a plugin: the harness's own, then the application's. */
78
+ descriptors = HARNESS_PLUGINS;
79
+ applicationPlugins = new Set();
80
+ subagents;
81
+ sessions;
82
+ /** Tool-free, run-backed questions over a redacted projection of the main conversation. */
83
+ sideQuestions;
84
+ /** Web, browser and computer tools (page 13). */
85
+ world;
86
+ /** Which plugin code in variants a person trusted. */
87
+ trust;
88
+ /** Refinement: improving a variant from evidence of how it ran. */
89
+ refine;
90
+ /** Reflection on finished runs, when the `lessons` plugin is on (page 08). */
91
+ lessons;
92
+ refineHost;
93
+ terminals;
94
+ doctor;
95
+ /** Managed git worktrees sessions can work in (PROP-0016). */
96
+ worktrees;
97
+ /** The terminal's visible browser for capturing page notes (PROP-0017). */
98
+ noteCapture;
99
+ /** Page notes on their way to a session (PROP-0018). */
100
+ pageNotes;
101
+ /** Resolves when what was loaded in the background at construction is in place. */
102
+ ready;
103
+ recovery = { interruptedRuns: 0, interruptedRunIds: [], reindexedPages: 0, migrationError: null };
104
+ constructor(options) {
105
+ this.browserEnabled = options.browser !== false;
106
+ this.stateDir = options.stateDir;
107
+ mkdirSync(this.stateDir, { recursive: true });
108
+ // Before anything can start a session: no inherited credential, no `~/.pi`.
109
+ isolateProcess(join(this.stateDir, 'accounts'));
110
+ this.env = new Env(options.dataRoot || null, options.directory ?? EMPTY_DIRECTORY, options.productName ?? DEFAULT_PRODUCT_NAME, this.bus);
111
+ this.hub = new Hub(this, options.hub);
112
+ this.policy = options.policy ?? {};
113
+ configureBuiltins(options.builtins ?? []);
114
+ this.trust = new VariantTrust(this.stateDir);
115
+ this.refineHost = options.refineHost ?? null;
116
+ const secrets = options.secrets ?? fileSecretStore(join(this.stateDir, 'secrets.json'));
117
+ this.accounts = new Accounts({ dir: join(this.stateDir, 'accounts'), secrets, bus: this.bus });
118
+ this.approvals = new Approvals(this.stateDir, this.bus);
119
+ this.runs = new RunRegistry({
120
+ root: () => this.env.root,
121
+ automatic: async (run, target, operation, standing) => {
122
+ if (standing === 'switch')
123
+ return this.approvals.isAuto(approvalKey(run)) ? 'always' : null;
124
+ return this.approvals.automatic(run, target, (await this.policy.approval?.({ run, target, operation })) ?? {});
125
+ },
126
+ redact: (event) => this.apps.connections.redactEvent(event),
127
+ ended: (runId, sessionId) => this.apps.revokeRun(runId, sessionId)
128
+ });
129
+ this.apps = new ConnectedApps({ env: this.env, stateDir: this.stateDir, secrets, bus: this.bus, runs: this.runs, policy: this.policy, oauthClients: options.oauthClients });
130
+ this.plugins = new Plugins({ stateDir: this.stateDir, bus: this.bus, resolver: options.resolver, attachments: () => (this.env.dataRoot ? attachments.load(this.env.dataRoot) : null), packagesDir: () => (this.env.dataRoot ? join(this.env.dataRoot, 'plugins') : null) });
131
+ this.hooks = new Hooks({
132
+ stateDir: this.stateDir,
133
+ bus: this.bus,
134
+ // A hook runs for everyone or not at all, so only what is on everywhere and trusted counts.
135
+ // The shared folder stands in for an account: packages are the same for all of them.
136
+ wanted: async () => {
137
+ if (!this.env.dataRoot)
138
+ return [];
139
+ const shared = ensureSharedDir(join(this.stateDir, 'accounts'));
140
+ // A hook comes only with a package: one kept beside the data, or one the shared settings
141
+ // name. With neither there is nothing to look for, and Pi is not loaded to find that out.
142
+ const named = readJsonOr(join(shared, 'settings.json'), {}).packages;
143
+ if (!packageFolders(join(this.env.dataRoot, 'plugins')).length && !(Array.isArray(named) && named.length))
144
+ return [];
145
+ return (await this.plugins.loading({ cwd: this.stateDir, agentDir: shared, caller: {} })).hooks;
146
+ },
147
+ call: (connection, tool, args) => this.apps.callUnattended(connection, tool, args ?? {}),
148
+ importFile: options.hookImporter
149
+ });
150
+ let reloadTimer = null;
151
+ this.bus.on((notice) => {
152
+ if (notice.type !== 'plugins.changed' || reloadTimer)
153
+ return;
154
+ // Several changes arrive together when a plugin is installed or switched; one reload covers them.
155
+ reloadTimer = setTimeout(() => {
156
+ reloadTimer = null;
157
+ void this.hooks.reload();
158
+ }, 50);
159
+ reloadTimer.unref?.();
160
+ });
161
+ this.describe(options.plugins ?? []);
162
+ this.worktrees = new Worktrees(this.stateDir, options.worktrees);
163
+ this.noteCapture = new AnnotationCapture({ stateDir: this.stateDir });
164
+ this.subagents = new Subagents(this.env, this.runs, (input) => this.sessions.run(input), { descriptors: () => HARNESS_PLUGINS });
165
+ this.sessions = new Sessions({
166
+ subagents: this.subagents,
167
+ env: this.env,
168
+ accounts: this.accounts,
169
+ runs: this.runs,
170
+ policy: this.policy,
171
+ broker: this.apps,
172
+ plugins: this.plugins,
173
+ resolveCapabilities: (caller, tools, cwd) => capabilities.resolve(this, { agentId: caller.agentId ?? null, projectId: caller.projectId ?? null, cwd, tools }),
174
+ factory: options.sessionFactory,
175
+ trust: this.trust,
176
+ worktrees: this.worktrees
177
+ });
178
+ this.sideQuestions = new SideQuestions({ env: this.env, sessions: this.sessions, runs: this.runs });
179
+ this.world = new World({ root: () => this.env.root, stateDir: this.stateDir, secrets, browser: this.browserEnabled ? undefined : false, notesChanged: (sessionId, ids) => this.bus.emit({ type: 'annotations.changed', sessionId, ids }) });
180
+ // The harness's own world tools come first; a tool an application provides under the same name is not added again.
181
+ this.sessions.provide(this.world.provider());
182
+ this.doctor = new Doctor({
183
+ checks: context => builtinChecks(this, context, secrets, options.assets),
184
+ probe: (context, signal, action) => diagnosticProbe(this, context, signal, action)
185
+ });
186
+ const refineRuntime = { root: () => this.env.root, runs: this.runs, run: (input) => this.sessions.run(input) };
187
+ this.refine = new Refinements({ root: () => this.env.root, bus: this.bus, trust: this.trust, host: () => this.refineHost, runtime: refineRuntime });
188
+ this.lessons = new Lessons({ root: () => this.env.root, runtime: refineRuntime });
189
+ this.pageNotes = new NoteDeliveries({ root: () => this.env.root, bus: this.bus, terminals: () => this.terminals ?? null });
190
+ this.terminals = new Terminals({ trust: this.trust, subagents: this.subagents, sideQuestions: this.sideQuestions, resolveCapabilities: (caller, tools, cwd) => capabilities.resolve(this, { agentId: caller.agentId ?? null, projectId: caller.projectId ?? null, cwd, tools }), env: this.env, stateDir: this.stateDir, accounts: this.accounts, runs: this.runs, approvals: this.approvals, apps: this.apps, policy: this.policy, bus: this.bus, plugins: this.plugins, pluginControl: { list: (scope) => pluginApi.list(this, scope), attach: (params, on) => pluginApi.attach(this, params, on), trust: (scope) => pluginApi.trust(this, scope), untrust: (scope) => pluginApi.untrust(this, scope), configure: (params) => pluginApi.configure(this, params), install: params => pluginInstall.install(this, params), remove: params => pluginInstall.remove(this, params) }, assets: options.assets, hub: this.hub, world: this.world, doctor: this.doctor, worktrees: this.worktrees, noteCapture: this.noteCapture, pageNotes: this.pageNotes });
191
+ this.ready = this.apps.start().catch((error) => log('connected apps', error instanceof Error ? error.message : String(error)));
192
+ this.runs.listen((event, run) => {
193
+ this.accounts.onRunEvent(event, run);
194
+ // Each run is indexed when it ends, so the next turn can already recall it.
195
+ if (event.type === 'completed' || event.type === 'failed')
196
+ recall.indexRun(this.env.root, event.runId);
197
+ if (run?.trigger === 'doctor')
198
+ return;
199
+ const runEnded = event.type === 'completed' || event.type === 'failed' || (event.type === 'status.changed' && event.payload.status === 'interrupted');
200
+ if (runEnded && run?.sessionId) {
201
+ // Notes sent with "Proceed now" while this session was working go out now; the terminal
202
+ // needs a moment to see its run as ended.
203
+ setTimeout(() => void this.pageNotes.runEnded(run.sessionId).catch((error) => log('page notes', error instanceof Error ? error.message : String(error))), 250).unref?.();
204
+ }
205
+ if ((event.type === 'completed' || event.type === 'failed') && run) {
206
+ if (event.type === 'completed')
207
+ this.lessons.consider(run);
208
+ this.hooks.emit({ type: 'history.run.ended', runId: run.id, sessionId: run.sessionId, status: run.status, goal: run.goal ?? null, agentId: run.agentId ?? null, projectId: run.projectId ?? null, startedAt: run.startedAt, endedAt: run.endedAt ?? null, at: event.timestamp });
209
+ }
210
+ });
211
+ }
212
+ get dataRoot() {
213
+ return this.env.dataRoot;
214
+ }
215
+ /** Sets the application's own parts, described as plugins. One with a harness plugin's id is ignored. */
216
+ describe(plugins) {
217
+ const foundation = HARNESS_PLUGINS.filter(plugin => this.browserEnabled || plugin.id !== 'browser');
218
+ const own = new Set(foundation.map((plugin) => plugin.id));
219
+ const supplied = plugins.filter((plugin) => plugin && typeof plugin.id === 'string' && !own.has(plugin.id));
220
+ this.descriptors = [...foundation, ...supplied];
221
+ this.applicationPlugins = new Set(supplied.map((plugin) => plugin.id));
222
+ }
223
+ /**
224
+ * Opens a data root: moves an earlier Wiki's memory and facts aside (once), lays out the Wiki,
225
+ * settles runs that never ended, and refreshes the history index. `agentIds` is accepted for
226
+ * hosts written against earlier versions and is not used.
227
+ */
228
+ open(dataRoot, _agentIds = []) {
229
+ if (this.hub.busy && this.env.dataRoot !== dataRoot)
230
+ throw new HarnessError('hub_busy', 'Wait for the hub installation before changing the data location.');
231
+ if (this.env.dataRoot && this.env.dataRoot !== dataRoot)
232
+ closeIndex(this.env.dataRoot);
233
+ this.env.dataRoot = dataRoot;
234
+ this.hub.watch(dataRoot);
235
+ const root = dataRoot;
236
+ this.hooks.watch(notes.wikiDir(root));
237
+ void this.hooks.reload();
238
+ for (const folder of ['registry/skills', 'registry/prompts', 'registry/rules', 'config', 'runs'])
239
+ mkdirSync(join(root, folder), { recursive: true });
240
+ let migrationError = null;
241
+ try {
242
+ const moved = migrateVariantLayout(root);
243
+ if (moved.length)
244
+ log(`renamed ${moved.length} earlier harness folders to variants`);
245
+ }
246
+ catch (error) {
247
+ migrationError = error instanceof Error ? error.message : String(error);
248
+ log('variant layout', migrationError);
249
+ }
250
+ mkdirSync(join(root, 'variants'), { recursive: true });
251
+ let legacyWiki = null;
252
+ try {
253
+ legacyWiki = notes.moveLegacy(root);
254
+ if (legacyWiki)
255
+ log(`moved the earlier Wiki's memory, facts and revisions to ${legacyWiki}`);
256
+ notes.ensureLayout(root, this.env.productName);
257
+ }
258
+ catch (error) {
259
+ migrationError = error instanceof Error ? error.message : String(error);
260
+ log('Wiki layout', migrationError);
261
+ }
262
+ try {
263
+ migrateConnectionScopes(root, this.stateDir);
264
+ }
265
+ catch (error) {
266
+ const detail = error instanceof Error ? error.message : String(error);
267
+ migrationError = migrationError ? `${migrationError}; connector scope migration: ${detail}` : detail;
268
+ log('connector scope migration failed', detail);
269
+ }
270
+ let interruptedRunIds = [];
271
+ try {
272
+ interruptedRunIds = markInterruptedRuns(root, `${this.env.productName} stopped before the run settled.`);
273
+ const recoveredSessions = new Set();
274
+ for (const runId of interruptedRunIds) {
275
+ try {
276
+ const sessionId = loadRun(root, runId).sessionId;
277
+ if (!sessionId || recoveredSessions.has(sessionId))
278
+ continue;
279
+ recoveredSessions.add(sessionId);
280
+ setTimeout(() => void this.pageNotes.runEnded(sessionId).catch((error) => log('page notes', error instanceof Error ? error.message : String(error))), 250).unref?.();
281
+ }
282
+ catch {
283
+ // A malformed run record does not prevent the rest of recovery.
284
+ }
285
+ }
286
+ }
287
+ catch (error) {
288
+ log('run recovery', error instanceof Error ? error.message : String(error));
289
+ }
290
+ try {
291
+ // Runs recorded while nothing was running become searchable.
292
+ recall.sync(root);
293
+ }
294
+ catch (error) {
295
+ log('recall', error instanceof Error ? error.message : String(error));
296
+ }
297
+ this.recovery = { interruptedRuns: interruptedRunIds.length, interruptedRunIds, reindexedPages: safeCount(root), migrationError, legacyWiki };
298
+ return this.recovery;
299
+ }
300
+ /** Rebuilds the history index from the run records. Returns the notes in the Wiki. */
301
+ rebuildIndex() {
302
+ recall.sync(this.env.root);
303
+ const count = safeCount(this.env.root);
304
+ this.recovery = { ...this.recovery, reindexedPages: count };
305
+ return count;
306
+ }
307
+ /** Stops live runs and refinements and releases the index. */
308
+ async close() {
309
+ await this.doctor.close();
310
+ this.hub.close();
311
+ await this.refine.close();
312
+ await this.lessons.close();
313
+ await this.terminals.close();
314
+ await this.noteCapture.close();
315
+ await this.sideQuestions.close();
316
+ await this.runs.interruptAll();
317
+ await this.world.close();
318
+ await this.hooks.settled().catch(() => undefined);
319
+ this.hooks.close();
320
+ await this.apps.close();
321
+ if (this.env.dataRoot)
322
+ closeIndex(this.env.dataRoot);
323
+ }
324
+ }
325
+ function safeCount(root) {
326
+ try {
327
+ return notes.paths(root).length;
328
+ }
329
+ catch {
330
+ return 0;
331
+ }
332
+ }
333
+ export function createHarness(options) {
334
+ const harness = new Harness(options);
335
+ if (options.dataRoot)
336
+ harness.open(options.dataRoot);
337
+ return harness;
338
+ }
@@ -0,0 +1,2 @@
1
+ export declare const REFLECTION_IDENTITY = "You read the record of one finished agent run and decide whether it teaches a lesson worth keeping for later runs. Work only inside the current folder: the evidence is under `context/`. Do not change any file. Follow the mission in the user message exactly.";
2
+ export declare function lessonMission(): string;
@@ -0,0 +1,15 @@
1
+ // The mission of a reflection run: read how one finished run went and write at most one lesson
2
+ // for the Wiki. The lesson shape (a cue, a checkable lesson, the evidence, or NO_ENTRY) is the
3
+ // one the refinement library uses (`refine/prompts.ts::experience`), from harness².
4
+ import { ANSWER_FREE, EVIDENCE_BOUNDARY } from "../refine/prompts.js";
5
+ export const REFLECTION_IDENTITY = 'You read the record of one finished agent run and decide whether it teaches a lesson worth keeping for later runs. Work only inside the current folder: the evidence is under `context/`. Do not change any file. Follow the mission in the user message exactly.';
6
+ export function lessonMission() {
7
+ return [
8
+ 'Read `context/run.md`: the complete record of one finished run of an agent, in the order it happened -- the request, what the agent said, every tool call and what came back. `context/lessons.md` lists the lessons already kept, one per line, as `path -- cue`.',
9
+ '# WHAT A LESSON IS\n\nA lesson is something a later run, on a different request, would do differently because it read it. It comes from a contrast the record shows: an approach that failed and one that then worked, a tool call that was wasted, a check that caught a mistake, a step that had to be redone.\n\nThe `cue` describes the SHAPE OF SITUATION the lesson applies to, so it can fire on a different matter. Not this run\'s facts -- the pattern. The `lesson` is the operation to perform, stated so it can be applied and checked.\n\nToo generic is useless (\'be thorough\', \'read the code first\'); too specific never fires again (\'the config file is at src/app.json\'). Aim between: \'when a build tool reports a missing module after a dependency upgrade, check the lockfile was regenerated before editing imports\'.\n\nNever put into a lesson a fact about this run\'s subject: names of files, people, projects, values, or anything the user said about their own work. Those are wrong anchors for any other run, and they may be private.',
10
+ '# WHEN TO WRITE NOTHING\n\nMost runs teach nothing new. If the record shows no concrete contrast -- the work simply went as planned, or the only lesson would be generic advice -- reply with the single line NO_ENTRY. That is the expected answer for most runs.\n\nIf one of the lessons in `context/lessons.md` already says the same thing, reply with the single line `SAME <path>` naming it, instead of a new entry.',
11
+ ANSWER_FREE,
12
+ EVIDENCE_BOUNDARY,
13
+ '# OUTPUT FORMAT\n\nExactly one of:\n\nNO_ENTRY\n\nSAME <path from context/lessons.md>\n\n<experience>\ncue: <the shape of situation this applies to, one line>\nlesson: <the operation to perform, one line>\nevidence: <the contrast in the record this rests on, one line, without the subject\'s facts>\nconfidence: <high|medium|low, and why>\n</experience>'
14
+ ].join('\n\n') + '\n';
15
+ }
@@ -0,0 +1,52 @@
1
+ import { type RefineRuntime } from "../refine/pi.js";
2
+ import type { Improver } from "../refine/types.js";
3
+ import type { RunRecord } from "../sessions/contracts.js";
4
+ export declare const REFLECTION_TRIGGER = "reflection";
5
+ export declare const LESSONS_FOLDER = "library/lessons";
6
+ export type LessonOutcome = {
7
+ kind: 'written';
8
+ path: string;
9
+ } | {
10
+ kind: 'same';
11
+ path: string;
12
+ } | {
13
+ kind: 'no_entry';
14
+ } | {
15
+ kind: 'skipped';
16
+ reason: string;
17
+ };
18
+ export interface LessonsOptions {
19
+ root: () => string;
20
+ runtime: RefineRuntime;
21
+ /** Builds the reflection session for one run. Tests pass a fake; by default it is a `PiImprover`. */
22
+ reflector?: (run: RunRecord, model: string | null, signal: AbortSignal) => Improver;
23
+ }
24
+ interface KeptLesson {
25
+ path: string;
26
+ cue: string;
27
+ sources: string[];
28
+ front: Record<string, unknown>;
29
+ body: string;
30
+ }
31
+ /** The lessons the Wiki keeps now. */
32
+ export declare function keptLessons(root: string): KeptLesson[];
33
+ export declare class Lessons {
34
+ private readonly options;
35
+ private readonly queue;
36
+ private readonly abort;
37
+ private draining;
38
+ private closed;
39
+ constructor(options: LessonsOptions);
40
+ /** Called when a run completes. Cheap: the work happens later, one run at a time. */
41
+ consider(run: RunRecord | null): void;
42
+ /** Resolves when everything queued so far was reflected on. */
43
+ idle(): Promise<void>;
44
+ close(): Promise<void>;
45
+ private drain;
46
+ /** The plugin's settings for this run's caller, or null when it is off for them. */
47
+ private limits;
48
+ /** Reflects on one finished run. Exposed for tests and for a host that wants to ask directly. */
49
+ reflect(runId: string): Promise<LessonOutcome>;
50
+ private keep;
51
+ }
52
+ export {};