@stackmemoryai/stackmemory 0.5.58 → 0.5.59

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 (596) hide show
  1. package/dist/cli/commands/search.js +20 -3
  2. package/dist/cli/commands/search.js.map +2 -2
  3. package/dist/core/database/sqlite-adapter.js +13 -3
  4. package/dist/core/database/sqlite-adapter.js.map +2 -2
  5. package/dist/core/errors/error-utils.js +208 -0
  6. package/dist/core/errors/error-utils.js.map +7 -0
  7. package/dist/core/errors/index.js +13 -4
  8. package/dist/core/errors/index.js.map +2 -2
  9. package/dist/core/merge/unified-merge-resolver.js +303 -0
  10. package/dist/core/merge/unified-merge-resolver.js.map +7 -0
  11. package/dist/core/monitoring/logger.js +61 -9
  12. package/dist/core/monitoring/logger.js.map +2 -2
  13. package/dist/core/security/index.js +35 -0
  14. package/dist/core/security/index.js.map +7 -0
  15. package/dist/core/security/input-sanitizer.js +321 -0
  16. package/dist/core/security/input-sanitizer.js.map +7 -0
  17. package/dist/integrations/linear/client.js +5 -1
  18. package/dist/integrations/linear/client.js.map +2 -2
  19. package/dist/integrations/mcp/remote-server.js +27 -36
  20. package/dist/integrations/mcp/remote-server.js.map +2 -2
  21. package/dist/integrations/mcp/server.js +44 -29
  22. package/dist/integrations/mcp/server.js.map +3 -3
  23. package/dist/scripts/benchmark-performance.js +48 -0
  24. package/dist/scripts/benchmark-performance.js.map +7 -0
  25. package/dist/scripts/check-redis.js +42 -0
  26. package/dist/scripts/check-redis.js.map +7 -0
  27. package/dist/scripts/initialize.js +116 -0
  28. package/dist/scripts/initialize.js.map +7 -0
  29. package/dist/scripts/list-linear-tasks.js +124 -0
  30. package/dist/scripts/list-linear-tasks.js.map +7 -0
  31. package/dist/scripts/measure-handoff-impact.js +340 -0
  32. package/dist/scripts/measure-handoff-impact.js.map +7 -0
  33. package/dist/scripts/query-chromadb.js +160 -0
  34. package/dist/scripts/query-chromadb.js.map +7 -0
  35. package/dist/scripts/show-linear-summary.js +119 -0
  36. package/dist/scripts/show-linear-summary.js.map +7 -0
  37. package/dist/scripts/simple-swarm-demo.js +90 -0
  38. package/dist/scripts/simple-swarm-demo.js.map +7 -0
  39. package/dist/scripts/status.js +155 -0
  40. package/dist/scripts/status.js.map +7 -0
  41. package/dist/scripts/test-chromadb-sync.js +192 -0
  42. package/dist/scripts/test-chromadb-sync.js.map +7 -0
  43. package/dist/scripts/test-ralph-iteration-fix.js +86 -0
  44. package/dist/scripts/test-ralph-iteration-fix.js.map +7 -0
  45. package/dist/scripts/test-ralph-iterations.js +121 -0
  46. package/dist/scripts/test-ralph-iterations.js.map +7 -0
  47. package/dist/scripts/test-redis-storage.js +389 -0
  48. package/dist/scripts/test-redis-storage.js.map +7 -0
  49. package/dist/scripts/test-simple-ralph-state-sync.js +115 -0
  50. package/dist/scripts/test-simple-ralph-state-sync.js.map +7 -0
  51. package/dist/scripts/test-swarm-fixes.js +125 -0
  52. package/dist/scripts/test-swarm-fixes.js.map +7 -0
  53. package/dist/scripts/test-swarm-tui.js +23 -0
  54. package/dist/scripts/test-swarm-tui.js.map +7 -0
  55. package/dist/scripts/test-tui-shortcuts.js +52 -0
  56. package/dist/scripts/test-tui-shortcuts.js.map +7 -0
  57. package/dist/scripts/validate-tui-shortcuts.js +60 -0
  58. package/dist/scripts/validate-tui-shortcuts.js.map +7 -0
  59. package/dist/src/agents/core/agent-task-manager.js +527 -0
  60. package/dist/src/agents/core/agent-task-manager.js.map +7 -0
  61. package/dist/src/agents/verifiers/base-verifier.js +133 -0
  62. package/dist/src/agents/verifiers/base-verifier.js.map +7 -0
  63. package/dist/src/agents/verifiers/formatter-verifier.js +130 -0
  64. package/dist/src/agents/verifiers/formatter-verifier.js.map +7 -0
  65. package/dist/src/agents/verifiers/llm-judge.js +252 -0
  66. package/dist/src/agents/verifiers/llm-judge.js.map +7 -0
  67. package/dist/src/cli/auto-detect.js +321 -0
  68. package/dist/src/cli/auto-detect.js.map +7 -0
  69. package/dist/src/cli/claude-sm-danger.js +21 -0
  70. package/dist/src/cli/claude-sm-danger.js.map +7 -0
  71. package/dist/src/cli/claude-sm.js +1156 -0
  72. package/dist/src/cli/claude-sm.js.map +7 -0
  73. package/dist/src/cli/codex-sm-danger.js +21 -0
  74. package/dist/src/cli/codex-sm-danger.js.map +7 -0
  75. package/dist/src/cli/codex-sm.js +349 -0
  76. package/dist/src/cli/codex-sm.js.map +7 -0
  77. package/dist/src/cli/commands/api.js +232 -0
  78. package/dist/src/cli/commands/api.js.map +7 -0
  79. package/dist/src/cli/commands/auto-background.js +180 -0
  80. package/dist/src/cli/commands/auto-background.js.map +7 -0
  81. package/dist/src/cli/commands/cleanup-processes.js +68 -0
  82. package/dist/src/cli/commands/cleanup-processes.js.map +7 -0
  83. package/dist/src/cli/commands/clear.js +202 -0
  84. package/dist/src/cli/commands/clear.js.map +7 -0
  85. package/dist/src/cli/commands/config.js +445 -0
  86. package/dist/src/cli/commands/config.js.map +7 -0
  87. package/dist/src/cli/commands/context-rehydrate.js +751 -0
  88. package/dist/src/cli/commands/context-rehydrate.js.map +7 -0
  89. package/dist/src/cli/commands/context.js +343 -0
  90. package/dist/src/cli/commands/context.js.map +7 -0
  91. package/dist/src/cli/commands/daemon.js +392 -0
  92. package/dist/src/cli/commands/daemon.js.map +7 -0
  93. package/dist/src/cli/commands/dashboard.js +210 -0
  94. package/dist/src/cli/commands/dashboard.js.map +7 -0
  95. package/dist/src/cli/commands/db.js +147 -0
  96. package/dist/src/cli/commands/db.js.map +7 -0
  97. package/dist/src/cli/commands/decision.js +266 -0
  98. package/dist/src/cli/commands/decision.js.map +7 -0
  99. package/dist/src/cli/commands/discovery.js +279 -0
  100. package/dist/src/cli/commands/discovery.js.map +7 -0
  101. package/dist/src/cli/commands/handoff.js +624 -0
  102. package/dist/src/cli/commands/handoff.js.map +7 -0
  103. package/dist/src/cli/commands/hooks.js +298 -0
  104. package/dist/src/cli/commands/hooks.js.map +7 -0
  105. package/dist/src/cli/commands/linear.js +529 -0
  106. package/dist/src/cli/commands/linear.js.map +7 -0
  107. package/dist/src/cli/commands/log.js +169 -0
  108. package/dist/src/cli/commands/log.js.map +7 -0
  109. package/dist/src/cli/commands/login.js +172 -0
  110. package/dist/src/cli/commands/login.js.map +7 -0
  111. package/dist/src/cli/commands/migrate.js +240 -0
  112. package/dist/src/cli/commands/migrate.js.map +7 -0
  113. package/dist/src/cli/commands/model.js +533 -0
  114. package/dist/src/cli/commands/model.js.map +7 -0
  115. package/dist/src/cli/commands/onboard.js +536 -0
  116. package/dist/src/cli/commands/onboard.js.map +7 -0
  117. package/dist/src/cli/commands/projects.js +199 -0
  118. package/dist/src/cli/commands/projects.js.map +7 -0
  119. package/dist/src/cli/commands/ralph.js +909 -0
  120. package/dist/src/cli/commands/ralph.js.map +7 -0
  121. package/dist/src/cli/commands/retrieval.js +248 -0
  122. package/dist/src/cli/commands/retrieval.js.map +7 -0
  123. package/dist/src/cli/commands/search.js +173 -0
  124. package/dist/src/cli/commands/search.js.map +7 -0
  125. package/dist/src/cli/commands/service.js +749 -0
  126. package/dist/src/cli/commands/service.js.map +7 -0
  127. package/dist/src/cli/commands/session.js +200 -0
  128. package/dist/src/cli/commands/session.js.map +7 -0
  129. package/dist/src/cli/commands/settings.js +306 -0
  130. package/dist/src/cli/commands/settings.js.map +7 -0
  131. package/dist/src/cli/commands/setup.js +701 -0
  132. package/dist/src/cli/commands/setup.js.map +7 -0
  133. package/dist/src/cli/commands/shell.js +249 -0
  134. package/dist/src/cli/commands/shell.js.map +7 -0
  135. package/dist/src/cli/commands/signup.js +50 -0
  136. package/dist/src/cli/commands/signup.js.map +7 -0
  137. package/dist/src/cli/commands/skills.js +470 -0
  138. package/dist/src/cli/commands/skills.js.map +7 -0
  139. package/dist/src/cli/commands/sms-notify.js +795 -0
  140. package/dist/src/cli/commands/sms-notify.js.map +7 -0
  141. package/dist/src/cli/commands/storage-tier.js +183 -0
  142. package/dist/src/cli/commands/storage-tier.js.map +7 -0
  143. package/dist/src/cli/commands/sweep.js +249 -0
  144. package/dist/src/cli/commands/sweep.js.map +7 -0
  145. package/dist/src/cli/commands/tasks.js +213 -0
  146. package/dist/src/cli/commands/tasks.js.map +7 -0
  147. package/dist/src/cli/commands/worktree.js +319 -0
  148. package/dist/src/cli/commands/worktree.js.map +7 -0
  149. package/dist/src/cli/index.js +594 -0
  150. package/dist/src/cli/index.js.map +7 -0
  151. package/dist/src/cli/opencode-sm.js +448 -0
  152. package/dist/src/cli/opencode-sm.js.map +7 -0
  153. package/dist/src/cli/utils/viewer.js +96 -0
  154. package/dist/src/cli/utils/viewer.js.map +7 -0
  155. package/dist/src/core/config/config-manager.js +398 -0
  156. package/dist/src/core/config/config-manager.js.map +7 -0
  157. package/dist/src/core/config/feature-flags.js +76 -0
  158. package/dist/src/core/config/feature-flags.js.map +7 -0
  159. package/dist/src/core/config/storage-config.js +115 -0
  160. package/dist/src/core/config/storage-config.js.map +7 -0
  161. package/dist/src/core/config/types.js +144 -0
  162. package/dist/src/core/config/types.js.map +7 -0
  163. package/dist/src/core/context/auto-context.js +80 -0
  164. package/dist/src/core/context/auto-context.js.map +7 -0
  165. package/dist/src/core/context/dual-stack-manager.js +870 -0
  166. package/dist/src/core/context/dual-stack-manager.js.map +7 -0
  167. package/dist/src/core/context/enhanced-rehydration.js +994 -0
  168. package/dist/src/core/context/enhanced-rehydration.js.map +7 -0
  169. package/dist/src/core/context/frame-database.js +479 -0
  170. package/dist/src/core/context/frame-database.js.map +7 -0
  171. package/dist/src/core/context/frame-digest.js +250 -0
  172. package/dist/src/core/context/frame-digest.js.map +7 -0
  173. package/dist/src/core/context/frame-handoff-manager.js +778 -0
  174. package/dist/src/core/context/frame-handoff-manager.js.map +7 -0
  175. package/dist/src/core/context/frame-lifecycle-hooks.js +119 -0
  176. package/dist/src/core/context/frame-lifecycle-hooks.js.map +7 -0
  177. package/dist/src/core/context/frame-recovery.js +302 -0
  178. package/dist/src/core/context/frame-recovery.js.map +7 -0
  179. package/dist/src/core/context/frame-stack.js +314 -0
  180. package/dist/src/core/context/frame-stack.js.map +7 -0
  181. package/dist/src/core/context/frame-types.js +5 -0
  182. package/dist/src/core/context/frame-types.js.map +7 -0
  183. package/dist/src/core/context/index.js +25 -0
  184. package/dist/src/core/context/index.js.map +7 -0
  185. package/dist/src/core/context/permission-manager.js +185 -0
  186. package/dist/src/core/context/permission-manager.js.map +7 -0
  187. package/dist/src/core/context/recursive-context-manager.js +592 -0
  188. package/dist/src/core/context/recursive-context-manager.js.map +7 -0
  189. package/dist/src/core/context/refactored-frame-manager.js +754 -0
  190. package/dist/src/core/context/refactored-frame-manager.js.map +7 -0
  191. package/dist/src/core/context/shared-context-layer.js +621 -0
  192. package/dist/src/core/context/shared-context-layer.js.map +7 -0
  193. package/dist/src/core/context/stack-merge-resolver.js +749 -0
  194. package/dist/src/core/context/stack-merge-resolver.js.map +7 -0
  195. package/dist/src/core/context/validation.js +130 -0
  196. package/dist/src/core/context/validation.js.map +7 -0
  197. package/dist/src/core/database/batch-operations.js +384 -0
  198. package/dist/src/core/database/batch-operations.js.map +7 -0
  199. package/dist/src/core/database/connection-pool.js +330 -0
  200. package/dist/src/core/database/connection-pool.js.map +7 -0
  201. package/dist/src/core/database/database-adapter.js +60 -0
  202. package/dist/src/core/database/database-adapter.js.map +7 -0
  203. package/dist/src/core/database/migration-manager.js +614 -0
  204. package/dist/src/core/database/migration-manager.js.map +7 -0
  205. package/dist/src/core/database/query-cache.js +298 -0
  206. package/dist/src/core/database/query-cache.js.map +7 -0
  207. package/dist/src/core/database/query-router.js +430 -0
  208. package/dist/src/core/database/query-router.js.map +7 -0
  209. package/dist/src/core/database/sqlite-adapter.js +738 -0
  210. package/dist/src/core/database/sqlite-adapter.js.map +7 -0
  211. package/dist/src/core/digest/enhanced-hybrid-digest.js +277 -0
  212. package/dist/src/core/digest/enhanced-hybrid-digest.js.map +7 -0
  213. package/dist/src/core/digest/frame-digest-integration.js +176 -0
  214. package/dist/src/core/digest/frame-digest-integration.js.map +7 -0
  215. package/dist/src/core/digest/hybrid-digest-generator.js +553 -0
  216. package/dist/src/core/digest/hybrid-digest-generator.js.map +7 -0
  217. package/dist/src/core/digest/index.js +9 -0
  218. package/dist/src/core/digest/index.js.map +7 -0
  219. package/dist/src/core/digest/types.js +25 -0
  220. package/dist/src/core/digest/types.js.map +7 -0
  221. package/dist/src/core/errors/error-utils.js +208 -0
  222. package/dist/src/core/errors/error-utils.js.map +7 -0
  223. package/dist/src/core/errors/index.js +521 -0
  224. package/dist/src/core/errors/index.js.map +7 -0
  225. package/dist/src/core/errors/recovery.js +269 -0
  226. package/dist/src/core/errors/recovery.js.map +7 -0
  227. package/dist/src/core/execution/parallel-executor.js +258 -0
  228. package/dist/src/core/execution/parallel-executor.js.map +7 -0
  229. package/dist/src/core/frame/workflow-templates.js +319 -0
  230. package/dist/src/core/frame/workflow-templates.js.map +7 -0
  231. package/dist/src/core/merge/conflict-detector.js +431 -0
  232. package/dist/src/core/merge/conflict-detector.js.map +7 -0
  233. package/dist/src/core/merge/index.js +9 -0
  234. package/dist/src/core/merge/index.js.map +7 -0
  235. package/dist/src/core/merge/resolution-engine.js +558 -0
  236. package/dist/src/core/merge/resolution-engine.js.map +7 -0
  237. package/dist/src/core/merge/stack-diff.js +532 -0
  238. package/dist/src/core/merge/stack-diff.js.map +7 -0
  239. package/dist/src/core/merge/types.js +5 -0
  240. package/dist/src/core/merge/types.js.map +7 -0
  241. package/dist/src/core/merge/unified-merge-resolver.js +303 -0
  242. package/dist/src/core/merge/unified-merge-resolver.js.map +7 -0
  243. package/dist/src/core/models/fallback-monitor.js +232 -0
  244. package/dist/src/core/models/fallback-monitor.js.map +7 -0
  245. package/dist/src/core/models/model-router.js +340 -0
  246. package/dist/src/core/models/model-router.js.map +7 -0
  247. package/dist/src/core/monitoring/error-handler.js +49 -0
  248. package/dist/src/core/monitoring/error-handler.js.map +7 -0
  249. package/dist/src/core/monitoring/logger.js +202 -0
  250. package/dist/src/core/monitoring/logger.js.map +7 -0
  251. package/dist/src/core/monitoring/metrics.js +172 -0
  252. package/dist/src/core/monitoring/metrics.js.map +7 -0
  253. package/dist/src/core/monitoring/progress-tracker.js +189 -0
  254. package/dist/src/core/monitoring/progress-tracker.js.map +7 -0
  255. package/dist/src/core/monitoring/session-monitor.js +300 -0
  256. package/dist/src/core/monitoring/session-monitor.js.map +7 -0
  257. package/dist/src/core/performance/context-cache.js +273 -0
  258. package/dist/src/core/performance/context-cache.js.map +7 -0
  259. package/dist/src/core/performance/index.js +11 -0
  260. package/dist/src/core/performance/index.js.map +7 -0
  261. package/dist/src/core/performance/lazy-context-loader.js +327 -0
  262. package/dist/src/core/performance/lazy-context-loader.js.map +7 -0
  263. package/dist/src/core/performance/monitor.js +221 -0
  264. package/dist/src/core/performance/monitor.js.map +7 -0
  265. package/dist/src/core/performance/optimized-frame-context.js +345 -0
  266. package/dist/src/core/performance/optimized-frame-context.js.map +7 -0
  267. package/dist/src/core/performance/performance-benchmark.js +277 -0
  268. package/dist/src/core/performance/performance-benchmark.js.map +7 -0
  269. package/dist/src/core/performance/performance-profiler.js +370 -0
  270. package/dist/src/core/performance/performance-profiler.js.map +7 -0
  271. package/dist/src/core/performance/streaming-jsonl-parser.js +195 -0
  272. package/dist/src/core/performance/streaming-jsonl-parser.js.map +7 -0
  273. package/dist/src/core/persistence/postgres-adapter.js +349 -0
  274. package/dist/src/core/persistence/postgres-adapter.js.map +7 -0
  275. package/dist/src/core/projects/project-isolation.js +201 -0
  276. package/dist/src/core/projects/project-isolation.js.map +7 -0
  277. package/dist/src/core/projects/project-manager.js +697 -0
  278. package/dist/src/core/projects/project-manager.js.map +7 -0
  279. package/dist/src/core/query/query-parser.js +370 -0
  280. package/dist/src/core/query/query-parser.js.map +7 -0
  281. package/dist/src/core/query/query-templates.js +321 -0
  282. package/dist/src/core/query/query-templates.js.map +7 -0
  283. package/dist/src/core/retrieval/context-retriever.js +479 -0
  284. package/dist/src/core/retrieval/context-retriever.js.map +7 -0
  285. package/dist/src/core/retrieval/index.js +8 -0
  286. package/dist/src/core/retrieval/index.js.map +7 -0
  287. package/dist/src/core/retrieval/llm-context-retrieval.js +613 -0
  288. package/dist/src/core/retrieval/llm-context-retrieval.js.map +7 -0
  289. package/dist/src/core/retrieval/llm-provider.js +151 -0
  290. package/dist/src/core/retrieval/llm-provider.js.map +7 -0
  291. package/dist/src/core/retrieval/retrieval-audit.js +236 -0
  292. package/dist/src/core/retrieval/retrieval-audit.js.map +7 -0
  293. package/dist/src/core/retrieval/summary-generator.js +589 -0
  294. package/dist/src/core/retrieval/summary-generator.js.map +7 -0
  295. package/dist/src/core/retrieval/types.js +21 -0
  296. package/dist/src/core/retrieval/types.js.map +7 -0
  297. package/dist/src/core/security/index.js +35 -0
  298. package/dist/src/core/security/index.js.map +7 -0
  299. package/dist/src/core/security/input-sanitizer.js +321 -0
  300. package/dist/src/core/security/input-sanitizer.js.map +7 -0
  301. package/dist/src/core/session/clear-survival.js +465 -0
  302. package/dist/src/core/session/clear-survival.js.map +7 -0
  303. package/dist/src/core/session/enhanced-handoff.js +792 -0
  304. package/dist/src/core/session/enhanced-handoff.js.map +7 -0
  305. package/dist/src/core/session/handoff-generator.js +343 -0
  306. package/dist/src/core/session/handoff-generator.js.map +7 -0
  307. package/dist/src/core/session/index.js +15 -0
  308. package/dist/src/core/session/index.js.map +7 -0
  309. package/dist/src/core/session/session-manager.js +347 -0
  310. package/dist/src/core/session/session-manager.js.map +7 -0
  311. package/dist/src/core/skills/index.js +7 -0
  312. package/dist/src/core/skills/index.js.map +7 -0
  313. package/dist/src/core/skills/skill-storage.js +764 -0
  314. package/dist/src/core/skills/skill-storage.js.map +7 -0
  315. package/dist/src/core/skills/types.js +193 -0
  316. package/dist/src/core/skills/types.js.map +7 -0
  317. package/dist/src/core/storage/chromadb-adapter.js +354 -0
  318. package/dist/src/core/storage/chromadb-adapter.js.map +7 -0
  319. package/dist/src/core/storage/infinite-storage.js +510 -0
  320. package/dist/src/core/storage/infinite-storage.js.map +7 -0
  321. package/dist/src/core/storage/remote-storage.js +489 -0
  322. package/dist/src/core/storage/remote-storage.js.map +7 -0
  323. package/dist/src/core/storage/two-tier-storage.js +766 -0
  324. package/dist/src/core/storage/two-tier-storage.js.map +7 -0
  325. package/dist/src/core/trace/cli-trace-wrapper.js +132 -0
  326. package/dist/src/core/trace/cli-trace-wrapper.js.map +7 -0
  327. package/dist/src/core/trace/db-trace-wrapper.js +247 -0
  328. package/dist/src/core/trace/db-trace-wrapper.js.map +7 -0
  329. package/dist/src/core/trace/debug-trace.js +417 -0
  330. package/dist/src/core/trace/debug-trace.js.map +7 -0
  331. package/dist/src/core/trace/index.js +109 -0
  332. package/dist/src/core/trace/index.js.map +7 -0
  333. package/dist/src/core/trace/linear-api-wrapper.js +178 -0
  334. package/dist/src/core/trace/linear-api-wrapper.js.map +7 -0
  335. package/dist/src/core/trace/trace-detector.js +528 -0
  336. package/dist/src/core/trace/trace-detector.js.map +7 -0
  337. package/dist/src/core/trace/trace-store.js +345 -0
  338. package/dist/src/core/trace/trace-store.js.map +7 -0
  339. package/dist/src/core/trace/types.js +77 -0
  340. package/dist/src/core/trace/types.js.map +7 -0
  341. package/dist/src/core/types.js +5 -0
  342. package/dist/src/core/types.js.map +7 -0
  343. package/dist/src/core/utils/async-mutex.js +114 -0
  344. package/dist/src/core/utils/async-mutex.js.map +7 -0
  345. package/dist/src/core/utils/compression.js +83 -0
  346. package/dist/src/core/utils/compression.js.map +7 -0
  347. package/dist/src/core/utils/update-checker.js +218 -0
  348. package/dist/src/core/utils/update-checker.js.map +7 -0
  349. package/dist/src/core/worktree/worktree-manager.js +465 -0
  350. package/dist/src/core/worktree/worktree-manager.js.map +7 -0
  351. package/dist/src/daemon/daemon-config.js +149 -0
  352. package/dist/src/daemon/daemon-config.js.map +7 -0
  353. package/dist/src/daemon/services/context-service.js +122 -0
  354. package/dist/src/daemon/services/context-service.js.map +7 -0
  355. package/dist/src/daemon/services/linear-service.js +136 -0
  356. package/dist/src/daemon/services/linear-service.js.map +7 -0
  357. package/dist/src/daemon/session-daemon.js +312 -0
  358. package/dist/src/daemon/session-daemon.js.map +7 -0
  359. package/dist/src/daemon/unified-daemon.js +276 -0
  360. package/dist/src/daemon/unified-daemon.js.map +7 -0
  361. package/dist/src/features/analytics/api/analytics-api.js +287 -0
  362. package/dist/src/features/analytics/api/analytics-api.js.map +7 -0
  363. package/dist/src/features/analytics/core/analytics-service.js +282 -0
  364. package/dist/src/features/analytics/core/analytics-service.js.map +7 -0
  365. package/dist/src/features/analytics/index.js +18 -0
  366. package/dist/src/features/analytics/index.js.map +7 -0
  367. package/dist/src/features/analytics/queries/metrics-queries.js +277 -0
  368. package/dist/src/features/analytics/queries/metrics-queries.js.map +7 -0
  369. package/dist/src/features/analytics/types/metrics.js +5 -0
  370. package/dist/src/features/analytics/types/metrics.js.map +7 -0
  371. package/dist/src/features/browser/browser-mcp.js +492 -0
  372. package/dist/src/features/browser/browser-mcp.js.map +7 -0
  373. package/dist/src/features/sweep/index.js +20 -0
  374. package/dist/src/features/sweep/index.js.map +7 -0
  375. package/dist/src/features/sweep/prediction-client.js +155 -0
  376. package/dist/src/features/sweep/prediction-client.js.map +7 -0
  377. package/dist/src/features/sweep/prompt-builder.js +85 -0
  378. package/dist/src/features/sweep/prompt-builder.js.map +7 -0
  379. package/dist/src/features/sweep/pty-wrapper.js +171 -0
  380. package/dist/src/features/sweep/pty-wrapper.js.map +7 -0
  381. package/dist/src/features/sweep/state-watcher.js +87 -0
  382. package/dist/src/features/sweep/state-watcher.js.map +7 -0
  383. package/dist/src/features/sweep/status-bar.js +88 -0
  384. package/dist/src/features/sweep/status-bar.js.map +7 -0
  385. package/dist/src/features/sweep/sweep-server-manager.js +226 -0
  386. package/dist/src/features/sweep/sweep-server-manager.js.map +7 -0
  387. package/dist/src/features/sweep/tab-interceptor.js +38 -0
  388. package/dist/src/features/sweep/tab-interceptor.js.map +7 -0
  389. package/dist/src/features/sweep/types.js +18 -0
  390. package/dist/src/features/sweep/types.js.map +7 -0
  391. package/dist/src/features/tasks/linear-task-manager.js +487 -0
  392. package/dist/src/features/tasks/linear-task-manager.js.map +7 -0
  393. package/dist/src/features/tasks/task-aware-context.js +410 -0
  394. package/dist/src/features/tasks/task-aware-context.js.map +7 -0
  395. package/dist/src/features/tui/simple-monitor.js +116 -0
  396. package/dist/src/features/tui/simple-monitor.js.map +7 -0
  397. package/dist/src/features/tui/swarm-monitor.js +648 -0
  398. package/dist/src/features/tui/swarm-monitor.js.map +7 -0
  399. package/dist/src/features/web/client/stores/task-store.js +26 -0
  400. package/dist/src/features/web/client/stores/task-store.js.map +7 -0
  401. package/dist/src/features/web/server/index.js +194 -0
  402. package/dist/src/features/web/server/index.js.map +7 -0
  403. package/dist/src/hooks/auto-background.js +151 -0
  404. package/dist/src/hooks/auto-background.js.map +7 -0
  405. package/dist/src/hooks/claude-code-whatsapp-hook.js +197 -0
  406. package/dist/src/hooks/claude-code-whatsapp-hook.js.map +7 -0
  407. package/dist/src/hooks/config.js +150 -0
  408. package/dist/src/hooks/config.js.map +7 -0
  409. package/dist/src/hooks/daemon.js +364 -0
  410. package/dist/src/hooks/daemon.js.map +7 -0
  411. package/dist/src/hooks/events.js +58 -0
  412. package/dist/src/hooks/events.js.map +7 -0
  413. package/dist/src/hooks/index.js +12 -0
  414. package/dist/src/hooks/index.js.map +7 -0
  415. package/dist/src/hooks/linear-task-picker.js +186 -0
  416. package/dist/src/hooks/linear-task-picker.js.map +7 -0
  417. package/dist/src/hooks/schemas.js +197 -0
  418. package/dist/src/hooks/schemas.js.map +7 -0
  419. package/dist/src/hooks/secure-fs.js +49 -0
  420. package/dist/src/hooks/secure-fs.js.map +7 -0
  421. package/dist/src/hooks/security-logger.js +155 -0
  422. package/dist/src/hooks/security-logger.js.map +7 -0
  423. package/dist/src/hooks/session-summary.js +222 -0
  424. package/dist/src/hooks/session-summary.js.map +7 -0
  425. package/dist/src/hooks/sms-action-runner.js +371 -0
  426. package/dist/src/hooks/sms-action-runner.js.map +7 -0
  427. package/dist/src/hooks/sms-notify.js +506 -0
  428. package/dist/src/hooks/sms-notify.js.map +7 -0
  429. package/dist/src/hooks/sms-watcher.js +93 -0
  430. package/dist/src/hooks/sms-watcher.js.map +7 -0
  431. package/dist/src/hooks/sms-webhook.js +555 -0
  432. package/dist/src/hooks/sms-webhook.js.map +7 -0
  433. package/dist/src/hooks/whatsapp-commands.js +479 -0
  434. package/dist/src/hooks/whatsapp-commands.js.map +7 -0
  435. package/dist/src/hooks/whatsapp-scheduler.js +317 -0
  436. package/dist/src/hooks/whatsapp-scheduler.js.map +7 -0
  437. package/dist/src/hooks/whatsapp-sync.js +409 -0
  438. package/dist/src/hooks/whatsapp-sync.js.map +7 -0
  439. package/dist/src/index.js +25 -0
  440. package/dist/src/index.js.map +7 -0
  441. package/dist/src/integrations/anthropic/client.js +263 -0
  442. package/dist/src/integrations/anthropic/client.js.map +7 -0
  443. package/dist/src/integrations/claude-code/agent-bridge.js +768 -0
  444. package/dist/src/integrations/claude-code/agent-bridge.js.map +7 -0
  445. package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js +459 -0
  446. package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js.map +7 -0
  447. package/dist/src/integrations/claude-code/lifecycle-hooks.js +254 -0
  448. package/dist/src/integrations/claude-code/lifecycle-hooks.js.map +7 -0
  449. package/dist/src/integrations/claude-code/post-task-hooks.js +545 -0
  450. package/dist/src/integrations/claude-code/post-task-hooks.js.map +7 -0
  451. package/dist/src/integrations/claude-code/subagent-client-stub.js +20 -0
  452. package/dist/src/integrations/claude-code/subagent-client-stub.js.map +7 -0
  453. package/dist/src/integrations/claude-code/subagent-client.js +511 -0
  454. package/dist/src/integrations/claude-code/subagent-client.js.map +7 -0
  455. package/dist/src/integrations/claude-code/task-coordinator.js +360 -0
  456. package/dist/src/integrations/claude-code/task-coordinator.js.map +7 -0
  457. package/dist/src/integrations/linear/auth.js +337 -0
  458. package/dist/src/integrations/linear/auth.js.map +7 -0
  459. package/dist/src/integrations/linear/auto-sync.js +258 -0
  460. package/dist/src/integrations/linear/auto-sync.js.map +7 -0
  461. package/dist/src/integrations/linear/client.js +634 -0
  462. package/dist/src/integrations/linear/client.js.map +7 -0
  463. package/dist/src/integrations/linear/config.js +130 -0
  464. package/dist/src/integrations/linear/config.js.map +7 -0
  465. package/dist/src/integrations/linear/migration.js +361 -0
  466. package/dist/src/integrations/linear/migration.js.map +7 -0
  467. package/dist/src/integrations/linear/oauth-server.js +454 -0
  468. package/dist/src/integrations/linear/oauth-server.js.map +7 -0
  469. package/dist/src/integrations/linear/rest-client.js +213 -0
  470. package/dist/src/integrations/linear/rest-client.js.map +7 -0
  471. package/dist/src/integrations/linear/sync-manager.js +236 -0
  472. package/dist/src/integrations/linear/sync-manager.js.map +7 -0
  473. package/dist/src/integrations/linear/sync-service.js +231 -0
  474. package/dist/src/integrations/linear/sync-service.js.map +7 -0
  475. package/dist/src/integrations/linear/sync.js +782 -0
  476. package/dist/src/integrations/linear/sync.js.map +7 -0
  477. package/dist/src/integrations/linear/types.js +5 -0
  478. package/dist/src/integrations/linear/types.js.map +7 -0
  479. package/dist/src/integrations/linear/unified-sync.js +589 -0
  480. package/dist/src/integrations/linear/unified-sync.js.map +7 -0
  481. package/dist/src/integrations/linear/webhook-handler.js +219 -0
  482. package/dist/src/integrations/linear/webhook-handler.js.map +7 -0
  483. package/dist/src/integrations/linear/webhook-server.js +218 -0
  484. package/dist/src/integrations/linear/webhook-server.js.map +7 -0
  485. package/dist/src/integrations/linear/webhook.js +291 -0
  486. package/dist/src/integrations/linear/webhook.js.map +7 -0
  487. package/dist/src/integrations/mcp/handlers/code-execution-handlers.js +266 -0
  488. package/dist/src/integrations/mcp/handlers/code-execution-handlers.js.map +7 -0
  489. package/dist/src/integrations/mcp/handlers/context-handlers.js +257 -0
  490. package/dist/src/integrations/mcp/handlers/context-handlers.js.map +7 -0
  491. package/dist/src/integrations/mcp/handlers/discovery-handlers.js +497 -0
  492. package/dist/src/integrations/mcp/handlers/discovery-handlers.js.map +7 -0
  493. package/dist/src/integrations/mcp/handlers/index.js +166 -0
  494. package/dist/src/integrations/mcp/handlers/index.js.map +7 -0
  495. package/dist/src/integrations/mcp/handlers/linear-handlers.js +247 -0
  496. package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +7 -0
  497. package/dist/src/integrations/mcp/handlers/skill-handlers.js +529 -0
  498. package/dist/src/integrations/mcp/handlers/skill-handlers.js.map +7 -0
  499. package/dist/src/integrations/mcp/handlers/task-handlers.js +239 -0
  500. package/dist/src/integrations/mcp/handlers/task-handlers.js.map +7 -0
  501. package/dist/src/integrations/mcp/handlers/trace-handlers.js +308 -0
  502. package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +7 -0
  503. package/dist/src/integrations/mcp/index.js +23 -0
  504. package/dist/src/integrations/mcp/index.js.map +7 -0
  505. package/dist/src/integrations/mcp/middleware/tool-scoring.js +356 -0
  506. package/dist/src/integrations/mcp/middleware/tool-scoring.js.map +7 -0
  507. package/dist/src/integrations/mcp/refactored-server.js +374 -0
  508. package/dist/src/integrations/mcp/refactored-server.js.map +7 -0
  509. package/dist/src/integrations/mcp/remote-server.js +682 -0
  510. package/dist/src/integrations/mcp/remote-server.js.map +7 -0
  511. package/dist/src/integrations/mcp/schemas.js +147 -0
  512. package/dist/src/integrations/mcp/schemas.js.map +7 -0
  513. package/dist/src/integrations/mcp/server.js +1975 -0
  514. package/dist/src/integrations/mcp/server.js.map +7 -0
  515. package/dist/src/integrations/mcp/tool-definitions-code.js +125 -0
  516. package/dist/src/integrations/mcp/tool-definitions-code.js.map +7 -0
  517. package/dist/src/integrations/mcp/tool-definitions.js +702 -0
  518. package/dist/src/integrations/mcp/tool-definitions.js.map +7 -0
  519. package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js +860 -0
  520. package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js.map +7 -0
  521. package/dist/src/integrations/ralph/context/context-budget-manager.js +301 -0
  522. package/dist/src/integrations/ralph/context/context-budget-manager.js.map +7 -0
  523. package/dist/src/integrations/ralph/context/stackmemory-context-loader.js +360 -0
  524. package/dist/src/integrations/ralph/context/stackmemory-context-loader.js.map +7 -0
  525. package/dist/src/integrations/ralph/coordination/enhanced-coordination.js +410 -0
  526. package/dist/src/integrations/ralph/coordination/enhanced-coordination.js.map +7 -0
  527. package/dist/src/integrations/ralph/index.js +18 -0
  528. package/dist/src/integrations/ralph/index.js.map +7 -0
  529. package/dist/src/integrations/ralph/learning/pattern-learner.js +401 -0
  530. package/dist/src/integrations/ralph/learning/pattern-learner.js.map +7 -0
  531. package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js +448 -0
  532. package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js.map +7 -0
  533. package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js +294 -0
  534. package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js.map +7 -0
  535. package/dist/src/integrations/ralph/monitoring/swarm-registry.js +108 -0
  536. package/dist/src/integrations/ralph/monitoring/swarm-registry.js.map +7 -0
  537. package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js +463 -0
  538. package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js.map +7 -0
  539. package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js +400 -0
  540. package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js.map +7 -0
  541. package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js +473 -0
  542. package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js.map +7 -0
  543. package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js +388 -0
  544. package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js.map +7 -0
  545. package/dist/src/integrations/ralph/performance/performance-optimizer.js +358 -0
  546. package/dist/src/integrations/ralph/performance/performance-optimizer.js.map +7 -0
  547. package/dist/src/integrations/ralph/recovery/crash-recovery.js +462 -0
  548. package/dist/src/integrations/ralph/recovery/crash-recovery.js.map +7 -0
  549. package/dist/src/integrations/ralph/state/state-reconciler.js +404 -0
  550. package/dist/src/integrations/ralph/state/state-reconciler.js.map +7 -0
  551. package/dist/src/integrations/ralph/swarm/git-workflow-manager.js +428 -0
  552. package/dist/src/integrations/ralph/swarm/git-workflow-manager.js.map +7 -0
  553. package/dist/src/integrations/ralph/swarm/swarm-coordinator.js +996 -0
  554. package/dist/src/integrations/ralph/swarm/swarm-coordinator.js.map +7 -0
  555. package/dist/src/integrations/ralph/types.js +5 -0
  556. package/dist/src/integrations/ralph/types.js.map +7 -0
  557. package/dist/src/integrations/ralph/visualization/ralph-debugger.js +585 -0
  558. package/dist/src/integrations/ralph/visualization/ralph-debugger.js.map +7 -0
  559. package/dist/src/mcp/stackmemory-mcp-server.js +554 -0
  560. package/dist/src/mcp/stackmemory-mcp-server.js.map +7 -0
  561. package/dist/src/middleware/exponential-rate-limiter.js +289 -0
  562. package/dist/src/middleware/exponential-rate-limiter.js.map +7 -0
  563. package/dist/src/models/user.model.js +358 -0
  564. package/dist/src/models/user.model.js.map +7 -0
  565. package/dist/src/servers/production/auth-middleware.js +528 -0
  566. package/dist/src/servers/production/auth-middleware.js.map +7 -0
  567. package/dist/src/services/config-service.js +65 -0
  568. package/dist/src/services/config-service.js.map +7 -0
  569. package/dist/src/services/context-service.js +194 -0
  570. package/dist/src/services/context-service.js.map +7 -0
  571. package/dist/src/skills/api-discovery.js +354 -0
  572. package/dist/src/skills/api-discovery.js.map +7 -0
  573. package/dist/src/skills/api-skill.js +475 -0
  574. package/dist/src/skills/api-skill.js.map +7 -0
  575. package/dist/src/skills/claude-skills.js +1061 -0
  576. package/dist/src/skills/claude-skills.js.map +7 -0
  577. package/dist/src/skills/dashboard-launcher.js +216 -0
  578. package/dist/src/skills/dashboard-launcher.js.map +7 -0
  579. package/dist/src/skills/recursive-agent-orchestrator.js +575 -0
  580. package/dist/src/skills/recursive-agent-orchestrator.js.map +7 -0
  581. package/dist/src/skills/repo-ingestion-skill.js +609 -0
  582. package/dist/src/skills/repo-ingestion-skill.js.map +7 -0
  583. package/dist/src/skills/unified-rlm-orchestrator.js +404 -0
  584. package/dist/src/skills/unified-rlm-orchestrator.js.map +7 -0
  585. package/dist/src/types/task.js +5 -0
  586. package/dist/src/types/task.js.map +7 -0
  587. package/dist/src/utils/env.js +50 -0
  588. package/dist/src/utils/env.js.map +7 -0
  589. package/dist/src/utils/formatting.js +62 -0
  590. package/dist/src/utils/formatting.js.map +7 -0
  591. package/dist/src/utils/process-cleanup.js +136 -0
  592. package/dist/src/utils/process-cleanup.js.map +7 -0
  593. package/package.json +3 -3
  594. package/scripts/initialize.ts +16 -7
  595. package/scripts/install.sh +14 -62
  596. package/scripts/status.ts +111 -46
@@ -0,0 +1,300 @@
1
+ import { fileURLToPath as __fileURLToPath } from 'url';
2
+ import { dirname as __pathDirname } from 'path';
3
+ const __filename = __fileURLToPath(import.meta.url);
4
+ const __dirname = __pathDirname(__filename);
5
+ import { EventEmitter } from "events";
6
+ import { ClearSurvival } from "../session/clear-survival.js";
7
+ import { HandoffGenerator } from "../session/handoff-generator.js";
8
+ import * as fs from "fs/promises";
9
+ import * as path from "path";
10
+ class SessionMonitor extends EventEmitter {
11
+ config;
12
+ clearSurvival;
13
+ handoffGenerator;
14
+ frameManager;
15
+ dbManager;
16
+ monitorInterval;
17
+ lastActivityTime;
18
+ isMonitoring = false;
19
+ projectRoot;
20
+ // Track context state to avoid duplicate saves
21
+ lastContextCheck = { tokens: 0, percentage: 0 };
22
+ constructor(frameManager, dbManager, projectRoot, config) {
23
+ super();
24
+ this.frameManager = frameManager;
25
+ this.dbManager = dbManager;
26
+ this.projectRoot = projectRoot;
27
+ this.lastActivityTime = /* @__PURE__ */ new Date();
28
+ this.config = {
29
+ contextWarningThreshold: 0.6,
30
+ contextCriticalThreshold: 0.7,
31
+ contextAutoSaveThreshold: 0.85,
32
+ idleTimeoutMinutes: 5,
33
+ sessionEndHandoff: true,
34
+ checkIntervalSeconds: 30,
35
+ autoSaveLedger: true,
36
+ autoGenerateHandoff: true,
37
+ autoCompactOnThreshold: false,
38
+ ...config
39
+ };
40
+ this.clearSurvival = new ClearSurvival(
41
+ frameManager,
42
+ dbManager,
43
+ new HandoffGenerator(frameManager, dbManager, projectRoot),
44
+ projectRoot
45
+ );
46
+ this.handoffGenerator = new HandoffGenerator(
47
+ frameManager,
48
+ dbManager,
49
+ projectRoot
50
+ );
51
+ }
52
+ /**
53
+ * Start monitoring session
54
+ */
55
+ async start() {
56
+ if (this.isMonitoring) return;
57
+ this.isMonitoring = true;
58
+ this.lastActivityTime = /* @__PURE__ */ new Date();
59
+ this.monitorInterval = setInterval(
60
+ () => this.checkSession(),
61
+ this.config.checkIntervalSeconds * 1e3
62
+ );
63
+ this.registerExitHandlers();
64
+ this.emit("monitor:started");
65
+ console.log("\u{1F50D} Session monitor started");
66
+ }
67
+ /**
68
+ * Stop monitoring
69
+ */
70
+ async stop() {
71
+ if (!this.isMonitoring) return;
72
+ this.isMonitoring = false;
73
+ if (this.monitorInterval) {
74
+ clearInterval(this.monitorInterval);
75
+ this.monitorInterval = void 0;
76
+ }
77
+ if (this.config.sessionEndHandoff) {
78
+ await this.generateHandoff("session_end");
79
+ }
80
+ this.emit("monitor:stopped");
81
+ console.log("\u{1F6D1} Session monitor stopped");
82
+ }
83
+ /**
84
+ * Main monitoring check
85
+ */
86
+ async checkSession() {
87
+ try {
88
+ await this.checkContextUsage();
89
+ await this.checkIdleTimeout();
90
+ await this.checkCustomTriggers();
91
+ } catch (error) {
92
+ console.error("Monitor check failed:", error);
93
+ this.emit("monitor:error", error);
94
+ }
95
+ }
96
+ /**
97
+ * Check context usage and trigger actions
98
+ */
99
+ async checkContextUsage() {
100
+ const currentTokens = await this.estimateTokens();
101
+ const maxTokens = 1e5;
102
+ const percentage = currentTokens / maxTokens;
103
+ this.lastContextCheck = {
104
+ tokens: currentTokens,
105
+ percentage,
106
+ savedAt: this.lastContextCheck.savedAt
107
+ };
108
+ this.emit("context:usage", {
109
+ tokens: currentTokens,
110
+ maxTokens,
111
+ percentage,
112
+ status: this.getContextStatus(percentage)
113
+ });
114
+ if (percentage >= this.config.contextAutoSaveThreshold) {
115
+ await this.handleCriticalContext();
116
+ } else if (percentage >= this.config.contextCriticalThreshold) {
117
+ await this.handleHighContext();
118
+ } else if (percentage >= this.config.contextWarningThreshold) {
119
+ this.handleWarningContext();
120
+ }
121
+ }
122
+ /**
123
+ * Handle critical context (>85%)
124
+ */
125
+ async handleCriticalContext() {
126
+ if (this.lastContextCheck.savedAt) {
127
+ const minsSinceLastSave = (Date.now() - this.lastContextCheck.savedAt.getTime()) / 6e4;
128
+ if (minsSinceLastSave < 5) return;
129
+ }
130
+ console.log("\u{1F534} Critical context usage - auto-saving ledger");
131
+ if (this.config.autoSaveLedger) {
132
+ const ledger = await this.clearSurvival.saveContinuityLedger();
133
+ this.lastContextCheck.savedAt = /* @__PURE__ */ new Date();
134
+ this.emit("context:ledger_saved", {
135
+ compression: ledger.compression_ratio,
136
+ frames: ledger.active_frame_stack.length,
137
+ tasks: ledger.active_tasks.length
138
+ });
139
+ console.log("\u{1F4A1} Ledger saved. Run /clear to reset context");
140
+ if (this.config.autoCompactOnThreshold) {
141
+ this.emit("context:suggest_clear");
142
+ }
143
+ }
144
+ }
145
+ /**
146
+ * Handle high context (70-85%)
147
+ */
148
+ async handleHighContext() {
149
+ console.log("\u26A0\uFE0F High context usage - consider saving ledger");
150
+ this.emit("context:high", {
151
+ percentage: this.lastContextCheck.percentage,
152
+ suggestion: "Run: stackmemory clear --save"
153
+ });
154
+ }
155
+ /**
156
+ * Handle warning context (60-70%)
157
+ */
158
+ handleWarningContext() {
159
+ this.emit("context:warning", {
160
+ percentage: this.lastContextCheck.percentage
161
+ });
162
+ }
163
+ /**
164
+ * Check for idle timeout
165
+ */
166
+ async checkIdleTimeout() {
167
+ const idleMinutes = (Date.now() - this.lastActivityTime.getTime()) / 6e4;
168
+ if (idleMinutes >= this.config.idleTimeoutMinutes) {
169
+ if (this.config.autoGenerateHandoff) {
170
+ await this.generateHandoff("idle_timeout");
171
+ }
172
+ }
173
+ }
174
+ /**
175
+ * Generate handoff document
176
+ */
177
+ async generateHandoff(trigger) {
178
+ try {
179
+ const sessionId = await this.dbManager.getCurrentSessionId();
180
+ const handoff = await this.handoffGenerator.generateHandoff(sessionId);
181
+ this.emit("handoff:generated", {
182
+ trigger,
183
+ sessionDuration: handoff.session_duration_minutes,
184
+ tasksActive: handoff.active_tasks.filter(
185
+ (t) => t.status !== "completed"
186
+ ).length
187
+ });
188
+ console.log(`\u{1F4CB} Handoff generated (trigger: ${trigger})`);
189
+ } catch (error) {
190
+ console.error("Failed to generate handoff:", error);
191
+ }
192
+ }
193
+ /**
194
+ * Register process exit handlers
195
+ */
196
+ registerExitHandlers() {
197
+ const exitHandler = async (signal) => {
198
+ console.log(`
199
+ \u{1F4E6} Received ${signal}, saving session state...`);
200
+ try {
201
+ if (this.lastContextCheck.percentage > 0.3) {
202
+ await this.clearSurvival.saveContinuityLedger();
203
+ console.log("\u2705 Continuity ledger saved");
204
+ }
205
+ if (this.config.sessionEndHandoff) {
206
+ await this.generateHandoff("process_exit");
207
+ console.log("\u2705 Handoff document generated");
208
+ }
209
+ } catch (error) {
210
+ console.error("Error during exit handling:", error);
211
+ } finally {
212
+ process.exit(0);
213
+ }
214
+ };
215
+ process.once("SIGINT", () => exitHandler("SIGINT"));
216
+ process.once("SIGTERM", () => exitHandler("SIGTERM"));
217
+ process.once("beforeExit", () => exitHandler("beforeExit"));
218
+ }
219
+ /**
220
+ * Update last activity time
221
+ */
222
+ updateActivity() {
223
+ this.lastActivityTime = /* @__PURE__ */ new Date();
224
+ }
225
+ /**
226
+ * Check custom triggers (extensible)
227
+ */
228
+ async checkCustomTriggers() {
229
+ const hooksDir = path.join(this.projectRoot, ".stackmemory", "hooks");
230
+ try {
231
+ await fs.access(hooksDir);
232
+ const hooks = await fs.readdir(hooksDir);
233
+ for (const hook of hooks) {
234
+ if (hook.startsWith("monitor_") && hook.endsWith(".js")) {
235
+ try {
236
+ const hookPath = path.join(hooksDir, hook);
237
+ const hookModule = await import(hookPath);
238
+ if (hookModule.check) {
239
+ const shouldTrigger = await hookModule.check({
240
+ contextPercentage: this.lastContextCheck.percentage,
241
+ idleMinutes: (Date.now() - this.lastActivityTime.getTime()) / 6e4,
242
+ frameCount: (await this.frameManager.getStack()).frames.length
243
+ });
244
+ if (shouldTrigger && hookModule.action) {
245
+ await hookModule.action({
246
+ clearSurvival: this.clearSurvival,
247
+ handoffGenerator: this.handoffGenerator,
248
+ frameManager: this.frameManager
249
+ });
250
+ }
251
+ }
252
+ } catch (error) {
253
+ console.error(`Hook ${hook} failed:`, error);
254
+ }
255
+ }
256
+ }
257
+ } catch {
258
+ }
259
+ }
260
+ /**
261
+ * Estimate current token usage
262
+ */
263
+ async estimateTokens() {
264
+ const sessionId = await this.dbManager.getCurrentSessionId();
265
+ const frames = await this.dbManager.getRecentFrames(sessionId, 100);
266
+ const traces = await this.dbManager.getRecentTraces(sessionId, 100);
267
+ return frames.length * 200 + traces.length * 100;
268
+ }
269
+ /**
270
+ * Get context status based on percentage
271
+ */
272
+ getContextStatus(percentage) {
273
+ if (percentage >= this.config.contextAutoSaveThreshold) return "critical";
274
+ if (percentage >= this.config.contextCriticalThreshold) return "high";
275
+ if (percentage >= this.config.contextWarningThreshold) return "warning";
276
+ return "ok";
277
+ }
278
+ /**
279
+ * Get current monitor status
280
+ */
281
+ getStatus() {
282
+ return {
283
+ isMonitoring: this.isMonitoring,
284
+ lastActivity: this.lastActivityTime,
285
+ contextUsage: this.lastContextCheck,
286
+ config: this.config
287
+ };
288
+ }
289
+ /**
290
+ * Update configuration
291
+ */
292
+ updateConfig(config) {
293
+ this.config = { ...this.config, ...config };
294
+ this.emit("config:updated", this.config);
295
+ }
296
+ }
297
+ export {
298
+ SessionMonitor
299
+ };
300
+ //# sourceMappingURL=session-monitor.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/core/monitoring/session-monitor.ts"],
4
+ "sourcesContent": ["/**\n * Session Monitor for StackMemory\n * Automatically triggers features based on session events\n */\n\nimport { EventEmitter } from 'events';\nimport { ClearSurvival } from '../session/clear-survival.js';\nimport { HandoffGenerator } from '../session/handoff-generator.js';\nimport { FrameManager } from '../context/index.js';\nimport { DatabaseManager } from '../storage/database-manager.js';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\n\nexport interface MonitorConfig {\n // Context thresholds\n contextWarningThreshold: number; // Default 0.6 (60%)\n contextCriticalThreshold: number; // Default 0.7 (70%)\n contextAutoSaveThreshold: number; // Default 0.85 (85%)\n\n // Handoff triggers\n idleTimeoutMinutes: number; // Default 5 minutes\n sessionEndHandoff: boolean; // Default true\n\n // Monitoring intervals\n checkIntervalSeconds: number; // Default 30 seconds\n\n // Auto actions\n autoSaveLedger: boolean; // Default true\n autoGenerateHandoff: boolean; // Default true\n autoCompactOnThreshold: boolean; // Default false\n}\n\nexport class SessionMonitor extends EventEmitter {\n private config: MonitorConfig;\n private clearSurvival: ClearSurvival;\n private handoffGenerator: HandoffGenerator;\n private frameManager: FrameManager;\n private dbManager: DatabaseManager;\n private monitorInterval?: NodeJS.Timeout;\n private lastActivityTime: Date;\n private isMonitoring: boolean = false;\n private projectRoot: string;\n\n // Track context state to avoid duplicate saves\n private lastContextCheck: {\n tokens: number;\n percentage: number;\n savedAt?: Date;\n } = { tokens: 0, percentage: 0 };\n\n constructor(\n frameManager: FrameManager,\n dbManager: DatabaseManager,\n projectRoot: string,\n config?: Partial<MonitorConfig>\n ) {\n super();\n\n this.frameManager = frameManager;\n this.dbManager = dbManager;\n this.projectRoot = projectRoot;\n this.lastActivityTime = new Date();\n\n // Initialize config with defaults\n this.config = {\n contextWarningThreshold: 0.6,\n contextCriticalThreshold: 0.7,\n contextAutoSaveThreshold: 0.85,\n idleTimeoutMinutes: 5,\n sessionEndHandoff: true,\n checkIntervalSeconds: 30,\n autoSaveLedger: true,\n autoGenerateHandoff: true,\n autoCompactOnThreshold: false,\n ...config,\n };\n\n // Initialize components\n this.clearSurvival = new ClearSurvival(\n frameManager,\n dbManager,\n new HandoffGenerator(frameManager, dbManager, projectRoot),\n projectRoot\n );\n\n this.handoffGenerator = new HandoffGenerator(\n frameManager,\n dbManager,\n projectRoot\n );\n }\n\n /**\n * Start monitoring session\n */\n async start(): Promise<void> {\n if (this.isMonitoring) return;\n\n this.isMonitoring = true;\n this.lastActivityTime = new Date();\n\n // Start monitoring loop\n this.monitorInterval = setInterval(\n () => this.checkSession(),\n this.config.checkIntervalSeconds * 1000\n );\n\n // Register exit handlers\n this.registerExitHandlers();\n\n this.emit('monitor:started');\n console.log('\uD83D\uDD0D Session monitor started');\n }\n\n /**\n * Stop monitoring\n */\n async stop(): Promise<void> {\n if (!this.isMonitoring) return;\n\n this.isMonitoring = false;\n\n if (this.monitorInterval) {\n clearInterval(this.monitorInterval);\n this.monitorInterval = undefined;\n }\n\n // Generate final handoff if configured\n if (this.config.sessionEndHandoff) {\n await this.generateHandoff('session_end');\n }\n\n this.emit('monitor:stopped');\n console.log('\uD83D\uDED1 Session monitor stopped');\n }\n\n /**\n * Main monitoring check\n */\n private async checkSession(): Promise<void> {\n try {\n // Check context usage\n await this.checkContextUsage();\n\n // Check for idle timeout\n await this.checkIdleTimeout();\n\n // Check for other triggers\n await this.checkCustomTriggers();\n } catch (error: unknown) {\n console.error('Monitor check failed:', error);\n this.emit('monitor:error', error);\n }\n }\n\n /**\n * Check context usage and trigger actions\n */\n private async checkContextUsage(): Promise<void> {\n const currentTokens = await this.estimateTokens();\n const maxTokens = 100000; // Claude's approximate limit\n const percentage = currentTokens / maxTokens;\n\n // Store for comparison\n this.lastContextCheck = {\n tokens: currentTokens,\n percentage,\n savedAt: this.lastContextCheck.savedAt,\n };\n\n // Emit usage update\n this.emit('context:usage', {\n tokens: currentTokens,\n maxTokens,\n percentage,\n status: this.getContextStatus(percentage),\n });\n\n // Check thresholds and take action\n if (percentage >= this.config.contextAutoSaveThreshold) {\n await this.handleCriticalContext();\n } else if (percentage >= this.config.contextCriticalThreshold) {\n await this.handleHighContext();\n } else if (percentage >= this.config.contextWarningThreshold) {\n this.handleWarningContext();\n }\n }\n\n /**\n * Handle critical context (>85%)\n */\n private async handleCriticalContext(): Promise<void> {\n // Avoid duplicate saves within 5 minutes\n if (this.lastContextCheck.savedAt) {\n const minsSinceLastSave =\n (Date.now() - this.lastContextCheck.savedAt.getTime()) / 60000;\n if (minsSinceLastSave < 5) return;\n }\n\n console.log('\uD83D\uDD34 Critical context usage - auto-saving ledger');\n\n if (this.config.autoSaveLedger) {\n const ledger = await this.clearSurvival.saveContinuityLedger();\n this.lastContextCheck.savedAt = new Date();\n\n this.emit('context:ledger_saved', {\n compression: ledger.compression_ratio,\n frames: ledger.active_frame_stack.length,\n tasks: ledger.active_tasks.length,\n });\n\n // Suggest clear\n console.log('\uD83D\uDCA1 Ledger saved. Run /clear to reset context');\n\n if (this.config.autoCompactOnThreshold) {\n // This would trigger actual compaction\n // For now, just emit event for external handling\n this.emit('context:suggest_clear');\n }\n }\n }\n\n /**\n * Handle high context (70-85%)\n */\n private async handleHighContext(): Promise<void> {\n console.log('\u26A0\uFE0F High context usage - consider saving ledger');\n\n this.emit('context:high', {\n percentage: this.lastContextCheck.percentage,\n suggestion: 'Run: stackmemory clear --save',\n });\n }\n\n /**\n * Handle warning context (60-70%)\n */\n private handleWarningContext(): void {\n this.emit('context:warning', {\n percentage: this.lastContextCheck.percentage,\n });\n }\n\n /**\n * Check for idle timeout\n */\n private async checkIdleTimeout(): Promise<void> {\n const idleMinutes = (Date.now() - this.lastActivityTime.getTime()) / 60000;\n\n if (idleMinutes >= this.config.idleTimeoutMinutes) {\n if (this.config.autoGenerateHandoff) {\n await this.generateHandoff('idle_timeout');\n }\n }\n }\n\n /**\n * Generate handoff document\n */\n private async generateHandoff(trigger: string): Promise<void> {\n try {\n const sessionId = await this.dbManager.getCurrentSessionId();\n const handoff = await this.handoffGenerator.generateHandoff(sessionId);\n\n this.emit('handoff:generated', {\n trigger,\n sessionDuration: handoff.session_duration_minutes,\n tasksActive: handoff.active_tasks.filter(\n (t) => t.status !== 'completed'\n ).length,\n });\n\n console.log(`\uD83D\uDCCB Handoff generated (trigger: ${trigger})`);\n } catch (error: unknown) {\n console.error('Failed to generate handoff:', error);\n }\n }\n\n /**\n * Register process exit handlers\n */\n private registerExitHandlers(): void {\n const exitHandler = async (signal: string) => {\n console.log(`\\n\uD83D\uDCE6 Received ${signal}, saving session state...`);\n\n try {\n // Save ledger if context is significant\n if (this.lastContextCheck.percentage > 0.3) {\n await this.clearSurvival.saveContinuityLedger();\n console.log('\u2705 Continuity ledger saved');\n }\n\n // Generate handoff\n if (this.config.sessionEndHandoff) {\n await this.generateHandoff('process_exit');\n console.log('\u2705 Handoff document generated');\n }\n } catch (error: unknown) {\n console.error('Error during exit handling:', error);\n } finally {\n process.exit(0);\n }\n };\n\n // Handle various exit signals\n process.once('SIGINT', () => exitHandler('SIGINT'));\n process.once('SIGTERM', () => exitHandler('SIGTERM'));\n process.once('beforeExit', () => exitHandler('beforeExit'));\n }\n\n /**\n * Update last activity time\n */\n updateActivity(): void {\n this.lastActivityTime = new Date();\n }\n\n /**\n * Check custom triggers (extensible)\n */\n private async checkCustomTriggers(): Promise<void> {\n // Load custom triggers from hooks directory\n const hooksDir = path.join(this.projectRoot, '.stackmemory', 'hooks');\n\n try {\n await fs.access(hooksDir);\n const hooks = await fs.readdir(hooksDir);\n\n for (const hook of hooks) {\n if (hook.startsWith('monitor_') && hook.endsWith('.js')) {\n try {\n const hookPath = path.join(hooksDir, hook);\n const hookModule = await import(hookPath);\n\n if (hookModule.check) {\n const shouldTrigger = await hookModule.check({\n contextPercentage: this.lastContextCheck.percentage,\n idleMinutes:\n (Date.now() - this.lastActivityTime.getTime()) / 60000,\n frameCount: (await this.frameManager.getStack()).frames.length,\n });\n\n if (shouldTrigger && hookModule.action) {\n await hookModule.action({\n clearSurvival: this.clearSurvival,\n handoffGenerator: this.handoffGenerator,\n frameManager: this.frameManager,\n });\n }\n }\n } catch (error: unknown) {\n console.error(`Hook ${hook} failed:`, error);\n }\n }\n }\n } catch {\n // No hooks directory\n }\n }\n\n /**\n * Estimate current token usage\n */\n private async estimateTokens(): Promise<number> {\n const sessionId = await this.dbManager.getCurrentSessionId();\n const frames = await this.dbManager.getRecentFrames(sessionId, 100);\n const traces = await this.dbManager.getRecentTraces(sessionId, 100);\n\n // Rough estimation\n return frames.length * 200 + traces.length * 100;\n }\n\n /**\n * Get context status based on percentage\n */\n private getContextStatus(percentage: number): string {\n if (percentage >= this.config.contextAutoSaveThreshold) return 'critical';\n if (percentage >= this.config.contextCriticalThreshold) return 'high';\n if (percentage >= this.config.contextWarningThreshold) return 'warning';\n return 'ok';\n }\n\n /**\n * Get current monitor status\n */\n getStatus(): {\n isMonitoring: boolean;\n lastActivity: Date;\n contextUsage: typeof this.lastContextCheck;\n config: MonitorConfig;\n } {\n return {\n isMonitoring: this.isMonitoring,\n lastActivity: this.lastActivityTime,\n contextUsage: this.lastContextCheck,\n config: this.config,\n };\n }\n\n /**\n * Update configuration\n */\n updateConfig(config: Partial<MonitorConfig>): void {\n this.config = { ...this.config, ...config };\n this.emit('config:updated', this.config);\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,273 @@
1
+ import { fileURLToPath as __fileURLToPath } from 'url';
2
+ import { dirname as __pathDirname } from 'path';
3
+ const __filename = __fileURLToPath(import.meta.url);
4
+ const __dirname = __pathDirname(__filename);
5
+ import { EventEmitter } from "events";
6
+ import { logger } from "../monitoring/logger.js";
7
+ class ContextCache extends EventEmitter {
8
+ cache = /* @__PURE__ */ new Map();
9
+ accessOrder = [];
10
+ options;
11
+ stats;
12
+ currentSize = 0;
13
+ constructor(options = {}) {
14
+ super();
15
+ this.options = {
16
+ maxSize: options.maxSize || 100 * 1024 * 1024,
17
+ // 100MB default
18
+ maxItems: options.maxItems || 1e4,
19
+ defaultTTL: options.defaultTTL || 36e5,
20
+ // 1 hour default
21
+ enableStats: options.enableStats ?? true,
22
+ onEvict: options.onEvict || (() => {
23
+ })
24
+ };
25
+ this.stats = {
26
+ hits: 0,
27
+ misses: 0,
28
+ evictions: 0,
29
+ size: 0,
30
+ itemCount: 0,
31
+ hitRate: 0,
32
+ avgAccessTime: 0
33
+ };
34
+ }
35
+ /**
36
+ * Get item from cache
37
+ */
38
+ get(key) {
39
+ const startTime = Date.now();
40
+ const entry = this.cache.get(key);
41
+ if (!entry) {
42
+ this.stats.misses++;
43
+ this.updateHitRate();
44
+ return void 0;
45
+ }
46
+ if (entry.ttl && Date.now() - entry.createdAt > entry.ttl) {
47
+ this.delete(key);
48
+ this.stats.misses++;
49
+ this.updateHitRate();
50
+ return void 0;
51
+ }
52
+ entry.hits++;
53
+ entry.lastAccessed = Date.now();
54
+ this.updateAccessOrder(key);
55
+ this.stats.hits++;
56
+ this.updateHitRate();
57
+ this.updateAvgAccessTime(Date.now() - startTime);
58
+ return entry.value;
59
+ }
60
+ /**
61
+ * Set item in cache
62
+ */
63
+ set(key, value, options = {}) {
64
+ const size = options.size || this.estimateSize(value);
65
+ const ttl = options.ttl ?? this.options.defaultTTL;
66
+ if (this.cache.size >= this.options.maxItems || this.currentSize + size > this.options.maxSize) {
67
+ this.evict(size);
68
+ }
69
+ if (this.cache.has(key)) {
70
+ this.delete(key);
71
+ }
72
+ const entry = {
73
+ value,
74
+ size,
75
+ hits: 0,
76
+ createdAt: Date.now(),
77
+ lastAccessed: Date.now(),
78
+ ttl
79
+ };
80
+ this.cache.set(key, entry);
81
+ this.accessOrder.push(key);
82
+ this.currentSize += size;
83
+ this.stats.size = this.currentSize;
84
+ this.stats.itemCount = this.cache.size;
85
+ this.emit("set", key, value);
86
+ }
87
+ /**
88
+ * Delete item from cache
89
+ */
90
+ delete(key) {
91
+ const entry = this.cache.get(key);
92
+ if (!entry) return false;
93
+ this.cache.delete(key);
94
+ this.currentSize -= entry.size;
95
+ this.accessOrder = this.accessOrder.filter((k) => k !== key);
96
+ this.stats.size = this.currentSize;
97
+ this.stats.itemCount = this.cache.size;
98
+ this.emit("delete", key);
99
+ return true;
100
+ }
101
+ /**
102
+ * Clear entire cache
103
+ */
104
+ clear() {
105
+ const oldSize = this.cache.size;
106
+ this.cache.clear();
107
+ this.accessOrder = [];
108
+ this.currentSize = 0;
109
+ this.stats.size = 0;
110
+ this.stats.itemCount = 0;
111
+ this.stats.evictions += oldSize;
112
+ this.emit("clear");
113
+ }
114
+ /**
115
+ * Check if key exists and is valid
116
+ */
117
+ has(key) {
118
+ const entry = this.cache.get(key);
119
+ if (!entry) return false;
120
+ if (entry.ttl && Date.now() - entry.createdAt > entry.ttl) {
121
+ this.delete(key);
122
+ return false;
123
+ }
124
+ return true;
125
+ }
126
+ /**
127
+ * Get cache statistics
128
+ */
129
+ getStats() {
130
+ return { ...this.stats };
131
+ }
132
+ /**
133
+ * Get cache size info
134
+ */
135
+ getSize() {
136
+ return {
137
+ bytes: this.currentSize,
138
+ items: this.cache.size,
139
+ utilization: this.currentSize / this.options.maxSize
140
+ };
141
+ }
142
+ /**
143
+ * Preload multiple items
144
+ */
145
+ preload(entries) {
146
+ const startTime = Date.now();
147
+ for (const entry of entries) {
148
+ this.set(entry.key, entry.value, {
149
+ ttl: entry.ttl,
150
+ size: entry.size
151
+ });
152
+ }
153
+ logger.debug("Cache preload complete", {
154
+ items: entries.length,
155
+ duration: Date.now() - startTime,
156
+ cacheSize: this.currentSize
157
+ });
158
+ }
159
+ /**
160
+ * Get multiple items efficiently
161
+ */
162
+ getMany(keys) {
163
+ const results = /* @__PURE__ */ new Map();
164
+ for (const key of keys) {
165
+ const value = this.get(key);
166
+ if (value !== void 0) {
167
+ results.set(key, value);
168
+ }
169
+ }
170
+ return results;
171
+ }
172
+ /**
173
+ * Warm cache with computed values
174
+ */
175
+ async warmUp(keys, compute, options = {}) {
176
+ const { parallel = true } = options;
177
+ if (parallel) {
178
+ const promises = keys.map(async (key) => {
179
+ if (!this.has(key)) {
180
+ const value = await compute(key);
181
+ this.set(key, value, { ttl: options.ttl });
182
+ }
183
+ });
184
+ await Promise.all(promises);
185
+ } else {
186
+ for (const key of keys) {
187
+ if (!this.has(key)) {
188
+ const value = await compute(key);
189
+ this.set(key, value, { ttl: options.ttl });
190
+ }
191
+ }
192
+ }
193
+ }
194
+ /**
195
+ * Get or compute value
196
+ */
197
+ async getOrCompute(key, compute, options = {}) {
198
+ const cached = this.get(key);
199
+ if (cached !== void 0) {
200
+ return cached;
201
+ }
202
+ const value = await compute();
203
+ this.set(key, value, options);
204
+ return value;
205
+ }
206
+ // Private methods
207
+ evict(requiredSize) {
208
+ const startEvictions = this.stats.evictions;
209
+ while ((this.cache.size >= this.options.maxItems || this.currentSize + requiredSize > this.options.maxSize) && this.accessOrder.length > 0) {
210
+ const keyToEvict = this.accessOrder.shift();
211
+ const entry = this.cache.get(keyToEvict);
212
+ if (entry) {
213
+ this.cache.delete(keyToEvict);
214
+ this.currentSize -= entry.size;
215
+ this.stats.evictions++;
216
+ this.options.onEvict(keyToEvict, entry);
217
+ this.emit("evict", keyToEvict, entry);
218
+ }
219
+ }
220
+ if (this.stats.evictions > startEvictions) {
221
+ logger.debug("Cache eviction", {
222
+ evicted: this.stats.evictions - startEvictions,
223
+ currentSize: this.currentSize,
224
+ requiredSize
225
+ });
226
+ }
227
+ }
228
+ updateAccessOrder(key) {
229
+ const index = this.accessOrder.indexOf(key);
230
+ if (index > -1) {
231
+ this.accessOrder.splice(index, 1);
232
+ }
233
+ this.accessOrder.push(key);
234
+ }
235
+ estimateSize(value) {
236
+ if (typeof value === "string") {
237
+ return value.length * 2;
238
+ }
239
+ if (typeof value === "object" && value !== null) {
240
+ return JSON.stringify(value).length * 2;
241
+ }
242
+ return 8;
243
+ }
244
+ updateHitRate() {
245
+ const total = this.stats.hits + this.stats.misses;
246
+ this.stats.hitRate = total > 0 ? this.stats.hits / total : 0;
247
+ }
248
+ updateAvgAccessTime(time) {
249
+ const alpha = 0.1;
250
+ this.stats.avgAccessTime = this.stats.avgAccessTime * (1 - alpha) + time * alpha;
251
+ }
252
+ /**
253
+ * Cleanup expired entries periodically
254
+ */
255
+ startCleanup(intervalMs = 6e4) {
256
+ return setInterval(() => {
257
+ let cleaned = 0;
258
+ for (const [key, entry] of this.cache.entries()) {
259
+ if (entry.ttl && Date.now() - entry.createdAt > entry.ttl) {
260
+ this.delete(key);
261
+ cleaned++;
262
+ }
263
+ }
264
+ if (cleaned > 0) {
265
+ logger.debug("Cache cleanup", { cleaned, remaining: this.cache.size });
266
+ }
267
+ }, intervalMs);
268
+ }
269
+ }
270
+ export {
271
+ ContextCache
272
+ };
273
+ //# sourceMappingURL=context-cache.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/core/performance/context-cache.ts"],
4
+ "sourcesContent": ["/**\n * High-Performance Context Cache\n * LRU cache with TTL for frequently accessed context data\n */\n\nimport { EventEmitter } from 'events';\nimport { logger } from '../monitoring/logger.js';\n\nexport interface CacheEntry<T> {\n value: T;\n size: number;\n hits: number;\n createdAt: number;\n lastAccessed: number;\n ttl?: number;\n}\n\nexport interface CacheStats {\n hits: number;\n misses: number;\n evictions: number;\n size: number;\n itemCount: number;\n hitRate: number;\n avgAccessTime: number;\n}\n\nexport interface CacheOptions {\n maxSize?: number; // Max memory in bytes\n maxItems?: number; // Max number of items\n defaultTTL?: number; // Default TTL in ms\n enableStats?: boolean;\n onEvict?: (key: string, entry: CacheEntry<any>) => void;\n}\n\nexport class ContextCache<T = any> extends EventEmitter {\n private cache = new Map<string, CacheEntry<T>>();\n private accessOrder: string[] = [];\n private options: Required<CacheOptions>;\n private stats: CacheStats;\n private currentSize = 0;\n\n constructor(options: CacheOptions = {}) {\n super();\n this.options = {\n maxSize: options.maxSize || 100 * 1024 * 1024, // 100MB default\n maxItems: options.maxItems || 10000,\n defaultTTL: options.defaultTTL || 3600000, // 1 hour default\n enableStats: options.enableStats ?? true,\n onEvict: options.onEvict || (() => {}),\n };\n\n this.stats = {\n hits: 0,\n misses: 0,\n evictions: 0,\n size: 0,\n itemCount: 0,\n hitRate: 0,\n avgAccessTime: 0,\n };\n }\n\n /**\n * Get item from cache\n */\n get(key: string): T | undefined {\n const startTime = Date.now();\n const entry = this.cache.get(key);\n\n if (!entry) {\n this.stats.misses++;\n this.updateHitRate();\n return undefined;\n }\n\n // Check TTL\n if (entry.ttl && Date.now() - entry.createdAt > entry.ttl) {\n this.delete(key);\n this.stats.misses++;\n this.updateHitRate();\n return undefined;\n }\n\n // Update access tracking\n entry.hits++;\n entry.lastAccessed = Date.now();\n this.updateAccessOrder(key);\n\n this.stats.hits++;\n this.updateHitRate();\n this.updateAvgAccessTime(Date.now() - startTime);\n\n return entry.value;\n }\n\n /**\n * Set item in cache\n */\n set(\n key: string,\n value: T,\n options: { ttl?: number; size?: number } = {}\n ): void {\n const size = options.size || this.estimateSize(value);\n const ttl = options.ttl ?? this.options.defaultTTL;\n\n // Check if we need to evict\n if (\n this.cache.size >= this.options.maxItems ||\n this.currentSize + size > this.options.maxSize\n ) {\n this.evict(size);\n }\n\n // Remove old entry if exists\n if (this.cache.has(key)) {\n this.delete(key);\n }\n\n const entry: CacheEntry<T> = {\n value,\n size,\n hits: 0,\n createdAt: Date.now(),\n lastAccessed: Date.now(),\n ttl,\n };\n\n this.cache.set(key, entry);\n this.accessOrder.push(key);\n this.currentSize += size;\n this.stats.size = this.currentSize;\n this.stats.itemCount = this.cache.size;\n\n this.emit('set', key, value);\n }\n\n /**\n * Delete item from cache\n */\n delete(key: string): boolean {\n const entry = this.cache.get(key);\n if (!entry) return false;\n\n this.cache.delete(key);\n this.currentSize -= entry.size;\n this.accessOrder = this.accessOrder.filter((k: any) => k !== key);\n\n this.stats.size = this.currentSize;\n this.stats.itemCount = this.cache.size;\n\n this.emit('delete', key);\n return true;\n }\n\n /**\n * Clear entire cache\n */\n clear(): void {\n const oldSize = this.cache.size;\n this.cache.clear();\n this.accessOrder = [];\n this.currentSize = 0;\n\n this.stats.size = 0;\n this.stats.itemCount = 0;\n this.stats.evictions += oldSize;\n\n this.emit('clear');\n }\n\n /**\n * Check if key exists and is valid\n */\n has(key: string): boolean {\n const entry = this.cache.get(key);\n if (!entry) return false;\n\n // Check TTL\n if (entry.ttl && Date.now() - entry.createdAt > entry.ttl) {\n this.delete(key);\n return false;\n }\n\n return true;\n }\n\n /**\n * Get cache statistics\n */\n getStats(): CacheStats {\n return { ...this.stats };\n }\n\n /**\n * Get cache size info\n */\n getSize(): { bytes: number; items: number; utilization: number } {\n return {\n bytes: this.currentSize,\n items: this.cache.size,\n utilization: this.currentSize / this.options.maxSize,\n };\n }\n\n /**\n * Preload multiple items\n */\n preload(\n entries: Array<{ key: string; value: T; ttl?: number; size?: number }>\n ): void {\n const startTime = Date.now();\n\n for (const entry of entries) {\n this.set(entry.key, entry.value, {\n ttl: entry.ttl,\n size: entry.size,\n });\n }\n\n logger.debug('Cache preload complete', {\n items: entries.length,\n duration: Date.now() - startTime,\n cacheSize: this.currentSize,\n });\n }\n\n /**\n * Get multiple items efficiently\n */\n getMany(keys: string[]): Map<string, T> {\n const results = new Map<string, T>();\n\n for (const key of keys) {\n const value = this.get(key);\n if (value !== undefined) {\n results.set(key, value);\n }\n }\n\n return results;\n }\n\n /**\n * Warm cache with computed values\n */\n async warmUp(\n keys: string[],\n compute: (key: string) => Promise<T>,\n options: { ttl?: number; parallel?: boolean } = {}\n ): Promise<void> {\n const { parallel = true } = options;\n\n if (parallel) {\n const promises = keys.map(async (key) => {\n if (!this.has(key)) {\n const value = await compute(key);\n this.set(key, value, { ttl: options.ttl });\n }\n });\n await Promise.all(promises);\n } else {\n for (const key of keys) {\n if (!this.has(key)) {\n const value = await compute(key);\n this.set(key, value, { ttl: options.ttl });\n }\n }\n }\n }\n\n /**\n * Get or compute value\n */\n async getOrCompute(\n key: string,\n compute: () => Promise<T>,\n options: { ttl?: number; size?: number } = {}\n ): Promise<T> {\n const cached = this.get(key);\n if (cached !== undefined) {\n return cached;\n }\n\n const value = await compute();\n this.set(key, value, options);\n return value;\n }\n\n // Private methods\n\n private evict(requiredSize: number): void {\n const startEvictions = this.stats.evictions;\n\n // LRU eviction\n while (\n (this.cache.size >= this.options.maxItems ||\n this.currentSize + requiredSize > this.options.maxSize) &&\n this.accessOrder.length > 0\n ) {\n const keyToEvict = this.accessOrder.shift()!;\n const entry = this.cache.get(keyToEvict);\n\n if (entry) {\n this.cache.delete(keyToEvict);\n this.currentSize -= entry.size;\n this.stats.evictions++;\n this.options.onEvict(keyToEvict, entry);\n this.emit('evict', keyToEvict, entry);\n }\n }\n\n if (this.stats.evictions > startEvictions) {\n logger.debug('Cache eviction', {\n evicted: this.stats.evictions - startEvictions,\n currentSize: this.currentSize,\n requiredSize,\n });\n }\n }\n\n private updateAccessOrder(key: string): void {\n const index = this.accessOrder.indexOf(key);\n if (index > -1) {\n this.accessOrder.splice(index, 1);\n }\n this.accessOrder.push(key);\n }\n\n private estimateSize(value: T): number {\n // Simple size estimation - can be overridden for specific types\n if (typeof value === 'string') {\n return value.length * 2; // UTF-16\n }\n if (typeof value === 'object' && value !== null) {\n return JSON.stringify(value).length * 2;\n }\n return 8; // Default for primitives\n }\n\n private updateHitRate(): void {\n const total = this.stats.hits + this.stats.misses;\n this.stats.hitRate = total > 0 ? this.stats.hits / total : 0;\n }\n\n private updateAvgAccessTime(time: number): void {\n const alpha = 0.1; // Exponential moving average factor\n this.stats.avgAccessTime =\n this.stats.avgAccessTime * (1 - alpha) + time * alpha;\n }\n\n /**\n * Cleanup expired entries periodically\n */\n startCleanup(intervalMs: number = 60000): NodeJS.Timeout {\n return setInterval(() => {\n let cleaned = 0;\n for (const [key, entry] of this.cache.entries()) {\n if (entry.ttl && Date.now() - entry.createdAt > entry.ttl) {\n this.delete(key);\n cleaned++;\n }\n }\n if (cleaned > 0) {\n logger.debug('Cache cleanup', { cleaned, remaining: this.cache.size });\n }\n }, intervalMs);\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,11 @@
1
+ import { fileURLToPath as __fileURLToPath } from 'url';
2
+ import { dirname as __pathDirname } from 'path';
3
+ const __filename = __fileURLToPath(import.meta.url);
4
+ const __dirname = __pathDirname(__filename);
5
+ import { PerformanceMonitor } from "./monitor.js";
6
+ import { PerformanceBenchmark } from "./performance-benchmark.js";
7
+ export {
8
+ PerformanceBenchmark,
9
+ PerformanceMonitor
10
+ };
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/core/performance/index.ts"],
4
+ "sourcesContent": ["export { PerformanceMonitor } from './monitor.js';\nexport { PerformanceBenchmark } from './performance-benchmark.js';\n"],
5
+ "mappings": ";;;;AAAA,SAAS,0BAA0B;AACnC,SAAS,4BAA4B;",
6
+ "names": []
7
+ }