@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
@@ -1,199 +0,0 @@
1
- import type { RerankOptions } from "../fallback/llmRerank.js";
2
- import type { MemoryConfig } from "../config.js";
3
- import type { FallbackQuery } from "../types.js";
4
- import type { MemoryService } from "../service.js";
5
- import type { QueryIntent } from "../types.js";
6
- import {
7
- detectMemoryIntents,
8
- type DetectIntentsOptions,
9
- type MemoryHelperLLM,
10
- } from "./detectIntents.js";
11
- import { renderFallbackPrivateMemory, renderPrivateMemoryContext, type PreflightQueryResult } from "./render.js";
12
- import { injectPrivateMemoryContext } from "./strip.js";
13
- import {
14
- deleteNegativeCache,
15
- isNegativeCached,
16
- setNegativeCache,
17
- } from "../cache/memoryCaches.js";
18
-
19
- export type { MemoryHelperLLM };
20
-
21
- export const MEMORY_PREFLIGHT_QUERY_TIMEOUT_MS = 2_000;
22
-
23
- export interface MemoryPreflightOptions extends DetectIntentsOptions {
24
- helper?: MemoryHelperLLM | null;
25
- /** When true, run helper even if lexical gate would skip. */
26
- forceHelper?: boolean;
27
- /** Fallback query for degraded path when sidecar is not ready. */
28
- fallback?: FallbackQuery | null;
29
- /** LLM rerank options for fallback search results. */
30
- rerankOpts?: RerankOptions | null;
31
- /**
32
- * Optional progress callback emitted at key stages (intent detection,
33
- * graph query, FTS search, rerank). Wire to ctx.ui.setWorkingMessage for
34
- * visible feedback during slow sidecar queries.
35
- */
36
- onProgress?: (message: string) => void;
37
- /**
38
- * When the graph is ready but returns no usable results, cascade to a
39
- * semantic fallback: broader FTS recall + single LLM rerank.
40
- * Requires both `fallback` and `rerankOpts` to be set.
41
- * Defaults to true — set to false to disable the cascade.
42
- */
43
- semanticFallback?: boolean;
44
- }
45
-
46
- export interface MemoryPreflightResult {
47
- /** Full injected user text (scaffold + private memory + payload), or undefined. */
48
- injectedText?: string;
49
- /** Raw <private_memory> block when context was returned. */
50
- privateContext?: string;
51
- }
52
-
53
- export interface BeforeTurnInput {
54
- /** Scaffolded user message text sent to the model (may include date/CWD scaffolding). */
55
- scaffoldedText: string;
56
- /** Raw user payload without scaffolding — used for intent detection. */
57
- userPayload: string;
58
- /** First message in conversation — enables forceHelper gate. */
59
- isFirstTurn?: boolean;
60
- /** Set when preflight injected context (not for persistence). */
61
- privateContext?: string;
62
- signal?: AbortSignal;
63
- }
64
-
65
- export type BeforeTurnHook = (input: BeforeTurnInput) => Promise<BeforeTurnInput>;
66
-
67
- /**
68
- * Fail-silent implicit episodic preflight: detect intents → batch query → inject
69
- * <private_memory> into the in-flight user message. Never throws.
70
- */
71
- export async function runMemoryPreflight(
72
- query: string,
73
- service: MemoryService,
74
- options: MemoryPreflightOptions = {},
75
- ): Promise<MemoryPreflightResult | null> {
76
- if (isNegativeCached(query)) return null;
77
-
78
- try {
79
- if (service.status() !== "ready") {
80
- if (!options.fallback) {
81
- setNegativeCache(query);
82
- return null;
83
- }
84
- options.onProgress?.("Searching session history…");
85
- const privateContext = await renderFallbackPrivateMemory(query, options.fallback, {
86
- rerankOpts: options.rerankOpts,
87
- onProgress: options.onProgress,
88
- });
89
- if (!privateContext.trim()) {
90
- setNegativeCache(query);
91
- return null;
92
- }
93
- deleteNegativeCache(query);
94
- return { privateContext };
95
- }
96
-
97
- options.onProgress?.("Detecting memory intents…");
98
- const intents = await detectMemoryIntents(query, options.helper ?? null, {
99
- forceHelper: options.forceHelper,
100
- signal: options.signal,
101
- });
102
- if (intents.length === 0) {
103
- setNegativeCache(query);
104
- return null;
105
- }
106
-
107
- if (service.getStatus().mode === "sidecar") {
108
- options.onProgress?.("Querying memory graph…");
109
- }
110
-
111
- const timeout = AbortSignal.timeout(MEMORY_PREFLIGHT_QUERY_TIMEOUT_MS);
112
- const combined = options.signal
113
- ? AbortSignal.any([options.signal, timeout])
114
- : timeout;
115
-
116
- const results = await service.queryBatch(intents, combined);
117
- if (timeout.aborted) {
118
- setNegativeCache(query);
119
- return null;
120
- }
121
-
122
- const renderInput: PreflightQueryResult[] = results.map((r) => ({
123
- envelope: r.envelope,
124
- ok: r.errorClass === "ok" && r.envelope != null && !r.envelope.error,
125
- }));
126
-
127
- const privateContext = renderPrivateMemoryContext(intents, renderInput);
128
- if (!privateContext.trim()) {
129
- // Graph was ready but returned no usable results.
130
- // Cascade to semantic fallback (broader FTS + single LLM rerank) when
131
- // both a fallback store and a rerank client are available.
132
- if (
133
- options.semanticFallback !== false &&
134
- options.fallback &&
135
- options.rerankOpts
136
- ) {
137
- options.onProgress?.("Searching session history…");
138
- const semanticCtx = await renderFallbackPrivateMemory(query, options.fallback, {
139
- rerankOpts: options.rerankOpts,
140
- onProgress: options.onProgress,
141
- });
142
- if (semanticCtx.trim()) {
143
- deleteNegativeCache(query);
144
- return { privateContext: semanticCtx };
145
- }
146
- }
147
- setNegativeCache(query);
148
- return null;
149
- }
150
-
151
- deleteNegativeCache(query);
152
- return { privateContext };
153
- } catch {
154
- setNegativeCache(query);
155
- return null;
156
- }
157
- }
158
-
159
- /**
160
- * Pi beforeTurn hook factory — wire into pi-coding-agent turn lifecycle.
161
- *
162
- * ```ts
163
- * const hook = createBeforeTurnHook(service, config, { helper: mySmallModel });
164
- * api.onBeforeTurn?.(hook);
165
- * ```
166
- *
167
- * On persist/summary, call `stripPrivateMemory` on user message text so recalled
168
- * facts are not written to session history.
169
- */
170
- export function createBeforeTurnHook(
171
- service: MemoryService,
172
- config: MemoryConfig,
173
- options: { helper?: MemoryHelperLLM | null; fallback?: FallbackQuery | null } = {},
174
- ): BeforeTurnHook {
175
- const fallback = options.fallback ?? null;
176
- return async (input: BeforeTurnInput): Promise<BeforeTurnInput> => {
177
- const preflight = await runMemoryPreflight(input.userPayload, service, {
178
- helper: options.helper ?? null,
179
- forceHelper: input.isFirstTurn ?? false,
180
- signal: input.signal,
181
- fallback,
182
- });
183
- if (!preflight?.privateContext) return input;
184
-
185
- const injectedText = injectPrivateMemoryContext(
186
- input.scaffoldedText,
187
- input.userPayload,
188
- preflight.privateContext,
189
- );
190
- return {
191
- ...input,
192
- scaffoldedText: injectedText,
193
- privateContext: preflight.privateContext,
194
- };
195
- };
196
- }
197
-
198
- /** @internal exported for tests */
199
- export type { QueryIntent };
package/src/service.ts DELETED
@@ -1,306 +0,0 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- import type { MemoryConfig } from "./config.js";
4
- import { invalidateMemoryCaches } from "./cache/memoryCaches.js";
5
- import { LocalGraphQuerier } from "./local/graphQuery.js";
6
- import { currentBundleReadable } from "./sidecar/bundle.js";
7
- import { SidecarClient } from "./sidecar/client.js";
8
- import { SidecarProcess } from "./sidecar/process.js";
9
- import { openSessionIndex, type SessionIndex } from "./fallback/sessionIndex.js";
10
- import { createTrainScheduler, type TrainScheduler, type SchedulerLog } from "./trainer/scheduler.js";
11
- import type { ErrorClass } from "./errclass.js";
12
- import type {
13
- HealthPayload,
14
- QueryIntent,
15
- ResponseEnvelope,
16
- ServiceStatus,
17
- } from "./types.js";
18
-
19
- export interface MemoryServiceStatus {
20
- status: ServiceStatus;
21
- reason?: string;
22
- mode?: "sidecar" | "local_graph";
23
- health?: HealthPayload | null;
24
- }
25
-
26
- export interface QueryBatchResult {
27
- envelope: ResponseEnvelope | null;
28
- errorClass: ErrorClass;
29
- transportError?: Error;
30
- }
31
-
32
- /**
33
- * Local memory service with two query backends:
34
- * 1. tlm sidecar (Unix socket) — when tlm binary is available
35
- * 2. LocalGraphQuerier — direct graph.json query when tlm is missing
36
- *
37
- * Both require a bundle at bundleRoot/current.
38
- */
39
- export class MemoryService {
40
- private serviceStatus: ServiceStatus = "disabled";
41
- private reason = "";
42
- private mode: "sidecar" | "local_graph" | null = null;
43
- private process: SidecarProcess | null = null;
44
- private client: SidecarClient | null = null;
45
- private localQuerier: LocalGraphQuerier | null = null;
46
- private abort: AbortController | null = null;
47
- private scheduler: TrainScheduler | null = null;
48
- private sessionIndex: SessionIndex | null = null;
49
- private bundleMtimes: { graph: number; manifest: number } | null = null;
50
- private lastBundleCheckMs = 0;
51
- private static readonly BUNDLE_CHECK_INTERVAL_MS = 5_000;
52
-
53
- constructor(private cfg: MemoryConfig) {}
54
-
55
- getConfig(): MemoryConfig {
56
- return this.cfg;
57
- }
58
-
59
- status(): ServiceStatus {
60
- return this.serviceStatus;
61
- }
62
-
63
- getStatus(): MemoryServiceStatus {
64
- return {
65
- status: this.serviceStatus,
66
- reason: this.reason || undefined,
67
- mode: this.mode ?? undefined,
68
- };
69
- }
70
-
71
- getClient(): SidecarClient | null {
72
- return this.client;
73
- }
74
-
75
- async start(): Promise<void> {
76
- if (this.cfg.provider === "disabled") {
77
- this.serviceStatus = "disabled";
78
- return;
79
- }
80
-
81
- if (this.cfg.provider !== "local") {
82
- this.serviceStatus = "unavailable";
83
- this.reason = "cloud_mode_not_implemented_in_pi_memory_v0.1";
84
- return;
85
- }
86
-
87
- if (!currentBundleReadable(this.cfg.bundleRoot)) {
88
- this.serviceStatus = "unavailable";
89
- this.reason = "bundle_missing";
90
- return;
91
- }
92
-
93
- this.serviceStatus = "initializing";
94
- this.abort = new AbortController();
95
-
96
- if (await this.trySidecar()) return;
97
-
98
- if (this.tryLocalGraph()) return;
99
-
100
- this.serviceStatus = "unavailable";
101
- this.reason = "no_query_backend";
102
- }
103
-
104
- private async trySidecar(): Promise<boolean> {
105
- this.process = new SidecarProcess(this.cfg);
106
- try {
107
- await this.process.resolveBinary();
108
- } catch {
109
- this.process = null;
110
- return false;
111
- }
112
-
113
- try {
114
- await this.process.spawn();
115
- await this.process.waitReady(this.abort!.signal);
116
- this.client = this.process.getClient();
117
- this.serviceStatus = "ready";
118
- this.mode = "sidecar";
119
- this.reason = "";
120
- return true;
121
- } catch {
122
- await this.process.stop();
123
- this.process = null;
124
- this.client = null;
125
- return false;
126
- }
127
- }
128
-
129
- private tryLocalGraph(): boolean {
130
- const querier = new LocalGraphQuerier(this.cfg.bundleRoot);
131
- if (!querier.load()) return false;
132
- this.localQuerier = querier;
133
- this.serviceStatus = "ready";
134
- this.mode = "local_graph";
135
- this.reason = "";
136
- return true;
137
- }
138
-
139
- startAutoTrainer(logger?: (log: SchedulerLog) => void): void {
140
- this.scheduler?.stop();
141
- this.scheduler = createTrainScheduler(
142
- {
143
- interval: this.cfg.trainer.auto_interval,
144
- trainConfig: {
145
- sessionsDir: this.cfg.sessionsDir,
146
- bundleRoot: this.cfg.bundleRoot,
147
- },
148
- onSuccess: () => { void this.notifyBundleUpdated(); },
149
- },
150
- logger,
151
- );
152
- }
153
-
154
- /**
155
- * Check if the on-disk bundle has changed and hot-reload if needed.
156
- * Debounced to at most once per BUNDLE_CHECK_INTERVAL_MS to avoid excess stat calls.
157
- * For local_graph, reloads LocalGraphQuerier in-process.
158
- * For sidecar, issues a /bundle/reload request.
159
- * Invalidates all memory caches on successful reload.
160
- */
161
- async ensureFreshBundle(): Promise<void> {
162
- if (this.serviceStatus !== "ready") return;
163
- const now = Date.now();
164
- if (now - this.lastBundleCheckMs < MemoryService.BUNDLE_CHECK_INTERVAL_MS) return;
165
- this.lastBundleCheckMs = now;
166
-
167
- if (this.mode === "local_graph" && this.localQuerier) {
168
- const reloaded = this.localQuerier.reloadIfStale();
169
- if (reloaded) invalidateMemoryCaches();
170
- return;
171
- }
172
-
173
- if (this.mode === "sidecar" && this.client) {
174
- const graphPath = path.join(this.cfg.bundleRoot, "current", "graph.json");
175
- const manifestPath = path.join(this.cfg.bundleRoot, "current", "manifest.json");
176
- try {
177
- const graphMtime = fs.statSync(graphPath).mtimeMs;
178
- const manifestMtime = fs.statSync(manifestPath).mtimeMs;
179
- if (!this.bundleMtimes) {
180
- this.bundleMtimes = { graph: graphMtime, manifest: manifestMtime };
181
- return;
182
- }
183
- const changed =
184
- graphMtime !== this.bundleMtimes.graph ||
185
- manifestMtime !== this.bundleMtimes.manifest;
186
- if (!changed) return;
187
- this.bundleMtimes = { graph: graphMtime, manifest: manifestMtime };
188
- await this.client.reload();
189
- invalidateMemoryCaches();
190
- } catch {
191
- /* stat or reload failure — continue with current bundle */
192
- }
193
- }
194
- }
195
-
196
- /**
197
- * Force an immediate bundle freshness check (bypasses the debounce).
198
- * Called by the auto-trainer scheduler after a successful train run.
199
- */
200
- async notifyBundleUpdated(): Promise<void> {
201
- this.lastBundleCheckMs = 0;
202
- await this.ensureFreshBundle();
203
- }
204
-
205
- startSessionIndex(): void {
206
- const dbDir = this.cfg.bundleRoot;
207
- try {
208
- fs.mkdirSync(dbDir, { recursive: true });
209
- } catch {
210
- return;
211
- }
212
- const dbPath = path.join(dbDir, "sessions.db");
213
- const idx = openSessionIndex(dbPath);
214
- if (!idx) return;
215
- this.sessionIndex = idx;
216
- void idx.incrementalIndex(this.cfg.sessionsDir).catch(() => {});
217
- }
218
-
219
- getSessionIndex(): SessionIndex | null {
220
- return this.sessionIndex;
221
- }
222
-
223
- async stop(): Promise<void> {
224
- this.abort?.abort();
225
- this.scheduler?.stop();
226
- this.scheduler = null;
227
- this.sessionIndex?.close();
228
- this.sessionIndex = null;
229
- await this.process?.stop();
230
- this.process = null;
231
- this.client = null;
232
- this.localQuerier = null;
233
- this.mode = null;
234
- if (this.cfg.provider === "disabled") {
235
- this.serviceStatus = "disabled";
236
- } else {
237
- this.serviceStatus = "unavailable";
238
- this.reason = "stopped";
239
- }
240
- }
241
-
242
- async queryBatch(
243
- intents: QueryIntent[],
244
- signal?: AbortSignal,
245
- ): Promise<QueryBatchResult[]> {
246
- if (intents.length === 0) return [];
247
- return Promise.all(
248
- intents.map(async (intent) => {
249
- const r = await this.query(intent, signal);
250
- return {
251
- envelope: r.env,
252
- errorClass: r.errorClass,
253
- transportError: r.transportError,
254
- };
255
- }),
256
- );
257
- }
258
-
259
- async query(
260
- intent: QueryIntent,
261
- signal?: AbortSignal,
262
- ): Promise<{
263
- env: ResponseEnvelope | null;
264
- errorClass: ErrorClass;
265
- transportError?: Error;
266
- }> {
267
- if (this.serviceStatus !== "ready") {
268
- return { env: null, errorClass: "unavailable" };
269
- }
270
- await this.ensureFreshBundle();
271
-
272
- if (this.client && this.mode === "sidecar") {
273
- const timeout = AbortSignal.timeout(this.cfg.queryTimeoutMs);
274
- const combined = signal
275
- ? AbortSignal.any([signal, timeout])
276
- : timeout;
277
- return this.client.query(intent, combined);
278
- }
279
-
280
- if (this.localQuerier && this.mode === "local_graph") {
281
- return this.localQuerier.query(intent);
282
- }
283
-
284
- return { env: null, errorClass: "unavailable" };
285
- }
286
-
287
- async health(): Promise<HealthPayload | null> {
288
- if (this.client) {
289
- try {
290
- return await this.client.health();
291
- } catch {
292
- return null;
293
- }
294
- }
295
- if (this.localQuerier) {
296
- return {
297
- ready: true,
298
- compatibility: "local_graph",
299
- protocol_version: 1,
300
- uptime_secs: 0,
301
- status_message: `local graph query (${this.localQuerier.isLoaded() ? "loaded" : "not loaded"})`,
302
- };
303
- }
304
- return null;
305
- }
306
- }
package/src/settings.ts DELETED
@@ -1,126 +0,0 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
-
4
- import { getAgentDir } from "@earendil-works/pi-coding-agent";
5
-
6
- import {
7
- defaultMemoryConfig,
8
- normalizeMemoryConfig,
9
- type ExtractorType,
10
- type MemoryConfig,
11
- type MemoryProvider,
12
- type TrainerConfig,
13
- } from "./config.js";
14
- import type { OllamaConfig } from "./adapters/ollamaClient.js";
15
- import type { OpenAICompatConfig } from "./adapters/openaiCompatClient.js";
16
-
17
- export interface MemorySettingsFile {
18
- provider?: MemoryProvider;
19
- tlmPath?: string;
20
- socketPath?: string;
21
- bundleRoot?: string;
22
- sidecarReadyTimeoutMs?: number;
23
- queryTimeoutMs?: number;
24
- clientRequestTimeoutMs?: number;
25
- sessionsDir?: string;
26
- memoryMdPaths?: string[];
27
- /** LLM for intent detection, rerank, and LLM extraction. Overrides default helper model. */
28
- helperModel?: string;
29
- /** Ollama local API config for helper / trainer / rerank. */
30
- ollama?: Partial<OllamaConfig>;
31
- /** OpenAI-compatible endpoint config (vLLM, SGLang, LM Studio, etc.) */
32
- vllm?: Partial<OpenAICompatConfig>;
33
- trainer?: Partial<TrainerConfig>;
34
- }
35
-
36
- export interface LoadedMemorySettings {
37
- config: MemoryConfig;
38
- helperModel: string | undefined;
39
- ollama: OllamaConfig | null;
40
- vllm: OpenAICompatConfig | null;
41
- configPath: string;
42
- }
43
-
44
- /** Default path: ~/.pi/agent/memory.json */
45
- export function defaultMemoryConfigPath(): string {
46
- return path.join(getAgentDir(), "memory.json");
47
- }
48
-
49
- function readMemorySettingsFile(configPath = defaultMemoryConfigPath()): MemorySettingsFile {
50
- try {
51
- const raw = fs.readFileSync(configPath, "utf8");
52
- const parsed = JSON.parse(raw) as unknown;
53
- if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
54
- return {};
55
- }
56
- return parsed as MemorySettingsFile;
57
- } catch (err) {
58
- if ((err as NodeJS.ErrnoException).code === "ENOENT") {
59
- return {};
60
- }
61
- throw new Error(
62
- `Failed to load pi-memory config from ${configPath}: ${err instanceof Error ? err.message : String(err)}`,
63
- );
64
- }
65
- }
66
-
67
- /** Load pi-memory config from ~/.pi/agent/memory.json. */
68
- export function loadMemorySettings(
69
- overrides: Partial<MemoryConfig> = {},
70
- configPath = defaultMemoryConfigPath(),
71
- ): LoadedMemorySettings {
72
- const fileSettings = readMemorySettingsFile(configPath);
73
- const { helperModel, ollama, vllm, trainer, ...configFields } = fileSettings;
74
-
75
- const config = normalizeMemoryConfig({
76
- ...configFields,
77
- ...(trainer ? { trainer } : {}),
78
- ...overrides,
79
- } as Partial<MemoryConfig> & Record<string, unknown>);
80
-
81
- let resolvedOllama: OllamaConfig | null = null;
82
- if (ollama && ollama.model) {
83
- resolvedOllama = {
84
- baseUrl: ollama.baseUrl?.trim() || "http://localhost:11434",
85
- model: ollama.model.trim(),
86
- };
87
- }
88
-
89
- let resolvedVllm: OpenAICompatConfig | null = null;
90
- if (vllm && vllm.model) {
91
- resolvedVllm = {
92
- baseUrl: vllm.baseUrl?.trim() || "http://localhost:8000",
93
- model: vllm.model.trim(),
94
- apiKey: vllm.apiKey?.trim() || undefined,
95
- };
96
- }
97
-
98
- return {
99
- config,
100
- helperModel: helperModel?.trim() || undefined,
101
- ollama: resolvedOllama,
102
- vllm: resolvedVllm,
103
- configPath,
104
- };
105
- }
106
-
107
- /** Convenience alias when only MemoryConfig is needed. */
108
- export function loadMemoryConfig(
109
- overrides: Partial<MemoryConfig> = {},
110
- configPath = defaultMemoryConfigPath(),
111
- ): MemoryConfig {
112
- return loadMemorySettings(overrides, configPath).config;
113
- }
114
-
115
- export function resolveHelperModelSpec(
116
- flagValue: string | boolean | undefined,
117
- settingsHelperModel: string | undefined,
118
- ): string | undefined {
119
- if (typeof flagValue === "string" && flagValue.trim()) {
120
- return flagValue.trim();
121
- }
122
- return settingsHelperModel;
123
- }
124
-
125
- export { defaultMemoryConfig };
126
- export type { ExtractorType, MemoryProvider, TrainerConfig };
@@ -1,52 +0,0 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
-
4
- /**
5
- * True when `<bundleRoot>/current` resolves to a directory containing
6
- * JSON-parseable manifest.json (Kocoro memory/service.go currentBundleReadable).
7
- */
8
- export function currentBundleReadable(bundleRoot: string): boolean {
9
- const currentPath = path.join(bundleRoot, "current");
10
- let st: fs.Stats;
11
- try {
12
- st = fs.statSync(currentPath);
13
- } catch {
14
- return false;
15
- }
16
- if (!st.isDirectory()) return false;
17
- try {
18
- const data = fs.readFileSync(path.join(currentPath, "manifest.json"), "utf8");
19
- JSON.parse(data);
20
- return true;
21
- } catch {
22
- return false;
23
- }
24
- }
25
-
26
- export interface BundleManifestFile {
27
- path: string;
28
- size: number;
29
- sha256: string;
30
- }
31
-
32
- export interface BundleManifest {
33
- bundle_ts: string;
34
- bundle_version: string;
35
- size_bytes: number;
36
- integrity_sha256: string;
37
- files: BundleManifestFile[];
38
- }
39
-
40
- export function readCurrentManifest(bundleRoot: string): BundleManifest | null {
41
- if (!currentBundleReadable(bundleRoot)) return null;
42
- const currentPath = path.join(bundleRoot, "current");
43
- try {
44
- const raw = fs.readFileSync(
45
- path.join(currentPath, "manifest.json"),
46
- "utf8",
47
- );
48
- return JSON.parse(raw) as BundleManifest;
49
- } catch {
50
- return null;
51
- }
52
- }