@felan-ai/ext-memory 0.10.1 → 0.13.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 +34 -10
- package/dist/contracts.d.ts +8 -0
- package/dist/contracts.d.ts.map +1 -1
- package/dist/contracts.js +2 -0
- package/dist/contracts.js.map +1 -1
- package/dist/daemon-provider.d.ts +49 -0
- package/dist/daemon-provider.d.ts.map +1 -0
- package/dist/daemon-provider.js +231 -0
- package/dist/daemon-provider.js.map +1 -0
- package/dist/extension.d.ts.map +1 -1
- package/dist/extension.js +30 -9
- package/dist/extension.js.map +1 -1
- package/dist/local/context.d.ts +2 -2
- package/dist/local/control.d.ts +3 -2
- package/dist/local/control.d.ts.map +1 -1
- package/dist/local/control.js.map +1 -1
- package/dist/local/coordinator.d.ts +30 -51
- package/dist/local/coordinator.d.ts.map +1 -1
- package/dist/local/coordinator.js +495 -258
- package/dist/local/coordinator.js.map +1 -1
- package/dist/local/dreamer.d.ts +3 -1
- package/dist/local/dreamer.d.ts.map +1 -1
- package/dist/local/dreamer.js +3 -3
- package/dist/local/dreamer.js.map +1 -1
- package/dist/local/lease.d.ts.map +1 -1
- package/dist/local/lease.js +12 -7
- package/dist/local/lease.js.map +1 -1
- package/dist/local/project.d.ts +1 -0
- package/dist/local/project.d.ts.map +1 -1
- package/dist/local/project.js +124 -2
- package/dist/local/project.js.map +1 -1
- package/dist/local/shared.d.ts +7 -0
- package/dist/local/shared.d.ts.map +1 -0
- package/dist/local/shared.js +30 -0
- package/dist/local/shared.js.map +1 -0
- package/dist/local/store.d.ts +12 -0
- package/dist/local/store.d.ts.map +1 -1
- package/dist/local/store.js +49 -3
- package/dist/local/store.js.map +1 -1
- package/package.json +7 -3
package/README.md
CHANGED
|
@@ -5,15 +5,39 @@ and Pi extension behavior for Felan hosts.
|
|
|
5
5
|
|
|
6
6
|
The package root requires the core `felan.runtime@1`, `felan.models@1`, and
|
|
7
7
|
`felan.sessions@1` services. It owns the local store, project coordination,
|
|
8
|
-
checkpoint recovery, dreaming, retention and `/memory` commands.
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
checkpoint recovery, dreaming, retention and `/memory` commands.
|
|
9
|
+
|
|
10
|
+
The daemon process shares one memory coordinator per agent directory across its
|
|
11
|
+
sessions. Loaded root sessions whose host provides workers and runtime
|
|
12
|
+
lifetime can drive processing. Reader sessions and limited hosts can recall the
|
|
13
|
+
current artifact without starting workers; readers do not record checkpoints.
|
|
14
|
+
Processing is event-driven, with targeted recovery retries and writer re-checks
|
|
15
|
+
instead of a polling monitor. Files and atomic
|
|
13
16
|
storage operations use the scoped Runtime; model selection uses the authenticated
|
|
14
17
|
Models facade. Restricted dreaming sessions and lifecycle settlement go through
|
|
15
|
-
Sessions. Missing capabilities
|
|
16
|
-
independent, untracked worker.
|
|
18
|
+
Sessions. Missing worker or lifetime capabilities disable processing rather than
|
|
19
|
+
opening an independent, untracked worker.
|
|
20
|
+
|
|
21
|
+
`@felan-ai/ext-memory/daemon` exports a default daemon provider and
|
|
22
|
+
`createMemoryDaemonProvider(options?)`. It provides `felan.memory.scheduler@1`,
|
|
23
|
+
requires `felan.host.maintenance@1`, and optionally uses `felan.host.models@1`.
|
|
24
|
+
The provider shares the extension's coordinator and keeps one persistent
|
|
25
|
+
attachment per discovered project, so pending work can run with no loaded
|
|
26
|
+
session. It coalesces coordinator status changes within two seconds and rescans
|
|
27
|
+
every ten minutes. Without host models it tracks projects but disables scheduling.
|
|
28
|
+
The scheduler's `status()` returns each tracked project root and its memory status.
|
|
29
|
+
Hosts can supply a `runtime` instance or a `() => AgentRuntime` factory called
|
|
30
|
+
during activation, extra `projects`, and a project-to-session `selector`.
|
|
31
|
+
Explicit project roots resolve once per activation. `discover` defaults to `true`;
|
|
32
|
+
set it to `false` to track only `projects` without listing stored project directories.
|
|
33
|
+
For shared team memory, pass the team workspace in `projects`, `discover: false`,
|
|
34
|
+
and a selector that returns `{ kind: 'all' }`. By default, session listings include
|
|
35
|
+
sessions whose cwd resolves to the same project, including git subdirectories.
|
|
36
|
+
Checkpoint and history reads use the host's full authorized inventory.
|
|
37
|
+
Attachments use the host's allowed model scope and refresh it on rescan.
|
|
38
|
+
Host drain immediately stops scheduling through every persistent attachment.
|
|
39
|
+
Settlement detaches the provider and releases its
|
|
40
|
+
coordinator reference without closing other sessions' attachments.
|
|
17
41
|
|
|
18
42
|
The canonical layout remains `<agentDir>/memory/v1/projects/<projectKey>` and
|
|
19
43
|
retained journals remain under `<agentDir>/sessions/memory`. A session's `.memory`
|
|
@@ -103,9 +127,9 @@ lineage and create a deterministic, redacted visible-branch delta. Diverged
|
|
|
103
127
|
lineages emit the complete current branch. Output limits reject an oversized
|
|
104
128
|
projection instead of truncating a JSONL record. Sessions providers supply the complete journal; the extension stages successful
|
|
105
129
|
projections. Large source session
|
|
106
|
-
files are not rejected solely for their total size.
|
|
107
|
-
|
|
108
|
-
|
|
130
|
+
files are not rejected solely for their total size. A checkpoint that cannot be
|
|
131
|
+
materialized is dropped and remembered in `state.json`, so it is not retried
|
|
132
|
+
after a restart; the run fills its batch with the next pending checkpoints.
|
|
109
133
|
|
|
110
134
|
The memory schema keeps the wiki sparse. It prioritizes durable user-authored
|
|
111
135
|
facts, preferences, decisions, corrections, and uncodified rationale, followed
|
package/dist/contracts.d.ts
CHANGED
|
@@ -50,6 +50,14 @@ export interface MemoryHost {
|
|
|
50
50
|
recordCheckpoint(checkpoint: SessionCheckpoint): Promise<void>;
|
|
51
51
|
status(): Promise<MemoryStatus>;
|
|
52
52
|
}
|
|
53
|
+
export interface MemorySchedulerProjectStatus {
|
|
54
|
+
readonly projectRoot: string;
|
|
55
|
+
readonly status: MemoryStatus;
|
|
56
|
+
}
|
|
57
|
+
export interface MemorySchedulerService {
|
|
58
|
+
status(): Promise<readonly MemorySchedulerProjectStatus[]>;
|
|
59
|
+
}
|
|
60
|
+
export declare const MEMORY_SCHEDULER_SERVICE: import("@felan-ai/agent-core").ServiceContract<MemorySchedulerService>;
|
|
53
61
|
export interface MemoryInputSession {
|
|
54
62
|
readonly checkpoint: SessionCheckpoint;
|
|
55
63
|
readonly metadataPath: string;
|
package/dist/contracts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"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"}
|
package/dist/contracts.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { defineServiceContract } from '@felan-ai/agent-core';
|
|
1
2
|
export const MEMORY_ARTIFACT_VERSION = 1;
|
|
2
3
|
export const MEMORY_INPUT_MANIFEST_VERSION = 1;
|
|
3
4
|
export const MEMORY_INPUT_PROJECTION_VERSION = 1;
|
|
5
|
+
export const MEMORY_SCHEDULER_SERVICE = defineServiceContract('felan.memory.scheduler', 1);
|
|
4
6
|
export const DEFAULT_MEMORY_ARTIFACT_LIMITS = Object.freeze({
|
|
5
7
|
maxFiles: 256,
|
|
6
8
|
maxFileBytes: 256 * 1024,
|
package/dist/contracts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAU,CAAC;AAClD,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAU,CAAC;AACxD,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAU,CAAC;AAClD,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAU,CAAC;AACxD,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAU,CAAC;AA4E1D,MAAM,CAAC,MAAM,wBAAwB,GAAG,qBAAqB,CAAyB,wBAAwB,EAAE,CAAC,CAAC,CAAC;AAyBnH,MAAM,CAAC,MAAM,8BAA8B,GAAyB,MAAM,CAAC,MAAM,CAAC;IAChF,QAAQ,EAAE,GAAG;IACb,YAAY,EAAE,GAAG,GAAG,IAAI;IACxB,aAAa,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;CAC/B,CAAC,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { type AgentRuntime, type ExtensionServiceAccess, type HostSessionsSelector, type ModelsService } from '@felan-ai/agent-core';
|
|
2
|
+
import { type MemorySchedulerService } from './contracts.js';
|
|
3
|
+
import { type LocalMemoryProject } from './local/project.js';
|
|
4
|
+
export { MEMORY_SCHEDULER_SERVICE } from './contracts.js';
|
|
5
|
+
export type { MemorySchedulerService, MemorySchedulerProjectStatus } from './contracts.js';
|
|
6
|
+
export interface MemoryDaemonProviderOptions {
|
|
7
|
+
readonly runtime?: AgentRuntime | (() => AgentRuntime);
|
|
8
|
+
readonly projects?: readonly string[];
|
|
9
|
+
readonly discover?: boolean;
|
|
10
|
+
readonly selector?: (project: LocalMemoryProject) => HostSessionsSelector;
|
|
11
|
+
}
|
|
12
|
+
export declare function createMemoryDaemonProvider(options?: MemoryDaemonProviderOptions): {
|
|
13
|
+
scope: "daemon";
|
|
14
|
+
provides: import("@felan-ai/agent-core").ServiceContract<MemorySchedulerService>[];
|
|
15
|
+
requires: import("@felan-ai/agent-core").ServiceContract<import("@felan-ai/agent-core").HostMaintenance>[];
|
|
16
|
+
optional: import("@felan-ai/agent-core").ServiceContract<ModelsService>[];
|
|
17
|
+
create({ services }: {
|
|
18
|
+
readonly services: ExtensionServiceAccess;
|
|
19
|
+
}): Promise<{
|
|
20
|
+
implementations: {
|
|
21
|
+
contract: import("@felan-ai/agent-core").ServiceContract<MemorySchedulerService>;
|
|
22
|
+
value: MemorySchedulerService;
|
|
23
|
+
}[];
|
|
24
|
+
busy: () => boolean;
|
|
25
|
+
activate(): Promise<void>;
|
|
26
|
+
settle: (mode: "drain" | "force") => Promise<void>;
|
|
27
|
+
dispose: () => Promise<void>;
|
|
28
|
+
}>;
|
|
29
|
+
};
|
|
30
|
+
declare const _default: {
|
|
31
|
+
scope: "daemon";
|
|
32
|
+
provides: import("@felan-ai/agent-core").ServiceContract<MemorySchedulerService>[];
|
|
33
|
+
requires: import("@felan-ai/agent-core").ServiceContract<import("@felan-ai/agent-core").HostMaintenance>[];
|
|
34
|
+
optional: import("@felan-ai/agent-core").ServiceContract<ModelsService>[];
|
|
35
|
+
create({ services }: {
|
|
36
|
+
readonly services: ExtensionServiceAccess;
|
|
37
|
+
}): Promise<{
|
|
38
|
+
implementations: {
|
|
39
|
+
contract: import("@felan-ai/agent-core").ServiceContract<MemorySchedulerService>;
|
|
40
|
+
value: MemorySchedulerService;
|
|
41
|
+
}[];
|
|
42
|
+
busy: () => boolean;
|
|
43
|
+
activate(): Promise<void>;
|
|
44
|
+
settle: (mode: "drain" | "force") => Promise<void>;
|
|
45
|
+
dispose: () => Promise<void>;
|
|
46
|
+
}>;
|
|
47
|
+
};
|
|
48
|
+
export default _default;
|
|
49
|
+
//# sourceMappingURL=daemon-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon-provider.d.ts","sourceRoot":"","sources":["../src/daemon-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAInB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAA4B,KAAK,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAEvF,OAAO,EAA0D,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGrH,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,YAAY,EAAE,sBAAsB,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AAE3F,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,CAAC,MAAM,YAAY,CAAC,CAAC;IACvD,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,oBAAoB,CAAC;CAC3E;AAaD,wBAAgB,0BAA0B,CAAC,OAAO,GAAE,2BAAgC;;;;;yBAMrD;QAAE,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAA;KAAE;;;;;;oBA0DxD,OAAO,CAAC,IAAI,CAAC;uBAlCN,OAAO,GAAG,OAAO,KAAG,OAAO,CAAC,IAAI,CAAC;;;EAwK3D;;;;;;yBAhM8B;QAAE,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAA;KAAE;;;;;;oBA0DxD,OAAO,CAAC,IAAI,CAAC;uBAlCN,OAAO,GAAG,OAAO,KAAG,OAAO,CAAC,IAAI,CAAC;;;;AA0K5D,wBAA4C"}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { HOST_MAINTENANCE_SERVICE, HOST_MODELS_SERVICE, HostAgentRuntime, } from '@felan-ai/agent-core';
|
|
2
|
+
import { MEMORY_SCHEDULER_SERVICE } from './contracts.js';
|
|
3
|
+
import { discoverLocalMemoryProjects, resolveLocalMemoryProject } from './local/project.js';
|
|
4
|
+
import { acquireSharedLocalMemoryCoordinator } from './local/shared.js';
|
|
5
|
+
export { MEMORY_SCHEDULER_SERVICE } from './contracts.js';
|
|
6
|
+
const unavailableReason = 'Dream scheduling is unavailable because this host does not provide models; captured memory remains readable.';
|
|
7
|
+
const scopeUnavailableReason = 'Dream scheduling is unavailable until the host model scope can be resolved; captured memory remains readable.';
|
|
8
|
+
const unavailable = () => { throw new Error(unavailableReason); };
|
|
9
|
+
const unavailableModels = {
|
|
10
|
+
getAvailable: async () => [],
|
|
11
|
+
completeSimple: unavailable,
|
|
12
|
+
streamSimple: unavailable,
|
|
13
|
+
getAvailableOfType: async () => [],
|
|
14
|
+
generateImages: unavailable,
|
|
15
|
+
};
|
|
16
|
+
export function createMemoryDaemonProvider(options = {}) {
|
|
17
|
+
return {
|
|
18
|
+
scope: 'daemon',
|
|
19
|
+
provides: [MEMORY_SCHEDULER_SERVICE],
|
|
20
|
+
requires: [HOST_MAINTENANCE_SERVICE],
|
|
21
|
+
optional: [HOST_MODELS_SERVICE],
|
|
22
|
+
async create({ services }) {
|
|
23
|
+
const projects = new Map();
|
|
24
|
+
let shared;
|
|
25
|
+
let active = false;
|
|
26
|
+
let closed = false;
|
|
27
|
+
let activation;
|
|
28
|
+
let scanning;
|
|
29
|
+
let scanRequested = false;
|
|
30
|
+
let unsubscribe;
|
|
31
|
+
let timer;
|
|
32
|
+
let debounce;
|
|
33
|
+
let removeAbortListener;
|
|
34
|
+
let closing;
|
|
35
|
+
let forcing;
|
|
36
|
+
const scheduler = {
|
|
37
|
+
status: async () => {
|
|
38
|
+
await scanning?.catch(() => { });
|
|
39
|
+
return Promise.all([...projects.values()].map(async ({ project, attachment }) => ({
|
|
40
|
+
projectRoot: project.canonicalRoot,
|
|
41
|
+
status: await attachment.status(project.canonicalRoot),
|
|
42
|
+
})));
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
const close = (mode) => {
|
|
46
|
+
closed = true;
|
|
47
|
+
if (closing && mode === 'force') {
|
|
48
|
+
const pendingClose = closing;
|
|
49
|
+
forcing ??= Promise.allSettled([...projects.values()].map(({ attachment }) => attachment.settle('force')))
|
|
50
|
+
.then(() => pendingClose).finally(() => { forcing = undefined; });
|
|
51
|
+
return forcing;
|
|
52
|
+
}
|
|
53
|
+
closing ??= (async () => {
|
|
54
|
+
active = false;
|
|
55
|
+
if (timer)
|
|
56
|
+
clearInterval(timer);
|
|
57
|
+
if (debounce)
|
|
58
|
+
clearTimeout(debounce);
|
|
59
|
+
unsubscribe?.();
|
|
60
|
+
removeAbortListener?.();
|
|
61
|
+
const settling = Promise.allSettled([...projects.entries()].map(async ([key, { attachment }]) => {
|
|
62
|
+
try {
|
|
63
|
+
await attachment.settle(mode);
|
|
64
|
+
}
|
|
65
|
+
finally {
|
|
66
|
+
await attachment.detach();
|
|
67
|
+
projects.delete(key);
|
|
68
|
+
}
|
|
69
|
+
}));
|
|
70
|
+
await scanning?.catch(() => { });
|
|
71
|
+
const results = await settling;
|
|
72
|
+
await shared?.release();
|
|
73
|
+
shared = undefined;
|
|
74
|
+
const errors = results.flatMap(result => result.status === 'rejected' ? [result.reason] : []);
|
|
75
|
+
if (errors.length)
|
|
76
|
+
throw new AggregateError(errors, 'Memory scheduler shutdown failed');
|
|
77
|
+
})().catch(error => { closing = undefined; throw error; });
|
|
78
|
+
return closing;
|
|
79
|
+
};
|
|
80
|
+
return {
|
|
81
|
+
implementations: [{ contract: MEMORY_SCHEDULER_SERVICE, value: scheduler }],
|
|
82
|
+
busy: () => [...projects.values()].some(({ attachment }) => attachment.busy()),
|
|
83
|
+
activate() {
|
|
84
|
+
if (closed)
|
|
85
|
+
return Promise.reject(new Error('Memory scheduler is closed'));
|
|
86
|
+
activation ??= (async () => {
|
|
87
|
+
const maintenance = services.get(HOST_MAINTENANCE_SERVICE);
|
|
88
|
+
if (!maintenance)
|
|
89
|
+
throw new Error('Memory scheduler requires host maintenance');
|
|
90
|
+
maintenance.signal.throwIfAborted();
|
|
91
|
+
const models = services.get(HOST_MODELS_SERVICE);
|
|
92
|
+
const runtime = (typeof options.runtime === 'function' ? options.runtime() : options.runtime) ?? new HostAgentRuntime(maintenance.agentDir, {
|
|
93
|
+
agentDir: maintenance.agentDir,
|
|
94
|
+
agentStorageRoot: maintenance.agentDir,
|
|
95
|
+
sessionStorageRoot: maintenance.agentDir,
|
|
96
|
+
pathAccess: 'host',
|
|
97
|
+
});
|
|
98
|
+
const discovery = { runtime, sessions: maintenance.sessions({ kind: 'all' }) };
|
|
99
|
+
const resolvedProjects = new Map();
|
|
100
|
+
const resolveProject = (cwd) => {
|
|
101
|
+
let resolved = resolvedProjects.get(cwd);
|
|
102
|
+
if (!resolved) {
|
|
103
|
+
resolved = resolveLocalMemoryProject(discovery, cwd);
|
|
104
|
+
resolvedProjects.set(cwd, resolved);
|
|
105
|
+
void resolved.catch(() => { resolvedProjects.delete(cwd); });
|
|
106
|
+
}
|
|
107
|
+
return resolved;
|
|
108
|
+
};
|
|
109
|
+
const projectHistory = (project) => ({
|
|
110
|
+
current: discovery.sessions.current,
|
|
111
|
+
history: (id, request) => discovery.sessions.history(id, request),
|
|
112
|
+
checkpoint: (id, request) => discovery.sessions.checkpoint(id, request),
|
|
113
|
+
list: async (filter, request) => {
|
|
114
|
+
const page = await discovery.sessions.list(filter, request);
|
|
115
|
+
const matches = await Promise.all(page.items.map(async (session) => (await resolveProject(session.cwd)).key === project.key));
|
|
116
|
+
return { ...page, items: page.items.filter((_, index) => matches[index]) };
|
|
117
|
+
},
|
|
118
|
+
});
|
|
119
|
+
shared = acquireSharedLocalMemoryCoordinator({ agentDir: maintenance.agentDir });
|
|
120
|
+
active = true;
|
|
121
|
+
const onAbort = () => { void close('drain').catch(() => runtime.logger.warn('Memory scheduler drain failed')); };
|
|
122
|
+
maintenance.signal.addEventListener('abort', onAbort, { once: true });
|
|
123
|
+
removeAbortListener = () => maintenance.signal.removeEventListener('abort', onAbort);
|
|
124
|
+
let scope = { unavailableReason: scopeUnavailableReason };
|
|
125
|
+
const scanProjects = async () => {
|
|
126
|
+
let nextScope;
|
|
127
|
+
let timeout;
|
|
128
|
+
let onScopeAbort;
|
|
129
|
+
try {
|
|
130
|
+
const interrupted = new Promise((_, reject) => {
|
|
131
|
+
timeout = setTimeout(() => reject(new Error('Memory model scope resolution timed out')), 30_000);
|
|
132
|
+
timeout.unref?.();
|
|
133
|
+
onScopeAbort = () => reject(new DOMException('Memory model scope resolution aborted', 'AbortError'));
|
|
134
|
+
maintenance.signal.addEventListener('abort', onScopeAbort, { once: true });
|
|
135
|
+
if (maintenance.signal.aborted)
|
|
136
|
+
onScopeAbort();
|
|
137
|
+
});
|
|
138
|
+
const allowed = await Promise.race([maintenance.allowedModels(maintenance.signal), interrupted]);
|
|
139
|
+
const scopedModels = allowed?.flatMap(selection => {
|
|
140
|
+
const model = maintenance.modelRuntime.getModel(selection.provider, selection.id);
|
|
141
|
+
return model ? [model] : [];
|
|
142
|
+
});
|
|
143
|
+
nextScope = { models: scopedModels };
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
if (error instanceof Error && error.name === 'AbortError')
|
|
147
|
+
nextScope = scope;
|
|
148
|
+
else {
|
|
149
|
+
if (active)
|
|
150
|
+
runtime.logger.warn('Memory model scope is unavailable; scheduling remains paused');
|
|
151
|
+
nextScope = { unavailableReason: scopeUnavailableReason };
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
finally {
|
|
155
|
+
if (timeout)
|
|
156
|
+
clearTimeout(timeout);
|
|
157
|
+
if (onScopeAbort)
|
|
158
|
+
maintenance.signal.removeEventListener('abort', onScopeAbort);
|
|
159
|
+
}
|
|
160
|
+
if (!active)
|
|
161
|
+
return;
|
|
162
|
+
if (JSON.stringify(scope) !== JSON.stringify(nextScope)) {
|
|
163
|
+
scope = nextScope;
|
|
164
|
+
for (const { attachment } of projects.values()) {
|
|
165
|
+
attachment.setModelSelection(undefined, scope.models, models?.classifier);
|
|
166
|
+
attachment.setScheduling(!!models && !scope.unavailableReason, models ? scope.unavailableReason : unavailableReason);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
const discovered = options.discover === false ? [] : await discoverLocalMemoryProjects(discovery, maintenance.agentDir);
|
|
170
|
+
discovered.push(...await Promise.all((options.projects ?? []).map(resolveProject)));
|
|
171
|
+
for (const project of discovered) {
|
|
172
|
+
if (!active)
|
|
173
|
+
return;
|
|
174
|
+
const existing = projects.get(project.key);
|
|
175
|
+
if (existing) {
|
|
176
|
+
await existing.attachment.status(existing.project.canonicalRoot);
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
const attachment = shared.coordinator.attach({
|
|
180
|
+
environment: {
|
|
181
|
+
runtime,
|
|
182
|
+
sessions: options.selector ? maintenance.sessions(options.selector(project)) : projectHistory(project),
|
|
183
|
+
openWorker: maintenance.openWorker,
|
|
184
|
+
},
|
|
185
|
+
models: models ?? unavailableModels,
|
|
186
|
+
scheduling: !!models && !scope.unavailableReason,
|
|
187
|
+
persistent: true,
|
|
188
|
+
...(scope.models === undefined ? {} : { scopedModels: scope.models }),
|
|
189
|
+
...(!models ? { unavailableReason } : scope.unavailableReason ? { unavailableReason: scope.unavailableReason } : {}),
|
|
190
|
+
...(models?.classifier ? { classifier: models.classifier } : {}),
|
|
191
|
+
});
|
|
192
|
+
projects.set(project.key, { project, attachment });
|
|
193
|
+
await attachment.status(project.canonicalRoot);
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
const requestScan = () => {
|
|
197
|
+
if (!active)
|
|
198
|
+
return Promise.resolve();
|
|
199
|
+
scanRequested = true;
|
|
200
|
+
scanning ??= (async () => {
|
|
201
|
+
do {
|
|
202
|
+
scanRequested = false;
|
|
203
|
+
await scanProjects();
|
|
204
|
+
} while (scanRequested && active);
|
|
205
|
+
})().finally(() => { scanning = undefined; });
|
|
206
|
+
return scanning;
|
|
207
|
+
};
|
|
208
|
+
const rescan = () => {
|
|
209
|
+
void requestScan().catch(() => runtime.logger.warn('Memory project discovery failed'));
|
|
210
|
+
};
|
|
211
|
+
unsubscribe = shared.coordinator.subscribeStatusChanges(() => {
|
|
212
|
+
if (!active || debounce)
|
|
213
|
+
return;
|
|
214
|
+
debounce = setTimeout(() => { debounce = undefined; rescan(); }, 2_000);
|
|
215
|
+
debounce.unref?.();
|
|
216
|
+
});
|
|
217
|
+
timer = setInterval(() => { resolvedProjects.clear(); rescan(); }, 10 * 60 * 1_000);
|
|
218
|
+
timer.unref?.();
|
|
219
|
+
// The daemon reports ready only after activation, so the first scan must not hold it.
|
|
220
|
+
rescan();
|
|
221
|
+
})();
|
|
222
|
+
return activation;
|
|
223
|
+
},
|
|
224
|
+
settle: close,
|
|
225
|
+
dispose: () => close('force'),
|
|
226
|
+
};
|
|
227
|
+
},
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
export default createMemoryDaemonProvider();
|
|
231
|
+
//# sourceMappingURL=daemon-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon-provider.js","sourceRoot":"","sources":["../src/daemon-provider.ts"],"names":[],"mappings":"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"}
|
package/dist/extension.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoF,KAAK,wBAAwB,EAA0B,MAAM,sBAAsB,CAAC;AAK/K,cAAc,YAAY,CAAC;AAE3B,QAAA,MAAM,SAAS,
|
|
1
|
+
{"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoF,KAAK,wBAAwB,EAA0B,MAAM,sBAAsB,CAAC;AAK/K,cAAc,YAAY,CAAC;AAE3B,QAAA,MAAM,SAAS,EA8C8H,wBAAwB,CAAC;AAEtK,eAAe,SAAS,CAAC"}
|
package/dist/extension.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { HOST_WORKERS_SERVICE, RUNTIME_LIFETIME_SERVICE, MODELS_SERVICE, SESSIONS_SERVICE } from '@felan-ai/agent-core';
|
|
2
2
|
import { createMemoryExtension } from './index.js';
|
|
3
|
-
import {
|
|
3
|
+
import { acquireSharedLocalMemoryCoordinator } from './local/shared.js';
|
|
4
4
|
import { createMemoryControlExtension } from './local/control.js';
|
|
5
5
|
import { createMemoryPresentation } from './local/ui.js';
|
|
6
6
|
export * from './index.js';
|
|
@@ -22,16 +22,37 @@ const extension = Object.assign((pi) => {
|
|
|
22
22
|
const environment = { runtime: pi.runtime, sessions, ...(openWorker ? { openWorker } : {}) };
|
|
23
23
|
const root = sessions.current.id === sessions.current.root;
|
|
24
24
|
const schedulingAvailable = !!openWorker && !!lifetime;
|
|
25
|
-
const
|
|
25
|
+
const shared = acquireSharedLocalMemoryCoordinator({ agentDir: pi.agentDir });
|
|
26
|
+
const attachment = shared.coordinator.attach({ environment, models, scheduling: root && schedulingAvailable,
|
|
26
27
|
...(root && !schedulingAvailable ? { unavailableReason: 'Dream scheduling is unavailable on this host; captured memory remains readable.' } : {}),
|
|
27
28
|
...(models.classifier ? { classifier: models.classifier } : {}) });
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
29
|
+
let release;
|
|
30
|
+
let closed;
|
|
31
|
+
const close = () => {
|
|
32
|
+
closed ??= (async () => {
|
|
33
|
+
try {
|
|
34
|
+
await attachment.detach();
|
|
35
|
+
}
|
|
36
|
+
finally {
|
|
37
|
+
release?.();
|
|
38
|
+
await shared.release();
|
|
39
|
+
}
|
|
40
|
+
})();
|
|
41
|
+
return closed;
|
|
42
|
+
};
|
|
43
|
+
pi.on('session_shutdown', close);
|
|
44
|
+
try {
|
|
45
|
+
const host = attachment.createSessionHost({ cwd: pi.runtime.cwd, sessionStorageRoot: pi.runtime.storage('session').root });
|
|
46
|
+
release = root && lifetime ? lifetime.register({ busy: () => attachment.busy(),
|
|
47
|
+
settle: mode => attachment.settle(mode), dispose: close }) : undefined;
|
|
48
|
+
createMemoryExtension({ role: root ? 'root' : 'reader', host })(pi);
|
|
49
|
+
if (root)
|
|
50
|
+
createMemoryControlExtension({ coordinator: attachment, agentDir: pi.agentDir, presentation: createMemoryPresentation(pi, environment) })(pi);
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
void close();
|
|
54
|
+
throw error;
|
|
55
|
+
}
|
|
35
56
|
}, { serviceRequirements: { required: [MODELS_SERVICE, SESSIONS_SERVICE], optional: [HOST_WORKERS_SERVICE, RUNTIME_LIFETIME_SERVICE] } });
|
|
36
57
|
export default extension;
|
|
37
58
|
//# sourceMappingURL=extension.js.map
|
package/dist/extension.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,cAAc,EAAE,gBAAgB,EAAyD,MAAM,sBAAsB,CAAC;AAC/K,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,cAAc,EAAE,gBAAgB,EAAyD,MAAM,sBAAsB,CAAC;AAC/K,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,mCAAmC,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACzD,cAAc,YAAY,CAAC;AAE3B,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAqB,EAAE,EAAE;IACxD,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,yEAAyE,CAAC;QAC1F,qBAAqB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC5C,KAAK,CAAC,WAAW,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACjD,KAAK,CAAC,gBAAgB,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACtD,KAAK,CAAC,MAAM,KAAK,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;aACjG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACT,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,6BAA6B,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAChK,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAE,CAAC;IAChD,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAE,CAAC;IACpD,MAAM,UAAU,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IAC3D,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAC7F,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3D,MAAM,mBAAmB,GAAG,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,QAAQ,CAAC;IACvD,MAAM,MAAM,GAAG,mCAAmC,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9E,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,IAAI,mBAAmB;QACzG,GAAG,CAAC,IAAI,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,iFAAiF,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjJ,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACrE,IAAI,OAAiC,CAAC;IACtC,IAAI,MAAiC,CAAC;IACtC,MAAM,KAAK,GAAG,GAAkB,EAAE;QAChC,MAAM,KAAK,CAAC,KAAK,IAAI,EAAE;YACrB,IAAI,CAAC;gBACH,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC;YAC5B,CAAC;oBAAS,CAAC;gBACT,OAAO,EAAE,EAAE,CAAC;gBACZ,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;YACzB,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QACL,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IACF,EAAE,CAAC,EAAE,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,UAAU,CAAC,iBAAiB,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,kBAAkB,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3H,OAAO,GAAG,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE;YAC5E,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACzE,qBAAqB,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACpE,IAAI,IAAI;YAAE,4BAA4B,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,wBAAwB,CAAC,EAAE,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1J,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,KAAK,KAAK,EAAE,CAAC;QACb,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,EAAE,EAAE,mBAAmB,EAAE,EAAE,QAAQ,EAAE,CAAC,cAAc,EAAE,gBAAgB,CAAC,EAAE,QAAQ,EAAE,CAAC,oBAAoB,EAAE,wBAAwB,CAAC,EAAE,EAAE,CAA6B,CAAC;AAEtK,eAAe,SAAS,CAAC"}
|
package/dist/local/context.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { AgentRuntime, HostWorkerLauncher,
|
|
1
|
+
import type { AgentRuntime, HostWorkerLauncher, SessionsHistory } from '@felan-ai/agent-core';
|
|
2
2
|
export interface MemoryContext {
|
|
3
3
|
readonly runtime: AgentRuntime;
|
|
4
|
-
readonly sessions:
|
|
4
|
+
readonly sessions: SessionsHistory;
|
|
5
5
|
readonly openWorker?: HostWorkerLauncher;
|
|
6
6
|
}
|
|
7
7
|
export declare function removeIfPresent(context: MemoryContext, path: string, options?: {
|
package/dist/local/control.d.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import type { ExtensionContext, FelanExtension } from '@felan-ai/agent-core';
|
|
2
|
-
import type {
|
|
2
|
+
import type { LocalMemoryAttachment } from './coordinator.js';
|
|
3
3
|
export interface MemoryControlPresentationHost {
|
|
4
4
|
showHistory(ctx: ExtensionContext, agentDir: string, status: string, signal: AbortSignal): Promise<void>;
|
|
5
5
|
openDirectory(directory: string, signal: AbortSignal): Promise<void>;
|
|
6
6
|
}
|
|
7
|
+
export type MemoryControlCoordinator = Pick<LocalMemoryAttachment, 'status' | 'runNow' | 'retryProject' | 'canonicalDirectory' | 'subscribeStatusChanges' | 'setSelectedModel'>;
|
|
7
8
|
export interface CreateMemoryControlExtensionOptions {
|
|
8
|
-
readonly coordinator:
|
|
9
|
+
readonly coordinator: MemoryControlCoordinator;
|
|
9
10
|
readonly agentDir: string;
|
|
10
11
|
readonly presentation: MemoryControlPresentationHost;
|
|
11
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control.d.ts","sourceRoot":"","sources":["../../src/local/control.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"control.d.ts","sourceRoot":"","sources":["../../src/local/control.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,KAAK,EAAE,qBAAqB,EAAqB,MAAM,kBAAkB,CAAC;AAKjF,MAAM,WAAW,6BAA6B;IAC5C,WAAW,CAAC,GAAG,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtE;AAED,MAAM,MAAM,wBAAwB,GAAG,IAAI,CAAC,qBAAqB,EAC/D,QAAQ,GAAG,QAAQ,GAAG,cAAc,GAAG,oBAAoB,GAAG,wBAAwB,GAAG,kBAAkB,CAAC,CAAC;AAE/G,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,WAAW,EAAE,wBAAwB,CAAC;IAC/C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,6BAA6B,CAAC;CACtD;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,mCAAmC,GAC3C,cAAc,CAqKhB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control.js","sourceRoot":"","sources":["../../src/local/control.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,MAAM,cAAc,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACtH,MAAM,gBAAgB,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"control.js","sourceRoot":"","sources":["../../src/local/control.ts"],"names":[],"mappings":"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"}
|