cloison-runtime 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 (316) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +313 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +47 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/config/index.d.ts +57 -0
  8. package/dist/config/index.d.ts.map +1 -0
  9. package/dist/config/index.js +27 -0
  10. package/dist/config/index.js.map +1 -0
  11. package/dist/credentials/index.d.ts +4 -0
  12. package/dist/credentials/index.d.ts.map +1 -0
  13. package/dist/credentials/index.js +3 -0
  14. package/dist/credentials/index.js.map +1 -0
  15. package/dist/credentials/proxy.d.ts +3 -0
  16. package/dist/credentials/proxy.d.ts.map +1 -0
  17. package/dist/credentials/proxy.js +11 -0
  18. package/dist/credentials/proxy.js.map +1 -0
  19. package/dist/credentials/store.d.ts +7 -0
  20. package/dist/credentials/store.d.ts.map +1 -0
  21. package/dist/credentials/store.js +115 -0
  22. package/dist/credentials/store.js.map +1 -0
  23. package/dist/credentials/types.d.ts +14 -0
  24. package/dist/credentials/types.d.ts.map +1 -0
  25. package/dist/credentials/types.js +2 -0
  26. package/dist/credentials/types.js.map +1 -0
  27. package/dist/hooks/index.d.ts +3 -0
  28. package/dist/hooks/index.d.ts.map +1 -0
  29. package/dist/hooks/index.js +2 -0
  30. package/dist/hooks/index.js.map +1 -0
  31. package/dist/hooks/runner.d.ts +7 -0
  32. package/dist/hooks/runner.d.ts.map +1 -0
  33. package/dist/hooks/runner.js +20 -0
  34. package/dist/hooks/runner.js.map +1 -0
  35. package/dist/hooks/types.d.ts +39 -0
  36. package/dist/hooks/types.d.ts.map +1 -0
  37. package/dist/hooks/types.js +2 -0
  38. package/dist/hooks/types.js.map +1 -0
  39. package/dist/index.d.ts +32 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +58 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/infra/env.d.ts +2 -0
  44. package/dist/infra/env.d.ts.map +1 -0
  45. package/dist/infra/env.js +6 -0
  46. package/dist/infra/env.js.map +1 -0
  47. package/dist/infra/warning-filter.d.ts +8 -0
  48. package/dist/infra/warning-filter.d.ts.map +1 -0
  49. package/dist/infra/warning-filter.js +66 -0
  50. package/dist/infra/warning-filter.js.map +1 -0
  51. package/dist/logging/subsystem.d.ts +29 -0
  52. package/dist/logging/subsystem.d.ts.map +1 -0
  53. package/dist/logging/subsystem.js +322 -0
  54. package/dist/logging/subsystem.js.map +1 -0
  55. package/dist/memory/embedding-batch.d.ts +38 -0
  56. package/dist/memory/embedding-batch.d.ts.map +1 -0
  57. package/dist/memory/embedding-batch.js +253 -0
  58. package/dist/memory/embedding-batch.js.map +1 -0
  59. package/dist/memory/embedding-cache.d.ts +16 -0
  60. package/dist/memory/embedding-cache.d.ts.map +1 -0
  61. package/dist/memory/embedding-cache.js +113 -0
  62. package/dist/memory/embedding-cache.js.map +1 -0
  63. package/dist/memory/embeddings-debug.d.ts +2 -0
  64. package/dist/memory/embeddings-debug.d.ts.map +1 -0
  65. package/dist/memory/embeddings-debug.js +12 -0
  66. package/dist/memory/embeddings-debug.js.map +1 -0
  67. package/dist/memory/embeddings.d.ts +17 -0
  68. package/dist/memory/embeddings.d.ts.map +1 -0
  69. package/dist/memory/embeddings.js +203 -0
  70. package/dist/memory/embeddings.js.map +1 -0
  71. package/dist/memory/file-indexer.d.ts +26 -0
  72. package/dist/memory/file-indexer.d.ts.map +1 -0
  73. package/dist/memory/file-indexer.js +260 -0
  74. package/dist/memory/file-indexer.js.map +1 -0
  75. package/dist/memory/fs-utils.d.ts +12 -0
  76. package/dist/memory/fs-utils.d.ts.map +1 -0
  77. package/dist/memory/fs-utils.js +24 -0
  78. package/dist/memory/fs-utils.js.map +1 -0
  79. package/dist/memory/hybrid.d.ts +46 -0
  80. package/dist/memory/hybrid.d.ts.map +1 -0
  81. package/dist/memory/hybrid.js +85 -0
  82. package/dist/memory/hybrid.js.map +1 -0
  83. package/dist/memory/index.d.ts +17 -0
  84. package/dist/memory/index.d.ts.map +1 -0
  85. package/dist/memory/index.js +15 -0
  86. package/dist/memory/index.js.map +1 -0
  87. package/dist/memory/internal.d.ts +39 -0
  88. package/dist/memory/internal.d.ts.map +1 -0
  89. package/dist/memory/internal.js +292 -0
  90. package/dist/memory/internal.js.map +1 -0
  91. package/dist/memory/manager-search.d.ts +61 -0
  92. package/dist/memory/manager-search.d.ts.map +1 -0
  93. package/dist/memory/manager-search.js +102 -0
  94. package/dist/memory/manager-search.js.map +1 -0
  95. package/dist/memory/mmr.d.ts +63 -0
  96. package/dist/memory/mmr.d.ts.map +1 -0
  97. package/dist/memory/mmr.js +165 -0
  98. package/dist/memory/mmr.js.map +1 -0
  99. package/dist/memory/query-expansion.d.ts +42 -0
  100. package/dist/memory/query-expansion.d.ts.map +1 -0
  101. package/dist/memory/query-expansion.js +776 -0
  102. package/dist/memory/query-expansion.js.map +1 -0
  103. package/dist/memory/session-indexer.d.ts +41 -0
  104. package/dist/memory/session-indexer.d.ts.map +1 -0
  105. package/dist/memory/session-indexer.js +367 -0
  106. package/dist/memory/session-indexer.js.map +1 -0
  107. package/dist/memory/simple-manager.d.ts +29 -0
  108. package/dist/memory/simple-manager.d.ts.map +1 -0
  109. package/dist/memory/simple-manager.js +216 -0
  110. package/dist/memory/simple-manager.js.map +1 -0
  111. package/dist/memory/sqlite.d.ts +2 -0
  112. package/dist/memory/sqlite.d.ts.map +1 -0
  113. package/dist/memory/sqlite.js +16 -0
  114. package/dist/memory/sqlite.js.map +1 -0
  115. package/dist/memory/ssrf.d.ts +18 -0
  116. package/dist/memory/ssrf.d.ts.map +1 -0
  117. package/dist/memory/ssrf.js +396 -0
  118. package/dist/memory/ssrf.js.map +1 -0
  119. package/dist/memory/temporal-decay.d.ts +26 -0
  120. package/dist/memory/temporal-decay.d.ts.map +1 -0
  121. package/dist/memory/temporal-decay.js +120 -0
  122. package/dist/memory/temporal-decay.js.map +1 -0
  123. package/dist/memory/types.d.ts +95 -0
  124. package/dist/memory/types.d.ts.map +1 -0
  125. package/dist/memory/types.js +2 -0
  126. package/dist/memory/types.js.map +1 -0
  127. package/dist/package.json +68 -0
  128. package/dist/platform/index.d.ts +3 -0
  129. package/dist/platform/index.d.ts.map +1 -0
  130. package/dist/platform/index.js +2 -0
  131. package/dist/platform/index.js.map +1 -0
  132. package/dist/platform/platform.d.ts +3 -0
  133. package/dist/platform/platform.d.ts.map +1 -0
  134. package/dist/platform/platform.js +91 -0
  135. package/dist/platform/platform.js.map +1 -0
  136. package/dist/platform/types.d.ts +18 -0
  137. package/dist/platform/types.d.ts.map +1 -0
  138. package/dist/platform/types.js +2 -0
  139. package/dist/platform/types.js.map +1 -0
  140. package/dist/runtime/agent.d.ts +36 -0
  141. package/dist/runtime/agent.d.ts.map +1 -0
  142. package/dist/runtime/agent.js +250 -0
  143. package/dist/runtime/agent.js.map +1 -0
  144. package/dist/runtime/api-key-rotation.d.ts +26 -0
  145. package/dist/runtime/api-key-rotation.d.ts.map +1 -0
  146. package/dist/runtime/api-key-rotation.js +174 -0
  147. package/dist/runtime/api-key-rotation.js.map +1 -0
  148. package/dist/runtime/context-guard.d.ts +32 -0
  149. package/dist/runtime/context-guard.d.ts.map +1 -0
  150. package/dist/runtime/context-guard.js +61 -0
  151. package/dist/runtime/context-guard.js.map +1 -0
  152. package/dist/runtime/failover-error.d.ts +62 -0
  153. package/dist/runtime/failover-error.d.ts.map +1 -0
  154. package/dist/runtime/failover-error.js +733 -0
  155. package/dist/runtime/failover-error.js.map +1 -0
  156. package/dist/runtime/failover-policy.d.ts +5 -0
  157. package/dist/runtime/failover-policy.d.ts.map +1 -0
  158. package/dist/runtime/failover-policy.js +18 -0
  159. package/dist/runtime/failover-policy.js.map +1 -0
  160. package/dist/runtime/index.d.ts +13 -0
  161. package/dist/runtime/index.d.ts.map +1 -0
  162. package/dist/runtime/index.js +13 -0
  163. package/dist/runtime/index.js.map +1 -0
  164. package/dist/runtime/memory-flush.d.ts +24 -0
  165. package/dist/runtime/memory-flush.d.ts.map +1 -0
  166. package/dist/runtime/memory-flush.js +64 -0
  167. package/dist/runtime/memory-flush.js.map +1 -0
  168. package/dist/runtime/memory-tools.d.ts +14 -0
  169. package/dist/runtime/memory-tools.d.ts.map +1 -0
  170. package/dist/runtime/memory-tools.js +58 -0
  171. package/dist/runtime/memory-tools.js.map +1 -0
  172. package/dist/runtime/model-fallback.d.ts +56 -0
  173. package/dist/runtime/model-fallback.d.ts.map +1 -0
  174. package/dist/runtime/model-fallback.js +301 -0
  175. package/dist/runtime/model-fallback.js.map +1 -0
  176. package/dist/runtime/model-fallback.types.d.ts +14 -0
  177. package/dist/runtime/model-fallback.types.d.ts.map +1 -0
  178. package/dist/runtime/model-fallback.types.js +3 -0
  179. package/dist/runtime/model-fallback.types.js.map +1 -0
  180. package/dist/runtime/retry.d.ts +24 -0
  181. package/dist/runtime/retry.d.ts.map +1 -0
  182. package/dist/runtime/retry.js +100 -0
  183. package/dist/runtime/retry.js.map +1 -0
  184. package/dist/runtime/session-pruning.d.ts +22 -0
  185. package/dist/runtime/session-pruning.d.ts.map +1 -0
  186. package/dist/runtime/session-pruning.js +118 -0
  187. package/dist/runtime/session-pruning.js.map +1 -0
  188. package/dist/runtime/stream-adapters.d.ts +11 -0
  189. package/dist/runtime/stream-adapters.d.ts.map +1 -0
  190. package/dist/runtime/stream-adapters.js +46 -0
  191. package/dist/runtime/stream-adapters.js.map +1 -0
  192. package/dist/runtime/subagent.d.ts +83 -0
  193. package/dist/runtime/subagent.d.ts.map +1 -0
  194. package/dist/runtime/subagent.js +190 -0
  195. package/dist/runtime/subagent.js.map +1 -0
  196. package/dist/runtime/tool-result-truncation.d.ts +25 -0
  197. package/dist/runtime/tool-result-truncation.d.ts.map +1 -0
  198. package/dist/runtime/tool-result-truncation.js +115 -0
  199. package/dist/runtime/tool-result-truncation.js.map +1 -0
  200. package/dist/sandbox/cgroup.d.ts +20 -0
  201. package/dist/sandbox/cgroup.d.ts.map +1 -0
  202. package/dist/sandbox/cgroup.js +82 -0
  203. package/dist/sandbox/cgroup.js.map +1 -0
  204. package/dist/sandbox/index.d.ts +12 -0
  205. package/dist/sandbox/index.d.ts.map +1 -0
  206. package/dist/sandbox/index.js +10 -0
  207. package/dist/sandbox/index.js.map +1 -0
  208. package/dist/sandbox/ipc.d.ts +26 -0
  209. package/dist/sandbox/ipc.d.ts.map +1 -0
  210. package/dist/sandbox/ipc.js +154 -0
  211. package/dist/sandbox/ipc.js.map +1 -0
  212. package/dist/sandbox/manager.d.ts +4 -0
  213. package/dist/sandbox/manager.d.ts.map +1 -0
  214. package/dist/sandbox/manager.js +251 -0
  215. package/dist/sandbox/manager.js.map +1 -0
  216. package/dist/sandbox/namespace.d.ts +12 -0
  217. package/dist/sandbox/namespace.d.ts.map +1 -0
  218. package/dist/sandbox/namespace.js +119 -0
  219. package/dist/sandbox/namespace.js.map +1 -0
  220. package/dist/sandbox/proxy-tools.d.ts +14 -0
  221. package/dist/sandbox/proxy-tools.d.ts.map +1 -0
  222. package/dist/sandbox/proxy-tools.js +63 -0
  223. package/dist/sandbox/proxy-tools.js.map +1 -0
  224. package/dist/sandbox/rootfs.d.ts +20 -0
  225. package/dist/sandbox/rootfs.d.ts.map +1 -0
  226. package/dist/sandbox/rootfs.js +247 -0
  227. package/dist/sandbox/rootfs.js.map +1 -0
  228. package/dist/sandbox/seccomp-apply.d.ts +9 -0
  229. package/dist/sandbox/seccomp-apply.d.ts.map +1 -0
  230. package/dist/sandbox/seccomp-apply.js +227 -0
  231. package/dist/sandbox/seccomp-apply.js.map +1 -0
  232. package/dist/sandbox/seccomp.d.ts +13 -0
  233. package/dist/sandbox/seccomp.d.ts.map +1 -0
  234. package/dist/sandbox/seccomp.js +120 -0
  235. package/dist/sandbox/seccomp.js.map +1 -0
  236. package/dist/sandbox/types.d.ts +66 -0
  237. package/dist/sandbox/types.d.ts.map +1 -0
  238. package/dist/sandbox/types.js +8 -0
  239. package/dist/sandbox/types.js.map +1 -0
  240. package/dist/sandbox/worker.d.ts +15 -0
  241. package/dist/sandbox/worker.d.ts.map +1 -0
  242. package/dist/sandbox/worker.js +151 -0
  243. package/dist/sandbox/worker.js.map +1 -0
  244. package/dist/sessions/index.d.ts +3 -0
  245. package/dist/sessions/index.d.ts.map +1 -0
  246. package/dist/sessions/index.js +3 -0
  247. package/dist/sessions/index.js.map +1 -0
  248. package/dist/sessions/store.d.ts +17 -0
  249. package/dist/sessions/store.d.ts.map +1 -0
  250. package/dist/sessions/store.js +70 -0
  251. package/dist/sessions/store.js.map +1 -0
  252. package/dist/sessions/transcript-events.d.ts +11 -0
  253. package/dist/sessions/transcript-events.d.ts.map +1 -0
  254. package/dist/sessions/transcript-events.js +40 -0
  255. package/dist/sessions/transcript-events.js.map +1 -0
  256. package/dist/shared/agent-session.d.ts +10 -0
  257. package/dist/shared/agent-session.d.ts.map +1 -0
  258. package/dist/shared/agent-session.js +33 -0
  259. package/dist/shared/agent-session.js.map +1 -0
  260. package/dist/shared/constants.d.ts +6 -0
  261. package/dist/shared/constants.d.ts.map +1 -0
  262. package/dist/shared/constants.js +17 -0
  263. package/dist/shared/constants.js.map +1 -0
  264. package/dist/shared/fs.d.ts +7 -0
  265. package/dist/shared/fs.d.ts.map +1 -0
  266. package/dist/shared/fs.js +14 -0
  267. package/dist/shared/fs.js.map +1 -0
  268. package/dist/shared/index.d.ts +4 -0
  269. package/dist/shared/index.d.ts.map +1 -0
  270. package/dist/shared/index.js +4 -0
  271. package/dist/shared/index.js.map +1 -0
  272. package/dist/skills/enablement.d.ts +10 -0
  273. package/dist/skills/enablement.d.ts.map +1 -0
  274. package/dist/skills/enablement.js +52 -0
  275. package/dist/skills/enablement.js.map +1 -0
  276. package/dist/skills/index.d.ts +4 -0
  277. package/dist/skills/index.d.ts.map +1 -0
  278. package/dist/skills/index.js +4 -0
  279. package/dist/skills/index.js.map +1 -0
  280. package/dist/skills/loader.d.ts +8 -0
  281. package/dist/skills/loader.d.ts.map +1 -0
  282. package/dist/skills/loader.js +8 -0
  283. package/dist/skills/loader.js.map +1 -0
  284. package/dist/skills/registry.d.ts +19 -0
  285. package/dist/skills/registry.d.ts.map +1 -0
  286. package/dist/skills/registry.js +106 -0
  287. package/dist/skills/registry.js.map +1 -0
  288. package/dist/utils/boolean.d.ts +6 -0
  289. package/dist/utils/boolean.d.ts.map +1 -0
  290. package/dist/utils/boolean.js +28 -0
  291. package/dist/utils/boolean.js.map +1 -0
  292. package/dist/utils/run-with-concurrency.d.ts +12 -0
  293. package/dist/utils/run-with-concurrency.d.ts.map +1 -0
  294. package/dist/utils/run-with-concurrency.js +40 -0
  295. package/dist/utils/run-with-concurrency.js.map +1 -0
  296. package/dist/utils.d.ts +3 -0
  297. package/dist/utils.d.ts.map +1 -0
  298. package/dist/utils.js +38 -0
  299. package/dist/utils.js.map +1 -0
  300. package/dist/workspace/index.d.ts +3 -0
  301. package/dist/workspace/index.d.ts.map +1 -0
  302. package/dist/workspace/index.js +2 -0
  303. package/dist/workspace/index.js.map +1 -0
  304. package/dist/workspace/runner.d.ts +19 -0
  305. package/dist/workspace/runner.d.ts.map +1 -0
  306. package/dist/workspace/runner.js +491 -0
  307. package/dist/workspace/runner.js.map +1 -0
  308. package/dist/workspace/types.d.ts +37 -0
  309. package/dist/workspace/types.d.ts.map +1 -0
  310. package/dist/workspace/types.js +2 -0
  311. package/dist/workspace/types.js.map +1 -0
  312. package/dist/workspace/workspace.d.ts +12 -0
  313. package/dist/workspace/workspace.d.ts.map +1 -0
  314. package/dist/workspace/workspace.js +85 -0
  315. package/dist/workspace/workspace.js.map +1 -0
  316. package/package.json +82 -0
@@ -0,0 +1,292 @@
1
+ import crypto from "node:crypto";
2
+ import fsSync from "node:fs";
3
+ import fs from "node:fs/promises";
4
+ import path from "node:path";
5
+ import { runTasksWithConcurrency } from "../utils/run-with-concurrency.js";
6
+ import { isFileMissingError } from "./fs-utils.js";
7
+ export function ensureDir(dir) {
8
+ try {
9
+ fsSync.mkdirSync(dir, { recursive: true });
10
+ }
11
+ catch { }
12
+ return dir;
13
+ }
14
+ export function normalizeRelPath(value) {
15
+ const trimmed = value.trim().replace(/^[./]+/, "");
16
+ return trimmed.replace(/\\/g, "/");
17
+ }
18
+ export function normalizeExtraMemoryPaths(workspaceDir, extraPaths) {
19
+ if (!extraPaths?.length) {
20
+ return [];
21
+ }
22
+ const resolved = extraPaths
23
+ .map((value) => value.trim())
24
+ .filter(Boolean)
25
+ .map((value) => path.isAbsolute(value) ? path.resolve(value) : path.resolve(workspaceDir, value));
26
+ return Array.from(new Set(resolved));
27
+ }
28
+ export function isMemoryPath(relPath) {
29
+ const normalized = normalizeRelPath(relPath);
30
+ if (!normalized) {
31
+ return false;
32
+ }
33
+ if (normalized === "MEMORY.md" || normalized === "memory.md") {
34
+ return true;
35
+ }
36
+ return normalized.startsWith("memory/");
37
+ }
38
+ async function walkDir(dir, files) {
39
+ const entries = await fs.readdir(dir, { withFileTypes: true });
40
+ for (const entry of entries) {
41
+ const full = path.join(dir, entry.name);
42
+ if (entry.isSymbolicLink()) {
43
+ continue;
44
+ }
45
+ if (entry.isDirectory()) {
46
+ await walkDir(full, files);
47
+ continue;
48
+ }
49
+ if (!entry.isFile()) {
50
+ continue;
51
+ }
52
+ if (!entry.name.endsWith(".md")) {
53
+ continue;
54
+ }
55
+ files.push(full);
56
+ }
57
+ }
58
+ export async function listMemoryFiles(workspaceDir, extraPaths) {
59
+ const result = [];
60
+ const memoryFile = path.join(workspaceDir, "MEMORY.md");
61
+ const altMemoryFile = path.join(workspaceDir, "memory.md");
62
+ const memoryDir = path.join(workspaceDir, "memory");
63
+ const addMarkdownFile = async (absPath) => {
64
+ try {
65
+ const stat = await fs.lstat(absPath);
66
+ if (stat.isSymbolicLink() || !stat.isFile()) {
67
+ return;
68
+ }
69
+ if (!absPath.endsWith(".md")) {
70
+ return;
71
+ }
72
+ result.push(absPath);
73
+ }
74
+ catch { }
75
+ };
76
+ await addMarkdownFile(memoryFile);
77
+ await addMarkdownFile(altMemoryFile);
78
+ try {
79
+ const dirStat = await fs.lstat(memoryDir);
80
+ if (!dirStat.isSymbolicLink() && dirStat.isDirectory()) {
81
+ await walkDir(memoryDir, result);
82
+ }
83
+ }
84
+ catch { }
85
+ const normalizedExtraPaths = normalizeExtraMemoryPaths(workspaceDir, extraPaths);
86
+ if (normalizedExtraPaths.length > 0) {
87
+ for (const inputPath of normalizedExtraPaths) {
88
+ try {
89
+ const stat = await fs.lstat(inputPath);
90
+ if (stat.isSymbolicLink()) {
91
+ continue;
92
+ }
93
+ if (stat.isDirectory()) {
94
+ await walkDir(inputPath, result);
95
+ continue;
96
+ }
97
+ if (stat.isFile() && inputPath.endsWith(".md")) {
98
+ result.push(inputPath);
99
+ }
100
+ }
101
+ catch { }
102
+ }
103
+ }
104
+ if (result.length <= 1) {
105
+ return result;
106
+ }
107
+ const seen = new Set();
108
+ const deduped = [];
109
+ for (const entry of result) {
110
+ let key = entry;
111
+ try {
112
+ key = await fs.realpath(entry);
113
+ }
114
+ catch { }
115
+ if (seen.has(key)) {
116
+ continue;
117
+ }
118
+ seen.add(key);
119
+ deduped.push(entry);
120
+ }
121
+ return deduped;
122
+ }
123
+ export function hashText(value) {
124
+ return crypto.createHash("sha256").update(value).digest("hex");
125
+ }
126
+ export async function buildFileEntry(absPath, workspaceDir) {
127
+ let stat;
128
+ try {
129
+ stat = await fs.stat(absPath);
130
+ }
131
+ catch (err) {
132
+ if (isFileMissingError(err)) {
133
+ return null;
134
+ }
135
+ throw err;
136
+ }
137
+ let content;
138
+ try {
139
+ content = await fs.readFile(absPath, "utf-8");
140
+ }
141
+ catch (err) {
142
+ if (isFileMissingError(err)) {
143
+ return null;
144
+ }
145
+ throw err;
146
+ }
147
+ const hash = hashText(content);
148
+ return {
149
+ path: path.relative(workspaceDir, absPath).replace(/\\/g, "/"),
150
+ absPath,
151
+ mtimeMs: stat.mtimeMs,
152
+ size: stat.size,
153
+ hash,
154
+ };
155
+ }
156
+ export function chunkMarkdown(content, chunking) {
157
+ const lines = content.split("\n");
158
+ if (lines.length === 0) {
159
+ return [];
160
+ }
161
+ const maxChars = Math.max(32, chunking.tokens * 4);
162
+ const overlapChars = Math.max(0, chunking.overlap * 4);
163
+ const chunks = [];
164
+ let current = [];
165
+ let currentChars = 0;
166
+ const flush = () => {
167
+ if (current.length === 0) {
168
+ return;
169
+ }
170
+ const firstEntry = current[0];
171
+ const lastEntry = current[current.length - 1];
172
+ if (!firstEntry || !lastEntry) {
173
+ return;
174
+ }
175
+ const text = current.map((entry) => entry.line).join("\n");
176
+ const startLine = firstEntry.lineNo;
177
+ const endLine = lastEntry.lineNo;
178
+ chunks.push({
179
+ startLine,
180
+ endLine,
181
+ text,
182
+ hash: hashText(text),
183
+ });
184
+ };
185
+ const carryOverlap = () => {
186
+ if (overlapChars <= 0 || current.length === 0) {
187
+ current = [];
188
+ currentChars = 0;
189
+ return;
190
+ }
191
+ let acc = 0;
192
+ const kept = [];
193
+ for (let i = current.length - 1; i >= 0; i -= 1) {
194
+ const entry = current[i];
195
+ if (!entry) {
196
+ continue;
197
+ }
198
+ acc += entry.line.length + 1;
199
+ kept.unshift(entry);
200
+ if (acc >= overlapChars) {
201
+ break;
202
+ }
203
+ }
204
+ current = kept;
205
+ currentChars = kept.reduce((sum, entry) => sum + entry.line.length + 1, 0);
206
+ };
207
+ for (let i = 0; i < lines.length; i += 1) {
208
+ const line = lines[i] ?? "";
209
+ const lineNo = i + 1;
210
+ const segments = [];
211
+ if (line.length === 0) {
212
+ segments.push("");
213
+ }
214
+ else {
215
+ for (let start = 0; start < line.length; start += maxChars) {
216
+ segments.push(line.slice(start, start + maxChars));
217
+ }
218
+ }
219
+ for (const segment of segments) {
220
+ const lineSize = segment.length + 1;
221
+ if (currentChars + lineSize > maxChars && current.length > 0) {
222
+ flush();
223
+ carryOverlap();
224
+ }
225
+ current.push({ line: segment, lineNo });
226
+ currentChars += lineSize;
227
+ }
228
+ }
229
+ flush();
230
+ return chunks;
231
+ }
232
+ /**
233
+ * Remap chunk startLine/endLine from content-relative positions to original
234
+ * source file positions using a lineMap. Each entry in lineMap gives the
235
+ * 1-indexed source line for the corresponding 0-indexed content line.
236
+ *
237
+ * This is used for session JSONL files where buildSessionEntry() flattens
238
+ * messages into a plain-text string before chunking. Without remapping the
239
+ * stored line numbers would reference positions in the flattened text rather
240
+ * than the original JSONL file.
241
+ */
242
+ export function remapChunkLines(chunks, lineMap) {
243
+ if (!lineMap || lineMap.length === 0) {
244
+ return;
245
+ }
246
+ for (const chunk of chunks) {
247
+ // startLine/endLine are 1-indexed; lineMap is 0-indexed by content line
248
+ chunk.startLine = lineMap[chunk.startLine - 1] ?? chunk.startLine;
249
+ chunk.endLine = lineMap[chunk.endLine - 1] ?? chunk.endLine;
250
+ }
251
+ }
252
+ export function parseEmbedding(raw) {
253
+ try {
254
+ const parsed = JSON.parse(raw);
255
+ return Array.isArray(parsed) ? parsed : [];
256
+ }
257
+ catch {
258
+ return [];
259
+ }
260
+ }
261
+ export function cosineSimilarity(a, b) {
262
+ if (a.length === 0 || b.length === 0) {
263
+ return 0;
264
+ }
265
+ const len = Math.min(a.length, b.length);
266
+ let dot = 0;
267
+ let normA = 0;
268
+ let normB = 0;
269
+ for (let i = 0; i < len; i += 1) {
270
+ const av = a[i] ?? 0;
271
+ const bv = b[i] ?? 0;
272
+ dot += av * bv;
273
+ normA += av * av;
274
+ normB += bv * bv;
275
+ }
276
+ if (normA === 0 || normB === 0) {
277
+ return 0;
278
+ }
279
+ return dot / (Math.sqrt(normA) * Math.sqrt(normB));
280
+ }
281
+ export async function runWithConcurrency(tasks, limit) {
282
+ const { results, firstError, hasError } = await runTasksWithConcurrency({
283
+ tasks,
284
+ limit,
285
+ errorMode: "stop",
286
+ });
287
+ if (hasError) {
288
+ throw firstError;
289
+ }
290
+ return results;
291
+ }
292
+ //# sourceMappingURL=internal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.js","sourceRoot":"","sources":["../../src/memory/internal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import type { DatabaseSync } from "node:sqlite";
2
+ export type SearchSource = string;
3
+ export type SearchRowResult = {
4
+ id: string;
5
+ path: string;
6
+ startLine: number;
7
+ endLine: number;
8
+ score: number;
9
+ snippet: string;
10
+ source: SearchSource;
11
+ };
12
+ export declare function searchVector(params: {
13
+ db: DatabaseSync;
14
+ vectorTable: string;
15
+ providerModel: string;
16
+ queryVec: number[];
17
+ limit: number;
18
+ snippetMaxChars: number;
19
+ ensureVectorReady: (dimensions: number) => Promise<boolean>;
20
+ sourceFilterVec: {
21
+ sql: string;
22
+ params: SearchSource[];
23
+ };
24
+ sourceFilterChunks: {
25
+ sql: string;
26
+ params: SearchSource[];
27
+ };
28
+ }): Promise<SearchRowResult[]>;
29
+ export declare function listChunks(params: {
30
+ db: DatabaseSync;
31
+ providerModel: string;
32
+ sourceFilter: {
33
+ sql: string;
34
+ params: SearchSource[];
35
+ };
36
+ }): Array<{
37
+ id: string;
38
+ path: string;
39
+ startLine: number;
40
+ endLine: number;
41
+ text: string;
42
+ embedding: number[];
43
+ source: SearchSource;
44
+ }>;
45
+ export declare function searchKeyword(params: {
46
+ db: DatabaseSync;
47
+ ftsTable: string;
48
+ providerModel: string | undefined;
49
+ query: string;
50
+ limit: number;
51
+ snippetMaxChars: number;
52
+ sourceFilter: {
53
+ sql: string;
54
+ params: SearchSource[];
55
+ };
56
+ buildFtsQuery: (raw: string) => string | null;
57
+ bm25RankToScore: (rank: number) => number;
58
+ }): Promise<Array<SearchRowResult & {
59
+ textScore: number;
60
+ }>>;
61
+ //# sourceMappingURL=manager-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager-search.d.ts","sourceRoot":"","sources":["../../src/memory/manager-search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAOhD,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAElC,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAEF,wBAAsB,YAAY,CAAC,MAAM,EAAE;IACzC,EAAE,EAAE,YAAY,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5D,eAAe,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,YAAY,EAAE,CAAA;KAAE,CAAC;IACzD,kBAAkB,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,YAAY,EAAE,CAAA;KAAE,CAAC;CAC7D,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAgE7B;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE;IACjC,EAAE,EAAE,YAAY,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,YAAY,EAAE,CAAA;KAAE,CAAC;CACvD,GAAG,KAAK,CAAC;IACR,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC,CA0BD;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE;IAC1C,EAAE,EAAE,YAAY,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,YAAY,EAAE,CAAA;KAAE,CAAC;IACtD,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC9C,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CAC3C,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CA6C1D"}
@@ -0,0 +1,102 @@
1
+ import { truncateUtf16Safe } from "../utils.js";
2
+ import { cosineSimilarity, parseEmbedding } from "./internal.js";
3
+ const vectorToBlob = (embedding) => Buffer.from(new Float32Array(embedding).buffer);
4
+ export async function searchVector(params) {
5
+ if (params.queryVec.length === 0 || params.limit <= 0) {
6
+ return [];
7
+ }
8
+ if (await params.ensureVectorReady(params.queryVec.length)) {
9
+ const rows = params.db
10
+ .prepare(`SELECT c.id, c.path, c.start_line, c.end_line, c.text,\n` +
11
+ ` c.source,\n` +
12
+ ` vec_distance_cosine(v.embedding, ?) AS dist\n` +
13
+ ` FROM ${params.vectorTable} v\n` +
14
+ ` JOIN chunks c ON c.id = v.id\n` +
15
+ ` WHERE c.model = ?${params.sourceFilterVec.sql}\n` +
16
+ ` ORDER BY dist ASC\n` +
17
+ ` LIMIT ?`)
18
+ .all(vectorToBlob(params.queryVec), params.providerModel, ...params.sourceFilterVec.params, params.limit);
19
+ return rows.map((row) => ({
20
+ id: row.id,
21
+ path: row.path,
22
+ startLine: row.start_line,
23
+ endLine: row.end_line,
24
+ score: 1 - row.dist,
25
+ snippet: truncateUtf16Safe(row.text, params.snippetMaxChars),
26
+ source: row.source,
27
+ }));
28
+ }
29
+ const candidates = listChunks({
30
+ db: params.db,
31
+ providerModel: params.providerModel,
32
+ sourceFilter: params.sourceFilterChunks,
33
+ });
34
+ const scored = candidates
35
+ .map((chunk) => ({
36
+ chunk,
37
+ score: cosineSimilarity(params.queryVec, chunk.embedding),
38
+ }))
39
+ .filter((entry) => Number.isFinite(entry.score));
40
+ return scored
41
+ .toSorted((a, b) => b.score - a.score)
42
+ .slice(0, params.limit)
43
+ .map((entry) => ({
44
+ id: entry.chunk.id,
45
+ path: entry.chunk.path,
46
+ startLine: entry.chunk.startLine,
47
+ endLine: entry.chunk.endLine,
48
+ score: entry.score,
49
+ snippet: truncateUtf16Safe(entry.chunk.text, params.snippetMaxChars),
50
+ source: entry.chunk.source,
51
+ }));
52
+ }
53
+ export function listChunks(params) {
54
+ const rows = params.db
55
+ .prepare(`SELECT id, path, start_line, end_line, text, embedding, source\n` +
56
+ ` FROM chunks\n` +
57
+ ` WHERE model = ?${params.sourceFilter.sql}`)
58
+ .all(params.providerModel, ...params.sourceFilter.params);
59
+ return rows.map((row) => ({
60
+ id: row.id,
61
+ path: row.path,
62
+ startLine: row.start_line,
63
+ endLine: row.end_line,
64
+ text: row.text,
65
+ embedding: parseEmbedding(row.embedding),
66
+ source: row.source,
67
+ }));
68
+ }
69
+ export async function searchKeyword(params) {
70
+ if (params.limit <= 0) {
71
+ return [];
72
+ }
73
+ const ftsQuery = params.buildFtsQuery(params.query);
74
+ if (!ftsQuery) {
75
+ return [];
76
+ }
77
+ // When providerModel is undefined (FTS-only mode), search all models
78
+ const modelClause = params.providerModel ? " AND model = ?" : "";
79
+ const modelParams = params.providerModel ? [params.providerModel] : [];
80
+ const rows = params.db
81
+ .prepare(`SELECT id, path, source, start_line, end_line, text,\n` +
82
+ ` bm25(${params.ftsTable}) AS rank\n` +
83
+ ` FROM ${params.ftsTable}\n` +
84
+ ` WHERE ${params.ftsTable} MATCH ?${modelClause}${params.sourceFilter.sql}\n` +
85
+ ` ORDER BY rank ASC\n` +
86
+ ` LIMIT ?`)
87
+ .all(ftsQuery, ...modelParams, ...params.sourceFilter.params, params.limit);
88
+ return rows.map((row) => {
89
+ const textScore = params.bm25RankToScore(row.rank);
90
+ return {
91
+ id: row.id,
92
+ path: row.path,
93
+ startLine: row.start_line,
94
+ endLine: row.end_line,
95
+ score: textScore,
96
+ textScore,
97
+ snippet: truncateUtf16Safe(row.text, params.snippetMaxChars),
98
+ source: row.source,
99
+ };
100
+ });
101
+ }
102
+ //# sourceMappingURL=manager-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager-search.js","sourceRoot":"","sources":["../../src/memory/manager-search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Maximal Marginal Relevance (MMR) re-ranking algorithm.
3
+ *
4
+ * MMR balances relevance with diversity by iteratively selecting results
5
+ * that maximize: λ * relevance - (1-λ) * max_similarity_to_selected
6
+ *
7
+ * @see Carbonell & Goldstein, "The Use of MMR, Diversity-Based Reranking" (1998)
8
+ */
9
+ export type MMRItem = {
10
+ id: string;
11
+ score: number;
12
+ content: string;
13
+ };
14
+ export type MMRConfig = {
15
+ /** Enable/disable MMR re-ranking. Default: false (opt-in) */
16
+ enabled: boolean;
17
+ /** Lambda parameter: 0 = max diversity, 1 = max relevance. Default: 0.7 */
18
+ lambda: number;
19
+ };
20
+ export declare const DEFAULT_MMR_CONFIG: MMRConfig;
21
+ /**
22
+ * Tokenize text for Jaccard similarity computation.
23
+ * Extracts alphanumeric tokens and normalizes to lowercase.
24
+ */
25
+ export declare function tokenize(text: string): Set<string>;
26
+ /**
27
+ * Compute Jaccard similarity between two token sets.
28
+ * Returns a value in [0, 1] where 1 means identical sets.
29
+ */
30
+ export declare function jaccardSimilarity(setA: Set<string>, setB: Set<string>): number;
31
+ /**
32
+ * Compute text similarity between two content strings using Jaccard on tokens.
33
+ */
34
+ export declare function textSimilarity(contentA: string, contentB: string): number;
35
+ /**
36
+ * Compute MMR score for a candidate item.
37
+ * MMR = λ * relevance - (1-λ) * max_similarity_to_selected
38
+ */
39
+ export declare function computeMMRScore(relevance: number, maxSimilarity: number, lambda: number): number;
40
+ /**
41
+ * Re-rank items using Maximal Marginal Relevance (MMR).
42
+ *
43
+ * The algorithm iteratively selects items that balance relevance with diversity:
44
+ * 1. Start with the highest-scoring item
45
+ * 2. For each remaining slot, select the item that maximizes the MMR score
46
+ * 3. MMR score = λ * relevance - (1-λ) * max_similarity_to_already_selected
47
+ *
48
+ * @param items - Items to re-rank, must have score and content
49
+ * @param config - MMR configuration (lambda, enabled)
50
+ * @returns Re-ranked items in MMR order
51
+ */
52
+ export declare function mmrRerank<T extends MMRItem>(items: T[], config?: Partial<MMRConfig>): T[];
53
+ /**
54
+ * Apply MMR re-ranking to hybrid search results.
55
+ * Adapts the generic MMR function to work with the hybrid search result format.
56
+ */
57
+ export declare function applyMMRToHybridResults<T extends {
58
+ score: number;
59
+ snippet: string;
60
+ path: string;
61
+ startLine: number;
62
+ }>(results: T[], config?: Partial<MMRConfig>): T[];
63
+ //# sourceMappingURL=mmr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mmr.d.ts","sourceRoot":"","sources":["../../src/memory/mmr.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,OAAO,GAAG;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,6DAA6D;IAC7D,OAAO,EAAE,OAAO,CAAC;IACjB,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,SAGhC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAGlD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAoB9E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEzE;AA4BD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEhG;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,GAAE,OAAO,CAAC,SAAS,CAAM,GAAG,CAAC,EAAE,CAmE7F;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,CAAC,SAAS;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAC7E,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,GAAE,OAAO,CAAC,SAAS,CAAM,GAAG,CAAC,EAAE,CAuBpD"}