@songsid/agend 2.3.2-beta.9 → 2.3.3-beta.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 (285) hide show
  1. package/README.md +6 -0
  2. package/README.zh-TW.md +6 -0
  3. package/dist/agent-cli-instructions.md +2 -2
  4. package/dist/agent-cli.js +48 -0
  5. package/dist/agent-cli.js.map +1 -1
  6. package/dist/agent-endpoint.js +6 -0
  7. package/dist/agent-endpoint.js.map +1 -1
  8. package/dist/agent-whats-new.d.ts +21 -0
  9. package/dist/agent-whats-new.js +53 -21
  10. package/dist/agent-whats-new.js.map +1 -1
  11. package/dist/auth-api.js +2 -0
  12. package/dist/auth-api.js.map +1 -1
  13. package/dist/backend/claude-code.d.ts +13 -1
  14. package/dist/backend/claude-code.js +43 -2
  15. package/dist/backend/claude-code.js.map +1 -1
  16. package/dist/backend/codex-session-lookup.d.ts +15 -0
  17. package/dist/backend/codex-session-lookup.js +58 -0
  18. package/dist/backend/codex-session-lookup.js.map +1 -1
  19. package/dist/backend/codex.js +15 -4
  20. package/dist/backend/codex.js.map +1 -1
  21. package/dist/backend/kiro-classic-archive.d.ts +57 -0
  22. package/dist/backend/kiro-classic-archive.js +622 -0
  23. package/dist/backend/kiro-classic-archive.js.map +1 -0
  24. package/dist/backend/kiro-classic-links.d.ts +24 -0
  25. package/dist/backend/kiro-classic-links.js +135 -0
  26. package/dist/backend/kiro-classic-links.js.map +1 -0
  27. package/dist/backend/kiro-identity.d.ts +100 -1
  28. package/dist/backend/kiro-identity.js +262 -31
  29. package/dist/backend/kiro-identity.js.map +1 -1
  30. package/dist/backend/kiro-migration-verify.d.ts +10 -0
  31. package/dist/backend/kiro-migration-verify.js +52 -0
  32. package/dist/backend/kiro-migration-verify.js.map +1 -0
  33. package/dist/backend/kiro-reconcile-store.d.ts +27 -0
  34. package/dist/backend/kiro-reconcile-store.js +351 -0
  35. package/dist/backend/kiro-reconcile-store.js.map +1 -0
  36. package/dist/backend/kiro-v2-store-worker.js +35 -1
  37. package/dist/backend/kiro-v2-store-worker.js.map +1 -1
  38. package/dist/backend/kiro-v2-store.d.ts +31 -1
  39. package/dist/backend/kiro-v2-store.js +22 -12
  40. package/dist/backend/kiro-v2-store.js.map +1 -1
  41. package/dist/backend/kiro.d.ts +124 -6
  42. package/dist/backend/kiro.js +553 -39
  43. package/dist/backend/kiro.js.map +1 -1
  44. package/dist/backend/types.d.ts +109 -4
  45. package/dist/backend/types.js +9 -0
  46. package/dist/backend/types.js.map +1 -1
  47. package/dist/cache-service.d.ts +13 -1
  48. package/dist/cache-service.js +45 -2
  49. package/dist/cache-service.js.map +1 -1
  50. package/dist/channel/ipc-timeouts.js +3 -0
  51. package/dist/channel/ipc-timeouts.js.map +1 -1
  52. package/dist/channel/mcp-tools.js +40 -5
  53. package/dist/channel/mcp-tools.js.map +1 -1
  54. package/dist/channel/tool-router.js +2 -1
  55. package/dist/channel/tool-router.js.map +1 -1
  56. package/dist/classic-channel-manager.d.ts +6 -0
  57. package/dist/classic-channel-manager.js +25 -0
  58. package/dist/classic-channel-manager.js.map +1 -1
  59. package/dist/cli.js +52 -6
  60. package/dist/cli.js.map +1 -1
  61. package/dist/config-validator.d.ts +7 -1
  62. package/dist/config-validator.js +20 -9
  63. package/dist/config-validator.js.map +1 -1
  64. package/dist/config.js +2 -0
  65. package/dist/config.js.map +1 -1
  66. package/dist/cross-instance-envelope.d.ts +10 -5
  67. package/dist/cross-instance-envelope.js +20 -17
  68. package/dist/cross-instance-envelope.js.map +1 -1
  69. package/dist/daemon.d.ts +125 -63
  70. package/dist/daemon.js +694 -330
  71. package/dist/daemon.js.map +1 -1
  72. package/dist/dashboard-permissions.d.ts +15 -4
  73. package/dist/dashboard-permissions.js +49 -23
  74. package/dist/dashboard-permissions.js.map +1 -1
  75. package/dist/delivery-outbox.d.ts +27 -22
  76. package/dist/delivery-outbox.js +109 -161
  77. package/dist/delivery-outbox.js.map +1 -1
  78. package/dist/delivery-outbox.test.js +10 -25
  79. package/dist/delivery-outbox.test.js.map +1 -1
  80. package/dist/doctor.js +2 -1
  81. package/dist/doctor.js.map +1 -1
  82. package/dist/fleet-control-audit.d.ts +1 -1
  83. package/dist/fleet-control-audit.js +3 -0
  84. package/dist/fleet-control-audit.js.map +1 -1
  85. package/dist/fleet-manager.d.ts +94 -15
  86. package/dist/fleet-manager.js +597 -133
  87. package/dist/fleet-manager.js.map +1 -1
  88. package/dist/forged-envelope-scan.d.ts +9 -0
  89. package/dist/forged-envelope-scan.js +30 -5
  90. package/dist/forged-envelope-scan.js.map +1 -1
  91. package/dist/general-instance.d.ts +24 -0
  92. package/dist/general-instance.js +53 -0
  93. package/dist/general-instance.js.map +1 -1
  94. package/dist/general-knowledge/skills/delegation-playbook/SKILL.md +1 -1
  95. package/dist/general-knowledge/skills/docker-install/SKILL.md +25 -0
  96. package/dist/general-knowledge/skills/fleet-config/SKILL.md +5 -3
  97. package/dist/general-knowledge/skills/fleet-restart/SKILL.md +1 -1
  98. package/dist/general-knowledge/skills/kiro-engine-migration/SKILL.md +34 -0
  99. package/dist/general-knowledge/skills/session-management/SKILL.md +2 -2
  100. package/dist/general-knowledge/skills/tui-effort/SKILL.md +1 -1
  101. package/dist/general-knowledge/skills/web-appearance/SKILL.canvas-worker-off.md +32 -0
  102. package/dist/general-knowledge/skills/web-appearance/SKILL.md +32 -0
  103. package/dist/general-knowledge/skills/web-dashboard/SKILL.canvas-worker-off.md +57 -17
  104. package/dist/general-knowledge/skills/web-dashboard/SKILL.md +57 -17
  105. package/dist/instance-config-impact.js +3 -2
  106. package/dist/instance-config-impact.js.map +1 -1
  107. package/dist/instance-lifecycle.d.ts +4 -0
  108. package/dist/instance-lifecycle.js +28 -5
  109. package/dist/instance-lifecycle.js.map +1 -1
  110. package/dist/instructions.js +6 -7
  111. package/dist/instructions.js.map +1 -1
  112. package/dist/kiro-migrate.d.ts +19 -2
  113. package/dist/kiro-migrate.js +133 -35
  114. package/dist/kiro-migrate.js.map +1 -1
  115. package/dist/kiro-reconcile.d.ts +21 -0
  116. package/dist/kiro-reconcile.js +88 -0
  117. package/dist/kiro-reconcile.js.map +1 -0
  118. package/dist/kiro-session-proof.d.ts +41 -0
  119. package/dist/kiro-session-proof.js +89 -0
  120. package/dist/kiro-session-proof.js.map +1 -0
  121. package/dist/kiro-tui-forensic.d.ts +19 -0
  122. package/dist/kiro-tui-forensic.js +124 -0
  123. package/dist/kiro-tui-forensic.js.map +1 -0
  124. package/dist/locale.js +202 -16
  125. package/dist/locale.js.map +1 -1
  126. package/dist/log-service.js +3 -3
  127. package/dist/log-service.js.map +1 -1
  128. package/dist/needs-you.d.ts +3 -1
  129. package/dist/needs-you.js +4 -2
  130. package/dist/needs-you.js.map +1 -1
  131. package/dist/office-levels.d.ts +64 -0
  132. package/dist/office-levels.js +66 -0
  133. package/dist/office-levels.js.map +1 -0
  134. package/dist/office-share-page.d.ts +3 -1
  135. package/dist/office-share-page.js +8 -3
  136. package/dist/office-share-page.js.map +1 -1
  137. package/dist/office-share-service.d.ts +6 -3
  138. package/dist/office-share-service.js +12 -8
  139. package/dist/office-share-service.js.map +1 -1
  140. package/dist/office-share.d.ts +45 -8
  141. package/dist/office-share.js +75 -15
  142. package/dist/office-share.js.map +1 -1
  143. package/dist/outbound-handlers.js +21 -2
  144. package/dist/outbound-handlers.js.map +1 -1
  145. package/dist/outbound-schemas.d.ts +47 -2
  146. package/dist/outbound-schemas.js +42 -3
  147. package/dist/outbound-schemas.js.map +1 -1
  148. package/dist/public-web-gateway.js +1 -1
  149. package/dist/public-web-gateway.js.map +1 -1
  150. package/dist/quickstart-api.d.ts +39 -1
  151. package/dist/quickstart-api.js +115 -17
  152. package/dist/quickstart-api.js.map +1 -1
  153. package/dist/remote-card-answer.d.ts +83 -0
  154. package/dist/remote-card-answer.js +208 -0
  155. package/dist/remote-card-answer.js.map +1 -0
  156. package/dist/remote-card-prompt.d.ts +38 -0
  157. package/dist/remote-card-prompt.js +86 -0
  158. package/dist/remote-card-prompt.js.map +1 -0
  159. package/dist/scheduler/task-board.d.ts +44 -17
  160. package/dist/scheduler/task-board.js +95 -36
  161. package/dist/scheduler/task-board.js.map +1 -1
  162. package/dist/sd-notify.d.ts +13 -14
  163. package/dist/sd-notify.js +62 -28
  164. package/dist/sd-notify.js.map +1 -1
  165. package/dist/service-installer.d.ts +13 -0
  166. package/dist/service-installer.js +15 -0
  167. package/dist/service-installer.js.map +1 -1
  168. package/dist/service-owner.d.ts +25 -0
  169. package/dist/service-owner.js +43 -2
  170. package/dist/service-owner.js.map +1 -1
  171. package/dist/settings-api.d.ts +2 -1
  172. package/dist/settings-api.js +19 -26
  173. package/dist/settings-api.js.map +1 -1
  174. package/dist/settings-change.js +10 -5
  175. package/dist/settings-change.js.map +1 -1
  176. package/dist/settings-effect.js +7 -6
  177. package/dist/settings-effect.js.map +1 -1
  178. package/dist/settings-instance-patch.js +1 -1
  179. package/dist/settings-instance-patch.js.map +1 -1
  180. package/dist/setup-form.d.ts +2 -2
  181. package/dist/setup-form.js +139 -93
  182. package/dist/setup-form.js.map +1 -1
  183. package/dist/setup-i18n.d.ts +25 -0
  184. package/dist/setup-i18n.js +226 -0
  185. package/dist/setup-i18n.js.map +1 -0
  186. package/dist/task-board-waker.d.ts +40 -1
  187. package/dist/task-board-waker.js +115 -9
  188. package/dist/task-board-waker.js.map +1 -1
  189. package/dist/tmux-control.d.ts +1 -1
  190. package/dist/tmux-control.js +3 -2
  191. package/dist/tmux-control.js.map +1 -1
  192. package/dist/tmux-manager.js +18 -16
  193. package/dist/tmux-manager.js.map +1 -1
  194. package/dist/tmux-read.d.ts +2 -0
  195. package/dist/tmux-read.js +7 -1
  196. package/dist/tmux-read.js.map +1 -1
  197. package/dist/tool-permissions.js +18 -0
  198. package/dist/tool-permissions.js.map +1 -1
  199. package/dist/topic-commands.d.ts +2 -0
  200. package/dist/topic-commands.js +2 -1
  201. package/dist/topic-commands.js.map +1 -1
  202. package/dist/transcript-sources.d.ts +1 -0
  203. package/dist/transcript-sources.js +20 -3
  204. package/dist/transcript-sources.js.map +1 -1
  205. package/dist/types.d.ts +11 -5
  206. package/dist/ui/backend-signin.js +4 -3
  207. package/dist/ui/chat-store.js +3 -2
  208. package/dist/ui/chat-strings.js +2 -2
  209. package/dist/ui/fleet-office-card.js +114 -0
  210. package/dist/ui/fleet-office-editor.js +81 -9
  211. package/dist/ui/fleet-office-layout.js +56 -11
  212. package/dist/ui/fleet-office-levels.js +105 -0
  213. package/dist/ui/fleet-office-model.js +9 -1
  214. package/dist/ui/fleet-office-pack.d.ts +15 -3
  215. package/dist/ui/fleet-office-pack.js +177 -23
  216. package/dist/ui/fleet-office-skin.js +39 -3
  217. package/dist/ui/fleet-office-store.js +74 -3
  218. package/dist/ui/fleet-office-view.js +8 -0
  219. package/dist/ui/fleet-office-zones.js +102 -19
  220. package/dist/ui/fleet-office.js +308 -44
  221. package/dist/ui/fleet-org.js +2 -0
  222. package/dist/ui/fleet-task-card.js +2 -2
  223. package/dist/ui/fleet-task-common.js +30 -7
  224. package/dist/ui/fleet-task-work.js +2 -2
  225. package/dist/ui/fleet-tasks.js +10 -11
  226. package/dist/ui/office-share-dialog.js +31 -7
  227. package/dist/ui/office-share-page.js +1 -0
  228. package/dist/ui/panel-chat.js +14 -2
  229. package/dist/ui/panel-log.js +6 -6
  230. package/dist/ui/panel-needs.js +1 -1
  231. package/dist/ui/panel-settings.js +16 -8
  232. package/dist/ui/settings-appearance.js +3 -35
  233. package/dist/ui/settings-discord.js +3 -2
  234. package/dist/ui/settings-guests.js +17 -7
  235. package/dist/ui/settings-model.js +17 -9
  236. package/dist/ui/settings-registry.js +1 -1
  237. package/dist/ui/settings-strings.js +18 -6
  238. package/dist/ui/settings-token.js +3 -2
  239. package/dist/ui/settings-wizard.js +25 -9
  240. package/dist/ui/shared/app-i18n.js +2 -2
  241. package/dist/ui/shared/app-stream.js +1 -1
  242. package/dist/ui/shared/app.css +70 -2
  243. package/dist/ui/shared/setup-host-text.js +107 -0
  244. package/dist/ui/structured-signin.js +89 -38
  245. package/dist/update-check.d.ts +13 -4
  246. package/dist/update-check.js +17 -4
  247. package/dist/update-check.js.map +1 -1
  248. package/dist/usage-rollup.d.ts +34 -3
  249. package/dist/usage-rollup.js +56 -3
  250. package/dist/usage-rollup.js.map +1 -1
  251. package/dist/web-api.d.ts +10 -1
  252. package/dist/web-api.js +207 -17
  253. package/dist/web-api.js.map +1 -1
  254. package/dist/web-auth.js +1 -1
  255. package/dist/web-auth.js.map +1 -1
  256. package/dist/web-experimental.d.ts +6 -2
  257. package/dist/web-experimental.js +8 -4
  258. package/dist/web-experimental.js.map +1 -1
  259. package/dist/web-office-acts.d.ts +5 -2
  260. package/dist/web-office-acts.js +9 -4
  261. package/dist/web-office-acts.js.map +1 -1
  262. package/dist/web-office-pack-read.d.ts +35 -0
  263. package/dist/web-office-pack-read.js +252 -0
  264. package/dist/web-office-pack-read.js.map +1 -0
  265. package/dist/web-office-pack-tools.d.ts +241 -0
  266. package/dist/web-office-pack-tools.js +785 -0
  267. package/dist/web-office-pack-tools.js.map +1 -0
  268. package/dist/web-office-skins.d.ts +68 -4
  269. package/dist/web-office-skins.js +324 -33
  270. package/dist/web-office-skins.js.map +1 -1
  271. package/dist/web-office-store.d.ts +47 -4
  272. package/dist/web-office-store.js +124 -23
  273. package/dist/web-office-store.js.map +1 -1
  274. package/dist/web-settings-patch.d.ts +3 -2
  275. package/dist/web-settings-patch.js +7 -5
  276. package/dist/web-settings-patch.js.map +1 -1
  277. package/dist/workflow-templates/default.md +3 -3
  278. package/dist/working-recovery.d.ts +0 -2
  279. package/dist/working-recovery.js +2 -23
  280. package/dist/working-recovery.js.map +1 -1
  281. package/package.json +2 -2
  282. package/templates/windows-shortcuts.ps1 +18 -17
  283. package/dist/upgrade-notices.d.ts +0 -17
  284. package/dist/upgrade-notices.js +0 -93
  285. package/dist/upgrade-notices.js.map +0 -1
package/dist/daemon.d.ts CHANGED
@@ -8,6 +8,7 @@ import { type PauseReason } from "./pause-marker.js";
8
8
  import { MessageBus } from "./channel/message-bus.js";
9
9
  import type { CliBackend, ErrorPattern, InstanceState, InstanceStateSnapshot } from "./backend/types.js";
10
10
  import { HangDetector } from "./hang-detector.js";
11
+ import { type RemoteCardAction, type RemoteCardOutcome } from "./remote-card-answer.js";
11
12
  import type { TmuxControlClient } from "./tmux-control.js";
12
13
  import type { FleetInstructionsParams } from "./instructions.js";
13
14
  import type { SpawnGate } from "./spawn-gate.js";
@@ -22,34 +23,6 @@ import type { KiroLogLaunch } from "./kiro-log-gate.js";
22
23
  * often; a long silent tool run shows its own busy row on the pane.
23
24
  */
24
25
  export declare const TRANSCRIPT_OPEN_TURN_QUIET_MS: number;
25
- export declare function buildInstructionReloadNotice(binaryName: string, instanceName: string, instanceDir: string, backendSource?: string | null): string;
26
- /**
27
- * Whether this backend has to be told in its pane that its instructions moved.
28
- *
29
- * A backend that re-reads them on resume already received the new ones from the
30
- * resume itself, so the notice is pure interruption. Both places that can send
31
- * it — the warmup paste and the deferred pendingInstructionsNotice — ask through
32
- * here, so the two cannot drift apart again: the warmup path used to omit this
33
- * check entirely and told claude-code to reload instructions it had just read.
34
- */
35
- export declare function backendNeedsPaneReloadNotice(backend?: {
36
- instructionsReloadedOnResume?: boolean;
37
- }): boolean;
38
- /**
39
- * What the warmup should do about changed instructions.
40
- *
41
- * `skip` — nothing to say, or this backend learns of the change by itself.
42
- * `defer` — worth saying, but nobody is talking to the instance; say it when a
43
- * real message next arrives rather than provoking an unsolicited reply.
44
- * `paste` — say it now, into a pane that already has a delivery in flight.
45
- */
46
- export declare function warmupNoticeAction(opts: {
47
- warmupNeeded: boolean;
48
- backend?: {
49
- instructionsReloadedOnResume?: boolean;
50
- };
51
- pasteQueueDepth: number;
52
- }): "skip" | "defer" | "paste";
53
26
  export declare const DEFAULT_STUCK_TIMEOUT_MS: number;
54
27
  export declare const DEFAULT_STATE_IDLE_DEBOUNCE_MS = 2000;
55
28
  export declare const DEFAULT_STATE_SAFETY_SWEEP_MS = 60000;
@@ -57,6 +30,14 @@ export declare const DEFAULT_STATE_SAFETY_SWEEP_MS = 60000;
57
30
  export declare const PERIODIC_REDRAW_PROBE_MS = 25;
58
31
  /** Do not turn a streaming Codex turn into one capture-pane per burst. */
59
32
  export declare const STRUCTURED_IDLE_PROBE_MS = 500;
33
+ /** #2770 (ii): how often output may schedule a look for a layout that repaints while idle (CliBackend.periodicRedrawFrom). */
34
+ export declare const PERIODIC_LAYOUT_LOOK_MS = 5000;
35
+ /** #2770: how often a delivery waiting for idle asks again whether it can be handed off instead. */
36
+ export declare const HANDOFF_RECHECK_MS = 1000;
37
+ /** #2770: how often a wait for idle asks its stop condition (a cancel, a hand-off that became possible). */
38
+ export declare const WAIT_STOP_POLL_MS = 250;
39
+ /** #2770: human messages a cancel dropped are told in one notice, this long after the last of them. */
40
+ export declare const CANCELLED_HUMANS_NOTICE_MS = 1000;
60
41
  /**
61
42
  * An instance publishing more than this many execution-state edges inside the
62
43
  * window is flapping; its edges stop being logged one by one (#1116). One
@@ -460,6 +441,13 @@ export declare class Daemon extends EventEmitter {
460
441
  logTranscriptPath(): string | null;
461
442
  /** #1218 (kiro): the launch this daemon's backend last built, for the Log's reason only (kiro-log-gate.ts). */
462
443
  logLaunch(): KiroLogLaunch | null;
444
+ kiroMigrationIdle(): Promise<boolean>;
445
+ /** One read-only migration observation. Never types into a pane or selects a picker. */
446
+ kiroMigrationObservation(): Promise<{
447
+ sessionId: string;
448
+ model: string;
449
+ transcript: string;
450
+ } | null>;
463
451
  private guardian;
464
452
  private adapter;
465
453
  private pendingIpcRequests;
@@ -553,6 +541,12 @@ export declare class Daemon extends EventEmitter {
553
541
  private dialogParkedKey;
554
542
  private dialogParkedInteractionEpisode;
555
543
  private dialogParkedReported;
544
+ /** #2675: the card on screen that a person can answer from the chat — what it asks, since when, and whether it was posted. */
545
+ private remoteCardShown;
546
+ /** #2675: when (performance.now, taken before its capture) the newest read the card tracker used was started. */
547
+ private remoteCardReadAt;
548
+ /** #2675: an answer from the chat is being keyed in (one at a time). */
549
+ private remoteCardAnswering;
556
550
  /**
557
551
  * #1691: the prompt at the bottom of the pane that no backend table knows — its block, since when (performance.now)
558
552
  * it has been unchanged, and whether that has lasted UNRECOGNISED_PROMPT_STABLE_MS. Updated by the runtime scan.
@@ -635,6 +629,10 @@ export declare class Daemon extends EventEmitter {
635
629
  /** Consecutive structural idle captures for a noisy, periodically-redrawing
636
630
  * pane. Two are required before a working -> idle transition. */
637
631
  private instanceStatePeriodicIdleConfirmations;
632
+ /** #2770 (ii): the latest capture showed a layout that repaints while idle (CliBackend.periodicRedrawFrom). */
633
+ private periodicRedrawLayout;
634
+ /** When output last scheduled a look for that layout (monotonic ms), so a busy pane is not captured on every chunk. */
635
+ private periodicLayoutLookAt;
638
636
  /** Recent execution-state edge times, for the flap log limiter (#1116). */
639
637
  private stateEdgeTimes;
640
638
  private stateEdgesNotLogged;
@@ -673,7 +671,6 @@ export declare class Daemon extends EventEmitter {
673
671
  /** Prevent a visible stale XML fragment from being recovered on later turns. */
674
672
  private lastMalformedToolCallSignature;
675
673
  private proxyReplySeq;
676
- private lastReplyDropWarningAt;
677
674
  /**
678
675
  * #1241: an idle edge that has not yet proven the turn ended. Armed instead
679
676
  * of recovering immediately; a steady idle snapshot past confirmAt promotes
@@ -732,6 +729,8 @@ export declare class Daemon extends EventEmitter {
732
729
  private authFailureUnresolved;
733
730
  /** One login-screen auth report per spawn — the screen persists across polls. */
734
731
  private loginScreenReported;
732
+ /** #2795: the auth pattern match the token-free check is still to judge; it arms nothing until confirmAuthFailure(). */
733
+ private unverifiedAuthMatch;
735
734
  /**
736
735
  * While the lifecycle is still starting this daemon, `pty_error` has no
737
736
  * listener and `InstanceLifecycle.daemons` has no entry — so an incident the
@@ -788,15 +787,12 @@ export declare class Daemon extends EventEmitter {
788
787
  private deliveryWritesStopping;
789
788
  /** #829: the latest pastes, by spawn generation (see ownedInputDraft). */
790
789
  private recentPastes;
791
- private pendingInstructionsUpdate;
792
- private pendingInstructionsNotice;
793
790
  /** #1633: the one-time "what's new for you" notice, pasted before the next real delivery; recorded once pasted. */
794
791
  private pendingWhatsNew;
795
- /** #2140: deliveries tried for the pending what's-new notice that never reached the pane (capped: never before every message). */
796
- private whatsNewUnwritten;
797
- private warmupNeeded;
798
- private lastBuiltInstructions;
799
792
  private pasteQueueDepth;
793
+ /** #2770: a person's messages a cancel dropped before they reached the CLI, told together (noteCancelledHuman). */
794
+ private cancelledHumans;
795
+ private cancelledHumansTimer;
800
796
  private firstDeliveryDelay;
801
797
  /** Orders /steer pastes against each other. Deliberately NOT pasteLock:
802
798
  * a steer must not queue behind the normal deliveries it exists to
@@ -946,21 +942,21 @@ export declare class Daemon extends EventEmitter {
946
942
  releaseStartupIncidents(): void;
947
943
  emit(event: string | symbol, ...args: unknown[]): boolean;
948
944
  /**
949
- * Undo the auth suspicion a pattern match armed, once the backend's token-free
950
- * probe has said the credentials are fine.
951
- *
952
- * emitErrorPattern arms these BEFORE the pty_error reaches the lifecycle, and
953
- * the lifecycle's "valid" verdict used to just drop the incident — leaving the
954
- * daemon permanently suspicious of an auth failure that never existed. That
955
- * state is not inert: authFailureUnresolved suppresses the stuck/hang
956
- * notification and holds MCP auto-restart (a later real MCP death is then read
957
- * as already-confirmed auth trouble rather than re-verified), and the recovery
958
- * gate suppresses further error detection until a ready pattern shows up.
959
- *
960
- * Only what an auth match armed is rolled back. If some other pattern has
961
- * since armed the recovery gate, that one is still live and stays.
945
+ * Undo an auth suspicion once the backend's token-free probe has said the credentials are fine. Since #2795 a pane
946
+ * pattern match arms nothing before that probe (its pending match is just dropped); what is left to undo is a
947
+ * login-screen report, which arms authFailureUnresolved itself. That state is not inert: it suppresses the
948
+ * stuck/hang notification and holds MCP auto-restart. If some other pattern has armed the recovery gate, that one
949
+ * is still live and stays.
962
950
  */
963
951
  clearSuspectedAuthFailure(): boolean;
952
+ private armErrorRecoveryGate;
953
+ /**
954
+ * #2795: the token-free check did not vouch for the credentials behind an auth pattern match. Only now does the
955
+ * match become an auth failure: the state the detector used to arm at match time. Remembered for as long as it is
956
+ * unresolved — an auth-broken CLI cannot finish the turn it is holding, so every other detector would otherwise
957
+ * keep reporting the same dead instance. A login-screen report arms its own state and has no match to confirm.
958
+ */
959
+ confirmAuthFailure(): boolean;
964
960
  private clearErrorRecoveryGate;
965
961
  constructor(name: string, config: InstanceConfig, instanceDir: string, topicMode?: boolean, backend?: CliBackend | undefined, controlClient?: TmuxControlClient | undefined, rootLogger?: Logger, runtimeIdentity?: FleetInstructionsParams["runtimeIdentity"], spawnGate?: SpawnGate | undefined, stormWindow?: StormWindow | undefined,
966
962
  /** Fleet-level "is this CLI's backend down?" memory — see backend-outage.ts. */
@@ -1452,8 +1448,6 @@ export declare class Daemon extends EventEmitter {
1452
1448
  private currentReplyRecovery;
1453
1449
  private queueMalformedReplyRecovery;
1454
1450
  private reportUnrecoveredReplyDrop;
1455
- /** Channel notice for a reply-drop. `rateLimit` shares the per-instance cooldown (#2544). */
1456
- private deliverReplyDropNotice;
1457
1451
  /** Relay the pane's final text to the channel, marked as a daemon proxy reply. */
1458
1452
  private sendProxyReply;
1459
1453
  /** Context-bound reply path shared by dead-MCP and malformed-call recovery. */
@@ -1471,6 +1465,12 @@ export declare class Daemon extends EventEmitter {
1471
1465
  private scheduleInstanceStateIdleCapture;
1472
1466
  private captureAndEvaluateInstanceState;
1473
1467
  private handleInstancePaneOutput;
1468
+ /**
1469
+ * The backend's structural idle proof for periodically repainting panes, when it applies to the current layout: always
1470
+ * for a backend that repaints in every layout (Codex, Muse), only while the latest capture showed such a layout for one
1471
+ * that names it (CliBackend.periodicRedrawFrom — Claude's background-agent list, #2770 (ii)).
1472
+ */
1473
+ private periodicIdleProof;
1474
1474
  private bindInstanceStateOutputListener;
1475
1475
  private startInstanceStateMonitor;
1476
1476
  private stopInstanceStateMonitor;
@@ -1558,6 +1558,13 @@ export declare class Daemon extends EventEmitter {
1558
1558
  /** The same formatter/sanitizer used by the actual write; snapshot only. */
1559
1559
  humanReceiptWire(content: string, meta: Record<string, string>, kind: string): string;
1560
1560
  private humanReceiptAttempt;
1561
+ /**
1562
+ * #2770: a person's message a cancel dropped before it reached the CLI is told, not left as a silent "uncertain":
1563
+ * the messages dropped together go out as one `human_messages_cancelled` (the fleet marks each ❌ and says so once).
1564
+ * Agents' messages are not a person's, and a durable row (delivery_id) is retried by the outbox: neither is ❌'d. A
1565
+ * message with no chat to mark has nowhere to say it.
1566
+ */
1567
+ private noteCancelledHuman;
1561
1568
  private finishHumanReceipt;
1562
1569
  /**
1563
1570
  * Whether ONE delivery reached a verdict, carried by that delivery.
@@ -1783,6 +1790,22 @@ export declare class Daemon extends EventEmitter {
1783
1790
  * dialog's static description and a count, never the pane: a pane can hold anything the agent printed.
1784
1791
  */
1785
1792
  private noteDialogAnswer;
1793
+ /**
1794
+ * #2675: a held card a person can answer from the chat (the dialog's remoteCard reader) is posted once it has stayed
1795
+ * the same card for REMOTE_CARD_STABLE_MS — `remote_card` with what it asks; the fleet posts it with its buttons. When
1796
+ * it closes or another card replaces it, `remote_card_gone` retires that post. Moving through the card (ours or the
1797
+ * person's in the pane) is the same card: its identity has no cursor. `readAt` is when the pane's capture was started
1798
+ * (performance.now): a read that started before the newest one used here finishes late and says nothing about now —
1799
+ * it may neither retire a newer card nor bring an older one back (#2677 review).
1800
+ */
1801
+ private trackRemoteCard;
1802
+ /** #2675: the card's post was used up without answering it (refused, stopped part-way): post it again once it holds still. */
1803
+ repostRemoteCard(): void;
1804
+ /**
1805
+ * #2675: answer the card on screen from the chat, as the person chose: only while it is the card they saw
1806
+ * (`identity`), on a verified cursor, under the pane write lock (remote-card-answer.ts). Never logs the answer.
1807
+ */
1808
+ answerRemoteCard(identity: string, action: RemoteCardAction): Promise<RemoteCardOutcome>;
1786
1809
  /**
1787
1810
  * Remember how long a blocking dialog has been on screen. Once it has
1788
1811
  * outlived DIALOG_PARKED_NOTIFY_MS — the auto-dismiss did not take, or the
@@ -1822,8 +1845,26 @@ export declare class Daemon extends EventEmitter {
1822
1845
  * while a fresh capture reads its composer as "steer" — or "idle" once the turn has ended (`allowIdle`, the pre-write
1823
1846
  * re-check). "queue" (the user's choice), text in the box, or a screen it cannot read: not now — the caller waits for
1824
1847
  * the idle prompt as for any message. AgEnD never switches the mode. Backends without the reader are not asked.
1848
+ * #2676: an ordinary message (`steerOnly` false) goes in on "queue" too — kiro takes it into the same tray either way,
1849
+ * held for the turn's end instead of steered into it.
1825
1850
  */
1826
1851
  private steerComposerAdmits;
1852
+ /** #2682: a busy composer's typed input reaches the CLI's own turn (busyTurnTakesInput); an idle box, or no reader: yes. */
1853
+ private busyInputReachesTurn;
1854
+ /**
1855
+ * #2676: whether an ordinary message may be typed into this CLI's busy composer — a mode-switched one (kiro TUI) on a
1856
+ * launch whose busy composer AgEnD drives (the same evidence as a steer: KIRO_STEER_VERIFIED). The legacy UI, an
1857
+ * unlisted version and every backend without the reader answer false; claude and codex hand off by
1858
+ * supportsQueuedInput instead.
1859
+ */
1860
+ private composerTakesBusyInput;
1861
+ /**
1862
+ * #2676: whether the box can show this payload as this delivery's paste before the Enter (steerPasteIsOurs): its
1863
+ * first line, or a collapsed paste's line count. A one-line payload kiro would collapse (over 500 characters) shows only
1864
+ * a character count, which kiro's own normalisation (tabs widened) makes no proof: it waits for the idle prompt.
1865
+ * kiro measures after widening each tab to its 2-column stop, so a tab is counted as 2 here (at most what it becomes).
1866
+ */
1867
+ private composerCanShowPaste;
1827
1868
  /**
1828
1869
  * #1405: one look at a mode-switched composer for a steer's own proof: on the tmux of this write, inside `deadline`
1829
1870
  * (monotonic) — the capture is raced against the time left and a late answer dropped — and `current` asked after the
@@ -1897,6 +1938,9 @@ export declare class Daemon extends EventEmitter {
1897
1938
  * Enter-dropping TUIs. Polls at a coarse cadence (each poll is a capture-pane)
1898
1939
  * only after the pane is already quiet, so the common fast-idle delivery still
1899
1940
  * costs a single capture.
1941
+ *
1942
+ * #2770: with `stop`, the wait also ends ("stopped") as soon as `stop` says so — asked every WAIT_STOP_POLL_MS while
1943
+ * the pane is busy, and before every re-poll — so a cancel or a hand-off that became possible never waits out the pane.
1900
1944
  */
1901
1945
  private waitForPaneReadyForDelivery;
1902
1946
  /**
@@ -1998,6 +2042,11 @@ export declare class Daemon extends EventEmitter {
1998
2042
  */
1999
2043
  private isPaneIdleForDelivery;
2000
2044
  private waitForPaneIdleForDelivery;
2045
+ /**
2046
+ * #2770: waitForPaneIdleForDelivery that also ends as soon as `stop` says so ("stopped"). The same idle readings
2047
+ * (tmux silence, or the state machine where its idle is trusted), polled here so nothing outlives a stopped wait.
2048
+ */
2049
+ private waitForPaneIdleOrStop;
2001
2050
  /**
2002
2051
  * Antigravity has always opted into pane-state delivery readiness because its
2003
2052
  * footer redraws while idle. Codex's structural idle proof is useful only
@@ -2276,6 +2325,24 @@ export declare class Daemon extends EventEmitter {
2276
2325
  * silently, confirming and removing nothing. Never throws into the spawn.
2277
2326
  */
2278
2327
  private ensureBackendAgent;
2328
+ /**
2329
+ * M-2025: after a tui/V3 launch is ready, type `/session-id` and `/title` once
2330
+ * each, under the pane-write lock, with the same fences as {@link ensureBackendAgent}.
2331
+ * Does not touch the delivery epoch. A mismatch with the #2617 pin is surfaced;
2332
+ * the pin is never replaced by a file-store guess. Legacy backends return null
2333
+ * from sessionProof().
2334
+ *
2335
+ * #2683: these are AgEnD's own housekeeping, so unlike a delivery (which may join
2336
+ * a person's draft) each one goes only into a composer the final capture shows
2337
+ * positively EMPTY; Enter only once a capture shows exactly the command in the box;
2338
+ * and it counts as run only once the box is empty again — a command left in the
2339
+ * box stops here (it is taken back when the box shows exactly it), and nothing
2340
+ * else is typed after it. The id is taken only from kiro's `/session-id` alert
2341
+ * (readSessionIdAlert) on a capture after the command ran, and never when that
2342
+ * alert was already on the final capture before it was typed: an announcement
2343
+ * that was there before is not an answer to this request.
2344
+ */
2345
+ private ensureKiroSessionProof;
2279
2346
  /**
2280
2347
  * Startup budget for this launch: the backend's override (resume-aware), never
2281
2348
  * below a user-configured startup_timeout_ms; undefined = trySpawn's default.
@@ -2353,22 +2420,17 @@ export declare class Daemon extends EventEmitter {
2353
2420
  */
2354
2421
  private switchMuseToDirect;
2355
2422
  /**
2356
- * Tell the agent its instructions moved, once the CLI is idle.
2357
- *
2358
- * A named method rather than an inline closure so the wiring itself is
2359
- * testable: warmupNoticeAction's own tests pass even if this call site stops
2360
- * consulting it, which is exactly the bug this path had — the decision was
2361
- * made inline and never asked whether the backend needed telling at all.
2362
- *
2363
- * Never throws: a missed reload notice must not fail a spawn.
2423
+ * #1633 (#1639 review): the pending notice as things stand NOW, just before the paste — it was decided at launch, and
2424
+ * the record, a switch or the instance's tools may have changed while the delivery waited. Planned again from the
2425
+ * record (#2800: the running release only, tools it has now); nothing left to tell → recorded, nothing pending.
2364
2426
  */
2365
- private runWarmupInstructionNotice;
2427
+ private currentWhatsNew;
2428
+ private recordWhatsNewSent;
2366
2429
  /**
2367
- * #1633 (#1639 review): the pending notice as the record stands NOW, just before the paste — it was decided at launch,
2368
- * and the record may have changed while the delivery waited. Unreadable → nothing is sent (and nothing pending);
2369
- * entries recorded meanwhile are dropped from it; none left → nothing.
2430
+ * #2800: the tools this instance's agend MCP server lists now — the same filters (tool set, dashboard switches, the
2431
+ * Canvas Worker switch) — so a notice names only changes to tools it has.
2370
2432
  */
2371
- private currentWhatsNew;
2433
+ private whatsNewTools;
2372
2434
  /**
2373
2435
  * #2163: who this instance is to the what's-new notices — a ClassicBot room's agent, General, or a fleet worker (with
2374
2436
  * `coordinator` too when its tool set is coordinator or full, the ones that carry get_/set_web_settings).