@oharness/engine 0.6.0 → 0.7.1

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 (90) hide show
  1. package/dist/agent/agent.d.ts +83 -0
  2. package/dist/agent/agent.js +112 -1
  3. package/dist/agent/agent.js.map +1 -1
  4. package/dist/agent/memory-backup.d.ts +2 -0
  5. package/dist/agent/memory-backup.js +9 -1
  6. package/dist/agent/memory-backup.js.map +1 -1
  7. package/dist/agent/memory-limits.js +8 -1
  8. package/dist/agent/memory-limits.js.map +1 -1
  9. package/dist/agent/memory-usage.d.ts +1 -1
  10. package/dist/agent/memory-usage.js +2 -3
  11. package/dist/agent/memory-usage.js.map +1 -1
  12. package/dist/agent/memory.d.ts +3 -0
  13. package/dist/agent/memory.js +6 -18
  14. package/dist/agent/memory.js.map +1 -1
  15. package/dist/agent/session.d.ts +9 -0
  16. package/dist/agent/session.js +14 -2
  17. package/dist/agent/session.js.map +1 -1
  18. package/dist/agent/settings.js +3 -2
  19. package/dist/agent/settings.js.map +1 -1
  20. package/dist/agent/store.d.ts +45 -4
  21. package/dist/agent/store.js +198 -25
  22. package/dist/agent/store.js.map +1 -1
  23. package/dist/artifacts/files.d.ts +52 -0
  24. package/dist/artifacts/files.js +169 -0
  25. package/dist/artifacts/files.js.map +1 -0
  26. package/dist/auth/store.js +3 -2
  27. package/dist/auth/store.js.map +1 -1
  28. package/dist/config-files.js +3 -2
  29. package/dist/config-files.js.map +1 -1
  30. package/dist/config.d.ts +6 -1
  31. package/dist/config.js +10 -2
  32. package/dist/config.js.map +1 -1
  33. package/dist/harness.d.ts +62 -1
  34. package/dist/harness.js +174 -12
  35. package/dist/harness.js.map +1 -1
  36. package/dist/paths.d.ts +5 -0
  37. package/dist/paths.js +21 -3
  38. package/dist/paths.js.map +1 -1
  39. package/dist/providers/builtin.d.ts +2 -0
  40. package/dist/providers/builtin.js +38 -24
  41. package/dist/providers/builtin.js.map +1 -1
  42. package/dist/providers/catalog.d.ts +5 -0
  43. package/dist/providers/catalog.js +32 -1
  44. package/dist/providers/catalog.js.map +1 -1
  45. package/dist/providers/catalog.json +241 -123
  46. package/dist/providers/discovery.js +17 -0
  47. package/dist/providers/discovery.js.map +1 -1
  48. package/dist/providers/models-dev.d.ts +89 -0
  49. package/dist/providers/models-dev.js +160 -0
  50. package/dist/providers/models-dev.js.map +1 -0
  51. package/dist/providers/models-dev.json +821 -0
  52. package/dist/providers/registry.d.ts +12 -0
  53. package/dist/providers/registry.js +33 -1
  54. package/dist/providers/registry.js.map +1 -1
  55. package/dist/providers/types.d.ts +21 -0
  56. package/dist/providers/types.js +16 -0
  57. package/dist/providers/types.js.map +1 -1
  58. package/dist/runtime-plugins/builtin/memory-migrate.d.ts +5 -21
  59. package/dist/runtime-plugins/builtin/memory-migrate.js +5 -125
  60. package/dist/runtime-plugins/builtin/memory-migrate.js.map +1 -1
  61. package/dist/runtime-plugins/builtin/memory.d.ts +3 -0
  62. package/dist/runtime-plugins/builtin/memory.js +12 -10
  63. package/dist/runtime-plugins/builtin/memory.js.map +1 -1
  64. package/dist/schedule/clock.d.ts +76 -0
  65. package/dist/schedule/clock.js +147 -0
  66. package/dist/schedule/clock.js.map +1 -0
  67. package/dist/schedule/cron.d.ts +9 -0
  68. package/dist/schedule/cron.js +18 -0
  69. package/dist/schedule/cron.js.map +1 -1
  70. package/dist/schedule/lock.d.ts +38 -0
  71. package/dist/schedule/lock.js +100 -0
  72. package/dist/schedule/lock.js.map +1 -0
  73. package/dist/schedule/runner.d.ts +67 -0
  74. package/dist/schedule/runner.js +100 -0
  75. package/dist/schedule/runner.js.map +1 -0
  76. package/dist/schedule/scheduler.d.ts +56 -15
  77. package/dist/schedule/scheduler.js +80 -107
  78. package/dist/schedule/scheduler.js.map +1 -1
  79. package/dist/storage/kv.js +3 -2
  80. package/dist/storage/kv.js.map +1 -1
  81. package/dist/storage/project.d.ts +26 -0
  82. package/dist/storage/project.js +74 -15
  83. package/dist/storage/project.js.map +1 -1
  84. package/dist/tools/builtin/routine.d.ts +31 -0
  85. package/dist/tools/builtin/routine.js +70 -0
  86. package/dist/tools/builtin/routine.js.map +1 -0
  87. package/dist/util/fs.d.ts +6 -0
  88. package/dist/util/fs.js +22 -0
  89. package/dist/util/fs.js.map +1 -0
  90. package/package.json +3 -3
@@ -85,6 +85,18 @@ export declare class ProviderRegistry {
85
85
  * `/models` payload can say a model reasons, never which tiers it takes.
86
86
  */
87
87
  private discovered;
88
+ /**
89
+ * Drop what a provider no longer lists.
90
+ *
91
+ * A listing is the provider saying what it serves today. A model that was
92
+ * in yesterday's listing and is not in today's has been withdrawn — on
93
+ * OpenRouter that is a model with no endpoints left — and offering it only
94
+ * lets someone pick a name that answers 404. An empty listing proves
95
+ * nothing, so it retires nothing. Only entries in the shape a listing
96
+ * writes, `<provider>/<model>`, are candidates: an entry someone named
97
+ * themselves was put there on purpose and is theirs to remove.
98
+ */
99
+ private retire;
88
100
  /**
89
101
  * Register a discovered spec, plus the bare alias that lets `/model kimi-k3`
90
102
  * work and not only `/model moonshot/kimi-k3`. First provider to claim a
@@ -150,10 +150,12 @@ export class ProviderRegistry {
150
150
  if (!provider.listModels)
151
151
  continue;
152
152
  try {
153
- for (const spec of await this.discovered(provider)) {
153
+ const specs = await this.discovered(provider);
154
+ for (const spec of specs) {
154
155
  this.adopt(spec);
155
156
  changed.push(spec);
156
157
  }
158
+ this.retire(provider.id, specs);
157
159
  }
158
160
  catch {
159
161
  // A provider that cannot enumerate its models is not fatal; the
@@ -193,6 +195,7 @@ export class ProviderRegistry {
193
195
  }
194
196
  for (const spec of specs)
195
197
  this.adopt(spec);
198
+ this.retire(provider.id, specs);
196
199
  return { status: "ok", models: specs };
197
200
  }
198
201
  /**
@@ -202,6 +205,35 @@ export class ProviderRegistry {
202
205
  async discovered(provider) {
203
206
  return refineReasoning(await provider.listModels(), this.catalogProviders);
204
207
  }
208
+ /**
209
+ * Drop what a provider no longer lists.
210
+ *
211
+ * A listing is the provider saying what it serves today. A model that was
212
+ * in yesterday's listing and is not in today's has been withdrawn — on
213
+ * OpenRouter that is a model with no endpoints left — and offering it only
214
+ * lets someone pick a name that answers 404. An empty listing proves
215
+ * nothing, so it retires nothing. Only entries in the shape a listing
216
+ * writes, `<provider>/<model>`, are candidates: an entry someone named
217
+ * themselves was put there on purpose and is theirs to remove.
218
+ */
219
+ retire(providerId, listed) {
220
+ if (!listed.length)
221
+ return;
222
+ const keep = new Set(listed.map((spec) => spec.id));
223
+ const gone = new Set();
224
+ for (const [id, model] of this.models) {
225
+ if (model.provider !== providerId || model.aliasOf || keep.has(id))
226
+ continue;
227
+ if (id !== `${model.provider}/${model.model}`)
228
+ continue;
229
+ this.models.delete(id);
230
+ gone.add(id);
231
+ }
232
+ for (const [id, model] of this.models) {
233
+ if (model.aliasOf && gone.has(model.aliasOf))
234
+ this.models.delete(id);
235
+ }
236
+ }
205
237
  /**
206
238
  * Register a discovered spec, plus the bare alias that lets `/model kimi-k3`
207
239
  * work and not only `/model moonshot/kimi-k3`. First provider to claim a
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,13 @@ export interface ModelSpec {
20
20
  /** The wire model id sent to the API. */
21
21
  model: string;
22
22
  displayName?: string;
23
+ /**
24
+ * When the model was released, in ms. From models.dev's release date where
25
+ * it knows the model, else the listing's `created` — which some vendors fill
26
+ * with the listing time or a constant, hence second place. Only ever used to
27
+ * order a list; nothing depends on it being exact.
28
+ */
29
+ releasedAt?: number;
23
30
  contextWindow: number;
24
31
  maxOutputTokens: number;
25
32
  supportsTools: boolean;
@@ -210,4 +217,18 @@ export interface ProviderCredentials {
210
217
  * or the API sees two conflicting credentials.
211
218
  */
212
219
  export declare function applyAuthHeaders(base: Record<string, string>, resolved: ResolvedAuth | undefined): Record<string, string>;
220
+ /**
221
+ * Confirmed free: both rates quoted, and both of them zero.
222
+ *
223
+ * `undefined === 0` is false, and that is the whole point. Three states live
224
+ * in these two fields — priced, free, and never quoted — and only the middle
225
+ * one is worth putting in front of somebody. Written as `!spec.costPer1MInput`
226
+ * this would fold the outer two into the middle and label every unpriced model
227
+ * free, which is the failure `priceFields` in discovery and `price` in builtin
228
+ * were each written to avoid at their own end.
229
+ *
230
+ * Both rates have to be zero. A model that charges for output alone is a real
231
+ * shape, and it is priced rather than free.
232
+ */
233
+ export declare function isFree(spec: ModelSpec): boolean;
213
234
  export declare function estimateCost(spec: ModelSpec, usage: Usage): number;
@@ -72,6 +72,22 @@ export function applyAuthHeaders(base, resolved) {
72
72
  }
73
73
  return merged;
74
74
  }
75
+ /**
76
+ * Confirmed free: both rates quoted, and both of them zero.
77
+ *
78
+ * `undefined === 0` is false, and that is the whole point. Three states live
79
+ * in these two fields — priced, free, and never quoted — and only the middle
80
+ * one is worth putting in front of somebody. Written as `!spec.costPer1MInput`
81
+ * this would fold the outer two into the middle and label every unpriced model
82
+ * free, which is the failure `priceFields` in discovery and `price` in builtin
83
+ * were each written to avoid at their own end.
84
+ *
85
+ * Both rates have to be zero. A model that charges for output alone is a real
86
+ * shape, and it is priced rather than free.
87
+ */
88
+ export function isFree(spec) {
89
+ return spec.costPer1MInput === 0 && spec.costPer1MOutput === 0;
90
+ }
75
91
  export function estimateCost(spec, usage) {
76
92
  const m = 1_000_000;
77
93
  const inTok = usage.inputTokens ?? 0;
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"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"}
@@ -1,35 +1,19 @@
1
1
  import type { Logger } from "../../util/logger.ts";
2
2
  /**
3
- * Where memory lives, and moving it there from where it used to.
4
- *
5
- * Notes used to sit in `<project>/.oharness/memory`, inside the repository
6
- * tree: one copy per clone and per worktree, one `git add .` away from being
7
- * committed for everyone, and gone with the folder. They now sit under the
8
- * user directory, keyed by the same project id that sessions and cloud sync
9
- * already use, so every clone of a repository shares one set.
3
+ * Project knowledge is a user-visible project asset. Machine-local indexes,
4
+ * sync baselines and backups stay under the user directory; the Markdown
5
+ * source itself lives at `<project>/MEMORY` and therefore moves and exports
6
+ * with the project.
10
7
  */
11
- /** Written into a project's notes directory once its old notes have been considered. */
12
- export declare const LEGACY_MARKER = ".imported-legacy.json";
13
8
  export interface MemoryDirectories {
14
9
  project: string;
15
10
  /** Absent when the user directory is not writable. */
16
11
  user?: string;
17
- /** Notes copied from the old location on this start. */
18
- migrated: number;
19
12
  }
20
- export declare function legacyMemoryDirectory(cwd: string): string;
13
+ export declare function projectMemoryDirectory(cwd: string): string;
21
14
  export declare function resolveMemoryDirectories(options: {
22
15
  cwd: string;
23
16
  /** A directory the user configured; used as is, with nothing migrated into it. */
24
17
  configured?: string;
25
18
  logger?: Logger;
26
19
  }): Promise<MemoryDirectories>;
27
- /**
28
- * Copy notes from the old directory into the new one, once.
29
- *
30
- * Only into an empty directory: merging two sets of notes is sync's job, with
31
- * its conflict handling, not a startup step's. The marker makes it once — a
32
- * note someone later deletes in the new place must not return from the old
33
- * one on the next launch. The old directory is left untouched.
34
- */
35
- export declare function importLegacyMemory(legacy: string, target: string): Promise<number>;
@@ -1,26 +1,10 @@
1
- import { constants } from "node:fs";
2
- import { copyFile, lstat, mkdir, readdir, stat, writeFile } from "node:fs/promises";
3
- import { createHash } from "node:crypto";
1
+ import { mkdir } from "node:fs/promises";
4
2
  import path from "node:path";
5
- import { readPluginFile, readUserFile, updateRuntimePluginConfig, writeUserFile } from "../../config-files.js";
6
3
  import { userPath } from "../../paths.js";
7
- import { projectId } from "../../storage/project.js";
8
- /**
9
- * Where memory lives, and moving it there from where it used to.
10
- *
11
- * Notes used to sit in `<project>/.oharness/memory`, inside the repository
12
- * tree: one copy per clone and per worktree, one `git add .` away from being
13
- * committed for everyone, and gone with the folder. They now sit under the
14
- * user directory, keyed by the same project id that sessions and cloud sync
15
- * already use, so every clone of a repository shares one set.
16
- */
17
- /** Written into a project's notes directory once its old notes have been considered. */
18
- export const LEGACY_MARKER = ".imported-legacy.json";
19
- export function legacyMemoryDirectory(cwd) {
20
- return path.join(cwd, ".oharness", "memory");
4
+ export function projectMemoryDirectory(cwd) {
5
+ return path.join(cwd, "MEMORY");
21
6
  }
22
7
  export async function resolveMemoryDirectories(options) {
23
- const legacy = legacyMemoryDirectory(options.cwd);
24
8
  let user = userPath("memory", "user");
25
9
  try {
26
10
  await mkdir(user, { recursive: true });
@@ -30,112 +14,8 @@ export async function resolveMemoryDirectories(options) {
30
14
  user = undefined;
31
15
  }
32
16
  if (options.configured) {
33
- return { project: path.resolve(options.cwd, options.configured), ...(user ? { user } : {}), migrated: 0 };
34
- }
35
- const target = userPath("memory", "projects", await projectId(options.cwd));
36
- try {
37
- await mkdir(target, { recursive: true });
38
- }
39
- catch (error) {
40
- // A container whose home is a read-only layer still has a project volume.
41
- options.logger?.warn("Memory stays in the project folder: the user directory is not writable", { error: String(error) });
42
- return { project: legacy, ...(user ? { user } : {}), migrated: 0 };
43
- }
44
- let migrated = 0;
45
- try {
46
- migrated = await importLegacyMemory(legacy, target);
47
- if (migrated)
48
- options.logger?.info("Moved memory notes into the user directory", { count: migrated, from: legacy, to: target });
49
- }
50
- catch (error) {
51
- options.logger?.warn("Could not import memory notes from the project folder", { error: String(error) });
52
- }
53
- return { project: target, ...(user ? { user } : {}), migrated };
54
- }
55
- /**
56
- * Copy notes from the old directory into the new one, once.
57
- *
58
- * Only into an empty directory: merging two sets of notes is sync's job, with
59
- * its conflict handling, not a startup step's. The marker makes it once — a
60
- * note someone later deletes in the new place must not return from the old
61
- * one on the next launch. The old directory is left untouched.
62
- */
63
- export async function importLegacyMemory(legacy, target) {
64
- const marker = path.join(target, LEGACY_MARKER);
65
- if (await exists(marker))
66
- return 0;
67
- let names;
68
- try {
69
- if ((await lstat(legacy)).isSymbolicLink())
70
- return 0;
71
- names = (await readdir(legacy)).filter((name) => name.endsWith(".md"));
72
- }
73
- catch {
74
- return 0;
75
- }
76
- if (!names.length)
77
- return 0;
78
- const existing = (await readdir(target)).filter((name) => name.endsWith(".md"));
79
- if (existing.length) {
80
- await writeFile(marker, JSON.stringify({ from: legacy, skipped: "target already had notes", at: Date.now() }) + "\n");
81
- return 0;
82
- }
83
- let copied = 0;
84
- for (const name of names) {
85
- const from = path.join(legacy, name);
86
- const info = await lstat(from);
87
- if (info.isSymbolicLink() || !info.isFile())
88
- continue;
89
- try {
90
- await copyFile(from, path.join(target, name), constants.COPYFILE_EXCL);
91
- copied++;
92
- }
93
- catch (error) {
94
- if (error.code !== "EEXIST")
95
- throw error;
96
- }
97
- }
98
- await carrySyncSettings(legacy, target);
99
- await writeFile(marker, JSON.stringify({ from: legacy, copied, at: Date.now() }) + "\n");
100
- return copied;
101
- }
102
- const digest = (value) => createHash("sha256").update(value).digest("hex");
103
- const object = (x) => !!x && typeof x === "object" && !Array.isArray(x);
104
- /**
105
- * Sync consent is keyed by directory. Without carrying it, a person who had
106
- * switched cloud sync off for the old directory would find it silently on for
107
- * the new one — the one outcome of a migration that cannot be undone, since
108
- * an upload cannot be recalled. The baseline goes with it, so the first sync
109
- * afterwards reconciles rather than treating every note as new.
110
- */
111
- async function carrySyncSettings(legacy, target) {
112
- const from = digest(path.resolve(legacy));
113
- const to = digest(path.resolve(target));
114
- const config = readPluginFile()?.runtimePlugins?.find((plugin) => plugin.id === "memory")?.config;
115
- const consent = object(config) && object(config.syncTargets) ? config.syncTargets[from] : undefined;
116
- if (!object(consent))
117
- return;
118
- await updateRuntimePluginConfig("memory", (current) => {
119
- const targets = object(current.syncTargets) ? current.syncTargets : {};
120
- if (targets[to])
121
- return current;
122
- return { ...current, syncTargets: { ...targets, [to]: consent } };
123
- });
124
- if (typeof consent.userId === "string" && consent.userId && typeof consent.origin === "string") {
125
- const oldState = `memory-sync/${digest(`${consent.origin}:${consent.userId}:${from}`)}.json`;
126
- const newState = `memory-sync/${digest(`${consent.origin}:${consent.userId}:${to}`)}.json`;
127
- const state = readUserFile(oldState);
128
- if (state && !readUserFile(newState))
129
- await writeUserFile(newState, state);
130
- }
131
- }
132
- async function exists(file) {
133
- try {
134
- await stat(file);
135
- return true;
136
- }
137
- catch {
138
- return false;
17
+ return { project: path.resolve(options.cwd, options.configured), ...(user ? { user } : {}) };
139
18
  }
19
+ return { project: projectMemoryDirectory(options.cwd), ...(user ? { user } : {}) };
140
20
  }
141
21
  //# sourceMappingURL=memory-migrate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory-migrate.js","sourceRoot":"","sources":["../../../src/runtime-plugins/builtin/memory-migrate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory-migrate.js","sourceRoot":"","sources":["../../../src/runtime-plugins/builtin/memory-migrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAgB1C,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,OAK9C;IACC,IAAI,IAAI,GAAuB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1D,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,mEAAmE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpH,IAAI,GAAG,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAC/F,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,sBAAsB,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACrF,CAAC"}
@@ -34,6 +34,8 @@ export interface PullSummary {
34
34
  interface Options {
35
35
  cwd: string;
36
36
  directory: string;
37
+ /** Stable logical identity for Home-side consent, baselines and statistics. */
38
+ stateKey?: string;
37
39
  /** Which notes this service holds. User-level notes belong to no project. */
38
40
  scope?: MemoryScope;
39
41
  policy?: MemoryPolicy;
@@ -55,6 +57,7 @@ interface Options {
55
57
  coordinator?: MemorySyncCoordinator;
56
58
  }
57
59
  export interface MemoryPluginOptions extends Omit<Options, "scope"> {
60
+ projectId: string;
58
61
  /** User-level notes directory. Omitted when it could not be created. */
59
62
  userDirectory?: string;
60
63
  /** One reply from the small model, for merge proposals. Without it merges are drafted by hand. */
@@ -86,9 +86,10 @@ export class MemoryService {
86
86
  const policy = options.policy ?? DEFAULT_MEMORY_POLICY;
87
87
  this.store = new MemoryStore(options.directory, {
88
88
  maxNotes: policy.maxNotes, maxNoteBytes: policy.maxNoteBytes, scope: this.scope,
89
+ ...(options.stateKey ? { stateKey: options.stateKey } : {}),
89
90
  ...(options.onWarning ? { onWarning: options.onWarning } : {}),
90
91
  });
91
- this.target = digest(path.resolve(options.directory));
92
+ this.target = digest(options.stateKey ?? path.resolve(options.directory));
92
93
  this.coordinator = options.coordinator ?? MemorySyncCoordinator.shared;
93
94
  this.syncTarget = {
94
95
  scope: this.scope,
@@ -856,13 +857,13 @@ export function acquireMemoryService(options) {
856
857
  },
857
858
  };
858
859
  }
859
- /** Recall counts per directory, shared for the same reason services are: one file, one writer. */
860
+ /** Recall counts per logical scope, shared so one Home-side file has one writer. */
860
861
  const sharedUsage = new Map();
861
- function usageFor(location) {
862
- const key = path.resolve(location);
862
+ function usageFor(stateKey) {
863
+ const key = stateKey;
863
864
  let usage = sharedUsage.get(key);
864
865
  if (!usage) {
865
- usage = new MemoryUsage(location);
866
+ usage = new MemoryUsage(stateKey);
866
867
  sharedUsage.set(key, usage);
867
868
  }
868
869
  return usage;
@@ -926,15 +927,16 @@ export function createMemoryPlugin(options, onReady) {
926
927
  setup(ctx) {
927
928
  const policy = options.policy ?? DEFAULT_MEMORY_POLICY;
928
929
  const warn = options.onWarning ?? ((message) => ctx.logger.warn(message));
929
- const projectLease = acquireMemoryService({ ...options, scope: "project", policy, onWarning: warn });
930
+ const projectStateKey = `project:${options.projectId}`;
931
+ const projectLease = acquireMemoryService({ ...options, stateKey: projectStateKey, scope: "project", policy, onWarning: warn });
930
932
  const userLease = options.userDirectory
931
- ? acquireMemoryService({ ...options, directory: options.userDirectory, scope: "user", policy, onWarning: warn })
933
+ ? acquireMemoryService({ ...options, stateKey: "user", directory: options.userDirectory, scope: "user", policy, onWarning: warn })
932
934
  : undefined;
933
935
  const project = projectLease.service, user = userLease?.service;
934
936
  onReady(project, user);
935
937
  const services = [project, ...(user ? [user] : [])];
936
938
  const stores = { project: project.store, ...(user ? { user: user.store } : {}) };
937
- const usage = { project: usageFor(project.store.location), ...(user ? { user: usageFor(user.store.location) } : {}) };
939
+ const usage = { project: usageFor(projectStateKey), ...(user ? { user: usageFor("user") } : {}) };
938
940
  let closing;
939
941
  const closeAll = () => closing ??= (async () => {
940
942
  await Promise.all([projectLease.release(), userLease?.release()]);
@@ -992,7 +994,7 @@ export function createMemoryPlugin(options, onReady) {
992
994
  };
993
995
  ctx.memory.register(provider);
994
996
  // --- consolidation -------------------------------------------------
995
- const reviewFile = `memory-review/${digest(`${project.store.location}\0${user?.store.location ?? ""}`)}.json`;
997
+ const reviewFile = `memory-review/${digest(`${projectStateKey}\0${user ? "user" : ""}`)}.json`;
996
998
  const readReview = () => { try {
997
999
  return readUserFile(reviewFile) ?? {};
998
1000
  }
@@ -1115,7 +1117,7 @@ export function createMemoryPlugin(options, onReady) {
1115
1117
  links: { out: links?.outgoing.get(entry.id) ?? [], in: links?.incoming.get(entry.id) ?? [], dangling: links?.dangling.get(entry.id) ?? [] },
1116
1118
  }));
1117
1119
  const synced = scoped.map((one) => one.lastSync);
1118
- const backups = await listBackups(50).catch(() => []);
1120
+ const backups = (await listBackups(50).catch(() => [])).filter((backup) => backup.scope === "user" || backup.projectId === options.projectId);
1119
1121
  const findings = await review().catch(() => []);
1120
1122
  const reviewState = readReview();
1121
1123
  return {