@songsid/agend 2.1.12-beta.2 → 2.1.12-beta.4

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 (133) hide show
  1. package/README.md +54 -8
  2. package/README.zh-TW.md +104 -11
  3. package/dist/agent-endpoint.d.ts +2 -0
  4. package/dist/agent-endpoint.js +38 -29
  5. package/dist/agent-endpoint.js.map +1 -1
  6. package/dist/backend/claude-code.d.ts +20 -0
  7. package/dist/backend/claude-code.js +84 -25
  8. package/dist/backend/claude-code.js.map +1 -1
  9. package/dist/backend/codex.d.ts +20 -0
  10. package/dist/backend/codex.js +55 -5
  11. package/dist/backend/codex.js.map +1 -1
  12. package/dist/backend/factory.js +5 -5
  13. package/dist/backend/factory.js.map +1 -1
  14. package/dist/backend/index.d.ts +0 -1
  15. package/dist/backend/index.js +0 -1
  16. package/dist/backend/index.js.map +1 -1
  17. package/dist/backend/kiro.d.ts +10 -1
  18. package/dist/backend/kiro.js +13 -0
  19. package/dist/backend/kiro.js.map +1 -1
  20. package/dist/backend/mock.d.ts +1 -1
  21. package/dist/backend/mock.js +1 -1
  22. package/dist/backend/muse.d.ts +20 -0
  23. package/dist/backend/muse.js +68 -11
  24. package/dist/backend/muse.js.map +1 -1
  25. package/dist/backend/removed.d.ts +12 -0
  26. package/dist/backend/removed.js +18 -0
  27. package/dist/backend/removed.js.map +1 -0
  28. package/dist/backend/session-signals.js +5 -10
  29. package/dist/backend/session-signals.js.map +1 -1
  30. package/dist/backend/types.d.ts +15 -1
  31. package/dist/backend/types.js +0 -1
  32. package/dist/backend/types.js.map +1 -1
  33. package/dist/channel/adapters/discord.js +9 -0
  34. package/dist/channel/adapters/discord.js.map +1 -1
  35. package/dist/channel/adapters/telegram.d.ts +14 -8
  36. package/dist/channel/adapters/telegram.js +80 -26
  37. package/dist/channel/adapters/telegram.js.map +1 -1
  38. package/dist/channel/mcp-tools.js +2 -2
  39. package/dist/channel/mcp-tools.js.map +1 -1
  40. package/dist/classic-channel-manager.js +2 -2
  41. package/dist/classic-channel-manager.js.map +1 -1
  42. package/dist/cli.js +27 -53
  43. package/dist/cli.js.map +1 -1
  44. package/dist/command-table.d.ts +1 -1
  45. package/dist/command-table.js +4 -2
  46. package/dist/command-table.js.map +1 -1
  47. package/dist/config-validator.js +48 -10
  48. package/dist/config-validator.js.map +1 -1
  49. package/dist/config.js +7 -5
  50. package/dist/config.js.map +1 -1
  51. package/dist/context-guardian.d.ts +1 -1
  52. package/dist/context-guardian.js +1 -1
  53. package/dist/cross-instance-notice.d.ts +39 -0
  54. package/dist/cross-instance-notice.js +84 -0
  55. package/dist/cross-instance-notice.js.map +1 -0
  56. package/dist/daemon.d.ts +73 -2
  57. package/dist/daemon.js +333 -31
  58. package/dist/daemon.js.map +1 -1
  59. package/dist/daily-summary.js +0 -3
  60. package/dist/daily-summary.js.map +1 -1
  61. package/dist/fleet-manager.d.ts +16 -3
  62. package/dist/fleet-manager.js +110 -53
  63. package/dist/fleet-manager.js.map +1 -1
  64. package/dist/general-knowledge/skills/fleet-config/SKILL.md +1 -1
  65. package/dist/instance-config-impact.js +3 -0
  66. package/dist/instance-config-impact.js.map +1 -1
  67. package/dist/instance-lifecycle.d.ts +9 -1
  68. package/dist/instance-lifecycle.js +62 -7
  69. package/dist/instance-lifecycle.js.map +1 -1
  70. package/dist/locale.js +30 -6
  71. package/dist/locale.js.map +1 -1
  72. package/dist/memory-pressure.d.ts +8 -2
  73. package/dist/memory-pressure.js +10 -4
  74. package/dist/memory-pressure.js.map +1 -1
  75. package/dist/outbound-handlers.js +47 -25
  76. package/dist/outbound-handlers.js.map +1 -1
  77. package/dist/outbound-schemas.d.ts +0 -1
  78. package/dist/outbound-schemas.js +3 -3
  79. package/dist/outbound-schemas.js.map +1 -1
  80. package/dist/reply-dedup.d.ts +5 -0
  81. package/dist/reply-dedup.js +9 -0
  82. package/dist/reply-dedup.js.map +1 -1
  83. package/dist/settings-api.js +5 -1
  84. package/dist/settings-api.js.map +1 -1
  85. package/dist/setup-wizard.js +0 -4
  86. package/dist/setup-wizard.js.map +1 -1
  87. package/dist/spawn-gate.js +4 -3
  88. package/dist/spawn-gate.js.map +1 -1
  89. package/dist/target-queue-worker.d.ts +1 -1
  90. package/dist/topic-commands.d.ts +64 -5
  91. package/dist/topic-commands.js +172 -14
  92. package/dist/topic-commands.js.map +1 -1
  93. package/dist/transcript-jsonl.d.ts +20 -0
  94. package/dist/transcript-jsonl.js +64 -0
  95. package/dist/transcript-jsonl.js.map +1 -0
  96. package/dist/transcript-monitor.js +21 -29
  97. package/dist/transcript-monitor.js.map +1 -1
  98. package/dist/transcript-sources.d.ts +1 -1
  99. package/dist/transcript-sources.js +29 -26
  100. package/dist/transcript-sources.js.map +1 -1
  101. package/dist/turn-reply-guard.d.ts +25 -1
  102. package/dist/turn-reply-guard.js +36 -1
  103. package/dist/turn-reply-guard.js.map +1 -1
  104. package/dist/types.d.ts +13 -4
  105. package/dist/ui/dashboard.html +3 -3
  106. package/dist/ui/settings.html +58 -16
  107. package/dist/ui/view.html +17 -10
  108. package/dist/ui/web-terminal/terminal.css +1 -1
  109. package/dist/ui/web-terminal/terminal.js +5 -1
  110. package/dist/update-check.d.ts +15 -6
  111. package/dist/update-check.js +20 -7
  112. package/dist/update-check.js.map +1 -1
  113. package/dist/usage/format-rich.js +3 -7
  114. package/dist/usage/format-rich.js.map +1 -1
  115. package/dist/usage/i18n-keys.d.ts +1 -1
  116. package/dist/usage/i18n-keys.js +1 -1
  117. package/dist/usage/i18n-keys.js.map +1 -1
  118. package/dist/usage/i18n.d.ts +5 -2
  119. package/dist/usage/i18n.js +9 -5
  120. package/dist/usage/i18n.js.map +1 -1
  121. package/dist/usage/providers.d.ts +11 -5
  122. package/dist/usage/providers.js +55 -1
  123. package/dist/usage/providers.js.map +1 -1
  124. package/dist/usage/usage-api.d.ts +0 -9
  125. package/dist/usage/usage-api.js +7 -32
  126. package/dist/usage/usage-api.js.map +1 -1
  127. package/dist/wake-coordinator.js +1 -1
  128. package/dist/web-api.js +1 -2
  129. package/dist/web-api.js.map +1 -1
  130. package/package.json +1 -1
  131. package/dist/backend/gemini-cli.d.ts +0 -20
  132. package/dist/backend/gemini-cli.js +0 -169
  133. package/dist/backend/gemini-cli.js.map +0 -1
package/dist/daemon.d.ts CHANGED
@@ -219,6 +219,8 @@ export declare class PendingWorkTracker {
219
219
  private lastIdleOrder;
220
220
  constructor(now?: number);
221
221
  recordInbound(now?: number): void;
222
+ /** #1241 P2-1: when the latest delivery entered, bounding pre-arm activity. */
223
+ lastInboundTimestamp(): number;
222
224
  recordIdle(now?: number): boolean;
223
225
  hasPendingWork(): boolean;
224
226
  }
@@ -561,6 +563,11 @@ export declare class Daemon extends EventEmitter {
561
563
  private instanceStateIdleDebounceMs;
562
564
  private instanceStateStuckTimeoutMs;
563
565
  private instanceStateReadyPattern;
566
+ /**
567
+ * #1241 P2-2: an execution snapshot was suppressed by a blocking dialog.
568
+ * When the block lifts, the silence since counts as a fresh interval.
569
+ */
570
+ private sawBlockedInput;
564
571
  private instanceStateBusyPattern;
565
572
  private instanceStateMonitorActive;
566
573
  private sessionCheckpointWarningEmitted;
@@ -570,6 +577,35 @@ export declare class Daemon extends EventEmitter {
570
577
  private lastMalformedToolCallSignature;
571
578
  private proxyReplySeq;
572
579
  private lastReplyDropWarningAt;
580
+ /**
581
+ * #1241: an idle edge that has not yet proven the turn ended. Armed instead
582
+ * of recovering immediately; a steady idle snapshot past confirmAt promotes
583
+ * it to a real recovery, while a delivered reply, cancel, or newly observed
584
+ * work dissolves it. Scoped to one guard generation. Split clock domains
585
+ * (R3): edgeAt is wall-clock (compared only against lastBusyAt, also wall —
586
+ * event ordering, never a deadline), while confirmAt is monotonic
587
+ * (performance.now, same domain as the setTimeout firing the deadline), so
588
+ * a wall jump can neither shorten nor stretch the window.
589
+ */
590
+ private replyGuardIdleConfirm;
591
+ /**
592
+ * #1241 P3: the confirmation window's own wake-up. Monitor ticks may be up
593
+ * to 60 s apart, so without this the real delay could approach two windows.
594
+ * At the deadline a fresh, fenced capture re-observes the pane instead.
595
+ */
596
+ private replyGuardConfirmTimer;
597
+ /** #1241: dissolve a pending confirmation and its deadline, if any. */
598
+ private clearReplyGuardConfirm;
599
+ /** #1241: arm a confirmation window with its own deadline capture. */
600
+ private armReplyGuardConfirm;
601
+ /**
602
+ * #1241 P3: the window elapsed with no verdict from monitor ticks — drive
603
+ * one fresh observation. Generation-fenced twice: a stale record returns
604
+ * before capturing, and the resulting snapshot still flows through the
605
+ * normal confirmed evaluation. When the capture cannot run (paused, frozen,
606
+ * spawning), the record stays and the next monitor tick promotes instead.
607
+ */
608
+ private fireReplyGuardConfirm;
573
609
  private autoPauseController;
574
610
  private pauseRequested;
575
611
  /**
@@ -1122,6 +1158,15 @@ export declare class Daemon extends EventEmitter {
1122
1158
  * bounded SIGTERM -> SIGKILL fallback instead of typing into an unknown pane.
1123
1159
  */
1124
1160
  private drainBusyKiroForStop;
1161
+ /**
1162
+ * #1217: the CLI answered its quit command with a confirmation that a stray
1163
+ * key would answer for us (Claude's "Background work is running": Enter
1164
+ * picks "Exit and stop tasks"). Never choose an option: cancel the prompt
1165
+ * with Escape and let the caller stop the process itself (SIGTERM), which is
1166
+ * what the bounded grace would have come to anyway — just without waiting
1167
+ * it out. True when that prompt was on screen.
1168
+ */
1169
+ private cancelQuitConfirmation;
1125
1170
  stop(): Promise<void>;
1126
1171
  getHangDetector(): HangDetector | null;
1127
1172
  getInstanceState(): InstanceState | "paused";
@@ -1129,6 +1174,8 @@ export declare class Daemon extends EventEmitter {
1129
1174
  private interactionOwner;
1130
1175
  /** Cached, pure observation read; it never captures, constructs a backend or writes stdin. */
1131
1176
  getInteractionSnapshot(): InteractionSnapshot;
1177
+ /** Key of the last interaction snapshot actually emitted + broadcast (#1219). */
1178
+ private lastPublishedInteractionKey;
1132
1179
  private publishInteraction;
1133
1180
  private clearInteractionConfirmation;
1134
1181
  private unverifyInteraction;
@@ -1197,6 +1244,12 @@ export declare class Daemon extends EventEmitter {
1197
1244
  * manager does not pass through the dead MCP server. Consuming the turn state
1198
1245
  * here (edge-triggered, then reset) is what makes it at most once per turn.
1199
1246
  */
1247
+ /**
1248
+ * #1241: promote a pending idle-edge confirmation once the window has
1249
+ * elapsed. Steady idle with no reply and no work since the edge is proven
1250
+ * idle; anything else dissolves the confirmation and leaves the turn armed.
1251
+ */
1252
+ private maybeConfirmReplyGuardIdle;
1200
1253
  private maybeProxyReplyOnTurnEnd;
1201
1254
  private isClaudeCodeBackend;
1202
1255
  private replyCompletionGuardEnabled;
@@ -1810,10 +1863,28 @@ export declare class Daemon extends EventEmitter {
1810
1863
  * the conversation is gone.
1811
1864
  */
1812
1865
  private paneSaysNoConversation;
1813
- /** How many consecutive startups have failed without proving the session is gone. */
1814
- private unprovenResumeFailures;
1815
1866
  /** After this many, start fresh anyway — loudly — so a truly broken session still recovers. */
1816
1867
  private static readonly MAX_UNPROVEN_RESUME_FAILURES;
1868
+ /**
1869
+ * #1217: the unproven-failure count lives in the instance directory, keyed by
1870
+ * the session id. Each start builds a new Daemon, so a count kept on the
1871
+ * object was always "attempt 1/3": the escape hatch could never fire, and an
1872
+ * unresumable session failed every start forever. A different session id (or
1873
+ * none) starts the count again; a successful resume or a set-aside ends it.
1874
+ */
1875
+ private bumpUnprovenResumeFailures;
1876
+ private clearUnprovenResumeFailures;
1877
+ /**
1878
+ * #1217: a session id belongs to the backend that made it. After a backend
1879
+ * switch the old id names nothing the new CLI knows (a Claude id handed to
1880
+ * muse is "retained session not found"), so resuming it can only fail. The
1881
+ * owner is recorded on every successful start; an id recorded for another
1882
+ * backend is set aside (kept on disk, as always) and this start is fresh.
1883
+ * An id with no recorded owner (from before this was recorded) is left to
1884
+ * the resume itself — its failure is proven or counted like any other.
1885
+ */
1886
+ private setAsideForeignSession;
1887
+ private recordSessionOwner;
1817
1888
  /**
1818
1889
  * Set the session aside instead of deleting it.
1819
1890
  *