@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,124 @@
1
+ import { matchesKey, truncateToWidth, wrapTextWithAnsi } from '@earendil-works/pi-tui';
2
+ import { FilterList } from "../list.js";
3
+ const SECTIONS = [
4
+ { id: 'overview', title: 'Overview' },
5
+ { id: 'tools', title: 'Tools' }
6
+ ];
7
+ const FULL = 'full';
8
+ const NOTE = 'Applies to future approvals only. Hard denials and disabled tools still apply.';
9
+ const FULL_WARNING = 'Automatically approve eligible future requests in every Pi terminal session sharing this local Harness state. Hard denials and disabled tools still apply; human-only requests stay manual unless the host explicitly opts them in. Requests already waiting are not approved.';
10
+ export class PermissionsPage {
11
+ options;
12
+ state;
13
+ section = 'overview';
14
+ error;
15
+ busy = false;
16
+ disposed = false;
17
+ list;
18
+ constructor(options) {
19
+ this.options = options;
20
+ this.list = new FilterList({
21
+ theme: options.theme, search: 'always', noun: ['tool', 'tools'], empty: 'No tools to show',
22
+ onActivate: row => { void this.toggle(row.id); },
23
+ onToggle: row => { void this.toggle(row.id); }
24
+ });
25
+ }
26
+ get focused() { return this.list.focused; }
27
+ set focused(value) { this.list.focused = value; }
28
+ activate() { void this.reload(); }
29
+ dispose() { this.disposed = true; }
30
+ tabs() { return SECTIONS; }
31
+ activeTab() { return this.section; }
32
+ hint() { return this.list.query ? 'Enter toggle · Esc clear' : 'Space or Enter toggle · type to search'; }
33
+ async reload() {
34
+ try {
35
+ this.state = await this.options.permissions();
36
+ this.error = undefined;
37
+ }
38
+ catch (error) {
39
+ this.error = error instanceof Error ? error.message : String(error);
40
+ }
41
+ if (this.disposed)
42
+ return;
43
+ this.fill();
44
+ this.options.changed();
45
+ }
46
+ fill() {
47
+ this.list.setRows(this.rows());
48
+ }
49
+ rows() {
50
+ const state = this.state;
51
+ if (!state)
52
+ return [];
53
+ if (this.section === 'overview') {
54
+ return [{ id: FULL, label: 'Full Permission', group: 'Mode', detail: state.full ? 'ON' : 'OFF', tone: state.full ? 'warning' : 'muted', searchText: 'full permission approve everything' }];
55
+ }
56
+ const granted = new Set(state.globalTools);
57
+ const active = this.options.activeTools();
58
+ const inactive = [...granted].filter(tool => !active.includes(tool));
59
+ const byName = (left, right) => left.localeCompare(right);
60
+ const tool = (name, group) => ({
61
+ id: 'tool:' + name, label: name, group,
62
+ detail: granted.has(name) ? '● allowed everywhere' : '○ asks each time',
63
+ tone: granted.has(name) ? 'success' : 'muted'
64
+ });
65
+ return [
66
+ ...[...active].sort(byName).map(name => tool(name, 'Tools in this session')),
67
+ ...inactive.sort(byName).map(name => tool(name, 'Granted, not active here'))
68
+ ];
69
+ }
70
+ async toggle(id) {
71
+ if (this.busy || !this.state)
72
+ return;
73
+ this.busy = true;
74
+ try {
75
+ if (id === FULL) {
76
+ const desired = !this.state.full;
77
+ const latest = await this.options.permissions();
78
+ if (latest.full !== desired && (!desired || await this.options.confirm('Enable Full Permission?', FULL_WARNING)))
79
+ await this.options.setFullPermission(desired);
80
+ }
81
+ else {
82
+ const tool = id.slice('tool:'.length);
83
+ if (!tool)
84
+ return;
85
+ const desired = !this.state.globalTools.includes(tool);
86
+ const latest = await this.options.permissions();
87
+ if (latest.globalTools.includes(tool) !== desired)
88
+ await this.options.setGlobalTool(tool, desired);
89
+ }
90
+ }
91
+ catch (error) {
92
+ this.options.notify(error instanceof Error ? error.message : String(error), 'error');
93
+ }
94
+ finally {
95
+ this.busy = false;
96
+ }
97
+ await this.reload();
98
+ }
99
+ handleMouse(event) {
100
+ return this.list.handleMouse(event);
101
+ }
102
+ handleInput(data) {
103
+ if (matchesKey(data, 'tab') || matchesKey(data, 'shift+tab')) {
104
+ if (!this.list.query) {
105
+ this.section = this.section === 'overview' ? 'tools' : 'overview';
106
+ this.fill();
107
+ }
108
+ return true;
109
+ }
110
+ return this.list.handleInput(data);
111
+ }
112
+ render(width, rows) {
113
+ const theme = this.options.theme();
114
+ if (width < 1 || rows < 1)
115
+ return [];
116
+ if (!this.state)
117
+ return [theme.fg(this.error ? 'error' : 'dim', this.error ? `Could not read permissions: ${this.error}` : 'Reading permissions…')];
118
+ const note = this.section === 'overview' && rows >= 8 ? wrapTextWithAnsi(NOTE, width).slice(0, 2) : [];
119
+ const lines = this.list.render(width, Math.max(1, rows - (note.length ? note.length + 1 : 0)));
120
+ if (note.length)
121
+ lines.push('', ...note.map(line => theme.fg('dim', line)));
122
+ return lines.slice(0, rows).map(line => truncateToWidth(line, width, ''));
123
+ }
124
+ }
@@ -0,0 +1,57 @@
1
+ /**
2
+ * The Plugins page: what this session loads, switched on or off, with trust for plugin code.
3
+ * Enter opens what can be done with a row; nothing changes without a choice made here. A plugin
4
+ * with settings has a Settings row that opens them as a subpage; Esc goes back to the list.
5
+ */
6
+ import type { Theme } from '@earendil-works/pi-coding-agent';
7
+ import { type MenuCall, type MenuUi } from "../../pluginMenu.js";
8
+ import type { TabInfo } from "../chrome.js";
9
+ import type { TerminalPage } from "../page.js";
10
+ import type { TerminalMouseInput } from "../mouse.js";
11
+ export interface PluginsPageOptions {
12
+ theme: () => Theme;
13
+ call: MenuCall;
14
+ ui: MenuUi & {
15
+ input(title: string, placeholder?: string): Promise<string | undefined>;
16
+ };
17
+ changed(): void;
18
+ }
19
+ export declare class PluginsPage implements TerminalPage {
20
+ private readonly options;
21
+ private plugins;
22
+ private section;
23
+ private projectId;
24
+ private error;
25
+ private restart;
26
+ private busy;
27
+ private disposed;
28
+ private readonly list;
29
+ /** The plugin whose settings are open, or null on the list. */
30
+ private settingsFor;
31
+ private saved;
32
+ private readonly settingsList;
33
+ constructor(options: PluginsPageOptions);
34
+ get focused(): boolean;
35
+ set focused(value: boolean);
36
+ activate(): void;
37
+ dispose(): void;
38
+ tabs(): readonly TabInfo[];
39
+ activeTab(): string;
40
+ hint(): string;
41
+ private settingsPlugin;
42
+ private reload;
43
+ private fill;
44
+ /** The menu rows, with a Settings row after the last row of each plugin that has settings. */
45
+ private rows;
46
+ private menu;
47
+ private key;
48
+ private toRow;
49
+ private open;
50
+ private back;
51
+ /** Flips a switch, or asks for a number inside the setting's range, and saves it. */
52
+ private change;
53
+ handleMouse(event: TerminalMouseInput): import("@earendil-works/pi-tui").TuiMouseEventResult | undefined;
54
+ handleInput(data: string): boolean;
55
+ render(width: number, rows: number): string[];
56
+ private renderSettings;
57
+ }
@@ -0,0 +1,243 @@
1
+ import { matchesKey, truncateToWidth, wrapTextWithAnsi } from '@earendil-works/pi-tui';
2
+ import { BACK, applyPluginAction, menuRows, rowActions } from "../../pluginMenu.js";
3
+ import { safeText } from "../chrome.js";
4
+ import { FilterList } from "../list.js";
5
+ const SECTIONS = [
6
+ { id: 'plugins', title: 'Plugins' },
7
+ { id: 'trust', title: 'Trust' }
8
+ ];
9
+ const SETTINGS_ROW = 'settings:';
10
+ const isSwitch = (setting) => setting.min === 0 && setting.max === 1;
11
+ const settingValueText = (setting) => isSwitch(setting)
12
+ ? setting.value === 1 ? 'on' : 'off'
13
+ : `${setting.value.toLocaleString('en-US')}${setting.value === setting.default ? ' · default' : ''}`;
14
+ const settingsOf = (plugin) => plugin.settings ?? [];
15
+ export class PluginsPage {
16
+ options;
17
+ plugins;
18
+ section = 'plugins';
19
+ projectId = null;
20
+ error;
21
+ restart = false;
22
+ busy = false;
23
+ disposed = false;
24
+ list;
25
+ /** The plugin whose settings are open, or null on the list. */
26
+ settingsFor = null;
27
+ saved = false;
28
+ settingsList;
29
+ constructor(options) {
30
+ this.options = options;
31
+ this.list = new FilterList({
32
+ theme: options.theme, search: 'always', noun: ['item', 'items'], empty: 'There is nothing to switch or trust here yet.',
33
+ onActivate: row => { void this.open(row.id); }
34
+ });
35
+ this.settingsList = new FilterList({
36
+ theme: options.theme, search: 'always', noun: ['setting', 'settings'], empty: 'This plugin has no settings.',
37
+ onActivate: row => { void this.change(row.id); },
38
+ onCancel: () => this.back()
39
+ });
40
+ }
41
+ get focused() { return this.list.focused; }
42
+ set focused(value) {
43
+ this.list.focused = value;
44
+ this.settingsList.focused = value;
45
+ }
46
+ activate() { void this.reload(); }
47
+ dispose() { this.disposed = true; }
48
+ tabs() {
49
+ const plugin = this.settingsPlugin();
50
+ return plugin ? [{ id: 'settings', title: `Plugins › ${safeText(plugin.title)}` }] : SECTIONS;
51
+ }
52
+ activeTab() { return this.settingsPlugin() ? 'settings' : this.section; }
53
+ hint() {
54
+ if (this.settingsPlugin())
55
+ return this.settingsList.query ? 'Enter change · Esc clear' : 'Enter change · Esc back';
56
+ return this.list.query ? 'Enter actions · Esc clear' : 'Enter actions · type to search';
57
+ }
58
+ settingsPlugin() {
59
+ return this.settingsFor ? this.plugins?.find(plugin => plugin.id === this.settingsFor) : undefined;
60
+ }
61
+ async reload() {
62
+ try {
63
+ const { call } = this.options;
64
+ this.projectId = (await call('plugins.session').catch(() => ({ projectId: null }))).projectId;
65
+ this.plugins = await call('plugins.list');
66
+ this.error = undefined;
67
+ }
68
+ catch (error) {
69
+ this.error = error instanceof Error ? error.message : String(error);
70
+ }
71
+ if (this.disposed)
72
+ return;
73
+ this.fill();
74
+ this.options.changed();
75
+ }
76
+ fill() {
77
+ if (this.settingsFor && !this.settingsPlugin())
78
+ this.settingsFor = null;
79
+ this.list.setRows(this.rows());
80
+ const plugin = this.settingsPlugin();
81
+ if (plugin)
82
+ this.settingsList.setRows(settingsOf(plugin).map(setting => ({
83
+ id: setting.key, label: safeText(setting.label), detail: settingValueText(setting),
84
+ tone: isSwitch(setting) ? (setting.value === 1 ? 'success' : 'dim') : 'muted',
85
+ searchText: `${setting.label} ${setting.description}`
86
+ })));
87
+ }
88
+ /** The menu rows, with a Settings row after the last row of each plugin that has settings. */
89
+ rows() {
90
+ const menu = this.menu();
91
+ const out = [];
92
+ const placed = new Set();
93
+ const settingsRow = (plugin) => {
94
+ const count = settingsOf(plugin).length;
95
+ placed.add(plugin.id);
96
+ return { id: `${SETTINGS_ROW}${plugin.id}`, group: safeText(plugin.title), label: 'Settings', detail: `${count} ${count === 1 ? 'setting' : 'settings'} ›`, tone: 'muted', searchText: `${plugin.title} settings ${settingsOf(plugin).map(setting => setting.label).join(' ')}` };
97
+ };
98
+ menu.forEach((row, index) => {
99
+ out.push(this.toRow(row));
100
+ const last = menu[index + 1]?.plugin.id !== row.plugin.id;
101
+ if (this.section === 'plugins' && last && settingsOf(row.plugin).length)
102
+ out.push(settingsRow(row.plugin));
103
+ });
104
+ if (this.section === 'plugins') {
105
+ for (const plugin of this.plugins ?? [])
106
+ if (settingsOf(plugin).length && !placed.has(plugin.id))
107
+ out.push(settingsRow(plugin));
108
+ }
109
+ return out;
110
+ }
111
+ menu() {
112
+ const rows = menuRows(this.plugins ?? [], this.projectId);
113
+ return this.section === 'trust'
114
+ ? rows.filter(row => row.whole && Boolean(row.plugin.code))
115
+ : rows.filter(row => rowActions(row, this.projectId).some(action => action.startsWith('Switch ')));
116
+ }
117
+ key(row) { return `${row.whole ? 'plugin' : 'item'}:${row.id}`; }
118
+ toRow(row) {
119
+ const kind = row.whole ? row.note : row.note.replace(/ in .*$/, '');
120
+ return {
121
+ id: this.key(row), group: safeText(row.plugin.title), label: row.whole ? 'Whole plugin' : safeText(row.name),
122
+ detail: `${row.on ? 'on' : 'off'}${kind ? ` · ${kind}` : ''}`, tone: row.on ? 'success' : 'dim',
123
+ searchText: `${row.name} ${row.plugin.title} ${row.note}`
124
+ };
125
+ }
126
+ async open(id) {
127
+ if (id.startsWith(SETTINGS_ROW)) {
128
+ this.settingsFor = id.slice(SETTINGS_ROW.length);
129
+ this.saved = false;
130
+ this.fill();
131
+ this.options.changed();
132
+ return;
133
+ }
134
+ const row = this.menu().find(candidate => this.key(candidate) === id);
135
+ if (!row || this.busy)
136
+ return;
137
+ this.busy = true;
138
+ try {
139
+ const action = await this.options.ui.select(`${row.plugin.title}: ${row.plugin.description || 'No description.'}`, rowActions(row, this.projectId));
140
+ if (action && action !== BACK && await applyPluginAction(this.options.ui, this.options.call, row, action))
141
+ this.restart = true;
142
+ }
143
+ finally {
144
+ this.busy = false;
145
+ }
146
+ await this.reload();
147
+ }
148
+ back() {
149
+ this.settingsFor = null;
150
+ this.saved = false;
151
+ this.fill();
152
+ }
153
+ /** Flips a switch, or asks for a number inside the setting's range, and saves it. */
154
+ async change(key) {
155
+ const plugin = this.settingsPlugin();
156
+ const setting = plugin && settingsOf(plugin).find(candidate => candidate.key === key);
157
+ if (!plugin || !setting || this.busy)
158
+ return;
159
+ this.busy = true;
160
+ try {
161
+ let value;
162
+ if (isSwitch(setting))
163
+ value = setting.value === 1 ? 0 : 1;
164
+ else {
165
+ const answer = await this.options.ui.input(`${setting.label} (${setting.min.toLocaleString('en-US')}–${setting.max.toLocaleString('en-US')})`, String(setting.value));
166
+ if (answer === undefined || !answer.trim())
167
+ return;
168
+ const typed = answer.trim().replace(/[,_]/g, '');
169
+ value = Number(typed);
170
+ if (!/^-?\d+$/.test(typed) || value < setting.min || value > setting.max) {
171
+ this.options.ui.notify(`${setting.label} must be a whole number from ${setting.min.toLocaleString('en-US')} to ${setting.max.toLocaleString('en-US')}.`, 'error');
172
+ return;
173
+ }
174
+ }
175
+ const fresh = await this.options.call('plugins.configure', { pluginId: plugin.id, settings: { [setting.key]: value } });
176
+ if (Array.isArray(fresh))
177
+ this.plugins = fresh;
178
+ else
179
+ await this.reload();
180
+ this.saved = true;
181
+ this.fill();
182
+ }
183
+ catch (error) {
184
+ this.options.ui.notify(error instanceof Error ? error.message : String(error), 'error');
185
+ }
186
+ finally {
187
+ this.busy = false;
188
+ if (!this.disposed)
189
+ this.options.changed();
190
+ }
191
+ }
192
+ handleMouse(event) {
193
+ return this.settingsPlugin() ? this.settingsList.handleMouse(event) : this.list.handleMouse(event);
194
+ }
195
+ handleInput(data) {
196
+ if (this.settingsPlugin()) {
197
+ if (matchesKey(data, 'tab') || matchesKey(data, 'shift+tab'))
198
+ return true;
199
+ return this.settingsList.handleInput(data);
200
+ }
201
+ if (matchesKey(data, 'tab') || matchesKey(data, 'shift+tab')) {
202
+ if (!this.list.query) {
203
+ this.section = this.section === 'plugins' ? 'trust' : 'plugins';
204
+ this.fill();
205
+ }
206
+ return true;
207
+ }
208
+ return this.list.handleInput(data);
209
+ }
210
+ render(width, rows) {
211
+ const theme = this.options.theme();
212
+ if (width < 1 || rows < 1)
213
+ return [];
214
+ if (!this.plugins)
215
+ return [theme.fg(this.error ? 'error' : 'dim', this.error ? `Could not read plugins: ${this.error}` : 'Reading plugins…')];
216
+ const plugin = this.settingsPlugin();
217
+ if (plugin)
218
+ return this.renderSettings(plugin, width, rows);
219
+ const selectedId = this.list.selected?.id;
220
+ const selected = selectedId?.startsWith(SETTINGS_ROW)
221
+ ? this.plugins.find(candidate => `${SETTINGS_ROW}${candidate.id}` === selectedId)
222
+ : this.menu().find(candidate => this.key(candidate) === selectedId)?.plugin;
223
+ const detail = selected && rows >= 8 ? wrapTextWithAnsi(safeText(selected.description || 'No description.'), width).slice(0, 2) : [];
224
+ const note = this.restart ? ['Saved. Changes apply when this session restarts.'] : [];
225
+ const extra = detail.length + note.length;
226
+ const lines = this.list.render(width, Math.max(2, rows - (extra ? extra + 1 : 0)));
227
+ if (extra)
228
+ lines.push('', ...detail.map(line => theme.fg('muted', line)), ...note.map(line => theme.fg('warning', line)));
229
+ return lines.slice(0, rows).map(line => truncateToWidth(line, width, ''));
230
+ }
231
+ renderSettings(plugin, width, rows) {
232
+ const theme = this.options.theme();
233
+ const setting = settingsOf(plugin).find(candidate => candidate.key === this.settingsList.selected?.id);
234
+ const range = setting && !isSwitch(setting) ? [`From ${setting.min.toLocaleString('en-US')} to ${setting.max.toLocaleString('en-US')} · default ${setting.default.toLocaleString('en-US')}`] : [];
235
+ const detail = setting && rows >= 8 ? [...wrapTextWithAnsi(safeText(setting.description), width).slice(0, 3), ...range] : [];
236
+ const note = this.saved ? ['Saved.'] : [];
237
+ const extra = detail.length + note.length;
238
+ const lines = this.settingsList.render(width, Math.max(2, rows - (extra ? extra + 1 : 0)));
239
+ if (extra)
240
+ lines.push('', ...detail.map(line => theme.fg('muted', line)), ...note.map(line => theme.fg('success', line)));
241
+ return lines.slice(0, rows).map(line => truncateToWidth(line, width, ''));
242
+ }
243
+ }
@@ -0,0 +1,55 @@
1
+ /**
2
+ * The Settings page. It lists existing host settings and asks the host to change one; the values
3
+ * and actions belong to the host. Categories are page-local tabs (Tab / Shift+Tab).
4
+ */
5
+ import type { Theme } from '@earendil-works/pi-coding-agent';
6
+ import type { TerminalPage } from "../page.js";
7
+ import type { TerminalMouseInput } from "../mouse.js";
8
+ export interface TerminalSettingItem {
9
+ id: string;
10
+ tab: string;
11
+ group: string;
12
+ label: string;
13
+ value: string;
14
+ description?: string;
15
+ }
16
+ export interface SettingsPageOptions {
17
+ theme: () => Theme;
18
+ items(): TerminalSettingItem[];
19
+ /** Changes the setting; the page reads the items again afterwards. */
20
+ apply(id: string): Promise<void>;
21
+ notify(message: string, type?: string): void;
22
+ changed(): void;
23
+ }
24
+ export declare class SettingsPage implements TerminalPage {
25
+ private readonly options;
26
+ private items;
27
+ private category;
28
+ private readonly list;
29
+ constructor(options: SettingsPageOptions);
30
+ set focused(value: boolean);
31
+ get focused(): boolean;
32
+ private categories;
33
+ private rowsFor;
34
+ private reload;
35
+ /** Searching looks through every category; otherwise the page shows the current one. */
36
+ private fill;
37
+ tabs(): ({
38
+ readonly id: "appearance";
39
+ readonly title: "Appearance";
40
+ } | {
41
+ readonly id: "model";
42
+ readonly title: "Model";
43
+ } | {
44
+ readonly id: "interaction";
45
+ readonly title: "Interaction";
46
+ } | {
47
+ readonly id: "context";
48
+ readonly title: "Context";
49
+ })[];
50
+ activeTab(): string;
51
+ hint(): string;
52
+ handleMouse(event: TerminalMouseInput): import("@earendil-works/pi-tui").TuiMouseEventResult | undefined;
53
+ handleInput(data: string): boolean;
54
+ render(width: number, rows: number): string[];
55
+ }
@@ -0,0 +1,88 @@
1
+ import { matchesKey, truncateToWidth, wrapTextWithAnsi } from '@earendil-works/pi-tui';
2
+ import { safeText } from "../chrome.js";
3
+ import { FilterList } from "../list.js";
4
+ const CATEGORIES = [
5
+ { id: 'appearance', title: 'Appearance' }, { id: 'model', title: 'Model' },
6
+ { id: 'interaction', title: 'Interaction' }, { id: 'context', title: 'Context' }
7
+ ];
8
+ const tabOf = (item) => item.tab.toLowerCase();
9
+ export class SettingsPage {
10
+ options;
11
+ items = [];
12
+ category = '';
13
+ list;
14
+ constructor(options) {
15
+ this.options = options;
16
+ this.list = new FilterList({
17
+ theme: options.theme, search: 'always', noun: ['setting', 'settings'], empty: 'No settings',
18
+ searchContext: () => 'every category',
19
+ onActivate: row => {
20
+ void options.apply(row.id).then(() => this.reload(), error => options.notify(error instanceof Error ? error.message : String(error), 'error'));
21
+ }
22
+ });
23
+ this.reload();
24
+ }
25
+ set focused(value) { this.list.focused = value; }
26
+ get focused() { return this.list.focused; }
27
+ categories() {
28
+ return CATEGORIES.filter(category => this.items.some(item => tabOf(item) === category.id));
29
+ }
30
+ rowsFor(items) {
31
+ return items.map(item => ({
32
+ id: item.id, label: safeText(item.label), detail: safeText(item.value), group: safeText(item.group), data: item,
33
+ searchText: `${item.label} ${item.id} ${item.value} ${item.description ?? ''} ${item.group} ${item.tab}`
34
+ }));
35
+ }
36
+ reload() {
37
+ const selected = this.list.selected?.id;
38
+ this.items = this.options.items().filter(item => CATEGORIES.some(category => category.id === tabOf(item)));
39
+ if (!this.categories().some(category => category.id === this.category))
40
+ this.category = this.categories()[0]?.id ?? '';
41
+ this.fill();
42
+ if (selected)
43
+ this.list.select(selected);
44
+ this.options.changed();
45
+ }
46
+ /** Searching looks through every category; otherwise the page shows the current one. */
47
+ fill() {
48
+ this.list.setRows(this.rowsFor(this.list.query ? this.items : this.items.filter(item => tabOf(item) === this.category)));
49
+ }
50
+ tabs() { return this.categories(); }
51
+ activeTab() { return this.category; }
52
+ hint() { return this.list.query ? 'Enter change · Esc clear' : 'Enter change · type to search'; }
53
+ handleMouse(event) {
54
+ return this.list.handleMouse(event);
55
+ }
56
+ handleInput(data) {
57
+ if (matchesKey(data, 'tab') || matchesKey(data, 'shift+tab')) {
58
+ const categories = this.categories();
59
+ if (!this.list.query && categories.length > 1) {
60
+ const at = Math.max(0, categories.findIndex(category => category.id === this.category));
61
+ this.category = categories[(at + (matchesKey(data, 'shift+tab') ? -1 : 1) + categories.length) % categories.length].id;
62
+ this.fill();
63
+ }
64
+ return true;
65
+ }
66
+ const before = this.list.query;
67
+ const used = this.list.handleInput(data);
68
+ if (this.list.query !== before)
69
+ this.fill();
70
+ return used;
71
+ }
72
+ render(width, rows) {
73
+ if (width < 1 || rows < 1)
74
+ return [];
75
+ const theme = this.options.theme();
76
+ const description = this.list.selected?.data?.description;
77
+ const descriptionRows = Math.min(3, Math.max(0, rows - 7));
78
+ const reserved = descriptionRows ? descriptionRows + 1 : 0;
79
+ const lines = this.list.render(width, Math.max(2, rows - 1 - reserved));
80
+ if (descriptionRows) {
81
+ lines.push('');
82
+ const wrapped = description ? wrapTextWithAnsi(safeText(description), Math.max(1, width)) : [];
83
+ for (let index = 0; index < descriptionRows; index++)
84
+ lines.push(theme.fg('muted', wrapped[index] ?? ''));
85
+ }
86
+ return lines.slice(0, rows).map(line => truncateToWidth(line, width, ''));
87
+ }
88
+ }
@@ -0,0 +1,58 @@
1
+ /** Saved run evidence for the current conversation: runs, their events, and the selected event's payload. */
2
+ import type { Theme } from '@earendil-works/pi-coding-agent';
3
+ import { type TuiMouseEventResult } from '@earendil-works/pi-tui';
4
+ import type { RunEvent } from "../../../sessions/contracts.js";
5
+ import type { TerminalTrajectoryRun, TerminalTrajectorySnapshot } from "../../trajectory.js";
6
+ import { type TabInfo } from "../chrome.js";
7
+ import type { TerminalPage } from "../page.js";
8
+ import { type TerminalMouseInput } from "../mouse.js";
9
+ export interface TrajectoryPageOptions {
10
+ theme: () => Theme;
11
+ runs(): Promise<TerminalTrajectoryRun[]>;
12
+ read(runId: string, afterSequence?: number): Promise<TerminalTrajectorySnapshot>;
13
+ copy(text: string): Promise<void>;
14
+ /** Opens on this run when it is in the list; otherwise the newest. */
15
+ initialRunId?: string;
16
+ notify(message: string, type?: string): void;
17
+ changed(): void;
18
+ }
19
+ export declare class TrajectoryPage implements TerminalPage {
20
+ private readonly options;
21
+ private runs;
22
+ private section;
23
+ private readonly runList;
24
+ private runIndex;
25
+ private run;
26
+ private events;
27
+ private selected;
28
+ private detailOffset;
29
+ private eventRowsStart;
30
+ private eventRowsFirst;
31
+ private eventRowsCount;
32
+ private loading;
33
+ private loaded;
34
+ private disposed;
35
+ private timer;
36
+ private error;
37
+ constructor(options: TrajectoryPageOptions);
38
+ get selectedRunId(): string | undefined;
39
+ get selectedEvent(): RunEvent | undefined;
40
+ get focused(): boolean;
41
+ set focused(value: boolean);
42
+ tabs(): readonly TabInfo[];
43
+ activeTab(): string;
44
+ activate(): void;
45
+ deactivate(): void;
46
+ dispose(): void;
47
+ private load;
48
+ private open;
49
+ private refresh;
50
+ /** `[` is the older run, `]` the newer one. */
51
+ private runRows;
52
+ private selectRun;
53
+ private changeRun;
54
+ hint(): string;
55
+ handleMouse(event: TerminalMouseInput): TuiMouseEventResult | undefined;
56
+ handleInput(data: string): boolean;
57
+ render(width: number, rows: number): string[];
58
+ }