@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
@@ -1,388 +0,0 @@
1
- import {
2
- createAgentSession, createAgentSessionRuntime, DefaultResourceLoader, ModelRuntime, resolveCliModel,
3
- SessionManager, SettingsManager,
4
- type AgentSession, type AgentSessionEventListener, type AgentSessionRuntime, type AgentSessionServices,
5
- type CreateAgentSessionRuntimeFactory, type ExtensionUIContext
6
- } from '@earendil-works/pi-coding-agent'
7
- import { closeSync, openSync, readSync, realpathSync } from 'node:fs'
8
- import { isAbsolute, join, relative, resolve, sep } from 'node:path'
9
-
10
- import terminalExtension from '../piExtension'
11
- import { claimTerminalControl, controlCall } from '../control'
12
- import { loadPiAdapter } from './piAdapter'
13
- import type { SessionAccount } from '../accountsMenu'
14
- import type { QuestionAnswer } from '../../sessions/registry'
15
- import type { TerminalQuestion } from './questions'
16
- import { sessionUiContext } from './sessionUi'
17
-
18
- export interface TerminalArguments {
19
- appendSystemPrompt: string[]
20
- extensions: string[]
21
- skills: string[]
22
- prompts: string[]
23
- themes: string[]
24
- sessionDir: string
25
- session?: string
26
- model?: string
27
- }
28
-
29
- /** The launch specification comes from Terminals.prepare(), never from Pi's own discovery. */
30
- export function parseTerminalArguments(args: string[]): TerminalArguments {
31
- const result: TerminalArguments = { appendSystemPrompt: [], extensions: [], skills: [], prompts: [], themes: [], sessionDir: '' }
32
- const lists: Record<string, string[]> = {
33
- '--append-system-prompt': result.appendSystemPrompt, '--extension': result.extensions,
34
- '--skill': result.skills, '--prompt-template': result.prompts, '--theme': result.themes
35
- }
36
- const flags = new Set(['--no-extensions', '--no-skills', '--no-prompt-templates', '--no-themes'])
37
- for (let index = 0; index < args.length; index++) {
38
- const argument = args[index]
39
- if (flags.has(argument)) continue
40
- if (!(argument in lists) && !['--session-dir', '--session', '--model'].includes(argument)) {
41
- throw new Error(`Unsupported prepared terminal argument: ${argument}`)
42
- }
43
- const value = args[++index]
44
- if (!value || value.startsWith('--')) throw new Error(`${argument} needs a value.`)
45
- if (argument in lists) lists[argument].push(value)
46
- else if (argument === '--session-dir') result.sessionDir = value
47
- else if (argument === '--session') result.session = value
48
- else result.model = value
49
- }
50
- if (!result.sessionDir) throw new Error('The Harness terminal requires its prepared --session-dir.')
51
- if (!result.extensions.length) throw new Error('The Harness terminal requires its prepared bridge extension.')
52
- return result
53
- }
54
-
55
- export interface TerminalRuntimeHost {
56
- ui: ExtensionUIContext
57
- shutdown(): void
58
- notify(message: string): void
59
- changed(): void
60
- resources?(services: AgentSessionServices): void
61
- }
62
-
63
- type SessionChangeListener = (session: AgentSession) => void | Promise<void>
64
- type NewOptions = Parameters<AgentSessionRuntime['newSession']>[0]
65
- type SwitchOptions = Parameters<AgentSessionRuntime['switchSession']>[1]
66
- type ForkOptions = Parameters<AgentSessionRuntime['fork']>[1]
67
- type TreeOptions = Parameters<AgentSession['navigateTree']>[1]
68
-
69
- export interface TerminalSnapshot {
70
- readonly sessionId: string
71
- readonly sessionFile?: string
72
- readonly name?: string
73
- readonly cwd: string
74
- readonly account: Readonly<SessionAccount> | null
75
- readonly model?: Readonly<{ id: string; provider: string; name: string; reasoning: boolean; contextWindow: number }>
76
- readonly thinkingLevel: AgentSession['thinkingLevel']
77
- readonly isStreaming: boolean
78
- readonly idle: boolean
79
- readonly hasUserMessages: boolean
80
- readonly hideThinking: boolean
81
- readonly context: Readonly<{ percent: number | null; window: number }>
82
- readonly costUsd: number
83
- readonly subscription: boolean
84
- readonly queue: Readonly<{ steering: readonly string[]; followUp: readonly string[] }>
85
- }
86
-
87
- export interface TerminalDecision extends TerminalQuestion { type: 'approval' | 'question'; target?: string; action?: string }
88
-
89
- export interface TerminalRuntime {
90
- pending(): Promise<TerminalDecision[]>
91
- approve(requestId: string, decision: 'approved' | 'denied'): Promise<void>
92
- answer(requestId: string, answer: QuestionAnswer): Promise<void>
93
- answerBatch(batchId: string, answers: Array<{ questionId: string; answer: QuestionAnswer }>): Promise<void>
94
- snapshot(): TerminalSnapshot
95
- submit(text: string, followUp?: boolean): Promise<void>
96
- readonly session: AgentSession
97
- readonly services: AgentSessionServices
98
- readonly cwd: string
99
- readonly sessionDirectory: string
100
- subscribe(listener: AgentSessionEventListener): () => void
101
- onSessionChange(listener: SessionChangeListener): () => void
102
- onBeforeSessionChange(listener: () => void): () => void
103
- newSession(options?: NewOptions): ReturnType<AgentSessionRuntime['newSession']>
104
- switchSession(path: string, options?: SwitchOptions): ReturnType<AgentSessionRuntime['switchSession']>
105
- fork(entryId: string, options?: ForkOptions): ReturnType<AgentSessionRuntime['fork']>
106
- navigateTree(targetId: string, options?: TreeOptions): ReturnType<AgentSession['navigateTree']>
107
- importFromJsonl(path: string, cwdOverride?: string): ReturnType<AgentSessionRuntime['importFromJsonl']>
108
- installationDeviceId(): Promise<string>
109
- reload(): Promise<void>
110
- interrupt(): Promise<void>
111
- dispose(): Promise<void>
112
- }
113
-
114
- /** Saved native history stays in the prepared project folder, including symlink targets. */
115
- export function assertTerminalHistoryPath(path: string, sessionDirectory: string): void {
116
- const within = relative(realpathSync(sessionDirectory), realpathSync(path))
117
- if (!within || within === '..' || within.startsWith(`..${sep}`) || isAbsolute(within)) {
118
- throw new Error('Resume only from this terminal history folder. Use /import for another native session file in this working folder.')
119
- }
120
- }
121
-
122
- /** Inspect the header before any native switch/import can invalidate a session or copy a file. */
123
- export function assertTerminalSessionScope(path: string, cwd: string, cwdOverride?: string): void {
124
- if (cwdOverride !== undefined && realpathSync(resolve(cwdOverride)) !== realpathSync(cwd)) {
125
- throw new Error('Resume this conversation in a terminal opened for its own working folder.')
126
- }
127
- const descriptor = openSync(path, 'r')
128
- let first: string
129
- try {
130
- const buffer = Buffer.alloc(65_536)
131
- const size = readSync(descriptor, buffer, 0, buffer.length, 0)
132
- const text = buffer.subarray(0, size).toString('utf8').replace(/^\uFEFF/, '')
133
- const newline = text.indexOf('\n')
134
- if (newline === -1 && size === buffer.length) throw new Error('The native session header is too large.')
135
- first = newline === -1 ? text : text.slice(0, newline)
136
- } finally {
137
- closeSync(descriptor)
138
- }
139
- let header: { type?: string; cwd?: string }
140
- try {
141
- header = JSON.parse(first) as typeof header
142
- } catch {
143
- throw new Error('This file does not have a readable native session header.')
144
- }
145
- if (header.type !== 'session' || !header.cwd || !isAbsolute(header.cwd)) {
146
- throw new Error('The native session must record its original absolute working folder.')
147
- }
148
- if (realpathSync(header.cwd) !== realpathSync(cwd)) {
149
- throw new Error('This conversation belongs to another working folder. Open its terminal to keep project permissions and context isolated.')
150
- }
151
- }
152
-
153
- export async function createTerminalRuntime(args: string[], host: TerminalRuntimeHost): Promise<TerminalRuntime> {
154
- const prepared = parseTerminalArguments(args)
155
- const cwd = realpathSync(process.cwd())
156
- const agentDirValue = process.env.PI_CODING_AGENT_DIR
157
- if (!agentDirValue || !isAbsolute(agentDirValue)) throw new Error('The Harness terminal requires its isolated account directory.')
158
- const agentDir = realpathSync(agentDirValue)
159
- const sessionDirectory = realpathSync(resolve(cwd, prepared.sessionDir))
160
- if (prepared.session) {
161
- const path = resolve(cwd, prepared.session)
162
- assertTerminalHistoryPath(path, sessionDirectory)
163
- assertTerminalSessionScope(path, cwd)
164
- }
165
-
166
- // Claim before loading any plugin code and retain it in the trusted process across reloads.
167
- await claimTerminalControl()
168
- const identity = await controlCall<SessionAccount>('accounts.session').catch(() => null)
169
- const account = identity && typeof identity.accountId === 'string' && typeof identity.label === 'string'
170
- ? Object.freeze({ accountId: identity.accountId, label: identity.label }) : null
171
- const adapter = await loadPiAdapter()
172
- const modelRuntime = await ModelRuntime.create({ authPath: join(agentDir, 'auth.json'), modelsPath: join(agentDir, 'models.json') })
173
- const listeners = new Set<AgentSessionEventListener>()
174
- const changes = new Set<SessionChangeListener>()
175
- const beforeChanges = new Set<() => void>()
176
- let unsubscribe: (() => void) | undefined
177
- let changing = false
178
- let disposed = false
179
- let uiGeneration = 0
180
- let deviceIdPromise: Promise<string> | null = null
181
- const installationDeviceId = (): Promise<string> => {
182
- if (!deviceIdPromise) {
183
- deviceIdPromise = controlCall<string>('accounts.deviceId').catch((error: unknown) => {
184
- deviceIdPromise = null
185
- throw error
186
- })
187
- }
188
- return deviceIdPromise
189
- }
190
- const currentUi = () => {
191
- const generation = uiGeneration
192
- return sessionUiContext(host.ui, () => !disposed && generation === uiGeneration)
193
- }
194
-
195
- const factory: CreateAgentSessionRuntimeFactory = async ({ cwd: targetCwd, sessionManager, sessionStartEvent }) => {
196
- if (realpathSync(targetCwd) !== cwd) throw new Error('A native session cannot change this terminal working folder.')
197
- const settingsManager = SettingsManager.create(cwd, agentDir)
198
- const resourceLoader = new DefaultResourceLoader({
199
- cwd, agentDir,
200
- // The real settings still control models and tools; empty discovery settings prevent a
201
- // second resource decision outside the Harness's trusted prepare() result.
202
- settingsManager: SettingsManager.inMemory({}),
203
- noExtensions: true, noSkills: true, noPromptTemplates: true, noThemes: true,
204
- additionalExtensionPaths: prepared.extensions.slice(0, -1),
205
- additionalSkillPaths: prepared.skills, additionalPromptTemplatePaths: prepared.prompts,
206
- additionalThemePaths: prepared.themes,
207
- extensionFactories: [...adapter.builtins, { name: 'harness-terminal-bridge', factory: terminalExtension, hidden: true }],
208
- appendSystemPromptOverride: (base) => [...base, ...prepared.appendSystemPrompt]
209
- })
210
- const reloadResources = resourceLoader.reload.bind(resourceLoader)
211
- resourceLoader.reload = async (options) => {
212
- // Recheck the host's exact package trust and attachment identities before every load,
213
- // including the reload performed internally by AgentSession.reload().
214
- await controlCall('terminal.resources', {}, 30_000)
215
- await reloadResources(options)
216
- }
217
- await resourceLoader.reload()
218
- const errors = resourceLoader.getExtensions().errors
219
- if (errors.length) throw new Error(errors.map((error) => `${error.path}: ${error.error}`).join('\n'))
220
- let selected: ReturnType<typeof resolveCliModel> | undefined
221
- if (prepared.model && sessionStartEvent?.reason === 'startup') {
222
- selected = resolveCliModel({ cliModel: prepared.model, modelRuntime })
223
- if (selected.error || !selected.model) throw new Error(selected.error ?? `Model ${prepared.model} is unavailable.`)
224
- }
225
- const created = await createAgentSession({
226
- cwd, agentDir, modelRuntime, settingsManager, resourceLoader, sessionManager, sessionStartEvent,
227
- ...(selected?.model ? { model: selected.model } : {}),
228
- ...(selected?.thinkingLevel ? { thinkingLevel: selected.thinkingLevel } : {})
229
- })
230
- const services: AgentSessionServices = { cwd, agentDir, modelRuntime, settingsManager, resourceLoader, diagnostics: [] }
231
- host.resources?.(services)
232
- return { ...created, services, diagnostics: services.diagnostics }
233
- }
234
- const native = await createAgentSessionRuntime(factory, {
235
- cwd, agentDir,
236
- sessionManager: prepared.session ? SessionManager.open(resolve(cwd, prepared.session), sessionDirectory) : SessionManager.create(cwd, sessionDirectory),
237
- sessionStartEvent: { type: 'session_start', reason: 'startup' }
238
- })
239
-
240
- const before = () => {
241
- uiGeneration += 1
242
- unsubscribe?.()
243
- unsubscribe = undefined
244
- for (const listener of beforeChanges) listener()
245
- }
246
- const announce = async () => {
247
- for (const listener of changes) await listener(native.session)
248
- host.changed()
249
- }
250
- const exclusive = async <T>(action: () => Promise<T>): Promise<T> => {
251
- if (disposed) throw new Error('The terminal runtime has closed.')
252
- if (changing) throw new Error('A native session change is already in progress.')
253
- if (!native.session.isIdle) throw new Error('Stop the current response before changing or reloading this session.')
254
- changing = true
255
- try {
256
- await controlCall('terminal.resources', {}, 30_000)
257
- return await action()
258
- } finally {
259
- changing = false
260
- }
261
- }
262
- const decide = async (call: string, params: Record<string, unknown>): Promise<void> => {
263
- if (disposed) throw new Error('The terminal runtime has closed.')
264
- await controlCall(call, params)
265
- }
266
- const runtime: TerminalRuntime = {
267
- async pending() {
268
- if (disposed) return []
269
- return (await controlCall<{ requests: TerminalDecision[] }>('terminal.pending')).requests
270
- },
271
- approve: (requestId, decision) => decide('terminal.approve', { requestId, decision }),
272
- answer: (requestId, answer) => decide('terminal.answer', { requestId, answer }),
273
- answerBatch: (batchId, answers) => decide('terminal.answers', { batchId, answers }),
274
- snapshot() {
275
- const session = native.session
276
- const usage = session.getContextUsage()
277
- const model = session.model?.id === 'unknown' ? undefined : session.model
278
- return Object.freeze({
279
- sessionId: session.sessionId, sessionFile: session.sessionFile, name: session.sessionName,
280
- cwd, account,
281
- model: model ? Object.freeze({ id: model.id, provider: model.provider, name: model.name, reasoning: model.reasoning, contextWindow: model.contextWindow }) : undefined,
282
- thinkingLevel: session.thinkingLevel, isStreaming: session.isStreaming, idle: session.isIdle,
283
- hasUserMessages: session.state.messages.some(message => message.role === 'user'),
284
- hideThinking: session.settingsManager.getHideThinkingBlock(),
285
- context: Object.freeze({ percent: usage?.percent ?? null, window: usage?.contextWindow ?? model?.contextWindow ?? 0 }),
286
- costUsd: session.getSessionStats().cost,
287
- subscription: model ? session.modelRuntime.isUsingSubscription(model.provider) : false,
288
- queue: Object.freeze({ steering: Object.freeze([...session.getSteeringMessages()]), followUp: Object.freeze([...session.getFollowUpMessages()]) })
289
- })
290
- },
291
- async submit(text, followUp = false) {
292
- if (disposed) throw new Error('The terminal runtime has closed.')
293
- if (changing) throw new Error('Wait for the native session change to finish before submitting.')
294
- const input = text.trimStart().startsWith('/') ? text.trimStart() : text
295
- await native.session.prompt(input, native.session.isStreaming ? { streamingBehavior: followUp ? 'followUp' : 'steer' } : {})
296
- },
297
- get session() { return native.session },
298
- get services() { return native.services },
299
- cwd, sessionDirectory,
300
- subscribe(listener) { listeners.add(listener); return () => { listeners.delete(listener) } },
301
- onSessionChange(listener) { changes.add(listener); return () => { changes.delete(listener) } },
302
- onBeforeSessionChange(listener) { beforeChanges.add(listener); return () => { beforeChanges.delete(listener) } },
303
- newSession: (options) => exclusive(() => native.newSession(options)),
304
- switchSession: (path, options) => exclusive(async () => {
305
- const target = resolve(cwd, path)
306
- assertTerminalHistoryPath(target, sessionDirectory)
307
- assertTerminalSessionScope(target, cwd, options?.cwdOverride)
308
- return native.switchSession(target, options)
309
- }),
310
- fork: (entryId, options) => exclusive(() => native.fork(entryId, options)),
311
- navigateTree: (targetId, options) => exclusive(async () => {
312
- const result = await native.session.navigateTree(targetId, options)
313
- if (!result.cancelled) await announce()
314
- return result
315
- }),
316
- importFromJsonl: (path, cwdOverride) => exclusive(async () => {
317
- const target = resolve(cwd, path)
318
- assertTerminalSessionScope(target, cwd, cwdOverride)
319
- return native.importFromJsonl(target, cwdOverride)
320
- }),
321
- installationDeviceId,
322
- reload: () => exclusive(async () => {
323
- // Refuse a revoked or changed resource set before tearing down the currently usable UI.
324
- await controlCall('terminal.resources', {}, 30_000)
325
- await runtime.interrupt()
326
- before()
327
- await native.session.reload({ beforeSessionStart: async () => {
328
- native.session.extensionRunner.setUIContext(currentUi(), 'tui')
329
- observeSession()
330
- await announce()
331
- } })
332
- host.changed()
333
- }),
334
- async interrupt() {
335
- // Socket-backed questions and approvals must settle before Pi can finish aborting tools.
336
- await controlCall('terminal.interrupt', {}, 15_000).catch(() => {})
337
- await native.session.abort()
338
- },
339
- async dispose() {
340
- if (disposed) return
341
- disposed = true
342
- try {
343
- await runtime.interrupt()
344
- await native.dispose()
345
- } finally {
346
- unsubscribe?.()
347
- listeners.clear()
348
- changes.clear()
349
- beforeChanges.clear()
350
- }
351
- }
352
- }
353
- const observeSession = () => {
354
- unsubscribe?.()
355
- unsubscribe = native.session.subscribe(event => {
356
- for (const listener of listeners) listener(event)
357
- host.changed()
358
- })
359
- }
360
- const bind = async () => {
361
- const session = native.session
362
- observeSession()
363
- await session.bindExtensions({
364
- uiContext: currentUi(), mode: 'tui', shutdownHandler: () => host.shutdown(),
365
- abortHandler: () => { void runtime.interrupt().catch((error) => host.notify(error instanceof Error ? error.message : String(error))) },
366
- onError: (error) => host.notify(`${error.event}: ${error.error}`),
367
- commandContextActions: {
368
- waitForIdle: () => native.session.waitForIdle(),
369
- newSession: (options) => runtime.newSession(options),
370
- switchSession: (path, options) => runtime.switchSession(path, options),
371
- fork: (entryId, options) => runtime.fork(entryId, options),
372
- navigateTree: (targetId, options) => runtime.navigateTree(targetId, options),
373
- reload: () => runtime.reload()
374
- }
375
- })
376
- await announce()
377
- if (native.modelFallbackMessage) host.notify(native.modelFallbackMessage)
378
- }
379
- native.setBeforeSessionInvalidate(before)
380
- native.setRebindSession(bind)
381
- try {
382
- await bind()
383
- } catch (error) {
384
- await runtime.dispose()
385
- throw error
386
- }
387
- return runtime
388
- }
@@ -1,24 +0,0 @@
1
- import type { ExtensionUIContext } from '@earendil-works/pi-coding-agent'
2
-
3
- const dialogs = new Set(['select', 'input', 'editor', 'custom'])
4
-
5
- /** Retained UI methods belong to the resource generation that received them. */
6
- export function sessionUiContext(ui: ExtensionUIContext, current: () => boolean): ExtensionUIContext {
7
- return new Proxy(ui, {
8
- get(target, key, receiver) {
9
- const value = Reflect.get(target, key, receiver)
10
- if (typeof value !== 'function') return value
11
- return (...args: unknown[]) => {
12
- if (current()) return Reflect.apply(value, target, args)
13
- if (key === 'confirm') return Promise.resolve(false)
14
- if (dialogs.has(String(key))) return Promise.resolve(undefined)
15
- if (key === 'onTerminalInput') return () => {}
16
- if (key === 'setTheme') return { success: false, error: 'This terminal session has ended.' }
17
- if (key === 'getEditorText') return ''
18
- if (key === 'getToolsExpanded') return false
19
- if (key === 'getAllThemes') return []
20
- return undefined
21
- }
22
- }
23
- })
24
- }
@@ -1,150 +0,0 @@
1
- import type { Theme } from '@earendil-works/pi-coding-agent'
2
- import { CURSOR_MARKER, stripTerminalSequences, visibleWidth, type TUI } from '@earendil-works/pi-tui'
3
- import { describe, expect, it, vi } from 'vitest'
4
-
5
- import { SettingsPanel, type TerminalSettingItem } from './settings'
6
- import { createHarnessTheme } from './theme'
7
-
8
- const theme = createHarnessTheme({ getColorMode: () => 'truecolor' } as Theme)
9
- const items: TerminalSettingItem[] = [
10
- { id: 'theme', tab: 'appearance', group: 'Theme', label: 'Dark Theme', value: 'Titanium', description: 'Theme used with dark terminal backgrounds.' },
11
- { id: 'composer', tab: 'appearance', group: 'Composer', label: 'Composer Shape', value: 'Band', description: 'Choose the terminal input layout.' },
12
- { id: 'expanded', tab: 'appearance', group: 'Display', label: 'Expand Tool Output', value: 'Off', description: 'Expand actual output from tools.' },
13
- { id: 'thinking', tab: 'model', group: 'Thinking', label: 'Thinking Level', value: 'High', description: 'Control reasoning effort for the current model.' },
14
- { id: 'input', tab: 'interaction', group: 'Input', label: 'Autocomplete', value: 'On' },
15
- { id: 'compact', tab: 'context', group: 'Compaction', label: 'Auto Compact', value: 'On', description: 'Compact the context when the supported token threshold is reached.' }
16
- ]
17
- function setup(initialId?: string, rows = 30, source = items) {
18
- const terminal = { rows }
19
- const done = vi.fn()
20
- const panel = new SettingsPanel({ terminal } as unknown as TUI, () => theme, source, done, initialId)
21
- panel.focused = true
22
- return { panel, done, terminal }
23
- }
24
- const plain = (panel: SettingsPanel, width = 100) => panel.render(width).map(stripTerminalSequences)
25
-
26
- describe('the supported settings terminal panel', () => {
27
- it('fills the terminal with the upstream rounded settings frame, supported tabs and group rail', () => {
28
- const { panel } = setup()
29
- const rows = plain(panel)
30
- expect(rows).toHaveLength(30)
31
- expect(rows[0]).toMatch(/^╭─ Settings /)
32
- expect(rows[0]).toMatch(/╮$/)
33
- expect(rows.at(-1)).toMatch(/^╰─.*╯$/)
34
- expect(rows[1]).toContain('🎨 Appearance')
35
- expect(rows[1]).toContain('Model')
36
- expect(rows[1]).toContain('Interaction')
37
- expect(rows[1]).toContain('Context')
38
- expect(rows.join('\n')).not.toMatch(/Providers|Advisor|Preview:|Tasks|Memory/)
39
- expect(rows.some(row => row.includes('│ Theme') && row.slice(25).includes('│'))).toBe(true)
40
- expect(rows.join('\n')).toContain('❯ Dark Theme')
41
- expect(rows.join('\n')).toContain('Titanium')
42
- expect(rows.join('\n')).toContain('Theme used with dark terminal backgrounds.')
43
- expect(panel.render(100).join('')).toContain(theme.getBgAnsi('selectedBg'))
44
- const compactTabs = plain(panel, 40)[1]
45
- for (const icon of ['🎨', '🤖', '⌨', '📋']) expect(compactTabs).toContain(icon)
46
- })
47
-
48
- it('uses flat rows at 80 columns and a section rail only when the value pane fits', () => {
49
- const { panel } = setup()
50
- const narrow = plain(panel, 80).find(row => row.includes('❯ Dark Theme'))!
51
- const wide = plain(panel, 100).find(row => row.includes('❯ Dark Theme'))!
52
- expect(narrow.match(/│/g)).toHaveLength(2)
53
- expect(wide.match(/│/g)).toHaveLength(3)
54
- })
55
-
56
- it('moves through tabs and items and resolves only an actual selected setting id', () => {
57
- const { panel, done } = setup()
58
- panel.handleInput('\x1b[B')
59
- expect(panel.selectedId).toBe('composer')
60
- panel.handleInput('\r')
61
- expect(done).toHaveBeenLastCalledWith('composer')
62
- panel.handleInput('\x1b[C')
63
- expect(panel.selectedId).toBe('thinking')
64
- panel.handleInput(' ')
65
- expect(done).toHaveBeenLastCalledWith('thinking')
66
- panel.handleInput('\x1b[D')
67
- expect(panel.selectedId).toBe('composer')
68
- panel.handleInput('\x1b')
69
- expect(done).toHaveBeenLastCalledWith(undefined)
70
- })
71
-
72
- it('moves group focus through the rail and returns to item editing without triggering an action', () => {
73
- const { panel, done } = setup()
74
- panel.handleInput('\t')
75
- panel.handleInput('\x1b[B')
76
- expect(panel.selectedId).toBe('composer')
77
- expect(plain(panel).join('\n')).toContain('❯ Composer')
78
- panel.handleInput('\r')
79
- expect(done).not.toHaveBeenCalled()
80
- panel.handleInput('\r')
81
- expect(done).toHaveBeenCalledWith('composer')
82
- })
83
-
84
- it('restores the last selected tab, group and item from initialId', () => {
85
- const { panel } = setup('compact')
86
- expect(panel.selectedId).toBe('compact')
87
- expect(plain(panel)[1]).toContain('Context')
88
- expect(plain(panel).join('\n')).toContain('❯ Auto Compact')
89
- expect(plain(panel).join('\n')).not.toContain('Dark Theme')
90
- expect(setup('missing').panel.selectedId).toBe('theme')
91
- })
92
-
93
- it('searches across supported tabs using labels, values and descriptions with a visible cursor', () => {
94
- const { panel, done } = setup()
95
- panel.handleInput('reasoning')
96
- const rows = plain(panel).join('\n')
97
- expect(rows).toContain('1 match')
98
- expect(rows).toContain('Thinking Level')
99
- expect(rows).not.toContain('Dark Theme')
100
- expect(panel.render(100).join('')).toContain(CURSOR_MARKER)
101
- panel.handleInput('\r')
102
- expect(done).toHaveBeenCalledWith('thinking')
103
- panel.handleInput('\x1b')
104
- expect(done).toHaveBeenLastCalledWith(undefined)
105
- })
106
-
107
- it('renders explicit empty search results and never selects a hidden item', () => {
108
- const { panel, done } = setup()
109
- panel.handleInput('zzzzzzzzzzz')
110
- expect(plain(panel).join('\n')).toContain('No matching settings')
111
- expect(panel.selectedId).toBeUndefined()
112
- panel.handleInput('\r')
113
- panel.handleInput(' ')
114
- expect(done).not.toHaveBeenCalled()
115
- panel.handleInput('\x7f')
116
- expect(panel.selectedId).toBeUndefined()
117
- })
118
-
119
- it('keeps the selected setting visible as lists grow and the terminal resizes', () => {
120
- const source = Array.from({ length: 100 }, (_, index) => ({ id: `item${index}`, tab: 'appearance', group: 'Display', label: `Setting ${index}`, value: String(index) }))
121
- const { panel, terminal } = setup('item85', 20, source)
122
- for (const height of [40, 20, 10, 7]) {
123
- terminal.rows = height
124
- expect(plain(panel).join('\n'), `height ${height}`).toContain('❯ Setting 85')
125
- expect(panel.render(80)).toHaveLength(height)
126
- }
127
- expect(panel.selectedId).toBe('item85')
128
- })
129
-
130
- it('bounds every row and terminal height for narrow Unicode labels and descriptions', () => {
131
- const source = [{ id: 'cjk', tab: 'appearance', group: '日本語 🧠', label: '知識設定 日本語', value: '🧠 有効', description: '日本語の説明を長く表示します。'.repeat(20) }]
132
- const { panel, terminal } = setup('cjk', 30, source)
133
- for (const height of [0, 1, 3, 6, 10, 20, 40]) {
134
- terminal.rows = height
135
- for (let width = 0; width <= 130; width++) {
136
- const rows = panel.render(width)
137
- expect(rows.length, `${width}x${height}`).toBeLessThanOrEqual(height)
138
- for (const row of rows) expect(visibleWidth(row), `${width}x${height}`).toBeLessThanOrEqual(width)
139
- }
140
- }
141
- expect(panel.selectedId).toBe('cjk')
142
- })
143
-
144
- it('does not expose unsupported categories or mutate caller setting data', () => {
145
- const source = Object.freeze([...items, Object.freeze({ id: 'fake', tab: 'tasks', group: 'Agents', label: 'Invented feature', value: 'Off' })])
146
- const { panel } = setup(undefined, 30, source as unknown as TerminalSettingItem[])
147
- expect(plain(panel).join('\n')).not.toContain('Invented feature')
148
- expect(source[0].value).toBe('Titanium')
149
- })
150
- })