@chendpoc/pi-memory 0.1.13 → 0.2.1

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 (817) hide show
  1. package/README.md +284 -216
  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.map +1 -0
  26. package/dist/adapters/http.d.ts +13 -0
  27. package/dist/adapters/http.d.ts.map +1 -0
  28. package/dist/adapters/http.js +31 -0
  29. package/dist/adapters/http.js.map +1 -0
  30. package/dist/adapters/index.d.ts +4 -0
  31. package/dist/adapters/index.d.ts.map +1 -0
  32. package/dist/adapters/index.js +4 -0
  33. package/dist/adapters/index.js.map +1 -0
  34. package/dist/adapters/llm/extractText.d.ts +5 -0
  35. package/dist/adapters/llm/extractText.d.ts.map +1 -0
  36. package/dist/adapters/llm/extractText.js +7 -0
  37. package/dist/adapters/llm/extractText.js.map +1 -0
  38. package/dist/adapters/llm/factory.d.ts +11 -0
  39. package/dist/adapters/llm/factory.d.ts.map +1 -0
  40. package/dist/adapters/llm/factory.js +48 -0
  41. package/dist/adapters/llm/factory.js.map +1 -0
  42. package/dist/adapters/llm/index.d.ts +8 -0
  43. package/dist/adapters/llm/index.d.ts.map +1 -0
  44. package/dist/adapters/llm/index.js +7 -0
  45. package/dist/adapters/llm/index.js.map +1 -0
  46. package/dist/adapters/llm/modelSpec.d.ts +10 -0
  47. package/dist/adapters/llm/modelSpec.d.ts.map +1 -0
  48. package/dist/adapters/llm/modelSpec.js +21 -0
  49. package/dist/adapters/llm/modelSpec.js.map +1 -0
  50. package/dist/adapters/llm/ollama.d.ts +4 -0
  51. package/dist/adapters/llm/ollama.d.ts.map +1 -0
  52. package/dist/adapters/llm/ollama.js +32 -0
  53. package/dist/adapters/llm/ollama.js.map +1 -0
  54. package/dist/adapters/llm/openai-compat.d.ts +4 -0
  55. package/dist/adapters/llm/openai-compat.d.ts.map +1 -0
  56. package/dist/adapters/llm/openai-compat.js +36 -0
  57. package/dist/adapters/llm/openai-compat.js.map +1 -0
  58. package/dist/adapters/llm/pi-ai.d.ts +5 -0
  59. package/dist/adapters/llm/pi-ai.d.ts.map +1 -0
  60. package/dist/adapters/llm/pi-ai.js +60 -0
  61. package/dist/adapters/llm/pi-ai.js.map +1 -0
  62. package/dist/adapters/llm/standalone.d.ts +6 -0
  63. package/dist/adapters/llm/standalone.d.ts.map +1 -0
  64. package/dist/adapters/llm/standalone.js +44 -0
  65. package/dist/adapters/llm/standalone.js.map +1 -0
  66. package/dist/adapters/llm/types.d.ts +15 -0
  67. package/dist/adapters/llm/types.d.ts.map +1 -0
  68. package/dist/adapters/llm/types.js.map +1 -0
  69. package/dist/cli/init.d.ts +3 -0
  70. package/dist/cli/init.d.ts.map +1 -0
  71. package/dist/cli/init.js +13 -0
  72. package/dist/cli/init.js.map +1 -0
  73. package/dist/cli/jobs.d.ts +32 -0
  74. package/dist/cli/jobs.d.ts.map +1 -0
  75. package/dist/cli/jobs.js +100 -0
  76. package/dist/cli/jobs.js.map +1 -0
  77. package/dist/cli/log.d.ts +14 -0
  78. package/dist/cli/log.d.ts.map +1 -0
  79. package/dist/cli/log.js +32 -0
  80. package/dist/cli/log.js.map +1 -0
  81. package/dist/cli/parseArgs.d.ts +35 -0
  82. package/dist/cli/parseArgs.d.ts.map +1 -0
  83. package/dist/cli/parseArgs.js +127 -0
  84. package/dist/cli/parseArgs.js.map +1 -0
  85. package/dist/cli/status.d.ts +44 -0
  86. package/dist/cli/status.d.ts.map +1 -0
  87. package/dist/cli/status.js +238 -0
  88. package/dist/cli/status.js.map +1 -0
  89. package/dist/cli/theme.d.ts +14 -0
  90. package/dist/cli/theme.d.ts.map +1 -0
  91. package/dist/cli/theme.js +20 -0
  92. package/dist/cli/theme.js.map +1 -0
  93. package/dist/cli.js +70 -356
  94. package/dist/cli.js.map +1 -1
  95. package/dist/commands/index.d.ts +6 -0
  96. package/dist/commands/index.d.ts.map +1 -0
  97. package/dist/commands/index.js +14 -0
  98. package/dist/commands/index.js.map +1 -0
  99. package/dist/commands/parseMemoryStatusArgs.d.ts +3 -0
  100. package/dist/commands/parseMemoryStatusArgs.d.ts.map +1 -0
  101. package/dist/commands/parseMemoryStatusArgs.js +15 -0
  102. package/dist/commands/parseMemoryStatusArgs.js.map +1 -0
  103. package/dist/commands/parseRememberArgs.d.ts +10 -0
  104. package/dist/commands/parseRememberArgs.d.ts.map +1 -0
  105. package/dist/commands/parseRememberArgs.js +46 -0
  106. package/dist/commands/parseRememberArgs.js.map +1 -0
  107. package/dist/commands/remember.d.ts +8 -0
  108. package/dist/commands/remember.d.ts.map +1 -0
  109. package/dist/commands/remember.js +30 -0
  110. package/dist/commands/remember.js.map +1 -0
  111. package/dist/commands/status.d.ts +10 -0
  112. package/dist/commands/status.d.ts.map +1 -0
  113. package/dist/commands/status.js +81 -0
  114. package/dist/commands/status.js.map +1 -0
  115. package/dist/commands/types.d.ts +10 -0
  116. package/dist/commands/types.d.ts.map +1 -0
  117. package/dist/commands/types.js +2 -0
  118. package/dist/{consolidation → commands}/types.js.map +1 -1
  119. package/dist/compact/index.d.ts +5 -0
  120. package/dist/compact/index.d.ts.map +1 -0
  121. package/dist/compact/index.js +5 -0
  122. package/dist/compact/index.js.map +1 -0
  123. package/dist/compact/parseMemoryExport.d.ts +6 -0
  124. package/dist/compact/parseMemoryExport.d.ts.map +1 -0
  125. package/dist/compact/parseMemoryExport.js +62 -0
  126. package/dist/compact/parseMemoryExport.js.map +1 -0
  127. package/dist/compact/register.d.ts +10 -0
  128. package/dist/compact/register.d.ts.map +1 -0
  129. package/dist/compact/register.js +47 -0
  130. package/dist/compact/register.js.map +1 -0
  131. package/dist/compact/runSummary.d.ts +6 -0
  132. package/dist/compact/runSummary.d.ts.map +1 -0
  133. package/dist/compact/runSummary.js +29 -0
  134. package/dist/compact/runSummary.js.map +1 -0
  135. package/dist/compact/subagentDelta.d.ts +6 -0
  136. package/dist/compact/subagentDelta.d.ts.map +1 -0
  137. package/dist/compact/subagentDelta.js +13 -0
  138. package/dist/compact/subagentDelta.js.map +1 -0
  139. package/dist/compact/summaryPrompt.d.ts +3 -0
  140. package/dist/compact/summaryPrompt.d.ts.map +1 -0
  141. package/dist/compact/summaryPrompt.js +41 -0
  142. package/dist/compact/summaryPrompt.js.map +1 -0
  143. package/dist/config/agentDir.d.ts +11 -0
  144. package/dist/config/agentDir.d.ts.map +1 -0
  145. package/dist/config/agentDir.js +21 -0
  146. package/dist/config/agentDir.js.map +1 -0
  147. package/dist/config/chunking.d.ts +7 -0
  148. package/dist/config/chunking.d.ts.map +1 -0
  149. package/dist/config/chunking.js +20 -0
  150. package/dist/config/chunking.js.map +1 -0
  151. package/dist/config/env.d.ts +28 -0
  152. package/dist/config/env.d.ts.map +1 -0
  153. package/dist/config/env.js +43 -0
  154. package/dist/config/env.js.map +1 -0
  155. package/dist/config/index.d.ts +8 -0
  156. package/dist/config/index.d.ts.map +1 -0
  157. package/dist/config/index.js +8 -0
  158. package/dist/config/index.js.map +1 -0
  159. package/dist/config/loadEnv.d.ts +10 -0
  160. package/dist/config/loadEnv.d.ts.map +1 -0
  161. package/dist/config/loadEnv.js +25 -0
  162. package/dist/config/loadEnv.js.map +1 -0
  163. package/dist/config/preflight.d.ts +8 -0
  164. package/dist/config/preflight.d.ts.map +1 -0
  165. package/dist/config/preflight.js +22 -0
  166. package/dist/config/preflight.js.map +1 -0
  167. package/dist/config/preflightBudget.d.ts +9 -0
  168. package/dist/config/preflightBudget.d.ts.map +1 -0
  169. package/dist/config/preflightBudget.js +16 -0
  170. package/dist/config/preflightBudget.js.map +1 -0
  171. package/dist/config/retrieval.d.ts +10 -0
  172. package/dist/config/retrieval.d.ts.map +1 -0
  173. package/dist/config/retrieval.js +31 -0
  174. package/dist/config/retrieval.js.map +1 -0
  175. package/dist/consolidate/entryKey.d.ts +6 -0
  176. package/dist/consolidate/entryKey.d.ts.map +1 -0
  177. package/dist/consolidate/entryKey.js +5 -0
  178. package/dist/consolidate/entryKey.js.map +1 -0
  179. package/dist/consolidate/index.d.ts +5 -0
  180. package/dist/consolidate/index.d.ts.map +1 -0
  181. package/dist/consolidate/index.js +5 -0
  182. package/dist/consolidate/index.js.map +1 -0
  183. package/dist/consolidate/mergeEntries.d.ts +4 -0
  184. package/dist/consolidate/mergeEntries.d.ts.map +1 -0
  185. package/dist/consolidate/mergeEntries.js +17 -0
  186. package/dist/consolidate/mergeEntries.js.map +1 -0
  187. package/dist/consolidate/mergePrompt.d.ts +4 -0
  188. package/dist/consolidate/mergePrompt.d.ts.map +1 -0
  189. package/dist/consolidate/mergePrompt.js +40 -0
  190. package/dist/consolidate/mergePrompt.js.map +1 -0
  191. package/dist/consolidate/mergeWithLlm.d.ts +4 -0
  192. package/dist/consolidate/mergeWithLlm.d.ts.map +1 -0
  193. package/dist/consolidate/mergeWithLlm.js +27 -0
  194. package/dist/consolidate/mergeWithLlm.js.map +1 -0
  195. package/dist/consolidate/runJob.d.ts +29 -0
  196. package/dist/consolidate/runJob.d.ts.map +1 -0
  197. package/dist/consolidate/runJob.js +48 -0
  198. package/dist/consolidate/runJob.js.map +1 -0
  199. package/dist/consolidate/scheduler.d.ts +18 -0
  200. package/dist/consolidate/scheduler.d.ts.map +1 -0
  201. package/dist/consolidate/scheduler.js +32 -0
  202. package/dist/consolidate/scheduler.js.map +1 -0
  203. package/dist/constants/chunking.d.ts +7 -0
  204. package/dist/constants/chunking.d.ts.map +1 -0
  205. package/dist/constants/chunking.js +7 -0
  206. package/dist/constants/chunking.js.map +1 -0
  207. package/dist/constants/env.d.ts +47 -0
  208. package/dist/constants/env.d.ts.map +1 -0
  209. package/dist/constants/env.js +52 -0
  210. package/dist/constants/env.js.map +1 -0
  211. package/dist/constants/index.d.ts +8 -0
  212. package/dist/constants/index.d.ts.map +1 -0
  213. package/dist/constants/index.js +8 -0
  214. package/dist/constants/index.js.map +1 -0
  215. package/dist/constants/memory.d.ts +17 -0
  216. package/dist/constants/memory.d.ts.map +1 -0
  217. package/dist/constants/memory.js +16 -0
  218. package/dist/constants/memory.js.map +1 -0
  219. package/dist/constants/paths.d.ts +23 -0
  220. package/dist/constants/paths.d.ts.map +1 -0
  221. package/dist/constants/paths.js +23 -0
  222. package/dist/constants/paths.js.map +1 -0
  223. package/dist/constants/preflight.d.ts +17 -0
  224. package/dist/constants/preflight.d.ts.map +1 -0
  225. package/dist/constants/preflight.js +17 -0
  226. package/dist/constants/preflight.js.map +1 -0
  227. package/dist/constants/retrieval.d.ts +10 -0
  228. package/dist/constants/retrieval.d.ts.map +1 -0
  229. package/dist/constants/retrieval.js +10 -0
  230. package/dist/constants/retrieval.js.map +1 -0
  231. package/dist/constants/security.d.ts +5 -0
  232. package/dist/constants/security.d.ts.map +1 -0
  233. package/dist/constants/security.js +5 -0
  234. package/dist/constants/security.js.map +1 -0
  235. package/dist/constants/timing.d.ts +38 -0
  236. package/dist/constants/timing.d.ts.map +1 -0
  237. package/dist/constants/timing.js +38 -0
  238. package/dist/constants/timing.js.map +1 -0
  239. package/dist/index.d.ts +11 -29
  240. package/dist/index.d.ts.map +1 -1
  241. package/dist/index.js +11 -28
  242. package/dist/index.js.map +1 -1
  243. package/dist/init/workspace.d.ts +15 -0
  244. package/dist/init/workspace.d.ts.map +1 -0
  245. package/dist/init/workspace.js +32 -0
  246. package/dist/init/workspace.js.map +1 -0
  247. package/dist/ipc/jsonlFramer.d.ts +9 -0
  248. package/dist/ipc/jsonlFramer.d.ts.map +1 -0
  249. package/dist/ipc/jsonlFramer.js +26 -0
  250. package/dist/ipc/jsonlFramer.js.map +1 -0
  251. package/dist/pi-extension.d.ts +0 -2
  252. package/dist/pi-extension.d.ts.map +1 -1
  253. package/dist/pi-extension.js +175 -515
  254. package/dist/pi-extension.js.map +1 -1
  255. package/dist/preflight/episodic.d.ts +26 -0
  256. package/dist/preflight/episodic.d.ts.map +1 -0
  257. package/dist/preflight/episodic.js +125 -0
  258. package/dist/preflight/episodic.js.map +1 -0
  259. package/dist/preflight/intentCache.d.ts +13 -0
  260. package/dist/preflight/intentCache.d.ts.map +1 -0
  261. package/dist/preflight/intentCache.js +37 -0
  262. package/dist/preflight/intentCache.js.map +1 -0
  263. package/dist/preflight/queryCache.d.ts +15 -0
  264. package/dist/preflight/queryCache.d.ts.map +1 -0
  265. package/dist/preflight/queryCache.js +46 -0
  266. package/dist/preflight/queryCache.js.map +1 -0
  267. package/dist/preflight/queryIntent.d.ts +29 -0
  268. package/dist/preflight/queryIntent.d.ts.map +1 -0
  269. package/dist/preflight/queryIntent.js +91 -0
  270. package/dist/preflight/queryIntent.js.map +1 -0
  271. package/dist/preflight/render.d.ts +8 -33
  272. package/dist/preflight/render.d.ts.map +1 -1
  273. package/dist/preflight/render.js +29 -126
  274. package/dist/preflight/render.js.map +1 -1
  275. package/dist/preflight/session.d.ts +3 -0
  276. package/dist/preflight/session.d.ts.map +1 -0
  277. package/dist/preflight/session.js +6 -0
  278. package/dist/preflight/session.js.map +1 -0
  279. package/dist/preflight/strip.d.ts +0 -8
  280. package/dist/preflight/strip.d.ts.map +1 -1
  281. package/dist/preflight/strip.js +2 -11
  282. package/dist/preflight/strip.js.map +1 -1
  283. package/dist/shutdown/enqueue.d.ts +12 -0
  284. package/dist/shutdown/enqueue.d.ts.map +1 -0
  285. package/dist/shutdown/enqueue.js +14 -0
  286. package/dist/shutdown/enqueue.js.map +1 -0
  287. package/dist/shutdown/extractPrompt.d.ts +4 -0
  288. package/dist/shutdown/extractPrompt.d.ts.map +1 -0
  289. package/dist/shutdown/extractPrompt.js +29 -0
  290. package/dist/shutdown/extractPrompt.js.map +1 -0
  291. package/dist/shutdown/processed.d.ts +9 -0
  292. package/dist/shutdown/processed.d.ts.map +1 -0
  293. package/dist/shutdown/processed.js +28 -0
  294. package/dist/shutdown/processed.js.map +1 -0
  295. package/dist/shutdown/readQueue.d.ts +4 -0
  296. package/dist/shutdown/readQueue.d.ts.map +1 -0
  297. package/dist/shutdown/readQueue.js +26 -0
  298. package/dist/shutdown/readQueue.js.map +1 -0
  299. package/dist/shutdown/runDrainJob.d.ts +26 -0
  300. package/dist/shutdown/runDrainJob.d.ts.map +1 -0
  301. package/dist/shutdown/runDrainJob.js +143 -0
  302. package/dist/shutdown/runDrainJob.js.map +1 -0
  303. package/dist/shutdown/sessionReader.d.ts +6 -0
  304. package/dist/shutdown/sessionReader.d.ts.map +1 -0
  305. package/dist/shutdown/sessionReader.js +44 -0
  306. package/dist/shutdown/sessionReader.js.map +1 -0
  307. package/dist/sidecar/client.d.ts +17 -16
  308. package/dist/sidecar/client.d.ts.map +1 -1
  309. package/dist/sidecar/client.js +64 -100
  310. package/dist/sidecar/client.js.map +1 -1
  311. package/dist/sidecar/paths.d.ts +8 -0
  312. package/dist/sidecar/paths.d.ts.map +1 -0
  313. package/dist/sidecar/paths.js +23 -0
  314. package/dist/sidecar/paths.js.map +1 -0
  315. package/dist/sidecar/protocol.d.ts +54 -0
  316. package/dist/sidecar/protocol.d.ts.map +1 -0
  317. package/dist/sidecar/protocol.js +4 -0
  318. package/dist/sidecar/protocol.js.map +1 -0
  319. package/dist/sidecar/reindexBridge.d.ts +13 -0
  320. package/dist/sidecar/reindexBridge.d.ts.map +1 -0
  321. package/dist/sidecar/reindexBridge.js +37 -0
  322. package/dist/sidecar/reindexBridge.js.map +1 -0
  323. package/dist/sidecar/server/process.d.ts +2 -0
  324. package/dist/sidecar/server/process.d.ts.map +1 -0
  325. package/dist/sidecar/server/process.js +22 -0
  326. package/dist/sidecar/server/process.js.map +1 -0
  327. package/dist/sidecar/server/query.d.ts +8 -0
  328. package/dist/sidecar/server/query.d.ts.map +1 -0
  329. package/dist/sidecar/server/query.js +7 -0
  330. package/dist/sidecar/server/query.js.map +1 -0
  331. package/dist/sidecar/server/reindex.d.ts +8 -0
  332. package/dist/sidecar/server/reindex.d.ts.map +1 -0
  333. package/dist/sidecar/server/reindex.js +12 -0
  334. package/dist/sidecar/server/reindex.js.map +1 -0
  335. package/dist/sidecar/server/server.d.ts +11 -0
  336. package/dist/sidecar/server/server.d.ts.map +1 -0
  337. package/dist/sidecar/server/server.js +76 -0
  338. package/dist/sidecar/server/server.js.map +1 -0
  339. package/dist/sidecar/server/stats.d.ts +8 -0
  340. package/dist/sidecar/server/stats.d.ts.map +1 -0
  341. package/dist/sidecar/server/stats.js +18 -0
  342. package/dist/sidecar/server/stats.js.map +1 -0
  343. package/dist/sidecar/server/vec/embedder.d.ts +2 -0
  344. package/dist/sidecar/server/vec/embedder.d.ts.map +1 -0
  345. package/dist/sidecar/server/vec/embedder.js +2 -0
  346. package/dist/sidecar/server/vec/embedder.js.map +1 -0
  347. package/dist/sidecar/server/vec/mmr.d.ts +13 -0
  348. package/dist/sidecar/server/vec/mmr.d.ts.map +1 -0
  349. package/dist/sidecar/server/vec/mmr.js +36 -0
  350. package/dist/sidecar/server/vec/mmr.js.map +1 -0
  351. package/dist/sidecar/server/vec/store.d.ts +30 -0
  352. package/dist/sidecar/server/vec/store.d.ts.map +1 -0
  353. package/dist/sidecar/server/vec/store.js +179 -0
  354. package/dist/sidecar/server/vec/store.js.map +1 -0
  355. package/dist/sidecar/sidecarManager.d.ts +10 -0
  356. package/dist/sidecar/sidecarManager.d.ts.map +1 -0
  357. package/dist/sidecar/sidecarManager.js +111 -0
  358. package/dist/sidecar/sidecarManager.js.map +1 -0
  359. package/dist/sidecar/utils.d.ts +3 -0
  360. package/dist/sidecar/utils.d.ts.map +1 -0
  361. package/dist/sidecar/utils.js +27 -0
  362. package/dist/sidecar/utils.js.map +1 -0
  363. package/dist/sidecar/warmup.d.ts +6 -0
  364. package/dist/sidecar/warmup.d.ts.map +1 -0
  365. package/dist/sidecar/warmup.js +39 -0
  366. package/dist/sidecar/warmup.js.map +1 -0
  367. package/dist/store/backend.d.ts +12 -0
  368. package/dist/store/backend.d.ts.map +1 -0
  369. package/dist/store/backend.js +47 -0
  370. package/dist/store/backend.js.map +1 -0
  371. package/dist/store/index.d.ts +6 -0
  372. package/dist/store/index.d.ts.map +1 -0
  373. package/dist/store/index.js +6 -0
  374. package/dist/store/index.js.map +1 -0
  375. package/dist/store/indexChunks.d.ts +9 -0
  376. package/dist/store/indexChunks.d.ts.map +1 -0
  377. package/dist/store/indexChunks.js +78 -0
  378. package/dist/store/indexChunks.js.map +1 -0
  379. package/dist/store/markdown/format.d.ts +5 -0
  380. package/dist/store/markdown/format.d.ts.map +1 -0
  381. package/dist/store/markdown/format.js +14 -0
  382. package/dist/store/markdown/format.js.map +1 -0
  383. package/dist/store/markdown/parse.d.ts +5 -0
  384. package/dist/store/markdown/parse.d.ts.map +1 -0
  385. package/dist/store/markdown/parse.js +57 -0
  386. package/dist/store/markdown/parse.js.map +1 -0
  387. package/dist/store/markdown/template.d.ts +3 -0
  388. package/dist/store/markdown/template.d.ts.map +1 -0
  389. package/dist/store/markdown/template.js +22 -0
  390. package/dist/store/markdown/template.js.map +1 -0
  391. package/dist/store/memoryStore.d.ts +69 -0
  392. package/dist/store/memoryStore.d.ts.map +1 -0
  393. package/dist/store/memoryStore.js +421 -0
  394. package/dist/store/memoryStore.js.map +1 -0
  395. package/dist/store/paths.d.ts +10 -0
  396. package/dist/store/paths.d.ts.map +1 -0
  397. package/dist/store/paths.js +19 -0
  398. package/dist/store/paths.js.map +1 -0
  399. package/dist/store/types.d.ts +38 -0
  400. package/dist/store/types.d.ts.map +1 -0
  401. package/dist/store/types.js +3 -0
  402. package/dist/store/types.js.map +1 -0
  403. package/dist/ui/memoryStatusWidget.d.ts +20 -0
  404. package/dist/ui/memoryStatusWidget.d.ts.map +1 -0
  405. package/dist/ui/memoryStatusWidget.js +51 -0
  406. package/dist/ui/memoryStatusWidget.js.map +1 -0
  407. package/dist/utils/debugLog.d.ts +4 -0
  408. package/dist/utils/debugLog.d.ts.map +1 -0
  409. package/dist/utils/debugLog.js +14 -0
  410. package/dist/utils/debugLog.js.map +1 -0
  411. package/dist/utils/fs.d.ts +26 -0
  412. package/dist/utils/fs.d.ts.map +1 -0
  413. package/dist/utils/fs.js +101 -0
  414. package/dist/utils/fs.js.map +1 -0
  415. package/dist/utils/index.d.ts +8 -0
  416. package/dist/utils/index.d.ts.map +1 -0
  417. package/dist/utils/index.js +8 -0
  418. package/dist/utils/index.js.map +1 -0
  419. package/dist/utils/paths.d.ts +22 -0
  420. package/dist/utils/paths.d.ts.map +1 -0
  421. package/dist/utils/paths.js +51 -0
  422. package/dist/utils/paths.js.map +1 -0
  423. package/dist/utils/platform.d.ts +7 -0
  424. package/dist/utils/platform.d.ts.map +1 -0
  425. package/dist/utils/platform.js +18 -0
  426. package/dist/utils/platform.js.map +1 -0
  427. package/dist/utils/scheduler.d.ts +33 -0
  428. package/dist/utils/scheduler.d.ts.map +1 -0
  429. package/dist/utils/scheduler.js +63 -0
  430. package/dist/utils/scheduler.js.map +1 -0
  431. package/dist/utils/socket.d.ts +7 -0
  432. package/dist/utils/socket.d.ts.map +1 -0
  433. package/dist/utils/socket.js +35 -0
  434. package/dist/utils/socket.js.map +1 -0
  435. package/dist/utils/time.d.ts +22 -0
  436. package/dist/utils/time.d.ts.map +1 -0
  437. package/dist/utils/time.js +42 -0
  438. package/dist/utils/time.js.map +1 -0
  439. package/doc/README-zh.md +365 -0
  440. package/doc/ROADMAP-zh.md +52 -0
  441. package/doc/ROADMAP.md +52 -0
  442. package/package.json +31 -10
  443. package/scripts/init-memory-workspace.mjs +62 -0
  444. package/scripts/path-utils.mjs +12 -0
  445. package/scripts/platform-fs.mjs +65 -0
  446. package/scripts/postinstall.mjs +17 -0
  447. package/src/adapters/embed/factory.ts +50 -0
  448. package/src/adapters/embed/hash.ts +29 -0
  449. package/src/adapters/embed/normalize.ts +13 -0
  450. package/src/adapters/embed/ollama.ts +49 -0
  451. package/src/adapters/embed/openai.ts +46 -0
  452. package/src/adapters/embed/types.ts +9 -0
  453. package/src/adapters/http.ts +42 -0
  454. package/src/adapters/index.ts +16 -0
  455. package/src/adapters/llm/extractText.ts +6 -0
  456. package/src/adapters/llm/factory.ts +60 -0
  457. package/src/adapters/llm/index.ts +7 -0
  458. package/src/adapters/llm/modelSpec.ts +39 -0
  459. package/src/adapters/llm/ollama.ts +42 -0
  460. package/src/adapters/llm/openai-compat.ts +46 -0
  461. package/src/adapters/llm/pi-ai.ts +75 -0
  462. package/src/adapters/llm/standalone.ts +60 -0
  463. package/src/adapters/llm/types.ts +16 -0
  464. package/src/cli/init.ts +18 -0
  465. package/src/cli/jobs.ts +144 -0
  466. package/src/cli/log.ts +46 -0
  467. package/src/cli/parseArgs.ts +175 -0
  468. package/src/cli/status.ts +323 -0
  469. package/src/cli/theme.ts +26 -0
  470. package/src/cli.ts +80 -374
  471. package/src/commands/index.ts +20 -0
  472. package/src/commands/parseMemoryStatusArgs.ts +11 -0
  473. package/src/commands/parseRememberArgs.ts +55 -0
  474. package/src/commands/remember.ts +43 -0
  475. package/src/commands/status.ts +112 -0
  476. package/src/commands/types.ts +12 -0
  477. package/src/compact/index.ts +4 -0
  478. package/src/compact/parseMemoryExport.ts +71 -0
  479. package/src/compact/register.ts +57 -0
  480. package/src/compact/runSummary.ts +42 -0
  481. package/src/compact/subagentDelta.ts +22 -0
  482. package/src/compact/summaryPrompt.ts +45 -0
  483. package/src/config/agentDir.ts +24 -0
  484. package/src/config/chunking.ts +36 -0
  485. package/src/config/env.ts +97 -0
  486. package/src/config/index.ts +7 -0
  487. package/src/config/loadEnv.ts +26 -0
  488. package/src/config/preflight.ts +34 -0
  489. package/src/config/preflightBudget.ts +33 -0
  490. package/src/config/retrieval.ts +50 -0
  491. package/src/consolidate/entryKey.ts +4 -0
  492. package/src/consolidate/index.ts +4 -0
  493. package/src/consolidate/mergeEntries.ts +22 -0
  494. package/src/consolidate/mergePrompt.ts +46 -0
  495. package/src/consolidate/mergeWithLlm.ts +39 -0
  496. package/src/consolidate/runJob.ts +81 -0
  497. package/src/consolidate/scheduler.ts +54 -0
  498. package/src/constants/chunking.ts +8 -0
  499. package/src/constants/env.ts +59 -0
  500. package/src/constants/index.ts +7 -0
  501. package/src/constants/memory.ts +22 -0
  502. package/src/constants/paths.ts +26 -0
  503. package/src/constants/preflight.ts +22 -0
  504. package/src/constants/retrieval.ts +10 -0
  505. package/src/constants/security.ts +5 -0
  506. package/src/constants/timing.ts +48 -0
  507. package/src/index.ts +11 -247
  508. package/src/init/workspace.ts +44 -0
  509. package/src/ipc/jsonlFramer.ts +29 -0
  510. package/src/pi-extension.ts +196 -605
  511. package/src/preflight/episodic.ts +183 -0
  512. package/src/preflight/intentCache.ts +44 -0
  513. package/src/preflight/queryCache.ts +59 -0
  514. package/src/preflight/queryIntent.ts +126 -0
  515. package/src/preflight/render.ts +34 -180
  516. package/src/preflight/session.ts +7 -0
  517. package/src/preflight/strip.ts +4 -11
  518. package/src/shutdown/enqueue.ts +29 -0
  519. package/src/shutdown/extractPrompt.ts +27 -0
  520. package/src/shutdown/processed.ts +45 -0
  521. package/src/shutdown/readQueue.ts +26 -0
  522. package/src/shutdown/runDrainJob.ts +202 -0
  523. package/src/shutdown/sessionReader.ts +61 -0
  524. package/src/sidecar/client.ts +98 -150
  525. package/src/sidecar/paths.ts +31 -0
  526. package/src/sidecar/protocol.ts +38 -0
  527. package/src/sidecar/reindexBridge.ts +52 -0
  528. package/src/sidecar/server/process.ts +27 -0
  529. package/src/sidecar/server/query.ts +16 -0
  530. package/src/sidecar/server/reindex.ts +21 -0
  531. package/src/sidecar/server/server.ts +105 -0
  532. package/src/sidecar/server/stats.ts +23 -0
  533. package/src/sidecar/server/vec/embedder.ts +1 -0
  534. package/src/sidecar/server/vec/mmr.ts +55 -0
  535. package/src/sidecar/server/vec/store.ts +232 -0
  536. package/src/sidecar/sidecarManager.ts +134 -0
  537. package/src/sidecar/utils.ts +28 -0
  538. package/src/sidecar/warmup.ts +50 -0
  539. package/src/store/backend.ts +66 -0
  540. package/src/store/index.ts +5 -0
  541. package/src/store/indexChunks.ts +89 -0
  542. package/src/store/markdown/format.ts +16 -0
  543. package/src/store/markdown/parse.ts +63 -0
  544. package/src/store/markdown/template.ts +24 -0
  545. package/src/store/memoryStore.ts +518 -0
  546. package/src/store/paths.ts +33 -0
  547. package/src/store/proper-lockfile.d.ts +3 -0
  548. package/src/store/types.ts +46 -0
  549. package/src/ui/memoryStatusWidget.ts +80 -0
  550. package/src/utils/debugLog.ts +22 -0
  551. package/src/utils/fs.ts +115 -0
  552. package/src/utils/index.ts +68 -0
  553. package/src/utils/paths.ts +67 -0
  554. package/src/utils/platform.ts +20 -0
  555. package/src/utils/scheduler.ts +98 -0
  556. package/src/utils/socket.ts +33 -0
  557. package/src/utils/time.ts +51 -0
  558. package/templates/MEMORY.md.example +22 -0
  559. package/dist/adapters/ollamaClient.d.ts +0 -11
  560. package/dist/adapters/ollamaClient.d.ts.map +0 -1
  561. package/dist/adapters/ollamaClient.js +0 -122
  562. package/dist/adapters/ollamaClient.js.map +0 -1
  563. package/dist/adapters/openaiCompatClient.d.ts +0 -11
  564. package/dist/adapters/openaiCompatClient.d.ts.map +0 -1
  565. package/dist/adapters/openaiCompatClient.js +0 -118
  566. package/dist/adapters/openaiCompatClient.js.map +0 -1
  567. package/dist/adapters/piComplete.d.ts +0 -17
  568. package/dist/adapters/piComplete.d.ts.map +0 -1
  569. package/dist/adapters/piComplete.js +0 -169
  570. package/dist/adapters/piComplete.js.map +0 -1
  571. package/dist/bundle/install.d.ts +0 -34
  572. package/dist/bundle/install.d.ts.map +0 -1
  573. package/dist/bundle/install.js +0 -183
  574. package/dist/bundle/install.js.map +0 -1
  575. package/dist/cache/memoryCaches.d.ts +0 -32
  576. package/dist/cache/memoryCaches.d.ts.map +0 -1
  577. package/dist/cache/memoryCaches.js +0 -59
  578. package/dist/cache/memoryCaches.js.map +0 -1
  579. package/dist/config.d.ts +0 -55
  580. package/dist/config.d.ts.map +0 -1
  581. package/dist/config.js +0 -85
  582. package/dist/config.js.map +0 -1
  583. package/dist/consolidation/enqueue.d.ts +0 -33
  584. package/dist/consolidation/enqueue.d.ts.map +0 -1
  585. package/dist/consolidation/enqueue.js +0 -145
  586. package/dist/consolidation/enqueue.js.map +0 -1
  587. package/dist/consolidation/index.d.ts +0 -19
  588. package/dist/consolidation/index.d.ts.map +0 -1
  589. package/dist/consolidation/index.js +0 -15
  590. package/dist/consolidation/index.js.map +0 -1
  591. package/dist/consolidation/lock.d.ts +0 -5
  592. package/dist/consolidation/lock.d.ts.map +0 -1
  593. package/dist/consolidation/lock.js +0 -33
  594. package/dist/consolidation/lock.js.map +0 -1
  595. package/dist/consolidation/log.d.ts +0 -8
  596. package/dist/consolidation/log.d.ts.map +0 -1
  597. package/dist/consolidation/log.js +0 -32
  598. package/dist/consolidation/log.js.map +0 -1
  599. package/dist/consolidation/memoryIndex.d.ts +0 -18
  600. package/dist/consolidation/memoryIndex.d.ts.map +0 -1
  601. package/dist/consolidation/memoryIndex.js +0 -100
  602. package/dist/consolidation/memoryIndex.js.map +0 -1
  603. package/dist/consolidation/phase2/runPhase2.d.ts +0 -23
  604. package/dist/consolidation/phase2/runPhase2.d.ts.map +0 -1
  605. package/dist/consolidation/phase2/runPhase2.js +0 -196
  606. package/dist/consolidation/phase2/runPhase2.js.map +0 -1
  607. package/dist/consolidation/scheduler/launchd.d.ts +0 -5
  608. package/dist/consolidation/scheduler/launchd.d.ts.map +0 -1
  609. package/dist/consolidation/scheduler/launchd.js +0 -54
  610. package/dist/consolidation/scheduler/launchd.js.map +0 -1
  611. package/dist/consolidation/scheduler/runConsolidate.d.ts +0 -26
  612. package/dist/consolidation/scheduler/runConsolidate.d.ts.map +0 -1
  613. package/dist/consolidation/scheduler/runConsolidate.js +0 -83
  614. package/dist/consolidation/scheduler/runConsolidate.js.map +0 -1
  615. package/dist/consolidation/scheduler/setupSchedule.d.ts +0 -3
  616. package/dist/consolidation/scheduler/setupSchedule.d.ts.map +0 -1
  617. package/dist/consolidation/scheduler/setupSchedule.js +0 -79
  618. package/dist/consolidation/scheduler/setupSchedule.js.map +0 -1
  619. package/dist/consolidation/scheduler/systemd.d.ts +0 -9
  620. package/dist/consolidation/scheduler/systemd.d.ts.map +0 -1
  621. package/dist/consolidation/scheduler/systemd.js +0 -57
  622. package/dist/consolidation/scheduler/systemd.js.map +0 -1
  623. package/dist/consolidation/scheduler/types.d.ts +0 -24
  624. package/dist/consolidation/scheduler/types.d.ts.map +0 -1
  625. package/dist/consolidation/scheduler/types.js.map +0 -1
  626. package/dist/consolidation/scope.d.ts +0 -12
  627. package/dist/consolidation/scope.d.ts.map +0 -1
  628. package/dist/consolidation/scope.js +0 -51
  629. package/dist/consolidation/scope.js.map +0 -1
  630. package/dist/consolidation/stage1/deltaExtract.d.ts +0 -3
  631. package/dist/consolidation/stage1/deltaExtract.d.ts.map +0 -1
  632. package/dist/consolidation/stage1/deltaExtract.js +0 -19
  633. package/dist/consolidation/stage1/deltaExtract.js.map +0 -1
  634. package/dist/consolidation/stage1/drainQueue.d.ts +0 -21
  635. package/dist/consolidation/stage1/drainQueue.d.ts.map +0 -1
  636. package/dist/consolidation/stage1/drainQueue.js +0 -113
  637. package/dist/consolidation/stage1/drainQueue.js.map +0 -1
  638. package/dist/consolidation/stage1/extractSession.d.ts +0 -6
  639. package/dist/consolidation/stage1/extractSession.d.ts.map +0 -1
  640. package/dist/consolidation/stage1/extractSession.js +0 -47
  641. package/dist/consolidation/stage1/extractSession.js.map +0 -1
  642. package/dist/consolidation/stage1/store.d.ts +0 -45
  643. package/dist/consolidation/stage1/store.d.ts.map +0 -1
  644. package/dist/consolidation/stage1/store.js +0 -297
  645. package/dist/consolidation/stage1/store.js.map +0 -1
  646. package/dist/consolidation/types.d.ts +0 -49
  647. package/dist/consolidation/types.d.ts.map +0 -1
  648. package/dist/errclass.d.ts +0 -7
  649. package/dist/errclass.d.ts.map +0 -1
  650. package/dist/errclass.js +0 -32
  651. package/dist/errclass.js.map +0 -1
  652. package/dist/extension.d.ts +0 -24
  653. package/dist/extension.d.ts.map +0 -1
  654. package/dist/extension.js +0 -7
  655. package/dist/extension.js.map +0 -1
  656. package/dist/fallback/index.d.ts +0 -11
  657. package/dist/fallback/index.d.ts.map +0 -1
  658. package/dist/fallback/index.js +0 -16
  659. package/dist/fallback/index.js.map +0 -1
  660. package/dist/fallback/llmRerank.d.ts +0 -19
  661. package/dist/fallback/llmRerank.d.ts.map +0 -1
  662. package/dist/fallback/llmRerank.js +0 -68
  663. package/dist/fallback/llmRerank.js.map +0 -1
  664. package/dist/fallback/memoryMd.d.ts +0 -6
  665. package/dist/fallback/memoryMd.d.ts.map +0 -1
  666. package/dist/fallback/memoryMd.js +0 -35
  667. package/dist/fallback/memoryMd.js.map +0 -1
  668. package/dist/fallback/sessionIndex.d.ts +0 -35
  669. package/dist/fallback/sessionIndex.d.ts.map +0 -1
  670. package/dist/fallback/sessionIndex.js +0 -239
  671. package/dist/fallback/sessionIndex.js.map +0 -1
  672. package/dist/fallback/sessionSearch.d.ts +0 -18
  673. package/dist/fallback/sessionSearch.d.ts.map +0 -1
  674. package/dist/fallback/sessionSearch.js +0 -234
  675. package/dist/fallback/sessionSearch.js.map +0 -1
  676. package/dist/local/graphQuery.d.ts +0 -31
  677. package/dist/local/graphQuery.d.ts.map +0 -1
  678. package/dist/local/graphQuery.js +0 -195
  679. package/dist/local/graphQuery.js.map +0 -1
  680. package/dist/paths.d.ts +0 -7
  681. package/dist/paths.d.ts.map +0 -1
  682. package/dist/paths.js +0 -26
  683. package/dist/paths.js.map +0 -1
  684. package/dist/preflight/detectIntents.d.ts +0 -102
  685. package/dist/preflight/detectIntents.d.ts.map +0 -1
  686. package/dist/preflight/detectIntents.js +0 -631
  687. package/dist/preflight/detectIntents.js.map +0 -1
  688. package/dist/preflight/hook.d.ts +0 -76
  689. package/dist/preflight/hook.d.ts.map +0 -1
  690. package/dist/preflight/hook.js +0 -122
  691. package/dist/preflight/hook.js.map +0 -1
  692. package/dist/service.d.ts +0 -72
  693. package/dist/service.d.ts.map +0 -1
  694. package/dist/service.js +0 -257
  695. package/dist/service.js.map +0 -1
  696. package/dist/session/activeBranch.d.ts +0 -17
  697. package/dist/session/activeBranch.d.ts.map +0 -1
  698. package/dist/session/activeBranch.js +0 -251
  699. package/dist/session/activeBranch.js.map +0 -1
  700. package/dist/settings.d.ts +0 -41
  701. package/dist/settings.d.ts.map +0 -1
  702. package/dist/settings.js +0 -85
  703. package/dist/settings.js.map +0 -1
  704. package/dist/sidecar/bundle.d.ts +0 -19
  705. package/dist/sidecar/bundle.d.ts.map +0 -1
  706. package/dist/sidecar/bundle.js +0 -39
  707. package/dist/sidecar/bundle.js.map +0 -1
  708. package/dist/sidecar/process.d.ts +0 -14
  709. package/dist/sidecar/process.d.ts.map +0 -1
  710. package/dist/sidecar/process.js +0 -138
  711. package/dist/sidecar/process.js.map +0 -1
  712. package/dist/tools/memoryAppend.d.ts +0 -47
  713. package/dist/tools/memoryAppend.d.ts.map +0 -1
  714. package/dist/tools/memoryAppend.js +0 -138
  715. package/dist/tools/memoryAppend.js.map +0 -1
  716. package/dist/tools/memoryRecall.d.ts +0 -113
  717. package/dist/tools/memoryRecall.d.ts.map +0 -1
  718. package/dist/tools/memoryRecall.js +0 -351
  719. package/dist/tools/memoryRecall.js.map +0 -1
  720. package/dist/trainer/bundleBuilder.d.ts +0 -30
  721. package/dist/trainer/bundleBuilder.d.ts.map +0 -1
  722. package/dist/trainer/bundleBuilder.js +0 -106
  723. package/dist/trainer/bundleBuilder.js.map +0 -1
  724. package/dist/trainer/bundleLoader.d.ts +0 -12
  725. package/dist/trainer/bundleLoader.d.ts.map +0 -1
  726. package/dist/trainer/bundleLoader.js +0 -59
  727. package/dist/trainer/bundleLoader.js.map +0 -1
  728. package/dist/trainer/deltaMerge.d.ts +0 -38
  729. package/dist/trainer/deltaMerge.d.ts.map +0 -1
  730. package/dist/trainer/deltaMerge.js +0 -183
  731. package/dist/trainer/deltaMerge.js.map +0 -1
  732. package/dist/trainer/entityResolver.d.ts +0 -27
  733. package/dist/trainer/entityResolver.d.ts.map +0 -1
  734. package/dist/trainer/entityResolver.js +0 -92
  735. package/dist/trainer/entityResolver.js.map +0 -1
  736. package/dist/trainer/extractFacts.d.ts +0 -67
  737. package/dist/trainer/extractFacts.d.ts.map +0 -1
  738. package/dist/trainer/extractFacts.js +0 -213
  739. package/dist/trainer/extractFacts.js.map +0 -1
  740. package/dist/trainer/index.d.ts +0 -54
  741. package/dist/trainer/index.d.ts.map +0 -1
  742. package/dist/trainer/index.js +0 -82
  743. package/dist/trainer/index.js.map +0 -1
  744. package/dist/trainer/llmExtractor.d.ts +0 -16
  745. package/dist/trainer/llmExtractor.d.ts.map +0 -1
  746. package/dist/trainer/llmExtractor.js +0 -146
  747. package/dist/trainer/llmExtractor.js.map +0 -1
  748. package/dist/trainer/marker.d.ts +0 -10
  749. package/dist/trainer/marker.d.ts.map +0 -1
  750. package/dist/trainer/marker.js +0 -28
  751. package/dist/trainer/marker.js.map +0 -1
  752. package/dist/trainer/scheduler.d.ts +0 -33
  753. package/dist/trainer/scheduler.d.ts.map +0 -1
  754. package/dist/trainer/scheduler.js +0 -73
  755. package/dist/trainer/scheduler.js.map +0 -1
  756. package/dist/trainer/sessionLoader.d.ts +0 -26
  757. package/dist/trainer/sessionLoader.d.ts.map +0 -1
  758. package/dist/trainer/sessionLoader.js +0 -145
  759. package/dist/trainer/sessionLoader.js.map +0 -1
  760. package/dist/types.d.ts +0 -135
  761. package/dist/types.d.ts.map +0 -1
  762. package/dist/types.js +0 -8
  763. package/dist/types.js.map +0 -1
  764. package/src/adapters/ollamaClient.ts +0 -179
  765. package/src/adapters/openaiCompatClient.ts +0 -155
  766. package/src/adapters/piComplete.ts +0 -233
  767. package/src/bundle/install.ts +0 -206
  768. package/src/cache/memoryCaches.ts +0 -72
  769. package/src/config.ts +0 -180
  770. package/src/consolidation/enqueue.ts +0 -205
  771. package/src/consolidation/index.ts +0 -90
  772. package/src/consolidation/lock.ts +0 -41
  773. package/src/consolidation/log.ts +0 -43
  774. package/src/consolidation/memoryIndex.ts +0 -127
  775. package/src/consolidation/phase2/runPhase2.ts +0 -255
  776. package/src/consolidation/scheduler/launchd.ts +0 -62
  777. package/src/consolidation/scheduler/runConsolidate.ts +0 -115
  778. package/src/consolidation/scheduler/setupSchedule.ts +0 -106
  779. package/src/consolidation/scheduler/systemd.ts +0 -78
  780. package/src/consolidation/scheduler/types.ts +0 -27
  781. package/src/consolidation/scope.ts +0 -58
  782. package/src/consolidation/stage1/deltaExtract.ts +0 -29
  783. package/src/consolidation/stage1/drainQueue.ts +0 -143
  784. package/src/consolidation/stage1/extractSession.ts +0 -58
  785. package/src/consolidation/stage1/store.ts +0 -411
  786. package/src/consolidation/types.ts +0 -52
  787. package/src/errclass.ts +0 -37
  788. package/src/extension.ts +0 -23
  789. package/src/fallback/index.ts +0 -24
  790. package/src/fallback/llmRerank.ts +0 -97
  791. package/src/fallback/memoryMd.ts +0 -36
  792. package/src/fallback/sessionIndex.ts +0 -290
  793. package/src/fallback/sessionSearch.ts +0 -261
  794. package/src/local/graphQuery.ts +0 -252
  795. package/src/paths.ts +0 -28
  796. package/src/preflight/detectIntents.ts +0 -660
  797. package/src/preflight/hook.ts +0 -213
  798. package/src/service.ts +0 -306
  799. package/src/session/activeBranch.ts +0 -294
  800. package/src/settings.ts +0 -161
  801. package/src/sidecar/bundle.ts +0 -52
  802. package/src/sidecar/process.ts +0 -160
  803. package/src/tools/memoryAppend.ts +0 -166
  804. package/src/tools/memoryRecall.ts +0 -388
  805. package/src/trainer/bundleBuilder.ts +0 -192
  806. package/src/trainer/bundleLoader.ts +0 -105
  807. package/src/trainer/deltaMerge.ts +0 -221
  808. package/src/trainer/entityResolver.ts +0 -140
  809. package/src/trainer/extractFacts.ts +0 -312
  810. package/src/trainer/index.ts +0 -147
  811. package/src/trainer/llmExtractor.ts +0 -206
  812. package/src/trainer/marker.ts +0 -30
  813. package/src/trainer/scheduler.ts +0 -107
  814. package/src/trainer/sessionLoader.ts +0 -176
  815. package/src/types.ts +0 -168
  816. /package/dist/{consolidation/scheduler → adapters/embed}/types.js +0 -0
  817. /package/dist/{consolidation → adapters/llm}/types.js +0 -0
@@ -1,331 +1,173 @@
1
- import { StringEnum } from "@earendil-works/pi-ai";
2
- import { truncateHead } from "@earendil-works/pi-coding-agent";
3
- import { Type } from "typebox";
4
- import { createOllamaLLMClient, createOllamaMemoryHelper, ollamaHealthCheck, } from "./adapters/ollamaClient.js";
5
- import { createOpenAICompatLLMClient, createOpenAICompatMemoryHelper, openaiCompatHealthCheck, } from "./adapters/openaiCompatClient.js";
6
- import { createPiLLMClient, DEFAULT_HELPER_MODEL, DEFAULT_HELPER_PROVIDER, resolveMemoryHelperLLM, } from "./adapters/piComplete.js";
7
- import { getMemoryIndexStats, readMemoryIndexCap, } from "./consolidation/memoryIndex.js";
8
- import { readRecentConsolidationLogs } from "./consolidation/log.js";
9
- import { scopeForCwd } from "./consolidation/scope.js";
10
- import { enqueueSession, getConsolidationStatus } from "./consolidation/enqueue.js";
11
- import { defaultConsolidationDbPath } from "./consolidation/scheduler/runConsolidate.js";
12
- import { setupSchedule } from "./consolidation/scheduler/setupSchedule.js";
13
- import { loadMemorySettings, resolveHelperModelSpec, saveMemorySettings, } from "./settings.js";
14
- import { createFallbackQuery } from "./fallback/index.js";
15
- import { runMemoryPreflight } from "./preflight/hook.js";
1
+ import findLastIndex from "lodash/findLastIndex.js";
2
+ import { createLlmClient } from "./adapters/llm/index.js";
3
+ import { loadEnv, readPiMemoryEnv, resolveMemoryAgentDir } from "./config/index.js";
4
+ import { readPreflightRuntimeConfig } from "./config/preflight.js";
5
+ import { createConsolidateScheduler, startConsolidateInterval } from "./consolidate/scheduler.js";
6
+ import { registerCommands } from "./commands/index.js";
7
+ import { registerCompactHandlers } from "./compact/register.js";
8
+ import { runEpisodicPreflight } from "./preflight/episodic.js";
9
+ import { queryIntentCache } from "./preflight/intentCache.js";
10
+ import { mergePrivateMemoryBlocks, renderMemoryCapPrivateMemory } from "./preflight/render.js";
11
+ import { isSubagentSession } from "./preflight/session.js";
16
12
  import { injectPrivateMemoryContext } from "./preflight/strip.js";
17
- import { MemoryService } from "./service.js";
18
- import { createMemoryAppendTool, MEMORY_APPEND_DESCRIPTION, MEMORY_APPEND_NAME, MEMORY_APPEND_PROMPT_GUIDELINES, MEMORY_APPEND_PROMPT_SNIPPET, } from "./tools/memoryAppend.js";
19
- import { createMemoryRecallTool, MEMORY_RECALL_DESCRIPTION, MEMORY_RECALL_NAME, MEMORY_RECALL_PROMPT_GUIDELINES, MEMORY_RECALL_PROMPT_SNIPPET, } from "./tools/memoryRecall.js";
20
- const MemoryRecallParams = Type.Object({
21
- mode: Type.Optional(StringEnum(["direct_relation", "path_query", "typed_neighborhood"])),
22
- anchor_mentions: Type.Array(Type.String()),
23
- relation_constraints: Type.Optional(Type.Array(Type.String())),
24
- candidate_type: Type.Optional(Type.String()),
25
- scope_filter: Type.Optional(Type.Array(Type.String())),
26
- target_slot: Type.Optional(StringEnum(["head", "tail"])),
27
- time_window: Type.Optional(Type.String()),
28
- evidence_budget: Type.Optional(Type.Number()),
29
- result_limit: Type.Optional(Type.Number()),
30
- });
31
- const MemoryAppendParams = Type.Object({
32
- content: Type.String({ description: "New entries to append (markdown bullet points)." }),
33
- });
34
- const RECALL_MAX_LINES = 200;
35
- const RECALL_MAX_BYTES = 32_000;
36
- let sharedService = null;
37
- let sessionCfg = null;
38
- let settingsHelperModel;
39
- let settingsOllama = null;
40
- let settingsVllm = null;
41
- let sharedHelper = null;
42
- let sharedLLMClient = null;
43
- let turnMemoryIndex = null;
44
- /**
45
- * Per-turn preflight result, set by before_agent_start and consumed by context.
46
- * userPayload = raw event.prompt (no host scaffolding).
47
- * privateContext = <private_memory> block to inject.
48
- */
13
+ import { enqueueShutdownMetadata, readParentSession } from "./shutdown/enqueue.js";
14
+ import { resolveSidecarPaths } from "./sidecar/paths.js";
15
+ import { formatTimestamp } from "./utils/time.js";
16
+ import { createReindexScheduler } from "./sidecar/reindexBridge.js";
17
+ import { warmSidecar } from "./sidecar/warmup.js";
18
+ import { ensureSidecarRunning, stopSidecar } from "./sidecar/sidecarManager.js";
19
+ import { MemoryStore } from "./store/memoryStore.js";
20
+ loadEnv();
21
+ let memoryStore = null;
22
+ let sidecarPaths = null;
23
+ let reindexScheduler = null;
24
+ let consolidateScheduler = null;
25
+ let stopConsolidateInterval = null;
26
+ let llmClient = null;
27
+ let sessionMemoryCap = null;
49
28
  let turnPreflight = null;
50
- /**
51
- * True on the very first turn of a session; used to force the intent helper
52
- * (bypassing the lexical gate) so the first message always checks memory.
53
- */
54
29
  let isFirstTurn = false;
55
- export function getSharedMemoryService() {
56
- return sharedService;
57
- }
58
- function getHelperModelSpec(pi) {
59
- return resolveHelperModelSpec(pi.getFlag("memory-helper-model"), settingsHelperModel);
60
- }
61
- function isOllamaModel(spec) {
62
- return !!spec?.startsWith("ollama/");
63
- }
64
- async function refreshMemoryHelper(ctx, pi) {
65
- const helperModel = getHelperModelSpec(pi);
66
- if (settingsVllm) {
67
- const vllmOk = await openaiCompatHealthCheck(settingsVllm.baseUrl);
68
- if (vllmOk) {
69
- sharedHelper = createOpenAICompatMemoryHelper(settingsVllm);
70
- sharedLLMClient = createOpenAICompatLLMClient(settingsVllm);
71
- return;
72
- }
73
- }
74
- if ((isOllamaModel(helperModel) || settingsOllama) && settingsOllama) {
75
- const ollamaOk = await ollamaHealthCheck(settingsOllama.baseUrl);
76
- if (ollamaOk) {
77
- sharedHelper = createOllamaMemoryHelper(settingsOllama);
78
- sharedLLMClient = createOllamaLLMClient(settingsOllama);
79
- return;
80
- }
81
- }
82
- sharedHelper = await resolveMemoryHelperLLM(ctx, helperModel);
83
- sharedLLMClient = createPiLLMClient(ctx, helperModel);
84
- }
85
- function getRerankOpts() {
86
- if (!sharedLLMClient)
87
- return null;
88
- return { client: sharedLLMClient };
89
- }
30
+ let isSubagent = false;
31
+ let sessionId = null;
90
32
  function getUserMessageText(message) {
91
33
  if (message.role !== "user")
92
34
  return null;
93
- const user = message;
94
- if (typeof user.content === "string")
95
- return user.content;
96
- return user.content
35
+ if (typeof message.content === "string")
36
+ return message.content;
37
+ return message.content
97
38
  .filter((block) => block.type === "text")
98
39
  .map((block) => block.text)
99
40
  .join("\n");
100
41
  }
101
42
  function setUserMessageText(message, text) {
43
+ if (message.role !== "user")
44
+ return message;
102
45
  return { ...message, content: text };
103
46
  }
104
47
  function findLastUserMessageIndex(messages) {
105
- for (let i = messages.length - 1; i >= 0; i--) {
106
- if (messages[i]?.role === "user")
107
- return i;
108
- }
109
- return -1;
48
+ return findLastIndex(messages, (message) => message.role === "user");
110
49
  }
111
- function formatMemoryStatus(service) {
112
- const snap = service.getStatus();
113
- const lines = [
114
- `status: ${snap.status}`,
115
- snap.mode ? `mode: ${snap.mode}` : null,
116
- snap.reason ? `reason: ${snap.reason}` : null,
117
- sharedHelper
118
- ? `helper: ${settingsVllm ? `vllm/${settingsVllm.model}` : settingsOllama ? `ollama/${settingsOllama.model}` : (settingsHelperModel ?? "pi-ai")}`
119
- : "helper: none (regex only)",
120
- settingsVllm ? `vllm: ${settingsVllm.baseUrl} (${settingsVllm.model})` : null,
121
- settingsOllama ? `ollama: ${settingsOllama.baseUrl} (${settingsOllama.model})` : null,
122
- snap.health ? `health: ${JSON.stringify(snap.health)}` : null,
123
- ].filter(Boolean);
124
- return lines.join("\n");
50
+ async function refreshLlm(ctx, pi) {
51
+ const env = readPiMemoryEnv();
52
+ const flagModel = pi.getFlag("memory-helper-model");
53
+ const modelSpec = typeof flagModel === "string" ? flagModel : env.helperModel;
54
+ llmClient = await createLlmClient({ ctx, modelSpec, env });
125
55
  }
126
- async function formatVerboseMemoryStatus(service, cfg) {
127
- const base = formatMemoryStatus(service);
128
- const queue = getConsolidationStatus(defaultConsolidationDbPath(cfg));
129
- const indexStats = getMemoryIndexStats(cfg.memoryMdPaths, {
130
- maxLines: cfg.consolidation.memory_index_max_lines,
131
- maxBytes: cfg.consolidation.memory_index_max_bytes,
56
+ async function bootstrapSidecar() {
57
+ if (!memoryStore || !sidecarPaths)
58
+ return;
59
+ await memoryStore.ensureInitialized();
60
+ await ensureSidecarRunning({
61
+ socketPath: sidecarPaths.socketPath,
62
+ dbPath: sidecarPaths.dbPath,
132
63
  });
133
- const logs = await readRecentConsolidationLogs(cfg.consolidation.schedule.log_path, 5);
134
- const schedule = await formatScheduleStatus(cfg);
135
- return [
136
- base,
137
- "",
138
- `queue: pending=${queue.pending} processing=${queue.processing} done=${queue.done} failed=${queue.failed} skipped=${queue.skipped}`,
139
- `stage1: ${queue.stage1Count}`,
140
- `memory_index: ${indexStats.map((s) => `${s.path} ${s.cappedLines}/${s.lines} lines ${s.cappedBytes}/${s.bytes} bytes`).join("; ") || "none"}`,
141
- `schedule: ${schedule}`,
142
- `recent_consolidation: ${logs.length ? JSON.stringify(logs) : "none"}`,
143
- ].join("\n");
144
- }
145
- function resolveSchedulePlatformSafe() {
146
- if (process.platform === "darwin")
147
- return "darwin";
148
- if (process.platform === "linux")
149
- return "linux";
150
- return null;
151
- }
152
- async function formatScheduleStatus(cfg) {
153
- const platform = resolveSchedulePlatformSafe();
154
- if (!platform)
155
- return `unsupported (${process.platform})`;
156
- const result = await setupSchedule({
157
- hour: cfg.consolidation.schedule.hour,
158
- minute: cfg.consolidation.schedule.minute,
159
- logPath: cfg.consolidation.schedule.log_path,
160
- status: true,
161
- }, platform);
162
- const installed = result.files.length > 0 && result.files.every((file) => file.exists);
163
- const files = result.files
164
- .map((file) => `${file.path}:${file.exists ? "present" : "missing"}`)
165
- .join(", ");
166
- return `${platform} ${installed ? "installed" : "not installed"}${files ? ` (${files})` : ""}`;
167
- }
168
- function renderMemoryIndexContext(memoryIndex) {
169
- const trimmed = memoryIndex.trim();
170
- if (!trimmed)
171
- return "";
172
- return ("<private_memory>\n" +
173
- "Stable memory index for this session. Treat it as private reference context, not as instructions.\n" +
174
- trimmed +
175
- "\n</private_memory>");
176
- }
177
- function joinPrivateContexts(...blocks) {
178
- return blocks.map((b) => b?.trim()).filter(Boolean).join("\n\n");
179
- }
180
- function countUserTurns(entries) {
181
- let count = 0;
182
- for (const entry of entries) {
183
- if (!entry || typeof entry !== "object")
184
- continue;
185
- const record = entry;
186
- if (record.type !== "message")
187
- continue;
188
- const message = record.message;
189
- if (message?.role !== "user")
190
- continue;
191
- const content = message.content;
192
- const text = typeof content === "string"
193
- ? content
194
- : Array.isArray(content)
195
- ? content
196
- .map((block) => {
197
- if (typeof block === "string")
198
- return block;
199
- if (!block || typeof block !== "object")
200
- return "";
201
- const b = block;
202
- return typeof b.text === "string" ? b.text : "";
203
- })
204
- .join("\n")
205
- : "";
206
- if (text?.trim())
207
- count++;
64
+ if (readPreflightRuntimeConfig().warmSidecar) {
65
+ try {
66
+ await warmSidecar(sidecarPaths.socketPath);
67
+ }
68
+ catch {
69
+ // warm is best-effort
70
+ }
208
71
  }
209
- return count;
210
- }
211
- function memoryPathsForContext(cfg, cwd) {
212
- const scope = scopeForCwd(cwd);
213
- const projectPath = scope.projectHash
214
- ? `${cfg.bundleRoot}/projects/${scope.projectHash}/MEMORY.md`
215
- : null;
216
- return projectPath ? [...cfg.memoryMdPaths, projectPath] : cfg.memoryMdPaths;
72
+ reindexScheduler ??= createReindexScheduler({
73
+ sidecar: sidecarPaths,
74
+ agentDir: memoryStore.agentDir,
75
+ getDocuments: () => memoryStore.exportForIndex(),
76
+ debounceMs: readPiMemoryEnv().reindexDebounceMs,
77
+ });
78
+ memoryStore.onSyncToSidecar(() => reindexScheduler?.schedule());
79
+ await reindexScheduler.runNow();
217
80
  }
218
- function parseSessionIdFromFile(filePath) {
219
- if (!filePath)
220
- return null;
221
- const base = filePath.split(/[\\/]/).pop()?.replace(/\.[^.]+$/, "") ?? "";
222
- const underscore = base.lastIndexOf("_");
223
- return underscore >= 0 ? base.slice(underscore + 1) : (base || null);
81
+ function bootstrapConsolidate() {
82
+ if (!memoryStore)
83
+ return;
84
+ consolidateScheduler = createConsolidateScheduler({
85
+ getStore: () => memoryStore,
86
+ getAgentDir: () => memoryStore?.agentDir ?? null,
87
+ getLlm: () => llmClient,
88
+ debounceMs: readPiMemoryEnv().consolidateDebounceMs,
89
+ onComplete: preloadSessionMemoryCap,
90
+ });
91
+ memoryStore.onConsolidateCheck(() => consolidateScheduler?.schedule());
92
+ stopConsolidateInterval?.();
93
+ stopConsolidateInterval = startConsolidateInterval(() => {
94
+ void consolidateScheduler?.runNow();
95
+ });
96
+ void consolidateScheduler.runNow();
224
97
  }
225
- function getParentSessionFile(ctx) {
226
- const header = ctx.sessionManager.getHeader();
227
- const raw = header?.parentSession ?? header?.parent_session;
228
- return typeof raw === "string" && raw.trim() ? raw.trim() : null;
98
+ async function preloadSessionMemoryCap() {
99
+ if (!memoryStore)
100
+ return;
101
+ const fallback = await memoryStore.readForFallback();
102
+ sessionMemoryCap = renderMemoryCapPrivateMemory(fallback) || null;
229
103
  }
230
104
  export default function piMemoryExtension(pi) {
231
- pi.registerFlag("memory-helper-model", {
232
- description: `Model for memory intent helper (default: ${DEFAULT_HELPER_PROVIDER}/${DEFAULT_HELPER_MODEL})`,
233
- type: "string",
234
- });
235
105
  pi.on("session_start", async (_event, ctx) => {
236
- const loaded = loadMemorySettings();
237
- const cfg = loaded.config;
238
- settingsHelperModel = loaded.helperModel;
239
- settingsOllama = loaded.ollama;
240
- settingsVllm = loaded.vllm;
241
- sessionCfg = cfg;
242
- turnPreflight = null;
243
- turnMemoryIndex = null;
106
+ const agentDir = resolveMemoryAgentDir();
107
+ memoryStore = new MemoryStore({ agentDir });
108
+ sidecarPaths = resolveSidecarPaths(agentDir);
109
+ isSubagent = isSubagentSession(ctx);
244
110
  isFirstTurn = true;
245
- sharedHelper = null;
246
- if (cfg.provider === "disabled")
247
- return;
248
- const service = new MemoryService(cfg);
249
- sharedService = service;
250
- await service.start();
251
- service.startSessionIndex();
252
- if (cfg.trainer.auto_interval) {
253
- service.startAutoTrainer();
254
- }
111
+ turnPreflight = null;
112
+ sessionId = ctx.sessionManager.getSessionFile() ?? null;
113
+ await refreshLlm(ctx, pi);
255
114
  try {
256
- await refreshMemoryHelper(ctx, pi);
115
+ await bootstrapSidecar();
116
+ bootstrapConsolidate();
117
+ await preloadSessionMemoryCap();
257
118
  }
258
119
  catch {
259
- /* helper unavailable regex-only preflight */
120
+ // sidecar optional; preflight falls back to MEMORY.md
260
121
  }
261
122
  });
262
- pi.on("session_shutdown", async (_event, ctx) => {
263
- const cfg = sessionCfg;
264
- if (cfg && cfg.provider !== "disabled" && cfg.consolidation.enabled !== false) {
265
- const sessionFile = ctx.sessionManager.getSessionFile();
266
- const sessionId = ctx.sessionManager.getSessionId();
267
- if (sessionFile && sessionId) {
268
- const scope = scopeForCwd(ctx.cwd);
269
- const parentSessionFile = getParentSessionFile(ctx);
270
- try {
271
- enqueueSession(defaultConsolidationDbPath(cfg), {
272
- session_id: sessionId,
273
- session_file: sessionFile,
274
- cwd: ctx.cwd,
275
- git_root: scope.gitRoot,
276
- project_hash: scope.projectHash,
277
- parent_session_id: parseSessionIdFromFile(parentSessionFile),
278
- parent_session_file: parentSessionFile,
279
- user_turn_count: countUserTurns(ctx.sessionManager.getBranch()),
280
- ended_at: new Date().toISOString(),
281
- }, {
282
- enabled: cfg.consolidation.enabled,
283
- minUserTurns: cfg.consolidation.min_user_turns,
284
- });
285
- }
286
- catch {
287
- /* shutdown enqueue must never block session teardown */
288
- }
289
- }
123
+ pi.on("session_shutdown", async (event, ctx) => {
124
+ if (memoryStore) {
125
+ const header = ctx.sessionManager.getHeader();
126
+ void enqueueShutdownMetadata(memoryStore.agentDir, {
127
+ sessionFile: ctx.sessionManager.getSessionFile() ?? "",
128
+ parentSession: readParentSession(header),
129
+ reason: event.reason,
130
+ isSubagent,
131
+ enqueuedAt: formatTimestamp(),
132
+ }).catch(() => { });
290
133
  }
291
- if (sharedService) {
292
- await sharedService.stop();
293
- sharedService = null;
134
+ if (sessionId) {
135
+ queryIntentCache.clearSession(sessionId);
294
136
  }
295
- sessionCfg = null;
296
- settingsHelperModel = undefined;
297
- settingsOllama = null;
298
- settingsVllm = null;
299
- sharedHelper = null;
300
- sharedLLMClient = null;
137
+ stopConsolidateInterval?.();
138
+ stopConsolidateInterval = null;
139
+ consolidateScheduler = null;
140
+ reindexScheduler = null;
141
+ memoryStore = null;
142
+ sidecarPaths = null;
143
+ llmClient = null;
144
+ sessionMemoryCap = null;
301
145
  turnPreflight = null;
302
- turnMemoryIndex = null;
303
146
  isFirstTurn = false;
147
+ isSubagent = false;
148
+ sessionId = null;
149
+ try {
150
+ await stopSidecar();
151
+ }
152
+ catch {
153
+ // ignore shutdown errors
154
+ }
304
155
  });
305
156
  pi.on("model_select", async (_event, ctx) => {
306
- await refreshMemoryHelper(ctx, pi);
307
- });
308
- pi.on("agent_start", () => {
309
- turnPreflight = null;
157
+ await refreshLlm(ctx, pi);
310
158
  });
311
159
  pi.on("before_agent_start", async (event, ctx) => {
312
- const service = sharedService;
313
- const cfg = sessionCfg;
314
- if (!service || !cfg || cfg.provider === "disabled")
160
+ if (!memoryStore || !sidecarPaths)
315
161
  return;
316
162
  const userPayload = String(event.prompt ?? "").trim();
317
163
  if (!userPayload)
318
164
  return;
319
165
  const forceHelper = isFirstTurn;
320
166
  isFirstTurn = false;
321
- const scope = scopeForCwd(ctx.cwd);
322
- const memoryPaths = memoryPathsForContext(cfg, ctx.cwd);
323
- const memoryIndex = readMemoryIndexCap(memoryPaths, {
324
- maxLines: cfg.consolidation.memory_index_max_lines,
325
- maxBytes: cfg.consolidation.memory_index_max_bytes,
326
- scopes: scope.scopes,
327
- });
328
- turnMemoryIndex = memoryIndex ? renderMemoryIndexContext(memoryIndex) : null;
167
+ if (isSubagent) {
168
+ turnPreflight = { userPayload, privateContext: sessionMemoryCap ?? "" };
169
+ return;
170
+ }
329
171
  const workingUi = ctx.hasUI
330
172
  ? {
331
173
  show: (msg) => ctx.ui.setWorkingMessage(msg),
@@ -335,215 +177,28 @@ export default function piMemoryExtension(pi) {
335
177
  : null;
336
178
  try {
337
179
  workingUi?.show("Recalling memory…");
338
- const result = await runMemoryPreflight(userPayload, service, {
339
- helper: sharedHelper,
340
- forceHelper,
341
- fallback,
180
+ const env = readPiMemoryEnv();
181
+ const result = await runEpisodicPreflight(userPayload, {
182
+ socketPath: sidecarPaths.socketPath,
183
+ agentDir: memoryStore.agentDir,
184
+ store: memoryStore,
185
+ llm: llmClient,
186
+ forceEpisodic: forceHelper,
187
+ sessionId: sessionId ?? undefined,
188
+ budgetMs: env.preflightBudgetMs,
342
189
  signal: ctx.signal,
343
- rerankOpts: getRerankOpts(),
344
190
  onProgress: workingUi?.update,
345
- memoryIndex: {
346
- paths: memoryPaths,
347
- maxLines: cfg.consolidation.memory_index_max_lines,
348
- maxBytes: cfg.consolidation.memory_index_max_bytes,
349
- scopes: scope.scopes,
350
- },
351
191
  });
352
- turnPreflight = result?.privateContext
353
- ? { userPayload, privateContext: result.privateContext }
354
- : null;
192
+ const episodicContext = result?.privateContext ?? null;
193
+ const combined = mergePrivateMemoryBlocks(sessionMemoryCap, episodicContext);
194
+ turnPreflight = { userPayload, privateContext: combined ?? "" };
355
195
  }
356
196
  finally {
357
197
  workingUi?.clear();
358
198
  }
359
199
  });
360
- const initialSettings = loadMemorySettings();
361
- settingsHelperModel = initialSettings.helperModel;
362
- settingsOllama = initialSettings.ollama;
363
- settingsVllm = initialSettings.vllm;
364
- const fallback = createFallbackQuery({
365
- sessionsDir: initialSettings.config.sessionsDir,
366
- memoryMdPaths: initialSettings.config.memoryMdPaths,
367
- });
368
- pi.registerCommand("memory", {
369
- description: "Show pi-memory status and bundle info",
370
- handler: async (args, ctx) => {
371
- const service = sharedService;
372
- if (!service) {
373
- ctx.ui.notify("pi-memory: service not started", "warning");
374
- return;
375
- }
376
- const wantsVerbose = Array.isArray(args)
377
- ? args.includes("--verbose")
378
- : String(args ?? "").includes("--verbose");
379
- const cfg = sessionCfg;
380
- ctx.ui.notify(wantsVerbose && cfg
381
- ? await formatVerboseMemoryStatus(service, cfg)
382
- : formatMemoryStatus(service), "info");
383
- },
384
- });
385
- pi.registerCommand("memory-setup", {
386
- description: "Configure pi-memory LLM backend (Ollama model, remote API, or disable)",
387
- handler: async (_args, ctx) => {
388
- const backend = await ctx.ui.select("Select LLM backend for pi-memory:", [
389
- "ollama — Local Ollama (recommended for edge)",
390
- "remote — Remote API (deepseek-v4-flash)",
391
- "none — No LLM (regex only, zero dependencies)",
392
- ]);
393
- if (!backend)
394
- return;
395
- const choice = backend.split(/\s/)[0];
396
- if (choice === "none") {
397
- saveMemorySettings({ helperModel: undefined, ollama: undefined, vllm: undefined });
398
- settingsOllama = null;
399
- settingsVllm = null;
400
- settingsHelperModel = undefined;
401
- sharedHelper = null;
402
- sharedLLMClient = null;
403
- ctx.ui.notify("LLM disabled. Memory will use regex-only intent detection.", "info");
404
- return;
405
- }
406
- if (choice === "remote") {
407
- const model = await ctx.ui.input("Remote model (provider/model):", "deepseek/deepseek-v4-flash");
408
- if (!model?.trim())
409
- return;
410
- saveMemorySettings({
411
- helperModel: model.trim(),
412
- ollama: undefined,
413
- vllm: undefined,
414
- });
415
- settingsOllama = null;
416
- settingsVllm = null;
417
- settingsHelperModel = model.trim();
418
- try {
419
- await refreshMemoryHelper(ctx, pi);
420
- ctx.ui.notify(`Remote LLM set to: ${model.trim()}`, "info");
421
- }
422
- catch {
423
- ctx.ui.notify(`Model set but auth failed. Check API key for ${model.trim()}.`, "warning");
424
- }
425
- return;
426
- }
427
- if (choice === "ollama") {
428
- const baseUrl = await ctx.ui.input("Ollama base URL:", "http://localhost:11434");
429
- if (!baseUrl?.trim())
430
- return;
431
- const healthy = await ollamaHealthCheck(baseUrl.trim());
432
- if (!healthy) {
433
- const proceed = await ctx.ui.confirm("Ollama not reachable", `Cannot connect to ${baseUrl.trim()}. Save config anyway?`);
434
- if (!proceed)
435
- return;
436
- }
437
- const model = await ctx.ui.select("Select Ollama model:", [
438
- "qwen3.5:0.8b — 500MB, 2GB RAM (minimal edge)",
439
- "qwen3.5:2b — 1.5GB, 4GB RAM (recommended)",
440
- "qwen3.5:4b — 2.5GB, 8GB RAM (stronger)",
441
- "qwen3.5:9b — 5GB, 16GB RAM (desktop)",
442
- "custom — Enter model name manually",
443
- ]);
444
- if (!model)
445
- return;
446
- let modelName;
447
- if (model.startsWith("custom")) {
448
- const custom = await ctx.ui.input("Ollama model name:", "qwen3.5:2b");
449
- if (!custom?.trim())
450
- return;
451
- modelName = custom.trim();
452
- }
453
- else {
454
- modelName = model.split(/\s/)[0];
455
- }
456
- const ollamaCfg = { baseUrl: baseUrl.trim(), model: modelName };
457
- saveMemorySettings({
458
- helperModel: `ollama/${modelName}`,
459
- ollama: ollamaCfg,
460
- vllm: undefined,
461
- });
462
- settingsOllama = ollamaCfg;
463
- settingsVllm = null;
464
- settingsHelperModel = `ollama/${modelName}`;
465
- try {
466
- await refreshMemoryHelper(ctx, pi);
467
- ctx.ui.notify(`Ollama configured: ${modelName} at ${baseUrl.trim()}\n` +
468
- (sharedHelper ? "Helper LLM active." : "Ollama offline — using regex fallback."), sharedHelper ? "info" : "warning");
469
- }
470
- catch {
471
- ctx.ui.notify(`Config saved. Ollama offline — will retry on next session start.`, "warning");
472
- }
473
- return;
474
- }
475
- },
476
- });
477
- pi.registerTool({
478
- name: MEMORY_RECALL_NAME,
479
- label: "Memory Recall",
480
- description: MEMORY_RECALL_DESCRIPTION,
481
- promptSnippet: MEMORY_RECALL_PROMPT_SNIPPET,
482
- promptGuidelines: [...MEMORY_RECALL_PROMPT_GUIDELINES],
483
- parameters: MemoryRecallParams,
484
- async execute(_toolCallId, params, signal, onUpdate) {
485
- const service = sharedService;
486
- if (!service) {
487
- return {
488
- content: [{ type: "text", text: "Memory service not started." }],
489
- details: { truncated: false },
490
- isError: true,
491
- };
492
- }
493
- const onProgress = onUpdate
494
- ? (msg) => onUpdate?.({
495
- content: [{ type: "text", text: msg }],
496
- details: { phase: "querying" },
497
- })
498
- : undefined;
499
- const tool = createMemoryRecallTool(service, fallback, getRerankOpts());
500
- const result = await tool.run(JSON.stringify(params), signal, onProgress);
501
- const truncated = truncateHead(result.content, {
502
- maxLines: RECALL_MAX_LINES,
503
- maxBytes: RECALL_MAX_BYTES,
504
- });
505
- let text = truncated.content;
506
- if (truncated.truncated) {
507
- text += `\n\n[truncated: ${truncated.totalLines} lines, ${truncated.totalBytes} bytes]`;
508
- }
509
- return {
510
- content: [{ type: "text", text }],
511
- details: { truncated: truncated.truncated },
512
- isError: result.isError ?? false,
513
- };
514
- },
515
- });
516
- const memoryMdPath = initialSettings.config.memoryMdPaths[0];
517
- if (memoryMdPath) {
518
- pi.registerTool({
519
- name: MEMORY_APPEND_NAME,
520
- label: "Memory Append",
521
- description: MEMORY_APPEND_DESCRIPTION,
522
- promptSnippet: MEMORY_APPEND_PROMPT_SNIPPET,
523
- promptGuidelines: [...MEMORY_APPEND_PROMPT_GUIDELINES],
524
- parameters: MemoryAppendParams,
525
- async execute(_toolCallId, params, _signal, _onUpdate, ctx) {
526
- const cfg = sessionCfg ?? initialSettings.config;
527
- const scope = scopeForCwd(ctx.cwd);
528
- const appendTool = createMemoryAppendTool(memoryMdPath, {
529
- dbPath: defaultConsolidationDbPath(cfg),
530
- sessionId: ctx.sessionManager.getSessionId(),
531
- sessionFile: ctx.sessionManager.getSessionFile(),
532
- scope: scope.scopes.at(-1),
533
- });
534
- const result = await appendTool.run(JSON.stringify(params));
535
- return {
536
- content: [{ type: "text", text: result.content }],
537
- details: {},
538
- isError: result.isError ?? false,
539
- };
540
- },
541
- });
542
- }
543
200
  pi.on("context", async (event, ctx) => {
544
- const service = sharedService;
545
- const cfg = sessionCfg;
546
- if (!service || !cfg || cfg.provider === "disabled")
201
+ if (!memoryStore || !sidecarPaths)
547
202
  return;
548
203
  const userIndex = findLastUserMessageIndex(event.messages);
549
204
  if (userIndex < 0)
@@ -553,46 +208,51 @@ export default function piMemoryExtension(pi) {
553
208
  return;
554
209
  let privateContext;
555
210
  let userPayload;
556
- if (turnPreflight?.privateContext) {
557
- // Happy path: before_agent_start already ran preflight.
558
- // userPayload is the raw prompt; scaffolded may have host-added prefix.
559
- privateContext = turnPreflight.privateContext;
211
+ if (turnPreflight && turnPreflight.userPayload === scaffolded.trim()) {
212
+ privateContext = turnPreflight.privateContext || undefined;
560
213
  userPayload = turnPreflight.userPayload;
561
214
  }
562
215
  else {
563
- // Fallback: before_agent_start didn't fire (e.g. first context after
564
- // session restore). Run preflight inline; no scaffold separation.
565
- const userTurnCount = event.messages.filter((m) => m.role === "user").length;
566
- const preflight = await runMemoryPreflight(scaffolded, service, {
567
- helper: sharedHelper,
568
- forceHelper: userTurnCount === 1,
569
- fallback,
570
- signal: ctx.signal,
571
- rerankOpts: getRerankOpts(),
572
- memoryIndex: {
573
- paths: memoryPathsForContext(cfg, ctx.cwd),
574
- maxLines: cfg.consolidation.memory_index_max_lines,
575
- maxBytes: cfg.consolidation.memory_index_max_bytes,
576
- scopes: scopeForCwd(ctx.cwd).scopes,
577
- },
578
- });
579
- if (!preflight?.privateContext && !turnMemoryIndex)
580
- return;
581
- privateContext = preflight?.privateContext;
582
- userPayload = scaffolded;
583
- // Cache so tool-call follow-up context calls reuse without re-running.
584
- if (privateContext) {
585
- turnPreflight = { userPayload: scaffolded, privateContext };
216
+ const userTurnCount = event.messages.filter((message) => message.role === "user").length;
217
+ const env = readPiMemoryEnv();
218
+ if (isSubagent) {
219
+ privateContext = sessionMemoryCap ?? undefined;
220
+ userPayload = scaffolded;
221
+ turnPreflight = { userPayload: scaffolded, privateContext: privateContext ?? "" };
222
+ }
223
+ else {
224
+ const preflight = await runEpisodicPreflight(scaffolded, {
225
+ socketPath: sidecarPaths.socketPath,
226
+ agentDir: memoryStore.agentDir,
227
+ store: memoryStore,
228
+ llm: llmClient,
229
+ forceEpisodic: userTurnCount === 1,
230
+ sessionId: sessionId ?? undefined,
231
+ budgetMs: env.preflightBudgetMs,
232
+ signal: ctx.signal,
233
+ });
234
+ privateContext = mergePrivateMemoryBlocks(sessionMemoryCap, preflight?.privateContext) || undefined;
235
+ userPayload = scaffolded;
236
+ turnPreflight = { userPayload: scaffolded, privateContext: privateContext ?? "" };
586
237
  }
587
238
  }
588
- const combinedPrivateContext = joinPrivateContexts(turnMemoryIndex, privateContext);
589
- if (!combinedPrivateContext)
239
+ if (!privateContext)
590
240
  return;
591
- const injectedText = injectPrivateMemoryContext(scaffolded, userPayload, combinedPrivateContext);
241
+ const injectedText = injectPrivateMemoryContext(scaffolded, userPayload, privateContext);
592
242
  const messages = [...event.messages];
593
243
  messages[userIndex] = setUserMessageText(messages[userIndex], injectedText);
594
244
  return { messages };
595
245
  });
246
+ registerCommands(pi, {
247
+ getMemoryStore: () => memoryStore,
248
+ onRemembered: preloadSessionMemoryCap,
249
+ getAgentDir: () => memoryStore?.agentDir ?? resolveMemoryAgentDir(),
250
+ });
251
+ registerCompactHandlers(pi, {
252
+ getMemoryStore: () => memoryStore,
253
+ getLlmClient: () => llmClient,
254
+ onCompactionIngested: preloadSessionMemoryCap,
255
+ });
596
256
  }
597
257
  export { piMemoryExtension };
598
258
  //# sourceMappingURL=pi-extension.js.map