@chendpoc/pi-memory 0.1.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 (177) hide show
  1. package/README.md +180 -0
  2. package/dist/adapters/piComplete.d.ts +17 -0
  3. package/dist/adapters/piComplete.d.ts.map +1 -0
  4. package/dist/adapters/piComplete.js +169 -0
  5. package/dist/adapters/piComplete.js.map +1 -0
  6. package/dist/bundle/install.d.ts +34 -0
  7. package/dist/bundle/install.d.ts.map +1 -0
  8. package/dist/bundle/install.js +183 -0
  9. package/dist/bundle/install.js.map +1 -0
  10. package/dist/cli.d.ts +3 -0
  11. package/dist/cli.d.ts.map +1 -0
  12. package/dist/cli.js +245 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/config.d.ts +27 -0
  15. package/dist/config.d.ts.map +1 -0
  16. package/dist/config.js +49 -0
  17. package/dist/config.js.map +1 -0
  18. package/dist/errclass.d.ts +7 -0
  19. package/dist/errclass.d.ts.map +1 -0
  20. package/dist/errclass.js +32 -0
  21. package/dist/errclass.js.map +1 -0
  22. package/dist/extension.d.ts +24 -0
  23. package/dist/extension.d.ts.map +1 -0
  24. package/dist/extension.js +7 -0
  25. package/dist/extension.js.map +1 -0
  26. package/dist/fallback/index.d.ts +11 -0
  27. package/dist/fallback/index.d.ts.map +1 -0
  28. package/dist/fallback/index.js +16 -0
  29. package/dist/fallback/index.js.map +1 -0
  30. package/dist/fallback/llmRerank.d.ts +19 -0
  31. package/dist/fallback/llmRerank.d.ts.map +1 -0
  32. package/dist/fallback/llmRerank.js +60 -0
  33. package/dist/fallback/llmRerank.js.map +1 -0
  34. package/dist/fallback/memoryMd.d.ts +6 -0
  35. package/dist/fallback/memoryMd.d.ts.map +1 -0
  36. package/dist/fallback/memoryMd.js +35 -0
  37. package/dist/fallback/memoryMd.js.map +1 -0
  38. package/dist/fallback/sessionIndex.d.ts +35 -0
  39. package/dist/fallback/sessionIndex.d.ts.map +1 -0
  40. package/dist/fallback/sessionIndex.js +222 -0
  41. package/dist/fallback/sessionIndex.js.map +1 -0
  42. package/dist/fallback/sessionSearch.d.ts +18 -0
  43. package/dist/fallback/sessionSearch.d.ts.map +1 -0
  44. package/dist/fallback/sessionSearch.js +161 -0
  45. package/dist/fallback/sessionSearch.js.map +1 -0
  46. package/dist/index.d.ts +25 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +24 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/paths.d.ts +7 -0
  51. package/dist/paths.d.ts.map +1 -0
  52. package/dist/paths.js +26 -0
  53. package/dist/paths.js.map +1 -0
  54. package/dist/pi-extension.d.ts +6 -0
  55. package/dist/pi-extension.d.ts.map +1 -0
  56. package/dist/pi-extension.js +224 -0
  57. package/dist/pi-extension.js.map +1 -0
  58. package/dist/preflight/detectIntents.d.ts +102 -0
  59. package/dist/preflight/detectIntents.d.ts.map +1 -0
  60. package/dist/preflight/detectIntents.js +624 -0
  61. package/dist/preflight/detectIntents.js.map +1 -0
  62. package/dist/preflight/hook.d.ts +58 -0
  63. package/dist/preflight/hook.d.ts.map +1 -0
  64. package/dist/preflight/hook.js +77 -0
  65. package/dist/preflight/hook.js.map +1 -0
  66. package/dist/preflight/render.d.ts +21 -0
  67. package/dist/preflight/render.d.ts.map +1 -0
  68. package/dist/preflight/render.js +132 -0
  69. package/dist/preflight/render.js.map +1 -0
  70. package/dist/preflight/strip.d.ts +11 -0
  71. package/dist/preflight/strip.d.ts.map +1 -0
  72. package/dist/preflight/strip.js +46 -0
  73. package/dist/preflight/strip.js.map +1 -0
  74. package/dist/service.d.ts +56 -0
  75. package/dist/service.d.ts.map +1 -0
  76. package/dist/service.js +158 -0
  77. package/dist/service.js.map +1 -0
  78. package/dist/sidecar/bundle.d.ts +19 -0
  79. package/dist/sidecar/bundle.d.ts.map +1 -0
  80. package/dist/sidecar/bundle.js +39 -0
  81. package/dist/sidecar/bundle.js.map +1 -0
  82. package/dist/sidecar/client.d.ts +17 -0
  83. package/dist/sidecar/client.d.ts.map +1 -0
  84. package/dist/sidecar/client.js +107 -0
  85. package/dist/sidecar/client.js.map +1 -0
  86. package/dist/sidecar/process.d.ts +14 -0
  87. package/dist/sidecar/process.d.ts.map +1 -0
  88. package/dist/sidecar/process.js +126 -0
  89. package/dist/sidecar/process.js.map +1 -0
  90. package/dist/tools/memoryAppend.d.ts +37 -0
  91. package/dist/tools/memoryAppend.d.ts.map +1 -0
  92. package/dist/tools/memoryAppend.js +99 -0
  93. package/dist/tools/memoryAppend.js.map +1 -0
  94. package/dist/tools/memoryRecall.d.ts +113 -0
  95. package/dist/tools/memoryRecall.d.ts.map +1 -0
  96. package/dist/tools/memoryRecall.js +325 -0
  97. package/dist/tools/memoryRecall.js.map +1 -0
  98. package/dist/trainer/bundleBuilder.d.ts +30 -0
  99. package/dist/trainer/bundleBuilder.d.ts.map +1 -0
  100. package/dist/trainer/bundleBuilder.js +106 -0
  101. package/dist/trainer/bundleBuilder.js.map +1 -0
  102. package/dist/trainer/bundleLoader.d.ts +12 -0
  103. package/dist/trainer/bundleLoader.d.ts.map +1 -0
  104. package/dist/trainer/bundleLoader.js +59 -0
  105. package/dist/trainer/bundleLoader.js.map +1 -0
  106. package/dist/trainer/deltaMerge.d.ts +38 -0
  107. package/dist/trainer/deltaMerge.d.ts.map +1 -0
  108. package/dist/trainer/deltaMerge.js +183 -0
  109. package/dist/trainer/deltaMerge.js.map +1 -0
  110. package/dist/trainer/entityResolver.d.ts +27 -0
  111. package/dist/trainer/entityResolver.d.ts.map +1 -0
  112. package/dist/trainer/entityResolver.js +92 -0
  113. package/dist/trainer/entityResolver.js.map +1 -0
  114. package/dist/trainer/extractFacts.d.ts +67 -0
  115. package/dist/trainer/extractFacts.d.ts.map +1 -0
  116. package/dist/trainer/extractFacts.js +213 -0
  117. package/dist/trainer/extractFacts.js.map +1 -0
  118. package/dist/trainer/index.d.ts +54 -0
  119. package/dist/trainer/index.d.ts.map +1 -0
  120. package/dist/trainer/index.js +82 -0
  121. package/dist/trainer/index.js.map +1 -0
  122. package/dist/trainer/llmExtractor.d.ts +16 -0
  123. package/dist/trainer/llmExtractor.d.ts.map +1 -0
  124. package/dist/trainer/llmExtractor.js +146 -0
  125. package/dist/trainer/llmExtractor.js.map +1 -0
  126. package/dist/trainer/marker.d.ts +10 -0
  127. package/dist/trainer/marker.d.ts.map +1 -0
  128. package/dist/trainer/marker.js +28 -0
  129. package/dist/trainer/marker.js.map +1 -0
  130. package/dist/trainer/scheduler.d.ts +31 -0
  131. package/dist/trainer/scheduler.d.ts.map +1 -0
  132. package/dist/trainer/scheduler.js +72 -0
  133. package/dist/trainer/scheduler.js.map +1 -0
  134. package/dist/trainer/sessionLoader.d.ts +23 -0
  135. package/dist/trainer/sessionLoader.d.ts.map +1 -0
  136. package/dist/trainer/sessionLoader.js +106 -0
  137. package/dist/trainer/sessionLoader.js.map +1 -0
  138. package/dist/types.d.ts +135 -0
  139. package/dist/types.d.ts.map +1 -0
  140. package/dist/types.js +8 -0
  141. package/dist/types.js.map +1 -0
  142. package/package.json +78 -0
  143. package/src/adapters/piComplete.ts +233 -0
  144. package/src/bundle/install.ts +206 -0
  145. package/src/cli.ts +254 -0
  146. package/src/config.ts +92 -0
  147. package/src/errclass.ts +37 -0
  148. package/src/extension.ts +23 -0
  149. package/src/fallback/index.ts +24 -0
  150. package/src/fallback/llmRerank.ts +90 -0
  151. package/src/fallback/memoryMd.ts +36 -0
  152. package/src/fallback/sessionIndex.ts +289 -0
  153. package/src/fallback/sessionSearch.ts +181 -0
  154. package/src/index.ts +213 -0
  155. package/src/paths.ts +28 -0
  156. package/src/pi-extension.ts +276 -0
  157. package/src/preflight/detectIntents.ts +654 -0
  158. package/src/preflight/hook.ts +136 -0
  159. package/src/preflight/render.ts +185 -0
  160. package/src/preflight/strip.ts +50 -0
  161. package/src/service.ts +202 -0
  162. package/src/sidecar/bundle.ts +52 -0
  163. package/src/sidecar/client.ts +166 -0
  164. package/src/sidecar/process.ts +145 -0
  165. package/src/tools/memoryAppend.ts +113 -0
  166. package/src/tools/memoryRecall.ts +364 -0
  167. package/src/trainer/bundleBuilder.ts +192 -0
  168. package/src/trainer/bundleLoader.ts +105 -0
  169. package/src/trainer/deltaMerge.ts +221 -0
  170. package/src/trainer/entityResolver.ts +140 -0
  171. package/src/trainer/extractFacts.ts +312 -0
  172. package/src/trainer/index.ts +147 -0
  173. package/src/trainer/llmExtractor.ts +206 -0
  174. package/src/trainer/marker.ts +30 -0
  175. package/src/trainer/scheduler.ts +104 -0
  176. package/src/trainer/sessionLoader.ts +139 -0
  177. package/src/types.ts +168 -0
@@ -0,0 +1,107 @@
1
+ import { randomBytes } from "node:crypto";
2
+ import http from "node:http";
3
+ import { classifyHTTP, classifyTransportError, ErrTransport, } from "../errclass.js";
4
+ function requestId() {
5
+ return `req-${randomBytes(6).toString("hex")}`;
6
+ }
7
+ export class SidecarClient {
8
+ socketPath;
9
+ timeoutMs;
10
+ constructor(socketPath, timeoutMs) {
11
+ this.socketPath = socketPath;
12
+ this.timeoutMs = timeoutMs;
13
+ }
14
+ async health(signal) {
15
+ return this.do("GET", "/health", undefined, signal);
16
+ }
17
+ async query(intent, signal) {
18
+ const rid = requestId();
19
+ const body = { intent, request_id: rid };
20
+ try {
21
+ const { status, data } = await this.doRaw("POST", "/query", body, signal, rid);
22
+ return {
23
+ env: data,
24
+ errorClass: classifyHTTP(status, data),
25
+ };
26
+ }
27
+ catch (err) {
28
+ if (err instanceof Error && err.message.includes("transport")) {
29
+ return {
30
+ env: null,
31
+ errorClass: classifyTransportError(err),
32
+ transportError: err,
33
+ };
34
+ }
35
+ return {
36
+ env: null,
37
+ errorClass: "unavailable",
38
+ transportError: err instanceof Error ? err : new Error(String(err)),
39
+ };
40
+ }
41
+ }
42
+ async reload(signal) {
43
+ return this.do("POST", "/bundle/reload", {}, signal);
44
+ }
45
+ async do(method, path, body, signal, requestIdHeader) {
46
+ const { data } = await this.doRaw(method, path, body, signal, requestIdHeader);
47
+ return data;
48
+ }
49
+ doRaw(method, path, body, signal, requestIdHeader) {
50
+ return new Promise((resolve, reject) => {
51
+ const payload = body != null ? JSON.stringify(body) : undefined;
52
+ const req = http.request({
53
+ socketPath: this.socketPath,
54
+ path,
55
+ method,
56
+ headers: {
57
+ "X-Request-ID": requestIdHeader ?? requestId(),
58
+ ...(payload
59
+ ? {
60
+ "Content-Type": "application/json",
61
+ "Content-Length": Buffer.byteLength(payload),
62
+ }
63
+ : {}),
64
+ },
65
+ timeout: this.timeoutMs,
66
+ }, (res) => {
67
+ const chunks = [];
68
+ res.on("data", (c) => chunks.push(c));
69
+ res.on("end", () => {
70
+ const text = Buffer.concat(chunks).toString("utf8");
71
+ if (!text) {
72
+ reject(new Error(`${ErrTransport.message}: empty body`));
73
+ return;
74
+ }
75
+ try {
76
+ resolve({
77
+ status: res.statusCode ?? 0,
78
+ data: JSON.parse(text),
79
+ });
80
+ }
81
+ catch (e) {
82
+ reject(new Error(`${ErrTransport.message}: decode: ${e instanceof Error ? e.message : e}`));
83
+ }
84
+ });
85
+ });
86
+ req.on("timeout", () => {
87
+ req.destroy(new Error(`${ErrTransport.message}: timeout`));
88
+ });
89
+ req.on("error", (err) => {
90
+ reject(new Error(`${ErrTransport.message}: ${err.message}`));
91
+ });
92
+ if (signal) {
93
+ if (signal.aborted) {
94
+ req.destroy(new Error(`${ErrTransport.message}: aborted`));
95
+ return;
96
+ }
97
+ signal.addEventListener("abort", () => {
98
+ req.destroy(new Error(`${ErrTransport.message}: aborted`));
99
+ }, { once: true });
100
+ }
101
+ if (payload)
102
+ req.write(payload);
103
+ req.end();
104
+ });
105
+ }
106
+ }
107
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/sidecar/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { MemoryConfig } from "../config.js";
2
+ import { SidecarClient } from "./client.js";
3
+ export declare class SidecarProcess {
4
+ private readonly cfg;
5
+ private child;
6
+ private readonly client;
7
+ constructor(cfg: MemoryConfig);
8
+ getClient(): SidecarClient;
9
+ resolveBinary(): Promise<string>;
10
+ spawn(): Promise<void>;
11
+ waitReady(signal?: AbortSignal): Promise<void>;
12
+ stop(): Promise<void>;
13
+ }
14
+ //# sourceMappingURL=process.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/sidecar/process.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,qBAAa,cAAc;IAIb,OAAO,CAAC,QAAQ,CAAC,GAAG;IAHhC,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;gBAEV,GAAG,EAAE,YAAY;IAO9C,SAAS,IAAI,aAAa;IAIpB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAUhC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAiCtB,SAAS,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAiC9C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CA2B5B"}
@@ -0,0 +1,126 @@
1
+ import { access, constants } from "node:fs/promises";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { spawn } from "node:child_process";
5
+ import { SidecarClient } from "./client.js";
6
+ export class SidecarProcess {
7
+ cfg;
8
+ child = null;
9
+ client;
10
+ constructor(cfg) {
11
+ this.cfg = cfg;
12
+ this.client = new SidecarClient(cfg.socketPath, Math.min(cfg.clientRequestTimeoutMs, 5_000));
13
+ }
14
+ getClient() {
15
+ return this.client;
16
+ }
17
+ async resolveBinary() {
18
+ const bin = this.cfg.tlmPath;
19
+ if (path.isAbsolute(bin)) {
20
+ await access(bin, constants.X_OK);
21
+ return bin;
22
+ }
23
+ // PATH lookup: spawn with shell on unix
24
+ return bin;
25
+ }
26
+ async spawn() {
27
+ const bin = await this.resolveBinary().catch(() => {
28
+ throw new Error("memory: tlm binary not found");
29
+ });
30
+ if (this.cfg.socketPath) {
31
+ try {
32
+ fs.unlinkSync(this.cfg.socketPath);
33
+ }
34
+ catch {
35
+ /* absent */
36
+ }
37
+ }
38
+ const args = [
39
+ "serve",
40
+ "--socket",
41
+ this.cfg.socketPath,
42
+ "--bundle-root",
43
+ this.cfg.bundleRoot,
44
+ ];
45
+ this.child = spawn(bin, args, {
46
+ stdio: "ignore",
47
+ detached: process.platform !== "win32",
48
+ });
49
+ this.child.on("error", (err) => {
50
+ console.error("[pi-memory] sidecar spawn error:", err.message);
51
+ });
52
+ this.child.unref?.();
53
+ }
54
+ async waitReady(signal) {
55
+ const deadline = Date.now() + this.cfg.sidecarReadyTimeoutMs;
56
+ let lastCompat = "";
57
+ let lastSub = "";
58
+ while (Date.now() < deadline) {
59
+ if (signal?.aborted)
60
+ throw signal.reason ?? new Error("aborted");
61
+ try {
62
+ const h = await this.client.health(signal);
63
+ lastCompat = h.compatibility ?? "";
64
+ lastSub = h.error ? String(h.error.details?.sub_code ?? "") : "";
65
+ if (h.ready === true)
66
+ return;
67
+ if (h.compatibility === "unknown")
68
+ return;
69
+ if (h.compatibility === "incompatible") {
70
+ // keep polling until ceiling — supervisor classifies schema mismatch
71
+ }
72
+ }
73
+ catch {
74
+ /* sidecar still starting */
75
+ }
76
+ await sleep(500, signal);
77
+ }
78
+ throw new Error(`memory: sidecar ready ceiling exceeded` +
79
+ (lastCompat === "incompatible" && lastSub
80
+ ? ` (incompatible: ${lastSub})`
81
+ : ""));
82
+ }
83
+ async stop() {
84
+ const child = this.child;
85
+ this.child = null;
86
+ if (!child?.pid)
87
+ return;
88
+ if (process.platform === "win32") {
89
+ spawn("taskkill", ["/pid", String(child.pid), "/t", "/f"]);
90
+ }
91
+ else {
92
+ try {
93
+ process.kill(-child.pid, "SIGTERM");
94
+ }
95
+ catch {
96
+ try {
97
+ child.kill("SIGTERM");
98
+ }
99
+ catch {
100
+ /* already dead */
101
+ }
102
+ }
103
+ }
104
+ await new Promise((resolve) => {
105
+ const t = setTimeout(resolve, 2_000);
106
+ child.on("exit", () => {
107
+ clearTimeout(t);
108
+ resolve();
109
+ });
110
+ });
111
+ }
112
+ }
113
+ function sleep(ms, signal) {
114
+ return new Promise((resolve, reject) => {
115
+ if (signal?.aborted) {
116
+ reject(signal.reason ?? new Error("aborted"));
117
+ return;
118
+ }
119
+ const t = setTimeout(resolve, ms);
120
+ signal?.addEventListener("abort", () => {
121
+ clearTimeout(t);
122
+ reject(signal.reason ?? new Error("aborted"));
123
+ }, { once: true });
124
+ });
125
+ }
126
+ //# sourceMappingURL=process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/sidecar/process.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { ToolResult } from "../types.js";
2
+ export declare const MEMORY_APPEND_NAME = "memory_append";
3
+ export declare const MEMORY_APPEND_DESCRIPTION: string;
4
+ export declare const MEMORY_APPEND_PROMPT_SNIPPET = "Append durable notes to MEMORY.md";
5
+ export declare const MEMORY_APPEND_PROMPT_GUIDELINES: readonly ["Use memory_append to persist user preferences or facts the user explicitly asked to remember — not for transient task state."];
6
+ export declare const MEMORY_APPEND_PARAMETERS: {
7
+ readonly type: "object";
8
+ readonly properties: {
9
+ readonly content: {
10
+ readonly type: "string";
11
+ readonly description: "New entries to append (markdown bullet points). Write in English by default.";
12
+ };
13
+ };
14
+ readonly required: readonly ["content"];
15
+ };
16
+ export declare function appendToMemoryMd(memoryMdPath: string, content: string): Promise<void>;
17
+ export declare class MemoryAppendTool {
18
+ private readonly memoryMdPath;
19
+ constructor(memoryMdPath: string);
20
+ info(): {
21
+ name: string;
22
+ description: string;
23
+ parameters: {
24
+ readonly type: "object";
25
+ readonly properties: {
26
+ readonly content: {
27
+ readonly type: "string";
28
+ readonly description: "New entries to append (markdown bullet points). Write in English by default.";
29
+ };
30
+ };
31
+ readonly required: readonly ["content"];
32
+ };
33
+ };
34
+ run(argsJson: string): Promise<ToolResult>;
35
+ }
36
+ export declare function createMemoryAppendTool(memoryMdPath: string): MemoryAppendTool;
37
+ //# sourceMappingURL=memoryAppend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memoryAppend.d.ts","sourceRoot":"","sources":["../../src/tools/memoryAppend.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,eAAO,MAAM,kBAAkB,kBAAkB,CAAC;AAElD,eAAO,MAAM,yBAAyB,QAEoC,CAAC;AAE3E,eAAO,MAAM,4BAA4B,sCAAsC,CAAC;AAEhF,eAAO,MAAM,+BAA+B,2IAElC,CAAC;AAEX,eAAO,MAAM,wBAAwB;;;;;;;;;CAU3B,CAAC;AA6BX,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAWf;AAED,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAAZ,YAAY,EAAE,MAAM;IAEjD,IAAI;;;;;;;;;;;;;;IAQE,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;CAwBjD;AAED,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,gBAAgB,CAE7E"}
@@ -0,0 +1,99 @@
1
+ import fs from "node:fs/promises";
2
+ import { open } from "node:fs/promises";
3
+ import path from "node:path";
4
+ export const MEMORY_APPEND_NAME = "memory_append";
5
+ export const MEMORY_APPEND_DESCRIPTION = "Append new entries to MEMORY.md. Use this instead of file_write or file_edit for memory updates. " +
6
+ "Writes are append-only with a simple lock to avoid concurrent clobber.";
7
+ export const MEMORY_APPEND_PROMPT_SNIPPET = "Append durable notes to MEMORY.md";
8
+ export const MEMORY_APPEND_PROMPT_GUIDELINES = [
9
+ "Use memory_append to persist user preferences or facts the user explicitly asked to remember — not for transient task state.",
10
+ ];
11
+ export const MEMORY_APPEND_PARAMETERS = {
12
+ type: "object",
13
+ properties: {
14
+ content: {
15
+ type: "string",
16
+ description: "New entries to append (markdown bullet points). Write in English by default.",
17
+ },
18
+ },
19
+ required: ["content"],
20
+ };
21
+ const LOCK_RETRIES = 50;
22
+ const LOCK_DELAY_MS = 20;
23
+ async function withAppendLock(lockPath, fn) {
24
+ let handle;
25
+ for (let i = 0; i < LOCK_RETRIES; i++) {
26
+ try {
27
+ handle = await open(lockPath, "wx");
28
+ break;
29
+ }
30
+ catch {
31
+ await new Promise((r) => setTimeout(r, LOCK_DELAY_MS));
32
+ }
33
+ }
34
+ if (!handle) {
35
+ throw new Error("could not acquire MEMORY.md append lock");
36
+ }
37
+ try {
38
+ return await fn();
39
+ }
40
+ finally {
41
+ await handle.close();
42
+ await fs.unlink(lockPath).catch(() => { });
43
+ }
44
+ }
45
+ export async function appendToMemoryMd(memoryMdPath, content) {
46
+ const trimmed = content.trim();
47
+ if (!trimmed) {
48
+ throw new Error("content must not be empty");
49
+ }
50
+ await fs.mkdir(path.dirname(memoryMdPath), { recursive: true, mode: 0o700 });
51
+ const lockPath = `${memoryMdPath}.append.lock`;
52
+ const block = content.endsWith("\n") ? content : `${content}\n`;
53
+ await withAppendLock(lockPath, async () => {
54
+ await fs.appendFile(memoryMdPath, block, { encoding: "utf8", mode: 0o600 });
55
+ });
56
+ }
57
+ export class MemoryAppendTool {
58
+ memoryMdPath;
59
+ constructor(memoryMdPath) {
60
+ this.memoryMdPath = memoryMdPath;
61
+ }
62
+ info() {
63
+ return {
64
+ name: MEMORY_APPEND_NAME,
65
+ description: MEMORY_APPEND_DESCRIPTION,
66
+ parameters: MEMORY_APPEND_PARAMETERS,
67
+ };
68
+ }
69
+ async run(argsJson) {
70
+ let raw;
71
+ try {
72
+ raw = JSON.parse(argsJson);
73
+ }
74
+ catch (e) {
75
+ return {
76
+ content: `invalid arguments: ${e instanceof Error ? e.message : e}`,
77
+ isError: true,
78
+ };
79
+ }
80
+ const content = typeof raw.content === "string" ? raw.content : "";
81
+ if (!content.trim()) {
82
+ return { content: "content must not be empty", isError: true };
83
+ }
84
+ try {
85
+ await appendToMemoryMd(this.memoryMdPath, content);
86
+ return { content: `appended to ${this.memoryMdPath}` };
87
+ }
88
+ catch (e) {
89
+ return {
90
+ content: `error appending: ${e instanceof Error ? e.message : e}`,
91
+ isError: true,
92
+ };
93
+ }
94
+ }
95
+ }
96
+ export function createMemoryAppendTool(memoryMdPath) {
97
+ return new MemoryAppendTool(memoryMdPath);
98
+ }
99
+ //# sourceMappingURL=memoryAppend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memoryAppend.js","sourceRoot":"","sources":["../../src/tools/memoryAppend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ import { createFallbackQuery } from "../fallback/index.js";
2
+ import { type RerankOptions } from "../fallback/llmRerank.js";
3
+ import type { FallbackQuery, MemoryQuerier, QueryIntent, ToolResult } from "../types.js";
4
+ export declare const MEMORY_RECALL_NAME = "memory_recall";
5
+ export declare const MEMORY_RECALL_DESCRIPTION: string;
6
+ export declare const MEMORY_RECALL_PROMPT_SNIPPET = "Query local episodic memory by entity or relationship";
7
+ export declare const MEMORY_RECALL_PROMPT_GUIDELINES: readonly ["Use memory_recall when the user asks about past sessions, people, projects, or decisions stored in long-term memory.", "Use memory_recall for relationship questions (e.g. who is X to me) when implicit preflight did not already answer."];
8
+ export declare const MEMORY_RECALL_PARAMETERS: {
9
+ readonly type: "object";
10
+ readonly properties: {
11
+ readonly mode: {
12
+ readonly type: "string";
13
+ readonly enum: readonly ["direct_relation", "path_query", "typed_neighborhood"];
14
+ };
15
+ readonly anchor_mentions: {
16
+ readonly type: "array";
17
+ readonly items: {
18
+ readonly type: "string";
19
+ };
20
+ };
21
+ readonly relation_constraints: {
22
+ readonly type: "array";
23
+ readonly items: {
24
+ readonly type: "string";
25
+ };
26
+ };
27
+ readonly candidate_type: {
28
+ readonly type: "string";
29
+ };
30
+ readonly scope_filter: {
31
+ readonly type: "array";
32
+ readonly items: {
33
+ readonly type: "string";
34
+ };
35
+ };
36
+ readonly target_slot: {
37
+ readonly type: "string";
38
+ readonly enum: readonly ["head", "tail"];
39
+ };
40
+ readonly time_window: {
41
+ readonly type: "string";
42
+ };
43
+ readonly evidence_budget: {
44
+ readonly type: "integer";
45
+ };
46
+ readonly result_limit: {
47
+ readonly type: "integer";
48
+ };
49
+ };
50
+ readonly required: readonly ["anchor_mentions"];
51
+ };
52
+ export declare class MemoryRecallTool {
53
+ private readonly service;
54
+ private readonly fallback;
55
+ private readonly rerankOpts;
56
+ constructor(service: MemoryQuerier, fallback?: FallbackQuery | null, rerankOpts?: RerankOptions | null);
57
+ info(): {
58
+ name: string;
59
+ description: string;
60
+ parameters: {
61
+ readonly type: "object";
62
+ readonly properties: {
63
+ readonly mode: {
64
+ readonly type: "string";
65
+ readonly enum: readonly ["direct_relation", "path_query", "typed_neighborhood"];
66
+ };
67
+ readonly anchor_mentions: {
68
+ readonly type: "array";
69
+ readonly items: {
70
+ readonly type: "string";
71
+ };
72
+ };
73
+ readonly relation_constraints: {
74
+ readonly type: "array";
75
+ readonly items: {
76
+ readonly type: "string";
77
+ };
78
+ };
79
+ readonly candidate_type: {
80
+ readonly type: "string";
81
+ };
82
+ readonly scope_filter: {
83
+ readonly type: "array";
84
+ readonly items: {
85
+ readonly type: "string";
86
+ };
87
+ };
88
+ readonly target_slot: {
89
+ readonly type: "string";
90
+ readonly enum: readonly ["head", "tail"];
91
+ };
92
+ readonly time_window: {
93
+ readonly type: "string";
94
+ };
95
+ readonly evidence_budget: {
96
+ readonly type: "integer";
97
+ };
98
+ readonly result_limit: {
99
+ readonly type: "integer";
100
+ };
101
+ };
102
+ readonly required: readonly ["anchor_mentions"];
103
+ };
104
+ };
105
+ run(argsJson: string, signal?: AbortSignal): Promise<ToolResult>;
106
+ runIntent(intent: QueryIntent, signal?: AbortSignal): Promise<ToolResult>;
107
+ private fallbackResult;
108
+ }
109
+ /** @deprecated Use createFallbackQuery — kept for backward-compatible imports. */
110
+ export declare function createStubFallback(memoryMdPaths: string[], sessionsDir?: string): FallbackQuery;
111
+ export { createFallbackQuery };
112
+ export declare function createMemoryRecallTool(service: MemoryQuerier, fallback: FallbackQuery | null, rerankOpts?: RerankOptions | null): MemoryRecallTool;
113
+ //# sourceMappingURL=memoryRecall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memoryRecall.d.ts","sourceRoot":"","sources":["../../src/tools/memoryRecall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAiB,KAAK,aAAa,EAAqB,MAAM,0BAA0B,CAAC;AAEhG,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAoB,WAAW,EAA+B,UAAU,EAAE,MAAM,aAAa,CAAC;AAExI,eAAO,MAAM,kBAAkB,kBAAkB,CAAC;AAElD,eAAO,MAAM,yBAAyB,QAM8E,CAAC;AAErH,eAAO,MAAM,4BAA4B,0DACgB,CAAC;AAE1D,eAAO,MAAM,+BAA+B,yPAGlC,CAAC;AAEX,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiB3B,CAAC;AAEX,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAFV,OAAO,EAAE,aAAa,EACtB,QAAQ,GAAE,aAAa,GAAG,IAAW,EACrC,UAAU,GAAE,aAAa,GAAG,IAAW;IAG1D,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAQE,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAehE,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;YA6BjE,cAAc;CAmF7B;AAmKD,kFAAkF;AAClF,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,MAAM,EAAE,EACvB,WAAW,SAAK,GACf,aAAa,CAEf;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC;AAE/B,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,aAAa,GAAG,IAAI,EAC9B,UAAU,CAAC,EAAE,aAAa,GAAG,IAAI,GAChC,gBAAgB,CAElB"}