@xingular/harness 0.1.7 → 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 (683) hide show
  1. package/CHANGELOG.md +97 -1
  2. package/LICENSE +202 -0
  3. package/NOTICE.md +22 -0
  4. package/README.md +187 -85
  5. package/THIRD_PARTY_LICENSES.md +942 -0
  6. package/dist/cli.js +13701 -13498
  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 +808 -151
  373. package/docs/README.md +22 -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-0002-native-subagent-lifecycle.md +49 -0
  403. package/docs/decisions/ADR-0003-shared-asynchronous-subagents.md +70 -0
  404. package/docs/decisions/ADR-0004-fullscreen-terminal-layout.md +50 -0
  405. package/docs/decisions/ADR-0005-app-provided-oauth-clients.md +54 -0
  406. package/docs/decisions/ADR-0006-opentui-only-terminal.md +47 -0
  407. package/docs/decisions/ADR-0007-reporting-section.md +33 -0
  408. package/docs/decisions/ADR-0008-flexible-reporting-guidance.md +38 -0
  409. package/docs/decisions/ADR-0009-xharness-command.md +38 -0
  410. package/docs/decisions/ADR-0010-lessons-in-the-wiki.md +31 -0
  411. package/docs/decisions/ADR-0011-foundation-and-variants.md +28 -0
  412. package/docs/decisions/ADR-0012-native-session-names.md +34 -0
  413. package/docs/decisions/ADR-0013-doctor.md +27 -0
  414. package/docs/decisions/ADR-0014-public-release-baseline.md +21 -0
  415. package/docs/doctor.md +74 -0
  416. package/docs/experiments/EXP-0001-terminal-input-latency/plan.md +81 -0
  417. package/docs/experiments/EXP-0001-terminal-input-latency/results.md +46 -0
  418. package/docs/experiments/EXP-0002-opentui-typing-latency/plan.md +70 -0
  419. package/docs/experiments/EXP-0002-opentui-typing-latency/results.md +92 -0
  420. package/docs/features/README.md +20 -0
  421. package/docs/features/automations/README.md +41 -0
  422. package/docs/features/cores/README.md +39 -0
  423. package/docs/features/google-harness2/README.md +52 -0
  424. package/docs/features/integrations/README.md +40 -0
  425. package/docs/features/interfaces/README.md +29 -0
  426. package/docs/features/memory/README.md +28 -0
  427. package/docs/releases/1.0.0.md +40 -0
  428. package/docs/releases/README.md +36 -0
  429. package/docs/study/00-index.md +78 -0
  430. package/docs/study/arms/00-matrix.md +20 -0
  431. package/docs/study/arms/01-system-prompt.md +211 -0
  432. package/docs/study/arms/02-tools.md +79 -0
  433. package/docs/study/arms/03-subagents.md +90 -0
  434. package/docs/study/arms/04-skills.md +75 -0
  435. package/docs/study/arms/05-context-management.md +90 -0
  436. package/docs/study/arms/06-memory.md +90 -0
  437. package/docs/study/arms/07-governance.md +71 -0
  438. package/docs/study/arms/08-execution.md +69 -0
  439. package/docs/study/arms/09-observability.md +60 -0
  440. package/docs/study/arms/10-refinement.md +110 -0
  441. package/docs/study/btw-comparison.md +37 -0
  442. package/docs/study/feature-gap-review.md +42 -0
  443. package/docs/study/insights.md +123 -0
  444. package/docs/study/roadmap.md +72 -0
  445. package/docs/study/sources/claude-code.md +44 -0
  446. package/docs/study/sources/deepseek-harness.md +102 -0
  447. package/docs/study/sources/harness2.md +50 -0
  448. package/docs/study/sources/kimi-cli.md +42 -0
  449. package/docs/study/sources/omp.md +93 -0
  450. package/docs/study/sources/opencode.md +43 -0
  451. package/docs/study/sources/openhands.md +46 -0
  452. package/docs/study/sources/smolagents.md +40 -0
  453. package/docs/study/sources/swe-agent.md +34 -0
  454. package/docs/system-prompt-design.md +196 -0
  455. package/docs/terminal-tui.md +473 -56
  456. package/package.json +43 -13
  457. package/docs/evidence/terminal-2026-10-17/120x40-completed-transcript.ansi.gz +0 -0
  458. package/docs/evidence/terminal-2026-10-17/40x20-settings-interaction.ansi.gz +0 -0
  459. package/docs/evidence/terminal-2026-10-17/40x20-settings-keyboard.ansi.gz +0 -0
  460. package/docs/evidence/terminal-2026-10-17/40x20-welcome.ansi.gz +0 -0
  461. package/docs/evidence/terminal-2026-10-17/80x24-approval-0.ansi.gz +0 -0
  462. package/docs/evidence/terminal-2026-10-17/80x24-question.ansi.gz +0 -0
  463. package/docs/evidence/terminal-2026-10-17/verification.json +0 -130
  464. package/docs/evidence/terminal-2026-10-17-followup/120x40-completed-transcript.ansi.gz +0 -0
  465. package/docs/evidence/terminal-2026-10-17-followup/40x20-settings-interaction.ansi.gz +0 -0
  466. package/docs/evidence/terminal-2026-10-17-followup/40x20-settings-keyboard.ansi.gz +0 -0
  467. package/docs/evidence/terminal-2026-10-17-followup/40x20-welcome.ansi.gz +0 -0
  468. package/docs/evidence/terminal-2026-10-17-followup/80x24-approval-0.ansi.gz +0 -0
  469. package/docs/evidence/terminal-2026-10-17-followup/80x24-plugin-light.ansi.gz +0 -0
  470. package/docs/evidence/terminal-2026-10-17-followup/80x24-question-batch.ansi.gz +0 -0
  471. package/docs/evidence/terminal-2026-10-17-followup/80x24-question.ansi.gz +0 -0
  472. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-approval-0.ansi.gz +0 -0
  473. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-plugin-light.ansi.gz +0 -0
  474. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-question-batch.ansi.gz +0 -0
  475. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-question.ansi.gz +0 -0
  476. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/verification.json +0 -95
  477. package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-approval-0.ansi.gz +0 -0
  478. package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-plugin-light.ansi.gz +0 -0
  479. package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-question-batch.ansi.gz +0 -0
  480. package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-question.ansi.gz +0 -0
  481. package/docs/evidence/terminal-2026-10-17-followup/global-install/README.md +0 -27
  482. package/docs/evidence/terminal-2026-10-17-followup/global-install/shell-command-80x24.ansi.gz +0 -0
  483. package/docs/evidence/terminal-2026-10-17-followup/global-install/shell-command.json +0 -18
  484. package/docs/evidence/terminal-2026-10-17-followup/global-install/verification.json +0 -95
  485. package/docs/evidence/terminal-2026-10-17-followup/harness-reference-80x24.json.gz +0 -0
  486. package/docs/evidence/terminal-2026-10-17-followup/harness-reference-final-80x24.json.gz +0 -0
  487. package/docs/evidence/terminal-2026-10-17-followup/harness-reference-scenario.json +0 -60
  488. package/docs/evidence/terminal-2026-10-17-followup/live-codex/README.md +0 -24
  489. package/docs/evidence/terminal-2026-10-17-followup/live-codex/complete-80x24.ansi.gz +0 -0
  490. package/docs/evidence/terminal-2026-10-17-followup/live-codex/verification.json +0 -57
  491. package/docs/evidence/terminal-2026-10-17-followup/omp-reference-80x24-early.json.gz +0 -0
  492. package/docs/evidence/terminal-2026-10-17-followup/omp-reference-80x24.json.gz +0 -0
  493. package/docs/evidence/terminal-2026-10-17-followup/omp-reference-scenario.json +0 -58
  494. package/docs/evidence/terminal-2026-10-17-followup/omp-supplemental-static.json.gz +0 -0
  495. package/docs/evidence/terminal-2026-10-17-followup/rea-artifacts.json +0 -320
  496. package/docs/evidence/terminal-2026-10-17-followup/reference-comparison.json +0 -30
  497. package/docs/evidence/terminal-2026-10-17-followup/reference-comparison.md +0 -133
  498. package/docs/evidence/terminal-2026-10-17-followup/reference-source-observations.json +0 -20
  499. package/docs/evidence/terminal-2026-10-17-followup/verification.json +0 -207
  500. package/src/accounts/accounts.test.ts +0 -333
  501. package/src/accounts/accounts.ts +0 -658
  502. package/src/accounts/env.test.ts +0 -95
  503. package/src/accounts/env.ts +0 -338
  504. package/src/accounts/secrets.ts +0 -50
  505. package/src/accounts/store.ts +0 -338
  506. package/src/capabilities/api.ts +0 -75
  507. package/src/capabilities/runSnapshot.ts +0 -59
  508. package/src/capabilities/types.ts +0 -34
  509. package/src/cli.ts +0 -118
  510. package/src/core/bus.ts +0 -34
  511. package/src/core/changes.ts +0 -33
  512. package/src/core/env.ts +0 -27
  513. package/src/core/errors.ts +0 -32
  514. package/src/core/frontmatter.ts +0 -47
  515. package/src/core/fs.test.ts +0 -38
  516. package/src/core/fs.ts +0 -92
  517. package/src/core/index.ts +0 -193
  518. package/src/core/path.test.ts +0 -14
  519. package/src/core/path.ts +0 -79
  520. package/src/core/projects.ts +0 -90
  521. package/src/core/text.ts +0 -39
  522. package/src/harness.ts +0 -312
  523. package/src/hub/catalog.json +0 -123
  524. package/src/hub/cli.ts +0 -59
  525. package/src/hub/hub.test.ts +0 -205
  526. package/src/hub/hub.ts +0 -256
  527. package/src/hub/schema.ts +0 -81
  528. package/src/index.ts +0 -75
  529. package/src/mcp/connections.ts +0 -614
  530. package/src/mcp/manager.ts +0 -130
  531. package/src/mcp/oauth.ts +0 -195
  532. package/src/mcp/scopeMigration.test.ts +0 -79
  533. package/src/mcp/scopeMigration.ts +0 -204
  534. package/src/mcp/service.test.ts +0 -376
  535. package/src/mcp/service.ts +0 -549
  536. package/src/mcp/types.ts +0 -108
  537. package/src/memory/api.test.ts +0 -82
  538. package/src/memory/api.ts +0 -303
  539. package/src/memory/blocks.test.ts +0 -78
  540. package/src/memory/blocks.ts +0 -408
  541. package/src/memory/caller.ts +0 -69
  542. package/src/memory/curation.test.ts +0 -163
  543. package/src/memory/curation.ts +0 -64
  544. package/src/memory/dispatch.ts +0 -59
  545. package/src/memory/facts.test.ts +0 -41
  546. package/src/memory/facts.ts +0 -248
  547. package/src/memory/graph.ts +0 -103
  548. package/src/memory/health.test.ts +0 -130
  549. package/src/memory/health.ts +0 -74
  550. package/src/memory/maintainer.ts +0 -272
  551. package/src/memory/maintenance.test.ts +0 -176
  552. package/src/memory/maintenance.ts +0 -518
  553. package/src/memory/migrate.ts +0 -79
  554. package/src/memory/operations.ts +0 -150
  555. package/src/memory/proposals.test.ts +0 -168
  556. package/src/memory/proposals.ts +0 -584
  557. package/src/memory/recall.test.ts +0 -115
  558. package/src/memory/recall.ts +0 -278
  559. package/src/memory/references.ts +0 -77
  560. package/src/memory/runContext.ts +0 -93
  561. package/src/memory/secrets.ts +0 -6
  562. package/src/memory/store.test.ts +0 -66
  563. package/src/memory/store.ts +0 -385
  564. package/src/memory/wiki.test.ts +0 -47
  565. package/src/memory/wiki.ts +0 -422
  566. package/src/memory/wikiIndex.test.ts +0 -88
  567. package/src/memory/wikiIndex.ts +0 -116
  568. package/src/plugins/api.ts +0 -181
  569. package/src/plugins/attachments.test.ts +0 -84
  570. package/src/plugins/attachments.ts +0 -141
  571. package/src/plugins/builtin.ts +0 -82
  572. package/src/plugins/catalogue.test.ts +0 -254
  573. package/src/plugins/catalogue.ts +0 -251
  574. package/src/plugins/cli.ts +0 -184
  575. package/src/plugins/discover.ts +0 -151
  576. package/src/plugins/firstParty.test.ts +0 -143
  577. package/src/plugins/firstParty.ts +0 -129
  578. package/src/plugins/hooks.test.ts +0 -250
  579. package/src/plugins/hooks.ts +0 -239
  580. package/src/plugins/identity.ts +0 -37
  581. package/src/plugins/install.test.ts +0 -107
  582. package/src/plugins/install.ts +0 -106
  583. package/src/plugins/inventory.ts +0 -123
  584. package/src/plugins/manifest.ts +0 -76
  585. package/src/plugins/plugins.test.ts +0 -205
  586. package/src/plugins/plugins.ts +0 -189
  587. package/src/plugins/proposal.ts +0 -121
  588. package/src/plugins/runtime.test.ts +0 -40
  589. package/src/plugins/runtime.ts +0 -82
  590. package/src/plugins/trust.ts +0 -142
  591. package/src/plugins/types.ts +0 -149
  592. package/src/prompt/compile.test.ts +0 -261
  593. package/src/prompt/compile.ts +0 -732
  594. package/src/server/methods.ts +0 -349
  595. package/src/server/remote.ts +0 -77
  596. package/src/server/rpc.ts +0 -116
  597. package/src/server/serve.ts +0 -28
  598. package/src/server/server.test.ts +0 -174
  599. package/src/sessions/approvals.ts +0 -118
  600. package/src/sessions/contracts.ts +0 -336
  601. package/src/sessions/conversation.test.ts +0 -177
  602. package/src/sessions/extensionSession.test.ts +0 -74
  603. package/src/sessions/extensionUi.test.ts +0 -65
  604. package/src/sessions/extensionUi.ts +0 -102
  605. package/src/sessions/history.ts +0 -51
  606. package/src/sessions/lineageJoin.ts +0 -75
  607. package/src/sessions/policy.ts +0 -36
  608. package/src/sessions/pricing.ts +0 -60
  609. package/src/sessions/questionBatches.test.ts +0 -110
  610. package/src/sessions/reasoningSummaries.ts +0 -59
  611. package/src/sessions/registry.ts +0 -381
  612. package/src/sessions/runIndex.ts +0 -99
  613. package/src/sessions/runStore.test.ts +0 -152
  614. package/src/sessions/runStore.ts +0 -332
  615. package/src/sessions/runner.ts +0 -604
  616. package/src/sessions/runtimeResources.test.ts +0 -61
  617. package/src/sessions/sessions.test.ts +0 -549
  618. package/src/sessions/sessions.ts +0 -339
  619. package/src/skills/registry.test.ts +0 -104
  620. package/src/skills/registry.ts +0 -413
  621. package/src/terminal/accountsMenu.test.ts +0 -225
  622. package/src/terminal/accountsMenu.ts +0 -382
  623. package/src/terminal/cli.ts +0 -149
  624. package/src/terminal/client.ts +0 -74
  625. package/src/terminal/control.test.ts +0 -23
  626. package/src/terminal/control.ts +0 -23
  627. package/src/terminal/controller.ts +0 -291
  628. package/src/terminal/hubMenu.ts +0 -24
  629. package/src/terminal/launch.test.ts +0 -25
  630. package/src/terminal/launch.ts +0 -48
  631. package/src/terminal/piExtension.lifecycle.test.ts +0 -55
  632. package/src/terminal/piExtension.ts +0 -259
  633. package/src/terminal/pluginControl.test.ts +0 -146
  634. package/src/terminal/pluginMenu.ts +0 -112
  635. package/src/terminal/socket.test.ts +0 -71
  636. package/src/terminal/socket.ts +0 -232
  637. package/src/terminal/standalone.test.ts +0 -167
  638. package/src/terminal/standalone.ts +0 -153
  639. package/src/terminal/terminal.test.ts +0 -399
  640. package/src/terminal/terminals.ts +0 -553
  641. package/src/terminal/tui/application.test.ts +0 -114
  642. package/src/terminal/tui/application.ts +0 -491
  643. package/src/terminal/tui/commands.test.ts +0 -218
  644. package/src/terminal/tui/commands.ts +0 -361
  645. package/src/terminal/tui/dialogs.ts +0 -301
  646. package/src/terminal/tui/editor.test.ts +0 -84
  647. package/src/terminal/tui/editor.ts +0 -79
  648. package/src/terminal/tui/keybindings.test.ts +0 -22
  649. package/src/terminal/tui/keybindings.ts +0 -50
  650. package/src/terminal/tui/piAdapter.ts +0 -62
  651. package/src/terminal/tui/presentation.test.ts +0 -79
  652. package/src/terminal/tui/questions.test.ts +0 -41
  653. package/src/terminal/tui/questions.ts +0 -47
  654. package/src/terminal/tui/runtime.socket.test.ts +0 -104
  655. package/src/terminal/tui/runtime.test.ts +0 -215
  656. package/src/terminal/tui/runtime.ts +0 -388
  657. package/src/terminal/tui/sessionUi.ts +0 -24
  658. package/src/terminal/tui/settings.test.ts +0 -150
  659. package/src/terminal/tui/settings.ts +0 -188
  660. package/src/terminal/tui/status.test.ts +0 -70
  661. package/src/terminal/tui/status.ts +0 -109
  662. package/src/terminal/tui/theme.ts +0 -174
  663. package/src/terminal/tui/tools.test.ts +0 -145
  664. package/src/terminal/tui/tools.ts +0 -142
  665. package/src/terminal/tui/transcript.test.ts +0 -25
  666. package/src/terminal/tui/transcript.ts +0 -124
  667. package/src/terminal/tui/ui.test.ts +0 -313
  668. package/src/terminal/tui/ui.ts +0 -166
  669. package/src/terminal/tui/welcome.ts +0 -102
  670. package/src/tools/askUser.test.ts +0 -69
  671. package/src/tools/askUser.ts +0 -59
  672. package/src/tools/definitions.ts +0 -187
  673. package/src/tools/maintenance.ts +0 -24
  674. package/src/tools/memoryTools.ts +0 -22
  675. package/src/tools/pluginPropose.ts +0 -41
  676. package/src/tools/registryWrite.test.ts +0 -101
  677. package/src/tools/registryWrite.ts +0 -182
  678. package/src/tools/spawnSubagent.ts +0 -92
  679. package/src/tools/types.ts +0 -39
  680. package/src/web/safeRequest.ts +0 -171
  681. package/src/web/text.ts +0 -53
  682. package/src/web/tools.ts +0 -134
  683. package/src/web/web.test.ts +0 -141
@@ -0,0 +1,145 @@
1
+ import { matchesKey } from '@earendil-works/pi-tui';
2
+ import { CENTER_DIALOG_PAD, CHROME_PAD, centerDialogBodyRows, centerDialogContentWidth, centerDialogFrame, centerDialogVerticalPad, contentWidth, pageBodyRows, pageFrame, tabIndexAt, tabStrip } from "./chrome.js";
3
+ import { centeredDialogHost, dialogFits, pageRows } from "./dialogGeometry.js";
4
+ export class PageOverlay {
5
+ options;
6
+ focusedValue = false;
7
+ disposed = false;
8
+ pointerLayout;
9
+ hoveredTab;
10
+ constructor(options) {
11
+ this.options = options;
12
+ options.page.activate?.();
13
+ }
14
+ get page() { return this.options.page; }
15
+ get focused() { return this.focusedValue; }
16
+ set focused(value) {
17
+ this.focusedValue = value;
18
+ if (this.options.page.focused !== undefined)
19
+ this.options.page.focused = value;
20
+ }
21
+ invalidate() { }
22
+ handleMouse(event) {
23
+ if (this.disposed)
24
+ return undefined;
25
+ if (event.type === 'wheel') {
26
+ const key = event.wheelDelta !== undefined && event.wheelDelta < 0 ? '\x1b[5~' : '\x1b[6~';
27
+ this.handleInput(key);
28
+ return { handled: true, render: true };
29
+ }
30
+ if (event.type !== 'move' && event.type !== 'click')
31
+ return undefined;
32
+ if (event.type === 'click' && event.button !== 'left')
33
+ return undefined;
34
+ const layout = this.pointerLayout;
35
+ if (!layout)
36
+ return undefined;
37
+ const tabs = this.options.page.tabs();
38
+ const tabX = event.x - layout.contentX;
39
+ if (layout.tabRow !== undefined && event.y === layout.tabRow && tabs.length > 1) {
40
+ const tabIndex = tabIndexAt(tabs, layout.contentWidth, tabX);
41
+ const current = tabs.findIndex(tab => tab.id === this.options.page.activeTab());
42
+ if (event.type === 'move') {
43
+ const nextHover = tabIndex === undefined ? undefined : tabs[tabIndex]?.id;
44
+ if (nextHover === this.hoveredTab)
45
+ return { handled: true, render: false };
46
+ this.hoveredTab = nextHover;
47
+ return { handled: true, render: true };
48
+ }
49
+ const target = tabIndex ?? (tabX < layout.contentWidth / 2
50
+ ? (current - 1 + tabs.length) % tabs.length
51
+ : (current + 1) % tabs.length);
52
+ const delta = (target - Math.max(0, current) + tabs.length) % tabs.length;
53
+ const reverse = (Math.max(0, current) - target + tabs.length) % tabs.length;
54
+ const direction = delta <= reverse ? '\t' : '\x1b[Z';
55
+ const steps = Math.min(delta, reverse);
56
+ for (let index = 0; index < steps; index += 1)
57
+ this.options.page.handleInput(direction);
58
+ this.hoveredTab = undefined;
59
+ return { handled: true, render: true };
60
+ }
61
+ let hoverChanged = false;
62
+ if (event.type === 'move' && this.hoveredTab) {
63
+ this.hoveredTab = undefined;
64
+ hoverChanged = true;
65
+ }
66
+ if (event.y < layout.bodyStart)
67
+ return hoverChanged ? { handled: true, render: true } : undefined;
68
+ const handled = this.options.page.handleMouse?.({ ...event, x: tabX, y: event.y - layout.bodyStart });
69
+ return handled ?? (hoverChanged ? { handled: true, render: true } : undefined);
70
+ }
71
+ handleInput(data) {
72
+ if (this.disposed)
73
+ return;
74
+ if (matchesKey(data, 'ctrl+c')) {
75
+ this.options.close();
76
+ return;
77
+ }
78
+ const centered = centeredDialogHost(this.options.tui) && dialogFits(this.options.tui.terminal.columns, this.options.tui.terminal.rows);
79
+ const tabs = this.options.page.tabs();
80
+ const input = centered && tabs.length > 1
81
+ ? matchesKey(data, 'right') ? '\t' : matchesKey(data, 'left') ? '\x1b[Z' : data
82
+ : data;
83
+ if (this.options.page.handleInput(input)) {
84
+ this.options.changed();
85
+ return;
86
+ }
87
+ if (matchesKey(data, 'escape'))
88
+ this.options.close();
89
+ }
90
+ render(width) {
91
+ if (this.disposed)
92
+ return [];
93
+ const rows = pageRows(this.options.tui);
94
+ const page = this.options.page;
95
+ const tabs = page.tabs();
96
+ if (width < 1 || rows < 1 || !tabs.length)
97
+ return [];
98
+ const theme = this.options.theme();
99
+ const centered = centeredDialogHost(this.options.tui) && dialogFits(this.options.tui.terminal.columns, this.options.tui.terminal.rows);
100
+ const inner = centered ? centerDialogContentWidth(width) : contentWidth(width);
101
+ if (centered) {
102
+ const tabRows = tabs.length > 1 ? 1 : 0;
103
+ const bodyStart = centerDialogVerticalPad(rows) + 2 + tabRows;
104
+ this.pointerLayout = {
105
+ tabRow: tabRows ? bodyStart - 1 : undefined,
106
+ bodyStart,
107
+ contentX: CENTER_DIALOG_PAD,
108
+ contentWidth: inner,
109
+ centered
110
+ };
111
+ const body = [
112
+ ...(tabRows ? [tabStrip(tabs, page.activeTab(), inner, theme, 'top', this.hoveredTab)] : []),
113
+ ...page.render(inner, Math.max(0, centerDialogBodyRows(rows) - tabRows))
114
+ ];
115
+ return centerDialogFrame({ title: tabs.find(tab => tab.id === page.activeTab())?.title ?? 'Page', body, width, rows, theme });
116
+ }
117
+ this.pointerLayout = {
118
+ tabRow: 0,
119
+ bodyStart: 2,
120
+ contentX: CHROME_PAD,
121
+ contentWidth: contentWidth(width),
122
+ centered
123
+ };
124
+ const footer = [
125
+ page.hint(),
126
+ tabs.length > 1 ? 'Tab/Shift+Tab sections' : '',
127
+ 'Esc close'
128
+ ].filter(Boolean).join(' · ');
129
+ return pageFrame({
130
+ title: '',
131
+ headerLine: tabStrip(tabs, page.activeTab(), inner, theme, 'top', this.hoveredTab),
132
+ body: page.render(inner, pageBodyRows(rows)),
133
+ footer,
134
+ width,
135
+ rows,
136
+ theme
137
+ });
138
+ }
139
+ dispose() {
140
+ if (this.disposed)
141
+ return;
142
+ this.disposed = true;
143
+ this.options.page.dispose?.();
144
+ }
145
+ }
@@ -0,0 +1,54 @@
1
+ /**
2
+ * The Accounts page: one row per account with its health, the selected account's details beneath,
3
+ * and Pools as a second section. Enter on an account opens its actions; the actions themselves are
4
+ * the ones the `/accounts` menu of a native `pi` session uses.
5
+ */
6
+ import type { Theme } from '@earendil-works/pi-coding-agent';
7
+ import { type AccountsCall, type AccountsUi, type SessionAccount } from "../../accountsMenu.js";
8
+ import type { TerminalPage } from "../page.js";
9
+ import type { TerminalMouseInput } from "../mouse.js";
10
+ export interface AccountsPageOptions {
11
+ theme: () => Theme;
12
+ call: AccountsCall;
13
+ /** The account this session runs on. */
14
+ session: () => SessionAccount | null;
15
+ ui: AccountsUi;
16
+ /** The session is switching accounts: the host ends it so the launcher can start it again. */
17
+ relaunch(): void;
18
+ changed(): void;
19
+ }
20
+ export declare class AccountsPage implements TerminalPage {
21
+ private readonly options;
22
+ private overview;
23
+ private error;
24
+ private section;
25
+ private busy;
26
+ private disposed;
27
+ private readonly list;
28
+ constructor(options: AccountsPageOptions);
29
+ get focused(): boolean;
30
+ set focused(value: boolean);
31
+ activate(): void;
32
+ dispose(): void;
33
+ tabs(): readonly [{
34
+ readonly id: "accounts";
35
+ readonly title: "Accounts";
36
+ }, {
37
+ readonly id: "pools";
38
+ readonly title: "Pools";
39
+ }];
40
+ activeTab(): string;
41
+ hint(): string;
42
+ private reload;
43
+ /** Searching looks through accounts and pools together; otherwise the page shows the current section. */
44
+ private fill;
45
+ private accountRows;
46
+ private poolRows;
47
+ private account;
48
+ /** Runs one thing at a time and always reads the accounts again afterwards. */
49
+ private guarded;
50
+ private activateRow;
51
+ handleMouse(event: TerminalMouseInput): import("@earendil-works/pi-tui").TuiMouseEventResult | undefined;
52
+ handleInput(data: string): boolean;
53
+ render(width: number, rows: number): string[];
54
+ }
@@ -0,0 +1,181 @@
1
+ import { matchesKey, truncateToWidth } from '@earendil-works/pi-tui';
2
+ import { HEALTH, accountActions, accountDetails, addAccount, editPool, runAccountAction } from "../../accountsMenu.js";
3
+ import { safeText } from "../chrome.js";
4
+ import { FilterList } from "../list.js";
5
+ const SECTIONS = [{ id: 'accounts', title: 'Accounts' }, { id: 'pools', title: 'Pools' }];
6
+ const ADD = 'action:add';
7
+ const CHECK_ALL = 'action:check-all';
8
+ const NEW_POOL = 'action:new-pool';
9
+ const BACK = 'Back';
10
+ const HEALTH_TONE = { ok: 'success', limited: 'warning', auth_expired: 'error', signed_out: 'error', error: 'error', unknown: 'dim' };
11
+ export class AccountsPage {
12
+ options;
13
+ overview;
14
+ error;
15
+ section = 'accounts';
16
+ busy = false;
17
+ disposed = false;
18
+ list;
19
+ constructor(options) {
20
+ this.options = options;
21
+ this.list = new FilterList({
22
+ theme: options.theme, search: 'always', noun: ['row', 'rows'], empty: 'Nothing here yet',
23
+ searchContext: () => 'accounts and pools',
24
+ onActivate: row => { void this.activateRow(row); }
25
+ });
26
+ }
27
+ get focused() { return this.list.focused; }
28
+ set focused(value) { this.list.focused = value; }
29
+ activate() { void this.reload(); }
30
+ dispose() { this.disposed = true; }
31
+ tabs() { return SECTIONS; }
32
+ activeTab() { return this.section; }
33
+ hint() { return this.list.query ? 'Enter open · Esc clear' : 'Enter actions · type to search'; }
34
+ async reload() {
35
+ try {
36
+ this.overview = await this.options.call('accounts.list');
37
+ this.error = undefined;
38
+ }
39
+ catch (error) {
40
+ this.error = error instanceof Error ? error.message : String(error);
41
+ }
42
+ if (this.disposed)
43
+ return;
44
+ this.fill();
45
+ this.options.changed();
46
+ }
47
+ /** Searching looks through accounts and pools together; otherwise the page shows the current section. */
48
+ fill() {
49
+ this.list.setRows(this.list.query ? [...this.accountRows(), ...this.poolRows()] : this.section === 'accounts' ? this.accountRows() : this.poolRows());
50
+ }
51
+ accountRows() {
52
+ const overview = this.overview;
53
+ if (!overview)
54
+ return [];
55
+ const session = this.options.session();
56
+ const accounts = overview.accounts.map(account => ({
57
+ id: `account:${account.id}`, group: 'Accounts',
58
+ label: `${account.isDefault ? '●' : '○'} ${safeText(account.label)}`,
59
+ detail: `${HEALTH[account.state.health] ?? HEALTH.unknown}${session?.accountId === account.id ? ' · this session' : ''}`,
60
+ tone: HEALTH_TONE[account.state.health] ?? 'dim',
61
+ searchText: `${account.label} ${account.state.identity ?? ''} ${HEALTH[account.state.health] ?? ''}`
62
+ }));
63
+ return [
64
+ ...accounts,
65
+ { id: ADD, label: '+ Add account', group: 'Actions', tone: 'accent' },
66
+ { id: CHECK_ALL, label: '⟳ Check all accounts', group: 'Actions', tone: 'accent' }
67
+ ];
68
+ }
69
+ poolRows() {
70
+ const overview = this.overview;
71
+ if (!overview)
72
+ return [];
73
+ const names = new Map(overview.accounts.map(account => [account.id, account.label]));
74
+ return [
75
+ ...overview.pools.map(pool => ({
76
+ id: `pool:${pool.id}`, group: 'Pools', label: safeText(pool.label),
77
+ detail: pool.accountIds.map(id => names.get(id) ?? 'removed account').join(' → '), tone: 'muted'
78
+ })),
79
+ { id: NEW_POOL, label: '+ New pool', group: 'Actions', tone: 'accent' }
80
+ ];
81
+ }
82
+ account(id) { return this.overview?.accounts.find(account => `account:${account.id}` === id); }
83
+ /** Runs one thing at a time and always reads the accounts again afterwards. */
84
+ async guarded(work) {
85
+ if (this.busy)
86
+ return;
87
+ this.busy = true;
88
+ try {
89
+ await work();
90
+ }
91
+ catch (error) {
92
+ this.options.ui.notify(error instanceof Error ? error.message : String(error), 'error');
93
+ }
94
+ finally {
95
+ this.busy = false;
96
+ }
97
+ await this.reload();
98
+ }
99
+ activateRow(row) {
100
+ return this.guarded(async () => {
101
+ const { ui, call } = this.options;
102
+ const overview = this.overview;
103
+ if (!overview)
104
+ return;
105
+ if (row.id === ADD) {
106
+ await addAccount(ui, call);
107
+ return;
108
+ }
109
+ if (row.id === CHECK_ALL) {
110
+ try {
111
+ await call('accounts.refresh');
112
+ }
113
+ catch (error) {
114
+ ui.notify(error instanceof Error ? error.message : String(error), 'error');
115
+ }
116
+ return;
117
+ }
118
+ if (row.id === NEW_POOL) {
119
+ await editPool(ui, call, overview, null);
120
+ return;
121
+ }
122
+ const pool = overview.pools.find(candidate => `pool:${candidate.id}` === row.id);
123
+ if (pool) {
124
+ const action = await ui.select(pool.label, ['Edit', 'Delete', BACK]);
125
+ if (action === 'Edit')
126
+ await editPool(ui, call, overview, pool);
127
+ else if (action === 'Delete' && await ui.confirm(`Delete ${pool.label}?`, 'The accounts stay. Only the pool is removed.')) {
128
+ try {
129
+ await call('accounts.removePool', { poolId: pool.id });
130
+ }
131
+ catch (error) {
132
+ ui.notify(error instanceof Error ? error.message : String(error), 'error');
133
+ }
134
+ }
135
+ return;
136
+ }
137
+ const account = this.account(row.id);
138
+ if (!account)
139
+ return;
140
+ const isSession = this.options.session()?.accountId === account.id;
141
+ const action = await ui.select(`${account.label} · ${HEALTH[account.state.health] ?? HEALTH.unknown}`, [...accountActions(account, isSession, false), BACK]);
142
+ if (!action || action === BACK)
143
+ return;
144
+ const outcome = await runAccountAction(ui, call, overview, account, action);
145
+ if (outcome === 'relaunch')
146
+ this.options.relaunch();
147
+ });
148
+ }
149
+ handleMouse(event) {
150
+ return this.list.handleMouse(event);
151
+ }
152
+ handleInput(data) {
153
+ if (matchesKey(data, 'tab') || matchesKey(data, 'shift+tab')) {
154
+ if (!this.list.query) {
155
+ this.section = this.section === 'accounts' ? 'pools' : 'accounts';
156
+ this.fill();
157
+ }
158
+ return true;
159
+ }
160
+ const before = this.list.query;
161
+ const used = this.list.handleInput(data);
162
+ if (this.list.query !== before)
163
+ this.fill();
164
+ return used;
165
+ }
166
+ render(width, rows) {
167
+ const theme = this.options.theme();
168
+ if (width < 1 || rows < 1)
169
+ return [];
170
+ if (!this.overview)
171
+ return [theme.fg(this.error ? 'error' : 'dim', this.error ? `Could not read accounts: ${this.error}` : 'Reading accounts…')];
172
+ const selected = this.section === 'accounts' ? this.account(this.list.selected?.id ?? '') : undefined;
173
+ const details = selected ? accountDetails(selected).split('\n').slice(1) : [];
174
+ // The list gets the rows it needs first; the details take what is left.
175
+ const detailRows = Math.min(details.length, 9, Math.max(0, rows - 2 - this.list.height));
176
+ const lines = this.list.render(width, Math.max(2, rows - 1 - (detailRows ? detailRows + 1 : 0)));
177
+ if (detailRows)
178
+ lines.push('', ...details.slice(0, detailRows).map(line => theme.fg('muted', line)));
179
+ return lines.slice(0, rows).map(line => truncateToWidth(line, width, ''));
180
+ }
181
+ }
@@ -0,0 +1,47 @@
1
+ import type { Theme } from '@earendil-works/pi-coding-agent';
2
+ import { type ComponentItem } from "../../../variant/components.js";
3
+ import type { MenuUi } from "../../pluginMenu.js";
4
+ import { type TabInfo } from "../chrome.js";
5
+ import type { TerminalPage } from "../page.js";
6
+ import type { TerminalMouseInput } from "../mouse.js";
7
+ export interface ComponentLibrarySnapshot {
8
+ items: ComponentItem[];
9
+ addedIds: string[];
10
+ writable: boolean;
11
+ fingerprint: string | null;
12
+ }
13
+ export interface ComponentAddedResult {
14
+ fingerprint: string;
15
+ alreadyPresent: boolean;
16
+ }
17
+ export type ComponentPageCall = <T = unknown>(method: string, params?: Record<string, unknown>) => Promise<T>;
18
+ export interface ComponentsPageOptions {
19
+ theme: () => Theme;
20
+ call: ComponentPageCall;
21
+ ui: MenuUi;
22
+ notify(message: string, type?: string): void;
23
+ changed(): void;
24
+ }
25
+ export declare class ComponentsPage implements TerminalPage {
26
+ private readonly options;
27
+ private snapshot;
28
+ private section;
29
+ private error;
30
+ private busy;
31
+ private disposed;
32
+ private readonly list;
33
+ constructor(options: ComponentsPageOptions);
34
+ get focused(): boolean;
35
+ set focused(value: boolean);
36
+ tabs(): readonly TabInfo[];
37
+ activeTab(): string;
38
+ activate(): void;
39
+ dispose(): void;
40
+ hint(): string;
41
+ private load;
42
+ private fill;
43
+ private add;
44
+ handleMouse(event: TerminalMouseInput): import("@earendil-works/pi-tui").TuiMouseEventResult | undefined;
45
+ handleInput(data: string): boolean;
46
+ render(width: number, rows: number): string[];
47
+ }
@@ -0,0 +1,119 @@
1
+ import { matchesKey, truncateToWidth, wrapTextWithAnsi } from '@earendil-works/pi-tui';
2
+ import { safeText } from "../chrome.js";
3
+ import { FilterList } from "../list.js";
4
+ const SECTIONS = [
5
+ { id: 'skills', title: 'Skills' },
6
+ { id: 'prompts', title: 'Prompts' },
7
+ { id: 'rules', title: 'Rules' }
8
+ ];
9
+ export class ComponentsPage {
10
+ options;
11
+ snapshot;
12
+ section = 'skills';
13
+ error;
14
+ busy = false;
15
+ disposed = false;
16
+ list;
17
+ constructor(options) {
18
+ this.options = options;
19
+ this.list = new FilterList({
20
+ theme: options.theme, search: 'always', noun: ['item', 'items'], empty: 'This library section is empty.',
21
+ onActivate: row => { void this.add(row.data); }
22
+ });
23
+ }
24
+ get focused() { return this.list.focused; }
25
+ set focused(value) { this.list.focused = value; }
26
+ tabs() { return SECTIONS; }
27
+ activeTab() { return this.section; }
28
+ activate() { if (!this.snapshot)
29
+ void this.load(); }
30
+ dispose() { this.disposed = true; }
31
+ hint() { return this.list.query ? 'Enter add · Esc clear' : 'Enter add eligible item · type to search'; }
32
+ async load() {
33
+ try {
34
+ this.snapshot = await this.options.call('terminal.components.list');
35
+ this.error = undefined;
36
+ }
37
+ catch (error) {
38
+ this.error = error instanceof Error ? error.message : String(error);
39
+ }
40
+ if (this.disposed)
41
+ return;
42
+ this.fill();
43
+ this.options.changed();
44
+ }
45
+ fill() {
46
+ const items = (this.snapshot?.items ?? []).filter(item => item.kind === this.section);
47
+ const added = new Set(this.snapshot?.addedIds ?? []);
48
+ this.list.setRows(items.map(item => {
49
+ const exists = added.has(item.id);
50
+ const detail = exists ? 'In Harness' : item.kind === 'prompts' ? 'Library only' : this.snapshot?.writable ? 'Add for next session' : 'Browse only';
51
+ return {
52
+ id: item.id, label: safeText(item.name), group: item.builtin ? 'Built-in' : 'Library',
53
+ detail, tone: exists ? 'success' : item.kind === 'prompts' ? 'dim' : 'muted',
54
+ searchText: item.name + ' ' + item.description + ' ' + item.id, data: item
55
+ };
56
+ }));
57
+ }
58
+ async add(item) {
59
+ if (!item || this.busy)
60
+ return;
61
+ if (item.kind === 'prompts') {
62
+ this.options.notify('Prompts stay in the library and cannot be added to a Variant.', 'info');
63
+ return;
64
+ }
65
+ if ((this.snapshot?.addedIds ?? []).includes(item.id)) {
66
+ this.options.notify('This item is already in the current Variant.', 'info');
67
+ return;
68
+ }
69
+ if (!this.snapshot?.writable) {
70
+ this.options.notify('This terminal has no writable Harness scope. The library is browse-only.', 'warning');
71
+ return;
72
+ }
73
+ const approved = await this.options.ui.confirm('Add ' + item.name + '?', 'This creates a new Variant version for the next session. The running terminal keeps its pinned version.');
74
+ if (!approved)
75
+ return;
76
+ this.busy = true;
77
+ try {
78
+ const result = await this.options.call('terminal.components.add', { id: item.id });
79
+ this.options.notify(result.alreadyPresent ? 'This item is already in the current Variant.' : 'Saved for the next session · version ' + result.fingerprint, 'info');
80
+ await this.load();
81
+ }
82
+ catch (error) {
83
+ this.options.notify(error instanceof Error ? error.message : String(error), 'error');
84
+ }
85
+ finally {
86
+ this.busy = false;
87
+ }
88
+ }
89
+ handleMouse(event) {
90
+ return this.list.handleMouse(event);
91
+ }
92
+ handleInput(data) {
93
+ if (matchesKey(data, 'tab') || matchesKey(data, 'shift+tab')) {
94
+ if (!this.list.query) {
95
+ const at = SECTIONS.findIndex(section => section.id === this.section);
96
+ const delta = matchesKey(data, 'shift+tab') ? -1 : 1;
97
+ this.section = SECTIONS[(at + delta + SECTIONS.length) % SECTIONS.length].id;
98
+ this.fill();
99
+ }
100
+ return true;
101
+ }
102
+ return this.list.handleInput(data);
103
+ }
104
+ render(width, rows) {
105
+ const theme = this.options.theme();
106
+ if (width < 1 || rows < 1)
107
+ return [];
108
+ if (!this.snapshot)
109
+ return [theme.fg(this.error ? 'error' : 'dim', this.error ? 'Could not read the component library: ' + this.error : 'Reading the component library…')];
110
+ const selected = this.list.selected?.data;
111
+ const detail = selected && rows >= 8
112
+ ? wrapTextWithAnsi(safeText(selected.description || 'No description.'), width).slice(0, Math.min(3, rows - 4))
113
+ : [];
114
+ const lines = this.list.render(width, Math.max(2, rows - (detail.length ? detail.length + 1 : 0)));
115
+ if (detail.length)
116
+ lines.push('', ...detail.map(line => theme.fg('muted', line)));
117
+ return lines.slice(0, rows).map(line => truncateToWidth(line, width, ''));
118
+ }
119
+ }
@@ -0,0 +1,37 @@
1
+ import type { Theme, ExtensionUIContext } from '@earendil-works/pi-coding-agent';
2
+ import type { TerminalPage } from "../page.js";
3
+ import type { TabInfo } from "../chrome.js";
4
+ interface DoctorPageOptions {
5
+ theme(): Theme;
6
+ call(method: string, params?: Record<string, unknown>): Promise<unknown>;
7
+ selection(): {
8
+ model: string | null;
9
+ tools: string[];
10
+ };
11
+ confirm: ExtensionUIContext['confirm'];
12
+ select: ExtensionUIContext['select'];
13
+ changed(): void;
14
+ }
15
+ export declare class DoctorPage implements TerminalPage {
16
+ private readonly options;
17
+ focused: boolean;
18
+ private report?;
19
+ private error?;
20
+ private timer?;
21
+ private disposed;
22
+ private busy;
23
+ private offset;
24
+ constructor(options: DoctorPageOptions);
25
+ tabs(): readonly TabInfo[];
26
+ activeTab(): string;
27
+ hint(): string;
28
+ activate(): void;
29
+ dispose(): void;
30
+ private start;
31
+ private poll;
32
+ private chooseLive;
33
+ private retry;
34
+ handleInput(data: string): boolean;
35
+ render(width: number, rows: number): string[];
36
+ }
37
+ export {};