@xingular/harness 0.1.7 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (819) hide show
  1. package/CHANGELOG.md +125 -1
  2. package/LICENSE +202 -0
  3. package/NOTICE.md +22 -0
  4. package/README.md +239 -86
  5. package/THIRD_PARTY_LICENSES.md +942 -0
  6. package/dist/cli.js +17853 -13114
  7. package/dist/sdk/accounts/accounts.d.ts +165 -0
  8. package/dist/sdk/accounts/accounts.js +730 -0
  9. package/dist/sdk/accounts/choices.d.ts +23 -0
  10. package/dist/sdk/accounts/choices.js +62 -0
  11. package/dist/sdk/accounts/env.d.ts +78 -0
  12. package/dist/sdk/accounts/env.js +294 -0
  13. package/dist/sdk/accounts/secrets.d.ts +16 -0
  14. package/dist/sdk/accounts/secrets.js +40 -0
  15. package/dist/sdk/accounts/store.d.ts +114 -0
  16. package/dist/sdk/accounts/store.js +255 -0
  17. package/dist/sdk/agents/builtin.d.ts +2 -0
  18. package/dist/sdk/agents/builtin.js +34 -0
  19. package/dist/sdk/agents/narrow.d.ts +13 -0
  20. package/dist/sdk/agents/narrow.js +29 -0
  21. package/dist/sdk/agents/profiles.d.ts +80 -0
  22. package/dist/sdk/agents/profiles.js +221 -0
  23. package/dist/sdk/annotations/bridge.d.ts +42 -0
  24. package/dist/sdk/annotations/bridge.js +264 -0
  25. package/dist/sdk/annotations/capture.d.ts +116 -0
  26. package/dist/sdk/annotations/capture.js +308 -0
  27. package/dist/sdk/annotations/delivery.d.ts +72 -0
  28. package/dist/sdk/annotations/delivery.js +130 -0
  29. package/dist/sdk/annotations/inspect.d.ts +10 -0
  30. package/dist/sdk/annotations/inspect.js +33 -0
  31. package/dist/sdk/annotations/isolated.d.ts +6 -0
  32. package/dist/sdk/annotations/isolated.js +51 -0
  33. package/dist/sdk/annotations/pageScript.d.ts +28 -0
  34. package/dist/sdk/annotations/pageScript.js +570 -0
  35. package/dist/sdk/annotations/part.d.ts +10 -0
  36. package/dist/sdk/annotations/part.js +144 -0
  37. package/dist/sdk/annotations/queue.d.ts +4 -0
  38. package/dist/sdk/annotations/queue.js +40 -0
  39. package/dist/sdk/annotations/serverMethods.d.ts +3 -0
  40. package/dist/sdk/annotations/serverMethods.js +62 -0
  41. package/dist/sdk/annotations/store.d.ts +160 -0
  42. package/dist/sdk/annotations/store.js +386 -0
  43. package/dist/sdk/browser/config.d.ts +16 -0
  44. package/dist/sdk/browser/config.js +22 -0
  45. package/dist/sdk/browser/diagnostics.d.ts +4 -0
  46. package/dist/sdk/browser/diagnostics.js +38 -0
  47. package/dist/sdk/browser/index.d.ts +28 -0
  48. package/dist/sdk/browser/index.js +72 -0
  49. package/dist/sdk/browser/network.d.ts +10 -0
  50. package/dist/sdk/browser/network.js +59 -0
  51. package/dist/sdk/browser/serverMethods.d.ts +3 -0
  52. package/dist/sdk/browser/serverMethods.js +7 -0
  53. package/dist/sdk/browser/session.d.ts +85 -0
  54. package/dist/sdk/browser/session.js +228 -0
  55. package/dist/sdk/browser/tools.d.ts +8 -0
  56. package/dist/sdk/browser/tools.js +329 -0
  57. package/dist/sdk/capabilities/api.d.ts +22 -0
  58. package/dist/sdk/capabilities/api.js +54 -0
  59. package/dist/sdk/capabilities/runSnapshot.d.ts +18 -0
  60. package/dist/sdk/capabilities/runSnapshot.js +47 -0
  61. package/dist/sdk/capabilities/types.d.ts +29 -0
  62. package/dist/sdk/capabilities/types.js +1 -0
  63. package/dist/sdk/cli.d.ts +2 -0
  64. package/dist/sdk/cli.js +150 -0
  65. package/dist/sdk/core/bus.d.ts +23 -0
  66. package/dist/sdk/core/bus.js +76 -0
  67. package/dist/sdk/core/caller.d.ts +22 -0
  68. package/dist/sdk/core/caller.js +16 -0
  69. package/dist/sdk/core/changes.d.ts +15 -0
  70. package/dist/sdk/core/changes.js +15 -0
  71. package/dist/sdk/core/effort.d.ts +2 -0
  72. package/dist/sdk/core/effort.js +1 -0
  73. package/dist/sdk/core/env.d.ts +18 -0
  74. package/dist/sdk/core/env.js +8 -0
  75. package/dist/sdk/core/errors.d.ts +15 -0
  76. package/dist/sdk/core/errors.js +24 -0
  77. package/dist/sdk/core/frontmatter.d.ts +12 -0
  78. package/dist/sdk/core/frontmatter.js +50 -0
  79. package/dist/sdk/core/fs.d.ts +18 -0
  80. package/dist/sdk/core/fs.js +106 -0
  81. package/dist/sdk/core/index.d.ts +24 -0
  82. package/dist/sdk/core/index.js +187 -0
  83. package/dist/sdk/core/path.d.ts +7 -0
  84. package/dist/sdk/core/path.js +79 -0
  85. package/dist/sdk/core/projects.d.ts +18 -0
  86. package/dist/sdk/core/projects.js +67 -0
  87. package/dist/sdk/core/secrets.d.ts +2 -0
  88. package/dist/sdk/core/secrets.js +5 -0
  89. package/dist/sdk/core/text.d.ts +7 -0
  90. package/dist/sdk/core/text.js +40 -0
  91. package/dist/sdk/doctor/checks.d.ts +5 -0
  92. package/dist/sdk/doctor/checks.js +208 -0
  93. package/dist/sdk/doctor/probe.d.ts +4 -0
  94. package/dist/sdk/doctor/probe.js +92 -0
  95. package/dist/sdk/doctor/serverMethods.d.ts +3 -0
  96. package/dist/sdk/doctor/serverMethods.js +8 -0
  97. package/dist/sdk/doctor/service.d.ts +23 -0
  98. package/dist/sdk/doctor/service.js +144 -0
  99. package/dist/sdk/doctor/types.d.ts +141 -0
  100. package/dist/sdk/doctor/types.js +29 -0
  101. package/dist/sdk/harness.d.ts +148 -0
  102. package/dist/sdk/harness.js +338 -0
  103. package/dist/sdk/history/lessonPrompt.d.ts +2 -0
  104. package/dist/sdk/history/lessonPrompt.js +15 -0
  105. package/dist/sdk/history/lessons.d.ts +52 -0
  106. package/dist/sdk/history/lessons.js +173 -0
  107. package/dist/sdk/history/recall.d.ts +68 -0
  108. package/dist/sdk/history/recall.js +199 -0
  109. package/dist/sdk/history/serverMethods.d.ts +3 -0
  110. package/dist/sdk/history/serverMethods.js +8 -0
  111. package/dist/sdk/history/trajectory.d.ts +7 -0
  112. package/dist/sdk/history/trajectory.js +216 -0
  113. package/dist/sdk/hub/catalog.json +123 -0
  114. package/dist/sdk/hub/cli.d.ts +7 -0
  115. package/dist/sdk/hub/cli.js +81 -0
  116. package/dist/sdk/hub/hub.d.ts +74 -0
  117. package/dist/sdk/hub/hub.js +474 -0
  118. package/dist/sdk/hub/schema.d.ts +280 -0
  119. package/dist/sdk/hub/schema.js +78 -0
  120. package/dist/sdk/hub/serverMethods.d.ts +3 -0
  121. package/dist/sdk/hub/serverMethods.js +11 -0
  122. package/dist/sdk/index.d.ts +73 -0
  123. package/dist/sdk/index.js +55 -0
  124. package/dist/sdk/mcp/connections.d.ts +83 -0
  125. package/dist/sdk/mcp/connections.js +676 -0
  126. package/dist/sdk/mcp/manager.d.ts +26 -0
  127. package/dist/sdk/mcp/manager.js +124 -0
  128. package/dist/sdk/mcp/oauth.d.ts +35 -0
  129. package/dist/sdk/mcp/oauth.js +171 -0
  130. package/dist/sdk/mcp/scopeMigration.d.ts +19 -0
  131. package/dist/sdk/mcp/scopeMigration.js +198 -0
  132. package/dist/sdk/mcp/serverMethods.d.ts +3 -0
  133. package/dist/sdk/mcp/serverMethods.js +22 -0
  134. package/dist/sdk/mcp/service.d.ts +160 -0
  135. package/dist/sdk/mcp/service.js +510 -0
  136. package/dist/sdk/mcp/types.d.ts +131 -0
  137. package/dist/sdk/mcp/types.js +49 -0
  138. package/dist/sdk/pi/runtime.d.ts +13 -0
  139. package/dist/sdk/pi/runtime.js +31 -0
  140. package/dist/sdk/plugins/api.d.ts +66 -0
  141. package/dist/sdk/plugins/api.js +155 -0
  142. package/dist/sdk/plugins/attachments.d.ts +46 -0
  143. package/dist/sdk/plugins/attachments.js +111 -0
  144. package/dist/sdk/plugins/builtin.d.ts +7 -0
  145. package/dist/sdk/plugins/builtin.js +163 -0
  146. package/dist/sdk/plugins/builtinRegistry.d.ts +53 -0
  147. package/dist/sdk/plugins/builtinRegistry.js +49 -0
  148. package/dist/sdk/plugins/catalogue.d.ts +29 -0
  149. package/dist/sdk/plugins/catalogue.js +196 -0
  150. package/dist/sdk/plugins/cli.d.ts +13 -0
  151. package/dist/sdk/plugins/cli.js +188 -0
  152. package/dist/sdk/plugins/discover.d.ts +42 -0
  153. package/dist/sdk/plugins/discover.js +115 -0
  154. package/dist/sdk/plugins/firstParty.d.ts +50 -0
  155. package/dist/sdk/plugins/firstParty.js +113 -0
  156. package/dist/sdk/plugins/hooks.d.ts +94 -0
  157. package/dist/sdk/plugins/hooks.js +162 -0
  158. package/dist/sdk/plugins/identity.d.ts +19 -0
  159. package/dist/sdk/plugins/identity.js +48 -0
  160. package/dist/sdk/plugins/install.d.ts +20 -0
  161. package/dist/sdk/plugins/install.js +110 -0
  162. package/dist/sdk/plugins/inventory.d.ts +22 -0
  163. package/dist/sdk/plugins/inventory.js +110 -0
  164. package/dist/sdk/plugins/manifest.d.ts +13 -0
  165. package/dist/sdk/plugins/manifest.js +56 -0
  166. package/dist/sdk/plugins/plugins.d.ts +104 -0
  167. package/dist/sdk/plugins/plugins.js +164 -0
  168. package/dist/sdk/plugins/runtime.d.ts +9 -0
  169. package/dist/sdk/plugins/runtime.js +95 -0
  170. package/dist/sdk/plugins/trust.d.ts +44 -0
  171. package/dist/sdk/plugins/trust.js +120 -0
  172. package/dist/sdk/plugins/types.d.ts +159 -0
  173. package/dist/sdk/plugins/types.js +7 -0
  174. package/dist/sdk/prompt/compile.d.ts +177 -0
  175. package/dist/sdk/prompt/compile.js +413 -0
  176. package/dist/sdk/refine/cli.d.ts +4 -0
  177. package/dist/sdk/refine/cli.js +186 -0
  178. package/dist/sdk/refine/demo.d.ts +21 -0
  179. package/dist/sdk/refine/demo.js +114 -0
  180. package/dist/sdk/refine/evidence.d.ts +55 -0
  181. package/dist/sdk/refine/evidence.js +330 -0
  182. package/dist/sdk/refine/host.d.ts +51 -0
  183. package/dist/sdk/refine/host.js +76 -0
  184. package/dist/sdk/refine/ledger.d.ts +48 -0
  185. package/dist/sdk/refine/ledger.js +76 -0
  186. package/dist/sdk/refine/library.d.ts +55 -0
  187. package/dist/sdk/refine/library.js +177 -0
  188. package/dist/sdk/refine/pi.d.ts +72 -0
  189. package/dist/sdk/refine/pi.js +248 -0
  190. package/dist/sdk/refine/prompts.d.ts +45 -0
  191. package/dist/sdk/refine/prompts.js +390 -0
  192. package/dist/sdk/refine/recursion.d.ts +113 -0
  193. package/dist/sdk/refine/recursion.js +258 -0
  194. package/dist/sdk/refine/runner.d.ts +81 -0
  195. package/dist/sdk/refine/runner.js +150 -0
  196. package/dist/sdk/refine/selection.d.ts +57 -0
  197. package/dist/sdk/refine/selection.js +251 -0
  198. package/dist/sdk/refine/serverMethods.d.ts +3 -0
  199. package/dist/sdk/refine/serverMethods.js +20 -0
  200. package/dist/sdk/refine/service.d.ts +84 -0
  201. package/dist/sdk/refine/service.js +165 -0
  202. package/dist/sdk/refine/suite.d.ts +67 -0
  203. package/dist/sdk/refine/suite.js +174 -0
  204. package/dist/sdk/refine/trajectory.d.ts +9 -0
  205. package/dist/sdk/refine/trajectory.js +68 -0
  206. package/dist/sdk/refine/types.d.ts +77 -0
  207. package/dist/sdk/refine/types.js +10 -0
  208. package/dist/sdk/server/methods.d.ts +3 -0
  209. package/dist/sdk/server/methods.js +293 -0
  210. package/dist/sdk/server/params.d.ts +4 -0
  211. package/dist/sdk/server/params.js +11 -0
  212. package/dist/sdk/server/remote.d.ts +19 -0
  213. package/dist/sdk/server/remote.js +84 -0
  214. package/dist/sdk/server/rpc.d.ts +20 -0
  215. package/dist/sdk/server/rpc.js +102 -0
  216. package/dist/sdk/server/serve.d.ts +10 -0
  217. package/dist/sdk/server/serve.js +18 -0
  218. package/dist/sdk/sessions/approvals.d.ts +47 -0
  219. package/dist/sdk/sessions/approvals.js +119 -0
  220. package/dist/sdk/sessions/continuation.d.ts +48 -0
  221. package/dist/sdk/sessions/continuation.js +85 -0
  222. package/dist/sdk/sessions/contracts.d.ts +551 -0
  223. package/dist/sdk/sessions/contracts.js +338 -0
  224. package/dist/sdk/sessions/extensionUi.d.ts +19 -0
  225. package/dist/sdk/sessions/extensionUi.js +64 -0
  226. package/dist/sdk/sessions/history.d.ts +16 -0
  227. package/dist/sdk/sessions/history.js +68 -0
  228. package/dist/sdk/sessions/lineageJoin.d.ts +2 -0
  229. package/dist/sdk/sessions/lineageJoin.js +61 -0
  230. package/dist/sdk/sessions/planMode.d.ts +39 -0
  231. package/dist/sdk/sessions/planMode.js +93 -0
  232. package/dist/sdk/sessions/policy.d.ts +43 -0
  233. package/dist/sdk/sessions/policy.js +1 -0
  234. package/dist/sdk/sessions/pricing.d.ts +34 -0
  235. package/dist/sdk/sessions/pricing.js +40 -0
  236. package/dist/sdk/sessions/reasoningSummaries.d.ts +11 -0
  237. package/dist/sdk/sessions/reasoningSummaries.js +61 -0
  238. package/dist/sdk/sessions/registry.d.ts +103 -0
  239. package/dist/sdk/sessions/registry.js +386 -0
  240. package/dist/sdk/sessions/runIndex.d.ts +21 -0
  241. package/dist/sdk/sessions/runIndex.js +65 -0
  242. package/dist/sdk/sessions/runStore.d.ts +66 -0
  243. package/dist/sdk/sessions/runStore.js +337 -0
  244. package/dist/sdk/sessions/runner.d.ts +213 -0
  245. package/dist/sdk/sessions/runner.js +589 -0
  246. package/dist/sdk/sessions/sessions.d.ts +152 -0
  247. package/dist/sdk/sessions/sessions.js +461 -0
  248. package/dist/sdk/sessions/sideQuestionServerMethods.d.ts +3 -0
  249. package/dist/sdk/sessions/sideQuestionServerMethods.js +19 -0
  250. package/dist/sdk/sessions/sideQuestions.d.ts +66 -0
  251. package/dist/sdk/sessions/sideQuestions.js +290 -0
  252. package/dist/sdk/sessions/subagentServerMethods.d.ts +3 -0
  253. package/dist/sdk/sessions/subagentServerMethods.js +41 -0
  254. package/dist/sdk/sessions/subagentService.d.ts +52 -0
  255. package/dist/sdk/sessions/subagentService.js +265 -0
  256. package/dist/sdk/sessions/subagents.d.ts +58 -0
  257. package/dist/sdk/sessions/subagents.js +87 -0
  258. package/dist/sdk/terminal/accountsMenu.d.ts +46 -0
  259. package/dist/sdk/terminal/accountsMenu.js +392 -0
  260. package/dist/sdk/terminal/browser.d.ts +62 -0
  261. package/dist/sdk/terminal/browser.js +41 -0
  262. package/dist/sdk/terminal/browserControl.d.ts +29 -0
  263. package/dist/sdk/terminal/browserControl.js +186 -0
  264. package/dist/sdk/terminal/cli.d.ts +20 -0
  265. package/dist/sdk/terminal/cli.js +121 -0
  266. package/dist/sdk/terminal/client.d.ts +15 -0
  267. package/dist/sdk/terminal/client.js +126 -0
  268. package/dist/sdk/terminal/commandHelp.d.ts +17 -0
  269. package/dist/sdk/terminal/commandHelp.js +20 -0
  270. package/dist/sdk/terminal/control.d.ts +4 -0
  271. package/dist/sdk/terminal/control.js +25 -0
  272. package/dist/sdk/terminal/controller.d.ts +78 -0
  273. package/dist/sdk/terminal/controller.js +383 -0
  274. package/dist/sdk/terminal/hubMenu.d.ts +10 -0
  275. package/dist/sdk/terminal/hubMenu.js +34 -0
  276. package/dist/sdk/terminal/launch.d.ts +5 -0
  277. package/dist/sdk/terminal/launch.js +27 -0
  278. package/dist/sdk/terminal/logs.d.ts +14 -0
  279. package/dist/sdk/terminal/logs.js +59 -0
  280. package/dist/sdk/terminal/opentui/subagentsWidget.d.ts +28 -0
  281. package/dist/sdk/terminal/opentui/subagentsWidget.js +52 -0
  282. package/dist/sdk/terminal/piExtension.d.ts +6 -0
  283. package/dist/sdk/terminal/piExtension.js +377 -0
  284. package/dist/sdk/terminal/pluginMenu.d.ts +34 -0
  285. package/dist/sdk/terminal/pluginMenu.js +101 -0
  286. package/dist/sdk/terminal/socket.d.ts +73 -0
  287. package/dist/sdk/terminal/socket.js +287 -0
  288. package/dist/sdk/terminal/standalone.d.ts +20 -0
  289. package/dist/sdk/terminal/standalone.js +186 -0
  290. package/dist/sdk/terminal/subagentMonitor.d.ts +38 -0
  291. package/dist/sdk/terminal/subagentMonitor.js +121 -0
  292. package/dist/sdk/terminal/terminals.d.ts +212 -0
  293. package/dist/sdk/terminal/terminals.js +1108 -0
  294. package/dist/sdk/terminal/trajectory.d.ts +10 -0
  295. package/dist/sdk/terminal/trajectory.js +30 -0
  296. package/dist/sdk/terminal/tui/annotateCommand.d.ts +3 -0
  297. package/dist/sdk/terminal/tui/annotateCommand.js +22 -0
  298. package/dist/sdk/terminal/tui/chrome.d.ts +64 -0
  299. package/dist/sdk/terminal/tui/chrome.js +169 -0
  300. package/dist/sdk/terminal/tui/clipboardFiles.d.ts +11 -0
  301. package/dist/sdk/terminal/tui/clipboardFiles.js +74 -0
  302. package/dist/sdk/terminal/tui/commandPages.d.ts +11 -0
  303. package/dist/sdk/terminal/tui/commandPages.js +111 -0
  304. package/dist/sdk/terminal/tui/commands.d.ts +46 -0
  305. package/dist/sdk/terminal/tui/commands.js +399 -0
  306. package/dist/sdk/terminal/tui/dialogGeometry.d.ts +27 -0
  307. package/dist/sdk/terminal/tui/dialogGeometry.js +52 -0
  308. package/dist/sdk/terminal/tui/dialogs.d.ts +80 -0
  309. package/dist/sdk/terminal/tui/dialogs.js +370 -0
  310. package/dist/sdk/terminal/tui/keybindings.d.ts +11 -0
  311. package/dist/sdk/terminal/tui/keybindings.js +49 -0
  312. package/dist/sdk/terminal/tui/list.d.ts +73 -0
  313. package/dist/sdk/terminal/tui/list.js +196 -0
  314. package/dist/sdk/terminal/tui/modeChoices.d.ts +42 -0
  315. package/dist/sdk/terminal/tui/modeChoices.js +70 -0
  316. package/dist/sdk/terminal/tui/modelPicker.d.ts +55 -0
  317. package/dist/sdk/terminal/tui/modelPicker.js +150 -0
  318. package/dist/sdk/terminal/tui/mouse.d.ts +3 -0
  319. package/dist/sdk/terminal/tui/mouse.js +3 -0
  320. package/dist/sdk/terminal/tui/page.d.ts +17 -0
  321. package/dist/sdk/terminal/tui/page.js +1 -0
  322. package/dist/sdk/terminal/tui/pageOverlay.d.ts +27 -0
  323. package/dist/sdk/terminal/tui/pageOverlay.js +156 -0
  324. package/dist/sdk/terminal/tui/pages/accountsPage.d.ts +76 -0
  325. package/dist/sdk/terminal/tui/pages/accountsPage.js +409 -0
  326. package/dist/sdk/terminal/tui/pages/agentsPage.d.ts +74 -0
  327. package/dist/sdk/terminal/tui/pages/agentsPage.js +190 -0
  328. package/dist/sdk/terminal/tui/pages/annotatePage.d.ts +94 -0
  329. package/dist/sdk/terminal/tui/pages/annotatePage.js +341 -0
  330. package/dist/sdk/terminal/tui/pages/browserPage.d.ts +87 -0
  331. package/dist/sdk/terminal/tui/pages/browserPage.js +738 -0
  332. package/dist/sdk/terminal/tui/pages/componentsPage.d.ts +47 -0
  333. package/dist/sdk/terminal/tui/pages/componentsPage.js +119 -0
  334. package/dist/sdk/terminal/tui/pages/doctorPage.d.ts +39 -0
  335. package/dist/sdk/terminal/tui/pages/doctorPage.js +233 -0
  336. package/dist/sdk/terminal/tui/pages/hubPage.d.ts +39 -0
  337. package/dist/sdk/terminal/tui/pages/hubPage.js +128 -0
  338. package/dist/sdk/terminal/tui/pages/logPage.d.ts +38 -0
  339. package/dist/sdk/terminal/tui/pages/logPage.js +189 -0
  340. package/dist/sdk/terminal/tui/pages/notesPage.d.ts +75 -0
  341. package/dist/sdk/terminal/tui/pages/notesPage.js +201 -0
  342. package/dist/sdk/terminal/tui/pages/permissionsPage.d.ts +44 -0
  343. package/dist/sdk/terminal/tui/pages/permissionsPage.js +124 -0
  344. package/dist/sdk/terminal/tui/pages/pluginsPage.d.ts +57 -0
  345. package/dist/sdk/terminal/tui/pages/pluginsPage.js +243 -0
  346. package/dist/sdk/terminal/tui/pages/settingsPage.d.ts +63 -0
  347. package/dist/sdk/terminal/tui/pages/settingsPage.js +103 -0
  348. package/dist/sdk/terminal/tui/pages/subagentsPage.d.ts +23 -0
  349. package/dist/sdk/terminal/tui/pages/subagentsPage.js +70 -0
  350. package/dist/sdk/terminal/tui/pages/trajectoryPage.d.ts +65 -0
  351. package/dist/sdk/terminal/tui/pages/trajectoryPage.js +450 -0
  352. package/dist/sdk/terminal/tui/pages/worktreesPage.d.ts +72 -0
  353. package/dist/sdk/terminal/tui/pages/worktreesPage.js +203 -0
  354. package/dist/sdk/terminal/tui/piAdapter.d.ts +18 -0
  355. package/dist/sdk/terminal/tui/piAdapter.js +48 -0
  356. package/dist/sdk/terminal/tui/planMode.d.ts +2 -0
  357. package/dist/sdk/terminal/tui/planMode.js +2 -0
  358. package/dist/sdk/terminal/tui/pluginCommands.d.ts +14 -0
  359. package/dist/sdk/terminal/tui/pluginCommands.js +27 -0
  360. package/dist/sdk/terminal/tui/questionPicker.d.ts +20 -0
  361. package/dist/sdk/terminal/tui/questionPicker.js +150 -0
  362. package/dist/sdk/terminal/tui/questions.d.ts +21 -0
  363. package/dist/sdk/terminal/tui/questions.js +42 -0
  364. package/dist/sdk/terminal/tui/runtime.d.ts +114 -0
  365. package/dist/sdk/terminal/tui/runtime.js +443 -0
  366. package/dist/sdk/terminal/tui/search.d.ts +22 -0
  367. package/dist/sdk/terminal/tui/search.js +60 -0
  368. package/dist/sdk/terminal/tui/selection.d.ts +16 -0
  369. package/dist/sdk/terminal/tui/selection.js +16 -0
  370. package/dist/sdk/terminal/tui/sessionUi.d.ts +3 -0
  371. package/dist/sdk/terminal/tui/sessionUi.js +30 -0
  372. package/dist/sdk/terminal/tui/settingsModel.d.ts +14 -0
  373. package/dist/sdk/terminal/tui/settingsModel.js +114 -0
  374. package/dist/sdk/terminal/tui/sideQuestion.d.ts +53 -0
  375. package/dist/sdk/terminal/tui/sideQuestion.js +230 -0
  376. package/dist/sdk/terminal/tui/skillInvocation.d.ts +9 -0
  377. package/dist/sdk/terminal/tui/skillInvocation.js +43 -0
  378. package/dist/sdk/terminal/tui/status.d.ts +18 -0
  379. package/dist/sdk/terminal/tui/status.js +67 -0
  380. package/dist/sdk/terminal/tui/theme.d.ts +45 -0
  381. package/dist/sdk/terminal/tui/theme.js +176 -0
  382. package/dist/sdk/terminal/tui/treeModel.d.ts +79 -0
  383. package/dist/sdk/terminal/tui/treeModel.js +483 -0
  384. package/dist/sdk/terminal/tui/treePicker.d.ts +49 -0
  385. package/dist/sdk/terminal/tui/treePicker.js +251 -0
  386. package/dist/sdk/terminal/tui/ui.d.ts +49 -0
  387. package/dist/sdk/terminal/tui/ui.js +149 -0
  388. package/dist/sdk/terminal/tui/workingStatus.d.ts +9 -0
  389. package/dist/sdk/terminal/tui/workingStatus.js +229 -0
  390. package/dist/sdk/tools/askUser.d.ts +6 -0
  391. package/dist/sdk/tools/askUser.js +92 -0
  392. package/dist/sdk/tools/checklist.d.ts +9 -0
  393. package/dist/sdk/tools/checklist.js +54 -0
  394. package/dist/sdk/tools/definitions.d.ts +30 -0
  395. package/dist/sdk/tools/definitions.js +117 -0
  396. package/dist/sdk/tools/dispatch.d.ts +16 -0
  397. package/dist/sdk/tools/dispatch.js +67 -0
  398. package/dist/sdk/tools/harnessTools.d.ts +8 -0
  399. package/dist/sdk/tools/harnessTools.js +20 -0
  400. package/dist/sdk/tools/sessionName.d.ts +7 -0
  401. package/dist/sdk/tools/sessionName.js +31 -0
  402. package/dist/sdk/tools/spawnSubagent.d.ts +4 -0
  403. package/dist/sdk/tools/spawnSubagent.js +58 -0
  404. package/dist/sdk/tools/types.d.ts +48 -0
  405. package/dist/sdk/tools/types.js +1 -0
  406. package/dist/sdk/variant/components.d.ts +34 -0
  407. package/dist/sdk/variant/components.js +230 -0
  408. package/dist/sdk/variant/materialise.d.ts +66 -0
  409. package/dist/sdk/variant/materialise.js +81 -0
  410. package/dist/sdk/variant/migrate.d.ts +4 -0
  411. package/dist/sdk/variant/migrate.js +41 -0
  412. package/dist/sdk/variant/seed.d.ts +20 -0
  413. package/dist/sdk/variant/seed.js +116 -0
  414. package/dist/sdk/variant/store.d.ts +82 -0
  415. package/dist/sdk/variant/store.js +151 -0
  416. package/dist/sdk/variant/surface.d.ts +56 -0
  417. package/dist/sdk/variant/surface.js +81 -0
  418. package/dist/sdk/variant/trust.d.ts +27 -0
  419. package/dist/sdk/variant/trust.js +64 -0
  420. package/dist/sdk/variant/variant.d.ts +71 -0
  421. package/dist/sdk/variant/variant.js +331 -0
  422. package/dist/sdk/web/markdown.d.ts +10 -0
  423. package/dist/sdk/web/markdown.js +66 -0
  424. package/dist/sdk/web/part.d.ts +10 -0
  425. package/dist/sdk/web/part.js +6 -0
  426. package/dist/sdk/web/safeRequest.d.ts +34 -0
  427. package/dist/sdk/web/safeRequest.js +175 -0
  428. package/dist/sdk/web/search.d.ts +53 -0
  429. package/dist/sdk/web/search.js +168 -0
  430. package/dist/sdk/web/serverMethods.d.ts +3 -0
  431. package/dist/sdk/web/serverMethods.js +7 -0
  432. package/dist/sdk/web/text.d.ts +2 -0
  433. package/dist/sdk/web/text.js +7 -0
  434. package/dist/sdk/web/tools.d.ts +22 -0
  435. package/dist/sdk/web/tools.js +195 -0
  436. package/dist/sdk/web/turndown-plugin-gfm.d.ts +4 -0
  437. package/dist/sdk/wiki/notes.d.ts +68 -0
  438. package/dist/sdk/wiki/notes.js +297 -0
  439. package/dist/sdk/wiki/serverMethods.d.ts +3 -0
  440. package/dist/sdk/wiki/serverMethods.js +26 -0
  441. package/dist/sdk/worktrees/cli.d.ts +11 -0
  442. package/dist/sdk/worktrees/cli.js +146 -0
  443. package/dist/sdk/worktrees/copy.d.ts +9 -0
  444. package/dist/sdk/worktrees/copy.js +111 -0
  445. package/dist/sdk/worktrees/git.d.ts +16 -0
  446. package/dist/sdk/worktrees/git.js +81 -0
  447. package/dist/sdk/worktrees/serverMethods.d.ts +3 -0
  448. package/dist/sdk/worktrees/serverMethods.js +30 -0
  449. package/dist/sdk/worktrees/service.d.ts +73 -0
  450. package/dist/sdk/worktrees/service.js +483 -0
  451. package/dist/sdk/worktrees/setup.d.ts +23 -0
  452. package/dist/sdk/worktrees/setup.js +65 -0
  453. package/dist/sdk/worktrees/types.d.ts +91 -0
  454. package/dist/sdk/worktrees/types.js +1 -0
  455. package/dist/sdk/world/actions.d.ts +23 -0
  456. package/dist/sdk/world/actions.js +31 -0
  457. package/dist/sdk/world/cli.d.ts +12 -0
  458. package/dist/sdk/world/cli.js +166 -0
  459. package/dist/sdk/world/images.d.ts +20 -0
  460. package/dist/sdk/world/images.js +48 -0
  461. package/dist/sdk/world/untrusted.d.ts +12 -0
  462. package/dist/sdk/world/untrusted.js +20 -0
  463. package/dist/sdk/world/world.d.ts +67 -0
  464. package/dist/sdk/world/world.js +79 -0
  465. package/dist/terminal-opentui.js +20778 -0
  466. package/dist/terminal-pi.js +794 -518
  467. package/docs/README.md +42 -0
  468. package/docs/architecture/00-overview.md +171 -0
  469. package/docs/architecture/01-extension-points.md +78 -0
  470. package/docs/architecture/02-sessions-and-runs.md +203 -0
  471. package/docs/architecture/03-variants.md +103 -0
  472. package/docs/architecture/04-prompt.md +122 -0
  473. package/docs/architecture/05-refinement.md +107 -0
  474. package/docs/architecture/06-plugins-and-capabilities.md +129 -0
  475. package/docs/architecture/07-tools-and-gate.md +103 -0
  476. package/docs/architecture/08-memory-and-history.md +94 -0
  477. package/docs/architecture/09-accounts-and-connectors.md +98 -0
  478. package/docs/architecture/10-server-protocol.md +193 -0
  479. package/docs/architecture/11-terminal.md +261 -0
  480. package/docs/architecture/12-storage.md +75 -0
  481. package/docs/architecture/13-world-tools.md +45 -0
  482. package/docs/architecture/14-surfaces-and-parity.md +89 -0
  483. package/docs/architecture/README.md +125 -0
  484. package/docs/architecture/proposals/PROP-0001-reporting-section.md +106 -0
  485. package/docs/architecture/proposals/PROP-0002-retain-rollout-workspaces.md +104 -0
  486. package/docs/architecture/proposals/PROP-0003-executor-settings.md +81 -0
  487. package/docs/architecture/proposals/PROP-0004-flexible-reporting-guidance.md +71 -0
  488. package/docs/architecture/proposals/PROP-0005-xharness-cli-name.md +78 -0
  489. package/docs/architecture/proposals/PROP-0006-run-checklist.md +70 -0
  490. package/docs/architecture/proposals/PROP-0007-run-continuation.md +80 -0
  491. package/docs/architecture/proposals/PROP-0008-lessons-from-runs.md +80 -0
  492. package/docs/architecture/proposals/PROP-0009-foundation-and-variants.md +78 -0
  493. package/docs/architecture/proposals/PROP-0010-session-names.md +73 -0
  494. package/docs/architecture/proposals/PROP-0011-doctor.md +63 -0
  495. package/docs/architecture/proposals/PROP-0012-release-baseline.md +56 -0
  496. package/docs/architecture/proposals/PROP-0013-resource-browser.md +58 -0
  497. package/docs/architecture/proposals/PROP-0014-fullscreen-browser-tabs.md +58 -0
  498. package/docs/architecture/proposals/PROP-0015-one-capability-surface.md +88 -0
  499. package/docs/architecture/proposals/PROP-0016-managed-worktrees.md +156 -0
  500. package/docs/architecture/proposals/PROP-0017-page-annotations.md +127 -0
  501. package/docs/architecture/proposals/PROP-0018-annotation-queue-and-app-targets.md +179 -0
  502. package/docs/architecture/proposals/PROP-0019-contextual-side-questions.md +122 -0
  503. package/docs/architecture/proposals/PROP-0020-builtin-feature-plugins.md +105 -0
  504. package/docs/architecture/proposals/PROP-0021-command-namespaces-and-duplicates.md +99 -0
  505. package/docs/architecture/proposals/PROP-0022-plan-only-questions.md +102 -0
  506. package/docs/architecture/proposals/PROP-0023-xagent-cli-name.md +61 -0
  507. package/docs/architecture/proposals/PROP-0024-question-sketch-previews.md +130 -0
  508. package/docs/architecture/proposals/PROP-0025-contextual-question-wireframes.md +49 -0
  509. package/docs/architecture/proposals/PROP-0026-connected-sketch-display.md +94 -0
  510. package/docs/architecture/proposals/PROP-0027-xingular-agent-product-identity.md +60 -0
  511. package/docs/architecture/proposals/PROP-0028-normalize-question-wireframes.md +55 -0
  512. package/docs/architecture/proposals/PROP-0029-agent-profiles.md +124 -0
  513. package/docs/architecture/proposals/PROP-0030-subagent-title.md +86 -0
  514. package/docs/architecture/proposals/README.md +101 -0
  515. package/docs/decisions/ADR-0002-native-subagent-lifecycle.md +49 -0
  516. package/docs/decisions/ADR-0003-shared-asynchronous-subagents.md +70 -0
  517. package/docs/decisions/ADR-0004-fullscreen-terminal-layout.md +50 -0
  518. package/docs/decisions/ADR-0005-app-provided-oauth-clients.md +54 -0
  519. package/docs/decisions/ADR-0006-opentui-only-terminal.md +47 -0
  520. package/docs/decisions/ADR-0007-reporting-section.md +33 -0
  521. package/docs/decisions/ADR-0008-flexible-reporting-guidance.md +38 -0
  522. package/docs/decisions/ADR-0009-xharness-command.md +39 -0
  523. package/docs/decisions/ADR-0010-lessons-in-the-wiki.md +31 -0
  524. package/docs/decisions/ADR-0011-foundation-and-variants.md +28 -0
  525. package/docs/decisions/ADR-0012-native-session-names.md +34 -0
  526. package/docs/decisions/ADR-0013-doctor.md +27 -0
  527. package/docs/decisions/ADR-0014-public-release-baseline.md +22 -0
  528. package/docs/decisions/ADR-0015-resource-browser.md +28 -0
  529. package/docs/decisions/ADR-0016-fullscreen-browser-tabs.md +31 -0
  530. package/docs/decisions/ADR-0017-one-capability-surface.md +34 -0
  531. package/docs/decisions/ADR-0018-builtin-feature-plugins.md +35 -0
  532. package/docs/decisions/ADR-0019-managed-git-worktrees.md +31 -0
  533. package/docs/decisions/ADR-0020-page-annotations.md +37 -0
  534. package/docs/decisions/ADR-0021-required-command-namespaces.md +40 -0
  535. package/docs/decisions/ADR-0022-plan-only-question-tools.md +34 -0
  536. package/docs/decisions/ADR-0023-contextual-side-question-runs.md +35 -0
  537. package/docs/decisions/ADR-0024-xagent-command.md +40 -0
  538. package/docs/decisions/ADR-0025-question-choice-sketches.md +49 -0
  539. package/docs/decisions/ADR-0026-contextual-question-wireframes.md +58 -0
  540. package/docs/decisions/ADR-0027-connected-sketch-display.md +60 -0
  541. package/docs/decisions/ADR-0028-xingular-agent-product-identity.md +56 -0
  542. package/docs/decisions/ADR-0029-normalized-question-wireframe-borders.md +33 -0
  543. package/docs/decisions/ADR-0030-agent-profiles.md +43 -0
  544. package/docs/doctor.md +80 -0
  545. package/docs/experiments/EXP-0001-terminal-input-latency/plan.md +81 -0
  546. package/docs/experiments/EXP-0001-terminal-input-latency/results.md +46 -0
  547. package/docs/experiments/EXP-0002-opentui-typing-latency/plan.md +70 -0
  548. package/docs/experiments/EXP-0002-opentui-typing-latency/results.md +92 -0
  549. package/docs/features/README.md +46 -0
  550. package/docs/features/automations/README.md +41 -0
  551. package/docs/features/cores/README.md +39 -0
  552. package/docs/features/google-harness2/README.md +52 -0
  553. package/docs/features/integrations/README.md +40 -0
  554. package/docs/features/interfaces/README.md +29 -0
  555. package/docs/features/memory/README.md +28 -0
  556. package/docs/future-work.md +48 -0
  557. package/docs/parity.md +78 -0
  558. package/docs/releases/1.0.0.md +40 -0
  559. package/docs/releases/4.0.0.md +46 -0
  560. package/docs/releases/README.md +41 -0
  561. package/docs/study/00-index.md +83 -0
  562. package/docs/study/arms/00-matrix.md +20 -0
  563. package/docs/study/arms/01-system-prompt.md +211 -0
  564. package/docs/study/arms/02-tools.md +79 -0
  565. package/docs/study/arms/03-subagents.md +90 -0
  566. package/docs/study/arms/04-skills.md +75 -0
  567. package/docs/study/arms/05-context-management.md +90 -0
  568. package/docs/study/arms/06-memory.md +90 -0
  569. package/docs/study/arms/07-governance.md +71 -0
  570. package/docs/study/arms/08-execution.md +69 -0
  571. package/docs/study/arms/09-observability.md +60 -0
  572. package/docs/study/arms/10-refinement.md +110 -0
  573. package/docs/study/autonomous-engineering-sources.md +277 -0
  574. package/docs/study/autonomy-sources.md +147 -0
  575. package/docs/study/btw-comparison.md +37 -0
  576. package/docs/study/feature-gap-review.md +42 -0
  577. package/docs/study/insights.md +123 -0
  578. package/docs/study/proactive-autonomy.md +408 -0
  579. package/docs/study/roadmap.md +72 -0
  580. package/docs/study/sources/claude-code.md +44 -0
  581. package/docs/study/sources/deepseek-harness.md +102 -0
  582. package/docs/study/sources/harness2.md +50 -0
  583. package/docs/study/sources/kimi-cli.md +42 -0
  584. package/docs/study/sources/omp.md +93 -0
  585. package/docs/study/sources/opencode.md +43 -0
  586. package/docs/study/sources/openhands.md +46 -0
  587. package/docs/study/sources/smolagents.md +40 -0
  588. package/docs/study/sources/swe-agent.md +34 -0
  589. package/docs/study/tui-resource-browser.md +78 -0
  590. package/docs/system-prompt-design.md +196 -0
  591. package/docs/terminal-tui.md +707 -58
  592. package/package.json +43 -13
  593. package/docs/evidence/terminal-2026-10-17/120x40-completed-transcript.ansi.gz +0 -0
  594. package/docs/evidence/terminal-2026-10-17/40x20-settings-interaction.ansi.gz +0 -0
  595. package/docs/evidence/terminal-2026-10-17/40x20-settings-keyboard.ansi.gz +0 -0
  596. package/docs/evidence/terminal-2026-10-17/40x20-welcome.ansi.gz +0 -0
  597. package/docs/evidence/terminal-2026-10-17/80x24-approval-0.ansi.gz +0 -0
  598. package/docs/evidence/terminal-2026-10-17/80x24-question.ansi.gz +0 -0
  599. package/docs/evidence/terminal-2026-10-17/verification.json +0 -130
  600. package/docs/evidence/terminal-2026-10-17-followup/120x40-completed-transcript.ansi.gz +0 -0
  601. package/docs/evidence/terminal-2026-10-17-followup/40x20-settings-interaction.ansi.gz +0 -0
  602. package/docs/evidence/terminal-2026-10-17-followup/40x20-settings-keyboard.ansi.gz +0 -0
  603. package/docs/evidence/terminal-2026-10-17-followup/40x20-welcome.ansi.gz +0 -0
  604. package/docs/evidence/terminal-2026-10-17-followup/80x24-approval-0.ansi.gz +0 -0
  605. package/docs/evidence/terminal-2026-10-17-followup/80x24-plugin-light.ansi.gz +0 -0
  606. package/docs/evidence/terminal-2026-10-17-followup/80x24-question-batch.ansi.gz +0 -0
  607. package/docs/evidence/terminal-2026-10-17-followup/80x24-question.ansi.gz +0 -0
  608. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-approval-0.ansi.gz +0 -0
  609. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-plugin-light.ansi.gz +0 -0
  610. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-question-batch.ansi.gz +0 -0
  611. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-question.ansi.gz +0 -0
  612. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/verification.json +0 -95
  613. package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-approval-0.ansi.gz +0 -0
  614. package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-plugin-light.ansi.gz +0 -0
  615. package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-question-batch.ansi.gz +0 -0
  616. package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-question.ansi.gz +0 -0
  617. package/docs/evidence/terminal-2026-10-17-followup/global-install/README.md +0 -27
  618. package/docs/evidence/terminal-2026-10-17-followup/global-install/shell-command-80x24.ansi.gz +0 -0
  619. package/docs/evidence/terminal-2026-10-17-followup/global-install/shell-command.json +0 -18
  620. package/docs/evidence/terminal-2026-10-17-followup/global-install/verification.json +0 -95
  621. package/docs/evidence/terminal-2026-10-17-followup/harness-reference-80x24.json.gz +0 -0
  622. package/docs/evidence/terminal-2026-10-17-followup/harness-reference-final-80x24.json.gz +0 -0
  623. package/docs/evidence/terminal-2026-10-17-followup/harness-reference-scenario.json +0 -60
  624. package/docs/evidence/terminal-2026-10-17-followup/live-codex/README.md +0 -24
  625. package/docs/evidence/terminal-2026-10-17-followup/live-codex/complete-80x24.ansi.gz +0 -0
  626. package/docs/evidence/terminal-2026-10-17-followup/live-codex/verification.json +0 -57
  627. package/docs/evidence/terminal-2026-10-17-followup/omp-reference-80x24-early.json.gz +0 -0
  628. package/docs/evidence/terminal-2026-10-17-followup/omp-reference-80x24.json.gz +0 -0
  629. package/docs/evidence/terminal-2026-10-17-followup/omp-reference-scenario.json +0 -58
  630. package/docs/evidence/terminal-2026-10-17-followup/omp-supplemental-static.json.gz +0 -0
  631. package/docs/evidence/terminal-2026-10-17-followup/rea-artifacts.json +0 -320
  632. package/docs/evidence/terminal-2026-10-17-followup/reference-comparison.json +0 -30
  633. package/docs/evidence/terminal-2026-10-17-followup/reference-comparison.md +0 -133
  634. package/docs/evidence/terminal-2026-10-17-followup/reference-source-observations.json +0 -20
  635. package/docs/evidence/terminal-2026-10-17-followup/verification.json +0 -207
  636. package/src/accounts/accounts.test.ts +0 -333
  637. package/src/accounts/accounts.ts +0 -658
  638. package/src/accounts/env.test.ts +0 -95
  639. package/src/accounts/env.ts +0 -338
  640. package/src/accounts/secrets.ts +0 -50
  641. package/src/accounts/store.ts +0 -338
  642. package/src/capabilities/api.ts +0 -75
  643. package/src/capabilities/runSnapshot.ts +0 -59
  644. package/src/capabilities/types.ts +0 -34
  645. package/src/cli.ts +0 -118
  646. package/src/core/bus.ts +0 -34
  647. package/src/core/changes.ts +0 -33
  648. package/src/core/env.ts +0 -27
  649. package/src/core/errors.ts +0 -32
  650. package/src/core/frontmatter.ts +0 -47
  651. package/src/core/fs.test.ts +0 -38
  652. package/src/core/fs.ts +0 -92
  653. package/src/core/index.ts +0 -193
  654. package/src/core/path.test.ts +0 -14
  655. package/src/core/path.ts +0 -79
  656. package/src/core/projects.ts +0 -90
  657. package/src/core/text.ts +0 -39
  658. package/src/harness.ts +0 -312
  659. package/src/hub/catalog.json +0 -123
  660. package/src/hub/cli.ts +0 -59
  661. package/src/hub/hub.test.ts +0 -205
  662. package/src/hub/hub.ts +0 -256
  663. package/src/hub/schema.ts +0 -81
  664. package/src/index.ts +0 -75
  665. package/src/mcp/connections.ts +0 -614
  666. package/src/mcp/manager.ts +0 -130
  667. package/src/mcp/oauth.ts +0 -195
  668. package/src/mcp/scopeMigration.test.ts +0 -79
  669. package/src/mcp/scopeMigration.ts +0 -204
  670. package/src/mcp/service.test.ts +0 -376
  671. package/src/mcp/service.ts +0 -549
  672. package/src/mcp/types.ts +0 -108
  673. package/src/memory/api.test.ts +0 -82
  674. package/src/memory/api.ts +0 -303
  675. package/src/memory/blocks.test.ts +0 -78
  676. package/src/memory/blocks.ts +0 -408
  677. package/src/memory/caller.ts +0 -69
  678. package/src/memory/curation.test.ts +0 -163
  679. package/src/memory/curation.ts +0 -64
  680. package/src/memory/dispatch.ts +0 -59
  681. package/src/memory/facts.test.ts +0 -41
  682. package/src/memory/facts.ts +0 -248
  683. package/src/memory/graph.ts +0 -103
  684. package/src/memory/health.test.ts +0 -130
  685. package/src/memory/health.ts +0 -74
  686. package/src/memory/maintainer.ts +0 -272
  687. package/src/memory/maintenance.test.ts +0 -176
  688. package/src/memory/maintenance.ts +0 -518
  689. package/src/memory/migrate.ts +0 -79
  690. package/src/memory/operations.ts +0 -150
  691. package/src/memory/proposals.test.ts +0 -168
  692. package/src/memory/proposals.ts +0 -584
  693. package/src/memory/recall.test.ts +0 -115
  694. package/src/memory/recall.ts +0 -278
  695. package/src/memory/references.ts +0 -77
  696. package/src/memory/runContext.ts +0 -93
  697. package/src/memory/secrets.ts +0 -6
  698. package/src/memory/store.test.ts +0 -66
  699. package/src/memory/store.ts +0 -385
  700. package/src/memory/wiki.test.ts +0 -47
  701. package/src/memory/wiki.ts +0 -422
  702. package/src/memory/wikiIndex.test.ts +0 -88
  703. package/src/memory/wikiIndex.ts +0 -116
  704. package/src/plugins/api.ts +0 -181
  705. package/src/plugins/attachments.test.ts +0 -84
  706. package/src/plugins/attachments.ts +0 -141
  707. package/src/plugins/builtin.ts +0 -82
  708. package/src/plugins/catalogue.test.ts +0 -254
  709. package/src/plugins/catalogue.ts +0 -251
  710. package/src/plugins/cli.ts +0 -184
  711. package/src/plugins/discover.ts +0 -151
  712. package/src/plugins/firstParty.test.ts +0 -143
  713. package/src/plugins/firstParty.ts +0 -129
  714. package/src/plugins/hooks.test.ts +0 -250
  715. package/src/plugins/hooks.ts +0 -239
  716. package/src/plugins/identity.ts +0 -37
  717. package/src/plugins/install.test.ts +0 -107
  718. package/src/plugins/install.ts +0 -106
  719. package/src/plugins/inventory.ts +0 -123
  720. package/src/plugins/manifest.ts +0 -76
  721. package/src/plugins/plugins.test.ts +0 -205
  722. package/src/plugins/plugins.ts +0 -189
  723. package/src/plugins/proposal.ts +0 -121
  724. package/src/plugins/runtime.test.ts +0 -40
  725. package/src/plugins/runtime.ts +0 -82
  726. package/src/plugins/trust.ts +0 -142
  727. package/src/plugins/types.ts +0 -149
  728. package/src/prompt/compile.test.ts +0 -261
  729. package/src/prompt/compile.ts +0 -732
  730. package/src/server/methods.ts +0 -349
  731. package/src/server/remote.ts +0 -77
  732. package/src/server/rpc.ts +0 -116
  733. package/src/server/serve.ts +0 -28
  734. package/src/server/server.test.ts +0 -174
  735. package/src/sessions/approvals.ts +0 -118
  736. package/src/sessions/contracts.ts +0 -336
  737. package/src/sessions/conversation.test.ts +0 -177
  738. package/src/sessions/extensionSession.test.ts +0 -74
  739. package/src/sessions/extensionUi.test.ts +0 -65
  740. package/src/sessions/extensionUi.ts +0 -102
  741. package/src/sessions/history.ts +0 -51
  742. package/src/sessions/lineageJoin.ts +0 -75
  743. package/src/sessions/policy.ts +0 -36
  744. package/src/sessions/pricing.ts +0 -60
  745. package/src/sessions/questionBatches.test.ts +0 -110
  746. package/src/sessions/reasoningSummaries.ts +0 -59
  747. package/src/sessions/registry.ts +0 -381
  748. package/src/sessions/runIndex.ts +0 -99
  749. package/src/sessions/runStore.test.ts +0 -152
  750. package/src/sessions/runStore.ts +0 -332
  751. package/src/sessions/runner.ts +0 -604
  752. package/src/sessions/runtimeResources.test.ts +0 -61
  753. package/src/sessions/sessions.test.ts +0 -549
  754. package/src/sessions/sessions.ts +0 -339
  755. package/src/skills/registry.test.ts +0 -104
  756. package/src/skills/registry.ts +0 -413
  757. package/src/terminal/accountsMenu.test.ts +0 -225
  758. package/src/terminal/accountsMenu.ts +0 -382
  759. package/src/terminal/cli.ts +0 -149
  760. package/src/terminal/client.ts +0 -74
  761. package/src/terminal/control.test.ts +0 -23
  762. package/src/terminal/control.ts +0 -23
  763. package/src/terminal/controller.ts +0 -291
  764. package/src/terminal/hubMenu.ts +0 -24
  765. package/src/terminal/launch.test.ts +0 -25
  766. package/src/terminal/launch.ts +0 -48
  767. package/src/terminal/piExtension.lifecycle.test.ts +0 -55
  768. package/src/terminal/piExtension.ts +0 -259
  769. package/src/terminal/pluginControl.test.ts +0 -146
  770. package/src/terminal/pluginMenu.ts +0 -112
  771. package/src/terminal/socket.test.ts +0 -71
  772. package/src/terminal/socket.ts +0 -232
  773. package/src/terminal/standalone.test.ts +0 -167
  774. package/src/terminal/standalone.ts +0 -153
  775. package/src/terminal/terminal.test.ts +0 -399
  776. package/src/terminal/terminals.ts +0 -553
  777. package/src/terminal/tui/application.test.ts +0 -114
  778. package/src/terminal/tui/application.ts +0 -491
  779. package/src/terminal/tui/commands.test.ts +0 -218
  780. package/src/terminal/tui/commands.ts +0 -361
  781. package/src/terminal/tui/dialogs.ts +0 -301
  782. package/src/terminal/tui/editor.test.ts +0 -84
  783. package/src/terminal/tui/editor.ts +0 -79
  784. package/src/terminal/tui/keybindings.test.ts +0 -22
  785. package/src/terminal/tui/keybindings.ts +0 -50
  786. package/src/terminal/tui/piAdapter.ts +0 -62
  787. package/src/terminal/tui/presentation.test.ts +0 -79
  788. package/src/terminal/tui/questions.test.ts +0 -41
  789. package/src/terminal/tui/questions.ts +0 -47
  790. package/src/terminal/tui/runtime.socket.test.ts +0 -104
  791. package/src/terminal/tui/runtime.test.ts +0 -215
  792. package/src/terminal/tui/runtime.ts +0 -388
  793. package/src/terminal/tui/sessionUi.ts +0 -24
  794. package/src/terminal/tui/settings.test.ts +0 -150
  795. package/src/terminal/tui/settings.ts +0 -188
  796. package/src/terminal/tui/status.test.ts +0 -70
  797. package/src/terminal/tui/status.ts +0 -109
  798. package/src/terminal/tui/theme.ts +0 -174
  799. package/src/terminal/tui/tools.test.ts +0 -145
  800. package/src/terminal/tui/tools.ts +0 -142
  801. package/src/terminal/tui/transcript.test.ts +0 -25
  802. package/src/terminal/tui/transcript.ts +0 -124
  803. package/src/terminal/tui/ui.test.ts +0 -313
  804. package/src/terminal/tui/ui.ts +0 -166
  805. package/src/terminal/tui/welcome.ts +0 -102
  806. package/src/tools/askUser.test.ts +0 -69
  807. package/src/tools/askUser.ts +0 -59
  808. package/src/tools/definitions.ts +0 -187
  809. package/src/tools/maintenance.ts +0 -24
  810. package/src/tools/memoryTools.ts +0 -22
  811. package/src/tools/pluginPropose.ts +0 -41
  812. package/src/tools/registryWrite.test.ts +0 -101
  813. package/src/tools/registryWrite.ts +0 -182
  814. package/src/tools/spawnSubagent.ts +0 -92
  815. package/src/tools/types.ts +0 -39
  816. package/src/web/safeRequest.ts +0 -171
  817. package/src/web/text.ts +0 -53
  818. package/src/web/tools.ts +0 -134
  819. package/src/web/web.test.ts +0 -141
@@ -0,0 +1,308 @@
1
+ // The terminal's capture surface for page notes (PROP-0017, PROP-0018). A front end captures in
2
+ // one target at a time:
3
+ // - `web`: a visible browser window the person browses in, separate from the agent's browser;
4
+ // - `cdp`: the windows of a desktop app started with a DevTools port (an Electron app, say);
5
+ // - `bridge`: app windows that loaded the page bridge script (a macOS web view has no DevTools port).
6
+ // The person selects text, clicks an element, or inspects with the popover; the front end pulls
7
+ // what they did through the page helper.
8
+ import { randomUUID } from 'node:crypto';
9
+ import { join } from 'node:path';
10
+ import { readBrowserConfig } from "../browser/config.js";
11
+ import { NetworkPolicy } from "../browser/network.js";
12
+ import { BrowserSession, fileName, launchBrowser } from "../browser/session.js";
13
+ import { NotesBridge } from "./bridge.js";
14
+ import { evaluateIsolated } from "./isolated.js";
15
+ import { pageCall, pageReply } from "./pageScript.js";
16
+ import { validateUrl } from "./store.js";
17
+ const IDLE_MS = 60 * 60_000;
18
+ const LOOPBACK = /^(?:https?|wss?):\/\/(?:127\.0\.0\.1|localhost|\[::1\])(?::\d+)?(?:\/|$)/;
19
+ const connectApp = async (endpoint) => {
20
+ const { chromium } = await import('playwright-core');
21
+ return chromium.connectOverCDP(endpoint);
22
+ };
23
+ /** An app's own windows over its DevTools port. Nothing is routed or opened, and the app is never closed. */
24
+ class CdpTarget {
25
+ browser;
26
+ app;
27
+ kind = 'cdp';
28
+ ids = new WeakMap();
29
+ nextId = 1;
30
+ current = null;
31
+ constructor(browser, app) {
32
+ this.browser = browser;
33
+ this.app = app;
34
+ }
35
+ pages() {
36
+ return this.browser.contexts().flatMap((context) => context.pages()).filter((page) => !/^(?:devtools|chrome-extension):/.test(page.url()));
37
+ }
38
+ id(page) {
39
+ let id = this.ids.get(page);
40
+ if (!id) {
41
+ id = `w${this.nextId++}`;
42
+ this.ids.set(page, id);
43
+ }
44
+ return id;
45
+ }
46
+ page() {
47
+ const pages = this.pages();
48
+ if (this.current && pages.includes(this.current))
49
+ return this.current;
50
+ this.current = pages[0] ?? null;
51
+ if (!this.current)
52
+ throw new Error('The app has no open window.');
53
+ return this.current;
54
+ }
55
+ async evaluate(operation) {
56
+ return evaluateIsolated(this.page(), pageCall(operation));
57
+ }
58
+ async windows() {
59
+ const current = this.pages().length ? this.page() : null;
60
+ return Promise.all(this.pages().map(async (page) => ({ id: this.id(page), url: page.url(), title: await page.title().catch(() => ''), current: page === current })));
61
+ }
62
+ select(id) {
63
+ const page = this.pages().find((candidate) => this.ids.get(candidate) === id);
64
+ if (!page)
65
+ throw new Error(`There is no app window ${id}.`);
66
+ this.current = page;
67
+ void page.bringToFront().catch(() => undefined);
68
+ }
69
+ async close() {
70
+ // Disconnects; an app we attached to keeps running.
71
+ await this.browser.close().catch(() => undefined);
72
+ }
73
+ }
74
+ /** Windows that loaded the page bridge script. Every answer is page data the page could forge. */
75
+ class BridgeTarget {
76
+ bridge;
77
+ app;
78
+ kind = 'bridge';
79
+ current = null;
80
+ constructor(bridge, app) {
81
+ this.bridge = bridge;
82
+ this.app = app;
83
+ }
84
+ window() {
85
+ const windows = this.bridge.list();
86
+ if (this.current && windows.some((window) => window.id === this.current))
87
+ return this.current;
88
+ this.current = windows.sort((left, right) => right.lastSeen - left.lastSeen)[0]?.id ?? null;
89
+ if (!this.current)
90
+ throw new Error('No app window has connected to the page bridge yet. Load the bridge script in the app and reload it.');
91
+ return this.current;
92
+ }
93
+ async evaluate(operation) {
94
+ return { reply: await this.bridge.call(this.window(), operation), trusted: false };
95
+ }
96
+ async windows() {
97
+ const current = this.bridge.list().length ? this.window() : null;
98
+ return this.bridge.list().map((window) => ({ id: window.id, url: window.url, title: window.title, current: window.id === current }));
99
+ }
100
+ select(id) {
101
+ if (!this.bridge.list().some((window) => window.id === id))
102
+ throw new Error(`There is no app window ${id}.`);
103
+ this.current = id;
104
+ }
105
+ async close() { }
106
+ }
107
+ /** The visible browser window, with the helper in an isolated world. */
108
+ class WebTarget {
109
+ session;
110
+ kind = 'web';
111
+ app = null;
112
+ constructor(session) {
113
+ this.session = session;
114
+ }
115
+ evaluate(operation) {
116
+ return this.session.run(async () => evaluateIsolated((await this.session.tab()).page, pageCall(operation)));
117
+ }
118
+ async windows() {
119
+ if (!this.session.started)
120
+ return [];
121
+ return Promise.all(this.session.list().map(async (tab) => ({ id: tab.id, url: tab.url, title: await (await this.session.tab(tab.id)).page.title().catch(() => ''), current: tab.current })));
122
+ }
123
+ select(id) {
124
+ void this.session.select(id).page.bringToFront().catch(() => undefined);
125
+ }
126
+ close() {
127
+ return this.session.close();
128
+ }
129
+ }
130
+ export class AnnotationCapture {
131
+ options;
132
+ targets = new Map();
133
+ inspecting = new Map();
134
+ network;
135
+ bridge;
136
+ constructor(options) {
137
+ this.options = options;
138
+ this.network = options.network ?? new NetworkPolicy(() => readBrowserConfig(options.stateDir));
139
+ this.bridge = options.bridge ?? new NotesBridge({ stateDir: options.stateDir });
140
+ }
141
+ web(key) {
142
+ const existing = this.targets.get(key);
143
+ if (existing instanceof WebTarget)
144
+ return existing;
145
+ const session = new BrowserSession({
146
+ key: `notes-${key}`,
147
+ profileDir: join(this.options.stateDir, 'browser', 'profiles', 'person'),
148
+ downloadsDir: join(this.options.stateDir, 'browser', 'downloads', fileName(`notes-${key}`)),
149
+ // Always a window the person can see and select in.
150
+ config: () => ({ ...readBrowserConfig(this.options.stateDir), headed: true }),
151
+ network: this.network,
152
+ launch: this.options.launch ?? launchBrowser,
153
+ idleMs: IDLE_MS,
154
+ onIdle: () => void this.release(key)
155
+ });
156
+ const target = new WebTarget(session);
157
+ this.targets.set(key, target);
158
+ return target;
159
+ }
160
+ target(key) {
161
+ return this.targets.get(key) ?? this.web(key);
162
+ }
163
+ async replace(key, target) {
164
+ const old = this.targets.get(key);
165
+ this.targets.set(key, target);
166
+ this.inspecting.delete(key);
167
+ if (old && old !== target)
168
+ await old.close().catch(() => undefined);
169
+ }
170
+ async call(key, operation) {
171
+ return pageReply((await this.target(key).evaluate(operation)).reply);
172
+ }
173
+ /** What `key` captures in now. */
174
+ describe(key) {
175
+ const target = this.targets.get(key);
176
+ return { kind: target?.kind ?? 'web', app: target?.app ?? null, inspecting: this.inspecting.has(key) };
177
+ }
178
+ /** Captures in an app's windows instead of the browser: over its DevTools port, or the page bridge. */
179
+ async attach(key, spec) {
180
+ if (spec.kind === 'web') {
181
+ if (this.targets.get(key)?.kind !== 'web')
182
+ await this.replace(key, this.web(key));
183
+ return { kind: 'web', app: null, windows: await this.target(key).windows() };
184
+ }
185
+ if (spec.kind === 'cdp') {
186
+ if (typeof spec.endpoint !== 'string' || !LOOPBACK.test(spec.endpoint))
187
+ throw new Error('An app\'s DevTools address must be on this computer, such as http://127.0.0.1:9229.');
188
+ const browser = await (this.options.connect ?? connectApp)(spec.endpoint);
189
+ const name = spec.name?.trim() || `App at ${new URL(spec.endpoint).host}`;
190
+ const target = new CdpTarget(browser, { kind: 'cdp', name: name.slice(0, 200) });
191
+ await this.replace(key, target);
192
+ return { kind: 'cdp', app: target.app, windows: await target.windows() };
193
+ }
194
+ if (spec.kind === 'bridge') {
195
+ const bridge = await this.bridge.start();
196
+ const target = new BridgeTarget(this.bridge, { kind: 'bridge', name: (spec.name?.trim() || 'App window').slice(0, 200) });
197
+ await this.replace(key, target);
198
+ return { kind: 'bridge', app: target.app, windows: await target.windows(), bridge };
199
+ }
200
+ throw new Error('A capture target is web, cdp or bridge.');
201
+ }
202
+ windows(key) {
203
+ return this.target(key).windows();
204
+ }
205
+ /** Switches to another window or tab of the target; an inspector there starts again. */
206
+ async selectWindow(key, id) {
207
+ const inspecting = this.inspecting.has(key);
208
+ if (inspecting)
209
+ await this.stopInspect(key).catch(() => undefined);
210
+ this.target(key).select(id);
211
+ if (inspecting)
212
+ await this.inspect(key);
213
+ }
214
+ /** Shows the capture window, at `url` when given. Captures in the browser again if an app was attached. */
215
+ async open(key, url) {
216
+ if (this.targets.get(key) && this.targets.get(key).kind !== 'web')
217
+ await this.replace(key, this.web(key));
218
+ const { session } = this.web(key);
219
+ return session.run(async () => {
220
+ const tab = await session.tab();
221
+ if (url) {
222
+ const address = validateUrl(url);
223
+ const refusal = await this.network.refusal(address);
224
+ if (refusal)
225
+ throw new Error(refusal);
226
+ await tab.page.goto(address, { waitUntil: 'domcontentloaded' });
227
+ }
228
+ await tab.page.bringToFront().catch(() => undefined);
229
+ return { url: tab.page.url(), title: await tab.page.title().catch(() => '') };
230
+ });
231
+ }
232
+ identity(key) {
233
+ return this.call(key, { operation: 'identity' });
234
+ }
235
+ /** Starts listening for the person's selection or click. Returns the id `capture` takes. */
236
+ async begin(key, kind) {
237
+ this.inspecting.delete(key);
238
+ const captureId = randomUUID();
239
+ await this.call(key, { operation: 'begin', kind, captureId });
240
+ return { captureId };
241
+ }
242
+ /** What the person selected, or null when nothing is selected yet. */
243
+ capture(key, captureId) {
244
+ return this.call(key, { operation: 'capture', captureId });
245
+ }
246
+ async cancel(key, captureId) {
247
+ if (!this.targets.has(key))
248
+ return;
249
+ await this.call(key, { operation: 'cancel', ...(captureId ? { captureId } : {}) });
250
+ }
251
+ /** Turns on the inspector in the current window: hover outlines, a click opens the comment popover. */
252
+ async inspect(key) {
253
+ const captureId = randomUUID();
254
+ await this.call(key, { operation: 'begin', kind: 'inspect', captureId });
255
+ const identity = await this.identity(key).catch(() => null);
256
+ this.inspecting.set(key, { captureId, documentId: identity?.documentId ?? null });
257
+ return { captureId };
258
+ }
259
+ async stopInspect(key) {
260
+ const state = this.inspecting.get(key);
261
+ this.inspecting.delete(key);
262
+ if (state && this.targets.has(key))
263
+ await this.call(key, { operation: 'cancel', captureId: state.captureId }).catch(() => undefined);
264
+ }
265
+ /**
266
+ * The next comment the person submitted, if any. A new document (a reload, a link) loses the
267
+ * inspector; it is turned on again there, so the person can keep going.
268
+ */
269
+ async next(key) {
270
+ const target = this.target(key);
271
+ const state = this.inspecting.get(key);
272
+ if (!state)
273
+ throw new Error('The inspector is off.');
274
+ const { reply, trusted } = await target.evaluate({ operation: 'next', captureId: state.captureId });
275
+ const value = pageReply(reply);
276
+ if (!value.active && this.inspecting.get(key) === state && value.documentId !== state.documentId) {
277
+ await target.evaluate({ operation: 'begin', kind: 'inspect', captureId: state.captureId });
278
+ state.documentId = value.documentId;
279
+ return { ...value, active: true, result: null, trusted, app: target.app };
280
+ }
281
+ if (!value.active)
282
+ this.inspecting.delete(key);
283
+ return { ...value, trusted, app: target.app };
284
+ }
285
+ async toast(key, text) {
286
+ await this.call(key, { operation: 'toast', text: text.slice(0, 200) });
287
+ }
288
+ /** Opens the note's page when another one is showing, then scrolls to and marks its target. */
289
+ async reveal(key, url, target) {
290
+ const current = this.targets.get(key);
291
+ if (!current || current.kind === 'web') {
292
+ const shown = current?.session.started ? await this.identity(key).catch(() => null) : null;
293
+ if (shown?.url !== url)
294
+ await this.open(key, url);
295
+ }
296
+ return this.call(key, { operation: 'reveal', target });
297
+ }
298
+ async release(key) {
299
+ const target = this.targets.get(key);
300
+ this.targets.delete(key);
301
+ this.inspecting.delete(key);
302
+ await target?.close();
303
+ }
304
+ async close() {
305
+ await Promise.all([...this.targets.keys()].map((key) => this.release(key)));
306
+ await this.bridge.close();
307
+ }
308
+ }
@@ -0,0 +1,72 @@
1
+ import type { Bus } from "../core/bus.js";
2
+ import * as store from "./store.js";
3
+ export interface TerminalSender {
4
+ has(sessionId: string): boolean;
5
+ send(input: {
6
+ sessionId: string;
7
+ text: string;
8
+ }): Promise<{
9
+ runId: string;
10
+ }>;
11
+ }
12
+ export type SendResult = {
13
+ state: 'sent';
14
+ runId: string;
15
+ ids: string[];
16
+ } | {
17
+ state: 'busy';
18
+ ids: string[];
19
+ } | {
20
+ state: 'host';
21
+ text: string;
22
+ ids: string[];
23
+ } | {
24
+ state: 'empty';
25
+ ids: [];
26
+ };
27
+ export type NoteAction = 'save' | 'queue' | 'send';
28
+ export interface NoteDeliveryOptions {
29
+ root: () => string;
30
+ bus: Bus;
31
+ terminals: () => TerminalSender | null;
32
+ }
33
+ export declare class NoteDeliveries {
34
+ private readonly options;
35
+ private readonly sending;
36
+ constructor(options: NoteDeliveryOptions);
37
+ private changed;
38
+ queue(id: string, expectedVersion: number | undefined, sessionId: string, options?: {
39
+ autoSend?: boolean;
40
+ confirm?: boolean;
41
+ }): store.Note;
42
+ dequeue(id: string, expectedVersion: number | undefined): store.Note;
43
+ /**
44
+ * Creates a note and acts on it in one step: what the popover's three buttons do. `trusted` is
45
+ * false when the comment came from a script the page could reach; a send then waits in the queue
46
+ * for the person to confirm it.
47
+ */
48
+ createAndAct(input: store.NoteInput, action: NoteAction, sessionId: string | null, trusted: boolean): Promise<{
49
+ note: store.Note;
50
+ send: SendResult | null;
51
+ }>;
52
+ /** The person confirms a note the page could have forged; it is then sent with the next send. */
53
+ confirm(id: string, expectedVersion: number | undefined): store.Note;
54
+ /** The instruction for the session's queued notes (or the given ones), for a host that runs it itself. */
55
+ compose(sessionId: string, ids?: string[] | null): {
56
+ text: string;
57
+ ids: string[];
58
+ };
59
+ /** A host started `runId` with composed notes. */
60
+ delivered(ids: string[], sessionId: string, runId: string): store.Note[];
61
+ /** Sends the session's queued notes (or the given ones) as one run. */
62
+ send(sessionId: string, filter?: {
63
+ ids?: string[] | null;
64
+ auto?: boolean;
65
+ }): Promise<SendResult>;
66
+ /** A run of the session ended: notes waiting for it to be idle go out now. */
67
+ runEnded(sessionId: string | null | undefined): Promise<void>;
68
+ markFixed(id: string, caller: {
69
+ sessionId?: string | null;
70
+ agentId?: string | null;
71
+ }, summary: string): store.Note;
72
+ }
@@ -0,0 +1,130 @@
1
+ import { HarnessError, invalid } from "../core/errors.js";
2
+ import { compose, MAX_SEND } from "./queue.js";
3
+ import * as store from "./store.js";
4
+ export class NoteDeliveries {
5
+ options;
6
+ sending = new Set();
7
+ constructor(options) {
8
+ this.options = options;
9
+ }
10
+ changed(sessionId, ids) {
11
+ this.options.bus.emit({ type: 'annotations.changed', sessionId, ids });
12
+ }
13
+ queue(id, expectedVersion, sessionId, options = {}) {
14
+ const note = store.queue(this.options.root(), id, expectedVersion, sessionId, options);
15
+ this.changed(sessionId, [id]);
16
+ return note;
17
+ }
18
+ dequeue(id, expectedVersion) {
19
+ const note = store.dequeue(this.options.root(), id, expectedVersion);
20
+ this.changed(null, [id]);
21
+ return note;
22
+ }
23
+ /**
24
+ * Creates a note and acts on it in one step: what the popover's three buttons do. `trusted` is
25
+ * false when the comment came from a script the page could reach; a send then waits in the queue
26
+ * for the person to confirm it.
27
+ */
28
+ async createAndAct(input, action, sessionId, trusted) {
29
+ if (!['save', 'queue', 'send'].includes(action))
30
+ throw invalid('action is save, queue or send.');
31
+ if (action !== 'save' && !sessionId)
32
+ throw invalid('Queueing or sending a note needs a session.');
33
+ const root = this.options.root();
34
+ let note = store.create(root, input);
35
+ if (action === 'save') {
36
+ this.changed(null, [note.id]);
37
+ return { note, send: null };
38
+ }
39
+ const deliveryOptions = {
40
+ ...(action === 'send' ? { autoSend: true } : {}),
41
+ ...(!trusted ? { confirm: true } : {})
42
+ };
43
+ note = store.queue(root, note.id, undefined, sessionId, deliveryOptions);
44
+ this.changed(sessionId, [note.id]);
45
+ if (action === 'queue' || !trusted)
46
+ return { note, send: null };
47
+ const send = await this.send(sessionId, { ids: [note.id] });
48
+ return { note: store.read(root, note.id), send };
49
+ }
50
+ /** The person confirms a note the page could have forged; it is then sent with the next send. */
51
+ confirm(id, expectedVersion) {
52
+ const root = this.options.root();
53
+ const note = store.read(root, id);
54
+ if (note.delivery?.state !== 'queued')
55
+ throw invalid('This note is not waiting to be sent.');
56
+ const confirmed = store.queue(root, id, expectedVersion, note.delivery.sessionId, { autoSend: note.delivery.autoSend === true, confirmed: true });
57
+ this.changed(confirmed.delivery.sessionId, [id]);
58
+ return confirmed;
59
+ }
60
+ /** The instruction for the session's queued notes (or the given ones), for a host that runs it itself. */
61
+ compose(sessionId, ids) {
62
+ const waiting = store.queued(this.options.root(), sessionId, { ids: ids ?? null });
63
+ if (ids != null && waiting.some((note) => note.delivery?.confirm))
64
+ throw invalid('Confirm page-origin notes before composing them.');
65
+ const notes = waiting.filter((note) => note.delivery?.confirm !== true).slice(0, MAX_SEND);
66
+ if (!notes.length)
67
+ throw invalid('No confirmed notes are waiting for this session.');
68
+ return { text: compose(notes), ids: notes.map((note) => note.id) };
69
+ }
70
+ /** A host started `runId` with composed notes. */
71
+ delivered(ids, sessionId, runId) {
72
+ const sent = store.markSent(this.options.root(), ids, sessionId, runId);
73
+ this.changed(sessionId, ids);
74
+ return sent;
75
+ }
76
+ /** Sends the session's queued notes (or the given ones) as one run. */
77
+ async send(sessionId, filter = {}) {
78
+ const root = this.options.root();
79
+ const waiting = store.queued(root, sessionId, { ids: filter.ids ?? null, auto: filter.auto === true });
80
+ if (filter.ids != null && waiting.some((note) => note.delivery?.confirm))
81
+ throw invalid('Confirm page-origin notes before sending them.');
82
+ const notes = waiting.filter((note) => note.delivery?.confirm !== true).slice(0, MAX_SEND);
83
+ if (!notes.length)
84
+ return { state: 'empty', ids: [] };
85
+ const ids = notes.map((note) => note.id);
86
+ const terminals = this.options.terminals();
87
+ if (!terminals?.has(sessionId)) {
88
+ // A host's session: the host starts the run and reports it with `delivered`.
89
+ if (filter.auto)
90
+ this.options.bus.emit({ type: 'annotations.ready', sessionId, ids });
91
+ return { state: 'host', text: compose(notes), ids };
92
+ }
93
+ if (this.sending.has(sessionId))
94
+ return { state: 'busy', ids };
95
+ this.sending.add(sessionId);
96
+ try {
97
+ const { runId } = await terminals.send({ sessionId, text: compose(notes) });
98
+ store.markSent(root, ids, sessionId, runId);
99
+ this.changed(sessionId, ids);
100
+ return { state: 'sent', runId, ids };
101
+ }
102
+ catch (error) {
103
+ if (error instanceof HarnessError && error.code === 'session_busy') {
104
+ // Send it when the run ends.
105
+ for (const note of notes)
106
+ if (!note.delivery?.autoSend)
107
+ store.queue(root, note.id, undefined, sessionId, { autoSend: true });
108
+ this.changed(sessionId, ids);
109
+ return { state: 'busy', ids };
110
+ }
111
+ throw error;
112
+ }
113
+ finally {
114
+ this.sending.delete(sessionId);
115
+ }
116
+ }
117
+ /** A run of the session ended: notes waiting for it to be idle go out now. */
118
+ async runEnded(sessionId) {
119
+ if (!sessionId)
120
+ return;
121
+ if (!store.queued(this.options.root(), sessionId, { auto: true }).length)
122
+ return;
123
+ await this.send(sessionId, { auto: true });
124
+ }
125
+ markFixed(id, caller, summary) {
126
+ const note = store.markFixed(this.options.root(), id, caller, summary);
127
+ this.changed(note.delivery?.sessionId ?? null, [id]);
128
+ return note;
129
+ }
130
+ }
@@ -0,0 +1,10 @@
1
+ import type { AnnotationCapture, InspectState } from "./capture.js";
2
+ import type { NoteDeliveries, SendResult } from "./delivery.js";
3
+ import type { Note } from "./store.js";
4
+ export interface InspectStep extends Omit<InspectState, 'result'> {
5
+ note: Note | null;
6
+ send: SendResult | null;
7
+ /** What the person was told in the page. */
8
+ message: string | null;
9
+ }
10
+ export declare function inspectStep(capture: AnnotationCapture, notes: NoteDeliveries, key: string, sessionId: string | null, surface: string): Promise<InspectStep>;
@@ -0,0 +1,33 @@
1
+ // One step of the inspector loop (PROP-0018), shared by the terminal and a host: read the next
2
+ // comment from the capture target, keep it as a note, act on the button the person pressed, and
3
+ // tell them in the page what happened. Whether a send goes straight to the agent depends on where
4
+ // the comment came from, never on what the page or a client claims.
5
+ import { now } from "../core/fs.js";
6
+ function message(action, note, send, sessionId) {
7
+ if (action === 'save' || !sessionId)
8
+ return 'Annotation saved';
9
+ if (action === 'queue')
10
+ return 'Added to the agent\'s queue';
11
+ if (note.delivery?.confirm)
12
+ return 'Queued — confirm sending it in the panel';
13
+ if (send?.state === 'sent')
14
+ return 'Sent to the agent';
15
+ if (send?.state === 'busy')
16
+ return 'Queued — it goes to the agent when it finishes';
17
+ return 'Sending to the agent';
18
+ }
19
+ export async function inspectStep(capture, notes, key, sessionId, surface) {
20
+ const state = await capture.next(key);
21
+ const { result, ...rest } = state;
22
+ if (!result)
23
+ return { ...rest, note: null, send: null, message: null };
24
+ const action = sessionId ? result.action : 'save';
25
+ const { note, send } = await notes.createAndAct({
26
+ source: { url: result.url, title: result.title, capturedAt: now(), surface, representationHint: result.documentId, ...(state.app ? { app: state.app } : {}) },
27
+ target: result.target,
28
+ body: result.body
29
+ }, action, sessionId, state.trusted);
30
+ const text = message(action, note, send, sessionId);
31
+ await capture.toast(key, text).catch(() => undefined);
32
+ return { ...rest, note, send, message: text };
33
+ }
@@ -0,0 +1,6 @@
1
+ import type { Page } from 'playwright-core';
2
+ /** Evaluates `expression` (which yields a JSON string) and says whether the page could have reached it. */
3
+ export declare function evaluateIsolated(page: Page, expression: string): Promise<{
4
+ reply: unknown;
5
+ trusted: boolean;
6
+ }>;
@@ -0,0 +1,51 @@
1
+ const WORLD = 'harness-page-notes';
2
+ const worlds = new WeakMap();
3
+ const watched = new WeakSet();
4
+ async function createWorld(page) {
5
+ const cdp = await page.context().newCDPSession(page);
6
+ const { frameTree } = await cdp.send('Page.getFrameTree');
7
+ const { executionContextId } = await cdp.send('Page.createIsolatedWorld', { frameId: frameTree.frame.id, worldName: WORLD, grantUniveralAccess: false });
8
+ const world = { cdp, contextId: executionContextId };
9
+ worlds.set(page, world);
10
+ if (!watched.has(page)) {
11
+ watched.add(page);
12
+ // A new document destroys the world; the next call makes another.
13
+ page.on('framenavigated', (frame) => {
14
+ if (frame !== page.mainFrame())
15
+ return;
16
+ const old = worlds.get(page);
17
+ worlds.delete(page);
18
+ void old?.cdp.detach().catch(() => undefined);
19
+ });
20
+ }
21
+ return world;
22
+ }
23
+ /** Evaluates `expression` (which yields a JSON string) and says whether the page could have reached it. */
24
+ export async function evaluateIsolated(page, expression) {
25
+ if (typeof page.context !== 'function' || typeof page.context().newCDPSession !== 'function') {
26
+ return { reply: await page.evaluate(expression), trusted: false };
27
+ }
28
+ let lastError = null;
29
+ for (let attempt = 0; attempt < 2; attempt++) {
30
+ let world = worlds.get(page) ?? null;
31
+ try {
32
+ world ??= await createWorld(page);
33
+ const evaluated = await world.cdp.send('Runtime.evaluate', { expression, contextId: world.contextId, returnByValue: true, awaitPromise: false });
34
+ if (evaluated.exceptionDetails)
35
+ throw new Error(evaluated.exceptionDetails.text || 'The page helper failed.');
36
+ return { reply: evaluated.result?.value, trusted: true };
37
+ }
38
+ catch (error) {
39
+ lastError = error;
40
+ worlds.delete(page);
41
+ void world?.cdp.detach().catch(() => undefined);
42
+ // A context that went away with a navigation is made again once; anything else falls back.
43
+ if (attempt === 0 && /context|target closed|detached/i.test(String(error)))
44
+ continue;
45
+ break;
46
+ }
47
+ }
48
+ if (/closed/i.test(String(lastError)))
49
+ throw lastError;
50
+ return { reply: await page.evaluate(expression), trusted: false };
51
+ }
@@ -0,0 +1,28 @@
1
+ /** The helper's source. `__ARGS__` is replaced with one JSON operation; the expression evaluates to a JSON string. */
2
+ export declare const PAGE_SCRIPT: string;
3
+ export type PageOperation = {
4
+ operation: 'identity';
5
+ } | {
6
+ operation: 'begin';
7
+ kind: 'text' | 'element' | 'inspect';
8
+ captureId: string;
9
+ } | {
10
+ operation: 'capture';
11
+ captureId: string;
12
+ } | {
13
+ operation: 'next';
14
+ captureId: string;
15
+ } | {
16
+ operation: 'toast';
17
+ text: string;
18
+ } | {
19
+ operation: 'cancel';
20
+ captureId?: string;
21
+ } | {
22
+ operation: 'resolve' | 'reveal';
23
+ target: unknown;
24
+ };
25
+ /** The expression to evaluate in the page for one operation. */
26
+ export declare function pageCall(operation: PageOperation): string;
27
+ /** Reads the helper's reply, throwing its error. */
28
+ export declare function pageReply<T>(reply: unknown): T;