@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,865 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import os from 'os';
4
+ import { fileURLToPath } from 'url';
5
+ import { select, input, password } from '@inquirer/prompts';
6
+ import ora from 'ora';
7
+ import isInstalledGlobally from 'is-installed-globally';
8
+ import { getProjectRoot, getSuccDir, isOnboardingCompleted, markOnboardingCompleted, } from '../lib/config.js';
9
+ import { runStaticWizard, runAiOnboarding } from '../lib/onboarding/index.js';
10
+ import { logWarn } from '../lib/fault-logger.js';
11
+ import { getSoulTemplate, getLearningsTemplate, getContextRulesTemplate, getInboxMocTemplate, getProjectMocTemplate, getDecisionsMocTemplate, getFeaturesMocTemplate, getFilesMocTemplate, getTechnicalMocTemplate, getSystemsMocTemplate, getStrategyMocTemplate, getSessionsMocTemplate, getKnowledgeMocTemplate, getArchiveMocTemplate, getPrdMocTemplate, getCommunicationMocTemplate, } from './init-templates.js';
12
+ // Get the directory where succ is installed
13
+ const __filename = fileURLToPath(import.meta.url);
14
+ const __dirname = path.dirname(__filename);
15
+ const SUCC_PACKAGE_DIR = path.resolve(__dirname, '..', '..');
16
+ export async function init(options = {}) {
17
+ const projectRoot = getProjectRoot();
18
+ const succDir = getSuccDir();
19
+ const isInteractive = !options.yes && process.stdout.isTTY && process.stdin.isTTY;
20
+ const verbose = options.verbose || false;
21
+ // Determine if running in global mode
22
+ // --global flag forces global mode (for testing), otherwise auto-detect
23
+ const useGlobalHooks = options.global || isInstalledGlobally;
24
+ // Check if already initialized
25
+ if (fs.existsSync(path.join(succDir, 'succ.db')) && !options.force) {
26
+ console.log('succ is already initialized. Use --force to reinitialize.');
27
+ return;
28
+ }
29
+ // Create directories - flat brain vault structure (no numbered prefixes)
30
+ const projectName = path.basename(projectRoot);
31
+ const dirs = [
32
+ succDir,
33
+ path.join(succDir, 'brain'),
34
+ path.join(succDir, 'brain', '.meta'),
35
+ path.join(succDir, 'brain', 'inbox'),
36
+ path.join(succDir, 'brain', 'project', 'decisions'),
37
+ path.join(succDir, 'brain', 'project', 'features'),
38
+ path.join(succDir, 'brain', 'project', 'files'),
39
+ path.join(succDir, 'brain', 'project', 'technical'),
40
+ path.join(succDir, 'brain', 'project', 'systems'),
41
+ path.join(succDir, 'brain', 'project', 'strategy'),
42
+ path.join(succDir, 'brain', 'project', 'sessions'),
43
+ path.join(succDir, 'brain', 'knowledge'),
44
+ path.join(succDir, 'brain', 'archive'),
45
+ path.join(succDir, 'brain', 'prd'),
46
+ path.join(succDir, 'brain', 'communication'),
47
+ path.join(succDir, 'brain', 'reflections'),
48
+ // hooks directory only created for local development (not global install)
49
+ ...(useGlobalHooks ? [] : [path.join(succDir, 'hooks')]),
50
+ ];
51
+ // Start spinner for directory creation
52
+ const spinner = ora('Initializing succ...').start();
53
+ for (const dir of dirs) {
54
+ if (!fs.existsSync(dir)) {
55
+ fs.mkdirSync(dir, { recursive: true });
56
+ }
57
+ }
58
+ // Helper to log only in verbose mode
59
+ const log = (msg) => {
60
+ if (verbose) {
61
+ spinner.stop();
62
+ console.log(` ${msg}`);
63
+ spinner.start('Initializing succ...');
64
+ }
65
+ };
66
+ // Note: brain/index.md removed - not used, brain vault has MOC files instead
67
+ // Create .meta/learnings.md - rich learnings file with templates
68
+ const learningsPath = path.join(succDir, 'brain', '.meta', 'learnings.md');
69
+ if (!fs.existsSync(learningsPath)) {
70
+ fs.writeFileSync(learningsPath, getLearningsTemplate(projectName));
71
+ log('Created brain/.meta/learnings.md');
72
+ }
73
+ // Create .meta/context-rules.md
74
+ const contextRulesPath = path.join(succDir, 'brain', '.meta', 'context-rules.md');
75
+ if (!fs.existsSync(contextRulesPath)) {
76
+ fs.writeFileSync(contextRulesPath, getContextRulesTemplate(projectName));
77
+ log('Created brain/.meta/context-rules.md');
78
+ }
79
+ // Create MOC (Map of Content) files for each major folder
80
+ const mocFiles = [
81
+ { path: path.join(succDir, 'brain', 'inbox', 'Inbox.md'), content: getInboxMocTemplate() },
82
+ {
83
+ path: path.join(succDir, 'brain', 'project', `${projectName}.md`),
84
+ content: getProjectMocTemplate(projectName),
85
+ },
86
+ {
87
+ path: path.join(succDir, 'brain', 'project', 'decisions', 'Decisions.md'),
88
+ content: getDecisionsMocTemplate(projectName),
89
+ },
90
+ {
91
+ path: path.join(succDir, 'brain', 'project', 'features', 'Features.md'),
92
+ content: getFeaturesMocTemplate(projectName),
93
+ },
94
+ {
95
+ path: path.join(succDir, 'brain', 'project', 'files', 'Files.md'),
96
+ content: getFilesMocTemplate(projectName),
97
+ },
98
+ {
99
+ path: path.join(succDir, 'brain', 'project', 'technical', 'Technical.md'),
100
+ content: getTechnicalMocTemplate(projectName),
101
+ },
102
+ {
103
+ path: path.join(succDir, 'brain', 'project', 'systems', 'Systems.md'),
104
+ content: getSystemsMocTemplate(projectName),
105
+ },
106
+ {
107
+ path: path.join(succDir, 'brain', 'project', 'strategy', 'Strategy.md'),
108
+ content: getStrategyMocTemplate(projectName),
109
+ },
110
+ {
111
+ path: path.join(succDir, 'brain', 'project', 'sessions', 'Sessions.md'),
112
+ content: getSessionsMocTemplate(projectName),
113
+ },
114
+ {
115
+ path: path.join(succDir, 'brain', 'knowledge', 'Knowledge.md'),
116
+ content: getKnowledgeMocTemplate(),
117
+ },
118
+ {
119
+ path: path.join(succDir, 'brain', 'archive', 'Archive.md'),
120
+ content: getArchiveMocTemplate(),
121
+ },
122
+ {
123
+ path: path.join(succDir, 'brain', 'prd', 'PRD.md'),
124
+ content: getPrdMocTemplate(),
125
+ },
126
+ {
127
+ path: path.join(succDir, 'brain', 'communication', 'Communication.md'),
128
+ content: getCommunicationMocTemplate(),
129
+ },
130
+ ];
131
+ for (const moc of mocFiles) {
132
+ if (!fs.existsSync(moc.path)) {
133
+ fs.writeFileSync(moc.path, moc.content);
134
+ log(`Created ${path.relative(projectRoot, moc.path)}`);
135
+ }
136
+ }
137
+ // Create soul.md template
138
+ const soulPath = path.join(succDir, 'soul.md');
139
+ if (!fs.existsSync(soulPath)) {
140
+ fs.writeFileSync(soulPath, getSoulTemplate());
141
+ log('Created soul.md');
142
+ }
143
+ // Create hooks in project only for local development
144
+ // Global install uses hooks from the succ package directory
145
+ if (!useGlobalHooks) {
146
+ // Copy hooks from package hooks/ directory (source of truth)
147
+ // Note: succ-idle-reflection.cjs and succ-idle-watcher.cjs removed -
148
+ // all idle operations now handled by unified daemon
149
+ const hooksToCreate = [
150
+ 'succ-session-start.cjs',
151
+ 'succ-session-end.cjs',
152
+ 'succ-stop-reflection.cjs',
153
+ 'succ-user-prompt.cjs',
154
+ 'succ-post-tool.cjs',
155
+ 'succ-pre-tool.cjs',
156
+ ];
157
+ for (const hookFile of hooksToCreate) {
158
+ const destPath = path.join(succDir, 'hooks', hookFile);
159
+ const srcPath = path.join(SUCC_PACKAGE_DIR, 'hooks', hookFile);
160
+ if (!fs.existsSync(destPath) || options.force) {
161
+ // Try to copy from package hooks/ directory (source of truth)
162
+ if (fs.existsSync(srcPath)) {
163
+ fs.copyFileSync(srcPath, destPath);
164
+ log(options.force && fs.existsSync(destPath)
165
+ ? `Updated hooks/${hookFile}`
166
+ : `Created hooks/${hookFile}`);
167
+ }
168
+ else {
169
+ // Fallback to inline templates for backwards compatibility
170
+ const hookContent = getHookContent(hookFile);
171
+ if (hookContent) {
172
+ fs.writeFileSync(destPath, hookContent);
173
+ log(options.force && fs.existsSync(destPath)
174
+ ? `Updated hooks/${hookFile}`
175
+ : `Created hooks/${hookFile}`);
176
+ }
177
+ }
178
+ }
179
+ }
180
+ }
181
+ // Create or merge settings.json in .claude/ (Claude Code looks for it there)
182
+ const claudeDir = path.join(projectRoot, '.claude');
183
+ if (!fs.existsSync(claudeDir)) {
184
+ fs.mkdirSync(claudeDir, { recursive: true });
185
+ }
186
+ // Copy succ agents to .claude/agents/ for Claude Code subagent support
187
+ const agentsDir = path.join(claudeDir, 'agents');
188
+ if (!fs.existsSync(agentsDir)) {
189
+ fs.mkdirSync(agentsDir, { recursive: true });
190
+ }
191
+ // Agent files to install
192
+ const agentFiles = [
193
+ // Original agents
194
+ 'succ-memory-curator.md',
195
+ 'succ-knowledge-indexer.md',
196
+ 'succ-deep-search.md',
197
+ 'succ-checkpoint-manager.md',
198
+ 'succ-session-reviewer.md',
199
+ // New agents
200
+ 'succ-session-handoff-orchestrator.md',
201
+ 'succ-memory-health-monitor.md',
202
+ 'succ-pattern-detective.md',
203
+ 'succ-readiness-improver.md',
204
+ 'succ-knowledge-mapper.md',
205
+ 'succ-quality-improvement-coach.md',
206
+ 'succ-decision-auditor.md',
207
+ 'succ-context-optimizer.md',
208
+ 'succ-explore.md',
209
+ 'succ-plan.md',
210
+ 'succ-code-reviewer.md',
211
+ 'succ-diff-reviewer.md',
212
+ 'succ-debug.md',
213
+ 'succ-style-tracker.md',
214
+ 'succ-general.md',
215
+ ];
216
+ for (const agentFile of agentFiles) {
217
+ const destPath = path.join(agentsDir, agentFile);
218
+ const srcPath = path.join(SUCC_PACKAGE_DIR, 'agents', agentFile);
219
+ if (!fs.existsSync(destPath) || options.force) {
220
+ if (fs.existsSync(srcPath)) {
221
+ fs.copyFileSync(srcPath, destPath);
222
+ log(options.force && fs.existsSync(destPath)
223
+ ? `Updated agents/${agentFile}`
224
+ : `Created agents/${agentFile}`);
225
+ }
226
+ }
227
+ }
228
+ const settingsPath = path.join(claudeDir, 'settings.json');
229
+ const settingsExisted = fs.existsSync(settingsPath);
230
+ if (!settingsExisted || options.force) {
231
+ // Determine hooks path based on installation mode
232
+ // Global install: hooks are in the succ package directory
233
+ // Local dev: hooks are copied to .succ/hooks/ in the project
234
+ const hooksPath = useGlobalHooks
235
+ ? path.join(SUCC_PACKAGE_DIR, 'hooks').replace(/\\/g, '/')
236
+ : '.succ/hooks';
237
+ if (verbose) {
238
+ console.log(` Installation mode: ${useGlobalHooks ? 'global' : 'local development'}`);
239
+ console.log(` Hooks path: ${hooksPath}`);
240
+ }
241
+ // Define succ hooks
242
+ // Hook files prefixed with "succ-" to avoid conflicts with other hooks
243
+ const succHooks = {
244
+ SessionStart: [
245
+ {
246
+ hooks: [
247
+ {
248
+ type: 'command',
249
+ command: `node --no-warnings --no-deprecation "${hooksPath}/succ-session-start.cjs"`,
250
+ timeout: 10,
251
+ },
252
+ ],
253
+ },
254
+ ],
255
+ Stop: [
256
+ {
257
+ hooks: [
258
+ {
259
+ type: 'command',
260
+ command: `node --no-warnings --no-deprecation "${hooksPath}/succ-stop-reflection.cjs"`,
261
+ timeout: 60,
262
+ },
263
+ ],
264
+ },
265
+ ],
266
+ SessionEnd: [
267
+ {
268
+ hooks: [
269
+ {
270
+ type: 'command',
271
+ command: `node --no-warnings --no-deprecation "${hooksPath}/succ-session-end.cjs"`,
272
+ timeout: 60,
273
+ },
274
+ ],
275
+ },
276
+ ],
277
+ UserPromptSubmit: [
278
+ {
279
+ hooks: [
280
+ {
281
+ type: 'command',
282
+ command: `node --no-warnings --no-deprecation "${hooksPath}/succ-user-prompt.cjs"`,
283
+ timeout: 10,
284
+ },
285
+ ],
286
+ },
287
+ ],
288
+ PostToolUse: [
289
+ {
290
+ hooks: [
291
+ {
292
+ type: 'command',
293
+ command: `node --no-warnings --no-deprecation "${hooksPath}/succ-post-tool.cjs"`,
294
+ timeout: 5,
295
+ },
296
+ ],
297
+ },
298
+ ],
299
+ PreToolUse: [
300
+ {
301
+ matcher: 'Bash',
302
+ hooks: [
303
+ {
304
+ type: 'command',
305
+ command: `node --no-warnings --no-deprecation "${hooksPath}/succ-pre-tool.cjs"`,
306
+ timeout: 10,
307
+ },
308
+ ],
309
+ },
310
+ ],
311
+ };
312
+ let finalSettings;
313
+ if (settingsExisted && !options.force) {
314
+ // Merge with existing settings (non-force mode)
315
+ try {
316
+ const existingContent = fs.readFileSync(settingsPath, 'utf-8');
317
+ const existingSettings = JSON.parse(existingContent);
318
+ // Preserve all existing settings
319
+ finalSettings = { ...existingSettings };
320
+ // Ensure hooks object exists
321
+ if (!finalSettings.hooks) {
322
+ finalSettings.hooks = {};
323
+ }
324
+ // Merge hooks: add succ hooks without duplicating
325
+ for (const [hookType, hookConfig] of Object.entries(succHooks)) {
326
+ if (!finalSettings.hooks[hookType]) {
327
+ // No existing hooks of this type, just add ours
328
+ finalSettings.hooks[hookType] = hookConfig;
329
+ }
330
+ else {
331
+ const existingHooks = finalSettings.hooks[hookType];
332
+ const succHookEntries = hookConfig;
333
+ for (const succEntry of succHookEntries) {
334
+ // Check if this exact succ hook is already present
335
+ const succCommand = succEntry.hooks?.[0]?.command || '';
336
+ const succMatcher = succEntry.matcher || '';
337
+ const alreadyExists = existingHooks.some((existing) => {
338
+ const existingCommand = existing.hooks?.[0]?.command || '';
339
+ // Check for succ hook files (prefixed with "succ-")
340
+ if (succCommand.includes('succ-session-start.cjs') &&
341
+ existingCommand.includes('succ-session-start.cjs'))
342
+ return true;
343
+ if (succCommand.includes('succ-session-end.cjs') &&
344
+ existingCommand.includes('succ-session-end.cjs'))
345
+ return true;
346
+ if (succCommand.includes('succ-stop-reflection.cjs') &&
347
+ existingCommand.includes('succ-stop-reflection.cjs'))
348
+ return true;
349
+ if (succCommand.includes('succ-user-prompt.cjs') &&
350
+ existingCommand.includes('succ-user-prompt.cjs'))
351
+ return true;
352
+ if (succCommand.includes('succ-post-tool.cjs') &&
353
+ existingCommand.includes('succ-post-tool.cjs'))
354
+ return true;
355
+ if (succCommand.includes('succ-pre-tool.cjs') &&
356
+ existingCommand.includes('succ-pre-tool.cjs'))
357
+ return true;
358
+ // For Notification hooks, check matcher
359
+ if (succMatcher && existing.matcher === succMatcher)
360
+ return true;
361
+ return false;
362
+ });
363
+ if (!alreadyExists) {
364
+ existingHooks.push(succEntry);
365
+ }
366
+ }
367
+ }
368
+ }
369
+ log('Merged settings.json (preserved existing permissions and hooks)');
370
+ }
371
+ catch {
372
+ // Failed to parse existing, create new
373
+ finalSettings = { hooks: succHooks };
374
+ log('Created settings.json (failed to parse existing)');
375
+ }
376
+ }
377
+ else if (settingsExisted && options.force) {
378
+ // Force mode: replace succ hooks but preserve other settings
379
+ try {
380
+ const existingContent = fs.readFileSync(settingsPath, 'utf-8');
381
+ const existingSettings = JSON.parse(existingContent);
382
+ // Preserve non-hook settings (permissions, etc.)
383
+ finalSettings = { ...existingSettings };
384
+ // Replace hooks entirely with new succ hooks
385
+ // but preserve any non-succ hooks
386
+ if (finalSettings.hooks) {
387
+ for (const [hookType, hookConfig] of Object.entries(finalSettings.hooks)) {
388
+ const existingHooks = hookConfig;
389
+ // Filter out old succ hooks (both old names and new "succ-" prefixed names)
390
+ const nonSuccHooks = existingHooks.filter((h) => {
391
+ const cmd = h.hooks?.[0]?.command || '';
392
+ // Remove hooks in .succ/hooks/ directory (local dev)
393
+ if (cmd.includes('.succ/hooks/'))
394
+ return false;
395
+ // Remove hooks from global succ install (contains /hooks/succ- pattern)
396
+ if (cmd.includes('/hooks/succ-') || cmd.includes('\\hooks\\succ-'))
397
+ return false;
398
+ // Also remove any legacy hooks with succ hook names
399
+ if (cmd.includes('session-start.cjs') ||
400
+ cmd.includes('session-end.cjs') ||
401
+ cmd.includes('stop-reflection.cjs') ||
402
+ cmd.includes('user-prompt.cjs') ||
403
+ cmd.includes('post-tool.cjs') ||
404
+ cmd.includes('pre-tool.cjs') ||
405
+ cmd.includes('idle-reflection.cjs'))
406
+ return false;
407
+ return true;
408
+ });
409
+ if (nonSuccHooks.length > 0) {
410
+ finalSettings.hooks[hookType] = nonSuccHooks;
411
+ }
412
+ else {
413
+ delete finalSettings.hooks[hookType];
414
+ }
415
+ }
416
+ }
417
+ // Now add fresh succ hooks
418
+ if (!finalSettings.hooks) {
419
+ finalSettings.hooks = {};
420
+ }
421
+ for (const [hookType, hookConfig] of Object.entries(succHooks)) {
422
+ if (!finalSettings.hooks[hookType]) {
423
+ finalSettings.hooks[hookType] = hookConfig;
424
+ }
425
+ else {
426
+ finalSettings.hooks[hookType] = [
427
+ ...finalSettings.hooks[hookType],
428
+ ...hookConfig,
429
+ ];
430
+ }
431
+ }
432
+ log('Replaced succ hooks in settings.json (--force)');
433
+ }
434
+ catch {
435
+ // Failed to parse existing, create new
436
+ finalSettings = { hooks: succHooks };
437
+ log('Created settings.json (failed to parse existing)');
438
+ }
439
+ }
440
+ else {
441
+ // Create new settings
442
+ finalSettings = { hooks: succHooks };
443
+ log('Created settings.json');
444
+ }
445
+ fs.writeFileSync(settingsPath, JSON.stringify(finalSettings, null, 2));
446
+ }
447
+ // Note: All hooks are now created in the earlier block using copyFileSync from hooks/ directory
448
+ // Add MCP server to Claude Code config
449
+ const mcpResult = addMcpServer(projectRoot);
450
+ // Stop spinner with success message
451
+ spinner.succeed('succ initialized successfully!');
452
+ if (verbose && mcpResult === 'added') {
453
+ console.log(' MCP server added to Claude Code config.');
454
+ }
455
+ // Interactive configuration
456
+ if (isInteractive) {
457
+ // Run onboarding for first-time users (before setup wizard)
458
+ await runOnboarding(options.ai || false);
459
+ await runInteractiveSetup(projectRoot, verbose);
460
+ }
461
+ else {
462
+ // Non-interactive: show next steps
463
+ console.log('\nNext steps:');
464
+ console.log(' 1. Run `succ analyze` to generate brain documentation');
465
+ console.log(' 2. Run `succ index` to create doc embeddings (local, no API key needed)');
466
+ console.log(' 3. Run `succ index-code` to index source code for semantic search');
467
+ console.log(' 4. Run `succ search <query>` to find relevant content');
468
+ if (mcpResult === 'added') {
469
+ console.log(' 5. Restart Claude Code to enable succ tools');
470
+ }
471
+ console.log('\n Other editors: `succ setup cursor`, `succ setup windsurf`, `succ setup continue`');
472
+ }
473
+ }
474
+ /**
475
+ * Run onboarding for first-time users
476
+ * Checks if onboarding was already completed globally
477
+ */
478
+ async function runOnboarding(useAi) {
479
+ // Skip if already completed
480
+ if (isOnboardingCompleted()) {
481
+ return;
482
+ }
483
+ console.log('');
484
+ console.log(' Welcome to succ!');
485
+ console.log('');
486
+ // Ask if user wants a tour
487
+ const wantsTour = await select({
488
+ message: 'Would you like a quick tour of succ?',
489
+ choices: [
490
+ {
491
+ name: 'Yes, show me around (recommended)',
492
+ value: 'yes',
493
+ description: 'Learn what succ can do',
494
+ },
495
+ {
496
+ name: 'Skip, just set up',
497
+ value: 'skip',
498
+ description: 'Go straight to configuration',
499
+ },
500
+ ],
501
+ default: 'yes',
502
+ });
503
+ if (wantsTour === 'skip') {
504
+ markOnboardingCompleted('skipped');
505
+ console.log('\n Skipped onboarding. You can learn more at https://succ.ai\n');
506
+ return;
507
+ }
508
+ // Ask for onboarding style (unless --ai flag was used)
509
+ let onboardingStyle = 'quick';
510
+ if (useAi) {
511
+ onboardingStyle = 'interactive';
512
+ }
513
+ else {
514
+ const styleChoice = await select({
515
+ message: 'How would you like to learn?',
516
+ choices: [
517
+ {
518
+ name: 'Quick walkthrough (~2 min)',
519
+ value: 'quick',
520
+ description: 'Static screens with key concepts',
521
+ },
522
+ {
523
+ name: 'Interactive chat with AI (~3-5 min)',
524
+ value: 'interactive',
525
+ description: 'Personalized conversation about your project',
526
+ },
527
+ ],
528
+ default: 'quick',
529
+ });
530
+ onboardingStyle = styleChoice;
531
+ }
532
+ // Run chosen onboarding
533
+ if (onboardingStyle === 'interactive') {
534
+ await runAiOnboarding();
535
+ }
536
+ else {
537
+ await runStaticWizard();
538
+ }
539
+ }
540
+ /**
541
+ * Interactive setup wizard
542
+ */
543
+ async function runInteractiveSetup(projectRoot, _verbose = false) {
544
+ const globalConfigDir = path.join(os.homedir(), '.succ');
545
+ const globalConfigPath = path.join(globalConfigDir, 'config.json');
546
+ const projectConfigDir = path.join(projectRoot, '.succ');
547
+ const projectConfigPath = path.join(projectConfigDir, 'config.json');
548
+ const newGlobalConfig = {};
549
+ const newProjectConfig = {};
550
+ const projectName = path.basename(projectRoot);
551
+ try {
552
+ // Header
553
+ console.log('');
554
+ console.log(' \x1b[32m●\x1b[0m succ');
555
+ console.log('');
556
+ console.log(' Semantic Understanding for Code Contexts');
557
+ console.log(' Claude Code · Cursor · Windsurf · Continue.dev');
558
+ console.log('');
559
+ console.log(' ─────────────────────────────────────────────────────────');
560
+ console.log('');
561
+ // Step 1: Config scope
562
+ const configScope = await select({
563
+ message: 'Where to save embedding/analyze settings?',
564
+ choices: [
565
+ {
566
+ name: 'Global (~/.succ/config.json)',
567
+ value: 'global',
568
+ description: 'Shared across all projects',
569
+ },
570
+ {
571
+ name: `Project (${projectName}/.succ/config.json)`,
572
+ value: 'project',
573
+ description: 'Only for this project',
574
+ },
575
+ ],
576
+ default: 'global',
577
+ });
578
+ const targetConfig = configScope === 'global' ? newGlobalConfig : newProjectConfig;
579
+ // Step 2: Embedding mode
580
+ console.log('\n┌─────────────────────────────────────────────────────────┐');
581
+ console.log('│ succ converts text to vectors (embeddings) for search. │');
582
+ console.log('└─────────────────────────────────────────────────────────┘\n');
583
+ const embeddingMode = await select({
584
+ message: 'How should succ generate embeddings?',
585
+ choices: [
586
+ {
587
+ name: 'Local CPU (recommended for most users)',
588
+ value: 'local',
589
+ description: 'Runs on your CPU, no API key needed',
590
+ },
591
+ {
592
+ name: 'API (Ollama, LM Studio, OpenRouter, etc.)',
593
+ value: 'api',
594
+ description: 'Use any OpenAI-compatible embedding endpoint',
595
+ },
596
+ ],
597
+ default: 'local',
598
+ });
599
+ if (!targetConfig.llm)
600
+ targetConfig.llm = {};
601
+ if (!targetConfig.llm.embeddings)
602
+ targetConfig.llm.embeddings = {};
603
+ if (embeddingMode === 'local') {
604
+ targetConfig.llm.embeddings.mode = 'local';
605
+ console.log('\n ✓ Using local embeddings (no API key needed)');
606
+ console.log(' Model: Xenova/all-MiniLM-L6-v2 (runs on CPU)\n');
607
+ }
608
+ else if (embeddingMode === 'api') {
609
+ console.log('\n API Embedding Configuration');
610
+ console.log(' ─────────────────────────────');
611
+ console.log(' Examples:');
612
+ console.log(' Ollama: http://localhost:11434/v1');
613
+ console.log(' LM Studio: http://localhost:1234/v1');
614
+ console.log(' OpenRouter: https://openrouter.ai/api/v1\n');
615
+ const embeddingApiUrl = await input({
616
+ message: 'API URL:',
617
+ default: 'http://localhost:11434/v1',
618
+ });
619
+ const embeddingModel = await input({
620
+ message: 'Model name:',
621
+ default: 'nomic-embed-text',
622
+ });
623
+ const embeddingDimensionsStr = await input({
624
+ message: 'Embedding dimensions:',
625
+ default: '768',
626
+ });
627
+ const embeddingDimensions = parseInt(embeddingDimensionsStr, 10) || 768;
628
+ targetConfig.llm.embeddings.mode = 'api';
629
+ targetConfig.llm.embeddings.api_url = embeddingApiUrl;
630
+ targetConfig.llm.embeddings.model = embeddingModel;
631
+ targetConfig.llm.embeddings.dimensions = embeddingDimensions;
632
+ // Prompt for API key if the URL looks like a cloud provider
633
+ if (embeddingApiUrl.includes('openrouter.ai') || embeddingApiUrl.includes('openai.com')) {
634
+ const apiKey = await password({
635
+ message: 'API key:',
636
+ mask: '*',
637
+ validate: (val) => (val?.trim() ? true : 'API key is required'),
638
+ });
639
+ targetConfig.llm.api_key = apiKey;
640
+ }
641
+ console.log(`\n ✓ Using API embeddings: ${embeddingApiUrl}`);
642
+ console.log(` Model: ${embeddingModel} (${embeddingDimensions}d)`);
643
+ if (embeddingApiUrl.includes('11434')) {
644
+ console.log(`\n Tip: Run \`ollama pull ${embeddingModel}\` to download the model`);
645
+ }
646
+ }
647
+ // Step 3: Analysis mode
648
+ console.log('┌─────────────────────────────────────────────────────────┐');
649
+ console.log('│ succ can analyze your codebase to generate docs. │');
650
+ console.log('│ Choose which LLM to use for `succ analyze`: │');
651
+ console.log('└─────────────────────────────────────────────────────────┘\n');
652
+ const analyzeMode = await select({
653
+ message: 'How should succ analyze your code?',
654
+ choices: [
655
+ {
656
+ name: 'Claude CLI (recommended)',
657
+ value: 'claude',
658
+ description: 'Uses the `claude` command',
659
+ },
660
+ {
661
+ name: 'API (Ollama, LM Studio, OpenRouter, etc.)',
662
+ value: 'api',
663
+ description: 'Use any OpenAI-compatible chat endpoint',
664
+ },
665
+ ],
666
+ default: 'claude',
667
+ });
668
+ if (!targetConfig.llm.analyze)
669
+ targetConfig.llm.analyze = {};
670
+ if (analyzeMode === 'claude') {
671
+ targetConfig.llm.analyze.mode = 'claude';
672
+ console.log('\n ✓ Using Claude CLI for analysis');
673
+ console.log(' Make sure `claude` command is available\n');
674
+ }
675
+ else if (analyzeMode === 'api') {
676
+ console.log('\n API Configuration for Analysis');
677
+ console.log(' ─────────────────────────────────');
678
+ console.log(' Examples:');
679
+ console.log(' Ollama: http://localhost:11434/v1');
680
+ console.log(' LM Studio: http://localhost:1234/v1');
681
+ console.log(' OpenRouter: https://openrouter.ai/api/v1\n');
682
+ const analyzeApiUrl = await input({
683
+ message: 'API URL:',
684
+ default: 'http://localhost:11434/v1',
685
+ });
686
+ const analyzeModel = await input({
687
+ message: 'Model name:',
688
+ default: 'qwen2.5-coder:14b',
689
+ });
690
+ targetConfig.llm.analyze.mode = 'api';
691
+ targetConfig.llm.analyze.api_url = analyzeApiUrl;
692
+ targetConfig.llm.analyze.model = analyzeModel;
693
+ // Prompt for API key if cloud provider and not already set
694
+ if (!targetConfig.llm.api_key &&
695
+ (analyzeApiUrl.includes('openrouter.ai') || analyzeApiUrl.includes('openai.com'))) {
696
+ const apiKey = await password({
697
+ message: 'API key:',
698
+ mask: '*',
699
+ validate: (val) => (val?.trim() ? true : 'API key is required'),
700
+ });
701
+ targetConfig.llm.api_key = apiKey;
702
+ }
703
+ console.log(`\n ✓ Using API for analysis: ${analyzeApiUrl}`);
704
+ console.log(` Model: ${analyzeModel}`);
705
+ if (analyzeApiUrl.includes('11434')) {
706
+ console.log(`\n Tip: Run \`ollama pull ${analyzeModel}\` to download the model`);
707
+ }
708
+ }
709
+ // Step 4: Background services (always project-specific)
710
+ console.log('┌─────────────────────────────────────────────────────────┐');
711
+ console.log('│ succ can run background services during Claude sessions │');
712
+ console.log('│ Watch: auto-index files when they change │');
713
+ console.log('│ Analyze: periodically discover new files │');
714
+ console.log('└─────────────────────────────────────────────────────────┘\n');
715
+ const daemonMode = await select({
716
+ message: 'Enable background services?',
717
+ choices: [
718
+ {
719
+ name: 'None (manual only)',
720
+ value: 'none',
721
+ description: 'Run succ index/analyze manually when needed',
722
+ },
723
+ {
724
+ name: 'Watch only',
725
+ value: 'watch',
726
+ description: 'Auto-index changed files in background',
727
+ },
728
+ {
729
+ name: 'Both watch and analyze (recommended)',
730
+ value: 'both',
731
+ description: 'Full automation: watch + periodic discovery',
732
+ },
733
+ ],
734
+ default: 'none',
735
+ });
736
+ // Initialize daemon config
737
+ const daemonConfig = {
738
+ enabled: true,
739
+ watch: { auto_start: false },
740
+ analyze: { auto_start: false },
741
+ };
742
+ if (daemonMode === 'watch' || daemonMode === 'both') {
743
+ daemonConfig.watch.auto_start = true;
744
+ console.log('\n ✓ Watch service enabled (auto-index on file changes)');
745
+ }
746
+ if (daemonMode === 'both') {
747
+ daemonConfig.analyze.auto_start = true;
748
+ console.log(' ✓ Analyze service enabled (periodic discovery)');
749
+ }
750
+ if (daemonMode === 'none') {
751
+ console.log('\n ✓ Background services disabled');
752
+ console.log(' Run `succ index` and `succ analyze` manually when needed');
753
+ }
754
+ // Save daemon config to target scope
755
+ if (daemonMode !== 'none') {
756
+ targetConfig.daemon = daemonConfig;
757
+ }
758
+ console.log('');
759
+ // Save config to chosen scope
760
+ if (configScope === 'global') {
761
+ if (Object.keys(newGlobalConfig).length > 0) {
762
+ if (!fs.existsSync(globalConfigDir)) {
763
+ fs.mkdirSync(globalConfigDir, { recursive: true });
764
+ }
765
+ fs.writeFileSync(globalConfigPath, JSON.stringify(newGlobalConfig, null, 2));
766
+ console.log(` Saved: ${globalConfigPath}`);
767
+ }
768
+ }
769
+ else {
770
+ if (Object.keys(newProjectConfig).length > 0) {
771
+ if (!fs.existsSync(projectConfigDir)) {
772
+ fs.mkdirSync(projectConfigDir, { recursive: true });
773
+ }
774
+ fs.writeFileSync(projectConfigPath, JSON.stringify(newProjectConfig, null, 2));
775
+ console.log(` Saved: ${projectConfigPath}`);
776
+ }
777
+ }
778
+ // Final message
779
+ console.log('\n┌─────────────────────────────────────────────────────────┐');
780
+ console.log('│ Setup Complete! │');
781
+ console.log('└─────────────────────────────────────────────────────────┘\n');
782
+ console.log(' Next steps:\n');
783
+ console.log(' 1. succ analyze Generate brain documentation');
784
+ console.log(' 2. succ index Create doc embeddings for search');
785
+ console.log(' 3. succ index-code Index source code for semantic search');
786
+ console.log(' 4. succ search <query> Find relevant content\n');
787
+ console.log(' The daemon starts automatically with Claude Code sessions.');
788
+ console.log(' Other editors: succ setup cursor | windsurf | continue');
789
+ console.log(' Check status anytime: succ daemon status\n');
790
+ }
791
+ catch (error) {
792
+ // Handle Ctrl+C gracefully
793
+ if (error?.name === 'ExitPromptError' || error?.message?.includes('closed')) {
794
+ console.log('\n\n Setup cancelled.\n');
795
+ process.exit(0);
796
+ }
797
+ throw error;
798
+ }
799
+ }
800
+ /**
801
+ * Add succ MCP server to Claude Code config
802
+ *
803
+ * Claude Code stores MCP servers in ~/.claude.json under the root "mcpServers" key
804
+ * for global scope (works everywhere including remote sessions via Happy).
805
+ *
806
+ * The old ~/.claude/mcp_servers.json format is deprecated.
807
+ */
808
+ function addMcpServer(_projectRoot) {
809
+ // Claude Code main config location
810
+ const claudeConfigPath = path.join(os.homedir(), '.claude.json');
811
+ try {
812
+ // Read existing config or create new
813
+ let claudeConfig = {};
814
+ if (fs.existsSync(claudeConfigPath)) {
815
+ const content = fs.readFileSync(claudeConfigPath, 'utf-8');
816
+ claudeConfig = JSON.parse(content);
817
+ }
818
+ // Initialize mcpServers at root level if not exists
819
+ if (!claudeConfig.mcpServers) {
820
+ claudeConfig.mcpServers = {};
821
+ }
822
+ // Check if already configured
823
+ if (claudeConfig.mcpServers.succ) {
824
+ return 'exists';
825
+ }
826
+ // Add succ MCP server to global scope
827
+ // No cwd specified - MCP server will use Claude Code's current working directory
828
+ // This allows it to work with whichever project Claude is currently in
829
+ // Windows: npx is a .cmd script, needs cmd /c wrapper for spawn
830
+ claudeConfig.mcpServers.succ =
831
+ process.platform === 'win32'
832
+ ? { command: 'cmd', args: ['/c', 'npx', '--yes', 'succ-mcp'] }
833
+ : { command: 'npx', args: ['--yes', 'succ-mcp'] };
834
+ // Write config
835
+ fs.writeFileSync(claudeConfigPath, JSON.stringify(claudeConfig, null, 2));
836
+ return 'added';
837
+ }
838
+ catch (error) {
839
+ logWarn('init', `Failed to add MCP server to ${claudeConfigPath}`, { error: String(error) });
840
+ console.warn(` Warning: Failed to add MCP server to ${claudeConfigPath}: ${error.message}`);
841
+ logWarn('init', 'You can add it manually: succ init --force');
842
+ console.warn(' You can add it manually: succ init --force');
843
+ return 'failed';
844
+ }
845
+ }
846
+ // ============================================================================
847
+ // Hook Content (reads from package hooks/ directory)
848
+ // ============================================================================
849
+ /**
850
+ * Get hook content by filename from package hooks/ directory
851
+ * Falls back to null if file not found (hooks are required in npm package)
852
+ */
853
+ function getHookContent(hookFile) {
854
+ const hookPath = path.join(SUCC_PACKAGE_DIR, 'hooks', hookFile);
855
+ try {
856
+ if (fs.existsSync(hookPath)) {
857
+ return fs.readFileSync(hookPath, 'utf-8');
858
+ }
859
+ }
860
+ catch {
861
+ // File read error
862
+ }
863
+ return null;
864
+ }
865
+ //# sourceMappingURL=init.js.map