@chendpoc/pi-memory 0.2.1 → 0.2.3

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 (558) hide show
  1. package/README.md +73 -42
  2. package/dist/adapters/embed/factory.d.ts +0 -1
  3. package/dist/adapters/embed/factory.js +0 -1
  4. package/dist/adapters/embed/hash.d.ts +0 -1
  5. package/dist/adapters/embed/hash.js +0 -1
  6. package/dist/adapters/embed/normalize.d.ts +0 -1
  7. package/dist/adapters/embed/normalize.js +0 -1
  8. package/dist/adapters/embed/ollama.d.ts +0 -1
  9. package/dist/adapters/embed/ollama.js +0 -1
  10. package/dist/adapters/embed/openai.d.ts +0 -1
  11. package/dist/adapters/embed/openai.js +0 -1
  12. package/dist/adapters/embed/types.d.ts +0 -1
  13. package/dist/adapters/embed/types.js +0 -1
  14. package/dist/adapters/http.d.ts +0 -1
  15. package/dist/adapters/http.js +0 -1
  16. package/dist/adapters/index.d.ts +0 -1
  17. package/dist/adapters/index.js +0 -1
  18. package/dist/adapters/llm/extractText.d.ts +0 -1
  19. package/dist/adapters/llm/extractText.js +0 -1
  20. package/dist/adapters/llm/factory.d.ts +0 -1
  21. package/dist/adapters/llm/factory.js +0 -1
  22. package/dist/adapters/llm/index.d.ts +0 -1
  23. package/dist/adapters/llm/index.js +0 -1
  24. package/dist/adapters/llm/modelSpec.d.ts +0 -1
  25. package/dist/adapters/llm/modelSpec.js +0 -1
  26. package/dist/adapters/llm/ollama.d.ts +0 -1
  27. package/dist/adapters/llm/ollama.js +0 -1
  28. package/dist/adapters/llm/openai-compat.d.ts +0 -1
  29. package/dist/adapters/llm/openai-compat.js +0 -1
  30. package/dist/adapters/llm/pi-ai.d.ts +0 -1
  31. package/dist/adapters/llm/pi-ai.js +0 -1
  32. package/dist/adapters/llm/standalone.d.ts +0 -1
  33. package/dist/adapters/llm/standalone.js +0 -1
  34. package/dist/adapters/llm/types.d.ts +0 -1
  35. package/dist/adapters/llm/types.js +0 -1
  36. package/dist/cli/init.d.ts +0 -1
  37. package/dist/cli/init.js +0 -1
  38. package/dist/cli/jobs.d.ts +0 -1
  39. package/dist/cli/jobs.js +0 -1
  40. package/dist/cli/log.d.ts +0 -1
  41. package/dist/cli/log.js +0 -1
  42. package/dist/cli/parseArgs.d.ts +0 -1
  43. package/dist/cli/parseArgs.js +0 -1
  44. package/dist/cli/status.d.ts +0 -1
  45. package/dist/cli/status.js +0 -1
  46. package/dist/cli/theme.d.ts +0 -1
  47. package/dist/cli/theme.js +0 -1
  48. package/dist/cli.d.ts +0 -1
  49. package/dist/cli.js +0 -1
  50. package/dist/commands/index.d.ts +0 -1
  51. package/dist/commands/index.js +0 -1
  52. package/dist/commands/parseMemoryStatusArgs.d.ts +0 -1
  53. package/dist/commands/parseMemoryStatusArgs.js +0 -1
  54. package/dist/commands/parseRememberArgs.d.ts +0 -1
  55. package/dist/commands/parseRememberArgs.js +0 -1
  56. package/dist/commands/remember.d.ts +0 -1
  57. package/dist/commands/remember.js +0 -1
  58. package/dist/commands/status.d.ts +0 -1
  59. package/dist/commands/status.js +0 -1
  60. package/dist/commands/types.d.ts +0 -1
  61. package/dist/commands/types.js +0 -1
  62. package/dist/compact/index.d.ts +0 -1
  63. package/dist/compact/index.js +0 -1
  64. package/dist/compact/parseMemoryExport.d.ts +0 -1
  65. package/dist/compact/parseMemoryExport.js +0 -1
  66. package/dist/compact/register.d.ts +0 -1
  67. package/dist/compact/register.js +0 -1
  68. package/dist/compact/runSummary.d.ts +0 -1
  69. package/dist/compact/runSummary.js +0 -1
  70. package/dist/compact/subagentDelta.d.ts +0 -1
  71. package/dist/compact/subagentDelta.js +0 -1
  72. package/dist/compact/summaryPrompt.d.ts +0 -1
  73. package/dist/compact/summaryPrompt.js +0 -1
  74. package/dist/config/agentDir.d.ts +0 -1
  75. package/dist/config/agentDir.js +0 -1
  76. package/dist/config/chunking.d.ts +0 -1
  77. package/dist/config/chunking.js +0 -1
  78. package/dist/config/env.d.ts +0 -1
  79. package/dist/config/env.js +0 -1
  80. package/dist/config/index.d.ts +0 -1
  81. package/dist/config/index.js +0 -1
  82. package/dist/config/loadEnv.d.ts +0 -1
  83. package/dist/config/loadEnv.js +0 -1
  84. package/dist/config/preflight.d.ts +0 -1
  85. package/dist/config/preflight.js +0 -1
  86. package/dist/config/preflightBudget.d.ts +0 -1
  87. package/dist/config/preflightBudget.js +0 -1
  88. package/dist/config/retrieval.d.ts +0 -1
  89. package/dist/config/retrieval.js +0 -1
  90. package/dist/consolidate/entryKey.d.ts +0 -1
  91. package/dist/consolidate/entryKey.js +0 -1
  92. package/dist/consolidate/index.d.ts +0 -1
  93. package/dist/consolidate/index.js +0 -1
  94. package/dist/consolidate/mergeEntries.d.ts +0 -1
  95. package/dist/consolidate/mergeEntries.js +0 -1
  96. package/dist/consolidate/mergePrompt.d.ts +0 -1
  97. package/dist/consolidate/mergePrompt.js +0 -1
  98. package/dist/consolidate/mergeWithLlm.d.ts +0 -1
  99. package/dist/consolidate/mergeWithLlm.js +0 -1
  100. package/dist/consolidate/runJob.d.ts +0 -1
  101. package/dist/consolidate/runJob.js +0 -1
  102. package/dist/consolidate/scheduler.d.ts +0 -1
  103. package/dist/consolidate/scheduler.js +0 -1
  104. package/dist/constants/chunking.d.ts +0 -1
  105. package/dist/constants/chunking.js +0 -1
  106. package/dist/constants/env.d.ts +0 -1
  107. package/dist/constants/env.js +0 -1
  108. package/dist/constants/index.d.ts +0 -1
  109. package/dist/constants/index.js +0 -1
  110. package/dist/constants/memory.d.ts +0 -1
  111. package/dist/constants/memory.js +0 -1
  112. package/dist/constants/paths.d.ts +0 -1
  113. package/dist/constants/paths.js +0 -1
  114. package/dist/constants/preflight.d.ts +0 -1
  115. package/dist/constants/preflight.js +0 -1
  116. package/dist/constants/retrieval.d.ts +0 -1
  117. package/dist/constants/retrieval.js +0 -1
  118. package/dist/constants/security.d.ts +0 -1
  119. package/dist/constants/security.js +0 -1
  120. package/dist/constants/timing.d.ts +0 -1
  121. package/dist/constants/timing.js +0 -1
  122. package/dist/index.d.ts +0 -1
  123. package/dist/index.js +0 -1
  124. package/dist/init/workspace.d.ts +0 -1
  125. package/dist/init/workspace.js +0 -1
  126. package/dist/ipc/jsonlFramer.d.ts +0 -1
  127. package/dist/ipc/jsonlFramer.js +0 -1
  128. package/dist/pi-extension.d.ts +0 -1
  129. package/dist/pi-extension.js +0 -1
  130. package/dist/preflight/episodic.d.ts +0 -1
  131. package/dist/preflight/episodic.js +0 -1
  132. package/dist/preflight/intentCache.d.ts +0 -1
  133. package/dist/preflight/intentCache.js +0 -1
  134. package/dist/preflight/queryCache.d.ts +0 -1
  135. package/dist/preflight/queryCache.js +0 -1
  136. package/dist/preflight/queryIntent.d.ts +0 -1
  137. package/dist/preflight/queryIntent.js +0 -1
  138. package/dist/preflight/render.d.ts +0 -1
  139. package/dist/preflight/render.js +0 -1
  140. package/dist/preflight/session.d.ts +0 -1
  141. package/dist/preflight/session.js +0 -1
  142. package/dist/preflight/strip.d.ts +0 -1
  143. package/dist/preflight/strip.js +0 -1
  144. package/dist/shutdown/enqueue.d.ts +0 -1
  145. package/dist/shutdown/enqueue.js +0 -1
  146. package/dist/shutdown/extractPrompt.d.ts +0 -1
  147. package/dist/shutdown/extractPrompt.js +0 -1
  148. package/dist/shutdown/processed.d.ts +0 -1
  149. package/dist/shutdown/processed.js +0 -1
  150. package/dist/shutdown/readQueue.d.ts +0 -1
  151. package/dist/shutdown/readQueue.js +0 -1
  152. package/dist/shutdown/runDrainJob.d.ts +0 -1
  153. package/dist/shutdown/runDrainJob.js +0 -1
  154. package/dist/shutdown/sessionReader.d.ts +0 -1
  155. package/dist/shutdown/sessionReader.js +0 -1
  156. package/dist/sidecar/client.d.ts +0 -1
  157. package/dist/sidecar/client.js +0 -1
  158. package/dist/sidecar/paths.d.ts +0 -1
  159. package/dist/sidecar/paths.js +0 -1
  160. package/dist/sidecar/protocol.d.ts +0 -1
  161. package/dist/sidecar/protocol.js +0 -1
  162. package/dist/sidecar/reindexBridge.d.ts +0 -1
  163. package/dist/sidecar/reindexBridge.js +0 -1
  164. package/dist/sidecar/server/process.d.ts +0 -1
  165. package/dist/sidecar/server/process.js +0 -1
  166. package/dist/sidecar/server/query.d.ts +0 -1
  167. package/dist/sidecar/server/query.js +0 -1
  168. package/dist/sidecar/server/reindex.d.ts +0 -1
  169. package/dist/sidecar/server/reindex.js +0 -1
  170. package/dist/sidecar/server/server.d.ts +0 -1
  171. package/dist/sidecar/server/server.js +0 -1
  172. package/dist/sidecar/server/stats.d.ts +0 -1
  173. package/dist/sidecar/server/stats.js +0 -1
  174. package/dist/sidecar/server/vec/embedder.d.ts +0 -1
  175. package/dist/sidecar/server/vec/embedder.js +0 -1
  176. package/dist/sidecar/server/vec/mmr.d.ts +0 -1
  177. package/dist/sidecar/server/vec/mmr.js +0 -1
  178. package/dist/sidecar/server/vec/store.d.ts +0 -1
  179. package/dist/sidecar/server/vec/store.js +0 -1
  180. package/dist/sidecar/sidecarManager.d.ts +0 -1
  181. package/dist/sidecar/sidecarManager.js +0 -1
  182. package/dist/sidecar/utils.d.ts +0 -1
  183. package/dist/sidecar/utils.js +0 -1
  184. package/dist/sidecar/warmup.d.ts +0 -1
  185. package/dist/sidecar/warmup.js +0 -1
  186. package/dist/store/backend.d.ts +0 -1
  187. package/dist/store/backend.js +0 -1
  188. package/dist/store/index.d.ts +0 -1
  189. package/dist/store/index.js +0 -1
  190. package/dist/store/indexChunks.d.ts +0 -1
  191. package/dist/store/indexChunks.js +0 -1
  192. package/dist/store/markdown/format.d.ts +0 -1
  193. package/dist/store/markdown/format.js +0 -1
  194. package/dist/store/markdown/parse.d.ts +0 -1
  195. package/dist/store/markdown/parse.js +0 -1
  196. package/dist/store/markdown/template.d.ts +0 -1
  197. package/dist/store/markdown/template.js +0 -1
  198. package/dist/store/memoryStore.d.ts +0 -1
  199. package/dist/store/memoryStore.js +0 -1
  200. package/dist/store/paths.d.ts +0 -1
  201. package/dist/store/paths.js +0 -1
  202. package/dist/store/types.d.ts +0 -1
  203. package/dist/store/types.js +0 -1
  204. package/dist/ui/memoryStatusWidget.d.ts +0 -1
  205. package/dist/ui/memoryStatusWidget.js +0 -1
  206. package/dist/utils/debugLog.d.ts +0 -1
  207. package/dist/utils/debugLog.js +0 -1
  208. package/dist/utils/fs.d.ts +0 -1
  209. package/dist/utils/fs.js +0 -1
  210. package/dist/utils/index.d.ts +0 -1
  211. package/dist/utils/index.js +0 -1
  212. package/dist/utils/paths.d.ts +0 -1
  213. package/dist/utils/paths.js +0 -1
  214. package/dist/utils/platform.d.ts +0 -1
  215. package/dist/utils/platform.js +0 -1
  216. package/dist/utils/scheduler.d.ts +0 -1
  217. package/dist/utils/scheduler.js +0 -1
  218. package/dist/utils/socket.d.ts +0 -1
  219. package/dist/utils/socket.js +0 -1
  220. package/dist/utils/time.d.ts +0 -1
  221. package/dist/utils/time.js +0 -1
  222. package/package.json +6 -10
  223. package/scripts/prepare.mjs +24 -0
  224. package/UBIQUITOUS_LANGUAGE.md +0 -81
  225. package/dist/adapters/embed/factory.d.ts.map +0 -1
  226. package/dist/adapters/embed/factory.js.map +0 -1
  227. package/dist/adapters/embed/hash.d.ts.map +0 -1
  228. package/dist/adapters/embed/hash.js.map +0 -1
  229. package/dist/adapters/embed/normalize.d.ts.map +0 -1
  230. package/dist/adapters/embed/normalize.js.map +0 -1
  231. package/dist/adapters/embed/ollama.d.ts.map +0 -1
  232. package/dist/adapters/embed/ollama.js.map +0 -1
  233. package/dist/adapters/embed/openai.d.ts.map +0 -1
  234. package/dist/adapters/embed/openai.js.map +0 -1
  235. package/dist/adapters/embed/types.d.ts.map +0 -1
  236. package/dist/adapters/embed/types.js.map +0 -1
  237. package/dist/adapters/http.d.ts.map +0 -1
  238. package/dist/adapters/http.js.map +0 -1
  239. package/dist/adapters/index.d.ts.map +0 -1
  240. package/dist/adapters/index.js.map +0 -1
  241. package/dist/adapters/llm/extractText.d.ts.map +0 -1
  242. package/dist/adapters/llm/extractText.js.map +0 -1
  243. package/dist/adapters/llm/factory.d.ts.map +0 -1
  244. package/dist/adapters/llm/factory.js.map +0 -1
  245. package/dist/adapters/llm/index.d.ts.map +0 -1
  246. package/dist/adapters/llm/index.js.map +0 -1
  247. package/dist/adapters/llm/modelSpec.d.ts.map +0 -1
  248. package/dist/adapters/llm/modelSpec.js.map +0 -1
  249. package/dist/adapters/llm/ollama.d.ts.map +0 -1
  250. package/dist/adapters/llm/ollama.js.map +0 -1
  251. package/dist/adapters/llm/openai-compat.d.ts.map +0 -1
  252. package/dist/adapters/llm/openai-compat.js.map +0 -1
  253. package/dist/adapters/llm/pi-ai.d.ts.map +0 -1
  254. package/dist/adapters/llm/pi-ai.js.map +0 -1
  255. package/dist/adapters/llm/standalone.d.ts.map +0 -1
  256. package/dist/adapters/llm/standalone.js.map +0 -1
  257. package/dist/adapters/llm/types.d.ts.map +0 -1
  258. package/dist/adapters/llm/types.js.map +0 -1
  259. package/dist/cli/init.d.ts.map +0 -1
  260. package/dist/cli/init.js.map +0 -1
  261. package/dist/cli/jobs.d.ts.map +0 -1
  262. package/dist/cli/jobs.js.map +0 -1
  263. package/dist/cli/log.d.ts.map +0 -1
  264. package/dist/cli/log.js.map +0 -1
  265. package/dist/cli/parseArgs.d.ts.map +0 -1
  266. package/dist/cli/parseArgs.js.map +0 -1
  267. package/dist/cli/status.d.ts.map +0 -1
  268. package/dist/cli/status.js.map +0 -1
  269. package/dist/cli/theme.d.ts.map +0 -1
  270. package/dist/cli/theme.js.map +0 -1
  271. package/dist/cli.d.ts.map +0 -1
  272. package/dist/cli.js.map +0 -1
  273. package/dist/commands/index.d.ts.map +0 -1
  274. package/dist/commands/index.js.map +0 -1
  275. package/dist/commands/parseMemoryStatusArgs.d.ts.map +0 -1
  276. package/dist/commands/parseMemoryStatusArgs.js.map +0 -1
  277. package/dist/commands/parseRememberArgs.d.ts.map +0 -1
  278. package/dist/commands/parseRememberArgs.js.map +0 -1
  279. package/dist/commands/remember.d.ts.map +0 -1
  280. package/dist/commands/remember.js.map +0 -1
  281. package/dist/commands/status.d.ts.map +0 -1
  282. package/dist/commands/status.js.map +0 -1
  283. package/dist/commands/types.d.ts.map +0 -1
  284. package/dist/commands/types.js.map +0 -1
  285. package/dist/compact/index.d.ts.map +0 -1
  286. package/dist/compact/index.js.map +0 -1
  287. package/dist/compact/parseMemoryExport.d.ts.map +0 -1
  288. package/dist/compact/parseMemoryExport.js.map +0 -1
  289. package/dist/compact/register.d.ts.map +0 -1
  290. package/dist/compact/register.js.map +0 -1
  291. package/dist/compact/runSummary.d.ts.map +0 -1
  292. package/dist/compact/runSummary.js.map +0 -1
  293. package/dist/compact/subagentDelta.d.ts.map +0 -1
  294. package/dist/compact/subagentDelta.js.map +0 -1
  295. package/dist/compact/summaryPrompt.d.ts.map +0 -1
  296. package/dist/compact/summaryPrompt.js.map +0 -1
  297. package/dist/config/agentDir.d.ts.map +0 -1
  298. package/dist/config/agentDir.js.map +0 -1
  299. package/dist/config/chunking.d.ts.map +0 -1
  300. package/dist/config/chunking.js.map +0 -1
  301. package/dist/config/env.d.ts.map +0 -1
  302. package/dist/config/env.js.map +0 -1
  303. package/dist/config/index.d.ts.map +0 -1
  304. package/dist/config/index.js.map +0 -1
  305. package/dist/config/loadEnv.d.ts.map +0 -1
  306. package/dist/config/loadEnv.js.map +0 -1
  307. package/dist/config/preflight.d.ts.map +0 -1
  308. package/dist/config/preflight.js.map +0 -1
  309. package/dist/config/preflightBudget.d.ts.map +0 -1
  310. package/dist/config/preflightBudget.js.map +0 -1
  311. package/dist/config/retrieval.d.ts.map +0 -1
  312. package/dist/config/retrieval.js.map +0 -1
  313. package/dist/consolidate/entryKey.d.ts.map +0 -1
  314. package/dist/consolidate/entryKey.js.map +0 -1
  315. package/dist/consolidate/index.d.ts.map +0 -1
  316. package/dist/consolidate/index.js.map +0 -1
  317. package/dist/consolidate/mergeEntries.d.ts.map +0 -1
  318. package/dist/consolidate/mergeEntries.js.map +0 -1
  319. package/dist/consolidate/mergePrompt.d.ts.map +0 -1
  320. package/dist/consolidate/mergePrompt.js.map +0 -1
  321. package/dist/consolidate/mergeWithLlm.d.ts.map +0 -1
  322. package/dist/consolidate/mergeWithLlm.js.map +0 -1
  323. package/dist/consolidate/runJob.d.ts.map +0 -1
  324. package/dist/consolidate/runJob.js.map +0 -1
  325. package/dist/consolidate/scheduler.d.ts.map +0 -1
  326. package/dist/consolidate/scheduler.js.map +0 -1
  327. package/dist/constants/chunking.d.ts.map +0 -1
  328. package/dist/constants/chunking.js.map +0 -1
  329. package/dist/constants/env.d.ts.map +0 -1
  330. package/dist/constants/env.js.map +0 -1
  331. package/dist/constants/index.d.ts.map +0 -1
  332. package/dist/constants/index.js.map +0 -1
  333. package/dist/constants/memory.d.ts.map +0 -1
  334. package/dist/constants/memory.js.map +0 -1
  335. package/dist/constants/paths.d.ts.map +0 -1
  336. package/dist/constants/paths.js.map +0 -1
  337. package/dist/constants/preflight.d.ts.map +0 -1
  338. package/dist/constants/preflight.js.map +0 -1
  339. package/dist/constants/retrieval.d.ts.map +0 -1
  340. package/dist/constants/retrieval.js.map +0 -1
  341. package/dist/constants/security.d.ts.map +0 -1
  342. package/dist/constants/security.js.map +0 -1
  343. package/dist/constants/timing.d.ts.map +0 -1
  344. package/dist/constants/timing.js.map +0 -1
  345. package/dist/index.d.ts.map +0 -1
  346. package/dist/index.js.map +0 -1
  347. package/dist/init/workspace.d.ts.map +0 -1
  348. package/dist/init/workspace.js.map +0 -1
  349. package/dist/ipc/jsonlFramer.d.ts.map +0 -1
  350. package/dist/ipc/jsonlFramer.js.map +0 -1
  351. package/dist/pi-extension.d.ts.map +0 -1
  352. package/dist/pi-extension.js.map +0 -1
  353. package/dist/preflight/episodic.d.ts.map +0 -1
  354. package/dist/preflight/episodic.js.map +0 -1
  355. package/dist/preflight/intentCache.d.ts.map +0 -1
  356. package/dist/preflight/intentCache.js.map +0 -1
  357. package/dist/preflight/queryCache.d.ts.map +0 -1
  358. package/dist/preflight/queryCache.js.map +0 -1
  359. package/dist/preflight/queryIntent.d.ts.map +0 -1
  360. package/dist/preflight/queryIntent.js.map +0 -1
  361. package/dist/preflight/render.d.ts.map +0 -1
  362. package/dist/preflight/render.js.map +0 -1
  363. package/dist/preflight/session.d.ts.map +0 -1
  364. package/dist/preflight/session.js.map +0 -1
  365. package/dist/preflight/strip.d.ts.map +0 -1
  366. package/dist/preflight/strip.js.map +0 -1
  367. package/dist/shutdown/enqueue.d.ts.map +0 -1
  368. package/dist/shutdown/enqueue.js.map +0 -1
  369. package/dist/shutdown/extractPrompt.d.ts.map +0 -1
  370. package/dist/shutdown/extractPrompt.js.map +0 -1
  371. package/dist/shutdown/processed.d.ts.map +0 -1
  372. package/dist/shutdown/processed.js.map +0 -1
  373. package/dist/shutdown/readQueue.d.ts.map +0 -1
  374. package/dist/shutdown/readQueue.js.map +0 -1
  375. package/dist/shutdown/runDrainJob.d.ts.map +0 -1
  376. package/dist/shutdown/runDrainJob.js.map +0 -1
  377. package/dist/shutdown/sessionReader.d.ts.map +0 -1
  378. package/dist/shutdown/sessionReader.js.map +0 -1
  379. package/dist/sidecar/client.d.ts.map +0 -1
  380. package/dist/sidecar/client.js.map +0 -1
  381. package/dist/sidecar/paths.d.ts.map +0 -1
  382. package/dist/sidecar/paths.js.map +0 -1
  383. package/dist/sidecar/protocol.d.ts.map +0 -1
  384. package/dist/sidecar/protocol.js.map +0 -1
  385. package/dist/sidecar/reindexBridge.d.ts.map +0 -1
  386. package/dist/sidecar/reindexBridge.js.map +0 -1
  387. package/dist/sidecar/server/process.d.ts.map +0 -1
  388. package/dist/sidecar/server/process.js.map +0 -1
  389. package/dist/sidecar/server/query.d.ts.map +0 -1
  390. package/dist/sidecar/server/query.js.map +0 -1
  391. package/dist/sidecar/server/reindex.d.ts.map +0 -1
  392. package/dist/sidecar/server/reindex.js.map +0 -1
  393. package/dist/sidecar/server/server.d.ts.map +0 -1
  394. package/dist/sidecar/server/server.js.map +0 -1
  395. package/dist/sidecar/server/stats.d.ts.map +0 -1
  396. package/dist/sidecar/server/stats.js.map +0 -1
  397. package/dist/sidecar/server/vec/embedder.d.ts.map +0 -1
  398. package/dist/sidecar/server/vec/embedder.js.map +0 -1
  399. package/dist/sidecar/server/vec/mmr.d.ts.map +0 -1
  400. package/dist/sidecar/server/vec/mmr.js.map +0 -1
  401. package/dist/sidecar/server/vec/store.d.ts.map +0 -1
  402. package/dist/sidecar/server/vec/store.js.map +0 -1
  403. package/dist/sidecar/sidecarManager.d.ts.map +0 -1
  404. package/dist/sidecar/sidecarManager.js.map +0 -1
  405. package/dist/sidecar/utils.d.ts.map +0 -1
  406. package/dist/sidecar/utils.js.map +0 -1
  407. package/dist/sidecar/warmup.d.ts.map +0 -1
  408. package/dist/sidecar/warmup.js.map +0 -1
  409. package/dist/store/backend.d.ts.map +0 -1
  410. package/dist/store/backend.js.map +0 -1
  411. package/dist/store/index.d.ts.map +0 -1
  412. package/dist/store/index.js.map +0 -1
  413. package/dist/store/indexChunks.d.ts.map +0 -1
  414. package/dist/store/indexChunks.js.map +0 -1
  415. package/dist/store/markdown/format.d.ts.map +0 -1
  416. package/dist/store/markdown/format.js.map +0 -1
  417. package/dist/store/markdown/parse.d.ts.map +0 -1
  418. package/dist/store/markdown/parse.js.map +0 -1
  419. package/dist/store/markdown/template.d.ts.map +0 -1
  420. package/dist/store/markdown/template.js.map +0 -1
  421. package/dist/store/memoryStore.d.ts.map +0 -1
  422. package/dist/store/memoryStore.js.map +0 -1
  423. package/dist/store/paths.d.ts.map +0 -1
  424. package/dist/store/paths.js.map +0 -1
  425. package/dist/store/types.d.ts.map +0 -1
  426. package/dist/store/types.js.map +0 -1
  427. package/dist/ui/memoryStatusWidget.d.ts.map +0 -1
  428. package/dist/ui/memoryStatusWidget.js.map +0 -1
  429. package/dist/utils/debugLog.d.ts.map +0 -1
  430. package/dist/utils/debugLog.js.map +0 -1
  431. package/dist/utils/fs.d.ts.map +0 -1
  432. package/dist/utils/fs.js.map +0 -1
  433. package/dist/utils/index.d.ts.map +0 -1
  434. package/dist/utils/index.js.map +0 -1
  435. package/dist/utils/paths.d.ts.map +0 -1
  436. package/dist/utils/paths.js.map +0 -1
  437. package/dist/utils/platform.d.ts.map +0 -1
  438. package/dist/utils/platform.js.map +0 -1
  439. package/dist/utils/scheduler.d.ts.map +0 -1
  440. package/dist/utils/scheduler.js.map +0 -1
  441. package/dist/utils/socket.d.ts.map +0 -1
  442. package/dist/utils/socket.js.map +0 -1
  443. package/dist/utils/time.d.ts.map +0 -1
  444. package/dist/utils/time.js.map +0 -1
  445. package/doc/README-zh.md +0 -365
  446. package/doc/ROADMAP-zh.md +0 -52
  447. package/doc/ROADMAP.md +0 -52
  448. package/src/adapters/embed/factory.ts +0 -50
  449. package/src/adapters/embed/hash.ts +0 -29
  450. package/src/adapters/embed/normalize.ts +0 -13
  451. package/src/adapters/embed/ollama.ts +0 -49
  452. package/src/adapters/embed/openai.ts +0 -46
  453. package/src/adapters/embed/types.ts +0 -9
  454. package/src/adapters/http.ts +0 -42
  455. package/src/adapters/index.ts +0 -16
  456. package/src/adapters/llm/extractText.ts +0 -6
  457. package/src/adapters/llm/factory.ts +0 -60
  458. package/src/adapters/llm/index.ts +0 -7
  459. package/src/adapters/llm/modelSpec.ts +0 -39
  460. package/src/adapters/llm/ollama.ts +0 -42
  461. package/src/adapters/llm/openai-compat.ts +0 -46
  462. package/src/adapters/llm/pi-ai.ts +0 -75
  463. package/src/adapters/llm/standalone.ts +0 -60
  464. package/src/adapters/llm/types.ts +0 -16
  465. package/src/cli/init.ts +0 -18
  466. package/src/cli/jobs.ts +0 -144
  467. package/src/cli/log.ts +0 -46
  468. package/src/cli/parseArgs.ts +0 -175
  469. package/src/cli/status.ts +0 -323
  470. package/src/cli/theme.ts +0 -26
  471. package/src/cli.ts +0 -105
  472. package/src/commands/index.ts +0 -20
  473. package/src/commands/parseMemoryStatusArgs.ts +0 -11
  474. package/src/commands/parseRememberArgs.ts +0 -55
  475. package/src/commands/remember.ts +0 -43
  476. package/src/commands/status.ts +0 -112
  477. package/src/commands/types.ts +0 -12
  478. package/src/compact/index.ts +0 -4
  479. package/src/compact/parseMemoryExport.ts +0 -71
  480. package/src/compact/register.ts +0 -57
  481. package/src/compact/runSummary.ts +0 -42
  482. package/src/compact/subagentDelta.ts +0 -22
  483. package/src/compact/summaryPrompt.ts +0 -45
  484. package/src/config/agentDir.ts +0 -24
  485. package/src/config/chunking.ts +0 -36
  486. package/src/config/env.ts +0 -97
  487. package/src/config/index.ts +0 -7
  488. package/src/config/loadEnv.ts +0 -26
  489. package/src/config/preflight.ts +0 -34
  490. package/src/config/preflightBudget.ts +0 -33
  491. package/src/config/retrieval.ts +0 -50
  492. package/src/consolidate/entryKey.ts +0 -4
  493. package/src/consolidate/index.ts +0 -4
  494. package/src/consolidate/mergeEntries.ts +0 -22
  495. package/src/consolidate/mergePrompt.ts +0 -46
  496. package/src/consolidate/mergeWithLlm.ts +0 -39
  497. package/src/consolidate/runJob.ts +0 -81
  498. package/src/consolidate/scheduler.ts +0 -54
  499. package/src/constants/chunking.ts +0 -8
  500. package/src/constants/env.ts +0 -59
  501. package/src/constants/index.ts +0 -7
  502. package/src/constants/memory.ts +0 -22
  503. package/src/constants/paths.ts +0 -26
  504. package/src/constants/preflight.ts +0 -22
  505. package/src/constants/retrieval.ts +0 -10
  506. package/src/constants/security.ts +0 -5
  507. package/src/constants/timing.ts +0 -48
  508. package/src/index.ts +0 -11
  509. package/src/init/workspace.ts +0 -44
  510. package/src/ipc/jsonlFramer.ts +0 -29
  511. package/src/pi-extension.ts +0 -294
  512. package/src/preflight/episodic.ts +0 -183
  513. package/src/preflight/intentCache.ts +0 -44
  514. package/src/preflight/queryCache.ts +0 -59
  515. package/src/preflight/queryIntent.ts +0 -126
  516. package/src/preflight/render.ts +0 -71
  517. package/src/preflight/session.ts +0 -7
  518. package/src/preflight/strip.ts +0 -43
  519. package/src/shutdown/enqueue.ts +0 -29
  520. package/src/shutdown/extractPrompt.ts +0 -27
  521. package/src/shutdown/processed.ts +0 -45
  522. package/src/shutdown/readQueue.ts +0 -26
  523. package/src/shutdown/runDrainJob.ts +0 -202
  524. package/src/shutdown/sessionReader.ts +0 -61
  525. package/src/sidecar/client.ts +0 -114
  526. package/src/sidecar/paths.ts +0 -31
  527. package/src/sidecar/protocol.ts +0 -38
  528. package/src/sidecar/reindexBridge.ts +0 -52
  529. package/src/sidecar/server/process.ts +0 -27
  530. package/src/sidecar/server/query.ts +0 -16
  531. package/src/sidecar/server/reindex.ts +0 -21
  532. package/src/sidecar/server/server.ts +0 -105
  533. package/src/sidecar/server/stats.ts +0 -23
  534. package/src/sidecar/server/vec/embedder.ts +0 -1
  535. package/src/sidecar/server/vec/mmr.ts +0 -55
  536. package/src/sidecar/server/vec/store.ts +0 -232
  537. package/src/sidecar/sidecarManager.ts +0 -134
  538. package/src/sidecar/utils.ts +0 -28
  539. package/src/sidecar/warmup.ts +0 -50
  540. package/src/store/backend.ts +0 -66
  541. package/src/store/index.ts +0 -5
  542. package/src/store/indexChunks.ts +0 -89
  543. package/src/store/markdown/format.ts +0 -16
  544. package/src/store/markdown/parse.ts +0 -63
  545. package/src/store/markdown/template.ts +0 -24
  546. package/src/store/memoryStore.ts +0 -518
  547. package/src/store/paths.ts +0 -33
  548. package/src/store/proper-lockfile.d.ts +0 -3
  549. package/src/store/types.ts +0 -46
  550. package/src/ui/memoryStatusWidget.ts +0 -80
  551. package/src/utils/debugLog.ts +0 -22
  552. package/src/utils/fs.ts +0 -115
  553. package/src/utils/index.ts +0 -68
  554. package/src/utils/paths.ts +0 -67
  555. package/src/utils/platform.ts +0 -20
  556. package/src/utils/scheduler.ts +0 -98
  557. package/src/utils/socket.ts +0 -33
  558. package/src/utils/time.ts +0 -51
@@ -1,232 +0,0 @@
1
- import { createRequire } from "node:module";
2
-
3
- import type { Embedder } from "../../../adapters/embed/types.js";
4
- import type { IndexDocument, MemoryEntry } from "../../protocol.js";
5
- import { ensureDirSync, pathDirname } from "../../../utils/fs.js";
6
- import { readRetrievalConfig } from "../../../config/retrieval.js";
7
- import { getEmbedder } from "./embedder.js";
8
- import { cosineSimilarity, distanceToRelevance, mmrSelect, type ScoredCandidate } from "./mmr.js";
9
-
10
- const require = createRequire(import.meta.url);
11
-
12
- type ChunkRow = {
13
- chunk_id: string;
14
- content: string;
15
- source: string;
16
- timestamp: string;
17
- embedding: Buffer;
18
- };
19
-
20
- export type StoredEmbeddingMeta = {
21
- model: string;
22
- provider: string;
23
- dim: number;
24
- };
25
-
26
- export type ReindexOutcome = {
27
- indexed: number;
28
- indexGeneration: number;
29
- };
30
-
31
- function embeddingToBlob(embedding: Float32Array): Buffer {
32
- return Buffer.from(embedding.buffer, embedding.byteOffset, embedding.byteLength);
33
- }
34
-
35
- function blobToEmbedding(blob: Buffer): Float32Array {
36
- return new Float32Array(blob.buffer, blob.byteOffset, blob.byteLength / 4);
37
- }
38
-
39
- export class VecStore {
40
- private db: import("better-sqlite3").Database;
41
-
42
- constructor(dbPath: string) {
43
- ensureDirSync(pathDirname(dbPath));
44
- const Database = require("better-sqlite3") as typeof import("better-sqlite3");
45
- this.db = new Database(dbPath);
46
- this.initSchema();
47
- }
48
-
49
- private initSchema(): void {
50
- this.db.exec(`
51
- CREATE TABLE IF NOT EXISTS meta (
52
- key TEXT PRIMARY KEY,
53
- value TEXT NOT NULL
54
- );
55
- CREATE TABLE IF NOT EXISTS memory_chunks (
56
- chunk_id TEXT PRIMARY KEY,
57
- content TEXT NOT NULL,
58
- source TEXT NOT NULL,
59
- timestamp TEXT NOT NULL,
60
- embedding BLOB NOT NULL
61
- );
62
- `);
63
- }
64
-
65
- getStoredEmbeddingMeta(): StoredEmbeddingMeta | null {
66
- const read = (key: string): string | undefined =>
67
- this.db.prepare("SELECT value FROM meta WHERE key = ?").pluck().get(key) as string | undefined;
68
-
69
- const model = read("embedding_model");
70
- const provider = read("embedding_provider");
71
- const dimRaw = read("embedding_dim");
72
- if (!model || !provider || !dimRaw) return null;
73
-
74
- const dim = Number.parseInt(dimRaw, 10);
75
- if (!Number.isFinite(dim)) return null;
76
- return { model, provider, dim };
77
- }
78
-
79
- embeddingMetaMatches(embedder: Embedder): boolean {
80
- const stored = this.getStoredEmbeddingMeta();
81
- if (!stored) return true;
82
- return (
83
- stored.model === embedder.model &&
84
- stored.provider === embedder.provider &&
85
- stored.dim === embedder.dim
86
- );
87
- }
88
-
89
- getIndexGeneration(): number {
90
- const raw = this.db.prepare("SELECT value FROM meta WHERE key = 'index_generation'").pluck().get();
91
- return Number(raw ?? "0");
92
- }
93
-
94
- getChunkCount(): number {
95
- const row = this.db.prepare("SELECT COUNT(*) AS count FROM memory_chunks").get() as { count: number };
96
- return row.count;
97
- }
98
-
99
- private clearChunksIfEmbeddingMismatch(embedder: Embedder): void {
100
- if (this.embeddingMetaMatches(embedder)) return;
101
- this.db.prepare("DELETE FROM memory_chunks").run();
102
- }
103
-
104
- private bumpIndexGeneration(): number {
105
- const generation = this.getIndexGeneration() + 1;
106
- this.db
107
- .prepare("INSERT INTO meta(key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value")
108
- .run("index_generation", String(generation));
109
- return generation;
110
- }
111
-
112
- private writeEmbeddingMeta(embedder: Embedder): void {
113
- const upsert = this.db.prepare(
114
- "INSERT INTO meta(key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value",
115
- );
116
- upsert.run("embedding_model", embedder.model);
117
- upsert.run("embedding_provider", embedder.provider);
118
- upsert.run("embedding_dim", String(embedder.dim));
119
- }
120
-
121
- async reindex(documents: IndexDocument[]): Promise<ReindexOutcome> {
122
- const embedder = getEmbedder();
123
- this.clearChunksIfEmbeddingMismatch(embedder);
124
-
125
- if (documents.length === 0) {
126
- const indexGeneration = this.getIndexGeneration();
127
- this.writeEmbeddingMeta(embedder);
128
- return { indexed: 0, indexGeneration };
129
- }
130
-
131
- const embeddings = await embedder.embedBatch(documents.map((doc) => doc.content));
132
-
133
- const sync = this.db.transaction((docs: IndexDocument[], vectors: Float32Array[]) => {
134
- const incomingIds = new Set(docs.map((doc) => doc.id));
135
- const existing = this.db.prepare("SELECT chunk_id FROM memory_chunks").all() as Array<{ chunk_id: string }>;
136
-
137
- const deleteChunk = this.db.prepare("DELETE FROM memory_chunks WHERE chunk_id = ?");
138
- for (const row of existing) {
139
- if (!incomingIds.has(row.chunk_id)) {
140
- deleteChunk.run(row.chunk_id);
141
- }
142
- }
143
-
144
- const upsert = this.db.prepare(`
145
- INSERT INTO memory_chunks(chunk_id, content, source, timestamp, embedding)
146
- VALUES (?, ?, ?, ?, ?)
147
- ON CONFLICT(chunk_id) DO UPDATE SET
148
- content = excluded.content,
149
- source = excluded.source,
150
- timestamp = excluded.timestamp,
151
- embedding = excluded.embedding
152
- `);
153
-
154
- for (let i = 0; i < docs.length; i++) {
155
- const doc = docs[i]!;
156
- upsert.run(doc.id, doc.content, doc.source, doc.timestamp, embeddingToBlob(vectors[i]!));
157
- }
158
-
159
- const indexGeneration = this.bumpIndexGeneration();
160
- this.writeEmbeddingMeta(embedder);
161
- return { indexed: docs.length, indexGeneration };
162
- });
163
-
164
- return sync(documents, embeddings);
165
- }
166
-
167
- async query(queryText: string, topK?: number): Promise<MemoryEntry[]> {
168
- const retrieval = readRetrievalConfig();
169
- const limit = topK ?? retrieval.topK;
170
- const embedder = getEmbedder();
171
- this.clearChunksIfEmbeddingMismatch(embedder);
172
-
173
- const queryEmbedding = await embedder.embed(queryText);
174
-
175
- const rows = this.db
176
- .prepare("SELECT chunk_id, content, source, timestamp, embedding FROM memory_chunks")
177
- .all() as ChunkRow[];
178
-
179
- if (rows.length === 0) return [];
180
-
181
- const candidates: ScoredCandidate[] = [];
182
- for (const row of rows) {
183
- const embedding = blobToEmbedding(row.embedding);
184
- if (embedding.length !== queryEmbedding.length) continue;
185
- const similarity = cosineSimilarity(queryEmbedding, embedding);
186
- if (similarity < retrieval.minRelevance) continue;
187
- candidates.push({
188
- chunkId: row.chunk_id,
189
- content: row.content,
190
- source: row.source,
191
- timestamp: row.timestamp,
192
- distance: 1 - similarity,
193
- embedding,
194
- });
195
- }
196
-
197
- if (candidates.length === 0) return [];
198
-
199
- candidates.sort((a, b) => a.distance - b.distance);
200
- const poolSize = Math.min(limit * retrieval.candidatePoolMultiplier, candidates.length);
201
- const pool = candidates.slice(0, poolSize);
202
- const selected = mmrSelect(queryEmbedding, pool, limit, retrieval.mmrLambda);
203
-
204
- return selected.map((item) => ({
205
- content: item.content,
206
- source: item.source,
207
- timestamp: item.timestamp,
208
- relevance: distanceToRelevance(item.distance),
209
- }));
210
- }
211
-
212
- close(): void {
213
- this.db.close();
214
- }
215
- }
216
-
217
- const stores = new Map<string, VecStore>();
218
-
219
- export function getVecStore(dbPath: string): VecStore {
220
- let store = stores.get(dbPath);
221
- if (!store) {
222
- store = new VecStore(dbPath);
223
- stores.set(dbPath, store);
224
- }
225
- return store;
226
- }
227
-
228
- /** @internal test hook */
229
- export function resetVecStoreForTests(): void {
230
- for (const store of stores.values()) store.close();
231
- stores.clear();
232
- }
@@ -1,134 +0,0 @@
1
- // Agent 侧:connect-or-create、spawn lock、execa 生命周期
2
- import { readFileSync, unlinkSync, writeFileSync } from "node:fs";
3
-
4
- import { execa } from "execa";
5
-
6
- import { SIDECAR_SPAWN_LOCK_FILE } from "../constants/paths.js";
7
- import {
8
- SIDECAR_FORCE_KILL_DELAY_MS,
9
- SIDECAR_SPAWN_LOCK_STALE_MS,
10
- SIDECAR_START_TIMEOUT_MS,
11
- } from "../constants/timing.js";
12
- import { ensureDirSync, joinPath, pathDirname, pathExists } from "../utils/fs.js";
13
- import { nowMs } from "../utils/time.js";
14
- import { ping } from "./client.js";
15
- import { resolveSidecarEntry } from "./paths.js";
16
- import { canConnect, waitUntilReady } from "./utils.js";
17
-
18
- export { resolveSidecarEntry } from "./paths.js";
19
-
20
- const START_TIMEOUT_MS = SIDECAR_START_TIMEOUT_MS;
21
-
22
- let instance: SidecarManager | undefined;
23
-
24
- export type SidecarOpts = {
25
- entry?: string;
26
- socketPath: string;
27
- dbPath: string;
28
- };
29
-
30
- /** 上层唯一入口:确保 sidecar 在跑(attach 或 spawn) */
31
- export async function ensureSidecarRunning(opts: SidecarOpts): Promise<void> {
32
- const resolved = { ...opts, entry: opts.entry ?? resolveSidecarEntry() };
33
- ensureDirSync(pathDirname(resolved.socketPath));
34
-
35
- if (await canConnect(resolved.socketPath)) return;
36
-
37
- if (!acquireSpawnLock(resolved.socketPath)) {
38
- await waitUntilReady(() => canConnect(resolved.socketPath), START_TIMEOUT_MS);
39
- return;
40
- }
41
-
42
- try {
43
- if (await canConnect(resolved.socketPath)) return;
44
- await getInstance().spawn(resolved);
45
- } finally {
46
- releaseSpawnLock(resolved.socketPath);
47
- }
48
- }
49
-
50
- export async function stopSidecar(): Promise<void> {
51
- await getInstance().stop();
52
- }
53
-
54
- function getInstance(): SidecarManager {
55
- instance ??= new SidecarManager();
56
- return instance;
57
- }
58
-
59
- class SidecarManager {
60
- private child?: ReturnType<typeof execa>;
61
-
62
- async spawn(opts: Required<SidecarOpts>): Promise<void> {
63
- if (await ping(opts.socketPath)) return;
64
-
65
- this.child = execa(
66
- process.execPath,
67
- [opts.entry, "--socket", opts.socketPath, "--db", opts.dbPath],
68
- {
69
- stdio: "ignore",
70
- cleanup: true,
71
- forceKillAfterDelay: SIDECAR_FORCE_KILL_DELAY_MS,
72
- },
73
- );
74
-
75
- this.child.catch(() => {});
76
-
77
- await waitUntilReady(() => ping(opts.socketPath), START_TIMEOUT_MS);
78
- }
79
-
80
- async stop(): Promise<void> {
81
- this.child?.kill("SIGTERM");
82
- await this.child;
83
- this.child = undefined;
84
- }
85
- }
86
-
87
- function spawnLockPath(socketPath: string): string {
88
- return joinPath(pathDirname(socketPath), SIDECAR_SPAWN_LOCK_FILE);
89
- }
90
-
91
- function acquireSpawnLock(socketPath: string): boolean {
92
- const lockPath = spawnLockPath(socketPath);
93
- for (let i = 0; i < 5; i++) {
94
- try {
95
- writeFileSync(lockPath, `${process.pid}\n${nowMs()}\n`, { flag: "wx" });
96
- return true;
97
- } catch (error) {
98
- if ((error as NodeJS.ErrnoException).code !== "EEXIST") throw error;
99
- if (isLockStale(lockPath)) {
100
- try {
101
- unlinkSync(lockPath);
102
- } catch {}
103
- continue;
104
- }
105
- return false;
106
- }
107
- }
108
- return false;
109
- }
110
-
111
- function isLockStale(lockPath: string): boolean {
112
- if (!pathExists(lockPath)) return false;
113
- try {
114
- const [pidLine = "", tsLine = "0"] = readFileSync(lockPath, "utf8").trim().split("\n");
115
- const pid = Number.parseInt(pidLine, 10);
116
- const ts = Number.parseInt(tsLine, 10);
117
- if (Number.isFinite(pid)) {
118
- try {
119
- process.kill(pid, 0);
120
- } catch {
121
- return true;
122
- }
123
- }
124
- return !Number.isFinite(ts) || nowMs() - ts > SIDECAR_SPAWN_LOCK_STALE_MS;
125
- } catch {
126
- return true;
127
- }
128
- }
129
-
130
- function releaseSpawnLock(socketPath: string): void {
131
- try {
132
- unlinkSync(spawnLockPath(socketPath));
133
- } catch {}
134
- }
@@ -1,28 +0,0 @@
1
- import net from "node:net";
2
-
3
- export function waitUntilReady(predicate: () => Promise<boolean>, timeout: number): Promise<void> {
4
- return new Promise((resolve, reject) => {
5
- const timer = setTimeout(() => {
6
- reject(new Error(`Timeout waiting for predicate after ${timeout}ms`));
7
- }, timeout);
8
- const interval = setInterval(async () => {
9
- if (await predicate()) {
10
- clearInterval(interval);
11
- clearTimeout(timer);
12
- resolve();
13
- }
14
- }, 100);
15
- });
16
- }
17
-
18
- export function canConnect(socketPath: string): Promise<boolean> {
19
- return new Promise((resolve) => {
20
- const socket = net.connect(socketPath);
21
- socket.on("connect", () => {
22
- resolve(true);
23
- });
24
- socket.on("error", () => {
25
- resolve(false);
26
- });
27
- });
28
- }
@@ -1,50 +0,0 @@
1
- import { fetchIndexStats, ping, query } from "./client.js";
2
- import { SIDECAR_WARMUP_QUERY_TIMEOUT_MS } from "../constants/timing.js";
3
- import { debugMemory } from "../utils/debugLog.js";
4
- import { nowMs } from "../utils/time.js";
5
-
6
- export type WarmSidecarOptions = {
7
- queryTimeoutMs?: number;
8
- };
9
-
10
- /** Pre-open sidecar DB and optionally smoke-test embed + vec paths. Fail-silent. */
11
- export async function warmSidecar(
12
- socketPath: string,
13
- options: WarmSidecarOptions = {},
14
- ): Promise<void> {
15
- const startedAt = nowMs();
16
-
17
- if (!(await ping(socketPath))) {
18
- debugMemory("sidecar", "warm", { ok: false, reason: "ping" });
19
- return;
20
- }
21
-
22
- const statsStartedAt = nowMs();
23
- const statsResult = await fetchIndexStats(socketPath);
24
- const statsMs = nowMs() - statsStartedAt;
25
-
26
- if ("error" in statsResult) {
27
- debugMemory("sidecar", "warm", { ok: false, stats_ms: statsMs, reason: "stats" });
28
- return;
29
- }
30
-
31
- let queryMs = 0;
32
- if (statsResult.stats.chunk_count > 0) {
33
- const queryStartedAt = nowMs();
34
- const queryTimeoutMs = options.queryTimeoutMs ?? SIDECAR_WARMUP_QUERY_TIMEOUT_MS;
35
- try {
36
- await query(socketPath, ".", queryTimeoutMs);
37
- } catch {
38
- // warm query is best-effort
39
- }
40
- queryMs = nowMs() - queryStartedAt;
41
- }
42
-
43
- debugMemory("sidecar", "warm", {
44
- ok: true,
45
- stats_ms: statsMs,
46
- query_ms: queryMs,
47
- chunks: statsResult.stats.chunk_count,
48
- total_ms: nowMs() - startedAt,
49
- });
50
- }
@@ -1,66 +0,0 @@
1
- import lockfile from "proper-lockfile";
2
-
3
- import {
4
- MEMORY_LOCK_MAX_TIMEOUT_MS,
5
- MEMORY_LOCK_MIN_TIMEOUT_MS,
6
- MEMORY_LOCK_RETRIES,
7
- } from "../constants/timing.js";
8
- import {
9
- ensureDir,
10
- ensureFile,
11
- joinPath,
12
- listDir,
13
- pathDirname,
14
- readText,
15
- removeFile,
16
- writeText,
17
- } from "../utils/fs.js";
18
-
19
- import { isAutoOverflowFile } from "./paths.js";
20
-
21
- export class MarkdownMemoryBackend {
22
- constructor(private readonly memoryFile: string) {}
23
-
24
- async ensureAgentDir(): Promise<void> {
25
- await ensureDir(pathDirname(this.memoryFile));
26
- }
27
-
28
- async readText(path: string): Promise<string> {
29
- return readText(path);
30
- }
31
-
32
- async writeText(path: string, content: string): Promise<void> {
33
- await writeText(path, content);
34
- }
35
-
36
- async listAutoFiles(agentDir: string): Promise<string[]> {
37
- const names = await listDir(agentDir);
38
- return names.filter(isAutoOverflowFile).sort();
39
- }
40
-
41
- autoFilePath(agentDir: string, fileName: string): string {
42
- return joinPath(agentDir, fileName);
43
- }
44
-
45
- async deleteAutoFile(path: string): Promise<void> {
46
- await removeFile(path);
47
- }
48
-
49
- async withMemoryLock<T>(fn: () => Promise<T>): Promise<T> {
50
- await this.ensureAgentDir();
51
- await ensureFile(this.memoryFile);
52
-
53
- const release = await lockfile.lock(this.memoryFile, {
54
- retries: {
55
- retries: MEMORY_LOCK_RETRIES,
56
- minTimeout: MEMORY_LOCK_MIN_TIMEOUT_MS,
57
- maxTimeout: MEMORY_LOCK_MAX_TIMEOUT_MS,
58
- },
59
- });
60
- try {
61
- return await fn();
62
- } finally {
63
- await release();
64
- }
65
- }
66
- }
@@ -1,5 +0,0 @@
1
- export { MemoryStore, createMemoryStore } from "./memoryStore.js";
2
- export { MarkdownMemoryBackend } from "./backend.js";
3
- export { getAgentPaths, resolveAgentDir } from "./paths.js";
4
- export * from "./types.js";
5
- export * from "../constants/memory.js";
@@ -1,89 +0,0 @@
1
- import type { IndexDocument } from "../sidecar/protocol.js";
2
- import type { ChunkingConfig } from "../config/chunking.js";
3
- import { CHUNKING_DISABLED_MAX_CHARS } from "../constants/chunking.js";
4
- import { pathBasename } from "../utils/fs.js";
5
- import type { MemorySection, ParsedEntry } from "./types.js";
6
-
7
- function formatChunkContent(section: MemorySection, body: string): string {
8
- return `[${section}] ${body.trim()}`;
9
- }
10
-
11
- /**
12
- * Split long text on paragraph / line / sentence boundaries, then hard-wrap at maxChars.
13
- */
14
- export function splitTextByMaxChars(text: string, maxChars: number): string[] {
15
- const trimmed = text.trim();
16
- if (!trimmed) return [];
17
- if (maxChars <= 0 || trimmed.length <= maxChars) return [trimmed];
18
-
19
- const parts: string[] = [];
20
- let remaining = trimmed;
21
-
22
- while (remaining.length > maxChars) {
23
- let cut = maxChars;
24
- const minCut = Math.floor(maxChars * 0.35);
25
-
26
- const paragraph = remaining.lastIndexOf("\n\n", cut);
27
- if (paragraph >= minCut) {
28
- cut = paragraph;
29
- } else {
30
- const line = remaining.lastIndexOf("\n", cut);
31
- if (line >= minCut) {
32
- cut = line;
33
- } else {
34
- const sentence = remaining.lastIndexOf(". ", cut);
35
- if (sentence >= minCut) {
36
- cut = sentence + 1;
37
- } else {
38
- const space = remaining.lastIndexOf(" ", cut);
39
- if (space >= minCut) {
40
- cut = space;
41
- }
42
- }
43
- }
44
- }
45
-
46
- const part = remaining.slice(0, cut).trim();
47
- if (part) parts.push(part);
48
- remaining = remaining.slice(cut).trim();
49
- if (!part && remaining.length > 0) {
50
- parts.push(remaining.slice(0, maxChars).trim());
51
- remaining = remaining.slice(maxChars).trim();
52
- }
53
- }
54
-
55
- if (remaining) parts.push(remaining);
56
- return parts.length > 0 ? parts : [trimmed];
57
- }
58
-
59
- export function buildIndexDocuments(
60
- entries: ParsedEntry[],
61
- chunking: ChunkingConfig,
62
- ): IndexDocument[] {
63
- const docs: IndexDocument[] = [];
64
- const maxChars =
65
- chunking.maxChars <= CHUNKING_DISABLED_MAX_CHARS
66
- ? CHUNKING_DISABLED_MAX_CHARS
67
- : chunking.maxChars;
68
-
69
- for (const entry of entries) {
70
- const bodies =
71
- maxChars <= CHUNKING_DISABLED_MAX_CHARS
72
- ? [entry.content.trim()].filter(Boolean)
73
- : splitTextByMaxChars(entry.content, maxChars);
74
-
75
- if (bodies.length === 0) continue;
76
-
77
- bodies.forEach((body, index) => {
78
- const id = bodies.length === 1 ? entry.id : `${entry.id}#${index}`;
79
- docs.push({
80
- id,
81
- content: formatChunkContent(entry.section, body),
82
- source: pathBasename(entry.sourceFile),
83
- timestamp: entry.timestamp,
84
- });
85
- });
86
- }
87
-
88
- return docs;
89
- }
@@ -1,16 +0,0 @@
1
- import type { MemorySection, StoreMemoryEntry } from "../types.js";
2
-
3
- export function formatEntryLine(entry: StoreMemoryEntry): string {
4
- const prefix = entry.userAuthored ? "[user] " : "";
5
- const meta = `<!-- id:${entry.id}${entry.userAuthored ? " user" : ""} ts:${entry.timestamp} -->`;
6
- return `- ${prefix}${entry.content.trim()} ${meta}`;
7
- }
8
-
9
- export function formatSectionHeader(section: MemorySection): string {
10
- return `## ${section}`;
11
- }
12
-
13
- export function countLines(content: string): number {
14
- if (!content) return 0;
15
- return content.split("\n").length;
16
- }
@@ -1,63 +0,0 @@
1
- import { pathBasename } from "../../utils/fs.js";
2
- import { epochTimestamp } from "../../utils/time.js";
3
-
4
- import { OVERFLOW_POINTER_RE } from "../../constants/memory.js";
5
- import { MEMORY_SECTIONS, type MemorySection, type ParsedEntry } from "../types.js";
6
-
7
- const SECTION_RE = /^##\s+(Preferences|Conventions|Findings|Todos)\s*$/;
8
- const ENTRY_META_RE = /<!--\s*id:([^\s]+)(?:\s+user)?(?:\s+ts:([^\s]+))?\s*-->/;
9
- const USER_PREFIX_RE = /^\[user\]\s+/;
10
-
11
- export function parseMemoryMarkdown(content: string, sourceFile: string): ParsedEntry[] {
12
- const entries: ParsedEntry[] = [];
13
- let section: MemorySection | undefined;
14
- const lines = content.split("\n");
15
-
16
- for (let i = 0; i < lines.length; i++) {
17
- const line = lines[i]!;
18
- const sectionMatch = line.match(SECTION_RE);
19
- if (sectionMatch) {
20
- section = sectionMatch[1] as MemorySection;
21
- continue;
22
- }
23
-
24
- if (!line.startsWith("- ") || !section) continue;
25
-
26
- const pointerMatch = line.match(OVERFLOW_POINTER_RE);
27
- if (pointerMatch) continue;
28
-
29
- const metaMatch = line.match(ENTRY_META_RE);
30
- const id = metaMatch?.[1] ?? `${pathBasename(sourceFile)}:${i + 1}`;
31
- const timestamp = metaMatch?.[2] ?? epochTimestamp();
32
- let body = line.slice(2).replace(ENTRY_META_RE, "").trim();
33
- const userAuthored = USER_PREFIX_RE.test(body);
34
- if (userAuthored) body = body.replace(USER_PREFIX_RE, "").trim();
35
-
36
- if (!body) continue;
37
-
38
- entries.push({
39
- id,
40
- section,
41
- content: body,
42
- userAuthored: userAuthored || undefined,
43
- timestamp,
44
- sourceFile,
45
- line: i + 1,
46
- });
47
- }
48
-
49
- return entries;
50
- }
51
-
52
- export function listOverflowPointers(content: string): string[] {
53
- const files: string[] = [];
54
- for (const line of content.split("\n")) {
55
- const match = line.match(OVERFLOW_POINTER_RE);
56
- if (match?.[1]) files.push(match[1]);
57
- }
58
- return files;
59
- }
60
-
61
- export function isKnownSection(name: string): name is MemorySection {
62
- return (MEMORY_SECTIONS as readonly string[]).includes(name);
63
- }