@felan-ai/felan 0.21.16 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/dist/dependencies.js +1 -1
- package/dist/dependencies.js.map +1 -1
- package/dist/extensions.d.ts +1 -1
- package/dist/extensions.d.ts.map +1 -1
- package/dist/extensions.js +2 -2
- package/dist/extensions.js.map +1 -1
- package/dist/herdr.d.ts +22 -0
- package/dist/herdr.d.ts.map +1 -0
- package/dist/herdr.js +208 -0
- package/dist/herdr.js.map +1 -0
- package/dist/insights.d.ts +1 -1
- package/dist/insights.d.ts.map +1 -1
- package/dist/insights.js +11 -8
- package/dist/insights.js.map +1 -1
- package/dist/memory/control.d.ts +1 -1
- package/dist/memory/control.d.ts.map +1 -1
- package/dist/memory/control.js +90 -34
- package/dist/memory/control.js.map +1 -1
- package/dist/memory/coordinator.d.ts +13 -2
- package/dist/memory/coordinator.d.ts.map +1 -1
- package/dist/memory/coordinator.js +416 -67
- package/dist/memory/coordinator.js.map +1 -1
- package/dist/memory/dreamer.d.ts +7 -1
- package/dist/memory/dreamer.d.ts.map +1 -1
- package/dist/memory/dreamer.js +145 -59
- package/dist/memory/dreamer.js.map +1 -1
- package/dist/memory/history-view.d.ts +26 -0
- package/dist/memory/history-view.d.ts.map +1 -0
- package/dist/memory/history-view.js +192 -0
- package/dist/memory/history-view.js.map +1 -0
- package/dist/memory/history.d.ts +33 -0
- package/dist/memory/history.d.ts.map +1 -0
- package/dist/memory/history.js +314 -0
- package/dist/memory/history.js.map +1 -0
- package/dist/memory/run-retention.d.ts +12 -0
- package/dist/memory/run-retention.d.ts.map +1 -0
- package/dist/memory/run-retention.js +294 -0
- package/dist/memory/run-retention.js.map +1 -0
- package/dist/memory/run.d.ts +67 -0
- package/dist/memory/run.d.ts.map +1 -0
- package/dist/memory/run.js +417 -0
- package/dist/memory/run.js.map +1 -0
- package/dist/memory/store.d.ts +67 -3
- package/dist/memory/store.d.ts.map +1 -1
- package/dist/memory/store.js +517 -110
- package/dist/memory/store.js.map +1 -1
- package/dist/resume.d.ts.map +1 -1
- package/dist/resume.js +12 -7
- package/dist/resume.js.map +1 -1
- package/dist/runtime.d.ts +1 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +27 -18
- package/dist/runtime.js.map +1 -1
- package/dist/session-picker.d.ts +8 -1
- package/dist/session-picker.d.ts.map +1 -1
- package/dist/session-picker.js +7 -4
- package/dist/session-picker.js.map +1 -1
- package/dist/settings.d.ts +0 -3
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +0 -22
- package/dist/settings.js.map +1 -1
- package/dist/subagents/agent-transcript.d.ts +4 -1
- package/dist/subagents/agent-transcript.d.ts.map +1 -1
- package/dist/subagents/agent-transcript.js +16 -4
- package/dist/subagents/agent-transcript.js.map +1 -1
- package/package.json +24 -23
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { Key, matchesKey, truncateToWidth, wrapTextWithAnsi } from '@earendil-works/pi-tui';
|
|
2
|
+
import { LocalSessionPicker } from '../session-picker.js';
|
|
3
|
+
import { AgentTranscript } from '../subagents/agent-transcript.js';
|
|
4
|
+
import { findMemoryHistorySession, listLocalSessionHistory, readMemoryHistorySnapshot, safeMemoryText, validMemoryRunId, } from './history.js';
|
|
5
|
+
export async function showMemoryHistory(ctx, agentDir, id) {
|
|
6
|
+
if (!ctx.hasUI || ctx.mode !== 'tui') {
|
|
7
|
+
ctx.ui.notify('/memory runs requires interactive TUI mode.', 'warning');
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
if (id !== undefined && id !== 'latest' && !validMemoryRunId(id)) {
|
|
11
|
+
ctx.ui.notify('Use /memory runs <id|latest>, not a file path.', 'warning');
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const history = await listLocalSessionHistory({
|
|
15
|
+
cwd: ctx.cwd, agentDir, sessionDir: ctx.sessionManager.getSessionDir(), memoryOnly: true,
|
|
16
|
+
});
|
|
17
|
+
const initialSession = id === undefined ? undefined : findMemoryHistorySession(history, id);
|
|
18
|
+
if (id !== undefined && !initialSession) {
|
|
19
|
+
ctx.ui.notify('No retained memory run found for this project.', 'warning');
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (history.allSessions.length === 0) {
|
|
23
|
+
ctx.ui.notify('No retained memory runs.', 'info');
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
await ctx.ui.custom((tui, _theme, keybindings, done) => new MemoryHistoryView(tui, history, done, {
|
|
27
|
+
memoryOnly: true, keybindings, ...(initialSession ? { initialSession } : {}),
|
|
28
|
+
}));
|
|
29
|
+
}
|
|
30
|
+
export class MemoryHistoryView {
|
|
31
|
+
tui;
|
|
32
|
+
history;
|
|
33
|
+
done;
|
|
34
|
+
options;
|
|
35
|
+
#picker;
|
|
36
|
+
#keybindings;
|
|
37
|
+
#selected;
|
|
38
|
+
#snapshot;
|
|
39
|
+
#transcript;
|
|
40
|
+
#error;
|
|
41
|
+
#scroll = 0;
|
|
42
|
+
#maximumScroll = 0;
|
|
43
|
+
#viewportHeight = 1;
|
|
44
|
+
#generation = 0;
|
|
45
|
+
#closed = false;
|
|
46
|
+
constructor(tui, history, done, options = {}) {
|
|
47
|
+
this.tui = tui;
|
|
48
|
+
this.history = history;
|
|
49
|
+
this.done = done;
|
|
50
|
+
this.options = options;
|
|
51
|
+
this.#keybindings = options.keybindings ?? {
|
|
52
|
+
matches: (data, action) => (action === 'app.tools.expand' && matchesKey(data, Key.ctrl('o')))
|
|
53
|
+
|| (action === 'app.thinking.toggle' && matchesKey(data, Key.ctrl('t'))),
|
|
54
|
+
};
|
|
55
|
+
this.#picker = new LocalSessionPicker(history.currentSessions, history.allSessions, (path) => {
|
|
56
|
+
const memory = history.memorySessions.get(path);
|
|
57
|
+
if (memory)
|
|
58
|
+
void this.#inspect(memory);
|
|
59
|
+
else
|
|
60
|
+
this.#finish(path);
|
|
61
|
+
}, () => this.#finish(undefined), () => tui.requestRender(), options.memoryOnly
|
|
62
|
+
? { title: 'Memory Runs', selectLabel: 'inspect' }
|
|
63
|
+
: { selectLabel: 'resume / inspect Memory' });
|
|
64
|
+
if (options.initialSession)
|
|
65
|
+
void this.#inspect(options.initialSession);
|
|
66
|
+
}
|
|
67
|
+
get focused() { return this.#picker.focused; }
|
|
68
|
+
set focused(value) { this.#picker.focused = value; }
|
|
69
|
+
render(width) {
|
|
70
|
+
if (!this.#selected)
|
|
71
|
+
return this.#picker.render(width);
|
|
72
|
+
const lines = [truncateToWidth(`Memory run ${this.#selected.id} · read-only`, width)];
|
|
73
|
+
const body = this.#snapshot ? snapshotDetails(this.#snapshot).flatMap((line) => wrapTextWithAnsi(line, width))
|
|
74
|
+
: [this.#error ?? 'Loading retained transcript…'];
|
|
75
|
+
if (this.#snapshot) {
|
|
76
|
+
try {
|
|
77
|
+
body.push('', ...(this.#transcript?.render(width) ?? ['Transcript could not be rendered.']));
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
body.push('', 'Transcript contains entries that could not be rendered.');
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
this.#viewportHeight = Math.max(1, (this.tui.terminal.rows || 24) - 5);
|
|
84
|
+
this.#maximumScroll = Math.max(0, body.length - this.#viewportHeight);
|
|
85
|
+
this.#scroll = Math.min(this.#scroll, this.#maximumScroll);
|
|
86
|
+
lines.push(...body.slice(this.#scroll, this.#scroll + this.#viewportHeight));
|
|
87
|
+
const hints = this.options.keybindings && this.#transcript ? this.#transcript.getToggleHints() : undefined;
|
|
88
|
+
lines.push(truncateToWidth(`↑↓/PgUp/PgDn scroll ${hints ? `${hints.tools} ${hints.thinking}` : 'Ctrl+O tools Ctrl+T thinking'} Esc ${this.options.initialSession ? 'close' : 'back'}`, width));
|
|
89
|
+
return lines;
|
|
90
|
+
}
|
|
91
|
+
handleInput(data) {
|
|
92
|
+
if (this.#closed)
|
|
93
|
+
return;
|
|
94
|
+
if (!this.#selected) {
|
|
95
|
+
this.#picker.handleInput(data);
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
if (matchesKey(data, Key.escape)) {
|
|
99
|
+
if (this.options.initialSession)
|
|
100
|
+
this.#finish(undefined);
|
|
101
|
+
else {
|
|
102
|
+
this.#generation += 1;
|
|
103
|
+
this.#selected = undefined;
|
|
104
|
+
this.#snapshot = undefined;
|
|
105
|
+
this.#transcript?.dispose();
|
|
106
|
+
this.#transcript = undefined;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
else if (matchesKey(data, Key.up))
|
|
110
|
+
this.#scroll = Math.max(0, this.#scroll - 1);
|
|
111
|
+
else if (matchesKey(data, Key.down))
|
|
112
|
+
this.#scroll = Math.min(this.#maximumScroll, this.#scroll + 1);
|
|
113
|
+
else if (matchesKey(data, Key.pageUp))
|
|
114
|
+
this.#scroll = Math.max(0, this.#scroll - this.#viewportHeight);
|
|
115
|
+
else if (matchesKey(data, Key.pageDown))
|
|
116
|
+
this.#scroll = Math.min(this.#maximumScroll, this.#scroll + this.#viewportHeight);
|
|
117
|
+
else if (matchesKey(data, Key.home))
|
|
118
|
+
this.#scroll = 0;
|
|
119
|
+
else if (matchesKey(data, Key.end))
|
|
120
|
+
this.#scroll = this.#maximumScroll;
|
|
121
|
+
else
|
|
122
|
+
this.#transcript?.handleInput(data);
|
|
123
|
+
this.tui.requestRender();
|
|
124
|
+
}
|
|
125
|
+
invalidate() {
|
|
126
|
+
this.#picker.invalidate();
|
|
127
|
+
this.#transcript?.invalidate();
|
|
128
|
+
}
|
|
129
|
+
dispose() {
|
|
130
|
+
this.#closed = true;
|
|
131
|
+
this.#generation += 1;
|
|
132
|
+
this.#transcript?.dispose();
|
|
133
|
+
}
|
|
134
|
+
#finish(path) {
|
|
135
|
+
this.dispose();
|
|
136
|
+
this.done(path);
|
|
137
|
+
}
|
|
138
|
+
async #inspect(session) {
|
|
139
|
+
const generation = ++this.#generation;
|
|
140
|
+
this.#selected = session;
|
|
141
|
+
this.#snapshot = undefined;
|
|
142
|
+
this.#error = undefined;
|
|
143
|
+
this.#scroll = 0;
|
|
144
|
+
this.#transcript?.dispose();
|
|
145
|
+
this.#transcript = undefined;
|
|
146
|
+
this.tui.requestRender();
|
|
147
|
+
try {
|
|
148
|
+
const snapshot = await readMemoryHistorySnapshot(session);
|
|
149
|
+
if (this.#closed || generation !== this.#generation)
|
|
150
|
+
return;
|
|
151
|
+
this.#snapshot = snapshot;
|
|
152
|
+
const transcript = new AgentTranscript(this.tui, this.#keybindings);
|
|
153
|
+
this.#transcript = transcript;
|
|
154
|
+
try {
|
|
155
|
+
transcript.showSnapshot(snapshot.messages, session.cwd);
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
transcript.dispose();
|
|
159
|
+
this.#transcript = undefined;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
if (this.#closed || generation !== this.#generation)
|
|
164
|
+
return;
|
|
165
|
+
this.#error = 'Memory history could not be read. Esc returns without changing the run.';
|
|
166
|
+
}
|
|
167
|
+
this.tui.requestRender();
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
function snapshotDetails(snapshot) {
|
|
171
|
+
const { session, metadata } = snapshot;
|
|
172
|
+
const details = [
|
|
173
|
+
`Project: ${safeMemoryText(session.cwd)}`,
|
|
174
|
+
`Status: ${metadata?.status ?? 'unknown'}${metadata ? ` · Phase: ${metadata.phase}` : ''}`,
|
|
175
|
+
`Transcript: ${safeMemoryText(session.path)}`,
|
|
176
|
+
`Artifacts: ${safeMemoryText(session.memory.manifestPath)}`,
|
|
177
|
+
];
|
|
178
|
+
if (metadata) {
|
|
179
|
+
details.push(`Started: ${safeMemoryText(metadata.startedAt)}${metadata.finishedAt ? ` · Finished: ${safeMemoryText(metadata.finishedAt)}` : ''}`);
|
|
180
|
+
if (metadata.model)
|
|
181
|
+
details.push(`Model: ${safeMemoryText(`${metadata.model.provider}/${metadata.model.id}`)}`);
|
|
182
|
+
if (metadata.error)
|
|
183
|
+
details.push(`Error: ${safeMemoryText(metadata.error)}`);
|
|
184
|
+
}
|
|
185
|
+
details.push(...snapshot.diagnostics);
|
|
186
|
+
if (snapshot.messages.length === 0)
|
|
187
|
+
details.push('No messages were retained. The run may have stopped before the worker started.');
|
|
188
|
+
else if (!snapshot.messages.some((message) => message.role === 'assistant'))
|
|
189
|
+
details.push('No assistant response was retained.');
|
|
190
|
+
return details;
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=history-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history-view.js","sourceRoot":"","sources":["../../src/memory/history-view.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { buildSessionContext, type SessionInfo } from '@earendil-works/pi-coding-agent';
|
|
2
|
+
import { type LocalMemoryProject } from './project.js';
|
|
3
|
+
import { type MemoryRunMetadata } from './run.js';
|
|
4
|
+
export interface MemoryHistorySession extends SessionInfo {
|
|
5
|
+
readonly memory: {
|
|
6
|
+
readonly project: LocalMemoryProject;
|
|
7
|
+
readonly manifestPath: string;
|
|
8
|
+
readonly metadata?: MemoryRunMetadata;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export interface LocalSessionHistory {
|
|
12
|
+
readonly currentSessions: readonly SessionInfo[];
|
|
13
|
+
readonly allSessions: readonly SessionInfo[];
|
|
14
|
+
readonly memorySessions: ReadonlyMap<string, MemoryHistorySession>;
|
|
15
|
+
}
|
|
16
|
+
export interface MemoryHistoryOptions {
|
|
17
|
+
readonly cwd: string;
|
|
18
|
+
readonly agentDir: string;
|
|
19
|
+
readonly sessionDir: string;
|
|
20
|
+
readonly memoryOnly?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface MemoryHistorySnapshot {
|
|
23
|
+
readonly session: MemoryHistorySession;
|
|
24
|
+
readonly metadata?: MemoryRunMetadata;
|
|
25
|
+
readonly messages: ReturnType<typeof buildSessionContext>['messages'];
|
|
26
|
+
readonly diagnostics: readonly string[];
|
|
27
|
+
}
|
|
28
|
+
export declare function listLocalSessionHistory(options: MemoryHistoryOptions): Promise<LocalSessionHistory>;
|
|
29
|
+
export declare function findMemoryHistorySession(history: LocalSessionHistory, id: string): MemoryHistorySession | undefined;
|
|
30
|
+
export declare function readMemoryHistorySnapshot(session: MemoryHistorySession): Promise<MemoryHistorySnapshot>;
|
|
31
|
+
export declare function safeMemoryText(value: unknown): string;
|
|
32
|
+
export declare function validMemoryRunId(value: string): boolean;
|
|
33
|
+
//# sourceMappingURL=history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/memory/history.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,mBAAmB,EAInB,KAAK,WAAW,EACjB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAA0D,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC/G,OAAO,EAA8C,KAAK,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAO9F,MAAM,WAAW,oBAAqB,SAAQ,WAAW;IACvD,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;QACrC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;KACvC,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,eAAe,EAAE,SAAS,WAAW,EAAE,CAAC;IACjD,QAAQ,CAAC,WAAW,EAAE,SAAS,WAAW,EAAE,CAAC;IAC7C,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;CACpE;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,UAAU,CAAC,CAAC;IACtE,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAED,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAuCzG;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,mBAAmB,EAAE,EAAE,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS,CAKnH;AAED,wBAAsB,yBAAyB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAmE7G;AA8GD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAErD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEvD"}
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
import { constants } from 'node:fs';
|
|
2
|
+
import { lstat, open, readdir } from 'node:fs/promises';
|
|
3
|
+
import { basename, dirname, join, resolve } from 'node:path';
|
|
4
|
+
import { buildSessionContext, parseSessionEntries, SessionManager, } from '@earendil-works/pi-coding-agent';
|
|
5
|
+
import { stripTerminalSequences } from '@earendil-works/pi-tui';
|
|
6
|
+
import { localMemoryProjectDirectory, resolveLocalMemoryProject } from './project.js';
|
|
7
|
+
import { MEMORY_RUN_ENTRY, sanitizeMemoryDiagnostic } from './run.js';
|
|
8
|
+
const MAX_TRANSCRIPT_BYTES = 16 * 1_024 * 1_024;
|
|
9
|
+
const MAX_CATALOG_BYTES = 256 * 1_024;
|
|
10
|
+
const MAX_CATALOG_TEXT = 32 * 1_024;
|
|
11
|
+
const MAX_MANIFEST_BYTES = 64 * 1_024;
|
|
12
|
+
export async function listLocalSessionHistory(options) {
|
|
13
|
+
const memoryDir = resolve(options.sessionDir, 'memory');
|
|
14
|
+
const [project, currentSessions, allSessions] = await Promise.all([
|
|
15
|
+
resolveLocalMemoryProject(options.cwd),
|
|
16
|
+
options.memoryOnly ? Promise.resolve([]) : SessionManager.list(options.cwd, options.sessionDir),
|
|
17
|
+
options.memoryOnly ? Promise.resolve([]) : SessionManager.listAll(options.sessionDir),
|
|
18
|
+
]);
|
|
19
|
+
const memorySessions = new Map();
|
|
20
|
+
let retained = [];
|
|
21
|
+
try {
|
|
22
|
+
await requireDirectory(memoryDir);
|
|
23
|
+
retained = await listMemorySessions(memoryDir);
|
|
24
|
+
}
|
|
25
|
+
catch { }
|
|
26
|
+
const projects = new Map([[options.cwd, project]]);
|
|
27
|
+
for (const session of retained) {
|
|
28
|
+
if (!validMemoryRunId(session.id) || !session.cwd || dirname(resolve(session.path)) !== memoryDir)
|
|
29
|
+
continue;
|
|
30
|
+
const sessionProject = projects.get(session.cwd) ?? await resolveLocalMemoryProject(session.cwd);
|
|
31
|
+
projects.set(session.cwd, sessionProject);
|
|
32
|
+
const candidate = {
|
|
33
|
+
...session,
|
|
34
|
+
memory: {
|
|
35
|
+
project: sessionProject,
|
|
36
|
+
manifestPath: join(localMemoryProjectDirectory(options.agentDir, sessionProject), 'runs', session.id, 'manifest.json'),
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
const metadata = await readMemoryManifestMetadata(candidate).catch(() => undefined);
|
|
40
|
+
const name = `Memory: ${safeMemoryText(basename(session.cwd)) || session.id} · ${metadata?.status ?? 'unknown'}`;
|
|
41
|
+
const labeled = {
|
|
42
|
+
...candidate,
|
|
43
|
+
name,
|
|
44
|
+
allMessagesText: `${name} ${session.allMessagesText}`,
|
|
45
|
+
memory: { ...candidate.memory, ...(metadata ? { metadata } : {}) },
|
|
46
|
+
};
|
|
47
|
+
memorySessions.set(labeled.path, labeled);
|
|
48
|
+
allSessions.push(labeled);
|
|
49
|
+
if (sessionProject.key === project.key)
|
|
50
|
+
currentSessions.push(labeled);
|
|
51
|
+
}
|
|
52
|
+
const recent = (left, right) => right.modified.getTime() - left.modified.getTime();
|
|
53
|
+
return { currentSessions: currentSessions.sort(recent), allSessions: allSessions.sort(recent), memorySessions };
|
|
54
|
+
}
|
|
55
|
+
export function findMemoryHistorySession(history, id) {
|
|
56
|
+
if (id !== 'latest' && !validMemoryRunId(id))
|
|
57
|
+
throw new Error('Use a memory run ID or latest, not a file path.');
|
|
58
|
+
const current = history.currentSessions.filter((session) => history.memorySessions.has(session.path));
|
|
59
|
+
const selected = id === 'latest' ? current[0] : current.find((session) => session.id === id);
|
|
60
|
+
return selected ? history.memorySessions.get(selected.path) : undefined;
|
|
61
|
+
}
|
|
62
|
+
export async function readMemoryHistorySnapshot(session) {
|
|
63
|
+
const diagnostics = [];
|
|
64
|
+
let metadata = session.memory.metadata;
|
|
65
|
+
let messages = [];
|
|
66
|
+
if (!validMemoryRunId(session.id))
|
|
67
|
+
throw new Error('Invalid memory run ID.');
|
|
68
|
+
try {
|
|
69
|
+
await requireDirectory(dirname(session.path));
|
|
70
|
+
const { text, truncated } = await readBoundedFile(session.path, MAX_TRANSCRIPT_BYTES);
|
|
71
|
+
if (truncated)
|
|
72
|
+
diagnostics.push('Transcript preview truncated at 16 MiB. The retained file is unchanged.');
|
|
73
|
+
const parsed = parseSessionEntries(text);
|
|
74
|
+
if (parsed.length < text.split('\n').filter((line) => line.trim()).length) {
|
|
75
|
+
diagnostics.push('Incomplete or malformed JSONL lines were skipped.');
|
|
76
|
+
}
|
|
77
|
+
const header = parsed[0];
|
|
78
|
+
if (!header || header.type !== 'session' || header.id !== session.id || header.cwd !== session.cwd) {
|
|
79
|
+
throw new Error('Transcript identity does not match the selected session.');
|
|
80
|
+
}
|
|
81
|
+
const entries = [];
|
|
82
|
+
const effectiveParents = new Map();
|
|
83
|
+
for (const entry of parsed.slice(1)) {
|
|
84
|
+
if (!entry || typeof entry !== 'object' || entry.type === 'session' || typeof entry.id !== 'string'
|
|
85
|
+
|| typeof entry.timestamp !== 'string' || effectiveParents.has(entry.id)
|
|
86
|
+
|| (entry.parentId !== null && (typeof entry.parentId !== 'string' || !effectiveParents.has(entry.parentId)))) {
|
|
87
|
+
diagnostics.push('Invalid transcript entries were skipped.');
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
const effectiveParent = entry.parentId === null ? null : effectiveParents.get(entry.parentId);
|
|
91
|
+
if ((entry.type === 'message' && !safeStoredMessage(entry.message))
|
|
92
|
+
|| (entry.type === 'custom_message' && !safeMessageContent(entry.content))) {
|
|
93
|
+
effectiveParents.set(entry.id, effectiveParent);
|
|
94
|
+
diagnostics.push('Invalid transcript entries were skipped.');
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
const accepted = entry.parentId === effectiveParent ? entry : { ...entry, parentId: effectiveParent };
|
|
98
|
+
effectiveParents.set(entry.id, entry.id);
|
|
99
|
+
entries.push(accepted);
|
|
100
|
+
if (entry.type === 'custom' && entry.customType === MEMORY_RUN_ENTRY) {
|
|
101
|
+
const value = memoryMetadata(entry.data, session);
|
|
102
|
+
if (value)
|
|
103
|
+
metadata = value;
|
|
104
|
+
else
|
|
105
|
+
diagnostics.push('Invalid memory metadata was ignored.');
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
const directlyRecoverable = entries.flatMap((entry) => entry.type === 'message' && safeStoredMessage(entry.message)
|
|
109
|
+
? [entry.message]
|
|
110
|
+
: []);
|
|
111
|
+
try {
|
|
112
|
+
messages = buildSessionContext(entries).messages;
|
|
113
|
+
if (messages.length === 0 && directlyRecoverable.length > 0) {
|
|
114
|
+
diagnostics.push('Malformed transcript context was partially recovered.');
|
|
115
|
+
messages = directlyRecoverable;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
diagnostics.push('Malformed transcript context was partially recovered.');
|
|
120
|
+
messages = directlyRecoverable;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
diagnostics.push(`Transcript unavailable: ${safeFileError(error)}`);
|
|
125
|
+
}
|
|
126
|
+
try {
|
|
127
|
+
const value = await readMemoryManifestMetadata(session);
|
|
128
|
+
if (value)
|
|
129
|
+
metadata = value;
|
|
130
|
+
else
|
|
131
|
+
diagnostics.push('Invalid diagnostic manifest was ignored.');
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
diagnostics.push(`Diagnostic manifest unavailable: ${safeFileError(error)}`);
|
|
135
|
+
}
|
|
136
|
+
if (!metadata)
|
|
137
|
+
diagnostics.push('No memory run metadata was retained.');
|
|
138
|
+
return { session, ...(metadata ? { metadata } : {}), messages, diagnostics: [...new Set(diagnostics)] };
|
|
139
|
+
}
|
|
140
|
+
async function listMemorySessions(memoryDir) {
|
|
141
|
+
const sessions = [];
|
|
142
|
+
for (const file of await readdir(memoryDir, { withFileTypes: true })) {
|
|
143
|
+
if (!file.isFile() || !file.name.endsWith('.jsonl'))
|
|
144
|
+
continue;
|
|
145
|
+
const session = await readMemoryCatalogEntry(join(memoryDir, file.name)).catch(() => undefined);
|
|
146
|
+
if (session)
|
|
147
|
+
sessions.push(session);
|
|
148
|
+
}
|
|
149
|
+
return sessions;
|
|
150
|
+
}
|
|
151
|
+
async function readMemoryCatalogEntry(path) {
|
|
152
|
+
const { text, truncated } = await readBoundedFile(path, MAX_CATALOG_BYTES);
|
|
153
|
+
const lines = text.split('\n');
|
|
154
|
+
const header = parseRecord(lines[0]);
|
|
155
|
+
if (!header || header.type !== 'session' || typeof header.id !== 'string' || !validMemoryRunId(header.id)
|
|
156
|
+
|| typeof header.cwd !== 'string' || header.cwd.length > 4_096 || header.cwd.includes('\0'))
|
|
157
|
+
return undefined;
|
|
158
|
+
const info = await lstat(path);
|
|
159
|
+
if (!info.isFile() || info.isSymbolicLink())
|
|
160
|
+
return undefined;
|
|
161
|
+
let name;
|
|
162
|
+
let messageCount = 0;
|
|
163
|
+
let firstMessage = '';
|
|
164
|
+
let allMessagesText = '';
|
|
165
|
+
const body = lines.slice(1);
|
|
166
|
+
if (truncated && body.length > 0)
|
|
167
|
+
body.pop();
|
|
168
|
+
for (const line of body) {
|
|
169
|
+
const entry = parseRecord(line);
|
|
170
|
+
if (!entry)
|
|
171
|
+
continue;
|
|
172
|
+
if (entry.type === 'session_info') {
|
|
173
|
+
name = typeof entry.name === 'string' ? safeCatalogText(entry.name, 512) || undefined : undefined;
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
if (entry.type !== 'message')
|
|
177
|
+
continue;
|
|
178
|
+
messageCount += 1;
|
|
179
|
+
const message = parseRecord(entry.message);
|
|
180
|
+
if (!message || (message.role !== 'user' && message.role !== 'assistant'))
|
|
181
|
+
continue;
|
|
182
|
+
const content = messageText(message.content);
|
|
183
|
+
if (!content)
|
|
184
|
+
continue;
|
|
185
|
+
if (!firstMessage && message.role === 'user')
|
|
186
|
+
firstMessage = content.slice(0, 2_000);
|
|
187
|
+
if (allMessagesText.length < MAX_CATALOG_TEXT) {
|
|
188
|
+
allMessagesText = `${allMessagesText} ${content}`.trim().slice(0, MAX_CATALOG_TEXT);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
const headerTime = typeof header.timestamp === 'string' ? Date.parse(header.timestamp) : Number.NaN;
|
|
192
|
+
const created = Number.isFinite(headerTime) ? new Date(headerTime) : info.birthtimeMs > 0 ? info.birthtime : info.mtime;
|
|
193
|
+
return {
|
|
194
|
+
path,
|
|
195
|
+
id: header.id,
|
|
196
|
+
cwd: header.cwd,
|
|
197
|
+
...(name ? { name } : {}),
|
|
198
|
+
...(typeof header.parentSession === 'string' ? { parentSessionPath: header.parentSession } : {}),
|
|
199
|
+
created,
|
|
200
|
+
modified: info.mtime,
|
|
201
|
+
messageCount,
|
|
202
|
+
firstMessage: firstMessage || '(no messages)',
|
|
203
|
+
allMessagesText,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
function parseRecord(value) {
|
|
207
|
+
if (typeof value === 'string') {
|
|
208
|
+
if (!value.trim())
|
|
209
|
+
return undefined;
|
|
210
|
+
try {
|
|
211
|
+
return parseRecord(JSON.parse(value));
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
return undefined;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value)
|
|
218
|
+
? value
|
|
219
|
+
: undefined;
|
|
220
|
+
}
|
|
221
|
+
function messageText(content) {
|
|
222
|
+
if (typeof content === 'string')
|
|
223
|
+
return safeCatalogText(content, MAX_CATALOG_TEXT);
|
|
224
|
+
if (!Array.isArray(content))
|
|
225
|
+
return '';
|
|
226
|
+
return safeCatalogText(content.flatMap((block) => {
|
|
227
|
+
const value = parseRecord(block);
|
|
228
|
+
return value?.type === 'text' && typeof value.text === 'string' ? [value.text] : [];
|
|
229
|
+
}).join(' '), MAX_CATALOG_TEXT);
|
|
230
|
+
}
|
|
231
|
+
function safeCatalogText(value, limit) {
|
|
232
|
+
return value.replace(/[\u0000-\u001f\u007f-\u009f]/gu, ' ').replace(/\s+/gu, ' ').trim().slice(0, limit);
|
|
233
|
+
}
|
|
234
|
+
function safeStoredMessage(value) {
|
|
235
|
+
const message = parseRecord(value);
|
|
236
|
+
return message !== undefined && typeof message.role === 'string' && safeMessageContent(message.content);
|
|
237
|
+
}
|
|
238
|
+
function safeMessageContent(value) {
|
|
239
|
+
if (typeof value === 'string')
|
|
240
|
+
return true;
|
|
241
|
+
return Array.isArray(value) && value.every((block) => {
|
|
242
|
+
const content = parseRecord(block);
|
|
243
|
+
return content !== undefined && typeof content.type === 'string';
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
async function readMemoryManifestMetadata(session) {
|
|
247
|
+
let directory = dirname(session.memory.manifestPath);
|
|
248
|
+
for (let depth = 0; depth < 6; depth += 1) {
|
|
249
|
+
await requireDirectory(directory);
|
|
250
|
+
directory = dirname(directory);
|
|
251
|
+
}
|
|
252
|
+
const { text, truncated } = await readBoundedFile(session.memory.manifestPath, MAX_MANIFEST_BYTES);
|
|
253
|
+
return truncated ? undefined : memoryMetadata(JSON.parse(text), session);
|
|
254
|
+
}
|
|
255
|
+
export function safeMemoryText(value) {
|
|
256
|
+
return stripTerminalSequences(sanitizeMemoryDiagnostic(value)).replace(/\s+/gu, ' ').trim().slice(0, 500);
|
|
257
|
+
}
|
|
258
|
+
export function validMemoryRunId(value) {
|
|
259
|
+
return typeof value === 'string' && /^[a-zA-Z0-9_-]{1,128}$/u.test(value);
|
|
260
|
+
}
|
|
261
|
+
function memoryMetadata(value, session) {
|
|
262
|
+
if (!value || typeof value !== 'object')
|
|
263
|
+
return undefined;
|
|
264
|
+
const data = value;
|
|
265
|
+
if (data.version !== 1 || data.kind !== 'memory' || data.sessionId !== session.id
|
|
266
|
+
|| data.sessionFile !== basename(session.path) || data.projectKey !== session.memory.project.key
|
|
267
|
+
|| data.projectRoot !== session.cwd || typeof data.startedAt !== 'string'
|
|
268
|
+
|| !['started', 'worker_completed', 'completed', 'failed', 'cancelled', 'blocked', 'interrupted'].includes(data.status ?? '')
|
|
269
|
+
|| !['materialize', 'model', 'validate', 'publish'].includes(data.phase ?? '')
|
|
270
|
+
|| !Array.isArray(data.checkpoints) || typeof data.baseFingerprint !== 'string'
|
|
271
|
+
|| (data.error !== undefined && typeof data.error !== 'string')
|
|
272
|
+
|| (data.finishedAt !== undefined && typeof data.finishedAt !== 'string')
|
|
273
|
+
|| (data.model !== undefined && (!data.model || typeof data.model.provider !== 'string' || typeof data.model.id !== 'string'))) {
|
|
274
|
+
return undefined;
|
|
275
|
+
}
|
|
276
|
+
return data;
|
|
277
|
+
}
|
|
278
|
+
async function requireDirectory(path) {
|
|
279
|
+
const info = await lstat(path);
|
|
280
|
+
if (!info.isDirectory() || info.isSymbolicLink())
|
|
281
|
+
throw new Error('Expected a regular diagnostic directory.');
|
|
282
|
+
}
|
|
283
|
+
async function readBoundedFile(path, limit) {
|
|
284
|
+
const info = await lstat(path);
|
|
285
|
+
if (!info.isFile() || info.isSymbolicLink())
|
|
286
|
+
throw new Error('Expected a regular diagnostic file.');
|
|
287
|
+
const file = await open(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0) | (constants.O_NONBLOCK ?? 0));
|
|
288
|
+
try {
|
|
289
|
+
if (!(await file.stat()).isFile())
|
|
290
|
+
throw new Error('Expected a regular diagnostic file.');
|
|
291
|
+
const buffer = Buffer.alloc(Math.min(info.size, limit) + 1);
|
|
292
|
+
let length = 0;
|
|
293
|
+
while (length < buffer.length) {
|
|
294
|
+
const { bytesRead } = await file.read(buffer, length, buffer.length - length, length);
|
|
295
|
+
if (bytesRead === 0)
|
|
296
|
+
break;
|
|
297
|
+
length += bytesRead;
|
|
298
|
+
}
|
|
299
|
+
return { text: buffer.subarray(0, Math.min(length, limit)).toString('utf8'), truncated: length > limit };
|
|
300
|
+
}
|
|
301
|
+
finally {
|
|
302
|
+
await file.close();
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
function safeFileError(error) {
|
|
306
|
+
if (error && typeof error === 'object' && 'code' in error) {
|
|
307
|
+
if (error.code === 'ENOENT')
|
|
308
|
+
return 'file is missing or has been pruned.';
|
|
309
|
+
if (error.code === 'EACCES' || error.code === 'EPERM')
|
|
310
|
+
return 'permission denied.';
|
|
311
|
+
}
|
|
312
|
+
return error instanceof SyntaxError ? 'invalid JSON.' : safeMemoryText(error instanceof Error ? error.message : 'read failed.');
|
|
313
|
+
}
|
|
314
|
+
//# sourceMappingURL=history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/memory/history.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface MemoryRunRetentionOptions {
|
|
2
|
+
readonly projectDirectory: string;
|
|
3
|
+
readonly sessionDirectory: string;
|
|
4
|
+
readonly projectKey: string;
|
|
5
|
+
readonly maxCompletedRuns?: number;
|
|
6
|
+
readonly protectedRunIds?: readonly string[];
|
|
7
|
+
}
|
|
8
|
+
export declare function pruneMemoryRuns(options: MemoryRunRetentionOptions): Promise<{
|
|
9
|
+
terminalRuns: number;
|
|
10
|
+
overLimit: boolean;
|
|
11
|
+
}>;
|
|
12
|
+
//# sourceMappingURL=run-retention.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-retention.d.ts","sourceRoot":"","sources":["../../src/memory/run-retention.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9C;AA0BD,wBAAsB,eAAe,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,CAkC/H"}
|