@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,76 @@
1
+ // Budget accounting: R = 4k rollouts and P = 3k improvement stages per mode. Base executions
2
+ // count toward each mode; retries are separate attempt counts; selection and reflection are
3
+ // recorded outside this ledger.
4
+ //
5
+ // Ported from Harness² (Apache-2.0, Google LLC; `harness2/core/ledger.py`).
6
+ /** R = 4k: k shared base + 2k candidates + k finals. */
7
+ export const expectedRollouts = (k) => 4 * k;
8
+ /** P = 3k: k INV + k DOM + k compositions. */
9
+ export const expectedSessions = (k) => 3 * k;
10
+ export class BudgetError extends Error {
11
+ constructor(message) {
12
+ super(message);
13
+ this.name = 'BudgetError';
14
+ }
15
+ }
16
+ const round = (value) => Math.round(value * 1e6) / 1e6;
17
+ export class Ledger {
18
+ mode;
19
+ taskId;
20
+ k;
21
+ entries = [];
22
+ constructor(mode, taskId, k) {
23
+ this.mode = mode;
24
+ this.taskId = taskId;
25
+ this.k = k;
26
+ }
27
+ rollout(label, usd = 0, cached = false) {
28
+ this.entries.push({ kind: 'rollout', label, usd, cached, attempts: 1 });
29
+ }
30
+ session(label, usd = 0, options = {}) {
31
+ this.entries.push({ kind: 'session', label, usd, cached: options.cached ?? false, attempts: options.attempts ?? 1 });
32
+ }
33
+ labels(kind) {
34
+ return this.entries.filter((entry) => entry.kind === kind).map((entry) => entry.label);
35
+ }
36
+ get R() {
37
+ return this.labels('rollout').length;
38
+ }
39
+ get P() {
40
+ return this.labels('session').length;
41
+ }
42
+ usd(kind) {
43
+ return round(this.entries.filter((entry) => !kind || entry.kind === kind).reduce((sum, entry) => sum + entry.usd, 0));
44
+ }
45
+ /** Throws unless the entries show exactly R=4k and P=3k with no repeated label. */
46
+ assertIdentity() {
47
+ const wantR = expectedRollouts(this.k);
48
+ const wantP = expectedSessions(this.k);
49
+ const rl = this.labels('rollout');
50
+ const sl = this.labels('session');
51
+ const dupes = [...new Set([...rl.filter((label, i) => rl.indexOf(label) !== i), ...sl.filter((label, i) => sl.indexOf(label) !== i)])].sort();
52
+ if (!dupes.length && this.R === wantR && this.P === wantP)
53
+ return;
54
+ const detail = [`${this.mode}-${this.k} ${this.taskId}: R=${this.R} (want ${wantR}), P=${this.P} (want ${wantP})`, ` rollouts: ${rl.join(', ') || '(none)'}`, ` sessions: ${sl.join(', ') || '(none)'}`];
55
+ if (dupes.length)
56
+ detail.push(` DUPLICATE labels: ${dupes.join(', ')} -- two stages wrote the same run id and one overwrote the other`);
57
+ throw new BudgetError(detail.join('\n'));
58
+ }
59
+ toRecord() {
60
+ return {
61
+ mode: this.mode,
62
+ taskId: this.taskId,
63
+ k: this.k,
64
+ R: this.R,
65
+ expectedR: expectedRollouts(this.k),
66
+ P: this.P,
67
+ expectedP: expectedSessions(this.k),
68
+ sessionAttempts: this.entries.filter((entry) => entry.kind === 'session').reduce((sum, entry) => sum + entry.attempts, 0),
69
+ usd: this.usd(),
70
+ rolloutUsd: this.usd('rollout'),
71
+ sessionUsd: this.usd('session'),
72
+ rollouts: this.labels('rollout'),
73
+ sessions: this.labels('session')
74
+ };
75
+ }
76
+ }
@@ -0,0 +1,55 @@
1
+ import { type SurfaceSpec, type Variant } from "../variant/surface.js";
2
+ export interface Experience {
3
+ cue: string;
4
+ lesson: string;
5
+ evidence: string;
6
+ confidence?: string;
7
+ /** The edit-by-edit record the lesson rests on. */
8
+ edits?: string;
9
+ }
10
+ export declare function hasExperience(experience: Partial<Experience> | null | undefined): experience is Experience;
11
+ /** One folder name for a task or area: separators collapse, nothing escapes. */
12
+ export declare function slug(text: string): string;
13
+ export interface LibraryEntry {
14
+ task: string;
15
+ label: string;
16
+ runId: string;
17
+ cue: string | null;
18
+ inventory: string;
19
+ }
20
+ export declare function libraryRoot(root: string): string;
21
+ export declare class Library {
22
+ readonly root: string;
23
+ readonly scope: string;
24
+ readonly area: string;
25
+ readonly surface: SurfaceSpec;
26
+ constructor(root: string, scope: string, area?: string, surface?: SurfaceSpec);
27
+ get dir(): string;
28
+ get index(): string;
29
+ entryDir(task: string): string;
30
+ /** The folder handed to an improver, or null when nothing has been learned here yet. */
31
+ contextDir(): string | null;
32
+ entries(): string[];
33
+ variantOf(task: string): Variant;
34
+ experienceText(task: string): string | null;
35
+ list(): LibraryEntry[];
36
+ /** Drops these tasks' entries and rebuilds the index; unknown tasks are ignored. */
37
+ forget(tasks: readonly string[]): void;
38
+ /**
39
+ * Stores one adopted harness and why it was adopted, then rebuilds the index. Nothing is
40
+ * stored without a supported lesson. Returns the entry folder, or null.
41
+ */
42
+ add(task: string, variant: Variant, input: {
43
+ why?: string;
44
+ label?: string;
45
+ runId?: string;
46
+ experience?: Partial<Experience> | null;
47
+ }): string | null;
48
+ rebuildIndex(): string;
49
+ }
50
+ /** A one-line census of the components in a variant. */
51
+ export declare function inventory(surface: SurfaceSpec, variant: Variant): string;
52
+ /** Every scope that has a library. */
53
+ export declare function libraryScopes(root: string): string[];
54
+ /** Every area a scope has entries in. */
55
+ export declare function libraryAreas(root: string, scope: string): string[];
@@ -0,0 +1,177 @@
1
+ // The experience library: what earlier refinements in one scope and area adopted, and why.
2
+ // Read by improvers before each task, appended after it. The whole variant is carried, never a
3
+ // summary.
4
+ //
5
+ // <data>/library/<scope>/<area>/INDEX.md
6
+ // <data>/library/<scope>/<area>/variants/<task>/variant/<rel> the full adopted variant
7
+ // <data>/library/<scope>/<area>/variants/<task>/EXPERIENCE.md why it was picked, and the lesson
8
+ //
9
+ // Ported from Harness² (Apache-2.0, Google LLC; `harness2/core/library.py`).
10
+ import { existsSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
11
+ import { join } from 'node:path';
12
+ import { safeId } from "../core/fs.js";
13
+ import { PI_SURFACE } from "../variant/surface.js";
14
+ import { alwaysOnText, pluginNames, readVariant, skillNames, subagentNames, writeVariant } from "../variant/variant.js";
15
+ import { patterns } from "../variant/surface.js";
16
+ import { assertVariantHasNoGraderVerdicts } from "./evidence.js";
17
+ export function hasExperience(experience) {
18
+ return Boolean(experience) && ['cue', 'lesson', 'evidence'].every((key) => typeof experience[key] === 'string' && experience[key].trim().length > 0);
19
+ }
20
+ /** One folder name for a task or area: separators collapse, nothing escapes. */
21
+ export function slug(text) {
22
+ return text.replace(/\s*[/\\]\s*/g, '__').replace(/[^A-Za-z0-9_.\-]/g, '_').replace(/^\.+/, '_').slice(0, 120).trim() || 'unknown';
23
+ }
24
+ export function libraryRoot(root) {
25
+ return join(root, 'library');
26
+ }
27
+ export class Library {
28
+ root;
29
+ scope;
30
+ area;
31
+ surface;
32
+ constructor(root, scope, area = scope, surface = PI_SURFACE) {
33
+ this.root = root;
34
+ this.scope = scope;
35
+ this.area = area;
36
+ this.surface = surface;
37
+ safeId(scope);
38
+ }
39
+ get dir() {
40
+ return join(libraryRoot(this.root), this.scope, slug(this.area));
41
+ }
42
+ get index() {
43
+ return join(this.dir, 'INDEX.md');
44
+ }
45
+ entryDir(task) {
46
+ return join(this.dir, 'variants', slug(task));
47
+ }
48
+ /** The folder handed to an improver, or null when nothing has been learned here yet. */
49
+ contextDir() {
50
+ return existsSync(this.index) && this.entries().length ? this.dir : null;
51
+ }
52
+ entries() {
53
+ const dir = join(this.dir, 'variants');
54
+ try {
55
+ return readdirSync(dir, { withFileTypes: true }).filter((entry) => entry.isDirectory() && existsSync(join(dir, entry.name, 'EXPERIENCE.md'))).map((entry) => entry.name).sort();
56
+ }
57
+ catch {
58
+ return [];
59
+ }
60
+ }
61
+ variantOf(task) {
62
+ return readVariant(this.surface, join(this.entryDir(task), 'variant'));
63
+ }
64
+ experienceText(task) {
65
+ try {
66
+ return readFileSync(join(this.entryDir(task), 'EXPERIENCE.md'), 'utf8');
67
+ }
68
+ catch {
69
+ return null;
70
+ }
71
+ }
72
+ list() {
73
+ return this.entries().map((name) => {
74
+ const text = readFileSync(join(this.dir, 'variants', name, 'EXPERIENCE.md'), 'utf8');
75
+ return {
76
+ task: name,
77
+ label: /^- adopted: `([^`]+)`/m.exec(text)?.[1] ?? '',
78
+ runId: /\(run `([^`]+)`\)/.exec(text)?.[1] ?? '',
79
+ cue: field(text, 'cue'),
80
+ inventory: inventory(this.surface, this.variantOf(name))
81
+ };
82
+ });
83
+ }
84
+ /** Drops these tasks' entries and rebuilds the index; unknown tasks are ignored. */
85
+ forget(tasks) {
86
+ let removed = false;
87
+ for (const task of tasks) {
88
+ const dir = this.entryDir(task);
89
+ if (existsSync(dir)) {
90
+ rmSync(dir, { recursive: true, force: true });
91
+ removed = true;
92
+ }
93
+ }
94
+ if (removed)
95
+ this.rebuildIndex();
96
+ }
97
+ /**
98
+ * Stores one adopted harness and why it was adopted, then rebuilds the index. Nothing is
99
+ * stored without a supported lesson. Returns the entry folder, or null.
100
+ */
101
+ add(task, variant, input) {
102
+ const experience = input.experience;
103
+ if (!hasExperience(experience))
104
+ return null;
105
+ assertVariantHasNoGraderVerdicts(variant);
106
+ assertVariantHasNoGraderVerdicts({ 'EXPERIENCE.md': JSON.stringify(experience) + (input.why ?? '') });
107
+ const dir = this.entryDir(task);
108
+ rmSync(join(dir, 'variant'), { recursive: true, force: true });
109
+ writeVariant(this.surface, variant, join(dir, 'variant'), { stubs: false });
110
+ const lines = [`# ${task}`, '', `- adopted: \`${input.label ?? ''}\`${input.runId ? ` (run \`${input.runId}\`)` : ''}`, `- components: ${inventory(this.surface, variant)}`, ''];
111
+ if (input.why?.trim())
112
+ lines.push('## Why this was chosen', input.why.trim(), '');
113
+ if (experience.edits?.trim())
114
+ lines.push('## What each edit did', experience.edits.trim(), '');
115
+ lines.push('## Transferable lesson');
116
+ for (const key of ['cue', 'lesson', 'evidence', 'confidence'])
117
+ if (experience[key])
118
+ lines.push(`- **${key}**: ${String(experience[key]).trim()}`);
119
+ lines.push('');
120
+ mkdirSync(dir, { recursive: true });
121
+ writeFileSync(join(dir, 'EXPERIENCE.md'), lines.join('\n'));
122
+ this.rebuildIndex();
123
+ return dir;
124
+ }
125
+ rebuildIndex() {
126
+ const rows = [`# Library — ${this.area}`, '', 'Each entry is an earlier task in THIS area whose harness was chosen, stored with its FULL component variant and why it was picked. Browse this index, then open the entries that look relevant to the matter in front of you.', ''];
127
+ const names = this.entries();
128
+ if (!names.length)
129
+ rows.push('_(empty — this is the first task in this area)_');
130
+ for (const name of names) {
131
+ const cue = field(readFileSync(join(this.dir, 'variants', name, 'EXPERIENCE.md'), 'utf8'), 'cue');
132
+ rows.push(`## \`variants/${name}/\``, `- variant: \`variants/${name}/variant/\` — ${inventory(this.surface, this.variantOf(name))}`, `- why: \`variants/${name}/EXPERIENCE.md\``);
133
+ if (cue)
134
+ rows.push(`- cue: ${cue}`);
135
+ rows.push('');
136
+ }
137
+ mkdirSync(this.dir, { recursive: true });
138
+ writeFileSync(this.index, rows.join('\n'));
139
+ return this.index;
140
+ }
141
+ }
142
+ /** A one-line census of the components in a variant. */
143
+ export function inventory(surface, variant) {
144
+ const scripts = Object.keys(variant).filter((rel) => patterns(surface).script.test(rel)).length;
145
+ const counts = [
146
+ ['skills', skillNames(surface, variant).length],
147
+ ['sub_agents', subagentNames(surface, variant).length],
148
+ ['scripts', scripts],
149
+ ['plugins', pluginNames(surface, variant).length]
150
+ ];
151
+ const bits = counts.filter(([, n]) => n).map(([name, n]) => `${n} ${name}`);
152
+ return `${bits.length ? bits.join(', ') : 'always-on edits only'}; ${alwaysOnText(surface, variant).length.toLocaleString('en-US')} always-on chars`;
153
+ }
154
+ function field(text, name) {
155
+ for (const line of text.split('\n'))
156
+ if (line.startsWith(`- **${name}**:`))
157
+ return line.split(':').slice(1).join(':').trim();
158
+ return null;
159
+ }
160
+ /** Every scope that has a library. */
161
+ export function libraryScopes(root) {
162
+ try {
163
+ return readdirSync(libraryRoot(root), { withFileTypes: true }).filter((entry) => entry.isDirectory()).map((entry) => entry.name).sort();
164
+ }
165
+ catch {
166
+ return [];
167
+ }
168
+ }
169
+ /** Every area a scope has entries in. */
170
+ export function libraryAreas(root, scope) {
171
+ try {
172
+ return readdirSync(join(libraryRoot(root), safeId(scope)), { withFileTypes: true }).filter((entry) => entry.isDirectory()).map((entry) => entry.name).sort();
173
+ }
174
+ catch {
175
+ return [];
176
+ }
177
+ }
@@ -0,0 +1,72 @@
1
+ import type { RunRegistry } from "../sessions/registry.js";
2
+ import type { Effort } from "../sessions/runner.js";
3
+ import type { SessionRunInput } from "../sessions/sessions.js";
4
+ import { type RefineHost } from "./host.js";
5
+ import { type Executor, type Improver, type ImproverCall, type ImproverReply, type RefineTask, type Rollout } from "./types.js";
6
+ /** What the Pi executor and improver need of the harness. */
7
+ export interface RefineRuntime {
8
+ root: () => string;
9
+ runs: RunRegistry;
10
+ run: (input: SessionRunInput) => Promise<{
11
+ runId: string;
12
+ nativeSessionId: string | null;
13
+ }>;
14
+ }
15
+ /** Triggers that mark refinement's own runs; a tool policy can tell them apart. */
16
+ export declare const PROBE_TRIGGER = "probe";
17
+ export declare const IMPROVER_TRIGGER = "improver";
18
+ /** How a session built on the improver differs from refinement's own improver. */
19
+ export interface ImproverRole {
20
+ /** The run's trigger; refinement's improver is `improver`. */
21
+ trigger?: string;
22
+ /** The one identity section the session gets. */
23
+ identity?: string;
24
+ /** Its file tools; refinement's improver may also edit and write. */
25
+ tools?: string[];
26
+ }
27
+ /** Resolves when a run has settled, with its final status. Interrupts it when `signal` aborts. */
28
+ export declare function settled(runtime: RefineRuntime, runId: string, signal?: AbortSignal, timeoutMs?: number): Promise<string>;
29
+ /** The folder, inside a rollout's record, that holds its retained workspace. */
30
+ export declare const RETAINED_WORKSPACE = "workspace";
31
+ export interface ExecutorOptions {
32
+ /** Copy each execution's workspace into its record before the host cleans it up (PROP-0002). */
33
+ retainWorkspaces?: boolean;
34
+ /** Model, effort and account for executions when the host's session settings name none (PROP-0003). */
35
+ settings?: ImproverSettings;
36
+ }
37
+ /** Runs each execution as a probe session in a workspace the host prepared. */
38
+ export declare class PiExecutor implements Executor {
39
+ private readonly runtime;
40
+ private readonly host;
41
+ private readonly refineId;
42
+ private readonly dir;
43
+ private readonly signal?;
44
+ private readonly options;
45
+ constructor(runtime: RefineRuntime, host: RefineHost, refineId: string, dir: string, signal?: AbortSignal | undefined, options?: ExecutorOptions);
46
+ execute(task: RefineTask, variantDir: string | null, label: string, runId: string): Promise<Rollout>;
47
+ trajectory(rollout: Rollout, options: {
48
+ obsTrunc: number;
49
+ }): string;
50
+ deliverableFiles(rollout: Rollout): Record<string, string>;
51
+ }
52
+ export interface ImproverSettings {
53
+ model?: string | null;
54
+ effort?: Effort | null;
55
+ accountId?: string | null;
56
+ poolId?: string | null;
57
+ }
58
+ /**
59
+ * Runs an improver, selector or reflector session in a temporary folder that holds only the
60
+ * evidence (`context/`). It has file tools and nothing else: no network, no connected apps, no
61
+ * application tools, no subagents. A reply is cached by its mission and evidence, so resuming
62
+ * a refinement does not pay twice.
63
+ */
64
+ export declare class PiImprover implements Improver {
65
+ private readonly runtime;
66
+ private readonly dir;
67
+ private readonly settings;
68
+ private readonly signal?;
69
+ private readonly role;
70
+ constructor(runtime: RefineRuntime, dir: string, settings?: ImproverSettings, signal?: AbortSignal | undefined, role?: ImproverRole);
71
+ call(input: ImproverCall): Promise<ImproverReply>;
72
+ }
@@ -0,0 +1,248 @@
1
+ // The Pi-backed executor and improver: refinement's executions and improver sessions are
2
+ // ordinary harness sessions, recorded as runs like any other, marked by their trigger.
3
+ import { createHash, randomUUID } from 'node:crypto';
4
+ import { cpSync, existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
5
+ import { tmpdir } from 'node:os';
6
+ import { dirname, join } from 'node:path';
7
+ import { readJsonOr, writeJson } from "../core/fs.js";
8
+ import { isActiveStatus } from "../sessions/contracts.js";
9
+ import { findRun, readEvents } from "../sessions/runStore.js";
10
+ import { defaultDeliverable } from "./host.js";
11
+ import { costOf, finalText, renderEvents } from "./trajectory.js";
12
+ import { ImproverError } from "./types.js";
13
+ /** Triggers that mark refinement's own runs; a tool policy can tell them apart. */
14
+ export const PROBE_TRIGGER = 'probe';
15
+ export const IMPROVER_TRIGGER = 'improver';
16
+ const IMPROVER_IDENTITY = 'You improve the harness an autonomous agent runs with, from evidence of how it ran. Work only inside the current folder: the evidence is under `context/`. Follow the mission in the user message exactly.';
17
+ /** Resolves when a run has settled, with its final status. Interrupts it when `signal` aborts. */
18
+ export function settled(runtime, runId, signal, timeoutMs = 60 * 60_000) {
19
+ return new Promise((resolve) => {
20
+ let done = false;
21
+ const finish = (status) => {
22
+ if (done)
23
+ return;
24
+ done = true;
25
+ stop();
26
+ clearTimeout(timer);
27
+ signal?.removeEventListener('abort', abort);
28
+ resolve(status);
29
+ };
30
+ const stop = runtime.runs.listen((event) => {
31
+ if (event.runId !== runId)
32
+ return;
33
+ if (event.type === 'completed')
34
+ finish('completed');
35
+ else if (event.type === 'failed')
36
+ finish('failed');
37
+ else if (event.type === 'status.changed' && event.payload.status === 'interrupted')
38
+ finish('interrupted');
39
+ });
40
+ const abort = () => void runtime.runs.interrupt(runId).catch(() => { }).finally(() => finish('interrupted'));
41
+ signal?.addEventListener('abort', abort, { once: true });
42
+ const timer = setTimeout(() => void runtime.runs.interrupt(runId).catch(() => { }).finally(() => finish('interrupted')), timeoutMs);
43
+ timer.unref?.();
44
+ // It may have settled before the listener was added.
45
+ const record = findRun(runtime.root(), runId);
46
+ if (record && !isActiveStatus(record.status) && record.status !== 'queued')
47
+ finish(record.status);
48
+ if (signal?.aborted)
49
+ abort();
50
+ });
51
+ }
52
+ function events(runtime, runId) {
53
+ try {
54
+ return readEvents(runtime.root(), runId);
55
+ }
56
+ catch {
57
+ return [];
58
+ }
59
+ }
60
+ /** The folder, inside a rollout's record, that holds its retained workspace. */
61
+ export const RETAINED_WORKSPACE = 'workspace';
62
+ /** The host's session settings win; the caller's executor settings fill what the host left out. */
63
+ function withDefaults(session, defaults) {
64
+ if (!defaults)
65
+ return session;
66
+ return {
67
+ ...session,
68
+ model: session.model ?? defaults.model ?? null,
69
+ effort: session.effort ?? defaults.effort ?? null,
70
+ accountId: session.accountId ?? defaults.accountId ?? null,
71
+ poolId: session.poolId ?? defaults.poolId ?? null
72
+ };
73
+ }
74
+ /** Copies a workspace whole, links as links; returns the error instead of throwing. */
75
+ function retain(cwd, into) {
76
+ try {
77
+ rmSync(into, { recursive: true, force: true });
78
+ cpSync(cwd, into, { recursive: true, dereference: false, verbatimSymlinks: true });
79
+ return '';
80
+ }
81
+ catch (error) {
82
+ return error instanceof Error ? error.message : String(error);
83
+ }
84
+ }
85
+ /** Runs each execution as a probe session in a workspace the host prepared. */
86
+ export class PiExecutor {
87
+ runtime;
88
+ host;
89
+ refineId;
90
+ dir;
91
+ signal;
92
+ options;
93
+ constructor(runtime, host, refineId, dir, signal, options = {}) {
94
+ this.runtime = runtime;
95
+ this.host = host;
96
+ this.refineId = refineId;
97
+ this.dir = dir;
98
+ this.signal = signal;
99
+ this.options = options;
100
+ }
101
+ async execute(task, variantDir, label, runId) {
102
+ const started = Date.now();
103
+ const dir = join(this.dir, 'rollouts', label);
104
+ rmSync(dir, { recursive: true, force: true });
105
+ mkdirSync(dir, { recursive: true });
106
+ const base = { label, runId, dir, costUsd: 0, wallMs: 0 };
107
+ const workspace = await this.host.prepareWorkspace({ refineId: this.refineId, label, task });
108
+ try {
109
+ const settings = withDefaults(await this.host.session({ refineId: this.refineId, label, task }), this.options.settings);
110
+ await this.runtime.run({
111
+ run: { id: runId, sessionId: runId, trigger: PROBE_TRIGGER, goal: task.prompt.slice(0, 4000), parentRunId: null, relation: null },
112
+ accountId: settings.accountId ?? null,
113
+ poolId: settings.poolId ?? null,
114
+ model: settings.model ?? null,
115
+ effort: settings.effort ?? null,
116
+ cwd: workspace.cwd,
117
+ sessionDir: join(this.dir, 'sessions', label),
118
+ text: task.prompt,
119
+ automatic: true,
120
+ subagents: { maxDepth: 1 },
121
+ caller: { ...settings.caller, runId, sessionId: runId },
122
+ launch: settings.launch,
123
+ tools: settings.tools,
124
+ connections: settings.connections,
125
+ providers: settings.providers,
126
+ variant: variantDir ? { dir: variantDir, scope: task.scope } : { scope: task.scope }
127
+ });
128
+ const status = await settled(this.runtime, runId, this.signal);
129
+ const recorded = events(this.runtime, runId);
130
+ const reply = finalText(recorded);
131
+ const produced = this.host.deliverable ? await this.host.deliverable({ cwd: workspace.cwd, reply, task }) : defaultDeliverable(workspace.cwd, reply, task.sourceDir);
132
+ for (const [name, text] of Object.entries(produced)) {
133
+ const path = join(dir, 'deliverables', name);
134
+ mkdirSync(dirname(path), { recursive: true });
135
+ writeFileSync(path, text);
136
+ }
137
+ writeJson(join(dir, 'rollout.json'), { runId, status, files: Object.keys(produced).sort() });
138
+ const delivered = Object.keys(produced).length > 0;
139
+ return { ...base, ok: status === 'completed', delivered, costUsd: costOf(recorded), wallMs: Date.now() - started, error: status === 'completed' ? '' : `run ${status}` };
140
+ }
141
+ catch (error) {
142
+ return { ...base, ok: false, delivered: false, wallMs: Date.now() - started, error: error instanceof Error ? error.message : String(error) };
143
+ }
144
+ finally {
145
+ if (this.options.retainWorkspaces) {
146
+ const workspaceError = retain(workspace.cwd, join(dir, RETAINED_WORKSPACE));
147
+ if (workspaceError)
148
+ writeJson(join(dir, 'rollout.json'), { ...readJsonOr(join(dir, 'rollout.json'), { runId }), workspaceError });
149
+ }
150
+ await workspace.cleanup?.().catch(() => { });
151
+ }
152
+ }
153
+ trajectory(rollout, options) {
154
+ return renderEvents(events(this.runtime, rollout.runId), { obsTrunc: options.obsTrunc });
155
+ }
156
+ deliverableFiles(rollout) {
157
+ const record = readJsonOr(join(rollout.dir, 'rollout.json'), {});
158
+ const out = {};
159
+ for (const name of record.files ?? []) {
160
+ try {
161
+ out[name] = readFileSync(join(rollout.dir, 'deliverables', name), 'utf8');
162
+ }
163
+ catch {
164
+ // A file that went missing is simply not shown.
165
+ }
166
+ }
167
+ return out;
168
+ }
169
+ }
170
+ const IMPROVER_TOOLS = ['read', 'grep', 'find', 'ls', 'edit', 'write'];
171
+ /**
172
+ * Runs an improver, selector or reflector session in a temporary folder that holds only the
173
+ * evidence (`context/`). It has file tools and nothing else: no network, no connected apps, no
174
+ * application tools, no subagents. A reply is cached by its mission and evidence, so resuming
175
+ * a refinement does not pay twice.
176
+ */
177
+ export class PiImprover {
178
+ runtime;
179
+ dir;
180
+ settings;
181
+ signal;
182
+ role;
183
+ constructor(runtime, dir, settings = {}, signal, role = {}) {
184
+ this.runtime = runtime;
185
+ this.dir = dir;
186
+ this.settings = settings;
187
+ this.signal = signal;
188
+ this.role = role;
189
+ }
190
+ async call(input) {
191
+ const key = createHash('sha1').update(input.label).update('\0').update(input.mission).digest('hex').slice(0, 16);
192
+ const cacheDir = join(this.dir, 'improver', input.label);
193
+ const cached = readJsonOr(join(cacheDir, 'reply.json'), null);
194
+ if (cached?.key === key && cached.text && (!input.harvest || (cached.workspace && existsSync(cached.workspace)))) {
195
+ return { label: input.label, text: cached.text, costUsd: 0, attempts: 0, cached: true, workspace: cached.workspace ?? null };
196
+ }
197
+ const work = mkdtempSync(join(tmpdir(), 'harness-improver-'));
198
+ const runId = randomUUID();
199
+ let cost = 0;
200
+ try {
201
+ cpSync(input.contextDir, join(work, 'context'), { recursive: true });
202
+ await this.runtime.run({
203
+ run: { id: runId, sessionId: runId, trigger: this.role.trigger ?? IMPROVER_TRIGGER, goal: input.label },
204
+ accountId: this.settings.accountId ?? null,
205
+ poolId: this.settings.poolId ?? null,
206
+ model: this.settings.model ?? null,
207
+ effort: this.settings.effort ?? 'high',
208
+ cwd: work,
209
+ sessionDir: join(cacheDir, 'session'),
210
+ text: input.mission,
211
+ automatic: true,
212
+ subagents: null,
213
+ providers: false,
214
+ connections: false,
215
+ harnessTools: false,
216
+ caller: { runId, sessionId: runId, actor: 'Code' },
217
+ launch: { sections: [{ id: 'identity', title: 'Identity', body: this.role.identity ?? IMPROVER_IDENTITY, budget: 1000, order: 10 }] },
218
+ tools: { allow: this.role.tools ?? IMPROVER_TOOLS },
219
+ variant: null
220
+ });
221
+ const status = await settled(this.runtime, runId, input.signal ?? this.signal);
222
+ const recorded = events(this.runtime, runId);
223
+ cost = costOf(recorded);
224
+ const text = finalText(recorded);
225
+ if (status !== 'completed' || !text.trim())
226
+ throw new ImproverError(status === 'completed' ? 'empty reply' : `improver run ${status}`, 1, cost);
227
+ let workspace = null;
228
+ if (input.harvest) {
229
+ const from = join(work, input.harvest);
230
+ if (existsSync(from)) {
231
+ workspace = join(cacheDir, 'harvest');
232
+ rmSync(workspace, { recursive: true, force: true });
233
+ cpSync(from, workspace, { recursive: true });
234
+ }
235
+ }
236
+ writeJson(join(cacheDir, 'reply.json'), { key, text, costUsd: cost, workspace, runId });
237
+ return { label: input.label, text, costUsd: cost, attempts: 1, cached: false, workspace };
238
+ }
239
+ catch (error) {
240
+ if (error instanceof ImproverError)
241
+ throw error;
242
+ throw new ImproverError(error instanceof Error ? error.message : String(error), 1, cost);
243
+ }
244
+ finally {
245
+ rmSync(work, { recursive: true, force: true });
246
+ }
247
+ }
248
+ }