@felan-ai/ext-memory 0.8.0 → 0.10.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.
Files changed (78) hide show
  1. package/README.md +41 -30
  2. package/dist/data.d.ts +3 -0
  3. package/dist/data.d.ts.map +1 -0
  4. package/dist/data.js +2 -0
  5. package/dist/data.js.map +1 -0
  6. package/dist/diagnostics.d.ts +3 -0
  7. package/dist/diagnostics.d.ts.map +1 -0
  8. package/dist/diagnostics.js +14 -0
  9. package/dist/diagnostics.js.map +1 -0
  10. package/dist/extension.d.ts +5 -0
  11. package/dist/extension.d.ts.map +1 -0
  12. package/dist/extension.js +37 -0
  13. package/dist/extension.js.map +1 -0
  14. package/dist/hydration.d.ts +0 -3
  15. package/dist/hydration.d.ts.map +1 -1
  16. package/dist/hydration.js +0 -78
  17. package/dist/hydration.js.map +1 -1
  18. package/dist/index.d.ts +18 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +31 -4
  21. package/dist/index.js.map +1 -1
  22. package/dist/local/context.d.ts +10 -0
  23. package/dist/local/context.d.ts.map +1 -0
  24. package/dist/local/context.js +10 -0
  25. package/dist/local/context.js.map +1 -0
  26. package/dist/local/control.d.ts +13 -0
  27. package/dist/local/control.d.ts.map +1 -0
  28. package/dist/local/control.js +183 -0
  29. package/dist/local/control.js.map +1 -0
  30. package/dist/local/coordinator.d.ts +93 -0
  31. package/dist/local/coordinator.d.ts.map +1 -0
  32. package/dist/local/coordinator.js +859 -0
  33. package/dist/local/coordinator.js.map +1 -0
  34. package/dist/local/dreamer.d.ts +53 -0
  35. package/dist/local/dreamer.d.ts.map +1 -0
  36. package/dist/local/dreamer.js +490 -0
  37. package/dist/local/dreamer.js.map +1 -0
  38. package/dist/local/history.d.ts +33 -0
  39. package/dist/local/history.d.ts.map +1 -0
  40. package/dist/local/history.js +300 -0
  41. package/dist/local/history.js.map +1 -0
  42. package/dist/local/hydration.d.ts +6 -0
  43. package/dist/local/hydration.d.ts.map +1 -0
  44. package/dist/local/hydration.js +84 -0
  45. package/dist/local/hydration.js.map +1 -0
  46. package/dist/local/lease.d.ts +14 -0
  47. package/dist/local/lease.d.ts.map +1 -0
  48. package/dist/local/lease.js +184 -0
  49. package/dist/local/lease.js.map +1 -0
  50. package/dist/local/lock.d.ts +28 -0
  51. package/dist/local/lock.d.ts.map +1 -0
  52. package/dist/local/lock.js +431 -0
  53. package/dist/local/lock.js.map +1 -0
  54. package/dist/local/project.d.ts +8 -0
  55. package/dist/local/project.d.ts.map +1 -0
  56. package/dist/local/project.js +33 -0
  57. package/dist/local/project.js.map +1 -0
  58. package/dist/local/run-retention.d.ts +13 -0
  59. package/dist/local/run-retention.d.ts.map +1 -0
  60. package/dist/local/run-retention.js +272 -0
  61. package/dist/local/run-retention.js.map +1 -0
  62. package/dist/local/run.d.ts +84 -0
  63. package/dist/local/run.d.ts.map +1 -0
  64. package/dist/local/run.js +361 -0
  65. package/dist/local/run.js.map +1 -0
  66. package/dist/local/store.d.ts +117 -0
  67. package/dist/local/store.d.ts.map +1 -0
  68. package/dist/local/store.js +735 -0
  69. package/dist/local/store.js.map +1 -0
  70. package/dist/local/ui.d.ts +9 -0
  71. package/dist/local/ui.d.ts.map +1 -0
  72. package/dist/local/ui.js +166 -0
  73. package/dist/local/ui.js.map +1 -0
  74. package/dist/session-history.d.ts +18 -0
  75. package/dist/session-history.d.ts.map +1 -0
  76. package/dist/session-history.js +91 -0
  77. package/dist/session-history.js.map +1 -0
  78. package/package.json +9 -5
@@ -0,0 +1,183 @@
1
+ import { sanitizeMemoryDiagnostic } from '../diagnostics.js';
2
+ const safeMemoryText = (value) => sanitizeMemoryDiagnostic(value).replace(/\s+/gu, ' ').trim().slice(0, 500);
3
+ const validMemoryRunId = (value) => /^[a-zA-Z0-9_-]{1,128}$/u.test(value);
4
+ export function createMemoryControlExtension(options) {
5
+ return (pi) => {
6
+ let lifetime = new AbortController();
7
+ const views = new Set();
8
+ let activeContext;
9
+ let activeSessionId;
10
+ let activeCwd;
11
+ let unsubscribeStatus;
12
+ let statusRefresh = 0;
13
+ let lifecycle = 0;
14
+ let startupWarningPending = false;
15
+ const refreshActiveStatus = async () => {
16
+ const refresh = ++statusRefresh;
17
+ const ctx = activeContext;
18
+ if (!ctx)
19
+ return;
20
+ const status = await options.coordinator.status(ctx.cwd);
21
+ if (activeContext !== ctx || refresh !== statusRefresh)
22
+ return;
23
+ updateStatus(ctx, status);
24
+ if (startupWarningPending) {
25
+ if (status.autoDisabled) {
26
+ startupWarningPending = false;
27
+ notify(ctx, autoDisabledWarning(status), 'warning');
28
+ }
29
+ else if (status.memoryFingerprint !== undefined)
30
+ startupWarningPending = false;
31
+ }
32
+ };
33
+ pi.registerCommand('memory', {
34
+ description: 'Inspect local memory, run processing, or open the memory directory',
35
+ handler: async (args, ctx) => {
36
+ if (lifetime.signal.aborted)
37
+ return;
38
+ const [action, ...parameters] = args.trim().split(/\s+/u);
39
+ const command = action?.toLowerCase() || '';
40
+ const generation = lifecycle;
41
+ const refresh = ++statusRefresh;
42
+ const isCurrent = () => generation === lifecycle;
43
+ const report = (status) => {
44
+ if (!isCurrent())
45
+ return;
46
+ if (refresh === statusRefresh)
47
+ updateStatus(ctx, status);
48
+ notify(ctx, formatStatus(status));
49
+ };
50
+ const start = (operation, message) => {
51
+ notify(ctx, message, 'info');
52
+ void operation.then(report).catch(() => {
53
+ if (!isCurrent())
54
+ return;
55
+ notify(ctx, 'Memory processing request failed; inspect /memory.', 'warning');
56
+ });
57
+ };
58
+ if (parameters.length > 0) {
59
+ notify(ctx, 'Usage: /memory | /memory run | /memory open', 'warning');
60
+ return;
61
+ }
62
+ if (command === '') {
63
+ try {
64
+ const status = await options.coordinator.status(ctx.cwd);
65
+ if (!isCurrent() || lifetime.signal.aborted)
66
+ return;
67
+ const view = options.presentation.showHistory(ctx, options.agentDir, formatStatus(status), lifetime.signal);
68
+ views.add(view);
69
+ try {
70
+ await view;
71
+ }
72
+ finally {
73
+ views.delete(view);
74
+ }
75
+ }
76
+ catch {
77
+ if (isCurrent() && !lifetime.signal.aborted)
78
+ notify(ctx, 'Memory overview could not be opened.', 'warning');
79
+ }
80
+ return;
81
+ }
82
+ if (command === 'run') {
83
+ const operation = options.coordinator.status(ctx.cwd).then((status) => {
84
+ const retry = status.autoDisabled !== undefined
85
+ || (status.nextRetryAt !== undefined && Date.parse(status.nextRetryAt) > Date.now());
86
+ return retry
87
+ ? options.coordinator.retryProject(ctx.cwd)
88
+ : options.coordinator.runNow(ctx.cwd);
89
+ });
90
+ start(operation, 'Memory processing requested.');
91
+ return;
92
+ }
93
+ if (command === 'open') {
94
+ const directory = await options.coordinator.canonicalDirectory(ctx.cwd);
95
+ if (!isCurrent() || lifetime.signal.aborted)
96
+ return;
97
+ await options.presentation.openDirectory(directory, lifetime.signal);
98
+ if (isCurrent())
99
+ notify(ctx, 'Opened canonical local memory.', 'info');
100
+ return;
101
+ }
102
+ notify(ctx, 'Usage: /memory | /memory run | /memory open', 'warning');
103
+ },
104
+ });
105
+ pi.on('session_start', async (_event, ctx) => {
106
+ const sessionId = ctx.sessionManager.getSessionId();
107
+ const replacement = activeSessionId !== sessionId || activeCwd !== ctx.cwd;
108
+ if (replacement) {
109
+ lifetime.abort();
110
+ await Promise.allSettled([...views]);
111
+ lifetime = new AbortController();
112
+ lifecycle += 1;
113
+ startupWarningPending = true;
114
+ }
115
+ activeContext = ctx;
116
+ activeSessionId = sessionId;
117
+ activeCwd = ctx.cwd;
118
+ const generation = lifecycle;
119
+ unsubscribeStatus?.();
120
+ unsubscribeStatus = options.coordinator.subscribeStatusChanges(() => {
121
+ if (generation !== lifecycle)
122
+ return;
123
+ void refreshActiveStatus().catch(() => { });
124
+ });
125
+ try {
126
+ await refreshActiveStatus();
127
+ }
128
+ catch { }
129
+ });
130
+ pi.on('session_shutdown', async (_event, ctx) => {
131
+ if (activeSessionId !== ctx.sessionManager.getSessionId() || activeCwd !== ctx.cwd)
132
+ return;
133
+ lifecycle += 1;
134
+ statusRefresh += 1;
135
+ activeContext = undefined;
136
+ activeSessionId = undefined;
137
+ activeCwd = undefined;
138
+ startupWarningPending = false;
139
+ unsubscribeStatus?.();
140
+ unsubscribeStatus = undefined;
141
+ await pi.ui.removeStatus('memory').catch(() => { });
142
+ lifetime.abort();
143
+ await Promise.allSettled([...views]);
144
+ });
145
+ pi.on('model_select', ({ model }) => {
146
+ options.coordinator.setSelectedModel(model);
147
+ });
148
+ function updateStatus(ctx, status) {
149
+ const pending = status.pendingCheckpoints > 0 ? `${status.pendingCheckpoints} pending` : undefined;
150
+ const activity = status.state === 'processing' ? 'processing'
151
+ : status.nextRetryAt && Date.parse(status.nextRetryAt) > Date.now() ? 'backoff' : undefined;
152
+ const text = !status.enabled ? 'Memory: disabled'
153
+ : activity ? `Memory: ${[activity, pending].filter(Boolean).join(' · ')}`
154
+ : pending ? `Memory: ${pending}` : undefined;
155
+ void (text === undefined ? pi.ui.removeStatus('memory') : pi.ui.status({ id: 'memory', kind: 'status', key: 'memory', value: { kind: 'text', text }, fallback: text })).catch(() => { });
156
+ }
157
+ function formatStatus(status) {
158
+ const enabled = status.enabled ? 'enabled' : 'disabled';
159
+ const details = [`Local memory: ${enabled}`, status.state, `${status.pendingCheckpoints} pending`];
160
+ if (status.consecutiveFailures)
161
+ details.push(`${status.consecutiveFailures} consecutive failures`);
162
+ if (status.nextRetryAt)
163
+ details.push(`retry at ${safeMemoryText(status.nextRetryAt)}`);
164
+ if (status.lastRunId && validMemoryRunId(status.lastRunId))
165
+ details.push(`run ${status.lastRunId}`);
166
+ if (status.autoDisabled)
167
+ details.push(autoDisabledWarning(status));
168
+ if (status.message)
169
+ details.push(safeMemoryText(status.message));
170
+ return details.join(' · ');
171
+ }
172
+ function autoDisabledWarning(status) {
173
+ const disabled = status.autoDisabled;
174
+ const run = validMemoryRunId(disabled.runId) ? ` Run: ${disabled.runId}.` : '';
175
+ const reason = safeMemoryText(disabled.reason) || 'repeated failures';
176
+ return `Memory processing automatically disabled for this project: ${reason}.${run} Open /memory to inspect the run; use /memory run to recover.`;
177
+ }
178
+ function notify(ctx, message, level = 'info') {
179
+ void pi.ui.notify({ text: message, level }).catch(() => { });
180
+ }
181
+ };
182
+ }
183
+ //# sourceMappingURL=control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control.js","sourceRoot":"","sources":["../../src/local/control.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ import { LocalMemoryStore } from './store.js';
2
+ import type { MemoryContext } from './context.js';
3
+ import { type MemoryHost, type MemoryProcessingState, type MemorySnapshot, type MemoryStatus, type SessionCheckpoint } from '../index.js';
4
+ import { type ModelsService, type Api, type Classifier, type Model } from '@felan-ai/agent-core';
5
+ import type { LocalMemoryLeaseOptions } from './lease.js';
6
+ import type { LocalMemoryProject } from './project.js';
7
+ import type { LocalMemoryDreamRunner } from './dreamer.js';
8
+ import type { LocalMemoryAttempt } from './store.js';
9
+ import type { LocalMemoryControl } from './store.js';
10
+ export interface ProjectContext {
11
+ readonly project: LocalMemoryProject;
12
+ readonly cwd: string;
13
+ readonly sessionDir?: string;
14
+ readonly store: LocalMemoryStore;
15
+ ready: Promise<void> | undefined;
16
+ initialized: boolean;
17
+ recovery: Promise<void> | undefined;
18
+ recoveryAbort: AbortController | undefined;
19
+ recoveryRetryAt: number | undefined;
20
+ recoveryCompleted: boolean;
21
+ diagnosticsReconciled: boolean;
22
+ timer: ReturnType<typeof setTimeout> | undefined;
23
+ timerDueAt: number | undefined;
24
+ run: Promise<void> | undefined;
25
+ readonly followUps: Set<Promise<void>>;
26
+ abort: AbortController | undefined;
27
+ attempt: LocalMemoryAttempt | undefined;
28
+ storageBlocked: boolean;
29
+ writerBlocked: boolean;
30
+ statusSignature: string | undefined;
31
+ blocked: Map<string, MemoryCheckpointCursor>;
32
+ state: MemoryProcessingState;
33
+ message: string | undefined;
34
+ }
35
+ interface MemoryCheckpointCursor {
36
+ readonly leafId: string | null;
37
+ readonly transcriptDigest: string;
38
+ }
39
+ export interface LocalMemoryCoordinatorOptions {
40
+ readonly agentDir: string;
41
+ readonly models: ModelsService;
42
+ readonly sessionDir?: string;
43
+ readonly enabled?: boolean;
44
+ readonly unavailableReason?: string;
45
+ readonly debounceMs?: number;
46
+ readonly batchSize?: number;
47
+ readonly maxInputBytes?: number;
48
+ readonly maxTranscriptBytes?: number;
49
+ readonly recoveryStableMs?: number;
50
+ /** Delay before the single retry of a startup recovery whose session listing failed. */
51
+ readonly recoveryRetryMs?: number;
52
+ readonly recover?: boolean;
53
+ readonly dreamRunner?: LocalMemoryDreamRunner;
54
+ readonly selectedModel?: Model<Api>;
55
+ readonly scopedModels?: readonly Model<Api>[];
56
+ readonly classifier?: Classifier;
57
+ readonly leaseOptions?: LocalMemoryLeaseOptions;
58
+ readonly retryDelaysMs?: readonly [number, number];
59
+ readonly monitorIntervalMs?: number;
60
+ readonly now?: () => number;
61
+ }
62
+ export interface LocalMemoryStatus extends MemoryStatus {
63
+ readonly consecutiveFailures?: number;
64
+ readonly nextRetryAt?: string;
65
+ readonly autoDisabled?: LocalMemoryControl['autoDisabled'];
66
+ readonly lastRunId?: string;
67
+ }
68
+ export interface LocalMemorySessionHostOptions {
69
+ readonly cwd: string;
70
+ readonly sessionStorageRoot: string;
71
+ }
72
+ export declare class LocalMemoryCoordinator {
73
+ #private;
74
+ readonly environment: MemoryContext;
75
+ constructor(environment: MemoryContext, options: LocalMemoryCoordinatorOptions);
76
+ createSessionHost(options: LocalMemorySessionHostOptions): MemoryHost;
77
+ isEnabled(): boolean;
78
+ hasActiveWork(): boolean;
79
+ subscribeStatusChanges(listener: () => void): () => void;
80
+ setModelSelection(model: Model<Api> | undefined, scopedModels: readonly Model<Api>[] | undefined, classifier?: Classifier): void;
81
+ setSelectedModel(model: Model<Api> | undefined): void;
82
+ setEnabled(enabled: boolean): void;
83
+ status(cwd: string): Promise<LocalMemoryStatus>;
84
+ readCurrent(cwd: string, sessionStorageRoot: string): Promise<MemorySnapshot>;
85
+ recordCheckpoint(cwd: string, checkpoint: SessionCheckpoint): Promise<void>;
86
+ runNow(cwd: string): Promise<LocalMemoryStatus>;
87
+ retryProject(cwd: string): Promise<LocalMemoryStatus>;
88
+ canonicalDirectory(cwd: string): Promise<string>;
89
+ drain(): Promise<void>;
90
+ dispose(): Promise<void>;
91
+ }
92
+ export {};
93
+ //# sourceMappingURL=coordinator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordinator.d.ts","sourceRoot":"","sources":["../../src/local/coordinator.ts"],"names":[],"mappings":"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"}