@songsid/agend 2.1.12 → 2.2.0-alpha.2

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 (436) hide show
  1. package/README.md +4 -2
  2. package/README.zh-TW.md +4 -2
  3. package/dist/agent-cli.js +6 -1
  4. package/dist/agent-cli.js.map +1 -1
  5. package/dist/agent-endpoint.js +68 -12
  6. package/dist/agent-endpoint.js.map +1 -1
  7. package/dist/agent-token-header.d.ts +13 -0
  8. package/dist/agent-token-header.js +16 -0
  9. package/dist/agent-token-header.js.map +1 -0
  10. package/dist/auth/one-time-code.d.ts +19 -0
  11. package/dist/auth/one-time-code.js +49 -0
  12. package/dist/auth/one-time-code.js.map +1 -0
  13. package/dist/auth-api.d.ts +52 -0
  14. package/dist/auth-api.js +346 -0
  15. package/dist/auth-api.js.map +1 -0
  16. package/dist/backend/antigravity.js +4 -3
  17. package/dist/backend/antigravity.js.map +1 -1
  18. package/dist/backend/claude-code.d.ts +4 -0
  19. package/dist/backend/claude-code.js +97 -0
  20. package/dist/backend/claude-code.js.map +1 -1
  21. package/dist/backend/codex.js +59 -30
  22. package/dist/backend/codex.js.map +1 -1
  23. package/dist/backend/grok.js +1 -1
  24. package/dist/backend/grok.js.map +1 -1
  25. package/dist/backend/kiro-agent.d.ts +66 -0
  26. package/dist/backend/kiro-agent.js +302 -0
  27. package/dist/backend/kiro-agent.js.map +1 -0
  28. package/dist/backend/kiro-identity.d.ts +80 -0
  29. package/dist/backend/kiro-identity.js +537 -0
  30. package/dist/backend/kiro-identity.js.map +1 -0
  31. package/dist/backend/kiro-v2-store-worker.d.ts +1 -0
  32. package/dist/backend/kiro-v2-store-worker.js +87 -0
  33. package/dist/backend/kiro-v2-store-worker.js.map +1 -0
  34. package/dist/backend/kiro-v2-store.d.ts +54 -0
  35. package/dist/backend/kiro-v2-store.js +131 -0
  36. package/dist/backend/kiro-v2-store.js.map +1 -0
  37. package/dist/backend/kiro-v3-identity.d.ts +5 -0
  38. package/dist/backend/kiro-v3-identity.js +22 -0
  39. package/dist/backend/kiro-v3-identity.js.map +1 -1
  40. package/dist/backend/kiro.d.ts +90 -7
  41. package/dist/backend/kiro.js +500 -124
  42. package/dist/backend/kiro.js.map +1 -1
  43. package/dist/backend/muse.js +1 -1
  44. package/dist/backend/muse.js.map +1 -1
  45. package/dist/backend/types.d.ts +51 -3
  46. package/dist/backend/types.js.map +1 -1
  47. package/dist/cache-analysis.d.ts +92 -0
  48. package/dist/cache-analysis.js +147 -0
  49. package/dist/cache-analysis.js.map +1 -0
  50. package/dist/cache-ledger.d.ts +108 -0
  51. package/dist/cache-ledger.js +230 -0
  52. package/dist/cache-ledger.js.map +1 -0
  53. package/dist/cache-prices.d.ts +32 -0
  54. package/dist/cache-prices.js +73 -0
  55. package/dist/cache-prices.js.map +1 -0
  56. package/dist/cache-scan.d.ts +39 -0
  57. package/dist/cache-scan.js +115 -0
  58. package/dist/cache-scan.js.map +1 -0
  59. package/dist/cache-service.d.ts +115 -0
  60. package/dist/cache-service.js +417 -0
  61. package/dist/cache-service.js.map +1 -0
  62. package/dist/channel/adapters/discord.d.ts +1 -0
  63. package/dist/channel/adapters/discord.js +29 -10
  64. package/dist/channel/adapters/discord.js.map +1 -1
  65. package/dist/channel/adapters/telegram.d.ts +1 -0
  66. package/dist/channel/adapters/telegram.js +13 -1
  67. package/dist/channel/adapters/telegram.js.map +1 -1
  68. package/dist/channel/types.d.ts +9 -1
  69. package/dist/classic-channel-manager.d.ts +18 -10
  70. package/dist/classic-channel-manager.js +45 -18
  71. package/dist/classic-channel-manager.js.map +1 -1
  72. package/dist/cli-entry.d.ts +19 -0
  73. package/dist/cli-entry.js +36 -0
  74. package/dist/cli-entry.js.map +1 -0
  75. package/dist/cli.js +471 -146
  76. package/dist/cli.js.map +1 -1
  77. package/dist/command-table.d.ts +5 -3
  78. package/dist/command-table.js +29 -27
  79. package/dist/command-table.js.map +1 -1
  80. package/dist/config-validator.js +46 -0
  81. package/dist/config-validator.js.map +1 -1
  82. package/dist/config.js +12 -0
  83. package/dist/config.js.map +1 -1
  84. package/dist/connection-secrets.d.ts +6 -0
  85. package/dist/connection-secrets.js +4 -0
  86. package/dist/connection-secrets.js.map +1 -1
  87. package/dist/daemon.d.ts +95 -4
  88. package/dist/daemon.js +748 -111
  89. package/dist/daemon.js.map +1 -1
  90. package/dist/darwin-memory.d.ts +6 -1
  91. package/dist/darwin-memory.js +17 -6
  92. package/dist/darwin-memory.js.map +1 -1
  93. package/dist/delivery-consumed-watch.d.ts +85 -0
  94. package/dist/delivery-consumed-watch.js +244 -0
  95. package/dist/delivery-consumed-watch.js.map +1 -0
  96. package/dist/delivery-outbox.d.ts +61 -0
  97. package/dist/delivery-outbox.js +120 -2
  98. package/dist/delivery-outbox.js.map +1 -1
  99. package/dist/delivery-reconciliation.d.ts +14 -5
  100. package/dist/delivery-reconciliation.js +27 -4
  101. package/dist/delivery-reconciliation.js.map +1 -1
  102. package/dist/delivery-reconciliation.test.js +35 -1
  103. package/dist/delivery-reconciliation.test.js.map +1 -1
  104. package/dist/event-log.d.ts +4 -1
  105. package/dist/event-log.js +6 -3
  106. package/dist/event-log.js.map +1 -1
  107. package/dist/event-loop-watch.d.ts +28 -0
  108. package/dist/event-loop-watch.js +75 -3
  109. package/dist/event-loop-watch.js.map +1 -1
  110. package/dist/fleet-context.d.ts +22 -2
  111. package/dist/fleet-control-audit.d.ts +5 -0
  112. package/dist/fleet-control-audit.js +7 -0
  113. package/dist/fleet-control-audit.js.map +1 -1
  114. package/dist/fleet-level-config.d.ts +2 -2
  115. package/dist/fleet-level-config.js +28 -1
  116. package/dist/fleet-level-config.js.map +1 -1
  117. package/dist/fleet-manager.d.ts +339 -12
  118. package/dist/fleet-manager.js +2623 -461
  119. package/dist/fleet-manager.js.map +1 -1
  120. package/dist/full-restart.js +2 -3
  121. package/dist/full-restart.js.map +1 -1
  122. package/dist/general-knowledge/skills/persona-emoji/SKILL.md +3 -1
  123. package/dist/host-memory.d.ts +4 -0
  124. package/dist/host-memory.js.map +1 -1
  125. package/dist/install-lock.d.ts +49 -0
  126. package/dist/install-lock.js +200 -0
  127. package/dist/install-lock.js.map +1 -0
  128. package/dist/instance-config-impact.js +8 -2
  129. package/dist/instance-config-impact.js.map +1 -1
  130. package/dist/instance-lifecycle.d.ts +10 -5
  131. package/dist/instance-lifecycle.js +162 -53
  132. package/dist/instance-lifecycle.js.map +1 -1
  133. package/dist/locale.js +164 -16
  134. package/dist/locale.js.map +1 -1
  135. package/dist/login-controller.d.ts +2 -0
  136. package/dist/login-controller.js +17 -5
  137. package/dist/login-controller.js.map +1 -1
  138. package/dist/memory-pressure.d.ts +7 -8
  139. package/dist/memory-pressure.js +76 -15
  140. package/dist/memory-pressure.js.map +1 -1
  141. package/dist/monotonic-budget.d.ts +2 -0
  142. package/dist/monotonic-budget.js +28 -0
  143. package/dist/monotonic-budget.js.map +1 -0
  144. package/dist/needs-you-hub.d.ts +114 -0
  145. package/dist/needs-you-hub.js +370 -0
  146. package/dist/needs-you-hub.js.map +1 -0
  147. package/dist/needs-you-live.d.ts +116 -0
  148. package/dist/needs-you-live.js +228 -0
  149. package/dist/needs-you-live.js.map +1 -0
  150. package/dist/needs-you.d.ts +132 -0
  151. package/dist/needs-you.js +164 -0
  152. package/dist/needs-you.js.map +1 -0
  153. package/dist/node-version-guard.d.ts +30 -0
  154. package/dist/node-version-guard.js +50 -0
  155. package/dist/node-version-guard.js.map +1 -0
  156. package/dist/operator-control-paths.d.ts +4 -0
  157. package/dist/operator-control-paths.js +24 -0
  158. package/dist/operator-control-paths.js.map +1 -0
  159. package/dist/outbound-handlers.d.ts +2 -0
  160. package/dist/outbound-handlers.js +9 -2
  161. package/dist/outbound-handlers.js.map +1 -1
  162. package/dist/outbound-schemas.d.ts +5 -5
  163. package/dist/outbound-schemas.js +1 -1
  164. package/dist/outbound-schemas.js.map +1 -1
  165. package/dist/package-preimage.d.ts +26 -0
  166. package/dist/package-preimage.js +96 -0
  167. package/dist/package-preimage.js.map +1 -0
  168. package/dist/profile-control.js +4 -20
  169. package/dist/profile-control.js.map +1 -1
  170. package/dist/public-web-gateway.d.ts +18 -0
  171. package/dist/public-web-gateway.js +141 -0
  172. package/dist/public-web-gateway.js.map +1 -0
  173. package/dist/public-web-link.d.ts +53 -0
  174. package/dist/public-web-link.js +175 -0
  175. package/dist/public-web-link.js.map +1 -0
  176. package/dist/quickstart-api.d.ts +8 -1
  177. package/dist/quickstart-api.js +86 -48
  178. package/dist/quickstart-api.js.map +1 -1
  179. package/dist/quickstart.d.ts +1 -0
  180. package/dist/quickstart.js +16 -6
  181. package/dist/quickstart.js.map +1 -1
  182. package/dist/restart-guard.d.ts +52 -0
  183. package/dist/restart-guard.js +109 -0
  184. package/dist/restart-guard.js.map +1 -0
  185. package/dist/scheduler/db.d.ts +7 -1
  186. package/dist/scheduler/db.js +44 -2
  187. package/dist/scheduler/db.js.map +1 -1
  188. package/dist/scheduler/index.d.ts +1 -1
  189. package/dist/scheduler/retry-label.d.ts +11 -0
  190. package/dist/scheduler/retry-label.js +24 -0
  191. package/dist/scheduler/retry-label.js.map +1 -0
  192. package/dist/scheduler/scheduler.d.ts +55 -2
  193. package/dist/scheduler/scheduler.js +220 -8
  194. package/dist/scheduler/scheduler.js.map +1 -1
  195. package/dist/scheduler/types.d.ts +22 -0
  196. package/dist/scheduler/types.js.map +1 -1
  197. package/dist/secret-store.d.ts +5 -0
  198. package/dist/secret-store.js +20 -0
  199. package/dist/secret-store.js.map +1 -1
  200. package/dist/service-activation.d.ts +152 -0
  201. package/dist/service-activation.js +407 -0
  202. package/dist/service-activation.js.map +1 -0
  203. package/dist/service-installer.d.ts +63 -1
  204. package/dist/service-installer.js +141 -16
  205. package/dist/service-installer.js.map +1 -1
  206. package/dist/service-plan.d.ts +65 -0
  207. package/dist/service-plan.js +108 -0
  208. package/dist/service-plan.js.map +1 -0
  209. package/dist/service-restart-selection.d.ts +6 -5
  210. package/dist/service-restart-selection.js +6 -5
  211. package/dist/service-restart-selection.js.map +1 -1
  212. package/dist/settings-api.d.ts +10 -2
  213. package/dist/settings-api.js +216 -72
  214. package/dist/settings-api.js.map +1 -1
  215. package/dist/settings-baseline.d.ts +20 -0
  216. package/dist/settings-baseline.js +104 -0
  217. package/dist/settings-baseline.js.map +1 -0
  218. package/dist/settings-change.d.ts +21 -0
  219. package/dist/settings-change.js +161 -0
  220. package/dist/settings-change.js.map +1 -0
  221. package/dist/settings-confirmation.d.ts +105 -0
  222. package/dist/settings-confirmation.js +232 -0
  223. package/dist/settings-confirmation.js.map +1 -0
  224. package/dist/settings-control.d.ts +41 -0
  225. package/dist/settings-control.js +294 -0
  226. package/dist/settings-control.js.map +1 -0
  227. package/dist/settings-effect.d.ts +24 -0
  228. package/dist/settings-effect.js +169 -0
  229. package/dist/settings-effect.js.map +1 -0
  230. package/dist/settings-http-confirmation.d.ts +29 -0
  231. package/dist/settings-http-confirmation.js +123 -0
  232. package/dist/settings-http-confirmation.js.map +1 -0
  233. package/dist/settings-instance-patch.d.ts +4 -0
  234. package/dist/settings-instance-patch.js +26 -0
  235. package/dist/settings-instance-patch.js.map +1 -0
  236. package/dist/settings-request-capability.d.ts +16 -0
  237. package/dist/settings-request-capability.js +32 -0
  238. package/dist/settings-request-capability.js.map +1 -0
  239. package/dist/settings-transaction.d.ts +65 -0
  240. package/dist/settings-transaction.js +223 -0
  241. package/dist/settings-transaction.js.map +1 -0
  242. package/dist/setup-auth.d.ts +10 -18
  243. package/dist/setup-auth.js +14 -38
  244. package/dist/setup-auth.js.map +1 -1
  245. package/dist/setup-form.d.ts +1 -1
  246. package/dist/setup-form.js +75 -18
  247. package/dist/setup-form.js.map +1 -1
  248. package/dist/setup-guide.d.ts +13 -0
  249. package/dist/setup-guide.js +25 -0
  250. package/dist/setup-guide.js.map +1 -0
  251. package/dist/setup-host.d.ts +16 -0
  252. package/dist/setup-host.js +199 -35
  253. package/dist/setup-host.js.map +1 -1
  254. package/dist/setup-wizard.js +5 -1
  255. package/dist/setup-wizard.js.map +1 -1
  256. package/dist/slash-authz.d.ts +17 -3
  257. package/dist/slash-authz.js +5 -0
  258. package/dist/slash-authz.js.map +1 -1
  259. package/dist/spawn-gate.js +3 -3
  260. package/dist/spawn-gate.js.map +1 -1
  261. package/dist/sqlite-open-errors.d.ts +12 -0
  262. package/dist/sqlite-open-errors.js +13 -0
  263. package/dist/sqlite-open-errors.js.map +1 -0
  264. package/dist/statusline-watcher.d.ts +5 -0
  265. package/dist/statusline-watcher.js +2 -0
  266. package/dist/statusline-watcher.js.map +1 -1
  267. package/dist/steer-capability.d.ts +6 -0
  268. package/dist/steer-capability.js +8 -0
  269. package/dist/steer-capability.js.map +1 -1
  270. package/dist/sync-work-attribution.d.ts +14 -0
  271. package/dist/sync-work-attribution.js +43 -8
  272. package/dist/sync-work-attribution.js.map +1 -1
  273. package/dist/tips.js +10 -5
  274. package/dist/tips.js.map +1 -1
  275. package/dist/tmux-control.d.ts +57 -5
  276. package/dist/tmux-control.js +379 -61
  277. package/dist/tmux-control.js.map +1 -1
  278. package/dist/tmux-manager.d.ts +20 -6
  279. package/dist/tmux-manager.js +90 -47
  280. package/dist/tmux-manager.js.map +1 -1
  281. package/dist/tmux-read.d.ts +59 -0
  282. package/dist/tmux-read.js +213 -0
  283. package/dist/tmux-read.js.map +1 -0
  284. package/dist/topic-commands.d.ts +21 -10
  285. package/dist/topic-commands.js +205 -63
  286. package/dist/topic-commands.js.map +1 -1
  287. package/dist/transcript-delta-reader.js +2 -1
  288. package/dist/transcript-delta-reader.js.map +1 -1
  289. package/dist/tunnel/cloudflared-install.d.ts +2 -0
  290. package/dist/tunnel/cloudflared-install.js +1 -1
  291. package/dist/tunnel/cloudflared-install.js.map +1 -1
  292. package/dist/tunnel/purpose-lane.d.ts +14 -0
  293. package/dist/tunnel/purpose-lane.js +43 -0
  294. package/dist/tunnel/purpose-lane.js.map +1 -0
  295. package/dist/turn-reply-guard.d.ts +2 -0
  296. package/dist/turn-reply-guard.js +10 -1
  297. package/dist/turn-reply-guard.js.map +1 -1
  298. package/dist/types.d.ts +33 -0
  299. package/dist/ui/app.html +18 -0
  300. package/dist/ui/chat-commands.js +43 -0
  301. package/dist/ui/chat-render.js +478 -0
  302. package/dist/ui/chat-store.js +318 -0
  303. package/dist/ui/chat-strings.js +89 -0
  304. package/dist/ui/chat-thread.js +246 -0
  305. package/dist/ui/chat-tour.js +116 -0
  306. package/dist/ui/fleet-cache.js +168 -0
  307. package/dist/ui/fleet-org.js +142 -0
  308. package/dist/ui/panel-chat.js +504 -0
  309. package/dist/ui/panel-fleet.js +427 -0
  310. package/dist/ui/panel-needs.js +202 -0
  311. package/dist/ui/panel-settings.js +754 -0
  312. package/dist/ui/preview-panel.js +202 -0
  313. package/dist/ui/preview.js +270 -0
  314. package/dist/ui/settings-apply.js +239 -0
  315. package/dist/ui/settings-confirm.js +186 -0
  316. package/dist/ui/settings-dialogs.js +546 -0
  317. package/dist/ui/settings-model.js +277 -0
  318. package/dist/ui/settings-strings.js +654 -0
  319. package/dist/ui/settings-wizard.js +140 -0
  320. package/dist/ui/shared/agend-auth.js +93 -0
  321. package/dist/ui/shared/app-ctx.js +80 -0
  322. package/dist/ui/shared/app-html.js +9 -0
  323. package/dist/ui/shared/app-i18n.js +95 -0
  324. package/dist/ui/shared/app-nav.js +73 -0
  325. package/dist/ui/shared/app-needs.js +114 -0
  326. package/dist/ui/shared/app-route.js +73 -0
  327. package/dist/ui/shared/app-session.js +66 -0
  328. package/dist/ui/shared/app-shell.js +346 -0
  329. package/dist/ui/shared/app-store.js +51 -0
  330. package/dist/ui/shared/app-stream.js +201 -0
  331. package/dist/ui/shared/app.css +820 -0
  332. package/dist/ui/shared/app.js +88 -0
  333. package/dist/ui/shared/fonts/OFL.txt +92 -0
  334. package/dist/ui/shared/fonts/README.md +21 -0
  335. package/dist/ui/shared/fonts/inter.woff2 +0 -0
  336. package/dist/ui/shared/htm.module.js +1 -0
  337. package/dist/ui/shared/panel-view.js +655 -0
  338. package/dist/ui/shared/preact-hooks.module.js +2 -0
  339. package/dist/ui/shared/preact.module.js +2 -0
  340. package/dist/ui/shared/signin.js +142 -0
  341. package/dist/ui/shared/theme.js +29 -0
  342. package/dist/ui/shared/tokens.css +153 -0
  343. package/dist/ui/shared/ui-confirm.js +43 -0
  344. package/dist/ui/shared/ui-dialog.js +45 -0
  345. package/dist/ui/shared/ui-icons.js +63 -0
  346. package/dist/ui/shared/ui-menu.js +39 -0
  347. package/dist/ui/shared/ui-states.js +20 -0
  348. package/dist/ui/shared/ui-toast.js +18 -0
  349. package/dist/ui/shared/vendor/htm.LICENSE +202 -0
  350. package/dist/ui/shared/vendor/preact.LICENSE +21 -0
  351. package/dist/ui/shared/vendor/vendor.json +39 -0
  352. package/dist/ui/shared/view-strings.js +309 -0
  353. package/dist/ui/signin.html +52 -0
  354. package/dist/update-check.d.ts +6 -2
  355. package/dist/update-check.js +12 -3
  356. package/dist/update-check.js.map +1 -1
  357. package/dist/update-dispatch.d.ts +28 -0
  358. package/dist/update-dispatch.js +73 -0
  359. package/dist/update-dispatch.js.map +1 -0
  360. package/dist/update-install.d.ts +129 -0
  361. package/dist/update-install.js +262 -0
  362. package/dist/update-install.js.map +1 -0
  363. package/dist/upgrade-notices.d.ts +17 -0
  364. package/dist/upgrade-notices.js +93 -0
  365. package/dist/upgrade-notices.js.map +1 -0
  366. package/dist/usage/statusline-usage.d.ts +2 -0
  367. package/dist/usage/statusline-usage.js +14 -10
  368. package/dist/usage/statusline-usage.js.map +1 -1
  369. package/dist/view-api.d.ts +6 -1
  370. package/dist/view-api.js +62 -51
  371. package/dist/view-api.js.map +1 -1
  372. package/dist/web-api.d.ts +85 -14
  373. package/dist/web-api.js +557 -77
  374. package/dist/web-api.js.map +1 -1
  375. package/dist/web-auth.d.ts +71 -27
  376. package/dist/web-auth.js +169 -69
  377. package/dist/web-auth.js.map +1 -1
  378. package/dist/web-body.d.ts +3 -0
  379. package/dist/web-body.js +55 -0
  380. package/dist/web-body.js.map +1 -0
  381. package/dist/web-channel-echo.d.ts +9 -0
  382. package/dist/web-channel-echo.js +55 -0
  383. package/dist/web-channel-echo.js.map +1 -0
  384. package/dist/web-chat-history.d.ts +125 -0
  385. package/dist/web-chat-history.js +184 -0
  386. package/dist/web-chat-history.js.map +1 -0
  387. package/dist/web-commands.d.ts +77 -0
  388. package/dist/web-commands.js +81 -0
  389. package/dist/web-commands.js.map +1 -0
  390. package/dist/web-continuation.d.ts +7 -0
  391. package/dist/web-continuation.js +22 -0
  392. package/dist/web-continuation.js.map +1 -0
  393. package/dist/web-host-guard.d.ts +34 -0
  394. package/dist/web-host-guard.js +57 -1
  395. package/dist/web-host-guard.js.map +1 -1
  396. package/dist/web-login.d.ts +72 -0
  397. package/dist/web-login.js +132 -0
  398. package/dist/web-login.js.map +1 -0
  399. package/dist/web-org.d.ts +55 -0
  400. package/dist/web-org.js +67 -0
  401. package/dist/web-org.js.map +1 -0
  402. package/dist/web-preview.d.ts +77 -0
  403. package/dist/web-preview.js +240 -0
  404. package/dist/web-preview.js.map +1 -0
  405. package/dist/web-request-context.d.ts +10 -0
  406. package/dist/web-request-context.js +13 -0
  407. package/dist/web-request-context.js.map +1 -0
  408. package/dist/web-session.d.ts +167 -0
  409. package/dist/web-session.js +389 -0
  410. package/dist/web-session.js.map +1 -0
  411. package/dist/web-shell-routes.d.ts +59 -0
  412. package/dist/web-shell-routes.js +96 -0
  413. package/dist/web-shell-routes.js.map +1 -0
  414. package/dist/web-upload.d.ts +183 -0
  415. package/dist/web-upload.js +468 -0
  416. package/dist/web-upload.js.map +1 -0
  417. package/dist/website-tips-renderer.d.ts +2 -2
  418. package/dist/website-tips-renderer.js +3 -3
  419. package/dist/website-tips-renderer.js.map +1 -1
  420. package/launcher/agend +110 -0
  421. package/launcher/agend-agent +110 -0
  422. package/launcher/agend-agent.cjs +4 -0
  423. package/launcher/agend.cjs +4 -0
  424. package/launcher/install-admission.cjs +105 -0
  425. package/launcher/launch.cjs +64 -0
  426. package/launcher/postinstall.cjs +114 -0
  427. package/launcher/run-in-process.cjs +13 -0
  428. package/launcher/runtime-platform.cjs +86 -0
  429. package/launcher/runtime-select.cjs +217 -0
  430. package/package.json +18 -7
  431. package/scripts/preinstall-guard.cjs +55 -0
  432. package/templates/launchd.plist.ejs +2 -2
  433. package/templates/systemd.service.ejs +1 -1
  434. package/dist/ui/dashboard.html +0 -774
  435. package/dist/ui/settings.html +0 -2165
  436. package/dist/ui/view.html +0 -1139
@@ -0,0 +1,213 @@
1
+ import { execFile } from "node:child_process";
2
+ import { measureSyncWork } from "./sync-work-attribution.js";
3
+ export const TMUX_READ_MAX_BYTES = 1024 * 1024;
4
+ export const TMUX_READ_QUEUE_LIMIT = 256;
5
+ export const TMUX_CONTROL_ATTEMPT_MS = 2_000;
6
+ export const TMUX_FALLBACK_CHILDREN = 2;
7
+ export class TmuxReadError extends Error {
8
+ kind;
9
+ code;
10
+ constructor(kind, message, cause) {
11
+ super(message, { cause });
12
+ this.kind = kind;
13
+ const code = cause?.code;
14
+ if (typeof code === "string" || typeof code === "number")
15
+ this.code = code;
16
+ }
17
+ }
18
+ /** Only an ordinary nonzero exit is a semantic tmux command failure. */
19
+ function fallbackReadError(error) {
20
+ const detail = error;
21
+ const kind = detail?.code === "ERR_CHILD_PROCESS_STDIO_MAXBUFFER" ? "limit"
22
+ : detail?.killed ? "timeout"
23
+ : typeof detail?.code === "number" && detail.code !== 0 && !detail.signal ? "command" : "transport";
24
+ return new TmuxReadError(kind, "tmux fallback read failed", error);
25
+ }
26
+ export function tmuxReadArgs(query) {
27
+ const target = "window" in query ? `${query.session}:${query.window}` : query.session;
28
+ if (/[\x00-\x1f\x7f]/u.test(target))
29
+ throw new TmuxReadError("command", "Invalid tmux read target");
30
+ switch (query.kind) {
31
+ case "windows": return ["list-windows", "-t", target, "-F", "#{window_id}|||#{window_name}"];
32
+ case "pane": return ["list-panes", "-t", target, "-F", {
33
+ id: "#{pane_id}", status: "#{pane_dead} #{pane_dead_status}", pid: "#{pane_pid}",
34
+ }[query.field]];
35
+ case "tty": return ["display-message", "-p", "-t", target, "#{pane_tty}"];
36
+ case "capture": {
37
+ const args = ["capture-pane", "-t", target, "-p"];
38
+ if (query.joined)
39
+ args.push("-J");
40
+ if (query.history !== undefined) {
41
+ if (!Number.isSafeInteger(query.history))
42
+ throw new TmuxReadError("command", "Invalid tmux history size");
43
+ args.push("-S", `-${query.history}`);
44
+ }
45
+ return args;
46
+ }
47
+ }
48
+ }
49
+ /** tmux's command lexer, not a shell: quoted parts concatenate into one token. */
50
+ export function tmuxCommandToken(value) {
51
+ if (/[\x00-\x1f\x7f]/u.test(value))
52
+ throw new TmuxReadError("command", "Invalid tmux command token");
53
+ return `'${value.replace(/'/g, "'\\''")}'`;
54
+ }
55
+ function killReadChild(child) {
56
+ try {
57
+ child?.kill();
58
+ }
59
+ catch { /* physical ownership still waits for exit */ }
60
+ }
61
+ /** One logical FIFO shared by control and fallback; physical children can outlive a job. */
62
+ export class TmuxReadLane {
63
+ socket;
64
+ control;
65
+ jobs = [];
66
+ active = null;
67
+ physical = new Set();
68
+ stopped = false;
69
+ lifetime = 0;
70
+ constructor(socket, control) {
71
+ this.socket = socket;
72
+ this.control = control;
73
+ }
74
+ start() { this.stopped = false; }
75
+ wake() { this.pump(); }
76
+ stop() {
77
+ this.stopped = true;
78
+ this.lifetime++;
79
+ for (const job of [this.active, ...this.jobs]) {
80
+ if (job)
81
+ this.finish(job, new TmuxReadError("stopped", "tmux read client stopped"));
82
+ }
83
+ for (const job of this.physical)
84
+ killReadChild(job.child);
85
+ }
86
+ read(args, timeoutMs) {
87
+ if (this.stopped)
88
+ return Promise.reject(new TmuxReadError("stopped", "tmux read client stopped"));
89
+ if (!Number.isFinite(timeoutMs) || timeoutMs <= 0)
90
+ return Promise.reject(new TmuxReadError("timeout", "tmux read deadline expired"));
91
+ if (this.jobs.length + Number(this.active !== null) >= TMUX_READ_QUEUE_LIMIT) {
92
+ return Promise.reject(new TmuxReadError("limit", "tmux read queue full"));
93
+ }
94
+ return new Promise((resolve, reject) => {
95
+ const job = {
96
+ args, deadline: performance.now() + timeoutMs, lifetime: this.lifetime, resolve, reject, done: false,
97
+ };
98
+ job.timer = setTimeout(() => {
99
+ if (this.active === job && !job.child)
100
+ this.control.retire();
101
+ killReadChild(job.child);
102
+ this.finish(job, new TmuxReadError("timeout", "tmux read deadline expired"));
103
+ }, Math.max(1, Math.floor(timeoutMs)));
104
+ this.jobs.push(job);
105
+ this.pump();
106
+ });
107
+ }
108
+ current(job) {
109
+ return !job.done && !this.stopped && job.lifetime === this.lifetime && performance.now() < job.deadline;
110
+ }
111
+ finish(job, error, output = "") {
112
+ if (job.done)
113
+ return;
114
+ job.done = true;
115
+ clearTimeout(job.timer);
116
+ this.jobs = this.jobs.filter(item => item !== job);
117
+ if (this.active === job)
118
+ this.active = null;
119
+ if (error)
120
+ job.reject(error);
121
+ else
122
+ job.resolve(output);
123
+ this.pump();
124
+ }
125
+ pump() {
126
+ if (this.stopped || this.active)
127
+ return;
128
+ const job = this.jobs[0];
129
+ if (!job)
130
+ return;
131
+ if (!this.current(job)) {
132
+ this.finish(job, new TmuxReadError("timeout", "tmux read deadline expired"));
133
+ return;
134
+ }
135
+ if (!this.control.ready() && this.physical.size >= TMUX_FALLBACK_CHILDREN)
136
+ return;
137
+ this.jobs.shift();
138
+ this.active = job;
139
+ void this.run(job);
140
+ }
141
+ async run(job) {
142
+ if (this.control.ready()) {
143
+ try {
144
+ const remaining = job.deadline - performance.now();
145
+ const attempt = performance.now() + Math.min(TMUX_CONTROL_ATTEMPT_MS, remaining / 2);
146
+ const result = await this.control.execute(job.args, attempt);
147
+ if (!this.current(job))
148
+ throw new TmuxReadError("timeout", "tmux read deadline expired");
149
+ this.finish(job, undefined, result);
150
+ return;
151
+ }
152
+ catch (error) {
153
+ if (job.done)
154
+ return;
155
+ if (!(error instanceof TmuxReadError) || error.kind !== "transport") {
156
+ this.finish(job, error);
157
+ return;
158
+ }
159
+ }
160
+ }
161
+ if (!this.current(job)) {
162
+ this.finish(job, new TmuxReadError("timeout", "tmux read deadline expired"));
163
+ return;
164
+ }
165
+ // A timed-out fallback child keeps its physical slot until actual exit.
166
+ if (this.physical.size >= TMUX_FALLBACK_CHILDREN) {
167
+ this.active = null;
168
+ this.jobs.unshift(job);
169
+ return;
170
+ }
171
+ this.physical.add(job);
172
+ const release = () => { if (this.physical.delete(job))
173
+ this.pump(); };
174
+ let spawnReturned = false;
175
+ let callbackError;
176
+ try {
177
+ const args = this.socket ? ["-L", this.socket, ...job.args] : job.args;
178
+ const child = measureSyncWork("tmux.spawn", () => execFile("tmux", args, {
179
+ timeout: Math.max(1, Math.floor(job.deadline - performance.now())), maxBuffer: TMUX_READ_MAX_BYTES,
180
+ }, (error, stdout) => {
181
+ // Node can invoke this callback on error before a live child exits
182
+ // (e.g. kill EPERM). It settles the read, not physical ownership.
183
+ callbackError = error;
184
+ if (spawnReturned && error && job.child?.pid === undefined)
185
+ release();
186
+ if (job.done)
187
+ return;
188
+ if (!this.current(job))
189
+ this.finish(job, new TmuxReadError("timeout", "tmux read deadline expired"));
190
+ else
191
+ this.finish(job, error ? fallbackReadError(error) : undefined, String(stdout));
192
+ }));
193
+ job.child = child;
194
+ spawnReturned = true;
195
+ child?.once("exit", release);
196
+ child?.once("close", release);
197
+ child?.once("error", () => { if (child.pid === undefined)
198
+ release(); });
199
+ // Native execFile always returns a ChildProcess. The no-child branch
200
+ // also permits inert test doubles; a failed spawn has no process to own.
201
+ if (!child || (callbackError && child.pid === undefined))
202
+ release();
203
+ if (job.done && this.physical.has(job))
204
+ killReadChild(child);
205
+ }
206
+ catch (error) {
207
+ if (!spawnReturned || job.child?.pid === undefined)
208
+ release();
209
+ this.finish(job, fallbackReadError(error));
210
+ }
211
+ }
212
+ }
213
+ //# sourceMappingURL=tmux-read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tmux-read.js","sourceRoot":"","sources":["../src/tmux-read.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,8 @@ export { parseContextPercent, parseTokenContextRatio } from "./context-percent.j
7
7
  export type { TokenContextRatio } from "./context-percent.js";
8
8
  type ExecutionFleetContext = FleetContext & {
9
9
  getInstanceExecutionState?(instanceName: string): "idle" | "working" | "stuck" | null;
10
+ /** The running launch's own steer capability (CliBackend.supportsSteer, #1405); undefined when it has none to give. */
11
+ instanceLaunchSupportsSteer?(instanceName: string): boolean | undefined;
10
12
  };
11
13
  /** Sanitize a directory name into a valid instance name. Keeps Unicode letters (incl. CJK). */
12
14
  export declare function sanitizeInstanceName(name: string): string;
@@ -174,6 +176,18 @@ export declare class TopicCommands {
174
176
  private ctx;
175
177
  constructor(ctx: ExecutionFleetContext);
176
178
  /** Get the adapter that should reply to a given inbound message */
179
+ /**
180
+ * #754: who may run a typed Telegram command is decided by the command table — the same rule a Discord slash
181
+ * command goes through (`decideCommand`), here with its Telegram column — before any handler runs. `msg.adapterId`
182
+ * is the topic's owning adapter (ownedCopy), so the admin it asks about is that bot's. A command the table does not
183
+ * know (`/raw`) or does not handle here (a passthrough cell) is left to the handlers below. `command` is what the
184
+ * dispatcher recognized (GENERAL_FORMS / INSTANCE_FORMS), so the table judges exactly what would run.
185
+ *
186
+ * Synchronous on purpose (#1399 review): the decision, the handler's own checks and the command's effect run in one
187
+ * stretch, so the instance cannot be rebound to another bot between the check and the act. The refusal, if any.
188
+ */
189
+ private tableRefusal;
190
+ private sendRefusal;
177
191
  private getReplyAdapter;
178
192
  /**
179
193
  * #1346: keep only the owning adapter's copy. When several bots share a
@@ -189,17 +203,13 @@ export declare class TopicCommands {
189
203
  /** Parse and dispatch commands from the General topic */
190
204
  handleGeneralCommand(msg: InboundMessage, instanceName?: string): Promise<boolean>;
191
205
  /**
192
- * Build the dashboard URL text (View / Settings / Web UI). The Settings/Web UI
193
- * URLs carry the web token; when `htmlSpoiler` is set they're wrapped in a
194
- * Telegram HTML spoiler (`<tg-spoiler>`) so the token isn't shown in the clear
195
- * in a shared topic (the caller must send with format: "html"). /view is
196
- * public, so it's never spoilered. DC uses the plain form (ephemeral reply).
206
+ * Pure, secret-free dashboard/menu copy. Issuance belongs to the private
207
+ * delivery action; rendering or previewing this text cannot retire a code.
197
208
  */
198
- getDashboardText(htmlSpoiler?: boolean): string;
209
+ getDashboardText(_htmlSpoiler?: boolean, showRemoteHint?: boolean): string;
199
210
  /**
200
- * /dashboard (TG): admin-only. Replies directly in the topic; the token-
201
- * bearing URLs are wrapped in a Telegram HTML spoiler so they aren't shown in
202
- * the clear (the adapter supports plain/HTML, not MarkdownV2's `||…||`).
211
+ * /dashboard (TG): admin-only menu in General; codes are sent privately.
212
+ * `/dashboard revoke` also closes the public link and signs browsers out.
203
213
  */
204
214
  private handleDashboardCommand;
205
215
  /** Handle /ctx or /compact in any instance topic — returns true if handled */
@@ -249,7 +259,8 @@ export declare class TopicCommands {
249
259
  * Backends whose TUI accepts a busy-pane paste as steering input,
250
260
  * live-verified: claude-code and codex buffer-then-submit at the turn
251
261
  * boundary, grok accepts it in its input line. kiro's legacy TUI swallows
252
- * the paste outright, and opencode/antigravity are unverified — for those
262
+ * the paste outright; its TUI front-ends steer, so kiro answers per launch
263
+ * (#1405). opencode/antigravity are unverified — for those
253
264
  * the user gets an honest "not supported" instead of a silent queue
254
265
  * fallback that looks like a steer but behaves like a normal message.
255
266
  */