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,2763 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>SPECMEM // PROMPT CONSOLE</title>
7
+
8
+ <!-- xterm.js for terminal -->
9
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/xterm@5.3.0/css/xterm.css" />
10
+ <script src="https://cdn.jsdelivr.net/npm/xterm@5.3.0/lib/xterm.js"></script>
11
+ <script src="https://cdn.jsdelivr.net/npm/xterm-addon-fit@0.8.0/lib/xterm-addon-fit.js"></script>
12
+ <script src="https://cdn.jsdelivr.net/npm/xterm-addon-web-links@0.9.0/lib/xterm-addon-web-links.js"></script>
13
+
14
+ <style>
15
+ @import url('https://fonts.googleapis.com/css2?family=Rajdhani:wght@400;500;600;700&family=Orbitron:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap');
16
+
17
+ * { margin: 0; padding: 0; box-sizing: border-box; }
18
+
19
+ :root {
20
+ --csgo-yellow: #FFD700;
21
+ --csgo-yellow-dark: #B8860B;
22
+ --csgo-yellow-glow: rgba(255, 215, 0, 0.5);
23
+ --csgo-black: #000000;
24
+ --csgo-dark: #0a0a0a;
25
+ --csgo-darker: #050505;
26
+ --csgo-gray: #1a1a1a;
27
+ --csgo-gray-light: #2a2a2a;
28
+ --csgo-text: #e0e0e0;
29
+ --csgo-text-dim: #888888;
30
+ --csgo-success: #4CAF50;
31
+ --csgo-error: #f44336;
32
+ --csgo-warning: #ff9800;
33
+ --csgo-border: #333333;
34
+ --csgo-code-bg: #0d1117;
35
+ }
36
+
37
+ body {
38
+ font-family: 'Rajdhani', 'Segoe UI', sans-serif;
39
+ background: var(--csgo-black);
40
+ color: var(--csgo-text);
41
+ min-height: 100vh;
42
+ overflow-x: hidden;
43
+ }
44
+
45
+ body::before {
46
+ content: '';
47
+ position: fixed;
48
+ top: 0; left: 0;
49
+ width: 100%; height: 100%;
50
+ background:
51
+ linear-gradient(90deg, rgba(255,215,0,0.03) 1px, transparent 1px),
52
+ linear-gradient(rgba(255,215,0,0.03) 1px, transparent 1px);
53
+ background-size: 50px 50px;
54
+ pointer-events: none;
55
+ z-index: 0;
56
+ }
57
+
58
+ .console-container {
59
+ display: grid;
60
+ grid-template-columns: 280px 1fr;
61
+ grid-template-rows: auto 1fr auto;
62
+ min-height: 100vh;
63
+ position: relative;
64
+ z-index: 1;
65
+ }
66
+
67
+ .header {
68
+ grid-column: 1 / -1;
69
+ height: 60px;
70
+ background: linear-gradient(180deg, var(--csgo-dark) 0%, var(--csgo-black) 100%);
71
+ border-bottom: 2px solid var(--csgo-yellow);
72
+ display: flex;
73
+ align-items: center;
74
+ justify-content: space-between;
75
+ padding: 0 20px;
76
+ box-shadow: 0 4px 20px rgba(255, 215, 0, 0.2);
77
+ }
78
+
79
+ .logo {
80
+ font-family: 'Orbitron', monospace;
81
+ font-size: 20px;
82
+ font-weight: 700;
83
+ color: var(--csgo-yellow);
84
+ text-shadow: 0 0 10px var(--csgo-yellow-glow);
85
+ letter-spacing: 2px;
86
+ }
87
+
88
+ .logo span { color: var(--csgo-text); font-weight: 400; }
89
+
90
+ .header-actions { display: flex; gap: 10px; }
91
+
92
+ .sidebar {
93
+ background: var(--csgo-dark);
94
+ border-right: 1px solid var(--csgo-border);
95
+ display: flex;
96
+ flex-direction: column;
97
+ overflow: hidden;
98
+ }
99
+
100
+ .sidebar-section { border-bottom: 1px solid var(--csgo-border); }
101
+
102
+ .sidebar-header {
103
+ display: flex;
104
+ align-items: center;
105
+ justify-content: space-between;
106
+ padding: 12px 15px;
107
+ background: var(--csgo-gray);
108
+ cursor: pointer;
109
+ }
110
+
111
+ .sidebar-header h3 {
112
+ font-size: 12px;
113
+ text-transform: uppercase;
114
+ letter-spacing: 1px;
115
+ color: var(--csgo-yellow);
116
+ }
117
+
118
+ .sidebar-content {
119
+ max-height: 300px;
120
+ overflow-y: auto;
121
+ scrollbar-width: thin;
122
+ scrollbar-color: var(--csgo-yellow) var(--csgo-dark);
123
+ }
124
+
125
+ .history-item {
126
+ padding: 10px 15px;
127
+ border-bottom: 1px solid var(--csgo-border);
128
+ cursor: pointer;
129
+ transition: background 0.2s;
130
+ }
131
+
132
+ .history-item:hover { background: rgba(255, 215, 0, 0.1); }
133
+
134
+ .history-item.active {
135
+ background: rgba(255, 215, 0, 0.15);
136
+ border-left: 3px solid var(--csgo-yellow);
137
+ }
138
+
139
+ .history-prompt {
140
+ font-size: 13px;
141
+ color: var(--csgo-text);
142
+ white-space: nowrap;
143
+ overflow: hidden;
144
+ text-overflow: ellipsis;
145
+ margin-bottom: 5px;
146
+ }
147
+
148
+ .history-meta {
149
+ display: flex;
150
+ justify-content: space-between;
151
+ font-size: 10px;
152
+ color: var(--csgo-text-dim);
153
+ }
154
+
155
+ .context-item {
156
+ display: flex;
157
+ align-items: center;
158
+ padding: 8px 15px;
159
+ border-bottom: 1px solid var(--csgo-border);
160
+ font-size: 12px;
161
+ }
162
+
163
+ .context-item input[type="checkbox"] {
164
+ margin-right: 10px;
165
+ accent-color: var(--csgo-yellow);
166
+ }
167
+
168
+ .context-item label { flex: 1; cursor: pointer; }
169
+
170
+ .context-chips {
171
+ display: flex;
172
+ flex-wrap: wrap;
173
+ gap: 5px;
174
+ padding: 10px 15px;
175
+ }
176
+
177
+ .context-chip {
178
+ display: inline-flex;
179
+ align-items: center;
180
+ gap: 5px;
181
+ padding: 4px 10px;
182
+ background: var(--csgo-gray);
183
+ border: 1px solid var(--csgo-border);
184
+ border-radius: 15px;
185
+ font-size: 11px;
186
+ color: var(--csgo-text);
187
+ }
188
+
189
+ .context-chip .remove {
190
+ cursor: pointer;
191
+ color: var(--csgo-error);
192
+ font-weight: bold;
193
+ }
194
+
195
+ .main-content {
196
+ display: flex;
197
+ flex-direction: column;
198
+ overflow: hidden;
199
+ }
200
+
201
+ .response-viewer {
202
+ flex: 1;
203
+ overflow-y: auto;
204
+ padding: 20px;
205
+ background: var(--csgo-darker);
206
+ scrollbar-width: thin;
207
+ scrollbar-color: var(--csgo-yellow) var(--csgo-dark);
208
+ }
209
+
210
+ .response-empty {
211
+ display: flex;
212
+ flex-direction: column;
213
+ align-items: center;
214
+ justify-content: center;
215
+ height: 100%;
216
+ color: var(--csgo-text-dim);
217
+ text-align: center;
218
+ }
219
+
220
+ .response-empty h2 {
221
+ font-family: 'Orbitron', monospace;
222
+ font-size: 24px;
223
+ color: var(--csgo-yellow);
224
+ margin-bottom: 10px;
225
+ }
226
+
227
+ .response-content {
228
+ font-family: 'Rajdhani', sans-serif;
229
+ font-size: 15px;
230
+ line-height: 1.6;
231
+ color: var(--csgo-text);
232
+ }
233
+
234
+ .response-content h1, .response-content h2, .response-content h3 {
235
+ color: var(--csgo-yellow);
236
+ margin: 20px 0 10px;
237
+ }
238
+
239
+ .response-content pre {
240
+ background: var(--csgo-code-bg);
241
+ border: 1px solid var(--csgo-border);
242
+ border-radius: 5px;
243
+ padding: 15px;
244
+ overflow-x: auto;
245
+ margin: 10px 0;
246
+ position: relative;
247
+ }
248
+
249
+ .response-content code {
250
+ font-family: 'JetBrains Mono', monospace;
251
+ font-size: 13px;
252
+ }
253
+
254
+ .response-content p code {
255
+ background: var(--csgo-code-bg);
256
+ padding: 2px 6px;
257
+ border-radius: 3px;
258
+ }
259
+
260
+ .response-meta {
261
+ display: flex;
262
+ gap: 20px;
263
+ padding: 10px 20px;
264
+ background: var(--csgo-gray);
265
+ border-top: 1px solid var(--csgo-border);
266
+ font-size: 12px;
267
+ color: var(--csgo-text-dim);
268
+ }
269
+
270
+ .response-meta span {
271
+ display: flex;
272
+ align-items: center;
273
+ gap: 5px;
274
+ }
275
+
276
+ .response-meta .value {
277
+ color: var(--csgo-yellow);
278
+ font-family: 'Orbitron', monospace;
279
+ }
280
+
281
+ .prompt-input-container {
282
+ background: var(--csgo-dark);
283
+ border-top: 2px solid var(--csgo-yellow);
284
+ padding: 15px 20px;
285
+ }
286
+
287
+ .config-bar {
288
+ display: flex;
289
+ gap: 15px;
290
+ margin-bottom: 10px;
291
+ flex-wrap: wrap;
292
+ align-items: center;
293
+ }
294
+
295
+ .config-item {
296
+ display: flex;
297
+ align-items: center;
298
+ gap: 8px;
299
+ }
300
+
301
+ .config-item label {
302
+ font-size: 11px;
303
+ text-transform: uppercase;
304
+ letter-spacing: 1px;
305
+ color: var(--csgo-text-dim);
306
+ white-space: nowrap;
307
+ }
308
+
309
+ .config-item input[type="range"] {
310
+ width: 80px;
311
+ accent-color: var(--csgo-yellow);
312
+ }
313
+
314
+ .config-item select {
315
+ background: var(--csgo-gray);
316
+ border: 1px solid var(--csgo-border);
317
+ color: var(--csgo-text);
318
+ padding: 5px 10px;
319
+ font-size: 12px;
320
+ border-radius: 3px;
321
+ }
322
+
323
+ .config-item .value {
324
+ font-family: 'Orbitron', monospace;
325
+ font-size: 11px;
326
+ color: var(--csgo-yellow);
327
+ min-width: 35px;
328
+ }
329
+
330
+ .system-prompt-toggle {
331
+ display: flex;
332
+ align-items: center;
333
+ gap: 5px;
334
+ cursor: pointer;
335
+ font-size: 11px;
336
+ color: var(--csgo-text-dim);
337
+ text-transform: uppercase;
338
+ }
339
+
340
+ .system-prompt-container {
341
+ margin-bottom: 10px;
342
+ display: none;
343
+ }
344
+
345
+ .system-prompt-container.visible { display: block; }
346
+
347
+ .system-prompt-textarea {
348
+ width: 100%;
349
+ height: 60px;
350
+ resize: vertical;
351
+ background: var(--csgo-gray);
352
+ border: 1px solid var(--csgo-border);
353
+ border-radius: 5px;
354
+ padding: 10px;
355
+ font-family: 'Rajdhani', sans-serif;
356
+ font-size: 13px;
357
+ color: var(--csgo-text);
358
+ outline: none;
359
+ }
360
+
361
+ .system-prompt-textarea:focus {
362
+ border-color: var(--csgo-yellow);
363
+ }
364
+
365
+ .prompt-row { display: flex; gap: 10px; }
366
+
367
+ .prompt-textarea {
368
+ flex: 1;
369
+ min-height: 80px;
370
+ max-height: 200px;
371
+ resize: vertical;
372
+ background: var(--csgo-gray);
373
+ border: 1px solid var(--csgo-border);
374
+ border-radius: 5px;
375
+ padding: 12px 15px;
376
+ font-family: 'Rajdhani', sans-serif;
377
+ font-size: 15px;
378
+ color: var(--csgo-text);
379
+ outline: none;
380
+ transition: border-color 0.3s, box-shadow 0.3s;
381
+ }
382
+
383
+ .prompt-textarea:focus {
384
+ border-color: var(--csgo-yellow);
385
+ box-shadow: 0 0 10px rgba(255, 215, 0, 0.3);
386
+ }
387
+
388
+ .prompt-textarea::placeholder { color: var(--csgo-text-dim); }
389
+
390
+ .send-btn {
391
+ padding: 0 30px;
392
+ background: linear-gradient(135deg, var(--csgo-yellow) 0%, var(--csgo-yellow-dark) 100%);
393
+ border: none;
394
+ border-radius: 5px;
395
+ font-family: 'Orbitron', monospace;
396
+ font-size: 14px;
397
+ font-weight: 600;
398
+ color: var(--csgo-black);
399
+ cursor: pointer;
400
+ transition: all 0.3s;
401
+ text-transform: uppercase;
402
+ letter-spacing: 2px;
403
+ }
404
+
405
+ .send-btn:hover {
406
+ transform: translateY(-2px);
407
+ box-shadow: 0 5px 20px rgba(255, 215, 0, 0.4);
408
+ }
409
+
410
+ .send-btn:active { transform: translateY(0); }
411
+
412
+ .send-btn:disabled {
413
+ opacity: 0.5;
414
+ cursor: not-allowed;
415
+ transform: none;
416
+ }
417
+
418
+ .send-btn.loading {
419
+ position: relative;
420
+ color: transparent;
421
+ }
422
+
423
+ .send-btn.loading::after {
424
+ content: '';
425
+ position: absolute;
426
+ width: 20px;
427
+ height: 20px;
428
+ border: 2px solid var(--csgo-black);
429
+ border-top-color: transparent;
430
+ border-radius: 50%;
431
+ animation: spin 0.8s linear infinite;
432
+ }
433
+
434
+ @keyframes spin { to { transform: rotate(360deg); } }
435
+
436
+ .btn {
437
+ padding: 8px 15px;
438
+ background: var(--csgo-gray);
439
+ border: 1px solid var(--csgo-border);
440
+ border-radius: 5px;
441
+ font-family: 'Rajdhani', sans-serif;
442
+ font-size: 13px;
443
+ font-weight: 600;
444
+ color: var(--csgo-text);
445
+ cursor: pointer;
446
+ transition: all 0.3s;
447
+ text-transform: uppercase;
448
+ letter-spacing: 1px;
449
+ }
450
+
451
+ .btn:hover {
452
+ background: var(--csgo-gray-light);
453
+ border-color: var(--csgo-yellow);
454
+ color: var(--csgo-yellow);
455
+ }
456
+
457
+ .btn-small { padding: 4px 10px; font-size: 11px; }
458
+
459
+ .btn-primary {
460
+ background: linear-gradient(135deg, var(--csgo-yellow) 0%, var(--csgo-yellow-dark) 100%);
461
+ border-color: var(--csgo-yellow);
462
+ color: var(--csgo-black);
463
+ }
464
+
465
+ .btn-primary:hover {
466
+ color: var(--csgo-black);
467
+ box-shadow: 0 0 15px rgba(255, 215, 0, 0.3);
468
+ }
469
+
470
+ .modal-overlay {
471
+ position: fixed;
472
+ top: 0; left: 0; right: 0; bottom: 0;
473
+ background: rgba(0, 0, 0, 0.8);
474
+ display: none;
475
+ align-items: center;
476
+ justify-content: center;
477
+ z-index: 1000;
478
+ }
479
+
480
+ .modal-overlay.active { display: flex; }
481
+
482
+ .modal {
483
+ background: var(--csgo-dark);
484
+ border: 1px solid var(--csgo-yellow);
485
+ border-radius: 10px;
486
+ width: 90%;
487
+ max-width: 600px;
488
+ max-height: 80vh;
489
+ overflow: hidden;
490
+ box-shadow: 0 0 30px rgba(255, 215, 0, 0.3);
491
+ }
492
+
493
+ .modal-header {
494
+ display: flex;
495
+ align-items: center;
496
+ justify-content: space-between;
497
+ padding: 15px 20px;
498
+ background: var(--csgo-gray);
499
+ border-bottom: 1px solid var(--csgo-border);
500
+ }
501
+
502
+ .modal-header h3 {
503
+ font-family: 'Orbitron', monospace;
504
+ font-size: 14px;
505
+ color: var(--csgo-yellow);
506
+ text-transform: uppercase;
507
+ letter-spacing: 2px;
508
+ }
509
+
510
+ .modal-close {
511
+ background: none;
512
+ border: none;
513
+ color: var(--csgo-text-dim);
514
+ font-size: 24px;
515
+ cursor: pointer;
516
+ transition: color 0.3s;
517
+ }
518
+
519
+ .modal-close:hover { color: var(--csgo-error); }
520
+
521
+ .modal-body {
522
+ padding: 20px;
523
+ max-height: calc(80vh - 120px);
524
+ overflow-y: auto;
525
+ }
526
+
527
+ .modal-footer {
528
+ display: flex;
529
+ justify-content: flex-end;
530
+ gap: 10px;
531
+ padding: 15px 20px;
532
+ border-top: 1px solid var(--csgo-border);
533
+ }
534
+
535
+ .selector-search {
536
+ width: 100%;
537
+ margin-bottom: 15px;
538
+ padding: 10px 15px;
539
+ background: var(--csgo-gray);
540
+ border: 1px solid var(--csgo-border);
541
+ border-radius: 5px;
542
+ font-size: 14px;
543
+ color: var(--csgo-text);
544
+ outline: none;
545
+ }
546
+
547
+ .selector-search:focus { border-color: var(--csgo-yellow); }
548
+
549
+ .selector-list { max-height: 300px; overflow-y: auto; }
550
+
551
+ .selector-item {
552
+ display: flex;
553
+ align-items: flex-start;
554
+ padding: 10px;
555
+ border-bottom: 1px solid var(--csgo-border);
556
+ cursor: pointer;
557
+ }
558
+
559
+ .selector-item:hover { background: rgba(255, 215, 0, 0.1); }
560
+
561
+ .selector-item input {
562
+ margin-right: 10px;
563
+ margin-top: 4px;
564
+ accent-color: var(--csgo-yellow);
565
+ }
566
+
567
+ .selector-item-content { flex: 1; }
568
+
569
+ .selector-item-title {
570
+ font-size: 14px;
571
+ color: var(--csgo-text);
572
+ margin-bottom: 3px;
573
+ }
574
+
575
+ .selector-item-meta {
576
+ font-size: 11px;
577
+ color: var(--csgo-text-dim);
578
+ }
579
+
580
+ .notification {
581
+ position: fixed;
582
+ bottom: 20px;
583
+ right: 20px;
584
+ padding: 15px 20px;
585
+ background: var(--csgo-dark);
586
+ border: 1px solid var(--csgo-yellow);
587
+ border-radius: 5px;
588
+ box-shadow: 0 5px 20px rgba(0, 0, 0, 0.5);
589
+ z-index: 2000;
590
+ animation: slideIn 0.3s ease-out;
591
+ }
592
+
593
+ .notification.error { border-color: var(--csgo-error); }
594
+ .notification.success { border-color: var(--csgo-success); }
595
+
596
+ @keyframes slideIn {
597
+ from { transform: translateX(100%); opacity: 0; }
598
+ to { transform: translateX(0); opacity: 1; }
599
+ }
600
+
601
+ ::-webkit-scrollbar { width: 8px; height: 8px; }
602
+ ::-webkit-scrollbar-track { background: var(--csgo-dark); }
603
+ ::-webkit-scrollbar-thumb { background: var(--csgo-gray); border-radius: 4px; }
604
+ ::-webkit-scrollbar-thumb:hover { background: var(--csgo-yellow); }
605
+
606
+ .loading-indicator {
607
+ display: flex;
608
+ align-items: center;
609
+ justify-content: center;
610
+ padding: 40px;
611
+ }
612
+
613
+ .loading-dots { display: flex; gap: 8px; }
614
+
615
+ .loading-dots span {
616
+ width: 12px;
617
+ height: 12px;
618
+ background: var(--csgo-yellow);
619
+ border-radius: 50%;
620
+ animation: bounce 1.4s infinite ease-in-out both;
621
+ }
622
+
623
+ .loading-dots span:nth-child(1) { animation-delay: -0.32s; }
624
+ .loading-dots span:nth-child(2) { animation-delay: -0.16s; }
625
+ .loading-dots span:nth-child(3) { animation-delay: 0s; }
626
+
627
+ @keyframes bounce {
628
+ 0%, 80%, 100% { transform: scale(0); }
629
+ 40% { transform: scale(1); }
630
+ }
631
+
632
+ /* ============================================
633
+ * SPLIT-SCREEN LAYOUT - FR FR NO CAP
634
+ * Team Member 1's masterpiece for live thinking view
635
+ * ============================================ */
636
+
637
+ .splitscreen-container {
638
+ display: flex;
639
+ flex-direction: row;
640
+ flex: 1;
641
+ overflow: hidden;
642
+ position: relative;
643
+ }
644
+
645
+ /* Left pane - where the convo at */
646
+ .whereTheConvoAt {
647
+ flex: 1;
648
+ min-width: 300px;
649
+ display: flex;
650
+ flex-direction: column;
651
+ overflow: hidden;
652
+ background: var(--csgo-darker);
653
+ }
654
+
655
+ /* The divider you can drag around like a boss */
656
+ .draggableDividerYeet {
657
+ width: 8px;
658
+ background: linear-gradient(180deg, var(--csgo-gray) 0%, var(--csgo-dark) 100%);
659
+ cursor: col-resize;
660
+ position: relative;
661
+ z-index: 100;
662
+ transition: background 0.2s;
663
+ flex-shrink: 0;
664
+ }
665
+
666
+ .draggableDividerYeet:hover,
667
+ .draggableDividerYeet.dragging {
668
+ background: var(--csgo-yellow);
669
+ box-shadow: 0 0 10px var(--csgo-yellow-glow);
670
+ }
671
+
672
+ .draggableDividerYeet::before {
673
+ content: '';
674
+ position: absolute;
675
+ top: 50%;
676
+ left: 50%;
677
+ transform: translate(-50%, -50%);
678
+ width: 2px;
679
+ height: 40px;
680
+ background: var(--csgo-border);
681
+ border-radius: 2px;
682
+ }
683
+
684
+ .draggableDividerYeet:hover::before,
685
+ .draggableDividerYeet.dragging::before {
686
+ background: var(--csgo-black);
687
+ }
688
+
689
+ /* Right pane - whereClaudeBeThinking */
690
+ .whereClaudeBeThinking {
691
+ width: 400px;
692
+ min-width: 250px;
693
+ max-width: 60%;
694
+ display: flex;
695
+ flex-direction: column;
696
+ background: linear-gradient(180deg, rgba(255, 215, 0, 0.02) 0%, var(--csgo-darker) 100%);
697
+ border-left: 1px solid var(--csgo-border);
698
+ overflow: hidden;
699
+ }
700
+
701
+ .whereClaudeBeThinking.collapsed {
702
+ width: 0;
703
+ min-width: 0;
704
+ border-left: none;
705
+ }
706
+
707
+ /* Thinking pane header - that fire header */
708
+ .thinkingPaneHeader {
709
+ display: flex;
710
+ align-items: center;
711
+ justify-content: space-between;
712
+ padding: 12px 15px;
713
+ background: var(--csgo-gray);
714
+ border-bottom: 1px solid var(--csgo-border);
715
+ }
716
+
717
+ .thinkingPaneHeader h3 {
718
+ font-family: 'Orbitron', monospace;
719
+ font-size: 12px;
720
+ color: var(--csgo-yellow);
721
+ text-transform: uppercase;
722
+ letter-spacing: 2px;
723
+ display: flex;
724
+ align-items: center;
725
+ gap: 8px;
726
+ }
727
+
728
+ .thinkingPaneHeader h3::before {
729
+ content: '';
730
+ display: inline-block;
731
+ width: 8px;
732
+ height: 8px;
733
+ background: var(--csgo-yellow);
734
+ border-radius: 50%;
735
+ animation: pulse 1.5s ease-in-out infinite;
736
+ }
737
+
738
+ .thinkingPaneHeader .toggle-btn {
739
+ background: none;
740
+ border: 1px solid var(--csgo-border);
741
+ color: var(--csgo-text-dim);
742
+ padding: 4px 8px;
743
+ font-size: 10px;
744
+ border-radius: 3px;
745
+ cursor: pointer;
746
+ transition: all 0.2s;
747
+ }
748
+
749
+ .thinkingPaneHeader .toggle-btn:hover {
750
+ border-color: var(--csgo-yellow);
751
+ color: var(--csgo-yellow);
752
+ }
753
+
754
+ /* Live thinking content area */
755
+ .liveThinkingContent {
756
+ flex: 1;
757
+ overflow-y: auto;
758
+ padding: 15px;
759
+ font-family: 'JetBrains Mono', monospace;
760
+ font-size: 12px;
761
+ line-height: 1.6;
762
+ color: var(--csgo-text);
763
+ }
764
+
765
+ /* Individual thinking block container */
766
+ .thinkingBlockYeet {
767
+ margin-bottom: 15px;
768
+ padding: 12px;
769
+ background: rgba(255, 215, 0, 0.03);
770
+ border: 1px solid rgba(255, 215, 0, 0.1);
771
+ border-radius: 5px;
772
+ border-left: 3px solid var(--csgo-yellow);
773
+ animation: slideInRight 0.3s ease-out;
774
+ }
775
+
776
+ @keyframes slideInRight {
777
+ from {
778
+ opacity: 0;
779
+ transform: translateX(20px);
780
+ }
781
+ to {
782
+ opacity: 1;
783
+ transform: translateX(0);
784
+ }
785
+ }
786
+
787
+ .thinkingBlockYeet .block-header {
788
+ display: flex;
789
+ justify-content: space-between;
790
+ align-items: center;
791
+ margin-bottom: 8px;
792
+ padding-bottom: 8px;
793
+ border-bottom: 1px dashed rgba(255, 215, 0, 0.2);
794
+ }
795
+
796
+ .thinkingBlockYeet .block-num {
797
+ font-size: 10px;
798
+ color: var(--csgo-yellow);
799
+ text-transform: uppercase;
800
+ letter-spacing: 1px;
801
+ }
802
+
803
+ .thinkingBlockYeet .block-time {
804
+ font-size: 9px;
805
+ color: var(--csgo-text-dim);
806
+ }
807
+
808
+ .thinkingBlockYeet .block-content {
809
+ white-space: pre-wrap;
810
+ word-break: break-word;
811
+ }
812
+
813
+ /* Streaming status indicator */
814
+ .streamingStatusBruh {
815
+ display: flex;
816
+ align-items: center;
817
+ gap: 8px;
818
+ padding: 10px 15px;
819
+ background: rgba(255, 215, 0, 0.05);
820
+ border-bottom: 1px solid var(--csgo-border);
821
+ font-size: 11px;
822
+ color: var(--csgo-text-dim);
823
+ }
824
+
825
+ .streamingStatusBruh.active {
826
+ color: var(--csgo-yellow);
827
+ }
828
+
829
+ .streamingStatusBruh .status-dot {
830
+ width: 6px;
831
+ height: 6px;
832
+ border-radius: 50%;
833
+ background: var(--csgo-text-dim);
834
+ }
835
+
836
+ .streamingStatusBruh.active .status-dot {
837
+ background: var(--csgo-yellow);
838
+ animation: pulse 1s infinite;
839
+ }
840
+
841
+ /* Empty state for thinking pane */
842
+ .thinkingEmptyState {
843
+ display: flex;
844
+ flex-direction: column;
845
+ align-items: center;
846
+ justify-content: center;
847
+ height: 100%;
848
+ color: var(--csgo-text-dim);
849
+ text-align: center;
850
+ padding: 20px;
851
+ }
852
+
853
+ .thinkingEmptyState h4 {
854
+ font-family: 'Orbitron', monospace;
855
+ font-size: 14px;
856
+ color: var(--csgo-yellow);
857
+ margin-bottom: 10px;
858
+ opacity: 0.5;
859
+ }
860
+
861
+ .thinkingEmptyState p {
862
+ font-size: 12px;
863
+ opacity: 0.7;
864
+ }
865
+
866
+ /* Toggle button to show/hide thinking pane */
867
+ .toggleThinkingBtn {
868
+ position: absolute;
869
+ right: 10px;
870
+ top: 10px;
871
+ z-index: 50;
872
+ background: var(--csgo-gray);
873
+ border: 1px solid var(--csgo-border);
874
+ color: var(--csgo-text-dim);
875
+ padding: 6px 12px;
876
+ font-size: 10px;
877
+ border-radius: 3px;
878
+ cursor: pointer;
879
+ transition: all 0.2s;
880
+ font-family: 'Rajdhani', sans-serif;
881
+ text-transform: uppercase;
882
+ letter-spacing: 1px;
883
+ }
884
+
885
+ .toggleThinkingBtn:hover {
886
+ border-color: var(--csgo-yellow);
887
+ color: var(--csgo-yellow);
888
+ }
889
+
890
+ .streaming-indicator {
891
+ display: inline-flex;
892
+ align-items: center;
893
+ gap: 8px;
894
+ padding: 5px 12px;
895
+ background: rgba(255, 215, 0, 0.1);
896
+ border: 1px solid var(--csgo-yellow);
897
+ border-radius: 15px;
898
+ font-size: 11px;
899
+ color: var(--csgo-yellow);
900
+ margin-bottom: 15px;
901
+ }
902
+
903
+ .streaming-dot {
904
+ width: 8px;
905
+ height: 8px;
906
+ background: var(--csgo-yellow);
907
+ border-radius: 50%;
908
+ animation: pulse 1s infinite;
909
+ }
910
+
911
+ @keyframes pulse {
912
+ 0%, 100% { opacity: 1; }
913
+ 50% { opacity: 0.3; }
914
+ }
915
+
916
+ .copy-btn {
917
+ position: absolute;
918
+ top: 8px;
919
+ right: 8px;
920
+ padding: 4px 8px;
921
+ background: var(--csgo-gray);
922
+ border: 1px solid var(--csgo-border);
923
+ border-radius: 3px;
924
+ color: var(--csgo-text-dim);
925
+ font-size: 10px;
926
+ cursor: pointer;
927
+ opacity: 0;
928
+ transition: opacity 0.2s;
929
+ }
930
+
931
+ .response-content pre:hover .copy-btn { opacity: 1; }
932
+ .copy-btn:hover { background: var(--csgo-yellow); color: var(--csgo-black); }
933
+
934
+ .deploy-section {
935
+ padding: 10px 15px;
936
+ border-bottom: 1px solid var(--csgo-border);
937
+ }
938
+
939
+ .deploy-btn {
940
+ width: 100%;
941
+ padding: 10px;
942
+ background: var(--csgo-gray);
943
+ border: 1px dashed var(--csgo-border);
944
+ border-radius: 5px;
945
+ color: var(--csgo-text-dim);
946
+ font-size: 12px;
947
+ cursor: pointer;
948
+ transition: all 0.2s;
949
+ }
950
+
951
+ .deploy-btn:hover {
952
+ border-color: var(--csgo-yellow);
953
+ color: var(--csgo-yellow);
954
+ background: rgba(255, 215, 0, 0.05);
955
+ }
956
+
957
+ @media (max-width: 768px) {
958
+ .console-container { grid-template-columns: 1fr; }
959
+ .sidebar { display: none; }
960
+ .header { padding: 0 10px; }
961
+ .prompt-input-container { padding: 10px; }
962
+ .config-bar { flex-direction: column; gap: 10px; }
963
+ }
964
+
965
+ /* claude code history entries no cap */
966
+ .cc-entry {
967
+ padding: 8px 12px;
968
+ border-bottom: 1px solid var(--csgo-border);
969
+ cursor: pointer;
970
+ transition: background 0.2s;
971
+ }
972
+ .cc-entry:hover { background: rgba(255, 215, 0, 0.1); }
973
+ .cc-header {
974
+ display: flex;
975
+ gap: 8px;
976
+ align-items: center;
977
+ margin-bottom: 4px;
978
+ }
979
+ .cc-role {
980
+ font-size: 10px;
981
+ text-transform: uppercase;
982
+ padding: 2px 6px;
983
+ border-radius: 3px;
984
+ background: var(--csgo-gray-light);
985
+ }
986
+ .cc-user .cc-role { background: #1a472a; color: #4CAF50; }
987
+ .cc-assistant .cc-role { background: #1a1a47; color: #64B5F6; }
988
+ .cc-system .cc-role { background: #472a1a; color: #ff9800; }
989
+ .cc-type {
990
+ font-size: 9px;
991
+ color: var(--csgo-yellow);
992
+ padding: 1px 4px;
993
+ border: 1px solid var(--csgo-yellow);
994
+ border-radius: 2px;
995
+ }
996
+ .cc-time {
997
+ font-size: 9px;
998
+ color: var(--csgo-text-dim);
999
+ margin-left: auto;
1000
+ }
1001
+ .cc-content {
1002
+ font-size: 11px;
1003
+ color: var(--csgo-text);
1004
+ overflow: hidden;
1005
+ white-space: nowrap;
1006
+ text-overflow: ellipsis;
1007
+ }
1008
+ </style>
1009
+ <script src="/shared-logger.js"></script>
1010
+ </head>
1011
+ <body>
1012
+ <div class="console-container">
1013
+ <header class="header">
1014
+ <div class="logo">SPECMEM <span>// PROMPT CONSOLE</span></div>
1015
+ <div class="header-actions">
1016
+ <button class="btn" onclick="clearHistory()">Clear History</button>
1017
+ <button class="btn" onclick="window.location.href='/'">Dashboard</button>
1018
+ </div>
1019
+ </header>
1020
+
1021
+ <aside class="sidebar">
1022
+ <section class="sidebar-section">
1023
+ <div class="sidebar-header" onclick="toggleSection(this)">
1024
+ <h3>Model Config</h3>
1025
+ <span>-</span>
1026
+ </div>
1027
+ <div class="sidebar-content" id="modelConfigSection">
1028
+ <div class="context-item">
1029
+ <label style="width: 100%;">
1030
+ Model
1031
+ <!-- Updated model list with correct Claude model IDs and REAL context limits -->
1032
+ <select id="modelSelect" style="width: 100%; margin-top: 5px; background: var(--csgo-gray); border: 1px solid var(--csgo-border); color: var(--csgo-text); padding: 8px;" onchange="updateModelContextLimit()">
1033
+ <option value="claude-sonnet-4-5-20250929" data-context="200000" selected>Sonnet 4.5 (200k context)</option>
1034
+ <option value="claude-opus-4-5-20251101" data-context="200000">Opus 4.5 (200k context)</option>
1035
+ <option value="claude-3-5-haiku-20241022" data-context="200000">Haiku 3.5 (200k context)</option>
1036
+ </select>
1037
+ </label>
1038
+ </div>
1039
+ <div class="context-item" style="margin-top: 5px;">
1040
+ <div style="display: flex; justify-content: space-between; align-items: center; width: 100%;">
1041
+ <span style="font-size: 11px; color: var(--csgo-text-dim);">Context Limit:</span>
1042
+ <span id="contextLimitDisplay" style="font-family: 'Orbitron', monospace; font-size: 12px; color: var(--csgo-yellow);">200K tokens</span>
1043
+ </div>
1044
+ </div>
1045
+ <div class="context-item">
1046
+ <label style="width: 100%;">
1047
+ Temperature: <span id="temperatureValue" style="color: var(--csgo-yellow);">0.7</span>
1048
+ <input type="range" id="temperature" min="0" max="100" value="70" style="width: 100%; margin-top: 5px;" oninput="updateTemperature(this)">
1049
+ </label>
1050
+ </div>
1051
+ <div class="context-item" style="margin-top: 10px;">
1052
+ <label style="display: flex; align-items: center; gap: 8px; cursor: pointer;">
1053
+ <input type="checkbox" id="enableThinking" style="width: 18px; height: 18px; cursor: pointer;">
1054
+ <span style="color: var(--csgo-yellow); font-weight: 500;">Enable Extended Thinking</span>
1055
+ </label>
1056
+ <div style="color: var(--csgo-text-dim); font-size: 12px; margin-top: 5px; margin-left: 26px;">
1057
+ Allows Claude to think deeply before responding (uses more tokens)
1058
+ </div>
1059
+ </div>
1060
+ </div>
1061
+ </section>
1062
+
1063
+ <section class="sidebar-section">
1064
+ <div class="sidebar-header" onclick="toggleSection(this)">
1065
+ <h3>Context</h3>
1066
+ <span>-</span>
1067
+ </div>
1068
+ <div class="sidebar-content" id="contextSection">
1069
+ <div class="context-item">
1070
+ <input type="checkbox" id="includeCodebase" onchange="updateContext()">
1071
+ <label for="includeCodebase">Include Codebase Context</label>
1072
+ </div>
1073
+ <div style="padding: 10px 15px;">
1074
+ <button class="btn btn-small" onclick="openMemorySelector()">+ Add Memories</button>
1075
+ <button class="btn btn-small" onclick="openFileSelector()" style="margin-left: 5px;">+ Add Files</button>
1076
+ </div>
1077
+ <div class="context-chips" id="contextChips"></div>
1078
+ </div>
1079
+ </section>
1080
+
1081
+ <section class="sidebar-section">
1082
+ <div class="sidebar-header" onclick="toggleSection(this)">
1083
+ <h3>Live Session Status</h3>
1084
+ <span>-</span>
1085
+ </div>
1086
+ <div class="sidebar-content" id="liveStatusSection">
1087
+ <div class="context-item" style="display: flex; flex-direction: column; gap: 8px;">
1088
+ <div style="display: flex; align-items: center; gap: 8px;">
1089
+ <span id="liveStreamDot" style="width: 10px; height: 10px; border-radius: 50%; background: var(--csgo-text-dim);"></span>
1090
+ <span id="liveStreamStatus" style="font-size: 11px; color: var(--csgo-text-dim);">Connecting...</span>
1091
+ </div>
1092
+ <div style="display: flex; justify-content: space-between; font-size: 10px; color: var(--csgo-text-dim);">
1093
+ <span>Entries: <span id="liveEntryCount" style="color: var(--csgo-yellow);">0</span></span>
1094
+ <span>Thinking: <span id="liveThinkingCount" style="color: var(--csgo-yellow);">0</span></span>
1095
+ </div>
1096
+ <button class="btn btn-small" onclick="toggleLiveStream()" style="width: 100%; margin-top: 5px;">
1097
+ <span id="liveToggleText">Connect Live</span>
1098
+ </button>
1099
+ </div>
1100
+ </div>
1101
+ </section>
1102
+
1103
+ <section class="sidebar-section" style="flex: 1; overflow: hidden;">
1104
+ <div class="sidebar-header" onclick="toggleSection(this)">
1105
+ <h3>History</h3>
1106
+ <span>-</span>
1107
+ </div>
1108
+ <div class="sidebar-content" id="historySection" style="max-height: none; flex: 1;"></div>
1109
+ </section>
1110
+ </aside>
1111
+
1112
+ <main class="main-content">
1113
+ <!-- SPLIT-SCREEN CONTAINER - LIVE CLAUDE CODE SESSION VIEWER -->
1114
+ <div class="splitscreen-container">
1115
+ <!-- LEFT PANE: LIVE TERMINAL -->
1116
+ <div class="whereTheConvoAt" id="whereTheConvoAt">
1117
+ <div class="live-pane-header" style="display: flex; align-items: center; justify-content: space-between; padding: 12px 15px; background: var(--csgo-gray); border-bottom: 1px solid var(--csgo-border);">
1118
+ <h3 style="font-family: 'Orbitron', monospace; font-size: 12px; color: var(--csgo-yellow); text-transform: uppercase; letter-spacing: 2px; display: flex; align-items: center; gap: 8px;">
1119
+ <span id="terminalStatusDot" style="width: 8px; height: 8px; background: var(--csgo-text-dim); border-radius: 50%;"></span>
1120
+ Live Terminal
1121
+ </h3>
1122
+ <div style="display: flex; gap: 8px; align-items: center;">
1123
+ <select id="instanceSelector" style="background: var(--csgo-gray); border: 1px solid var(--csgo-border); color: var(--csgo-text); padding: 4px 8px; font-size: 10px; border-radius: 3px; cursor: pointer; font-family: 'Rajdhani', sans-serif;">
1124
+ <option value="">Loading instances...</option>
1125
+ </select>
1126
+ <button class="toggle-btn" id="newInstanceBtn" style="background: none; border: 1px solid var(--csgo-yellow); color: var(--csgo-yellow); padding: 4px 8px; font-size: 10px; border-radius: 3px; cursor: pointer; position: static;">+ New</button>
1127
+ <button class="toggle-btn" id="startStreamBtn" style="background: none; border: 1px solid var(--csgo-border); color: var(--csgo-text-dim); padding: 4px 8px; font-size: 10px; border-radius: 3px; cursor: pointer; position: static;">Start Stream</button>
1128
+ <button class="toggle-btn" id="stopStreamBtn" style="background: none; border: 1px solid var(--csgo-border); color: var(--csgo-text-dim); padding: 4px 8px; font-size: 10px; border-radius: 3px; cursor: pointer; position: static;" disabled>Stop Stream</button>
1129
+ <button id="toggleThinkingBtn" onclick="yeetToggleThinkingPane()" style="background: none; border: 1px solid var(--csgo-border); color: var(--csgo-text-dim); padding: 4px 8px; font-size: 10px; border-radius: 3px; cursor: pointer; position: static; font-family: 'Rajdhani', sans-serif; text-transform: uppercase; letter-spacing: 1px;">
1130
+ Show Thinking
1131
+ </button>
1132
+ </div>
1133
+ </div>
1134
+ <div id="terminal" style="flex: 1; padding: 10px; background: #000;"></div>
1135
+ </div>
1136
+
1137
+ <!-- DRAGGABLE DIVIDER -->
1138
+ <div class="draggableDividerYeet" id="draggableDividerYeet"></div>
1139
+
1140
+ <!-- RIGHT PANE: LIVE THINKING VIEW (UNLIMITED) -->
1141
+ <div class="whereClaudeBeThinking" id="whereClaudeBeThinking">
1142
+ <div class="thinkingPaneHeader">
1143
+ <h3 style="display: flex; align-items: center; gap: 8px;">
1144
+ <span id="liveThinkingDot" style="width: 8px; height: 8px; background: var(--csgo-text-dim); border-radius: 50%;"></span>
1145
+ Live Thinking (Unlimited)
1146
+ </h3>
1147
+ <button class="toggle-btn" onclick="yeetClearThinking()">Clear</button>
1148
+ </div>
1149
+ <div class="streamingStatusBruh" id="streamingStatusBruh">
1150
+ <span class="status-dot"></span>
1151
+ <span id="streamingStatusText">Connecting to live stream...</span>
1152
+ </div>
1153
+ <div class="liveThinkingContent" id="liveThinkingContent">
1154
+ <div class="thinkingEmptyState">
1155
+ <h4>Waiting for Thinking Blocks</h4>
1156
+ <p>Extended thinking content from Claude will appear here in real-time as it's generated. No limits on how much can be displayed.</p>
1157
+ </div>
1158
+ </div>
1159
+ </div>
1160
+ </div>
1161
+
1162
+ <div class="response-meta" id="responseMeta" style="display: none;">
1163
+ <span>Model: <span class="value" id="metaModel">-</span></span>
1164
+ <span>Tokens: <span class="value" id="metaTokens">-</span></span>
1165
+ <span>Duration: <span class="value" id="metaDuration">-</span></span>
1166
+ <span>Thinking Blocks: <span class="value" id="metaThinkingBlocks">-</span></span>
1167
+ <div style="flex: 1;"></div>
1168
+ <button class="btn btn-small" onclick="copyResponse()">Copy</button>
1169
+ <button class="btn btn-small" onclick="exportResponse()">Export</button>
1170
+ </div>
1171
+
1172
+ <div class="prompt-input-container">
1173
+ <div class="system-prompt-container" id="systemPromptContainer">
1174
+ <textarea class="system-prompt-textarea" id="systemPrompt" placeholder="System prompt (optional)..."></textarea>
1175
+ </div>
1176
+ <div class="config-bar">
1177
+ <!-- TEAM MEMBER 3 FIX: Removed token limits - UNLIMITED by default! -->
1178
+ <div class="config-item">
1179
+ <label>Max Tokens</label>
1180
+ <input type="range" id="maxTokens" min="1000" max="200000" value="128000" step="1000" oninput="updateSliderValue(this)">
1181
+ <span class="value" id="maxTokensValue">128K (Unlimited)</span>
1182
+ </div>
1183
+ <div class="config-item">
1184
+ <label>Intelligence</label>
1185
+ <input type="range" id="intelligencePriority" min="0" max="100" value="80" oninput="updateSliderValue(this)">
1186
+ <span class="value" id="intelligencePriorityValue">0.8</span>
1187
+ </div>
1188
+ <div class="config-item">
1189
+ <label>Speed</label>
1190
+ <input type="range" id="speedPriority" min="0" max="100" value="50" oninput="updateSliderValue(this)">
1191
+ <span class="value" id="speedPriorityValue">0.5</span>
1192
+ </div>
1193
+ <div class="system-prompt-toggle" onclick="toggleSystemPrompt()">
1194
+ <span id="systemPromptToggleIcon">+</span> System Prompt
1195
+ </div>
1196
+ </div>
1197
+ <div class="prompt-row">
1198
+ <textarea
1199
+ class="prompt-textarea"
1200
+ id="promptInput"
1201
+ placeholder="Enter your prompt here... (Ctrl+Enter to send)"
1202
+ rows="3"
1203
+ ></textarea>
1204
+ <button class="send-btn" id="sendBtn" onclick="sendPrompt()">SEND</button>
1205
+ </div>
1206
+ </div>
1207
+ </main>
1208
+ </div>
1209
+
1210
+ <div class="modal-overlay" id="memoryModal">
1211
+ <div class="modal">
1212
+ <div class="modal-header">
1213
+ <h3>Select Memories</h3>
1214
+ <button class="modal-close" onclick="closeModal('memoryModal')">&times;</button>
1215
+ </div>
1216
+ <div class="modal-body">
1217
+ <input type="text" class="selector-search" placeholder="Search memories..." id="memorySearch" oninput="searchMemories(this.value)">
1218
+ <div class="selector-list" id="memoryList">
1219
+ <div class="loading-indicator">
1220
+ <div class="loading-dots"><span></span><span></span><span></span></div>
1221
+ </div>
1222
+ </div>
1223
+ </div>
1224
+ <div class="modal-footer">
1225
+ <button class="btn" onclick="closeModal('memoryModal')">Cancel</button>
1226
+ <button class="btn btn-primary" onclick="confirmMemorySelection()">Add Selected</button>
1227
+ </div>
1228
+ </div>
1229
+ </div>
1230
+
1231
+ <div class="modal-overlay" id="fileModal">
1232
+ <div class="modal">
1233
+ <div class="modal-header">
1234
+ <h3>Select Files</h3>
1235
+ <button class="modal-close" onclick="closeModal('fileModal')">&times;</button>
1236
+ </div>
1237
+ <div class="modal-body">
1238
+ <input type="text" class="selector-search" placeholder="Search files..." id="fileSearch" oninput="searchFiles(this.value)">
1239
+ <div class="selector-list" id="fileList">
1240
+ <div class="loading-indicator">
1241
+ <div class="loading-dots"><span></span><span></span><span></span></div>
1242
+ </div>
1243
+ </div>
1244
+ </div>
1245
+ <div class="modal-footer">
1246
+ <button class="btn" onclick="closeModal('fileModal')">Cancel</button>
1247
+ <button class="btn btn-primary" onclick="confirmFileSelection()">Add Selected</button>
1248
+ </div>
1249
+ </div>
1250
+ </div>
1251
+
1252
+ <div class="modal-overlay" id="deployModal">
1253
+ <div class="modal">
1254
+ <div class="modal-header">
1255
+ <h3>Deploy as TeamMember</h3>
1256
+ <button class="modal-close" onclick="closeModal('deployModal')">&times;</button>
1257
+ </div>
1258
+ <div class="modal-body">
1259
+ <div style="margin-bottom: 15px;">
1260
+ <label style="display: block; font-size: 12px; color: var(--csgo-text-dim); margin-bottom: 5px;">TeamMember Name</label>
1261
+ <input type="text" id="deployTeamMemberName" class="selector-search" placeholder="My TeamMember" style="margin-bottom: 0;">
1262
+ </div>
1263
+ <div style="margin-bottom: 15px;">
1264
+ <label style="display: block; font-size: 12px; color: var(--csgo-text-dim); margin-bottom: 5px;">TeamMember Type</label>
1265
+ <select id="deployTeamMemberType" style="width: 100%; background: var(--csgo-gray); border: 1px solid var(--csgo-border); color: var(--csgo-text); padding: 10px; border-radius: 5px;">
1266
+ <option value="worker">Worker</option>
1267
+ <option value="overseer">Overseer</option>
1268
+ <option value="qa">QA</option>
1269
+ </select>
1270
+ </div>
1271
+ <div style="margin-bottom: 15px;">
1272
+ <label style="display: block; font-size: 12px; color: var(--csgo-text-dim); margin-bottom: 5px;">Task Description</label>
1273
+ <textarea id="deployTaskDescription" class="selector-search" style="min-height: 80px; resize: vertical; margin-bottom: 0;" placeholder="Describe the task for this team member..."></textarea>
1274
+ </div>
1275
+ <div>
1276
+ <label style="display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--csgo-text-dim); cursor: pointer;">
1277
+ <input type="checkbox" id="deployUseCurrentPrompt" checked style="accent-color: var(--csgo-yellow);">
1278
+ Use current prompt as initial task
1279
+ </label>
1280
+ </div>
1281
+ </div>
1282
+ <div class="modal-footer">
1283
+ <button class="btn" onclick="closeModal('deployModal')">Cancel</button>
1284
+ <button class="btn btn-primary" onclick="deployTeamMember()">Deploy TeamMember</button>
1285
+ </div>
1286
+ </div>
1287
+ </div>
1288
+
1289
+ <script>
1290
+ // ============================================
1291
+ // STATE - where all the juicy data lives fr fr
1292
+ // ============================================
1293
+ const state = {
1294
+ selectedMemories: [],
1295
+ selectedFiles: [],
1296
+ includeCodebase: false,
1297
+ currentResponse: null,
1298
+ history: [],
1299
+ isLoading: false,
1300
+ isStreaming: false,
1301
+ streamingContent: '',
1302
+ websocket: null,
1303
+ // Split-screen thinking state
1304
+ thinkingPaneVisible: true,
1305
+ thinkingBlocks: [],
1306
+ currentStreamingThought: '',
1307
+ thinkingBlockCount: 0,
1308
+ sseConnection: null,
1309
+ isDraggingDivider: false,
1310
+ dividerStartX: 0,
1311
+ thinkingPaneStartWidth: 0,
1312
+ // LIVE SESSION STREAMING STATE - Team Member 2's LIVE viewer
1313
+ liveSessionSSE: null,
1314
+ liveSessionConnected: false,
1315
+ liveConversationEntries: [],
1316
+ liveEntryCount: 0,
1317
+ liveThinkingCount: 0,
1318
+ maxLiveEntries: 50 // Keep last 50 messages in conversation view
1319
+ };
1320
+
1321
+ document.addEventListener('DOMContentLoaded', () => {
1322
+ loadHistory();
1323
+ connectWebSocket();
1324
+ setupDraggableDividerYeet();
1325
+
1326
+ // TEAM MEMBER 2: Start the LIVE session stream immediately!
1327
+ initializeLiveSessionStream();
1328
+
1329
+ // Load initial recent entries
1330
+ loadRecentEntries();
1331
+
1332
+ document.getElementById('promptInput').addEventListener('keydown', (e) => {
1333
+ if (e.ctrlKey && e.key === 'Enter') {
1334
+ sendPrompt();
1335
+ }
1336
+ });
1337
+
1338
+ const textarea = document.getElementById('promptInput');
1339
+ textarea.addEventListener('input', () => {
1340
+ textarea.style.height = 'auto';
1341
+ textarea.style.height = Math.min(textarea.scrollHeight, 200) + 'px';
1342
+ });
1343
+
1344
+ // Update toggle button text based on initial state
1345
+ updateToggleButtonText();
1346
+ });
1347
+
1348
+ // ============================================
1349
+ // LIVE SESSION STREAMING - Team Member 2's MASTERPIECE
1350
+ // Real-time Claude Code session viewer!
1351
+ // ============================================
1352
+
1353
+ function initializeLiveSessionStream() {
1354
+ console.log('Initializing LIVE session stream...');
1355
+ updateLiveStreamStatus('connecting', 'Connecting...');
1356
+
1357
+ try {
1358
+ state.liveSessionSSE = new EventSource('/api/live/stream');
1359
+
1360
+ state.liveSessionSSE.addEventListener('connected', (e) => {
1361
+ console.log('LIVE stream connected!', e.data);
1362
+ state.liveSessionConnected = true;
1363
+ updateLiveStreamStatus('connected', 'LIVE - Watching');
1364
+ document.getElementById('liveToggleText').textContent = 'Disconnect';
1365
+ });
1366
+
1367
+ state.liveSessionSSE.addEventListener('userMessage', (e) => {
1368
+ const entry = JSON.parse(e.data);
1369
+ addLiveConversationEntry(entry);
1370
+ });
1371
+
1372
+ state.liveSessionSSE.addEventListener('assistantMessage', (e) => {
1373
+ const entry = JSON.parse(e.data);
1374
+ addLiveConversationEntry(entry);
1375
+
1376
+ // If there's thinking, also add to thinking pane
1377
+ if (entry.thinking && entry.thinking.length > 0) {
1378
+ for (const thought of entry.thinking) {
1379
+ addThinkingBlock(thought, entry.timestamp);
1380
+ }
1381
+ }
1382
+ });
1383
+
1384
+ state.liveSessionSSE.addEventListener('thinking', (e) => {
1385
+ const data = JSON.parse(e.data);
1386
+ addThinkingBlock(data.content, data.timestamp);
1387
+ });
1388
+
1389
+ state.liveSessionSSE.addEventListener('toolUse', (e) => {
1390
+ const entry = JSON.parse(e.data);
1391
+ addLiveConversationEntry(entry);
1392
+ });
1393
+
1394
+ state.liveSessionSSE.addEventListener('toolResult', (e) => {
1395
+ const entry = JSON.parse(e.data);
1396
+ addLiveConversationEntry(entry);
1397
+ });
1398
+
1399
+ state.liveSessionSSE.addEventListener('entry', (e) => {
1400
+ const entry = JSON.parse(e.data);
1401
+ addLiveConversationEntry(entry);
1402
+ });
1403
+
1404
+ state.liveSessionSSE.addEventListener('heartbeat', (e) => {
1405
+ // Keep alive - just update timestamp
1406
+ console.debug('Heartbeat received');
1407
+ });
1408
+
1409
+ state.liveSessionSSE.onerror = (e) => {
1410
+ console.warn('LIVE stream error:', e);
1411
+ state.liveSessionConnected = false;
1412
+ updateLiveStreamStatus('error', 'Disconnected - Retrying...');
1413
+
1414
+ // EventSource auto-reconnects, so just wait
1415
+ setTimeout(() => {
1416
+ if (state.liveSessionSSE?.readyState === EventSource.OPEN) {
1417
+ updateLiveStreamStatus('connected', 'LIVE - Watching');
1418
+ }
1419
+ }, 3000);
1420
+ };
1421
+
1422
+ } catch (error) {
1423
+ console.error('Failed to initialize LIVE stream:', error);
1424
+ updateLiveStreamStatus('error', 'Connection Failed');
1425
+ }
1426
+ }
1427
+
1428
+ function toggleLiveStream() {
1429
+ if (state.liveSessionConnected && state.liveSessionSSE) {
1430
+ // Disconnect
1431
+ state.liveSessionSSE.close();
1432
+ state.liveSessionSSE = null;
1433
+ state.liveSessionConnected = false;
1434
+ updateLiveStreamStatus('disconnected', 'Disconnected');
1435
+ document.getElementById('liveToggleText').textContent = 'Connect Live';
1436
+ } else {
1437
+ // Connect
1438
+ initializeLiveSessionStream();
1439
+ }
1440
+ }
1441
+
1442
+ function updateLiveStreamStatus(statusType, text) {
1443
+ const dot = document.getElementById('liveStreamDot');
1444
+ const status = document.getElementById('liveStreamStatus');
1445
+ const convoDot = document.getElementById('liveConvoDot');
1446
+ const thinkingDot = document.getElementById('liveThinkingDot');
1447
+
1448
+ let color = 'var(--csgo-text-dim)';
1449
+ if (statusType === 'connected') {
1450
+ color = '#4CAF50'; // Green
1451
+ } else if (statusType === 'connecting') {
1452
+ color = 'var(--csgo-yellow)';
1453
+ } else if (statusType === 'error') {
1454
+ color = 'var(--csgo-error)';
1455
+ }
1456
+
1457
+ if (dot) dot.style.background = color;
1458
+ if (convoDot) convoDot.style.background = color;
1459
+ if (thinkingDot) thinkingDot.style.background = color;
1460
+ if (status) status.textContent = text;
1461
+
1462
+ // Also update the thinking pane status
1463
+ updateStreamStatus(statusType === 'connected', text);
1464
+ }
1465
+
1466
+ function addLiveConversationEntry(entry) {
1467
+ state.liveEntryCount++;
1468
+ document.getElementById('liveEntryCount').textContent = state.liveEntryCount;
1469
+
1470
+ // Add to state
1471
+ state.liveConversationEntries.push(entry);
1472
+
1473
+ // Trim to max entries
1474
+ while (state.liveConversationEntries.length > state.maxLiveEntries) {
1475
+ state.liveConversationEntries.shift();
1476
+ }
1477
+
1478
+ // Render
1479
+ renderLiveConversation();
1480
+ }
1481
+
1482
+ function renderLiveConversation() {
1483
+ const container = document.getElementById('liveConversationContainer');
1484
+ const emptyState = document.getElementById('liveConvoEmpty');
1485
+
1486
+ if (state.liveConversationEntries.length === 0) {
1487
+ container.style.display = 'none';
1488
+ emptyState.style.display = 'flex';
1489
+ return;
1490
+ }
1491
+
1492
+ container.style.display = 'block';
1493
+ emptyState.style.display = 'none';
1494
+
1495
+ // TERMINAL-STYLE OUTPUT - Simple text flow like actual Claude Code terminal
1496
+ container.innerHTML = state.liveConversationEntries.map(entry => {
1497
+ const isUser = entry.type === 'user' || entry.role === 'user';
1498
+ const isAssistant = entry.type === 'assistant' || entry.role === 'assistant';
1499
+
1500
+ let content = entry.content || '';
1501
+
1502
+ // User messages - show in green
1503
+ if (isUser) {
1504
+ return `<div style="color: #4CAF50; margin-bottom: 8px; font-family: 'JetBrains Mono', monospace; font-size: 13px; line-height: 1.5;">${escapeHtml(content)}</div>`;
1505
+ }
1506
+
1507
+ // Assistant messages - show in cyan/blue
1508
+ if (isAssistant) {
1509
+ return `<div style="color: #64B5F6; margin-bottom: 8px; font-family: 'JetBrains Mono', monospace; font-size: 13px; line-height: 1.5; white-space: pre-wrap;">${escapeHtml(content)}</div>`;
1510
+ }
1511
+
1512
+ // Tool use/results - show in yellow
1513
+ if (entry.type === 'tool_use' || entry.type === 'tool_result') {
1514
+ const toolLabel = entry.toolName ? `[${entry.toolName}]` : '[Tool]';
1515
+ return `<div style="color: var(--csgo-yellow); margin-bottom: 8px; font-family: 'JetBrains Mono', monospace; font-size: 12px; opacity: 0.7;">${toolLabel} ${escapeHtml(content.substring(0, 200))}</div>`;
1516
+ }
1517
+
1518
+ // System messages - show dimmed
1519
+ return `<div style="color: var(--csgo-text-dim); margin-bottom: 8px; font-family: 'JetBrains Mono', monospace; font-size: 12px; opacity: 0.6;">${escapeHtml(content)}</div>`;
1520
+ }).join('');
1521
+
1522
+ // Auto-scroll to bottom
1523
+ const viewer = document.getElementById('responseViewer');
1524
+ viewer.scrollTop = viewer.scrollHeight;
1525
+ }
1526
+
1527
+ function clearLiveConversation() {
1528
+ state.liveConversationEntries = [];
1529
+ state.liveEntryCount = 0;
1530
+ document.getElementById('liveEntryCount').textContent = '0';
1531
+ renderLiveConversation();
1532
+ }
1533
+
1534
+ function addThinkingBlock(content, timestamp) {
1535
+ state.liveThinkingCount++;
1536
+ state.thinkingBlockCount++;
1537
+ document.getElementById('liveThinkingCount').textContent = state.liveThinkingCount;
1538
+
1539
+ const thinkingContent = document.getElementById('liveThinkingContent');
1540
+
1541
+ // Clear empty state if present
1542
+ const emptyState = thinkingContent.querySelector('.thinkingEmptyState');
1543
+ if (emptyState) emptyState.remove();
1544
+
1545
+ const blockId = `thinking-live-${state.thinkingBlockCount}`;
1546
+ const time = timestamp ? new Date(timestamp).toLocaleTimeString() : new Date().toLocaleTimeString();
1547
+
1548
+ const blockHtml = `
1549
+ <div class="thinkingBlockYeet" id="${blockId}">
1550
+ <div class="block-header">
1551
+ <span class="block-num">Thinking Block ${state.thinkingBlockCount}</span>
1552
+ <span class="block-time">${time}</span>
1553
+ </div>
1554
+ <div class="block-content">${escapeHtml(content)}</div>
1555
+ </div>
1556
+ `;
1557
+
1558
+ thinkingContent.insertAdjacentHTML('beforeend', blockHtml);
1559
+ thinkingContent.scrollTop = thinkingContent.scrollHeight;
1560
+ }
1561
+
1562
+ async function loadRecentEntries() {
1563
+ try {
1564
+ const response = await fetch('/api/live/recent?limit=50');
1565
+ const data = await response.json();
1566
+
1567
+ if (data.success && data.entries && data.entries.length > 0) {
1568
+ console.log(`Loaded ${data.entries.length} recent entries`);
1569
+
1570
+ for (const entry of data.entries) {
1571
+ state.liveConversationEntries.push(entry);
1572
+ state.liveEntryCount++;
1573
+
1574
+ // Extract thinking blocks
1575
+ if (entry.thinking && entry.thinking.length > 0) {
1576
+ for (const thought of entry.thinking) {
1577
+ addThinkingBlock(thought, entry.timestamp);
1578
+ }
1579
+ }
1580
+ }
1581
+
1582
+ document.getElementById('liveEntryCount').textContent = state.liveEntryCount;
1583
+ renderLiveConversation();
1584
+ }
1585
+ } catch (error) {
1586
+ console.error('Failed to load recent entries:', error);
1587
+ }
1588
+ }
1589
+
1590
+ function updateModelContextLimit() {
1591
+ const select = document.getElementById('modelSelect');
1592
+ const option = select.options[select.selectedIndex];
1593
+ const contextLimit = option.getAttribute('data-context') || '200000';
1594
+ const display = document.getElementById('contextLimitDisplay');
1595
+ if (display) {
1596
+ display.textContent = (parseInt(contextLimit) / 1000) + 'K tokens';
1597
+ }
1598
+ }
1599
+
1600
+ // ============================================
1601
+ // SPLIT-SCREEN DIVIDER DRAGGING - draggableDividerYeet
1602
+ // Team Member 1's sick drag functionality
1603
+ // ============================================
1604
+ function setupDraggableDividerYeet() {
1605
+ const divider = document.getElementById('draggableDividerYeet');
1606
+ const thinkingPane = document.getElementById('whereClaudeBeThinking');
1607
+
1608
+ if (!divider || !thinkingPane) return;
1609
+
1610
+ divider.addEventListener('mousedown', (e) => {
1611
+ e.preventDefault();
1612
+ state.isDraggingDivider = true;
1613
+ state.dividerStartX = e.clientX;
1614
+ state.thinkingPaneStartWidth = thinkingPane.offsetWidth;
1615
+ divider.classList.add('dragging');
1616
+ document.body.style.cursor = 'col-resize';
1617
+ document.body.style.userSelect = 'none';
1618
+ });
1619
+
1620
+ document.addEventListener('mousemove', yeetTheDividerAround);
1621
+ document.addEventListener('mouseup', letGoOfTheDivider);
1622
+ }
1623
+
1624
+ // UNPROFESSIONAL NAME: handle divider dragging
1625
+ function yeetTheDividerAround(e) {
1626
+ if (!state.isDraggingDivider) return;
1627
+
1628
+ const thinkingPane = document.getElementById('whereClaudeBeThinking');
1629
+ const deltaX = state.dividerStartX - e.clientX;
1630
+ let newWidth = state.thinkingPaneStartWidth + deltaX;
1631
+
1632
+ // Clamp to min/max
1633
+ newWidth = Math.max(250, Math.min(newWidth, window.innerWidth * 0.6));
1634
+ thinkingPane.style.width = newWidth + 'px';
1635
+ }
1636
+
1637
+ // UNPROFESSIONAL NAME: stop dragging divider
1638
+ function letGoOfTheDivider() {
1639
+ if (!state.isDraggingDivider) return;
1640
+
1641
+ state.isDraggingDivider = false;
1642
+ const divider = document.getElementById('draggableDividerYeet');
1643
+ if (divider) divider.classList.remove('dragging');
1644
+ document.body.style.cursor = '';
1645
+ document.body.style.userSelect = '';
1646
+ }
1647
+
1648
+ // UNPROFESSIONAL NAME: toggle thinking pane visibility
1649
+ function yeetToggleThinkingPane() {
1650
+ const thinkingPane = document.getElementById('whereClaudeBeThinking');
1651
+ const divider = document.getElementById('draggableDividerYeet');
1652
+
1653
+ state.thinkingPaneVisible = !state.thinkingPaneVisible;
1654
+
1655
+ if (state.thinkingPaneVisible) {
1656
+ thinkingPane.classList.remove('collapsed');
1657
+ thinkingPane.style.width = '400px';
1658
+ divider.style.display = 'block';
1659
+ } else {
1660
+ thinkingPane.classList.add('collapsed');
1661
+ divider.style.display = 'none';
1662
+ }
1663
+
1664
+ updateToggleButtonText();
1665
+ }
1666
+
1667
+ function updateToggleButtonText() {
1668
+ const btn = document.getElementById('toggleThinkingBtn');
1669
+ if (btn) {
1670
+ btn.textContent = state.thinkingPaneVisible ? 'Hide Thinking' : 'Show Thinking';
1671
+ }
1672
+ }
1673
+
1674
+ // Clear all thinking blocks
1675
+ function yeetClearThinking() {
1676
+ state.thinkingBlocks = [];
1677
+ state.thinkingBlockCount = 0;
1678
+ state.liveThinkingCount = 0;
1679
+ state.currentStreamingThought = '';
1680
+
1681
+ document.getElementById('liveThinkingCount').textContent = '0';
1682
+
1683
+ const content = document.getElementById('liveThinkingContent');
1684
+ if (content) {
1685
+ content.innerHTML = `
1686
+ <div class="thinkingEmptyState">
1687
+ <h4>Thinking Cleared</h4>
1688
+ <p>Waiting for new thinking blocks from Claude...</p>
1689
+ </div>
1690
+ `;
1691
+ }
1692
+ }
1693
+
1694
+ // ============================================
1695
+ // SSE STREAMING - catchThemLiveVibes
1696
+ // Team Member 1's live thinking stream handler
1697
+ // ============================================
1698
+ function catchThemLiveVibes() {
1699
+ // Connect to SSE endpoint for live thinking stream
1700
+ // Team Member 2 should provide the endpoint URL - using /api/stream/thinking for now
1701
+ const sseUrl = '/api/stream/thinking';
1702
+
1703
+ try {
1704
+ state.sseConnection = new EventSource(sseUrl);
1705
+
1706
+ state.sseConnection.onopen = () => {
1707
+ console.log('SSE thinking stream connected fr fr');
1708
+ updateStreamStatus(true, 'Connected to thinking stream');
1709
+ };
1710
+
1711
+ state.sseConnection.onmessage = (event) => {
1712
+ try {
1713
+ const data = JSON.parse(event.data);
1714
+ yeetTheThinkingData(data);
1715
+ } catch (e) {
1716
+ // Plain text thinking chunk
1717
+ yeetTheThinkingData({ type: 'chunk', content: event.data });
1718
+ }
1719
+ };
1720
+
1721
+ state.sseConnection.addEventListener('thinking_start', (e) => {
1722
+ console.log('Thinking block started');
1723
+ state.currentStreamingThought = '';
1724
+ state.thinkingBlockCount++;
1725
+ addNewThinkingBlock();
1726
+ });
1727
+
1728
+ state.sseConnection.addEventListener('thinking_chunk', (e) => {
1729
+ const data = JSON.parse(e.data);
1730
+ appendToCurrentThinking(data.content);
1731
+ });
1732
+
1733
+ state.sseConnection.addEventListener('thinking_end', (e) => {
1734
+ console.log('Thinking block complete');
1735
+ finalizeCurrentThinking();
1736
+ });
1737
+
1738
+ state.sseConnection.onerror = (e) => {
1739
+ console.warn('SSE error, will retry...', e);
1740
+ updateStreamStatus(false, 'Connection lost, retrying...');
1741
+ // EventSource auto-reconnects, but let's update status
1742
+ setTimeout(() => {
1743
+ if (state.sseConnection?.readyState === EventSource.OPEN) {
1744
+ updateStreamStatus(true, 'Reconnected');
1745
+ }
1746
+ }, 3000);
1747
+ };
1748
+
1749
+ } catch (e) {
1750
+ console.error('Failed to setup SSE:', e);
1751
+ updateStreamStatus(false, 'SSE not available - using WebSocket fallback');
1752
+ }
1753
+ }
1754
+
1755
+ // UNPROFESSIONAL NAME: handle incoming thinking data
1756
+ function yeetTheThinkingData(data) {
1757
+ switch (data.type) {
1758
+ case 'thinking_start':
1759
+ state.currentStreamingThought = '';
1760
+ state.thinkingBlockCount++;
1761
+ addNewThinkingBlock();
1762
+ break;
1763
+ case 'thinking_chunk':
1764
+ case 'chunk':
1765
+ appendToCurrentThinking(data.content || data.text || '');
1766
+ break;
1767
+ case 'thinking_end':
1768
+ finalizeCurrentThinking();
1769
+ break;
1770
+ case 'response_start':
1771
+ updateStreamStatus(true, 'Response streaming...');
1772
+ break;
1773
+ case 'response_end':
1774
+ updateStreamStatus(false, 'Complete');
1775
+ break;
1776
+ default:
1777
+ // Handle unknown types gracefully
1778
+ if (data.content) {
1779
+ appendToCurrentThinking(data.content);
1780
+ }
1781
+ }
1782
+ }
1783
+
1784
+ function updateStreamStatus(active, text) {
1785
+ const statusEl = document.getElementById('streamingStatusBruh');
1786
+ const statusText = document.getElementById('streamingStatusText');
1787
+
1788
+ if (statusEl && statusText) {
1789
+ statusEl.classList.toggle('active', active);
1790
+ statusText.textContent = text;
1791
+ }
1792
+ }
1793
+
1794
+ function addNewThinkingBlock() {
1795
+ const content = document.getElementById('liveThinkingContent');
1796
+ if (!content) return;
1797
+
1798
+ // Clear empty state if present
1799
+ const emptyState = content.querySelector('.thinkingEmptyState');
1800
+ if (emptyState) emptyState.remove();
1801
+
1802
+ const blockId = `thinking-block-${state.thinkingBlockCount}`;
1803
+ const blockHtml = `
1804
+ <div class="thinkingBlockYeet" id="${blockId}">
1805
+ <div class="block-header">
1806
+ <span class="block-num">Thinking Block ${state.thinkingBlockCount}</span>
1807
+ <span class="block-time">${new Date().toLocaleTimeString()}</span>
1808
+ </div>
1809
+ <div class="block-content" id="${blockId}-content"></div>
1810
+ </div>
1811
+ `;
1812
+ content.insertAdjacentHTML('beforeend', blockHtml);
1813
+
1814
+ // Scroll to bottom
1815
+ content.scrollTop = content.scrollHeight;
1816
+ }
1817
+
1818
+ function appendToCurrentThinking(text) {
1819
+ if (!text) return;
1820
+
1821
+ state.currentStreamingThought += text;
1822
+
1823
+ const blockContent = document.getElementById(`thinking-block-${state.thinkingBlockCount}-content`);
1824
+ if (blockContent) {
1825
+ blockContent.textContent = state.currentStreamingThought;
1826
+
1827
+ // Auto-scroll
1828
+ const content = document.getElementById('liveThinkingContent');
1829
+ if (content) content.scrollTop = content.scrollHeight;
1830
+ }
1831
+ }
1832
+
1833
+ function finalizeCurrentThinking() {
1834
+ // Save to state
1835
+ state.thinkingBlocks.push({
1836
+ num: state.thinkingBlockCount,
1837
+ content: state.currentStreamingThought,
1838
+ timestamp: new Date().toISOString()
1839
+ });
1840
+ state.currentStreamingThought = '';
1841
+
1842
+ // Update meta display
1843
+ const metaBlocks = document.getElementById('metaThinkingBlocks');
1844
+ if (metaBlocks) {
1845
+ metaBlocks.textContent = state.thinkingBlocks.length;
1846
+ }
1847
+ }
1848
+
1849
+ function connectWebSocket() {
1850
+ const wsProtocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
1851
+ const wsUrl = `${wsProtocol}//${window.location.host}/ws`;
1852
+
1853
+ state.websocket = new WebSocket(wsUrl);
1854
+
1855
+ state.websocket.onopen = () => {
1856
+ console.log('WebSocket connected');
1857
+ };
1858
+
1859
+ state.websocket.onmessage = (event) => {
1860
+ try {
1861
+ const data = JSON.parse(event.data);
1862
+ handleWebSocketMessage(data);
1863
+ } catch (e) {
1864
+ console.error('WebSocket message parse error:', e);
1865
+ }
1866
+ };
1867
+
1868
+ state.websocket.onclose = () => {
1869
+ console.log('WebSocket disconnected, reconnecting...');
1870
+ setTimeout(connectWebSocket, 3000);
1871
+ };
1872
+
1873
+ state.websocket.onerror = (error) => {
1874
+ console.error('WebSocket error:', error);
1875
+ };
1876
+ }
1877
+
1878
+ // UNPROFESSIONAL NAME: yeetTheWebSocketData - handle all WS messages fr fr
1879
+ function handleWebSocketMessage(data) {
1880
+ // Handle thinking stream via WebSocket (fallback if SSE not available)
1881
+ if (data.type === 'thinking_stream' || data.type === 'thinking') {
1882
+ yeetTheThinkingData(data);
1883
+ return;
1884
+ }
1885
+
1886
+ if (data.type === 'prompt_stream') {
1887
+ if (data.status === 'streaming') {
1888
+ if (!state.isStreaming) {
1889
+ state.isStreaming = true;
1890
+ state.streamingContent = '';
1891
+ updateStreamStatus(true, 'Response streaming...');
1892
+ }
1893
+ state.streamingContent += data.chunk || '';
1894
+ displayStreamingResponse(state.streamingContent);
1895
+
1896
+ // Also check for inline thinking blocks in the stream
1897
+ if (data.thinking) {
1898
+ yeetTheThinkingData({ type: 'chunk', content: data.thinking });
1899
+ }
1900
+ } else if (data.status === 'complete') {
1901
+ state.isStreaming = false;
1902
+ updateStreamStatus(false, 'Complete');
1903
+ if (data.response) {
1904
+ state.currentResponse = data;
1905
+ displayResponse(data);
1906
+
1907
+ // Extract and display any thinking from final response
1908
+ if (data.thinkingBlocks && data.thinkingBlocks.length > 0) {
1909
+ data.thinkingBlocks.forEach((block, i) => {
1910
+ state.thinkingBlockCount++;
1911
+ addNewThinkingBlock();
1912
+ appendToCurrentThinking(block);
1913
+ finalizeCurrentThinking();
1914
+ });
1915
+ }
1916
+ }
1917
+ }
1918
+ }
1919
+ }
1920
+
1921
+ function displayStreamingResponse(content) {
1922
+ const viewer = document.getElementById('responseViewer');
1923
+ const htmlContent = renderMarkdown(content);
1924
+
1925
+ viewer.innerHTML = `
1926
+ <div class="streaming-indicator">
1927
+ <span class="streaming-dot"></span>
1928
+ Streaming response...
1929
+ </div>
1930
+ <div class="response-content">${htmlContent}</div>
1931
+ `;
1932
+
1933
+ viewer.scrollTop = viewer.scrollHeight;
1934
+ }
1935
+
1936
+ async function sendPrompt() {
1937
+ const promptInput = document.getElementById('promptInput');
1938
+ const prompt = promptInput.value.trim();
1939
+
1940
+ if (!prompt || state.isLoading) return;
1941
+
1942
+ state.isLoading = true;
1943
+ const sendBtn = document.getElementById('sendBtn');
1944
+ sendBtn.classList.add('loading');
1945
+ sendBtn.disabled = true;
1946
+
1947
+ const viewer = document.getElementById('responseViewer');
1948
+ viewer.innerHTML = `
1949
+ <div class="loading-indicator">
1950
+ <div class="loading-dots"><span></span><span></span><span></span></div>
1951
+ </div>
1952
+ `;
1953
+
1954
+ const systemPrompt = document.getElementById('systemPrompt').value.trim();
1955
+ const modelSelect = document.getElementById('modelSelect').value;
1956
+ const temperature = parseInt(document.getElementById('temperature').value) / 100;
1957
+
1958
+ try {
1959
+ const response = await fetch('/api/prompt/send', {
1960
+ method: 'POST',
1961
+ headers: { 'Content-Type': 'application/json' },
1962
+ body: JSON.stringify({
1963
+ prompt,
1964
+ context: {
1965
+ memories: state.selectedMemories.map(m => m.id),
1966
+ files: state.selectedFiles.map(f => f.path),
1967
+ codebase: state.includeCodebase
1968
+ },
1969
+ config: {
1970
+ maxTokens: parseInt(document.getElementById('maxTokens').value),
1971
+ intelligencePriority: parseInt(document.getElementById('intelligencePriority').value) / 100,
1972
+ speedPriority: parseInt(document.getElementById('speedPriority').value) / 100,
1973
+ model: modelSelect,
1974
+ temperature: temperature,
1975
+ systemPrompt: systemPrompt || undefined,
1976
+ enableThinking: document.getElementById('enableThinking').checked
1977
+ }
1978
+ })
1979
+ });
1980
+
1981
+ const data = await response.json();
1982
+
1983
+ if (data.success) {
1984
+ state.currentResponse = data;
1985
+ displayResponse(data);
1986
+ promptInput.value = '';
1987
+ promptInput.style.height = 'auto';
1988
+ loadHistory();
1989
+ } else {
1990
+ showNotification(data.error || 'Failed to send prompt', 'error');
1991
+ viewer.innerHTML = `
1992
+ <div class="response-empty" style="color: var(--csgo-error);">
1993
+ <h2>Error</h2>
1994
+ <p>${data.error || 'Failed to send prompt'}</p>
1995
+ </div>
1996
+ `;
1997
+ }
1998
+ } catch (error) {
1999
+ console.error('Error sending prompt:', error);
2000
+ showNotification('Network error - please try again', 'error');
2001
+ viewer.innerHTML = `
2002
+ <div class="response-empty" style="color: var(--csgo-error);">
2003
+ <h2>Network Error</h2>
2004
+ <p>Could not connect to server</p>
2005
+ </div>
2006
+ `;
2007
+ } finally {
2008
+ state.isLoading = false;
2009
+ sendBtn.classList.remove('loading');
2010
+ sendBtn.disabled = false;
2011
+ }
2012
+ }
2013
+
2014
+ function displayResponse(data) {
2015
+ const viewer = document.getElementById('responseViewer');
2016
+ const meta = document.getElementById('responseMeta');
2017
+
2018
+ const htmlContent = renderWithThinking(data.response);
2019
+
2020
+ viewer.innerHTML = htmlContent;
2021
+ meta.style.display = 'flex';
2022
+
2023
+ document.getElementById('metaModel').textContent = data.model || 'claude-3-5-sonnet';
2024
+ document.getElementById('metaTokens').textContent = data.tokensUsed || '-';
2025
+ document.getElementById('metaDuration').textContent = data.duration ? `${data.duration}ms` : '-';
2026
+
2027
+ viewer.scrollTop = 0;
2028
+ addCopyButtonsToCodeBlocks();
2029
+ }
2030
+
2031
+ function addCopyButtonsToCodeBlocks() {
2032
+ document.querySelectorAll('.response-content pre').forEach(pre => {
2033
+ if (!pre.querySelector('.copy-btn')) {
2034
+ const copyBtn = document.createElement('button');
2035
+ copyBtn.className = 'copy-btn';
2036
+ copyBtn.textContent = 'Copy';
2037
+ copyBtn.onclick = () => {
2038
+ const code = pre.querySelector('code');
2039
+ if (code) {
2040
+ navigator.clipboard.writeText(code.textContent);
2041
+ copyBtn.textContent = 'Copied!';
2042
+ setTimeout(() => copyBtn.textContent = 'Copy', 2000);
2043
+ }
2044
+ };
2045
+ pre.appendChild(copyBtn);
2046
+ }
2047
+ });
2048
+ }
2049
+
2050
+ function renderMarkdown(text) {
2051
+ if (!text) return '';
2052
+
2053
+ let html = text
2054
+ .replace(/&/g, '&amp;')
2055
+ .replace(/</g, '&lt;')
2056
+ .replace(/>/g, '&gt;');
2057
+
2058
+ html = html.replace(/```(\w*)\n([\s\S]*?)```/g, (_, lang, code) => {
2059
+ return `<pre><code class="language-${lang}">${code.trim()}</code></pre>`;
2060
+ });
2061
+
2062
+ html = html.replace(/`([^`]+)`/g, '<code>$1</code>');
2063
+
2064
+ html = html.replace(/^### (.+)$/gm, '<h3>$1</h3>');
2065
+ html = html.replace(/^## (.+)$/gm, '<h2>$1</h2>');
2066
+ html = html.replace(/^# (.+)$/gm, '<h1>$1</h1>');
2067
+
2068
+ html = html.replace(/\*\*(.+?)\*\*/g, '<strong>$1</strong>');
2069
+ html = html.replace(/\*(.+?)\*/g, '<em>$1</em>');
2070
+
2071
+ html = html.replace(/^\- (.+)$/gm, '<li>$1</li>');
2072
+ html = html.replace(/(<li>.*<\/li>)/s, '<ul>$1</ul>');
2073
+
2074
+ html = html.replace(/\n\n/g, '</p><p>');
2075
+ html = '<p>' + html + '</p>';
2076
+
2077
+ html = html.replace(/<p><\/p>/g, '');
2078
+ html = html.replace(/<p>(<h[1-3]>)/g, '$1');
2079
+ html = html.replace(/(<\/h[1-3]>)<\/p>/g, '$1');
2080
+ html = html.replace(/<p>(<pre>)/g, '$1');
2081
+ html = html.replace(/(<\/pre>)<\/p>/g, '$1');
2082
+ html = html.replace(/<p>(<ul>)/g, '$1');
2083
+ html = html.replace(/(<\/ul>)<\/p>/g, '$1');
2084
+
2085
+ return html;
2086
+ }
2087
+
2088
+ function parseThinkingBlocks(text) {
2089
+ if (!text) return { thinking: [], response: text };
2090
+ const thinkingBlocks = [];
2091
+ const thinkingRegex = /&lt;thinking&gt;([\s\S]*?)&lt;\/thinking&gt;/gi;
2092
+ let match;
2093
+ while ((match = thinkingRegex.exec(text)) !== null) {
2094
+ thinkingBlocks.push(match[1].trim());
2095
+ }
2096
+ const cleanResponse = text.replace(thinkingRegex, '').trim();
2097
+ return { thinking: thinkingBlocks, response: cleanResponse };
2098
+ }
2099
+
2100
+ function renderWithThinking(text) {
2101
+ if (!text) return '';
2102
+ const { thinking, response } = parseThinkingBlocks(text);
2103
+ let html = '';
2104
+
2105
+ if (thinking.length > 0) {
2106
+ html += `
2107
+ <div style="margin-bottom: 20px;">
2108
+ <div style="display: flex; align-items: center; gap: 10px; margin-bottom: 10px; cursor: pointer;" onclick="toggleThinkingSection(this)">
2109
+ <span style="color: var(--csgo-yellow); font-size: 12px; text-transform: uppercase; letter-spacing: 1px;">Claude Thinking</span>
2110
+ <span style="background: var(--csgo-yellow); color: var(--csgo-black); padding: 2px 8px; border-radius: 10px; font-size: 10px;">${thinking.length} blocks</span>
2111
+ <span style="color: var(--csgo-text-dim); font-size: 14px;" id="thinkingToggleIcon">-</span>
2112
+ </div>
2113
+ <div class="thinking-blocks" style="background: rgba(255, 215, 0, 0.05); border: 1px solid rgba(255, 215, 0, 0.2); border-radius: 5px; padding: 15px;">
2114
+ ${thinking.map((block, i) => `
2115
+ <div style="margin-bottom: ${i < thinking.length - 1 ? '15px' : '0'}; padding-bottom: ${i < thinking.length - 1 ? '15px' : '0'}; ${i < thinking.length - 1 ? 'border-bottom: 1px dashed rgba(255, 215, 0, 0.2);' : ''}">
2116
+ <div style="font-size: 10px; color: var(--csgo-yellow); margin-bottom: 5px;">THINKING BLOCK ${i + 1}</div>
2117
+ <div style="font-size: 13px; color: var(--csgo-text); line-height: 1.6; white-space: pre-wrap;">${escapeHtml(block)}</div>
2118
+ </div>
2119
+ `).join('')}
2120
+ </div>
2121
+ </div>
2122
+ `;
2123
+ }
2124
+
2125
+ html += `<div class="response-content">${renderMarkdown(response)}</div>`;
2126
+ return html;
2127
+ }
2128
+
2129
+ function toggleThinkingSection(header) {
2130
+ const blocks = header.nextElementSibling;
2131
+ const icon = header.querySelector('#thinkingToggleIcon');
2132
+ if (blocks.style.display === 'none') {
2133
+ blocks.style.display = 'block';
2134
+ icon.textContent = '-';
2135
+ } else {
2136
+ blocks.style.display = 'none';
2137
+ icon.textContent = '+';
2138
+ }
2139
+ }
2140
+
2141
+ async function loadHistory() {
2142
+ try {
2143
+ const response = await fetch('/api/prompt/history?limit=20');
2144
+ const data = await response.json();
2145
+
2146
+ if (data.success) {
2147
+ state.history = data.history;
2148
+ renderHistory();
2149
+ }
2150
+ } catch (error) {
2151
+ console.error('Error loading history:', error);
2152
+ }
2153
+ }
2154
+
2155
+ function renderHistory() {
2156
+ const container = document.getElementById('historySection');
2157
+
2158
+ if (state.history.length === 0) {
2159
+ container.innerHTML = `
2160
+ <div style="padding: 20px; text-align: center; color: var(--csgo-text-dim);">
2161
+ No conversation history yet
2162
+ </div>
2163
+ `;
2164
+ return;
2165
+ }
2166
+
2167
+ container.innerHTML = state.history.map(item => `
2168
+ <div class="history-item" onclick="loadHistoryItem('${item.id}')">
2169
+ <div class="history-prompt">${escapeHtml(item.prompt.substring(0, 100))}${item.prompt.length > 100 ? '...' : ''}</div>
2170
+ <div class="history-meta">
2171
+ <span>${formatTime(item.createdAt)}</span>
2172
+ <span>${item.tokensUsed || '-'} tokens</span>
2173
+ </div>
2174
+ </div>
2175
+ `).join('');
2176
+ }
2177
+
2178
+ function loadHistoryItem(id) {
2179
+ const item = state.history.find(h => h.id === id);
2180
+ if (item) {
2181
+ state.currentResponse = {
2182
+ response: item.response,
2183
+ model: 'history',
2184
+ tokensUsed: item.tokensUsed,
2185
+ duration: item.duration
2186
+ };
2187
+ displayResponse(state.currentResponse);
2188
+
2189
+ document.querySelectorAll('.history-item').forEach(el => el.classList.remove('active'));
2190
+ event.currentTarget.classList.add('active');
2191
+ }
2192
+ }
2193
+
2194
+ async function clearHistory() {
2195
+ if (!confirm('Are you sure you want to clear all conversation history?')) return;
2196
+
2197
+ try {
2198
+ const response = await fetch('/api/prompt/history', { method: 'DELETE' });
2199
+ const data = await response.json();
2200
+
2201
+ if (data.success) {
2202
+ state.history = [];
2203
+ renderHistory();
2204
+ showNotification('History cleared', 'success');
2205
+
2206
+ document.getElementById('responseViewer').innerHTML = `
2207
+ <div class="response-empty">
2208
+ <h2>Ready to Prompt</h2>
2209
+ <p>Type your prompt below and press Send or Ctrl+Enter</p>
2210
+ </div>
2211
+ `;
2212
+ document.getElementById('responseMeta').style.display = 'none';
2213
+ }
2214
+ } catch (error) {
2215
+ showNotification('Failed to clear history', 'error');
2216
+ }
2217
+ }
2218
+
2219
+ function updateContext() {
2220
+ state.includeCodebase = document.getElementById('includeCodebase').checked;
2221
+ renderContextChips();
2222
+ }
2223
+
2224
+ function renderContextChips() {
2225
+ const container = document.getElementById('contextChips');
2226
+ const chips = [];
2227
+
2228
+ if (state.includeCodebase) {
2229
+ chips.push(`<span class="context-chip">Codebase <span class="remove" onclick="removeContext('codebase')">x</span></span>`);
2230
+ }
2231
+
2232
+ state.selectedMemories.forEach(m => {
2233
+ chips.push(`<span class="context-chip">Memory: ${m.content.substring(0, 20)}... <span class="remove" onclick="removeContext('memory', '${m.id}')">x</span></span>`);
2234
+ });
2235
+
2236
+ state.selectedFiles.forEach(f => {
2237
+ chips.push(`<span class="context-chip">File: ${f.name} <span class="remove" onclick="removeContext('file', '${f.path}')">x</span></span>`);
2238
+ });
2239
+
2240
+ container.innerHTML = chips.join('');
2241
+ }
2242
+
2243
+ function removeContext(type, id) {
2244
+ if (type === 'codebase') {
2245
+ state.includeCodebase = false;
2246
+ document.getElementById('includeCodebase').checked = false;
2247
+ } else if (type === 'memory') {
2248
+ state.selectedMemories = state.selectedMemories.filter(m => m.id !== id);
2249
+ } else if (type === 'file') {
2250
+ state.selectedFiles = state.selectedFiles.filter(f => f.path !== id);
2251
+ }
2252
+ renderContextChips();
2253
+ }
2254
+
2255
+ async function openMemorySelector() {
2256
+ document.getElementById('memoryModal').classList.add('active');
2257
+ await loadMemories();
2258
+ }
2259
+
2260
+ async function loadMemories(search = '') {
2261
+ const container = document.getElementById('memoryList');
2262
+ container.innerHTML = `
2263
+ <div class="loading-indicator">
2264
+ <div class="loading-dots"><span></span><span></span><span></span></div>
2265
+ </div>
2266
+ `;
2267
+
2268
+ try {
2269
+ const url = search
2270
+ ? `/api/memories?search=${encodeURIComponent(search)}&limit=50`
2271
+ : '/api/memories?limit=50';
2272
+
2273
+ const response = await fetch(url);
2274
+ const data = await response.json();
2275
+
2276
+ if (data.memories && data.memories.length > 0) {
2277
+ container.innerHTML = data.memories.map(m => `
2278
+ <div class="selector-item">
2279
+ <input type="checkbox" id="mem_${m.id}"
2280
+ ${state.selectedMemories.some(sm => sm.id === m.id) ? 'checked' : ''}
2281
+ data-memory='${JSON.stringify({ id: m.id, content: m.content }).replace(/'/g, "&#39;")}'>
2282
+ <div class="selector-item-content">
2283
+ <div class="selector-item-title">${escapeHtml(m.content.substring(0, 100))}${m.content.length > 100 ? '...' : ''}</div>
2284
+ <div class="selector-item-meta">
2285
+ ${m.memory_type || 'semantic'} | ${m.importance || 'medium'} | ${m.tags?.join(', ') || 'no tags'}
2286
+ </div>
2287
+ </div>
2288
+ </div>
2289
+ `).join('');
2290
+ } else {
2291
+ container.innerHTML = `
2292
+ <div style="padding: 20px; text-align: center; color: var(--csgo-text-dim);">
2293
+ No memories found
2294
+ </div>
2295
+ `;
2296
+ }
2297
+ } catch (error) {
2298
+ container.innerHTML = `
2299
+ <div style="padding: 20px; text-align: center; color: var(--csgo-error);">
2300
+ Error loading memories
2301
+ </div>
2302
+ `;
2303
+ }
2304
+ }
2305
+
2306
+ function searchMemories(query) {
2307
+ clearTimeout(window.memorySearchTimeout);
2308
+ window.memorySearchTimeout = setTimeout(() => loadMemories(query), 300);
2309
+ }
2310
+
2311
+ function confirmMemorySelection() {
2312
+ const checkboxes = document.querySelectorAll('#memoryList input[type="checkbox"]:checked');
2313
+ state.selectedMemories = [];
2314
+
2315
+ checkboxes.forEach(cb => {
2316
+ const data = JSON.parse(cb.dataset.memory);
2317
+ state.selectedMemories.push(data);
2318
+ });
2319
+
2320
+ renderContextChips();
2321
+ closeModal('memoryModal');
2322
+ }
2323
+
2324
+ async function openFileSelector() {
2325
+ document.getElementById('fileModal').classList.add('active');
2326
+ await loadFiles();
2327
+ }
2328
+
2329
+ async function loadFiles(search = '') {
2330
+ const container = document.getElementById('fileList');
2331
+ container.innerHTML = `
2332
+ <div class="loading-indicator">
2333
+ <div class="loading-dots"><span></span><span></span><span></span></div>
2334
+ </div>
2335
+ `;
2336
+
2337
+ try {
2338
+ const url = search
2339
+ ? `/api/codebase?search=${encodeURIComponent(search)}`
2340
+ : '/api/codebase';
2341
+
2342
+ const response = await fetch(url);
2343
+ const data = await response.json();
2344
+
2345
+ const files = data.files || data || [];
2346
+
2347
+ if (files.length > 0) {
2348
+ container.innerHTML = files.slice(0, 50).map(f => `
2349
+ <div class="selector-item">
2350
+ <input type="checkbox" id="file_${f.path?.replace(/[^a-z0-9]/gi, '_')}"
2351
+ ${state.selectedFiles.some(sf => sf.path === f.path) ? 'checked' : ''}
2352
+ data-file='${JSON.stringify({ path: f.path, name: f.name || f.path.split('/').pop() }).replace(/'/g, "&#39;")}'>
2353
+ <div class="selector-item-content">
2354
+ <div class="selector-item-title">${escapeHtml(f.name || f.path.split('/').pop())}</div>
2355
+ <div class="selector-item-meta">${escapeHtml(f.path)}</div>
2356
+ </div>
2357
+ </div>
2358
+ `).join('');
2359
+ } else {
2360
+ container.innerHTML = `
2361
+ <div style="padding: 20px; text-align: center; color: var(--csgo-text-dim);">
2362
+ No files found
2363
+ </div>
2364
+ `;
2365
+ }
2366
+ } catch (error) {
2367
+ container.innerHTML = `
2368
+ <div style="padding: 20px; text-align: center; color: var(--csgo-error);">
2369
+ Error loading files
2370
+ </div>
2371
+ `;
2372
+ }
2373
+ }
2374
+
2375
+ function searchFiles(query) {
2376
+ clearTimeout(window.fileSearchTimeout);
2377
+ window.fileSearchTimeout = setTimeout(() => loadFiles(query), 300);
2378
+ }
2379
+
2380
+ function confirmFileSelection() {
2381
+ const checkboxes = document.querySelectorAll('#fileList input[type="checkbox"]:checked');
2382
+ state.selectedFiles = [];
2383
+
2384
+ checkboxes.forEach(cb => {
2385
+ const data = JSON.parse(cb.dataset.file);
2386
+ state.selectedFiles.push(data);
2387
+ });
2388
+
2389
+ renderContextChips();
2390
+ closeModal('fileModal');
2391
+ }
2392
+
2393
+ function openDeployModal() {
2394
+ const promptInput = document.getElementById('promptInput');
2395
+ document.getElementById('deployTaskDescription').value = promptInput.value;
2396
+ document.getElementById('deployModal').classList.add('active');
2397
+ }
2398
+
2399
+ async function deployTeamMember() {
2400
+ const teamMemberName = document.getElementById('deployTeamMemberName').value.trim() || 'Unnamed Team Member';
2401
+ const teamMemberType = document.getElementById('deployTeamMemberType').value;
2402
+ const taskDescription = document.getElementById('deployTaskDescription').value.trim();
2403
+ const useCurrentPrompt = document.getElementById('deployUseCurrentPrompt').checked;
2404
+
2405
+ if (!taskDescription) {
2406
+ showNotification('Please provide a task description', 'error');
2407
+ return;
2408
+ }
2409
+
2410
+ try {
2411
+ const response = await fetch('/api/team-members/deploy', {
2412
+ method: 'POST',
2413
+ headers: { 'Content-Type': 'application/json' },
2414
+ body: JSON.stringify({
2415
+ name: teamMemberName,
2416
+ type: teamMemberType,
2417
+ task: taskDescription,
2418
+ config: {
2419
+ model: document.getElementById('modelSelect').value,
2420
+ maxTokens: parseInt(document.getElementById('maxTokens').value),
2421
+ temperature: parseInt(document.getElementById('temperature').value) / 100,
2422
+ systemPrompt: document.getElementById('systemPrompt').value || undefined,
2423
+ context: {
2424
+ memories: state.selectedMemories.map(m => m.id),
2425
+ files: state.selectedFiles.map(f => f.path),
2426
+ codebase: state.includeCodebase
2427
+ }
2428
+ }
2429
+ })
2430
+ });
2431
+
2432
+ const data = await response.json();
2433
+
2434
+ if (data.success) {
2435
+ showNotification(`TeamMember "${teamMemberName}" deployed successfully!`, 'success');
2436
+ closeModal('deployModal');
2437
+ } else {
2438
+ showNotification(data.error || 'Failed to deploy team member', 'error');
2439
+ }
2440
+ } catch (error) {
2441
+ console.error('Error deploying team member:', error);
2442
+ showNotification('Network error - please try again', 'error');
2443
+ }
2444
+ }
2445
+
2446
+ function toggleSection(header) {
2447
+ const content = header.nextElementSibling;
2448
+ const icon = header.querySelector('span');
2449
+
2450
+ if (content.style.maxHeight === '0px') {
2451
+ content.style.maxHeight = content.scrollHeight + 'px';
2452
+ icon.textContent = '-';
2453
+ } else {
2454
+ content.style.maxHeight = '0px';
2455
+ icon.textContent = '+';
2456
+ }
2457
+ }
2458
+
2459
+ function toggleSystemPrompt() {
2460
+ const container = document.getElementById('systemPromptContainer');
2461
+ const icon = document.getElementById('systemPromptToggleIcon');
2462
+ container.classList.toggle('visible');
2463
+ icon.textContent = container.classList.contains('visible') ? '-' : '+';
2464
+ }
2465
+
2466
+ function closeModal(modalId) {
2467
+ document.getElementById(modalId).classList.remove('active');
2468
+ }
2469
+
2470
+ function updateSliderValue(slider) {
2471
+ const valueEl = document.getElementById(slider.id + 'Value');
2472
+ if (slider.id === 'maxTokens') {
2473
+ // TEAM MEMBER 3 FIX: Display large token values in K format
2474
+ const tokens = parseInt(slider.value, 10);
2475
+ if (tokens >= 100000) {
2476
+ valueEl.textContent = Math.round(tokens / 1000) + 'K (Unlimited)';
2477
+ } else if (tokens >= 1000) {
2478
+ valueEl.textContent = Math.round(tokens / 1000) + 'K';
2479
+ } else {
2480
+ valueEl.textContent = tokens;
2481
+ }
2482
+ } else {
2483
+ valueEl.textContent = (slider.value / 100).toFixed(1);
2484
+ }
2485
+ }
2486
+
2487
+ function updateTemperature(slider) {
2488
+ document.getElementById('temperatureValue').textContent = (slider.value / 100).toFixed(2);
2489
+ }
2490
+
2491
+ function copyResponse() {
2492
+ if (state.currentResponse?.response) {
2493
+ navigator.clipboard.writeText(state.currentResponse.response);
2494
+ showNotification('Response copied to clipboard', 'success');
2495
+ }
2496
+ }
2497
+
2498
+ function exportResponse() {
2499
+ if (state.currentResponse?.response) {
2500
+ const blob = new Blob([state.currentResponse.response], { type: 'text/markdown' });
2501
+ const url = URL.createObjectURL(blob);
2502
+ const a = document.createElement('a');
2503
+ a.href = url;
2504
+ a.download = `response_${Date.now()}.md`;
2505
+ a.click();
2506
+ URL.revokeObjectURL(url);
2507
+ }
2508
+ }
2509
+
2510
+ function showNotification(message, type = 'info') {
2511
+ const notification = document.createElement('div');
2512
+ notification.className = `notification ${type}`;
2513
+ notification.textContent = message;
2514
+ document.body.appendChild(notification);
2515
+
2516
+ setTimeout(() => notification.remove(), 3000);
2517
+ }
2518
+
2519
+ function escapeHtml(text) {
2520
+ const div = document.createElement('div');
2521
+ div.textContent = text;
2522
+ return div.innerHTML;
2523
+ }
2524
+
2525
+ function formatTime(dateStr) {
2526
+ const date = new Date(dateStr);
2527
+ const now = new Date();
2528
+ const diff = now - date;
2529
+
2530
+ if (diff < 60000) return 'Just now';
2531
+ if (diff < 3600000) return `${Math.floor(diff / 60000)}m ago`;
2532
+ if (diff < 86400000) return `${Math.floor(diff / 3600000)}h ago`;
2533
+ return date.toLocaleDateString();
2534
+ }
2535
+
2536
+ // NOTE: Old polling code removed - using LIVE SSE streaming now!
2537
+ // The initializeLiveSessionStream() function handles all real-time updates
2538
+
2539
+ // ========================================================================
2540
+ // LIVE TERMINAL - Replace Live Conversation with xterm.js terminal
2541
+ // ========================================================================
2542
+ let terminalWs = null;
2543
+ let term = null;
2544
+ let fitAddon = null;
2545
+
2546
+ function initializeTerminal() {
2547
+ term = new Terminal({
2548
+ cursorBlink: true,
2549
+ theme: {
2550
+ background: '#000000',
2551
+ foreground: '#d4d4d4',
2552
+ cursor: '#ffffff',
2553
+ black: '#000000',
2554
+ red: '#cd3131',
2555
+ green: '#0dbc79',
2556
+ yellow: '#e5e510',
2557
+ blue: '#2472c8',
2558
+ magenta: '#bc3fbc',
2559
+ cyan: '#11a8cd',
2560
+ white: '#e5e5e5',
2561
+ brightBlack: '#666666',
2562
+ brightRed: '#f14c4c',
2563
+ brightGreen: '#23d18b',
2564
+ brightYellow: '#f5f543',
2565
+ brightBlue: '#3b8eea',
2566
+ brightMagenta: '#d670d6',
2567
+ brightCyan: '#29b8db',
2568
+ brightWhite: '#ffffff'
2569
+ },
2570
+ fontSize: 13,
2571
+ fontFamily: '"Cascadia Code", "Fira Code", "Consolas", monospace',
2572
+ scrollback: 10000,
2573
+ convertEol: true
2574
+ });
2575
+
2576
+ fitAddon = new FitAddon.FitAddon();
2577
+ term.loadAddon(fitAddon);
2578
+
2579
+ const webLinksAddon = new WebLinksAddon.WebLinksAddon();
2580
+ term.loadAddon(webLinksAddon);
2581
+
2582
+ term.open(document.getElementById('terminal'));
2583
+ fitAddon.fit();
2584
+
2585
+ window.addEventListener('resize', () => {
2586
+ if (fitAddon) fitAddon.fit();
2587
+ });
2588
+
2589
+ term.onData((data) => {
2590
+ if (terminalWs && terminalWs.readyState === WebSocket.OPEN) {
2591
+ terminalWs.send(JSON.stringify({
2592
+ type: 'send-input',
2593
+ data: data
2594
+ }));
2595
+ }
2596
+ });
2597
+
2598
+ connectTerminalWebSocket();
2599
+ }
2600
+
2601
+ function connectTerminalWebSocket() {
2602
+ const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
2603
+ const wsUrl = `${protocol}//${window.location.host}/ws/terminal`;
2604
+
2605
+ terminalWs = new WebSocket(wsUrl);
2606
+
2607
+ terminalWs.onopen = () => {
2608
+ try {
2609
+ updateTerminalStatus('connected');
2610
+ term.writeln('\x1b[32m[SpecMem] Connected to terminal stream\x1b[0m');
2611
+ terminalWs.send(JSON.stringify({ type: 'list-instances' }));
2612
+ } catch (error) {
2613
+ console.error('[SpecMem] WebSocket onopen error:', error);
2614
+ }
2615
+ };
2616
+
2617
+ terminalWs.onmessage = (event) => {
2618
+ try {
2619
+ const message = JSON.parse(event.data);
2620
+
2621
+ if (message.type === 'terminal-output') {
2622
+ term.write(message.data);
2623
+ }
2624
+ else if (message.type === 'instances-list') {
2625
+ term.writeln(`\x1b[33m[SpecMem] Found ${message.instances.length} Claude instances\x1b[0m`);
2626
+ populateInstanceSelector(message.instances);
2627
+ }
2628
+ else if (message.type === 'streaming-started') {
2629
+ term.writeln(`\x1b[32m[SpecMem] Streaming from ${message.instance.screenName}\x1b[0m`);
2630
+ document.getElementById('startStreamBtn').disabled = true;
2631
+ document.getElementById('stopStreamBtn').disabled = false;
2632
+ }
2633
+ else if (message.type === 'streaming-stopped') {
2634
+ term.writeln('\x1b[33m[SpecMem] Streaming stopped\x1b[0m');
2635
+ document.getElementById('startStreamBtn').disabled = false;
2636
+ document.getElementById('stopStreamBtn').disabled = true;
2637
+ }
2638
+ else if (message.type === 'error') {
2639
+ term.writeln(`\x1b[31m[SpecMem Error] ${message.message}\x1b[0m`);
2640
+ }
2641
+ } catch (error) {
2642
+ console.error('[SpecMem] WebSocket message handler error:', error);
2643
+ console.error('[SpecMem] Raw message:', event.data);
2644
+ // Don't crash - keep the WebSocket alive
2645
+ }
2646
+ };
2647
+
2648
+ terminalWs.onerror = (error) => {
2649
+ try {
2650
+ console.error('[SpecMem] WebSocket error event:', error);
2651
+ updateTerminalStatus('error');
2652
+ term.writeln('\x1b[31m[SpecMem] WebSocket error\x1b[0m');
2653
+ } catch (e) {
2654
+ console.error('[SpecMem] Error in onerror handler:', e);
2655
+ }
2656
+ };
2657
+
2658
+ terminalWs.onclose = (event) => {
2659
+ try {
2660
+ console.log('[SpecMem] WebSocket closed:', event.code, event.reason);
2661
+ updateTerminalStatus('disconnected');
2662
+ term.writeln('\x1b[33m[SpecMem] Disconnected - reconnecting in 3s...\x1b[0m');
2663
+ setTimeout(connectTerminalWebSocket, 3000);
2664
+ } catch (error) {
2665
+ console.error('[SpecMem] Error in onclose handler:', error);
2666
+ setTimeout(connectTerminalWebSocket, 3000);
2667
+ }
2668
+ };
2669
+ }
2670
+
2671
+ function updateTerminalStatus(status) {
2672
+ const dot = document.getElementById('terminalStatusDot');
2673
+ if (status === 'connected') {
2674
+ dot.style.background = 'var(--csgo-success)';
2675
+ } else if (status === 'error') {
2676
+ dot.style.background = 'var(--csgo-error)';
2677
+ } else {
2678
+ dot.style.background = 'var(--csgo-text-dim)';
2679
+ }
2680
+ }
2681
+
2682
+ let currentInstances = [];
2683
+ function populateInstanceSelector(instances) {
2684
+ currentInstances = instances;
2685
+ const selector = document.getElementById('instanceSelector');
2686
+ selector.innerHTML = '';
2687
+
2688
+ if (instances.length === 0) {
2689
+ const option = document.createElement('option');
2690
+ option.value = '';
2691
+ option.textContent = 'No instances found';
2692
+ selector.appendChild(option);
2693
+ document.getElementById('startStreamBtn').disabled = true;
2694
+ return;
2695
+ }
2696
+
2697
+ instances.forEach((instance, index) => {
2698
+ const option = document.createElement('option');
2699
+ option.value = index;
2700
+ const status = instance.attached ? 'Attached' : 'Detached';
2701
+ option.textContent = `PID ${instance.pid} - ${instance.screenName} [${status}]`;
2702
+ selector.appendChild(option);
2703
+ });
2704
+
2705
+ document.getElementById('startStreamBtn').disabled = false;
2706
+ }
2707
+
2708
+ document.getElementById('startStreamBtn')?.addEventListener('click', () => {
2709
+ if (terminalWs && terminalWs.readyState === WebSocket.OPEN) {
2710
+ const selector = document.getElementById('instanceSelector');
2711
+ const selectedIndex = parseInt(selector.value);
2712
+
2713
+ if (isNaN(selectedIndex) || !currentInstances[selectedIndex]) {
2714
+ term.writeln('\x1b[31m[SpecMem Error] Please select an instance first\x1b[0m');
2715
+ return;
2716
+ }
2717
+
2718
+ const selectedInstance = currentInstances[selectedIndex];
2719
+ terminalWs.send(JSON.stringify({
2720
+ type: 'start-streaming',
2721
+ logFile: selectedInstance.logFile,
2722
+ pid: selectedInstance.pid
2723
+ }));
2724
+ }
2725
+ });
2726
+
2727
+ document.getElementById('stopStreamBtn')?.addEventListener('click', () => {
2728
+ if (terminalWs && terminalWs.readyState === WebSocket.OPEN) {
2729
+ terminalWs.send(JSON.stringify({ type: 'stop-streaming' }));
2730
+ }
2731
+ });
2732
+
2733
+ document.getElementById('newInstanceBtn')?.addEventListener('click', async () => {
2734
+ try {
2735
+ const response = await fetch('/api/terminal-inject/new-instance', {
2736
+ method: 'POST',
2737
+ headers: { 'Content-Type': 'application/json' }
2738
+ });
2739
+ const result = await response.json();
2740
+ if (result.success) {
2741
+ term.writeln(`\x1b[32m[SpecMem] New instance started: PID ${result.pid}\x1b[0m`);
2742
+ setTimeout(() => {
2743
+ if (terminalWs && terminalWs.readyState === WebSocket.OPEN) {
2744
+ terminalWs.send(JSON.stringify({ type: 'list-instances' }));
2745
+ }
2746
+ }, 2000);
2747
+ } else {
2748
+ term.writeln(`\x1b[31m[SpecMem Error] Failed to start new instance: ${result.error}\x1b[0m`);
2749
+ }
2750
+ } catch (error) {
2751
+ term.writeln(`\x1b[31m[SpecMem Error] ${error.message}\x1b[0m`);
2752
+ }
2753
+ });
2754
+
2755
+ // Initialize terminal when page loads
2756
+ if (document.readyState === 'loading') {
2757
+ document.addEventListener('DOMContentLoaded', initializeTerminal);
2758
+ } else {
2759
+ initializeTerminal();
2760
+ }
2761
+ </script>
2762
+ </body>
2763
+ </html>