instar 1.2.80 → 1.2.82

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 (40) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +28 -15
  3. package/dist/commands/server.js.map +1 -1
  4. package/dist/core/PostUpdateMigrator.d.ts +7 -0
  5. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  6. package/dist/core/PostUpdateMigrator.js +59 -75
  7. package/dist/core/PostUpdateMigrator.js.map +1 -1
  8. package/dist/core/SessionManager.d.ts +14 -1
  9. package/dist/core/SessionManager.d.ts.map +1 -1
  10. package/dist/core/SessionManager.js +41 -1
  11. package/dist/core/SessionManager.js.map +1 -1
  12. package/dist/messaging/MessageRouter.d.ts +8 -0
  13. package/dist/messaging/MessageRouter.d.ts.map +1 -1
  14. package/dist/messaging/MessageRouter.js +37 -0
  15. package/dist/messaging/MessageRouter.js.map +1 -1
  16. package/dist/scaffold/templates.d.ts.map +1 -1
  17. package/dist/scaffold/templates.js +15 -0
  18. package/dist/scaffold/templates.js.map +1 -1
  19. package/dist/server/routes.d.ts.map +1 -1
  20. package/dist/server/routes.js +115 -0
  21. package/dist/server/routes.js.map +1 -1
  22. package/dist/threadline/CollaborationSurfacer.d.ts +67 -18
  23. package/dist/threadline/CollaborationSurfacer.d.ts.map +1 -1
  24. package/dist/threadline/CollaborationSurfacer.js +132 -37
  25. package/dist/threadline/CollaborationSurfacer.js.map +1 -1
  26. package/dist/threadline/ThreadResumeMap.d.ts.map +1 -1
  27. package/dist/threadline/ThreadResumeMap.js +10 -2
  28. package/dist/threadline/ThreadResumeMap.js.map +1 -1
  29. package/dist/threadline/TopicLinkageHandler.d.ts +7 -2
  30. package/dist/threadline/TopicLinkageHandler.d.ts.map +1 -1
  31. package/dist/threadline/TopicLinkageHandler.js +33 -18
  32. package/dist/threadline/TopicLinkageHandler.js.map +1 -1
  33. package/package.json +1 -1
  34. package/src/data/builtin-manifest.json +62 -62
  35. package/src/scaffold/templates.ts +15 -0
  36. package/upgrades/1.2.81.md +40 -0
  37. package/upgrades/1.2.82.md +26 -0
  38. package/upgrades/side-effects/1.2.81.md +127 -0
  39. package/upgrades/side-effects/threadline-notification-routing.md +46 -0
  40. package/upgrades/side-effects/threadline-reply-surfacing.md +68 -0
@@ -1,19 +1,26 @@
1
1
  /**
2
- * CollaborationSurfacer — makes PARENTLESS Threadline conversations visible to
3
- * the operator (CMT-509 §2).
2
+ * CollaborationSurfacer — the single funnel for making Threadline activity
3
+ * visible to the operator WITHOUT spawning a topic per event (CMT-509 §2 +
4
+ * CMT-519 notification routing).
4
5
  *
5
- * Routing spine (operator directive 2026-05-25):
6
- * - A conversation WITH a parent topic (it was started from / is bound to a
7
- * Telegram topic) surfaces THERE via TopicLinkageHandler this surfacer does
8
- * NOT touch it.
9
- * - A PARENTLESS conversation (a peer reached out cold, no topic association)
10
- * surfaces to a SINGLE dedicated "Threadline" Telegram topic — created on
11
- * demand once and reused, NEVER the generic attention list, NEVER a per-thread
12
- * topic.
6
+ * Routing spine (operator directives 2026-05-25):
7
+ * - A conversation WITH a parent topic surfaces THERE via TopicLinkageHandler
8
+ * this surfacer does NOT touch its *content* (real replies).
9
+ * - A PARENTLESS conversation (a peer reached out cold) surfaces to a SINGLE
10
+ * dedicated "Threadline" Telegram topic created on demand once and reused,
11
+ * NEVER the generic attention list, NEVER a per-thread/per-event topic.
12
+ * - STATUS / housekeeping notices (loop-gate wind-down, etc. `notify()`) go to
13
+ * that SAME silent hub, NEVER the parent topic the operator is working in (D1).
13
14
  *
14
- * Near-silent by design: surfaces only a warranted (per the warrants-a-reply
15
- * gate) FIRST contact, exactly ONE post per conversation (follow-ups on an
16
- * already-surfaced thread do not re-post). Never emits raw envelope/JSON.
15
+ * Near-silent by design (D2): the hub is SILENT agent-to-agent activity does
16
+ * not buzz the operator and is never framed as "waiting for you" (it isn't the
17
+ * operator's job by default). The hub is a calm, browsable record; the operator
18
+ * engages it on their own schedule ("open this" / "tie this to <topic>"). The
19
+ * only thing that breaks silence is a genuine user-facing escalation, which
20
+ * surfaces normally via its parent topic — not through this surfacer.
21
+ *
22
+ * One post per parentless conversation (`surface()` dedupes per thread). Never
23
+ * emits raw envelope/JSON.
17
24
  */
18
25
  export interface SurfacerTelegram {
19
26
  findOrCreateForumTopic(name: string, iconColor?: number): Promise<{
@@ -51,6 +58,21 @@ export interface SurfaceResult {
51
58
  reason: string;
52
59
  topicId?: number;
53
60
  }
61
+ /** A STATUS / housekeeping notice (loop-gate, etc.) — hub-only, never parent. */
62
+ export interface NotifyInput {
63
+ threadId: string;
64
+ title: string;
65
+ body: string;
66
+ peerName?: string;
67
+ }
68
+ /** Per-conversation record in the hub (replaces the legacy string[] of threadIds). */
69
+ export interface SurfacedThreadRecord {
70
+ threadId: string;
71
+ peerName: string;
72
+ subject?: string;
73
+ surfacedAt: string;
74
+ bound: boolean;
75
+ }
54
76
  export declare class CollaborationSurfacer {
55
77
  private telegram;
56
78
  private filePath;
@@ -58,15 +80,42 @@ export declare class CollaborationSurfacer {
58
80
  private log;
59
81
  constructor(config: CollaborationSurfacerConfig);
60
82
  /**
61
- * Decide + surface a parentless conversation. Idempotent per thread. Never
62
- * throws to the caller (surfacing is best-effort; a failure must not break the
63
- * inbound path) — returns a structured result.
83
+ * Surface a PARENTLESS first-contact conversation to the silent hub. Idempotent
84
+ * per thread. Never throws (best-effort; must not break the inbound path).
64
85
  */
65
86
  surface(input: SurfaceInput): Promise<SurfaceResult>;
66
- /** A readable, capped gist of the peer's message — NEVER raw envelope/JSON. */
87
+ /**
88
+ * Post a STATUS / housekeeping notice to the SILENT hub. Used by threadline
89
+ * subsystems (loop-gate wind-down, etc.) INSTEAD of `createAttentionItem` —
90
+ * so they never spawn a per-event topic and never clutter the parent topic
91
+ * the operator is working in (D1). Silent (D2). Never throws.
92
+ */
93
+ notify(input: NotifyInput): Promise<SurfaceResult>;
94
+ /** The dedicated hub topic id, if one has been created. */
95
+ getHubTopicId(): number | undefined;
96
+ /**
97
+ * The most-recently-surfaced conversation not yet bound to its own topic —
98
+ * the default target for a bare "open this" in the hub. Returns null when the
99
+ * choice is ambiguous (>1 unbound) so the caller can ask the operator which.
100
+ */
101
+ mostRecentUnbound(): {
102
+ record: SurfacedThreadRecord | null;
103
+ ambiguous: boolean;
104
+ };
105
+ /** Mark a surfaced conversation as bound (after "open this" / "tie this to X"). */
106
+ markBound(threadId: string): void;
107
+ /** Post a one-line note into the hub (e.g. "Opened → topic <name>"). */
108
+ noteInHub(text: string): Promise<void>;
109
+ private ensureHubTopic;
110
+ /** A readable, capped gist — NEVER raw envelope/JSON. */
67
111
  private readableGist;
68
112
  private readablePeer;
113
+ /**
114
+ * Load state with a READ-TIME MIGRATION from the legacy `surfacedThreads:
115
+ * string[]` shape to the `surfaced: SurfacedThreadRecord[]` shape. A legacy
116
+ * file's threadIds become bound:false records with an unknown peer.
117
+ */
69
118
  private load;
70
- private save;
119
+ private trimAndSave;
71
120
  }
72
121
  //# sourceMappingURL=CollaborationSurfacer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CollaborationSurfacer.d.ts","sourceRoot":"","sources":["../../src/threadline/CollaborationSurfacer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,MAAM,WAAW,gBAAgB;IAC/B,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACtH,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACxH;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE;QAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,CAAC;CACrC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,kFAAkF;IAClF,cAAc,EAAE,OAAO,CAAC;IACxB,+DAA+D;IAC/D,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAUD,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,GAAG,CAAgC;gBAE/B,MAAM,EAAE,2BAA2B;IAS/C;;;;OAIG;IACG,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IAkC1D,+EAA+E;IAC/E,OAAO,CAAC,YAAY;IAkBpB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,IAAI;IAUZ,OAAO,CAAC,IAAI;CASb"}
1
+ {"version":3,"file":"CollaborationSurfacer.d.ts","sourceRoot":"","sources":["../../src/threadline/CollaborationSurfacer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAKH,MAAM,WAAW,gBAAgB;IAC/B,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACtH,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACxH;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE;QAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,CAAC;CACrC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,kFAAkF;IAClF,cAAc,EAAE,OAAO,CAAC;IACxB,+DAA+D;IAC/D,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,iFAAiF;AACjF,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,sFAAsF;AACtF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;CAChB;AAUD,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,GAAG,CAAgC;gBAE/B,MAAM,EAAE,2BAA2B;IAS/C;;;OAGG;IACG,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IA+B1D;;;;;OAKG;IACG,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC;IAkBxD,2DAA2D;IAC3D,aAAa,IAAI,MAAM,GAAG,SAAS;IAInC;;;;OAIG;IACH,iBAAiB,IAAI;QAAE,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE;IAOhF,mFAAmF;IACnF,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IASjC,wEAAwE;IAClE,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAa9B,cAAc;IAO5B,yDAAyD;IACzD,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,YAAY;IAOpB;;;;OAIG;IACH,OAAO,CAAC,IAAI;IA2BZ,OAAO,CAAC,WAAW;CAYpB"}
@@ -1,24 +1,31 @@
1
1
  /**
2
- * CollaborationSurfacer — makes PARENTLESS Threadline conversations visible to
3
- * the operator (CMT-509 §2).
2
+ * CollaborationSurfacer — the single funnel for making Threadline activity
3
+ * visible to the operator WITHOUT spawning a topic per event (CMT-509 §2 +
4
+ * CMT-519 notification routing).
4
5
  *
5
- * Routing spine (operator directive 2026-05-25):
6
- * - A conversation WITH a parent topic (it was started from / is bound to a
7
- * Telegram topic) surfaces THERE via TopicLinkageHandler this surfacer does
8
- * NOT touch it.
9
- * - A PARENTLESS conversation (a peer reached out cold, no topic association)
10
- * surfaces to a SINGLE dedicated "Threadline" Telegram topic — created on
11
- * demand once and reused, NEVER the generic attention list, NEVER a per-thread
12
- * topic.
6
+ * Routing spine (operator directives 2026-05-25):
7
+ * - A conversation WITH a parent topic surfaces THERE via TopicLinkageHandler
8
+ * this surfacer does NOT touch its *content* (real replies).
9
+ * - A PARENTLESS conversation (a peer reached out cold) surfaces to a SINGLE
10
+ * dedicated "Threadline" Telegram topic created on demand once and reused,
11
+ * NEVER the generic attention list, NEVER a per-thread/per-event topic.
12
+ * - STATUS / housekeeping notices (loop-gate wind-down, etc. `notify()`) go to
13
+ * that SAME silent hub, NEVER the parent topic the operator is working in (D1).
13
14
  *
14
- * Near-silent by design: surfaces only a warranted (per the warrants-a-reply
15
- * gate) FIRST contact, exactly ONE post per conversation (follow-ups on an
16
- * already-surfaced thread do not re-post). Never emits raw envelope/JSON.
15
+ * Near-silent by design (D2): the hub is SILENT agent-to-agent activity does
16
+ * not buzz the operator and is never framed as "waiting for you" (it isn't the
17
+ * operator's job by default). The hub is a calm, browsable record; the operator
18
+ * engages it on their own schedule ("open this" / "tie this to <topic>"). The
19
+ * only thing that breaks silence is a genuine user-facing escalation, which
20
+ * surfaces normally via its parent topic — not through this surfacer.
21
+ *
22
+ * One post per parentless conversation (`surface()` dedupes per thread). Never
23
+ * emits raw envelope/JSON.
17
24
  */
18
25
  import fs from 'node:fs';
19
26
  import path from 'node:path';
20
27
  const MAX_GIST_LEN = 240;
21
- const MAX_SURFACED_THREADS = 500; // bound the dedupe list
28
+ const MAX_SURFACED = 500; // bound the record list
22
29
  export class CollaborationSurfacer {
23
30
  telegram;
24
31
  filePath;
@@ -33,9 +40,8 @@ export class CollaborationSurfacer {
33
40
  this.log = config.log ?? console;
34
41
  }
35
42
  /**
36
- * Decide + surface a parentless conversation. Idempotent per thread. Never
37
- * throws to the caller (surfacing is best-effort; a failure must not break the
38
- * inbound path) — returns a structured result.
43
+ * Surface a PARENTLESS first-contact conversation to the silent hub. Idempotent
44
+ * per thread. Never throws (best-effort; must not break the inbound path).
39
45
  */
40
46
  async surface(input) {
41
47
  try {
@@ -44,24 +50,22 @@ export class CollaborationSurfacer {
44
50
  if (!input.warrants)
45
51
  return { surfaced: false, reason: 'not-warranted' };
46
52
  const state = this.load();
47
- if (state.surfacedThreads.includes(input.threadId)) {
53
+ if (state.surfaced.some(r => r.threadId === input.threadId)) {
48
54
  return { surfaced: false, reason: 'already-surfaced' };
49
55
  }
50
- let topicId = state.dedicatedTopicId;
51
- if (typeof topicId !== 'number') {
52
- const t = await this.telegram.findOrCreateForumTopic(this.topicName);
53
- topicId = t.topicId;
54
- state.dedicatedTopicId = topicId;
55
- }
56
+ const topicId = await this.ensureHubTopic(state);
56
57
  const gist = this.readableGist(input.text);
57
58
  const peer = this.readablePeer(input.senderName);
58
- const body = `🧵 ${peer} started a Threadline conversation:\n${gist}\n\n(reply in-thread, or say "open this" to engage)`;
59
+ const body = `🧵 ${peer} started a Threadline conversation:\n${gist}\n\n(reply in-thread, or say "open this" to give it its own topic)`;
59
60
  await this.telegram.sendToTopic(topicId, body, { silent: true });
60
- state.surfacedThreads.push(input.threadId);
61
- if (state.surfacedThreads.length > MAX_SURFACED_THREADS) {
62
- state.surfacedThreads = state.surfacedThreads.slice(-MAX_SURFACED_THREADS);
63
- }
64
- this.save(state);
61
+ state.surfaced.push({
62
+ threadId: input.threadId,
63
+ peerName: peer,
64
+ subject: gist.slice(0, 80),
65
+ surfacedAt: new Date().toISOString(),
66
+ bound: false,
67
+ });
68
+ this.trimAndSave(state);
65
69
  return { surfaced: true, reason: 'posted', topicId };
66
70
  }
67
71
  catch (err) {
@@ -69,10 +73,78 @@ export class CollaborationSurfacer {
69
73
  return { surfaced: false, reason: 'error' };
70
74
  }
71
75
  }
72
- /** A readable, capped gist of the peer's message — NEVER raw envelope/JSON. */
76
+ /**
77
+ * Post a STATUS / housekeeping notice to the SILENT hub. Used by threadline
78
+ * subsystems (loop-gate wind-down, etc.) INSTEAD of `createAttentionItem` —
79
+ * so they never spawn a per-event topic and never clutter the parent topic
80
+ * the operator is working in (D1). Silent (D2). Never throws.
81
+ */
82
+ async notify(input) {
83
+ try {
84
+ const state = this.load();
85
+ const topicId = await this.ensureHubTopic(state);
86
+ const peer = input.peerName ? this.readablePeer(input.peerName) : undefined;
87
+ const head = peer ? `🧵 ${input.title} — ${peer}` : `🧵 ${input.title}`;
88
+ const body = `${head}\n${this.readableGist(input.body)}`;
89
+ await this.telegram.sendToTopic(topicId, body, { silent: true });
90
+ // Persist the hub-topic id if we just created it; status notices are not
91
+ // per-thread-deduped (a status can legitimately recur).
92
+ this.trimAndSave(state);
93
+ return { surfaced: true, reason: 'notified', topicId };
94
+ }
95
+ catch (err) {
96
+ this.log.warn(`[CollaborationSurfacer] notify failed (non-fatal): ${err instanceof Error ? err.message : String(err)}`);
97
+ return { surfaced: false, reason: 'error' };
98
+ }
99
+ }
100
+ /** The dedicated hub topic id, if one has been created. */
101
+ getHubTopicId() {
102
+ return this.load().dedicatedTopicId;
103
+ }
104
+ /**
105
+ * The most-recently-surfaced conversation not yet bound to its own topic —
106
+ * the default target for a bare "open this" in the hub. Returns null when the
107
+ * choice is ambiguous (>1 unbound) so the caller can ask the operator which.
108
+ */
109
+ mostRecentUnbound() {
110
+ const unbound = this.load().surfaced.filter(r => !r.bound);
111
+ if (unbound.length === 0)
112
+ return { record: null, ambiguous: false };
113
+ const sorted = [...unbound].sort((a, b) => b.surfacedAt.localeCompare(a.surfacedAt));
114
+ return { record: sorted[0], ambiguous: unbound.length > 1 };
115
+ }
116
+ /** Mark a surfaced conversation as bound (after "open this" / "tie this to X"). */
117
+ markBound(threadId) {
118
+ const state = this.load();
119
+ const rec = state.surfaced.find(r => r.threadId === threadId);
120
+ if (rec && !rec.bound) {
121
+ rec.bound = true;
122
+ this.trimAndSave(state);
123
+ }
124
+ }
125
+ /** Post a one-line note into the hub (e.g. "Opened → topic <name>"). */
126
+ async noteInHub(text) {
127
+ try {
128
+ const state = this.load();
129
+ const topicId = await this.ensureHubTopic(state);
130
+ await this.telegram.sendToTopic(topicId, text, { silent: true });
131
+ this.trimAndSave(state);
132
+ }
133
+ catch (err) {
134
+ this.log.warn(`[CollaborationSurfacer] noteInHub failed (non-fatal): ${err instanceof Error ? err.message : String(err)}`);
135
+ }
136
+ }
137
+ // ── internals ──────────────────────────────────────────────────
138
+ async ensureHubTopic(state) {
139
+ if (typeof state.dedicatedTopicId === 'number')
140
+ return state.dedicatedTopicId;
141
+ const t = await this.telegram.findOrCreateForumTopic(this.topicName);
142
+ state.dedicatedTopicId = t.topicId;
143
+ return t.topicId;
144
+ }
145
+ /** A readable, capped gist — NEVER raw envelope/JSON. */
73
146
  readableGist(text) {
74
147
  let t = (text ?? '').trim();
75
- // Defend against the funnel's JSON.stringify(content) path reaching the user.
76
148
  if ((t.startsWith('{') && t.endsWith('}')) || (t.startsWith('[') && t.endsWith(']'))) {
77
149
  try {
78
150
  const parsed = JSON.parse(t);
@@ -92,23 +164,46 @@ export class CollaborationSurfacer {
92
164
  const n = (name ?? '').trim();
93
165
  if (!n)
94
166
  return 'An agent';
95
- // Fingerprint-looking → shorten.
96
167
  if (/^[a-f0-9]{16,}$/i.test(n))
97
168
  return n.slice(0, 8);
98
169
  return n;
99
170
  }
171
+ /**
172
+ * Load state with a READ-TIME MIGRATION from the legacy `surfacedThreads:
173
+ * string[]` shape to the `surfaced: SurfacedThreadRecord[]` shape. A legacy
174
+ * file's threadIds become bound:false records with an unknown peer.
175
+ */
100
176
  load() {
101
177
  try {
102
178
  if (fs.existsSync(this.filePath)) {
103
179
  const data = JSON.parse(fs.readFileSync(this.filePath, 'utf-8'));
104
- if (data && Array.isArray(data.surfacedThreads))
105
- return data;
180
+ if (data && typeof data === 'object') {
181
+ if (Array.isArray(data.surfaced)) {
182
+ return { dedicatedTopicId: data.dedicatedTopicId, surfaced: data.surfaced };
183
+ }
184
+ if (Array.isArray(data.surfacedThreads)) {
185
+ // Legacy → records.
186
+ const surfaced = data.surfacedThreads.map(threadId => ({
187
+ threadId,
188
+ peerName: 'An agent',
189
+ surfacedAt: new Date(0).toISOString(),
190
+ bound: false,
191
+ }));
192
+ return { dedicatedTopicId: data.dedicatedTopicId, surfaced };
193
+ }
194
+ if (typeof data.dedicatedTopicId === 'number') {
195
+ return { dedicatedTopicId: data.dedicatedTopicId, surfaced: [] };
196
+ }
197
+ }
106
198
  }
107
199
  }
108
200
  catch { /* corrupt — start fresh */ }
109
- return { surfacedThreads: [] };
201
+ return { surfaced: [] };
110
202
  }
111
- save(state) {
203
+ trimAndSave(state) {
204
+ if (state.surfaced.length > MAX_SURFACED) {
205
+ state.surfaced = state.surfaced.slice(-MAX_SURFACED);
206
+ }
112
207
  try {
113
208
  const tmp = `${this.filePath}.${process.pid}.tmp`;
114
209
  fs.writeFileSync(tmp, JSON.stringify(state, null, 2) + '\n');
@@ -1 +1 @@
1
- {"version":3,"file":"CollaborationSurfacer.js","sourceRoot":"","sources":["../../src/threadline/CollaborationSurfacer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CollaborationSurfacer.js","sourceRoot":"","sources":["../../src/threadline/CollaborationSurfacer.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadResumeMap.d.ts","sourceRoot":"","sources":["../../src/threadline/ThreadResumeMap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,OAAO,EAAE,iBAAiB,EAAqB,MAAM,wBAAwB,CAAC;AAI9E,mEAAmE;AACnE,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEjF,4CAA4C;AAC5C,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,WAAW,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,aAAa,GAAG,MAAM,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAqED,qBAAa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,iBAAiB;IAO9F;;;;OAIG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAgB/C,mFAAmF;IACnF,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAItD,wEAAwE;IACxE,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAI9B,4DAA4D;IAC5D,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAS/B,2BAA2B;IAC3B,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAK3B,6CAA6C;IAC7C,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAK7B,mEAAmE;IACnE,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,iBAAiB,CAAA;KAAE,CAAC;IAK1F,uCAAuC;IACvC,UAAU,IAAI,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,iBAAiB,CAAA;KAAE,CAAC;IAMnE,gFAAgF;IAChF,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAoBhG,oEAAoE;IACpE,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,iBAAiB,CAAA;KAAE,CAAC;IAMhG,6CAA6C;IAC7C,IAAI,IAAI,MAAM;IAId,0DAA0D;IAC1D,KAAK,IAAI,IAAI;IAIb;;;OAGG;IACH,qBAAqB,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IA6ChE,sFAAsF;IACtF,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,SAAS;IASjB;iEAC6D;IAC7D,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAa7C"}
1
+ {"version":3,"file":"ThreadResumeMap.d.ts","sourceRoot":"","sources":["../../src/threadline/ThreadResumeMap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,OAAO,EAAE,iBAAiB,EAAqB,MAAM,wBAAwB,CAAC;AAI9E,mEAAmE;AACnE,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEjF,4CAA4C;AAC5C,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,WAAW,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,aAAa,GAAG,MAAM,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAqED,qBAAa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,iBAAiB;IAO9F;;;;OAIG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAyB/C,mFAAmF;IACnF,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAItD,wEAAwE;IACxE,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAI9B,4DAA4D;IAC5D,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAS/B,2BAA2B;IAC3B,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAK3B,6CAA6C;IAC7C,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAK7B,mEAAmE;IACnE,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,iBAAiB,CAAA;KAAE,CAAC;IAK1F,uCAAuC;IACvC,UAAU,IAAI,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,iBAAiB,CAAA;KAAE,CAAC;IAMnE,gFAAgF;IAChF,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAoBhG,oEAAoE;IACpE,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,iBAAiB,CAAA;KAAE,CAAC;IAMhG,6CAA6C;IAC7C,IAAI,IAAI,MAAM;IAId,0DAA0D;IAC1D,KAAK,IAAI,IAAI;IAIb;;;OAGG;IACH,qBAAqB,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IA6ChE,sFAAsF;IACtF,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,SAAS;IASjB;iEAC6D;IAC7D,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAa7C"}
@@ -119,9 +119,17 @@ export class ThreadResumeMap {
119
119
  if (!c)
120
120
  return null;
121
121
  const entry = conversationToEntry(c);
122
- // Resume guard: the session JSONL must still exist (unless pinned).
123
- if (!entry.pinned && !this.jsonlExists(entry.uuid))
122
+ // Resume guard: the session JSONL must still exist (unless pinned). A
123
+ // topic-linkage entry (originTopicId set) is exempt — its liveness is the
124
+ // Telegram topic's, not a Claude-session transcript's. These entries are
125
+ // stamped with an empty/non-JSONL uuid (see TopicLinkageHandler.captureOriginOnSend),
126
+ // so the JSONL guard would wrongly null them — dropping inbound replies to
127
+ // spawnNewThread (A1) and breaking threadline_history lookups (C). Dead
128
+ // topic-linkage entries still expire via ConversationStore's TTL, and the
129
+ // topic's real liveness is re-checked at route time (TopicLinkageHandler.topicActive).
130
+ if (!entry.pinned && entry.originTopicId === undefined && !this.jsonlExists(entry.uuid)) {
124
131
  return null;
132
+ }
125
133
  return entry;
126
134
  }
127
135
  /** Save or update a thread resume mapping (MERGES — preserves gate turn state). */
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadResumeMap.js","sourceRoot":"","sources":["../../src/threadline/ThreadResumeMap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ThreadResumeMap.js","sourceRoot":"","sources":["../../src/threadline/ThreadResumeMap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAqB,MAAM,wBAAwB,CAAC;AA2B9E,mEAAmE;AAEnE,6EAA6E;AAC7E,SAAS,aAAa,CAAC,CAAwB;IAC7C,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,gBAAgB;QAAE,OAAO,QAAQ,CAAC;IAC5D,OAAO,CAAC,CAAC;AACX,CAAC;AAED,yDAAyD;AACzD,SAAS,mBAAmB,CAAC,CAAe;IAC1C,OAAO;QACL,IAAI,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE;QACzB,WAAW,EAAE,CAAC,CAAC,gBAAgB,IAAI,EAAE;QACrC,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,cAAc,EAAE,CAAC,CAAC,cAAc;QAChC,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;QAC3D,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE;QACxB,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC;QAC7B,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,YAAY,EAAE,CAAC,CAAC,YAAY;QAC5B,aAAa,EAAE,CAAC,CAAC,aAAa;QAC9B,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,aAAa,EAAE,CAAC,CAAC,YAAY;QAC7B,iBAAiB,EAAE,CAAC,CAAC,iBAAiB;KACvC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,wBAAwB,CAAC,KAAwB,EAAE,KAAmB;IAC7E,IAAI,KAAK,CAAC,IAAI;QAAE,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC;IAC/C,IAAI,KAAK,CAAC,WAAW;QAAE,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,WAAW,CAAC;IAClE,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACtB,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC;YAAE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC9G,CAAC;IACD,IAAI,KAAK,CAAC,OAAO;QAAE,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IACjD,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,oDAAoD;IAC/E,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS;QAAE,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;IACxE,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,6DAA6D;IAC7D,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,EAAE,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;IAChF,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS;QAAE,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;IACjF,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS;QAAE,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;IACxE,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;QAAE,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IACrE,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS;QAAE,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC;IAChF,IAAI,KAAK,CAAC,iBAAiB,KAAK,SAAS;QAAE,KAAK,CAAC,iBAAiB,GAAG,KAAK,CAAC,iBAAiB,CAAC;IAC7F,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC;QAAE,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAC9E,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACxE,2EAA2E;IAC3E,OAAO,KAAK,CAAC;AACf,CAAC;AAED,mEAAmE;AAEnE,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAC3C,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAElD,mEAAmE;AAEnE,MAAM,OAAO,eAAe;IAClB,KAAK,CAAoB;IACzB,UAAU,CAAS;IACnB,UAAU,CAAS;IACnB,QAAQ,CAAS;IAEzB,YAAY,QAAgB,EAAE,UAAkB,EAAE,QAAiB,EAAE,KAAyB;QAC5F,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACtD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,wBAAwB,CAAC,CAAC;QAC9E,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,MAAM,CAAC;IACrC,CAAC;IAED;;;;OAIG;IACH,GAAG,CAAC,QAAgB;QAClB,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YAC9C,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,qCAAqC;gBAClE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACpB,MAAM,KAAK,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;QACrC,sEAAsE;QACtE,0EAA0E;QAC1E,yEAAyE;QACzE,sFAAsF;QACtF,2EAA2E;QAC3E,wEAAwE;QACxE,0EAA0E;QAC1E,uFAAuF;QACvF,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACxF,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,mFAAmF;IACnF,IAAI,CAAC,QAAgB,EAAE,KAAwB;QAC7C,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;IAC7H,CAAC;IAED,wEAAwE;IACxE,MAAM,CAAC,QAAgB;QACrB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,4DAA4D;IAC5D,OAAO,CAAC,QAAgB;QACtB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,OAAO;QACtC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YACtC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC;YACzB,KAAK,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC5C,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC;IAED,2BAA2B;IAC3B,GAAG,CAAC,QAAgB;QAClB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,OAAO;QACtC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACnF,CAAC;IAED,6CAA6C;IAC7C,KAAK,CAAC,QAAgB;QACpB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,OAAO;QACtC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACpF,CAAC;IAED,mEAAmE;IACnE,gBAAgB,CAAC,SAAiB;QAChC,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAC;aAC1C,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,uCAAuC;IACvC,UAAU;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;aAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aACnE,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC;IAC/E,CAAC;IAED,gFAAgF;IAChF,WAAW,CAAC,aAAqB,EAAE,aAAqB;QACtD,IAAI,QAAQ,GAAG,CAAC,CAAC;QAAC,IAAI,OAAO,GAAG,CAAC,CAAC;QAClC,8EAA8E;QAC9E,wEAAwE;QACxE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC;YACjC,IAAI,CAAC,CAAC,aAAa,KAAK,aAAa;gBAAE,SAAS;YAChD,IAAI,CAAC,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACzB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;oBACxC,KAAK,CAAC,UAAU,GAAG,aAAa,CAAC;oBACjC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;oBACrB,OAAO,KAAK,CAAC;gBACf,CAAC,CAAC,CAAC;gBACH,QAAQ,EAAE,CAAC;YACb,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IAC/B,CAAC;IAED,oEAAoE;IACpE,kBAAkB,CAAC,aAAqB;QACtC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;aACpB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,aAAa,CAAC;aAC3C,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,6CAA6C;IAC7C,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,0DAA0D;IAC1D,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED;;;OAGG;IACH,qBAAqB,CAAC,cAAmC;QACvD,IAAI,CAAC;YACH,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,IAAI,KAAK,CAAC;gBAAE,OAAO;YACzD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACxD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;YACpF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC;gBAAE,OAAO;YAE5C,MAAM,UAAU,GAAG,EAAE,CAAC,WAAW,CAAC,eAAe,CAAC;iBAC/C,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;iBACjC,GAAG,CAAC,CAAC,CAAC,EAAE;gBACP,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC;oBACxD,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC;gBAClE,CAAC;gBAAC,MAAM,CAAC;oBAAC,OAAO,IAAI,CAAC;gBAAC,CAAC;YAC1B,CAAC,CAAC;iBACD,MAAM,CAAC,CAAC,CAAC,EAA0C,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;iBACxF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;YACzC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAEpC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;YACvC,KAAK,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,cAAc,EAAE,CAAC;gBACrD,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC;gBACtF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;oBAAE,SAAS;gBACtC,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBACvE,IAAI,CAAC,cAAc;oBAAE,SAAS;gBAC9B,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBAEtC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;gBACzF,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW,KAAK,cAAc,CAAC,IAAI,IAAI,QAAQ,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;oBAChG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;wBACtC,KAAK,CAAC,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC;wBACxC,KAAK,CAAC,gBAAgB,GAAG,WAAW,CAAC;wBACrC,KAAK,CAAC,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;wBAChD,OAAO,KAAK,CAAC;oBACf,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,GAAG,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,gEAAgE;IAEhE,sFAAsF;IAC9E,eAAe,CAAC,QAAgB;QACtC,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;gBAAE,OAAO,IAAI,CAAC;YACjD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAsC,CAAC;YACvG,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC5B,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC;YACxB,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YACxD,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,SAAS,CAAC,KAAwB;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,KAAK,CAAC,KAAK,KAAK,UAAU,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACnD,OAAO,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,GAAG,iBAAiB,CAAC;QACxE,CAAC;QACD,MAAM,GAAG,GAAG,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,OAAO,CAAC;QAClD,OAAO,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC;IACpD,CAAC;IAED;iEAC6D;IACnD,WAAW,CAAC,IAAY;QAChC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QACzE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC;YAAE,OAAO,KAAK,CAAC;QACpD,IAAI,CAAC;YACH,KAAK,MAAM,GAAG,IAAI,EAAE,CAAC,WAAW,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBACpD,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE,GAAG,IAAI,QAAQ,CAAC,CAAC;oBAAE,OAAO,IAAI,CAAC;YACrF,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,kCAAkC;QACpC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
@@ -45,8 +45,13 @@ export interface TopicLinkageDeps {
45
45
  commitmentTracker: CommitmentTracker;
46
46
  salienceGate: SalienceGate;
47
47
  messageStore?: MessageStore | null;
48
- /** Inject text into a live tmux session. */
49
- injectIntoSession: (sessionName: string, text: string) => boolean;
48
+ /**
49
+ * Inject text into a live tmux session, returning whether the session
50
+ * actually CONSUMED it (not merely dispatched). May be async — production
51
+ * confirms submission across the paste-recovery window. A `false`/rejected
52
+ * result means the inject stalled, so the caller must fall back to surfacing.
53
+ */
54
+ injectIntoSession: (sessionName: string, text: string) => boolean | Promise<boolean>;
50
55
  /** Check if a tmux session is alive. */
51
56
  isSessionAlive: (sessionName: string) => boolean;
52
57
  /** Post a notification to a Telegram topic. */
@@ -1 +1 @@
1
- {"version":3,"file":"TopicLinkageHandler.d.ts","sourceRoot":"","sources":["../../src/threadline/TopicLinkageHandler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TopicLinkageHandler.d.ts","sourceRoot":"","sources":["../../src/threadline/TopicLinkageHandler.ts"],"names":[],"mappings":"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"}
@@ -299,7 +299,7 @@ export class TopicLinkageHandler {
299
299
  // surface the awaited reply through the topic's existing wake path.
300
300
  if (sessionName && this.deps.isSessionAlive(sessionName)) {
301
301
  try {
302
- const ok = this.deps.injectIntoSession(sessionName, payload);
302
+ const ok = await this.deps.injectIntoSession(sessionName, payload);
303
303
  if (ok) {
304
304
  deliveryMode = 'live-inject';
305
305
  }
@@ -320,10 +320,24 @@ export class TopicLinkageHandler {
320
320
  // Telegram surface. User-visible verdicts post a notification. failure-
321
321
  // visible delivery mode forces a notification regardless of verdict so the
322
322
  // user always knows something arrived even if our auto-pickup failed.
323
- const shouldSurface = verdictResult.verdict === 'user-visible' ||
324
- deliveryMode === 'failure-visible' ||
325
- deliveryMode === 'resume-pending';
326
- if (shouldSurface && this.passesRateLimit(threadId) && this.passesTopicRateLimit(topicId)) {
323
+ // Surface to Telegram UNLESS we CONFIRMED the live session consumed the
324
+ // reply in that case the agent itself relays it, so a deterministic
325
+ // surface would double-post. A stalled inject yields 'failure-visible'
326
+ // here, so the safety-net surface fires exactly when the live hand-off
327
+ // didn't actually take (the A2 fix).
328
+ const shouldSurface = deliveryMode !== 'live-inject' &&
329
+ (verdictResult.verdict === 'user-visible' ||
330
+ deliveryMode === 'failure-visible' ||
331
+ deliveryMode === 'resume-pending');
332
+ // Rate-limit the surface: per-thread (no double-fire within the window) AND
333
+ // per-topic (anti-flood/bypass guard against many threads against one topic).
334
+ // No first-reply carve-out: a thread's FIRST reply has no prior surface so it
335
+ // passes the per-thread limit naturally, and the per-topic cap must hold even
336
+ // for first replies (otherwise N rotating threads = N surfaces = the flood).
337
+ // A carve-out would also misfire once the commitment is delivered, since
338
+ // findByThreadId then returns null and isFirstReply flips true again.
339
+ const rateOk = this.passesRateLimit(threadId) && this.passesTopicRateLimit(topicId);
340
+ if (shouldSurface && rateOk) {
327
341
  try {
328
342
  const surfaceText = this.buildTelegramSurface({
329
343
  message,
@@ -354,19 +368,20 @@ export class TopicLinkageHandler {
354
368
  }
355
369
  // CMT-509 §1: a "report back" commitment must NOT resolve until the reply was
356
370
  // actually surfaced TO THE USER. The user is surfaced when either:
357
- // - `telegramSent` — a user-facing post landed in the topic, OR
358
- // - `live-inject` — the payload went into the topic's LIVE session, which
359
- // relays to the user per the Telegram-reply rule.
360
- // Previously this also resolved on `resume-pending` unconditionally — but a
361
- // resume-pending whose Telegram surface failed or was rate-limited (so
362
- // `telegramSent === false`) means the user saw NOTHING, yet the commitment
363
- // closed. That is the premature-resolution bug the 2026-05-25 incident
364
- // exposed. Now resume-pending only resolves if its surface actually posted.
365
- // `failure-visible` (and any un-surfaced path) leaves the commitment OPEN so
366
- // PromiseBeacon keeps heartbeating; the 7-day commitment TTL +
367
- // expireCommitments() sweep is the backstop against a permanent hang.
368
- const surfacedToUser = deliveryMode === 'live-inject' ||
369
- (deliveryMode === 'resume-pending' && telegramSent);
371
+ // - `live-inject` — CONFIRMED consumption: the payload was submitted into
372
+ // the topic's LIVE session, which relays to the user per
373
+ // the Telegram-reply rule (a stalled inject is NOT
374
+ // 'live-inject' it degraded to 'failure-visible'), OR
375
+ // - `telegramSent` — a user-facing post actually landed in the topic, on
376
+ // ANY delivery mode (resume-pending OR the failure-visible
377
+ // safety-net). telegramSent is the authoritative "the user
378
+ // saw it" signal.
379
+ // Any un-surfaced path (telegramSent false AND not a confirmed live-inject —
380
+ // e.g. a stalled inject whose surface was rate-limited, or no Telegram
381
+ // configured) leaves the commitment OPEN so PromiseBeacon keeps heartbeating;
382
+ // the 7-day TTL + expireCommitments() sweep is the backstop. This is the fix
383
+ // for the 2026-05-25 premature-resolution incident.
384
+ const surfacedToUser = deliveryMode === 'live-inject' || telegramSent;
370
385
  let commitmentDelivered = false;
371
386
  if (commitment && surfacedToUser) {
372
387
  try {