@chendpoc/pi-memory 0.1.12 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (708) hide show
  1. package/README.md +67 -187
  2. package/UBIQUITOUS_LANGUAGE.md +81 -0
  3. package/dist/adapters/embed/factory.d.ts +7 -0
  4. package/dist/adapters/embed/factory.d.ts.map +1 -0
  5. package/dist/adapters/embed/factory.js +44 -0
  6. package/dist/adapters/embed/factory.js.map +1 -0
  7. package/dist/adapters/embed/hash.d.ts +3 -0
  8. package/dist/adapters/embed/hash.d.ts.map +1 -0
  9. package/dist/adapters/embed/hash.js +26 -0
  10. package/dist/adapters/embed/hash.js.map +1 -0
  11. package/dist/adapters/embed/normalize.d.ts +3 -0
  12. package/dist/adapters/embed/normalize.d.ts.map +1 -0
  13. package/dist/adapters/embed/normalize.js +15 -0
  14. package/dist/adapters/embed/normalize.js.map +1 -0
  15. package/dist/adapters/embed/ollama.d.ts +8 -0
  16. package/dist/adapters/embed/ollama.d.ts.map +1 -0
  17. package/dist/adapters/embed/ollama.js +31 -0
  18. package/dist/adapters/embed/ollama.js.map +1 -0
  19. package/dist/adapters/embed/openai.d.ts +8 -0
  20. package/dist/adapters/embed/openai.d.ts.map +1 -0
  21. package/dist/adapters/embed/openai.js +30 -0
  22. package/dist/adapters/embed/openai.js.map +1 -0
  23. package/dist/adapters/embed/types.d.ts +9 -0
  24. package/dist/adapters/embed/types.d.ts.map +1 -0
  25. package/dist/adapters/embed/types.js +2 -0
  26. package/dist/adapters/embed/types.js.map +1 -0
  27. package/dist/adapters/http.d.ts +13 -0
  28. package/dist/adapters/http.d.ts.map +1 -0
  29. package/dist/adapters/http.js +31 -0
  30. package/dist/adapters/http.js.map +1 -0
  31. package/dist/adapters/index.d.ts +4 -0
  32. package/dist/adapters/index.d.ts.map +1 -0
  33. package/dist/adapters/index.js +4 -0
  34. package/dist/adapters/index.js.map +1 -0
  35. package/dist/adapters/llm/extractText.d.ts +5 -0
  36. package/dist/adapters/llm/extractText.d.ts.map +1 -0
  37. package/dist/adapters/llm/extractText.js +7 -0
  38. package/dist/adapters/llm/extractText.js.map +1 -0
  39. package/dist/adapters/llm/factory.d.ts +11 -0
  40. package/dist/adapters/llm/factory.d.ts.map +1 -0
  41. package/dist/adapters/llm/factory.js +48 -0
  42. package/dist/adapters/llm/factory.js.map +1 -0
  43. package/dist/adapters/llm/index.d.ts +8 -0
  44. package/dist/adapters/llm/index.d.ts.map +1 -0
  45. package/dist/adapters/llm/index.js +7 -0
  46. package/dist/adapters/llm/index.js.map +1 -0
  47. package/dist/adapters/llm/modelSpec.d.ts +10 -0
  48. package/dist/adapters/llm/modelSpec.d.ts.map +1 -0
  49. package/dist/adapters/llm/modelSpec.js +21 -0
  50. package/dist/adapters/llm/modelSpec.js.map +1 -0
  51. package/dist/adapters/llm/ollama.d.ts +4 -0
  52. package/dist/adapters/llm/ollama.d.ts.map +1 -0
  53. package/dist/adapters/llm/ollama.js +32 -0
  54. package/dist/adapters/llm/ollama.js.map +1 -0
  55. package/dist/adapters/llm/openai-compat.d.ts +4 -0
  56. package/dist/adapters/llm/openai-compat.d.ts.map +1 -0
  57. package/dist/adapters/llm/openai-compat.js +36 -0
  58. package/dist/adapters/llm/openai-compat.js.map +1 -0
  59. package/dist/adapters/llm/pi-ai.d.ts +5 -0
  60. package/dist/adapters/llm/pi-ai.d.ts.map +1 -0
  61. package/dist/adapters/llm/pi-ai.js +60 -0
  62. package/dist/adapters/llm/pi-ai.js.map +1 -0
  63. package/dist/adapters/llm/standalone.d.ts +6 -0
  64. package/dist/adapters/llm/standalone.d.ts.map +1 -0
  65. package/dist/adapters/llm/standalone.js +44 -0
  66. package/dist/adapters/llm/standalone.js.map +1 -0
  67. package/dist/adapters/llm/types.d.ts +15 -0
  68. package/dist/adapters/llm/types.d.ts.map +1 -0
  69. package/dist/adapters/llm/types.js +2 -0
  70. package/dist/adapters/llm/types.js.map +1 -0
  71. package/dist/cli/init.d.ts +3 -0
  72. package/dist/cli/init.d.ts.map +1 -0
  73. package/dist/cli/init.js +13 -0
  74. package/dist/cli/init.js.map +1 -0
  75. package/dist/cli/jobs.d.ts +32 -0
  76. package/dist/cli/jobs.d.ts.map +1 -0
  77. package/dist/cli/jobs.js +100 -0
  78. package/dist/cli/jobs.js.map +1 -0
  79. package/dist/cli/log.d.ts +14 -0
  80. package/dist/cli/log.d.ts.map +1 -0
  81. package/dist/cli/log.js +32 -0
  82. package/dist/cli/log.js.map +1 -0
  83. package/dist/cli/parseArgs.d.ts +35 -0
  84. package/dist/cli/parseArgs.d.ts.map +1 -0
  85. package/dist/cli/parseArgs.js +127 -0
  86. package/dist/cli/parseArgs.js.map +1 -0
  87. package/dist/cli/status.d.ts +44 -0
  88. package/dist/cli/status.d.ts.map +1 -0
  89. package/dist/cli/status.js +238 -0
  90. package/dist/cli/status.js.map +1 -0
  91. package/dist/cli/theme.d.ts +14 -0
  92. package/dist/cli/theme.d.ts.map +1 -0
  93. package/dist/cli/theme.js +20 -0
  94. package/dist/cli/theme.js.map +1 -0
  95. package/dist/cli.js +68 -231
  96. package/dist/cli.js.map +1 -1
  97. package/dist/commands/index.d.ts +6 -0
  98. package/dist/commands/index.d.ts.map +1 -0
  99. package/dist/commands/index.js +14 -0
  100. package/dist/commands/index.js.map +1 -0
  101. package/dist/commands/parseMemoryStatusArgs.d.ts +3 -0
  102. package/dist/commands/parseMemoryStatusArgs.d.ts.map +1 -0
  103. package/dist/commands/parseMemoryStatusArgs.js +15 -0
  104. package/dist/commands/parseMemoryStatusArgs.js.map +1 -0
  105. package/dist/commands/parseRememberArgs.d.ts +10 -0
  106. package/dist/commands/parseRememberArgs.d.ts.map +1 -0
  107. package/dist/commands/parseRememberArgs.js +46 -0
  108. package/dist/commands/parseRememberArgs.js.map +1 -0
  109. package/dist/commands/remember.d.ts +8 -0
  110. package/dist/commands/remember.d.ts.map +1 -0
  111. package/dist/commands/remember.js +30 -0
  112. package/dist/commands/remember.js.map +1 -0
  113. package/dist/commands/status.d.ts +10 -0
  114. package/dist/commands/status.d.ts.map +1 -0
  115. package/dist/commands/status.js +81 -0
  116. package/dist/commands/status.js.map +1 -0
  117. package/dist/commands/types.d.ts +10 -0
  118. package/dist/commands/types.d.ts.map +1 -0
  119. package/dist/commands/types.js +2 -0
  120. package/dist/commands/types.js.map +1 -0
  121. package/dist/compact/index.d.ts +5 -0
  122. package/dist/compact/index.d.ts.map +1 -0
  123. package/dist/compact/index.js +5 -0
  124. package/dist/compact/index.js.map +1 -0
  125. package/dist/compact/parseMemoryExport.d.ts +6 -0
  126. package/dist/compact/parseMemoryExport.d.ts.map +1 -0
  127. package/dist/compact/parseMemoryExport.js +62 -0
  128. package/dist/compact/parseMemoryExport.js.map +1 -0
  129. package/dist/compact/register.d.ts +10 -0
  130. package/dist/compact/register.d.ts.map +1 -0
  131. package/dist/compact/register.js +47 -0
  132. package/dist/compact/register.js.map +1 -0
  133. package/dist/compact/runSummary.d.ts +6 -0
  134. package/dist/compact/runSummary.d.ts.map +1 -0
  135. package/dist/compact/runSummary.js +29 -0
  136. package/dist/compact/runSummary.js.map +1 -0
  137. package/dist/compact/subagentDelta.d.ts +6 -0
  138. package/dist/compact/subagentDelta.d.ts.map +1 -0
  139. package/dist/compact/subagentDelta.js +13 -0
  140. package/dist/compact/subagentDelta.js.map +1 -0
  141. package/dist/compact/summaryPrompt.d.ts +3 -0
  142. package/dist/compact/summaryPrompt.d.ts.map +1 -0
  143. package/dist/compact/summaryPrompt.js +41 -0
  144. package/dist/compact/summaryPrompt.js.map +1 -0
  145. package/dist/config/agentDir.d.ts +11 -0
  146. package/dist/config/agentDir.d.ts.map +1 -0
  147. package/dist/config/agentDir.js +21 -0
  148. package/dist/config/agentDir.js.map +1 -0
  149. package/dist/config/chunking.d.ts +7 -0
  150. package/dist/config/chunking.d.ts.map +1 -0
  151. package/dist/config/chunking.js +20 -0
  152. package/dist/config/chunking.js.map +1 -0
  153. package/dist/config/env.d.ts +28 -0
  154. package/dist/config/env.d.ts.map +1 -0
  155. package/dist/config/env.js +43 -0
  156. package/dist/config/env.js.map +1 -0
  157. package/dist/config/index.d.ts +7 -0
  158. package/dist/config/index.d.ts.map +1 -0
  159. package/dist/config/index.js +7 -0
  160. package/dist/config/index.js.map +1 -0
  161. package/dist/config/loadEnv.d.ts +10 -0
  162. package/dist/config/loadEnv.d.ts.map +1 -0
  163. package/dist/config/loadEnv.js +25 -0
  164. package/dist/config/loadEnv.js.map +1 -0
  165. package/dist/config/preflightBudget.d.ts +9 -0
  166. package/dist/config/preflightBudget.d.ts.map +1 -0
  167. package/dist/config/preflightBudget.js +16 -0
  168. package/dist/config/preflightBudget.js.map +1 -0
  169. package/dist/config/retrieval.d.ts +10 -0
  170. package/dist/config/retrieval.d.ts.map +1 -0
  171. package/dist/config/retrieval.js +31 -0
  172. package/dist/config/retrieval.js.map +1 -0
  173. package/dist/consolidate/entryKey.d.ts +6 -0
  174. package/dist/consolidate/entryKey.d.ts.map +1 -0
  175. package/dist/consolidate/entryKey.js +5 -0
  176. package/dist/consolidate/entryKey.js.map +1 -0
  177. package/dist/consolidate/index.d.ts +5 -0
  178. package/dist/consolidate/index.d.ts.map +1 -0
  179. package/dist/consolidate/index.js +5 -0
  180. package/dist/consolidate/index.js.map +1 -0
  181. package/dist/consolidate/mergeEntries.d.ts +4 -0
  182. package/dist/consolidate/mergeEntries.d.ts.map +1 -0
  183. package/dist/consolidate/mergeEntries.js +17 -0
  184. package/dist/consolidate/mergeEntries.js.map +1 -0
  185. package/dist/consolidate/mergePrompt.d.ts +4 -0
  186. package/dist/consolidate/mergePrompt.d.ts.map +1 -0
  187. package/dist/consolidate/mergePrompt.js +40 -0
  188. package/dist/consolidate/mergePrompt.js.map +1 -0
  189. package/dist/consolidate/mergeWithLlm.d.ts +4 -0
  190. package/dist/consolidate/mergeWithLlm.d.ts.map +1 -0
  191. package/dist/consolidate/mergeWithLlm.js +27 -0
  192. package/dist/consolidate/mergeWithLlm.js.map +1 -0
  193. package/dist/consolidate/runJob.d.ts +29 -0
  194. package/dist/consolidate/runJob.d.ts.map +1 -0
  195. package/dist/consolidate/runJob.js +48 -0
  196. package/dist/consolidate/runJob.js.map +1 -0
  197. package/dist/consolidate/scheduler.d.ts +18 -0
  198. package/dist/consolidate/scheduler.d.ts.map +1 -0
  199. package/dist/consolidate/scheduler.js +32 -0
  200. package/dist/consolidate/scheduler.js.map +1 -0
  201. package/dist/constants/chunking.d.ts +7 -0
  202. package/dist/constants/chunking.d.ts.map +1 -0
  203. package/dist/constants/chunking.js +7 -0
  204. package/dist/constants/chunking.js.map +1 -0
  205. package/dist/constants/env.d.ts +44 -0
  206. package/dist/constants/env.d.ts.map +1 -0
  207. package/dist/constants/env.js +49 -0
  208. package/dist/constants/env.js.map +1 -0
  209. package/dist/constants/index.d.ts +8 -0
  210. package/dist/constants/index.d.ts.map +1 -0
  211. package/dist/constants/index.js +8 -0
  212. package/dist/constants/index.js.map +1 -0
  213. package/dist/constants/memory.d.ts +17 -0
  214. package/dist/constants/memory.d.ts.map +1 -0
  215. package/dist/constants/memory.js +16 -0
  216. package/dist/constants/memory.js.map +1 -0
  217. package/dist/constants/paths.d.ts +23 -0
  218. package/dist/constants/paths.d.ts.map +1 -0
  219. package/dist/constants/paths.js +23 -0
  220. package/dist/constants/paths.js.map +1 -0
  221. package/dist/constants/preflight.d.ts +10 -0
  222. package/dist/constants/preflight.d.ts.map +1 -0
  223. package/dist/constants/preflight.js +10 -0
  224. package/dist/constants/preflight.js.map +1 -0
  225. package/dist/constants/retrieval.d.ts +10 -0
  226. package/dist/constants/retrieval.d.ts.map +1 -0
  227. package/dist/constants/retrieval.js +10 -0
  228. package/dist/constants/retrieval.js.map +1 -0
  229. package/dist/constants/security.d.ts +5 -0
  230. package/dist/constants/security.d.ts.map +1 -0
  231. package/dist/constants/security.js +5 -0
  232. package/dist/constants/security.js.map +1 -0
  233. package/dist/constants/timing.d.ts +36 -0
  234. package/dist/constants/timing.d.ts.map +1 -0
  235. package/dist/constants/timing.js +36 -0
  236. package/dist/constants/timing.js.map +1 -0
  237. package/dist/index.d.ts +11 -28
  238. package/dist/index.d.ts.map +1 -1
  239. package/dist/index.js +11 -27
  240. package/dist/index.js.map +1 -1
  241. package/dist/init/workspace.d.ts +15 -0
  242. package/dist/init/workspace.d.ts.map +1 -0
  243. package/dist/init/workspace.js +32 -0
  244. package/dist/init/workspace.js.map +1 -0
  245. package/dist/ipc/jsonlFramer.d.ts +9 -0
  246. package/dist/ipc/jsonlFramer.d.ts.map +1 -0
  247. package/dist/ipc/jsonlFramer.js +26 -0
  248. package/dist/ipc/jsonlFramer.js.map +1 -0
  249. package/dist/pi-extension.d.ts +0 -2
  250. package/dist/pi-extension.d.ts.map +1 -1
  251. package/dist/pi-extension.js +194 -219
  252. package/dist/pi-extension.js.map +1 -1
  253. package/dist/preflight/episodic.d.ts +20 -0
  254. package/dist/preflight/episodic.d.ts.map +1 -0
  255. package/dist/preflight/episodic.js +109 -0
  256. package/dist/preflight/episodic.js.map +1 -0
  257. package/dist/preflight/queryCache.d.ts +15 -0
  258. package/dist/preflight/queryCache.d.ts.map +1 -0
  259. package/dist/preflight/queryCache.js +46 -0
  260. package/dist/preflight/queryCache.js.map +1 -0
  261. package/dist/preflight/queryIntent.d.ts +20 -0
  262. package/dist/preflight/queryIntent.d.ts.map +1 -0
  263. package/dist/preflight/queryIntent.js +75 -0
  264. package/dist/preflight/queryIntent.js.map +1 -0
  265. package/dist/preflight/render.d.ts +8 -19
  266. package/dist/preflight/render.d.ts.map +1 -1
  267. package/dist/preflight/render.js +29 -106
  268. package/dist/preflight/render.js.map +1 -1
  269. package/dist/preflight/session.d.ts +3 -0
  270. package/dist/preflight/session.d.ts.map +1 -0
  271. package/dist/preflight/session.js +6 -0
  272. package/dist/preflight/session.js.map +1 -0
  273. package/dist/preflight/strip.d.ts +0 -8
  274. package/dist/preflight/strip.d.ts.map +1 -1
  275. package/dist/preflight/strip.js +2 -11
  276. package/dist/preflight/strip.js.map +1 -1
  277. package/dist/shutdown/enqueue.d.ts +12 -0
  278. package/dist/shutdown/enqueue.d.ts.map +1 -0
  279. package/dist/shutdown/enqueue.js +14 -0
  280. package/dist/shutdown/enqueue.js.map +1 -0
  281. package/dist/shutdown/extractPrompt.d.ts +4 -0
  282. package/dist/shutdown/extractPrompt.d.ts.map +1 -0
  283. package/dist/shutdown/extractPrompt.js +29 -0
  284. package/dist/shutdown/extractPrompt.js.map +1 -0
  285. package/dist/shutdown/processed.d.ts +9 -0
  286. package/dist/shutdown/processed.d.ts.map +1 -0
  287. package/dist/shutdown/processed.js +28 -0
  288. package/dist/shutdown/processed.js.map +1 -0
  289. package/dist/shutdown/readQueue.d.ts +4 -0
  290. package/dist/shutdown/readQueue.d.ts.map +1 -0
  291. package/dist/shutdown/readQueue.js +26 -0
  292. package/dist/shutdown/readQueue.js.map +1 -0
  293. package/dist/shutdown/runDrainJob.d.ts +26 -0
  294. package/dist/shutdown/runDrainJob.d.ts.map +1 -0
  295. package/dist/shutdown/runDrainJob.js +143 -0
  296. package/dist/shutdown/runDrainJob.js.map +1 -0
  297. package/dist/shutdown/sessionReader.d.ts +6 -0
  298. package/dist/shutdown/sessionReader.d.ts.map +1 -0
  299. package/dist/shutdown/sessionReader.js +44 -0
  300. package/dist/shutdown/sessionReader.js.map +1 -0
  301. package/dist/sidecar/client.d.ts +17 -16
  302. package/dist/sidecar/client.d.ts.map +1 -1
  303. package/dist/sidecar/client.js +64 -100
  304. package/dist/sidecar/client.js.map +1 -1
  305. package/dist/sidecar/paths.d.ts +8 -0
  306. package/dist/sidecar/paths.d.ts.map +1 -0
  307. package/dist/sidecar/paths.js +23 -0
  308. package/dist/sidecar/paths.js.map +1 -0
  309. package/dist/sidecar/protocol.d.ts +54 -0
  310. package/dist/sidecar/protocol.d.ts.map +1 -0
  311. package/dist/sidecar/protocol.js +4 -0
  312. package/dist/sidecar/protocol.js.map +1 -0
  313. package/dist/sidecar/reindexBridge.d.ts +13 -0
  314. package/dist/sidecar/reindexBridge.d.ts.map +1 -0
  315. package/dist/sidecar/reindexBridge.js +37 -0
  316. package/dist/sidecar/reindexBridge.js.map +1 -0
  317. package/dist/sidecar/server/process.d.ts +2 -0
  318. package/dist/sidecar/server/process.d.ts.map +1 -0
  319. package/dist/sidecar/server/process.js +22 -0
  320. package/dist/sidecar/server/process.js.map +1 -0
  321. package/dist/sidecar/server/query.d.ts +8 -0
  322. package/dist/sidecar/server/query.d.ts.map +1 -0
  323. package/dist/sidecar/server/query.js +7 -0
  324. package/dist/sidecar/server/query.js.map +1 -0
  325. package/dist/sidecar/server/reindex.d.ts +8 -0
  326. package/dist/sidecar/server/reindex.d.ts.map +1 -0
  327. package/dist/sidecar/server/reindex.js +12 -0
  328. package/dist/sidecar/server/reindex.js.map +1 -0
  329. package/dist/sidecar/server/server.d.ts +11 -0
  330. package/dist/sidecar/server/server.d.ts.map +1 -0
  331. package/dist/sidecar/server/server.js +76 -0
  332. package/dist/sidecar/server/server.js.map +1 -0
  333. package/dist/sidecar/server/stats.d.ts +8 -0
  334. package/dist/sidecar/server/stats.d.ts.map +1 -0
  335. package/dist/sidecar/server/stats.js +18 -0
  336. package/dist/sidecar/server/stats.js.map +1 -0
  337. package/dist/sidecar/server/vec/embedder.d.ts +2 -0
  338. package/dist/sidecar/server/vec/embedder.d.ts.map +1 -0
  339. package/dist/sidecar/server/vec/embedder.js +2 -0
  340. package/dist/sidecar/server/vec/embedder.js.map +1 -0
  341. package/dist/sidecar/server/vec/mmr.d.ts +13 -0
  342. package/dist/sidecar/server/vec/mmr.d.ts.map +1 -0
  343. package/dist/sidecar/server/vec/mmr.js +36 -0
  344. package/dist/sidecar/server/vec/mmr.js.map +1 -0
  345. package/dist/sidecar/server/vec/store.d.ts +30 -0
  346. package/dist/sidecar/server/vec/store.d.ts.map +1 -0
  347. package/dist/sidecar/server/vec/store.js +179 -0
  348. package/dist/sidecar/server/vec/store.js.map +1 -0
  349. package/dist/sidecar/sidecarManager.d.ts +10 -0
  350. package/dist/sidecar/sidecarManager.d.ts.map +1 -0
  351. package/dist/sidecar/sidecarManager.js +111 -0
  352. package/dist/sidecar/sidecarManager.js.map +1 -0
  353. package/dist/sidecar/utils.d.ts +3 -0
  354. package/dist/sidecar/utils.d.ts.map +1 -0
  355. package/dist/sidecar/utils.js +27 -0
  356. package/dist/sidecar/utils.js.map +1 -0
  357. package/dist/store/backend.d.ts +12 -0
  358. package/dist/store/backend.d.ts.map +1 -0
  359. package/dist/store/backend.js +47 -0
  360. package/dist/store/backend.js.map +1 -0
  361. package/dist/store/index.d.ts +6 -0
  362. package/dist/store/index.d.ts.map +1 -0
  363. package/dist/store/index.js +6 -0
  364. package/dist/store/index.js.map +1 -0
  365. package/dist/store/indexChunks.d.ts +9 -0
  366. package/dist/store/indexChunks.d.ts.map +1 -0
  367. package/dist/store/indexChunks.js +78 -0
  368. package/dist/store/indexChunks.js.map +1 -0
  369. package/dist/store/markdown/format.d.ts +5 -0
  370. package/dist/store/markdown/format.d.ts.map +1 -0
  371. package/dist/store/markdown/format.js +14 -0
  372. package/dist/store/markdown/format.js.map +1 -0
  373. package/dist/store/markdown/parse.d.ts +5 -0
  374. package/dist/store/markdown/parse.d.ts.map +1 -0
  375. package/dist/store/markdown/parse.js +57 -0
  376. package/dist/store/markdown/parse.js.map +1 -0
  377. package/dist/store/markdown/template.d.ts +3 -0
  378. package/dist/store/markdown/template.d.ts.map +1 -0
  379. package/dist/store/markdown/template.js +22 -0
  380. package/dist/store/markdown/template.js.map +1 -0
  381. package/dist/store/memoryStore.d.ts +69 -0
  382. package/dist/store/memoryStore.d.ts.map +1 -0
  383. package/dist/store/memoryStore.js +421 -0
  384. package/dist/store/memoryStore.js.map +1 -0
  385. package/dist/store/paths.d.ts +10 -0
  386. package/dist/store/paths.d.ts.map +1 -0
  387. package/dist/store/paths.js +19 -0
  388. package/dist/store/paths.js.map +1 -0
  389. package/dist/store/types.d.ts +38 -0
  390. package/dist/store/types.d.ts.map +1 -0
  391. package/dist/store/types.js +3 -0
  392. package/dist/store/types.js.map +1 -0
  393. package/dist/ui/memoryStatusWidget.d.ts +20 -0
  394. package/dist/ui/memoryStatusWidget.d.ts.map +1 -0
  395. package/dist/ui/memoryStatusWidget.js +51 -0
  396. package/dist/ui/memoryStatusWidget.js.map +1 -0
  397. package/dist/utils/debugLog.d.ts +4 -0
  398. package/dist/utils/debugLog.d.ts.map +1 -0
  399. package/dist/utils/debugLog.js +14 -0
  400. package/dist/utils/debugLog.js.map +1 -0
  401. package/dist/utils/fs.d.ts +26 -0
  402. package/dist/utils/fs.d.ts.map +1 -0
  403. package/dist/utils/fs.js +101 -0
  404. package/dist/utils/fs.js.map +1 -0
  405. package/dist/utils/index.d.ts +8 -0
  406. package/dist/utils/index.d.ts.map +1 -0
  407. package/dist/utils/index.js +8 -0
  408. package/dist/utils/index.js.map +1 -0
  409. package/dist/utils/paths.d.ts +22 -0
  410. package/dist/utils/paths.d.ts.map +1 -0
  411. package/dist/utils/paths.js +51 -0
  412. package/dist/utils/paths.js.map +1 -0
  413. package/dist/utils/platform.d.ts +7 -0
  414. package/dist/utils/platform.d.ts.map +1 -0
  415. package/dist/utils/platform.js +18 -0
  416. package/dist/utils/platform.js.map +1 -0
  417. package/dist/utils/scheduler.d.ts +33 -0
  418. package/dist/utils/scheduler.d.ts.map +1 -0
  419. package/dist/utils/scheduler.js +63 -0
  420. package/dist/utils/scheduler.js.map +1 -0
  421. package/dist/utils/socket.d.ts +7 -0
  422. package/dist/utils/socket.d.ts.map +1 -0
  423. package/dist/utils/socket.js +35 -0
  424. package/dist/utils/socket.js.map +1 -0
  425. package/dist/utils/time.d.ts +22 -0
  426. package/dist/utils/time.d.ts.map +1 -0
  427. package/dist/utils/time.js +42 -0
  428. package/dist/utils/time.js.map +1 -0
  429. package/package.json +40 -12
  430. package/scripts/init-memory-workspace.mjs +62 -0
  431. package/scripts/path-utils.mjs +12 -0
  432. package/scripts/platform-fs.mjs +65 -0
  433. package/scripts/postinstall.mjs +17 -0
  434. package/src/adapters/embed/factory.ts +50 -0
  435. package/src/adapters/embed/hash.ts +29 -0
  436. package/src/adapters/embed/normalize.ts +13 -0
  437. package/src/adapters/embed/ollama.ts +49 -0
  438. package/src/adapters/embed/openai.ts +46 -0
  439. package/src/adapters/embed/types.ts +9 -0
  440. package/src/adapters/http.ts +42 -0
  441. package/src/adapters/index.ts +16 -0
  442. package/src/adapters/llm/extractText.ts +6 -0
  443. package/src/adapters/llm/factory.ts +60 -0
  444. package/src/adapters/llm/index.ts +7 -0
  445. package/src/adapters/llm/modelSpec.ts +39 -0
  446. package/src/adapters/llm/ollama.ts +42 -0
  447. package/src/adapters/llm/openai-compat.ts +46 -0
  448. package/src/adapters/llm/pi-ai.ts +75 -0
  449. package/src/adapters/llm/standalone.ts +60 -0
  450. package/src/adapters/llm/types.ts +16 -0
  451. package/src/cli/init.ts +18 -0
  452. package/src/cli/jobs.ts +144 -0
  453. package/src/cli/log.ts +46 -0
  454. package/src/cli/parseArgs.ts +175 -0
  455. package/src/cli/status.ts +323 -0
  456. package/src/cli/theme.ts +26 -0
  457. package/src/cli.ts +82 -232
  458. package/src/commands/index.ts +20 -0
  459. package/src/commands/parseMemoryStatusArgs.ts +11 -0
  460. package/src/commands/parseRememberArgs.ts +55 -0
  461. package/src/commands/remember.ts +43 -0
  462. package/src/commands/status.ts +112 -0
  463. package/src/commands/types.ts +12 -0
  464. package/src/compact/index.ts +4 -0
  465. package/src/compact/parseMemoryExport.ts +71 -0
  466. package/src/compact/register.ts +57 -0
  467. package/src/compact/runSummary.ts +42 -0
  468. package/src/compact/subagentDelta.ts +22 -0
  469. package/src/compact/summaryPrompt.ts +45 -0
  470. package/src/config/agentDir.ts +24 -0
  471. package/src/config/chunking.ts +36 -0
  472. package/src/config/env.ts +97 -0
  473. package/src/config/index.ts +6 -0
  474. package/src/config/loadEnv.ts +26 -0
  475. package/src/config/preflightBudget.ts +33 -0
  476. package/src/config/retrieval.ts +50 -0
  477. package/src/consolidate/entryKey.ts +4 -0
  478. package/src/consolidate/index.ts +4 -0
  479. package/src/consolidate/mergeEntries.ts +22 -0
  480. package/src/consolidate/mergePrompt.ts +46 -0
  481. package/src/consolidate/mergeWithLlm.ts +39 -0
  482. package/src/consolidate/runJob.ts +81 -0
  483. package/src/consolidate/scheduler.ts +54 -0
  484. package/src/constants/chunking.ts +8 -0
  485. package/src/constants/env.ts +56 -0
  486. package/src/constants/index.ts +7 -0
  487. package/src/constants/memory.ts +22 -0
  488. package/src/constants/paths.ts +26 -0
  489. package/src/constants/preflight.ts +13 -0
  490. package/src/constants/retrieval.ts +10 -0
  491. package/src/constants/security.ts +5 -0
  492. package/src/constants/timing.ts +46 -0
  493. package/src/index.ts +11 -241
  494. package/src/init/workspace.ts +44 -0
  495. package/src/ipc/jsonlFramer.ts +29 -0
  496. package/src/pi-extension.ts +186 -316
  497. package/src/preflight/episodic.ts +159 -0
  498. package/src/preflight/queryCache.ts +59 -0
  499. package/src/preflight/queryIntent.ts +92 -0
  500. package/src/preflight/render.ts +34 -173
  501. package/src/preflight/session.ts +7 -0
  502. package/src/preflight/strip.ts +4 -11
  503. package/src/shutdown/enqueue.ts +29 -0
  504. package/src/shutdown/extractPrompt.ts +27 -0
  505. package/src/shutdown/processed.ts +45 -0
  506. package/src/shutdown/readQueue.ts +26 -0
  507. package/src/shutdown/runDrainJob.ts +202 -0
  508. package/src/shutdown/sessionReader.ts +61 -0
  509. package/src/sidecar/client.ts +98 -150
  510. package/src/sidecar/paths.ts +31 -0
  511. package/src/sidecar/protocol.ts +38 -0
  512. package/src/sidecar/reindexBridge.ts +52 -0
  513. package/src/sidecar/server/process.ts +27 -0
  514. package/src/sidecar/server/query.ts +16 -0
  515. package/src/sidecar/server/reindex.ts +21 -0
  516. package/src/sidecar/server/server.ts +105 -0
  517. package/src/sidecar/server/stats.ts +23 -0
  518. package/src/sidecar/server/vec/embedder.ts +1 -0
  519. package/src/sidecar/server/vec/mmr.ts +55 -0
  520. package/src/sidecar/server/vec/store.ts +232 -0
  521. package/src/sidecar/sidecarManager.ts +134 -0
  522. package/src/sidecar/utils.ts +28 -0
  523. package/src/store/backend.ts +66 -0
  524. package/src/store/index.ts +5 -0
  525. package/src/store/indexChunks.ts +89 -0
  526. package/src/store/markdown/format.ts +16 -0
  527. package/src/store/markdown/parse.ts +63 -0
  528. package/src/store/markdown/template.ts +24 -0
  529. package/src/store/memoryStore.ts +518 -0
  530. package/src/store/paths.ts +33 -0
  531. package/src/store/proper-lockfile.d.ts +3 -0
  532. package/src/store/types.ts +46 -0
  533. package/src/ui/memoryStatusWidget.ts +80 -0
  534. package/src/utils/debugLog.ts +22 -0
  535. package/src/utils/fs.ts +115 -0
  536. package/src/utils/index.ts +68 -0
  537. package/src/utils/paths.ts +67 -0
  538. package/src/utils/platform.ts +20 -0
  539. package/src/utils/scheduler.ts +98 -0
  540. package/src/utils/socket.ts +33 -0
  541. package/src/utils/time.ts +51 -0
  542. package/templates/MEMORY.md.example +22 -0
  543. package/dist/adapters/ollamaClient.d.ts +0 -11
  544. package/dist/adapters/ollamaClient.d.ts.map +0 -1
  545. package/dist/adapters/ollamaClient.js +0 -122
  546. package/dist/adapters/ollamaClient.js.map +0 -1
  547. package/dist/adapters/openaiCompatClient.d.ts +0 -11
  548. package/dist/adapters/openaiCompatClient.d.ts.map +0 -1
  549. package/dist/adapters/openaiCompatClient.js +0 -118
  550. package/dist/adapters/openaiCompatClient.js.map +0 -1
  551. package/dist/adapters/piComplete.d.ts +0 -17
  552. package/dist/adapters/piComplete.d.ts.map +0 -1
  553. package/dist/adapters/piComplete.js +0 -169
  554. package/dist/adapters/piComplete.js.map +0 -1
  555. package/dist/bundle/install.d.ts +0 -34
  556. package/dist/bundle/install.d.ts.map +0 -1
  557. package/dist/bundle/install.js +0 -183
  558. package/dist/bundle/install.js.map +0 -1
  559. package/dist/config.d.ts +0 -27
  560. package/dist/config.d.ts.map +0 -1
  561. package/dist/config.js +0 -49
  562. package/dist/config.js.map +0 -1
  563. package/dist/errclass.d.ts +0 -7
  564. package/dist/errclass.d.ts.map +0 -1
  565. package/dist/errclass.js +0 -32
  566. package/dist/errclass.js.map +0 -1
  567. package/dist/extension.d.ts +0 -24
  568. package/dist/extension.d.ts.map +0 -1
  569. package/dist/extension.js +0 -7
  570. package/dist/extension.js.map +0 -1
  571. package/dist/fallback/index.d.ts +0 -11
  572. package/dist/fallback/index.d.ts.map +0 -1
  573. package/dist/fallback/index.js +0 -16
  574. package/dist/fallback/index.js.map +0 -1
  575. package/dist/fallback/llmRerank.d.ts +0 -19
  576. package/dist/fallback/llmRerank.d.ts.map +0 -1
  577. package/dist/fallback/llmRerank.js +0 -60
  578. package/dist/fallback/llmRerank.js.map +0 -1
  579. package/dist/fallback/memoryMd.d.ts +0 -6
  580. package/dist/fallback/memoryMd.d.ts.map +0 -1
  581. package/dist/fallback/memoryMd.js +0 -35
  582. package/dist/fallback/memoryMd.js.map +0 -1
  583. package/dist/fallback/sessionIndex.d.ts +0 -35
  584. package/dist/fallback/sessionIndex.d.ts.map +0 -1
  585. package/dist/fallback/sessionIndex.js +0 -287
  586. package/dist/fallback/sessionIndex.js.map +0 -1
  587. package/dist/fallback/sessionSearch.d.ts +0 -18
  588. package/dist/fallback/sessionSearch.d.ts.map +0 -1
  589. package/dist/fallback/sessionSearch.js +0 -234
  590. package/dist/fallback/sessionSearch.js.map +0 -1
  591. package/dist/local/graphQuery.d.ts +0 -21
  592. package/dist/local/graphQuery.d.ts.map +0 -1
  593. package/dist/local/graphQuery.js +0 -170
  594. package/dist/local/graphQuery.js.map +0 -1
  595. package/dist/paths.d.ts +0 -7
  596. package/dist/paths.d.ts.map +0 -1
  597. package/dist/paths.js +0 -26
  598. package/dist/paths.js.map +0 -1
  599. package/dist/preflight/detectIntents.d.ts +0 -102
  600. package/dist/preflight/detectIntents.d.ts.map +0 -1
  601. package/dist/preflight/detectIntents.js +0 -624
  602. package/dist/preflight/detectIntents.js.map +0 -1
  603. package/dist/preflight/hook.d.ts +0 -58
  604. package/dist/preflight/hook.d.ts.map +0 -1
  605. package/dist/preflight/hook.js +0 -77
  606. package/dist/preflight/hook.js.map +0 -1
  607. package/dist/service.d.ts +0 -56
  608. package/dist/service.d.ts.map +0 -1
  609. package/dist/service.js +0 -200
  610. package/dist/service.js.map +0 -1
  611. package/dist/settings.d.ts +0 -38
  612. package/dist/settings.d.ts.map +0 -1
  613. package/dist/settings.js +0 -68
  614. package/dist/settings.js.map +0 -1
  615. package/dist/sidecar/bundle.d.ts +0 -19
  616. package/dist/sidecar/bundle.d.ts.map +0 -1
  617. package/dist/sidecar/bundle.js +0 -39
  618. package/dist/sidecar/bundle.js.map +0 -1
  619. package/dist/sidecar/process.d.ts +0 -14
  620. package/dist/sidecar/process.d.ts.map +0 -1
  621. package/dist/sidecar/process.js +0 -138
  622. package/dist/sidecar/process.js.map +0 -1
  623. package/dist/tools/memoryAppend.d.ts +0 -37
  624. package/dist/tools/memoryAppend.d.ts.map +0 -1
  625. package/dist/tools/memoryAppend.js +0 -99
  626. package/dist/tools/memoryAppend.js.map +0 -1
  627. package/dist/tools/memoryRecall.d.ts +0 -113
  628. package/dist/tools/memoryRecall.d.ts.map +0 -1
  629. package/dist/tools/memoryRecall.js +0 -325
  630. package/dist/tools/memoryRecall.js.map +0 -1
  631. package/dist/trainer/bundleBuilder.d.ts +0 -30
  632. package/dist/trainer/bundleBuilder.d.ts.map +0 -1
  633. package/dist/trainer/bundleBuilder.js +0 -106
  634. package/dist/trainer/bundleBuilder.js.map +0 -1
  635. package/dist/trainer/bundleLoader.d.ts +0 -12
  636. package/dist/trainer/bundleLoader.d.ts.map +0 -1
  637. package/dist/trainer/bundleLoader.js +0 -59
  638. package/dist/trainer/bundleLoader.js.map +0 -1
  639. package/dist/trainer/deltaMerge.d.ts +0 -38
  640. package/dist/trainer/deltaMerge.d.ts.map +0 -1
  641. package/dist/trainer/deltaMerge.js +0 -183
  642. package/dist/trainer/deltaMerge.js.map +0 -1
  643. package/dist/trainer/entityResolver.d.ts +0 -27
  644. package/dist/trainer/entityResolver.d.ts.map +0 -1
  645. package/dist/trainer/entityResolver.js +0 -92
  646. package/dist/trainer/entityResolver.js.map +0 -1
  647. package/dist/trainer/extractFacts.d.ts +0 -67
  648. package/dist/trainer/extractFacts.d.ts.map +0 -1
  649. package/dist/trainer/extractFacts.js +0 -213
  650. package/dist/trainer/extractFacts.js.map +0 -1
  651. package/dist/trainer/index.d.ts +0 -54
  652. package/dist/trainer/index.d.ts.map +0 -1
  653. package/dist/trainer/index.js +0 -82
  654. package/dist/trainer/index.js.map +0 -1
  655. package/dist/trainer/llmExtractor.d.ts +0 -16
  656. package/dist/trainer/llmExtractor.d.ts.map +0 -1
  657. package/dist/trainer/llmExtractor.js +0 -146
  658. package/dist/trainer/llmExtractor.js.map +0 -1
  659. package/dist/trainer/marker.d.ts +0 -10
  660. package/dist/trainer/marker.d.ts.map +0 -1
  661. package/dist/trainer/marker.js +0 -28
  662. package/dist/trainer/marker.js.map +0 -1
  663. package/dist/trainer/scheduler.d.ts +0 -31
  664. package/dist/trainer/scheduler.d.ts.map +0 -1
  665. package/dist/trainer/scheduler.js +0 -72
  666. package/dist/trainer/scheduler.js.map +0 -1
  667. package/dist/trainer/sessionLoader.d.ts +0 -23
  668. package/dist/trainer/sessionLoader.d.ts.map +0 -1
  669. package/dist/trainer/sessionLoader.js +0 -182
  670. package/dist/trainer/sessionLoader.js.map +0 -1
  671. package/dist/types.d.ts +0 -135
  672. package/dist/types.d.ts.map +0 -1
  673. package/dist/types.js +0 -8
  674. package/dist/types.js.map +0 -1
  675. package/src/adapters/ollamaClient.ts +0 -179
  676. package/src/adapters/openaiCompatClient.ts +0 -155
  677. package/src/adapters/piComplete.ts +0 -233
  678. package/src/bundle/install.ts +0 -206
  679. package/src/cache/memoryCaches.ts +0 -72
  680. package/src/config.ts +0 -92
  681. package/src/errclass.ts +0 -37
  682. package/src/extension.ts +0 -23
  683. package/src/fallback/index.ts +0 -24
  684. package/src/fallback/llmRerank.ts +0 -97
  685. package/src/fallback/memoryMd.ts +0 -36
  686. package/src/fallback/sessionIndex.ts +0 -327
  687. package/src/fallback/sessionSearch.ts +0 -261
  688. package/src/local/graphQuery.ts +0 -252
  689. package/src/paths.ts +0 -28
  690. package/src/preflight/detectIntents.ts +0 -660
  691. package/src/preflight/hook.ts +0 -199
  692. package/src/service.ts +0 -306
  693. package/src/settings.ts +0 -126
  694. package/src/sidecar/bundle.ts +0 -52
  695. package/src/sidecar/process.ts +0 -160
  696. package/src/tools/memoryAppend.ts +0 -113
  697. package/src/tools/memoryRecall.ts +0 -388
  698. package/src/trainer/bundleBuilder.ts +0 -192
  699. package/src/trainer/bundleLoader.ts +0 -105
  700. package/src/trainer/deltaMerge.ts +0 -221
  701. package/src/trainer/entityResolver.ts +0 -140
  702. package/src/trainer/extractFacts.ts +0 -312
  703. package/src/trainer/index.ts +0 -147
  704. package/src/trainer/llmExtractor.ts +0 -206
  705. package/src/trainer/marker.ts +0 -30
  706. package/src/trainer/scheduler.ts +0 -107
  707. package/src/trainer/sessionLoader.ts +0 -225
  708. package/src/types.ts +0 -168
package/src/cli.ts CHANGED
@@ -1,255 +1,105 @@
1
1
  #!/usr/bin/env node
2
- import fs from "node:fs";
3
- import path from "node:path";
4
2
 
5
- import { createStandaloneLLMClient } from "./adapters/piComplete.js";
6
- import { installBundle } from "./bundle/install.js";
7
- import type { MemoryConfig } from "./config.js";
8
- import { loadMemoryConfig } from "./settings.js";
9
- import { openSessionIndex } from "./fallback/sessionIndex.js";
10
- import { SidecarClient } from "./sidecar/client.js";
11
- import { MemoryService } from "./service.js";
12
- import { trainBundle } from "./trainer/index.js";
13
- import { createLLMFactExtractor } from "./trainer/llmExtractor.js";
14
- import { createTrainScheduler } from "./trainer/scheduler.js";
15
- import type { QueryIntent } from "./types.js";
16
-
17
- async function tryReloadSidecar(cfg: MemoryConfig): Promise<void> {
18
- try {
19
- fs.accessSync(cfg.socketPath, fs.constants.F_OK);
20
- } catch {
21
- return;
22
- }
23
- const client = new SidecarClient(cfg.socketPath, cfg.clientRequestTimeoutMs);
24
- try {
25
- await client.reload();
26
- } catch {
27
- /* sidecar not running — install still succeeded */
28
- }
29
- }
30
-
31
- async function main(): Promise<void> {
32
- const [cmd, ...rest] = process.argv.slice(2);
33
- if (!cmd || cmd === "help" || cmd === "--help") {
34
- printHelp();
35
- process.exit(0);
36
- }
37
-
38
- const cfg = loadMemoryConfig();
39
- const service = new MemoryService(cfg);
40
-
41
- if (cmd === "health") {
42
- await service.start();
43
- const h = await service.health();
44
- console.log(JSON.stringify({ status: service.getStatus(), health: h }, null, 2));
45
- await service.stop();
46
- return;
47
- }
48
-
49
- if (cmd === "query") {
50
- const json = rest.join(" ").trim();
51
- if (!json) {
52
- console.error('Usage: pi-memory query \'{"anchor_mentions":["Alice"],"mode":"direct_relation"}\'');
53
- process.exit(1);
54
- }
55
- let intent: QueryIntent;
56
- try {
57
- intent = JSON.parse(json) as QueryIntent;
58
- } catch (e) {
59
- console.error("Invalid JSON intent:", e);
60
- process.exit(1);
3
+ import { createLlmClient } from "./adapters/llm/index.js";
4
+ import { resolveAgentDirFromEnv } from "./config/agentDir.js";
5
+ import { loadEnv } from "./config/loadEnv.js";
6
+ import {
7
+ runConsolidateCommand,
8
+ runDrainShutdownQueueCommand,
9
+ runMaintenanceCommand,
10
+ } from "./cli/jobs.js";
11
+ import { createCliLog } from "./cli/log.js";
12
+ import { CLI_HELP, parseCliArgs } from "./cli/parseArgs.js";
13
+ import { runInitCommand } from "./cli/init.js";
14
+ import { runStatusCommand } from "./cli/status.js";
15
+ import { theme } from "./cli/theme.js";
16
+ import { createMemoryStore } from "./store/index.js";
17
+
18
+ async function main(): Promise<number> {
19
+ loadEnv();
20
+
21
+ const parsed = parseCliArgs(process.argv.slice(2));
22
+ if (parsed.command === "help") {
23
+ if (parsed.error) {
24
+ console.error(theme.error(parsed.error));
61
25
  }
62
- await service.start();
63
- const result = await service.query(intent);
64
- console.log(JSON.stringify(result, null, 2));
65
- await service.stop();
66
- return;
26
+ console.log(CLI_HELP);
27
+ return parsed.error ? 1 : 0;
67
28
  }
68
29
 
69
- if (cmd === "status") {
70
- await service.start();
71
- console.log(JSON.stringify(service.getStatus(), null, 2));
72
- await service.stop();
73
- return;
30
+ const agentDir = resolveAgentDirFromEnv(
31
+ "options" in parsed ? parsed.options.agentDir : undefined,
32
+ );
33
+
34
+ if (parsed.command === "init") {
35
+ const log = createCliLog({ verbose: true, debug: parsed.options.verbose });
36
+ return runInitCommand(agentDir, log);
74
37
  }
75
38
 
76
- if (cmd === "install-bundle") {
77
- const bundlePath = rest[0];
78
- if (!bundlePath) {
79
- console.error("Usage: pi-memory install-bundle <path-to-bundle-dir>");
80
- process.exit(1);
81
- }
82
- const result = await installBundle({
83
- bundleRoot: cfg.bundleRoot,
84
- sourceDir: bundlePath,
85
- });
86
- await tryReloadSidecar(cfg);
87
- console.log(JSON.stringify(result, null, 2));
88
- return;
39
+ if (parsed.command === "status") {
40
+ const log = createCliLog({ verbose: true, debug: parsed.options.verbose });
41
+ return runStatusCommand(agentDir, log);
89
42
  }
90
43
 
91
- if (cmd === "train") {
92
- const flags = parseTrainFlags(rest);
93
- let extractOpts;
94
- if (flags.extractor === "llm") {
95
- try {
96
- const client = createStandaloneLLMClient(flags.model);
97
- extractOpts = {
98
- llmExtractor: createLLMFactExtractor({
99
- client,
100
- batchSize: cfg.trainer.llm_batch_size,
101
- }),
102
- };
103
- } catch (err) {
104
- const message = err instanceof Error ? err.message : String(err);
105
- console.error(`LLM extractor unavailable (${message}) — falling back to regex.`);
106
- extractOpts = undefined;
107
- }
108
- }
44
+ const store = createMemoryStore({ agentDir });
45
+ await store.ensureInitialized();
109
46
 
110
- const result = await trainBundle({
111
- sessionsDir: flags.sessionsDir ?? cfg.sessionsDir,
112
- bundleRoot: cfg.bundleRoot,
113
- full: flags.full,
114
- dryRun: flags.dryRun,
115
- noMerge: flags.noMerge,
116
- extractOpts,
117
- });
118
- if (result.sessionsProcessed === 0) {
119
- console.log("No new sessions to process.");
120
- } else {
121
- const output: Record<string, unknown> = {
122
- sessions_processed: result.sessionsProcessed,
123
- entities: result.entityCount,
124
- relations: result.relationCount,
125
- events: result.eventCount,
126
- dry_run: result.dryRun,
127
- bundle_dir: result.bundleResult?.bundleDir ?? null,
128
- installed: result.installResult?.installed_dir ?? null,
129
- };
130
- if (result.delta) {
131
- output.delta = {
132
- added: result.delta.added,
133
- updated: result.delta.updated,
134
- deleted: result.delta.deleted,
135
- skipped: result.delta.skipped,
136
- };
137
- }
138
- console.log(JSON.stringify(output, null, 2));
139
- if (!result.dryRun) {
140
- await tryReloadSidecar(cfg);
141
- }
142
- }
47
+ const llm = await createLlmClient();
143
48
 
144
- if (flags.watch) {
145
- const interval = cfg.trainer.auto_interval ?? "1h";
146
- console.log(`Watching for new sessions (interval: ${interval})...`);
147
- createTrainScheduler(
148
- { interval, trainConfig: { sessionsDir: flags.sessionsDir ?? cfg.sessionsDir, bundleRoot: cfg.bundleRoot } },
149
- (log) => {
150
- console.log(JSON.stringify({ type: "scheduled_run", ...log }));
151
- },
49
+ if (parsed.command === "maintenance") {
50
+ const log = createCliLog({ verbose: parsed.options.verbose });
51
+ if (parsed.options.verbose && !llm) {
52
+ log.warn(
53
+ "no helper LLM configured; consolidate uses rule-based dedupe; shutdown drain skips LLM extract",
152
54
  );
153
- await new Promise(() => {}); // block forever
154
55
  }
155
- return;
56
+ return runMaintenanceCommand({
57
+ store,
58
+ agentDir,
59
+ llm,
60
+ options: parsed.options,
61
+ log,
62
+ });
156
63
  }
157
64
 
158
- if (cmd === "index") {
159
- const sessionsDir = rest.find((a, i) => rest[i - 1] === "--sessions-dir") ?? cfg.sessionsDir;
160
- const dbPath = path.join(cfg.bundleRoot, "sessions.db");
161
- const idx = openSessionIndex(dbPath);
162
- if (!idx) {
163
- console.error("Failed to open SQLite — is better-sqlite3 installed?");
164
- process.exit(1);
65
+ if (parsed.command === "drain-shutdown-queue") {
66
+ const log = createCliLog({ verbose: parsed.options.verbose });
67
+ if (parsed.options.verbose && !llm) {
68
+ log.warn("no helper LLM configured; shutdown drain skips sessions without compaction export");
165
69
  }
166
- console.log(`Rebuilding FTS5 index at ${dbPath}...`);
167
- const { indexed } = await idx.rebuildIndex(sessionsDir);
168
- idx.close();
169
- console.log(JSON.stringify({ indexed, db_path: dbPath }));
170
- return;
70
+ return runDrainShutdownQueueCommand({
71
+ store,
72
+ agentDir,
73
+ llm,
74
+ verbose: parsed.options.verbose,
75
+ log,
76
+ });
171
77
  }
172
78
 
173
- console.error(`Unknown command: ${cmd}`);
174
- printHelp();
175
- process.exit(1);
176
- }
177
-
178
- function parseTrainFlags(args: string[]): {
179
- sessionsDir?: string;
180
- full: boolean;
181
- dryRun: boolean;
182
- noMerge: boolean;
183
- extractor: "regex" | "llm";
184
- watch: boolean;
185
- model?: string;
186
- } {
187
- let sessionsDir: string | undefined;
188
- let full = false;
189
- let dryRun = false;
190
- let noMerge = false;
191
- let extractor: "regex" | "llm" = "regex";
192
- let watch = false;
193
- let model: string | undefined;
194
- for (let i = 0; i < args.length; i++) {
195
- const arg = args[i]!;
196
- if (arg === "--full") { full = true; continue; }
197
- if (arg === "--dry-run") { dryRun = true; continue; }
198
- if (arg === "--no-merge") { noMerge = true; continue; }
199
- if (arg === "--watch") { watch = true; continue; }
200
- if (arg === "--model" && i + 1 < args.length) {
201
- model = args[++i];
202
- continue;
203
- }
204
- if (arg === "--sessions-dir" && i + 1 < args.length) {
205
- sessionsDir = args[++i];
206
- continue;
207
- }
208
- if (arg === "--extractor" && i + 1 < args.length) {
209
- const val = args[++i]!;
210
- if (val === "llm" || val === "regex") extractor = val;
211
- continue;
79
+ if (parsed.command === "consolidate") {
80
+ const log = createCliLog({ verbose: parsed.options.verbose });
81
+ if (parsed.options.verbose && !llm) {
82
+ log.warn("no helper LLM configured; using rule-based dedupe only");
212
83
  }
84
+ return runConsolidateCommand({
85
+ store,
86
+ agentDir,
87
+ llm,
88
+ cron: parsed.options.cron,
89
+ force: parsed.options.force,
90
+ verbose: parsed.options.verbose,
91
+ log,
92
+ });
213
93
  }
214
- return { sessionsDir, full, dryRun, noMerge, extractor, watch, model };
215
- }
216
-
217
- function printHelp(): void {
218
- console.log(`pi-memory — local TLM episodic memory (mode B)
219
-
220
- Commands:
221
- health Start sidecar (if bundle present) and print /health
222
- status Print MemoryService status snapshot
223
- query POST /query with JSON QueryIntent
224
- install-bundle Copy a local bundle dir into ~/.pi/memory/current
225
- train Build a bundle from session history (delta merge by default)
226
- --sessions-dir Override sessions directory (default from config)
227
- --full Ignore marker, rebuild from all sessions
228
- --dry-run Show extraction stats without writing bundle
229
- --no-merge Skip delta merge, full rebuild (ignore existing bundle)
230
- --extractor Extractor type: "regex" (default) or "llm"
231
- --model LLM model for --extractor llm (default: deepseek/deepseek-v4-flash)
232
- --watch Run once then schedule periodic re-training
233
- index Rebuild SQLite FTS5 session search index
234
- --sessions-dir Override sessions directory (default from config)
235
-
236
- Environment:
237
- Place bundle at ~/.pi/memory/current/ (symlink to bundles/<ts>/)
238
- Session fallback searches ~/.pi/sessions/*.json
239
- Install tlm on PATH or set memory.tlmPath in Pi extension config
240
- LLM extractor uses provider env vars (e.g. DEEPSEEK_API_KEY for deepseek/deepseek-v4-flash)
241
94
 
242
- Example:
243
- pi-memory query '{"mode":"direct_relation","anchor_mentions":["Alice"]}'
244
- pi-memory install-bundle ./my-bundle-2026-06-01T00-00-00Z
245
- pi-memory train --full
246
- pi-memory train --extractor llm
247
- pi-memory train --watch
248
- pi-memory index
249
- `);
95
+ return 1;
250
96
  }
251
97
 
252
- main().catch((err) => {
253
- console.error(err);
254
- process.exit(1);
255
- });
98
+ main().then(
99
+ (code) => process.exit(code),
100
+ (error) => {
101
+ const log = createCliLog({ verbose: true });
102
+ log.error(error instanceof Error ? error.message : String(error));
103
+ process.exit(1);
104
+ },
105
+ );
@@ -0,0 +1,20 @@
1
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
2
+
3
+ import { createRememberCommand } from "./remember.js";
4
+ import { createMemoryStatusCommand } from "./status.js";
5
+ import type { CommandDeps } from "./types.js";
6
+
7
+ export type { CommandDeps, MemoryStatusCommandDeps, RememberCommandDeps } from "./types.js";
8
+ export { parseRememberArgs } from "./parseRememberArgs.js";
9
+
10
+ export function registerCommands(pi: ExtensionAPI, deps: CommandDeps): void {
11
+ pi.registerCommand("remember", {
12
+ description: "Append a user-authored note to MEMORY.md",
13
+ handler: createRememberCommand(deps),
14
+ });
15
+
16
+ pi.registerCommand("memory-status", {
17
+ description: "Show MEMORY.md, sidecar, and vector index diagnostics (toggle expand/collapse; hide to dismiss)",
18
+ handler: createMemoryStatusCommand(deps),
19
+ });
20
+ }
@@ -0,0 +1,11 @@
1
+ export type MemoryStatusAction = "toggle" | "refresh" | "hide" | "expand" | "collapse";
2
+
3
+ export function parseMemoryStatusArgs(args: string | string[]): MemoryStatusAction {
4
+ const text = (Array.isArray(args) ? args.join(" ") : args).trim().toLowerCase();
5
+ if (!text) return "toggle";
6
+ if (text === "hide" || text === "close" || text === "off" || text === "dismiss") return "hide";
7
+ if (text === "refresh" || text === "reload") return "refresh";
8
+ if (text === "expand" || text === "open" || text === "show") return "expand";
9
+ if (text === "collapse" || text === "fold" || text === "min") return "collapse";
10
+ return "toggle";
11
+ }
@@ -0,0 +1,55 @@
1
+ import { MEMORY_SECTIONS, type MemorySection } from "../store/types.js";
2
+
3
+ const SECTION_ALIASES: Record<string, MemorySection> = {
4
+ preferences: "Preferences",
5
+ preference: "Preferences",
6
+ prefs: "Preferences",
7
+ pref: "Preferences",
8
+ conventions: "Conventions",
9
+ convention: "Conventions",
10
+ conv: "Conventions",
11
+ findings: "Findings",
12
+ finding: "Findings",
13
+ todos: "Todos",
14
+ todo: "Todos",
15
+ };
16
+
17
+ export type ParsedRememberArgs =
18
+ | { section: MemorySection; content: string }
19
+ | { error: string };
20
+
21
+ function normalizeArgs(raw: string | string[]): string {
22
+ return (Array.isArray(raw) ? raw.join(" ") : raw).trim();
23
+ }
24
+
25
+ function matchSection(token: string): MemorySection | undefined {
26
+ const key = token.toLowerCase();
27
+ if (SECTION_ALIASES[key]) return SECTION_ALIASES[key];
28
+ return MEMORY_SECTIONS.find((section) => section.toLowerCase() === key);
29
+ }
30
+
31
+ /** Parse `/remember [section]? content`. Default section: Findings. */
32
+ export function parseRememberArgs(raw: string | string[]): ParsedRememberArgs {
33
+ const text = normalizeArgs(raw);
34
+ if (!text) {
35
+ return {
36
+ error: "Usage: /remember [Preferences|Conventions|Findings|Todos] <content>",
37
+ };
38
+ }
39
+
40
+ const space = text.indexOf(" ");
41
+ const firstToken = space === -1 ? text : text.slice(0, space);
42
+ const section = matchSection(firstToken);
43
+
44
+ if (section) {
45
+ const content = space === -1 ? "" : text.slice(space + 1).trim();
46
+ if (!content) {
47
+ return {
48
+ error: `Usage: /remember ${section} <content>`,
49
+ };
50
+ }
51
+ return { section, content };
52
+ }
53
+
54
+ return { section: "Findings", content: text };
55
+ }
@@ -0,0 +1,43 @@
1
+ import type { ExtensionCommandContext } from "@earendil-works/pi-coding-agent";
2
+
3
+ import type { MemoryStore } from "../store/memoryStore.js";
4
+ import { parseRememberArgs } from "./parseRememberArgs.js";
5
+
6
+ export type RememberCommandDeps = {
7
+ getMemoryStore(): MemoryStore | null;
8
+ onRemembered?(): Promise<void>;
9
+ };
10
+
11
+ export function createRememberCommand(deps: RememberCommandDeps) {
12
+ return async (args: string | string[], ctx: ExtensionCommandContext): Promise<void> => {
13
+ const memoryStore = deps.getMemoryStore();
14
+ if (!memoryStore) {
15
+ ctx.ui.notify("pi-memory: not started", "warning");
16
+ return;
17
+ }
18
+
19
+ const parsed = parseRememberArgs(args);
20
+ if ("error" in parsed) {
21
+ ctx.ui.notify(parsed.error, "warning");
22
+ return;
23
+ }
24
+
25
+ try {
26
+ await memoryStore.ensureInitialized();
27
+ await memoryStore.appendUser({
28
+ id: "",
29
+ section: parsed.section,
30
+ content: parsed.content,
31
+ timestamp: "",
32
+ });
33
+ await deps.onRemembered?.();
34
+
35
+ ctx.ui.notify(`Saved to MEMORY.md (${parsed.section})`, "info");
36
+ } catch (error) {
37
+ ctx.ui.notify(
38
+ `Remember failed: ${error instanceof Error ? error.message : String(error)}`,
39
+ "warning",
40
+ );
41
+ }
42
+ };
43
+ }
@@ -0,0 +1,112 @@
1
+ import type { ExtensionCommandContext } from "@earendil-works/pi-coding-agent";
2
+
3
+ import {
4
+ formatMemoryStatusLines,
5
+ gatherMemoryStatus,
6
+ } from "../cli/status.js";
7
+ import { resolveMemoryAgentDir } from "../config/agentDir.js";
8
+ import { createMemoryStatusWidget, type MemoryStatusWidgetState } from "../ui/memoryStatusWidget.js";
9
+
10
+ import { parseMemoryStatusArgs } from "./parseMemoryStatusArgs.js";
11
+
12
+ export type MemoryStatusCommandDeps = {
13
+ getAgentDir(): string | null;
14
+ };
15
+
16
+ let memoryStatusWidgetState: MemoryStatusWidgetState | null = null;
17
+
18
+ export function resetMemoryStatusWidgetState(): void {
19
+ memoryStatusWidgetState = null;
20
+ }
21
+
22
+ function renderMemoryStatusWidget(
23
+ ctx: ExtensionCommandContext,
24
+ state: MemoryStatusWidgetState,
25
+ ): void {
26
+ ctx.ui.setWidget("pi-memory-status", (tui, theme) => createMemoryStatusWidget(tui, theme, state), {
27
+ placement: "aboveEditor",
28
+ });
29
+ }
30
+
31
+ function applyMemoryStatusAction(
32
+ action: ReturnType<typeof parseMemoryStatusArgs>,
33
+ refreshed: boolean,
34
+ ): void {
35
+ if (!memoryStatusWidgetState) return;
36
+
37
+ if (action === "expand") {
38
+ memoryStatusWidgetState.expanded = true;
39
+ return;
40
+ }
41
+ if (action === "collapse") {
42
+ memoryStatusWidgetState.expanded = false;
43
+ return;
44
+ }
45
+ if (action === "toggle" && !refreshed) {
46
+ memoryStatusWidgetState.expanded = !memoryStatusWidgetState.expanded;
47
+ return;
48
+ }
49
+ if (action === "toggle" && refreshed) {
50
+ memoryStatusWidgetState.expanded = false;
51
+ }
52
+ }
53
+
54
+ export function createMemoryStatusCommand(deps: MemoryStatusCommandDeps) {
55
+ return async (args: string | string[], ctx: ExtensionCommandContext): Promise<void> => {
56
+ const action = parseMemoryStatusArgs(args);
57
+
58
+ if (action === "hide") {
59
+ memoryStatusWidgetState = null;
60
+ if (ctx.hasUI) {
61
+ ctx.ui.setWidget("pi-memory-status", undefined);
62
+ }
63
+ return;
64
+ }
65
+
66
+ const agentDir = deps.getAgentDir() ?? resolveMemoryAgentDir();
67
+
68
+ const needsFetch = action === "refresh" || !memoryStatusWidgetState;
69
+
70
+ if (needsFetch) {
71
+ if (ctx.hasUI) {
72
+ ctx.ui.setWorkingMessage("Checking memory…");
73
+ }
74
+
75
+ try {
76
+ const report = await gatherMemoryStatus(agentDir);
77
+ memoryStatusWidgetState = {
78
+ report,
79
+ expanded: memoryStatusWidgetState?.expanded ?? false,
80
+ };
81
+ } catch (error) {
82
+ ctx.ui.notify(
83
+ `Memory status failed: ${error instanceof Error ? error.message : String(error)}`,
84
+ "warning",
85
+ );
86
+ return;
87
+ } finally {
88
+ if (ctx.hasUI) {
89
+ ctx.ui.setWorkingMessage();
90
+ }
91
+ }
92
+ }
93
+
94
+ applyMemoryStatusAction(action, needsFetch);
95
+
96
+ if (ctx.hasUI) {
97
+ renderMemoryStatusWidget(ctx, memoryStatusWidgetState!);
98
+ return;
99
+ }
100
+
101
+ const lines = ["pi-memory status", ...formatMemoryStatusLines(memoryStatusWidgetState!.report)];
102
+ ctx.ui.notify(lines.join("\n"), "info");
103
+ };
104
+ }
105
+
106
+ export function getMemoryStatusWidgetStateForTest(): MemoryStatusWidgetState | null {
107
+ return memoryStatusWidgetState;
108
+ }
109
+
110
+ export function setMemoryStatusWidgetStateForTest(state: MemoryStatusWidgetState | null): void {
111
+ memoryStatusWidgetState = state;
112
+ }
@@ -0,0 +1,12 @@
1
+ import type { MemoryStore } from "../store/memoryStore.js";
2
+
3
+ export type RememberCommandDeps = {
4
+ getMemoryStore(): MemoryStore | null;
5
+ onRemembered?(): Promise<void>;
6
+ };
7
+
8
+ export type MemoryStatusCommandDeps = {
9
+ getAgentDir(): string | null;
10
+ };
11
+
12
+ export type CommandDeps = RememberCommandDeps & MemoryStatusCommandDeps;
@@ -0,0 +1,4 @@
1
+ export { parseMemoryExport, hasMemoryExportSection } from "./parseMemoryExport.js";
2
+ export { buildCompactionSummaryPrompt, DUAL_PURPOSE_SUMMARY_TEMPLATE } from "./summaryPrompt.js";
3
+ export { runDualPurposeCompactionSummary } from "./runSummary.js";
4
+ export { registerCompactHandlers, type CompactHandlerDeps } from "./register.js";
@@ -0,0 +1,71 @@
1
+ import { parseMemoryMarkdown } from "../store/markdown/parse.js";
2
+ import { MEMORY_SECTIONS, type MemorySection, type StoreMemoryEntry } from "../store/types.js";
3
+
4
+ const MEMORY_EXPORT_HEADER_RE = /^##\s+Memory Export\s*$/im;
5
+
6
+ function extractMemoryExportBlock(summary: string): string {
7
+ const match = MEMORY_EXPORT_HEADER_RE.exec(summary);
8
+ if (!match) return "";
9
+
10
+ let body = summary.slice(match.index + match[0].length);
11
+ const nextTopLevel = body.search(/^##\s+(?!#)/m);
12
+ if (nextTopLevel >= 0) {
13
+ body = body.slice(0, nextTopLevel);
14
+ }
15
+
16
+ return body.trim();
17
+ }
18
+
19
+ /** Normalize ### Section headers to ## for shared markdown parser. */
20
+ function normalizeExportMarkdown(exportBody: string): string {
21
+ const lines = exportBody.split("\n");
22
+ const normalized: string[] = [];
23
+
24
+ for (const line of lines) {
25
+ const subsection = line.match(/^###\s+(Preferences|Conventions|Findings|Todos)\s*$/);
26
+ if (subsection) {
27
+ normalized.push(`## ${subsection[1]}`);
28
+ continue;
29
+ }
30
+ normalized.push(line);
31
+ }
32
+
33
+ return normalized.join("\n");
34
+ }
35
+
36
+ function parseExportBullets(exportBody: string): StoreMemoryEntry[] {
37
+ const normalized = normalizeExportMarkdown(exportBody);
38
+ if (!normalized.trim()) return [];
39
+
40
+ const parsed = parseMemoryMarkdown(normalized, "memory-export");
41
+ return parsed.map((entry) => ({
42
+ id: "",
43
+ section: entry.section,
44
+ content: entry.content,
45
+ timestamp: "",
46
+ }));
47
+ }
48
+
49
+ /** Parse durable facts from the ## Memory Export section of a dual-purpose summary. */
50
+ export function parseMemoryExport(summary: string): StoreMemoryEntry[] {
51
+ const exportBody = extractMemoryExportBlock(summary);
52
+ if (!exportBody) return [];
53
+
54
+ const entries = parseExportBullets(exportBody);
55
+ const seen = new Set<string>();
56
+
57
+ return entries.filter((entry) => {
58
+ const key = `${entry.section}\0${entry.content.trim()}`;
59
+ if (seen.has(key)) return false;
60
+ seen.add(key);
61
+ return entry.content.trim().length > 0;
62
+ });
63
+ }
64
+
65
+ export function hasMemoryExportSection(summary: string): boolean {
66
+ return MEMORY_EXPORT_HEADER_RE.test(summary);
67
+ }
68
+
69
+ export function isKnownExportSection(name: string): name is MemorySection {
70
+ return (MEMORY_SECTIONS as readonly string[]).includes(name);
71
+ }