instar 1.2.74 → 1.2.76
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 +43 -1
- package/dist/commands/server.js.map +1 -1
- package/dist/config/ConfigDefaults.d.ts.map +1 -1
- package/dist/config/ConfigDefaults.js +6 -0
- package/dist/config/ConfigDefaults.js.map +1 -1
- package/dist/core/Usher.d.ts +57 -0
- package/dist/core/Usher.d.ts.map +1 -0
- package/dist/core/Usher.js +179 -0
- package/dist/core/Usher.js.map +1 -0
- package/dist/core/UsherSignalStore.d.ts +58 -0
- package/dist/core/UsherSignalStore.d.ts.map +1 -0
- package/dist/core/UsherSignalStore.js +113 -0
- package/dist/core/UsherSignalStore.js.map +1 -0
- package/dist/core/types.d.ts +8 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/server/AgentServer.d.ts +2 -0
- package/dist/server/AgentServer.d.ts.map +1 -1
- package/dist/server/AgentServer.js +5 -0
- package/dist/server/AgentServer.js.map +1 -1
- package/dist/server/CapabilityIndex.d.ts.map +1 -1
- package/dist/server/CapabilityIndex.js +1 -0
- package/dist/server/CapabilityIndex.js.map +1 -1
- package/dist/server/usherRoutes.d.ts +16 -0
- package/dist/server/usherRoutes.d.ts.map +1 -0
- package/dist/server/usherRoutes.js +40 -0
- package/dist/server/usherRoutes.js.map +1 -0
- package/dist/threadline/ConversationStore.d.ts +53 -25
- package/dist/threadline/ConversationStore.d.ts.map +1 -1
- package/dist/threadline/ConversationStore.js +149 -68
- package/dist/threadline/ConversationStore.js.map +1 -1
- package/dist/threadline/ThreadResumeMap.d.ts +49 -116
- package/dist/threadline/ThreadResumeMap.d.ts.map +1 -1
- package/dist/threadline/ThreadResumeMap.js +194 -252
- package/dist/threadline/ThreadResumeMap.js.map +1 -1
- package/dist/threadline/ThreadlineObservability.d.ts +6 -1
- package/dist/threadline/ThreadlineObservability.d.ts.map +1 -1
- package/dist/threadline/ThreadlineObservability.js +17 -8
- package/dist/threadline/ThreadlineObservability.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +3 -3
- package/upgrades/1.2.75.md +69 -0
- package/upgrades/1.2.76.md +64 -0
- package/upgrades/side-effects/cwa-usher.md +82 -0
|
@@ -1,202 +1,210 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* ThreadResumeMap —
|
|
2
|
+
* ThreadResumeMap — persistent mapping from thread IDs to Claude/Codex session
|
|
3
|
+
* UUIDs, for `--resume`.
|
|
3
4
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* Phase 2a (THREADLINE-SINGLE-STORE-SPEC.md / CMT-497): this is now a **view over
|
|
6
|
+
* `ConversationStore`** — the single source of truth. Every method maps the legacy
|
|
7
|
+
* `ThreadResumeEntry` shape onto a `Conversation` record via the field bridge
|
|
8
|
+
* below. `save` MERGES (it never clobbers the loop gate's `turnCount`/
|
|
9
|
+
* `lastInboundHash`/`lastOutboundHash`). The on-disk `thread-resume-map.json` is no
|
|
10
|
+
* longer written; a one-release dual-read window falls back to it on a miss and
|
|
11
|
+
* writes through, so threads written by a pre-2a version are not lost.
|
|
7
12
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* - Max 1,000 entries with LRU eviction of non-pinned entries
|
|
12
|
-
* - Resolved threads get a 7-day grace period before removal
|
|
13
|
-
* - Pinned threads are never evicted
|
|
14
|
-
*
|
|
15
|
-
* Storage: {stateDir}/threadline/thread-resume-map.json
|
|
13
|
+
* Field bridge (ThreadResumeEntry ↔ Conversation):
|
|
14
|
+
* uuid↔sessionUuid · sessionName↔boundSessionName · lastAccessedAt↔lastActivityAt
|
|
15
|
+
* originTopicId↔boundTopicId · originSessionName↔originSessionName · the rest 1:1.
|
|
16
16
|
*/
|
|
17
17
|
import fs from 'node:fs';
|
|
18
18
|
import path from 'node:path';
|
|
19
19
|
import os from 'node:os';
|
|
20
20
|
import { spawnSync } from 'node:child_process';
|
|
21
|
+
import { ConversationStore } from './ConversationStore.js';
|
|
22
|
+
// ── Field bridge ────────────────────────────────────────────────
|
|
23
|
+
/** Map a Conversation lifecycle state onto the legacy ThreadState subset. */
|
|
24
|
+
function toThreadState(s) {
|
|
25
|
+
if (s === 'open' || s === 'awaiting-reply')
|
|
26
|
+
return 'active';
|
|
27
|
+
return s;
|
|
28
|
+
}
|
|
29
|
+
/** Conversation → ThreadResumeEntry (read direction). */
|
|
30
|
+
function conversationToEntry(c) {
|
|
31
|
+
return {
|
|
32
|
+
uuid: c.sessionUuid ?? '',
|
|
33
|
+
sessionName: c.boundSessionName ?? '',
|
|
34
|
+
createdAt: c.createdAt,
|
|
35
|
+
savedAt: c.savedAt,
|
|
36
|
+
lastAccessedAt: c.lastActivityAt,
|
|
37
|
+
remoteAgent: c.remoteAgent ?? c.participants.peers[0] ?? '',
|
|
38
|
+
subject: c.subject ?? '',
|
|
39
|
+
state: toThreadState(c.state),
|
|
40
|
+
resolvedAt: c.resolvedAt,
|
|
41
|
+
pinned: c.pinned,
|
|
42
|
+
messageCount: c.messageCount,
|
|
43
|
+
machineOrigin: c.machineOrigin,
|
|
44
|
+
migratedTo: c.migratedTo,
|
|
45
|
+
spawnMode: c.spawnMode,
|
|
46
|
+
originTopicId: c.boundTopicId,
|
|
47
|
+
originSessionName: c.originSessionName,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Apply a ThreadResumeEntry onto a Conversation draft (write direction) —
|
|
52
|
+
* MERGING: resume fields are set from the entry, but the loop gate's
|
|
53
|
+
* `turnCount`/`lastInboundHash`/`lastOutboundHash` are LEFT INTACT (convergence
|
|
54
|
+
* finding — a legacy save must not wipe turn state).
|
|
55
|
+
*/
|
|
56
|
+
function applyEntryToConversation(entry, draft) {
|
|
57
|
+
if (entry.uuid)
|
|
58
|
+
draft.sessionUuid = entry.uuid;
|
|
59
|
+
if (entry.sessionName)
|
|
60
|
+
draft.boundSessionName = entry.sessionName;
|
|
61
|
+
if (entry.remoteAgent) {
|
|
62
|
+
draft.remoteAgent = entry.remoteAgent;
|
|
63
|
+
if (!draft.participants.peers.includes(entry.remoteAgent))
|
|
64
|
+
draft.participants.peers.push(entry.remoteAgent);
|
|
65
|
+
}
|
|
66
|
+
if (entry.subject)
|
|
67
|
+
draft.subject = entry.subject;
|
|
68
|
+
draft.state = entry.state; // legacy state is authoritative on an explicit save
|
|
69
|
+
if (entry.resolvedAt !== undefined)
|
|
70
|
+
draft.resolvedAt = entry.resolvedAt;
|
|
71
|
+
draft.pinned = entry.pinned;
|
|
72
|
+
// messageCount is shared with the gate — never go backwards.
|
|
73
|
+
draft.messageCount = Math.max(draft.messageCount ?? 0, entry.messageCount ?? 0);
|
|
74
|
+
if (entry.machineOrigin !== undefined)
|
|
75
|
+
draft.machineOrigin = entry.machineOrigin;
|
|
76
|
+
if (entry.migratedTo !== undefined)
|
|
77
|
+
draft.migratedTo = entry.migratedTo;
|
|
78
|
+
if (entry.spawnMode !== undefined)
|
|
79
|
+
draft.spawnMode = entry.spawnMode;
|
|
80
|
+
if (entry.originTopicId !== undefined)
|
|
81
|
+
draft.boundTopicId = entry.originTopicId;
|
|
82
|
+
if (entry.originSessionName !== undefined)
|
|
83
|
+
draft.originSessionName = entry.originSessionName;
|
|
84
|
+
if (entry.createdAt && draft.version === 0)
|
|
85
|
+
draft.createdAt = entry.createdAt;
|
|
86
|
+
draft.lastActivityAt = entry.lastAccessedAt || new Date().toISOString();
|
|
87
|
+
// turnCount / lastInboundHash / lastOutboundHash: intentionally untouched.
|
|
88
|
+
return draft;
|
|
89
|
+
}
|
|
21
90
|
// ── Constants ───────────────────────────────────────────────────
|
|
22
|
-
/** Entries older than 7 days are pruned (non-pinned only) */
|
|
23
91
|
const MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000;
|
|
24
|
-
/** Resolved threads get a 7-day grace period before removal */
|
|
25
92
|
const RESOLVED_GRACE_MS = 7 * 24 * 60 * 60 * 1000;
|
|
26
|
-
/** Maximum number of entries before LRU eviction */
|
|
27
|
-
const MAX_ENTRIES = 1000;
|
|
28
93
|
// ── Implementation ──────────────────────────────────────────────
|
|
29
94
|
export class ThreadResumeMap {
|
|
30
|
-
|
|
95
|
+
store;
|
|
96
|
+
legacyPath;
|
|
31
97
|
projectDir;
|
|
32
98
|
tmuxPath;
|
|
33
|
-
constructor(stateDir, projectDir, tmuxPath) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
this.filePath = path.join(threadlineDir, 'thread-resume-map.json');
|
|
99
|
+
constructor(stateDir, projectDir, tmuxPath, store) {
|
|
100
|
+
this.store = store ?? new ConversationStore(stateDir);
|
|
101
|
+
this.legacyPath = path.join(stateDir, 'threadline', 'thread-resume-map.json');
|
|
37
102
|
this.projectDir = projectDir;
|
|
38
103
|
this.tmuxPath = tmuxPath || 'tmux';
|
|
39
104
|
}
|
|
40
105
|
/**
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
|
|
44
|
-
save(threadId, entry) {
|
|
45
|
-
const map = this.load();
|
|
46
|
-
map[threadId] = {
|
|
47
|
-
...entry,
|
|
48
|
-
savedAt: new Date().toISOString(),
|
|
49
|
-
};
|
|
50
|
-
// Prune if needed
|
|
51
|
-
this.pruneMap(map);
|
|
52
|
-
this.persist(map);
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Look up a thread resume entry. Returns null if not found,
|
|
56
|
-
* expired, or the JSONL file no longer exists.
|
|
106
|
+
* Look up a thread resume entry. Returns null if not found, expired, or the
|
|
107
|
+
* session JSONL no longer exists. Dual-read: on a ConversationStore miss, fall
|
|
108
|
+
* back to the legacy file and write through (one-release transition window).
|
|
57
109
|
*/
|
|
58
110
|
get(threadId) {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
111
|
+
let c = this.store.get(threadId);
|
|
112
|
+
if (!c) {
|
|
113
|
+
const legacy = this.readLegacyEntry(threadId);
|
|
114
|
+
if (legacy) {
|
|
115
|
+
this.save(threadId, legacy); // write-through to ConversationStore
|
|
116
|
+
c = this.store.get(threadId);
|
|
117
|
+
}
|
|
66
118
|
}
|
|
67
|
-
|
|
68
|
-
|
|
119
|
+
if (!c)
|
|
120
|
+
return null;
|
|
121
|
+
const entry = conversationToEntry(c);
|
|
122
|
+
// Resume guard: the session JSONL must still exist (unless pinned).
|
|
123
|
+
if (!entry.pinned && !this.jsonlExists(entry.uuid))
|
|
69
124
|
return null;
|
|
70
|
-
}
|
|
71
125
|
return entry;
|
|
72
126
|
}
|
|
73
|
-
/**
|
|
74
|
-
|
|
75
|
-
|
|
127
|
+
/** Save or update a thread resume mapping (MERGES — preserves gate turn state). */
|
|
128
|
+
save(threadId, entry) {
|
|
129
|
+
this.store.mutateSync(threadId, draft => applyEntryToConversation({ ...entry, savedAt: new Date().toISOString() }, draft));
|
|
130
|
+
}
|
|
131
|
+
/** Remove a thread entry (cross-process safe via ConversationStore). */
|
|
76
132
|
remove(threadId) {
|
|
77
|
-
|
|
78
|
-
delete map[threadId];
|
|
79
|
-
this.persist(map);
|
|
133
|
+
this.store.mutateSync(threadId, () => null);
|
|
80
134
|
}
|
|
81
|
-
/**
|
|
82
|
-
* Mark a thread as resolved — sets state to 'resolved' and records resolvedAt.
|
|
83
|
-
* Resolved threads get a grace period before being removed by prune().
|
|
84
|
-
*/
|
|
135
|
+
/** Mark a thread resolved (grace period before removal). */
|
|
85
136
|
resolve(threadId) {
|
|
86
|
-
|
|
87
|
-
const entry = map[threadId];
|
|
88
|
-
if (!entry)
|
|
137
|
+
if (!this.store.get(threadId))
|
|
89
138
|
return;
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
139
|
+
this.store.mutateSync(threadId, draft => {
|
|
140
|
+
draft.state = 'resolved';
|
|
141
|
+
draft.resolvedAt = new Date().toISOString();
|
|
142
|
+
return draft;
|
|
143
|
+
});
|
|
94
144
|
}
|
|
95
|
-
/**
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
145
|
+
/** Pin — never evicted. */
|
|
146
|
+
pin(threadId) {
|
|
147
|
+
if (!this.store.get(threadId))
|
|
148
|
+
return;
|
|
149
|
+
this.store.mutateSync(threadId, draft => { draft.pinned = true; return draft; });
|
|
150
|
+
}
|
|
151
|
+
/** Unpin — allow normal TTL/LRU eviction. */
|
|
152
|
+
unpin(threadId) {
|
|
153
|
+
if (!this.store.get(threadId))
|
|
154
|
+
return;
|
|
155
|
+
this.store.mutateSync(threadId, draft => { draft.pinned = false; return draft; });
|
|
156
|
+
}
|
|
157
|
+
/** Find all (non-expired) threads with a specific remote agent. */
|
|
158
|
+
getByRemoteAgent(agentName) {
|
|
159
|
+
return this.store.getByParticipant(agentName)
|
|
160
|
+
.map(c => ({ threadId: c.threadId, entry: conversationToEntry(c) }));
|
|
161
|
+
}
|
|
162
|
+
/** List all active or idle threads. */
|
|
163
|
+
listActive() {
|
|
164
|
+
return this.store.listActive()
|
|
165
|
+
.map(c => ({ threadId: c.threadId, entry: conversationToEntry(c) }))
|
|
166
|
+
.filter(({ entry }) => entry.state === 'active' || entry.state === 'idle');
|
|
167
|
+
}
|
|
168
|
+
/** Cross-machine failover: demote a source machine's active threads to idle. */
|
|
100
169
|
migrateFrom(sourceMachine, targetMachine) {
|
|
101
|
-
const map = this.load();
|
|
102
170
|
let migrated = 0;
|
|
103
171
|
let skipped = 0;
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
172
|
+
// Iterate ALL conversations (not just active) so resolved/failed threads from
|
|
173
|
+
// the source machine are counted as skipped, matching legacy semantics.
|
|
174
|
+
for (const c of this.store.all()) {
|
|
175
|
+
if (c.machineOrigin !== sourceMachine)
|
|
176
|
+
continue;
|
|
177
|
+
if (c.state === 'active') {
|
|
178
|
+
this.store.mutateSync(c.threadId, draft => {
|
|
179
|
+
draft.migratedTo = targetMachine;
|
|
180
|
+
draft.state = 'idle';
|
|
181
|
+
return draft;
|
|
182
|
+
});
|
|
109
183
|
migrated++;
|
|
110
184
|
}
|
|
111
|
-
else
|
|
185
|
+
else {
|
|
112
186
|
skipped++;
|
|
113
187
|
}
|
|
114
188
|
}
|
|
115
|
-
if (migrated > 0)
|
|
116
|
-
this.persist(map);
|
|
117
189
|
return { migrated, skipped };
|
|
118
190
|
}
|
|
119
|
-
/**
|
|
120
|
-
* Get entries that were migrated to this machine (for resume capability).
|
|
121
|
-
*/
|
|
191
|
+
/** Get entries migrated to this machine (for resume capability). */
|
|
122
192
|
getMigratedEntries(targetMachine) {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
if (entry.migratedTo === targetMachine) {
|
|
127
|
-
results.push({ threadId, entry });
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
return results;
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Pin a thread — pinned threads are never evicted by LRU or TTL.
|
|
134
|
-
*/
|
|
135
|
-
pin(threadId) {
|
|
136
|
-
const map = this.load();
|
|
137
|
-
const entry = map[threadId];
|
|
138
|
-
if (!entry)
|
|
139
|
-
return;
|
|
140
|
-
entry.pinned = true;
|
|
141
|
-
entry.savedAt = new Date().toISOString();
|
|
142
|
-
this.persist(map);
|
|
193
|
+
return this.store.all()
|
|
194
|
+
.filter(c => c.migratedTo === targetMachine)
|
|
195
|
+
.map(c => ({ threadId: c.threadId, entry: conversationToEntry(c) }));
|
|
143
196
|
}
|
|
144
|
-
/**
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
unpin(threadId) {
|
|
148
|
-
const map = this.load();
|
|
149
|
-
const entry = map[threadId];
|
|
150
|
-
if (!entry)
|
|
151
|
-
return;
|
|
152
|
-
entry.pinned = false;
|
|
153
|
-
entry.savedAt = new Date().toISOString();
|
|
154
|
-
this.persist(map);
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Find all threads with a specific remote agent.
|
|
158
|
-
* Returns entries that are not expired.
|
|
159
|
-
*/
|
|
160
|
-
getByRemoteAgent(agentName) {
|
|
161
|
-
const map = this.load();
|
|
162
|
-
const results = [];
|
|
163
|
-
for (const [threadId, entry] of Object.entries(map)) {
|
|
164
|
-
if (entry.remoteAgent === agentName && (entry.pinned || !this.isExpired(entry))) {
|
|
165
|
-
results.push({ threadId, entry });
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
return results;
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* List all active or idle threads (not resolved, failed, or archived).
|
|
172
|
-
*/
|
|
173
|
-
listActive() {
|
|
174
|
-
const map = this.load();
|
|
175
|
-
const results = [];
|
|
176
|
-
for (const [threadId, entry] of Object.entries(map)) {
|
|
177
|
-
if ((entry.state === 'active' || entry.state === 'idle') &&
|
|
178
|
-
(entry.pinned || !this.isExpired(entry))) {
|
|
179
|
-
results.push({ threadId, entry });
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
return results;
|
|
197
|
+
/** Total stored entries (for monitoring). */
|
|
198
|
+
size() {
|
|
199
|
+
return this.store.size();
|
|
183
200
|
}
|
|
184
|
-
/**
|
|
185
|
-
* Prune expired entries, resolved entries past grace period,
|
|
186
|
-
* and LRU overflow entries. Called automatically on save, but
|
|
187
|
-
* can be called manually for maintenance.
|
|
188
|
-
*/
|
|
201
|
+
/** Prune expired / resolved-past-grace / LRU overflow. */
|
|
189
202
|
prune() {
|
|
190
|
-
|
|
191
|
-
this.pruneMap(map);
|
|
192
|
-
this.persist(map);
|
|
203
|
+
this.store.prune();
|
|
193
204
|
}
|
|
194
205
|
/**
|
|
195
|
-
* Proactive resume heartbeat: scan
|
|
196
|
-
*
|
|
197
|
-
*
|
|
198
|
-
* This ensures that even if a session crashes unexpectedly, we already have
|
|
199
|
-
* its UUID on file for --resume.
|
|
206
|
+
* Proactive resume heartbeat: scan active thread-linked tmux sessions and
|
|
207
|
+
* update the thread→UUID mapping so a crash leaves the UUID on file.
|
|
200
208
|
*/
|
|
201
209
|
refreshResumeMappings(threadSessions) {
|
|
202
210
|
try {
|
|
@@ -206,13 +214,12 @@ export class ThreadResumeMap {
|
|
|
206
214
|
const projectJsonlDir = path.join(os.homedir(), '.claude', 'projects', projectHash);
|
|
207
215
|
if (!fs.existsSync(projectJsonlDir))
|
|
208
216
|
return;
|
|
209
|
-
// Get all JSONL files with their stats
|
|
210
217
|
const jsonlFiles = fs.readdirSync(projectJsonlDir)
|
|
211
218
|
.filter(f => f.endsWith('.jsonl'))
|
|
212
219
|
.map(f => {
|
|
213
220
|
try {
|
|
214
221
|
const stat = fs.statSync(path.join(projectJsonlDir, f));
|
|
215
|
-
return {
|
|
222
|
+
return { mtimeMs: stat.mtimeMs, uuid: f.replace('.jsonl', '') };
|
|
216
223
|
}
|
|
217
224
|
catch {
|
|
218
225
|
return null;
|
|
@@ -222,138 +229,73 @@ export class ThreadResumeMap {
|
|
|
222
229
|
.sort((a, b) => b.mtimeMs - a.mtimeMs);
|
|
223
230
|
if (jsonlFiles.length === 0)
|
|
224
231
|
return;
|
|
225
|
-
const map = this.load();
|
|
226
|
-
let updated = 0;
|
|
227
232
|
const claimedUuids = new Set();
|
|
228
233
|
for (const [threadId, sessionName] of threadSessions) {
|
|
229
|
-
// Verify the tmux session is actually alive
|
|
230
234
|
const hasSession = spawnSync(this.tmuxPath, ['has-session', '-t', `=${sessionName}`]);
|
|
231
235
|
if (hasSession.status !== 0)
|
|
232
236
|
continue;
|
|
233
|
-
// Find the JSONL for this session (most recently modified, not already claimed)
|
|
234
237
|
const availableJsonl = jsonlFiles.find(f => !claimedUuids.has(f.uuid));
|
|
235
238
|
if (!availableJsonl)
|
|
236
239
|
continue;
|
|
237
240
|
claimedUuids.add(availableJsonl.uuid);
|
|
238
|
-
const
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
241
|
+
const existing = this.store.get(threadId);
|
|
242
|
+
const entryAge = existing ? Date.now() - new Date(existing.savedAt).getTime() : Infinity;
|
|
243
|
+
if (existing && (existing.sessionUuid !== availableJsonl.uuid || entryAge > 2 * 60 * 60 * 1000)) {
|
|
244
|
+
this.store.mutateSync(threadId, draft => {
|
|
245
|
+
draft.sessionUuid = availableJsonl.uuid;
|
|
246
|
+
draft.boundSessionName = sessionName;
|
|
247
|
+
draft.lastActivityAt = new Date().toISOString();
|
|
248
|
+
return draft;
|
|
249
|
+
});
|
|
247
250
|
}
|
|
248
251
|
}
|
|
249
|
-
if (updated > 0) {
|
|
250
|
-
this.persist(map);
|
|
251
|
-
}
|
|
252
252
|
}
|
|
253
253
|
catch (err) {
|
|
254
254
|
console.error('[ThreadResumeMap] Resume heartbeat error:', err);
|
|
255
255
|
}
|
|
256
256
|
}
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
size() {
|
|
261
|
-
return Object.keys(this.load()).length;
|
|
262
|
-
}
|
|
263
|
-
// ── Private Helpers ──────────────────────────────────────────
|
|
264
|
-
load() {
|
|
257
|
+
// ── Private helpers ──────────────────────────────────────────
|
|
258
|
+
/** Dual-read: read a single entry from the frozen legacy file, if present + fresh. */
|
|
259
|
+
readLegacyEntry(threadId) {
|
|
265
260
|
try {
|
|
266
|
-
if (fs.existsSync(this.
|
|
267
|
-
return
|
|
268
|
-
|
|
261
|
+
if (!fs.existsSync(this.legacyPath))
|
|
262
|
+
return null;
|
|
263
|
+
const map = JSON.parse(fs.readFileSync(this.legacyPath, 'utf-8'));
|
|
264
|
+
const entry = map[threadId];
|
|
265
|
+
if (!entry)
|
|
266
|
+
return null;
|
|
267
|
+
if (!entry.pinned && this.isExpired(entry))
|
|
268
|
+
return null;
|
|
269
|
+
return entry;
|
|
269
270
|
}
|
|
270
271
|
catch {
|
|
271
|
-
|
|
272
|
-
}
|
|
273
|
-
return {};
|
|
274
|
-
}
|
|
275
|
-
persist(map) {
|
|
276
|
-
try {
|
|
277
|
-
fs.writeFileSync(this.filePath, JSON.stringify(map, null, 2));
|
|
278
|
-
}
|
|
279
|
-
catch (err) {
|
|
280
|
-
console.error(`[ThreadResumeMap] Failed to save: ${err}`);
|
|
272
|
+
return null;
|
|
281
273
|
}
|
|
282
274
|
}
|
|
283
|
-
/**
|
|
284
|
-
* Check if an entry is expired based on its state and age.
|
|
285
|
-
* - Active/idle: expire after MAX_AGE_MS from lastAccessedAt
|
|
286
|
-
* - Resolved: expire after RESOLVED_GRACE_MS from resolvedAt
|
|
287
|
-
* - Failed/archived: expire after MAX_AGE_MS from savedAt
|
|
288
|
-
*/
|
|
289
275
|
isExpired(entry) {
|
|
290
276
|
const now = Date.now();
|
|
291
277
|
if (entry.state === 'resolved' && entry.resolvedAt) {
|
|
292
278
|
return now - new Date(entry.resolvedAt).getTime() > RESOLVED_GRACE_MS;
|
|
293
279
|
}
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
return now - new Date(referenceTime).getTime() > MAX_AGE_MS;
|
|
280
|
+
const ref = entry.lastAccessedAt || entry.savedAt;
|
|
281
|
+
return now - new Date(ref).getTime() > MAX_AGE_MS;
|
|
297
282
|
}
|
|
298
|
-
/**
|
|
299
|
-
*
|
|
300
|
-
* and LRU overflow (non-pinned) entries.
|
|
301
|
-
*/
|
|
302
|
-
pruneMap(map) {
|
|
303
|
-
// Phase 1: Remove expired and resolved-past-grace entries
|
|
304
|
-
for (const key of Object.keys(map)) {
|
|
305
|
-
const entry = map[key];
|
|
306
|
-
if (entry.pinned)
|
|
307
|
-
continue;
|
|
308
|
-
if (this.isExpired(entry)) {
|
|
309
|
-
delete map[key];
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
// Phase 2: LRU eviction if still over MAX_ENTRIES
|
|
313
|
-
const keys = Object.keys(map);
|
|
314
|
-
if (keys.length <= MAX_ENTRIES)
|
|
315
|
-
return;
|
|
316
|
-
// Separate pinned from unpinned
|
|
317
|
-
const pinned = [];
|
|
318
|
-
const unpinned = [];
|
|
319
|
-
for (const key of keys) {
|
|
320
|
-
const entry = map[key];
|
|
321
|
-
if (entry.pinned) {
|
|
322
|
-
pinned.push(key);
|
|
323
|
-
}
|
|
324
|
-
else {
|
|
325
|
-
unpinned.push({
|
|
326
|
-
key,
|
|
327
|
-
lastAccessedAt: new Date(entry.lastAccessedAt || entry.savedAt).getTime(),
|
|
328
|
-
});
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
// Sort unpinned by lastAccessedAt ascending (oldest first = evict first)
|
|
332
|
-
unpinned.sort((a, b) => a.lastAccessedAt - b.lastAccessedAt);
|
|
333
|
-
// Evict oldest unpinned entries until we're at or under MAX_ENTRIES
|
|
334
|
-
const toEvict = keys.length - MAX_ENTRIES;
|
|
335
|
-
for (let i = 0; i < toEvict && i < unpinned.length; i++) {
|
|
336
|
-
delete map[unpinned[i].key];
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
/**
|
|
340
|
-
* Check if a JSONL file exists for the given UUID.
|
|
341
|
-
*/
|
|
283
|
+
/** Check if a JSONL file exists for the given session UUID. (protected so
|
|
284
|
+
* tests can bypass the filesystem check via a subclass.) */
|
|
342
285
|
jsonlExists(uuid) {
|
|
343
|
-
|
|
344
|
-
|
|
286
|
+
if (!uuid)
|
|
287
|
+
return false;
|
|
288
|
+
const claudeProjectsDir = path.join(os.homedir(), '.claude', 'projects');
|
|
345
289
|
if (!fs.existsSync(claudeProjectsDir))
|
|
346
290
|
return false;
|
|
347
291
|
try {
|
|
348
|
-
const
|
|
349
|
-
|
|
350
|
-
const jsonlPath = path.join(claudeProjectsDir, dir, `${uuid}.jsonl`);
|
|
351
|
-
if (fs.existsSync(jsonlPath))
|
|
292
|
+
for (const dir of fs.readdirSync(claudeProjectsDir)) {
|
|
293
|
+
if (fs.existsSync(path.join(claudeProjectsDir, dir, `${uuid}.jsonl`)))
|
|
352
294
|
return true;
|
|
353
295
|
}
|
|
354
296
|
}
|
|
355
297
|
catch {
|
|
356
|
-
// Can't check — assume not found
|
|
298
|
+
// Can't check — assume not found.
|
|
357
299
|
}
|
|
358
300
|
return false;
|
|
359
301
|
}
|
|
@@ -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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"}
|
|
@@ -82,9 +82,14 @@ export declare class ThreadlineObservability {
|
|
|
82
82
|
private outboxPath;
|
|
83
83
|
private bindingsPath;
|
|
84
84
|
private knownAgentsPath;
|
|
85
|
-
private
|
|
85
|
+
private conversationsPath;
|
|
86
86
|
private readJsonl;
|
|
87
87
|
private loadBindings;
|
|
88
|
+
/**
|
|
89
|
+
* Phase 2a (CMT-497): the resume state now lives in conversations.json (the
|
|
90
|
+
* single store). Return threads that have a spawned session (a sessionUuid) so
|
|
91
|
+
* the dashboard's `hasSpawnedSession` check is preserved.
|
|
92
|
+
*/
|
|
88
93
|
private loadThreadResume;
|
|
89
94
|
private resolveAgentName;
|
|
90
95
|
private loadKnownAgentsCache;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThreadlineObservability.d.ts","sourceRoot":"","sources":["../../src/threadline/ThreadlineObservability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,MAAM,WAAW,oBAAoB;IACnC,wDAAwD;IACxD,SAAS,EAAE,IAAI,GAAG,KAAK,CAAC;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,uFAAuF;IACvF,WAAW,EAAE,MAAM,CAAC;IACpB,wFAAwF;IACxF,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,iHAAiH;IACjH,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAChG,yEAAyE;IACzE,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,YAAa,SAAQ,aAAa;IACjD,QAAQ,EAAE,oBAAoB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,oBAAoB,CAAC;IAC9B,gGAAgG;IAChG,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,EAAE,MAAM,CAAC;CAClB;AA8BD,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,eAAe,CAAK;gBAEhB,IAAI,EAAE,8BAA8B;IAMhD,WAAW,CAAC,OAAO,CAAC,EAAE;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,yFAAyF;QACzF,QAAQ,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;KACzB,GAAG,aAAa,EAAE;IAsFnB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAiBhD,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,SAAS,EAAE;IAyBtD,OAAO,CAAC,SAAS;IAGjB,OAAO,CAAC,UAAU;IAGlB,OAAO,CAAC,YAAY;IAGpB,OAAO,CAAC,eAAe;IAGvB,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"ThreadlineObservability.d.ts","sourceRoot":"","sources":["../../src/threadline/ThreadlineObservability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,MAAM,WAAW,oBAAoB;IACnC,wDAAwD;IACxD,SAAS,EAAE,IAAI,GAAG,KAAK,CAAC;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,uFAAuF;IACvF,WAAW,EAAE,MAAM,CAAC;IACpB,wFAAwF;IACxF,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,iHAAiH;IACjH,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAChG,yEAAyE;IACzE,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,YAAa,SAAQ,aAAa;IACjD,QAAQ,EAAE,oBAAoB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,oBAAoB,CAAC;IAC9B,gGAAgG;IAChG,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,EAAE,MAAM,CAAC;CAClB;AA8BD,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,eAAe,CAAK;gBAEhB,IAAI,EAAE,8BAA8B;IAMhD,WAAW,CAAC,OAAO,CAAC,EAAE;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,yFAAyF;QACzF,QAAQ,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;KACzB,GAAG,aAAa,EAAE;IAsFnB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAiBhD,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,SAAS,EAAE;IAyBtD,OAAO,CAAC,SAAS;IAGjB,OAAO,CAAC,UAAU;IAGlB,OAAO,CAAC,YAAY;IAGpB,OAAO,CAAC,eAAe;IAGvB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,SAAS;IAgBjB,OAAO,CAAC,YAAY;IAapB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,oBAAoB;IAe5B,OAAO,CAAC,UAAU;IAalB,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,2BAA2B;CAwBpC"}
|