@xingular/harness 0.1.6 → 1.0.0

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 (593) hide show
  1. package/CHANGELOG.md +107 -0
  2. package/LICENSE +202 -0
  3. package/NOTICE.md +60 -0
  4. package/README.md +265 -71
  5. package/THIRD_PARTY_LICENSES.md +942 -0
  6. package/dist/cli.js +14842 -9445
  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/browser/config.d.ts +16 -0
  18. package/dist/sdk/browser/config.js +22 -0
  19. package/dist/sdk/browser/diagnostics.d.ts +4 -0
  20. package/dist/sdk/browser/diagnostics.js +38 -0
  21. package/dist/sdk/browser/index.d.ts +17 -0
  22. package/dist/sdk/browser/index.js +65 -0
  23. package/dist/sdk/browser/network.d.ts +10 -0
  24. package/dist/sdk/browser/network.js +59 -0
  25. package/dist/sdk/browser/session.d.ts +84 -0
  26. package/dist/sdk/browser/session.js +192 -0
  27. package/dist/sdk/browser/tools.d.ts +8 -0
  28. package/dist/sdk/browser/tools.js +329 -0
  29. package/dist/sdk/capabilities/api.d.ts +22 -0
  30. package/dist/sdk/capabilities/api.js +54 -0
  31. package/dist/sdk/capabilities/runSnapshot.d.ts +18 -0
  32. package/dist/sdk/capabilities/runSnapshot.js +47 -0
  33. package/dist/sdk/capabilities/types.d.ts +29 -0
  34. package/dist/sdk/capabilities/types.js +1 -0
  35. package/dist/sdk/cli.d.ts +2 -0
  36. package/dist/sdk/cli.js +142 -0
  37. package/dist/sdk/core/bus.d.ts +23 -0
  38. package/dist/sdk/core/bus.js +76 -0
  39. package/dist/sdk/core/caller.d.ts +22 -0
  40. package/dist/sdk/core/caller.js +16 -0
  41. package/dist/sdk/core/changes.d.ts +15 -0
  42. package/dist/sdk/core/changes.js +15 -0
  43. package/dist/sdk/core/effort.d.ts +2 -0
  44. package/dist/sdk/core/effort.js +1 -0
  45. package/dist/sdk/core/env.d.ts +18 -0
  46. package/dist/sdk/core/env.js +8 -0
  47. package/dist/sdk/core/errors.d.ts +15 -0
  48. package/dist/sdk/core/errors.js +24 -0
  49. package/dist/sdk/core/frontmatter.d.ts +12 -0
  50. package/dist/sdk/core/frontmatter.js +50 -0
  51. package/dist/sdk/core/fs.d.ts +18 -0
  52. package/dist/sdk/core/fs.js +106 -0
  53. package/dist/sdk/core/index.d.ts +24 -0
  54. package/dist/sdk/core/index.js +187 -0
  55. package/dist/sdk/core/path.d.ts +7 -0
  56. package/dist/sdk/core/path.js +79 -0
  57. package/dist/sdk/core/projects.d.ts +18 -0
  58. package/dist/sdk/core/projects.js +67 -0
  59. package/dist/sdk/core/secrets.d.ts +2 -0
  60. package/dist/sdk/core/secrets.js +5 -0
  61. package/dist/sdk/core/text.d.ts +7 -0
  62. package/dist/sdk/core/text.js +40 -0
  63. package/dist/sdk/doctor/checks.d.ts +5 -0
  64. package/dist/sdk/doctor/checks.js +208 -0
  65. package/dist/sdk/doctor/probe.d.ts +4 -0
  66. package/dist/sdk/doctor/probe.js +92 -0
  67. package/dist/sdk/doctor/service.d.ts +23 -0
  68. package/dist/sdk/doctor/service.js +144 -0
  69. package/dist/sdk/doctor/types.d.ts +141 -0
  70. package/dist/sdk/doctor/types.js +29 -0
  71. package/dist/sdk/harness.d.ts +133 -0
  72. package/dist/sdk/harness.js +299 -0
  73. package/dist/sdk/history/lessonPrompt.d.ts +2 -0
  74. package/dist/sdk/history/lessonPrompt.js +15 -0
  75. package/dist/sdk/history/lessons.d.ts +52 -0
  76. package/dist/sdk/history/lessons.js +173 -0
  77. package/dist/sdk/history/recall.d.ts +68 -0
  78. package/dist/sdk/history/recall.js +199 -0
  79. package/dist/sdk/history/trajectory.d.ts +7 -0
  80. package/dist/sdk/history/trajectory.js +216 -0
  81. package/dist/sdk/hub/catalog.json +123 -0
  82. package/dist/sdk/hub/cli.d.ts +7 -0
  83. package/dist/sdk/hub/cli.js +81 -0
  84. package/dist/sdk/hub/hub.d.ts +74 -0
  85. package/dist/sdk/hub/hub.js +474 -0
  86. package/dist/sdk/hub/schema.d.ts +280 -0
  87. package/dist/sdk/hub/schema.js +78 -0
  88. package/dist/sdk/index.d.ts +63 -0
  89. package/dist/sdk/index.js +48 -0
  90. package/dist/sdk/mcp/connections.d.ts +83 -0
  91. package/dist/sdk/mcp/connections.js +669 -0
  92. package/dist/sdk/mcp/manager.d.ts +26 -0
  93. package/dist/sdk/mcp/manager.js +124 -0
  94. package/dist/sdk/mcp/oauth.d.ts +35 -0
  95. package/dist/sdk/mcp/oauth.js +171 -0
  96. package/dist/sdk/mcp/scopeMigration.d.ts +19 -0
  97. package/dist/sdk/mcp/scopeMigration.js +198 -0
  98. package/dist/sdk/mcp/service.d.ts +160 -0
  99. package/dist/sdk/mcp/service.js +510 -0
  100. package/dist/sdk/mcp/types.d.ts +131 -0
  101. package/dist/sdk/mcp/types.js +49 -0
  102. package/dist/sdk/pi/runtime.d.ts +13 -0
  103. package/dist/sdk/pi/runtime.js +31 -0
  104. package/dist/sdk/plugins/api.d.ts +66 -0
  105. package/dist/sdk/plugins/api.js +155 -0
  106. package/dist/sdk/plugins/attachments.d.ts +46 -0
  107. package/dist/sdk/plugins/attachments.js +111 -0
  108. package/dist/sdk/plugins/builtin.d.ts +6 -0
  109. package/dist/sdk/plugins/builtin.js +68 -0
  110. package/dist/sdk/plugins/catalogue.d.ts +29 -0
  111. package/dist/sdk/plugins/catalogue.js +196 -0
  112. package/dist/sdk/plugins/cli.d.ts +13 -0
  113. package/dist/sdk/plugins/cli.js +187 -0
  114. package/dist/sdk/plugins/discover.d.ts +42 -0
  115. package/dist/sdk/plugins/discover.js +115 -0
  116. package/dist/sdk/plugins/firstParty.d.ts +50 -0
  117. package/dist/sdk/plugins/firstParty.js +113 -0
  118. package/dist/sdk/plugins/hooks.d.ts +94 -0
  119. package/dist/sdk/plugins/hooks.js +162 -0
  120. package/dist/sdk/plugins/identity.d.ts +19 -0
  121. package/dist/sdk/plugins/identity.js +48 -0
  122. package/dist/sdk/plugins/install.d.ts +20 -0
  123. package/dist/sdk/plugins/install.js +110 -0
  124. package/dist/sdk/plugins/inventory.d.ts +22 -0
  125. package/dist/sdk/plugins/inventory.js +110 -0
  126. package/dist/sdk/plugins/manifest.d.ts +13 -0
  127. package/dist/sdk/plugins/manifest.js +56 -0
  128. package/dist/sdk/plugins/plugins.d.ts +104 -0
  129. package/dist/sdk/plugins/plugins.js +164 -0
  130. package/dist/sdk/plugins/runtime.d.ts +9 -0
  131. package/dist/sdk/plugins/runtime.js +95 -0
  132. package/dist/sdk/plugins/trust.d.ts +44 -0
  133. package/dist/sdk/plugins/trust.js +120 -0
  134. package/dist/sdk/plugins/types.d.ts +159 -0
  135. package/dist/sdk/plugins/types.js +7 -0
  136. package/dist/sdk/prompt/compile.d.ts +174 -0
  137. package/dist/sdk/prompt/compile.js +396 -0
  138. package/dist/sdk/refine/cli.d.ts +4 -0
  139. package/dist/sdk/refine/cli.js +186 -0
  140. package/dist/sdk/refine/demo.d.ts +21 -0
  141. package/dist/sdk/refine/demo.js +114 -0
  142. package/dist/sdk/refine/evidence.d.ts +55 -0
  143. package/dist/sdk/refine/evidence.js +330 -0
  144. package/dist/sdk/refine/host.d.ts +51 -0
  145. package/dist/sdk/refine/host.js +76 -0
  146. package/dist/sdk/refine/ledger.d.ts +48 -0
  147. package/dist/sdk/refine/ledger.js +76 -0
  148. package/dist/sdk/refine/library.d.ts +55 -0
  149. package/dist/sdk/refine/library.js +177 -0
  150. package/dist/sdk/refine/pi.d.ts +72 -0
  151. package/dist/sdk/refine/pi.js +248 -0
  152. package/dist/sdk/refine/prompts.d.ts +45 -0
  153. package/dist/sdk/refine/prompts.js +390 -0
  154. package/dist/sdk/refine/recursion.d.ts +113 -0
  155. package/dist/sdk/refine/recursion.js +258 -0
  156. package/dist/sdk/refine/runner.d.ts +81 -0
  157. package/dist/sdk/refine/runner.js +150 -0
  158. package/dist/sdk/refine/selection.d.ts +57 -0
  159. package/dist/sdk/refine/selection.js +251 -0
  160. package/dist/sdk/refine/service.d.ts +84 -0
  161. package/dist/sdk/refine/service.js +165 -0
  162. package/dist/sdk/refine/suite.d.ts +67 -0
  163. package/dist/sdk/refine/suite.js +174 -0
  164. package/dist/sdk/refine/trajectory.d.ts +9 -0
  165. package/dist/sdk/refine/trajectory.js +68 -0
  166. package/dist/sdk/refine/types.d.ts +77 -0
  167. package/dist/sdk/refine/types.js +10 -0
  168. package/dist/sdk/server/methods.d.ts +3 -0
  169. package/dist/sdk/server/methods.js +370 -0
  170. package/dist/sdk/server/remote.d.ts +19 -0
  171. package/dist/sdk/server/remote.js +84 -0
  172. package/dist/sdk/server/rpc.d.ts +20 -0
  173. package/dist/sdk/server/rpc.js +102 -0
  174. package/dist/sdk/server/serve.d.ts +10 -0
  175. package/dist/sdk/server/serve.js +18 -0
  176. package/dist/sdk/sessions/approvals.d.ts +47 -0
  177. package/dist/sdk/sessions/approvals.js +119 -0
  178. package/dist/sdk/sessions/continuation.d.ts +48 -0
  179. package/dist/sdk/sessions/continuation.js +85 -0
  180. package/dist/sdk/sessions/contracts.d.ts +534 -0
  181. package/dist/sdk/sessions/contracts.js +299 -0
  182. package/dist/sdk/sessions/extensionUi.d.ts +19 -0
  183. package/dist/sdk/sessions/extensionUi.js +64 -0
  184. package/dist/sdk/sessions/history.d.ts +16 -0
  185. package/dist/sdk/sessions/history.js +68 -0
  186. package/dist/sdk/sessions/lineageJoin.d.ts +2 -0
  187. package/dist/sdk/sessions/lineageJoin.js +61 -0
  188. package/dist/sdk/sessions/planMode.d.ts +36 -0
  189. package/dist/sdk/sessions/planMode.js +84 -0
  190. package/dist/sdk/sessions/policy.d.ts +43 -0
  191. package/dist/sdk/sessions/policy.js +1 -0
  192. package/dist/sdk/sessions/pricing.d.ts +34 -0
  193. package/dist/sdk/sessions/pricing.js +40 -0
  194. package/dist/sdk/sessions/reasoningSummaries.d.ts +11 -0
  195. package/dist/sdk/sessions/reasoningSummaries.js +61 -0
  196. package/dist/sdk/sessions/registry.d.ts +102 -0
  197. package/dist/sdk/sessions/registry.js +383 -0
  198. package/dist/sdk/sessions/runIndex.d.ts +21 -0
  199. package/dist/sdk/sessions/runIndex.js +65 -0
  200. package/dist/sdk/sessions/runStore.d.ts +66 -0
  201. package/dist/sdk/sessions/runStore.js +335 -0
  202. package/dist/sdk/sessions/runner.d.ts +213 -0
  203. package/dist/sdk/sessions/runner.js +589 -0
  204. package/dist/sdk/sessions/sessions.d.ts +140 -0
  205. package/dist/sdk/sessions/sessions.js +394 -0
  206. package/dist/sdk/sessions/subagentService.d.ts +41 -0
  207. package/dist/sdk/sessions/subagentService.js +247 -0
  208. package/dist/sdk/sessions/subagents.d.ts +50 -0
  209. package/dist/sdk/sessions/subagents.js +68 -0
  210. package/dist/sdk/terminal/accountsMenu.d.ts +46 -0
  211. package/dist/sdk/terminal/accountsMenu.js +392 -0
  212. package/dist/sdk/terminal/cli.d.ts +20 -0
  213. package/dist/sdk/terminal/cli.js +121 -0
  214. package/dist/sdk/terminal/client.d.ts +15 -0
  215. package/dist/sdk/terminal/client.js +126 -0
  216. package/dist/sdk/terminal/control.d.ts +4 -0
  217. package/dist/sdk/terminal/control.js +25 -0
  218. package/dist/sdk/terminal/controller.d.ts +72 -0
  219. package/dist/sdk/terminal/controller.js +351 -0
  220. package/dist/sdk/terminal/hubMenu.d.ts +10 -0
  221. package/dist/sdk/terminal/hubMenu.js +34 -0
  222. package/dist/sdk/terminal/launch.d.ts +5 -0
  223. package/dist/sdk/terminal/launch.js +27 -0
  224. package/dist/sdk/terminal/logs.d.ts +14 -0
  225. package/dist/sdk/terminal/logs.js +59 -0
  226. package/dist/sdk/terminal/piExtension.d.ts +6 -0
  227. package/dist/sdk/terminal/piExtension.js +392 -0
  228. package/dist/sdk/terminal/pluginMenu.d.ts +34 -0
  229. package/dist/sdk/terminal/pluginMenu.js +101 -0
  230. package/dist/sdk/terminal/socket.d.ts +70 -0
  231. package/dist/sdk/terminal/socket.js +256 -0
  232. package/dist/sdk/terminal/standalone.d.ts +18 -0
  233. package/dist/sdk/terminal/standalone.js +146 -0
  234. package/dist/sdk/terminal/terminals.d.ts +176 -0
  235. package/dist/sdk/terminal/terminals.js +767 -0
  236. package/dist/sdk/terminal/trajectory.d.ts +10 -0
  237. package/dist/sdk/terminal/trajectory.js +30 -0
  238. package/dist/sdk/terminal/tui/chrome.d.ts +64 -0
  239. package/dist/sdk/terminal/tui/chrome.js +169 -0
  240. package/dist/sdk/terminal/tui/clipboardFiles.d.ts +11 -0
  241. package/dist/sdk/terminal/tui/clipboardFiles.js +74 -0
  242. package/dist/sdk/terminal/tui/commandPages.d.ts +7 -0
  243. package/dist/sdk/terminal/tui/commandPages.js +63 -0
  244. package/dist/sdk/terminal/tui/commands.d.ts +42 -0
  245. package/dist/sdk/terminal/tui/commands.js +276 -0
  246. package/dist/sdk/terminal/tui/dialogGeometry.d.ts +27 -0
  247. package/dist/sdk/terminal/tui/dialogGeometry.js +50 -0
  248. package/dist/sdk/terminal/tui/dialogs.d.ts +75 -0
  249. package/dist/sdk/terminal/tui/dialogs.js +363 -0
  250. package/dist/sdk/terminal/tui/keybindings.d.ts +11 -0
  251. package/dist/sdk/terminal/tui/keybindings.js +49 -0
  252. package/dist/sdk/terminal/tui/list.d.ts +73 -0
  253. package/dist/sdk/terminal/tui/list.js +196 -0
  254. package/dist/sdk/terminal/tui/modeChoices.d.ts +42 -0
  255. package/dist/sdk/terminal/tui/modeChoices.js +70 -0
  256. package/dist/sdk/terminal/tui/modelPicker.d.ts +55 -0
  257. package/dist/sdk/terminal/tui/modelPicker.js +155 -0
  258. package/dist/sdk/terminal/tui/mouse.d.ts +3 -0
  259. package/dist/sdk/terminal/tui/mouse.js +3 -0
  260. package/dist/sdk/terminal/tui/page.d.ts +14 -0
  261. package/dist/sdk/terminal/tui/page.js +1 -0
  262. package/dist/sdk/terminal/tui/pageOverlay.d.ts +27 -0
  263. package/dist/sdk/terminal/tui/pageOverlay.js +145 -0
  264. package/dist/sdk/terminal/tui/pages/accountsPage.d.ts +54 -0
  265. package/dist/sdk/terminal/tui/pages/accountsPage.js +181 -0
  266. package/dist/sdk/terminal/tui/pages/componentsPage.d.ts +47 -0
  267. package/dist/sdk/terminal/tui/pages/componentsPage.js +119 -0
  268. package/dist/sdk/terminal/tui/pages/doctorPage.d.ts +37 -0
  269. package/dist/sdk/terminal/tui/pages/doctorPage.js +145 -0
  270. package/dist/sdk/terminal/tui/pages/hubPage.d.ts +39 -0
  271. package/dist/sdk/terminal/tui/pages/hubPage.js +128 -0
  272. package/dist/sdk/terminal/tui/pages/logPage.d.ts +38 -0
  273. package/dist/sdk/terminal/tui/pages/logPage.js +189 -0
  274. package/dist/sdk/terminal/tui/pages/permissionsPage.d.ts +44 -0
  275. package/dist/sdk/terminal/tui/pages/permissionsPage.js +124 -0
  276. package/dist/sdk/terminal/tui/pages/pluginsPage.d.ts +57 -0
  277. package/dist/sdk/terminal/tui/pages/pluginsPage.js +243 -0
  278. package/dist/sdk/terminal/tui/pages/settingsPage.d.ts +55 -0
  279. package/dist/sdk/terminal/tui/pages/settingsPage.js +88 -0
  280. package/dist/sdk/terminal/tui/pages/trajectoryPage.d.ts +58 -0
  281. package/dist/sdk/terminal/tui/pages/trajectoryPage.js +377 -0
  282. package/dist/sdk/terminal/tui/piAdapter.d.ts +18 -0
  283. package/dist/sdk/terminal/tui/piAdapter.js +48 -0
  284. package/dist/sdk/terminal/tui/planMode.d.ts +2 -0
  285. package/dist/sdk/terminal/tui/planMode.js +2 -0
  286. package/dist/sdk/terminal/tui/questionPicker.d.ts +20 -0
  287. package/dist/sdk/terminal/tui/questionPicker.js +150 -0
  288. package/dist/sdk/terminal/tui/questions.d.ts +19 -0
  289. package/dist/sdk/terminal/tui/questions.js +42 -0
  290. package/dist/sdk/terminal/tui/runtime.d.ts +114 -0
  291. package/dist/sdk/terminal/tui/runtime.js +441 -0
  292. package/dist/sdk/terminal/tui/search.d.ts +22 -0
  293. package/dist/sdk/terminal/tui/search.js +60 -0
  294. package/dist/sdk/terminal/tui/selection.d.ts +16 -0
  295. package/dist/sdk/terminal/tui/selection.js +16 -0
  296. package/dist/sdk/terminal/tui/sessionUi.d.ts +3 -0
  297. package/dist/sdk/terminal/tui/sessionUi.js +30 -0
  298. package/dist/sdk/terminal/tui/settingsModel.d.ts +12 -0
  299. package/dist/sdk/terminal/tui/settingsModel.js +84 -0
  300. package/dist/sdk/terminal/tui/sideQuestion.d.ts +53 -0
  301. package/dist/sdk/terminal/tui/sideQuestion.js +197 -0
  302. package/dist/sdk/terminal/tui/skillInvocation.d.ts +9 -0
  303. package/dist/sdk/terminal/tui/skillInvocation.js +43 -0
  304. package/dist/sdk/terminal/tui/status.d.ts +18 -0
  305. package/dist/sdk/terminal/tui/status.js +67 -0
  306. package/dist/sdk/terminal/tui/theme.d.ts +45 -0
  307. package/dist/sdk/terminal/tui/theme.js +176 -0
  308. package/dist/sdk/terminal/tui/treeModel.d.ts +79 -0
  309. package/dist/sdk/terminal/tui/treeModel.js +483 -0
  310. package/dist/sdk/terminal/tui/treePicker.d.ts +49 -0
  311. package/dist/sdk/terminal/tui/treePicker.js +251 -0
  312. package/dist/sdk/terminal/tui/ui.d.ts +47 -0
  313. package/dist/sdk/terminal/tui/ui.js +148 -0
  314. package/dist/sdk/terminal/tui/workingStatus.d.ts +9 -0
  315. package/dist/sdk/terminal/tui/workingStatus.js +229 -0
  316. package/dist/sdk/tools/askUser.d.ts +6 -0
  317. package/dist/sdk/tools/askUser.js +74 -0
  318. package/dist/sdk/tools/checklist.d.ts +9 -0
  319. package/dist/sdk/tools/checklist.js +54 -0
  320. package/dist/sdk/tools/definitions.d.ts +30 -0
  321. package/dist/sdk/tools/definitions.js +117 -0
  322. package/dist/sdk/tools/dispatch.d.ts +16 -0
  323. package/dist/sdk/tools/dispatch.js +67 -0
  324. package/dist/sdk/tools/harnessTools.d.ts +6 -0
  325. package/dist/sdk/tools/harnessTools.js +20 -0
  326. package/dist/sdk/tools/sessionName.d.ts +7 -0
  327. package/dist/sdk/tools/sessionName.js +31 -0
  328. package/dist/sdk/tools/spawnSubagent.d.ts +4 -0
  329. package/dist/sdk/tools/spawnSubagent.js +49 -0
  330. package/dist/sdk/tools/types.d.ts +48 -0
  331. package/dist/sdk/tools/types.js +1 -0
  332. package/dist/sdk/variant/components.d.ts +34 -0
  333. package/dist/sdk/variant/components.js +230 -0
  334. package/dist/sdk/variant/materialise.d.ts +66 -0
  335. package/dist/sdk/variant/materialise.js +81 -0
  336. package/dist/sdk/variant/migrate.d.ts +4 -0
  337. package/dist/sdk/variant/migrate.js +41 -0
  338. package/dist/sdk/variant/seed.d.ts +20 -0
  339. package/dist/sdk/variant/seed.js +116 -0
  340. package/dist/sdk/variant/store.d.ts +82 -0
  341. package/dist/sdk/variant/store.js +151 -0
  342. package/dist/sdk/variant/surface.d.ts +56 -0
  343. package/dist/sdk/variant/surface.js +81 -0
  344. package/dist/sdk/variant/trust.d.ts +27 -0
  345. package/dist/sdk/variant/trust.js +64 -0
  346. package/dist/sdk/variant/variant.d.ts +71 -0
  347. package/dist/sdk/variant/variant.js +331 -0
  348. package/dist/sdk/web/markdown.d.ts +10 -0
  349. package/dist/sdk/web/markdown.js +66 -0
  350. package/dist/sdk/web/safeRequest.d.ts +34 -0
  351. package/dist/sdk/web/safeRequest.js +175 -0
  352. package/dist/sdk/web/search.d.ts +53 -0
  353. package/dist/sdk/web/search.js +168 -0
  354. package/dist/sdk/web/text.d.ts +2 -0
  355. package/dist/sdk/web/text.js +7 -0
  356. package/dist/sdk/web/tools.d.ts +22 -0
  357. package/dist/sdk/web/tools.js +195 -0
  358. package/dist/sdk/web/turndown-plugin-gfm.d.ts +4 -0
  359. package/dist/sdk/wiki/notes.d.ts +68 -0
  360. package/dist/sdk/wiki/notes.js +297 -0
  361. package/dist/sdk/world/actions.d.ts +23 -0
  362. package/dist/sdk/world/actions.js +31 -0
  363. package/dist/sdk/world/cli.d.ts +12 -0
  364. package/dist/sdk/world/cli.js +166 -0
  365. package/dist/sdk/world/images.d.ts +20 -0
  366. package/dist/sdk/world/images.js +48 -0
  367. package/dist/sdk/world/untrusted.d.ts +12 -0
  368. package/dist/sdk/world/untrusted.js +20 -0
  369. package/dist/sdk/world/world.d.ts +65 -0
  370. package/dist/sdk/world/world.js +80 -0
  371. package/dist/terminal-opentui.js +13612 -0
  372. package/dist/terminal-pi.js +1170 -62
  373. package/docs/README.md +34 -0
  374. package/docs/architecture/00-overview.md +159 -0
  375. package/docs/architecture/01-extension-points.md +78 -0
  376. package/docs/architecture/02-sessions-and-runs.md +146 -0
  377. package/docs/architecture/03-variants.md +95 -0
  378. package/docs/architecture/04-prompt.md +102 -0
  379. package/docs/architecture/05-refinement.md +107 -0
  380. package/docs/architecture/06-plugins-and-capabilities.md +93 -0
  381. package/docs/architecture/07-tools-and-gate.md +88 -0
  382. package/docs/architecture/08-memory-and-history.md +94 -0
  383. package/docs/architecture/09-accounts-and-connectors.md +90 -0
  384. package/docs/architecture/10-server-protocol.md +84 -0
  385. package/docs/architecture/11-terminal.md +81 -0
  386. package/docs/architecture/12-storage.md +61 -0
  387. package/docs/architecture/13-world-tools.md +23 -0
  388. package/docs/architecture/README.md +114 -0
  389. package/docs/architecture/proposals/PROP-0001-reporting-section.md +106 -0
  390. package/docs/architecture/proposals/PROP-0002-retain-rollout-workspaces.md +104 -0
  391. package/docs/architecture/proposals/PROP-0003-executor-settings.md +81 -0
  392. package/docs/architecture/proposals/PROP-0004-flexible-reporting-guidance.md +71 -0
  393. package/docs/architecture/proposals/PROP-0005-xharness-cli-name.md +78 -0
  394. package/docs/architecture/proposals/PROP-0006-run-checklist.md +68 -0
  395. package/docs/architecture/proposals/PROP-0007-run-continuation.md +80 -0
  396. package/docs/architecture/proposals/PROP-0008-lessons-from-runs.md +80 -0
  397. package/docs/architecture/proposals/PROP-0009-foundation-and-variants.md +78 -0
  398. package/docs/architecture/proposals/PROP-0010-session-names.md +73 -0
  399. package/docs/architecture/proposals/PROP-0011-doctor.md +63 -0
  400. package/docs/architecture/proposals/PROP-0012-release-baseline.md +56 -0
  401. package/docs/architecture/proposals/README.md +76 -0
  402. package/docs/decisions/ADR-0001-owned-terminal.md +87 -0
  403. package/docs/decisions/ADR-0002-native-subagent-lifecycle.md +49 -0
  404. package/docs/decisions/ADR-0003-shared-asynchronous-subagents.md +70 -0
  405. package/docs/decisions/ADR-0004-fullscreen-terminal-layout.md +50 -0
  406. package/docs/decisions/ADR-0005-app-provided-oauth-clients.md +54 -0
  407. package/docs/decisions/ADR-0006-opentui-only-terminal.md +47 -0
  408. package/docs/decisions/ADR-0007-reporting-section.md +33 -0
  409. package/docs/decisions/ADR-0008-flexible-reporting-guidance.md +38 -0
  410. package/docs/decisions/ADR-0009-xharness-command.md +38 -0
  411. package/docs/decisions/ADR-0010-lessons-in-the-wiki.md +31 -0
  412. package/docs/decisions/ADR-0011-foundation-and-variants.md +28 -0
  413. package/docs/decisions/ADR-0012-native-session-names.md +34 -0
  414. package/docs/decisions/ADR-0013-doctor.md +27 -0
  415. package/docs/decisions/ADR-0014-public-release-baseline.md +21 -0
  416. package/docs/doctor.md +74 -0
  417. package/docs/experiments/EXP-0001-terminal-input-latency/plan.md +81 -0
  418. package/docs/experiments/EXP-0001-terminal-input-latency/results.md +46 -0
  419. package/docs/experiments/EXP-0002-opentui-typing-latency/plan.md +70 -0
  420. package/docs/experiments/EXP-0002-opentui-typing-latency/results.md +92 -0
  421. package/docs/features/README.md +20 -0
  422. package/docs/features/automations/README.md +41 -0
  423. package/docs/features/cores/README.md +39 -0
  424. package/docs/features/google-harness2/README.md +52 -0
  425. package/docs/features/integrations/README.md +40 -0
  426. package/docs/features/interfaces/README.md +29 -0
  427. package/docs/features/memory/README.md +28 -0
  428. package/docs/releases/1.0.0.md +40 -0
  429. package/docs/releases/README.md +36 -0
  430. package/docs/study/00-index.md +78 -0
  431. package/docs/study/arms/00-matrix.md +20 -0
  432. package/docs/study/arms/01-system-prompt.md +211 -0
  433. package/docs/study/arms/02-tools.md +79 -0
  434. package/docs/study/arms/03-subagents.md +90 -0
  435. package/docs/study/arms/04-skills.md +75 -0
  436. package/docs/study/arms/05-context-management.md +90 -0
  437. package/docs/study/arms/06-memory.md +90 -0
  438. package/docs/study/arms/07-governance.md +71 -0
  439. package/docs/study/arms/08-execution.md +69 -0
  440. package/docs/study/arms/09-observability.md +60 -0
  441. package/docs/study/arms/10-refinement.md +110 -0
  442. package/docs/study/btw-comparison.md +37 -0
  443. package/docs/study/feature-gap-review.md +42 -0
  444. package/docs/study/insights.md +123 -0
  445. package/docs/study/roadmap.md +72 -0
  446. package/docs/study/sources/claude-code.md +44 -0
  447. package/docs/study/sources/deepseek-harness.md +102 -0
  448. package/docs/study/sources/harness2.md +50 -0
  449. package/docs/study/sources/kimi-cli.md +42 -0
  450. package/docs/study/sources/omp.md +93 -0
  451. package/docs/study/sources/opencode.md +43 -0
  452. package/docs/study/sources/openhands.md +46 -0
  453. package/docs/study/sources/smolagents.md +40 -0
  454. package/docs/study/sources/swe-agent.md +34 -0
  455. package/docs/system-prompt-design.md +196 -0
  456. package/docs/terminal-tui.md +671 -0
  457. package/package.json +48 -12
  458. package/src/accounts/accounts.test.ts +0 -223
  459. package/src/accounts/accounts.ts +0 -522
  460. package/src/accounts/env.test.ts +0 -95
  461. package/src/accounts/env.ts +0 -338
  462. package/src/accounts/secrets.ts +0 -50
  463. package/src/accounts/store.ts +0 -338
  464. package/src/capabilities/api.ts +0 -75
  465. package/src/capabilities/runSnapshot.ts +0 -59
  466. package/src/capabilities/types.ts +0 -34
  467. package/src/cli.ts +0 -114
  468. package/src/core/bus.ts +0 -34
  469. package/src/core/changes.ts +0 -33
  470. package/src/core/env.ts +0 -27
  471. package/src/core/errors.ts +0 -32
  472. package/src/core/frontmatter.ts +0 -47
  473. package/src/core/fs.test.ts +0 -38
  474. package/src/core/fs.ts +0 -92
  475. package/src/core/index.ts +0 -193
  476. package/src/core/path.test.ts +0 -14
  477. package/src/core/path.ts +0 -79
  478. package/src/core/projects.ts +0 -90
  479. package/src/core/text.ts +0 -39
  480. package/src/harness.ts +0 -299
  481. package/src/index.ts +0 -70
  482. package/src/mcp/connections.ts +0 -614
  483. package/src/mcp/manager.ts +0 -130
  484. package/src/mcp/oauth.ts +0 -195
  485. package/src/mcp/scopeMigration.test.ts +0 -79
  486. package/src/mcp/scopeMigration.ts +0 -204
  487. package/src/mcp/service.test.ts +0 -376
  488. package/src/mcp/service.ts +0 -549
  489. package/src/mcp/types.ts +0 -108
  490. package/src/memory/api.test.ts +0 -82
  491. package/src/memory/api.ts +0 -289
  492. package/src/memory/blocks.test.ts +0 -78
  493. package/src/memory/blocks.ts +0 -406
  494. package/src/memory/caller.ts +0 -57
  495. package/src/memory/dispatch.ts +0 -59
  496. package/src/memory/facts.test.ts +0 -41
  497. package/src/memory/facts.ts +0 -248
  498. package/src/memory/graph.ts +0 -103
  499. package/src/memory/health.test.ts +0 -130
  500. package/src/memory/health.ts +0 -74
  501. package/src/memory/maintainer.ts +0 -272
  502. package/src/memory/maintenance.test.ts +0 -176
  503. package/src/memory/maintenance.ts +0 -330
  504. package/src/memory/migrate.ts +0 -79
  505. package/src/memory/operations.ts +0 -138
  506. package/src/memory/proposals.test.ts +0 -168
  507. package/src/memory/proposals.ts +0 -576
  508. package/src/memory/recall.test.ts +0 -104
  509. package/src/memory/recall.ts +0 -271
  510. package/src/memory/references.ts +0 -77
  511. package/src/memory/runContext.ts +0 -93
  512. package/src/memory/secrets.ts +0 -6
  513. package/src/memory/store.test.ts +0 -66
  514. package/src/memory/store.ts +0 -385
  515. package/src/memory/wiki.test.ts +0 -47
  516. package/src/memory/wiki.ts +0 -422
  517. package/src/memory/wikiIndex.test.ts +0 -88
  518. package/src/memory/wikiIndex.ts +0 -116
  519. package/src/plugins/api.ts +0 -181
  520. package/src/plugins/attachments.test.ts +0 -84
  521. package/src/plugins/attachments.ts +0 -141
  522. package/src/plugins/builtin.ts +0 -82
  523. package/src/plugins/catalogue.test.ts +0 -254
  524. package/src/plugins/catalogue.ts +0 -251
  525. package/src/plugins/cli.ts +0 -184
  526. package/src/plugins/discover.ts +0 -151
  527. package/src/plugins/firstParty.test.ts +0 -143
  528. package/src/plugins/firstParty.ts +0 -129
  529. package/src/plugins/hooks.test.ts +0 -250
  530. package/src/plugins/hooks.ts +0 -239
  531. package/src/plugins/identity.ts +0 -37
  532. package/src/plugins/install.test.ts +0 -107
  533. package/src/plugins/install.ts +0 -106
  534. package/src/plugins/inventory.ts +0 -123
  535. package/src/plugins/manifest.ts +0 -76
  536. package/src/plugins/plugins.test.ts +0 -205
  537. package/src/plugins/plugins.ts +0 -189
  538. package/src/plugins/proposal.ts +0 -121
  539. package/src/plugins/runtime.test.ts +0 -40
  540. package/src/plugins/runtime.ts +0 -82
  541. package/src/plugins/trust.ts +0 -142
  542. package/src/plugins/types.ts +0 -149
  543. package/src/prompt/compile.test.ts +0 -261
  544. package/src/prompt/compile.ts +0 -732
  545. package/src/server/methods.ts +0 -314
  546. package/src/server/remote.ts +0 -77
  547. package/src/server/rpc.ts +0 -116
  548. package/src/server/serve.ts +0 -28
  549. package/src/server/server.test.ts +0 -174
  550. package/src/sessions/approvals.ts +0 -118
  551. package/src/sessions/contracts.ts +0 -310
  552. package/src/sessions/conversation.test.ts +0 -150
  553. package/src/sessions/extensionSession.test.ts +0 -74
  554. package/src/sessions/extensionUi.test.ts +0 -65
  555. package/src/sessions/extensionUi.ts +0 -102
  556. package/src/sessions/history.ts +0 -51
  557. package/src/sessions/lineageJoin.ts +0 -75
  558. package/src/sessions/policy.ts +0 -32
  559. package/src/sessions/pricing.ts +0 -60
  560. package/src/sessions/reasoningSummaries.ts +0 -59
  561. package/src/sessions/registry.ts +0 -294
  562. package/src/sessions/runIndex.ts +0 -99
  563. package/src/sessions/runStore.test.ts +0 -152
  564. package/src/sessions/runStore.ts +0 -332
  565. package/src/sessions/runner.ts +0 -569
  566. package/src/sessions/runtimeResources.test.ts +0 -61
  567. package/src/sessions/sessions.test.ts +0 -455
  568. package/src/sessions/sessions.ts +0 -295
  569. package/src/skills/registry.test.ts +0 -104
  570. package/src/skills/registry.ts +0 -407
  571. package/src/terminal/cli.ts +0 -149
  572. package/src/terminal/client.ts +0 -74
  573. package/src/terminal/controller.ts +0 -227
  574. package/src/terminal/launch.test.ts +0 -34
  575. package/src/terminal/launch.ts +0 -88
  576. package/src/terminal/piExtension.ts +0 -210
  577. package/src/terminal/pluginControl.test.ts +0 -146
  578. package/src/terminal/pluginMenu.ts +0 -112
  579. package/src/terminal/socket.test.ts +0 -71
  580. package/src/terminal/socket.ts +0 -221
  581. package/src/terminal/standalone.test.ts +0 -130
  582. package/src/terminal/standalone.ts +0 -144
  583. package/src/terminal/terminal.test.ts +0 -330
  584. package/src/terminal/terminals.ts +0 -443
  585. package/src/tools/askUser.ts +0 -45
  586. package/src/tools/definitions.ts +0 -187
  587. package/src/tools/memoryTools.ts +0 -22
  588. package/src/tools/pluginPropose.ts +0 -41
  589. package/src/tools/types.ts +0 -39
  590. package/src/web/safeRequest.ts +0 -171
  591. package/src/web/text.ts +0 -53
  592. package/src/web/tools.ts +0 -134
  593. package/src/web/web.test.ts +0 -141
@@ -0,0 +1,276 @@
1
+ import { isAbsolute, relative, resolve } from 'node:path';
2
+ import { SessionManager } from '@earendil-works/pi-coding-agent';
3
+ import { PageOverlay } from "./pageOverlay.js";
4
+ import { ModelPicker } from "./modelPicker.js";
5
+ import { TreePicker } from "./treePicker.js";
6
+ import { createCommandPage } from "./commandPages.js";
7
+ import { pageOverlayOptions } from "./dialogGeometry.js";
8
+ import { expandSkillInvocation } from "./skillInvocation.js";
9
+ const BUILTINS = [
10
+ { name: 'doctor', description: 'Check account, model, tools and runtime readiness' },
11
+ { name: 'help', description: 'List the commands' },
12
+ { name: 'plan', description: 'Plan one request, read-only: /plan <brief>' },
13
+ { name: 'btw', description: 'Ask a side question without interrupting: /btw <question>' },
14
+ { name: 'new', description: 'Start a new session' },
15
+ { name: 'stop', description: 'Stop the current reply' },
16
+ { name: 'resume', description: 'Resume a session in this account and folder' },
17
+ { name: 'tree', description: 'Navigate the session tree' },
18
+ { name: 'fork', description: 'Fork from an earlier message' },
19
+ { name: 'clone', description: 'Clone this branch into a new session' },
20
+ { name: 'model', description: 'Choose the model' },
21
+ { name: 'effort', description: 'Choose the thinking effort' },
22
+ { name: 'thinking', description: 'Toggle transcript thinking visibility: /thinking [show|hide]' },
23
+ { name: 'name', description: 'Name this session' },
24
+ { name: 'compact', description: 'Compact the context' },
25
+ { name: 'copy', description: 'Copy the last reply' },
26
+ { name: 'export', description: 'Export this branch to HTML or JSONL' },
27
+ { name: 'reload', description: 'Reload trusted resources and keybindings' },
28
+ { name: 'accounts', description: 'Sign in, switch, check and remove Pi accounts' },
29
+ { name: 'permissions', description: 'Full Permission and per-tool approvals' },
30
+ { name: 'plugins', description: 'Switch plugins on or off and trust their code' },
31
+ { name: 'hub', description: 'Browse and install reviewed skills, plugins and documents' },
32
+ { name: 'components', description: 'Browse skills, prompts and rules for this Harness scope' },
33
+ { name: 'settings', description: 'Session and terminal settings' },
34
+ { name: 'trajectory', description: 'Inspect the recorded runs of this session' },
35
+ { name: 'log', description: "Harness diagnostics and this conversation's run events" },
36
+ { name: 'hotkeys', description: 'Keyboard controls' },
37
+ { name: 'quit', description: 'Restore the terminal and exit' }
38
+ ];
39
+ export function createTerminalCommands(host) {
40
+ const notify = (text) => host.ui.notify(text, 'info');
41
+ const choose = async (title, items, label) => {
42
+ const labels = items.map(label);
43
+ const selected = await host.ui.select(title, labels);
44
+ return selected === undefined ? undefined : items[labels.indexOf(selected)];
45
+ };
46
+ const completions = () => {
47
+ const session = host.session();
48
+ const commands = new Map(BUILTINS.map(command => [command.name, command]));
49
+ for (const command of session.extensionRunner.getRegisteredCommands()) {
50
+ if (!commands.has(command.name))
51
+ commands.set(command.name, { name: command.name, description: command.description });
52
+ }
53
+ for (const prompt of session.resourceLoader.getPrompts().prompts) {
54
+ if (!commands.has(prompt.name))
55
+ commands.set(prompt.name, { name: prompt.name, description: prompt.description });
56
+ }
57
+ return [...commands.values()];
58
+ };
59
+ /** The skills this session may be asked to use, each invoked as `$name`. Off with the "Skill commands" setting. */
60
+ const skills = () => {
61
+ const session = host.session();
62
+ if (!session.settingsManager.getEnableSkillCommands())
63
+ return [];
64
+ return session.resourceLoader.getSkills().skills.map((skill) => ({ name: skill.name, description: skill.description }));
65
+ };
66
+ /** The text to send: a leading `$name` of a loaded skill becomes the `/skill:name` form Pi expands. */
67
+ const expandSkill = (text) => expandSkillInvocation(text, new Set(skills().map((skill) => skill.name)));
68
+ async function openPage(id, options = {}) {
69
+ await host.ui.custom((tui, _theme, _keys, done) => new PageOverlay({
70
+ page: createCommandPage(host, id, options), tui, theme: () => host.ui.theme,
71
+ close: () => done(undefined), changed: host.changed
72
+ }), { overlay: true, overlayOptions: pageOverlayOptions() });
73
+ }
74
+ async function execute(text) {
75
+ const match = /^\/([^\s]+)(?:\s+([\s\S]*))?$/.exec(text.trim());
76
+ if (!match)
77
+ return false;
78
+ const name = match[1];
79
+ const argument = match[2]?.trim() ?? '';
80
+ if (!BUILTINS.some(item => item.name === name)) {
81
+ if (completions().some(item => item.name === name))
82
+ return false;
83
+ // A skill is offered as $name; the typed /skill:name form still reaches the SDK, which expands it.
84
+ if (skills().some(skill => `skill:${skill.name}` === name))
85
+ return false;
86
+ host.ui.notify(`Unknown command: /${name}. Use /help to list commands.`, 'error');
87
+ return true;
88
+ }
89
+ try {
90
+ const session = host.session();
91
+ switch (name) {
92
+ case 'help':
93
+ notify(completions().map(item => `/${item.name} ${item.description ?? ''}`).join('\n'));
94
+ break;
95
+ case 'plan': {
96
+ if (!argument || ['on', 'off', 'toggle'].includes(argument.toLowerCase()))
97
+ throw new Error('Use /plan <plan brief>.');
98
+ host.plan(argument);
99
+ break;
100
+ }
101
+ case 'quit':
102
+ host.shutdown();
103
+ break;
104
+ case 'btw':
105
+ await host.btw(argument);
106
+ break;
107
+ case 'stop': {
108
+ if (!session.isStreaming)
109
+ throw new Error('Nothing is running.');
110
+ await host.runtime().interrupt();
111
+ break;
112
+ }
113
+ case 'new':
114
+ await host.runtime().newSession();
115
+ break;
116
+ case 'resume': {
117
+ let path = argument;
118
+ if (!path) {
119
+ const sessions = await SessionManager.list(host.cwd(), host.sessionDirectory());
120
+ const selected = await choose('Resume session', sessions, (item, index) => `${index + 1}. ${item.name ?? item.firstMessage ?? item.id} ${item.modified.toLocaleString()}`);
121
+ if (!selected)
122
+ break;
123
+ path = selected.path;
124
+ }
125
+ const target = resolve(host.cwd(), path);
126
+ const within = relative(host.sessionDirectory(), target);
127
+ if (within === '..' || within.startsWith('../') || within.startsWith('..\\') || isAbsolute(within)) {
128
+ throw new Error('Resume sessions from this account history folder.');
129
+ }
130
+ await host.runtime().switchSession(target);
131
+ break;
132
+ }
133
+ case 'fork': {
134
+ const message = await choose('Fork before message', session.getUserMessagesForForking(), (item, index) => `${index + 1}. ${item.text.replace(/\s+/g, ' ').slice(0, 160)}`);
135
+ if (message) {
136
+ const result = await host.runtime().fork(message.entryId);
137
+ if (!result.cancelled && result.selectedText)
138
+ host.setEditorText(result.selectedText);
139
+ }
140
+ break;
141
+ }
142
+ case 'clone': {
143
+ const leaf = session.sessionManager.getLeafId();
144
+ if (!leaf)
145
+ throw new Error('Nothing to clone yet');
146
+ const result = await host.runtime().fork(leaf, { position: 'at' });
147
+ if (!result.cancelled) {
148
+ host.setEditorText('');
149
+ notify('Cloned to new session');
150
+ }
151
+ break;
152
+ }
153
+ case 'tree': {
154
+ const tree = session.sessionManager.getTree();
155
+ if (!tree.length)
156
+ throw new Error('No entries in this session');
157
+ const selected = await host.ui.custom((tui, _theme, keys, done) => new TreePicker({
158
+ theme: () => host.ui.theme, tui, matches: (data, action) => keys.matches(data, action),
159
+ tree, currentLeafId: session.sessionManager.getLeafId(), initialFilterMode: session.settingsManager.getTreeFilterMode(),
160
+ select: done, cancel: () => done(undefined),
161
+ copy: text => { void host.copyText(text).catch(error => host.ui.notify(String(error), 'error')); },
162
+ editLabel: (_entryId, current) => host.ui.editor('Label (empty to remove)', current),
163
+ labelChanged: (entryId, label) => { session.sessionManager.appendLabelChange(entryId, label); },
164
+ changed: host.changed
165
+ }), { overlay: true, overlayOptions: pageOverlayOptions() });
166
+ if (selected && selected !== session.sessionManager.getLeafId()) {
167
+ const summarize = await host.ui.confirm('Navigate session', 'Summarize the abandoned branch before navigating?');
168
+ const result = await host.runtime().navigateTree(selected, { summarize });
169
+ if (!result.cancelled && result.editorText)
170
+ host.setEditorText(result.editorText);
171
+ }
172
+ break;
173
+ }
174
+ case 'effort': {
175
+ const levels = session.getAvailableThinkingLevels();
176
+ const level = argument || await host.ui.select('Thinking effort', levels);
177
+ if (!level)
178
+ break;
179
+ if (!levels.includes(level))
180
+ throw new Error(`Available thinking levels: ${levels.join(', ')}`);
181
+ session.setThinkingLevel(level, { persist: true });
182
+ break;
183
+ }
184
+ case 'thinking': {
185
+ const settings = session.settingsManager;
186
+ const current = settings.getHideThinkingBlock();
187
+ const mode = argument.toLowerCase();
188
+ if (mode && mode !== 'show' && mode !== 'hide')
189
+ throw new Error('Use /thinking, /thinking show, or /thinking hide.');
190
+ const hidden = mode ? mode === 'hide' : !current;
191
+ if (hidden !== current)
192
+ settings.setHideThinkingBlock(hidden);
193
+ notify(`Thinking blocks ${hidden ? 'hidden' : 'shown'}.`);
194
+ break;
195
+ }
196
+ case 'model': {
197
+ const provider = session.settingsManager.getDefaultProvider();
198
+ const id = session.settingsManager.getDefaultModel();
199
+ const selected = await host.ui.custom((tui, _theme, _keys, done) => new ModelPicker({
200
+ theme: () => host.ui.theme, tui, runtime: session.modelRuntime, current: session.model, scoped: session.scopedModels,
201
+ defaultModel: provider && id ? { provider, id } : undefined, initialSearch: argument || undefined,
202
+ select: (model, persist) => done({ model, persist }), cancel: () => done(undefined), changed: host.changed
203
+ }), { overlay: true, overlayOptions: pageOverlayOptions() });
204
+ if (selected)
205
+ await session.setModel(selected.model, { persist: selected.persist });
206
+ break;
207
+ }
208
+ case 'doctor':
209
+ await openPage('doctor');
210
+ break;
211
+ case 'settings':
212
+ await openPage('settings');
213
+ break;
214
+ case 'permissions':
215
+ await openPage('permissions');
216
+ break;
217
+ case 'accounts':
218
+ await openPage('accounts');
219
+ break;
220
+ case 'plugins':
221
+ await openPage('plugins');
222
+ break;
223
+ case 'hub':
224
+ await openPage('hub');
225
+ break;
226
+ case 'components':
227
+ await openPage('components');
228
+ break;
229
+ case 'name': {
230
+ const name = argument || await host.ui.input('Session name', session.sessionName);
231
+ if (name !== undefined)
232
+ session.setSessionName(name);
233
+ break;
234
+ }
235
+ case 'trajectory':
236
+ await openPage('trajectory', { runId: argument });
237
+ break;
238
+ case 'log':
239
+ await openPage('log');
240
+ break;
241
+ case 'compact':
242
+ await session.compact(argument || undefined);
243
+ break;
244
+ case 'reload':
245
+ await host.runtime().reload();
246
+ notify('Trusted resources reloaded');
247
+ break;
248
+ case 'copy': {
249
+ const response = session.getLastAssistantText();
250
+ if (!response)
251
+ throw new Error('No assistant response to copy yet');
252
+ await host.copyText(response);
253
+ notify('Copied last assistant response');
254
+ break;
255
+ }
256
+ case 'export': {
257
+ const output = argument || await host.ui.input('Export path (.html or .jsonl)', 'session.html');
258
+ if (!output)
259
+ break;
260
+ const path = resolve(host.cwd(), output);
261
+ notify(`Exported to ${path.endsWith('.jsonl') ? session.exportToJsonl(path) : await session.exportToHtml(path, { themeName: host.ui.theme.name })}`);
262
+ break;
263
+ }
264
+ case 'hotkeys':
265
+ notify(host.hotkeys?.() ?? 'Keyboard bindings are managed by the terminal application.');
266
+ break;
267
+ }
268
+ host.refresh();
269
+ }
270
+ catch (error) {
271
+ host.ui.notify(error instanceof Error ? error.message : String(error), 'error');
272
+ }
273
+ return true;
274
+ }
275
+ return { execute, completions, skills, expandSkill };
276
+ }
@@ -0,0 +1,27 @@
1
+ import type { OverlayOptions, TUI } from '@earendil-works/pi-tui';
2
+ export declare const DIALOG_MAX_WIDTH = 100;
3
+ export declare const DIALOG_MAX_ROWS = 30;
4
+ /** A page overlay this host may present as a centered dialog. Other hosts ignore the field. */
5
+ export interface HarnessOverlayOptions extends OverlayOptions {
6
+ dialog?: 'page';
7
+ }
8
+ export interface DialogRect {
9
+ top: number;
10
+ left: number;
11
+ width: number;
12
+ height: number;
13
+ }
14
+ /** The width of a centered page dialog: 80% of the terminal, never more than 100 columns. */
15
+ export declare function dialogWidth(columns: number): number;
16
+ /** The height of a centered page dialog: 80% of the terminal, never more than 30 rows. */
17
+ export declare function dialogRows(rows: number): number;
18
+ /** Whether the terminal can hold a readable page dialog instead of the full-screen page. */
19
+ export declare function dialogFits(columns: number, rows: number): boolean;
20
+ /** The host that presents page overlays as centered dialogs, rather than full-screen pages. */
21
+ export declare function centeredDialogHost(tui: TUI): boolean;
22
+ /** Rows a page or picker should render for this host: the dialog's rows, or the whole screen. */
23
+ export declare function pageRows(tui: TUI): number;
24
+ /** Centers a rectangle on the screen, clamped so it never starts outside the terminal. */
25
+ export declare function centeredRect(columns: number, rows: number, width: number, height: number): DialogRect;
26
+ /** The overlay options every full-screen page command passes; OpenTUI reads the marker. */
27
+ export declare function pageOverlayOptions(): HarnessOverlayOptions;
@@ -0,0 +1,50 @@
1
+ export const DIALOG_MAX_WIDTH = 100;
2
+ export const DIALOG_MAX_ROWS = 30;
3
+ /** Below this a centered dialog would show too little of the page, so the page keeps the screen. */
4
+ const DIALOG_MIN_WIDTH = 30;
5
+ const DIALOG_MIN_ROWS = 12;
6
+ /** The width of a centered page dialog: 80% of the terminal, never more than 100 columns. */
7
+ export function dialogWidth(columns) {
8
+ const width = Math.trunc(columns);
9
+ if (!Number.isFinite(width) || width < 1)
10
+ return 0;
11
+ return Math.max(1, Math.min(width, DIALOG_MAX_WIDTH, Math.max(20, Math.floor(width * 0.8))));
12
+ }
13
+ /** The height of a centered page dialog: 80% of the terminal, never more than 30 rows. */
14
+ export function dialogRows(rows) {
15
+ const height = Math.trunc(rows);
16
+ if (!Number.isFinite(height) || height < 1)
17
+ return 0;
18
+ return Math.max(1, Math.min(height, DIALOG_MAX_ROWS, Math.max(8, Math.floor(height * 0.8))));
19
+ }
20
+ /** Whether the terminal can hold a readable page dialog instead of the full-screen page. */
21
+ export function dialogFits(columns, rows) {
22
+ return dialogWidth(columns) >= DIALOG_MIN_WIDTH && dialogRows(rows) >= DIALOG_MIN_ROWS;
23
+ }
24
+ /** The host that presents page overlays as centered dialogs, rather than full-screen pages. */
25
+ export function centeredDialogHost(tui) {
26
+ return tui.centeredDialogs === true;
27
+ }
28
+ /** Rows a page or picker should render for this host: the dialog's rows, or the whole screen. */
29
+ export function pageRows(tui) {
30
+ const rows = Math.max(0, Math.trunc(tui.terminal.rows));
31
+ const columns = Math.max(0, Math.trunc(tui.terminal.columns));
32
+ return centeredDialogHost(tui) && dialogFits(columns, rows) ? dialogRows(rows) : rows;
33
+ }
34
+ /** Centers a rectangle on the screen, clamped so it never starts outside the terminal. */
35
+ export function centeredRect(columns, rows, width, height) {
36
+ const screenColumns = Math.max(1, Math.trunc(columns));
37
+ const screenRows = Math.max(1, Math.trunc(rows));
38
+ const boxWidth = Math.max(1, Math.min(Math.trunc(width), screenColumns));
39
+ const boxHeight = Math.max(1, Math.min(Math.trunc(height), screenRows));
40
+ return {
41
+ top: Math.max(0, Math.floor((screenRows - boxHeight) / 2)),
42
+ left: Math.max(0, Math.floor((screenColumns - boxWidth) / 2)),
43
+ width: boxWidth,
44
+ height: boxHeight
45
+ };
46
+ }
47
+ /** The overlay options every full-screen page command passes; OpenTUI reads the marker. */
48
+ export function pageOverlayOptions() {
49
+ return { anchor: 'top-left', width: '100%', maxHeight: '100%', dialog: 'page' };
50
+ }
@@ -0,0 +1,75 @@
1
+ import type { ExtensionUIContext, ExtensionUIDialogOptions, KeybindingsManager, Theme } from '@earendil-works/pi-coding-agent';
2
+ import { Input, type Component, type Focusable, type SelectListTheme, type TUI, type TuiMouseEventResult } from '@earendil-works/pi-tui';
3
+ import type { TerminalMouseInput } from "./mouse.js";
4
+ /** `page` asks for a full-screen dialog; Pi's own dialogs ignore the field. */
5
+ export type TerminalDialogOptions = ExtensionUIDialogOptions & {
6
+ page?: boolean;
7
+ };
8
+ export type DialogVariant = 'block' | 'page';
9
+ export declare function selectTheme(theme: Theme): SelectListTheme;
10
+ /** Input keeps the original value; only its rendered cells are masked. */
11
+ export declare class SecretInput extends Input {
12
+ render(width: number): string[];
13
+ }
14
+ /** Choices as a `FilterList`, with the standard search field visible for every list. */
15
+ export declare class SearchableSelect implements Component, Focusable {
16
+ private readonly tui;
17
+ private readonly select;
18
+ private readonly cancel;
19
+ private readonly list;
20
+ private readonly labels;
21
+ private focusedValue;
22
+ constructor(options: string[], tui: TUI, theme: () => Theme, select: (index: number) => void, cancel: () => void, search?: 'always' | 'never');
23
+ get focused(): boolean;
24
+ set focused(value: boolean);
25
+ get pinnedRows(): number;
26
+ private contentRows;
27
+ private searchRows;
28
+ private windowRows;
29
+ invalidate(): void;
30
+ handleMouse(event: TerminalMouseInput): TuiMouseEventResult | undefined;
31
+ handleInput(data: string): void;
32
+ render(width: number): string[];
33
+ }
34
+ /** An overlay owns focus; its input emits the cursor marker through this delegate. */
35
+ export declare class DialogPanel implements Component, Focusable {
36
+ readonly title: string;
37
+ readonly content: Component;
38
+ private readonly theme;
39
+ readonly hint: string;
40
+ private readonly message?;
41
+ readonly variant: DialogVariant;
42
+ deadline?: number;
43
+ maxRows?: () => number;
44
+ centered: boolean;
45
+ private focusedValue;
46
+ private detailOffset;
47
+ private detailRows;
48
+ private detailTotal;
49
+ private mouseBodyStart;
50
+ private mouseContentRows;
51
+ constructor(title: string, content: Component, theme: () => Theme, hint: string, message?: string | undefined, variant?: DialogVariant);
52
+ get focused(): boolean;
53
+ set focused(value: boolean);
54
+ invalidate(): void;
55
+ handleMouse(event: TerminalMouseInput): TuiMouseEventResult | undefined;
56
+ handleInput(data: string): void;
57
+ render(width: number): string[];
58
+ }
59
+ export declare class TerminalDialogs {
60
+ private readonly tui;
61
+ private readonly theme;
62
+ private readonly keybindings;
63
+ private readonly changed;
64
+ private pending;
65
+ private disposed;
66
+ constructor(tui: TUI, theme: () => Theme, keybindings: KeybindingsManager, changed: () => void);
67
+ private show;
68
+ select(title: string, options: string[], opts?: TerminalDialogOptions): Promise<string | undefined>;
69
+ confirm(title: string, message: string, opts?: ExtensionUIDialogOptions): Promise<boolean>;
70
+ input(title: string, placeholder?: string, opts?: ExtensionUIDialogOptions, secret?: boolean): Promise<string | undefined>;
71
+ editor(title: string, prefill?: string): Promise<string | undefined>;
72
+ custom<T>(factory: Parameters<ExtensionUIContext['custom']>[0], options?: Parameters<ExtensionUIContext['custom']>[1]): Promise<T>;
73
+ reset(): void;
74
+ dispose(): void;
75
+ }