@oharness/engine 0.1.0 → 0.2.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 (90) hide show
  1. package/README.md +26 -0
  2. package/dist/agent/agent.d.ts +11 -0
  3. package/dist/agent/agent.js +30 -9
  4. package/dist/agent/agent.js.map +1 -1
  5. package/dist/agent/hooks.d.ts +2 -0
  6. package/dist/agent/hooks.js +11 -0
  7. package/dist/agent/hooks.js.map +1 -1
  8. package/dist/agent/memory.d.ts +10 -1
  9. package/dist/agent/memory.js +147 -49
  10. package/dist/agent/memory.js.map +1 -1
  11. package/dist/agent/permissions.js +21 -3
  12. package/dist/agent/permissions.js.map +1 -1
  13. package/dist/artifacts/publish.d.ts +2 -2
  14. package/dist/artifacts/publish.js +2 -2
  15. package/dist/auth/index.d.ts +1 -1
  16. package/dist/auth/index.js +1 -1
  17. package/dist/auth/index.js.map +1 -1
  18. package/dist/auth/manager.d.ts +14 -0
  19. package/dist/auth/manager.js +25 -5
  20. package/dist/auth/manager.js.map +1 -1
  21. package/dist/auth/providers/account.d.ts +10 -45
  22. package/dist/auth/providers/account.js +123 -233
  23. package/dist/auth/providers/account.js.map +1 -1
  24. package/dist/config-files.d.ts +27 -0
  25. package/dist/config-files.js +116 -0
  26. package/dist/config-files.js.map +1 -0
  27. package/dist/config.d.ts +5 -25
  28. package/dist/config.js +16 -2
  29. package/dist/config.js.map +1 -1
  30. package/dist/core/audit.d.ts +20 -0
  31. package/dist/core/audit.js +2 -0
  32. package/dist/core/audit.js.map +1 -0
  33. package/dist/harness.d.ts +35 -2
  34. package/dist/harness.js +162 -50
  35. package/dist/harness.js.map +1 -1
  36. package/dist/index.d.ts +1 -0
  37. package/dist/index.js +1 -0
  38. package/dist/index.js.map +1 -1
  39. package/dist/providers/registry.d.ts +42 -0
  40. package/dist/providers/registry.js +71 -9
  41. package/dist/providers/registry.js.map +1 -1
  42. package/dist/runtime-plugins/audit.d.ts +11 -0
  43. package/dist/runtime-plugins/audit.js +31 -0
  44. package/dist/runtime-plugins/audit.js.map +1 -0
  45. package/dist/runtime-plugins/builtin/jsonl-audit.d.ts +7 -0
  46. package/dist/runtime-plugins/builtin/jsonl-audit.js +24 -0
  47. package/dist/runtime-plugins/builtin/jsonl-audit.js.map +1 -0
  48. package/dist/runtime-plugins/builtin/memory.d.ts +70 -0
  49. package/dist/runtime-plugins/builtin/memory.js +360 -0
  50. package/dist/runtime-plugins/builtin/memory.js.map +1 -0
  51. package/dist/runtime-plugins/cloud-connector.d.ts +56 -0
  52. package/dist/runtime-plugins/cloud-connector.js +261 -0
  53. package/dist/runtime-plugins/cloud-connector.js.map +1 -0
  54. package/dist/runtime-plugins/composio/client.d.ts +65 -0
  55. package/dist/runtime-plugins/composio/client.js +190 -0
  56. package/dist/runtime-plugins/composio/client.js.map +1 -0
  57. package/dist/runtime-plugins/composio/index.d.ts +23 -0
  58. package/dist/runtime-plugins/composio/index.js +113 -0
  59. package/dist/runtime-plugins/composio/index.js.map +1 -0
  60. package/dist/runtime-plugins/connector.d.ts +15 -0
  61. package/dist/runtime-plugins/connector.js +17 -0
  62. package/dist/runtime-plugins/connector.js.map +1 -0
  63. package/dist/runtime-plugins/extensions.d.ts +21 -0
  64. package/dist/runtime-plugins/extensions.js +23 -0
  65. package/dist/runtime-plugins/extensions.js.map +1 -0
  66. package/dist/runtime-plugins/host.d.ts +34 -0
  67. package/dist/runtime-plugins/host.js +263 -0
  68. package/dist/runtime-plugins/host.js.map +1 -0
  69. package/dist/runtime-plugins/index.d.ts +12 -0
  70. package/dist/runtime-plugins/index.js +7 -0
  71. package/dist/runtime-plugins/index.js.map +1 -0
  72. package/dist/runtime-plugins/loader.d.ts +5 -0
  73. package/dist/runtime-plugins/loader.js +36 -0
  74. package/dist/runtime-plugins/loader.js.map +1 -0
  75. package/dist/runtime-plugins/tool-adapter.d.ts +3 -0
  76. package/dist/runtime-plugins/tool-adapter.js +13 -0
  77. package/dist/runtime-plugins/tool-adapter.js.map +1 -0
  78. package/dist/runtime-plugins/types.d.ts +81 -0
  79. package/dist/runtime-plugins/types.js +2 -0
  80. package/dist/runtime-plugins/types.js.map +1 -0
  81. package/dist/sync/settings.d.ts +2 -0
  82. package/dist/sync/settings.js +17 -1
  83. package/dist/sync/settings.js.map +1 -1
  84. package/dist/tools/registry.d.ts +2 -0
  85. package/dist/tools/registry.js +10 -0
  86. package/dist/tools/registry.js.map +1 -1
  87. package/dist/tools/types.d.ts +2 -0
  88. package/dist/tools/types.js.map +1 -1
  89. package/official.json +1 -2
  90. package/package.json +1 -1
package/README.md ADDED
@@ -0,0 +1,26 @@
1
+ # @oharness/engine
2
+
3
+ The agent loop, and everything a frontend does not decide: tool execution,
4
+ context compaction, permissions, sessions, MCP, and the provider adapters.
5
+
6
+ Model-agnostic by construction. Anthropic, OpenAI (including any
7
+ OpenAI-compatible endpoint) and Gemini are all reached over plain `fetch` with
8
+ hand-written SSE parsing — no vendor SDKs — and a conversation can change model
9
+ mid-session without its history being converted, because the history is never
10
+ stored in a vendor's shape to begin with.
11
+
12
+ ```bash
13
+ npm install @oharness/engine
14
+ ```
15
+
16
+ One runtime dependency: `zod`, for tool schemas. Node 22.6+.
17
+
18
+ ```ts
19
+ import { Harness } from "@oharness/engine";
20
+ ```
21
+
22
+ Frontends live in separate packages — [`oharness`](https://www.npmjs.com/package/oharness)
23
+ for the terminal, [`@oharness/server`](https://www.npmjs.com/package/@oharness/server)
24
+ for the browser. This package renders nothing.
25
+
26
+ Documentation and the full picture: https://github.com/Jet1217/OHarness
@@ -1,3 +1,4 @@
1
+ import type { RuntimeAuditEvent } from "../core/audit.ts";
1
2
  import type { Message, StopReason, Usage } from "../core/types.ts";
2
3
  import type { McpManager } from "../mcp/manager.ts";
3
4
  import type { ThinkingConfig } from "../providers/types.ts";
@@ -119,6 +120,8 @@ export interface AgentOptions {
119
120
  skills?: SkillRegistry;
120
121
  /** Durable notes carried between sessions. */
121
122
  memory?: MemoryStore;
123
+ /** Runtime-plugin prompt contributions, rebuilt once per run. */
124
+ promptSections?: () => Promise<string[]>;
122
125
  /** Called after the agent writes into a skills directory. */
123
126
  onSkillsChanged?: () => Promise<unknown>;
124
127
  /** Restricts where writes may land. A policy gate, not an OS sandbox. */
@@ -126,6 +129,12 @@ export interface AgentOptions {
126
129
  /** Enable provider prompt caching where the model supports it. */
127
130
  cache?: boolean;
128
131
  agentId?: string;
132
+ /** Host shutdown applies to existing agents and their descendants. */
133
+ lifecycleSignal?: AbortSignal;
134
+ /** Best-effort observation; never participates in permission decisions. */
135
+ onAudit?: (event: RuntimeAuditEvent) => void;
136
+ /** Internal host lifecycle accounting; inherited by subagents. */
137
+ onRunStart?: () => () => void;
129
138
  logger?: Logger;
130
139
  }
131
140
  /**
@@ -154,6 +163,7 @@ export declare class Agent implements ToolHost {
154
163
  private stopRequested?;
155
164
  /** Memory index for this run's system prompt. */
156
165
  private memoryIndex?;
166
+ private pluginSections;
157
167
  constructor(opts: AgentOptions);
158
168
  /**
159
169
  * Announce a model switch so a UI can render it and hooks can react.
@@ -170,6 +180,7 @@ export declare class Agent implements ToolHost {
170
180
  end(): Promise<void>;
171
181
  /** Cancel the in-flight turn. The loop exits with `stopReason: "aborted"`. */
172
182
  abort(): void;
183
+ private audit;
173
184
  get isRunning(): boolean;
174
185
  /**
175
186
  * Where the file tools are allowed to look. The policy lives here, so the
@@ -45,6 +45,7 @@ export class Agent {
45
45
  stopRequested;
46
46
  /** Memory index for this run's system prompt. */
47
47
  memoryIndex;
48
+ pluginSections = [];
48
49
  constructor(opts) {
49
50
  this.opts = opts;
50
51
  this.session = opts.session;
@@ -122,6 +123,14 @@ export class Agent {
122
123
  abort() {
123
124
  this.controller.abort();
124
125
  }
126
+ audit(event) {
127
+ try {
128
+ this.opts.onAudit?.(event);
129
+ }
130
+ catch {
131
+ this.logger.warn("audit observer failed");
132
+ }
133
+ }
125
134
  get isRunning() {
126
135
  return this.running;
127
136
  }
@@ -152,6 +161,9 @@ export class Agent {
152
161
  });
153
162
  for (const [key, value] of this.session.state)
154
163
  child.state.set(key, value);
164
+ child.permissions.onDecision((entry) => {
165
+ this.audit({ type: "permission", timestamp: Date.now(), sessionId: child.id, entry });
166
+ });
155
167
  const childAgent = new Agent({
156
168
  ...this.opts,
157
169
  session: child,
@@ -196,14 +208,15 @@ export class Agent {
196
208
  async *run(input, runOpts = {}) {
197
209
  this.running = true;
198
210
  this.controller = new AbortController();
199
- const external = runOpts.signal;
200
- if (external) {
201
- if (external.aborted)
202
- this.controller.abort();
203
- else
204
- external.addEventListener("abort", () => this.controller.abort(), { once: true });
205
- }
206
- const signal = this.controller.signal;
211
+ const signal = AbortSignal.any([
212
+ this.controller.signal,
213
+ ...(runOpts.signal ? [runOpts.signal] : []),
214
+ ...(this.opts.lifecycleSignal ? [this.opts.lifecycleSignal] : []),
215
+ ]);
216
+ if (this.opts.lifecycleSignal?.aborted) {
217
+ this.running = false;
218
+ throw new Error("Agent host is closed");
219
+ }
207
220
  // Fired once per session rather than per turn: hooks use it to seed
208
221
  // context or announce the session, which should not repeat every prompt.
209
222
  if (!this.sessionStarted) {
@@ -222,11 +235,13 @@ export class Agent {
222
235
  const maxTurns = this.opts.maxTurns ?? DEFAULT_MAX_TURNS;
223
236
  let stopReason = "end_turn";
224
237
  let turn = 0;
238
+ const finishRun = this.opts.onRunStart?.();
225
239
  try {
226
240
  await this.session.init();
227
241
  // Read once per run: the index is only rebuilt when the agent writes a
228
242
  // note, and re-reading the directory every turn would be wasteful.
229
243
  this.memoryIndex = await this.memory?.promptSection();
244
+ this.pluginSections = await this.opts.promptSections?.() ?? [];
230
245
  yield* this.ingestInput(input);
231
246
  while (turn < maxTurns) {
232
247
  if (signal.aborted) {
@@ -330,6 +345,7 @@ export class Agent {
330
345
  finally {
331
346
  this.running = false;
332
347
  await this.session.persist().catch(() => { });
348
+ finishRun?.();
333
349
  }
334
350
  yield {
335
351
  type: "done",
@@ -412,7 +428,7 @@ export class Agent {
412
428
  toolNames: this.tools.visible(this.opts.toolFilter).map((t) => t.name),
413
429
  // Only the descriptions — loading every skill body up front would
414
430
  // defeat the point of having them be loadable.
415
- extraSections: [this.skills.promptSection(), this.memoryIndex].filter((section) => section !== undefined),
431
+ extraSections: [this.skills.promptSection(), this.memoryIndex, ...this.pluginSections].filter((section) => section !== undefined),
416
432
  });
417
433
  }
418
434
  buildRequest(signal) {
@@ -646,6 +662,11 @@ export class Agent {
646
662
  }
647
663
  }
648
664
  const durationMs = Date.now() - started;
665
+ this.audit({
666
+ type: "tool_execution", timestamp: Date.now(), sessionId: this.session.id,
667
+ agentId: this.agentId, toolCallId: call.id, toolName: call.name,
668
+ pluginId: tool.pluginId, durationMs, isError: result.isError === true,
669
+ });
649
670
  yield { type: "tool_end", toolCallId: call.id, toolName: call.name, result, durationMs };
650
671
  // Read off the final result rather than captured at execute time, so a
651
672
  // PostToolUse hook that rewrites or suppresses the result suppresses the
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/agent/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/agent/agent.ts"],"names":[],"mappings":"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"}
@@ -66,6 +66,8 @@ export declare class HookRegistry {
66
66
  private readonly logger;
67
67
  constructor(logger?: Logger);
68
68
  on(event: HookEvent, handler: HookHandler): this;
69
+ /** A distinct subscription even when the same handler is installed twice. */
70
+ subscribe(event: HookEvent, handler: HookHandler): () => void;
69
71
  loadShellHooks(config: HookConfig): this;
70
72
  has(event: HookEvent): boolean;
71
73
  /**
@@ -24,6 +24,17 @@ export class HookRegistry {
24
24
  this.handlers.set(event, list);
25
25
  return this;
26
26
  }
27
+ /** A distinct subscription even when the same handler is installed twice. */
28
+ subscribe(event, handler) {
29
+ const subscription = (payload) => handler(payload);
30
+ this.on(event, subscription);
31
+ return () => {
32
+ const list = this.handlers.get(event);
33
+ const index = list?.indexOf(subscription) ?? -1;
34
+ if (index >= 0)
35
+ list.splice(index, 1);
36
+ };
37
+ }
27
38
  loadShellHooks(config) {
28
39
  for (const [event, hooks] of Object.entries(config)) {
29
40
  if (!hooks?.length)
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/agent/hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/agent/hooks.ts"],"names":[],"mappings":"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"}
@@ -18,11 +18,16 @@ export interface MemoryEntry {
18
18
  /** Free-form tags for retrieval. */
19
19
  tags: string[];
20
20
  createdAt: number;
21
+ updatedAt?: number;
21
22
  file: string;
22
23
  }
24
+ export type MemoryNote = Omit<MemoryEntry, "file">;
25
+ export declare const validMemoryId: (id: unknown) => id is string;
26
+ export declare function noteHash(note: MemoryNote | undefined): string | null;
27
+ export declare function memoryNote(entry: MemoryEntry): MemoryNote;
28
+ export declare function validateNote(note: MemoryNote): void;
23
29
  export declare class MemoryStore {
24
30
  private readonly dir;
25
- private cache?;
26
31
  constructor(dir: string);
27
32
  get location(): string;
28
33
  load(): Promise<MemoryEntry[]>;
@@ -32,6 +37,10 @@ export declare class MemoryStore {
32
37
  tags?: string[];
33
38
  }): Promise<MemoryEntry>;
34
39
  forget(id: string): Promise<boolean>;
40
+ /** Compare before applying downloaded data; never overwrite a concurrent edit. */
41
+ apply(id: string, note: MemoryNote | undefined, expected: string | null): Promise<void>;
42
+ private exclusive;
43
+ private atomic;
35
44
  /** Full-text search across summaries, bodies and tags. */
36
45
  search(query: string): Promise<MemoryEntry[]>;
37
46
  /**
@@ -1,12 +1,26 @@
1
- import { mkdir, readFile, readdir, writeFile } from "node:fs/promises";
1
+ import { mkdir, open, readdir, writeFile, rename, rm, lstat } from "node:fs/promises";
2
+ import { constants } from "node:fs";
3
+ import { createHash, randomUUID } from "node:crypto";
2
4
  import path from "node:path";
3
5
  import { shortId } from "../util/id.js";
4
6
  import { splitFrontmatter } from "./skills.js";
7
+ export const validMemoryId = (id) => typeof id === "string" && /^[a-zA-Z0-9_-]{1,128}$/.test(id) && !["__proto__", "constructor", "prototype"].includes(id);
8
+ export function noteHash(note) {
9
+ return note ? createHash("sha256").update(JSON.stringify([note.id, note.summary, note.body, note.tags, note.createdAt])).digest("hex") : null;
10
+ }
11
+ export function memoryNote(entry) { const { file: _, ...note } = entry; return note; }
12
+ export function validateNote(note) {
13
+ if (!validMemoryId(note.id) || typeof note.summary !== "string" || !note.summary.trim() || note.summary.length > 500 ||
14
+ /[\r\n]/.test(note.summary) || note.summary !== note.summary.trim() || typeof note.body !== "string" || note.body !== note.body.trim() || Buffer.byteLength(note.body) > 128 * 1024 ||
15
+ !Array.isArray(note.tags) || note.tags.length > 30 || note.tags.some((tag) => typeof tag !== "string" || !/^[^\s,\r\n]{1,64}$/.test(tag)) ||
16
+ !Number.isSafeInteger(note.createdAt) || note.createdAt < 0)
17
+ throw new Error("Invalid memory note");
18
+ }
19
+ const writes = new Map();
5
20
  /** How much of the memory index may enter the system prompt. */
6
21
  const MAX_PROMPT_CHARS = 4_000;
7
22
  export class MemoryStore {
8
23
  dir;
9
- cache;
10
24
  constructor(dir) {
11
25
  this.dir = dir;
12
26
  }
@@ -14,24 +28,42 @@ export class MemoryStore {
14
28
  return this.dir;
15
29
  }
16
30
  async load() {
17
- if (this.cache)
18
- return this.cache;
19
31
  let files;
20
32
  try {
33
+ for (const directory of [this.dir, path.dirname(this.dir)]) {
34
+ if ((await lstat(directory)).isSymbolicLink())
35
+ throw new Error("Memory directory cannot be a symlink");
36
+ }
21
37
  files = (await readdir(this.dir)).filter((name) => name.endsWith(".md"));
22
38
  }
23
- catch {
24
- this.cache = [];
25
- return this.cache;
39
+ catch (error) {
40
+ if (error.code === "ENOENT")
41
+ return [];
42
+ throw error;
26
43
  }
44
+ if (files.length > 500)
45
+ throw new Error("Memory limit: 500 notes per project");
27
46
  const entries = [];
28
47
  for (const name of files) {
29
48
  const file = path.join(this.dir, name);
30
49
  let raw;
50
+ const handle = await open(file, constants.O_RDONLY | constants.O_NOFOLLOW);
31
51
  try {
32
- raw = await readFile(file, "utf8");
52
+ const stat = await handle.stat();
53
+ if (!stat.isFile() || stat.size > 256 * 1024)
54
+ throw new Error("Invalid memory file");
55
+ raw = await handle.readFile("utf8");
33
56
  }
34
- catch {
57
+ finally {
58
+ await handle.close();
59
+ }
60
+ // New writes use JSON-flow YAML metadata so quotes, colons and tags round-trip.
61
+ // Keep the original scalar frontmatter reader for existing local notes.
62
+ const jsonHeader = /^\uFEFF?---\r?\n(\{[^\n]+\})\r?\n---\r?\n([\s\S]*)$/.exec(raw);
63
+ if (jsonHeader) {
64
+ const metadata = JSON.parse(jsonHeader[1]);
65
+ entries.push({ id: metadata.id, summary: metadata.summary, tags: metadata.tags,
66
+ createdAt: metadata.createdAt, updatedAt: metadata.updatedAt, body: jsonHeader[2].trim(), file });
35
67
  continue;
36
68
  }
37
69
  const { frontmatter, body } = splitFrontmatter(raw);
@@ -39,7 +71,7 @@ export class MemoryStore {
39
71
  // Without a summary the entry cannot appear in the index, and an entry
40
72
  // the model never sees is one it will never ask for.
41
73
  if (!summary)
42
- continue;
74
+ throw new Error("Memory note has no summary");
43
75
  entries.push({
44
76
  id: frontmatter["id"]?.trim() || name.replace(/\.md$/, ""),
45
77
  summary,
@@ -49,52 +81,98 @@ export class MemoryStore {
49
81
  .map((tag) => tag.trim())
50
82
  .filter((tag) => tag !== ""),
51
83
  createdAt: Number(frontmatter["createdAt"]) || 0,
84
+ updatedAt: Number(frontmatter["updatedAt"]) || 0,
52
85
  file,
53
86
  });
54
87
  }
55
88
  entries.sort((a, b) => b.createdAt - a.createdAt);
56
- this.cache = entries;
89
+ const seen = new Set();
90
+ for (const entry of entries) {
91
+ validateNote(entry);
92
+ if (seen.has(entry.id))
93
+ throw new Error("Duplicate memory id");
94
+ seen.add(entry.id);
95
+ }
57
96
  return entries;
58
97
  }
59
98
  async remember(input) {
60
- await mkdir(this.dir, { recursive: true });
61
- const existing = await this.load();
62
- // Re-learning the same lesson should update the note, not add a duplicate
63
- // that competes with it in the index.
64
- const match = existing.find((entry) => entry.summary.toLowerCase() === input.summary.trim().toLowerCase());
65
- const id = match?.id ?? `${slug(input.summary)}-${shortId(3)}`;
66
- const createdAt = match?.createdAt || Date.now();
67
- const file = match?.file ?? path.join(this.dir, `${id}.md`);
68
- const frontmatter = [
69
- "---",
70
- `id: ${id}`,
71
- `summary: ${input.summary.trim().replace(/\n/g, " ")}`,
72
- `tags: ${(input.tags ?? []).join(", ")}`,
73
- `createdAt: ${createdAt}`,
74
- `updatedAt: ${Date.now()}`,
75
- "---",
76
- "",
77
- ].join("\n");
78
- await writeFile(file, `${frontmatter}${input.body.trim()}\n`, "utf8");
79
- this.cache = undefined;
80
- return {
81
- id,
82
- summary: input.summary.trim(),
83
- body: input.body.trim(),
84
- tags: input.tags ?? [],
85
- createdAt,
86
- file,
87
- };
99
+ if (typeof input.summary !== "string" || typeof input.body !== "string" || input.tags !== undefined && !Array.isArray(input.tags))
100
+ throw new Error("Invalid memory note");
101
+ return this.exclusive(async () => {
102
+ await mkdir(this.dir, { recursive: true });
103
+ const existing = await this.load();
104
+ // Re-learning the same lesson should update the note, not add a duplicate
105
+ // that competes with it in the index.
106
+ const match = existing.find((entry) => entry.summary.toLowerCase() === input.summary.trim().toLowerCase());
107
+ const id = match?.id ?? `${slug(input.summary)}-${shortId(3)}`;
108
+ if (!match && existing.length >= 500)
109
+ throw new Error("Memory limit: 500 notes per project");
110
+ const createdAt = match?.createdAt || Date.now();
111
+ const file = match?.file ?? path.join(this.dir, `${id}.md`);
112
+ const note = { id, summary: input.summary.trim(), body: input.body.trim(), tags: input.tags ?? [], createdAt, updatedAt: Date.now() };
113
+ validateNote(note);
114
+ await this.atomic(file, encodeNote(note));
115
+ return {
116
+ id,
117
+ summary: input.summary.trim(),
118
+ body: input.body.trim(),
119
+ tags: input.tags ?? [],
120
+ createdAt,
121
+ file,
122
+ };
123
+ });
88
124
  }
89
125
  async forget(id) {
90
- const entries = await this.load();
91
- const match = entries.find((entry) => entry.id === id);
92
- if (!match)
93
- return false;
94
- const { rm } = await import("node:fs/promises");
95
- await rm(match.file, { force: true });
96
- this.cache = undefined;
97
- return true;
126
+ return this.exclusive(async () => {
127
+ const entries = await this.load();
128
+ const match = entries.find((entry) => entry.id === id);
129
+ if (!match)
130
+ return false;
131
+ await rm(match.file, { force: true });
132
+ return true;
133
+ });
134
+ }
135
+ /** Compare before applying downloaded data; never overwrite a concurrent edit. */
136
+ async apply(id, note, expected) {
137
+ if (!validMemoryId(id) || (note && note.id !== id))
138
+ throw new Error("Invalid memory id");
139
+ if (note)
140
+ validateNote(note);
141
+ await this.exclusive(async () => {
142
+ const entries = await this.load(), current = entries.find((entry) => entry.id === id);
143
+ if (note && !current && entries.length >= 500)
144
+ throw new Error("Memory limit: 500 notes per project");
145
+ if (noteHash(current) !== expected)
146
+ throw new Error("本地记忆已改变,请重新同步。");
147
+ const file = current?.file ?? path.join(this.dir, id + ".md");
148
+ if (!note) {
149
+ if (current)
150
+ await rm(file);
151
+ return;
152
+ }
153
+ await this.atomic(file, encodeNote(note));
154
+ });
155
+ }
156
+ exclusive(action) {
157
+ const key = path.resolve(this.dir), job = (writes.get(key) ?? Promise.resolve()).then(action);
158
+ const tail = job.catch(() => { });
159
+ writes.set(key, tail);
160
+ void tail.finally(() => { if (writes.get(key) === tail)
161
+ writes.delete(key); });
162
+ return job;
163
+ }
164
+ async atomic(file, raw) {
165
+ await mkdir(this.dir, { recursive: true });
166
+ if ((await lstat(this.dir)).isSymbolicLink())
167
+ throw new Error("Memory directory cannot be a symlink");
168
+ const temp = path.join(this.dir, "." + randomUUID() + ".tmp");
169
+ try {
170
+ await writeFile(temp, raw, { mode: 0o600, flag: "wx" });
171
+ await rename(temp, file);
172
+ }
173
+ finally {
174
+ await rm(temp, { force: true });
175
+ }
98
176
  }
99
177
  /** Full-text search across summaries, bodies and tags. */
100
178
  async search(query) {
@@ -111,9 +189,25 @@ export class MemoryStore {
111
189
  * a summary, then asks for the body if it matters.
112
190
  */
113
191
  async promptSection() {
114
- const entries = await this.load();
115
- if (entries.length === 0)
192
+ const loaded = await this.load();
193
+ if (loaded.length === 0)
116
194
  return undefined;
195
+ /*
196
+ * Most recently touched first, which is not the order the notes are stored
197
+ * in.
198
+ *
199
+ * The budget below drops whatever does not fit, so this line decides which
200
+ * notes stop being visible once there are more than about fifty. Ordered by
201
+ * creation — the order load() returns, and the right one for a list someone
202
+ * is reading — the first to fall out is the oldest note, whether or not it
203
+ * is the one being re-learned every week. A note written a year ago and
204
+ * corrected on Tuesday is the more useful of the two, and updatedAt is the
205
+ * only thing here that knows that.
206
+ *
207
+ * Nothing is lost, only unlisted: the line at the end says how many, and
208
+ * the tool searches every note whether or not it is in the index.
209
+ */
210
+ const entries = [...loaded].sort((a, b) => (b.updatedAt ?? b.createdAt) - (a.updatedAt ?? a.createdAt));
117
211
  const lines = [
118
212
  "## Memory",
119
213
  "",
@@ -137,6 +231,10 @@ export class MemoryStore {
137
231
  return lines.join("\n");
138
232
  }
139
233
  }
234
+ function encodeNote(note) {
235
+ const metadata = { id: note.id, summary: note.summary, tags: note.tags, createdAt: note.createdAt, updatedAt: note.updatedAt ?? Date.now() };
236
+ return "---\n" + JSON.stringify(metadata) + "\n---\n" + note.body + "\n";
237
+ }
140
238
  function slug(value) {
141
239
  return (value
142
240
  .toLowerCase()