@songsid/agend 2.2.0-beta.1 → 2.2.0-beta.11

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 (401) hide show
  1. package/README.md +1 -1
  2. package/README.zh-TW.md +1 -1
  3. package/dist/agent-cli-instructions.md +16 -9
  4. package/dist/agent-cli.js +15 -7
  5. package/dist/agent-cli.js.map +1 -1
  6. package/dist/agent-endpoint.js +24 -9
  7. package/dist/agent-endpoint.js.map +1 -1
  8. package/dist/agent-whats-new.d.ts +47 -0
  9. package/dist/agent-whats-new.js +147 -0
  10. package/dist/agent-whats-new.js.map +1 -0
  11. package/dist/auth-api.d.ts +5 -3
  12. package/dist/auth-api.js +19 -3
  13. package/dist/auth-api.js.map +1 -1
  14. package/dist/backend/antigravity.d.ts +8 -0
  15. package/dist/backend/antigravity.js +32 -9
  16. package/dist/backend/antigravity.js.map +1 -1
  17. package/dist/backend/claude-carry.d.ts +22 -0
  18. package/dist/backend/claude-carry.js +170 -0
  19. package/dist/backend/claude-carry.js.map +1 -0
  20. package/dist/backend/claude-code.d.ts +65 -2
  21. package/dist/backend/claude-code.js +226 -33
  22. package/dist/backend/claude-code.js.map +1 -1
  23. package/dist/backend/codex-metadata.d.ts +33 -0
  24. package/dist/backend/codex-metadata.js +122 -18
  25. package/dist/backend/codex-metadata.js.map +1 -1
  26. package/dist/backend/codex.d.ts +3 -0
  27. package/dist/backend/codex.js +17 -1
  28. package/dist/backend/codex.js.map +1 -1
  29. package/dist/backend/credential-profile.d.ts +40 -3
  30. package/dist/backend/credential-profile.js +113 -5
  31. package/dist/backend/credential-profile.js.map +1 -1
  32. package/dist/backend/effort-metadata.d.ts +37 -1
  33. package/dist/backend/effort-metadata.js +86 -15
  34. package/dist/backend/effort-metadata.js.map +1 -1
  35. package/dist/backend/grok.d.ts +4 -0
  36. package/dist/backend/grok.js +14 -0
  37. package/dist/backend/grok.js.map +1 -1
  38. package/dist/backend/kiro-engine-ledger.d.ts +5 -0
  39. package/dist/backend/kiro-engine-ledger.js +20 -0
  40. package/dist/backend/kiro-engine-ledger.js.map +1 -1
  41. package/dist/backend/kiro-identity.d.ts +6 -0
  42. package/dist/backend/kiro-identity.js +19 -5
  43. package/dist/backend/kiro-identity.js.map +1 -1
  44. package/dist/backend/kiro.d.ts +39 -3
  45. package/dist/backend/kiro.js +143 -19
  46. package/dist/backend/kiro.js.map +1 -1
  47. package/dist/backend/launch-effort.d.ts +61 -0
  48. package/dist/backend/launch-effort.js +170 -0
  49. package/dist/backend/launch-effort.js.map +1 -0
  50. package/dist/backend/muse.d.ts +84 -0
  51. package/dist/backend/muse.js +449 -53
  52. package/dist/backend/muse.js.map +1 -1
  53. package/dist/backend/types.d.ts +47 -4
  54. package/dist/backend/types.js +12 -1
  55. package/dist/backend/types.js.map +1 -1
  56. package/dist/backend-command.d.ts +91 -0
  57. package/dist/backend-command.js +122 -0
  58. package/dist/backend-command.js.map +1 -0
  59. package/dist/background-work-ended.d.ts +18 -0
  60. package/dist/background-work-ended.js +30 -0
  61. package/dist/background-work-ended.js.map +1 -0
  62. package/dist/cache-service.d.ts +2 -0
  63. package/dist/cache-service.js +2 -1
  64. package/dist/cache-service.js.map +1 -1
  65. package/dist/channel/adapters/discord.d.ts +36 -1
  66. package/dist/channel/adapters/discord.js +126 -4
  67. package/dist/channel/adapters/discord.js.map +1 -1
  68. package/dist/channel/adapters/telegram.d.ts +42 -2
  69. package/dist/channel/adapters/telegram.js +142 -23
  70. package/dist/channel/adapters/telegram.js.map +1 -1
  71. package/dist/channel/mcp-server.js +9 -1
  72. package/dist/channel/mcp-server.js.map +1 -1
  73. package/dist/channel/mcp-tools.d.ts +11 -0
  74. package/dist/channel/mcp-tools.js +26 -13
  75. package/dist/channel/mcp-tools.js.map +1 -1
  76. package/dist/channel/message-edit-errors.d.ts +5 -0
  77. package/dist/channel/message-edit-errors.js +24 -0
  78. package/dist/channel/message-edit-errors.js.map +1 -0
  79. package/dist/channel/telegram-markdown.d.ts +6 -0
  80. package/dist/channel/telegram-markdown.js +104 -0
  81. package/dist/channel/telegram-markdown.js.map +1 -0
  82. package/dist/channel/tool-router.d.ts +2 -0
  83. package/dist/channel/tool-router.js +10 -4
  84. package/dist/channel/tool-router.js.map +1 -1
  85. package/dist/channel/types.d.ts +55 -3
  86. package/dist/cli.js +167 -39
  87. package/dist/cli.js.map +1 -1
  88. package/dist/command-table.d.ts +2 -2
  89. package/dist/command-table.js +6 -3
  90. package/dist/command-table.js.map +1 -1
  91. package/dist/config-validator.js +59 -0
  92. package/dist/config-validator.js.map +1 -1
  93. package/dist/cross-instance-envelope.d.ts +15 -2
  94. package/dist/cross-instance-envelope.js +29 -5
  95. package/dist/cross-instance-envelope.js.map +1 -1
  96. package/dist/daemon.d.ts +156 -1
  97. package/dist/daemon.js +773 -89
  98. package/dist/daemon.js.map +1 -1
  99. package/dist/delivery-outbox.d.ts +70 -8
  100. package/dist/delivery-outbox.js +315 -24
  101. package/dist/delivery-outbox.js.map +1 -1
  102. package/dist/delivery-reconciliation.d.ts +18 -1
  103. package/dist/delivery-reconciliation.js +67 -2
  104. package/dist/delivery-reconciliation.js.map +1 -1
  105. package/dist/fleet-context.d.ts +10 -1
  106. package/dist/fleet-manager.d.ts +404 -13
  107. package/dist/fleet-manager.js +2039 -210
  108. package/dist/fleet-manager.js.map +1 -1
  109. package/dist/general-knowledge/skills/backend-providers/SKILL.md +1 -1
  110. package/dist/general-knowledge/skills/credential-profiles/SKILL.md +92 -21
  111. package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +27 -3
  112. package/dist/general-knowledge/skills/delegation-playbook/SKILL.md +8 -8
  113. package/dist/general-knowledge/skills/fleet-config/SKILL.md +5 -5
  114. package/dist/general-knowledge/skills/fleet-health/SKILL.md +4 -4
  115. package/dist/general-knowledge/skills/fleet-restart/SKILL.md +13 -13
  116. package/dist/general-knowledge/skills/instance-lifecycle/SKILL.md +3 -2
  117. package/dist/general-knowledge/skills/kiro-engine-migration/SKILL.md +6 -0
  118. package/dist/general-knowledge/skills/model-discovery/SKILL.md +12 -9
  119. package/dist/general-knowledge/skills/multi-channel/SKILL.md +8 -2
  120. package/dist/general-knowledge/skills/scheduling/SKILL.md +5 -3
  121. package/dist/general-knowledge/skills/session-management/SKILL.md +6 -5
  122. package/dist/general-knowledge/skills/tui-effort/SKILL.md +2 -2
  123. package/dist/general-knowledge/skills/worker-collaboration/SKILL.md +8 -3
  124. package/dist/general-knowledge/steering/core-rules.md +8 -7
  125. package/dist/host-memory.d.ts +10 -0
  126. package/dist/host-memory.js +33 -1
  127. package/dist/host-memory.js.map +1 -1
  128. package/dist/human-delivery-receipts.d.ts +83 -0
  129. package/dist/human-delivery-receipts.js +194 -0
  130. package/dist/human-delivery-receipts.js.map +1 -0
  131. package/dist/instance-avatar.d.ts +36 -0
  132. package/dist/instance-avatar.js +57 -0
  133. package/dist/instance-avatar.js.map +1 -0
  134. package/dist/instance-config-impact.js +6 -0
  135. package/dist/instance-config-impact.js.map +1 -1
  136. package/dist/instance-lifecycle.d.ts +29 -6
  137. package/dist/instance-lifecycle.js +79 -28
  138. package/dist/instance-lifecycle.js.map +1 -1
  139. package/dist/instructions.d.ts +3 -1
  140. package/dist/instructions.js +11 -8
  141. package/dist/instructions.js.map +1 -1
  142. package/dist/kiro-log-gate.d.ts +42 -0
  143. package/dist/kiro-log-gate.js +39 -0
  144. package/dist/kiro-log-gate.js.map +1 -0
  145. package/dist/locale.js +226 -44
  146. package/dist/locale.js.map +1 -1
  147. package/dist/log-service.d.ts +99 -0
  148. package/dist/log-service.js +243 -0
  149. package/dist/log-service.js.map +1 -0
  150. package/dist/log-steps.d.ts +169 -0
  151. package/dist/log-steps.js +858 -0
  152. package/dist/log-steps.js.map +1 -0
  153. package/dist/login-controller.d.ts +20 -3
  154. package/dist/login-controller.js +71 -19
  155. package/dist/login-controller.js.map +1 -1
  156. package/dist/login-flows.d.ts +5 -2
  157. package/dist/login-flows.js +5 -4
  158. package/dist/login-flows.js.map +1 -1
  159. package/dist/memory-pressure.d.ts +13 -1
  160. package/dist/memory-pressure.js +50 -10
  161. package/dist/memory-pressure.js.map +1 -1
  162. package/dist/needs-you-hub.js +2 -0
  163. package/dist/needs-you-hub.js.map +1 -1
  164. package/dist/needs-you-live.d.ts +6 -0
  165. package/dist/needs-you-live.js +23 -3
  166. package/dist/needs-you-live.js.map +1 -1
  167. package/dist/next-steps.js +1 -1
  168. package/dist/next-steps.js.map +1 -1
  169. package/dist/outbound-handlers.d.ts +100 -0
  170. package/dist/outbound-handlers.js +284 -97
  171. package/dist/outbound-handlers.js.map +1 -1
  172. package/dist/outbound-schemas.d.ts +38 -15
  173. package/dist/outbound-schemas.js +36 -8
  174. package/dist/outbound-schemas.js.map +1 -1
  175. package/dist/public-link-progress.d.ts +1 -1
  176. package/dist/public-link-progress.js +8 -2
  177. package/dist/public-link-progress.js.map +1 -1
  178. package/dist/public-preview.d.ts +101 -0
  179. package/dist/public-preview.js +236 -0
  180. package/dist/public-preview.js.map +1 -0
  181. package/dist/public-web-gateway.js +14 -4
  182. package/dist/public-web-gateway.js.map +1 -1
  183. package/dist/public-web-link.d.ts +24 -1
  184. package/dist/public-web-link.js +63 -9
  185. package/dist/public-web-link.js.map +1 -1
  186. package/dist/reply-buttons-controller.d.ts +89 -5
  187. package/dist/reply-buttons-controller.js +273 -8
  188. package/dist/reply-buttons-controller.js.map +1 -1
  189. package/dist/reply-buttons.d.ts +48 -3
  190. package/dist/reply-buttons.js +105 -10
  191. package/dist/reply-buttons.js.map +1 -1
  192. package/dist/reply-polls.d.ts +85 -0
  193. package/dist/reply-polls.js +154 -0
  194. package/dist/reply-polls.js.map +1 -0
  195. package/dist/restart-guard.d.ts +6 -3
  196. package/dist/restart-guard.js +6 -3
  197. package/dist/restart-guard.js.map +1 -1
  198. package/dist/restart-progress.d.ts +33 -0
  199. package/dist/restart-progress.js +30 -0
  200. package/dist/restart-progress.js.map +1 -1
  201. package/dist/service-activation.d.ts +15 -7
  202. package/dist/service-activation.js +46 -29
  203. package/dist/service-activation.js.map +1 -1
  204. package/dist/service-installer.d.ts +31 -0
  205. package/dist/service-installer.js +41 -2
  206. package/dist/service-installer.js.map +1 -1
  207. package/dist/settings-api.js +85 -25
  208. package/dist/settings-api.js.map +1 -1
  209. package/dist/settings-change.js +72 -1
  210. package/dist/settings-change.js.map +1 -1
  211. package/dist/settings-effect.js +28 -4
  212. package/dist/settings-effect.js.map +1 -1
  213. package/dist/settings-http-confirmation.js +7 -0
  214. package/dist/settings-http-confirmation.js.map +1 -1
  215. package/dist/setup-form.d.ts +1 -1
  216. package/dist/setup-form.js +1 -1
  217. package/dist/spawn-gate.js +5 -1
  218. package/dist/spawn-gate.js.map +1 -1
  219. package/dist/spawn-hold-reply.d.ts +12 -0
  220. package/dist/spawn-hold-reply.js +39 -0
  221. package/dist/spawn-hold-reply.js.map +1 -0
  222. package/dist/status-emojis.d.ts +10 -3
  223. package/dist/status-emojis.js +11 -2
  224. package/dist/status-emojis.js.map +1 -1
  225. package/dist/systemd-peer-bus.d.ts +95 -0
  226. package/dist/systemd-peer-bus.js +430 -0
  227. package/dist/systemd-peer-bus.js.map +1 -0
  228. package/dist/systemd-runtime.d.ts +27 -1
  229. package/dist/systemd-runtime.js +69 -7
  230. package/dist/systemd-runtime.js.map +1 -1
  231. package/dist/tips.js +4 -4
  232. package/dist/tips.js.map +1 -1
  233. package/dist/tool-permissions.js +3 -3
  234. package/dist/tool-permissions.js.map +1 -1
  235. package/dist/tool-progress.js +3 -2
  236. package/dist/tool-progress.js.map +1 -1
  237. package/dist/topic-commands.d.ts +42 -2
  238. package/dist/topic-commands.js +101 -11
  239. package/dist/topic-commands.js.map +1 -1
  240. package/dist/transcript-delta-reader.d.ts +3 -3
  241. package/dist/transcript-delta-reader.js +8 -8
  242. package/dist/transcript-delta-reader.js.map +1 -1
  243. package/dist/transcript-jsonl.d.ts +80 -3
  244. package/dist/transcript-jsonl.js +147 -10
  245. package/dist/transcript-jsonl.js.map +1 -1
  246. package/dist/transcript-monitor.d.ts +19 -0
  247. package/dist/transcript-monitor.js +87 -15
  248. package/dist/transcript-monitor.js.map +1 -1
  249. package/dist/transcript-sources.d.ts +78 -0
  250. package/dist/transcript-sources.js +375 -64
  251. package/dist/transcript-sources.js.map +1 -1
  252. package/dist/transcript-turns.d.ts +15 -2
  253. package/dist/transcript-turns.js +15 -2
  254. package/dist/transcript-turns.js.map +1 -1
  255. package/dist/tunnel/cloudflared.d.ts +7 -15
  256. package/dist/tunnel/cloudflared.js +36 -1
  257. package/dist/tunnel/cloudflared.js.map +1 -1
  258. package/dist/tunnel/purpose-lane.d.ts +5 -1
  259. package/dist/tunnel/purpose-lane.js +14 -7
  260. package/dist/tunnel/purpose-lane.js.map +1 -1
  261. package/dist/tunnel/types.d.ts +5 -1
  262. package/dist/tunnel/types.js.map +1 -1
  263. package/dist/turn-resume.d.ts +2 -0
  264. package/dist/turn-resume.js +1 -1
  265. package/dist/turn-resume.js.map +1 -1
  266. package/dist/types.d.ts +25 -0
  267. package/dist/ui/chat-commands.js +1 -0
  268. package/dist/ui/chat-emojis.js +33 -0
  269. package/dist/ui/chat-mentions.js +63 -0
  270. package/dist/ui/chat-render.js +61 -4
  271. package/dist/ui/chat-store.js +37 -3
  272. package/dist/ui/chat-strings.js +40 -20
  273. package/dist/ui/chat-thread.js +111 -12
  274. package/dist/ui/chat-time.js +80 -0
  275. package/dist/ui/panel-chat.js +41 -10
  276. package/dist/ui/panel-details.js +2 -0
  277. package/dist/ui/panel-fleet.js +199 -57
  278. package/dist/ui/panel-log.js +428 -0
  279. package/dist/ui/panel-needs.js +6 -2
  280. package/dist/ui/panel-settings.js +184 -32
  281. package/dist/ui/preview-panel.js +55 -15
  282. package/dist/ui/preview-status.js +28 -0
  283. package/dist/ui/preview.js +44 -3
  284. package/dist/ui/settings-dialogs.js +7 -2
  285. package/dist/ui/settings-model.js +2 -1
  286. package/dist/ui/settings-strings.js +56 -4
  287. package/dist/ui/settings-token.js +1 -1
  288. package/dist/ui/shared/app-i18n.js +43 -17
  289. package/dist/ui/shared/app-prefs.js +250 -0
  290. package/dist/ui/shared/app-route.js +7 -2
  291. package/dist/ui/shared/app-shell.js +165 -8
  292. package/dist/ui/shared/app-store.js +5 -1
  293. package/dist/ui/shared/app-stream.js +26 -5
  294. package/dist/ui/shared/app.css +163 -22
  295. package/dist/ui/shared/app.js +11 -1
  296. package/dist/ui/shared/fonts/README.md +1 -1
  297. package/dist/ui/shared/header-tools.js +55 -5
  298. package/dist/ui/shared/instance-nav.js +241 -45
  299. package/dist/ui/shared/instance-switch.js +4 -4
  300. package/dist/ui/shared/panel-view.js +6 -0
  301. package/dist/ui/shared/signin.js +7 -7
  302. package/dist/ui/shared/theme.js +39 -7
  303. package/dist/ui/shared/tokens.css +1 -1
  304. package/dist/ui/shared/ui-icons.js +1 -0
  305. package/dist/ui/shared/usage-dialog.js +23 -5
  306. package/dist/ui/shared/view-strings.js +32 -4
  307. package/dist/ui/signin.html +1 -1
  308. package/dist/unrecognised-prompt.d.ts +23 -0
  309. package/dist/unrecognised-prompt.js +74 -0
  310. package/dist/unrecognised-prompt.js.map +1 -0
  311. package/dist/update-check.d.ts +31 -0
  312. package/dist/update-check.js +47 -0
  313. package/dist/update-check.js.map +1 -1
  314. package/dist/update-install.d.ts +28 -2
  315. package/dist/update-install.js +22 -4
  316. package/dist/update-install.js.map +1 -1
  317. package/dist/update-launch.d.ts +46 -1
  318. package/dist/update-launch.js +146 -3
  319. package/dist/update-launch.js.map +1 -1
  320. package/dist/update-marker.d.ts +51 -0
  321. package/dist/update-marker.js +61 -0
  322. package/dist/update-marker.js.map +1 -1
  323. package/dist/update-preflight.d.ts +100 -0
  324. package/dist/update-preflight.js +264 -0
  325. package/dist/update-preflight.js.map +1 -0
  326. package/dist/updater-caller.d.ts +31 -0
  327. package/dist/updater-caller.js +109 -0
  328. package/dist/updater-caller.js.map +1 -0
  329. package/dist/usage/i18n-keys.d.ts +1 -1
  330. package/dist/usage/i18n-keys.js +1 -1
  331. package/dist/usage/i18n-keys.js.map +1 -1
  332. package/dist/usage/providers.d.ts +34 -5
  333. package/dist/usage/providers.js +160 -27
  334. package/dist/usage/providers.js.map +1 -1
  335. package/dist/usage/statusline-usage.d.ts +6 -2
  336. package/dist/usage/statusline-usage.js +10 -4
  337. package/dist/usage/statusline-usage.js.map +1 -1
  338. package/dist/view-api.d.ts +1 -1
  339. package/dist/view-api.js +38 -8
  340. package/dist/view-api.js.map +1 -1
  341. package/dist/wake-coordinator.d.ts +11 -0
  342. package/dist/wake-coordinator.js +38 -4
  343. package/dist/wake-coordinator.js.map +1 -1
  344. package/dist/web-api.d.ts +89 -4
  345. package/dist/web-api.js +551 -45
  346. package/dist/web-api.js.map +1 -1
  347. package/dist/web-auth.d.ts +2 -2
  348. package/dist/web-auth.js +9 -4
  349. package/dist/web-auth.js.map +1 -1
  350. package/dist/web-chat-history.d.ts +12 -1
  351. package/dist/web-chat-history.js +29 -7
  352. package/dist/web-chat-history.js.map +1 -1
  353. package/dist/web-commands.d.ts +27 -4
  354. package/dist/web-commands.js +19 -4
  355. package/dist/web-commands.js.map +1 -1
  356. package/dist/web-host-guard.d.ts +3 -11
  357. package/dist/web-host-guard.js +3 -12
  358. package/dist/web-host-guard.js.map +1 -1
  359. package/dist/web-images.d.ts +47 -0
  360. package/dist/web-images.js +169 -0
  361. package/dist/web-images.js.map +1 -0
  362. package/dist/web-login.d.ts +14 -0
  363. package/dist/web-login.js +4 -2
  364. package/dist/web-login.js.map +1 -1
  365. package/dist/web-mentions.d.ts +44 -0
  366. package/dist/web-mentions.js +75 -0
  367. package/dist/web-mentions.js.map +1 -0
  368. package/dist/web-prefs.d.ts +81 -0
  369. package/dist/web-prefs.js +297 -0
  370. package/dist/web-prefs.js.map +1 -0
  371. package/dist/web-preview.d.ts +14 -1
  372. package/dist/web-preview.js +35 -13
  373. package/dist/web-preview.js.map +1 -1
  374. package/dist/web-profile.d.ts +32 -0
  375. package/dist/web-profile.js +132 -0
  376. package/dist/web-profile.js.map +1 -0
  377. package/dist/web-reply-files.d.ts +45 -0
  378. package/dist/web-reply-files.js +223 -0
  379. package/dist/web-reply-files.js.map +1 -0
  380. package/dist/web-schedules.d.ts +12 -0
  381. package/dist/web-schedules.js +34 -0
  382. package/dist/web-schedules.js.map +1 -0
  383. package/dist/web-server-drain.d.ts +10 -0
  384. package/dist/web-server-drain.js +50 -0
  385. package/dist/web-server-drain.js.map +1 -0
  386. package/dist/web-session.d.ts +50 -1
  387. package/dist/web-session.js +63 -6
  388. package/dist/web-session.js.map +1 -1
  389. package/dist/web-settings-patch.d.ts +23 -0
  390. package/dist/web-settings-patch.js +77 -0
  391. package/dist/web-settings-patch.js.map +1 -0
  392. package/dist/web-shell-routes.d.ts +5 -1
  393. package/dist/web-shell-routes.js +10 -1
  394. package/dist/web-shell-routes.js.map +1 -1
  395. package/dist/web-upload.d.ts +17 -4
  396. package/dist/web-upload.js +64 -13
  397. package/dist/web-upload.js.map +1 -1
  398. package/dist/workflow-templates/default.md +1 -1
  399. package/package.json +1 -1
  400. package/templates/launchd.plist.ejs +3 -1
  401. package/templates/systemd.service.ejs +2 -1
@@ -0,0 +1,61 @@
1
+ /** What a launch does with a configured effort: the argument to append (with its leading space) and its level, or why none. */
2
+ export interface LaunchEffort {
3
+ arg: string | null;
4
+ note: string | null;
5
+ level?: string;
6
+ }
7
+ export type HelpRunner = (binary: string, args: string[]) => string;
8
+ /**
9
+ * A CLI's help text: its stdout, or its stderr when stdout is empty — agy (a Go CLI) prints its usage to stderr
10
+ * (#1825: 1.3.4 and 1.3.5 write nothing to stdout, so reading stdout alone saw no `--effort` at all). Throws when the
11
+ * CLI cannot run or exits non-zero.
12
+ */
13
+ export declare function readHelpText(binary: string, args?: string[]): string;
14
+ /** The binary's `--help`, read once per binary file; null when it cannot be read (then no flag is passed). */
15
+ export declare function cliHelp(binaryPath: string, run?: HelpRunner): string | null;
16
+ /** For tests: forget what was read. */
17
+ export declare function resetCliHelpCache(): void;
18
+ /**
19
+ * Whether the help lists `flag` as an option, and the values it gives for it: the first `(a, b, c)` or `(a|b|c)`
20
+ * list in the option's own entry (its row and the description lines under it), in canonical order. `levels: null`
21
+ * when the entry names none.
22
+ */
23
+ export declare function helpOption(help: string, flag: string): {
24
+ listed: boolean;
25
+ levels: string[] | null;
26
+ };
27
+ /**
28
+ * claude-code (`--effort`), grok (`--reasoning-effort`) and antigravity (`--effort`): the flag when this binary's help
29
+ * lists it and the level is one it takes.
30
+ */
31
+ export declare function flagEffort(backend: "claude-code" | "grok" | "antigravity", effort: string | undefined, binaryPath: string, run?: HelpRunner): LaunchEffort;
32
+ /** agy's model and effort for one launch: `--model` (absent: none), `--effort` (null: none), and why, quietly. */
33
+ export interface AgyLaunch {
34
+ model: string | undefined;
35
+ effort: string | null;
36
+ note: string | null;
37
+ }
38
+ /**
39
+ * #1825: agy's catalog has one model per effort level (`gemini-3.8-flash-medium`, `…-high`, …), and agy 1.3.4/1.3.5
40
+ * resolve `--model` and `--effort` together: a variant with another level ("conflicts with --effort=high"), a label
41
+ * with any `--effort`, a level the model does not have, or a model it does not list each make agy run ANOTHER model,
42
+ * with only a warning row in the pane (verified offline against the real binaries). So the effort picks the exact
43
+ * variant — `gemini-3.8-flash-medium` + high launches `--model gemini-3.8-flash-high`, no `--effort` — and anything
44
+ * else launches the configured model without `--effort`. `--model` alone (a variant's slug or its label) and a bare
45
+ * `--effort` on agy's own model are what agy resolves exactly. fleet.yaml is never rewritten; the note says what ran.
46
+ *
47
+ * `catalog`/`current`: the CLI env probe's cached `agy models` and settings model (null: none cached).
48
+ */
49
+ export declare function resolveAgyLaunch(model: string | undefined, level: string | null, catalog: readonly {
50
+ id: string;
51
+ label: string;
52
+ }[] | null, current?: string | null): AgyLaunch;
53
+ /**
54
+ * codex: `-c model_reasoning_effort="<level>"` when the model's own catalog entry lists the level. `-c` is in every
55
+ * codex AgEnD runs; what it does not check is the value, so the catalog is the gate.
56
+ */
57
+ export declare function codexEffort(effort: string | undefined, catalog: {
58
+ model: string | null;
59
+ levels: string[] | null;
60
+ unproven?: boolean;
61
+ }): LaunchEffort;
@@ -0,0 +1,170 @@
1
+ /**
2
+ * #1811: a configured `effort`, as a launch flag. Before this only kiro-cli and muse launched with it; codex,
3
+ * claude-code, grok and antigravity saved it and launched without (codex's `/effort` restarted into nothing).
4
+ *
5
+ * A stored effort must never break a launch. The flag is passed only when
6
+ * - this binary advertises it: its own `--help` lists the flag (an older CLI without it would refuse the unknown
7
+ * option and not start — verified: grok 1.0.46 and agy 1.3.4 exit on an unknown flag, claude 2.1.299 too), and
8
+ * - the level is one it takes: the values its help lists (claude, agy), grok's known three (its help lists none,
9
+ * and it takes any string at parse time — verified with 1.0.46), or for codex the levels the model's own catalog
10
+ * entry lists (codex 0.162.1 launches with any `model_reasoning_effort`, "bogus" included, and the API would
11
+ * refuse it at the first turn).
12
+ * Anything else launches without the flag and says why in a quiet note (daemon.log and the Log tab), never a channel
13
+ * notice. A resumed session gets the flag too (verified: claude `--continue`/`--resume` with `--effort`, codex
14
+ * `resume <id>` with `-c`). The runtime `/effort` paste is unchanged.
15
+ */
16
+ import { spawnSync } from "node:child_process";
17
+ import { statSync } from "node:fs";
18
+ import { measureSyncWork } from "../sync-work-attribution.js";
19
+ import { EFFORT_CAPABILITIES, CANONICAL_EFFORT, agyModelFamily } from "./effort-metadata.js";
20
+ import { t } from "../locale.js";
21
+ import { shellQuote } from "./types.js";
22
+ /**
23
+ * A CLI's help text: its stdout, or its stderr when stdout is empty — agy (a Go CLI) prints its usage to stderr
24
+ * (#1825: 1.3.4 and 1.3.5 write nothing to stdout, so reading stdout alone saw no `--effort` at all). Throws when the
25
+ * CLI cannot run or exits non-zero.
26
+ */
27
+ export function readHelpText(binary, args = ["--help"]) {
28
+ const run = spawnSync(binary, args, { encoding: "utf-8", timeout: 5000, stdio: ["ignore", "pipe", "pipe"] });
29
+ if (run.error)
30
+ throw run.error;
31
+ if (run.status !== 0)
32
+ throw new Error(`${binary} ${args.join(" ")} exited ${run.status ?? run.signal}`);
33
+ return run.stdout || run.stderr;
34
+ }
35
+ const defaultRun = (binary, args) => readHelpText(binary, args);
36
+ /** `--help` per binary FILE: the path and what is there (size, mtime) — an update gives a new answer. */
37
+ const helpCache = new Map();
38
+ /** The binary's `--help`, read once per binary file; null when it cannot be read (then no flag is passed). */
39
+ export function cliHelp(binaryPath, run = defaultRun) {
40
+ let key;
41
+ try {
42
+ const st = statSync(binaryPath);
43
+ key = `${binaryPath}\u0000${st.size}\u0000${st.mtimeMs}`;
44
+ }
45
+ catch {
46
+ return null;
47
+ } // not a file we can identify: never guess
48
+ if (helpCache.has(key))
49
+ return helpCache.get(key);
50
+ let help = null;
51
+ try {
52
+ help = measureSyncWork("backend.effortHelp", () => run(binaryPath, ["--help"]));
53
+ }
54
+ catch {
55
+ help = null;
56
+ }
57
+ helpCache.set(key, help);
58
+ return help;
59
+ }
60
+ /** For tests: forget what was read. */
61
+ export function resetCliHelpCache() { helpCache.clear(); }
62
+ /**
63
+ * Whether the help lists `flag` as an option, and the values it gives for it: the first `(a, b, c)` or `(a|b|c)`
64
+ * list in the option's own entry (its row and the description lines under it), in canonical order. `levels: null`
65
+ * when the entry names none.
66
+ */
67
+ export function helpOption(help, flag) {
68
+ const lines = help.split("\n");
69
+ const at = lines.findIndex(line => new RegExp(`^\\s*(?:-\\w,\\s*)?${flag.replace(/[-]/g, "\\-")}(?=[\\s,=<]|$)`).test(line));
70
+ if (at < 0)
71
+ return { listed: false, levels: null };
72
+ const entry = [lines[at]];
73
+ for (let i = at + 1; i < lines.length; i++) {
74
+ const line = lines[i];
75
+ if (/^\s*-{1,2}\w/.test(line))
76
+ break; // the next option
77
+ entry.push(line);
78
+ }
79
+ const list = /\(([a-z]+(?:\s*[,|]\s*[a-z]+)+)\)/.exec(entry.join(" "));
80
+ if (!list)
81
+ return { listed: true, levels: null };
82
+ const offered = new Set(list[1].split(/\s*[,|]\s*/));
83
+ return { listed: true, levels: CANONICAL_EFFORT.filter(level => offered.has(level)) };
84
+ }
85
+ /** The effort, if it is one of AgEnD's levels at all (normalized), else null. */
86
+ function canonical(effort) {
87
+ const level = effort.trim().toLowerCase();
88
+ return CANONICAL_EFFORT.includes(level) ? level : null;
89
+ }
90
+ const skip = (backend, effort, why) => ({ arg: null, note: t("effort.launch_skipped", effort, backend, why) });
91
+ /**
92
+ * claude-code (`--effort`), grok (`--reasoning-effort`) and antigravity (`--effort`): the flag when this binary's help
93
+ * lists it and the level is one it takes.
94
+ */
95
+ export function flagEffort(backend, effort, binaryPath, run) {
96
+ if (!effort)
97
+ return { arg: null, note: null };
98
+ const level = canonical(effort);
99
+ if (!level)
100
+ return skip(backend, effort, t("effort.launch_not_a_level", CANONICAL_EFFORT.join(", ")));
101
+ const flag = backend === "grok" ? "--reasoning-effort" : "--effort";
102
+ const help = cliHelp(binaryPath, run);
103
+ if (help === null)
104
+ return skip(backend, level, t("effort.launch_no_help"));
105
+ const option = helpOption(help, flag);
106
+ if (!option.listed)
107
+ return skip(backend, level, t("effort.launch_no_flag", flag));
108
+ // grok's help lists no values (and it takes any string): only the levels AgEnD knows it has.
109
+ const levels = option.levels ?? (backend === "grok" ? [...EFFORT_CAPABILITIES.grok.levels] : null);
110
+ if (!levels)
111
+ return skip(backend, level, t("effort.launch_no_levels", flag));
112
+ if (!levels.includes(level))
113
+ return skip(backend, level, t("effort.launch_level_not_offered", levels.join(", ")));
114
+ return { arg: ` ${flag} ${level}`, note: null, level };
115
+ }
116
+ /**
117
+ * #1825: agy's catalog has one model per effort level (`gemini-3.8-flash-medium`, `…-high`, …), and agy 1.3.4/1.3.5
118
+ * resolve `--model` and `--effort` together: a variant with another level ("conflicts with --effort=high"), a label
119
+ * with any `--effort`, a level the model does not have, or a model it does not list each make agy run ANOTHER model,
120
+ * with only a warning row in the pane (verified offline against the real binaries). So the effort picks the exact
121
+ * variant — `gemini-3.8-flash-medium` + high launches `--model gemini-3.8-flash-high`, no `--effort` — and anything
122
+ * else launches the configured model without `--effort`. `--model` alone (a variant's slug or its label) and a bare
123
+ * `--effort` on agy's own model are what agy resolves exactly. fleet.yaml is never rewritten; the note says what ran.
124
+ *
125
+ * `catalog`/`current`: the CLI env probe's cached `agy models` and settings model (null: none cached).
126
+ */
127
+ export function resolveAgyLaunch(model, level, catalog, current = null) {
128
+ if (!level)
129
+ return { model, effort: null, note: null };
130
+ const skipped = (why) => ({ model, effort: null, note: t("effort.launch_skipped", level, "antigravity", why) });
131
+ const listed = (name) => !!catalog?.some(m => m.id === name || m.label === name);
132
+ if (!model) {
133
+ // A bare --effort applies to agy's own model; one it knows to lack the level would make agy run another.
134
+ const family = current && catalog ? agyModelFamily(current, catalog) : null;
135
+ if (family && !family.variants.has(level)) {
136
+ return skipped(t("effort.launch_level_not_offered", [...family.variants.keys()].join(", ")));
137
+ }
138
+ if (!family && current && listed(current))
139
+ return skipped(t("effort.launch_agy_model_no_levels", current));
140
+ return { model, effort: level, note: null };
141
+ }
142
+ if (!catalog?.length)
143
+ return skipped(t("effort.launch_agy_no_catalog", model));
144
+ const family = agyModelFamily(model, catalog);
145
+ if (!family)
146
+ return skipped(t(listed(model) ? "effort.launch_agy_model_no_levels" : "effort.launch_agy_model_not_listed", model));
147
+ const variant = family.variants.get(level);
148
+ if (!variant)
149
+ return skipped(t("effort.launch_level_not_offered", [...family.variants.keys()].join(", ")));
150
+ return { model: variant, effort: null, note: variant === model ? null : t("effort.launch_agy_variant", level, variant, model) };
151
+ }
152
+ /**
153
+ * codex: `-c model_reasoning_effort="<level>"` when the model's own catalog entry lists the level. `-c` is in every
154
+ * codex AgEnD runs; what it does not check is the value, so the catalog is the gate.
155
+ */
156
+ export function codexEffort(effort, catalog) {
157
+ if (!effort)
158
+ return { arg: null, note: null };
159
+ const level = canonical(effort);
160
+ if (!level)
161
+ return skip("codex", effort, t("effort.launch_not_a_level", CANONICAL_EFFORT.join(", ")));
162
+ if (catalog.unproven)
163
+ return skip("codex", level, t("effort.launch_codex_model_unproven"));
164
+ if (!catalog.levels)
165
+ return skip("codex", level, t("effort.launch_codex_unknown_model", catalog.model ?? "—"));
166
+ if (!catalog.levels.includes(level))
167
+ return skip("codex", level, t("effort.launch_level_not_offered", catalog.levels.join(", ")));
168
+ return { arg: ` -c ${shellQuote(`model_reasoning_effort="${level}"`)}`, note: null };
169
+ }
170
+ //# sourceMappingURL=launch-effort.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launch-effort.js","sourceRoot":"","sources":["../../src/backend/launch-effort.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC7F,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAOxC;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,OAAiB,CAAC,QAAQ,CAAC;IACtE,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7G,IAAI,GAAG,CAAC,KAAK;QAAE,MAAM,GAAG,CAAC,KAAK,CAAC;IAC/B,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IACxG,OAAO,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,GAAe,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAE5E,yGAAyG;AACzG,MAAM,SAAS,GAAG,IAAI,GAAG,EAAyB,CAAC;AAEnD,8GAA8G;AAC9G,MAAM,UAAU,OAAO,CAAC,UAAkB,EAAE,MAAkB,UAAU;IACtE,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;QAChC,GAAG,GAAG,GAAG,UAAU,SAAS,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC,CAAyC,0CAA0C;IAC3G,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;IACnD,IAAI,IAAI,GAAkB,IAAI,CAAC;IAC/B,IAAI,CAAC;QAAC,IAAI,GAAG,eAAe,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,IAAI,GAAG,IAAI,CAAC;IAAC,CAAC;IAC/G,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACzB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,iBAAiB,KAAW,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAEhE;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,IAAY;IACnD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,sBAAsB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7H,IAAI,EAAE,GAAG,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACnD,MAAM,KAAK,GAAa,CAAC,KAAK,CAAC,EAAE,CAAE,CAAC,CAAC;IACrC,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACvB,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,MAAM,CAA4B,kBAAkB;QACnF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,GAAG,mCAAmC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACvE,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACjD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;IACtD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AACxF,CAAC;AAED,iFAAiF;AACjF,SAAS,SAAS,CAAC,MAAc;IAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC1C,OAAQ,gBAAsC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAChF,CAAC;AAED,MAAM,IAAI,GAAG,CAAC,OAAe,EAAE,MAAc,EAAE,GAAW,EAAgB,EAAE,CAC1E,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,uBAAuB,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AAE1E;;;GAGG;AACH,MAAM,UAAU,UAAU,CACxB,OAA+C,EAAE,MAA0B,EAAE,UAAkB,EAAE,GAAgB;IAEjH,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC9C,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,2BAA2B,EAAE,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtG,MAAM,IAAI,GAAG,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,UAAU,CAAC;IACpE,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACtC,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAC3E,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC,CAAC;IAClF,6FAA6F;IAC7F,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACnG,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7E,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,iCAAiC,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClH,OAAO,EAAE,GAAG,EAAE,IAAI,IAAI,IAAI,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACzD,CAAC;AAKD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAyB,EAAE,KAAoB,EAC/C,OAAwD,EAAE,UAAyB,IAAI;IAEvF,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACvD,MAAM,OAAO,GAAG,CAAC,GAAW,EAAa,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,uBAAuB,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IACnI,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;IACzF,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,yGAAyG;QACzG,MAAM,MAAM,GAAG,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5E,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1C,OAAO,OAAO,CAAC,CAAC,CAAC,iCAAiC,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/F,CAAC;QACD,IAAI,CAAC,MAAM,IAAI,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC;YAAE,OAAO,OAAO,CAAC,CAAC,CAAC,mCAAmC,EAAE,OAAO,CAAC,CAAC,CAAC;QAC3G,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC9C,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,MAAM;QAAE,OAAO,OAAO,CAAC,CAAC,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC,CAAC;IAC/E,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM;QAAE,OAAO,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC,CAAC;IAClI,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,CAAC,OAAO;QAAE,OAAO,OAAO,CAAC,CAAC,CAAC,iCAAiC,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3G,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,2BAA2B,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;AAClI,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,MAA0B,EAAE,OAA8E;IAE1G,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC9C,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,2BAA2B,EAAE,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtG,IAAI,OAAO,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC;IAC3F,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,mCAAmC,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC;IAC/G,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,iCAAiC,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClI,OAAO,EAAE,GAAG,EAAE,OAAO,UAAU,CAAC,2BAA2B,KAAK,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACvF,CAAC"}
@@ -15,6 +15,15 @@ export declare function museSessionCwd(head: string): string | null;
15
15
  * readers — never on the fleet event loop.
16
16
  */
17
17
  export declare function readFileHeadSync(filePath: string, maxChars: number): string | null;
18
+ /**
19
+ * #1717: true when the pane shows muse's terminals panel with at least one
20
+ * running task — the "local work still active" state. Anchored to the last
21
+ * separator, where the live panel sits under the input box: a transcript
22
+ * quoting an old panel above a separator never counts. The idle proof checks
23
+ * the same shape positionally via museStatusFooter; this boolean feeds the
24
+ * pause gate below.
25
+ */
26
+ export declare function museBackgroundWorkActive(pane: string): boolean;
18
27
  /**
19
28
  * The rows of muse's live input box, or null when the bottom of the pane is not
20
29
  * muse's layout (#829). The box is the LAST thing above the status bar:
@@ -50,6 +59,72 @@ export declare function museDraftShows(rows: readonly string[], width: number, t
50
59
  * glyph allowed in front of a choice.
51
60
  */
52
61
  export declare function museLoginScreenActive(pane: string): boolean;
62
+ /**
63
+ * #1716: `/quit` while a background task runs is answered with a confirmation
64
+ * instead of an exit (live 1.4.6,
65
+ * tests/fixtures/muse-1.4.6/prod-quit-with-local-work.pane.txt):
66
+ * ❯
67
+ * Local work is still active
68
+ * The following will stop when you exit:
69
+ * background task · tool.bash
70
+ * ❯ 1. Exit anyway
71
+ * 2. Stay
72
+ * Enter to confirm · Esc to cancel
73
+ * ──────────
74
+ * main · ↓ to select
75
+ * └ ◇ Wait in the background running 15s
76
+ * mock-model · high · ~/work · Launch overrides
77
+ * Unlike Claude's prompt this menu is NOT bottom-anchored — the terminals
78
+ * panel sits under it — so the match is anchored to the hint row instead:
79
+ * the header must be within 12 rows above it with both options in between.
80
+ * Enter would take the selected option ("Exit anyway"), so like #1217 this is
81
+ * recognised whole and never answered here: the stop flow cancels it.
82
+ */
83
+ /**
84
+ * #1715: with `skip_permissions: false` muse asks before running a command
85
+ * needing approval (live 1.4.6,
86
+ * tests/fixtures/muse-1.4.6/approval-escalated.pane.txt and
87
+ * approval-untrusted-staged.pane.txt):
88
+ * Would you like to run the following command?
89
+ * $ echo perm-check
90
+ * › 1. Yes, proceed (y)
91
+ * 2. No, and tell Muse Code what to do differently (esc)
92
+ * Change approval defaults in /permissions
93
+ * `--approval-mode untrusted` (new in 1.4.6) stages the command first
94
+ * (`Stage 1/1`, `Current argv: [...]`) and offers three options (allow once /
95
+ * always allow in this workspace / abort). 1.4.4 shows the same prompt with a
96
+ * `›` marker and no footer line. Enter would take the preselected allow
97
+ * option, so like #1716 this is recognised whole and never answered here.
98
+ * 1.4.7 draws the selection cursor as `⟩` on this prompt and on the #1716
99
+ * quit menu (tests/fixtures/muse-1.4.7); the other rows of those blocks are
100
+ * unchanged.
101
+ */
102
+ export declare const MUSE_APPROVAL_PROMPT: RegExp;
103
+ /**
104
+ * #1715: which request the approval prompt is showing — its `$ command` row.
105
+ * Stable across the `Calling tools (Ns)` timer redraws, so the episode can
106
+ * confirm; a whole-pane hash never would. Derived from the SAME selected
107
+ * block as the predicate (#1715 r2): a scrollback quote's command must never
108
+ * become the current request's identity.
109
+ */
110
+ export declare function museApprovalRequestIdentity(pane: string): string | null;
111
+ export declare function museApprovalPromptActive(pane: string): boolean;
112
+ export declare const MUSE_LOCAL_WORK_QUIT: RegExp;
113
+ export declare function museLocalWorkQuitActive(pane: string): boolean;
114
+ /**
115
+ * #1796: read the provider catalog muse caches on disk
116
+ * (`<state>/model-catalog/<provider>__<profile>.json`). Bounded (at most 16
117
+ * files, 256 KiB each) and best-effort — anything unexpected yields the
118
+ * fallback. Listed rows only: `visibility: "visible"` is what the 1.4.7
119
+ * picker shows (the `-contributor` siblings and the image model are hidden),
120
+ * and a null `context_limit` additionally marks a non-chat model. File order
121
+ * is kept and ids deduped.
122
+ *
123
+ * `stateDir` is injectable for tests; production passes nothing and reads the
124
+ * host state dir (the fleet never isolates XDG_DATA_HOME, mirroring the
125
+ * session lookup).
126
+ */
127
+ export declare function readMuseModelCatalog(stateDir?: string): ModelOption[];
53
128
  /**
54
129
  * Meta Muse Code — the `muse` CLI (v1.3.0 verified).
55
130
  *
@@ -169,6 +244,15 @@ export declare class MuseBackend implements CliBackend {
169
244
  getQuitCommand(): string | null;
170
245
  getQuitKey(): string;
171
246
  getQuitKeyPresses(): number;
247
+ /** #1716: `/quit` with a background task running stops at the "Local work is still active" menu. */
248
+ quitBlockedByDialog(pane: string): boolean;
249
+ /**
250
+ * #1717: the terminals panel with a `running` task — the pause flow defers
251
+ * an idle pause while this holds, so an AgEnD-initiated silent pause never
252
+ * kills the user's running background work. Explicit stop/restart still
253
+ * proceed via quitBlockedByDialog above.
254
+ */
255
+ backgroundWorkRunning(pane: string): boolean;
172
256
  getCompactCommand(): string;
173
257
  getClearCommand(): string | null;
174
258
  /**