specmem-hardwicksoftware 3.5.99

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 (1473) hide show
  1. package/CHANGELOG.md +299 -0
  2. package/LICENSE.md +6406 -0
  3. package/README.md +539 -0
  4. package/bin/AegisTheme.cjs +1022 -0
  5. package/bin/AnsiRenderer.cjs +1055 -0
  6. package/bin/BoxRenderer.cjs +605 -0
  7. package/bin/ClaudeLiveScreen.cjs +1299 -0
  8. package/bin/DashboardModules.cjs +733 -0
  9. package/bin/LiveScreenCapture.cjs +1012 -0
  10. package/bin/MemoryBrowserScreen.cjs +1595 -0
  11. package/bin/TabManager.cjs +1414 -0
  12. package/bin/checkAgentStatus-fix.patch +30 -0
  13. package/bin/mcp-socket-client.cjs +462 -0
  14. package/bin/screen-utils.cjs +106 -0
  15. package/bin/specmem-autoclaude.cjs +663 -0
  16. package/bin/specmem-cleanup.cjs +421 -0
  17. package/bin/specmem-cli.cjs +794 -0
  18. package/bin/specmem-console-teamcomms-class.cjs +428 -0
  19. package/bin/specmem-console.cjs +8104 -0
  20. package/bin/specmem-statusbar.cjs +530 -0
  21. package/bootstrap.cjs +5065 -0
  22. package/claude-hooks/agent-chooser-hook.js +179 -0
  23. package/claude-hooks/agent-chooser-inject.js +121 -0
  24. package/claude-hooks/agent-loading-hook.js +990 -0
  25. package/claude-hooks/agent-output-fader.cjs +542 -0
  26. package/claude-hooks/agent-output-interceptor.js +193 -0
  27. package/claude-hooks/agent-type-matcher.js +419 -0
  28. package/claude-hooks/auto-bypass.py +74 -0
  29. package/claude-hooks/background-completion-silencer.js +134 -0
  30. package/claude-hooks/bash-auto-background.js +182 -0
  31. package/claude-hooks/build-cedict-dictionary.mjs +167 -0
  32. package/claude-hooks/bullshit-radar.cjs +323 -0
  33. package/claude-hooks/cedict-codes.json +270 -0
  34. package/claude-hooks/cedict-extracted.json +22632 -0
  35. package/claude-hooks/claude-watchdog.sh +401 -0
  36. package/claude-hooks/context-dedup.cjs +144 -0
  37. package/claude-hooks/context-yeeter.cjs +244 -0
  38. package/claude-hooks/debug-suffix.cjs +15 -0
  39. package/claude-hooks/debug2.cjs +7 -0
  40. package/claude-hooks/drilldown-enforcer.js +242 -0
  41. package/claude-hooks/english-morphology-standalone.cjs +149 -0
  42. package/claude-hooks/english-morphology.cjs +152 -0
  43. package/claude-hooks/extract-translations.mjs +193 -0
  44. package/claude-hooks/file-claim-enforcer.cjs +293 -0
  45. package/claude-hooks/file-claim-enforcer.js +293 -0
  46. package/claude-hooks/find-collisions.cjs +39 -0
  47. package/claude-hooks/fix-abbreviations.cjs +60 -0
  48. package/claude-hooks/fix-collisions.cjs +60 -0
  49. package/claude-hooks/fix-decompressor.cjs +79 -0
  50. package/claude-hooks/fix-suffixes.cjs +66 -0
  51. package/claude-hooks/grammar-engine.cjs +159 -0
  52. package/claude-hooks/input-aware-improver.js +231 -0
  53. package/claude-hooks/is-agent.cjs +64 -0
  54. package/claude-hooks/mega-test.cjs +213 -0
  55. package/claude-hooks/merge-dictionaries.mjs +207 -0
  56. package/claude-hooks/merged-codes.cjs +22675 -0
  57. package/claude-hooks/merged-codes.json +22676 -0
  58. package/claude-hooks/output-cleaner.cjs +388 -0
  59. package/claude-hooks/post-write-memory-hook.cjs +430 -0
  60. package/claude-hooks/quick-test.cjs +24 -0
  61. package/claude-hooks/quick-test2.cjs +24 -0
  62. package/claude-hooks/remove-bad-codes.cjs +23 -0
  63. package/claude-hooks/search-reminder-hook.js +90 -0
  64. package/claude-hooks/semantic-test.cjs +93 -0
  65. package/claude-hooks/settings.json +445 -0
  66. package/claude-hooks/smart-context-hook.cjs +547 -0
  67. package/claude-hooks/smart-context-hook.js +539 -0
  68. package/claude-hooks/smart-search-interceptor.js +364 -0
  69. package/claude-hooks/socket-connect-helper.cjs +235 -0
  70. package/claude-hooks/specmem/sockets/session-start.lock +1 -0
  71. package/claude-hooks/specmem-context-hook.cjs +357 -0
  72. package/claude-hooks/specmem-context-hook.js +357 -0
  73. package/claude-hooks/specmem-drilldown-hook.cjs +480 -0
  74. package/claude-hooks/specmem-drilldown-hook.js +480 -0
  75. package/claude-hooks/specmem-drilldown-setter.js +210 -0
  76. package/claude-hooks/specmem-paths.cjs +213 -0
  77. package/claude-hooks/specmem-precompact.js +183 -0
  78. package/claude-hooks/specmem-session-init.sh +33 -0
  79. package/claude-hooks/specmem-session-start.cjs +498 -0
  80. package/claude-hooks/specmem-stop-hook.cjs +73 -0
  81. package/claude-hooks/specmem-stop-hook.js +5 -0
  82. package/claude-hooks/specmem-team-comms.cjs +434 -0
  83. package/claude-hooks/specmem-team-member-inject.js +271 -0
  84. package/claude-hooks/specmem-unified-hook.py +670 -0
  85. package/claude-hooks/subagent-loading-hook.js +194 -0
  86. package/claude-hooks/sysprompt-squisher.cjs +167 -0
  87. package/claude-hooks/task-progress-hook.js +204 -0
  88. package/claude-hooks/team-comms-enforcer.cjs +585 -0
  89. package/claude-hooks/test-accuracy.cjs +27 -0
  90. package/claude-hooks/test-big.cjs +28 -0
  91. package/claude-hooks/test-inflectors.cjs +39 -0
  92. package/claude-hooks/test-pluralize.cjs +37 -0
  93. package/claude-hooks/test-quick.cjs +8 -0
  94. package/claude-hooks/test-wink.cjs +20 -0
  95. package/claude-hooks/token-compressor.cjs +940 -0
  96. package/claude-hooks/use-code-pointers.cjs +279 -0
  97. package/commands/COMMAND_TOOL_MAP.md +299 -0
  98. package/commands/specmem-agents.md +412 -0
  99. package/commands/specmem-autoclaude.md +295 -0
  100. package/commands/specmem-changes.md +247 -0
  101. package/commands/specmem-code.md +103 -0
  102. package/commands/specmem-configteammembercomms.md +322 -0
  103. package/commands/specmem-drilldown.md +208 -0
  104. package/commands/specmem-find.md +195 -0
  105. package/commands/specmem-getdashboard.md +243 -0
  106. package/commands/specmem-hooks.md +219 -0
  107. package/commands/specmem-pointers.md +149 -0
  108. package/commands/specmem-progress.md +287 -0
  109. package/commands/specmem-remember.md +123 -0
  110. package/commands/specmem-service.md +349 -0
  111. package/commands/specmem-stats.md +189 -0
  112. package/commands/specmem-team-member.md +409 -0
  113. package/commands/specmem-webdev.md +583 -0
  114. package/commands/specmem.md +363 -0
  115. package/dist/autoStart/index.d.ts +214 -0
  116. package/dist/autoStart/index.d.ts.map +1 -0
  117. package/dist/autoStart/index.js +883 -0
  118. package/dist/autoStart/index.js.map +1 -0
  119. package/dist/claude-sessions/contextRestorationParser.d.ts +74 -0
  120. package/dist/claude-sessions/contextRestorationParser.d.ts.map +1 -0
  121. package/dist/claude-sessions/contextRestorationParser.js +570 -0
  122. package/dist/claude-sessions/contextRestorationParser.js.map +1 -0
  123. package/dist/claude-sessions/index.d.ts +13 -0
  124. package/dist/claude-sessions/index.d.ts.map +1 -0
  125. package/dist/claude-sessions/index.js +11 -0
  126. package/dist/claude-sessions/index.js.map +1 -0
  127. package/dist/claude-sessions/sessionIntegration.d.ts +48 -0
  128. package/dist/claude-sessions/sessionIntegration.d.ts.map +1 -0
  129. package/dist/claude-sessions/sessionIntegration.js +146 -0
  130. package/dist/claude-sessions/sessionIntegration.js.map +1 -0
  131. package/dist/claude-sessions/sessionParser.d.ts +293 -0
  132. package/dist/claude-sessions/sessionParser.d.ts.map +1 -0
  133. package/dist/claude-sessions/sessionParser.js +1028 -0
  134. package/dist/claude-sessions/sessionParser.js.map +1 -0
  135. package/dist/claude-sessions/sessionWatcher.d.ts +139 -0
  136. package/dist/claude-sessions/sessionWatcher.d.ts.map +1 -0
  137. package/dist/claude-sessions/sessionWatcher.js +722 -0
  138. package/dist/claude-sessions/sessionWatcher.js.map +1 -0
  139. package/dist/cli/deploy-to-claude.d.ts +56 -0
  140. package/dist/cli/deploy-to-claude.d.ts.map +1 -0
  141. package/dist/cli/deploy-to-claude.js +576 -0
  142. package/dist/cli/deploy-to-claude.js.map +1 -0
  143. package/dist/code-explanations/explainCode.d.ts +86 -0
  144. package/dist/code-explanations/explainCode.d.ts.map +1 -0
  145. package/dist/code-explanations/explainCode.js +286 -0
  146. package/dist/code-explanations/explainCode.js.map +1 -0
  147. package/dist/code-explanations/feedback.d.ts +87 -0
  148. package/dist/code-explanations/feedback.d.ts.map +1 -0
  149. package/dist/code-explanations/feedback.js +212 -0
  150. package/dist/code-explanations/feedback.js.map +1 -0
  151. package/dist/code-explanations/getRelatedCode.d.ts +80 -0
  152. package/dist/code-explanations/getRelatedCode.d.ts.map +1 -0
  153. package/dist/code-explanations/getRelatedCode.js +262 -0
  154. package/dist/code-explanations/getRelatedCode.js.map +1 -0
  155. package/dist/code-explanations/index.d.ts +284 -0
  156. package/dist/code-explanations/index.d.ts.map +1 -0
  157. package/dist/code-explanations/index.js +249 -0
  158. package/dist/code-explanations/index.js.map +1 -0
  159. package/dist/code-explanations/linkCodeToPrompt.d.ts +79 -0
  160. package/dist/code-explanations/linkCodeToPrompt.d.ts.map +1 -0
  161. package/dist/code-explanations/linkCodeToPrompt.js +213 -0
  162. package/dist/code-explanations/linkCodeToPrompt.js.map +1 -0
  163. package/dist/code-explanations/recallExplanation.d.ts +88 -0
  164. package/dist/code-explanations/recallExplanation.d.ts.map +1 -0
  165. package/dist/code-explanations/recallExplanation.js +218 -0
  166. package/dist/code-explanations/recallExplanation.js.map +1 -0
  167. package/dist/code-explanations/schema.d.ts +32 -0
  168. package/dist/code-explanations/schema.d.ts.map +1 -0
  169. package/dist/code-explanations/schema.js +221 -0
  170. package/dist/code-explanations/schema.js.map +1 -0
  171. package/dist/code-explanations/semanticSearch.d.ts +75 -0
  172. package/dist/code-explanations/semanticSearch.d.ts.map +1 -0
  173. package/dist/code-explanations/semanticSearch.js +203 -0
  174. package/dist/code-explanations/semanticSearch.js.map +1 -0
  175. package/dist/code-explanations/types.d.ts +328 -0
  176. package/dist/code-explanations/types.d.ts.map +1 -0
  177. package/dist/code-explanations/types.js +122 -0
  178. package/dist/code-explanations/types.js.map +1 -0
  179. package/dist/codebase/codeAnalyzer.d.ts +272 -0
  180. package/dist/codebase/codeAnalyzer.d.ts.map +1 -0
  181. package/dist/codebase/codeAnalyzer.js +1353 -0
  182. package/dist/codebase/codeAnalyzer.js.map +1 -0
  183. package/dist/codebase/codebaseIndexer.d.ts +360 -0
  184. package/dist/codebase/codebaseIndexer.d.ts.map +1 -0
  185. package/dist/codebase/codebaseIndexer.js +1735 -0
  186. package/dist/codebase/codebaseIndexer.js.map +1 -0
  187. package/dist/codebase/codebaseTools.d.ts +853 -0
  188. package/dist/codebase/codebaseTools.d.ts.map +1 -0
  189. package/dist/codebase/codebaseTools.js +1279 -0
  190. package/dist/codebase/codebaseTools.js.map +1 -0
  191. package/dist/codebase/exclusions.d.ts +111 -0
  192. package/dist/codebase/exclusions.d.ts.map +1 -0
  193. package/dist/codebase/exclusions.js +771 -0
  194. package/dist/codebase/exclusions.js.map +1 -0
  195. package/dist/codebase/fileWatcher.d.ts +135 -0
  196. package/dist/codebase/fileWatcher.d.ts.map +1 -0
  197. package/dist/codebase/fileWatcher.js +309 -0
  198. package/dist/codebase/fileWatcher.js.map +1 -0
  199. package/dist/codebase/index.d.ts +33 -0
  200. package/dist/codebase/index.d.ts.map +1 -0
  201. package/dist/codebase/index.js +77 -0
  202. package/dist/codebase/index.js.map +1 -0
  203. package/dist/codebase/ingestion.d.ts +177 -0
  204. package/dist/codebase/ingestion.d.ts.map +1 -0
  205. package/dist/codebase/ingestion.js +690 -0
  206. package/dist/codebase/ingestion.js.map +1 -0
  207. package/dist/codebase/languageDetection.d.ts +75 -0
  208. package/dist/codebase/languageDetection.d.ts.map +1 -0
  209. package/dist/codebase/languageDetection.js +768 -0
  210. package/dist/codebase/languageDetection.js.map +1 -0
  211. package/dist/commands/codebaseCommands.d.ts +101 -0
  212. package/dist/commands/codebaseCommands.d.ts.map +1 -0
  213. package/dist/commands/codebaseCommands.js +911 -0
  214. package/dist/commands/codebaseCommands.js.map +1 -0
  215. package/dist/commands/commandHandler.d.ts +126 -0
  216. package/dist/commands/commandHandler.d.ts.map +1 -0
  217. package/dist/commands/commandHandler.js +296 -0
  218. package/dist/commands/commandHandler.js.map +1 -0
  219. package/dist/commands/commandLoader.d.ts +103 -0
  220. package/dist/commands/commandLoader.d.ts.map +1 -0
  221. package/dist/commands/commandLoader.js +223 -0
  222. package/dist/commands/commandLoader.js.map +1 -0
  223. package/dist/commands/contextCommands.d.ts +83 -0
  224. package/dist/commands/contextCommands.d.ts.map +1 -0
  225. package/dist/commands/contextCommands.js +512 -0
  226. package/dist/commands/contextCommands.js.map +1 -0
  227. package/dist/commands/index.d.ts +24 -0
  228. package/dist/commands/index.d.ts.map +1 -0
  229. package/dist/commands/index.js +28 -0
  230. package/dist/commands/index.js.map +1 -0
  231. package/dist/commands/mcpResources.d.ts +50 -0
  232. package/dist/commands/mcpResources.d.ts.map +1 -0
  233. package/dist/commands/mcpResources.js +372 -0
  234. package/dist/commands/mcpResources.js.map +1 -0
  235. package/dist/commands/memoryCommands.d.ts +74 -0
  236. package/dist/commands/memoryCommands.d.ts.map +1 -0
  237. package/dist/commands/memoryCommands.js +609 -0
  238. package/dist/commands/memoryCommands.js.map +1 -0
  239. package/dist/commands/promptCommands.d.ts +91 -0
  240. package/dist/commands/promptCommands.d.ts.map +1 -0
  241. package/dist/commands/promptCommands.js +801 -0
  242. package/dist/commands/promptCommands.js.map +1 -0
  243. package/dist/commands/teamMemberCommands.d.ts +21 -0
  244. package/dist/commands/teamMemberCommands.d.ts.map +1 -0
  245. package/dist/commands/teamMemberCommands.js +137 -0
  246. package/dist/commands/teamMemberCommands.js.map +1 -0
  247. package/dist/comms/fileCommsTransport.d.ts +91 -0
  248. package/dist/comms/fileCommsTransport.d.ts.map +1 -0
  249. package/dist/comms/fileCommsTransport.js +244 -0
  250. package/dist/comms/fileCommsTransport.js.map +1 -0
  251. package/dist/comms/index.d.ts +7 -0
  252. package/dist/comms/index.d.ts.map +1 -0
  253. package/dist/comms/index.js +7 -0
  254. package/dist/comms/index.js.map +1 -0
  255. package/dist/config/apiKeyDetection.d.ts +41 -0
  256. package/dist/config/apiKeyDetection.d.ts.map +1 -0
  257. package/dist/config/apiKeyDetection.js +211 -0
  258. package/dist/config/apiKeyDetection.js.map +1 -0
  259. package/dist/config/autoConfig.d.ts +188 -0
  260. package/dist/config/autoConfig.d.ts.map +1 -0
  261. package/dist/config/autoConfig.js +850 -0
  262. package/dist/config/autoConfig.js.map +1 -0
  263. package/dist/config/configSync.d.ts +119 -0
  264. package/dist/config/configSync.d.ts.map +1 -0
  265. package/dist/config/configSync.js +878 -0
  266. package/dist/config/configSync.js.map +1 -0
  267. package/dist/config/embeddingTimeouts.d.ts +145 -0
  268. package/dist/config/embeddingTimeouts.d.ts.map +1 -0
  269. package/dist/config/embeddingTimeouts.js +255 -0
  270. package/dist/config/embeddingTimeouts.js.map +1 -0
  271. package/dist/config/index.d.ts +5 -0
  272. package/dist/config/index.d.ts.map +1 -0
  273. package/dist/config/index.js +7 -0
  274. package/dist/config/index.js.map +1 -0
  275. package/dist/config/languageConfig.d.ts +68 -0
  276. package/dist/config/languageConfig.d.ts.map +1 -0
  277. package/dist/config/languageConfig.js +473 -0
  278. package/dist/config/languageConfig.js.map +1 -0
  279. package/dist/config/password.d.ts +145 -0
  280. package/dist/config/password.d.ts.map +1 -0
  281. package/dist/config/password.js +428 -0
  282. package/dist/config/password.js.map +1 -0
  283. package/dist/config.d.ts +338 -0
  284. package/dist/config.d.ts.map +1 -0
  285. package/dist/config.js +1177 -0
  286. package/dist/config.js.map +1 -0
  287. package/dist/consolidation.d.ts +44 -0
  288. package/dist/consolidation.d.ts.map +1 -0
  289. package/dist/consolidation.js +447 -0
  290. package/dist/consolidation.js.map +1 -0
  291. package/dist/constants.d.ts +371 -0
  292. package/dist/constants.d.ts.map +1 -0
  293. package/dist/constants.js +552 -0
  294. package/dist/constants.js.map +1 -0
  295. package/dist/coordination/TeamMemberRegistry.d.ts +192 -0
  296. package/dist/coordination/TeamMemberRegistry.d.ts.map +1 -0
  297. package/dist/coordination/TeamMemberRegistry.js +415 -0
  298. package/dist/coordination/TeamMemberRegistry.js.map +1 -0
  299. package/dist/coordination/events.d.ts +369 -0
  300. package/dist/coordination/events.d.ts.map +1 -0
  301. package/dist/coordination/events.js +232 -0
  302. package/dist/coordination/events.js.map +1 -0
  303. package/dist/coordination/handlers.d.ts +116 -0
  304. package/dist/coordination/handlers.d.ts.map +1 -0
  305. package/dist/coordination/handlers.js +400 -0
  306. package/dist/coordination/handlers.js.map +1 -0
  307. package/dist/coordination/index.d.ts +14 -0
  308. package/dist/coordination/index.d.ts.map +1 -0
  309. package/dist/coordination/index.js +31 -0
  310. package/dist/coordination/index.js.map +1 -0
  311. package/dist/coordination/integration.d.ts +260 -0
  312. package/dist/coordination/integration.d.ts.map +1 -0
  313. package/dist/coordination/integration.js +472 -0
  314. package/dist/coordination/integration.js.map +1 -0
  315. package/dist/coordination/server.d.ts +266 -0
  316. package/dist/coordination/server.d.ts.map +1 -0
  317. package/dist/coordination/server.js +995 -0
  318. package/dist/coordination/server.js.map +1 -0
  319. package/dist/coordination/serviceProvider.d.ts +70 -0
  320. package/dist/coordination/serviceProvider.d.ts.map +1 -0
  321. package/dist/coordination/serviceProvider.js +273 -0
  322. package/dist/coordination/serviceProvider.js.map +1 -0
  323. package/dist/dashboard/api/claudeControl.d.ts +44 -0
  324. package/dist/dashboard/api/claudeControl.d.ts.map +1 -0
  325. package/dist/dashboard/api/claudeControl.js +650 -0
  326. package/dist/dashboard/api/claudeControl.js.map +1 -0
  327. package/dist/dashboard/api/claudeHistory.d.ts +4 -0
  328. package/dist/dashboard/api/claudeHistory.d.ts.map +1 -0
  329. package/dist/dashboard/api/claudeHistory.js +319 -0
  330. package/dist/dashboard/api/claudeHistory.js.map +1 -0
  331. package/dist/dashboard/api/dataExport.d.ts +23 -0
  332. package/dist/dashboard/api/dataExport.d.ts.map +1 -0
  333. package/dist/dashboard/api/dataExport.js +509 -0
  334. package/dist/dashboard/api/dataExport.js.map +1 -0
  335. package/dist/dashboard/api/fileManager.d.ts +39 -0
  336. package/dist/dashboard/api/fileManager.d.ts.map +1 -0
  337. package/dist/dashboard/api/fileManager.js +814 -0
  338. package/dist/dashboard/api/fileManager.js.map +1 -0
  339. package/dist/dashboard/api/hooks.d.ts +16 -0
  340. package/dist/dashboard/api/hooks.d.ts.map +1 -0
  341. package/dist/dashboard/api/hooks.js +342 -0
  342. package/dist/dashboard/api/hooks.js.map +1 -0
  343. package/dist/dashboard/api/hotReload.d.ts +14 -0
  344. package/dist/dashboard/api/hotReload.d.ts.map +1 -0
  345. package/dist/dashboard/api/hotReload.js +219 -0
  346. package/dist/dashboard/api/hotReload.js.map +1 -0
  347. package/dist/dashboard/api/liveSessionStream.d.ts +19 -0
  348. package/dist/dashboard/api/liveSessionStream.d.ts.map +1 -0
  349. package/dist/dashboard/api/liveSessionStream.js +430 -0
  350. package/dist/dashboard/api/liveSessionStream.js.map +1 -0
  351. package/dist/dashboard/api/memoryRecall.d.ts +20 -0
  352. package/dist/dashboard/api/memoryRecall.d.ts.map +1 -0
  353. package/dist/dashboard/api/memoryRecall.js +524 -0
  354. package/dist/dashboard/api/memoryRecall.js.map +1 -0
  355. package/dist/dashboard/api/promptSend.d.ts +33 -0
  356. package/dist/dashboard/api/promptSend.d.ts.map +1 -0
  357. package/dist/dashboard/api/promptSend.js +544 -0
  358. package/dist/dashboard/api/promptSend.js.map +1 -0
  359. package/dist/dashboard/api/settings.d.ts +10 -0
  360. package/dist/dashboard/api/settings.d.ts.map +1 -0
  361. package/dist/dashboard/api/settings.js +656 -0
  362. package/dist/dashboard/api/settings.js.map +1 -0
  363. package/dist/dashboard/api/setup.d.ts +21 -0
  364. package/dist/dashboard/api/setup.d.ts.map +1 -0
  365. package/dist/dashboard/api/setup.js +663 -0
  366. package/dist/dashboard/api/setup.js.map +1 -0
  367. package/dist/dashboard/api/specmemTools.d.ts +14 -0
  368. package/dist/dashboard/api/specmemTools.d.ts.map +1 -0
  369. package/dist/dashboard/api/specmemTools.js +1059 -0
  370. package/dist/dashboard/api/specmemTools.js.map +1 -0
  371. package/dist/dashboard/api/taskTeamMembers.d.ts +8 -0
  372. package/dist/dashboard/api/taskTeamMembers.d.ts.map +1 -0
  373. package/dist/dashboard/api/taskTeamMembers.js +136 -0
  374. package/dist/dashboard/api/taskTeamMembers.js.map +1 -0
  375. package/dist/dashboard/api/teamMemberDeploy.d.ts +15 -0
  376. package/dist/dashboard/api/teamMemberDeploy.d.ts.map +1 -0
  377. package/dist/dashboard/api/teamMemberDeploy.js +421 -0
  378. package/dist/dashboard/api/teamMemberDeploy.js.map +1 -0
  379. package/dist/dashboard/api/teamMemberHistory.d.ts +38 -0
  380. package/dist/dashboard/api/teamMemberHistory.d.ts.map +1 -0
  381. package/dist/dashboard/api/teamMemberHistory.js +583 -0
  382. package/dist/dashboard/api/teamMemberHistory.js.map +1 -0
  383. package/dist/dashboard/api/terminal.d.ts +12 -0
  384. package/dist/dashboard/api/terminal.d.ts.map +1 -0
  385. package/dist/dashboard/api/terminal.js +344 -0
  386. package/dist/dashboard/api/terminal.js.map +1 -0
  387. package/dist/dashboard/api/terminalInject.d.ts +17 -0
  388. package/dist/dashboard/api/terminalInject.d.ts.map +1 -0
  389. package/dist/dashboard/api/terminalInject.js +322 -0
  390. package/dist/dashboard/api/terminalInject.js.map +1 -0
  391. package/dist/dashboard/api/terminalStream.d.ts +12 -0
  392. package/dist/dashboard/api/terminalStream.d.ts.map +1 -0
  393. package/dist/dashboard/api/terminalStream.js +482 -0
  394. package/dist/dashboard/api/terminalStream.js.map +1 -0
  395. package/dist/dashboard/index.d.ts +7 -0
  396. package/dist/dashboard/index.d.ts.map +1 -0
  397. package/dist/dashboard/index.js +7 -0
  398. package/dist/dashboard/index.js.map +1 -0
  399. package/dist/dashboard/ptyStreamer.d.ts +173 -0
  400. package/dist/dashboard/ptyStreamer.d.ts.map +1 -0
  401. package/dist/dashboard/ptyStreamer.js +661 -0
  402. package/dist/dashboard/ptyStreamer.js.map +1 -0
  403. package/dist/dashboard/public/DASHBOARD-README.md +378 -0
  404. package/dist/dashboard/public/INTEGRATION-GUIDE.md +395 -0
  405. package/dist/dashboard/public/codebase-config.html +1247 -0
  406. package/dist/dashboard/public/dashboard-v2.html +1942 -0
  407. package/dist/dashboard/public/data-export.html +819 -0
  408. package/dist/dashboard/public/example-page.html +164 -0
  409. package/dist/dashboard/public/file-explorer.html +1023 -0
  410. package/dist/dashboard/public/hooks.html +1103 -0
  411. package/dist/dashboard/public/index-improvements.css +499 -0
  412. package/dist/dashboard/public/index.html +5534 -0
  413. package/dist/dashboard/public/memory-controls.html +1959 -0
  414. package/dist/dashboard/public/memory-recall.html +1495 -0
  415. package/dist/dashboard/public/previews/skeleton-memory-graph.html +361 -0
  416. package/dist/dashboard/public/previews/skeleton-memory-list.html +366 -0
  417. package/dist/dashboard/public/previews/skeleton-search-results.html +609 -0
  418. package/dist/dashboard/public/previews/skeleton-stats-dashboard.html +556 -0
  419. package/dist/dashboard/public/prompt-console.html +2763 -0
  420. package/dist/dashboard/public/react-dist/assets/index-CkjobT5B.js +871 -0
  421. package/dist/dashboard/public/react-dist/assets/index-iRclxMst.css +1 -0
  422. package/dist/dashboard/public/react-dist/index.html +16 -0
  423. package/dist/dashboard/public/shared-header.js +325 -0
  424. package/dist/dashboard/public/shared-language-selector.js +626 -0
  425. package/dist/dashboard/public/shared-logger.js +66 -0
  426. package/dist/dashboard/public/shared-nav.js +325 -0
  427. package/dist/dashboard/public/shared-theme-blue.css +331 -0
  428. package/dist/dashboard/public/shared-theme.css +813 -0
  429. package/dist/dashboard/public/shared-toast.js +415 -0
  430. package/dist/dashboard/public/team-member-history.html +1291 -0
  431. package/dist/dashboard/public/team-member-spy.html +1199 -0
  432. package/dist/dashboard/public/team-members.html +3756 -0
  433. package/dist/dashboard/public/terminal-output.html +1013 -0
  434. package/dist/dashboard/public/terminal.html +372 -0
  435. package/dist/dashboard/sessionStore.d.ts +86 -0
  436. package/dist/dashboard/sessionStore.d.ts.map +1 -0
  437. package/dist/dashboard/sessionStore.js +262 -0
  438. package/dist/dashboard/sessionStore.js.map +1 -0
  439. package/dist/dashboard/standalone.d.ts +27 -0
  440. package/dist/dashboard/standalone.d.ts.map +1 -0
  441. package/dist/dashboard/standalone.js +380 -0
  442. package/dist/dashboard/standalone.js.map +1 -0
  443. package/dist/dashboard/webServer.d.ts +390 -0
  444. package/dist/dashboard/webServer.d.ts.map +1 -0
  445. package/dist/dashboard/webServer.js +4297 -0
  446. package/dist/dashboard/webServer.js.map +1 -0
  447. package/dist/dashboard/websocket/teamMemberStream.d.ts +87 -0
  448. package/dist/dashboard/websocket/teamMemberStream.d.ts.map +1 -0
  449. package/dist/dashboard/websocket/teamMemberStream.js +366 -0
  450. package/dist/dashboard/websocket/teamMemberStream.js.map +1 -0
  451. package/dist/dashboard/websocket/terminalStream.d.ts +130 -0
  452. package/dist/dashboard/websocket/terminalStream.d.ts.map +1 -0
  453. package/dist/dashboard/websocket/terminalStream.js +456 -0
  454. package/dist/dashboard/websocket/terminalStream.js.map +1 -0
  455. package/dist/database/embeddedPostgres.d.ts +187 -0
  456. package/dist/database/embeddedPostgres.d.ts.map +1 -0
  457. package/dist/database/embeddedPostgres.js +763 -0
  458. package/dist/database/embeddedPostgres.js.map +1 -0
  459. package/dist/database/index.d.ts +12 -0
  460. package/dist/database/index.d.ts.map +1 -0
  461. package/dist/database/index.js +20 -0
  462. package/dist/database/index.js.map +1 -0
  463. package/dist/database/initEmbeddedPostgres.d.ts +124 -0
  464. package/dist/database/initEmbeddedPostgres.d.ts.map +1 -0
  465. package/dist/database/initEmbeddedPostgres.js +855 -0
  466. package/dist/database/initEmbeddedPostgres.js.map +1 -0
  467. package/dist/database.d.ts +256 -0
  468. package/dist/database.d.ts.map +1 -0
  469. package/dist/database.js +1209 -0
  470. package/dist/database.js.map +1 -0
  471. package/dist/db/apiDataManager.d.ts +334 -0
  472. package/dist/db/apiDataManager.d.ts.map +1 -0
  473. package/dist/db/apiDataManager.js +631 -0
  474. package/dist/db/apiDataManager.js.map +1 -0
  475. package/dist/db/batchOperations.d.ts +154 -0
  476. package/dist/db/batchOperations.d.ts.map +1 -0
  477. package/dist/db/batchOperations.js +564 -0
  478. package/dist/db/batchOperations.js.map +1 -0
  479. package/dist/db/bigBrainMigrations.d.ts +48 -0
  480. package/dist/db/bigBrainMigrations.d.ts.map +1 -0
  481. package/dist/db/bigBrainMigrations.js +4266 -0
  482. package/dist/db/bigBrainMigrations.js.map +1 -0
  483. package/dist/db/connectionPoolGoBrrr.d.ts +94 -0
  484. package/dist/db/connectionPoolGoBrrr.d.ts.map +1 -0
  485. package/dist/db/connectionPoolGoBrrr.js +548 -0
  486. package/dist/db/connectionPoolGoBrrr.js.map +1 -0
  487. package/dist/db/dashboardQueries.d.ts +182 -0
  488. package/dist/db/dashboardQueries.d.ts.map +1 -0
  489. package/dist/db/dashboardQueries.js +821 -0
  490. package/dist/db/dashboardQueries.js.map +1 -0
  491. package/dist/db/deploymentBootstrap.d.ts +43 -0
  492. package/dist/db/deploymentBootstrap.d.ts.map +1 -0
  493. package/dist/db/deploymentBootstrap.js +329 -0
  494. package/dist/db/deploymentBootstrap.js.map +1 -0
  495. package/dist/db/dimensionService.d.ts +140 -0
  496. package/dist/db/dimensionService.d.ts.map +1 -0
  497. package/dist/db/dimensionService.js +261 -0
  498. package/dist/db/dimensionService.js.map +1 -0
  499. package/dist/db/embeddingOverflow.d.ts +69 -0
  500. package/dist/db/embeddingOverflow.d.ts.map +1 -0
  501. package/dist/db/embeddingOverflow.js +332 -0
  502. package/dist/db/embeddingOverflow.js.map +1 -0
  503. package/dist/db/embeddingOverflow.sql +221 -0
  504. package/dist/db/findThatShit.d.ts +145 -0
  505. package/dist/db/findThatShit.d.ts.map +1 -0
  506. package/dist/db/findThatShit.js +782 -0
  507. package/dist/db/findThatShit.js.map +1 -0
  508. package/dist/db/hotPathManager.d.ts +187 -0
  509. package/dist/db/hotPathManager.d.ts.map +1 -0
  510. package/dist/db/hotPathManager.js +504 -0
  511. package/dist/db/hotPathManager.js.map +1 -0
  512. package/dist/db/index.d.ts +85 -0
  513. package/dist/db/index.d.ts.map +1 -0
  514. package/dist/db/index.js +219 -0
  515. package/dist/db/index.js.map +1 -0
  516. package/dist/db/memoryDrilldown.sql +99 -0
  517. package/dist/db/migrate.d.ts +3 -0
  518. package/dist/db/migrate.d.ts.map +1 -0
  519. package/dist/db/migrate.js +97 -0
  520. package/dist/db/migrate.js.map +1 -0
  521. package/dist/db/migrateJsonToPostgres.d.ts +43 -0
  522. package/dist/db/migrateJsonToPostgres.d.ts.map +1 -0
  523. package/dist/db/migrateJsonToPostgres.js +465 -0
  524. package/dist/db/migrateJsonToPostgres.js.map +1 -0
  525. package/dist/db/nukeFromOrbit.d.ts +63 -0
  526. package/dist/db/nukeFromOrbit.d.ts.map +1 -0
  527. package/dist/db/nukeFromOrbit.js +499 -0
  528. package/dist/db/nukeFromOrbit.js.map +1 -0
  529. package/dist/db/processedTraining.sql +60 -0
  530. package/dist/db/projectNamespacing.d.ts +258 -0
  531. package/dist/db/projectNamespacing.d.ts.map +1 -0
  532. package/dist/db/projectNamespacing.js +920 -0
  533. package/dist/db/projectNamespacing.js.map +1 -0
  534. package/dist/db/projectNamespacing.sql +374 -0
  535. package/dist/db/projectSchemaInit.sql +271 -0
  536. package/dist/db/spatialMemory.d.ts +296 -0
  537. package/dist/db/spatialMemory.d.ts.map +1 -0
  538. package/dist/db/spatialMemory.js +818 -0
  539. package/dist/db/spatialMemory.js.map +1 -0
  540. package/dist/db/streamingQuery.d.ts +143 -0
  541. package/dist/db/streamingQuery.d.ts.map +1 -0
  542. package/dist/db/streamingQuery.js +350 -0
  543. package/dist/db/streamingQuery.js.map +1 -0
  544. package/dist/db/teamComms.sql +224 -0
  545. package/dist/db/yeetStuffInDb.d.ts +72 -0
  546. package/dist/db/yeetStuffInDb.d.ts.map +1 -0
  547. package/dist/db/yeetStuffInDb.js +473 -0
  548. package/dist/db/yeetStuffInDb.js.map +1 -0
  549. package/dist/embedding-providers/index.d.ts +10 -0
  550. package/dist/embedding-providers/index.d.ts.map +1 -0
  551. package/dist/embedding-providers/index.js +12 -0
  552. package/dist/embedding-providers/index.js.map +1 -0
  553. package/dist/embeddings/projectionLayer.d.ts +114 -0
  554. package/dist/embeddings/projectionLayer.d.ts.map +1 -0
  555. package/dist/embeddings/projectionLayer.js +345 -0
  556. package/dist/embeddings/projectionLayer.js.map +1 -0
  557. package/dist/events/Publisher.d.ts +193 -0
  558. package/dist/events/Publisher.d.ts.map +1 -0
  559. package/dist/events/Publisher.js +439 -0
  560. package/dist/events/Publisher.js.map +1 -0
  561. package/dist/events/config.d.ts +139 -0
  562. package/dist/events/config.d.ts.map +1 -0
  563. package/dist/events/config.js +266 -0
  564. package/dist/events/config.js.map +1 -0
  565. package/dist/events/index.d.ts +19 -0
  566. package/dist/events/index.d.ts.map +1 -0
  567. package/dist/events/index.js +31 -0
  568. package/dist/events/index.js.map +1 -0
  569. package/dist/events/integration.d.ts +206 -0
  570. package/dist/events/integration.d.ts.map +1 -0
  571. package/dist/events/integration.js +348 -0
  572. package/dist/events/integration.js.map +1 -0
  573. package/dist/events/metrics.d.ts +147 -0
  574. package/dist/events/metrics.d.ts.map +1 -0
  575. package/dist/events/metrics.js +343 -0
  576. package/dist/events/metrics.js.map +1 -0
  577. package/dist/hooks/cli.d.ts +28 -0
  578. package/dist/hooks/cli.d.ts.map +1 -0
  579. package/dist/hooks/cli.js +118 -0
  580. package/dist/hooks/cli.js.map +1 -0
  581. package/dist/hooks/contextInjectionHook.d.ts +60 -0
  582. package/dist/hooks/contextInjectionHook.d.ts.map +1 -0
  583. package/dist/hooks/contextInjectionHook.js +294 -0
  584. package/dist/hooks/contextInjectionHook.js.map +1 -0
  585. package/dist/hooks/drilldownHook.d.ts +125 -0
  586. package/dist/hooks/drilldownHook.d.ts.map +1 -0
  587. package/dist/hooks/drilldownHook.js +181 -0
  588. package/dist/hooks/drilldownHook.js.map +1 -0
  589. package/dist/hooks/hookManager.d.ts +180 -0
  590. package/dist/hooks/hookManager.d.ts.map +1 -0
  591. package/dist/hooks/hookManager.js +782 -0
  592. package/dist/hooks/hookManager.js.map +1 -0
  593. package/dist/hooks/index.d.ts +62 -0
  594. package/dist/hooks/index.d.ts.map +1 -0
  595. package/dist/hooks/index.js +66 -0
  596. package/dist/hooks/index.js.map +1 -0
  597. package/dist/hooks/lowContextHook.d.ts +71 -0
  598. package/dist/hooks/lowContextHook.d.ts.map +1 -0
  599. package/dist/hooks/lowContextHook.js +258 -0
  600. package/dist/hooks/lowContextHook.js.map +1 -0
  601. package/dist/hooks/simpleContextHook.d.ts +65 -0
  602. package/dist/hooks/simpleContextHook.d.ts.map +1 -0
  603. package/dist/hooks/simpleContextHook.js +194 -0
  604. package/dist/hooks/simpleContextHook.js.map +1 -0
  605. package/dist/hooks/teamFramingCli.d.ts +56 -0
  606. package/dist/hooks/teamFramingCli.d.ts.map +1 -0
  607. package/dist/hooks/teamFramingCli.js +264 -0
  608. package/dist/hooks/teamFramingCli.js.map +1 -0
  609. package/dist/hooks/teamMemberPrepromptHook.d.ts +150 -0
  610. package/dist/hooks/teamMemberPrepromptHook.d.ts.map +1 -0
  611. package/dist/hooks/teamMemberPrepromptHook.js +308 -0
  612. package/dist/hooks/teamMemberPrepromptHook.js.map +1 -0
  613. package/dist/index.d.ts +42 -0
  614. package/dist/index.d.ts.map +1 -0
  615. package/dist/index.js +4433 -0
  616. package/dist/index.js.map +1 -0
  617. package/dist/init/claudeConfigInjector.d.ts +116 -0
  618. package/dist/init/claudeConfigInjector.d.ts.map +1 -0
  619. package/dist/init/claudeConfigInjector.js +1154 -0
  620. package/dist/init/claudeConfigInjector.js.map +1 -0
  621. package/dist/installer/autoInstall.d.ts +72 -0
  622. package/dist/installer/autoInstall.d.ts.map +1 -0
  623. package/dist/installer/autoInstall.js +617 -0
  624. package/dist/installer/autoInstall.js.map +1 -0
  625. package/dist/installer/dbSetup.d.ts +84 -0
  626. package/dist/installer/dbSetup.d.ts.map +1 -0
  627. package/dist/installer/dbSetup.js +350 -0
  628. package/dist/installer/dbSetup.js.map +1 -0
  629. package/dist/installer/firstRun.d.ts +49 -0
  630. package/dist/installer/firstRun.d.ts.map +1 -0
  631. package/dist/installer/firstRun.js +207 -0
  632. package/dist/installer/firstRun.js.map +1 -0
  633. package/dist/installer/index.d.ts +10 -0
  634. package/dist/installer/index.d.ts.map +1 -0
  635. package/dist/installer/index.js +10 -0
  636. package/dist/installer/index.js.map +1 -0
  637. package/dist/installer/silentAutoInstall.d.ts +99 -0
  638. package/dist/installer/silentAutoInstall.d.ts.map +1 -0
  639. package/dist/installer/silentAutoInstall.js +491 -0
  640. package/dist/installer/silentAutoInstall.js.map +1 -0
  641. package/dist/installer/systemDeps.d.ts +54 -0
  642. package/dist/installer/systemDeps.d.ts.map +1 -0
  643. package/dist/installer/systemDeps.js +322 -0
  644. package/dist/installer/systemDeps.js.map +1 -0
  645. package/dist/mcp/cliNotifications.d.ts +133 -0
  646. package/dist/mcp/cliNotifications.d.ts.map +1 -0
  647. package/dist/mcp/cliNotifications.js +289 -0
  648. package/dist/mcp/cliNotifications.js.map +1 -0
  649. package/dist/mcp/embeddingServerManager.d.ts +307 -0
  650. package/dist/mcp/embeddingServerManager.d.ts.map +1 -0
  651. package/dist/mcp/embeddingServerManager.js +2081 -0
  652. package/dist/mcp/embeddingServerManager.js.map +1 -0
  653. package/dist/mcp/healthMonitor.d.ts +196 -0
  654. package/dist/mcp/healthMonitor.d.ts.map +1 -0
  655. package/dist/mcp/healthMonitor.js +685 -0
  656. package/dist/mcp/healthMonitor.js.map +1 -0
  657. package/dist/mcp/hotReloadManager.d.ts +101 -0
  658. package/dist/mcp/hotReloadManager.d.ts.map +1 -0
  659. package/dist/mcp/hotReloadManager.js +251 -0
  660. package/dist/mcp/hotReloadManager.js.map +1 -0
  661. package/dist/mcp/index.d.ts +16 -0
  662. package/dist/mcp/index.d.ts.map +1 -0
  663. package/dist/mcp/index.js +22 -0
  664. package/dist/mcp/index.js.map +1 -0
  665. package/dist/mcp/mcpProtocolHandler.d.ts +64 -0
  666. package/dist/mcp/mcpProtocolHandler.d.ts.map +1 -0
  667. package/dist/mcp/mcpProtocolHandler.js +253 -0
  668. package/dist/mcp/mcpProtocolHandler.js.map +1 -0
  669. package/dist/mcp/miniCOTServerManager.d.ts +336 -0
  670. package/dist/mcp/miniCOTServerManager.d.ts.map +1 -0
  671. package/dist/mcp/miniCOTServerManager.js +1384 -0
  672. package/dist/mcp/miniCOTServerManager.js.map +1 -0
  673. package/dist/mcp/promptExecutor.d.ts +188 -0
  674. package/dist/mcp/promptExecutor.d.ts.map +1 -0
  675. package/dist/mcp/promptExecutor.js +469 -0
  676. package/dist/mcp/promptExecutor.js.map +1 -0
  677. package/dist/mcp/reloadBroadcast.d.ts +127 -0
  678. package/dist/mcp/reloadBroadcast.d.ts.map +1 -0
  679. package/dist/mcp/reloadBroadcast.js +275 -0
  680. package/dist/mcp/reloadBroadcast.js.map +1 -0
  681. package/dist/mcp/resilientTransport.d.ts +249 -0
  682. package/dist/mcp/resilientTransport.d.ts.map +1 -0
  683. package/dist/mcp/resilientTransport.js +931 -0
  684. package/dist/mcp/resilientTransport.js.map +1 -0
  685. package/dist/mcp/samplingHandler.d.ts +129 -0
  686. package/dist/mcp/samplingHandler.d.ts.map +1 -0
  687. package/dist/mcp/samplingHandler.js +276 -0
  688. package/dist/mcp/samplingHandler.js.map +1 -0
  689. package/dist/mcp/specMemServer.d.ts +305 -0
  690. package/dist/mcp/specMemServer.d.ts.map +1 -0
  691. package/dist/mcp/specMemServer.js +2048 -0
  692. package/dist/mcp/specMemServer.js.map +1 -0
  693. package/dist/mcp/toolRegistry.d.ts +122 -0
  694. package/dist/mcp/toolRegistry.d.ts.map +1 -0
  695. package/dist/mcp/toolRegistry.js +609 -0
  696. package/dist/mcp/toolRegistry.js.map +1 -0
  697. package/dist/mcp/tools/embeddingControl.d.ts +114 -0
  698. package/dist/mcp/tools/embeddingControl.d.ts.map +1 -0
  699. package/dist/mcp/tools/embeddingControl.js +222 -0
  700. package/dist/mcp/tools/embeddingControl.js.map +1 -0
  701. package/dist/mcp/tools/index.d.ts +10 -0
  702. package/dist/mcp/tools/index.d.ts.map +1 -0
  703. package/dist/mcp/tools/index.js +17 -0
  704. package/dist/mcp/tools/index.js.map +1 -0
  705. package/dist/mcp/tools/teamComms.d.ts +444 -0
  706. package/dist/mcp/tools/teamComms.d.ts.map +1 -0
  707. package/dist/mcp/tools/teamComms.js +1953 -0
  708. package/dist/mcp/tools/teamComms.js.map +1 -0
  709. package/dist/mcp/triggerSystem.d.ts +129 -0
  710. package/dist/mcp/triggerSystem.d.ts.map +1 -0
  711. package/dist/mcp/triggerSystem.js +363 -0
  712. package/dist/mcp/triggerSystem.js.map +1 -0
  713. package/dist/mcp/watcherIntegration.d.ts +77 -0
  714. package/dist/mcp/watcherIntegration.d.ts.map +1 -0
  715. package/dist/mcp/watcherIntegration.js +428 -0
  716. package/dist/mcp/watcherIntegration.js.map +1 -0
  717. package/dist/mcp/watcherToolWrappers.d.ts +89 -0
  718. package/dist/mcp/watcherToolWrappers.d.ts.map +1 -0
  719. package/dist/mcp/watcherToolWrappers.js +91 -0
  720. package/dist/mcp/watcherToolWrappers.js.map +1 -0
  721. package/dist/memorization/claudeCodeMigration.d.ts +34 -0
  722. package/dist/memorization/claudeCodeMigration.d.ts.map +1 -0
  723. package/dist/memorization/claudeCodeMigration.js +210 -0
  724. package/dist/memorization/claudeCodeMigration.js.map +1 -0
  725. package/dist/memorization/claudeCodeTracker.d.ts +147 -0
  726. package/dist/memorization/claudeCodeTracker.d.ts.map +1 -0
  727. package/dist/memorization/claudeCodeTracker.js +424 -0
  728. package/dist/memorization/claudeCodeTracker.js.map +1 -0
  729. package/dist/memorization/codeMemorizer.d.ts +158 -0
  730. package/dist/memorization/codeMemorizer.d.ts.map +1 -0
  731. package/dist/memorization/codeMemorizer.js +357 -0
  732. package/dist/memorization/codeMemorizer.js.map +1 -0
  733. package/dist/memorization/codeRecall.d.ts +156 -0
  734. package/dist/memorization/codeRecall.d.ts.map +1 -0
  735. package/dist/memorization/codeRecall.js +499 -0
  736. package/dist/memorization/codeRecall.js.map +1 -0
  737. package/dist/memorization/index.d.ts +55 -0
  738. package/dist/memorization/index.d.ts.map +1 -0
  739. package/dist/memorization/index.js +64 -0
  740. package/dist/memorization/index.js.map +1 -0
  741. package/dist/memorization/memorizationTools.d.ts +413 -0
  742. package/dist/memorization/memorizationTools.d.ts.map +1 -0
  743. package/dist/memorization/memorizationTools.js +513 -0
  744. package/dist/memorization/memorizationTools.js.map +1 -0
  745. package/dist/memorization/watcherIntegration.d.ts +100 -0
  746. package/dist/memorization/watcherIntegration.d.ts.map +1 -0
  747. package/dist/memorization/watcherIntegration.js +196 -0
  748. package/dist/memorization/watcherIntegration.js.map +1 -0
  749. package/dist/memory/humanLikeMemory.d.ts +206 -0
  750. package/dist/memory/humanLikeMemory.d.ts.map +1 -0
  751. package/dist/memory/humanLikeMemory.js +603 -0
  752. package/dist/memory/humanLikeMemory.js.map +1 -0
  753. package/dist/memory/index.d.ts +22 -0
  754. package/dist/memory/index.d.ts.map +1 -0
  755. package/dist/memory/index.js +24 -0
  756. package/dist/memory/index.js.map +1 -0
  757. package/dist/memory/memoryEvolutionMigration.d.ts +36 -0
  758. package/dist/memory/memoryEvolutionMigration.d.ts.map +1 -0
  759. package/dist/memory/memoryEvolutionMigration.js +371 -0
  760. package/dist/memory/memoryEvolutionMigration.js.map +1 -0
  761. package/dist/memory/quadrantSearch.d.ts +221 -0
  762. package/dist/memory/quadrantSearch.d.ts.map +1 -0
  763. package/dist/memory/quadrantSearch.js +897 -0
  764. package/dist/memory/quadrantSearch.js.map +1 -0
  765. package/dist/middleware/apiVersioning.d.ts +83 -0
  766. package/dist/middleware/apiVersioning.d.ts.map +1 -0
  767. package/dist/middleware/apiVersioning.js +152 -0
  768. package/dist/middleware/apiVersioning.js.map +1 -0
  769. package/dist/middleware/compression.d.ts +48 -0
  770. package/dist/middleware/compression.d.ts.map +1 -0
  771. package/dist/middleware/compression.js +240 -0
  772. package/dist/middleware/compression.js.map +1 -0
  773. package/dist/middleware/csrf.d.ts +118 -0
  774. package/dist/middleware/csrf.d.ts.map +1 -0
  775. package/dist/middleware/csrf.js +300 -0
  776. package/dist/middleware/csrf.js.map +1 -0
  777. package/dist/middleware/index.d.ts +13 -0
  778. package/dist/middleware/index.d.ts.map +1 -0
  779. package/dist/middleware/index.js +17 -0
  780. package/dist/middleware/index.js.map +1 -0
  781. package/dist/middleware/wsRateLimiter.d.ts +129 -0
  782. package/dist/middleware/wsRateLimiter.d.ts.map +1 -0
  783. package/dist/middleware/wsRateLimiter.js +279 -0
  784. package/dist/middleware/wsRateLimiter.js.map +1 -0
  785. package/dist/migrations/run.d.ts +2 -0
  786. package/dist/migrations/run.d.ts.map +1 -0
  787. package/dist/migrations/run.js +25 -0
  788. package/dist/migrations/run.js.map +1 -0
  789. package/dist/migrations/syncDimensions.d.ts +24 -0
  790. package/dist/migrations/syncDimensions.d.ts.map +1 -0
  791. package/dist/migrations/syncDimensions.js +140 -0
  792. package/dist/migrations/syncDimensions.js.map +1 -0
  793. package/dist/migrations/teamComms.d.ts +16 -0
  794. package/dist/migrations/teamComms.d.ts.map +1 -0
  795. package/dist/migrations/teamComms.js +210 -0
  796. package/dist/migrations/teamComms.js.map +1 -0
  797. package/dist/openapi/index.d.ts +10 -0
  798. package/dist/openapi/index.d.ts.map +1 -0
  799. package/dist/openapi/index.js +10 -0
  800. package/dist/openapi/index.js.map +1 -0
  801. package/dist/openapi/spec.d.ts +902 -0
  802. package/dist/openapi/spec.d.ts.map +1 -0
  803. package/dist/openapi/spec.js +733 -0
  804. package/dist/openapi/spec.js.map +1 -0
  805. package/dist/packages/dependencyHistory.d.ts +113 -0
  806. package/dist/packages/dependencyHistory.d.ts.map +1 -0
  807. package/dist/packages/dependencyHistory.js +360 -0
  808. package/dist/packages/dependencyHistory.js.map +1 -0
  809. package/dist/packages/index.d.ts +30 -0
  810. package/dist/packages/index.d.ts.map +1 -0
  811. package/dist/packages/index.js +65 -0
  812. package/dist/packages/index.js.map +1 -0
  813. package/dist/packages/packageTools.d.ts +255 -0
  814. package/dist/packages/packageTools.d.ts.map +1 -0
  815. package/dist/packages/packageTools.js +242 -0
  816. package/dist/packages/packageTools.js.map +1 -0
  817. package/dist/packages/packageTracker.d.ts +98 -0
  818. package/dist/packages/packageTracker.d.ts.map +1 -0
  819. package/dist/packages/packageTracker.js +268 -0
  820. package/dist/packages/packageTracker.js.map +1 -0
  821. package/dist/packages/packageWatcher.d.ts +62 -0
  822. package/dist/packages/packageWatcher.d.ts.map +1 -0
  823. package/dist/packages/packageWatcher.js +146 -0
  824. package/dist/packages/packageWatcher.js.map +1 -0
  825. package/dist/providers/MiniCOTProvider.d.ts +48 -0
  826. package/dist/providers/MiniCOTProvider.d.ts.map +1 -0
  827. package/dist/providers/MiniCOTProvider.js +98 -0
  828. package/dist/providers/MiniCOTProvider.js.map +1 -0
  829. package/dist/reminders/index.d.ts +5 -0
  830. package/dist/reminders/index.d.ts.map +1 -0
  831. package/dist/reminders/index.js +5 -0
  832. package/dist/reminders/index.js.map +1 -0
  833. package/dist/reminders/skillReminder.d.ts +131 -0
  834. package/dist/reminders/skillReminder.d.ts.map +1 -0
  835. package/dist/reminders/skillReminder.js +386 -0
  836. package/dist/reminders/skillReminder.js.map +1 -0
  837. package/dist/search.d.ts +35 -0
  838. package/dist/search.d.ts.map +1 -0
  839. package/dist/search.js +574 -0
  840. package/dist/search.js.map +1 -0
  841. package/dist/security/localhostOnly.d.ts +36 -0
  842. package/dist/security/localhostOnly.d.ts.map +1 -0
  843. package/dist/security/localhostOnly.js +101 -0
  844. package/dist/security/localhostOnly.js.map +1 -0
  845. package/dist/services/CameraZoomSearch.d.ts +206 -0
  846. package/dist/services/CameraZoomSearch.d.ts.map +1 -0
  847. package/dist/services/CameraZoomSearch.js +669 -0
  848. package/dist/services/CameraZoomSearch.js.map +1 -0
  849. package/dist/services/DataFlowPipeline.d.ts +111 -0
  850. package/dist/services/DataFlowPipeline.d.ts.map +1 -0
  851. package/dist/services/DataFlowPipeline.js +379 -0
  852. package/dist/services/DataFlowPipeline.js.map +1 -0
  853. package/dist/services/DimensionAdapter.d.ts +194 -0
  854. package/dist/services/DimensionAdapter.d.ts.map +1 -0
  855. package/dist/services/DimensionAdapter.js +566 -0
  856. package/dist/services/DimensionAdapter.js.map +1 -0
  857. package/dist/services/DimensionService.d.ts +252 -0
  858. package/dist/services/DimensionService.d.ts.map +1 -0
  859. package/dist/services/DimensionService.js +564 -0
  860. package/dist/services/DimensionService.js.map +1 -0
  861. package/dist/services/EmbeddingQueue.d.ts +71 -0
  862. package/dist/services/EmbeddingQueue.d.ts.map +1 -0
  863. package/dist/services/EmbeddingQueue.js +258 -0
  864. package/dist/services/EmbeddingQueue.js.map +1 -0
  865. package/dist/services/MemoryDrilldown.d.ts +226 -0
  866. package/dist/services/MemoryDrilldown.d.ts.map +1 -0
  867. package/dist/services/MemoryDrilldown.js +479 -0
  868. package/dist/services/MemoryDrilldown.js.map +1 -0
  869. package/dist/services/MiniCOTScorer.d.ts +140 -0
  870. package/dist/services/MiniCOTScorer.d.ts.map +1 -0
  871. package/dist/services/MiniCOTScorer.js +292 -0
  872. package/dist/services/MiniCOTScorer.js.map +1 -0
  873. package/dist/services/ProjectContext.d.ts +342 -0
  874. package/dist/services/ProjectContext.d.ts.map +1 -0
  875. package/dist/services/ProjectContext.js +667 -0
  876. package/dist/services/ProjectContext.js.map +1 -0
  877. package/dist/services/ResponseCompactor.d.ts +135 -0
  878. package/dist/services/ResponseCompactor.d.ts.map +1 -0
  879. package/dist/services/ResponseCompactor.js +501 -0
  880. package/dist/services/ResponseCompactor.js.map +1 -0
  881. package/dist/services/TeamCommsDbService.d.ts +202 -0
  882. package/dist/services/TeamCommsDbService.d.ts.map +1 -0
  883. package/dist/services/TeamCommsDbService.js +526 -0
  884. package/dist/services/TeamCommsDbService.js.map +1 -0
  885. package/dist/services/UnifiedPasswordService.d.ts +166 -0
  886. package/dist/services/UnifiedPasswordService.d.ts.map +1 -0
  887. package/dist/services/UnifiedPasswordService.js +587 -0
  888. package/dist/services/UnifiedPasswordService.js.map +1 -0
  889. package/dist/services/adaptiveSearchConfig.d.ts +64 -0
  890. package/dist/services/adaptiveSearchConfig.d.ts.map +1 -0
  891. package/dist/services/adaptiveSearchConfig.js +187 -0
  892. package/dist/services/adaptiveSearchConfig.js.map +1 -0
  893. package/dist/skills/index.d.ts +8 -0
  894. package/dist/skills/index.d.ts.map +1 -0
  895. package/dist/skills/index.js +8 -0
  896. package/dist/skills/index.js.map +1 -0
  897. package/dist/skills/skillScanner.d.ts +203 -0
  898. package/dist/skills/skillScanner.d.ts.map +1 -0
  899. package/dist/skills/skillScanner.js +559 -0
  900. package/dist/skills/skillScanner.js.map +1 -0
  901. package/dist/skills/skillsResource.d.ts +69 -0
  902. package/dist/skills/skillsResource.d.ts.map +1 -0
  903. package/dist/skills/skillsResource.js +257 -0
  904. package/dist/skills/skillsResource.js.map +1 -0
  905. package/dist/startup/index.d.ts +9 -0
  906. package/dist/startup/index.d.ts.map +1 -0
  907. package/dist/startup/index.js +12 -0
  908. package/dist/startup/index.js.map +1 -0
  909. package/dist/startup/startupIndexing.d.ts +80 -0
  910. package/dist/startup/startupIndexing.d.ts.map +1 -0
  911. package/dist/startup/startupIndexing.js +463 -0
  912. package/dist/startup/startupIndexing.js.map +1 -0
  913. package/dist/startup/validation.d.ts +89 -0
  914. package/dist/startup/validation.d.ts.map +1 -0
  915. package/dist/startup/validation.js +590 -0
  916. package/dist/startup/validation.js.map +1 -0
  917. package/dist/storage/index.d.ts +4 -0
  918. package/dist/storage/index.d.ts.map +1 -0
  919. package/dist/storage/index.js +4 -0
  920. package/dist/storage/index.js.map +1 -0
  921. package/dist/storage/overflowManager.d.ts +80 -0
  922. package/dist/storage/overflowManager.d.ts.map +1 -0
  923. package/dist/storage/overflowManager.js +317 -0
  924. package/dist/storage/overflowManager.js.map +1 -0
  925. package/dist/storage/overflowStorage.d.ts +69 -0
  926. package/dist/storage/overflowStorage.d.ts.map +1 -0
  927. package/dist/storage/overflowStorage.js +379 -0
  928. package/dist/storage/overflowStorage.js.map +1 -0
  929. package/dist/storage/toonFormat.d.ts +50 -0
  930. package/dist/storage/toonFormat.d.ts.map +1 -0
  931. package/dist/storage/toonFormat.js +224 -0
  932. package/dist/storage/toonFormat.js.map +1 -0
  933. package/dist/team-members/communication.d.ts +237 -0
  934. package/dist/team-members/communication.d.ts.map +1 -0
  935. package/dist/team-members/communication.js +650 -0
  936. package/dist/team-members/communication.js.map +1 -0
  937. package/dist/team-members/index.d.ts +14 -0
  938. package/dist/team-members/index.d.ts.map +1 -0
  939. package/dist/team-members/index.js +22 -0
  940. package/dist/team-members/index.js.map +1 -0
  941. package/dist/team-members/taskOrchestrator.d.ts +224 -0
  942. package/dist/team-members/taskOrchestrator.d.ts.map +1 -0
  943. package/dist/team-members/taskOrchestrator.js +574 -0
  944. package/dist/team-members/taskOrchestrator.js.map +1 -0
  945. package/dist/team-members/taskTeamMemberLogger.d.ts +157 -0
  946. package/dist/team-members/taskTeamMemberLogger.d.ts.map +1 -0
  947. package/dist/team-members/taskTeamMemberLogger.js +478 -0
  948. package/dist/team-members/taskTeamMemberLogger.js.map +1 -0
  949. package/dist/team-members/teamCommsService.d.ts +221 -0
  950. package/dist/team-members/teamCommsService.d.ts.map +1 -0
  951. package/dist/team-members/teamCommsService.js +628 -0
  952. package/dist/team-members/teamCommsService.js.map +1 -0
  953. package/dist/team-members/teamMemberChannels.d.ts +217 -0
  954. package/dist/team-members/teamMemberChannels.d.ts.map +1 -0
  955. package/dist/team-members/teamMemberChannels.js +687 -0
  956. package/dist/team-members/teamMemberChannels.js.map +1 -0
  957. package/dist/team-members/teamMemberDashboard.d.ts +222 -0
  958. package/dist/team-members/teamMemberDashboard.d.ts.map +1 -0
  959. package/dist/team-members/teamMemberDashboard.js +610 -0
  960. package/dist/team-members/teamMemberDashboard.js.map +1 -0
  961. package/dist/team-members/teamMemberDeployment.d.ts +60 -0
  962. package/dist/team-members/teamMemberDeployment.d.ts.map +1 -0
  963. package/dist/team-members/teamMemberDeployment.js +429 -0
  964. package/dist/team-members/teamMemberDeployment.js.map +1 -0
  965. package/dist/team-members/teamMemberDiscovery.d.ts +178 -0
  966. package/dist/team-members/teamMemberDiscovery.d.ts.map +1 -0
  967. package/dist/team-members/teamMemberDiscovery.js +446 -0
  968. package/dist/team-members/teamMemberDiscovery.js.map +1 -0
  969. package/dist/team-members/teamMemberHistory.d.ts +80 -0
  970. package/dist/team-members/teamMemberHistory.d.ts.map +1 -0
  971. package/dist/team-members/teamMemberHistory.js +426 -0
  972. package/dist/team-members/teamMemberHistory.js.map +1 -0
  973. package/dist/team-members/teamMemberLimits.d.ts +66 -0
  974. package/dist/team-members/teamMemberLimits.d.ts.map +1 -0
  975. package/dist/team-members/teamMemberLimits.js +259 -0
  976. package/dist/team-members/teamMemberLimits.js.map +1 -0
  977. package/dist/team-members/teamMemberRegistry.d.ts +199 -0
  978. package/dist/team-members/teamMemberRegistry.d.ts.map +1 -0
  979. package/dist/team-members/teamMemberRegistry.js +572 -0
  980. package/dist/team-members/teamMemberRegistry.js.map +1 -0
  981. package/dist/team-members/teamMemberTracker.d.ts +148 -0
  982. package/dist/team-members/teamMemberTracker.d.ts.map +1 -0
  983. package/dist/team-members/teamMemberTracker.js +828 -0
  984. package/dist/team-members/teamMemberTracker.js.map +1 -0
  985. package/dist/team-members/workers/aiWorker.d.ts +53 -0
  986. package/dist/team-members/workers/aiWorker.d.ts.map +1 -0
  987. package/dist/team-members/workers/aiWorker.js +322 -0
  988. package/dist/team-members/workers/aiWorker.js.map +1 -0
  989. package/dist/team-members/workers/baseWorker.d.ts +101 -0
  990. package/dist/team-members/workers/baseWorker.d.ts.map +1 -0
  991. package/dist/team-members/workers/baseWorker.js +179 -0
  992. package/dist/team-members/workers/baseWorker.js.map +1 -0
  993. package/dist/team-members/workers/codeReviewWorker.d.ts +3 -0
  994. package/dist/team-members/workers/codeReviewWorker.d.ts.map +1 -0
  995. package/dist/team-members/workers/codeReviewWorker.js +144 -0
  996. package/dist/team-members/workers/codeReviewWorker.js.map +1 -0
  997. package/dist/team-members/workers/index.d.ts +7 -0
  998. package/dist/team-members/workers/index.d.ts.map +1 -0
  999. package/dist/team-members/workers/index.js +7 -0
  1000. package/dist/team-members/workers/index.js.map +1 -0
  1001. package/dist/team-members/workers/repairWorker.d.ts +9 -0
  1002. package/dist/team-members/workers/repairWorker.d.ts.map +1 -0
  1003. package/dist/team-members/workers/repairWorker.js +102 -0
  1004. package/dist/team-members/workers/repairWorker.js.map +1 -0
  1005. package/dist/team-members/workers/sendToTeamMemberB.d.ts +9 -0
  1006. package/dist/team-members/workers/sendToTeamMemberB.d.ts.map +1 -0
  1007. package/dist/team-members/workers/sendToTeamMemberB.js +105 -0
  1008. package/dist/team-members/workers/sendToTeamMemberB.js.map +1 -0
  1009. package/dist/team-members/workers/specmemClient.d.ts +179 -0
  1010. package/dist/team-members/workers/specmemClient.d.ts.map +1 -0
  1011. package/dist/team-members/workers/specmemClient.js +421 -0
  1012. package/dist/team-members/workers/specmemClient.js.map +1 -0
  1013. package/dist/team-members/workers/testCommunication.d.ts +8 -0
  1014. package/dist/team-members/workers/testCommunication.d.ts.map +1 -0
  1015. package/dist/team-members/workers/testCommunication.js +136 -0
  1016. package/dist/team-members/workers/testCommunication.js.map +1 -0
  1017. package/dist/team-members/workers/testCommunicationSuite.d.ts +26 -0
  1018. package/dist/team-members/workers/testCommunicationSuite.d.ts.map +1 -0
  1019. package/dist/team-members/workers/testCommunicationSuite.js +415 -0
  1020. package/dist/team-members/workers/testCommunicationSuite.js.map +1 -0
  1021. package/dist/team-members/workers/testWorker.d.ts +9 -0
  1022. package/dist/team-members/workers/testWorker.d.ts.map +1 -0
  1023. package/dist/team-members/workers/testWorker.js +107 -0
  1024. package/dist/team-members/workers/testWorker.js.map +1 -0
  1025. package/dist/tools/agentDefinitions.d.ts +30 -0
  1026. package/dist/tools/agentDefinitions.d.ts.map +1 -0
  1027. package/dist/tools/agentDefinitions.js +166 -0
  1028. package/dist/tools/agentDefinitions.js.map +1 -0
  1029. package/dist/tools/goofy/checkSyncStatus.d.ts +68 -0
  1030. package/dist/tools/goofy/checkSyncStatus.d.ts.map +1 -0
  1031. package/dist/tools/goofy/checkSyncStatus.js +112 -0
  1032. package/dist/tools/goofy/checkSyncStatus.js.map +1 -0
  1033. package/dist/tools/goofy/codeMemoryLink.d.ts +82 -0
  1034. package/dist/tools/goofy/codeMemoryLink.d.ts.map +1 -0
  1035. package/dist/tools/goofy/codeMemoryLink.js +212 -0
  1036. package/dist/tools/goofy/codeMemoryLink.js.map +1 -0
  1037. package/dist/tools/goofy/compareInstanceMemory.d.ts +97 -0
  1038. package/dist/tools/goofy/compareInstanceMemory.d.ts.map +1 -0
  1039. package/dist/tools/goofy/compareInstanceMemory.js +218 -0
  1040. package/dist/tools/goofy/compareInstanceMemory.js.map +1 -0
  1041. package/dist/tools/goofy/createReasoningChain.d.ts +135 -0
  1042. package/dist/tools/goofy/createReasoningChain.d.ts.map +1 -0
  1043. package/dist/tools/goofy/createReasoningChain.js +257 -0
  1044. package/dist/tools/goofy/createReasoningChain.js.map +1 -0
  1045. package/dist/tools/goofy/deployTeamMember.d.ts +63 -0
  1046. package/dist/tools/goofy/deployTeamMember.d.ts.map +1 -0
  1047. package/dist/tools/goofy/deployTeamMember.js +103 -0
  1048. package/dist/tools/goofy/deployTeamMember.js.map +1 -0
  1049. package/dist/tools/goofy/drillDown.d.ts +143 -0
  1050. package/dist/tools/goofy/drillDown.d.ts.map +1 -0
  1051. package/dist/tools/goofy/drillDown.js +288 -0
  1052. package/dist/tools/goofy/drillDown.js.map +1 -0
  1053. package/dist/tools/goofy/extractClaudeSessions.d.ts +90 -0
  1054. package/dist/tools/goofy/extractClaudeSessions.d.ts.map +1 -0
  1055. package/dist/tools/goofy/extractClaudeSessions.js +277 -0
  1056. package/dist/tools/goofy/extractClaudeSessions.js.map +1 -0
  1057. package/dist/tools/goofy/extractContextRestorations.d.ts +70 -0
  1058. package/dist/tools/goofy/extractContextRestorations.d.ts.map +1 -0
  1059. package/dist/tools/goofy/extractContextRestorations.js +100 -0
  1060. package/dist/tools/goofy/extractContextRestorations.js.map +1 -0
  1061. package/dist/tools/goofy/findCodePointers.d.ts +364 -0
  1062. package/dist/tools/goofy/findCodePointers.d.ts.map +1 -0
  1063. package/dist/tools/goofy/findCodePointers.js +1764 -0
  1064. package/dist/tools/goofy/findCodePointers.js.map +1 -0
  1065. package/dist/tools/goofy/findMemoryGallery.d.ts +40 -0
  1066. package/dist/tools/goofy/findMemoryGallery.d.ts.map +1 -0
  1067. package/dist/tools/goofy/findMemoryGallery.js +66 -0
  1068. package/dist/tools/goofy/findMemoryGallery.js.map +1 -0
  1069. package/dist/tools/goofy/findWhatISaid.d.ts +300 -0
  1070. package/dist/tools/goofy/findWhatISaid.d.ts.map +1 -0
  1071. package/dist/tools/goofy/findWhatISaid.js +2547 -0
  1072. package/dist/tools/goofy/findWhatISaid.js.map +1 -0
  1073. package/dist/tools/goofy/forceResync.d.ts +57 -0
  1074. package/dist/tools/goofy/forceResync.d.ts.map +1 -0
  1075. package/dist/tools/goofy/forceResync.js +100 -0
  1076. package/dist/tools/goofy/forceResync.js.map +1 -0
  1077. package/dist/tools/goofy/getActiveTeamMembers.d.ts +48 -0
  1078. package/dist/tools/goofy/getActiveTeamMembers.d.ts.map +1 -0
  1079. package/dist/tools/goofy/getActiveTeamMembers.js +136 -0
  1080. package/dist/tools/goofy/getActiveTeamMembers.js.map +1 -0
  1081. package/dist/tools/goofy/getMemoryFull.d.ts +34 -0
  1082. package/dist/tools/goofy/getMemoryFull.d.ts.map +1 -0
  1083. package/dist/tools/goofy/getMemoryFull.js +58 -0
  1084. package/dist/tools/goofy/getMemoryFull.js.map +1 -0
  1085. package/dist/tools/goofy/getSessionWatcherStatus.d.ts +43 -0
  1086. package/dist/tools/goofy/getSessionWatcherStatus.d.ts.map +1 -0
  1087. package/dist/tools/goofy/getSessionWatcherStatus.js +92 -0
  1088. package/dist/tools/goofy/getSessionWatcherStatus.js.map +1 -0
  1089. package/dist/tools/goofy/getTeamMemberOutput.d.ts +35 -0
  1090. package/dist/tools/goofy/getTeamMemberOutput.d.ts.map +1 -0
  1091. package/dist/tools/goofy/getTeamMemberOutput.js +62 -0
  1092. package/dist/tools/goofy/getTeamMemberOutput.js.map +1 -0
  1093. package/dist/tools/goofy/getTeamMemberScreen.d.ts +28 -0
  1094. package/dist/tools/goofy/getTeamMemberScreen.d.ts.map +1 -0
  1095. package/dist/tools/goofy/getTeamMemberScreen.js +59 -0
  1096. package/dist/tools/goofy/getTeamMemberScreen.js.map +1 -0
  1097. package/dist/tools/goofy/getTeamMemberStatus.d.ts +33 -0
  1098. package/dist/tools/goofy/getTeamMemberStatus.d.ts.map +1 -0
  1099. package/dist/tools/goofy/getTeamMemberStatus.js +56 -0
  1100. package/dist/tools/goofy/getTeamMemberStatus.js.map +1 -0
  1101. package/dist/tools/goofy/index.d.ts +39 -0
  1102. package/dist/tools/goofy/index.d.ts.map +1 -0
  1103. package/dist/tools/goofy/index.js +51 -0
  1104. package/dist/tools/goofy/index.js.map +1 -0
  1105. package/dist/tools/goofy/interveneTeamMember.d.ts +33 -0
  1106. package/dist/tools/goofy/interveneTeamMember.d.ts.map +1 -0
  1107. package/dist/tools/goofy/interveneTeamMember.js +69 -0
  1108. package/dist/tools/goofy/interveneTeamMember.js.map +1 -0
  1109. package/dist/tools/goofy/killDeployedTeamMember.d.ts +29 -0
  1110. package/dist/tools/goofy/killDeployedTeamMember.d.ts.map +1 -0
  1111. package/dist/tools/goofy/killDeployedTeamMember.js +56 -0
  1112. package/dist/tools/goofy/killDeployedTeamMember.js.map +1 -0
  1113. package/dist/tools/goofy/linkTheVibes.d.ts +125 -0
  1114. package/dist/tools/goofy/linkTheVibes.d.ts.map +1 -0
  1115. package/dist/tools/goofy/linkTheVibes.js +354 -0
  1116. package/dist/tools/goofy/linkTheVibes.js.map +1 -0
  1117. package/dist/tools/goofy/listDeployedTeamMembers.d.ts +26 -0
  1118. package/dist/tools/goofy/listDeployedTeamMembers.d.ts.map +1 -0
  1119. package/dist/tools/goofy/listDeployedTeamMembers.js +52 -0
  1120. package/dist/tools/goofy/listDeployedTeamMembers.js.map +1 -0
  1121. package/dist/tools/goofy/listenForMessages.d.ts +56 -0
  1122. package/dist/tools/goofy/listenForMessages.d.ts.map +1 -0
  1123. package/dist/tools/goofy/listenForMessages.js +122 -0
  1124. package/dist/tools/goofy/listenForMessages.js.map +1 -0
  1125. package/dist/tools/goofy/memoryHealthCheck.d.ts +159 -0
  1126. package/dist/tools/goofy/memoryHealthCheck.d.ts.map +1 -0
  1127. package/dist/tools/goofy/memoryHealthCheck.js +443 -0
  1128. package/dist/tools/goofy/memoryHealthCheck.js.map +1 -0
  1129. package/dist/tools/goofy/rememberThisShit.d.ts +103 -0
  1130. package/dist/tools/goofy/rememberThisShit.d.ts.map +1 -0
  1131. package/dist/tools/goofy/rememberThisShit.js +291 -0
  1132. package/dist/tools/goofy/rememberThisShit.js.map +1 -0
  1133. package/dist/tools/goofy/sayToTeamMember.d.ts +55 -0
  1134. package/dist/tools/goofy/sayToTeamMember.d.ts.map +1 -0
  1135. package/dist/tools/goofy/sayToTeamMember.js +116 -0
  1136. package/dist/tools/goofy/sayToTeamMember.js.map +1 -0
  1137. package/dist/tools/goofy/selfMessage.d.ts +54 -0
  1138. package/dist/tools/goofy/selfMessage.d.ts.map +1 -0
  1139. package/dist/tools/goofy/selfMessage.js +111 -0
  1140. package/dist/tools/goofy/selfMessage.js.map +1 -0
  1141. package/dist/tools/goofy/sendHeartbeat.d.ts +53 -0
  1142. package/dist/tools/goofy/sendHeartbeat.d.ts.map +1 -0
  1143. package/dist/tools/goofy/sendHeartbeat.js +119 -0
  1144. package/dist/tools/goofy/sendHeartbeat.js.map +1 -0
  1145. package/dist/tools/goofy/showMeTheStats.d.ts +216 -0
  1146. package/dist/tools/goofy/showMeTheStats.d.ts.map +1 -0
  1147. package/dist/tools/goofy/showMeTheStats.js +535 -0
  1148. package/dist/tools/goofy/showMeTheStats.js.map +1 -0
  1149. package/dist/tools/goofy/smartRecall.d.ts +136 -0
  1150. package/dist/tools/goofy/smartRecall.d.ts.map +1 -0
  1151. package/dist/tools/goofy/smartRecall.js +286 -0
  1152. package/dist/tools/goofy/smartRecall.js.map +1 -0
  1153. package/dist/tools/goofy/smartSearch.d.ts +64 -0
  1154. package/dist/tools/goofy/smartSearch.d.ts.map +1 -0
  1155. package/dist/tools/goofy/smartSearch.js +89 -0
  1156. package/dist/tools/goofy/smartSearch.js.map +1 -0
  1157. package/dist/tools/goofy/smushMemoriesTogether.d.ts +128 -0
  1158. package/dist/tools/goofy/smushMemoriesTogether.d.ts.map +1 -0
  1159. package/dist/tools/goofy/smushMemoriesTogether.js +536 -0
  1160. package/dist/tools/goofy/smushMemoriesTogether.js.map +1 -0
  1161. package/dist/tools/goofy/spatialSearch.d.ts +198 -0
  1162. package/dist/tools/goofy/spatialSearch.d.ts.map +1 -0
  1163. package/dist/tools/goofy/spatialSearch.js +551 -0
  1164. package/dist/tools/goofy/spatialSearch.js.map +1 -0
  1165. package/dist/tools/goofy/spawnResearchTeamMember.d.ts +104 -0
  1166. package/dist/tools/goofy/spawnResearchTeamMember.d.ts.map +1 -0
  1167. package/dist/tools/goofy/spawnResearchTeamMember.js +290 -0
  1168. package/dist/tools/goofy/spawnResearchTeamMember.js.map +1 -0
  1169. package/dist/tools/goofy/spawnResearchTeamMemberTool.d.ts +121 -0
  1170. package/dist/tools/goofy/spawnResearchTeamMemberTool.d.ts.map +1 -0
  1171. package/dist/tools/goofy/spawnResearchTeamMemberTool.js +215 -0
  1172. package/dist/tools/goofy/spawnResearchTeamMemberTool.js.map +1 -0
  1173. package/dist/tools/goofy/startWatchingTheFiles.d.ts +81 -0
  1174. package/dist/tools/goofy/startWatchingTheFiles.d.ts.map +1 -0
  1175. package/dist/tools/goofy/startWatchingTheFiles.js +161 -0
  1176. package/dist/tools/goofy/startWatchingTheFiles.js.map +1 -0
  1177. package/dist/tools/goofy/stopWatchingTheFiles.d.ts +50 -0
  1178. package/dist/tools/goofy/stopWatchingTheFiles.d.ts.map +1 -0
  1179. package/dist/tools/goofy/stopWatchingTheFiles.js +81 -0
  1180. package/dist/tools/goofy/stopWatchingTheFiles.js.map +1 -0
  1181. package/dist/tools/goofy/whatDidIMean.d.ts +113 -0
  1182. package/dist/tools/goofy/whatDidIMean.d.ts.map +1 -0
  1183. package/dist/tools/goofy/whatDidIMean.js +401 -0
  1184. package/dist/tools/goofy/whatDidIMean.js.map +1 -0
  1185. package/dist/tools/goofy/yeahNahDeleteThat.d.ts +109 -0
  1186. package/dist/tools/goofy/yeahNahDeleteThat.d.ts.map +1 -0
  1187. package/dist/tools/goofy/yeahNahDeleteThat.js +319 -0
  1188. package/dist/tools/goofy/yeahNahDeleteThat.js.map +1 -0
  1189. package/dist/tools/index.d.ts +9 -0
  1190. package/dist/tools/index.d.ts.map +1 -0
  1191. package/dist/tools/index.js +9 -0
  1192. package/dist/tools/index.js.map +1 -0
  1193. package/dist/tools/teamMemberDeployer.d.ts +117 -0
  1194. package/dist/tools/teamMemberDeployer.d.ts.map +1 -0
  1195. package/dist/tools/teamMemberDeployer.js +613 -0
  1196. package/dist/tools/teamMemberDeployer.js.map +1 -0
  1197. package/dist/trace/index.d.ts +14 -0
  1198. package/dist/trace/index.d.ts.map +1 -0
  1199. package/dist/trace/index.js +16 -0
  1200. package/dist/trace/index.js.map +1 -0
  1201. package/dist/trace/tools/analyzeImpact.d.ts +90 -0
  1202. package/dist/trace/tools/analyzeImpact.d.ts.map +1 -0
  1203. package/dist/trace/tools/analyzeImpact.js +240 -0
  1204. package/dist/trace/tools/analyzeImpact.js.map +1 -0
  1205. package/dist/trace/tools/exploreDependencies.d.ts +81 -0
  1206. package/dist/trace/tools/exploreDependencies.d.ts.map +1 -0
  1207. package/dist/trace/tools/exploreDependencies.js +161 -0
  1208. package/dist/trace/tools/exploreDependencies.js.map +1 -0
  1209. package/dist/trace/tools/findSimilarBugs.d.ts +112 -0
  1210. package/dist/trace/tools/findSimilarBugs.d.ts.map +1 -0
  1211. package/dist/trace/tools/findSimilarBugs.js +216 -0
  1212. package/dist/trace/tools/findSimilarBugs.js.map +1 -0
  1213. package/dist/trace/tools/index.d.ts +22 -0
  1214. package/dist/trace/tools/index.d.ts.map +1 -0
  1215. package/dist/trace/tools/index.js +39 -0
  1216. package/dist/trace/tools/index.js.map +1 -0
  1217. package/dist/trace/tools/smartExplore.d.ts +126 -0
  1218. package/dist/trace/tools/smartExplore.d.ts.map +1 -0
  1219. package/dist/trace/tools/smartExplore.js +303 -0
  1220. package/dist/trace/tools/smartExplore.js.map +1 -0
  1221. package/dist/trace/tools/traceError.d.ts +101 -0
  1222. package/dist/trace/tools/traceError.d.ts.map +1 -0
  1223. package/dist/trace/tools/traceError.js +175 -0
  1224. package/dist/trace/tools/traceError.js.map +1 -0
  1225. package/dist/trace/traceExploreSystem.d.ts +271 -0
  1226. package/dist/trace/traceExploreSystem.d.ts.map +1 -0
  1227. package/dist/trace/traceExploreSystem.js +789 -0
  1228. package/dist/trace/traceExploreSystem.js.map +1 -0
  1229. package/dist/types/index.d.ts +421 -0
  1230. package/dist/types/index.d.ts.map +1 -0
  1231. package/dist/types/index.js +118 -0
  1232. package/dist/types/index.js.map +1 -0
  1233. package/dist/utils/circuitBreaker.d.ts +195 -0
  1234. package/dist/utils/circuitBreaker.d.ts.map +1 -0
  1235. package/dist/utils/circuitBreaker.js +374 -0
  1236. package/dist/utils/circuitBreaker.js.map +1 -0
  1237. package/dist/utils/cleanupHandler.d.ts +108 -0
  1238. package/dist/utils/cleanupHandler.d.ts.map +1 -0
  1239. package/dist/utils/cleanupHandler.js +203 -0
  1240. package/dist/utils/cleanupHandler.js.map +1 -0
  1241. package/dist/utils/compactXmlResponse.d.ts +60 -0
  1242. package/dist/utils/compactXmlResponse.d.ts.map +1 -0
  1243. package/dist/utils/compactXmlResponse.js +209 -0
  1244. package/dist/utils/compactXmlResponse.js.map +1 -0
  1245. package/dist/utils/cotBroadcast.d.ts +56 -0
  1246. package/dist/utils/cotBroadcast.d.ts.map +1 -0
  1247. package/dist/utils/cotBroadcast.js +157 -0
  1248. package/dist/utils/cotBroadcast.js.map +1 -0
  1249. package/dist/utils/debugLogger.d.ts +95 -0
  1250. package/dist/utils/debugLogger.d.ts.map +1 -0
  1251. package/dist/utils/debugLogger.js +610 -0
  1252. package/dist/utils/debugLogger.js.map +1 -0
  1253. package/dist/utils/fileProcessingQueue.d.ts +259 -0
  1254. package/dist/utils/fileProcessingQueue.d.ts.map +1 -0
  1255. package/dist/utils/fileProcessingQueue.js +714 -0
  1256. package/dist/utils/fileProcessingQueue.js.map +1 -0
  1257. package/dist/utils/humanReadableOutput.d.ts +124 -0
  1258. package/dist/utils/humanReadableOutput.d.ts.map +1 -0
  1259. package/dist/utils/humanReadableOutput.js +340 -0
  1260. package/dist/utils/humanReadableOutput.js.map +1 -0
  1261. package/dist/utils/index.d.ts +32 -0
  1262. package/dist/utils/index.d.ts.map +1 -0
  1263. package/dist/utils/index.js +71 -0
  1264. package/dist/utils/index.js.map +1 -0
  1265. package/dist/utils/instanceManager.d.ts +530 -0
  1266. package/dist/utils/instanceManager.d.ts.map +1 -0
  1267. package/dist/utils/instanceManager.js +1784 -0
  1268. package/dist/utils/instanceManager.js.map +1 -0
  1269. package/dist/utils/logger.d.ts +6 -0
  1270. package/dist/utils/logger.d.ts.map +1 -0
  1271. package/dist/utils/logger.js +49 -0
  1272. package/dist/utils/logger.js.map +1 -0
  1273. package/dist/utils/mapCleanup.d.ts +58 -0
  1274. package/dist/utils/mapCleanup.d.ts.map +1 -0
  1275. package/dist/utils/mapCleanup.js +150 -0
  1276. package/dist/utils/mapCleanup.js.map +1 -0
  1277. package/dist/utils/memoryManager.d.ts +349 -0
  1278. package/dist/utils/memoryManager.d.ts.map +1 -0
  1279. package/dist/utils/memoryManager.js +799 -0
  1280. package/dist/utils/memoryManager.js.map +1 -0
  1281. package/dist/utils/metrics.d.ts +160 -0
  1282. package/dist/utils/metrics.d.ts.map +1 -0
  1283. package/dist/utils/metrics.js +558 -0
  1284. package/dist/utils/metrics.js.map +1 -0
  1285. package/dist/utils/pathValidator.d.ts +96 -0
  1286. package/dist/utils/pathValidator.d.ts.map +1 -0
  1287. package/dist/utils/pathValidator.js +320 -0
  1288. package/dist/utils/pathValidator.js.map +1 -0
  1289. package/dist/utils/portAllocator.d.ts +296 -0
  1290. package/dist/utils/portAllocator.d.ts.map +1 -0
  1291. package/dist/utils/portAllocator.js +768 -0
  1292. package/dist/utils/portAllocator.js.map +1 -0
  1293. package/dist/utils/portUtils.d.ts +97 -0
  1294. package/dist/utils/portUtils.d.ts.map +1 -0
  1295. package/dist/utils/portUtils.js +285 -0
  1296. package/dist/utils/portUtils.js.map +1 -0
  1297. package/dist/utils/postgresAutoSetup.d.ts +55 -0
  1298. package/dist/utils/postgresAutoSetup.d.ts.map +1 -0
  1299. package/dist/utils/postgresAutoSetup.js +406 -0
  1300. package/dist/utils/postgresAutoSetup.js.map +1 -0
  1301. package/dist/utils/processHealthCheck.d.ts +61 -0
  1302. package/dist/utils/processHealthCheck.d.ts.map +1 -0
  1303. package/dist/utils/processHealthCheck.js +313 -0
  1304. package/dist/utils/processHealthCheck.js.map +1 -0
  1305. package/dist/utils/progressReporter.d.ts +151 -0
  1306. package/dist/utils/progressReporter.d.ts.map +1 -0
  1307. package/dist/utils/progressReporter.js +345 -0
  1308. package/dist/utils/progressReporter.js.map +1 -0
  1309. package/dist/utils/projectEnv.d.ts +73 -0
  1310. package/dist/utils/projectEnv.d.ts.map +1 -0
  1311. package/dist/utils/projectEnv.js +137 -0
  1312. package/dist/utils/projectEnv.js.map +1 -0
  1313. package/dist/utils/qoms.d.ts +122 -0
  1314. package/dist/utils/qoms.d.ts.map +1 -0
  1315. package/dist/utils/qoms.js +650 -0
  1316. package/dist/utils/qoms.js.map +1 -0
  1317. package/dist/utils/retryHelper.d.ts +122 -0
  1318. package/dist/utils/retryHelper.d.ts.map +1 -0
  1319. package/dist/utils/retryHelper.js +272 -0
  1320. package/dist/utils/retryHelper.js.map +1 -0
  1321. package/dist/utils/safeProcessTermination.d.ts +206 -0
  1322. package/dist/utils/safeProcessTermination.d.ts.map +1 -0
  1323. package/dist/utils/safeProcessTermination.js +552 -0
  1324. package/dist/utils/safeProcessTermination.js.map +1 -0
  1325. package/dist/utils/sessionInjector.d.ts +68 -0
  1326. package/dist/utils/sessionInjector.d.ts.map +1 -0
  1327. package/dist/utils/sessionInjector.js +189 -0
  1328. package/dist/utils/sessionInjector.js.map +1 -0
  1329. package/dist/utils/statsCache.d.ts +134 -0
  1330. package/dist/utils/statsCache.d.ts.map +1 -0
  1331. package/dist/utils/statsCache.js +285 -0
  1332. package/dist/utils/statsCache.js.map +1 -0
  1333. package/dist/utils/timeoutMiddleware.d.ts +81 -0
  1334. package/dist/utils/timeoutMiddleware.d.ts.map +1 -0
  1335. package/dist/utils/timeoutMiddleware.js +155 -0
  1336. package/dist/utils/timeoutMiddleware.js.map +1 -0
  1337. package/dist/utils/timerRegistry.d.ts +91 -0
  1338. package/dist/utils/timerRegistry.d.ts.map +1 -0
  1339. package/dist/utils/timerRegistry.js +187 -0
  1340. package/dist/utils/timerRegistry.js.map +1 -0
  1341. package/dist/utils/tokenCompressor.d.ts +332 -0
  1342. package/dist/utils/tokenCompressor.d.ts.map +1 -0
  1343. package/dist/utils/tokenCompressor.js +1306 -0
  1344. package/dist/utils/tokenCompressor.js.map +1 -0
  1345. package/dist/utils/tracing.d.ts +236 -0
  1346. package/dist/utils/tracing.d.ts.map +1 -0
  1347. package/dist/utils/tracing.js +378 -0
  1348. package/dist/utils/tracing.js.map +1 -0
  1349. package/dist/watcher/changeHandler.d.ts +123 -0
  1350. package/dist/watcher/changeHandler.d.ts.map +1 -0
  1351. package/dist/watcher/changeHandler.js +623 -0
  1352. package/dist/watcher/changeHandler.js.map +1 -0
  1353. package/dist/watcher/changeQueue.d.ts +133 -0
  1354. package/dist/watcher/changeQueue.d.ts.map +1 -0
  1355. package/dist/watcher/changeQueue.js +355 -0
  1356. package/dist/watcher/changeQueue.js.map +1 -0
  1357. package/dist/watcher/fileWatcher.d.ts +121 -0
  1358. package/dist/watcher/fileWatcher.d.ts.map +1 -0
  1359. package/dist/watcher/fileWatcher.js +531 -0
  1360. package/dist/watcher/fileWatcher.js.map +1 -0
  1361. package/dist/watcher/index.d.ts +94 -0
  1362. package/dist/watcher/index.d.ts.map +1 -0
  1363. package/dist/watcher/index.js +235 -0
  1364. package/dist/watcher/index.js.map +1 -0
  1365. package/dist/watcher/syncChecker.d.ts +93 -0
  1366. package/dist/watcher/syncChecker.d.ts.map +1 -0
  1367. package/dist/watcher/syncChecker.js +401 -0
  1368. package/dist/watcher/syncChecker.js.map +1 -0
  1369. package/dist/watcher/tsCompiler.d.ts +88 -0
  1370. package/dist/watcher/tsCompiler.d.ts.map +1 -0
  1371. package/dist/watcher/tsCompiler.js +212 -0
  1372. package/dist/watcher/tsCompiler.js.map +1 -0
  1373. package/embedding-sandbox/Dockerfile +77 -0
  1374. package/embedding-sandbox/Dockerfile.frankenstein +91 -0
  1375. package/embedding-sandbox/README.md +193 -0
  1376. package/embedding-sandbox/__pycache__/frankenstein-embeddings.cpython-312.pyc +0 -0
  1377. package/embedding-sandbox/__pycache__/frankenstein-embeddings.cpython-313.pyc +0 -0
  1378. package/embedding-sandbox/__pycache__/qqms_v2.cpython-312.pyc +0 -0
  1379. package/embedding-sandbox/__pycache__/qqms_v2.cpython-313.pyc +0 -0
  1380. package/embedding-sandbox/add_js_docs.py +684 -0
  1381. package/embedding-sandbox/build_docs_db.py +239 -0
  1382. package/embedding-sandbox/client.cjs +376 -0
  1383. package/embedding-sandbox/client.ts +913 -0
  1384. package/embedding-sandbox/deploy-frankenstein.sh +240 -0
  1385. package/embedding-sandbox/docker-compose.yml +60 -0
  1386. package/embedding-sandbox/docker-manager.py +325 -0
  1387. package/embedding-sandbox/docs/python_docs.db +0 -0
  1388. package/embedding-sandbox/download-model.mjs +79 -0
  1389. package/embedding-sandbox/download-model.py +28 -0
  1390. package/embedding-sandbox/embedding-supervisor.sh +164 -0
  1391. package/embedding-sandbox/frankenstein-embeddings.py +3940 -0
  1392. package/embedding-sandbox/manage-services.sh +354 -0
  1393. package/embedding-sandbox/overflow_queue.py +345 -0
  1394. package/embedding-sandbox/package.json +17 -0
  1395. package/embedding-sandbox/project_isolation.py +292 -0
  1396. package/embedding-sandbox/qqms_v2.py +967 -0
  1397. package/embedding-sandbox/ram-manager.sh +311 -0
  1398. package/embedding-sandbox/requirements-frankenstein.txt +7 -0
  1399. package/embedding-sandbox/run_js_docs.py +59 -0
  1400. package/embedding-sandbox/seed_docs.py +885 -0
  1401. package/embedding-sandbox/server-batch.mjs +228 -0
  1402. package/embedding-sandbox/server.mjs +389 -0
  1403. package/embedding-sandbox/specmem/sockets/claude-input-state.json +1 -0
  1404. package/embedding-sandbox/specmem/sockets/embedding-death-reason.txt +3 -0
  1405. package/embedding-sandbox/specmem/sockets/seen-sessions.json +1 -0
  1406. package/embedding-sandbox/specmem/sockets/session-start.lock +1 -0
  1407. package/embedding-sandbox/specmem/sockets/session-stops.log +7 -0
  1408. package/embedding-sandbox/start-frankenstein-throttled.sh +98 -0
  1409. package/embedding-sandbox/start-on-demand.sh +116 -0
  1410. package/embedding-sandbox/start-sandbox.sh +237 -0
  1411. package/embedding-sandbox/start-supervised.sh +11 -0
  1412. package/embedding-sandbox/stop-sandbox.sh +51 -0
  1413. package/embedding-sandbox/test-socket.mjs +61 -0
  1414. package/embedding-sandbox/warm-start.sh +353 -0
  1415. package/embedding-sandbox/warm_start_feeder.py +660 -0
  1416. package/legal/README.md +31 -0
  1417. package/legal/anthropic-privacy-center-screenshot-2026-01-30.png +0 -0
  1418. package/legal/anthropic-tos-screenshot-2026-01-30.png +0 -0
  1419. package/lib/codebase-bridge.cjs +308 -0
  1420. package/package.json +136 -0
  1421. package/plugins/specmem-agents/agents/bug-hunter.md +79 -0
  1422. package/plugins/specmem-agents/agents/memory-explorer.md +57 -0
  1423. package/plugins/specmem-agents/agents/team-coordinator.md +82 -0
  1424. package/scripts/auto-updater.cjs +399 -0
  1425. package/scripts/backfill-code-definition-embeddings.ts +440 -0
  1426. package/scripts/backfill-code-embeddings.ts +206 -0
  1427. package/scripts/capture-tos-screenshots.cjs +94 -0
  1428. package/scripts/check-global-install.cjs +67 -0
  1429. package/scripts/cleanup-embedding-servers.sh +25 -0
  1430. package/scripts/dashboard-standalone.sh +369 -0
  1431. package/scripts/deploy-hooks.cjs +1451 -0
  1432. package/scripts/deploy.sh +106 -0
  1433. package/scripts/docker-project-down.sh +83 -0
  1434. package/scripts/docker-project-list.sh +40 -0
  1435. package/scripts/docker-project-up.sh +79 -0
  1436. package/scripts/fast-backfill-embeddings.ts +173 -0
  1437. package/scripts/fast-batch-embedder.cjs +334 -0
  1438. package/scripts/first-run-model-setup.cjs +849 -0
  1439. package/scripts/global-postinstall.cjs +1957 -0
  1440. package/scripts/index-codebase.js +72 -0
  1441. package/scripts/migrate-fix-embeddings.py +110 -0
  1442. package/scripts/migrate-to-project-schemas.ts +525 -0
  1443. package/scripts/optimize-embedding-model.py +324 -0
  1444. package/scripts/optimize-instructions.cjs +530 -0
  1445. package/scripts/pack-docker-images.sh +68 -0
  1446. package/scripts/pack-for-testing.sh +130 -0
  1447. package/scripts/postinstall.cjs +54 -0
  1448. package/scripts/project-env.sh +51 -0
  1449. package/scripts/reset-db.sh +30 -0
  1450. package/scripts/run-indexer.ts +69 -0
  1451. package/scripts/run-migrations.js +47 -0
  1452. package/scripts/setup-db.sh +34 -0
  1453. package/scripts/setup-minimal-schema.sql +143 -0
  1454. package/scripts/skills/code-review.md +44 -0
  1455. package/scripts/skills/debugging.md +56 -0
  1456. package/scripts/skills/specmem-deployteam.md +239 -0
  1457. package/scripts/skills/teammemberskills/EFFICIENT_GREP.md +171 -0
  1458. package/scripts/skills/teammemberskills/task-planning.md +67 -0
  1459. package/scripts/specmem/sockets/session-start.lock +1 -0
  1460. package/scripts/specmem/sockets/session-stops.log +1 -0
  1461. package/scripts/specmem-health.sh +382 -0
  1462. package/scripts/specmem-init.cjs +6935 -0
  1463. package/scripts/strip-debug-logs.cjs +43 -0
  1464. package/scripts/test-mcp-standalone.sh +365 -0
  1465. package/scripts/test-optimized-models.py +166 -0
  1466. package/scripts/verify-embedding-fix.sh +148 -0
  1467. package/skills/code-review.md +44 -0
  1468. package/skills/debugging.md +56 -0
  1469. package/skills/specmem-deployteam.md +239 -0
  1470. package/skills/teammemberskills/EFFICIENT_GREP.md +171 -0
  1471. package/skills/teammemberskills/task-planning.md +67 -0
  1472. package/specmem-health.cjs +522 -0
  1473. package/specmem.env +216 -0
@@ -0,0 +1,1957 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * SPECMEM GLOBAL POSTINSTALL - FULL AUTO-INSTALL
4
+ * ===============================================
5
+ *
6
+ * Runs after `npm install -g specmem-hardwicksoftware`
7
+ * Auto-installs and configures EVERYTHING:
8
+ * 1. PostgreSQL (if missing)
9
+ * 2. pgvector extension
10
+ * 3. SpecMem database and user
11
+ * 4. hooks
12
+ * 5. Docker (embedding service)
13
+ * 6. All directories and configs
14
+ *
15
+ * @author hardwicksoftwareservices
16
+ * @website https://justcalljon.pro
17
+ */
18
+
19
+ const fs = require('fs');
20
+ const path = require('path');
21
+ const os = require('os');
22
+ const { execSync, spawnSync } = require('child_process');
23
+
24
+ // ============================================================================
25
+ // GLOBAL INSTALL CHECK - Must be installed globally!
26
+ // ============================================================================
27
+ const isGlobalInstall = process.env.npm_config_global === 'true' ||
28
+ __dirname.includes('/lib/node_modules/') ||
29
+ __dirname.includes('\\node_modules\\npm\\') ||
30
+ process.env.npm_lifecycle_event === 'postinstall' &&
31
+ !__dirname.includes(process.cwd());
32
+
33
+ // ============================================================================
34
+ // UNINSTALL OLD VERSIONS FIRST
35
+ // ============================================================================
36
+ try {
37
+ const oldVersionCheck = require('child_process').execSync('npm list -g specmem-hardwicksoftware --depth=0 2>/dev/null || true', { encoding: 'utf8' });
38
+ if (oldVersionCheck.includes('specmem-hardwicksoftware@') && !oldVersionCheck.includes(require('../package.json').version)) {
39
+ console.log('\x1b[33m⚠ Removing old version before installing new one...\x1b[0m');
40
+ require('child_process').execSync('npm uninstall -g specmem-hardwicksoftware 2>/dev/null || true', { stdio: 'pipe' });
41
+ }
42
+ } catch (e) { /* ignore */ }
43
+
44
+ // ============================================================================
45
+ // PLATFORM CHECK - Linux only for now
46
+ // ============================================================================
47
+ const currentPlatform = require('os').platform();
48
+ if (currentPlatform === 'win32') {
49
+ console.log('\n\x1b[31m╔════════════════════════════════════════════════════════════╗\x1b[0m');
50
+ console.log('\x1b[31m║\x1b[0m \x1b[1m\x1b[31m⚠ SPECMEM IS LINUX-ONLY (for now)\x1b[0m \x1b[31m║\x1b[0m');
51
+ console.log('\x1b[31m╠════════════════════════════════════════════════════════════╣\x1b[0m');
52
+ console.log('\x1b[31m║\x1b[0m \x1b[31m║\x1b[0m');
53
+ console.log('\x1b[31m║\x1b[0m Windows support coming soon! \x1b[31m║\x1b[0m');
54
+ console.log('\x1b[31m║\x1b[0m \x1b[31m║\x1b[0m');
55
+ console.log('\x1b[31m║\x1b[0m Options: \x1b[31m║\x1b[0m');
56
+ console.log('\x1b[31m║\x1b[0m • Use WSL2 (Windows Subsystem for Linux) \x1b[31m║\x1b[0m');
57
+ console.log('\x1b[31m║\x1b[0m • Use a Linux VM or Docker container \x1b[31m║\x1b[0m');
58
+ console.log('\x1b[31m║\x1b[0m • Use a Linux VPS \x1b[31m║\x1b[0m');
59
+ console.log('\x1b[31m║\x1b[0m \x1b[31m║\x1b[0m');
60
+ console.log('\x1b[31m╚════════════════════════════════════════════════════════════╝\x1b[0m\n');
61
+ process.exit(0);
62
+ }
63
+
64
+ if (currentPlatform === 'darwin') {
65
+ console.log('\n\x1b[33m╔════════════════════════════════════════════════════════════╗\x1b[0m');
66
+ console.log('\x1b[33m║\x1b[0m \x1b[1m\x1b[33m⚠ MACOS SUPPORT IS EXPERIMENTAL\x1b[0m \x1b[33m║\x1b[0m');
67
+ console.log('\x1b[33m╠════════════════════════════════════════════════════════════╣\x1b[0m');
68
+ console.log('\x1b[33m║\x1b[0m \x1b[33m║\x1b[0m');
69
+ console.log('\x1b[33m║\x1b[0m SpecMem is primarily developed for Linux. \x1b[33m║\x1b[0m');
70
+ console.log('\x1b[33m║\x1b[0m Some features may not work correctly on macOS. \x1b[33m║\x1b[0m');
71
+ console.log('\x1b[33m║\x1b[0m \x1b[33m║\x1b[0m');
72
+ console.log('\x1b[33m║\x1b[0m Proceeding with installation... \x1b[33m║\x1b[0m');
73
+ console.log('\x1b[33m║\x1b[0m \x1b[33m║\x1b[0m');
74
+ console.log('\x1b[33m╚════════════════════════════════════════════════════════════╝\x1b[0m\n');
75
+ // Continue with install but warn
76
+ }
77
+
78
+ if (!isGlobalInstall) {
79
+ console.log('\n\x1b[33m╔════════════════════════════════════════════════════════════╗\x1b[0m');
80
+ console.log('\x1b[33m║\x1b[0m \x1b[1m\x1b[31m⚠ SPECMEM MUST BE INSTALLED GLOBALLY\x1b[0m \x1b[33m║\x1b[0m');
81
+ console.log('\x1b[33m╠════════════════════════════════════════════════════════════╣\x1b[0m');
82
+ console.log('\x1b[33m║\x1b[0m \x1b[33m║\x1b[0m');
83
+ console.log('\x1b[33m║\x1b[0m You ran: npm install specmem-hardwicksoftware \x1b[33m║\x1b[0m');
84
+ console.log('\x1b[33m║\x1b[0m \x1b[33m║\x1b[0m');
85
+ console.log('\x1b[33m║\x1b[0m \x1b[1m\x1b[32mCorrect command:\x1b[0m \x1b[33m║\x1b[0m');
86
+ console.log('\x1b[33m║\x1b[0m \x1b[1m\x1b[36m npm install -g specmem-hardwicksoftware\x1b[0m \x1b[33m║\x1b[0m');
87
+ console.log('\x1b[33m║\x1b[0m \x1b[33m║\x1b[0m');
88
+ console.log('\x1b[33m║\x1b[0m SpecMem is a CLI tool that integrates with Claude Code. \x1b[33m║\x1b[0m');
89
+ console.log('\x1b[33m║\x1b[0m It must be installed globally to work properly. \x1b[33m║\x1b[0m');
90
+ console.log('\x1b[33m║\x1b[0m \x1b[33m║\x1b[0m');
91
+ console.log('\x1b[33m╚════════════════════════════════════════════════════════════╝\x1b[0m\n');
92
+ process.exit(0); // Exit cleanly so npm doesn't show error
93
+ }
94
+
95
+ // Colors for terminal output
96
+ const c = {
97
+ reset: '\x1b[0m',
98
+ bright: '\x1b[1m',
99
+ dim: '\x1b[2m',
100
+ green: '\x1b[32m',
101
+ yellow: '\x1b[33m',
102
+ blue: '\x1b[34m',
103
+ red: '\x1b[31m',
104
+ cyan: '\x1b[36m',
105
+ magenta: '\x1b[35m'
106
+ };
107
+
108
+ const log = {
109
+ info: (msg) => console.log(`${c.blue}ℹ${c.reset} ${msg}`),
110
+ success: (msg) => console.log(`${c.green}✓${c.reset} ${msg}`),
111
+ warn: (msg) => console.log(`${c.yellow}⚠${c.reset} ${msg}`),
112
+ error: (msg) => console.log(`${c.red}✗${c.reset} ${msg}`),
113
+ header: (msg) => console.log(`\n${c.bright}${c.cyan}═══ ${msg} ═══${c.reset}\n`),
114
+ step: (num, msg) => console.log(`${c.cyan}[${num}]${c.reset} ${msg}`)
115
+ };
116
+
117
+ // Paths
118
+ const HOME = os.homedir();
119
+ const CLAUDE_DIR = path.join(HOME, '.claude');
120
+ const CLAUDE_HOOKS_DIR = path.join(CLAUDE_DIR, 'hooks');
121
+ const CLAUDE_SETTINGS = path.join(CLAUDE_DIR, 'settings.json');
122
+ const SPECMEM_GLOBAL_DIR = path.join(HOME, '.specmem');
123
+ const SPECMEM_PKG_DIR = path.dirname(__dirname);
124
+
125
+ // Database config
126
+ const DB_CONFIG = {
127
+ name: 'specmem_westayunprofessional',
128
+ user: 'specmem_westayunprofessional',
129
+ password: 'specmem_westayunprofessional',
130
+ host: 'localhost',
131
+ port: 5432
132
+ };
133
+
134
+ // Detect OS
135
+ const PLATFORM = os.platform();
136
+ const IS_MAC = PLATFORM === 'darwin';
137
+ const IS_LINUX = PLATFORM === 'linux';
138
+ const IS_WINDOWS = PLATFORM === 'win32';
139
+
140
+ // Detect if running inside Docker container
141
+ const IS_DOCKER = fs.existsSync('/.dockerenv') ||
142
+ (fs.existsSync('/proc/1/cgroup') &&
143
+ fs.readFileSync('/proc/1/cgroup', 'utf8').includes('docker'));
144
+
145
+ // Skip embeddings flag (for low-resource or containerized environments)
146
+ const SKIP_EMBEDDINGS = process.env.SPECMEM_SKIP_EMBEDDINGS === 'true' ||
147
+ process.env.SPECMEM_LITE === 'true';
148
+
149
+ /**
150
+ * Run a command and return success/output
151
+ */
152
+ function run(cmd, options = {}) {
153
+ try {
154
+ const result = execSync(cmd, {
155
+ encoding: 'utf8',
156
+ stdio: options.silent ? 'pipe' : 'inherit',
157
+ timeout: options.timeout || 120000,
158
+ ...options
159
+ });
160
+ return { success: true, output: result };
161
+ } catch (e) {
162
+ return { success: false, output: e.message, error: e };
163
+ }
164
+ }
165
+
166
+ /**
167
+ * Check if a command exists
168
+ */
169
+ function commandExists(cmd) {
170
+ try {
171
+ execSync(`which ${cmd}`, { stdio: 'pipe' });
172
+ return true;
173
+ } catch {
174
+ return false;
175
+ }
176
+ }
177
+
178
+ /**
179
+ * Ensure a directory exists
180
+ */
181
+ function ensureDir(dir) {
182
+ if (!fs.existsSync(dir)) {
183
+ fs.mkdirSync(dir, { recursive: true });
184
+ log.success(`Created: ${dir}`);
185
+ }
186
+ }
187
+
188
+ // ============================================================================
189
+ // CLAUDE CODE INSTALLATION
190
+ // ============================================================================
191
+
192
+ // ============================================================================
193
+ // CORE SYSTEM DEPENDENCIES - Install EVERYTHING if missing
194
+ // ============================================================================
195
+
196
+ /**
197
+ * Install ALL core system dependencies before anything else
198
+ */
199
+ function installCoreDeps() {
200
+ log.header('Installing Core System Dependencies');
201
+
202
+ const packages = [];
203
+
204
+ // Check what's missing
205
+ if (!commandExists('python3')) packages.push('python3');
206
+ if (!commandExists('pip3') && !commandExists('pip')) packages.push('python3-pip');
207
+ if (!commandExists('screen')) packages.push('screen');
208
+ if (!commandExists('curl')) packages.push('curl');
209
+ if (!commandExists('git')) packages.push('git');
210
+ if (!commandExists('sudo')) packages.push('sudo');
211
+
212
+ if (packages.length === 0) {
213
+ log.success('All core dependencies already installed');
214
+ return true;
215
+ }
216
+
217
+ log.info(`Missing packages: ${packages.join(', ')}`);
218
+ log.info('Installing via package manager...');
219
+
220
+ if (IS_LINUX) {
221
+ if (commandExists('apt-get')) {
222
+ // Debian/Ubuntu/Mint
223
+ const result = run(`apt-get update -qq && apt-get install -y ${packages.join(' ')} python3-venv build-essential`, { timeout: 300000 });
224
+ if (!result.success) {
225
+ // Try with sudo
226
+ run(`sudo apt-get update -qq && sudo apt-get install -y ${packages.join(' ')} python3-venv build-essential`, { timeout: 300000 });
227
+ }
228
+ } else if (commandExists('dnf')) {
229
+ run(`sudo dnf install -y ${packages.join(' ').replace('python3-pip', 'python3-pip python3-devel')} gcc make`, { timeout: 300000 });
230
+ } else if (commandExists('yum')) {
231
+ run(`sudo yum install -y ${packages.join(' ').replace('python3-pip', 'python3-pip python3-devel')} gcc make`, { timeout: 300000 });
232
+ } else if (commandExists('pacman')) {
233
+ run(`sudo pacman -Sy --noconfirm ${packages.join(' ').replace('python3-pip', 'python-pip')}`, { timeout: 300000 });
234
+ }
235
+ } else if (IS_MAC) {
236
+ if (commandExists('brew')) {
237
+ run(`brew install ${packages.join(' ').replace('python3-pip', 'python3')}`, { timeout: 300000 });
238
+ } else {
239
+ log.warn('Homebrew not found - install from https://brew.sh');
240
+ }
241
+ }
242
+
243
+ // Verify critical ones
244
+ const missing = [];
245
+ if (!commandExists('python3')) missing.push('python3');
246
+ if (!commandExists('pip3') && !commandExists('pip')) missing.push('pip');
247
+ if (!commandExists('screen')) missing.push('screen');
248
+
249
+ if (missing.length > 0) {
250
+ log.warn(`Still missing: ${missing.join(', ')}`);
251
+ log.info('Some features may not work without these dependencies');
252
+ } else {
253
+ log.success('All core dependencies installed');
254
+ }
255
+
256
+ return true;
257
+ }
258
+
259
+ /**
260
+ * Check if Claude Code is installed, install if missing
261
+ */
262
+ function ensureClaudeCode() {
263
+ log.header('Checking Claude Code');
264
+
265
+ // Check if claude command exists
266
+ if (commandExists('claude')) {
267
+ const version = run('claude --version', { silent: true });
268
+ log.success(`Claude Code found: ${version.output?.trim() || 'installed'}`);
269
+ return true;
270
+ }
271
+
272
+ log.warn('Claude Code not found - installing...');
273
+ log.info('Installing @anthropic-ai/claude-code globally...');
274
+
275
+ const result = run('npm install -g @anthropic-ai/claude-code', { timeout: 300000 });
276
+
277
+ if (result.success) {
278
+ log.success('Claude Code installed successfully');
279
+ log.info('You will need to run "claude" and authenticate with Anthropic');
280
+ return true;
281
+ } else {
282
+ log.error('Failed to install Claude Code');
283
+ log.info('Install manually: npm install -g @anthropic-ai/claude-code');
284
+ return false;
285
+ }
286
+ }
287
+
288
+ /**
289
+ * Check if screen is installed, install if missing (needed for team members)
290
+ */
291
+ function ensureScreen() {
292
+ log.header('Checking screen');
293
+
294
+ if (commandExists('screen')) {
295
+ log.success('screen found');
296
+ return true;
297
+ }
298
+
299
+ log.warn('screen not found - installing...');
300
+
301
+ let result;
302
+ if (IS_MAC) {
303
+ result = run('brew install screen', { timeout: 120000 });
304
+ } else if (IS_LINUX) {
305
+ // Try apt first, then yum/dnf
306
+ result = run('apt-get update -qq && apt-get install -y screen', { timeout: 120000 });
307
+ if (!result.success) {
308
+ result = run('yum install -y screen || dnf install -y screen', { timeout: 120000 });
309
+ }
310
+ }
311
+
312
+ if (result?.success) {
313
+ log.success('screen installed successfully');
314
+ return true;
315
+ } else {
316
+ log.warn('Could not auto-install screen');
317
+ log.info('Install manually: apt install screen (Debian/Ubuntu) or brew install screen (Mac)');
318
+ return false;
319
+ }
320
+ }
321
+
322
+ // ============================================================================
323
+ // POSTGRESQL INSTALLATION
324
+ // ============================================================================
325
+
326
+ /**
327
+ * Check if PostgreSQL is installed and running
328
+ */
329
+ function checkPostgres() {
330
+ log.header('Checking PostgreSQL');
331
+
332
+ // Check if psql exists
333
+ if (!commandExists('psql')) {
334
+ log.warn('PostgreSQL not found - will install');
335
+ return false;
336
+ }
337
+
338
+ // Check if server is running
339
+ const result = run('pg_isready', { silent: true });
340
+ if (result.success) {
341
+ log.success('PostgreSQL is installed and running');
342
+ return true;
343
+ }
344
+
345
+ log.warn('PostgreSQL installed but not running');
346
+ return 'installed_not_running';
347
+ }
348
+
349
+ /**
350
+ * Install PostgreSQL based on OS
351
+ */
352
+ function installPostgres() {
353
+ log.header('Installing PostgreSQL');
354
+
355
+ const PG_TIMEOUT = 180000; // 3 minute timeout for PG install
356
+
357
+ if (IS_MAC) {
358
+ log.step(1, 'Installing via Homebrew...');
359
+
360
+ // Check if Homebrew exists
361
+ if (!commandExists('brew')) {
362
+ log.info('Installing Homebrew first...');
363
+ run('/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"', { timeout: 300000 });
364
+ }
365
+
366
+ run('brew install postgresql@16', { timeout: PG_TIMEOUT });
367
+ run('brew services start postgresql@16', { timeout: 30000 });
368
+
369
+ // Add to PATH
370
+ try {
371
+ const brewPrefix = execSync('brew --prefix', { encoding: 'utf8', timeout: 10000 }).trim();
372
+ const pgPath = `${brewPrefix}/opt/postgresql@16/bin`;
373
+ log.info(`Add to PATH: export PATH="${pgPath}:$PATH"`);
374
+ } catch (e) {}
375
+
376
+ } else if (IS_LINUX) {
377
+ log.step(1, 'Detecting Linux distribution...');
378
+
379
+ // Check for apt (Debian/Ubuntu)
380
+ if (commandExists('apt-get')) {
381
+ log.step(2, 'Installing via apt (timeout: 3 min)...');
382
+ run('sudo apt-get update', { timeout: 60000 });
383
+ const result = run('sudo apt-get install -y postgresql postgresql-contrib', { timeout: PG_TIMEOUT });
384
+ if (!result.success) {
385
+ log.warn('PostgreSQL install timed out or failed');
386
+ log.info('Try manually: sudo apt-get install -y postgresql postgresql-contrib');
387
+ return false;
388
+ }
389
+ run('sudo systemctl start postgresql', { timeout: 30000 });
390
+ run('sudo systemctl enable postgresql', { timeout: 30000 });
391
+ }
392
+ // Check for yum/dnf (RHEL/CentOS/Fedora)
393
+ else if (commandExists('dnf')) {
394
+ log.step(2, 'Installing via dnf (timeout: 3 min)...');
395
+ const result = run('sudo dnf install -y postgresql-server postgresql-contrib', { timeout: PG_TIMEOUT });
396
+ if (!result.success) {
397
+ log.warn('PostgreSQL install timed out');
398
+ return false;
399
+ }
400
+ run('sudo postgresql-setup --initdb', { timeout: 60000 });
401
+ run('sudo systemctl start postgresql', { timeout: 30000 });
402
+ run('sudo systemctl enable postgresql', { timeout: 30000 });
403
+ }
404
+ else if (commandExists('yum')) {
405
+ log.step(2, 'Installing via yum (timeout: 3 min)...');
406
+ const result = run('sudo yum install -y postgresql-server postgresql-contrib', { timeout: PG_TIMEOUT });
407
+ if (!result.success) {
408
+ log.warn('PostgreSQL install timed out');
409
+ return false;
410
+ }
411
+ run('sudo postgresql-setup initdb', { timeout: 60000 });
412
+ run('sudo systemctl start postgresql', { timeout: 30000 });
413
+ run('sudo systemctl enable postgresql', { timeout: 30000 });
414
+ }
415
+ // Check for pacman (Arch)
416
+ else if (commandExists('pacman')) {
417
+ log.step(2, 'Installing via pacman (timeout: 3 min)...');
418
+ const result = run('sudo pacman -S --noconfirm postgresql', { timeout: PG_TIMEOUT });
419
+ if (!result.success) {
420
+ log.warn('PostgreSQL install timed out');
421
+ return false;
422
+ }
423
+ run('sudo -u postgres initdb -D /var/lib/postgres/data', { timeout: 60000 });
424
+ run('sudo systemctl start postgresql', { timeout: 30000 });
425
+ run('sudo systemctl enable postgresql', { timeout: 30000 });
426
+ }
427
+ else {
428
+ log.error('Could not detect package manager. Please install PostgreSQL manually.');
429
+ return false;
430
+ }
431
+
432
+ } else if (IS_WINDOWS) {
433
+ log.error('Windows detected - please install PostgreSQL manually from:');
434
+ log.info('https://www.postgresql.org/download/windows/');
435
+ log.info('Or use: choco install postgresql');
436
+ return false;
437
+ }
438
+
439
+ // Verify installation with timeout
440
+ log.info('Verifying PostgreSQL installation...');
441
+ const check = run('pg_isready', { silent: true, timeout: 10000 });
442
+ if (check.success) {
443
+ log.success('PostgreSQL installed and running!');
444
+ return true;
445
+ }
446
+
447
+ // Try starting the service
448
+ log.info('Trying to start PostgreSQL service...');
449
+ if (IS_MAC) {
450
+ run('brew services start postgresql@16', { timeout: 30000 });
451
+ } else if (IS_LINUX) {
452
+ run('sudo systemctl start postgresql', { timeout: 30000 });
453
+ }
454
+
455
+ // Wait up to 30 seconds for PG to be ready
456
+ for (let i = 0; i < 6; i++) {
457
+ if (run('pg_isready', { silent: true, timeout: 5000 }).success) {
458
+ log.success('PostgreSQL is ready');
459
+ return true;
460
+ }
461
+ log.info('Waiting for PostgreSQL to start...');
462
+ run('sleep 5', { silent: true });
463
+ }
464
+
465
+ log.warn('PostgreSQL may not be fully started - continuing anyway');
466
+ return true; // Continue setup, might work
467
+ }
468
+
469
+ // ============================================================================
470
+ // PGVECTOR INSTALLATION
471
+ // ============================================================================
472
+
473
+ /**
474
+ * Check if pgvector extension is available
475
+ */
476
+ function checkPgvector() {
477
+ log.header('Checking pgvector Extension');
478
+
479
+ const result = run(
480
+ `sudo -u postgres psql -c "SELECT 1 FROM pg_available_extensions WHERE name = 'vector';" 2>/dev/null`,
481
+ { silent: true, timeout: 15000 }
482
+ );
483
+
484
+ if (result.success && result.output && result.output.includes('1')) {
485
+ log.success('pgvector extension is available');
486
+ return true;
487
+ }
488
+
489
+ log.warn('pgvector not found - will install');
490
+ return false;
491
+ }
492
+
493
+ /**
494
+ * Install pgvector extension
495
+ */
496
+ function installPgvector() {
497
+ log.header('Installing pgvector Extension');
498
+
499
+ const PGVECTOR_TIMEOUT = 120000; // 2 minute timeout
500
+
501
+ if (IS_MAC) {
502
+ log.step(1, 'Installing pgvector via Homebrew...');
503
+ run('brew install pgvector', { timeout: PGVECTOR_TIMEOUT });
504
+
505
+ } else if (IS_LINUX) {
506
+ // Try apt first (Ubuntu/Debian have pgvector in repos now)
507
+ if (commandExists('apt-get')) {
508
+ log.step(1, 'Trying apt install (timeout: 2 min)...');
509
+ const aptResult = run('sudo apt-get install -y postgresql-16-pgvector 2>/dev/null || sudo apt-get install -y postgresql-pgvector 2>/dev/null', { silent: true, timeout: PGVECTOR_TIMEOUT });
510
+
511
+ if (!aptResult.success) {
512
+ log.step(2, 'Building pgvector from source (timeout: 3 min)...');
513
+ buildPgvectorFromSource();
514
+ }
515
+ } else {
516
+ log.step(1, 'Building pgvector from source (timeout: 3 min)...');
517
+ buildPgvectorFromSource();
518
+ }
519
+ }
520
+
521
+ // Verify with timeout
522
+ log.info('Verifying pgvector installation...');
523
+ const check = run(
524
+ `sudo -u postgres psql -c "SELECT 1 FROM pg_available_extensions WHERE name = 'vector';" 2>/dev/null`,
525
+ { silent: true, timeout: 15000 }
526
+ );
527
+
528
+ if (check.success && check.output && check.output.includes('1')) {
529
+ log.success('pgvector installed successfully!');
530
+ return true;
531
+ }
532
+
533
+ log.warn('pgvector install may have timed out - continuing anyway');
534
+ log.info('SpecMem can work without pgvector (reduced functionality)');
535
+ return false;
536
+ }
537
+
538
+ /**
539
+ * Build pgvector from source
540
+ */
541
+ function buildPgvectorFromSource() {
542
+ log.info('Building pgvector from source...');
543
+
544
+ const BUILD_TIMEOUT = 180000; // 3 minute timeout for build
545
+
546
+ // Install build dependencies
547
+ if (commandExists('apt-get')) {
548
+ run('sudo apt-get install -y build-essential git postgresql-server-dev-all', { timeout: 120000 });
549
+ } else if (commandExists('dnf')) {
550
+ run('sudo dnf install -y gcc make git postgresql-devel', { timeout: 120000 });
551
+ } else if (commandExists('yum')) {
552
+ run('sudo yum install -y gcc make git postgresql-devel', { timeout: 120000 });
553
+ }
554
+
555
+ // Clone and build with timeout
556
+ const tmpDir = '/tmp/pgvector-build';
557
+ run(`rm -rf ${tmpDir}`, { timeout: 10000 });
558
+
559
+ const cloneResult = run(`git clone --branch v0.7.4 https://github.com/pgvector/pgvector.git ${tmpDir}`, { timeout: 60000 });
560
+ if (!cloneResult.success) {
561
+ log.warn('Failed to clone pgvector repo - skipping');
562
+ return;
563
+ }
564
+
565
+ const buildResult = run(`cd ${tmpDir} && make && sudo make install`, { timeout: BUILD_TIMEOUT });
566
+ if (!buildResult.success) {
567
+ log.warn('pgvector build timed out or failed');
568
+ }
569
+
570
+ run(`rm -rf ${tmpDir}`, { timeout: 10000 });
571
+ }
572
+
573
+ // ============================================================================
574
+ // DATABASE SETUP
575
+ // ============================================================================
576
+
577
+ /**
578
+ * Create SpecMem database and user
579
+ */
580
+ function setupDatabase() {
581
+ log.header('Setting Up SpecMem Database');
582
+
583
+ const { name, user, password } = DB_CONFIG;
584
+
585
+ // Create user with SUPERUSER (needed for pgvector extension)
586
+ log.step(1, `Creating user: ${user}`);
587
+ run(`sudo -u postgres psql -c "CREATE USER ${user} WITH SUPERUSER PASSWORD '${password}';" 2>/dev/null || true`, { silent: true });
588
+ // Ensure SUPERUSER in case user already existed
589
+ run(`sudo -u postgres psql -c "ALTER USER ${user} WITH SUPERUSER;" 2>/dev/null || true`, { silent: true });
590
+
591
+ // Create database
592
+ log.step(2, `Creating database: ${name}`);
593
+ run(`sudo -u postgres psql -c "CREATE DATABASE ${name} OWNER ${user};" 2>/dev/null || true`, { silent: true });
594
+
595
+ // Grant privileges
596
+ log.step(3, 'Granting privileges...');
597
+ run(`sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE ${name} TO ${user};" 2>/dev/null || true`, { silent: true });
598
+
599
+ // Enable pgvector extension
600
+ log.step(4, 'Enabling pgvector extension...');
601
+ run(`sudo -u postgres psql -d ${name} -c "CREATE EXTENSION IF NOT EXISTS vector;" 2>/dev/null || true`, { silent: true });
602
+
603
+ // Verify connection
604
+ log.step(5, 'Verifying database connection...');
605
+ const verify = run(
606
+ `PGPASSWORD='${password}' psql -h localhost -U ${user} -d ${name} -c "SELECT 1;" 2>/dev/null`,
607
+ { silent: true }
608
+ );
609
+
610
+ if (verify.success) {
611
+ log.success('Database setup complete!');
612
+ return true;
613
+ }
614
+
615
+ // Try adjusting pg_hba.conf for password auth
616
+ log.warn('Connection failed - adjusting authentication...');
617
+ adjustPgAuth();
618
+
619
+ return true;
620
+ }
621
+
622
+ /**
623
+ * Adjust PostgreSQL authentication to allow password auth
624
+ */
625
+ function adjustPgAuth() {
626
+ log.info('Configuring PostgreSQL authentication...');
627
+
628
+ // Find pg_hba.conf
629
+ const possiblePaths = [
630
+ '/etc/postgresql/16/main/pg_hba.conf',
631
+ '/etc/postgresql/15/main/pg_hba.conf',
632
+ '/etc/postgresql/14/main/pg_hba.conf',
633
+ '/var/lib/pgsql/data/pg_hba.conf',
634
+ '/var/lib/postgres/data/pg_hba.conf'
635
+ ];
636
+
637
+ let pgHbaPath = null;
638
+ for (const p of possiblePaths) {
639
+ if (fs.existsSync(p)) {
640
+ pgHbaPath = p;
641
+ break;
642
+ }
643
+ }
644
+
645
+ if (!pgHbaPath) {
646
+ // Try to find it
647
+ const findResult = run('sudo find /etc /var -name pg_hba.conf 2>/dev/null | head -1', { silent: true });
648
+ if (findResult.success && findResult.output) {
649
+ pgHbaPath = findResult.output.trim();
650
+ }
651
+ }
652
+
653
+ if (pgHbaPath) {
654
+ log.info(`Found pg_hba.conf: ${pgHbaPath}`);
655
+
656
+ // Backup and modify
657
+ run(`sudo cp ${pgHbaPath} ${pgHbaPath}.backup`);
658
+
659
+ // Add password auth for our user
660
+ const authLine = `host ${DB_CONFIG.name} ${DB_CONFIG.user} 127.0.0.1/32 md5`;
661
+ run(`echo '${authLine}' | sudo tee -a ${pgHbaPath}`);
662
+
663
+ // Reload PostgreSQL
664
+ run('sudo systemctl reload postgresql 2>/dev/null || sudo -u postgres pg_ctl reload');
665
+
666
+ log.success('PostgreSQL authentication configured');
667
+ }
668
+ }
669
+
670
+ // ============================================================================
671
+ // DOCKER SETUP
672
+ // ============================================================================
673
+
674
+ /**
675
+ * Check and install Docker - Full auto-install for all platforms
676
+ */
677
+ function setupDocker() {
678
+ log.header('Checking Docker');
679
+
680
+ // Skip if requested or in lite mode
681
+ if (SKIP_EMBEDDINGS) {
682
+ log.info('Skipping Docker/embeddings setup (SPECMEM_SKIP_EMBEDDINGS=true)');
683
+ log.info('SpecMem will use API-based embeddings as fallback');
684
+ return true;
685
+ }
686
+
687
+ // Warn if running inside Docker (Docker-in-Docker is complex)
688
+ if (IS_DOCKER) {
689
+ log.warn('Running inside Docker container detected!');
690
+ log.info('Docker-in-Docker requires special setup.');
691
+ log.info('Options:');
692
+ log.info(' 1. Mount host Docker socket: -v /var/run/docker.sock:/var/run/docker.sock');
693
+ log.info(' 2. Use privileged mode: --privileged');
694
+ log.info(' 3. Skip local embeddings: export SPECMEM_SKIP_EMBEDDINGS=true');
695
+ log.info('');
696
+ log.info('Attempting to continue anyway...');
697
+ }
698
+
699
+ // Check if Docker is already installed
700
+ if (commandExists('docker')) {
701
+ log.success('Docker is installed');
702
+ return startDockerDaemon();
703
+ }
704
+
705
+ log.warn('Docker not found - attempting auto-install...');
706
+
707
+ // Platform-specific installation
708
+ if (IS_MAC) {
709
+ return installDockerMac();
710
+ } else if (IS_LINUX) {
711
+ return installDockerLinux();
712
+ } else if (IS_WINDOWS) {
713
+ log.error('Windows detected - please install Docker Desktop manually:');
714
+ log.info('https://docs.docker.com/desktop/install/windows-install/');
715
+ log.info('Or use: winget install Docker.DockerDesktop');
716
+ return false;
717
+ }
718
+
719
+ return false;
720
+ }
721
+
722
+ /**
723
+ * Start Docker daemon if not running
724
+ */
725
+ function startDockerDaemon() {
726
+ const running = run('docker info', { silent: true });
727
+ if (running.success) {
728
+ log.success('Docker daemon is running');
729
+ return true;
730
+ }
731
+
732
+ log.warn('Docker daemon not running - attempting to start...');
733
+
734
+ if (IS_MAC) {
735
+ // Try to start Docker Desktop
736
+ log.step(1, 'Starting Docker Desktop...');
737
+ run('open -a Docker', { silent: true });
738
+
739
+ // Wait for Docker to start (up to 60 seconds)
740
+ log.info('Waiting for Docker daemon to start...');
741
+ for (let i = 0; i < 12; i++) {
742
+ run('sleep 5', { silent: true });
743
+ if (run('docker info', { silent: true }).success) {
744
+ log.success('Docker daemon started');
745
+ return true;
746
+ }
747
+ process.stdout.write('.');
748
+ }
749
+ console.log('');
750
+
751
+ // Try colima as fallback
752
+ if (commandExists('colima')) {
753
+ log.step(2, 'Trying colima start...');
754
+ run('colima start');
755
+ if (run('docker info', { silent: true }).success) {
756
+ log.success('Docker (via colima) started');
757
+ return true;
758
+ }
759
+ }
760
+
761
+ log.warn('Could not start Docker daemon automatically');
762
+ log.info('Please start Docker Desktop manually and re-run installation');
763
+ return false;
764
+
765
+ } else if (IS_LINUX) {
766
+ // In Docker container, systemctl won't work
767
+ if (IS_DOCKER) {
768
+ log.warn('Inside Docker container - systemctl unavailable');
769
+ log.info('Checking if Docker socket is mounted...');
770
+
771
+ if (fs.existsSync('/var/run/docker.sock')) {
772
+ if (run('docker info', { silent: true }).success) {
773
+ log.success('Docker socket available (mounted from host)');
774
+ return true;
775
+ }
776
+ }
777
+
778
+ log.warn('Docker socket not available in container');
779
+ log.info('SpecMem will work without local embeddings');
780
+ log.info('To enable: run container with -v /var/run/docker.sock:/var/run/docker.sock');
781
+ return false;
782
+ }
783
+
784
+ // Try systemctl first (only on non-containerized Linux)
785
+ log.step(1, 'Starting Docker via systemctl...');
786
+ run('sudo systemctl start docker');
787
+ run('sudo systemctl enable docker');
788
+
789
+ if (run('docker info', { silent: true }).success) {
790
+ log.success('Docker daemon started');
791
+ return true;
792
+ }
793
+
794
+ // Try service command as fallback
795
+ log.step(2, 'Trying service command...');
796
+ run('sudo service docker start');
797
+
798
+ if (run('docker info', { silent: true }).success) {
799
+ log.success('Docker daemon started');
800
+ return true;
801
+ }
802
+
803
+ log.warn('Could not start Docker daemon');
804
+ return false;
805
+ }
806
+
807
+ return false;
808
+ }
809
+
810
+ /**
811
+ * Install Docker on macOS
812
+ */
813
+ function installDockerMac() {
814
+ log.header('Installing Docker on macOS');
815
+
816
+ // Check for Homebrew
817
+ if (!commandExists('brew')) {
818
+ log.step(1, 'Installing Homebrew first...');
819
+ const brewInstall = run('/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"');
820
+ if (!brewInstall.success) {
821
+ log.error('Failed to install Homebrew');
822
+ log.info('Install Docker Desktop manually: https://docs.docker.com/desktop/install/mac-install/');
823
+ return false;
824
+ }
825
+ }
826
+
827
+ // Option 1: Try Docker Desktop (official, GUI)
828
+ log.step(2, 'Installing Docker Desktop via Homebrew...');
829
+ const desktopResult = run('brew install --cask docker', { silent: true });
830
+
831
+ if (desktopResult.success) {
832
+ log.success('Docker Desktop installed');
833
+ log.step(3, 'Starting Docker Desktop...');
834
+ run('open -a Docker');
835
+
836
+ // Wait for Docker to initialize
837
+ log.info('Waiting for Docker to initialize (this may take a minute)...');
838
+ for (let i = 0; i < 12; i++) {
839
+ run('sleep 5', { silent: true });
840
+ if (run('docker info', { silent: true }).success) {
841
+ log.success('Docker is ready!');
842
+ return true;
843
+ }
844
+ process.stdout.write('.');
845
+ }
846
+ console.log('');
847
+ log.warn('Docker Desktop installed but not yet ready');
848
+ log.info('Please wait for Docker Desktop to finish starting, then re-run');
849
+ return true; // It's installed, just not ready
850
+ }
851
+
852
+ // Option 2: Try colima (lightweight, CLI-only)
853
+ log.step(2, 'Docker Desktop failed, trying colima...');
854
+ run('brew install colima docker docker-compose');
855
+
856
+ if (commandExists('colima')) {
857
+ log.step(3, 'Starting colima...');
858
+ run('colima start --cpu 2 --memory 4');
859
+
860
+ if (run('docker info', { silent: true }).success) {
861
+ log.success('Docker (via colima) is ready!');
862
+ return true;
863
+ }
864
+ }
865
+
866
+ log.error('Could not install Docker automatically');
867
+ log.info('Please install Docker Desktop manually: https://docs.docker.com/desktop/install/mac-install/');
868
+ return false;
869
+ }
870
+
871
+ /**
872
+ * Install Docker on Linux - supports multiple package managers
873
+ */
874
+ function installDockerLinux() {
875
+ log.header('Installing Docker on Linux');
876
+
877
+ // Method 1: Official Docker install script (works on most distros)
878
+ log.step(1, 'Trying official Docker install script...');
879
+ const scriptResult = run('curl -fsSL https://get.docker.com | sudo sh', { timeout: 300000 });
880
+
881
+ if (scriptResult.success && commandExists('docker')) {
882
+ log.success('Docker installed via official script');
883
+ configureDockerLinux();
884
+ return startDockerDaemon();
885
+ }
886
+
887
+ // Method 2: Package manager specific
888
+ log.step(2, 'Trying package manager installation...');
889
+
890
+ if (commandExists('apt-get')) {
891
+ // Debian/Ubuntu
892
+ log.info('Detected Debian/Ubuntu...');
893
+ run('sudo apt-get update');
894
+ run('sudo apt-get install -y ca-certificates curl gnupg');
895
+ run('sudo install -m 0755 -d /etc/apt/keyrings');
896
+ run('curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg');
897
+ run('sudo chmod a+r /etc/apt/keyrings/docker.gpg');
898
+
899
+ // Add repo (try Ubuntu first, then Debian)
900
+ const distro = run('lsb_release -is 2>/dev/null || cat /etc/os-release | grep ^ID= | cut -d= -f2', { silent: true });
901
+ const codename = run('lsb_release -cs 2>/dev/null || cat /etc/os-release | grep VERSION_CODENAME | cut -d= -f2', { silent: true });
902
+
903
+ const repoDistro = distro.output?.toLowerCase().includes('ubuntu') ? 'ubuntu' : 'debian';
904
+ run(`echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/${repoDistro} $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list`);
905
+
906
+ run('sudo apt-get update');
907
+ run('sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin');
908
+
909
+ } else if (commandExists('dnf')) {
910
+ // Fedora/RHEL 8+
911
+ log.info('Detected Fedora/RHEL...');
912
+ run('sudo dnf -y install dnf-plugins-core');
913
+ run('sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo');
914
+ run('sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin');
915
+
916
+ } else if (commandExists('yum')) {
917
+ // CentOS/RHEL 7
918
+ log.info('Detected CentOS/RHEL...');
919
+ run('sudo yum install -y yum-utils');
920
+ run('sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo');
921
+ run('sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin');
922
+
923
+ } else if (commandExists('pacman')) {
924
+ // Arch Linux
925
+ log.info('Detected Arch Linux...');
926
+ run('sudo pacman -Sy --noconfirm docker docker-compose');
927
+
928
+ } else if (commandExists('zypper')) {
929
+ // openSUSE
930
+ log.info('Detected openSUSE...');
931
+ run('sudo zypper install -y docker docker-compose');
932
+
933
+ } else {
934
+ log.error('Could not detect package manager');
935
+ log.info('Please install Docker manually: https://docs.docker.com/engine/install/');
936
+ return false;
937
+ }
938
+
939
+ if (commandExists('docker')) {
940
+ log.success('Docker installed');
941
+ configureDockerLinux();
942
+ return startDockerDaemon();
943
+ }
944
+
945
+ log.error('Docker installation failed');
946
+ return false;
947
+ }
948
+
949
+ /**
950
+ * Configure Docker for non-root usage on Linux
951
+ * SECURITY: Binds Docker to 127.0.0.1 only (no external access)
952
+ */
953
+ function configureDockerLinux() {
954
+ log.step('→', 'Configuring Docker for non-root usage...');
955
+
956
+ const user = process.env.USER || process.env.LOGNAME || 'root';
957
+
958
+ // Add user to docker group
959
+ run(`sudo usermod -aG docker ${user}`);
960
+
961
+ // SECURITY: Configure Docker to bind to localhost only
962
+ log.step('→', 'Securing Docker to localhost only (127.0.0.1)...');
963
+ const daemonConfig = {
964
+ "iptables": true,
965
+ "ip": "127.0.0.1",
966
+ "ip-forward": false,
967
+ "userland-proxy": true,
968
+ "live-restore": true,
969
+ "log-driver": "json-file",
970
+ "log-opts": {
971
+ "max-size": "10m",
972
+ "max-file": "3"
973
+ }
974
+ };
975
+
976
+ try {
977
+ const daemonJsonPath = '/etc/docker/daemon.json';
978
+ run('sudo mkdir -p /etc/docker');
979
+
980
+ // Check if config exists and merge
981
+ let existingConfig = {};
982
+ if (fs.existsSync(daemonJsonPath)) {
983
+ try {
984
+ existingConfig = JSON.parse(fs.readFileSync(daemonJsonPath, 'utf8'));
985
+ } catch (e) {}
986
+ }
987
+
988
+ const mergedConfig = { ...existingConfig, ...daemonConfig };
989
+ const configJson = JSON.stringify(mergedConfig, null, 2);
990
+
991
+ // Write via sudo
992
+ run(`echo '${configJson}' | sudo tee ${daemonJsonPath}`);
993
+ log.success('Docker configured for localhost-only access (127.0.0.1)');
994
+ } catch (e) {
995
+ log.warn('Could not configure Docker daemon.json - manual security review recommended');
996
+ }
997
+
998
+ // Enable and start Docker service
999
+ run('sudo systemctl enable docker');
1000
+ run('sudo systemctl restart docker'); // Restart to apply new config
1001
+
1002
+ // Set up Docker to start on boot
1003
+ run('sudo systemctl enable containerd');
1004
+
1005
+ log.success(`User '${user}' added to docker group`);
1006
+ log.info('Note: You may need to log out and back in for group changes to take effect');
1007
+ }
1008
+
1009
+ /**
1010
+ * Build or pull the SpecMem embedding Docker image
1011
+ */
1012
+ function setupEmbeddingImage() {
1013
+ log.header('Setting Up Embedding Docker Image');
1014
+
1015
+ const imageName = 'specmem-embeddings:latest';
1016
+
1017
+ // Check if image already exists
1018
+ const exists = run(`docker image inspect ${imageName}`, { silent: true });
1019
+ if (exists.success) {
1020
+ log.success('Embedding image already exists');
1021
+ return true;
1022
+ }
1023
+
1024
+ // Try to build from local Dockerfile
1025
+ const dockerfilePath = path.join(SPECMEM_PKG_DIR, 'embedding-sandbox', 'Dockerfile');
1026
+
1027
+ if (fs.existsSync(dockerfilePath)) {
1028
+ log.step(1, 'Building embedding image from Dockerfile...');
1029
+ const buildResult = run(
1030
+ `docker build -t ${imageName} ${path.dirname(dockerfilePath)}`,
1031
+ { timeout: 600000 } // 10 min timeout for build
1032
+ );
1033
+
1034
+ if (buildResult.success) {
1035
+ log.success('Embedding image built successfully');
1036
+ return true;
1037
+ }
1038
+ log.warn('Docker build failed, will build on first use');
1039
+ } else {
1040
+ log.info('No Dockerfile found - image will be built on first use');
1041
+ }
1042
+
1043
+ return false;
1044
+ }
1045
+
1046
+ /**
1047
+ * Load embedded Docker images from package
1048
+ */
1049
+ function loadEmbeddedDockerImages() {
1050
+ log.header('Loading Embedded Docker Images');
1051
+
1052
+ const dockerDistDir = path.join(SPECMEM_PKG_DIR, 'docker-dist');
1053
+ const manifestPath = path.join(dockerDistDir, 'manifest.json');
1054
+
1055
+ // Check if we have embedded images
1056
+ if (!fs.existsSync(manifestPath)) {
1057
+ log.info('No embedded Docker images found (development mode)');
1058
+ log.info('Images will be built on first use');
1059
+ return false;
1060
+ }
1061
+
1062
+ try {
1063
+ const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
1064
+ log.info(`Found ${manifest.images.length} embedded image(s)`);
1065
+
1066
+ for (const image of manifest.images) {
1067
+ const imagePath = path.join(dockerDistDir, image.file);
1068
+
1069
+ if (!fs.existsSync(imagePath)) {
1070
+ log.warn(`Image file not found: ${image.file}`);
1071
+ continue;
1072
+ }
1073
+
1074
+ log.step('→', `Loading ${image.name}:${image.tag}...`);
1075
+
1076
+ // Check if image already exists
1077
+ const exists = run(`docker image inspect ${image.name}:${image.tag}`, { silent: true });
1078
+ if (exists.success) {
1079
+ log.info(`Image ${image.name}:${image.tag} already exists, skipping`);
1080
+ continue;
1081
+ }
1082
+
1083
+ // Load the image
1084
+ const loadResult = run(`gunzip -c "${imagePath}" | docker load`, { silent: true });
1085
+
1086
+ if (loadResult.success) {
1087
+ log.success(`Loaded: ${image.name}:${image.tag}`);
1088
+ } else {
1089
+ log.warn(`Failed to load: ${image.name}:${image.tag}`);
1090
+ }
1091
+ }
1092
+
1093
+ return true;
1094
+ } catch (e) {
1095
+ log.warn(`Error loading embedded images: ${e.message}`);
1096
+ return false;
1097
+ }
1098
+ }
1099
+
1100
+ // ============================================================================
1101
+ // CLAUDE COMMANDS SETUP
1102
+ // ============================================================================
1103
+
1104
+ /**
1105
+ * Install SpecMem slash commands to 's commands directory
1106
+ * These are the /specmem-* commands that provide memory operations
1107
+ */
1108
+ function installCommands() {
1109
+ log.header('Installing SpecMem Commands');
1110
+
1111
+ const commandsDir = path.join(CLAUDE_DIR, 'commands');
1112
+ const specmemCommandsDir = path.join(SPECMEM_PKG_DIR, 'commands');
1113
+
1114
+ ensureDir(commandsDir);
1115
+
1116
+ if (!fs.existsSync(specmemCommandsDir)) {
1117
+ log.warn(`Commands directory not found: ${specmemCommandsDir}`);
1118
+ return { installed: false, commands: [] };
1119
+ }
1120
+
1121
+ // Get all .md command files
1122
+ const commandFiles = fs.readdirSync(specmemCommandsDir).filter(f => f.endsWith('.md'));
1123
+ const copiedCommands = [];
1124
+
1125
+ // Clean up old SpecMem commands that no longer exist in source
1126
+ if (fs.existsSync(commandsDir)) {
1127
+ const existingCommands = fs.readdirSync(commandsDir).filter(f => f.startsWith('specmem') && f.endsWith('.md'));
1128
+ for (const oldCmd of existingCommands) {
1129
+ if (!commandFiles.includes(oldCmd)) {
1130
+ try {
1131
+ fs.unlinkSync(path.join(commandsDir, oldCmd));
1132
+ log.info(`Removed outdated: ${oldCmd}`);
1133
+ } catch (e) {}
1134
+ }
1135
+ }
1136
+ }
1137
+
1138
+ // Copy all command files
1139
+ for (const cmdFile of commandFiles) {
1140
+ const src = path.join(specmemCommandsDir, cmdFile);
1141
+ const dest = path.join(commandsDir, cmdFile);
1142
+
1143
+ try {
1144
+ fs.copyFileSync(src, dest);
1145
+ copiedCommands.push(cmdFile.replace('.md', ''));
1146
+ log.success(`Installed: /${cmdFile.replace('.md', '')}`);
1147
+ } catch (e) {
1148
+ log.warn(`Failed to install: ${cmdFile}`);
1149
+ }
1150
+ }
1151
+
1152
+ if (copiedCommands.length > 0) {
1153
+ log.success(`Total: ${copiedCommands.length} commands installed`);
1154
+ }
1155
+
1156
+ return { installed: copiedCommands.length > 0, commands: copiedCommands };
1157
+ }
1158
+
1159
+ // ============================================================================
1160
+ // CLAUDE SKILLS SETUP
1161
+ // ============================================================================
1162
+
1163
+ /**
1164
+ * Install SpecMem skills to 's commands directory
1165
+ * Skills are .md files that provide specialized behaviors/prompts
1166
+ * They get deployed alongside commands (same directory in Code)
1167
+ */
1168
+ function installSkills() {
1169
+ log.header('Installing SpecMem Skills');
1170
+
1171
+ const commandsDir = path.join(CLAUDE_DIR, 'commands');
1172
+ const skillsDir = path.join(SPECMEM_PKG_DIR, 'skills');
1173
+
1174
+ ensureDir(commandsDir);
1175
+
1176
+ if (!fs.existsSync(skillsDir)) {
1177
+ log.warn(`Skills directory not found: ${skillsDir}`);
1178
+ return { installed: false, skills: [] };
1179
+ }
1180
+
1181
+ const copiedSkills = [];
1182
+
1183
+ /**
1184
+ * Recursively copy skill files from a directory
1185
+ */
1186
+ function copySkillsFrom(srcDir, prefix = '') {
1187
+ if (!fs.existsSync(srcDir)) return;
1188
+
1189
+ const items = fs.readdirSync(srcDir, { withFileTypes: true });
1190
+
1191
+ for (const item of items) {
1192
+ const srcPath = path.join(srcDir, item.name);
1193
+
1194
+ if (item.isDirectory()) {
1195
+ // Recurse into subdirectories (e.g., teammemberskills/)
1196
+ copySkillsFrom(srcPath, item.name + '-');
1197
+ } else if (item.name.endsWith('.md')) {
1198
+ // Skill file - copy to commands dir
1199
+ const destName = prefix ? `${prefix}${item.name}` : item.name;
1200
+ const destPath = path.join(commandsDir, destName);
1201
+
1202
+ try {
1203
+ fs.copyFileSync(srcPath, destPath);
1204
+ copiedSkills.push(destName.replace('.md', ''));
1205
+ log.success(`Skill: /${destName.replace('.md', '')}`);
1206
+ } catch (e) {
1207
+ log.warn(`Failed to install skill: ${destName}`);
1208
+ }
1209
+ }
1210
+ }
1211
+ }
1212
+
1213
+ // Copy all skills (including from subdirectories)
1214
+ copySkillsFrom(skillsDir);
1215
+
1216
+ if (copiedSkills.length > 0) {
1217
+ log.success(`Total: ${copiedSkills.length} skills installed`);
1218
+ }
1219
+
1220
+ return { installed: copiedSkills.length > 0, skills: copiedSkills };
1221
+ }
1222
+
1223
+ // ============================================================================
1224
+ // SPECMEM PLUGINS SETUP
1225
+ // ============================================================================
1226
+
1227
+ /**
1228
+ * Install SpecMem plugins to 's plugins directory
1229
+ * Plugins contain agent definitions that get loaded by agent-loading-hook
1230
+ */
1231
+ function installPlugins() {
1232
+ log.header('Installing SpecMem Plugins');
1233
+
1234
+ const claudePluginsDir = path.join(CLAUDE_DIR, 'plugins');
1235
+ const specmemPluginsDir = path.join(SPECMEM_PKG_DIR, 'plugins');
1236
+
1237
+ ensureDir(claudePluginsDir);
1238
+
1239
+ if (!fs.existsSync(specmemPluginsDir)) {
1240
+ log.info('No bundled plugins found (development mode)');
1241
+ return { installed: false, plugins: [] };
1242
+ }
1243
+
1244
+ const copiedPlugins = [];
1245
+
1246
+ /**
1247
+ * Recursively copy a directory
1248
+ */
1249
+ function copyDirRecursive(src, dest) {
1250
+ ensureDir(dest);
1251
+ const items = fs.readdirSync(src, { withFileTypes: true });
1252
+
1253
+ for (const item of items) {
1254
+ const srcPath = path.join(src, item.name);
1255
+ const destPath = path.join(dest, item.name);
1256
+
1257
+ if (item.isDirectory()) {
1258
+ copyDirRecursive(srcPath, destPath);
1259
+ } else {
1260
+ fs.copyFileSync(srcPath, destPath);
1261
+ }
1262
+ }
1263
+ }
1264
+
1265
+ // Get all plugin directories
1266
+ const plugins = fs.readdirSync(specmemPluginsDir, { withFileTypes: true })
1267
+ .filter(d => d.isDirectory());
1268
+
1269
+ for (const plugin of plugins) {
1270
+ const srcPluginDir = path.join(specmemPluginsDir, plugin.name);
1271
+ const destPluginDir = path.join(claudePluginsDir, plugin.name);
1272
+
1273
+ try {
1274
+ copyDirRecursive(srcPluginDir, destPluginDir);
1275
+ copiedPlugins.push(plugin.name);
1276
+ log.success(`Plugin: ${plugin.name}`);
1277
+ } catch (e) {
1278
+ log.warn(`Failed to install plugin: ${plugin.name}`);
1279
+ }
1280
+ }
1281
+
1282
+ if (copiedPlugins.length > 0) {
1283
+ log.success(`Total: ${copiedPlugins.length} plugins installed`);
1284
+ }
1285
+
1286
+ return { installed: copiedPlugins.length > 0, plugins: copiedPlugins };
1287
+ }
1288
+
1289
+ // ============================================================================
1290
+ // CLAUDE HOOKS SETUP
1291
+ // ============================================================================
1292
+
1293
+ /**
1294
+ * Install hooks
1295
+ * Copies ALL hook files including .cjs and .json support files
1296
+ */
1297
+ function installHooks() {
1298
+ log.header('Installing Hooks');
1299
+
1300
+ ensureDir(CLAUDE_HOOKS_DIR);
1301
+
1302
+ const hooksDir = path.join(SPECMEM_PKG_DIR, 'claude-hooks');
1303
+
1304
+ if (!fs.existsSync(hooksDir)) {
1305
+ log.warn(`Hooks directory not found: ${hooksDir}`);
1306
+ return;
1307
+ }
1308
+
1309
+ // CRITICAL: Include .cjs and .json files for token compressor system
1310
+ const hooks = fs.readdirSync(hooksDir).filter(f =>
1311
+ f.endsWith('.js') || f.endsWith('.cjs') || f.endsWith('.json') ||
1312
+ f.endsWith('.py') || f.endsWith('.sh')
1313
+ );
1314
+
1315
+ let installed = 0;
1316
+ for (const hook of hooks) {
1317
+ const src = path.join(hooksDir, hook);
1318
+ const dest = path.join(CLAUDE_HOOKS_DIR, hook);
1319
+
1320
+ try {
1321
+ fs.copyFileSync(src, dest);
1322
+ // Only chmod executable files, not .json
1323
+ if (!hook.endsWith('.json')) {
1324
+ fs.chmodSync(dest, 0o755);
1325
+ }
1326
+ installed++;
1327
+ } catch (e) {
1328
+ log.warn(`Failed to install: ${hook}`);
1329
+ }
1330
+ }
1331
+
1332
+ log.success(`Installed ${installed} hook files`);
1333
+ }
1334
+
1335
+ /**
1336
+ * Configure settings.json with hooks
1337
+ */
1338
+ function configureSettings() {
1339
+ log.header('Configuring Settings');
1340
+
1341
+ ensureDir(CLAUDE_DIR);
1342
+
1343
+ let settings = {};
1344
+
1345
+ // Load existing settings
1346
+ if (fs.existsSync(CLAUDE_SETTINGS)) {
1347
+ try {
1348
+ settings = JSON.parse(fs.readFileSync(CLAUDE_SETTINGS, 'utf8'));
1349
+ log.info('Loaded existing settings.json');
1350
+ } catch (e) {
1351
+ log.warn('Could not parse existing settings.json, creating new');
1352
+ }
1353
+ }
1354
+
1355
+ // Ensure permissions
1356
+ if (!settings.permissions) settings.permissions = {};
1357
+ if (!settings.permissions.allow) settings.permissions.allow = [];
1358
+
1359
+ // Add SpecMem permissions (MCP tools + Skills for commands)
1360
+ const requiredPermissions = [
1361
+ 'mcp__specmem__*', // All MCP tools
1362
+ 'Skill(specmem)', // Main specmem skill
1363
+ 'Skill(specmem-*)', // All specmem-* skills/commands
1364
+ 'Bash',
1365
+ 'Read',
1366
+ 'Write',
1367
+ 'Edit',
1368
+ 'Glob',
1369
+ 'Grep'
1370
+ ];
1371
+ for (const perm of requiredPermissions) {
1372
+ if (!settings.permissions.allow.includes(perm)) {
1373
+ settings.permissions.allow.push(perm);
1374
+ }
1375
+ }
1376
+
1377
+ // Configure hooks - MERGE with existing, don't overwrite!
1378
+ if (!settings.hooks) settings.hooks = {};
1379
+
1380
+ // Standard env vars for all hooks
1381
+ const hookEnv = {
1382
+ SPECMEM_HOME: SPECMEM_GLOBAL_DIR,
1383
+ SPECMEM_PKG: SPECMEM_PKG_DIR,
1384
+ SPECMEM_RUN_DIR: '${cwd}/specmem/sockets',
1385
+ SPECMEM_EMBEDDING_SOCKET: '${cwd}/specmem/sockets/embeddings.sock',
1386
+ SPECMEM_PROJECT_PATH: '${cwd}'
1387
+ };
1388
+
1389
+ /**
1390
+ * Helper to merge hooks without clobbering user's custom hooks
1391
+ * - Removes old specmem hooks (by matcher or command pattern)
1392
+ * - Adds new specmem hooks
1393
+ * - Preserves user's custom non-specmem hooks
1394
+ */
1395
+ function mergeHooks(existing, newHooks) {
1396
+ if (!existing) return newHooks;
1397
+
1398
+ // Build set of specmem matchers for new hooks
1399
+ const specmemMatchers = new Map();
1400
+ for (const hook of newHooks) {
1401
+ const matcherKey = hook.matcher || '__CATCHALL__';
1402
+ specmemMatchers.set(matcherKey, hook);
1403
+ }
1404
+
1405
+ // Filter existing hooks:
1406
+ // - Remove groups with same matcher as specmem (specmem takes priority)
1407
+ // - Remove old specmem hooks (by command pattern)
1408
+ const preserved = existing.filter(h => {
1409
+ const matcherKey = h.matcher || '__CATCHALL__';
1410
+
1411
+ // If specmem has a hook for this matcher, remove existing
1412
+ if (specmemMatchers.has(matcherKey)) {
1413
+ return false;
1414
+ }
1415
+
1416
+ // Check if this is a specmem hook (to avoid duplicates on re-init)
1417
+ const hookStr = JSON.stringify(h);
1418
+ if (hookStr.includes('specmem-') ||
1419
+ hookStr.includes('/specmem/') ||
1420
+ hookStr.includes('team-comms-enforcer') ||
1421
+ hookStr.includes('smart-context-hook') ||
1422
+ hookStr.includes('agent-loading-hook') ||
1423
+ hookStr.includes('input-aware-improver')) {
1424
+ return false;
1425
+ }
1426
+
1427
+ return true; // Preserve user's custom hooks
1428
+ });
1429
+
1430
+ // Return: preserved user hooks + new specmem hooks
1431
+ return [...preserved, ...newHooks];
1432
+ }
1433
+
1434
+ // UserPromptSubmit hooks - MERGE
1435
+ const specmemUserPromptHooks = [
1436
+ {
1437
+ hooks: [{
1438
+ type: 'command',
1439
+ command: `node ${path.join(CLAUDE_HOOKS_DIR, 'specmem-drilldown-hook.js')}`,
1440
+ timeout: 30,
1441
+ env: {
1442
+ ...hookEnv,
1443
+ SPECMEM_SEARCH_LIMIT: '5',
1444
+ SPECMEM_THRESHOLD: '0.30',
1445
+ SPECMEM_MAX_CONTENT: '200'
1446
+ }
1447
+ }]
1448
+ },
1449
+ {
1450
+ hooks: [{
1451
+ type: 'command',
1452
+ command: `node ${path.join(CLAUDE_HOOKS_DIR, 'input-aware-improver.js')}`,
1453
+ timeout: 5,
1454
+ env: hookEnv
1455
+ }]
1456
+ }
1457
+ ];
1458
+ settings.hooks.UserPromptSubmit = mergeHooks(settings.hooks.UserPromptSubmit, specmemUserPromptHooks);
1459
+
1460
+ // PreToolUse hooks - Agent loading with chooser - MERGE
1461
+ const specmemPreToolUseHooks = [
1462
+ {
1463
+ matcher: 'Task',
1464
+ hooks: [{
1465
+ type: 'command',
1466
+ command: `node ${path.join(CLAUDE_HOOKS_DIR, 'agent-loading-hook.js')}`,
1467
+ timeout: 10,
1468
+ statusMessage: 'Agent Chooser...',
1469
+ env: {
1470
+ ...hookEnv,
1471
+ SPECMEM_FORCE_CHOOSER: '1',
1472
+ SPECMEM_AGENT_AUTO: '0'
1473
+ }
1474
+ }]
1475
+ },
1476
+ {
1477
+ matcher: 'Grep',
1478
+ hooks: [{
1479
+ type: 'command',
1480
+ command: `node ${path.join(CLAUDE_HOOKS_DIR, 'smart-context-hook.js')}`,
1481
+ timeout: 8,
1482
+ env: {
1483
+ ...hookEnv,
1484
+ SPECMEM_SEARCH_LIMIT: '3',
1485
+ SPECMEM_THRESHOLD: '0.25',
1486
+ SPECMEM_MAX_CONTENT: '150'
1487
+ }
1488
+ }]
1489
+ },
1490
+ {
1491
+ matcher: 'Glob',
1492
+ hooks: [{
1493
+ type: 'command',
1494
+ command: `node ${path.join(CLAUDE_HOOKS_DIR, 'smart-context-hook.js')}`,
1495
+ timeout: 8,
1496
+ env: {
1497
+ ...hookEnv,
1498
+ SPECMEM_SEARCH_LIMIT: '3',
1499
+ SPECMEM_THRESHOLD: '0.25',
1500
+ SPECMEM_MAX_CONTENT: '150'
1501
+ }
1502
+ }]
1503
+ },
1504
+ {
1505
+ matcher: 'Read',
1506
+ hooks: [{
1507
+ type: 'command',
1508
+ command: `node ${path.join(CLAUDE_HOOKS_DIR, 'smart-context-hook.js')}`,
1509
+ timeout: 8,
1510
+ env: {
1511
+ ...hookEnv,
1512
+ SPECMEM_SEARCH_LIMIT: '3',
1513
+ SPECMEM_THRESHOLD: '0.25',
1514
+ SPECMEM_MAX_CONTENT: '150'
1515
+ }
1516
+ }]
1517
+ }
1518
+ ];
1519
+ settings.hooks.PreToolUse = mergeHooks(settings.hooks.PreToolUse, specmemPreToolUseHooks);
1520
+
1521
+ // SessionStart hook - MERGE
1522
+ const specmemSessionStartHooks = [
1523
+ {
1524
+ hooks: [{
1525
+ type: 'command',
1526
+ command: `node ${path.join(CLAUDE_HOOKS_DIR, 'specmem-session-start.cjs')}`,
1527
+ timeout: 30,
1528
+ env: hookEnv
1529
+ }]
1530
+ }
1531
+ ];
1532
+ settings.hooks.SessionStart = mergeHooks(settings.hooks.SessionStart, specmemSessionStartHooks);
1533
+
1534
+ // PreCompact hook - saves context before compaction - MERGE
1535
+ const specmemPreCompactHooks = [
1536
+ {
1537
+ hooks: [{
1538
+ type: 'command',
1539
+ command: `node ${path.join(CLAUDE_HOOKS_DIR, 'specmem-precompact.js')}`,
1540
+ timeout: 60,
1541
+ env: hookEnv
1542
+ }]
1543
+ }
1544
+ ];
1545
+ settings.hooks.PreCompact = mergeHooks(settings.hooks.PreCompact, specmemPreCompactHooks);
1546
+
1547
+ // PostToolUse hooks - agent completion tracking - MERGE
1548
+ const specmemPostToolUseHooks = [
1549
+ {
1550
+ matcher: 'Task',
1551
+ hooks: [{
1552
+ type: 'command',
1553
+ command: `node ${path.join(CLAUDE_HOOKS_DIR, 'task-progress-hook.js')}`,
1554
+ timeout: 10,
1555
+ statusMessage: 'Team member finished',
1556
+ env: hookEnv
1557
+ }]
1558
+ }
1559
+ ];
1560
+ settings.hooks.PostToolUse = mergeHooks(settings.hooks.PostToolUse, specmemPostToolUseHooks);
1561
+
1562
+ // SubagentStart/Stop hooks - MERGE
1563
+ const specmemSubagentStartHooks = [
1564
+ {
1565
+ hooks: [{
1566
+ type: 'command',
1567
+ command: `node ${path.join(CLAUDE_HOOKS_DIR, 'subagent-loading-hook.js')}`,
1568
+ timeout: 5,
1569
+ statusMessage: 'Starting subagent...',
1570
+ env: hookEnv
1571
+ }]
1572
+ }
1573
+ ];
1574
+ settings.hooks.SubagentStart = mergeHooks(settings.hooks.SubagentStart, specmemSubagentStartHooks);
1575
+
1576
+ const specmemSubagentStopHooks = [
1577
+ {
1578
+ hooks: [{
1579
+ type: 'command',
1580
+ command: `node ${path.join(CLAUDE_HOOKS_DIR, 'subagent-loading-hook.js')}`,
1581
+ timeout: 5,
1582
+ statusMessage: 'Subagent completed',
1583
+ env: hookEnv
1584
+ }]
1585
+ }
1586
+ ];
1587
+ settings.hooks.SubagentStop = mergeHooks(settings.hooks.SubagentStop, specmemSubagentStopHooks);
1588
+
1589
+ // Configure MCP servers
1590
+ if (!settings.mcpServers) settings.mcpServers = {};
1591
+
1592
+ // Read database credentials from .env if available, otherwise use defaults
1593
+ const envPath = path.join(process.cwd(), '.env');
1594
+ // Use DB_CONFIG as the single source of truth for credentials
1595
+ let dbCredentials = {
1596
+ SPECMEM_DB_HOST: DB_CONFIG.host,
1597
+ SPECMEM_DB_PORT: String(DB_CONFIG.port),
1598
+ SPECMEM_DB_NAME: DB_CONFIG.name,
1599
+ SPECMEM_DB_USER: DB_CONFIG.user,
1600
+ SPECMEM_DB_PASSWORD: DB_CONFIG.password
1601
+ };
1602
+
1603
+ if (fs.existsSync(envPath)) {
1604
+ try {
1605
+ const envContent = fs.readFileSync(envPath, 'utf-8');
1606
+ const envLines = envContent.split('\n');
1607
+ for (const line of envLines) {
1608
+ const match = line.match(/^(SPECMEM_DB_\w+)=(.+)$/);
1609
+ if (match) {
1610
+ dbCredentials[match[1]] = match[2].trim();
1611
+ }
1612
+ }
1613
+ log.dim('Loaded DB credentials from .env');
1614
+ } catch (e) {
1615
+ log.dim('Using default DB credentials');
1616
+ }
1617
+ }
1618
+
1619
+ settings.mcpServers.specmem = {
1620
+ command: 'node',
1621
+ args: [
1622
+ '--max-old-space-size=250',
1623
+ path.join(SPECMEM_PKG_DIR, 'bootstrap.cjs')
1624
+ ],
1625
+ env: {
1626
+ HOME: HOME,
1627
+ SPECMEM_PROJECT_PATH: '${PWD}',
1628
+ ...dbCredentials
1629
+ }
1630
+ };
1631
+
1632
+ // Write settings
1633
+ fs.writeFileSync(CLAUDE_SETTINGS, JSON.stringify(settings, null, 2));
1634
+ log.success(' settings configured (merged with existing - no clobbering!)');
1635
+ }
1636
+
1637
+ // ============================================================================
1638
+ // GLOBAL DIRECTORIES & ENV
1639
+ // ============================================================================
1640
+
1641
+ /**
1642
+ * Setup global SpecMem directories
1643
+ */
1644
+ function setupGlobalDirs() {
1645
+ log.header('Setting Up Global Directories');
1646
+
1647
+ const dirs = [
1648
+ SPECMEM_GLOBAL_DIR,
1649
+ path.join(SPECMEM_GLOBAL_DIR, 'instances'),
1650
+ path.join(SPECMEM_GLOBAL_DIR, 'docker'),
1651
+ path.join(SPECMEM_GLOBAL_DIR, 'sockets'),
1652
+ path.join(SPECMEM_GLOBAL_DIR, 'logs')
1653
+ ];
1654
+
1655
+ for (const dir of dirs) {
1656
+ ensureDir(dir);
1657
+ }
1658
+ }
1659
+
1660
+ /**
1661
+ * Copy default agent configuration
1662
+ */
1663
+ function copyAgentConfig() {
1664
+ const srcConfig = path.join(SPECMEM_PKG_DIR, '.specmem', 'agent-config.json');
1665
+ const destConfig = path.join(SPECMEM_GLOBAL_DIR, 'agent-config.json');
1666
+
1667
+ if (fs.existsSync(srcConfig) && !fs.existsSync(destConfig)) {
1668
+ try {
1669
+ fs.copyFileSync(srcConfig, destConfig);
1670
+ log.success('Agent config template installed');
1671
+ } catch (e) {
1672
+ log.warn('Could not copy agent config');
1673
+ }
1674
+ }
1675
+ }
1676
+
1677
+ /**
1678
+ * Create environment template
1679
+ */
1680
+ function createEnvTemplate() {
1681
+ log.header('Creating Environment Template');
1682
+
1683
+ const envTemplate = `# SpecMem Configuration
1684
+ # Generated by specmem-hardwicksoftware
1685
+ # https://justcalljon.pro
1686
+
1687
+ # Database (auto-configured)
1688
+ SPECMEM_DB_HOST=${DB_CONFIG.host}
1689
+ SPECMEM_DB_PORT=${DB_CONFIG.port}
1690
+ SPECMEM_DB_NAME=${DB_CONFIG.name}
1691
+ SPECMEM_DB_USER=${DB_CONFIG.user}
1692
+ SPECMEM_DB_PASSWORD=${DB_CONFIG.password}
1693
+
1694
+ # Embedding Service
1695
+ SPECMEM_EMBEDDING_TIMEOUT=45
1696
+ SPECMEM_EMBEDDING_MAX_RETRIES=3
1697
+
1698
+ # Memory Settings
1699
+ SPECMEM_MAX_HEAP_MB=100
1700
+ SPECMEM_SEARCH_LIMIT=10
1701
+ SPECMEM_THRESHOLD=0.25
1702
+
1703
+ # Docker (on-demand activation)
1704
+ SPECMEM_DOCKER_CPU_LIMIT=20
1705
+ SPECMEM_DOCKER_MEMORY_LIMIT=2g
1706
+ SPECMEM_DOCKER_IDLE_TIMEOUT=60
1707
+ `;
1708
+
1709
+ const envPath = path.join(SPECMEM_GLOBAL_DIR, 'specmem.env.template');
1710
+ fs.writeFileSync(envPath, envTemplate);
1711
+ log.success('Environment template created');
1712
+ }
1713
+
1714
+ // ============================================================================
1715
+ // MAIN INSTALLATION
1716
+ // ============================================================================
1717
+
1718
+ async function main() {
1719
+ console.log(`
1720
+ ${c.bright}${c.cyan}
1721
+ ╔═══════════════════════════════════════════════════════════════╗
1722
+ ║ ║
1723
+ ║ ███████╗██████╗ ███████╗ ██████╗███╗ ███╗███████╗███╗ ███╗
1724
+ ║ ██╔════╝██╔══██╗██╔════╝██╔════╝████╗ ████║██╔════╝████╗ ████║
1725
+ ║ ███████╗██████╔╝█████╗ ██║ ██╔████╔██║█████╗ ██╔████╔██║
1726
+ ║ ╚════██║██╔═══╝ ██╔══╝ ██║ ██║╚██╔╝██║██╔══╝ ██║╚██╔╝██║
1727
+ ║ ███████║██║ ███████╗╚██████╗██║ ╚═╝ ██║███████╗██║ ╚═╝ ██║
1728
+ ║ ╚══════╝╚═╝ ╚══════╝ ╚═════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝
1729
+ ║ ║
1730
+ ║ FULL AUTO-INSTALL ║
1731
+ ║ PostgreSQL + pgvector + Docker + Hooks ║
1732
+ ║ https://justcalljon.pro ║
1733
+ ║ ║
1734
+ ╚═══════════════════════════════════════════════════════════════╝
1735
+ ${c.reset}
1736
+ `);
1737
+
1738
+ log.info('Starting SpecMem full auto-installation...');
1739
+ log.info(`Platform: ${PLATFORM}`);
1740
+
1741
+ // ============================================================================
1742
+ // CRITICAL WARNING: YOU MUST RUN SETUP TO CUSTOMIZE!
1743
+ // ============================================================================
1744
+ console.log(`
1745
+ ${c.red}${c.bright}╔═══════════════════════════════════════════════════════════════════════════════╗
1746
+ ║ ⚠️ IMPORTANT: RUN SETUP FIRST! ⚠️ ║
1747
+ ╠═══════════════════════════════════════════════════════════════════════════════╣${c.reset}
1748
+ ${c.red}║${c.reset} ${c.red}║${c.reset}
1749
+ ${c.red}║${c.reset} If you skip ${c.cyan}specmem setup${c.reset}, the following ${c.yellow}DEFAULTS${c.reset} will be applied: ${c.red}║${c.reset}
1750
+ ${c.red}║${c.reset} ${c.red}║${c.reset}
1751
+ ${c.red}║${c.reset} ${c.bright}DATABASE:${c.reset} ${c.red}║${c.reset}
1752
+ ${c.red}║${c.reset} • Host: ${c.cyan}localhost:5432${c.reset} ${c.red}║${c.reset}
1753
+ ${c.red}║${c.reset} • Database: ${c.cyan}specmem_westayunprofessional${c.reset} ${c.red}║${c.reset}
1754
+ ${c.red}║${c.reset} • User: ${c.cyan}specmem_westayunprofessional${c.reset} ${c.red}║${c.reset}
1755
+ ${c.red}║${c.reset} • Password: ${c.cyan}specmem_westayunprofessional${c.reset} ${c.red}║${c.reset}
1756
+ ${c.red}║${c.reset} ${c.red}║${c.reset}
1757
+ ${c.red}║${c.reset} ${c.bright}HOOKS (auto-installed to ~/.claude/hooks/):${c.reset} ${c.red}║${c.reset}
1758
+ ${c.red}║${c.reset} • specmem-drilldown-hook.js (UserPromptSubmit, 30s timeout) ${c.red}║${c.reset}
1759
+ ${c.red}║${c.reset} • input-aware-improver.js (UserPromptSubmit, 5s timeout) ${c.red}║${c.reset}
1760
+ ${c.red}║${c.reset} • agent-loading-hook.js (PreToolUse:Task, 10s timeout) ${c.red}║${c.reset}
1761
+ ${c.red}║${c.reset} • smart-context-hook.js (PreToolUse:Grep/Glob/Read, 8s timeout) ${c.red}║${c.reset}
1762
+ ${c.red}║${c.reset} • specmem-session-start.cjs (SessionStart, 30s timeout) ${c.red}║${c.reset}
1763
+ ${c.red}║${c.reset} • specmem-precompact.js (PreCompact, 60s timeout) ${c.red}║${c.reset}
1764
+ ${c.red}║${c.reset} • task-progress-hook.js (PostToolUse:Task, 10s timeout) ${c.red}║${c.reset}
1765
+ ${c.red}║${c.reset} • subagent-loading-hook.js (SubagentStart/Stop, 5s timeout) ${c.red}║${c.reset}
1766
+ ${c.red}║${c.reset} ${c.red}║${c.reset}
1767
+ ${c.red}║${c.reset} ${c.bright}MCP SERVER:${c.reset} ${c.red}║${c.reset}
1768
+ ${c.red}║${c.reset} • Command: ${c.cyan}node --max-old-space-size=250 bootstrap.cjs${c.reset} ${c.red}║${c.reset}
1769
+ ${c.red}║${c.reset} • Project path: ${c.cyan}\${PWD}${c.reset} (current working directory) ${c.red}║${c.reset}
1770
+ ${c.red}║${c.reset} ${c.red}║${c.reset}
1771
+ ${c.red}║${c.reset} ${c.bright}PERMISSIONS (auto-granted in settings.json):${c.reset} ${c.red}║${c.reset}
1772
+ ${c.red}║${c.reset} • mcp__specmem__* (all SpecMem MCP tools) ${c.red}║${c.reset}
1773
+ ${c.red}║${c.reset} • Skill(specmem), Skill(specmem-*) ${c.red}║${c.reset}
1774
+ ${c.red}║${c.reset} • Bash, Read, Write, Edit, Glob, Grep ${c.red}║${c.reset}
1775
+ ${c.red}║${c.reset} ${c.red}║${c.reset}
1776
+ ${c.red}║${c.reset} ${c.bright}EMBEDDING MODEL (downloaded on first use):${c.reset} ${c.red}║${c.reset}
1777
+ ${c.red}║${c.reset} • sentence-transformers/all-MiniLM-L6-v2 (~90MB) ${c.red}║${c.reset}
1778
+ ${c.red}║${c.reset} • ONNX + INT8 quantization for 2-4x faster inference ${c.red}║${c.reset}
1779
+ ${c.red}║${c.reset} ${c.red}║${c.reset}
1780
+ ${c.red}║${c.reset} ${c.bright}DOCKER:${c.reset} ${c.red}║${c.reset}
1781
+ ${c.red}║${c.reset} • Auto-install if missing (Linux official script, Mac via Homebrew) ${c.red}║${c.reset}
1782
+ ${c.red}║${c.reset} • Bound to 127.0.0.1 only (localhost, no external access) ${c.red}║${c.reset}
1783
+ ${c.red}║${c.reset} • Memory limit: 2GB, CPU limit: 20% ${c.red}║${c.reset}
1784
+ ${c.red}║${c.reset} ${c.red}║${c.reset}
1785
+ ${c.red}${c.bright}╠═══════════════════════════════════════════════════════════════════════════════╣
1786
+ ║ To customize these settings, run: ${c.cyan}specmem setup${c.reset}${c.red}${c.bright} ║
1787
+ ╚═══════════════════════════════════════════════════════════════════════════════╝${c.reset}
1788
+ `);
1789
+
1790
+ // Give user a moment to read
1791
+ log.info('Proceeding with default configuration in 3 seconds...');
1792
+ log.info(`(Run ${c.cyan}specmem setup${c.reset} after install to customize)`);
1793
+ console.log('');
1794
+
1795
+ const results = {
1796
+ claudeCode: false,
1797
+ screen: false,
1798
+ postgres: false,
1799
+ pgvector: false,
1800
+ database: false,
1801
+ docker: false,
1802
+ hooks: false,
1803
+ commands: false,
1804
+ skills: false,
1805
+ plugins: false,
1806
+ settings: false
1807
+ };
1808
+
1809
+ try {
1810
+ // Step 0: Install ALL core system deps FIRST (python3, pip, screen, curl, git)
1811
+ installCoreDeps();
1812
+
1813
+ // Step 0a: Claude Code (REQUIRED)
1814
+ results.claudeCode = ensureClaudeCode();
1815
+ if (!results.claudeCode) {
1816
+ log.warn('Claude Code not installed - SpecMem requires Claude Code to function');
1817
+ log.info('Install manually: npm install -g @anthropic-ai/claude-code');
1818
+ }
1819
+
1820
+ // Step 0b: screen (needed for team members) - should already be installed by installCoreDeps
1821
+ results.screen = ensureScreen();
1822
+
1823
+ // Step 1: PostgreSQL
1824
+ const pgStatus = checkPostgres();
1825
+ if (pgStatus === true) {
1826
+ results.postgres = true;
1827
+ } else {
1828
+ results.postgres = installPostgres();
1829
+ }
1830
+
1831
+ // Step 2: pgvector
1832
+ if (results.postgres) {
1833
+ if (!checkPgvector()) {
1834
+ installPgvector();
1835
+ }
1836
+ results.pgvector = true;
1837
+ }
1838
+
1839
+ // Step 3: Database setup
1840
+ if (results.postgres) {
1841
+ results.database = setupDatabase();
1842
+ }
1843
+
1844
+ // Step 4: Docker
1845
+ results.docker = setupDocker();
1846
+
1847
+ // Step 4b: Load embedded Docker images (if packaged)
1848
+ if (results.docker) {
1849
+ loadEmbeddedDockerImages();
1850
+ // Step 4c: Build/setup embedding image
1851
+ setupEmbeddingImage();
1852
+ }
1853
+
1854
+ // Step 5: Global directories
1855
+ setupGlobalDirs();
1856
+
1857
+ // Step 6: Environment template + agent config
1858
+ createEnvTemplate();
1859
+ copyAgentConfig();
1860
+
1861
+ // Step 7: hooks
1862
+ installHooks();
1863
+ results.hooks = true;
1864
+
1865
+ // Step 8: SpecMem commands (slash commands)
1866
+ const cmdResult = installCommands();
1867
+ results.commands = cmdResult.installed;
1868
+
1869
+ // Step 8b: SpecMem skills (specialized prompts)
1870
+ const skillResult = installSkills();
1871
+ results.skills = skillResult.installed;
1872
+
1873
+ // Step 8c: SpecMem plugins (agent definitions)
1874
+ const pluginResult = installPlugins();
1875
+ results.plugins = pluginResult.installed;
1876
+
1877
+ // Step 9: settings (with Skill permissions)
1878
+ configureSettings();
1879
+ results.settings = true;
1880
+
1881
+ // Summary
1882
+ log.header('Installation Summary');
1883
+
1884
+ console.log(`
1885
+ ${results.postgres ? c.green + '✓' : c.red + '✗'}${c.reset} PostgreSQL ${results.postgres ? 'Installed & Running' : 'FAILED - Install manually'}
1886
+ ${results.pgvector ? c.green + '✓' : c.yellow + '⚠'}${c.reset} pgvector ${results.pgvector ? 'Available' : 'May need manual install'}
1887
+ ${results.database ? c.green + '✓' : c.red + '✗'}${c.reset} Database ${results.database ? 'Created & Configured' : 'FAILED'}
1888
+ ${results.docker ? c.green + '✓' : c.yellow + '⚠'}${c.reset} Docker ${results.docker ? 'Available' : 'Not found - embeddings limited'}
1889
+ ${results.hooks ? c.green + '✓' : c.red + '✗'}${c.reset} Hooks ${results.hooks ? 'Installed' : 'FAILED'}
1890
+ ${results.commands ? c.green + '✓' : c.red + '✗'}${c.reset} Commands ${results.commands ? 'Installed (/specmem-*)' : 'FAILED'}
1891
+ ${results.skills ? c.green + '✓' : c.red + '✗'}${c.reset} Skills ${results.skills ? 'Installed (specialized prompts)' : 'FAILED'}
1892
+ ${results.plugins ? c.green + '✓' : c.yellow + '⚠'}${c.reset} Plugins ${results.plugins ? 'Installed (agent definitions)' : 'None bundled'}
1893
+ ${results.settings ? c.green + '✓' : c.red + '✗'}${c.reset} Settings ${results.settings ? 'Configured (with Skill perms)' : 'FAILED'}
1894
+ `);
1895
+
1896
+ console.log(`
1897
+ ${c.green}${c.bright}Installation Complete!${c.reset}
1898
+
1899
+ ${c.bright}Next steps:${c.reset}
1900
+ 1. Navigate to your project: ${c.cyan}cd /path/to/your/project${c.reset}
1901
+ 2. Run the full init: ${c.cyan}specmem-init${c.reset}
1902
+ - Analyzes your project (Small/Medium/Large tier)
1903
+ - Optimizes model settings based on project size
1904
+ - Configures embedding timeouts and cache
1905
+ - Compresses commands with token optimization
1906
+ - Deploys to global and per-project locations
1907
+ 3. Start Code - SpecMem auto-injects context!
1908
+
1909
+ ${c.bright}Commands:${c.reset}
1910
+ ${c.cyan}specmem-init${c.reset} Full project initialization with loading bars
1911
+ ${c.cyan}specmem start${c.reset} Start services manually
1912
+ ${c.cyan}specmem status${c.reset} Check health
1913
+ ${c.cyan}specmem doctor${c.reset} Diagnose issues
1914
+
1915
+ ${c.bright}Database:${c.reset}
1916
+ Host: ${DB_CONFIG.host}:${DB_CONFIG.port}
1917
+ Database: ${DB_CONFIG.name}
1918
+ User: ${DB_CONFIG.user}
1919
+
1920
+ ${c.yellow}Need help?${c.reset} https://justcalljon.pro
1921
+ `);
1922
+
1923
+ // Offer to run specmem-init if we're in a project directory (not npm's cache)
1924
+ const cwd = process.cwd();
1925
+ const isProjectDir = fs.existsSync(path.join(cwd, 'package.json')) ||
1926
+ fs.existsSync(path.join(cwd, '.git')) ||
1927
+ fs.existsSync(path.join(cwd, 'src'));
1928
+
1929
+ if (isProjectDir && !cwd.includes('node_modules') && !cwd.includes('.npm')) {
1930
+ log.info(`Detected project directory: ${cwd}`);
1931
+ log.info(`Running ${c.cyan}specmem-init${c.reset} for this project...`);
1932
+ console.log('');
1933
+
1934
+ try {
1935
+ const initScript = path.join(SPECMEM_PKG_DIR, 'scripts', 'specmem-init.cjs');
1936
+ if (fs.existsSync(initScript)) {
1937
+ run(`node "${initScript}"`, { silent: false });
1938
+ }
1939
+ } catch (e) {
1940
+ log.warn(`specmem-init failed: ${e.message}`);
1941
+ log.info(`Run ${c.cyan}specmem-init${c.reset} manually to complete setup`);
1942
+ }
1943
+ }
1944
+
1945
+ } catch (error) {
1946
+ log.error(`Installation failed: ${error.message}`);
1947
+ console.error(error);
1948
+ process.exit(1);
1949
+ }
1950
+ }
1951
+
1952
+ // Run if called directly
1953
+ if (require.main === module) {
1954
+ main();
1955
+ }
1956
+
1957
+ module.exports = { main };