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.
- package/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +28 -15
- package/dist/commands/server.js.map +1 -1
- package/dist/core/PostUpdateMigrator.d.ts +7 -0
- package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
- package/dist/core/PostUpdateMigrator.js +59 -75
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/dist/core/SessionManager.d.ts +14 -1
- package/dist/core/SessionManager.d.ts.map +1 -1
- package/dist/core/SessionManager.js +41 -1
- package/dist/core/SessionManager.js.map +1 -1
- package/dist/messaging/MessageRouter.d.ts +8 -0
- package/dist/messaging/MessageRouter.d.ts.map +1 -1
- package/dist/messaging/MessageRouter.js +37 -0
- package/dist/messaging/MessageRouter.js.map +1 -1
- package/dist/scaffold/templates.d.ts.map +1 -1
- package/dist/scaffold/templates.js +15 -0
- package/dist/scaffold/templates.js.map +1 -1
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +115 -0
- package/dist/server/routes.js.map +1 -1
- package/dist/threadline/CollaborationSurfacer.d.ts +67 -18
- package/dist/threadline/CollaborationSurfacer.d.ts.map +1 -1
- package/dist/threadline/CollaborationSurfacer.js +132 -37
- package/dist/threadline/CollaborationSurfacer.js.map +1 -1
- package/dist/threadline/ThreadResumeMap.d.ts.map +1 -1
- package/dist/threadline/ThreadResumeMap.js +10 -2
- package/dist/threadline/ThreadResumeMap.js.map +1 -1
- package/dist/threadline/TopicLinkageHandler.d.ts +7 -2
- package/dist/threadline/TopicLinkageHandler.d.ts.map +1 -1
- package/dist/threadline/TopicLinkageHandler.js +33 -18
- package/dist/threadline/TopicLinkageHandler.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +62 -62
- package/src/scaffold/templates.ts +15 -0
- package/upgrades/1.2.81.md +40 -0
- package/upgrades/1.2.82.md +26 -0
- package/upgrades/side-effects/1.2.81.md +127 -0
- package/upgrades/side-effects/threadline-notification-routing.md +46 -0
- package/upgrades/side-effects/threadline-reply-surfacing.md +68 -0
|
@@ -1,19 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* CollaborationSurfacer —
|
|
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
|
|
6
|
-
* - A conversation WITH a parent topic
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
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:
|
|
15
|
-
*
|
|
16
|
-
*
|
|
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
|
-
*
|
|
62
|
-
*
|
|
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
|
-
/**
|
|
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
|
|
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
|
|
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 —
|
|
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
|
|
6
|
-
* - A conversation WITH a parent topic
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
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:
|
|
15
|
-
*
|
|
16
|
-
*
|
|
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
|
|
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
|
-
*
|
|
37
|
-
*
|
|
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.
|
|
53
|
+
if (state.surfaced.some(r => r.threadId === input.threadId)) {
|
|
48
54
|
return { surfaced: false, reason: 'already-surfaced' };
|
|
49
55
|
}
|
|
50
|
-
|
|
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
|
|
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.
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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
|
-
/**
|
|
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 &&
|
|
105
|
-
|
|
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 {
|
|
201
|
+
return { surfaced: [] };
|
|
110
202
|
}
|
|
111
|
-
|
|
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":"AAAA
|
|
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;
|
|
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
|
-
|
|
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":"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"}
|
|
@@ -45,8 +45,13 @@ export interface TopicLinkageDeps {
|
|
|
45
45
|
commitmentTracker: CommitmentTracker;
|
|
46
46
|
salienceGate: SalienceGate;
|
|
47
47
|
messageStore?: MessageStore | null;
|
|
48
|
-
/**
|
|
49
|
-
|
|
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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAc,MAAM,oCAAoC,CAAC;AACxF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAIjE,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,cAAc,CAAC;IAC/B,eAAe,EAAE,eAAe,CAAC;IACjC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC
|
|
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
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
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
|
-
// - `
|
|
358
|
-
//
|
|
359
|
-
//
|
|
360
|
-
//
|
|
361
|
-
//
|
|
362
|
-
//
|
|
363
|
-
//
|
|
364
|
-
//
|
|
365
|
-
//
|
|
366
|
-
//
|
|
367
|
-
//
|
|
368
|
-
|
|
369
|
-
|
|
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 {
|