imcodes 2026.4.1838-dev.1819 → 2026.4.1855-dev.1833
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/src/agent/providers/qwen.d.ts +2 -1
- package/dist/src/agent/providers/qwen.d.ts.map +1 -1
- package/dist/src/agent/providers/qwen.js +41 -4
- package/dist/src/agent/providers/qwen.js.map +1 -1
- package/dist/src/daemon/command-handler.js +1 -1
- package/dist/src/daemon/command-handler.js.map +1 -1
- package/dist/src/daemon/lifecycle.d.ts.map +1 -1
- package/dist/src/daemon/lifecycle.js +27 -14
- package/dist/src/daemon/lifecycle.js.map +1 -1
- package/dist/src/daemon/opencode-watcher.js +1 -1
- package/dist/src/daemon/opencode-watcher.js.map +1 -1
- package/dist/src/daemon/subsession-manager.js +1 -1
- package/dist/src/daemon/subsession-manager.js.map +1 -1
- package/dist/src/daemon/timeline-projection-types.d.ts +88 -0
- package/dist/src/daemon/timeline-projection-types.d.ts.map +1 -0
- package/dist/src/daemon/timeline-projection-types.js +2 -0
- package/dist/src/daemon/timeline-projection-types.js.map +1 -0
- package/dist/src/daemon/timeline-projection-worker.d.ts +2 -0
- package/dist/src/daemon/timeline-projection-worker.d.ts.map +1 -0
- package/dist/src/daemon/timeline-projection-worker.js +456 -0
- package/dist/src/daemon/timeline-projection-worker.js.map +1 -0
- package/dist/src/daemon/timeline-projection.d.ts +32 -0
- package/dist/src/daemon/timeline-projection.d.ts.map +1 -0
- package/dist/src/daemon/timeline-projection.js +188 -0
- package/dist/src/daemon/timeline-projection.js.map +1 -0
- package/dist/src/daemon/timeline-store.d.ts +19 -1
- package/dist/src/daemon/timeline-store.d.ts.map +1 -1
- package/dist/src/daemon/timeline-store.js +66 -2
- package/dist/src/daemon/timeline-store.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { Worker } from 'node:worker_threads';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
import { extname, join } from 'node:path';
|
|
4
|
+
import { homedir } from 'node:os';
|
|
5
|
+
import logger from '../util/logger.js';
|
|
6
|
+
const DEFAULT_QUERY_TIMEOUT_MS = 75;
|
|
7
|
+
const DEFAULT_WRITE_TIMEOUT_MS = 2_000;
|
|
8
|
+
function getProjectionDbPath() {
|
|
9
|
+
return process.env.IMCODES_TIMELINE_PROJECTION_DB_PATH?.trim()
|
|
10
|
+
|| join(homedir(), '.imcodes', 'timeline.sqlite');
|
|
11
|
+
}
|
|
12
|
+
function getWorkerModuleUrl() {
|
|
13
|
+
const selfPath = fileURLToPath(import.meta.url);
|
|
14
|
+
const ext = extname(selfPath);
|
|
15
|
+
return new URL(ext === '.ts' ? './timeline-projection-worker.ts' : './timeline-projection-worker.js', import.meta.url);
|
|
16
|
+
}
|
|
17
|
+
class TimelineProjectionClient {
|
|
18
|
+
worker = null;
|
|
19
|
+
nextId = 1;
|
|
20
|
+
pending = new Map();
|
|
21
|
+
permanentlyDisabled = false;
|
|
22
|
+
ensureWorker() {
|
|
23
|
+
if (this.permanentlyDisabled)
|
|
24
|
+
return null;
|
|
25
|
+
if (this.worker)
|
|
26
|
+
return this.worker;
|
|
27
|
+
try {
|
|
28
|
+
const worker = new Worker(getWorkerModuleUrl(), {
|
|
29
|
+
workerData: { dbPath: getProjectionDbPath() },
|
|
30
|
+
});
|
|
31
|
+
worker.unref();
|
|
32
|
+
worker.on('message', (message) => this.handleWorkerMessage(message));
|
|
33
|
+
worker.on('error', (err) => {
|
|
34
|
+
logger.warn({ err }, 'TimelineProjection: worker failed');
|
|
35
|
+
this.failAllPending(err instanceof Error ? err : new Error(String(err)));
|
|
36
|
+
this.worker = null;
|
|
37
|
+
this.permanentlyDisabled = true;
|
|
38
|
+
});
|
|
39
|
+
worker.on('exit', (code) => {
|
|
40
|
+
if (code !== 0) {
|
|
41
|
+
logger.warn({ code }, 'TimelineProjection: worker exited unexpectedly');
|
|
42
|
+
}
|
|
43
|
+
this.failAllPending(new Error(`timeline_projection_worker_exit:${code}`));
|
|
44
|
+
this.worker = null;
|
|
45
|
+
if (code !== 0)
|
|
46
|
+
this.permanentlyDisabled = true;
|
|
47
|
+
});
|
|
48
|
+
this.worker = worker;
|
|
49
|
+
return worker;
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
logger.warn({ err }, 'TimelineProjection: failed to start worker');
|
|
53
|
+
this.permanentlyDisabled = true;
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
handleWorkerMessage(message) {
|
|
58
|
+
const pending = this.pending.get(message.id);
|
|
59
|
+
if (!pending)
|
|
60
|
+
return;
|
|
61
|
+
this.pending.delete(message.id);
|
|
62
|
+
if (pending.timer)
|
|
63
|
+
clearTimeout(pending.timer);
|
|
64
|
+
if (message.ok)
|
|
65
|
+
pending.resolve(message.result);
|
|
66
|
+
else
|
|
67
|
+
pending.reject(new Error(message.error));
|
|
68
|
+
}
|
|
69
|
+
failAllPending(err) {
|
|
70
|
+
for (const [id, pending] of this.pending) {
|
|
71
|
+
this.pending.delete(id);
|
|
72
|
+
if (pending.timer)
|
|
73
|
+
clearTimeout(pending.timer);
|
|
74
|
+
pending.reject(err);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
request(type, payload, timeoutMs) {
|
|
78
|
+
const worker = this.ensureWorker();
|
|
79
|
+
if (!worker)
|
|
80
|
+
return Promise.reject(new Error('timeline_projection_unavailable'));
|
|
81
|
+
const id = this.nextId++;
|
|
82
|
+
return new Promise((resolve, reject) => {
|
|
83
|
+
const timer = timeoutMs > 0 ? setTimeout(() => {
|
|
84
|
+
this.pending.delete(id);
|
|
85
|
+
reject(new Error(`timeline_projection_timeout:${type}`));
|
|
86
|
+
}, timeoutMs) : undefined;
|
|
87
|
+
this.pending.set(id, { resolve: resolve, reject, timer });
|
|
88
|
+
const request = { id, type, payload };
|
|
89
|
+
worker.postMessage(request);
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
async recordAppendedEvent(event) {
|
|
93
|
+
await this.request('recordAppendedEvent', { event }, DEFAULT_WRITE_TIMEOUT_MS).catch((err) => {
|
|
94
|
+
logger.debug({ err, sessionId: event.sessionId, eventId: event.eventId }, 'TimelineProjection: recordAppendedEvent failed');
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
async queryHistory(query) {
|
|
98
|
+
try {
|
|
99
|
+
const result = await this.request('queryHistory', query, DEFAULT_QUERY_TIMEOUT_MS);
|
|
100
|
+
return result.events;
|
|
101
|
+
}
|
|
102
|
+
catch (err) {
|
|
103
|
+
logger.debug({ err, sessionId: query.sessionId }, 'TimelineProjection: queryHistory fallback to JSONL');
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
async queryLatest(sessionId) {
|
|
108
|
+
try {
|
|
109
|
+
return await this.request('queryLatest', { sessionId }, DEFAULT_QUERY_TIMEOUT_MS);
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
logger.debug({ err, sessionId }, 'TimelineProjection: queryLatest fallback to JSONL');
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
async getLatest(sessionId) {
|
|
117
|
+
return this.queryLatest(sessionId);
|
|
118
|
+
}
|
|
119
|
+
async queryCompletedTextTail(sessionId, limit = 50) {
|
|
120
|
+
try {
|
|
121
|
+
const result = await this.request('queryCompletedTextTail', { sessionId, limit }, DEFAULT_QUERY_TIMEOUT_MS);
|
|
122
|
+
return result.events;
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
logger.debug({ err, sessionId }, 'TimelineProjection: queryCompletedTextTail fallback to JSONL');
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
async queryByTypes(query) {
|
|
130
|
+
try {
|
|
131
|
+
const result = await this.request('queryByTypes', query, DEFAULT_QUERY_TIMEOUT_MS);
|
|
132
|
+
return result.events;
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
logger.debug({ err, sessionId: query.sessionId, types: query.types }, 'TimelineProjection: queryByTypes fallback to JSONL');
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
async rebuildSession(sessionId) {
|
|
140
|
+
try {
|
|
141
|
+
return await this.request('rebuildSession', { sessionId }, DEFAULT_WRITE_TIMEOUT_MS);
|
|
142
|
+
}
|
|
143
|
+
catch (err) {
|
|
144
|
+
logger.debug({ err, sessionId }, 'TimelineProjection: rebuildSession failed');
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
async pruneSessionToAuthoritative(sessionId, keepLast = 5000) {
|
|
149
|
+
try {
|
|
150
|
+
await this.request('pruneSessionToAuthoritative', { sessionId, keepLast }, DEFAULT_WRITE_TIMEOUT_MS);
|
|
151
|
+
}
|
|
152
|
+
catch (err) {
|
|
153
|
+
logger.debug({ err, sessionId, keepLast }, 'TimelineProjection: pruneSessionToAuthoritative failed');
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
async deleteSession(sessionId) {
|
|
157
|
+
try {
|
|
158
|
+
await this.request('deleteSession', { sessionId }, DEFAULT_WRITE_TIMEOUT_MS);
|
|
159
|
+
}
|
|
160
|
+
catch (err) {
|
|
161
|
+
logger.debug({ err, sessionId }, 'TimelineProjection: deleteSession failed');
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
async checkpointIfNeeded() {
|
|
165
|
+
try {
|
|
166
|
+
await this.request('checkpointIfNeeded', {}, DEFAULT_WRITE_TIMEOUT_MS);
|
|
167
|
+
}
|
|
168
|
+
catch (err) {
|
|
169
|
+
logger.debug({ err }, 'TimelineProjection: checkpointIfNeeded failed');
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
async shutdown() {
|
|
173
|
+
const worker = this.worker;
|
|
174
|
+
this.worker = null;
|
|
175
|
+
if (!worker)
|
|
176
|
+
return;
|
|
177
|
+
this.failAllPending(new Error('timeline_projection_shutdown'));
|
|
178
|
+
try {
|
|
179
|
+
await worker.terminate();
|
|
180
|
+
}
|
|
181
|
+
catch (err) {
|
|
182
|
+
logger.debug({ err }, 'TimelineProjection: worker terminate failed');
|
|
183
|
+
}
|
|
184
|
+
this.permanentlyDisabled = false;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
export const timelineProjection = new TimelineProjectionClient();
|
|
188
|
+
//# sourceMappingURL=timeline-projection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline-projection.js","sourceRoot":"","sources":["../../../src/daemon/timeline-projection.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,10 +4,17 @@
|
|
|
4
4
|
* Storage: ~/.imcodes/timeline/{sessionName}.jsonl
|
|
5
5
|
*/
|
|
6
6
|
import type { TimelineEvent } from './timeline-event.js';
|
|
7
|
+
import { type TimelineProjectionQueryOpts } from './timeline-projection.js';
|
|
8
|
+
export declare const TIMELINE_DIR: string;
|
|
9
|
+
/**
|
|
10
|
+
* Read the last N lines from a file by reading backward from the end in chunks.
|
|
11
|
+
* Much faster than readFileSync + split for large files when only tail is needed.
|
|
12
|
+
*/
|
|
13
|
+
export declare function readTailLines(filePath: string, maxLines: number): string[];
|
|
7
14
|
declare class TimelineStore {
|
|
8
15
|
private initialized;
|
|
9
16
|
private ensureDir;
|
|
10
|
-
|
|
17
|
+
filePath(sessionName: string): string;
|
|
11
18
|
/** Append a single event to the session's JSONL file. */
|
|
12
19
|
append(event: TimelineEvent): void;
|
|
13
20
|
/**
|
|
@@ -24,6 +31,13 @@ declare class TimelineStore {
|
|
|
24
31
|
beforeTs?: number;
|
|
25
32
|
limit?: number;
|
|
26
33
|
}): TimelineEvent[];
|
|
34
|
+
readPreferred(sessionName: string, opts?: {
|
|
35
|
+
afterTs?: number;
|
|
36
|
+
beforeTs?: number;
|
|
37
|
+
limit?: number;
|
|
38
|
+
}): Promise<TimelineEvent[]>;
|
|
39
|
+
readByTypesPreferred(sessionName: string, types: TimelineEvent['type'][], opts?: TimelineProjectionQueryOpts): Promise<TimelineEvent[]>;
|
|
40
|
+
readCompletedTextTail(sessionName: string, limit?: number): Promise<TimelineEvent[]>;
|
|
27
41
|
/**
|
|
28
42
|
* Get the latest epoch and seq for a session (from the last line).
|
|
29
43
|
*/
|
|
@@ -31,6 +45,10 @@ declare class TimelineStore {
|
|
|
31
45
|
epoch: number;
|
|
32
46
|
seq: number;
|
|
33
47
|
} | null;
|
|
48
|
+
getLatestPreferred(sessionName: string): Promise<{
|
|
49
|
+
epoch: number;
|
|
50
|
+
seq: number;
|
|
51
|
+
} | null>;
|
|
34
52
|
/**
|
|
35
53
|
* Truncate old events from a session file, keeping only the last N events.
|
|
36
54
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeline-store.d.ts","sourceRoot":"","sources":["../../../src/daemon/timeline-store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"timeline-store.d.ts","sourceRoot":"","sources":["../../../src/daemon/timeline-store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAsB,KAAK,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAEhG,eAAO,MAAM,YAAY,QAA0C,CAAC;AAIpE;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CA0C1E;AAED,cAAM,aAAa;IACjB,OAAO,CAAC,WAAW,CAAS;IAE5B,OAAO,CAAC,SAAS;IAQjB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAMrC,yDAAyD;IACzD,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAYlC;;;;;;OAMG;IACH,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,aAAa,EAAE;IA0BvI,aAAa,CACjB,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAC7D,OAAO,CAAC,aAAa,EAAE,CAAC;IAWrB,oBAAoB,CACxB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,EAC9B,IAAI,CAAC,EAAE,2BAA2B,GACjC,OAAO,CAAC,aAAa,EAAE,CAAC;IAYrB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAgBtF;;OAEG;IACH,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAY/D,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAU7F;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,SAAsB,GAAG,IAAI;IAiBnE;;;OAGG;IACH,WAAW,IAAI,IAAI;IAanB;;OAEG;IACH,OAAO,IAAI,IAAI;CA0BhB;AAED,eAAO,MAAM,aAAa,eAAsB,CAAC"}
|
|
@@ -7,14 +7,15 @@ import { mkdirSync, appendFileSync, writeFileSync, readdirSync, statSync, unlink
|
|
|
7
7
|
import { join } from 'path';
|
|
8
8
|
import { homedir } from 'os';
|
|
9
9
|
import logger from '../util/logger.js';
|
|
10
|
-
|
|
10
|
+
import { timelineProjection } from './timeline-projection.js';
|
|
11
|
+
export const TIMELINE_DIR = join(homedir(), '.imcodes', 'timeline');
|
|
11
12
|
const MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000; // 7 days
|
|
12
13
|
const MAX_EVENTS_PER_FILE = 5000;
|
|
13
14
|
/**
|
|
14
15
|
* Read the last N lines from a file by reading backward from the end in chunks.
|
|
15
16
|
* Much faster than readFileSync + split for large files when only tail is needed.
|
|
16
17
|
*/
|
|
17
|
-
function readTailLines(filePath, maxLines) {
|
|
18
|
+
export function readTailLines(filePath, maxLines) {
|
|
18
19
|
let fd;
|
|
19
20
|
try {
|
|
20
21
|
fd = openSync(filePath, 'r');
|
|
@@ -79,6 +80,9 @@ class TimelineStore {
|
|
|
79
80
|
this.ensureDir();
|
|
80
81
|
try {
|
|
81
82
|
appendFileSync(this.filePath(event.sessionId), JSON.stringify(event) + '\n');
|
|
83
|
+
void timelineProjection.recordAppendedEvent(event).catch((err) => {
|
|
84
|
+
logger.debug({ err, sessionId: event.sessionId, eventId: event.eventId }, 'TimelineProjection: append mirror failed');
|
|
85
|
+
});
|
|
82
86
|
}
|
|
83
87
|
catch (err) {
|
|
84
88
|
logger.debug({ err, sessionId: event.sessionId }, 'TimelineStore: append failed');
|
|
@@ -120,6 +124,45 @@ class TimelineStore {
|
|
|
120
124
|
}
|
|
121
125
|
return events.reverse(); // restore ts order
|
|
122
126
|
}
|
|
127
|
+
async readPreferred(sessionName, opts) {
|
|
128
|
+
const projected = await timelineProjection.queryHistory({
|
|
129
|
+
sessionId: sessionName,
|
|
130
|
+
afterTs: opts?.afterTs,
|
|
131
|
+
beforeTs: opts?.beforeTs,
|
|
132
|
+
limit: opts?.limit,
|
|
133
|
+
});
|
|
134
|
+
if (projected)
|
|
135
|
+
return projected;
|
|
136
|
+
return this.read(sessionName, opts);
|
|
137
|
+
}
|
|
138
|
+
async readByTypesPreferred(sessionName, types, opts) {
|
|
139
|
+
const projected = await timelineProjection.queryByTypes({
|
|
140
|
+
sessionId: sessionName,
|
|
141
|
+
types,
|
|
142
|
+
afterTs: opts?.afterTs,
|
|
143
|
+
beforeTs: opts?.beforeTs,
|
|
144
|
+
limit: opts?.limit,
|
|
145
|
+
});
|
|
146
|
+
if (projected)
|
|
147
|
+
return projected;
|
|
148
|
+
return this.read(sessionName, opts).filter((event) => types.includes(event.type));
|
|
149
|
+
}
|
|
150
|
+
async readCompletedTextTail(sessionName, limit = 50) {
|
|
151
|
+
const projected = await timelineProjection.queryCompletedTextTail(sessionName, limit);
|
|
152
|
+
if (projected)
|
|
153
|
+
return projected;
|
|
154
|
+
return this.read(sessionName, { limit: Math.max(limit * 6, 500) }).filter((event) => {
|
|
155
|
+
if (event.type === 'user.message') {
|
|
156
|
+
return typeof event.payload?.text === 'string' && event.payload.text.trim().length > 0;
|
|
157
|
+
}
|
|
158
|
+
if (event.type === 'assistant.text') {
|
|
159
|
+
return event.payload?.streaming !== true
|
|
160
|
+
&& typeof event.payload?.text === 'string'
|
|
161
|
+
&& event.payload.text.trim().length > 0;
|
|
162
|
+
}
|
|
163
|
+
return false;
|
|
164
|
+
}).slice(-limit);
|
|
165
|
+
}
|
|
123
166
|
/**
|
|
124
167
|
* Get the latest epoch and seq for a session (from the last line).
|
|
125
168
|
*/
|
|
@@ -135,6 +178,17 @@ class TimelineStore {
|
|
|
135
178
|
}
|
|
136
179
|
return null;
|
|
137
180
|
}
|
|
181
|
+
async getLatestPreferred(sessionName) {
|
|
182
|
+
try {
|
|
183
|
+
const projected = await timelineProjection.getLatest(sessionName);
|
|
184
|
+
if (projected)
|
|
185
|
+
return projected;
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
// fall through to JSONL
|
|
189
|
+
}
|
|
190
|
+
return this.getLatest(sessionName);
|
|
191
|
+
}
|
|
138
192
|
/**
|
|
139
193
|
* Truncate old events from a session file, keeping only the last N events.
|
|
140
194
|
*/
|
|
@@ -146,6 +200,9 @@ class TimelineStore {
|
|
|
146
200
|
const kept = newestFirst.slice(0, keepLast).reverse();
|
|
147
201
|
try {
|
|
148
202
|
writeFileSync(filePath, kept.join('\n') + '\n');
|
|
203
|
+
void timelineProjection.pruneSessionToAuthoritative(sessionName, keepLast).catch((err) => {
|
|
204
|
+
logger.debug({ err, sessionName }, 'TimelineProjection: prune after truncate failed');
|
|
205
|
+
});
|
|
149
206
|
logger.info({ sessionName, after: kept.length }, 'TimelineStore: truncated');
|
|
150
207
|
}
|
|
151
208
|
catch (err) {
|
|
@@ -185,6 +242,10 @@ class TimelineStore {
|
|
|
185
242
|
const stat = statSync(fullPath);
|
|
186
243
|
if (now - stat.mtimeMs > MAX_AGE_MS) {
|
|
187
244
|
unlinkSync(fullPath);
|
|
245
|
+
const sessionName = file.replace('.jsonl', '');
|
|
246
|
+
void timelineProjection.deleteSession(sessionName).catch((err) => {
|
|
247
|
+
logger.debug({ err, sessionName }, 'TimelineProjection: delete after cleanup failed');
|
|
248
|
+
});
|
|
188
249
|
logger.info({ file }, 'TimelineStore: deleted old file');
|
|
189
250
|
}
|
|
190
251
|
}
|
|
@@ -194,6 +255,9 @@ class TimelineStore {
|
|
|
194
255
|
catch (err) {
|
|
195
256
|
logger.debug({ err }, 'TimelineStore: cleanup failed');
|
|
196
257
|
}
|
|
258
|
+
void timelineProjection.checkpointIfNeeded().catch((err) => {
|
|
259
|
+
logger.debug({ err }, 'TimelineProjection: cleanup checkpoint failed');
|
|
260
|
+
});
|
|
197
261
|
}
|
|
198
262
|
}
|
|
199
263
|
export const timelineStore = new TimelineStore();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeline-store.js","sourceRoot":"","sources":["../../../src/daemon/timeline-store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC3I,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAE7B,OAAO,MAAM,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"timeline-store.js","sourceRoot":"","sources":["../../../src/daemon/timeline-store.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED