@xingular/harness 1.0.0 → 1.2.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 (397) hide show
  1. package/CHANGELOG.md +46 -5
  2. package/README.md +75 -21
  3. package/dist/cli.js +17421 -8711
  4. package/dist/sdk/accounts/accounts.d.ts +27 -3
  5. package/dist/sdk/accounts/accounts.js +78 -24
  6. package/dist/sdk/accounts/secrets.d.ts +12 -0
  7. package/dist/sdk/accounts/secrets.js +114 -7
  8. package/dist/sdk/accounts/store.d.ts +26 -1
  9. package/dist/sdk/accounts/store.js +1 -1
  10. package/dist/sdk/agents/builtin.d.ts +2 -0
  11. package/dist/sdk/agents/builtin.js +48 -0
  12. package/dist/sdk/agents/narrow.d.ts +13 -0
  13. package/dist/sdk/agents/narrow.js +29 -0
  14. package/dist/sdk/agents/planResearch.d.ts +5 -0
  15. package/dist/sdk/agents/planResearch.js +19 -0
  16. package/dist/sdk/agents/profiles.d.ts +81 -0
  17. package/dist/sdk/agents/profiles.js +226 -0
  18. package/dist/sdk/annotations/bridge.d.ts +42 -0
  19. package/dist/sdk/annotations/bridge.js +264 -0
  20. package/dist/sdk/annotations/capture.d.ts +116 -0
  21. package/dist/sdk/annotations/capture.js +308 -0
  22. package/dist/sdk/annotations/delivery.d.ts +72 -0
  23. package/dist/sdk/annotations/delivery.js +130 -0
  24. package/dist/sdk/annotations/inspect.d.ts +10 -0
  25. package/dist/sdk/annotations/inspect.js +33 -0
  26. package/dist/sdk/annotations/isolated.d.ts +6 -0
  27. package/dist/sdk/annotations/isolated.js +51 -0
  28. package/dist/sdk/annotations/pageScript.d.ts +28 -0
  29. package/dist/sdk/annotations/pageScript.js +871 -0
  30. package/dist/sdk/annotations/part.d.ts +10 -0
  31. package/dist/sdk/annotations/part.js +155 -0
  32. package/dist/sdk/annotations/queue.d.ts +4 -0
  33. package/dist/sdk/annotations/queue.js +40 -0
  34. package/dist/sdk/annotations/serverMethods.d.ts +3 -0
  35. package/dist/sdk/annotations/serverMethods.js +62 -0
  36. package/dist/sdk/annotations/store.d.ts +167 -0
  37. package/dist/sdk/annotations/store.js +394 -0
  38. package/dist/sdk/browser/backend.d.ts +16 -0
  39. package/dist/sdk/browser/backend.js +17 -0
  40. package/dist/sdk/browser/contracts.d.ts +19 -0
  41. package/dist/sdk/browser/contracts.js +116 -0
  42. package/dist/sdk/browser/index.d.ts +14 -3
  43. package/dist/sdk/browser/index.js +11 -4
  44. package/dist/sdk/browser/serverMethods.d.ts +3 -0
  45. package/dist/sdk/browser/serverMethods.js +7 -0
  46. package/dist/sdk/browser/session.d.ts +1 -0
  47. package/dist/sdk/browser/session.js +45 -9
  48. package/dist/sdk/browser/tools.d.ts +1 -4
  49. package/dist/sdk/browser/tools.js +14 -91
  50. package/dist/sdk/cli.js +24 -15
  51. package/dist/sdk/commands/list.d.ts +3 -0
  52. package/dist/sdk/commands/list.js +75 -0
  53. package/dist/sdk/commands/registry.d.ts +250 -0
  54. package/dist/sdk/commands/registry.js +47 -0
  55. package/dist/sdk/commands/routes.d.ts +16 -0
  56. package/dist/sdk/commands/routes.js +33 -0
  57. package/dist/sdk/core/bus.js +1 -1
  58. package/dist/sdk/core/commandBudget.d.ts +23 -0
  59. package/dist/sdk/core/commandBudget.js +57 -0
  60. package/dist/sdk/core/env.d.ts +1 -1
  61. package/dist/sdk/core/env.js +1 -1
  62. package/dist/sdk/core/index.js +17 -1
  63. package/dist/sdk/core/interactiveProfile.d.ts +46 -0
  64. package/dist/sdk/core/interactiveProfile.js +143 -0
  65. package/dist/sdk/core/workspace.d.ts +13 -0
  66. package/dist/sdk/core/workspace.js +88 -0
  67. package/dist/sdk/core/workspaceBashTool.d.ts +4 -0
  68. package/dist/sdk/core/workspaceBashTool.js +36 -0
  69. package/dist/sdk/core/workspaceSandbox.d.ts +31 -0
  70. package/dist/sdk/core/workspaceSandbox.js +320 -0
  71. package/dist/sdk/core/workspaceWriteOperations.d.ts +22 -0
  72. package/dist/sdk/core/workspaceWriteOperations.js +206 -0
  73. package/dist/sdk/doctor/serverMethods.d.ts +3 -0
  74. package/dist/sdk/doctor/serverMethods.js +8 -0
  75. package/dist/sdk/doctor/types.d.ts +2 -2
  76. package/dist/sdk/harness.d.ts +22 -0
  77. package/dist/sdk/harness.js +84 -5
  78. package/dist/sdk/history/recall.js +8 -8
  79. package/dist/sdk/history/serverMethods.d.ts +3 -0
  80. package/dist/sdk/history/serverMethods.js +8 -0
  81. package/dist/sdk/hub/cli.d.ts +1 -1
  82. package/dist/sdk/hub/cli.js +1 -1
  83. package/dist/sdk/hub/schema.d.ts +1 -1
  84. package/dist/sdk/hub/serverMethods.d.ts +3 -0
  85. package/dist/sdk/hub/serverMethods.js +11 -0
  86. package/dist/sdk/index.d.ts +16 -1
  87. package/dist/sdk/index.js +10 -0
  88. package/dist/sdk/mcp/connections.js +14 -7
  89. package/dist/sdk/mcp/serverMethods.d.ts +3 -0
  90. package/dist/sdk/mcp/serverMethods.js +22 -0
  91. package/dist/sdk/pi/runtime.d.ts +2 -1
  92. package/dist/sdk/pi/runtime.js +2 -2
  93. package/dist/sdk/plugins/builtin.d.ts +1 -0
  94. package/dist/sdk/plugins/builtin.js +145 -33
  95. package/dist/sdk/plugins/builtinRegistry.d.ts +60 -0
  96. package/dist/sdk/plugins/builtinRegistry.js +71 -0
  97. package/dist/sdk/plugins/catalogue.js +2 -1
  98. package/dist/sdk/plugins/cli.d.ts +1 -1
  99. package/dist/sdk/plugins/cli.js +4 -3
  100. package/dist/sdk/plugins/commandPrefix.d.ts +8 -0
  101. package/dist/sdk/plugins/commandPrefix.js +21 -0
  102. package/dist/sdk/plugins/firstParty.d.ts +1 -1
  103. package/dist/sdk/plugins/firstParty.js +8 -2
  104. package/dist/sdk/plugins/inventory.js +4 -3
  105. package/dist/sdk/plugins/manifest.d.ts +2 -0
  106. package/dist/sdk/plugins/manifest.js +2 -1
  107. package/dist/sdk/plugins/surfaces.d.ts +5 -0
  108. package/dist/sdk/plugins/surfaces.js +11 -0
  109. package/dist/sdk/plugins/types.d.ts +15 -0
  110. package/dist/sdk/prompt/compile.d.ts +19 -2
  111. package/dist/sdk/prompt/compile.js +79 -26
  112. package/dist/sdk/prompt/standard.d.ts +17 -0
  113. package/dist/sdk/prompt/standard.js +21 -0
  114. package/dist/sdk/refine/cli.d.ts +1 -1
  115. package/dist/sdk/refine/cli.js +2 -2
  116. package/dist/sdk/refine/serverMethods.d.ts +3 -0
  117. package/dist/sdk/refine/serverMethods.js +20 -0
  118. package/dist/sdk/server/methods.js +27 -86
  119. package/dist/sdk/server/params.d.ts +4 -0
  120. package/dist/sdk/server/params.js +11 -0
  121. package/dist/sdk/server/remote.js +36 -11
  122. package/dist/sdk/sessions/compactionCheckpoint.d.ts +11 -0
  123. package/dist/sdk/sessions/compactionCheckpoint.js +79 -0
  124. package/dist/sdk/sessions/continuation.d.ts +3 -0
  125. package/dist/sdk/sessions/continuation.js +5 -1
  126. package/dist/sdk/sessions/contracts.d.ts +185 -0
  127. package/dist/sdk/sessions/contracts.js +101 -4
  128. package/dist/sdk/sessions/control.d.ts +72 -0
  129. package/dist/sdk/sessions/control.js +158 -0
  130. package/dist/sdk/sessions/initialBash.d.ts +7 -0
  131. package/dist/sdk/sessions/initialBash.js +7 -0
  132. package/dist/sdk/sessions/planMode.d.ts +18 -4
  133. package/dist/sdk/sessions/planMode.js +82 -16
  134. package/dist/sdk/sessions/reasoningSummaries.d.ts +2 -2
  135. package/dist/sdk/sessions/reasoningSummaries.js +3 -3
  136. package/dist/sdk/sessions/registry.d.ts +2 -1
  137. package/dist/sdk/sessions/registry.js +6 -3
  138. package/dist/sdk/sessions/runIndex.js +7 -7
  139. package/dist/sdk/sessions/runStore.d.ts +14 -0
  140. package/dist/sdk/sessions/runStore.js +38 -1
  141. package/dist/sdk/sessions/runner.d.ts +40 -2
  142. package/dist/sdk/sessions/runner.js +163 -15
  143. package/dist/sdk/sessions/sessions.d.ts +40 -8
  144. package/dist/sdk/sessions/sessions.js +279 -27
  145. package/dist/sdk/sessions/sideQuestionServerMethods.d.ts +3 -0
  146. package/dist/sdk/sessions/sideQuestionServerMethods.js +19 -0
  147. package/dist/sdk/sessions/sideQuestions.d.ts +66 -0
  148. package/dist/sdk/sessions/sideQuestions.js +290 -0
  149. package/dist/sdk/sessions/subagentServerMethods.d.ts +3 -0
  150. package/dist/sdk/sessions/subagentServerMethods.js +41 -0
  151. package/dist/sdk/sessions/subagentService.d.ts +22 -2
  152. package/dist/sdk/sessions/subagentService.js +93 -16
  153. package/dist/sdk/sessions/subagents.d.ts +9 -1
  154. package/dist/sdk/sessions/subagents.js +19 -0
  155. package/dist/sdk/sessions/workSlice.d.ts +103 -0
  156. package/dist/sdk/sessions/workSlice.js +297 -0
  157. package/dist/sdk/sessions/workspaceBoundary.d.ts +15 -0
  158. package/dist/sdk/sessions/workspaceBoundary.js +46 -0
  159. package/dist/sdk/terminal/browser.d.ts +62 -0
  160. package/dist/sdk/terminal/browser.js +41 -0
  161. package/dist/sdk/terminal/browserControl.d.ts +29 -0
  162. package/dist/sdk/terminal/browserControl.js +187 -0
  163. package/dist/sdk/terminal/commandHelp.d.ts +17 -0
  164. package/dist/sdk/terminal/commandHelp.js +20 -0
  165. package/dist/sdk/terminal/controller.d.ts +15 -1
  166. package/dist/sdk/terminal/controller.js +67 -8
  167. package/dist/sdk/terminal/opentui/subagentsWidget.d.ts +28 -0
  168. package/dist/sdk/terminal/opentui/subagentsWidget.js +52 -0
  169. package/dist/sdk/terminal/opentui/theme.d.ts +43 -0
  170. package/dist/sdk/terminal/opentui/theme.js +87 -0
  171. package/dist/sdk/terminal/piExtension.d.ts +6 -1
  172. package/dist/sdk/terminal/piExtension.js +169 -84
  173. package/dist/sdk/terminal/socket.d.ts +6 -3
  174. package/dist/sdk/terminal/socket.js +40 -9
  175. package/dist/sdk/terminal/standalone.d.ts +9 -0
  176. package/dist/sdk/terminal/standalone.js +118 -19
  177. package/dist/sdk/terminal/subagentMonitor.d.ts +47 -0
  178. package/dist/sdk/terminal/subagentMonitor.js +152 -0
  179. package/dist/sdk/terminal/terminals.d.ts +60 -7
  180. package/dist/sdk/terminal/terminals.js +598 -47
  181. package/dist/sdk/terminal/trajectory.js +2 -2
  182. package/dist/sdk/terminal/tui/annotateCommand.d.ts +3 -0
  183. package/dist/sdk/terminal/tui/annotateCommand.js +22 -0
  184. package/dist/sdk/terminal/tui/commandPages.d.ts +7 -1
  185. package/dist/sdk/terminal/tui/commandPages.js +57 -6
  186. package/dist/sdk/terminal/tui/commands.d.ts +10 -4
  187. package/dist/sdk/terminal/tui/commands.js +269 -65
  188. package/dist/sdk/terminal/tui/dialogGeometry.d.ts +2 -2
  189. package/dist/sdk/terminal/tui/dialogGeometry.js +4 -2
  190. package/dist/sdk/terminal/tui/dialogs.d.ts +6 -1
  191. package/dist/sdk/terminal/tui/dialogs.js +9 -2
  192. package/dist/sdk/terminal/tui/list.d.ts +14 -1
  193. package/dist/sdk/terminal/tui/list.js +96 -14
  194. package/dist/sdk/terminal/tui/modelPicker.js +1 -6
  195. package/dist/sdk/terminal/tui/page.d.ts +3 -0
  196. package/dist/sdk/terminal/tui/pageOverlay.js +27 -7
  197. package/dist/sdk/terminal/tui/pages/accountsPage.d.ts +26 -4
  198. package/dist/sdk/terminal/tui/pages/accountsPage.js +264 -36
  199. package/dist/sdk/terminal/tui/pages/agentsPage.d.ts +74 -0
  200. package/dist/sdk/terminal/tui/pages/agentsPage.js +190 -0
  201. package/dist/sdk/terminal/tui/pages/annotatePage.d.ts +94 -0
  202. package/dist/sdk/terminal/tui/pages/annotatePage.js +341 -0
  203. package/dist/sdk/terminal/tui/pages/browserPage.d.ts +87 -0
  204. package/dist/sdk/terminal/tui/pages/browserPage.js +738 -0
  205. package/dist/sdk/terminal/tui/pages/doctorPage.d.ts +2 -0
  206. package/dist/sdk/terminal/tui/pages/doctorPage.js +103 -15
  207. package/dist/sdk/terminal/tui/pages/notesPage.d.ts +75 -0
  208. package/dist/sdk/terminal/tui/pages/notesPage.js +201 -0
  209. package/dist/sdk/terminal/tui/pages/pluginsPage.d.ts +0 -5
  210. package/dist/sdk/terminal/tui/pages/pluginsPage.js +9 -3
  211. package/dist/sdk/terminal/tui/pages/settingsPage.d.ts +8 -0
  212. package/dist/sdk/terminal/tui/pages/settingsPage.js +16 -1
  213. package/dist/sdk/terminal/tui/pages/subagentsPage.d.ts +24 -0
  214. package/dist/sdk/terminal/tui/pages/subagentsPage.js +152 -0
  215. package/dist/sdk/terminal/tui/pages/trajectoryPage.d.ts +12 -5
  216. package/dist/sdk/terminal/tui/pages/trajectoryPage.js +156 -83
  217. package/dist/sdk/terminal/tui/pages/usagePage.d.ts +43 -0
  218. package/dist/sdk/terminal/tui/pages/usagePage.js +370 -0
  219. package/dist/sdk/terminal/tui/pages/worktreesPage.d.ts +72 -0
  220. package/dist/sdk/terminal/tui/pages/worktreesPage.js +203 -0
  221. package/dist/sdk/terminal/tui/piAdapter.d.ts +1 -2
  222. package/dist/sdk/terminal/tui/piAdapter.js +3 -5
  223. package/dist/sdk/terminal/tui/planMode.d.ts +1 -1
  224. package/dist/sdk/terminal/tui/planMode.js +1 -1
  225. package/dist/sdk/terminal/tui/pluginCommands.d.ts +16 -0
  226. package/dist/sdk/terminal/tui/pluginCommands.js +31 -0
  227. package/dist/sdk/terminal/tui/questions.d.ts +2 -0
  228. package/dist/sdk/terminal/tui/runtime.js +27 -5
  229. package/dist/sdk/terminal/tui/sessionPicker.d.ts +40 -0
  230. package/dist/sdk/terminal/tui/sessionPicker.js +141 -0
  231. package/dist/sdk/terminal/tui/settingsModel.d.ts +2 -0
  232. package/dist/sdk/terminal/tui/settingsModel.js +32 -2
  233. package/dist/sdk/terminal/tui/sideQuestion.d.ts +26 -26
  234. package/dist/sdk/terminal/tui/sideQuestion.js +131 -98
  235. package/dist/sdk/terminal/tui/ui.d.ts +2 -0
  236. package/dist/sdk/terminal/tui/ui.js +1 -0
  237. package/dist/sdk/tools/askUser.js +26 -8
  238. package/dist/sdk/tools/checklist.js +3 -2
  239. package/dist/sdk/tools/checkpoint.d.ts +27 -0
  240. package/dist/sdk/tools/checkpoint.js +154 -0
  241. package/dist/sdk/tools/getCapabilities.d.ts +31 -0
  242. package/dist/sdk/tools/getCapabilities.js +34 -0
  243. package/dist/sdk/tools/harnessTools.d.ts +2 -0
  244. package/dist/sdk/tools/harnessTools.js +1 -1
  245. package/dist/sdk/tools/spawnSubagent.js +14 -4
  246. package/dist/sdk/usage/analytics.d.ts +20 -0
  247. package/dist/sdk/usage/analytics.js +151 -0
  248. package/dist/sdk/usage/ledger.d.ts +38 -0
  249. package/dist/sdk/usage/ledger.js +142 -0
  250. package/dist/sdk/usage/limits/adapters.d.ts +11 -0
  251. package/dist/sdk/usage/limits/adapters.js +349 -0
  252. package/dist/sdk/usage/limits/capture.d.ts +8 -0
  253. package/dist/sdk/usage/limits/capture.js +47 -0
  254. package/dist/sdk/usage/limits/http.d.ts +12 -0
  255. package/dist/sdk/usage/limits/http.js +51 -0
  256. package/dist/sdk/usage/limits/normalize.d.ts +15 -0
  257. package/dist/sdk/usage/limits/normalize.js +211 -0
  258. package/dist/sdk/usage/limits/service.d.ts +30 -0
  259. package/dist/sdk/usage/limits/service.js +176 -0
  260. package/dist/sdk/usage/limits/types.d.ts +65 -0
  261. package/dist/sdk/usage/limits/types.js +1 -0
  262. package/dist/sdk/usage/serverMethods.d.ts +3 -0
  263. package/dist/sdk/usage/serverMethods.js +22 -0
  264. package/dist/sdk/usage/service.d.ts +32 -0
  265. package/dist/sdk/usage/service.js +66 -0
  266. package/dist/sdk/usage/settings.d.ts +7 -0
  267. package/dist/sdk/usage/settings.js +28 -0
  268. package/dist/sdk/usage/types.d.ts +60 -0
  269. package/dist/sdk/usage/types.js +4 -0
  270. package/dist/sdk/web/part.d.ts +10 -0
  271. package/dist/sdk/web/part.js +6 -0
  272. package/dist/sdk/web/serverMethods.d.ts +3 -0
  273. package/dist/sdk/web/serverMethods.js +7 -0
  274. package/dist/sdk/wiki/serverMethods.d.ts +3 -0
  275. package/dist/sdk/wiki/serverMethods.js +26 -0
  276. package/dist/sdk/worktrees/cli.d.ts +11 -0
  277. package/dist/sdk/worktrees/cli.js +146 -0
  278. package/dist/sdk/worktrees/copy.d.ts +9 -0
  279. package/dist/sdk/worktrees/copy.js +111 -0
  280. package/dist/sdk/worktrees/git.d.ts +16 -0
  281. package/dist/sdk/worktrees/git.js +81 -0
  282. package/dist/sdk/worktrees/serverMethods.d.ts +3 -0
  283. package/dist/sdk/worktrees/serverMethods.js +30 -0
  284. package/dist/sdk/worktrees/service.d.ts +73 -0
  285. package/dist/sdk/worktrees/service.js +483 -0
  286. package/dist/sdk/worktrees/setup.d.ts +23 -0
  287. package/dist/sdk/worktrees/setup.js +65 -0
  288. package/dist/sdk/worktrees/types.d.ts +91 -0
  289. package/dist/sdk/worktrees/types.js +1 -0
  290. package/dist/sdk/world/cli.d.ts +2 -2
  291. package/dist/sdk/world/cli.js +6 -6
  292. package/dist/sdk/world/world.d.ts +3 -1
  293. package/dist/sdk/world/world.js +8 -9
  294. package/dist/terminal-opentui.js +16456 -5966
  295. package/dist/terminal-pi.js +1579 -573
  296. package/docs/README.md +22 -2
  297. package/docs/architecture/00-overview.md +28 -16
  298. package/docs/architecture/02-sessions-and-runs.md +184 -25
  299. package/docs/architecture/03-variants.md +10 -2
  300. package/docs/architecture/04-prompt.md +65 -7
  301. package/docs/architecture/06-plugins-and-capabilities.md +57 -4
  302. package/docs/architecture/07-tools-and-gate.md +112 -17
  303. package/docs/architecture/08-memory-and-history.md +4 -2
  304. package/docs/architecture/09-accounts-and-connectors.md +39 -1
  305. package/docs/architecture/10-server-protocol.md +168 -4
  306. package/docs/architecture/11-terminal.md +251 -8
  307. package/docs/architecture/12-storage.md +45 -3
  308. package/docs/architecture/13-world-tools.md +49 -6
  309. package/docs/architecture/14-surfaces-and-parity.md +136 -0
  310. package/docs/architecture/README.md +17 -4
  311. package/docs/architecture/proposals/PROP-0006-run-checklist.md +4 -2
  312. package/docs/architecture/proposals/PROP-0013-resource-browser.md +58 -0
  313. package/docs/architecture/proposals/PROP-0014-fullscreen-browser-tabs.md +58 -0
  314. package/docs/architecture/proposals/PROP-0015-one-capability-surface.md +88 -0
  315. package/docs/architecture/proposals/PROP-0016-managed-worktrees.md +156 -0
  316. package/docs/architecture/proposals/PROP-0017-page-annotations.md +131 -0
  317. package/docs/architecture/proposals/PROP-0018-annotation-queue-and-app-targets.md +179 -0
  318. package/docs/architecture/proposals/PROP-0019-contextual-side-questions.md +122 -0
  319. package/docs/architecture/proposals/PROP-0020-builtin-feature-plugins.md +105 -0
  320. package/docs/architecture/proposals/PROP-0021-command-namespaces-and-duplicates.md +99 -0
  321. package/docs/architecture/proposals/PROP-0022-plan-only-questions.md +102 -0
  322. package/docs/architecture/proposals/PROP-0023-xagent-cli-name.md +61 -0
  323. package/docs/architecture/proposals/PROP-0024-question-sketch-previews.md +130 -0
  324. package/docs/architecture/proposals/PROP-0025-contextual-question-wireframes.md +49 -0
  325. package/docs/architecture/proposals/PROP-0026-connected-sketch-display.md +94 -0
  326. package/docs/architecture/proposals/PROP-0027-xingular-agent-product-identity.md +60 -0
  327. package/docs/architecture/proposals/PROP-0028-normalize-question-wireframes.md +55 -0
  328. package/docs/architecture/proposals/PROP-0029-agent-profiles.md +124 -0
  329. package/docs/architecture/proposals/PROP-0030-subagent-title.md +86 -0
  330. package/docs/architecture/proposals/PROP-0031-plugin-command-owner-namespaces.md +54 -0
  331. package/docs/architecture/proposals/PROP-0032-planning-quality.md +196 -0
  332. package/docs/architecture/proposals/PROP-0033-compaction-plan-checkpoints.md +75 -0
  333. package/docs/architecture/proposals/PROP-0034-conversation-fast-mode.md +120 -0
  334. package/docs/architecture/proposals/PROP-0035-retain-subagent-status.md +47 -0
  335. package/docs/architecture/proposals/PROP-0036-first-class-harness-commands.md +59 -0
  336. package/docs/architecture/proposals/PROP-0037-workspace-write-boundary.md +63 -0
  337. package/docs/architecture/proposals/PROP-0038-annotate-open-shadow-roots.md +73 -0
  338. package/docs/architecture/proposals/PROP-0039-workspace-boundary-hardening.md +139 -0
  339. package/docs/architecture/proposals/PROP-0040-one-launch-path.md +87 -0
  340. package/docs/architecture/proposals/PROP-0041-bounded-work-slices.md +247 -0
  341. package/docs/architecture/proposals/PROP-0042-usage-and-provider-limits.md +127 -0
  342. package/docs/architecture/proposals/PROP-0043-read-only-plan-bash.md +74 -0
  343. package/docs/architecture/proposals/README.md +39 -0
  344. package/docs/decisions/ADR-0001-owned-terminal.md +1 -1
  345. package/docs/decisions/ADR-0009-xharness-command.md +6 -5
  346. package/docs/decisions/ADR-0014-public-release-baseline.md +3 -2
  347. package/docs/decisions/ADR-0015-resource-browser.md +28 -0
  348. package/docs/decisions/ADR-0016-fullscreen-browser-tabs.md +31 -0
  349. package/docs/decisions/ADR-0017-one-capability-surface.md +34 -0
  350. package/docs/decisions/ADR-0018-builtin-feature-plugins.md +35 -0
  351. package/docs/decisions/ADR-0019-managed-git-worktrees.md +31 -0
  352. package/docs/decisions/ADR-0020-page-annotations.md +37 -0
  353. package/docs/decisions/ADR-0021-required-command-namespaces.md +40 -0
  354. package/docs/decisions/ADR-0022-plan-only-question-tools.md +34 -0
  355. package/docs/decisions/ADR-0023-contextual-side-question-runs.md +35 -0
  356. package/docs/decisions/ADR-0024-xagent-command.md +40 -0
  357. package/docs/decisions/ADR-0025-question-choice-sketches.md +49 -0
  358. package/docs/decisions/ADR-0026-contextual-question-wireframes.md +58 -0
  359. package/docs/decisions/ADR-0027-connected-sketch-display.md +60 -0
  360. package/docs/decisions/ADR-0028-xingular-agent-product-identity.md +56 -0
  361. package/docs/decisions/ADR-0029-normalized-question-wireframe-borders.md +33 -0
  362. package/docs/decisions/ADR-0030-agent-profiles.md +43 -0
  363. package/docs/decisions/ADR-0031-plugin-command-owner-namespaces.md +37 -0
  364. package/docs/decisions/ADR-0032-compaction-run-checkpoints.md +33 -0
  365. package/docs/decisions/ADR-0033-plan-mode-research-delegation.md +47 -0
  366. package/docs/decisions/ADR-0034-first-class-harness-terminal-commands.md +25 -0
  367. package/docs/decisions/ADR-0035-one-launch-path.md +40 -0
  368. package/docs/decisions/ADR-0036-workspace-write-operation-boundary.md +54 -0
  369. package/docs/decisions/ADR-0037-usage-ledger-and-provider-limits.md +44 -0
  370. package/docs/decisions/ADR-0038-plan-bash-os-read-only.md +29 -0
  371. package/docs/doctor.md +10 -4
  372. package/docs/experiments/EXP-0003-performance-audit/data/session-runtime-replication.json +420 -0
  373. package/docs/experiments/EXP-0003-performance-audit/data/session-runtime.json +420 -0
  374. package/docs/experiments/EXP-0003-performance-audit/data/terminal-compact.json +376 -0
  375. package/docs/experiments/EXP-0003-performance-audit/data/terminal-history.json +422 -0
  376. package/docs/experiments/EXP-0003-performance-audit/data/terminal-question.json +95 -0
  377. package/docs/experiments/EXP-0003-performance-audit/data/terminal-wide.json +1036 -0
  378. package/docs/experiments/EXP-0003-performance-audit/plan.md +109 -0
  379. package/docs/experiments/EXP-0003-performance-audit/results.md +151 -0
  380. package/docs/features/README.md +26 -0
  381. package/docs/features/interfaces/README.md +1 -1
  382. package/docs/future-work.md +48 -0
  383. package/docs/handoff-2026-10-25-app-parity-and-solo-tabs.md +202 -0
  384. package/docs/parity.md +134 -0
  385. package/docs/releases/1.0.0.md +2 -2
  386. package/docs/releases/1.1.1.md +28 -0
  387. package/docs/releases/1.2.0.md +49 -0
  388. package/docs/releases/4.0.0.md +47 -0
  389. package/docs/releases/README.md +37 -27
  390. package/docs/study/00-index.md +8 -0
  391. package/docs/study/STUDY-0003-long-horizon-runs.md +210 -0
  392. package/docs/study/autonomous-engineering-sources.md +277 -0
  393. package/docs/study/autonomy-sources.md +147 -0
  394. package/docs/study/proactive-autonomy.md +408 -0
  395. package/docs/study/tui-resource-browser.md +78 -0
  396. package/docs/terminal-tui.md +386 -113
  397. package/package.json +6 -5
@@ -0,0 +1,94 @@
1
+ /**
2
+ * The annotate pane (`/annotate:` and `/annotate:annotate`, PROP-0018): the person works in a browser window or an app's own
3
+ * windows, and this page is the panel beside it. With the inspector on, hovering outlines a
4
+ * component and a click opens a comment popover with three choices: keep it as a note, add it to
5
+ * this session's queue, or send it to the agent now. The page lists the queue, what was sent and
6
+ * what the agent says it fixed, and the notes kept on the side.
7
+ */
8
+ import type { Theme } from '@earendil-works/pi-coding-agent';
9
+ import type { MenuCall, MenuUi } from "../../pluginMenu.js";
10
+ import type { TabInfo } from "../chrome.js";
11
+ import { type ListRow } from "../list.js";
12
+ import type { TerminalMouseInput } from "../mouse.js";
13
+ import type { TerminalPage } from "../page.js";
14
+ import type { Note, NoteTarget } from "../../../annotations/store.js";
15
+ export type AnnotateStart = {
16
+ kind: 'web';
17
+ url?: string;
18
+ } | {
19
+ kind: 'cdp';
20
+ endpoint: string;
21
+ name?: string;
22
+ } | {
23
+ kind: 'bridge';
24
+ name?: string;
25
+ };
26
+ export interface AnnotatePageOptions {
27
+ theme(): Theme;
28
+ call: MenuCall;
29
+ ui: MenuUi & {
30
+ input(title: string, placeholder?: string): Promise<string | undefined>;
31
+ };
32
+ changed(): void;
33
+ start: AnnotateStart;
34
+ /** How often the inspector is asked for the person's next comment, in milliseconds. */
35
+ pollMs?: number;
36
+ }
37
+ type Row = {
38
+ kind: 'note';
39
+ note: Note;
40
+ };
41
+ export declare const ANNOTATE_ACTIONS: {
42
+ readonly reveal: "Show it in the window";
43
+ readonly send: "Send to the agent now";
44
+ readonly confirm: "Confirm sending it (it came from the page)";
45
+ readonly queue: "Ask the agent to fix it (add to queue)";
46
+ readonly dequeue: "Take it out of the queue";
47
+ readonly edit: "Edit the comment";
48
+ readonly resolve: "Resolve";
49
+ readonly delete: "Delete";
50
+ };
51
+ export declare function describeTarget(target: NoteTarget): string;
52
+ /** Which section of the panel a note belongs in, for this session; null when it is not shown. */
53
+ export declare function section(note: Note, sessionId: string | null): 'Queue' | 'Sent and fixed' | 'Saved' | null;
54
+ export declare class AnnotatePage implements TerminalPage {
55
+ private readonly options;
56
+ presentation: "fullscreen";
57
+ private notes;
58
+ private sessionId;
59
+ private target;
60
+ private bridgeSnippet;
61
+ private error;
62
+ private busy;
63
+ private disposed;
64
+ private polling;
65
+ private timer;
66
+ private refreshes;
67
+ private readonly list;
68
+ constructor(options: AnnotatePageOptions);
69
+ get focused(): boolean;
70
+ set focused(value: boolean);
71
+ tabs(): readonly TabInfo[];
72
+ activeTab(): string;
73
+ hint(): string;
74
+ activate(): void;
75
+ dispose(): void;
76
+ private start;
77
+ private refreshTarget;
78
+ reload(): Promise<void>;
79
+ rows(): ListRow<Row>[];
80
+ private queued;
81
+ /** Polls the inspector for the person's next comment, and the notes every few seconds. */
82
+ private schedule;
83
+ private tick;
84
+ private toggleInspect;
85
+ private attempt;
86
+ sendQueue(): Promise<void>;
87
+ private chooseWindow;
88
+ private noteMenu;
89
+ handleMouse(event: TerminalMouseInput): import("@earendil-works/pi-tui").TuiMouseEventResult | undefined;
90
+ handleInput(data: string): boolean;
91
+ private header;
92
+ render(width: number, rows: number): string[];
93
+ }
94
+ export {};
@@ -0,0 +1,341 @@
1
+ import { truncateToWidth } from '@earendil-works/pi-tui';
2
+ import { FilterList } from "../list.js";
3
+ const TABS = [{ id: 'annotate', title: 'Annotate' }];
4
+ export const ANNOTATE_ACTIONS = {
5
+ reveal: 'Show it in the window',
6
+ send: 'Send to the agent now',
7
+ confirm: 'Confirm sending it (it came from the page)',
8
+ queue: 'Ask the agent to fix it (add to queue)',
9
+ dequeue: 'Take it out of the queue',
10
+ edit: 'Edit the comment',
11
+ resolve: 'Resolve',
12
+ delete: 'Delete'
13
+ };
14
+ const clip = (text, size) => (text.length > size ? `${text.slice(0, size - 1)}…` : text);
15
+ export function describeTarget(target) {
16
+ if (target.kind === 'text')
17
+ return `“${clip(target.exact.replace(/\s+/g, ' '), 50)}”`;
18
+ if (target.kind === 'element')
19
+ return `<${target.tag}> ${clip(target.name || target.text || target.selector, 40)}`;
20
+ return 'whole page';
21
+ }
22
+ /** Which section of the panel a note belongs in, for this session; null when it is not shown. */
23
+ export function section(note, sessionId) {
24
+ if (note.status === 'resolved')
25
+ return null;
26
+ const delivery = note.delivery;
27
+ if (delivery && delivery.sessionId === sessionId)
28
+ return delivery.state === 'queued' ? 'Queue' : 'Sent and fixed';
29
+ if (!delivery)
30
+ return 'Saved';
31
+ return null;
32
+ }
33
+ export class AnnotatePage {
34
+ options;
35
+ presentation = 'fullscreen';
36
+ notes;
37
+ sessionId = null;
38
+ target = null;
39
+ bridgeSnippet = null;
40
+ error;
41
+ busy = false;
42
+ disposed = false;
43
+ polling = false;
44
+ timer = null;
45
+ refreshes = 0;
46
+ list;
47
+ constructor(options) {
48
+ this.options = options;
49
+ this.list = new FilterList({
50
+ theme: options.theme, search: 'never', noun: ['note', 'notes'], empty: 'Nothing here yet. Press i and click a component in the window.',
51
+ onActivate: row => { if (row.data)
52
+ void this.noteMenu(row.data.note); }
53
+ });
54
+ }
55
+ get focused() { return this.list.focused; }
56
+ set focused(value) { this.list.focused = value; }
57
+ tabs() { return TABS; }
58
+ activeTab() { return 'annotate'; }
59
+ hint() {
60
+ return `${this.target?.inspecting ? 'i stop inspecting' : 'i inspect'} · s send queue · x unqueue · t window · Enter note · Esc close`;
61
+ }
62
+ activate() {
63
+ void this.start();
64
+ }
65
+ dispose() {
66
+ this.disposed = true;
67
+ if (this.timer)
68
+ clearTimeout(this.timer);
69
+ this.timer = null;
70
+ void this.options.call('terminal.annotations.stopInspect').catch(() => undefined);
71
+ }
72
+ async start() {
73
+ const { call } = this.options;
74
+ const start = this.options.start;
75
+ await this.attempt(async () => {
76
+ if (start.kind === 'web') {
77
+ const url = start.url ?? await this.options.ui.input('Page or dev server address', 'http://localhost:5173');
78
+ if (!url)
79
+ return;
80
+ await call('terminal.annotations.open', { url });
81
+ }
82
+ else if (start.kind === 'cdp') {
83
+ await call('terminal.annotations.attach', { kind: 'cdp', endpoint: start.endpoint, ...(start.name ? { name: start.name } : {}) });
84
+ }
85
+ else {
86
+ const attached = await call('terminal.annotations.attach', { kind: 'bridge', ...(start.name ? { name: start.name } : {}) });
87
+ this.bridgeSnippet = attached.bridge?.snippet ?? null;
88
+ }
89
+ await this.refreshTarget();
90
+ if (this.target?.windows.length || start.kind !== 'bridge')
91
+ await this.toggleInspect(true);
92
+ return start.kind === 'bridge' && !this.target?.windows.length ? 'Load the bridge script in the app (shown at the top), then reload the app.' : undefined;
93
+ });
94
+ this.schedule();
95
+ }
96
+ async refreshTarget() {
97
+ this.target = await this.options.call('terminal.annotations.target');
98
+ }
99
+ async reload() {
100
+ try {
101
+ const result = await this.options.call('terminal.annotations.list');
102
+ this.notes = result.notes;
103
+ this.sessionId = result.sessionId;
104
+ this.error = undefined;
105
+ }
106
+ catch (error) {
107
+ this.error = error instanceof Error ? error.message : String(error);
108
+ }
109
+ if (this.disposed)
110
+ return;
111
+ this.list.setRows(this.rows());
112
+ this.options.changed();
113
+ }
114
+ rows() {
115
+ const order = ['Queue', 'Sent and fixed', 'Saved'];
116
+ const rows = [];
117
+ for (const group of order) {
118
+ for (const note of (this.notes ?? []).filter(entry => section(entry, this.sessionId) === group)) {
119
+ const delivery = note.delivery;
120
+ const state = !delivery ? describeTarget(note.target)
121
+ : delivery.state === 'queued' ? `${describeTarget(note.target)}${delivery.confirm ? ' · confirm to send' : delivery.autoSend ? ' · sends when idle' : ''}`
122
+ : delivery.state === 'fixed' ? `fixed: ${clip(delivery.summary ?? '', 50)}` : `sent · ${describeTarget(note.target)}`;
123
+ rows.push({
124
+ id: `note:${note.id}`, label: clip(note.body.replace(/\s+/g, ' '), 60), group: group === 'Queue' ? `Queue (${this.queued().length})` : group,
125
+ detail: state,
126
+ tone: delivery?.state === 'fixed' ? 'success' : delivery?.confirm ? 'warning' : delivery?.state === 'queued' ? 'accent' : 'muted',
127
+ data: { kind: 'note', note }
128
+ });
129
+ }
130
+ }
131
+ return rows;
132
+ }
133
+ queued() {
134
+ return (this.notes ?? []).filter(note => section(note, this.sessionId) === 'Queue');
135
+ }
136
+ /** Polls the inspector for the person's next comment, and the notes every few seconds. */
137
+ schedule() {
138
+ if (this.disposed)
139
+ return;
140
+ this.timer = setTimeout(() => void this.tick(), this.options.pollMs ?? 400);
141
+ this.timer.unref?.();
142
+ }
143
+ async tick() {
144
+ if (this.disposed)
145
+ return;
146
+ if (!this.polling) {
147
+ this.polling = true;
148
+ try {
149
+ let changed = ++this.refreshes % 5 === 0;
150
+ if (this.target?.inspecting) {
151
+ const step = await this.options.call('terminal.annotations.next');
152
+ if (step.message)
153
+ this.options.ui.notify(step.message, 'info');
154
+ if (step.note)
155
+ changed = true;
156
+ if (!step.active) {
157
+ await this.refreshTarget();
158
+ this.options.changed();
159
+ }
160
+ }
161
+ else if (this.target?.kind === 'bridge' && !this.target.windows.length) {
162
+ // Waiting for the app to load the bridge script.
163
+ await this.refreshTarget();
164
+ if (this.target.windows.length) {
165
+ await this.toggleInspect(true);
166
+ changed = true;
167
+ }
168
+ }
169
+ if (changed)
170
+ await this.reload();
171
+ }
172
+ catch (error) {
173
+ this.error = error instanceof Error ? error.message : String(error);
174
+ this.options.changed();
175
+ }
176
+ finally {
177
+ this.polling = false;
178
+ }
179
+ }
180
+ this.schedule();
181
+ }
182
+ async toggleInspect(on) {
183
+ await this.options.call(on ? 'terminal.annotations.inspect' : 'terminal.annotations.stopInspect');
184
+ await this.refreshTarget();
185
+ this.options.changed();
186
+ }
187
+ async attempt(work) {
188
+ if (this.busy)
189
+ return;
190
+ this.busy = true;
191
+ try {
192
+ const message = await work();
193
+ if (message)
194
+ this.options.ui.notify(message, 'info');
195
+ this.error = undefined;
196
+ }
197
+ catch (error) {
198
+ this.options.ui.notify(error instanceof Error ? error.message : String(error), 'error');
199
+ }
200
+ finally {
201
+ this.busy = false;
202
+ }
203
+ await this.reload();
204
+ }
205
+ sendQueue() {
206
+ return this.attempt(async () => {
207
+ const waiting = this.queued();
208
+ if (!waiting.length)
209
+ return 'The queue is empty.';
210
+ const unconfirmed = waiting.filter(note => note.delivery?.confirm);
211
+ if (unconfirmed.length) {
212
+ if (!await this.options.ui.confirm(`Send ${waiting.length} note(s) to the agent?`, `${unconfirmed.length} came from the page's own scripts. Check that you wrote them.`))
213
+ return;
214
+ for (const note of unconfirmed)
215
+ await this.options.call('terminal.annotations.confirm', { id: note.id, expectedVersion: note.version });
216
+ }
217
+ const result = await this.options.call('terminal.annotations.send');
218
+ return result.state === 'sent' ? `Sent ${result.ids.length} note(s) to the agent.` : result.state === 'busy' ? 'The agent is working; the queue goes out when it finishes.' : 'Nothing was sent.';
219
+ });
220
+ }
221
+ chooseWindow() {
222
+ return this.attempt(async () => {
223
+ await this.refreshTarget();
224
+ const windows = this.target?.windows ?? [];
225
+ if (!windows.length)
226
+ return 'No window is open.';
227
+ const labels = windows.map(window => `${window.current ? '● ' : ''}${clip(window.title || window.url, 60)} — ${clip(window.url, 50)}`);
228
+ const choice = await this.options.ui.select('Inspect which window?', labels);
229
+ const index = choice ? labels.indexOf(choice) : -1;
230
+ if (index < 0)
231
+ return;
232
+ await this.options.call('terminal.annotations.selectWindow', { window: windows[index].id });
233
+ await this.refreshTarget();
234
+ });
235
+ }
236
+ async noteMenu(note) {
237
+ const { call, ui } = this.options;
238
+ const where = section(note, this.sessionId);
239
+ const choices = [
240
+ ANNOTATE_ACTIONS.reveal,
241
+ ...(where === 'Queue' ? [note.delivery?.confirm ? ANNOTATE_ACTIONS.confirm : ANNOTATE_ACTIONS.send, ANNOTATE_ACTIONS.dequeue] : [ANNOTATE_ACTIONS.queue]),
242
+ ANNOTATE_ACTIONS.edit,
243
+ ANNOTATE_ACTIONS.resolve,
244
+ ANNOTATE_ACTIONS.delete
245
+ ];
246
+ const choice = await ui.select(`${clip(note.source.app?.name ?? note.source.title ?? note.source.url, 50)} · ${describeTarget(note.target)}`, choices);
247
+ const id = note.id;
248
+ if (choice === ANNOTATE_ACTIONS.reveal)
249
+ return this.attempt(async () => {
250
+ const result = await call('terminal.annotations.reveal', { id });
251
+ return result.state === 'matched' ? 'Marked in the window.' : `The target is ${result.state}${result.reason ? `: ${result.reason}` : ''}.`;
252
+ });
253
+ if (choice === ANNOTATE_ACTIONS.queue)
254
+ return this.attempt(async () => {
255
+ await call('terminal.annotations.queue', { id, expectedVersion: note.version });
256
+ return 'Added to the queue.';
257
+ });
258
+ if (choice === ANNOTATE_ACTIONS.dequeue)
259
+ return this.attempt(async () => {
260
+ await call('terminal.annotations.dequeue', { id, expectedVersion: note.version });
261
+ });
262
+ if (choice === ANNOTATE_ACTIONS.confirm || choice === ANNOTATE_ACTIONS.send)
263
+ return this.attempt(async () => {
264
+ if (choice === ANNOTATE_ACTIONS.confirm)
265
+ await call('terminal.annotations.confirm', { id, expectedVersion: note.version });
266
+ const result = await call('terminal.annotations.send', { ids: [id] });
267
+ return result.state === 'sent' ? 'Sent to the agent.' : result.state === 'busy' ? 'It goes to the agent when it finishes.' : undefined;
268
+ });
269
+ if (choice === ANNOTATE_ACTIONS.edit)
270
+ return this.attempt(async () => {
271
+ const body = await ui.input('Comment', note.body);
272
+ if (!body?.trim() || body === note.body)
273
+ return;
274
+ await call('terminal.annotations.update', { id, expectedVersion: note.version, patch: { body } });
275
+ });
276
+ if (choice === ANNOTATE_ACTIONS.resolve)
277
+ return this.attempt(async () => {
278
+ await call('terminal.annotations.update', { id, expectedVersion: note.version, patch: { status: 'resolved' } });
279
+ return 'Resolved.';
280
+ });
281
+ if (choice === ANNOTATE_ACTIONS.delete)
282
+ return this.attempt(async () => {
283
+ if (!await ui.confirm('Delete this note?', 'It cannot be restored.'))
284
+ return;
285
+ await call('terminal.annotations.delete', { id, expectedVersion: note.version });
286
+ });
287
+ }
288
+ handleMouse(event) {
289
+ return this.list.handleMouse(event);
290
+ }
291
+ handleInput(data) {
292
+ if (data === 'i') {
293
+ void this.attempt(() => this.toggleInspect(!this.target?.inspecting));
294
+ return true;
295
+ }
296
+ if (data === 's') {
297
+ void this.sendQueue();
298
+ return true;
299
+ }
300
+ if (data === 't') {
301
+ void this.chooseWindow();
302
+ return true;
303
+ }
304
+ if (data === 'x') {
305
+ const row = this.list.selected?.data;
306
+ if (row && section(row.note, this.sessionId) === 'Queue')
307
+ void this.attempt(async () => { await this.options.call('terminal.annotations.dequeue', { id: row.note.id, expectedVersion: row.note.version }); });
308
+ return true;
309
+ }
310
+ return this.list.handleInput(data);
311
+ }
312
+ header(width) {
313
+ const theme = this.options.theme();
314
+ const target = this.target;
315
+ const current = target?.windows.find(window => window.current);
316
+ const kind = !target ? 'Starting…' : target.kind === 'web' ? 'Browser window' : target.kind === 'cdp' ? `App · ${target.app?.name ?? ''} (DevTools)` : `App · ${target.app?.name ?? ''} (page bridge)`;
317
+ const lines = [
318
+ `${theme.bold(kind)}${current ? theme.fg('muted', ` · ${clip(current.title || current.url, 40)} · ${clip(current.url, 60)}`) : ''}`,
319
+ target?.inspecting
320
+ ? theme.fg('success', '● Inspecting: hover a component in the window and click it to comment.')
321
+ : theme.fg('dim', '○ Inspector off. Press i to turn it on.')
322
+ ];
323
+ if (this.bridgeSnippet && target?.kind === 'bridge') {
324
+ lines.push(theme.fg(target.windows.length ? 'dim' : 'warning', `Load in the app while developing: ${this.bridgeSnippet}`));
325
+ }
326
+ if (this.error)
327
+ lines.push(theme.fg('error', this.error));
328
+ lines.push('');
329
+ return lines.map(line => truncateToWidth(line, width, ''));
330
+ }
331
+ render(width, rows) {
332
+ const theme = this.options.theme();
333
+ if (width < 1 || rows < 1)
334
+ return [];
335
+ const header = this.header(width);
336
+ if (!this.notes)
337
+ return [...header, theme.fg('dim', 'Reading page notes…')].slice(0, rows);
338
+ const body = this.list.render(width, Math.max(1, rows - header.length));
339
+ return [...header, ...body].slice(0, rows).map(line => truncateToWidth(line, width, ''));
340
+ }
341
+ }
@@ -0,0 +1,87 @@
1
+ import type { Theme } from '@earendil-works/pi-coding-agent';
2
+ import { type BrowserRuntime, type BrowserSection, type BrowserSource } from "../../browser.js";
3
+ import { type MenuCall, type MenuUi } from "../../pluginMenu.js";
4
+ import type { TerminalMouseInput } from "../mouse.js";
5
+ import type { TerminalPage } from "../page.js";
6
+ import type { TerminalPermissionState } from "../runtime.js";
7
+ export interface BrowserPageOptions {
8
+ theme(): Theme;
9
+ call: MenuCall;
10
+ ui: MenuUi & {
11
+ input(title: string, placeholder?: string): Promise<string | undefined>;
12
+ secretInput(title: string, placeholder?: string): Promise<string | undefined>;
13
+ };
14
+ runtime(): BrowserRuntime;
15
+ permissions(): Promise<TerminalPermissionState>;
16
+ setGlobalTool(tool: string, allowed: boolean): Promise<void>;
17
+ useSkill(name: string): void;
18
+ changed(): void;
19
+ section?: BrowserSection;
20
+ source?: BrowserSource;
21
+ }
22
+ export declare class BrowserPage implements TerminalPage {
23
+ private readonly options;
24
+ readonly presentation = "fullscreen";
25
+ readonly ownsNavigation = true;
26
+ private section;
27
+ private source;
28
+ private channel;
29
+ private local;
30
+ private focus;
31
+ private snapshot?;
32
+ private permissions?;
33
+ private error?;
34
+ private busy;
35
+ private disposed;
36
+ private generation;
37
+ private detail?;
38
+ private content?;
39
+ private contentOffset;
40
+ private contentTotal;
41
+ private contentRows;
42
+ private saved;
43
+ private readonly list;
44
+ private readonly actionList;
45
+ private toolbarHits;
46
+ private filterStart;
47
+ private filterRow;
48
+ private inspectorActionRow;
49
+ private actionRow;
50
+ private pointer;
51
+ constructor(options: BrowserPageOptions);
52
+ get focused(): boolean;
53
+ set focused(value: boolean);
54
+ tabs(): {
55
+ id: "skills" | "tools" | "connections" | "plugins" | "variant" | "library" | "overview" | "foundation";
56
+ title: string;
57
+ }[];
58
+ activeTab(): string;
59
+ selectTab(id: string): void;
60
+ hint(): string;
61
+ activate(): void;
62
+ dispose(): void;
63
+ private load;
64
+ private perform;
65
+ private resources;
66
+ private discoverable;
67
+ private rows;
68
+ private fill;
69
+ private navigate;
70
+ private open;
71
+ private actionGroup;
72
+ private groupedActions;
73
+ private actions;
74
+ private read;
75
+ private showContent;
76
+ private managePlugin;
77
+ private configurePlugin;
78
+ private configureConnection;
79
+ private toolbar;
80
+ private toolbarActions;
81
+ private toolbarLabel;
82
+ handleInput(data: string): boolean;
83
+ handleMouse(event: TerminalMouseInput): import("@earendil-works/pi-tui").TuiMouseEventResult | undefined;
84
+ private description;
85
+ private renderInspector;
86
+ render(width: number, rows: number): string[];
87
+ }