@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,174 @@
1
+ // Evaluating variants on a task set: one execution per version × task, recorded as an
2
+ // answer-free matrix of what each variant delivered. No improver, no selection, no adoption —
3
+ // the only executions here are the given Executor's probe runs. Records live beside a
4
+ // refinement's, under `<data root>/refine/<id>/`, so a sweep over variant versions or package
5
+ // commits reads the same record family (`refine/<id>/matrix.json`).
6
+ //
7
+ // Every row carries its comparability keys (task-prompt hash, executor name, package
8
+ // version, variant fingerprint), so two matrices — taken at different commits or versions —
9
+ // are diffable without re-reading the runs that produced them.
10
+ import { createHash } from 'node:crypto';
11
+ import { existsSync, readFileSync } from 'node:fs';
12
+ import { dirname, join } from 'node:path';
13
+ import { fileURLToPath } from 'node:url';
14
+ import { now, readJson, safeId, writeJson } from "../core/fs.js";
15
+ import * as store from "../variant/store.js";
16
+ import { PI_SURFACE } from "../variant/surface.js";
17
+ import { writeVariant } from "../variant/variant.js";
18
+ import { assertVariantHasNoGraderVerdicts } from "./evidence.js";
19
+ import { mapLimit } from "./recursion.js";
20
+ export function matrixDir(root, id) {
21
+ return join(root, 'refine', safeId(id));
22
+ }
23
+ export function readMatrix(root, id) {
24
+ return readJson(join(matrixDir(root, id), 'matrix.json'));
25
+ }
26
+ let packageVersionMemo = null;
27
+ /** This package's release, whatever shape the module took: source, esbuild bundle, or an
28
+ * installed copy. Walks up from the module's own URL to the nearest package.json. */
29
+ function packageVersion() {
30
+ if (packageVersionMemo === null) {
31
+ packageVersionMemo = 'unknown';
32
+ try {
33
+ let dir = fileURLToPath(import.meta.url);
34
+ for (let up = 0; up < 6; up++) {
35
+ dir = dirname(dir);
36
+ const manifest = join(dir, 'package.json');
37
+ if (existsSync(manifest)) {
38
+ const json = JSON.parse(readFileSync(manifest, 'utf8'));
39
+ if (json.version)
40
+ packageVersionMemo = json.version;
41
+ break;
42
+ }
43
+ }
44
+ }
45
+ catch {
46
+ // A record without a version is still a record.
47
+ }
48
+ }
49
+ return packageVersionMemo;
50
+ }
51
+ function taskHash(task) {
52
+ return createHash('sha256').update(task.prompt).digest('hex').slice(0, 16);
53
+ }
54
+ const SEGMENT = /^[A-Za-z0-9_-]{1,128}$/;
55
+ function stage(input) {
56
+ const labels = [];
57
+ for (const entry of input.versions) {
58
+ if (!SEGMENT.test(entry.label))
59
+ throw new Error(`Version label '${entry.label}' must be a usable record name (A-Z a-z 0-9 _ -).`);
60
+ labels.push(entry.label);
61
+ }
62
+ if (new Set(labels).size !== labels.length)
63
+ throw new Error('Version labels must be unique.');
64
+ if (input.tasks.some((task) => !SEGMENT.test(task.id)))
65
+ throw new Error('Task ids must be usable record names (A-Z a-z 0-9 _ -).');
66
+ if (new Set(input.tasks.map((task) => task.id)).size !== input.tasks.length)
67
+ throw new Error('Task ids must be unique.');
68
+ // Staging and the tripwire happen before any execution: a variant carrying grader output
69
+ // never reaches an execution, the same guard the refinement's evidence folder applies
70
+ // (INV-REF-1). A variant that cannot be written becomes an error row, never an abort.
71
+ return input.versions.map((entry) => {
72
+ try {
73
+ assertVariantHasNoGraderVerdicts(entry.variant);
74
+ return { label: entry.label, variant: entry.variant, fingerprint: store.fingerprint(entry.variant), dir: writeVariant(PI_SURFACE, entry.variant, join(matrixDir(input.root, input.id), 'variants', entry.label)), error: '' };
75
+ }
76
+ catch (error) {
77
+ return { label: entry.label, variant: entry.variant, fingerprint: store.fingerprint(entry.variant), dir: '', error: error instanceof Error ? error.message : String(error) };
78
+ }
79
+ });
80
+ }
81
+ /** Runs the full version × task matrix. Bad input throws; execution failures become rows. */
82
+ export async function runMatrix(input) {
83
+ if (!input.versions.length)
84
+ throw new Error('A matrix needs at least one harness version.');
85
+ if (!input.tasks.length)
86
+ throw new Error('A matrix needs at least one task.');
87
+ if (input.tasks.some((task) => !task.prompt.trim()))
88
+ throw new Error('Every task needs a non-empty prompt.');
89
+ const { root, id, tasks, executor } = input;
90
+ const executorName = input.executorName ?? executor.constructor?.name ?? 'executor';
91
+ const emit = (event) => input.onEvent?.(event);
92
+ const staged = stage(input);
93
+ const summary = {
94
+ id,
95
+ status: 'running',
96
+ startedAt: now(),
97
+ endedAt: null,
98
+ versions: staged.map((entry) => entry.label),
99
+ tasks: tasks.map((task) => task.id),
100
+ rows: [],
101
+ usd: 0,
102
+ errors: []
103
+ };
104
+ const save = () => {
105
+ summary.usd = Math.round(summary.rows.reduce((sum, row) => sum + row.costUsd, 0) * 1e6) / 1e6;
106
+ writeJson(join(matrixDir(root, id), 'matrix.json'), summary);
107
+ emit({ type: 'summary', summary: structuredClone(summary) });
108
+ };
109
+ writeJson(join(matrixDir(root, id), 'suite.json'), { id, versions: staged.map(({ label, fingerprint }) => ({ label, fingerprint })), tasks });
110
+ save();
111
+ const pairs = staged.flatMap((version) => tasks.map((task) => ({ version, task })));
112
+ await mapLimit(pairs, input.rolloutWidth ?? 4, async ({ version, task }) => {
113
+ const runId = `${id}-${version.label}-${task.id}`;
114
+ let row;
115
+ if (input.signal?.aborted)
116
+ row = failedRow(version, task, runId, executorName, 'The matrix was cancelled.');
117
+ else if (version.error)
118
+ row = failedRow(version, task, runId, executorName, `the variant could not be staged: ${version.error}`);
119
+ else {
120
+ let validation = null;
121
+ if (executor.validateVariant) {
122
+ try {
123
+ executor.validateVariant(task, version.variant);
124
+ }
125
+ catch (error) {
126
+ validation = `invalid variant for this task: ${error instanceof Error ? error.message : String(error)}`;
127
+ }
128
+ }
129
+ if (validation)
130
+ row = failedRow(version, task, runId, executorName, validation);
131
+ else {
132
+ emit({ type: 'execution.started', version: version.label, task: task.id, label: runId });
133
+ let rollout;
134
+ try {
135
+ rollout = await executor.execute(task, version.dir, runId, runId);
136
+ }
137
+ catch (error) {
138
+ // The Executor contract says execute never throws; this keeps the record honest if one does.
139
+ rollout = { label: runId, runId, dir: join(matrixDir(root, id), 'missing', version.label, task.id), ok: false, delivered: false, costUsd: 0, wallMs: 0, error: error instanceof Error ? error.message : String(error) };
140
+ }
141
+ emit({ type: 'execution.finished', version: version.label, task: task.id, ok: rollout.ok, delivered: rollout.delivered, error: rollout.error });
142
+ row = rowOf(version, task, runId, executorName, rollout);
143
+ }
144
+ }
145
+ summary.rows.push(row);
146
+ save();
147
+ });
148
+ for (const error of staged.filter((entry) => entry.error).map((entry) => `${entry.label}: ${entry.error}`))
149
+ summary.errors.push(error);
150
+ summary.status = input.signal?.aborted ? 'cancelled' : summary.rows.some((row) => row.ok) ? 'ok' : summary.rows.length ? 'partial' : 'failed';
151
+ summary.endedAt = now();
152
+ save();
153
+ return summary;
154
+ }
155
+ function rowOf(version, task, runId, executorName, rollout) {
156
+ return {
157
+ version: version.label,
158
+ fingerprint: version.fingerprint,
159
+ task: task.id,
160
+ runId,
161
+ dir: rollout.dir,
162
+ ok: rollout.ok,
163
+ delivered: rollout.delivered,
164
+ costUsd: rollout.costUsd,
165
+ wallMs: rollout.wallMs,
166
+ error: rollout.error,
167
+ taskHash: taskHash(task),
168
+ executor: executorName,
169
+ packageVersion: packageVersion()
170
+ };
171
+ }
172
+ function failedRow(version, task, runId, executorName, error) {
173
+ return rowOf(version, task, runId, executorName, { label: runId, runId, dir: '', ok: false, delivered: false, costUsd: 0, wallMs: 0, error });
174
+ }
@@ -0,0 +1,9 @@
1
+ import type { RunEvent } from "../sessions/contracts.js";
2
+ export declare function renderEvents(events: readonly RunEvent[], options: {
3
+ obsTrunc: number;
4
+ argsTrunc?: number;
5
+ }): string;
6
+ /** The last assistant message of a run. */
7
+ export declare function finalText(events: readonly RunEvent[]): string;
8
+ /** The run's cost so far, from its last usage report. */
9
+ export declare function costOf(events: readonly RunEvent[]): number;
@@ -0,0 +1,68 @@
1
+ const TRUNC = (n) => `…(+${n} chars — render truncation)`;
2
+ function clip(text, limit) {
3
+ const clean = text.replace(/\0/g, '');
4
+ return limit > 0 && clean.length > limit ? `${clean.slice(0, limit)}${TRUNC(clean.length - limit)}` : clean;
5
+ }
6
+ export function renderEvents(events, options) {
7
+ const out = [];
8
+ const argsTrunc = options.argsTrunc ?? 2000;
9
+ for (const event of events) {
10
+ const payload = (event.payload ?? {});
11
+ switch (event.type) {
12
+ case 'message.completed':
13
+ if (typeof payload.text === 'string' && payload.text.trim())
14
+ out.push(`[${payload.role === 'user' ? 'USER' : 'ASSISTANT'}]\n${clip(payload.text, options.obsTrunc)}`);
15
+ break;
16
+ case 'tool.started':
17
+ out.push(`[ACTION] ${String(payload.name ?? 'tool')}${typeof payload.input === 'string' && payload.input ? ` ${clip(payload.input, argsTrunc)}` : ''}`);
18
+ break;
19
+ case 'tool.completed': {
20
+ const text = typeof payload.output === 'string' ? payload.output : '';
21
+ out.push(`${payload.ok === false ? '[ERROR]' : '[OBSERVATION]'} ${String(payload.name ?? 'tool')}${typeof payload.durationMs === 'number' ? ` (${Math.round(payload.durationMs)} ms)` : ''}\n${clip(text, options.obsTrunc)}${payload.outputTruncated ? '\n(the tool output was already bounded when it was recorded)' : ''}`);
22
+ break;
23
+ }
24
+ case 'retry.started':
25
+ out.push(`[ERROR] model request failed, retrying (${String(payload.attempt)}/${String(payload.maxAttempts)}): ${String(payload.error ?? '')}`);
26
+ break;
27
+ case 'compaction.ended':
28
+ out.push(`[ACTION] context compacted (${String(payload.reason ?? '')})${typeof payload.tokensBefore === 'number' ? `: ${payload.tokensBefore} → ${String(payload.tokensAfter ?? '?')} tokens` : ''}`);
29
+ break;
30
+ case 'approval.resolved':
31
+ if (payload.decision === 'denied')
32
+ out.push('[ERROR] a tool call was refused');
33
+ break;
34
+ case 'extension.notice':
35
+ if (typeof payload.text === 'string')
36
+ out.push(`[OBSERVATION] notice: ${clip(payload.text, 2000)}`);
37
+ break;
38
+ case 'failed':
39
+ out.push(`[ERROR] run failed: ${String(payload.message ?? payload.code ?? '')}`);
40
+ break;
41
+ case 'status.changed':
42
+ if (payload.status === 'interrupted')
43
+ out.push('[ERROR] run interrupted');
44
+ break;
45
+ default:
46
+ break;
47
+ }
48
+ }
49
+ return out.length ? out.join('\n\n') : '(no trajectory: the run recorded no messages or tool use)';
50
+ }
51
+ /** The last assistant message of a run. */
52
+ export function finalText(events) {
53
+ for (let i = events.length - 1; i >= 0; i--) {
54
+ const payload = events[i].payload;
55
+ if (events[i].type === 'message.completed' && payload?.role === 'assistant' && typeof payload.text === 'string' && payload.text.trim())
56
+ return payload.text;
57
+ }
58
+ return '';
59
+ }
60
+ /** The run's cost so far, from its last usage report. */
61
+ export function costOf(events) {
62
+ for (let i = events.length - 1; i >= 0; i--) {
63
+ const payload = events[i].payload;
64
+ if (events[i].type === 'usage.updated' && typeof payload?.costUsd === 'number')
65
+ return payload.costUsd;
66
+ }
67
+ return 0;
68
+ }
@@ -0,0 +1,77 @@
1
+ import type { Variant } from "../variant/surface.js";
2
+ import type { WorkPrompts } from "./prompts.js";
3
+ export type RecursionMode = 'parallel' | 'sequential';
4
+ /** One piece of work to refine on. */
5
+ export interface RefineTask {
6
+ /** Stable id of the task; names its folder and its library entry. */
7
+ id: string;
8
+ /** The request, as the agent received it, with any expected answer stripped. */
9
+ prompt: string;
10
+ /** The harness scope: whose variant this is and whose library it reads and grows. */
11
+ scope: string;
12
+ /** A grouping inside the scope's library. Defaults to the scope. */
13
+ domain?: string;
14
+ /** Material the work was done from, served to improvers and the selector as `source/`. */
15
+ sourceDir?: string | null;
16
+ /** Paths that must never reach a model (answer keys and the like), as globs. */
17
+ leakGlobs?: string[];
18
+ /** The text about the work the prompts interpolate. */
19
+ prompts?: WorkPrompts;
20
+ /** Whether a harness here may carry subagents. Default true. */
21
+ allowSubagents?: boolean;
22
+ }
23
+ /** What the method knows about one finished execution. Never carries a score. */
24
+ export interface Rollout {
25
+ label: string;
26
+ runId: string;
27
+ /** A folder that holds this execution's evidence. */
28
+ dir: string;
29
+ ok: boolean;
30
+ delivered: boolean;
31
+ costUsd: number;
32
+ wallMs: number;
33
+ error: string;
34
+ }
35
+ export interface Executor {
36
+ /**
37
+ * Runs one execution of `task` with the harness in `variantDir` (null: the base harness) and
38
+ * returns what it produced. A failure is returned as `ok: false`, never thrown.
39
+ */
40
+ execute(task: RefineTask, variantDir: string | null, label: string, runId: string): Promise<Rollout>;
41
+ /** The execution in the shared `[ACTION]/[OBSERVATION]/[ERROR]` grammar. */
42
+ trajectory(rollout: Rollout, options: {
43
+ obsTrunc: number;
44
+ }): string;
45
+ /** filename → readable text, one entry per artifact produced. */
46
+ deliverableFiles(rollout: Rollout): Record<string, string>;
47
+ /** Extra validation of a proposed variant for this task; throw with every problem listed. */
48
+ validateVariant?(task: RefineTask, variant: Variant): void;
49
+ }
50
+ export interface ImproverReply {
51
+ label: string;
52
+ text: string;
53
+ costUsd: number;
54
+ attempts: number;
55
+ cached: boolean;
56
+ /** The harvested folder, when the call asked for one; null when it did not come back. */
57
+ workspace: string | null;
58
+ }
59
+ export declare class ImproverError extends Error {
60
+ readonly attempts: number;
61
+ readonly costUsd: number;
62
+ constructor(message: string, attempts?: number, costUsd?: number);
63
+ }
64
+ export interface ImproverCall {
65
+ /** The instruction; evidence stays on disk under `context/`. */
66
+ mission: string;
67
+ /** The folder copied into the session as `context/`. */
68
+ contextDir: string;
69
+ /** A unique label for the audit trail and cache. */
70
+ label: string;
71
+ /** A path inside the session's folder to copy out before it is removed, e.g. `context/harness`. */
72
+ harvest?: string;
73
+ signal?: AbortSignal;
74
+ }
75
+ export interface Improver {
76
+ call(input: ImproverCall): Promise<ImproverReply>;
77
+ }
@@ -0,0 +1,10 @@
1
+ export class ImproverError extends Error {
2
+ attempts;
3
+ costUsd;
4
+ constructor(message, attempts = 0, costUsd = 0) {
5
+ super(message);
6
+ this.attempts = attempts;
7
+ this.costUsd = costUsd;
8
+ this.name = 'ImproverError';
9
+ }
10
+ }
@@ -0,0 +1,3 @@
1
+ import type { Harness } from "../harness.js";
2
+ import type { Handler } from "./rpc.js";
3
+ export declare function methods(harness: Harness): Record<string, Handler>;
@@ -0,0 +1,293 @@
1
+ // Everything a host process can ask of the harness, by name. Each method takes one JSON object
2
+ // and returns JSON; the in-process API these call is the same one a Node application uses
3
+ // directly. Methods are grouped by the part of the harness they belong to.
4
+ import { ensureSharedDir, nativeConfig } from "../accounts/env.js";
5
+ import { audit, readAudit, summaryAuthentication } from "../accounts/store.js";
6
+ import { HarnessError, invalid } from "../core/errors.js";
7
+ import * as capabilities from "../capabilities/api.js";
8
+ import { loadRun as loadCapabilitySnapshot } from "../capabilities/runSnapshot.js";
9
+ import { capabilitySet } from "../capabilities/runSnapshot.js";
10
+ import * as plugins from "../plugins/api.js";
11
+ import { BUILTIN_PLUGIN_REGISTRY } from "../plugins/builtin.js";
12
+ import * as install from "../plugins/install.js";
13
+ import { compile, load, render } from "../prompt/compile.js";
14
+ import { continuationOf } from "../sessions/continuation.js";
15
+ import { selectHistory } from "../sessions/history.js";
16
+ import { runsSince } from "../sessions/runIndex.js";
17
+ import { findRun, listRuns, loadRun, pendingDecisions, readEvents, runFamily, snapshot } from "../sessions/runStore.js";
18
+ import { checklistOf } from "../tools/checklist.js";
19
+ import { dispatch } from "../tools/dispatch.js";
20
+ import * as components from "../variant/components.js";
21
+ import { materialise } from "../variant/materialise.js";
22
+ import { seedVariant } from "../variant/seed.js";
23
+ import * as variants from "../variant/store.js";
24
+ import { PI_SURFACE } from "../variant/surface.js";
25
+ import { applyEdit, autotrigger, VariantError, validate } from "../variant/variant.js";
26
+ import { optional, text } from "./params.js";
27
+ const questionAnswer = (value) => {
28
+ const answer = value && typeof value === 'object' && !Array.isArray(value) ? value : {};
29
+ return {
30
+ selected: Array.isArray(answer.selected) ? answer.selected.filter((label) => typeof label === 'string') : [],
31
+ ...(typeof answer.text === 'string' && answer.text ? { text: answer.text } : {}),
32
+ ...(answer.notes && typeof answer.notes === 'object' && !Array.isArray(answer.notes)
33
+ ? { notes: Object.fromEntries(Object.entries(answer.notes).filter((entry) => typeof entry[1] === 'string')) }
34
+ : {})
35
+ };
36
+ };
37
+ const pluginScope = (params) => ({ cwd: optional(params, 'cwd'), accountId: optional(params, 'accountId'), agentId: optional(params, 'agentId'), projectId: optional(params, 'projectId') });
38
+ const variantOf = (value) => {
39
+ if (!value || typeof value !== 'object' || Array.isArray(value))
40
+ throw invalid('variant must be an object of path → text.');
41
+ const out = {};
42
+ for (const [path, body] of Object.entries(value)) {
43
+ if (typeof body !== 'string')
44
+ throw invalid(`${path} must be text.`);
45
+ out[path] = body;
46
+ }
47
+ return out;
48
+ };
49
+ /** Validates a variant without throwing: its census, or every problem. */
50
+ function check(variant) {
51
+ try {
52
+ return { ok: true, census: validate(PI_SURFACE, variant) };
53
+ }
54
+ catch (error) {
55
+ return { ok: false, problems: error instanceof VariantError ? error.problems : [error instanceof Error ? error.message : String(error)] };
56
+ }
57
+ }
58
+ export function methods(harness) {
59
+ const { accounts, approvals, runs, sessions, terminals, env } = harness;
60
+ const root = () => env.root;
61
+ const variantsChanged = (scope) => harness.bus.emit({ type: 'variants.changed', scope });
62
+ const builtins = BUILTIN_PLUGIN_REGISTRY.serverMethods(harness);
63
+ const foundation = {
64
+ // ---- The harness itself --------------------------------------------------------------------
65
+ 'harness.status': () => ({ dataRoot: harness.dataRoot, productName: env.productName, recovery: harness.recovery, activeRuns: runs.activeRunIds() }),
66
+ 'harness.open': (params) => harness.open(text(params, 'dataRoot'), Array.isArray(params.agentIds) ? params.agentIds : []),
67
+ 'harness.rebuildIndex': () => harness.rebuildIndex(),
68
+ // ---- Accounts --------------------------------------------------------------------------------
69
+ 'accounts.list': () => accounts.overview(),
70
+ 'accounts.find': (params) => accounts.find(text(params, 'accountId')),
71
+ 'accounts.resolve': (params) => accounts.resolve(optional(params, 'accountId'), optional(params, 'poolId')),
72
+ 'accounts.create': (params) => accounts.create(text(params, 'label'), optional(params, 'authKind') ?? 'subscription'),
73
+ 'accounts.rename': (params) => accounts.rename(text(params, 'accountId'), text(params, 'label')),
74
+ 'accounts.setDefault': (params) => accounts.setDefault(text(params, 'accountId')),
75
+ 'accounts.remove': (params) => accounts.remove(text(params, 'accountId')),
76
+ 'accounts.savePool': (params) => accounts.savePool(params.pool),
77
+ 'accounts.removePool': (params) => accounts.removePool(text(params, 'poolId')),
78
+ 'accounts.audit': (params) => readAudit(accounts.dir, optional(params, 'accountId'), typeof params.limit === 'number' ? params.limit : 100),
79
+ // A line in the account audit log for something the application did with the account (pinning a session to it).
80
+ 'accounts.record': (params) => audit(accounts.dir, optional(params, 'accountId'), text(params, 'action'), typeof params.detail === 'string' ? params.detail : ''),
81
+ 'accounts.nativeConfig': () => nativeConfig(accounts.dir),
82
+ // The folder every account shares, created if no account has linked it yet.
83
+ 'accounts.sharedDir': () => ensureSharedDir(accounts.dir),
84
+ 'accounts.refresh': (params) => accounts.refresh(optional(params, 'accountId')),
85
+ 'accounts.loginStart': (params) => accounts.loginStart(text(params, 'accountId'), text(params, 'provider'), optional(params, 'method')),
86
+ 'accounts.loginStatus': (params) => accounts.loginStatus(text(params, 'accountId')),
87
+ 'accounts.loginRespond': (params) => accounts.loginRespond(text(params, 'loginId'), text(params, 'promptId'), typeof params.value === 'string' ? params.value : null),
88
+ 'accounts.loginCancel': (params) => accounts.loginCancel(text(params, 'accountId'), optional(params, 'loginId')),
89
+ 'accounts.setApiKey': (params) => accounts.setApiKey(text(params, 'accountId'), text(params, 'key'), text(params, 'provider')),
90
+ 'accounts.removeProvider': (params) => accounts.removeProvider(text(params, 'accountId'), text(params, 'provider')),
91
+ 'accounts.signOut': (params) => accounts.signOut(text(params, 'accountId')),
92
+ 'accounts.providers': () => accounts.providers(),
93
+ 'accounts.models': (params) => accounts.models(optional(params, 'accountId')),
94
+ 'accounts.choices': (params) => accounts.choices(text(params, 'accountId')),
95
+ 'accounts.choose': (params) => accounts.choose(text(params, 'accountId'), text(params, 'mode'), {
96
+ ...(typeof params.model === 'string' ? { model: params.model } : {}),
97
+ ...(typeof params.effort === 'string' ? { effort: params.effort } : {})
98
+ }),
99
+ 'accounts.authentication': () => summaryAuthentication(accounts.dir),
100
+ 'accounts.status': (params) => accounts.status(optional(params, 'accountId')),
101
+ // ---- Standing approvals ----------------------------------------------------------------------
102
+ 'approvals.get': () => approvals.read(),
103
+ 'approvals.setAuto': (params) => approvals.setAuto(text(params, 'key'), params.on === true),
104
+ 'approvals.remember': (params) => approvals.remember(text(params, 'sessionId'), text(params, 'target')),
105
+ 'approvals.forget': (params) => approvals.forget(text(params, 'sessionId'), text(params, 'target')),
106
+ 'approvals.forgetSession': (params) => approvals.forgetSession(text(params, 'sessionId')),
107
+ // ---- Variants: the eight components that shape an agent ---------------------------------
108
+ 'variants.surface': () => PI_SURFACE,
109
+ 'variants.list': () => variants.scopes(root()).map((scope) => {
110
+ const head = variants.head(root(), scope);
111
+ return { scope, head, version: head ? variants.versionRecord(root(), scope, head.fingerprint) : null };
112
+ }),
113
+ 'variants.get': (params) => {
114
+ const scope = text(params, 'scope');
115
+ const head = variants.head(root(), scope);
116
+ const fp = optional(params, 'version') ?? head?.fingerprint ?? null;
117
+ if (!fp)
118
+ return { scope, head: null, version: null, variant: null, plugins: [] };
119
+ const variant = variants.readVersion(root(), scope, fp);
120
+ return { scope, head, version: variants.versionRecord(root(), scope, fp), variant, plugins: harness.trust.review(variant), probeCode: harness.trust.probeCode(scope) };
121
+ },
122
+ 'variants.lineage': (params) => variants.lineage(root(), text(params, 'scope')),
123
+ 'variants.compare': (params) => variants.compare(root(), text(params, 'scope'), text(params, 'from'), text(params, 'to')),
124
+ 'variants.validate': (params) => {
125
+ const variant = variantOf(params.variant);
126
+ const repaired = params.repair === true ? autotrigger(PI_SURFACE, variant) : [];
127
+ return { ...check(variant), repaired, variant };
128
+ },
129
+ // A whole variant, or an edit of the head that names only the files it changes (null removes one).
130
+ 'variants.save': (params) => {
131
+ const scope = text(params, 'scope');
132
+ const base = variants.headVariant(root(), scope)?.variant ?? {};
133
+ const variant = params.variant !== undefined ? variantOf(params.variant) : applyEdit(base, (params.edit ?? {}));
134
+ if (params.repair === true)
135
+ autotrigger(PI_SURFACE, variant);
136
+ const record = variants.commit(root(), scope, variant, { kind: params.source === 'import' ? 'import' : 'edit', note: optional(params, 'note') ?? undefined, components: Array.isArray(params.components) ? params.components : undefined });
137
+ variantsChanged(scope);
138
+ return record;
139
+ },
140
+ 'variants.restore': (params) => {
141
+ const scope = text(params, 'scope');
142
+ const head = variants.restore(root(), scope, text(params, 'version'), optional(params, 'note') ?? undefined);
143
+ variantsChanged(scope);
144
+ return head;
145
+ },
146
+ // A first version: the variant given, or one built from what shaped the caller before variants.
147
+ 'variants.seed': (params) => {
148
+ const scope = text(params, 'scope');
149
+ const variant = params.variant !== undefined ? variantOf(params.variant) : seedVariant(root(), { agentId: optional(params, 'agentId') ?? scope, projectId: optional(params, 'projectId'), instructions: typeof params.instructions === 'string' ? params.instructions : '' });
150
+ const head = variants.seed(root(), scope, variant, optional(params, 'note') ?? undefined);
151
+ variantsChanged(scope);
152
+ return head;
153
+ },
154
+ 'variants.legacy': (params) => seedVariant(root(), { agentId: optional(params, 'agentId'), projectId: optional(params, 'projectId'), instructions: typeof params.instructions === 'string' ? params.instructions : '' }),
155
+ 'variants.trusted': () => harness.trust.list(),
156
+ 'variants.trust': (params) => {
157
+ const scope = text(params, 'scope');
158
+ const variant = variants.headVariant(root(), scope)?.variant ?? {};
159
+ const path = text(params, 'path');
160
+ const body = typeof params.text === 'string' ? params.text : variant[path];
161
+ if (typeof body !== 'string')
162
+ throw invalid('That plugin file is not in the harness.');
163
+ const entry = harness.trust.grant(body, path, scope);
164
+ variantsChanged(scope);
165
+ return entry;
166
+ },
167
+ 'variants.untrust': (params) => {
168
+ harness.trust.revoke(text(params, 'hash'));
169
+ harness.bus.emit({ type: 'variants.changed' });
170
+ },
171
+ 'variants.setProbeCode': (params) => {
172
+ const scope = text(params, 'scope');
173
+ harness.trust.setProbeCode(scope, params.on === true);
174
+ variantsChanged(scope);
175
+ },
176
+ // The component library (skills, rules and prompts kept as files), and adding one to a variant.
177
+ 'variants.components': () => components.list(root()),
178
+ 'variants.importComponents': (params) => components.importItems(root(), (optional(params, 'kind') ?? 'skills'), Array.isArray(params.items) ? params.items : []),
179
+ 'variants.addComponent': (params) => {
180
+ const scope = text(params, 'scope');
181
+ const base = params.variant !== undefined ? variantOf(params.variant) : variants.headVariant(root(), scope)?.variant ?? {};
182
+ const variant = components.addToVariant(root(), base, text(params, 'id'));
183
+ return { variant, ...check(variant) };
184
+ },
185
+ 'variants.materialise': (params) => {
186
+ const built = materialise(root(), params.variant, { trust: harness.trust });
187
+ return { ...built, files: undefined };
188
+ },
189
+ // ---- What a session calls, on behalf of a caller the host names -------------------------------
190
+ 'harness.call': (params) => dispatch(env, (params.context ?? {}), text(params, 'call'), params.params ?? {}, { variantDir: optional(params, 'variantDir') }),
191
+ // ---- The compiled prompt -----------------------------------------------------------------------
192
+ 'context.compile': (params) => {
193
+ const variant = params.variant ? materialise(root(), params.variant, { trust: harness.trust }) : null;
194
+ const pack = compile(env, (params.context ?? {}), (params.launch ?? {}), variant);
195
+ return params.render ? { pack, text: render(env, pack) } : pack;
196
+ },
197
+ 'context.runPack': (params) => load(root(), text(params, 'runId')),
198
+ // ---- Plugins: everything that shapes a session, and the trust a working folder's code needs ---
199
+ // A host that is not a Node program describes its own parts here instead of in the options.
200
+ 'plugins.describe': (params) => {
201
+ harness.describe(Array.isArray(params.plugins) ? params.plugins : []);
202
+ harness.bus.emit({ type: 'plugins.changed' });
203
+ return { described: [...harness.applicationPlugins] };
204
+ },
205
+ 'plugins.list': (params) => plugins.list(harness, pluginScope(params)),
206
+ 'plugins.get': async (params) => (await plugins.list(harness, pluginScope(params))).find((plugin) => plugin.id === text(params, 'pluginId')) ?? null,
207
+ 'plugins.attach': (params) => plugins.attach(harness, { ...pluginScope(params), id: text(params, 'id'), scope: params.scope ?? null }, true),
208
+ 'plugins.detach': (params) => plugins.attach(harness, { ...pluginScope(params), id: text(params, 'id'), scope: params.scope ?? null }, false),
209
+ 'plugins.install': (params) => install.install(harness, { ...pluginScope(params), source: text(params, 'source') }),
210
+ 'plugins.remove': (params) => install.remove(harness, { ...pluginScope(params), pluginId: text(params, 'pluginId') }),
211
+ 'plugins.update': (params) => install.update(harness, { ...pluginScope(params), pluginId: optional(params, 'pluginId') }),
212
+ 'plugins.configure': (params) => plugins.configure(harness, { ...pluginScope(params), pluginId: text(params, 'pluginId'), settings: (params.settings && typeof params.settings === 'object' ? params.settings : {}) }),
213
+ 'plugins.forgetAgent': (params) => plugins.forgetAgent(harness, text(params, 'agentId')),
214
+ 'plugins.inventory': (params) => plugins.inventoryFor(harness, { ...pluginScope(params), context: (params.context ?? {}), launch: (params.launch ?? {}), tools: params.tools, connections: params.connections, variant: (params.variant ?? null) }),
215
+ 'plugins.trust': (params) => plugins.trust(harness, { cwd: optional(params, 'cwd'), accountId: optional(params, 'accountId'), hash: text(params, 'hash') }),
216
+ 'plugins.untrust': (params) => plugins.untrust(harness, { cwd: optional(params, 'cwd'), accountId: optional(params, 'accountId'), hash: text(params, 'hash') }),
217
+ // ---- Capabilities: the caller-facing view over the existing stores -------------------------
218
+ 'capabilities.list': (params) => capabilities.list(harness, pluginScope(params)),
219
+ 'capabilities.inventory': (params) => capabilities.inventory(harness, { ...pluginScope(params), context: (params.context ?? {}), launch: (params.launch ?? {}), tools: Array.isArray(params.tools) ? params.tools : [], connections: params.connections }),
220
+ 'capabilities.attach': (params) => capabilities.switchCapability(harness, { ...pluginScope(params), id: text(params, 'id'), scope: params.scope ?? null }, true),
221
+ 'capabilities.detach': (params) => capabilities.switchCapability(harness, { ...pluginScope(params), id: text(params, 'id'), scope: params.scope ?? null }, false),
222
+ 'capabilities.resolve': (params) => capabilities.resolve(harness, { ...pluginScope(params), tools: Array.isArray(params.tools) ? params.tools.filter((item) => typeof item === 'string') : [] }),
223
+ 'capabilities.run': (params) => loadCapabilitySnapshot(root(), text(params, 'runId')),
224
+ 'capabilities.intersect': (params) => capabilities.toolIntersection(capabilitySet(params.parent), capabilitySet(params.assignee), params.tools === undefined ? undefined : Array.isArray(params.tools) ? params.tools.filter((item) => typeof item === 'string') : []),
225
+ // ---- Runs --------------------------------------------------------------------------------------
226
+ 'runs.load': (params) => snapshot(root(), text(params, 'runId')),
227
+ 'runs.family': (params) => runFamily(root(), text(params, 'runId')),
228
+ 'runs.find': (params) => findRun(root(), text(params, 'runId')),
229
+ 'runs.list': (params) => listRuns(root(), params.filter ?? {}),
230
+ // Ids of the runs one session, agent, or account made since an instant, oldest first.
231
+ 'runs.since': (params) => runsSince(root(), { session: optional(params.filter ?? {}, 'session'), agent: optional(params.filter ?? {}, 'agent'), account: optional(params.filter ?? {}, 'account') }, optional(params, 'since')),
232
+ 'runs.events': (params) => readEvents(root(), text(params, 'runId')),
233
+ 'runs.pending': (params) => pendingDecisions(readEvents(root(), text(params, 'runId'))),
234
+ 'runs.checklist': (params) => checklistOf(readEvents(root(), text(params, 'runId'))),
235
+ 'runs.continuation': (params) => continuationOf(root(), text(params, 'runId'), optional(params, 'sessionDir')),
236
+ 'runs.active': () => runs.activeRunIds(),
237
+ 'runs.interrupt': async (params) => {
238
+ const runId = text(params, 'runId');
239
+ loadRun(root(), runId);
240
+ await runs.interrupt(runId);
241
+ return loadRun(root(), runId);
242
+ },
243
+ // A message the person sends into a live reply. It reaches the model after the current step;
244
+ // `message.steered` marks the moment, and a message the run never takes is reported by its end.
245
+ 'runs.steer': async (params) => {
246
+ const runId = text(params, 'runId');
247
+ await runs.steer(runId, text(params, 'text'));
248
+ return { runId };
249
+ },
250
+ // What the application reports into a live run, and an approval it asks a person for.
251
+ 'runs.emit': (params) => {
252
+ const run = runs.active(text(params, 'runId'));
253
+ if (!run)
254
+ throw new HarnessError('run_not_active', 'This run is not active.');
255
+ run.emit(params.type, params.payload ?? {});
256
+ },
257
+ 'runs.requestApproval': async (params) => {
258
+ const run = runs.active(text(params, 'runId'));
259
+ if (!run)
260
+ throw new HarnessError('run_not_active', 'The requesting run has ended.');
261
+ const decision = await run.requestApproval({
262
+ target: text(params, 'target'),
263
+ action: typeof params.action === 'string' ? params.action : '',
264
+ ...(typeof params.screenshotRef === 'string' ? { screenshotRef: params.screenshotRef } : {}),
265
+ ...(params.operation ? { operation: params.operation } : {}),
266
+ standing: params.standing === 'none' || params.standing === 'switch' ? params.standing : 'full',
267
+ ...(typeof params.timeoutMs === 'number' ? { timeoutMs: params.timeoutMs } : {})
268
+ });
269
+ return { decision };
270
+ },
271
+ 'runs.resolveApproval': (params) => runs.resolveApproval(text(params, 'runId'), text(params, 'approvalId'), params.decision),
272
+ 'runs.answerQuestion': (params) => runs.answerQuestion(text(params, 'runId'), text(params, 'questionId'), questionAnswer(params.answer)),
273
+ 'runs.answerQuestions': (params) => {
274
+ if (!Array.isArray(params.answers))
275
+ throw invalid('answers must be an array.');
276
+ runs.answerQuestions(text(params, 'runId'), text(params, 'batchId'), params.answers.map((item) => ({ questionId: text(item, 'questionId'), answer: questionAnswer(item.answer) })));
277
+ },
278
+ // ---- Sessions ----------------------------------------------------------------------------------
279
+ 'sessions.spawnSubagent': (params) => sessions.spawnSubagent(params),
280
+ 'sessions.run': (params) => sessions.run(params),
281
+ 'sessions.history': (params) => ({ sessionFile: selectHistory({ sessionDir: text(params, 'sessionDir'), resume: params.resume ?? null }) }),
282
+ // ---- Terminal sessions -------------------------------------------------------------------------
283
+ 'terminal.prepare': (params) => terminals.prepare(params),
284
+ 'terminal.send': (params) => terminals.send({ sessionId: text(params, 'sessionId'), runId: optional(params, 'runId'), text: text(params, 'text') }),
285
+ 'terminal.input': (params) => terminals.input(text(params, 'sessionId'), typeof params.data === 'string' ? params.data : ''),
286
+ 'terminal.state': (params) => terminals.state(text(params, 'sessionId')),
287
+ 'terminal.dispose': (params) => terminals.dispose(text(params, 'sessionId'))
288
+ };
289
+ const overlap = Object.keys(foundation).find(name => name in builtins);
290
+ if (overlap)
291
+ throw new Error(`Server method ${overlap} is owned by both Foundation and a built-in plugin.`);
292
+ return { ...builtins, ...foundation };
293
+ }
@@ -0,0 +1,4 @@
1
+ export type Params = Record<string, any>;
2
+ export declare const text: (params: Params, name: string) => string;
3
+ export declare const optional: (params: Params, name: string) => string | null;
4
+ export declare function pick<T extends string>(params: Params, keys: readonly T[]): Record<T, unknown>;