@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,152 @@
1
+ import type { Accounts } from "../accounts/accounts.js";
2
+ import type { CapabilitySet } from "../capabilities/types.js";
3
+ import type { CallerContext } from "../core/caller.js";
4
+ import type { Plugins } from "../plugins/plugins.js";
5
+ import { type Launch } from "../prompt/compile.js";
6
+ import { type VariantChoice } from "../variant/materialise.js";
7
+ import type { VariantTrust } from "../variant/trust.js";
8
+ import type { ToolProvider, ToolSession, ToolSpec } from "../tools/types.js";
9
+ import type { DispatchEnv } from "../tools/dispatch.js";
10
+ import type { RunRecord } from "./contracts.js";
11
+ import { type SubagentInput, type SubagentOptions } from "./subagents.js";
12
+ import type { Subagents } from "./subagentService.js";
13
+ import type { ToolPolicy } from "./policy.js";
14
+ import type { ActiveRun, RunRegistry } from "./registry.js";
15
+ import { type Effort, type SessionFactory, type ToolGate } from "./runner.js";
16
+ /** The fields of a run record the caller decides; the harness fills in the rest. */
17
+ export type RunFields = Pick<RunRecord, 'id' | 'sessionId'> & Partial<Pick<RunRecord, 'mode' | 'harness' | 'sessionType' | 'projectId' | 'agentId' | 'trigger' | 'goal' | 'attachmentCount' | 'resumedFromRunId' | 'parentRunId' | 'relation' | 'worktreeId' | 'handoffId' | 'profile' | 'title'>>;
18
+ export interface SessionRunInput {
19
+ run: RunFields;
20
+ /** The account this session is pinned to. A new session may name a pool, or neither for the default. */
21
+ accountId?: string | null;
22
+ poolId?: string | null;
23
+ model?: string | null;
24
+ effort?: Effort | null;
25
+ cwd: string;
26
+ /** Where this session's native history lives. */
27
+ sessionDir: string;
28
+ /** Continue exactly this recorded history; never another one. */
29
+ resume?: {
30
+ sessionFile?: string | null;
31
+ nativeSessionId?: string | null;
32
+ } | null;
33
+ text: string;
34
+ /** Run this user-authored Bash command before prompting the model. */
35
+ initialBashCommand?: string;
36
+ /** A prior run's Bash attempt and result, supplied when retrying a ! command. */
37
+ initialBashContext?: {
38
+ runId: string;
39
+ status: 'completed' | 'incomplete' | 'unknown';
40
+ ok?: boolean;
41
+ output?: string;
42
+ };
43
+ images?: {
44
+ mediaType: string;
45
+ data: string;
46
+ }[];
47
+ /** Reject a resolved model that cannot inspect image content. */
48
+ requiresImageInput?: boolean;
49
+ preamble?: string | null;
50
+ /** Unattended: no project extensions, no context files, nothing may ask a person. */
51
+ automatic?: boolean;
52
+ /** Who the session works as, for history, the Wiki and the prompt. */
53
+ caller: CallerContext;
54
+ /**
55
+ * The variant the session runs: a scope's head (or a version of it), or a variant on disk.
56
+ * Its version is pinned for the whole run and recorded on it.
57
+ */
58
+ variant?: VariantChoice | null;
59
+ /** What the application adds to the prompt, and which tools it describes. */
60
+ launch?: Launch;
61
+ /** The tools switched on, in the order the model sees them, and those that ask before each call. */
62
+ tools: {
63
+ allow: string[];
64
+ gated?: string[];
65
+ };
66
+ /** Give the session the connected-apps broker. */
67
+ connections?: boolean | {
68
+ readOnly?: boolean;
69
+ };
70
+ /** Optional narrower set for a child run; the harness intersects it with current availability. */
71
+ capabilities?: CapabilitySet;
72
+ /** Hops from the user to this session (0 when the user started it). */
73
+ depth?: number;
74
+ /** Interactive default: native child tools. Null disables; unattended callers must opt in. */
75
+ subagents?: SubagentOptions | null;
76
+ /** Ask the application's tool providers for tools (the default). False runs with the harness's own tools only. */
77
+ providers?: boolean;
78
+ /** Give the session the harness's own tools: History, the Wiki, skills, and other defaults. */
79
+ harnessTools?: boolean;
80
+ /**
81
+ * Plan mode: an attended run may read, search, recall and ask, and is told to end with a
82
+ * `<proposed_plan>` block. Other calls are refused at the gate; the system prompt stays stable.
83
+ */
84
+ plan?: boolean;
85
+ /**
86
+ * Continue a run that stopped before it finished: the earlier run's id. The new run reopens its
87
+ * native history and pins its account, variant version and capability set, and the model is told
88
+ * where it stopped. The harness never does this by itself; the application asks for it.
89
+ */
90
+ continueFrom?: string | null;
91
+ }
92
+ /** The connected-apps broker, as a session sees it. */
93
+ export interface SessionBroker {
94
+ toolNames: readonly string[];
95
+ tools(session: ToolSession, options: {
96
+ readOnly: boolean;
97
+ }): ToolSpec[];
98
+ }
99
+ export interface SessionsOptions {
100
+ subagents: Subagents;
101
+ env: DispatchEnv;
102
+ accounts: Accounts;
103
+ runs: RunRegistry;
104
+ policy: ToolPolicy;
105
+ broker?: SessionBroker | null;
106
+ /** Chooses what a session loads. Without it Pi discovers extensions and skills on its own. */
107
+ plugins?: Plugins;
108
+ /** Resolves the caller's capability set from the harness's stores. */
109
+ resolveCapabilities?: (caller: CallerContext, tools: readonly string[], cwd: string) => Promise<CapabilitySet>;
110
+ factory?: SessionFactory;
111
+ /** Which plugin code in variants a person trusted. */
112
+ trust?: VariantTrust | null;
113
+ /** Managed worktrees: a run naming one works in its folder and holds it until the run settles. */
114
+ worktrees?: {
115
+ pathOf(id: string): string | null;
116
+ acquire(id: string, holder: string): Promise<unknown>;
117
+ release(id: string, holder: string): Promise<void>;
118
+ } | null;
119
+ }
120
+ export declare class Sessions {
121
+ private readonly options;
122
+ private readonly providers;
123
+ private readonly factory;
124
+ constructor(options: SessionsOptions);
125
+ private get env();
126
+ /** Adds tools an application provides. Providers are asked in the order they were added. */
127
+ provide(provider: ToolProvider): void;
128
+ diagnostics(context: import("../doctor/types.js").DoctorContext): Promise<import("../doctor/types.js").DoctorCheck[]>;
129
+ /** The same registered providers used by real runs; no native Pi session is constructed. */
130
+ diagnosticTools(session: import("../tools/types.js").ToolSession): Promise<import("../tools/types.js").ToolSpec[]>;
131
+ diagnosticGate(run: ActiveRun, caller: CallerContext): ToolGate;
132
+ private gate;
133
+ /** Compatibility alias for the shared native service. */
134
+ spawnSubagent(request: SubagentInput): Promise<{
135
+ runId: string;
136
+ nativeSessionId: string | null;
137
+ }>;
138
+ /**
139
+ * Starts one turn. Returns once the Pi session is open; the reply arrives as run events. A
140
+ * session that cannot be opened ends its run as failed and returns no native session id.
141
+ */
142
+ run(input: SessionRunInput): Promise<{
143
+ runId: string;
144
+ nativeSessionId: string | null;
145
+ }>;
146
+ /**
147
+ * A run that names a worktree the harness manages works in that worktree's folder and holds it
148
+ * until the run settles. An id the harness does not know is kept as the caller's own field.
149
+ */
150
+ private enterWorktree;
151
+ private start;
152
+ }
@@ -0,0 +1,461 @@
1
+ // Starting a session turn: the account, the run record, the compiled prompt, the tools and
2
+ // their gate, then Pi. Everything before Pi answers is synchronous with the caller; the reply
3
+ // itself streams as run events.
4
+ import { existsSync, mkdirSync } from 'node:fs';
5
+ import { join } from 'node:path';
6
+ import { log } from "../core/bus.js";
7
+ import { HarnessError, invalid } from "../core/errors.js";
8
+ import { capabilitySet as parseCapabilitySet, freezeRun } from "../capabilities/runSnapshot.js";
9
+ import { now, writeJson } from "../core/fs.js";
10
+ import { takeChars } from "../core/text.js";
11
+ import { BUILTIN_PLUGIN_REGISTRY } from "../plugins/builtin.js";
12
+ import { sessionLaunch } from "../prompt/compile.js";
13
+ import * as attachments from "../plugins/attachments.js";
14
+ import { FIRST_PARTY_PLUGINS, firstPartyExtensions } from "../plugins/firstParty.js";
15
+ import { imagePruning } from "../world/images.js";
16
+ import { materialise } from "../variant/materialise.js";
17
+ import { ASK_USER } from "../tools/askUser.js";
18
+ import { CHECKLIST_WRITE } from "../tools/checklist.js";
19
+ import { SESSION_NAME, sessionNameTool } from "../tools/sessionName.js";
20
+ import { DEFAULT_TOOL_NAMES } from "../tools/definitions.js";
21
+ import { SPAWN_SUBAGENT, WAIT_SUBAGENTS, subagentDepth, subagentHistory, subagentNesting } from "./subagents.js";
22
+ import { selectHistory } from "./history.js";
23
+ import { runLineageJoin } from "./lineageJoin.js";
24
+ import { piSessionFactory, runTurn, summarize } from "./runner.js";
25
+ import { loadRun, runDir, saveRun, updateRun } from "./runStore.js";
26
+ import { planRefusal, planSection } from "./planMode.js";
27
+ import { CONTINUATION_SECTION_ID, continuationOf, continuationSection } from "./continuation.js";
28
+ import { deliveredSnapshot } from "../prompt/compile.js";
29
+ import { profileSection } from "../agents/profiles.js";
30
+ const CONTINUE_TEXT = 'Continue from where you stopped.';
31
+ /** Fills a continuing run's input from the run it continues, refusing anything that would differ. */
32
+ function continueInput(root, input) {
33
+ const continuation = continuationOf(root, input.continueFrom, input.sessionDir);
34
+ if (!continuation.resumable || !continuation.resume)
35
+ throw new HarnessError('continuation_unavailable', `Run ${input.continueFrom} cannot be continued (${continuation.reason ?? 'history_missing'}).`);
36
+ const mismatch = (what) => new HarnessError('continuation_mismatch', `A continuation keeps the earlier run's ${what}.`);
37
+ if (continuation.capabilities?.tools.includes(ASK_USER)
38
+ && (input.automatic || ['probe', 'improver', 'reflection'].includes(input.run.trigger ?? ''))) {
39
+ throw mismatch('attended question capability');
40
+ }
41
+ if (continuation.sessionId !== input.run.sessionId)
42
+ throw mismatch('session');
43
+ if (input.resume?.nativeSessionId && input.resume.nativeSessionId !== continuation.resume.nativeSessionId)
44
+ throw mismatch('history');
45
+ if (input.accountId && input.accountId !== continuation.accountId)
46
+ throw mismatch('account');
47
+ const pinned = continuation.variant;
48
+ const chosen = input.variant ?? null;
49
+ if (chosen && (!pinned || 'dir' in chosen || chosen.scope !== pinned.scope || (chosen.version && chosen.version !== pinned.version)))
50
+ throw mismatch('harness version');
51
+ input.resume = continuation.resume;
52
+ input.run.resumedFromRunId ??= continuation.runId;
53
+ input.accountId = continuation.accountId;
54
+ input.poolId = null;
55
+ if (pinned)
56
+ input.variant = { scope: pinned.scope, version: pinned.version };
57
+ if (!input.capabilities && continuation.capabilities)
58
+ input.capabilities = continuation.capabilities;
59
+ if (!input.text.trim())
60
+ input.text = CONTINUE_TEXT;
61
+ return continuation;
62
+ }
63
+ /** The harness's own plugins a person switched on for this caller, with the numbers they set. */
64
+ function firstPartyFor(root, contributions) {
65
+ const choices = attachments.load(root);
66
+ const allowed = new Set(contributions);
67
+ return firstPartyExtensions((id) => FIRST_PARTY_PLUGINS.find((plugin) => plugin.id === id)?.code?.some((code) => allowed.has(`${id}/code/${code.name}`)) ?? false, choices.settings);
68
+ }
69
+ export class Sessions {
70
+ options;
71
+ providers = [];
72
+ factory;
73
+ constructor(options) {
74
+ this.options = options;
75
+ this.factory = options.factory ?? piSessionFactory;
76
+ }
77
+ get env() {
78
+ return this.options.env;
79
+ }
80
+ /** Adds tools an application provides. Providers are asked in the order they were added. */
81
+ provide(provider) {
82
+ this.providers.push(provider);
83
+ }
84
+ async diagnostics(context) {
85
+ const results = await Promise.allSettled(this.providers.map(provider => Promise.resolve().then(() => provider.diagnostics?.(context) ?? [])));
86
+ return results.flatMap((result, index) => result.status === 'fulfilled' ? result.value : [{
87
+ id: `provider.${index}`, category: 'tools', title: 'Provider diagnostics',
88
+ local: async () => ({ status: 'fail', evidence: 'This provider could not describe its readiness checks.', remedy: 'Review the provider configuration.' })
89
+ }]);
90
+ }
91
+ /** The same registered providers used by real runs; no native Pi session is constructed. */
92
+ async diagnosticTools(session) {
93
+ return (await Promise.all(this.providers.map(provider => provider(session)))).flat();
94
+ }
95
+ diagnosticGate(run, caller) {
96
+ return this.gate(run, caller, new Set(), true);
97
+ }
98
+ gate(run, caller, gated, diagnostic = false) {
99
+ const { policy } = this.options;
100
+ return {
101
+ ask: (names) => {
102
+ for (const name of names)
103
+ gated.add(name);
104
+ },
105
+ check: async (tool, args) => {
106
+ const call = { run: loadRun(this.env.root, run.runId), caller, tool, args };
107
+ const scope = (await policy.scope?.(call)) ?? { allowed: true };
108
+ if (!scope.allowed && (scope.automatic || !scope.requiresApproval))
109
+ return scope.reason ?? 'Outside the approved work scope.';
110
+ try {
111
+ await policy.authorize?.(call);
112
+ }
113
+ catch (error) {
114
+ return error instanceof Error ? error.message : 'Tool unavailable in the app settings.';
115
+ }
116
+ if (scope.allowed && !scope.humanOnly && (scope.automatic || !gated.has(tool)))
117
+ return null;
118
+ if (diagnostic)
119
+ return 'This diagnostic call requires a separate per-call approval.';
120
+ // Refinement and reflection runs have nobody to ask: what would need a person is refused, never queued.
121
+ if (call.run.trigger === 'probe' || call.run.trigger === 'improver')
122
+ return scope.reason ? `Refused in a refinement run: ${scope.reason}` : 'Refused in a refinement run: this call needs a person to approve it.';
123
+ if (call.run.trigger === 'reflection')
124
+ return scope.reason ? `Refused in a reflection run: ${scope.reason}` : 'Refused in a reflection run: this call needs a person to approve it.';
125
+ // A call outside the scope is approved one at a time; a gated tool may be remembered, unless only a person may decide it.
126
+ const decision = await run.requestApproval({
127
+ target: tool,
128
+ action: summarize(args),
129
+ operation: { tool, args: (args && typeof args === 'object' ? args : {}) },
130
+ rememberable: scope.allowed && !scope.humanOnly,
131
+ standing: scope.humanOnly ? (scope.allowGlobalApproval ? 'switch' : 'none') : undefined
132
+ });
133
+ if (decision !== 'approved')
134
+ return 'The user denied this action. Ask how they would like to proceed.';
135
+ try {
136
+ await policy.authorize?.(call);
137
+ }
138
+ catch (error) {
139
+ return error instanceof Error ? error.message : 'Tool was disabled while waiting.';
140
+ }
141
+ return null;
142
+ }
143
+ };
144
+ }
145
+ /** Compatibility alias for the shared native service. */
146
+ spawnSubagent(request) {
147
+ return this.options.subagents.spawn(request);
148
+ }
149
+ /**
150
+ * Starts one turn. Returns once the Pi session is open; the reply arrives as run events. A
151
+ * session that cannot be opened ends its run as failed and returns no native session id.
152
+ */
153
+ async run(input) {
154
+ if (!input?.run?.id || !input.run.sessionId || typeof input.text !== 'string')
155
+ throw invalid('A session turn needs a run id, a session, and text.');
156
+ input = structuredClone(input);
157
+ const worktree = await this.enterWorktree(input);
158
+ try {
159
+ return await this.start(input);
160
+ }
161
+ catch (error) {
162
+ await worktree?.release();
163
+ throw error;
164
+ }
165
+ }
166
+ /**
167
+ * A run that names a worktree the harness manages works in that worktree's folder and holds it
168
+ * until the run settles. An id the harness does not know is kept as the caller's own field.
169
+ */
170
+ async enterWorktree(input) {
171
+ const id = input.run.worktreeId;
172
+ const worktrees = this.options.worktrees;
173
+ if (!id || !worktrees)
174
+ return null;
175
+ const path = worktrees.pathOf(id);
176
+ if (!path)
177
+ return null;
178
+ const holder = input.run.sessionId;
179
+ await worktrees.acquire(id, holder);
180
+ input.cwd = path;
181
+ let released = false;
182
+ const release = async () => {
183
+ if (released)
184
+ return;
185
+ released = true;
186
+ stop();
187
+ await worktrees.release(id, holder).catch(() => undefined);
188
+ };
189
+ const stop = this.options.runs.listen((event) => {
190
+ if (event.runId !== input.run.id)
191
+ return;
192
+ const settled = event.type === 'completed' || event.type === 'failed' || (event.type === 'status.changed' && event.payload.status === 'interrupted');
193
+ if (settled)
194
+ void release();
195
+ });
196
+ return { release };
197
+ }
198
+ async start(input) {
199
+ const { root } = this.env;
200
+ if ((input.initialBashCommand !== undefined && input.initialBashCommand !== null) || (input.initialBashContext !== undefined && input.initialBashContext !== null)) {
201
+ const request = input.text.trimStart();
202
+ const requestedCommand = /^!\s*([\s\S]+)$/u.exec(request)?.[1];
203
+ if (!requestedCommand?.trim())
204
+ throw invalid('An initial Bash command must match a non-empty leading ! command in the user text.');
205
+ if (input.initialBashCommand != null) {
206
+ const matchesRequest = requestedCommand === input.initialBashCommand || requestedCommand.startsWith(`${input.initialBashCommand}\n\nAttached saved file references:`);
207
+ if (!input.initialBashCommand.trim() || !matchesRequest)
208
+ throw invalid('An initial Bash command must match a non-empty leading ! command in the user text.');
209
+ }
210
+ if (input.initialBashContext != null && (input.initialBashCommand != null
211
+ || typeof input.initialBashContext.runId !== 'string'
212
+ || !input.initialBashContext.runId.trim()
213
+ || input.initialBashContext.runId.length > 256
214
+ || typeof input.initialBashContext.status !== 'string'
215
+ || !['completed', 'incomplete', 'unknown'].includes(input.initialBashContext.status)
216
+ || input.initialBashContext.output !== undefined && typeof input.initialBashContext.output !== 'string'
217
+ || (input.initialBashContext.output?.length ?? 0) > 24_000
218
+ || input.initialBashContext.ok !== undefined && typeof input.initialBashContext.ok !== 'boolean')) {
219
+ throw invalid('A prior Bash result must be bounded and must not be combined with a new initial Bash command.');
220
+ }
221
+ if (input.automatic || input.plan || input.resume || input.continueFrom || input.run.relation || input.run.trigger != null && input.run.trigger !== 'user') {
222
+ throw invalid('An initial Bash command is available only for a new interactive user turn.');
223
+ }
224
+ }
225
+ const continuation = input.continueFrom ? continueInput(root, input) : null;
226
+ const historyFile = selectHistory({ sessionDir: input.sessionDir, resume: input.resume });
227
+ const account = this.options.accounts.resolve(input.accountId, input.poolId);
228
+ const context = this.options.accounts.context(account);
229
+ const runId = input.run.id;
230
+ const caller = { ...input.caller, runId, sessionId: input.caller.sessionId ?? input.run.sessionId };
231
+ const broker = input.connections ? this.options.broker : null;
232
+ const depth = input.depth ?? 0;
233
+ const canSpawn = input.subagents !== null && (!input.automatic || input.subagents !== undefined) && subagentNesting(root, input.run) < subagentDepth(input.subagents ?? undefined);
234
+ const pinnedAskUser = continuation?.capabilities?.tools.includes(ASK_USER) ?? false;
235
+ const interactivePlan = input.plan === true
236
+ && !input.automatic
237
+ && (input.run.trigger === undefined || input.run.trigger === null || input.run.trigger === 'user');
238
+ const harnessToolsEnabled = input.harnessTools !== false || pinnedAskUser;
239
+ const canAskUser = pinnedAskUser || (interactivePlan && harnessToolsEnabled);
240
+ const requestedTools = [...new Set([
241
+ ...input.tools.allow.filter((name) => name !== SPAWN_SUBAGENT && name !== WAIT_SUBAGENTS && (name !== ASK_USER || canAskUser)),
242
+ ...(harnessToolsEnabled ? [...(canAskUser ? [ASK_USER] : []), CHECKLIST_WRITE, SESSION_NAME, ...DEFAULT_TOOL_NAMES] : []),
243
+ ...(broker?.toolNames ?? []),
244
+ ...(canSpawn ? [SPAWN_SUBAGENT, WAIT_SUBAGENTS] : [])
245
+ ])];
246
+ const available = this.options.resolveCapabilities
247
+ ? await this.options.resolveCapabilities(caller, requestedTools, input.cwd)
248
+ : { version: 1, tools: requestedTools, connectors: [], contributions: [] };
249
+ const requested = input.capabilities ? parseCapabilitySet(input.capabilities) : available;
250
+ const capabilities = {
251
+ version: 1,
252
+ tools: available.tools.filter((tool) => requested.tools.includes(tool)),
253
+ connectors: available.connectors.filter((id) => requested.connectors.includes(id)),
254
+ contributions: available.contributions.filter((id) => requested.contributions.includes(id))
255
+ };
256
+ freezeRun(root, runId, caller, capabilities);
257
+ // The harness is resolved once and pinned: a child run or a later turn of this run uses the
258
+ // same files even if the head moves meanwhile.
259
+ let variant = null;
260
+ if (input.variant) {
261
+ const scope = input.variant.scope ?? null;
262
+ const trust = this.options.trust ?? null;
263
+ variant = materialise(root, input.variant, { trust, probeCode: input.run.trigger === 'probe' && Boolean(scope && trust?.probeCode(scope)), subagents: capabilities.tools.includes(SPAWN_SUBAGENT) });
264
+ input.variant = { dir: variant.dir, scope: variant.scope };
265
+ }
266
+ saveRun(root, {
267
+ resumedFromRunId: input.run.resumedFromRunId ?? null,
268
+ parentRunId: input.run.parentRunId ?? null,
269
+ relation: input.run.relation ?? null,
270
+ terminalReason: null,
271
+ id: runId,
272
+ projectId: input.run.projectId ?? caller.projectId ?? null,
273
+ mode: input.run.mode ?? 'chat',
274
+ harness: input.run.harness ?? 'pi',
275
+ sessionType: input.run.sessionType ?? 'structured',
276
+ sessionId: input.run.sessionId,
277
+ nativeSessionId: null,
278
+ workingDirectory: input.cwd,
279
+ worktreeId: input.run.worktreeId ?? null,
280
+ goal: input.run.goal ?? takeChars(input.text, 4000),
281
+ attachmentCount: input.run.attachmentCount ?? 0,
282
+ startedAt: now(),
283
+ endedAt: null,
284
+ status: 'queued',
285
+ exitCode: null,
286
+ handoffId: input.run.handoffId ?? null,
287
+ accountId: account.id,
288
+ agentId: input.run.agentId ?? caller.agentId ?? null,
289
+ trigger: input.run.trigger ?? null,
290
+ variantScope: variant?.scope ?? null,
291
+ variantVersion: variant?.fingerprint ?? null,
292
+ ...(input.run.profile ? { profile: input.run.profile } : {}),
293
+ ...(input.run.title ? { title: input.run.title } : {})
294
+ });
295
+ // What the session is, kept with the run so later consolidation knows which memory it had.
296
+ try {
297
+ writeJson(join(runDir(root, runId), 'caller.json'), caller);
298
+ }
299
+ catch {
300
+ // Consolidation falls back to what the run record says.
301
+ }
302
+ const fail = (error, code = 'provider_unavailable') => {
303
+ const message = error instanceof Error ? error.message : String(error);
304
+ updateRun(root, runId, (record) => Object.assign(record, { status: 'failed', endedAt: now(), terminalReason: message }));
305
+ log(`session ${runId} did not start: ${message}`, code);
306
+ };
307
+ let system;
308
+ let update;
309
+ try {
310
+ if (!existsSync(input.sessionDir))
311
+ mkdirSync(input.sessionDir, { recursive: true });
312
+ const launch = input.launch ?? {};
313
+ const plan = planSection(input.plan === true, historyFile);
314
+ const delivered = historyFile ? deliveredSnapshot(historyFile) : null;
315
+ const resumed = continuationSection(continuation, delivered?.some((entry) => entry.id === CONTINUATION_SECTION_ID) ?? false);
316
+ // The profiles replace the variant's own subagent list, which they include.
317
+ const profiles = capabilities.tools.includes(SPAWN_SUBAGENT) ? profileSection(root, input.cwd, variant?.dir ?? null) : null;
318
+ if (profiles && variant)
319
+ variant = { ...variant, sections: variant.sections.filter((section) => section.id !== profiles.id) };
320
+ const own = [plan, resumed, profiles].filter((section) => section !== null);
321
+ const effectiveLaunch = {
322
+ ...launch,
323
+ sections: own.length ? [...(launch.sections ?? []).filter((section) => !own.some((entry) => entry.id === section.id)), ...own] : launch.sections,
324
+ tools: capabilities.tools,
325
+ connectionTools: (launch.connectionTools ?? []).filter((name) => capabilities.tools.includes(name)),
326
+ toolGroups: launch.toolGroups?.map((group) => ({ ...group, tools: group.tools.filter((name) => capabilities.tools.includes(name)) })).filter((group) => group.tools.length > 0)
327
+ };
328
+ ({ system, update } = sessionLaunch(this.env, caller, effectiveLaunch, historyFile, variant));
329
+ }
330
+ catch (error) {
331
+ fail(error);
332
+ throw error;
333
+ }
334
+ const run = this.options.runs.start(input.run.sessionId, runId);
335
+ if (run.finished)
336
+ return { runId, nativeSessionId: null };
337
+ if (variant?.untrustedPlugins.length) {
338
+ run.emit('extension.notice', { kind: 'notify', level: 'warning', text: `Harness plugins not loaded until their code is trusted: ${variant.untrustedPlugins.join(', ')}.` });
339
+ }
340
+ // What every session has, after the tools the caller switched on and in a fixed order.
341
+ const allow = capabilities.tools;
342
+ const session = { run, caller, allow, depth, cwd: input.cwd, capabilities };
343
+ const { plugins } = this.options;
344
+ let pi;
345
+ const naming = sessionNameTool(() => {
346
+ const current = pi;
347
+ if (!current?.setSessionName)
348
+ return undefined;
349
+ return {
350
+ get sessionName() { return current.sessionName; },
351
+ setSessionName: name => current.setSessionName(name)
352
+ };
353
+ });
354
+ try {
355
+ const tools = [
356
+ ...BUILTIN_PLUGIN_REGISTRY.tools({
357
+ env: this.options.env,
358
+ caller,
359
+ variantDir: variant?.dir ?? null,
360
+ run,
361
+ runId,
362
+ allowedTools: allow,
363
+ harnessTools: harnessToolsEnabled,
364
+ subagents: this.options.subagents,
365
+ sessionName: naming,
366
+ ...(broker ? { connectionTools: () => broker.tools(session, { readOnly: typeof input.connections === 'object' && input.connections.readOnly === true }) } : {})
367
+ })
368
+ ];
369
+ if (input.providers !== false) {
370
+ const named = new Set(tools.map((tool) => tool.name));
371
+ for (const provider of this.providers) {
372
+ for (const tool of await provider(session)) {
373
+ // The first tool of a name wins: the harness's own world tools are asked first.
374
+ if (named.has(tool.name))
375
+ continue;
376
+ named.add(tool.name);
377
+ tools.push(tool);
378
+ }
379
+ }
380
+ }
381
+ const readOnly = new Set(tools.filter((tool) => tool.readOnly).map((tool) => tool.name));
382
+ const planModeSafety = new Map();
383
+ for (const tool of tools)
384
+ if (tool.planModeSafe)
385
+ planModeSafety.set(tool.name, tool.planModeSafe);
386
+ const gate = (() => {
387
+ const baseGate = this.gate(run, caller, new Set((input.tools.gated ?? []).filter((name) => capabilities.tools.includes(name))));
388
+ return {
389
+ ...baseGate,
390
+ check: (name, args) => {
391
+ if (input.run.relation === 'subagent' && !capabilities.tools.includes(name))
392
+ return Promise.resolve('This tool is outside the child capability snapshot.');
393
+ const refusal = input.plan ? planRefusal(name, readOnly, args, planModeSafety.get(name)) : null;
394
+ return refusal ? Promise.resolve(refusal) : baseGate.check(name, args);
395
+ }
396
+ };
397
+ })();
398
+ const params = {
399
+ runId,
400
+ ...(input.initialBashCommand !== undefined && input.initialBashCommand !== null ? { initialBashCommand: input.initialBashCommand, initialBashAvailable: capabilities.tools.includes('bash') } : {}),
401
+ ...(input.initialBashContext !== undefined && input.initialBashContext !== null ? { initialBashContext: input.initialBashContext } : {}),
402
+ gate,
403
+ restrictTools: input.run.relation === 'subagent',
404
+ cwd: input.cwd,
405
+ sessionDir: input.sessionDir,
406
+ historyFile,
407
+ model: input.model ?? null,
408
+ effort: input.effort ?? null,
409
+ text: input.text,
410
+ images: input.images,
411
+ requiresImageInput: input.requiresImageInput,
412
+ preamble: input.preamble ?? null,
413
+ automatic: input.automatic,
414
+ account: context,
415
+ resources: { ids: [], skillPaths: variant?.skillPaths ?? [], promptPaths: [] },
416
+ variantExtensions: variant?.extensionPaths ?? [],
417
+ inline: [...firstPartyFor(root, capabilities.contributions), runLineageJoin(root, runId), this.options.subagents.extension(runId), { name: 'image-pruning', factory: imagePruning() }],
418
+ ...(plugins ? { plugins: { loading: () => plugins.loading({ cwd: input.cwd, agentDir: context.configDir, install: true, caller: { agentId: caller.agentId ?? null, projectId: caller.projectId ?? null }, contributions: capabilities.contributions }), loaded: (extensions) => plugins.loaded(extensions) } } : {}),
419
+ system,
420
+ update
421
+ };
422
+ pi = await this.factory({
423
+ params,
424
+ allow,
425
+ gate,
426
+ tools,
427
+ runtime: () => this.options.accounts.runtime(context),
428
+ // An unattended run loads no extension, so it has nobody to relay for.
429
+ ...(input.automatic ? {} : { extensions: { ask: (question) => run.requestAnswer(question), notice: (notice) => run.emit('extension.notice', notice) } })
430
+ });
431
+ if (run.finished) {
432
+ pi.dispose();
433
+ return { runId, nativeSessionId: null };
434
+ }
435
+ if ((input.requiresImageInput || input.images?.length) && !pi.model?.input.includes('image')) {
436
+ throw new HarnessError('image_input_unsupported', 'Choose a model that supports images, or remove the image attachments and send again.');
437
+ }
438
+ if (input.resume?.nativeSessionId && pi.sessionId !== input.resume.nativeSessionId) {
439
+ run.finish('failed', { code: 'native_resume_unavailable', message: 'The saved conversation could not be restored.' });
440
+ throw new HarnessError('native_resume_unavailable', 'The saved conversation could not be restored.');
441
+ }
442
+ const opened = pi;
443
+ updateRun(root, runId, (record) => void (record.nativeSessionId = opened.sessionId));
444
+ this.options.subagents.register(input, account.id, capabilities, Boolean(pi.sessionManager));
445
+ if (pi.model?.id && pi.model.provider)
446
+ this.options.subagents.resolvedModel(runId, `${pi.model.provider}/${pi.model.id}`, pi.thinkingLevel);
447
+ params.settle = () => this.options.subagents.verify(runId, opened.sessionManager ? subagentHistory(opened.sessionManager.getBranch()) : undefined);
448
+ void runTurn(run, pi, params);
449
+ return { runId, nativeSessionId: pi.sessionId };
450
+ }
451
+ catch (error) {
452
+ pi?.dispose();
453
+ if (error instanceof HarnessError && error.code === 'native_resume_unavailable')
454
+ throw error;
455
+ const message = error instanceof Error ? error.message : String(error);
456
+ log('session failed to start', message);
457
+ run.finish('failed', { code: error instanceof HarnessError ? error.code : 'provider_unavailable', message });
458
+ return { runId, nativeSessionId: null };
459
+ }
460
+ }
461
+ }
@@ -0,0 +1,3 @@
1
+ import type { Harness } from "../harness.js";
2
+ import type { Handler } from "../server/rpc.js";
3
+ export declare function sideQuestionServerMethods(harness: Harness): Record<string, Handler>;
@@ -0,0 +1,19 @@
1
+ import { invalid } from "../core/errors.js";
2
+ export function sideQuestionServerMethods(harness) {
3
+ return {
4
+ 'sideQuestions.start': params => harness.sideQuestions.start(params),
5
+ 'sideQuestions.read': params => {
6
+ if (typeof params.runId !== 'string' || typeof params.sessionId !== 'string')
7
+ throw invalid('A side-question run and session id are required.');
8
+ const afterSequence = params.afterSequence === undefined ? -1 : params.afterSequence;
9
+ if (typeof afterSequence !== 'number')
10
+ throw invalid('A side-question event sequence is required.');
11
+ return harness.sideQuestions.read(params.runId, params.sessionId, afterSequence);
12
+ },
13
+ 'sideQuestions.interrupt': params => {
14
+ if (typeof params.runId !== 'string' || typeof params.sessionId !== 'string')
15
+ throw invalid('A side-question run and session id are required.');
16
+ return harness.sideQuestions.interrupt(params.runId, params.sessionId);
17
+ }
18
+ };
19
+ }