agim-cli 1.1.10 → 1.2.0

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 (76) hide show
  1. package/CHANGELOG.md +155 -0
  2. package/dist/cli.js +78 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/core/approval-bus.d.ts +18 -0
  5. package/dist/core/approval-bus.d.ts.map +1 -1
  6. package/dist/core/approval-bus.js +111 -0
  7. package/dist/core/approval-bus.js.map +1 -1
  8. package/dist/core/approval-router.d.ts.map +1 -1
  9. package/dist/core/approval-router.js +12 -0
  10. package/dist/core/approval-router.js.map +1 -1
  11. package/dist/core/audit-log.d.ts +39 -0
  12. package/dist/core/audit-log.d.ts.map +1 -1
  13. package/dist/core/audit-log.js +124 -0
  14. package/dist/core/audit-log.js.map +1 -1
  15. package/dist/core/boot-state.d.ts +17 -0
  16. package/dist/core/boot-state.d.ts.map +1 -0
  17. package/dist/core/boot-state.js +77 -0
  18. package/dist/core/boot-state.js.map +1 -0
  19. package/dist/core/job-recovery.d.ts +41 -1
  20. package/dist/core/job-recovery.d.ts.map +1 -1
  21. package/dist/core/job-recovery.js +216 -4
  22. package/dist/core/job-recovery.js.map +1 -1
  23. package/dist/core/memory-consolidate.d.ts +12 -0
  24. package/dist/core/memory-consolidate.d.ts.map +1 -0
  25. package/dist/core/memory-consolidate.js +242 -0
  26. package/dist/core/memory-consolidate.js.map +1 -0
  27. package/dist/core/memory-distill.d.ts +30 -0
  28. package/dist/core/memory-distill.d.ts.map +1 -0
  29. package/dist/core/memory-distill.js +213 -0
  30. package/dist/core/memory-distill.js.map +1 -0
  31. package/dist/core/memory-rpc.d.ts +11 -0
  32. package/dist/core/memory-rpc.d.ts.map +1 -0
  33. package/dist/core/memory-rpc.js +94 -0
  34. package/dist/core/memory-rpc.js.map +1 -0
  35. package/dist/core/memory-vector.d.ts +44 -0
  36. package/dist/core/memory-vector.d.ts.map +1 -0
  37. package/dist/core/memory-vector.js +360 -0
  38. package/dist/core/memory-vector.js.map +1 -0
  39. package/dist/core/memory.d.ts +140 -0
  40. package/dist/core/memory.d.ts.map +1 -0
  41. package/dist/core/memory.js +714 -0
  42. package/dist/core/memory.js.map +1 -0
  43. package/dist/core/persona.d.ts +24 -0
  44. package/dist/core/persona.d.ts.map +1 -0
  45. package/dist/core/persona.js +80 -0
  46. package/dist/core/persona.js.map +1 -0
  47. package/dist/core/push-rpc.d.ts +26 -0
  48. package/dist/core/push-rpc.d.ts.map +1 -0
  49. package/dist/core/push-rpc.js +123 -0
  50. package/dist/core/push-rpc.js.map +1 -0
  51. package/dist/core/router.d.ts.map +1 -1
  52. package/dist/core/router.js +26 -1
  53. package/dist/core/router.js.map +1 -1
  54. package/dist/core/types.d.ts +41 -0
  55. package/dist/core/types.d.ts.map +1 -1
  56. package/dist/plugins/agents/claude-code/index.d.ts +9 -0
  57. package/dist/plugins/agents/claude-code/index.d.ts.map +1 -1
  58. package/dist/plugins/agents/claude-code/index.js +37 -0
  59. package/dist/plugins/agents/claude-code/index.js.map +1 -1
  60. package/dist/plugins/agents/claude-code/mcp-approval-server.d.ts +8 -0
  61. package/dist/plugins/agents/claude-code/mcp-approval-server.d.ts.map +1 -1
  62. package/dist/plugins/agents/claude-code/mcp-approval-server.js +181 -0
  63. package/dist/plugins/agents/claude-code/mcp-approval-server.js.map +1 -1
  64. package/dist/plugins/messengers/telegram/telegram-adapter.d.ts +5 -1
  65. package/dist/plugins/messengers/telegram/telegram-adapter.d.ts.map +1 -1
  66. package/dist/plugins/messengers/telegram/telegram-adapter.js +85 -0
  67. package/dist/plugins/messengers/telegram/telegram-adapter.js.map +1 -1
  68. package/dist/web/public/settings.html +106 -10
  69. package/dist/web/public/tasks.html +977 -1
  70. package/dist/web/server.d.ts.map +1 -1
  71. package/dist/web/server.js +433 -6
  72. package/dist/web/server.js.map +1 -1
  73. package/dist/web/viewer-render.d.ts.map +1 -1
  74. package/dist/web/viewer-render.js +7 -4
  75. package/dist/web/viewer-render.js.map +1 -1
  76. package/package.json +4 -1
@@ -1 +1 @@
1
- {"version":3,"file":"audit-log.js","sourceRoot":"","sources":["../../src/core/audit-log.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audit-log.js","sourceRoot":"","sources":["../../src/core/audit-log.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export type BootPhase = 'starting' | 'web_ready' | 'messengers_loading' | 'ready';
2
+ export declare function getBootPhase(): BootPhase;
3
+ export declare function getBootInfo(): {
4
+ phase: BootPhase;
5
+ startedAt: number;
6
+ msSinceStart: number;
7
+ phaseTimings: Partial<Record<BootPhase, number>>;
8
+ };
9
+ /**
10
+ * Advance to `phase`. Idempotent — re-setting the current phase is a
11
+ * no-op. Going backward (e.g. setting 'starting' after 'ready') is
12
+ * also a no-op + warn (would only happen on programmer error).
13
+ */
14
+ export declare function setBootPhase(phase: BootPhase): void;
15
+ /** Test helper — reset to 'starting'. */
16
+ export declare function _resetBootStateForTests(): void;
17
+ //# sourceMappingURL=boot-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boot-state.d.ts","sourceRoot":"","sources":["../../src/core/boot-state.ts"],"names":[],"mappings":"AAqBA,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,oBAAoB,GAAG,OAAO,CAAA;AAQjF,wBAAgB,YAAY,IAAI,SAAS,CAExC;AAED,wBAAgB,WAAW,IAAI;IAC7B,KAAK,EAAE,SAAS,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAA;CACjD,CAQA;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CA0BnD;AAED,yCAAyC;AACzC,wBAAgB,uBAAuB,IAAI,IAAI,CAO9C"}
@@ -0,0 +1,77 @@
1
+ // boot-state — module-level tracker for "where are we in startup?".
2
+ //
3
+ // /api/service/status returns the phase so the web console's restart
4
+ // polling can wait for `ready` (everything wired) instead of just
5
+ // `web_ready` (HTTP server bound, but messengers / a2a not yet up).
6
+ //
7
+ // Phases progress strictly forward; never roll back:
8
+ //
9
+ // starting — process started, before any subsystem is up
10
+ // web_ready — HTTP server bound to port (browser can connect)
11
+ // messengers_loading — adapters registered, .start() in flight
12
+ // ready — every adapter resolved .start(); processRestartPending
13
+ // done; ok to send / receive IM messages
14
+ //
15
+ // On graceful shutdown we don't roll back; the process exits before
16
+ // anyone cares to read.
17
+ import { logger as rootLogger } from './logger.js';
18
+ const log = rootLogger.child({ component: 'boot-state' });
19
+ const ORDER = ['starting', 'web_ready', 'messengers_loading', 'ready'];
20
+ let currentPhase = 'starting';
21
+ const phaseStarts = { starting: Date.now() };
22
+ const phaseDurations = {};
23
+ export function getBootPhase() {
24
+ return currentPhase;
25
+ }
26
+ export function getBootInfo() {
27
+ const startedAt = phaseStarts.starting ?? Date.now();
28
+ return {
29
+ phase: currentPhase,
30
+ startedAt,
31
+ msSinceStart: Date.now() - startedAt,
32
+ phaseTimings: { ...phaseDurations },
33
+ };
34
+ }
35
+ /**
36
+ * Advance to `phase`. Idempotent — re-setting the current phase is a
37
+ * no-op. Going backward (e.g. setting 'starting' after 'ready') is
38
+ * also a no-op + warn (would only happen on programmer error).
39
+ */
40
+ export function setBootPhase(phase) {
41
+ const cur = ORDER.indexOf(currentPhase);
42
+ const next = ORDER.indexOf(phase);
43
+ if (next < 0) {
44
+ log.warn({ event: 'boot.invalid_phase', phase });
45
+ return;
46
+ }
47
+ if (next === cur)
48
+ return;
49
+ if (next < cur) {
50
+ log.warn({ event: 'boot.backward_phase', from: currentPhase, to: phase });
51
+ return;
52
+ }
53
+ // Record duration of the phase we're leaving (from its start, if known).
54
+ const now = Date.now();
55
+ const startOfLeaving = phaseStarts[currentPhase];
56
+ if (typeof startOfLeaving === 'number') {
57
+ phaseDurations[currentPhase] = now - startOfLeaving;
58
+ }
59
+ log.info({
60
+ event: 'boot.phase',
61
+ from: currentPhase,
62
+ to: phase,
63
+ leavingDurationMs: phaseDurations[currentPhase] ?? null,
64
+ });
65
+ currentPhase = phase;
66
+ phaseStarts[phase] = now;
67
+ }
68
+ /** Test helper — reset to 'starting'. */
69
+ export function _resetBootStateForTests() {
70
+ currentPhase = 'starting';
71
+ for (const k of ORDER) {
72
+ delete phaseStarts[k];
73
+ delete phaseDurations[k];
74
+ }
75
+ phaseStarts.starting = Date.now();
76
+ }
77
+ //# sourceMappingURL=boot-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boot-state.js","sourceRoot":"","sources":["../../src/core/boot-state.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,EAAE;AACF,qEAAqE;AACrE,kEAAkE;AAClE,oEAAoE;AACpE,EAAE;AACF,qDAAqD;AACrD,EAAE;AACF,oEAAoE;AACpE,wEAAwE;AACxE,iEAAiE;AACjE,+EAA+E;AAC/E,+DAA+D;AAC/D,EAAE;AACF,oEAAoE;AACpE,wBAAwB;AAExB,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,aAAa,CAAA;AAElD,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAA;AAIzD,MAAM,KAAK,GAAgB,CAAC,UAAU,EAAE,WAAW,EAAE,oBAAoB,EAAE,OAAO,CAAC,CAAA;AAEnF,IAAI,YAAY,GAAc,UAAU,CAAA;AACxC,MAAM,WAAW,GAAuC,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;AAChF,MAAM,cAAc,GAAuC,EAAE,CAAA;AAE7D,MAAM,UAAU,YAAY;IAC1B,OAAO,YAAY,CAAA;AACrB,CAAC;AAED,MAAM,UAAU,WAAW;IAMzB,MAAM,SAAS,GAAG,WAAW,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,CAAA;IACpD,OAAO;QACL,KAAK,EAAE,YAAY;QACnB,SAAS;QACT,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;QACpC,YAAY,EAAE,EAAE,GAAG,cAAc,EAAE;KACpC,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,KAAgB;IAC3C,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;IACvC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IACjC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,CAAA;QAChD,OAAM;IACR,CAAC;IACD,IAAI,IAAI,KAAK,GAAG;QAAE,OAAM;IACxB,IAAI,IAAI,GAAG,GAAG,EAAE,CAAC;QACf,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;QACzE,OAAM;IACR,CAAC;IACD,yEAAyE;IACzE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACtB,MAAM,cAAc,GAAG,WAAW,CAAC,YAAY,CAAC,CAAA;IAChD,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;QACvC,cAAc,CAAC,YAAY,CAAC,GAAG,GAAG,GAAG,cAAc,CAAA;IACrD,CAAC;IACD,GAAG,CAAC,IAAI,CAAC;QACP,KAAK,EAAE,YAAY;QACnB,IAAI,EAAE,YAAY;QAClB,EAAE,EAAE,KAAK;QACT,iBAAiB,EAAE,cAAc,CAAC,YAAY,CAAC,IAAI,IAAI;KACxD,CAAC,CAAA;IACF,YAAY,GAAG,KAAK,CAAA;IACpB,WAAW,CAAC,KAAK,CAAC,GAAG,GAAG,CAAA;AAC1B,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,uBAAuB;IACrC,YAAY,GAAG,UAAU,CAAA;IACzB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,OAAO,WAAW,CAAC,CAAC,CAAC,CAAA;QACrB,OAAO,cAAc,CAAC,CAAC,CAAC,CAAA;IAC1B,CAAC;IACD,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;AACnC,CAAC"}
@@ -1,3 +1,4 @@
1
+ import type { ButtonCallback } from './types.js';
1
2
  interface PendingRetry {
2
3
  jobId: number;
3
4
  agent: string;
@@ -9,7 +10,30 @@ interface PendingRetry {
9
10
  creatorId: string;
10
11
  /** ms-epoch when the entry expires (interrupted_at + window). */
11
12
  expiresAt: number;
13
+ /** v1.2 — id of the choice card we sent for this entry (if the adapter
14
+ * supported sendChoiceCard). Used to edit the card to its terminal text
15
+ * after the user picks a button or replies via text. Null when we fell
16
+ * back to plain text. */
17
+ cardMessageId: string | null;
12
18
  }
19
+ /**
20
+ * v1.2 — executor hook injected by cli.ts at boot. When the user accepts
21
+ * a retry (via text "1" OR button "🔁 重发"), the new inline-job row is
22
+ * created here but the agent never runs unless we feed a synthetic
23
+ * MessageContext through cli's handleMessage. cli.ts owns that closure
24
+ * (it has the registry, sink, agent dispatcher) so we register the
25
+ * callback here and invoke it after a successful retry.
26
+ *
27
+ * Without this hook the row stays in 'pending' forever. That bug
28
+ * affected the button path only (text path was working via the
29
+ * messenger's own onMessage chain).
30
+ */
31
+ export interface RecoveryExecutorArgs {
32
+ entry: PendingRetry;
33
+ newJobId: number;
34
+ }
35
+ export type RecoveryExecutor = (args: RecoveryExecutorArgs) => Promise<void>;
36
+ export declare function setRecoveryExecutor(fn: RecoveryExecutor | null): void;
13
37
  /** Test hook — wipe the in-memory state. */
14
38
  export declare function _resetPendingForTests(): void;
15
39
  /** Test hook — inspect current state. */
@@ -38,11 +62,27 @@ export type RecoveryReplyOutcome = {
38
62
  };
39
63
  /** Try to interpret a user's reply as a recovery decision. Returns an
40
64
  * outcome the caller can render. Side-effect: on a recognized decision,
41
- * the pending entry is removed and the DB row transitions. */
65
+ * the pending entry is removed and the DB row transitions. When the
66
+ * entry was originally sent as a native choice card, this also edits
67
+ * the card to its terminal state so its buttons can't be tapped after
68
+ * the user already replied with text — otherwise a stale tap would
69
+ * hit the "请求已过期" branch and read as a glitch. */
42
70
  export declare function tryHandleRecoveryReply(threadKey: string, text: string): RecoveryReplyOutcome;
43
71
  /** Convenience for cli.ts: was the thread expecting a recovery reply just
44
72
  * before we routed this message? Used to skip approval / reminder
45
73
  * interceptors when the user is replying to a recovery prompt. */
46
74
  export declare function hasPendingRecovery(threadKey: string): boolean;
75
+ /**
76
+ * True if the given callback_data belongs to a recovery prompt — used by
77
+ * approval-router's button dispatcher to route the tap to us instead of
78
+ * the approval flow.
79
+ */
80
+ export declare function isRecoveryButtonData(data: string): boolean;
81
+ /**
82
+ * Handle a button tap on a recovery card. Mirrors tryHandleRecoveryReply's
83
+ * semantics: returns the outcome the caller can act on. Also edits the
84
+ * card (drops the buttons) so a stale tap can't fire twice.
85
+ */
86
+ export declare function handleRecoveryButton(platform: string, cb: ButtonCallback): Promise<RecoveryReplyOutcome | null>;
47
87
  export {};
48
88
  //# sourceMappingURL=job-recovery.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"job-recovery.d.ts","sourceRoot":"","sources":["../../src/core/job-recovery.ts"],"names":[],"mappings":"AAyCA,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAA;CAClB;AAOD,4CAA4C;AAC5C,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED,yCAAyC;AACzC,wBAAgB,oBAAoB,IAAI,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAEhE;AA+BD,gEAAgE;AAChE,wBAAsB,wBAAwB,IAAI,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CA8DjG;AAED;wEACwE;AACxE,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,MAAmB,GAAG,MAAM,CAYpE;AAED,0CAA0C;AAC1C,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,oBAAoB,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,GAC5E;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAA;AAE3C;;+DAE+D;AAC/D,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,oBAAoB,CAkC5F;AAED;;mEAEmE;AACnE,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE7D"}
1
+ {"version":3,"file":"job-recovery.d.ts","sourceRoot":"","sources":["../../src/core/job-recovery.ts"],"names":[],"mappings":"AAsCA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAQhD,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAA;IACjB;;;8BAG0B;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;CAC7B;AAOD;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,YAAY,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;CACjB;AACD,MAAM,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAE5E,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,gBAAgB,GAAG,IAAI,GAAG,IAAI,CAErE;AAED,4CAA4C;AAC5C,wBAAgB,qBAAqB,IAAI,IAAI,CAG5C;AAED,yCAAyC;AACzC,wBAAgB,oBAAoB,IAAI,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAEhE;AA+BD,gEAAgE;AAChE,wBAAsB,wBAAwB,IAAI,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CA4EjG;AAED;wEACwE;AACxE,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,MAAmB,GAAG,MAAM,CAYpE;AAED,0CAA0C;AAC1C,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,oBAAoB,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,GAC5E;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAA;AAmB3C;;;;;;mDAMmD;AACnD,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,oBAAoB,CA4C5F;AAED;;mEAEmE;AACnE,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE7D;AA2CD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1D;AA0BD;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAsFrH"}
@@ -26,15 +26,23 @@
26
26
  // entry that outlives the row it points at.
27
27
  import { logger as rootLogger } from './logger.js';
28
28
  import { createInlineJob, findRecoverableInterrupted, getRecoveryWindowMs, markInterruptedCancelled, markJobReplacedBy, sweepAbandonedInterrupted, } from './job-board.js';
29
- import { sink } from './message-sink.js';
29
+ import { sink, resolveMessenger } from './message-sink.js';
30
30
  const log = rootLogger.child({ component: 'job-recovery' });
31
+ /** Choice-card `data` prefix this module owns. approval-router's button
32
+ * dispatch forwards taps starting with this prefix to handleRecoveryButton. */
33
+ const RECOVERY_CB_PREFIX = 'rec:';
31
34
  /** Thread-keyed pending entries. One per thread — if a thread happens to
32
35
  * have multiple interrupted rows (rare), we surface the most recent only
33
36
  * and the rest get swept to 'abandoned' next sweep. */
34
37
  const pending = new Map();
38
+ let recoveryExecutor = null;
39
+ export function setRecoveryExecutor(fn) {
40
+ recoveryExecutor = fn;
41
+ }
35
42
  /** Test hook — wipe the in-memory state. */
36
43
  export function _resetPendingForTests() {
37
44
  pending.clear();
45
+ recoveryExecutor = null;
38
46
  }
39
47
  /** Test hook — inspect current state. */
40
48
  export function _peekPendingForTests() {
@@ -91,7 +99,7 @@ export async function scanInterruptedAndNotify() {
91
99
  const interruptedAtMs = j.completed_at
92
100
  ? Date.parse(`${j.completed_at}Z`)
93
101
  : Date.now();
94
- pending.set(key, {
102
+ const entry = {
95
103
  jobId: j.id,
96
104
  agent: j.agent,
97
105
  prompt: j.prompt,
@@ -101,7 +109,19 @@ export async function scanInterruptedAndNotify() {
101
109
  threadId: parsed.threadId,
102
110
  creatorId: j.creator_id,
103
111
  expiresAt: interruptedAtMs + windowMs,
104
- });
112
+ cardMessageId: null,
113
+ };
114
+ pending.set(key, entry);
115
+ // v1.2 — try the platform's native choice card first; fall back to plain
116
+ // text when the adapter doesn't implement sendChoiceCard (WeChat-iLink,
117
+ // DingTalk text mode, …). Both paths support text replies ("1" / "重发")
118
+ // so the user always has a way out.
119
+ const cardSent = await trySendRecoveryCard(entry, windowMin);
120
+ if (cardSent) {
121
+ entry.cardMessageId = cardSent;
122
+ notified++;
123
+ continue;
124
+ }
105
125
  try {
106
126
  await sink.deliver({
107
127
  platform: parsed.platform,
@@ -110,6 +130,7 @@ export async function scanInterruptedAndNotify() {
110
130
  payload: formatNotice(j, windowMin),
111
131
  kind: 'text',
112
132
  priority: 'normal',
133
+ source: 'system',
113
134
  });
114
135
  notified++;
115
136
  }
@@ -140,9 +161,31 @@ export function sweepExpiredPending(now = Date.now()) {
140
161
  }
141
162
  return n;
142
163
  }
164
+ async function editCardForTextReply(entry, finalText) {
165
+ const adapter = resolveMessenger(entry.platform);
166
+ if (!adapter?.editChoiceCard || !entry.cardMessageId)
167
+ return;
168
+ try {
169
+ await adapter.editChoiceCard(entry.threadId, entry.cardMessageId, finalText);
170
+ log.info({
171
+ event: 'recovery.text_reply.card_edited',
172
+ jobId: entry.jobId, finalText: finalText.slice(0, 60),
173
+ });
174
+ }
175
+ catch (err) {
176
+ log.warn({
177
+ event: 'recovery.text_reply.card_edit_failed',
178
+ jobId: entry.jobId, err: err instanceof Error ? err.message : String(err),
179
+ }, 'editing card after text reply failed — buttons may stay live until card expires');
180
+ }
181
+ }
143
182
  /** Try to interpret a user's reply as a recovery decision. Returns an
144
183
  * outcome the caller can render. Side-effect: on a recognized decision,
145
- * the pending entry is removed and the DB row transitions. */
184
+ * the pending entry is removed and the DB row transitions. When the
185
+ * entry was originally sent as a native choice card, this also edits
186
+ * the card to its terminal state so its buttons can't be tapped after
187
+ * the user already replied with text — otherwise a stale tap would
188
+ * hit the "请求已过期" branch and read as a glitch. */
146
189
  export function tryHandleRecoveryReply(threadKey, text) {
147
190
  const entry = pending.get(threadKey);
148
191
  if (!entry)
@@ -153,6 +196,15 @@ export function tryHandleRecoveryReply(threadKey, text) {
153
196
  if (!isRetry && !isCancel)
154
197
  return { kind: 'not-recovery-reply' };
155
198
  pending.delete(threadKey);
199
+ // Fire-and-forget: if there's a card attached to this entry, edit it
200
+ // to terminal text + strip buttons. Errors logged but don't block the
201
+ // outcome the caller is waiting on.
202
+ if (entry.cardMessageId) {
203
+ const finalText = isRetry
204
+ ? `🔁 已重发 · ${nowHm()}\n「${entry.prompt.replace(/\s+/g, ' ').slice(0, 60)}…」`
205
+ : `✖ 已取消 · ${nowHm()}`;
206
+ void editCardForTextReply(entry, finalText);
207
+ }
156
208
  if (isCancel) {
157
209
  markInterruptedCancelled(entry.jobId);
158
210
  return { kind: 'cancelled', oldJobId: entry.jobId };
@@ -182,4 +234,164 @@ export function tryHandleRecoveryReply(threadKey, text) {
182
234
  export function hasPendingRecovery(threadKey) {
183
235
  return pending.has(threadKey);
184
236
  }
237
+ // ─── v1.2: native choice-card flow ────────────────────────────────────
238
+ /** Render the card prompt for one interrupted entry. */
239
+ function buildChoiceCard(entry, windowMin) {
240
+ const flat = entry.prompt.replace(/\s+/g, ' ').trim();
241
+ const preview = flat.length > 80 ? `${flat.slice(0, 80)}…` : flat;
242
+ return {
243
+ title: '⚠️ 上次的消息被服务重启中断了',
244
+ body: `「${preview}」\n${windowMin} 分钟内有效`,
245
+ choices: [
246
+ { label: '🔁 重发', data: `${RECOVERY_CB_PREFIX}${entry.jobId}:y` },
247
+ { label: '✖ 取消', data: `${RECOVERY_CB_PREFIX}${entry.jobId}:n` },
248
+ ],
249
+ };
250
+ }
251
+ /** Try to send a native choice card via the adapter. Returns the new
252
+ * message id on success, null if the adapter doesn't support it (so caller
253
+ * can fall back to plain text). */
254
+ async function trySendRecoveryCard(entry, windowMin) {
255
+ const adapter = resolveMessenger(entry.platform);
256
+ if (!adapter?.sendChoiceCard)
257
+ return null;
258
+ try {
259
+ const sent = await adapter.sendChoiceCard(entry.threadId, buildChoiceCard(entry, windowMin));
260
+ log.info({
261
+ event: 'recovery.card_sent',
262
+ jobId: entry.jobId,
263
+ platform: entry.platform,
264
+ messageId: sent.messageId,
265
+ });
266
+ return sent.messageId;
267
+ }
268
+ catch (err) {
269
+ log.warn({
270
+ event: 'recovery.card_send_failed',
271
+ jobId: entry.jobId,
272
+ err: err instanceof Error ? err.message : String(err),
273
+ }, 'sendChoiceCard threw — falling back to plain text');
274
+ return null;
275
+ }
276
+ }
277
+ /**
278
+ * True if the given callback_data belongs to a recovery prompt — used by
279
+ * approval-router's button dispatcher to route the tap to us instead of
280
+ * the approval flow.
281
+ */
282
+ export function isRecoveryButtonData(data) {
283
+ return typeof data === 'string' && data.startsWith(RECOVERY_CB_PREFIX);
284
+ }
285
+ /** In-process dedupe of repeated callback_query deliveries — Telegram may
286
+ * retry the callback if it doesn't see an ack in time. Without this,
287
+ * the second delivery sees an empty pending map → "expired" branch fires
288
+ * and may overwrite the just-set terminal card. */
289
+ const recentClicks = new Map(); // `${jobId}:${choice}` → ts
290
+ const CLICK_DEDUPE_MS = 30_000;
291
+ function isDuplicateClick(jobId, choice) {
292
+ const key = `${jobId}:${choice}`;
293
+ const ts = Date.now();
294
+ // Sweep stale entries opportunistically.
295
+ for (const [k, t] of recentClicks.entries()) {
296
+ if (ts - t > CLICK_DEDUPE_MS)
297
+ recentClicks.delete(k);
298
+ }
299
+ if (recentClicks.has(key))
300
+ return true;
301
+ recentClicks.set(key, ts);
302
+ return false;
303
+ }
304
+ function nowHm() {
305
+ const d = new Date();
306
+ return `${String(d.getHours()).padStart(2, '0')}:${String(d.getMinutes()).padStart(2, '0')}`;
307
+ }
308
+ /**
309
+ * Handle a button tap on a recovery card. Mirrors tryHandleRecoveryReply's
310
+ * semantics: returns the outcome the caller can act on. Also edits the
311
+ * card (drops the buttons) so a stale tap can't fire twice.
312
+ */
313
+ export async function handleRecoveryButton(platform, cb) {
314
+ const remainder = cb.data.slice(RECOVERY_CB_PREFIX.length); // e.g. "42:y"
315
+ const [jobIdStr, choice] = remainder.split(':');
316
+ const jobId = Number.parseInt(jobIdStr, 10);
317
+ if (!Number.isFinite(jobId) || (choice !== 'y' && choice !== 'n')) {
318
+ log.warn({ event: 'recovery.button.bad_data', data: cb.data });
319
+ await cb.ack('按钮数据格式错误').catch(() => { });
320
+ return null;
321
+ }
322
+ log.info({
323
+ event: 'recovery.button.received',
324
+ platform, jobId, choice, threadId: cb.threadId, messageId: cb.messageId,
325
+ });
326
+ // Dedupe identical clicks within a short window — Telegram resends
327
+ // callbacks when ack times out; we don't want to double-process.
328
+ if (isDuplicateClick(jobId, choice)) {
329
+ log.info({ event: 'recovery.button.dedup_skip', jobId, choice });
330
+ await cb.ack().catch(() => { }); // silent ack; no card edit
331
+ return null;
332
+ }
333
+ // Look up the pending entry by jobId.
334
+ let entry;
335
+ let entryKey;
336
+ for (const [k, v] of pending.entries()) {
337
+ if (v.jobId === jobId) {
338
+ entry = v;
339
+ entryKey = k;
340
+ break;
341
+ }
342
+ }
343
+ if (!entry || !entryKey) {
344
+ await cb.ack('请求已过期').catch(() => { });
345
+ const adapter = resolveMessenger(platform);
346
+ if (adapter?.editChoiceCard) {
347
+ await adapter.editChoiceCard(cb.threadId, cb.messageId, `⏱ 已过期 · ${nowHm()}`).catch(() => { });
348
+ }
349
+ return null;
350
+ }
351
+ // Only the original requester may resolve the card. In group chats
352
+ // anyone can see the buttons; without this check a bystander could
353
+ // tap "取消" and kill someone else's retry — or worse, tap "重发" and
354
+ // re-run a prompt that wasn't theirs.
355
+ if (entry.creatorId && cb.userId && entry.creatorId !== cb.userId) {
356
+ log.warn({
357
+ event: 'recovery.button.unauthorized_tapper',
358
+ jobId, expected: entry.creatorId, actual: cb.userId,
359
+ });
360
+ await cb.ack('只有发起者可以处理这条消息').catch(() => { });
361
+ return null;
362
+ }
363
+ const reply = choice === 'y' ? '1' : '2';
364
+ const outcome = tryHandleRecoveryReply(entryKey, reply);
365
+ const ackText = choice === 'y' ? '🔁 已请求重发' : '✖ 已取消';
366
+ await cb.ack(ackText).catch(() => { });
367
+ // Append a HH:MM marker to the edit text so a retry-delivery's "not
368
+ // modified" edit doesn't silently swallow the visual update (Telegram
369
+ // rejects edits whose new content matches the current).
370
+ const adapter = resolveMessenger(platform);
371
+ if (adapter?.editChoiceCard) {
372
+ const finalText = choice === 'y'
373
+ ? `🔁 已重发 · ${nowHm()}\n「${entry.prompt.replace(/\s+/g, ' ').slice(0, 60)}…」`
374
+ : `✖ 已取消 · ${nowHm()}`;
375
+ await adapter.editChoiceCard(cb.threadId, cb.messageId, finalText).catch(() => { });
376
+ log.info({ event: 'recovery.button.edited', jobId, choice, finalText: finalText.slice(0, 60) });
377
+ }
378
+ // P0-3 fix: button-tap path was creating the replacement row but never
379
+ // running the agent. Invoke the executor cli.ts registered at boot.
380
+ if (outcome.kind === 'retried' && recoveryExecutor) {
381
+ try {
382
+ await recoveryExecutor({ entry: outcome.entry, newJobId: outcome.newJobId });
383
+ }
384
+ catch (err) {
385
+ log.warn({
386
+ event: 'recovery.button.executor_failed', jobId, err: String(err),
387
+ }, 'retry executor threw — replacement job created but agent did not run');
388
+ }
389
+ }
390
+ else if (outcome.kind === 'retried' && !recoveryExecutor) {
391
+ log.warn({
392
+ event: 'recovery.button.no_executor', jobId,
393
+ }, 'no executor registered — replacement job will stay pending');
394
+ }
395
+ return outcome;
396
+ }
185
397
  //# sourceMappingURL=job-recovery.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"job-recovery.js","sourceRoot":"","sources":["../../src/core/job-recovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"job-recovery.js","sourceRoot":"","sources":["../../src/core/job-recovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * One pass: consolidate every active user. Returns { users, updated }.
3
+ * Safe to call manually (e.g. from a CLI / /memory consolidate command).
4
+ */
5
+ export declare function runConsolidationOnce(): Promise<{
6
+ users: number;
7
+ updated: number;
8
+ }>;
9
+ /** Start the periodic consolidator. Idempotent; safe to call once at boot. */
10
+ export declare function startMemoryConsolidator(): void;
11
+ export declare function stopMemoryConsolidator(): void;
12
+ //# sourceMappingURL=memory-consolidate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-consolidate.d.ts","sourceRoot":"","sources":["../../src/core/memory-consolidate.ts"],"names":[],"mappings":"AAkMA;;;GAGG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAkBxF;AAKD,8EAA8E;AAC9E,wBAAgB,uBAAuB,IAAI,IAAI,CAgB9C;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAK7C"}