@vinaes/succ 1.3.19

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 (781) hide show
  1. package/LICENSE +87 -0
  2. package/README.md +588 -0
  3. package/agents/succ-checkpoint-manager.md +51 -0
  4. package/agents/succ-code-reviewer.md +181 -0
  5. package/agents/succ-context-optimizer.md +83 -0
  6. package/agents/succ-debug.md +224 -0
  7. package/agents/succ-decision-auditor.md +74 -0
  8. package/agents/succ-deep-search.md +41 -0
  9. package/agents/succ-diff-reviewer.md +123 -0
  10. package/agents/succ-explore.md +83 -0
  11. package/agents/succ-general.md +109 -0
  12. package/agents/succ-knowledge-indexer.md +45 -0
  13. package/agents/succ-knowledge-mapper.md +61 -0
  14. package/agents/succ-memory-curator.md +43 -0
  15. package/agents/succ-memory-health-monitor.md +55 -0
  16. package/agents/succ-pattern-detective.md +62 -0
  17. package/agents/succ-plan.md +172 -0
  18. package/agents/succ-quality-improvement-coach.md +63 -0
  19. package/agents/succ-readiness-improver.md +62 -0
  20. package/agents/succ-session-handoff-orchestrator.md +54 -0
  21. package/agents/succ-session-reviewer.md +46 -0
  22. package/agents/succ-style-tracker.md +73 -0
  23. package/dist/cli.d.ts +3 -0
  24. package/dist/cli.d.ts.map +1 -0
  25. package/dist/cli.js +749 -0
  26. package/dist/cli.js.map +1 -0
  27. package/dist/commands/agents-md.d.ts +16 -0
  28. package/dist/commands/agents-md.d.ts.map +1 -0
  29. package/dist/commands/agents-md.js +33 -0
  30. package/dist/commands/agents-md.js.map +1 -0
  31. package/dist/commands/analyze-agents.d.ts +20 -0
  32. package/dist/commands/analyze-agents.d.ts.map +1 -0
  33. package/dist/commands/analyze-agents.js +305 -0
  34. package/dist/commands/analyze-agents.js.map +1 -0
  35. package/dist/commands/analyze-helpers.d.ts +22 -0
  36. package/dist/commands/analyze-helpers.d.ts.map +1 -0
  37. package/dist/commands/analyze-helpers.js +38 -0
  38. package/dist/commands/analyze-helpers.js.map +1 -0
  39. package/dist/commands/analyze-profile.d.ts +53 -0
  40. package/dist/commands/analyze-profile.d.ts.map +1 -0
  41. package/dist/commands/analyze-profile.js +638 -0
  42. package/dist/commands/analyze-profile.js.map +1 -0
  43. package/dist/commands/analyze-recursive.d.ts +20 -0
  44. package/dist/commands/analyze-recursive.d.ts.map +1 -0
  45. package/dist/commands/analyze-recursive.js +326 -0
  46. package/dist/commands/analyze-recursive.js.map +1 -0
  47. package/dist/commands/analyze-utils.d.ts +83 -0
  48. package/dist/commands/analyze-utils.d.ts.map +1 -0
  49. package/dist/commands/analyze-utils.js +541 -0
  50. package/dist/commands/analyze-utils.js.map +1 -0
  51. package/dist/commands/analyze.d.ts +15 -0
  52. package/dist/commands/analyze.d.ts.map +1 -0
  53. package/dist/commands/analyze.js +265 -0
  54. package/dist/commands/analyze.js.map +1 -0
  55. package/dist/commands/backfill.d.ts +22 -0
  56. package/dist/commands/backfill.d.ts.map +1 -0
  57. package/dist/commands/backfill.js +62 -0
  58. package/dist/commands/backfill.js.map +1 -0
  59. package/dist/commands/benchmark-quality.d.ts +18 -0
  60. package/dist/commands/benchmark-quality.d.ts.map +1 -0
  61. package/dist/commands/benchmark-quality.js +316 -0
  62. package/dist/commands/benchmark-quality.js.map +1 -0
  63. package/dist/commands/benchmark-sqlite-vec.d.ts +12 -0
  64. package/dist/commands/benchmark-sqlite-vec.d.ts.map +1 -0
  65. package/dist/commands/benchmark-sqlite-vec.js +281 -0
  66. package/dist/commands/benchmark-sqlite-vec.js.map +1 -0
  67. package/dist/commands/benchmark.d.ts +57 -0
  68. package/dist/commands/benchmark.d.ts.map +1 -0
  69. package/dist/commands/benchmark.js +682 -0
  70. package/dist/commands/benchmark.js.map +1 -0
  71. package/dist/commands/chat.d.ts +14 -0
  72. package/dist/commands/chat.d.ts.map +1 -0
  73. package/dist/commands/chat.js +84 -0
  74. package/dist/commands/chat.js.map +1 -0
  75. package/dist/commands/checkpoint.d.ts +27 -0
  76. package/dist/commands/checkpoint.d.ts.map +1 -0
  77. package/dist/commands/checkpoint.js +181 -0
  78. package/dist/commands/checkpoint.js.map +1 -0
  79. package/dist/commands/clear.d.ts +9 -0
  80. package/dist/commands/clear.d.ts.map +1 -0
  81. package/dist/commands/clear.js +31 -0
  82. package/dist/commands/clear.js.map +1 -0
  83. package/dist/commands/config.d.ts +26 -0
  84. package/dist/commands/config.d.ts.map +1 -0
  85. package/dist/commands/config.js +247 -0
  86. package/dist/commands/config.js.map +1 -0
  87. package/dist/commands/consolidate.d.ts +21 -0
  88. package/dist/commands/consolidate.d.ts.map +1 -0
  89. package/dist/commands/consolidate.js +117 -0
  90. package/dist/commands/consolidate.js.map +1 -0
  91. package/dist/commands/daemon.d.ts +48 -0
  92. package/dist/commands/daemon.d.ts.map +1 -0
  93. package/dist/commands/daemon.js +218 -0
  94. package/dist/commands/daemon.js.map +1 -0
  95. package/dist/commands/embedding.d.ts +26 -0
  96. package/dist/commands/embedding.d.ts.map +1 -0
  97. package/dist/commands/embedding.js +168 -0
  98. package/dist/commands/embedding.js.map +1 -0
  99. package/dist/commands/graph.d.ts +20 -0
  100. package/dist/commands/graph.d.ts.map +1 -0
  101. package/dist/commands/graph.js +128 -0
  102. package/dist/commands/graph.js.map +1 -0
  103. package/dist/commands/index-code.d.ts +23 -0
  104. package/dist/commands/index-code.d.ts.map +1 -0
  105. package/dist/commands/index-code.js +218 -0
  106. package/dist/commands/index-code.js.map +1 -0
  107. package/dist/commands/index.d.ts +23 -0
  108. package/dist/commands/index.d.ts.map +1 -0
  109. package/dist/commands/index.js +217 -0
  110. package/dist/commands/index.js.map +1 -0
  111. package/dist/commands/init-templates.d.ts +21 -0
  112. package/dist/commands/init-templates.d.ts.map +1 -0
  113. package/dist/commands/init-templates.js +487 -0
  114. package/dist/commands/init-templates.js.map +1 -0
  115. package/dist/commands/init.d.ts +10 -0
  116. package/dist/commands/init.d.ts.map +1 -0
  117. package/dist/commands/init.js +865 -0
  118. package/dist/commands/init.js.map +1 -0
  119. package/dist/commands/memories.d.ts +47 -0
  120. package/dist/commands/memories.d.ts.map +1 -0
  121. package/dist/commands/memories.js +597 -0
  122. package/dist/commands/memories.js.map +1 -0
  123. package/dist/commands/migrate.d.ts +19 -0
  124. package/dist/commands/migrate.d.ts.map +1 -0
  125. package/dist/commands/migrate.js +154 -0
  126. package/dist/commands/migrate.js.map +1 -0
  127. package/dist/commands/prd.d.ts +46 -0
  128. package/dist/commands/prd.d.ts.map +1 -0
  129. package/dist/commands/prd.js +378 -0
  130. package/dist/commands/prd.js.map +1 -0
  131. package/dist/commands/precompute-context.d.ts +11 -0
  132. package/dist/commands/precompute-context.d.ts.map +1 -0
  133. package/dist/commands/precompute-context.js +12 -0
  134. package/dist/commands/precompute-context.js.map +1 -0
  135. package/dist/commands/progress.d.ts +16 -0
  136. package/dist/commands/progress.d.ts.map +1 -0
  137. package/dist/commands/progress.js +38 -0
  138. package/dist/commands/progress.js.map +1 -0
  139. package/dist/commands/reindex.d.ts +17 -0
  140. package/dist/commands/reindex.d.ts.map +1 -0
  141. package/dist/commands/reindex.js +83 -0
  142. package/dist/commands/reindex.js.map +1 -0
  143. package/dist/commands/retention.d.ts +19 -0
  144. package/dist/commands/retention.d.ts.map +1 -0
  145. package/dist/commands/retention.js +162 -0
  146. package/dist/commands/retention.js.map +1 -0
  147. package/dist/commands/score.d.ts +10 -0
  148. package/dist/commands/score.d.ts.map +1 -0
  149. package/dist/commands/score.js +28 -0
  150. package/dist/commands/score.js.map +1 -0
  151. package/dist/commands/search.d.ts +7 -0
  152. package/dist/commands/search.d.ts.map +1 -0
  153. package/dist/commands/search.js +89 -0
  154. package/dist/commands/search.js.map +1 -0
  155. package/dist/commands/session-summary.d.ts +15 -0
  156. package/dist/commands/session-summary.d.ts.map +1 -0
  157. package/dist/commands/session-summary.js +16 -0
  158. package/dist/commands/session-summary.js.map +1 -0
  159. package/dist/commands/setup.d.ts +6 -0
  160. package/dist/commands/setup.d.ts.map +1 -0
  161. package/dist/commands/setup.js +222 -0
  162. package/dist/commands/setup.js.map +1 -0
  163. package/dist/commands/soul.d.ts +9 -0
  164. package/dist/commands/soul.d.ts.map +1 -0
  165. package/dist/commands/soul.js +256 -0
  166. package/dist/commands/soul.js.map +1 -0
  167. package/dist/commands/stats.d.ts +18 -0
  168. package/dist/commands/stats.d.ts.map +1 -0
  169. package/dist/commands/stats.js +138 -0
  170. package/dist/commands/stats.js.map +1 -0
  171. package/dist/commands/status.d.ts +2 -0
  172. package/dist/commands/status.d.ts.map +1 -0
  173. package/dist/commands/status.js +145 -0
  174. package/dist/commands/status.js.map +1 -0
  175. package/dist/commands/train-bpe.d.ts +8 -0
  176. package/dist/commands/train-bpe.d.ts.map +1 -0
  177. package/dist/commands/train-bpe.js +35 -0
  178. package/dist/commands/train-bpe.js.map +1 -0
  179. package/dist/commands/watch.d.ts +22 -0
  180. package/dist/commands/watch.d.ts.map +1 -0
  181. package/dist/commands/watch.js +171 -0
  182. package/dist/commands/watch.js.map +1 -0
  183. package/dist/daemon/analyzer.d.ts +54 -0
  184. package/dist/daemon/analyzer.d.ts.map +1 -0
  185. package/dist/daemon/analyzer.js +362 -0
  186. package/dist/daemon/analyzer.js.map +1 -0
  187. package/dist/daemon/client.d.ts +87 -0
  188. package/dist/daemon/client.d.ts.map +1 -0
  189. package/dist/daemon/client.js +356 -0
  190. package/dist/daemon/client.js.map +1 -0
  191. package/dist/daemon/index.d.ts +12 -0
  192. package/dist/daemon/index.d.ts.map +1 -0
  193. package/dist/daemon/index.js +12 -0
  194. package/dist/daemon/index.js.map +1 -0
  195. package/dist/daemon/service.d.ts +51 -0
  196. package/dist/daemon/service.d.ts.map +1 -0
  197. package/dist/daemon/service.js +1203 -0
  198. package/dist/daemon/service.js.map +1 -0
  199. package/dist/daemon/session-processor.d.ts +85 -0
  200. package/dist/daemon/session-processor.d.ts.map +1 -0
  201. package/dist/daemon/session-processor.js +571 -0
  202. package/dist/daemon/session-processor.js.map +1 -0
  203. package/dist/daemon/sessions.d.ts +62 -0
  204. package/dist/daemon/sessions.d.ts.map +1 -0
  205. package/dist/daemon/sessions.js +192 -0
  206. package/dist/daemon/sessions.js.map +1 -0
  207. package/dist/daemon/watcher.d.ts +52 -0
  208. package/dist/daemon/watcher.d.ts.map +1 -0
  209. package/dist/daemon/watcher.js +363 -0
  210. package/dist/daemon/watcher.js.map +1 -0
  211. package/dist/lib/agents-md-generator.d.ts +33 -0
  212. package/dist/lib/agents-md-generator.d.ts.map +1 -0
  213. package/dist/lib/agents-md-generator.js +156 -0
  214. package/dist/lib/agents-md-generator.js.map +1 -0
  215. package/dist/lib/ai-readiness.d.ts +132 -0
  216. package/dist/lib/ai-readiness.d.ts.map +1 -0
  217. package/dist/lib/ai-readiness.js +702 -0
  218. package/dist/lib/ai-readiness.js.map +1 -0
  219. package/dist/lib/analyze-state.d.ts +34 -0
  220. package/dist/lib/analyze-state.d.ts.map +1 -0
  221. package/dist/lib/analyze-state.js +106 -0
  222. package/dist/lib/analyze-state.js.map +1 -0
  223. package/dist/lib/benchmark.d.ts +250 -0
  224. package/dist/lib/benchmark.d.ts.map +1 -0
  225. package/dist/lib/benchmark.js +778 -0
  226. package/dist/lib/benchmark.js.map +1 -0
  227. package/dist/lib/bm25.d.ts +114 -0
  228. package/dist/lib/bm25.d.ts.map +1 -0
  229. package/dist/lib/bm25.js +727 -0
  230. package/dist/lib/bm25.js.map +1 -0
  231. package/dist/lib/bpe.d.ts +70 -0
  232. package/dist/lib/bpe.d.ts.map +1 -0
  233. package/dist/lib/bpe.js +270 -0
  234. package/dist/lib/bpe.js.map +1 -0
  235. package/dist/lib/checkpoint.d.ts +124 -0
  236. package/dist/lib/checkpoint.d.ts.map +1 -0
  237. package/dist/lib/checkpoint.js +321 -0
  238. package/dist/lib/checkpoint.js.map +1 -0
  239. package/dist/lib/chunker.d.ts +47 -0
  240. package/dist/lib/chunker.d.ts.map +1 -0
  241. package/dist/lib/chunker.js +358 -0
  242. package/dist/lib/chunker.js.map +1 -0
  243. package/dist/lib/claude-ws-transport.d.ts +76 -0
  244. package/dist/lib/claude-ws-transport.d.ts.map +1 -0
  245. package/dist/lib/claude-ws-transport.js +487 -0
  246. package/dist/lib/claude-ws-transport.js.map +1 -0
  247. package/dist/lib/compact-briefing.d.ts +22 -0
  248. package/dist/lib/compact-briefing.d.ts.map +1 -0
  249. package/dist/lib/compact-briefing.js +180 -0
  250. package/dist/lib/compact-briefing.js.map +1 -0
  251. package/dist/lib/config-defaults.d.ts +41 -0
  252. package/dist/lib/config-defaults.d.ts.map +1 -0
  253. package/dist/lib/config-defaults.js +99 -0
  254. package/dist/lib/config-defaults.js.map +1 -0
  255. package/dist/lib/config-display.d.ts +16 -0
  256. package/dist/lib/config-display.d.ts.map +1 -0
  257. package/dist/lib/config-display.js +408 -0
  258. package/dist/lib/config-display.js.map +1 -0
  259. package/dist/lib/config-types.d.ts +601 -0
  260. package/dist/lib/config-types.d.ts.map +1 -0
  261. package/dist/lib/config-types.js +7 -0
  262. package/dist/lib/config-types.js.map +1 -0
  263. package/dist/lib/config-validation.d.ts +19 -0
  264. package/dist/lib/config-validation.d.ts.map +1 -0
  265. package/dist/lib/config-validation.js +136 -0
  266. package/dist/lib/config-validation.js.map +1 -0
  267. package/dist/lib/config.d.ts +143 -0
  268. package/dist/lib/config.d.ts.map +1 -0
  269. package/dist/lib/config.js +689 -0
  270. package/dist/lib/config.js.map +1 -0
  271. package/dist/lib/consolidate.d.ts +115 -0
  272. package/dist/lib/consolidate.d.ts.map +1 -0
  273. package/dist/lib/consolidate.js +600 -0
  274. package/dist/lib/consolidate.js.map +1 -0
  275. package/dist/lib/db/bm25-indexes.d.ts +58 -0
  276. package/dist/lib/db/bm25-indexes.d.ts.map +1 -0
  277. package/dist/lib/db/bm25-indexes.js +333 -0
  278. package/dist/lib/db/bm25-indexes.js.map +1 -0
  279. package/dist/lib/db/bpe.d.ts +18 -0
  280. package/dist/lib/db/bpe.d.ts.map +1 -0
  281. package/dist/lib/db/bpe.js +44 -0
  282. package/dist/lib/db/bpe.js.map +1 -0
  283. package/dist/lib/db/connection.d.ts +47 -0
  284. package/dist/lib/db/connection.d.ts.map +1 -0
  285. package/dist/lib/db/connection.js +114 -0
  286. package/dist/lib/db/connection.js.map +1 -0
  287. package/dist/lib/db/documents.d.ts +58 -0
  288. package/dist/lib/db/documents.d.ts.map +1 -0
  289. package/dist/lib/db/documents.js +374 -0
  290. package/dist/lib/db/documents.js.map +1 -0
  291. package/dist/lib/db/file-hash.d.ts +26 -0
  292. package/dist/lib/db/file-hash.d.ts.map +1 -0
  293. package/dist/lib/db/file-hash.js +56 -0
  294. package/dist/lib/db/file-hash.js.map +1 -0
  295. package/dist/lib/db/global-memories.d.ts +62 -0
  296. package/dist/lib/db/global-memories.d.ts.map +1 -0
  297. package/dist/lib/db/global-memories.js +173 -0
  298. package/dist/lib/db/global-memories.js.map +1 -0
  299. package/dist/lib/db/graph.d.ts +163 -0
  300. package/dist/lib/db/graph.d.ts.map +1 -0
  301. package/dist/lib/db/graph.js +488 -0
  302. package/dist/lib/db/graph.js.map +1 -0
  303. package/dist/lib/db/helpers.d.ts +13 -0
  304. package/dist/lib/db/helpers.d.ts.map +1 -0
  305. package/dist/lib/db/helpers.js +21 -0
  306. package/dist/lib/db/helpers.js.map +1 -0
  307. package/dist/lib/db/hybrid-search.d.ts +64 -0
  308. package/dist/lib/db/hybrid-search.d.ts.map +1 -0
  309. package/dist/lib/db/hybrid-search.js +549 -0
  310. package/dist/lib/db/hybrid-search.js.map +1 -0
  311. package/dist/lib/db/index.d.ts +23 -0
  312. package/dist/lib/db/index.d.ts.map +1 -0
  313. package/dist/lib/db/index.js +23 -0
  314. package/dist/lib/db/index.js.map +1 -0
  315. package/dist/lib/db/memories.d.ts +174 -0
  316. package/dist/lib/db/memories.d.ts.map +1 -0
  317. package/dist/lib/db/memories.js +866 -0
  318. package/dist/lib/db/memories.js.map +1 -0
  319. package/dist/lib/db/retention.d.ts +64 -0
  320. package/dist/lib/db/retention.d.ts.map +1 -0
  321. package/dist/lib/db/retention.js +115 -0
  322. package/dist/lib/db/retention.js.map +1 -0
  323. package/dist/lib/db/schema.d.ts +29 -0
  324. package/dist/lib/db/schema.d.ts.map +1 -0
  325. package/dist/lib/db/schema.js +832 -0
  326. package/dist/lib/db/schema.js.map +1 -0
  327. package/dist/lib/db/skills.d.ts +65 -0
  328. package/dist/lib/db/skills.d.ts.map +1 -0
  329. package/dist/lib/db/skills.js +119 -0
  330. package/dist/lib/db/skills.js.map +1 -0
  331. package/dist/lib/db/token-frequency.d.ts +34 -0
  332. package/dist/lib/db/token-frequency.d.ts.map +1 -0
  333. package/dist/lib/db/token-frequency.js +92 -0
  334. package/dist/lib/db/token-frequency.js.map +1 -0
  335. package/dist/lib/db/token-stats.d.ts +43 -0
  336. package/dist/lib/db/token-stats.d.ts.map +1 -0
  337. package/dist/lib/db/token-stats.js +59 -0
  338. package/dist/lib/db/token-stats.js.map +1 -0
  339. package/dist/lib/db/types.d.ts +57 -0
  340. package/dist/lib/db/types.d.ts.map +1 -0
  341. package/dist/lib/db/types.js +5 -0
  342. package/dist/lib/db/types.js.map +1 -0
  343. package/dist/lib/db/web-search-history.d.ts +22 -0
  344. package/dist/lib/db/web-search-history.d.ts.map +1 -0
  345. package/dist/lib/db/web-search-history.js +107 -0
  346. package/dist/lib/db/web-search-history.js.map +1 -0
  347. package/dist/lib/debug/state.d.ts +17 -0
  348. package/dist/lib/debug/state.d.ts.map +1 -0
  349. package/dist/lib/debug/state.js +131 -0
  350. package/dist/lib/debug/state.js.map +1 -0
  351. package/dist/lib/debug/types.d.ts +74 -0
  352. package/dist/lib/debug/types.d.ts.map +1 -0
  353. package/dist/lib/debug/types.js +85 -0
  354. package/dist/lib/debug/types.js.map +1 -0
  355. package/dist/lib/embedding-pool.d.ts +37 -0
  356. package/dist/lib/embedding-pool.d.ts.map +1 -0
  357. package/dist/lib/embedding-pool.js +159 -0
  358. package/dist/lib/embedding-pool.js.map +1 -0
  359. package/dist/lib/embedding-worker.d.ts +7 -0
  360. package/dist/lib/embedding-worker.d.ts.map +1 -0
  361. package/dist/lib/embedding-worker.js +49 -0
  362. package/dist/lib/embedding-worker.js.map +1 -0
  363. package/dist/lib/embeddings.d.ts +54 -0
  364. package/dist/lib/embeddings.d.ts.map +1 -0
  365. package/dist/lib/embeddings.js +437 -0
  366. package/dist/lib/embeddings.js.map +1 -0
  367. package/dist/lib/errors.d.ts +40 -0
  368. package/dist/lib/errors.d.ts.map +1 -0
  369. package/dist/lib/errors.js +66 -0
  370. package/dist/lib/errors.js.map +1 -0
  371. package/dist/lib/fault-logger.d.ts +35 -0
  372. package/dist/lib/fault-logger.d.ts.map +1 -0
  373. package/dist/lib/fault-logger.js +182 -0
  374. package/dist/lib/fault-logger.js.map +1 -0
  375. package/dist/lib/graph/centrality.d.ts +34 -0
  376. package/dist/lib/graph/centrality.d.ts.map +1 -0
  377. package/dist/lib/graph/centrality.js +76 -0
  378. package/dist/lib/graph/centrality.js.map +1 -0
  379. package/dist/lib/graph/cleanup.d.ts +36 -0
  380. package/dist/lib/graph/cleanup.d.ts.map +1 -0
  381. package/dist/lib/graph/cleanup.js +96 -0
  382. package/dist/lib/graph/cleanup.js.map +1 -0
  383. package/dist/lib/graph/community-detection.d.ts +61 -0
  384. package/dist/lib/graph/community-detection.d.ts.map +1 -0
  385. package/dist/lib/graph/community-detection.js +218 -0
  386. package/dist/lib/graph/community-detection.js.map +1 -0
  387. package/dist/lib/graph/contextual-proximity.d.ts +41 -0
  388. package/dist/lib/graph/contextual-proximity.d.ts.map +1 -0
  389. package/dist/lib/graph/contextual-proximity.js +125 -0
  390. package/dist/lib/graph/contextual-proximity.js.map +1 -0
  391. package/dist/lib/graph/llm-relations.d.ts +54 -0
  392. package/dist/lib/graph/llm-relations.d.ts.map +1 -0
  393. package/dist/lib/graph/llm-relations.js +265 -0
  394. package/dist/lib/graph/llm-relations.js.map +1 -0
  395. package/dist/lib/graph-export.d.ts +13 -0
  396. package/dist/lib/graph-export.d.ts.map +1 -0
  397. package/dist/lib/graph-export.js +637 -0
  398. package/dist/lib/graph-export.js.map +1 -0
  399. package/dist/lib/graph-scheduler.d.ts +7 -0
  400. package/dist/lib/graph-scheduler.d.ts.map +1 -0
  401. package/dist/lib/graph-scheduler.js +21 -0
  402. package/dist/lib/graph-scheduler.js.map +1 -0
  403. package/dist/lib/indexer.d.ts +36 -0
  404. package/dist/lib/indexer.d.ts.map +1 -0
  405. package/dist/lib/indexer.js +226 -0
  406. package/dist/lib/indexer.js.map +1 -0
  407. package/dist/lib/learning-delta.d.ts +35 -0
  408. package/dist/lib/learning-delta.d.ts.map +1 -0
  409. package/dist/lib/learning-delta.js +53 -0
  410. package/dist/lib/learning-delta.js.map +1 -0
  411. package/dist/lib/llm.d.ts +118 -0
  412. package/dist/lib/llm.d.ts.map +1 -0
  413. package/dist/lib/llm.js +439 -0
  414. package/dist/lib/llm.js.map +1 -0
  415. package/dist/lib/lock.d.ts +27 -0
  416. package/dist/lib/lock.d.ts.map +1 -0
  417. package/dist/lib/lock.js +143 -0
  418. package/dist/lib/lock.js.map +1 -0
  419. package/dist/lib/md-fetch.d.ts +61 -0
  420. package/dist/lib/md-fetch.d.ts.map +1 -0
  421. package/dist/lib/md-fetch.js +141 -0
  422. package/dist/lib/md-fetch.js.map +1 -0
  423. package/dist/lib/mmr.d.ts +29 -0
  424. package/dist/lib/mmr.d.ts.map +1 -0
  425. package/dist/lib/mmr.js +89 -0
  426. package/dist/lib/mmr.js.map +1 -0
  427. package/dist/lib/onboarding/ai-chat.d.ts +11 -0
  428. package/dist/lib/onboarding/ai-chat.d.ts.map +1 -0
  429. package/dist/lib/onboarding/ai-chat.js +85 -0
  430. package/dist/lib/onboarding/ai-chat.js.map +1 -0
  431. package/dist/lib/onboarding/index.d.ts +7 -0
  432. package/dist/lib/onboarding/index.d.ts.map +1 -0
  433. package/dist/lib/onboarding/index.js +7 -0
  434. package/dist/lib/onboarding/index.js.map +1 -0
  435. package/dist/lib/onboarding/wizard.d.ts +11 -0
  436. package/dist/lib/onboarding/wizard.d.ts.map +1 -0
  437. package/dist/lib/onboarding/wizard.js +104 -0
  438. package/dist/lib/onboarding/wizard.js.map +1 -0
  439. package/dist/lib/ort-provider.d.ts +27 -0
  440. package/dist/lib/ort-provider.d.ts.map +1 -0
  441. package/dist/lib/ort-provider.js +83 -0
  442. package/dist/lib/ort-provider.js.map +1 -0
  443. package/dist/lib/ort-session.d.ts +32 -0
  444. package/dist/lib/ort-session.d.ts.map +1 -0
  445. package/dist/lib/ort-session.js +227 -0
  446. package/dist/lib/ort-session.js.map +1 -0
  447. package/dist/lib/patterns.d.ts +43 -0
  448. package/dist/lib/patterns.d.ts.map +1 -0
  449. package/dist/lib/patterns.js +395 -0
  450. package/dist/lib/patterns.js.map +1 -0
  451. package/dist/lib/prd/codebase-context.d.ts +27 -0
  452. package/dist/lib/prd/codebase-context.d.ts.map +1 -0
  453. package/dist/lib/prd/codebase-context.js +420 -0
  454. package/dist/lib/prd/codebase-context.js.map +1 -0
  455. package/dist/lib/prd/context.d.ts +24 -0
  456. package/dist/lib/prd/context.d.ts.map +1 -0
  457. package/dist/lib/prd/context.js +68 -0
  458. package/dist/lib/prd/context.js.map +1 -0
  459. package/dist/lib/prd/executor.d.ts +52 -0
  460. package/dist/lib/prd/executor.d.ts.map +1 -0
  461. package/dist/lib/prd/executor.js +154 -0
  462. package/dist/lib/prd/executor.js.map +1 -0
  463. package/dist/lib/prd/export.d.ts +40 -0
  464. package/dist/lib/prd/export.d.ts.map +1 -0
  465. package/dist/lib/prd/export.js +511 -0
  466. package/dist/lib/prd/export.js.map +1 -0
  467. package/dist/lib/prd/gates.d.ts +30 -0
  468. package/dist/lib/prd/gates.d.ts.map +1 -0
  469. package/dist/lib/prd/gates.js +100 -0
  470. package/dist/lib/prd/gates.js.map +1 -0
  471. package/dist/lib/prd/generate.d.ts +56 -0
  472. package/dist/lib/prd/generate.d.ts.map +1 -0
  473. package/dist/lib/prd/generate.js +357 -0
  474. package/dist/lib/prd/generate.js.map +1 -0
  475. package/dist/lib/prd/parse.d.ts +21 -0
  476. package/dist/lib/prd/parse.d.ts.map +1 -0
  477. package/dist/lib/prd/parse.js +270 -0
  478. package/dist/lib/prd/parse.js.map +1 -0
  479. package/dist/lib/prd/prompt-builder.d.ts +18 -0
  480. package/dist/lib/prd/prompt-builder.d.ts.map +1 -0
  481. package/dist/lib/prd/prompt-builder.js +61 -0
  482. package/dist/lib/prd/prompt-builder.js.map +1 -0
  483. package/dist/lib/prd/runner.d.ts +54 -0
  484. package/dist/lib/prd/runner.d.ts.map +1 -0
  485. package/dist/lib/prd/runner.js +563 -0
  486. package/dist/lib/prd/runner.js.map +1 -0
  487. package/dist/lib/prd/scheduler.d.ts +27 -0
  488. package/dist/lib/prd/scheduler.d.ts.map +1 -0
  489. package/dist/lib/prd/scheduler.js +113 -0
  490. package/dist/lib/prd/scheduler.js.map +1 -0
  491. package/dist/lib/prd/state.d.ts +77 -0
  492. package/dist/lib/prd/state.d.ts.map +1 -0
  493. package/dist/lib/prd/state.js +253 -0
  494. package/dist/lib/prd/state.js.map +1 -0
  495. package/dist/lib/prd/team-runner.d.ts +48 -0
  496. package/dist/lib/prd/team-runner.d.ts.map +1 -0
  497. package/dist/lib/prd/team-runner.js +261 -0
  498. package/dist/lib/prd/team-runner.js.map +1 -0
  499. package/dist/lib/prd/types.d.ts +169 -0
  500. package/dist/lib/prd/types.d.ts.map +1 -0
  501. package/dist/lib/prd/types.js +143 -0
  502. package/dist/lib/prd/types.js.map +1 -0
  503. package/dist/lib/prd/worktree.d.ts +54 -0
  504. package/dist/lib/prd/worktree.d.ts.map +1 -0
  505. package/dist/lib/prd/worktree.js +255 -0
  506. package/dist/lib/prd/worktree.js.map +1 -0
  507. package/dist/lib/precompute-context.d.ts +48 -0
  508. package/dist/lib/precompute-context.d.ts.map +1 -0
  509. package/dist/lib/precompute-context.js +265 -0
  510. package/dist/lib/precompute-context.js.map +1 -0
  511. package/dist/lib/pricing.d.ts +60 -0
  512. package/dist/lib/pricing.d.ts.map +1 -0
  513. package/dist/lib/pricing.js +258 -0
  514. package/dist/lib/pricing.js.map +1 -0
  515. package/dist/lib/process-registry.d.ts +30 -0
  516. package/dist/lib/process-registry.d.ts.map +1 -0
  517. package/dist/lib/process-registry.js +92 -0
  518. package/dist/lib/process-registry.js.map +1 -0
  519. package/dist/lib/progress-log.d.ts +44 -0
  520. package/dist/lib/progress-log.d.ts.map +1 -0
  521. package/dist/lib/progress-log.js +58 -0
  522. package/dist/lib/progress-log.js.map +1 -0
  523. package/dist/lib/public-api.d.ts +56 -0
  524. package/dist/lib/public-api.d.ts.map +1 -0
  525. package/dist/lib/public-api.js +63 -0
  526. package/dist/lib/public-api.js.map +1 -0
  527. package/dist/lib/quality.d.ts +66 -0
  528. package/dist/lib/quality.d.ts.map +1 -0
  529. package/dist/lib/quality.js +486 -0
  530. package/dist/lib/quality.js.map +1 -0
  531. package/dist/lib/query-expansion.d.ts +16 -0
  532. package/dist/lib/query-expansion.d.ts.map +1 -0
  533. package/dist/lib/query-expansion.js +53 -0
  534. package/dist/lib/query-expansion.js.map +1 -0
  535. package/dist/lib/readiness.d.ts +35 -0
  536. package/dist/lib/readiness.d.ts.map +1 -0
  537. package/dist/lib/readiness.js +142 -0
  538. package/dist/lib/readiness.js.map +1 -0
  539. package/dist/lib/reference-embeddings.d.ts +39 -0
  540. package/dist/lib/reference-embeddings.d.ts.map +1 -0
  541. package/dist/lib/reference-embeddings.js +95 -0
  542. package/dist/lib/reference-embeddings.js.map +1 -0
  543. package/dist/lib/reflection-synthesizer.d.ts +27 -0
  544. package/dist/lib/reflection-synthesizer.d.ts.map +1 -0
  545. package/dist/lib/reflection-synthesizer.js +149 -0
  546. package/dist/lib/reflection-synthesizer.js.map +1 -0
  547. package/dist/lib/retention.d.ts +105 -0
  548. package/dist/lib/retention.d.ts.map +1 -0
  549. package/dist/lib/retention.js +246 -0
  550. package/dist/lib/retention.js.map +1 -0
  551. package/dist/lib/sensitive-filter.d.ts +34 -0
  552. package/dist/lib/sensitive-filter.d.ts.map +1 -0
  553. package/dist/lib/sensitive-filter.js +344 -0
  554. package/dist/lib/sensitive-filter.js.map +1 -0
  555. package/dist/lib/session-observations.d.ts +59 -0
  556. package/dist/lib/session-observations.d.ts.map +1 -0
  557. package/dist/lib/session-observations.js +128 -0
  558. package/dist/lib/session-observations.js.map +1 -0
  559. package/dist/lib/session-summary.d.ts +65 -0
  560. package/dist/lib/session-summary.d.ts.map +1 -0
  561. package/dist/lib/session-summary.js +344 -0
  562. package/dist/lib/session-summary.js.map +1 -0
  563. package/dist/lib/similarity-worker.d.ts +7 -0
  564. package/dist/lib/similarity-worker.d.ts.map +1 -0
  565. package/dist/lib/similarity-worker.js +36 -0
  566. package/dist/lib/similarity-worker.js.map +1 -0
  567. package/dist/lib/skills.d.ts +78 -0
  568. package/dist/lib/skills.d.ts.map +1 -0
  569. package/dist/lib/skills.js +439 -0
  570. package/dist/lib/skills.js.map +1 -0
  571. package/dist/lib/skyll-client.d.ts +59 -0
  572. package/dist/lib/skyll-client.d.ts.map +1 -0
  573. package/dist/lib/skyll-client.js +257 -0
  574. package/dist/lib/skyll-client.js.map +1 -0
  575. package/dist/lib/storage/backends/interface.d.ts +383 -0
  576. package/dist/lib/storage/backends/interface.d.ts.map +1 -0
  577. package/dist/lib/storage/backends/interface.js +12 -0
  578. package/dist/lib/storage/backends/interface.js.map +1 -0
  579. package/dist/lib/storage/backends/postgresql.d.ts +454 -0
  580. package/dist/lib/storage/backends/postgresql.d.ts.map +1 -0
  581. package/dist/lib/storage/backends/postgresql.js +2528 -0
  582. package/dist/lib/storage/backends/postgresql.js.map +1 -0
  583. package/dist/lib/storage/benchmark.d.ts +16 -0
  584. package/dist/lib/storage/benchmark.d.ts.map +1 -0
  585. package/dist/lib/storage/benchmark.js +219 -0
  586. package/dist/lib/storage/benchmark.js.map +1 -0
  587. package/dist/lib/storage/dispatcher-export.d.ts +108 -0
  588. package/dist/lib/storage/dispatcher-export.d.ts.map +1 -0
  589. package/dist/lib/storage/dispatcher-export.js +593 -0
  590. package/dist/lib/storage/dispatcher-export.js.map +1 -0
  591. package/dist/lib/storage/dispatcher.d.ts +468 -0
  592. package/dist/lib/storage/dispatcher.d.ts.map +1 -0
  593. package/dist/lib/storage/dispatcher.js +1926 -0
  594. package/dist/lib/storage/dispatcher.js.map +1 -0
  595. package/dist/lib/storage/index.d.ts +481 -0
  596. package/dist/lib/storage/index.d.ts.map +1 -0
  597. package/dist/lib/storage/index.js +727 -0
  598. package/dist/lib/storage/index.js.map +1 -0
  599. package/dist/lib/storage/migration/export-import.d.ts +133 -0
  600. package/dist/lib/storage/migration/export-import.d.ts.map +1 -0
  601. package/dist/lib/storage/migration/export-import.js +264 -0
  602. package/dist/lib/storage/migration/export-import.js.map +1 -0
  603. package/dist/lib/storage/types.d.ts +313 -0
  604. package/dist/lib/storage/types.d.ts.map +1 -0
  605. package/dist/lib/storage/types.js +30 -0
  606. package/dist/lib/storage/types.js.map +1 -0
  607. package/dist/lib/storage/vector/interface.d.ts +89 -0
  608. package/dist/lib/storage/vector/interface.d.ts.map +1 -0
  609. package/dist/lib/storage/vector/interface.js +10 -0
  610. package/dist/lib/storage/vector/interface.js.map +1 -0
  611. package/dist/lib/storage/vector/qdrant.d.ts +221 -0
  612. package/dist/lib/storage/vector/qdrant.d.ts.map +1 -0
  613. package/dist/lib/storage/vector/qdrant.js +880 -0
  614. package/dist/lib/storage/vector/qdrant.js.map +1 -0
  615. package/dist/lib/supersession.d.ts +26 -0
  616. package/dist/lib/supersession.d.ts.map +1 -0
  617. package/dist/lib/supersession.js +97 -0
  618. package/dist/lib/supersession.js.map +1 -0
  619. package/dist/lib/temporal.d.ts +140 -0
  620. package/dist/lib/temporal.d.ts.map +1 -0
  621. package/dist/lib/temporal.js +303 -0
  622. package/dist/lib/temporal.js.map +1 -0
  623. package/dist/lib/token-budget.d.ts +79 -0
  624. package/dist/lib/token-budget.d.ts.map +1 -0
  625. package/dist/lib/token-budget.js +146 -0
  626. package/dist/lib/token-budget.js.map +1 -0
  627. package/dist/lib/token-counter.d.ts +27 -0
  628. package/dist/lib/token-counter.d.ts.map +1 -0
  629. package/dist/lib/token-counter.js +52 -0
  630. package/dist/lib/token-counter.js.map +1 -0
  631. package/dist/lib/tree-sitter/chunker-ts.d.ts +24 -0
  632. package/dist/lib/tree-sitter/chunker-ts.d.ts.map +1 -0
  633. package/dist/lib/tree-sitter/chunker-ts.js +206 -0
  634. package/dist/lib/tree-sitter/chunker-ts.js.map +1 -0
  635. package/dist/lib/tree-sitter/extractor.d.ts +43 -0
  636. package/dist/lib/tree-sitter/extractor.d.ts.map +1 -0
  637. package/dist/lib/tree-sitter/extractor.js +297 -0
  638. package/dist/lib/tree-sitter/extractor.js.map +1 -0
  639. package/dist/lib/tree-sitter/index.d.ts +13 -0
  640. package/dist/lib/tree-sitter/index.d.ts.map +1 -0
  641. package/dist/lib/tree-sitter/index.js +14 -0
  642. package/dist/lib/tree-sitter/index.js.map +1 -0
  643. package/dist/lib/tree-sitter/parser.d.ts +70 -0
  644. package/dist/lib/tree-sitter/parser.d.ts.map +1 -0
  645. package/dist/lib/tree-sitter/parser.js +354 -0
  646. package/dist/lib/tree-sitter/parser.js.map +1 -0
  647. package/dist/lib/tree-sitter/public.d.ts +28 -0
  648. package/dist/lib/tree-sitter/public.d.ts.map +1 -0
  649. package/dist/lib/tree-sitter/public.js +50 -0
  650. package/dist/lib/tree-sitter/public.js.map +1 -0
  651. package/dist/lib/tree-sitter/queries.d.ts +28 -0
  652. package/dist/lib/tree-sitter/queries.d.ts.map +1 -0
  653. package/dist/lib/tree-sitter/queries.js +383 -0
  654. package/dist/lib/tree-sitter/queries.js.map +1 -0
  655. package/dist/lib/tree-sitter/types.d.ts +69 -0
  656. package/dist/lib/tree-sitter/types.d.ts.map +1 -0
  657. package/dist/lib/tree-sitter/types.js +131 -0
  658. package/dist/lib/tree-sitter/types.js.map +1 -0
  659. package/dist/lib/working-memory-pipeline.d.ts +118 -0
  660. package/dist/lib/working-memory-pipeline.d.ts.map +1 -0
  661. package/dist/lib/working-memory-pipeline.js +344 -0
  662. package/dist/lib/working-memory-pipeline.js.map +1 -0
  663. package/dist/mcp/helpers.d.ts +44 -0
  664. package/dist/mcp/helpers.d.ts.map +1 -0
  665. package/dist/mcp/helpers.js +244 -0
  666. package/dist/mcp/helpers.js.map +1 -0
  667. package/dist/mcp/index.d.ts +10 -0
  668. package/dist/mcp/index.d.ts.map +1 -0
  669. package/dist/mcp/index.js +15 -0
  670. package/dist/mcp/index.js.map +1 -0
  671. package/dist/mcp/resources.d.ts +12 -0
  672. package/dist/mcp/resources.d.ts.map +1 -0
  673. package/dist/mcp/resources.js +136 -0
  674. package/dist/mcp/resources.js.map +1 -0
  675. package/dist/mcp/server.d.ts +22 -0
  676. package/dist/mcp/server.d.ts.map +1 -0
  677. package/dist/mcp/server.js +131 -0
  678. package/dist/mcp/server.js.map +1 -0
  679. package/dist/mcp/tools/config.d.ts +10 -0
  680. package/dist/mcp/tools/config.d.ts.map +1 -0
  681. package/dist/mcp/tools/config.js +236 -0
  682. package/dist/mcp/tools/config.js.map +1 -0
  683. package/dist/mcp/tools/dead-end.d.ts +9 -0
  684. package/dist/mcp/tools/dead-end.d.ts.map +1 -0
  685. package/dist/mcp/tools/dead-end.js +137 -0
  686. package/dist/mcp/tools/dead-end.js.map +1 -0
  687. package/dist/mcp/tools/debug.d.ts +9 -0
  688. package/dist/mcp/tools/debug.d.ts.map +1 -0
  689. package/dist/mcp/tools/debug.js +387 -0
  690. package/dist/mcp/tools/debug.js.map +1 -0
  691. package/dist/mcp/tools/graph.d.ts +9 -0
  692. package/dist/mcp/tools/graph.d.ts.map +1 -0
  693. package/dist/mcp/tools/graph.js +337 -0
  694. package/dist/mcp/tools/graph.js.map +1 -0
  695. package/dist/mcp/tools/indexing.d.ts +12 -0
  696. package/dist/mcp/tools/indexing.d.ts.map +1 -0
  697. package/dist/mcp/tools/indexing.js +289 -0
  698. package/dist/mcp/tools/indexing.js.map +1 -0
  699. package/dist/mcp/tools/memory.d.ts +14 -0
  700. package/dist/mcp/tools/memory.d.ts.map +1 -0
  701. package/dist/mcp/tools/memory.js +1170 -0
  702. package/dist/mcp/tools/memory.js.map +1 -0
  703. package/dist/mcp/tools/prd.d.ts +12 -0
  704. package/dist/mcp/tools/prd.d.ts.map +1 -0
  705. package/dist/mcp/tools/prd.js +276 -0
  706. package/dist/mcp/tools/prd.js.map +1 -0
  707. package/dist/mcp/tools/search.d.ts +9 -0
  708. package/dist/mcp/tools/search.d.ts.map +1 -0
  709. package/dist/mcp/tools/search.js +279 -0
  710. package/dist/mcp/tools/search.js.map +1 -0
  711. package/dist/mcp/tools/status.d.ts +10 -0
  712. package/dist/mcp/tools/status.d.ts.map +1 -0
  713. package/dist/mcp/tools/status.js +296 -0
  714. package/dist/mcp/tools/status.js.map +1 -0
  715. package/dist/mcp/tools/web-fetch.d.ts +10 -0
  716. package/dist/mcp/tools/web-fetch.d.ts.map +1 -0
  717. package/dist/mcp/tools/web-fetch.js +107 -0
  718. package/dist/mcp/tools/web-fetch.js.map +1 -0
  719. package/dist/mcp/tools/web-search.d.ts +14 -0
  720. package/dist/mcp/tools/web-search.d.ts.map +1 -0
  721. package/dist/mcp/tools/web-search.js +427 -0
  722. package/dist/mcp/tools/web-search.js.map +1 -0
  723. package/dist/mcp/types.d.ts +16 -0
  724. package/dist/mcp/types.d.ts.map +1 -0
  725. package/dist/mcp/types.js +5 -0
  726. package/dist/mcp/types.js.map +1 -0
  727. package/dist/mcp-server.d.ts +9 -0
  728. package/dist/mcp-server.d.ts.map +1 -0
  729. package/dist/mcp-server.js +9 -0
  730. package/dist/mcp-server.js.map +1 -0
  731. package/dist/prompts/analyze.d.ts +21 -0
  732. package/dist/prompts/analyze.d.ts.map +1 -0
  733. package/dist/prompts/analyze.js +27 -0
  734. package/dist/prompts/analyze.js.map +1 -0
  735. package/dist/prompts/briefing.d.ts +27 -0
  736. package/dist/prompts/briefing.d.ts.map +1 -0
  737. package/dist/prompts/briefing.js +123 -0
  738. package/dist/prompts/briefing.js.map +1 -0
  739. package/dist/prompts/chat.d.ts +8 -0
  740. package/dist/prompts/chat.d.ts.map +1 -0
  741. package/dist/prompts/chat.js +39 -0
  742. package/dist/prompts/chat.js.map +1 -0
  743. package/dist/prompts/daemon.d.ts +16 -0
  744. package/dist/prompts/daemon.d.ts.map +1 -0
  745. package/dist/prompts/daemon.js +46 -0
  746. package/dist/prompts/daemon.js.map +1 -0
  747. package/dist/prompts/extraction.d.ts +13 -0
  748. package/dist/prompts/extraction.d.ts.map +1 -0
  749. package/dist/prompts/extraction.js +93 -0
  750. package/dist/prompts/extraction.js.map +1 -0
  751. package/dist/prompts/index.d.ts +17 -0
  752. package/dist/prompts/index.d.ts.map +1 -0
  753. package/dist/prompts/index.js +27 -0
  754. package/dist/prompts/index.js.map +1 -0
  755. package/dist/prompts/memory.d.ts +11 -0
  756. package/dist/prompts/memory.d.ts.map +1 -0
  757. package/dist/prompts/memory.js +23 -0
  758. package/dist/prompts/memory.js.map +1 -0
  759. package/dist/prompts/onboarding.d.ts +16 -0
  760. package/dist/prompts/onboarding.d.ts.map +1 -0
  761. package/dist/prompts/onboarding.js +183 -0
  762. package/dist/prompts/onboarding.js.map +1 -0
  763. package/dist/prompts/prd.d.ts +12 -0
  764. package/dist/prompts/prd.d.ts.map +1 -0
  765. package/dist/prompts/prd.js +211 -0
  766. package/dist/prompts/prd.js.map +1 -0
  767. package/dist/prompts/quality.d.ts +11 -0
  768. package/dist/prompts/quality.d.ts.map +1 -0
  769. package/dist/prompts/quality.js +11 -0
  770. package/dist/prompts/quality.js.map +1 -0
  771. package/dist/prompts/skills.d.ts +16 -0
  772. package/dist/prompts/skills.d.ts.map +1 -0
  773. package/dist/prompts/skills.js +30 -0
  774. package/dist/prompts/skills.js.map +1 -0
  775. package/hooks/succ-post-tool.cjs +227 -0
  776. package/hooks/succ-pre-tool.cjs +312 -0
  777. package/hooks/succ-session-end.cjs +85 -0
  778. package/hooks/succ-session-start.cjs +618 -0
  779. package/hooks/succ-stop-reflection.cjs +87 -0
  780. package/hooks/succ-user-prompt.cjs +220 -0
  781. package/package.json +128 -0
@@ -0,0 +1,618 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * SessionStart Hook - Context Injection
4
+ *
5
+ * Best practices applied:
6
+ * - XML tags for semantic boundaries (<task>, <context>, <tools>)
7
+ * - Progressive disclosure (index → details via MCP tools)
8
+ * - Compact format (~100-200 tokens for tools reference)
9
+ * - Quick decision guide at top
10
+ *
11
+ * Loads:
12
+ * - Git context (branch, changes)
13
+ * - succ tools reference (compact)
14
+ * - Soul document
15
+ * - Previous session context
16
+ * - Recent memories (compact index)
17
+ * - Knowledge base stats
18
+ */
19
+
20
+ const { execFileSync, spawn } = require('child_process');
21
+ const fs = require('fs');
22
+ const path = require('path');
23
+ const os = require('os');
24
+
25
+ // Logging helper - writes to .succ/.tmp/hooks.log
26
+ function log(succDir, message) {
27
+ try {
28
+ const tmpDir = path.join(succDir, '.tmp');
29
+ if (!fs.existsSync(tmpDir)) {
30
+ fs.mkdirSync(tmpDir, { recursive: true });
31
+ }
32
+ const logFile = path.join(tmpDir, 'hooks.log');
33
+ const timestamp = new Date().toISOString();
34
+ fs.appendFileSync(logFile, `[${timestamp}] [session-start] ${message}\n`);
35
+ } catch {
36
+ // Logging failed, not critical
37
+ }
38
+ }
39
+
40
+ let input = '';
41
+ process.stdin.setEncoding('utf8');
42
+ process.stdin.on('readable', () => {
43
+ let chunk;
44
+ while ((chunk = process.stdin.read()) !== null) {
45
+ input += chunk;
46
+ }
47
+ });
48
+
49
+ process.stdin.on('end', async () => {
50
+ try {
51
+ const hookInput = JSON.parse(input);
52
+ let projectDir = hookInput.cwd || process.cwd();
53
+
54
+ // Windows path fix
55
+ if (process.platform === 'win32' && /^\/[a-z]\//.test(projectDir)) {
56
+ projectDir = projectDir[1].toUpperCase() + ':' + projectDir.slice(2);
57
+ }
58
+
59
+ const succDir = path.join(projectDir, '.succ');
60
+
61
+ // Skip if succ is not initialized in this project
62
+ if (!fs.existsSync(succDir)) {
63
+ process.exit(0);
64
+ }
65
+
66
+ // Load config settings
67
+ let includeCoAuthoredBy = true; // default: true
68
+ let communicationAutoAdapt = true; // default: true
69
+ let communicationTrackHistory = false; // default: false
70
+ const configPaths = [
71
+ path.join(succDir, 'config.json'),
72
+ path.join(require('os').homedir(), '.succ', 'config.json'),
73
+ ];
74
+ for (const configPath of configPaths) {
75
+ if (fs.existsSync(configPath)) {
76
+ try {
77
+ const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
78
+ if (config.includeCoAuthoredBy === false) {
79
+ includeCoAuthoredBy = false;
80
+ }
81
+ if (config.communicationAutoAdapt === false) {
82
+ communicationAutoAdapt = false;
83
+ }
84
+ if (config.communicationTrackHistory === true) {
85
+ communicationTrackHistory = true;
86
+ }
87
+ break;
88
+ } catch {
89
+ // Ignore parse errors
90
+ }
91
+ }
92
+ }
93
+
94
+ const contextParts = [];
95
+ const projectName = path.basename(projectDir);
96
+
97
+ // Git Context removed - Claude Code provides native git integration
98
+
99
+ // succ MCP Tools Reference (hybrid: XML wrapper + markdown examples)
100
+ contextParts.push(`<succ-tools>
101
+ <critical>
102
+ ⚠️ ALWAYS pass project_path="${projectDir}" to ALL succ_* tool calls.
103
+ Without it, succ works in global-only mode and can't access project data.
104
+
105
+ ⚠️ ALWAYS use succ tools for knowledge retrieval:
106
+ - User says "brain", "docs", "vault", "spec" → **succ_search**
107
+ - User says "remember", "decided", "learned", "how did we" → **succ_recall**
108
+ - User says "where is", "find code", "implementation" → **succ_search_code**
109
+
110
+ ❌ NEVER use Glob/Grep to search .succ/brain/ — use succ_search instead
111
+ ❌ NEVER use Grep to find memories — use succ_recall instead
112
+ ❌ NEVER use Read to browse brain vault — use succ_search first
113
+
114
+ 📦 MEMORY — two-tier system:
115
+ - **MEMORY.md** = hot cache (~200 lines, auto-loaded). Project structure, current phase, critical gotchas.
116
+ - **succ_remember** = long-term memory. Unlimited, searchable, tagged, scored. The REAL knowledge store.
117
+ - Rule: learn something → succ_remember. Update MEMORY.md only if it changes the project's core summary.
118
+ </critical>
119
+
120
+ <decision-guide>
121
+ | Question | Tool |
122
+ |----------|------|
123
+ | How did we solve X? | succ_recall |
124
+ | What do docs say about X? | succ_search |
125
+ | Where is X implemented? | succ_search_code |
126
+ | Find functions/classes named X | succ_search_code symbol_type="function" |
127
+ | Find code matching regex | succ_search_code regex="pattern" |
128
+ | What symbols are in file X? | succ_symbols file="X" |
129
+ | Fetch web page content | succ_fetch |
130
+ | Find regex pattern in code | Grep |
131
+ | List files by pattern | Glob |
132
+ </decision-guide>
133
+
134
+ <search note="All use hybrid semantic + BM25. Recent memories rank higher.">
135
+ **succ_recall** query="auth flow" [tags=["decision"]] [since="last week"] [limit=5] [as_of_date="2024-06-01"]
136
+ → Search memories (decisions, learnings, patterns)
137
+
138
+ **succ_search** query="API design" [limit=5] [threshold=0.2] [output="full|lean"]
139
+ → Search brain vault (.succ/brain/ docs)
140
+
141
+ **succ_search_code** query="handleAuth" [limit=5] [regex="pattern"] [symbol_type="function|method|class|interface|type_alias"] [output="full|lean|signatures"]
142
+ → Search source code (hybrid BM25 + semantic, with AST symbol metadata)
143
+
144
+ **succ_symbols** file="src/auth.ts" [type="all|function|method|class|interface|type_alias"]
145
+ → Extract AST symbols via tree-sitter (13 languages)
146
+ </search>
147
+
148
+ <memory hint="Use valid_until for sprint goals, temp workarounds; valid_from for scheduled changes">
149
+ **succ_remember** content="..." [tags=["decision"]] [type="learning"] [global=true] [valid_from="2025-03-01"] [valid_until="30d"]
150
+ → Types: observation, decision, learning, error, pattern, dead_end
151
+
152
+ **succ_forget** [id=42] [older_than="30d"] [tag="temp"]
153
+ → Delete by ID, age, or tag
154
+
155
+ **succ_dead_end** approach="..." why_failed="..." [context="..."] [tags=["debug"]]
156
+ → Record failed approach (boosted in recall to prevent retrying)
157
+ </memory>
158
+
159
+ <ops>
160
+ **succ_index_file** file="doc.md" [force=true] — index doc for succ_search
161
+ **succ_index_code_file** file="src/auth.ts" [force=true] — index code for succ_search_code
162
+ **succ_reindex** — detect stale/deleted files, re-index modified, clean deleted
163
+ **succ_analyze_file** file="src/auth.ts" [mode="claude|api"] — generate brain vault doc
164
+ **succ_link** action="create|delete|show|graph|auto|enrich|proximity|communities|centrality|export" [source_id=1] [target_id=2]
165
+ **succ_explore** memory_id=42 [depth=2] — traverse knowledge graph
166
+ </ops>
167
+
168
+ <status>
169
+ **succ_status** — indexed docs/code, memories, daemon status
170
+ **succ_stats** — token savings from RAG vs full-file reads
171
+ **succ_score** — AI-readiness score
172
+ **succ_config** / **succ_config_set** key="..." value="..." [scope="global|project"]
173
+ **succ_checkpoint** action="create|list" [compress=true]
174
+ </status>
175
+
176
+ <prd hint="PRD pipeline — generate, track, execute with quality gates">
177
+ **succ_prd_generate** description="..." [gates="test:npm test,lint:eslint ."] [auto_parse=true]
178
+ **succ_prd_list** / **succ_prd_status** [prd_id="prd_xxx"] / **succ_prd_run** [resume=true] [mode="loop|team"]
179
+ **succ_prd_export** [prd_id="prd_xxx"] — Obsidian Mermaid export
180
+ </prd>
181
+
182
+ <web-search hint="Perplexity Sonar via OpenRouter. Requires OPENROUTER_API_KEY.">
183
+ **succ_quick_search** query="..." — cheap & fast, simple facts
184
+ **succ_web_search** query="..." [model="perplexity/sonar-pro"] — quality search, complex queries
185
+ **succ_deep_research** query="..." — multi-step research (30-120s, 30+ sources)
186
+ **succ_web_search_history** [tool_name="..."] [limit=20] — past searches and costs
187
+ </web-search>
188
+
189
+ <debug hint="Structured debugging with hypothesis testing. Sessions in .succ/debugs/.">
190
+ **succ_debug** action="create|hypothesis|instrument|result|resolve|abandon|status|list|log|show_log|detect_lang|gen_log"
191
+ → Create session, add hypotheses, instrument code, confirm/refute, resolve with root cause
192
+ </debug>
193
+ </succ-tools>`);
194
+
195
+ // succ Agents Reference - reminds AI about available subagents
196
+ contextParts.push(`<succ-agents hint="Use Task tool with subagent_type to launch these. All have semantic search + memories + brain vault.">
197
+
198
+ **MANDATORY: Use succ agents instead of built-in agents.**
199
+ | Task | Use (succ) | NEVER use (built-in) |
200
+ |------|------------|----------------------|
201
+ | Codebase exploration | succ-explore | Explore agent |
202
+ | Implementation planning | succ-plan | Plan agent |
203
+ | Multi-step tasks, research | succ-general | general-purpose agent |
204
+ | Code review | succ-code-reviewer | built-in review |
205
+ | Pre-commit review | succ-diff-reviewer | manual diff reading |
206
+ | Web page fetch | succ_fetch | WebFetch |
207
+ | Web search | succ_quick_search / succ_web_search | WebSearch / Brave |
208
+
209
+ Direct file reads (Read/Grep) are fine when you know the exact path — for discovery, always succ agents.
210
+
211
+ **Output rule:** Key findings → \`succ_remember\`. Research → \`.succ/brain/\` as Obsidian markdown → \`succ_index_file\`.
212
+
213
+ **Proactive agents** (run without being asked):
214
+ | Agent | When |
215
+ |-------|------|
216
+ | succ-memory-curator | After long sessions — consolidates, dedupes |
217
+ | succ-session-handoff-orchestrator | At session end — summary, briefing, undocumented decisions |
218
+ | succ-pattern-detective | After multiple bug fixes — surfaces recurring patterns |
219
+ </succ-agents>`);
220
+
221
+ // Commit Guidelines (strict order) - only if includeCoAuthoredBy is enabled
222
+ if (includeCoAuthoredBy) {
223
+ contextParts.push(`<commit-format>
224
+ Footer order (succ always LAST):
225
+ 1. Generated with [Claude Code]
226
+ 2. via [Happy] (if used)
227
+ 3. powered by [succ](https://succ.ai) ← ADD THIS LINE
228
+
229
+ Co-Authored-By order (succ always LAST):
230
+ 1. Co-Authored-By: Claude <noreply@anthropic.com>
231
+ 2. Co-Authored-By: Happy <yesreply@happy.engineering> (if used)
232
+ 3. Co-Authored-By: succ <mindpalace@succ.ai> ← ADD THIS LINE
233
+ </commit-format>`);
234
+ }
235
+
236
+ // Pre-commit review + commit guidelines are now handled by PreToolUse hook (succ-pre-tool.cjs)
237
+ // They inject context at the exact moment of git commit, not at session start
238
+
239
+ // Soul Document
240
+ const soulPaths = [
241
+ path.join(succDir, 'soul.md'),
242
+ path.join(succDir, 'SOUL.md'),
243
+ path.join(projectDir, 'soul.md'),
244
+ path.join(projectDir, 'SOUL.md'),
245
+ ];
246
+
247
+ for (const soulPath of soulPaths) {
248
+ if (fs.existsSync(soulPath)) {
249
+ let soulContent = fs.readFileSync(soulPath, 'utf8').trim();
250
+ if (soulContent) {
251
+ // Strip Adaptation rules if auto-adapt is disabled
252
+ if (!communicationAutoAdapt) {
253
+ soulContent = soulContent.replace(/### Adaptation[\s\S]*?(?=\n## |\n---|\s*$)/, '');
254
+ }
255
+ // Inject vault tracking hint if enabled (agent handles the actual work)
256
+ if (communicationTrackHistory && communicationAutoAdapt) {
257
+ soulContent += `\n\n### Vault Tracking\n\ncommunicationTrackHistory is enabled. The succ-style-tracker agent will create brain vault entries in .succ/brain/communication/ when updating preferences.`;
258
+ }
259
+ contextParts.push('<soul>\n' + soulContent + '\n</soul>');
260
+ }
261
+ break;
262
+ }
263
+ }
264
+
265
+ // Architecture / Brain Vault — inline overview + categorized doc index
266
+ const brainDir = path.join(succDir, 'brain');
267
+ if (fs.existsSync(brainDir)) {
268
+ try {
269
+ const archParts = [];
270
+
271
+ // Phase 1: Find and inline Architecture Overview (compact extract)
272
+ const knowledgeDir = path.join(brainDir, 'knowledge');
273
+ if (fs.existsSync(knowledgeDir)) {
274
+ const archFiles = fs.readdirSync(knowledgeDir)
275
+ .filter(f => /architect/i.test(f) && f.endsWith('.md'))
276
+ .sort(); // 00_Architecture.md first
277
+ if (archFiles.length > 0) {
278
+ const archContent = fs.readFileSync(path.join(knowledgeDir, archFiles[0]), 'utf8');
279
+ // Strip frontmatter
280
+ const body = archContent.replace(/^---[\s\S]*?\n---\s*\n/, '');
281
+ // Extract from start to second "---" or "## Tech Stack" — whichever comes first
282
+ // This gives us Overview + Core Mission (~15-20 lines)
283
+ const overviewEnd = body.search(/\n---\n|\n## Tech Stack|\n## Directory/);
284
+ const overview = overviewEnd > 0 ? body.slice(0, overviewEnd).trim() : body.slice(0, 1500).trim();
285
+ if (overview) {
286
+ archParts.push(overview);
287
+ }
288
+ }
289
+ }
290
+
291
+ // Phase 2: Collect remaining docs grouped by category
292
+ const scanDirs = [
293
+ { dir: 'knowledge', label: 'Knowledge & Research' },
294
+ { dir: 'project', label: 'Project' },
295
+ ];
296
+ const docGroups = {};
297
+
298
+ for (const { dir, label } of scanDirs) {
299
+ const fullDir = path.join(brainDir, dir);
300
+ if (!fs.existsSync(fullDir)) continue;
301
+
302
+ const files = fs.readdirSync(fullDir, { withFileTypes: true });
303
+ for (const entry of files) {
304
+ if (entry.isDirectory()) continue;
305
+ if (!entry.name.endsWith('.md')) continue;
306
+
307
+ const filePath = path.join(fullDir, entry.name);
308
+ const stat = fs.statSync(filePath);
309
+ if (stat.size < 2048) continue;
310
+ // Skip architecture files (already inlined above)
311
+ if (/architect/i.test(entry.name)) continue;
312
+
313
+ // Read first 500 bytes for frontmatter/H1
314
+ const fd = fs.openSync(filePath, 'r');
315
+ const buf = Buffer.alloc(500);
316
+ fs.readSync(fd, buf, 0, 500, 0);
317
+ fs.closeSync(fd);
318
+ const head = buf.toString('utf8');
319
+
320
+ let description = '';
321
+ const fmMatch = head.match(/^---\s*\n([\s\S]*?)\n---/);
322
+ if (fmMatch) {
323
+ const descMatch = fmMatch[1].match(/description:\s*["']?([^"'\n]+)/);
324
+ if (descMatch) description = descMatch[1].trim();
325
+ }
326
+ if (!description) {
327
+ const h1Match = head.match(/^#\s+(.+)/m);
328
+ if (h1Match) description = h1Match[1].trim();
329
+ }
330
+
331
+ if (description) {
332
+ if (!docGroups[label]) docGroups[label] = [];
333
+ docGroups[label].push(`${entry.name}: ${description}`);
334
+ }
335
+ }
336
+ }
337
+
338
+ // Phase 3: Format grouped docs
339
+ const groupLines = [];
340
+ for (const [label, docs] of Object.entries(docGroups)) {
341
+ groupLines.push(`**${label}:** ${docs.join(' | ')}`);
342
+ }
343
+ if (groupLines.length > 0) {
344
+ archParts.push(groupLines.join('\n'));
345
+ }
346
+
347
+ if (archParts.length > 0) {
348
+ contextParts.push(`<architecture hint="Use succ_search to read full docs">\n${archParts.join('\n\n')}\n</architecture>`);
349
+ }
350
+ } catch {
351
+ // Brain vault scan failed, not critical
352
+ }
353
+ }
354
+
355
+ // Check if this is a compact event (after /compact)
356
+ const isCompactEvent = hookInput.source === 'compact';
357
+
358
+ log(succDir, `source=${hookInput.source}, isCompact=${isCompactEvent}, session=${hookInput.session_id || 'unknown'}`);
359
+
360
+ // Precomputed Context from previous session (only on fresh start, not compact)
361
+ if (!isCompactEvent) {
362
+ const precomputedContextPath = path.join(succDir, 'next-session-context.md');
363
+ if (fs.existsSync(precomputedContextPath)) {
364
+ try {
365
+ const precomputedContent = fs.readFileSync(precomputedContextPath, 'utf8').trim();
366
+ if (precomputedContent) {
367
+ contextParts.push('<previous-session>\n' + precomputedContent + '\n</previous-session>');
368
+
369
+ // Archive the file after loading
370
+ const archiveDir = path.join(succDir, '.context-archive');
371
+ if (!fs.existsSync(archiveDir)) {
372
+ fs.mkdirSync(archiveDir, { recursive: true });
373
+ }
374
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
375
+ const archivePath = path.join(archiveDir, `context-${timestamp}.md`);
376
+ fs.renameSync(precomputedContextPath, archivePath);
377
+
378
+ // Cleanup old archives (keep last 10)
379
+ try {
380
+ const archives = fs.readdirSync(archiveDir)
381
+ .filter(f => f.startsWith('context-') && f.endsWith('.md'))
382
+ .sort()
383
+ .reverse();
384
+ for (const oldArchive of archives.slice(10)) {
385
+ fs.unlinkSync(path.join(archiveDir, oldArchive));
386
+ }
387
+ } catch {
388
+ // Cleanup failed, not critical
389
+ }
390
+ }
391
+ } catch {
392
+ // Ignore errors
393
+ }
394
+ }
395
+ }
396
+
397
+ // Helper to get daemon port
398
+ const tmpDir = path.join(succDir, '.tmp');
399
+ const portFile = path.join(tmpDir, 'daemon.port');
400
+
401
+ const getDaemonPort = () => {
402
+ try {
403
+ if (fs.existsSync(portFile)) {
404
+ return parseInt(fs.readFileSync(portFile, 'utf8').trim(), 10);
405
+ }
406
+ } catch {}
407
+ return null;
408
+ };
409
+
410
+ const checkDaemon = async (port) => {
411
+ try {
412
+ const response = await fetch(`http://127.0.0.1:${port}/health`, {
413
+ signal: AbortSignal.timeout(2000),
414
+ });
415
+ const data = await response.json();
416
+ return data?.status === 'ok';
417
+ } catch {
418
+ return false;
419
+ }
420
+ };
421
+
422
+ const startDaemon = () => {
423
+ const servicePath = path.join(projectDir, 'dist', 'daemon', 'service.js');
424
+ if (fs.existsSync(servicePath)) {
425
+ const daemon = spawn(process.execPath, ['--no-warnings', '--no-deprecation', servicePath], {
426
+ cwd: projectDir,
427
+ detached: true,
428
+ stdio: 'ignore',
429
+ windowsHide: true,
430
+ env: { ...process.env, NODE_OPTIONS: '' },
431
+ });
432
+ daemon.unref();
433
+ return true;
434
+ }
435
+ return false;
436
+ };
437
+
438
+ // Ensure daemon is running and get port
439
+ let daemonPort = getDaemonPort();
440
+ if (!daemonPort || !(await checkDaemon(daemonPort))) {
441
+ startDaemon();
442
+ // Wait for daemon to start (max 3 seconds)
443
+ for (let i = 0; i < 30; i++) {
444
+ await new Promise(r => setTimeout(r, 100));
445
+ daemonPort = getDaemonPort();
446
+ if (daemonPort && await checkDaemon(daemonPort)) {
447
+ break;
448
+ }
449
+ }
450
+ }
451
+
452
+ // Skip for service sessions (reflection subagents)
453
+ const isServiceSession = process.env.SUCC_SERVICE_SESSION === '1';
454
+
455
+ // IMPORTANT: Create compact-pending flag FIRST (before any slow operations)
456
+ // This ensures fallback context is available even if hook times out during briefing
457
+ // Hook timeout is 10s, briefing can take 60s+ → would block flag creation
458
+ if (isCompactEvent && !isServiceSession) {
459
+ const compactPendingFile = path.join(succDir, '.tmp', 'compact-pending');
460
+ try {
461
+ if (!fs.existsSync(path.join(succDir, '.tmp'))) {
462
+ fs.mkdirSync(path.join(succDir, '.tmp'), { recursive: true });
463
+ }
464
+ // Store the full context that should be injected (without briefing, that comes later)
465
+ const contextForFallback = contextParts.join('\n\n');
466
+ fs.writeFileSync(compactPendingFile, contextForFallback, 'utf8');
467
+ log(succDir, `Created compact-pending flag (${contextForFallback.length} chars)`);
468
+ } catch (err) {
469
+ log(succDir, `Failed to create compact-pending: ${err.message || err}`);
470
+ }
471
+ }
472
+
473
+ // Generate compact briefing (slow operation - may timeout)
474
+ // Even if this times out, we have the compact-pending fallback above
475
+ if (isCompactEvent && daemonPort && hookInput.transcript_path && !isServiceSession) {
476
+ log(succDir, `Generating compact briefing for ${hookInput.transcript_path}`);
477
+ try {
478
+ const response = await fetch(`http://127.0.0.1:${daemonPort}/api/briefing`, {
479
+ method: 'POST',
480
+ headers: { 'Content-Type': 'application/json' },
481
+ body: JSON.stringify({ transcript_path: hookInput.transcript_path }),
482
+ signal: AbortSignal.timeout(8000), // 8s timeout - must complete before 10s hook timeout
483
+ });
484
+ if (response.ok) {
485
+ const result = await response.json();
486
+ if (result.success && result.briefing) {
487
+ contextParts.push(`<session-briefing source="compact">\n${result.briefing}\n</session-briefing>`);
488
+ log(succDir, `Briefing generated: ${result.briefing.length} chars`);
489
+ } else {
490
+ log(succDir, `Briefing failed: ${result.error || 'no briefing returned'}`);
491
+ }
492
+ } else {
493
+ log(succDir, `Briefing API error: ${response.status} ${response.statusText}`);
494
+ }
495
+ } catch (err) {
496
+ log(succDir, `Briefing exception: ${err.message || err}`);
497
+ // Briefing generation failed, continue without it
498
+ }
499
+ }
500
+
501
+ // Pinned + recent memories via daemon API (only on fresh start, compact uses briefing instead)
502
+ if (daemonPort && !isCompactEvent) {
503
+ const pinnedIds = new Set();
504
+
505
+ // Phase 1: Pinned memories (Tier 1 — correction_count >= 2 or is_invariant)
506
+ // Filter: skip observations (noisy subagent reports), limit to top 10 by priority_score
507
+ try {
508
+ const response = await fetch(`http://127.0.0.1:${daemonPort}/api/pinned`, {
509
+ signal: AbortSignal.timeout(3000),
510
+ });
511
+ if (response.ok) {
512
+ const data = await response.json();
513
+ const allPinned = data.results || [];
514
+ // Display only non-observation pinned, sorted by priority, top 10
515
+ const displayPinned = allPinned
516
+ .filter((m) => m.type !== 'observation')
517
+ .sort((a, b) => (b.priority_score || 0) - (a.priority_score || 0))
518
+ .slice(0, 10);
519
+ if (displayPinned.length > 0) {
520
+ // Track ALL pinned IDs for dedup with recent (including filtered-out observations)
521
+ for (const m of allPinned) pinnedIds.add(m.id);
522
+ const lines = displayPinned.map((m) => {
523
+ const preview = m.content.slice(0, 100).replace(/\n/g, ' ');
524
+ const type = m.type || 'obs';
525
+ const reason = m.is_invariant ? 'invariant' : `corrected x${m.correction_count}`;
526
+ return `#${m.id} [${type}] (${reason}) ${preview}${m.content.length > 100 ? '...' : ''}`;
527
+ });
528
+ contextParts.push(`<pinned-memories count="${displayPinned.length}" total="${allPinned.length}" hint="Tier 1: always loaded, high confidence">\n${lines.join('\n')}\n</pinned-memories>`);
529
+ }
530
+ }
531
+ } catch {
532
+ // pinned memories not available
533
+ }
534
+
535
+ // Phase 2: Recent memories (excluding pinned to avoid duplication)
536
+ try {
537
+ const response = await fetch(`http://127.0.0.1:${daemonPort}/api/recall`, {
538
+ method: 'POST',
539
+ headers: { 'Content-Type': 'application/json' },
540
+ body: JSON.stringify({ query: '', limit: 5 }),
541
+ signal: AbortSignal.timeout(3000),
542
+ });
543
+ if (response.ok) {
544
+ const data = await response.json();
545
+ const memories = (data.results || []).filter((m) => !pinnedIds.has(m.id));
546
+ if (memories.length > 0) {
547
+ const lines = memories.map((m) => {
548
+ const preview = m.content.slice(0, 50).replace(/\n/g, ' ');
549
+ const type = m.type || 'obs';
550
+ return `#${m.id} [${type}] ${preview}${m.content.length > 50 ? '...' : ''}`;
551
+ });
552
+ contextParts.push(`<recent-memories count="${memories.length}" hint="Use succ_recall for details">\n${lines.join('\n')}\n</recent-memories>`);
553
+ }
554
+ }
555
+ } catch {
556
+ // memories not available
557
+ }
558
+ }
559
+
560
+ // Knowledge base stats via daemon API
561
+ if (daemonPort) {
562
+ try {
563
+ const response = await fetch(`http://127.0.0.1:${daemonPort}/api/status`, {
564
+ signal: AbortSignal.timeout(3000),
565
+ });
566
+ if (response.ok) {
567
+ const status = await response.json();
568
+ const docs = status.documents || 0;
569
+ const mems = status.memories || 0;
570
+ const code = status.codeChunks || 0;
571
+ if (docs > 0 || mems > 0 || code > 0) {
572
+ contextParts.push(`<knowledge-base docs="${docs}" memories="${mems}" code-chunks="${code}" />`);
573
+ }
574
+ }
575
+ } catch {
576
+ // status not available
577
+ }
578
+ }
579
+
580
+ // Output context
581
+ if (contextParts.length > 0) {
582
+ const additionalContext = `<session project="${projectName}">\n${contextParts.join('\n\n')}\n</session>`;
583
+ const output = {
584
+ hookSpecificOutput: {
585
+ hookEventName: 'SessionStart',
586
+ additionalContext
587
+ }
588
+ };
589
+ console.log(JSON.stringify(output));
590
+ log(succDir, `Output additionalContext: ${additionalContext.length} chars, parts=${contextParts.length}`);
591
+ } else {
592
+ log(succDir, `No context parts to output`);
593
+ }
594
+
595
+ // Register session with daemon
596
+ if (daemonPort) {
597
+ const transcriptPath = hookInput.transcript_path || '';
598
+ const sessionId = transcriptPath ? path.basename(transcriptPath, '.jsonl') : `session-${Date.now()}`;
599
+ // isServiceSession already defined above
600
+
601
+ try {
602
+ await fetch(`http://127.0.0.1:${daemonPort}/api/session/register`, {
603
+ method: 'POST',
604
+ headers: { 'Content-Type': 'application/json' },
605
+ body: JSON.stringify({ session_id: sessionId, transcript_path: transcriptPath, is_service: isServiceSession }),
606
+ signal: AbortSignal.timeout(3000),
607
+ });
608
+ } catch {
609
+ // Registration failed, continue anyway
610
+ }
611
+ }
612
+
613
+ process.exit(0);
614
+
615
+ } catch (err) {
616
+ process.exit(0);
617
+ }
618
+ });