@stackmemoryai/stackmemory 0.3.1 → 0.3.5

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 (744) hide show
  1. package/README.md +69 -288
  2. package/dist/cli/commands/chromadb.js +267 -0
  3. package/dist/cli/commands/chromadb.js.map +7 -0
  4. package/dist/cli/commands/clear.js +191 -0
  5. package/dist/cli/commands/clear.js.map +7 -0
  6. package/dist/cli/commands/config.js +152 -1
  7. package/dist/cli/commands/config.js.map +2 -2
  8. package/dist/cli/commands/context.js +15 -5
  9. package/dist/cli/commands/context.js.map +2 -2
  10. package/dist/cli/commands/dashboard.js +178 -0
  11. package/dist/cli/commands/dashboard.js.map +7 -0
  12. package/dist/cli/commands/handoff.js +125 -8
  13. package/dist/cli/commands/handoff.js.map +2 -2
  14. package/dist/cli/commands/linear-create.js +132 -0
  15. package/dist/cli/commands/linear-create.js.map +7 -0
  16. package/dist/cli/commands/linear-list.js +69 -0
  17. package/dist/cli/commands/linear-list.js.map +7 -0
  18. package/dist/cli/commands/linear-migrate.js +40 -0
  19. package/dist/cli/commands/linear-migrate.js.map +7 -0
  20. package/dist/cli/commands/linear.js +185 -36
  21. package/dist/cli/commands/linear.js.map +2 -2
  22. package/dist/cli/commands/monitor.js +309 -0
  23. package/dist/cli/commands/monitor.js.map +7 -0
  24. package/dist/cli/commands/quality.js +414 -0
  25. package/dist/cli/commands/quality.js.map +7 -0
  26. package/dist/cli/commands/skills.js +262 -0
  27. package/dist/cli/commands/skills.js.map +7 -0
  28. package/dist/cli/commands/storage.js +275 -0
  29. package/dist/cli/commands/storage.js.map +7 -0
  30. package/dist/cli/commands/tui.js +66 -0
  31. package/dist/cli/commands/tui.js.map +7 -0
  32. package/dist/cli/commands/workflow.js +134 -0
  33. package/dist/cli/commands/workflow.js.map +7 -0
  34. package/dist/cli/index.js +109 -8
  35. package/dist/cli/index.js.map +3 -3
  36. package/dist/core/analytics/team-analytics.js +374 -0
  37. package/dist/core/analytics/team-analytics.js.map +7 -0
  38. package/dist/core/context/context-bridge.js +234 -0
  39. package/dist/core/context/context-bridge.js.map +7 -0
  40. package/dist/core/context/dual-stack-manager.js +850 -0
  41. package/dist/core/context/dual-stack-manager.js.map +7 -0
  42. package/dist/core/context/frame-handoff-manager.js +774 -0
  43. package/dist/core/context/frame-handoff-manager.js.map +7 -0
  44. package/dist/core/context/frame-manager.js +142 -13
  45. package/dist/core/context/frame-manager.js.map +2 -2
  46. package/dist/core/context/permission-manager.js +181 -0
  47. package/dist/core/context/permission-manager.js.map +7 -0
  48. package/dist/core/context/shared-context-layer.js +386 -0
  49. package/dist/core/context/shared-context-layer.js.map +7 -0
  50. package/dist/core/context/stack-merge-resolver.js +600 -0
  51. package/dist/core/context/stack-merge-resolver.js.map +7 -0
  52. package/dist/core/context/validation.js +121 -0
  53. package/dist/core/context/validation.js.map +7 -0
  54. package/dist/core/database/connection-pool.js +266 -175
  55. package/dist/core/database/connection-pool.js.map +2 -2
  56. package/dist/core/database/database-adapter.js +51 -0
  57. package/dist/core/database/database-adapter.js.map +7 -0
  58. package/dist/core/database/migration-manager.js +514 -0
  59. package/dist/core/database/migration-manager.js.map +7 -0
  60. package/dist/core/database/paradedb-adapter.js +970 -0
  61. package/dist/core/database/paradedb-adapter.js.map +7 -0
  62. package/dist/core/database/query-router.js +421 -0
  63. package/dist/core/database/query-router.js.map +7 -0
  64. package/dist/core/database/sqlite-adapter.js +547 -0
  65. package/dist/core/database/sqlite-adapter.js.map +7 -0
  66. package/dist/core/errors/index.js +21 -1
  67. package/dist/core/errors/index.js.map +2 -2
  68. package/dist/core/frame/workflow-templates-stub.js +42 -0
  69. package/dist/core/frame/workflow-templates-stub.js.map +7 -0
  70. package/dist/core/frame/workflow-templates.js +276 -0
  71. package/dist/core/frame/workflow-templates.js.map +7 -0
  72. package/dist/core/merge/conflict-detector.js +5 -2
  73. package/dist/core/merge/conflict-detector.js.map +2 -2
  74. package/dist/core/merge/resolution-engine.js +3 -14
  75. package/dist/core/merge/resolution-engine.js.map +2 -2
  76. package/dist/core/merge/stack-diff.js.map +2 -2
  77. package/dist/core/monitoring/logger.js +18 -3
  78. package/dist/core/monitoring/logger.js.map +2 -2
  79. package/dist/core/monitoring/session-monitor.js +296 -0
  80. package/dist/core/monitoring/session-monitor.js.map +7 -0
  81. package/dist/core/retrieval/context-retriever.js +475 -0
  82. package/dist/core/retrieval/context-retriever.js.map +7 -0
  83. package/dist/core/retrieval/graph-retrieval.js +658 -0
  84. package/dist/core/retrieval/graph-retrieval.js.map +7 -0
  85. package/dist/core/retrieval/hierarchical-retrieval.js +652 -0
  86. package/dist/core/retrieval/hierarchical-retrieval.js.map +7 -0
  87. package/dist/core/retrieval/retrieval-benchmarks.js +517 -0
  88. package/dist/core/retrieval/retrieval-benchmarks.js.map +7 -0
  89. package/dist/core/session/clear-survival-stub.js +49 -0
  90. package/dist/core/session/clear-survival-stub.js.map +7 -0
  91. package/dist/core/session/clear-survival.js +426 -0
  92. package/dist/core/session/clear-survival.js.map +7 -0
  93. package/dist/core/session/handoff-generator.js +339 -0
  94. package/dist/core/session/handoff-generator.js.map +7 -0
  95. package/dist/core/session/session-manager.js +61 -26
  96. package/dist/core/session/session-manager.js.map +3 -3
  97. package/dist/core/skills/index.js +3 -0
  98. package/dist/core/skills/index.js.map +7 -0
  99. package/dist/core/skills/skill-storage.js +749 -0
  100. package/dist/core/skills/skill-storage.js.map +7 -0
  101. package/dist/core/skills/types.js +189 -0
  102. package/dist/core/skills/types.js.map +7 -0
  103. package/dist/core/storage/chromadb-adapter.js +346 -0
  104. package/dist/core/storage/chromadb-adapter.js.map +7 -0
  105. package/dist/core/storage/railway-optimized-storage.js +550 -0
  106. package/dist/core/storage/railway-optimized-storage.js.map +7 -0
  107. package/dist/core/storage/remote-storage.js +456 -0
  108. package/dist/core/storage/remote-storage.js.map +7 -0
  109. package/dist/core/trace/trace-detector.js +136 -5
  110. package/dist/core/trace/trace-detector.js.map +2 -2
  111. package/dist/core/trace/trace-store.js.map +2 -2
  112. package/dist/features/tui/components/analytics-panel.js +136 -0
  113. package/dist/features/tui/components/analytics-panel.js.map +7 -0
  114. package/dist/features/tui/components/frame-visualizer.js +377 -0
  115. package/dist/features/tui/components/frame-visualizer.js.map +7 -0
  116. package/dist/features/tui/components/pr-tracker.js +123 -0
  117. package/dist/features/tui/components/pr-tracker.js.map +7 -0
  118. package/dist/features/tui/components/session-monitor.js +286 -0
  119. package/dist/features/tui/components/session-monitor.js.map +7 -0
  120. package/dist/features/tui/components/subagent-fleet.js +388 -0
  121. package/dist/features/tui/components/subagent-fleet.js.map +7 -0
  122. package/dist/features/tui/components/task-board.js +475 -0
  123. package/dist/features/tui/components/task-board.js.map +7 -0
  124. package/dist/features/tui/index.js +397 -0
  125. package/dist/features/tui/index.js.map +7 -0
  126. package/dist/features/tui/services/data-service.js +654 -0
  127. package/dist/features/tui/services/data-service.js.map +7 -0
  128. package/dist/features/tui/services/websocket-client.js +149 -0
  129. package/dist/features/tui/services/websocket-client.js.map +7 -0
  130. package/dist/features/tui/terminal-compat.js +205 -0
  131. package/dist/features/tui/terminal-compat.js.map +7 -0
  132. package/dist/features/tui/types.js +1 -0
  133. package/dist/features/tui/types.js.map +7 -0
  134. package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js +455 -0
  135. package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js.map +7 -0
  136. package/dist/integrations/claude-code/lifecycle-hooks.js +250 -0
  137. package/dist/integrations/claude-code/lifecycle-hooks.js.map +7 -0
  138. package/dist/integrations/claude-code/post-task-hooks.js +541 -0
  139. package/dist/integrations/claude-code/post-task-hooks.js.map +7 -0
  140. package/dist/integrations/linear/client.js +22 -4
  141. package/dist/integrations/linear/client.js.map +2 -2
  142. package/dist/integrations/linear/migration.js +299 -0
  143. package/dist/integrations/linear/migration.js.map +7 -0
  144. package/dist/integrations/linear/oauth-server.js +396 -0
  145. package/dist/integrations/linear/oauth-server.js.map +7 -0
  146. package/dist/integrations/linear/rest-client.js +199 -0
  147. package/dist/integrations/linear/rest-client.js.map +7 -0
  148. package/dist/integrations/linear/sync.js +14 -2
  149. package/dist/integrations/linear/sync.js.map +2 -2
  150. package/dist/integrations/linear/webhook-handler.js +200 -0
  151. package/dist/integrations/linear/webhook-handler.js.map +7 -0
  152. package/dist/integrations/mcp/handlers/skill-handlers.js +514 -0
  153. package/dist/integrations/mcp/handlers/skill-handlers.js.map +7 -0
  154. package/dist/integrations/mcp/middleware/tool-scoring.js +352 -0
  155. package/dist/integrations/mcp/middleware/tool-scoring.js.map +7 -0
  156. package/dist/integrations/mcp/refactored-server.js +31 -3
  157. package/dist/integrations/mcp/refactored-server.js.map +2 -2
  158. package/dist/integrations/mcp/server.js +25 -7
  159. package/dist/integrations/mcp/server.js.map +2 -2
  160. package/dist/mcp/stackmemory-mcp-server.js.map +1 -1
  161. package/dist/models/user.model.js +3 -0
  162. package/dist/models/user.model.js.map +2 -2
  163. package/dist/services/context-service.js.map +2 -2
  164. package/dist/skills/claude-skills.js +666 -0
  165. package/dist/skills/claude-skills.js.map +7 -0
  166. package/dist/utils/formatting.js +58 -0
  167. package/dist/utils/formatting.js.map +7 -0
  168. package/package.json +30 -24
  169. package/dist/cli/__tests__/index.test.js +0 -290
  170. package/dist/cli/__tests__/index.test.js.map +0 -7
  171. package/dist/core/config/__tests__/config-manager.test.js +0 -248
  172. package/dist/core/config/__tests__/config-manager.test.js.map +0 -7
  173. package/dist/core/context/__tests__/frame-manager.test.js +0 -879
  174. package/dist/core/context/__tests__/frame-manager.test.js.map +0 -7
  175. package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js +0 -379
  176. package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js.map +0 -7
  177. package/dist/core/digest/__tests__/frame-digest-integration.test.js +0 -230
  178. package/dist/core/digest/__tests__/frame-digest-integration.test.js.map +0 -7
  179. package/dist/core/errors/__tests__/error-handling.test.js +0 -270
  180. package/dist/core/errors/__tests__/error-handling.test.js.map +0 -7
  181. package/dist/core/merge/__tests__/conflict-scenarios.test.js +0 -414
  182. package/dist/core/merge/__tests__/conflict-scenarios.test.js.map +0 -7
  183. package/dist/core/query/__tests__/query-parser.test.js +0 -301
  184. package/dist/core/query/__tests__/query-parser.test.js.map +0 -7
  185. package/dist/core/query/__tests__/query-templates.test.js +0 -210
  186. package/dist/core/query/__tests__/query-templates.test.js.map +0 -7
  187. package/dist/core/trace/trace-detector.test.js +0 -401
  188. package/dist/core/trace/trace-detector.test.js.map +0 -7
  189. package/dist/features/tasks/__tests__/pebbles-task-store.test.js +0 -747
  190. package/dist/features/tasks/__tests__/pebbles-task-store.test.js.map +0 -7
  191. package/dist/integrations/linear/__tests__/auth.test.js +0 -558
  192. package/dist/integrations/linear/__tests__/auth.test.js.map +0 -7
  193. package/dist/integrations/linear/__tests__/sync-service.test.js +0 -760
  194. package/dist/integrations/linear/__tests__/sync-service.test.js.map +0 -7
  195. package/dist/integrations/mcp/__tests__/server.test.js +0 -798
  196. package/dist/integrations/mcp/__tests__/server.test.js.map +0 -7
  197. package/dist/scripts/benchmark-performance.d.ts +0 -7
  198. package/dist/scripts/benchmark-performance.d.ts.map +0 -1
  199. package/dist/scripts/benchmark-performance.js +0 -44
  200. package/dist/scripts/benchmark-performance.js.map +0 -1
  201. package/dist/scripts/cancel-duplicate-tasks.d.ts +0 -7
  202. package/dist/scripts/cancel-duplicate-tasks.d.ts.map +0 -1
  203. package/dist/scripts/cancel-duplicate-tasks.js +0 -172
  204. package/dist/scripts/cancel-duplicate-tasks.js.map +0 -1
  205. package/dist/scripts/cleanup-duplicate-tasks.d.ts +0 -12
  206. package/dist/scripts/cleanup-duplicate-tasks.d.ts.map +0 -1
  207. package/dist/scripts/cleanup-duplicate-tasks.js +0 -215
  208. package/dist/scripts/cleanup-duplicate-tasks.js.map +0 -1
  209. package/dist/scripts/initialize.d.ts +0 -6
  210. package/dist/scripts/initialize.d.ts.map +0 -1
  211. package/dist/scripts/initialize.js +0 -93
  212. package/dist/scripts/initialize.js.map +0 -1
  213. package/dist/scripts/list-linear-tasks.d.ts +0 -6
  214. package/dist/scripts/list-linear-tasks.d.ts.map +0 -1
  215. package/dist/scripts/list-linear-tasks.js +0 -121
  216. package/dist/scripts/list-linear-tasks.js.map +0 -1
  217. package/dist/scripts/merge-linear-duplicates-safe.d.ts +0 -7
  218. package/dist/scripts/merge-linear-duplicates-safe.d.ts.map +0 -1
  219. package/dist/scripts/merge-linear-duplicates-safe.js +0 -267
  220. package/dist/scripts/merge-linear-duplicates-safe.js.map +0 -1
  221. package/dist/scripts/show-linear-summary.d.ts +0 -6
  222. package/dist/scripts/show-linear-summary.d.ts.map +0 -1
  223. package/dist/scripts/show-linear-summary.js +0 -120
  224. package/dist/scripts/show-linear-summary.js.map +0 -1
  225. package/dist/scripts/status.d.ts +0 -6
  226. package/dist/scripts/status.d.ts.map +0 -1
  227. package/dist/scripts/status.js +0 -101
  228. package/dist/scripts/status.js.map +0 -1
  229. package/dist/src/agents/core/agent-task-manager.d.ts +0 -154
  230. package/dist/src/agents/core/agent-task-manager.d.ts.map +0 -1
  231. package/dist/src/agents/core/agent-task-manager.js +0 -504
  232. package/dist/src/agents/core/agent-task-manager.js.map +0 -1
  233. package/dist/src/agents/verifiers/base-verifier.d.ts +0 -112
  234. package/dist/src/agents/verifiers/base-verifier.d.ts.map +0 -1
  235. package/dist/src/agents/verifiers/base-verifier.js +0 -130
  236. package/dist/src/agents/verifiers/base-verifier.js.map +0 -1
  237. package/dist/src/agents/verifiers/formatter-verifier.d.ts +0 -14
  238. package/dist/src/agents/verifiers/formatter-verifier.d.ts.map +0 -1
  239. package/dist/src/agents/verifiers/formatter-verifier.js +0 -107
  240. package/dist/src/agents/verifiers/formatter-verifier.js.map +0 -1
  241. package/dist/src/agents/verifiers/llm-judge.d.ts +0 -46
  242. package/dist/src/agents/verifiers/llm-judge.d.ts.map +0 -1
  243. package/dist/src/agents/verifiers/llm-judge.js +0 -248
  244. package/dist/src/agents/verifiers/llm-judge.js.map +0 -1
  245. package/dist/src/cli/auto-detect.d.ts +0 -61
  246. package/dist/src/cli/auto-detect.d.ts.map +0 -1
  247. package/dist/src/cli/auto-detect.js +0 -350
  248. package/dist/src/cli/auto-detect.js.map +0 -1
  249. package/dist/src/cli/browser-test.d.ts +0 -6
  250. package/dist/src/cli/browser-test.d.ts.map +0 -1
  251. package/dist/src/cli/browser-test.js +0 -32
  252. package/dist/src/cli/browser-test.js.map +0 -1
  253. package/dist/src/cli/claude-sm.d.ts +0 -7
  254. package/dist/src/cli/claude-sm.d.ts.map +0 -1
  255. package/dist/src/cli/claude-sm.js +0 -412
  256. package/dist/src/cli/claude-sm.js.map +0 -1
  257. package/dist/src/cli/commands/agent.d.ts +0 -9
  258. package/dist/src/cli/commands/agent.d.ts.map +0 -1
  259. package/dist/src/cli/commands/agent.js +0 -303
  260. package/dist/src/cli/commands/agent.js.map +0 -1
  261. package/dist/src/cli/commands/config.d.ts +0 -6
  262. package/dist/src/cli/commands/config.d.ts.map +0 -1
  263. package/dist/src/cli/commands/config.js +0 -224
  264. package/dist/src/cli/commands/config.js.map +0 -1
  265. package/dist/src/cli/commands/context.d.ts +0 -7
  266. package/dist/src/cli/commands/context.d.ts.map +0 -1
  267. package/dist/src/cli/commands/context.js +0 -365
  268. package/dist/src/cli/commands/context.js.map +0 -1
  269. package/dist/src/cli/commands/handoff.d.ts +0 -6
  270. package/dist/src/cli/commands/handoff.d.ts.map +0 -1
  271. package/dist/src/cli/commands/handoff.js +0 -212
  272. package/dist/src/cli/commands/handoff.js.map +0 -1
  273. package/dist/src/cli/commands/linear-test.d.ts +0 -6
  274. package/dist/src/cli/commands/linear-test.d.ts.map +0 -1
  275. package/dist/src/cli/commands/linear-test.js +0 -123
  276. package/dist/src/cli/commands/linear-test.js.map +0 -1
  277. package/dist/src/cli/commands/linear.d.ts +0 -6
  278. package/dist/src/cli/commands/linear.d.ts.map +0 -1
  279. package/dist/src/cli/commands/linear.js +0 -393
  280. package/dist/src/cli/commands/linear.js.map +0 -1
  281. package/dist/src/cli/commands/log.d.ts +0 -7
  282. package/dist/src/cli/commands/log.d.ts.map +0 -1
  283. package/dist/src/cli/commands/log.js +0 -168
  284. package/dist/src/cli/commands/log.js.map +0 -1
  285. package/dist/src/cli/commands/onboard.d.ts +0 -8
  286. package/dist/src/cli/commands/onboard.d.ts.map +0 -1
  287. package/dist/src/cli/commands/onboard.js +0 -363
  288. package/dist/src/cli/commands/onboard.js.map +0 -1
  289. package/dist/src/cli/commands/projects.d.ts +0 -8
  290. package/dist/src/cli/commands/projects.d.ts.map +0 -1
  291. package/dist/src/cli/commands/projects.js +0 -220
  292. package/dist/src/cli/commands/projects.js.map +0 -1
  293. package/dist/src/cli/commands/search.d.ts +0 -7
  294. package/dist/src/cli/commands/search.d.ts.map +0 -1
  295. package/dist/src/cli/commands/search.js +0 -162
  296. package/dist/src/cli/commands/search.js.map +0 -1
  297. package/dist/src/cli/commands/session.d.ts +0 -7
  298. package/dist/src/cli/commands/session.d.ts.map +0 -1
  299. package/dist/src/cli/commands/session.js +0 -222
  300. package/dist/src/cli/commands/session.js.map +0 -1
  301. package/dist/src/cli/commands/tasks.d.ts +0 -7
  302. package/dist/src/cli/commands/tasks.d.ts.map +0 -1
  303. package/dist/src/cli/commands/tasks.js +0 -229
  304. package/dist/src/cli/commands/tasks.js.map +0 -1
  305. package/dist/src/cli/commands/webhook.d.ts +0 -3
  306. package/dist/src/cli/commands/webhook.d.ts.map +0 -1
  307. package/dist/src/cli/commands/webhook.js +0 -157
  308. package/dist/src/cli/commands/webhook.js.map +0 -1
  309. package/dist/src/cli/commands/worktree.d.ts +0 -8
  310. package/dist/src/cli/commands/worktree.d.ts.map +0 -1
  311. package/dist/src/cli/commands/worktree.js +0 -339
  312. package/dist/src/cli/commands/worktree.js.map +0 -1
  313. package/dist/src/cli/index.d.ts +0 -8
  314. package/dist/src/cli/index.d.ts.map +0 -1
  315. package/dist/src/cli/index.js +0 -995
  316. package/dist/src/cli/index.js.map +0 -1
  317. package/dist/src/cli/utils/viewer.d.ts +0 -3
  318. package/dist/src/cli/utils/viewer.d.ts.map +0 -1
  319. package/dist/src/cli/utils/viewer.js +0 -91
  320. package/dist/src/cli/utils/viewer.js.map +0 -1
  321. package/dist/src/core/config/config-manager.d.ts +0 -95
  322. package/dist/src/core/config/config-manager.d.ts.map +0 -1
  323. package/dist/src/core/config/config-manager.js +0 -359
  324. package/dist/src/core/config/config-manager.js.map +0 -1
  325. package/dist/src/core/config/types.d.ts +0 -72
  326. package/dist/src/core/config/types.d.ts.map +0 -1
  327. package/dist/src/core/config/types.js +0 -127
  328. package/dist/src/core/config/types.js.map +0 -1
  329. package/dist/src/core/context/auto-context.d.ts +0 -22
  330. package/dist/src/core/context/auto-context.d.ts.map +0 -1
  331. package/dist/src/core/context/auto-context.js +0 -77
  332. package/dist/src/core/context/auto-context.js.map +0 -1
  333. package/dist/src/core/context/compaction-handler.d.ts +0 -119
  334. package/dist/src/core/context/compaction-handler.d.ts.map +0 -1
  335. package/dist/src/core/context/compaction-handler.js +0 -306
  336. package/dist/src/core/context/compaction-handler.js.map +0 -1
  337. package/dist/src/core/context/frame-database.d.ts +0 -59
  338. package/dist/src/core/context/frame-database.d.ts.map +0 -1
  339. package/dist/src/core/context/frame-database.js +0 -333
  340. package/dist/src/core/context/frame-database.js.map +0 -1
  341. package/dist/src/core/context/frame-digest.d.ts +0 -59
  342. package/dist/src/core/context/frame-digest.d.ts.map +0 -1
  343. package/dist/src/core/context/frame-digest.js +0 -264
  344. package/dist/src/core/context/frame-digest.js.map +0 -1
  345. package/dist/src/core/context/frame-manager.d.ts +0 -112
  346. package/dist/src/core/context/frame-manager.d.ts.map +0 -1
  347. package/dist/src/core/context/frame-manager.js +0 -600
  348. package/dist/src/core/context/frame-manager.js.map +0 -1
  349. package/dist/src/core/context/frame-stack.d.ts +0 -85
  350. package/dist/src/core/context/frame-stack.d.ts.map +0 -1
  351. package/dist/src/core/context/frame-stack.js +0 -287
  352. package/dist/src/core/context/frame-stack.js.map +0 -1
  353. package/dist/src/core/context/frame-types.d.ts +0 -67
  354. package/dist/src/core/context/frame-types.d.ts.map +0 -1
  355. package/dist/src/core/context/frame-types.js +0 -6
  356. package/dist/src/core/context/frame-types.js.map +0 -1
  357. package/dist/src/core/context/index.d.ts +0 -11
  358. package/dist/src/core/context/index.d.ts.map +0 -1
  359. package/dist/src/core/context/index.js +0 -14
  360. package/dist/src/core/context/index.js.map +0 -1
  361. package/dist/src/core/context/model-aware-compaction.d.ts +0 -101
  362. package/dist/src/core/context/model-aware-compaction.d.ts.map +0 -1
  363. package/dist/src/core/context/model-aware-compaction.js +0 -616
  364. package/dist/src/core/context/model-aware-compaction.js.map +0 -1
  365. package/dist/src/core/context/refactored-frame-manager.d.ts +0 -99
  366. package/dist/src/core/context/refactored-frame-manager.d.ts.map +0 -1
  367. package/dist/src/core/context/refactored-frame-manager.js +0 -340
  368. package/dist/src/core/context/refactored-frame-manager.js.map +0 -1
  369. package/dist/src/core/database/batch-operations.d.ts +0 -118
  370. package/dist/src/core/database/batch-operations.d.ts.map +0 -1
  371. package/dist/src/core/database/batch-operations.js +0 -339
  372. package/dist/src/core/database/batch-operations.js.map +0 -1
  373. package/dist/src/core/database/connection-pool.d.ts +0 -79
  374. package/dist/src/core/database/connection-pool.d.ts.map +0 -1
  375. package/dist/src/core/database/connection-pool.js +0 -236
  376. package/dist/src/core/database/connection-pool.js.map +0 -1
  377. package/dist/src/core/database/query-cache.d.ts +0 -135
  378. package/dist/src/core/database/query-cache.d.ts.map +0 -1
  379. package/dist/src/core/database/query-cache.js +0 -294
  380. package/dist/src/core/database/query-cache.js.map +0 -1
  381. package/dist/src/core/digest/enhanced-hybrid-digest.d.ts +0 -125
  382. package/dist/src/core/digest/enhanced-hybrid-digest.d.ts.map +0 -1
  383. package/dist/src/core/digest/enhanced-hybrid-digest.js +0 -282
  384. package/dist/src/core/digest/enhanced-hybrid-digest.js.map +0 -1
  385. package/dist/src/core/digest/frame-digest-integration.d.ts +0 -67
  386. package/dist/src/core/digest/frame-digest-integration.d.ts.map +0 -1
  387. package/dist/src/core/digest/frame-digest-integration.js +0 -198
  388. package/dist/src/core/digest/frame-digest-integration.js.map +0 -1
  389. package/dist/src/core/digest/hybrid-digest-generator.d.ts +0 -76
  390. package/dist/src/core/digest/hybrid-digest-generator.d.ts.map +0 -1
  391. package/dist/src/core/digest/hybrid-digest-generator.js +0 -629
  392. package/dist/src/core/digest/hybrid-digest-generator.js.map +0 -1
  393. package/dist/src/core/digest/index.d.ts +0 -9
  394. package/dist/src/core/digest/index.d.ts.map +0 -1
  395. package/dist/src/core/digest/index.js +0 -9
  396. package/dist/src/core/digest/index.js.map +0 -1
  397. package/dist/src/core/digest/types.d.ts +0 -154
  398. package/dist/src/core/digest/types.d.ts.map +0 -1
  399. package/dist/src/core/digest/types.js +0 -18
  400. package/dist/src/core/digest/types.js.map +0 -1
  401. package/dist/src/core/errors/index.d.ts +0 -143
  402. package/dist/src/core/errors/index.d.ts.map +0 -1
  403. package/dist/src/core/errors/index.js +0 -282
  404. package/dist/src/core/errors/index.js.map +0 -1
  405. package/dist/src/core/errors/recovery.d.ts +0 -86
  406. package/dist/src/core/errors/recovery.d.ts.map +0 -1
  407. package/dist/src/core/errors/recovery.js +0 -274
  408. package/dist/src/core/errors/recovery.js.map +0 -1
  409. package/dist/src/core/merge/conflict-detector.d.ts +0 -122
  410. package/dist/src/core/merge/conflict-detector.d.ts.map +0 -1
  411. package/dist/src/core/merge/conflict-detector.js +0 -468
  412. package/dist/src/core/merge/conflict-detector.js.map +0 -1
  413. package/dist/src/core/merge/index.d.ts +0 -9
  414. package/dist/src/core/merge/index.d.ts.map +0 -1
  415. package/dist/src/core/merge/index.js +0 -9
  416. package/dist/src/core/merge/index.js.map +0 -1
  417. package/dist/src/core/merge/resolution-engine.d.ts +0 -120
  418. package/dist/src/core/merge/resolution-engine.d.ts.map +0 -1
  419. package/dist/src/core/merge/resolution-engine.js +0 -573
  420. package/dist/src/core/merge/resolution-engine.js.map +0 -1
  421. package/dist/src/core/merge/stack-diff.d.ts +0 -97
  422. package/dist/src/core/merge/stack-diff.d.ts.map +0 -1
  423. package/dist/src/core/merge/stack-diff.js +0 -516
  424. package/dist/src/core/merge/stack-diff.js.map +0 -1
  425. package/dist/src/core/merge/types.d.ts +0 -110
  426. package/dist/src/core/merge/types.d.ts.map +0 -1
  427. package/dist/src/core/merge/types.js +0 -6
  428. package/dist/src/core/merge/types.js.map +0 -1
  429. package/dist/src/core/monitoring/error-handler.d.ts +0 -46
  430. package/dist/src/core/monitoring/error-handler.d.ts.map +0 -1
  431. package/dist/src/core/monitoring/error-handler.js +0 -212
  432. package/dist/src/core/monitoring/error-handler.js.map +0 -1
  433. package/dist/src/core/monitoring/logger.d.ts +0 -24
  434. package/dist/src/core/monitoring/logger.d.ts.map +0 -1
  435. package/dist/src/core/monitoring/logger.js +0 -126
  436. package/dist/src/core/monitoring/logger.js.map +0 -1
  437. package/dist/src/core/monitoring/metrics.d.ts +0 -10
  438. package/dist/src/core/monitoring/metrics.d.ts.map +0 -1
  439. package/dist/src/core/monitoring/metrics.js +0 -152
  440. package/dist/src/core/monitoring/metrics.js.map +0 -1
  441. package/dist/src/core/monitoring/progress-tracker.d.ts +0 -95
  442. package/dist/src/core/monitoring/progress-tracker.d.ts.map +0 -1
  443. package/dist/src/core/monitoring/progress-tracker.js +0 -178
  444. package/dist/src/core/monitoring/progress-tracker.js.map +0 -1
  445. package/dist/src/core/performance/context-cache.d.ts +0 -109
  446. package/dist/src/core/performance/context-cache.d.ts.map +0 -1
  447. package/dist/src/core/performance/context-cache.js +0 -280
  448. package/dist/src/core/performance/context-cache.js.map +0 -1
  449. package/dist/src/core/performance/index.d.ts +0 -3
  450. package/dist/src/core/performance/index.d.ts.map +0 -1
  451. package/dist/src/core/performance/index.js +0 -3
  452. package/dist/src/core/performance/index.js.map +0 -1
  453. package/dist/src/core/performance/lazy-context-loader.d.ts +0 -93
  454. package/dist/src/core/performance/lazy-context-loader.d.ts.map +0 -1
  455. package/dist/src/core/performance/lazy-context-loader.js +0 -332
  456. package/dist/src/core/performance/lazy-context-loader.js.map +0 -1
  457. package/dist/src/core/performance/monitor.d.ts +0 -48
  458. package/dist/src/core/performance/monitor.d.ts.map +0 -1
  459. package/dist/src/core/performance/monitor.js +0 -226
  460. package/dist/src/core/performance/monitor.js.map +0 -1
  461. package/dist/src/core/performance/optimized-frame-context.d.ts +0 -74
  462. package/dist/src/core/performance/optimized-frame-context.d.ts.map +0 -1
  463. package/dist/src/core/performance/optimized-frame-context.js +0 -330
  464. package/dist/src/core/performance/optimized-frame-context.js.map +0 -1
  465. package/dist/src/core/performance/performance-benchmark.d.ts +0 -50
  466. package/dist/src/core/performance/performance-benchmark.d.ts.map +0 -1
  467. package/dist/src/core/performance/performance-benchmark.js +0 -290
  468. package/dist/src/core/performance/performance-benchmark.js.map +0 -1
  469. package/dist/src/core/performance/performance-profiler.d.ts +0 -151
  470. package/dist/src/core/performance/performance-profiler.d.ts.map +0 -1
  471. package/dist/src/core/performance/performance-profiler.js +0 -346
  472. package/dist/src/core/performance/performance-profiler.js.map +0 -1
  473. package/dist/src/core/performance/streaming-jsonl-parser.d.ts +0 -41
  474. package/dist/src/core/performance/streaming-jsonl-parser.d.ts.map +0 -1
  475. package/dist/src/core/performance/streaming-jsonl-parser.js +0 -193
  476. package/dist/src/core/performance/streaming-jsonl-parser.js.map +0 -1
  477. package/dist/src/core/persistence/postgres-adapter.d.ts +0 -31
  478. package/dist/src/core/persistence/postgres-adapter.d.ts.map +0 -1
  479. package/dist/src/core/persistence/postgres-adapter.js +0 -330
  480. package/dist/src/core/persistence/postgres-adapter.js.map +0 -1
  481. package/dist/src/core/projects/project-manager.d.ts +0 -130
  482. package/dist/src/core/projects/project-manager.d.ts.map +0 -1
  483. package/dist/src/core/projects/project-manager.js +0 -709
  484. package/dist/src/core/projects/project-manager.js.map +0 -1
  485. package/dist/src/core/query/query-parser.d.ts +0 -109
  486. package/dist/src/core/query/query-parser.d.ts.map +0 -1
  487. package/dist/src/core/query/query-parser.js +0 -415
  488. package/dist/src/core/query/query-parser.js.map +0 -1
  489. package/dist/src/core/query/query-templates.d.ts +0 -44
  490. package/dist/src/core/query/query-templates.d.ts.map +0 -1
  491. package/dist/src/core/query/query-templates.js +0 -326
  492. package/dist/src/core/query/query-templates.js.map +0 -1
  493. package/dist/src/core/retrieval/index.d.ts +0 -8
  494. package/dist/src/core/retrieval/index.d.ts.map +0 -1
  495. package/dist/src/core/retrieval/index.js +0 -8
  496. package/dist/src/core/retrieval/index.js.map +0 -1
  497. package/dist/src/core/retrieval/llm-context-retrieval.d.ts +0 -73
  498. package/dist/src/core/retrieval/llm-context-retrieval.d.ts.map +0 -1
  499. package/dist/src/core/retrieval/llm-context-retrieval.js +0 -597
  500. package/dist/src/core/retrieval/llm-context-retrieval.js.map +0 -1
  501. package/dist/src/core/retrieval/summary-generator.d.ts +0 -63
  502. package/dist/src/core/retrieval/summary-generator.d.ts.map +0 -1
  503. package/dist/src/core/retrieval/summary-generator.js +0 -622
  504. package/dist/src/core/retrieval/summary-generator.js.map +0 -1
  505. package/dist/src/core/retrieval/types.d.ts +0 -257
  506. package/dist/src/core/retrieval/types.d.ts.map +0 -1
  507. package/dist/src/core/retrieval/types.js +0 -18
  508. package/dist/src/core/retrieval/types.js.map +0 -1
  509. package/dist/src/core/session/index.d.ts +0 -2
  510. package/dist/src/core/session/index.d.ts.map +0 -1
  511. package/dist/src/core/session/index.js +0 -2
  512. package/dist/src/core/session/index.js.map +0 -1
  513. package/dist/src/core/session/session-manager.d.ts +0 -69
  514. package/dist/src/core/session/session-manager.d.ts.map +0 -1
  515. package/dist/src/core/session/session-manager.js +0 -311
  516. package/dist/src/core/session/session-manager.js.map +0 -1
  517. package/dist/src/core/trace/cli-trace-wrapper.d.ts +0 -23
  518. package/dist/src/core/trace/cli-trace-wrapper.d.ts.map +0 -1
  519. package/dist/src/core/trace/cli-trace-wrapper.js +0 -141
  520. package/dist/src/core/trace/cli-trace-wrapper.js.map +0 -1
  521. package/dist/src/core/trace/db-trace-wrapper.d.ts +0 -36
  522. package/dist/src/core/trace/db-trace-wrapper.d.ts.map +0 -1
  523. package/dist/src/core/trace/db-trace-wrapper.js +0 -252
  524. package/dist/src/core/trace/db-trace-wrapper.js.map +0 -1
  525. package/dist/src/core/trace/debug-trace.d.ts +0 -84
  526. package/dist/src/core/trace/debug-trace.d.ts.map +0 -1
  527. package/dist/src/core/trace/debug-trace.js +0 -402
  528. package/dist/src/core/trace/debug-trace.js.map +0 -1
  529. package/dist/src/core/trace/error-test.d.ts +0 -6
  530. package/dist/src/core/trace/error-test.d.ts.map +0 -1
  531. package/dist/src/core/trace/error-test.js +0 -128
  532. package/dist/src/core/trace/error-test.js.map +0 -1
  533. package/dist/src/core/trace/index.d.ts +0 -25
  534. package/dist/src/core/trace/index.d.ts.map +0 -1
  535. package/dist/src/core/trace/index.js +0 -121
  536. package/dist/src/core/trace/index.js.map +0 -1
  537. package/dist/src/core/trace/linear-api-wrapper.d.ts +0 -17
  538. package/dist/src/core/trace/linear-api-wrapper.d.ts.map +0 -1
  539. package/dist/src/core/trace/linear-api-wrapper.js +0 -205
  540. package/dist/src/core/trace/linear-api-wrapper.js.map +0 -1
  541. package/dist/src/core/trace/performance-test.d.ts +0 -6
  542. package/dist/src/core/trace/performance-test.d.ts.map +0 -1
  543. package/dist/src/core/trace/performance-test.js +0 -111
  544. package/dist/src/core/trace/performance-test.js.map +0 -1
  545. package/dist/src/core/trace/trace-demo.d.ts +0 -8
  546. package/dist/src/core/trace/trace-demo.d.ts.map +0 -1
  547. package/dist/src/core/trace/trace-demo.js +0 -154
  548. package/dist/src/core/trace/trace-demo.js.map +0 -1
  549. package/dist/src/core/trace/trace-detector.d.ts +0 -108
  550. package/dist/src/core/trace/trace-detector.d.ts.map +0 -1
  551. package/dist/src/core/trace/trace-detector.demo.d.ts +0 -5
  552. package/dist/src/core/trace/trace-detector.demo.d.ts.map +0 -1
  553. package/dist/src/core/trace/trace-detector.demo.js +0 -145
  554. package/dist/src/core/trace/trace-detector.demo.js.map +0 -1
  555. package/dist/src/core/trace/trace-detector.js +0 -425
  556. package/dist/src/core/trace/trace-detector.js.map +0 -1
  557. package/dist/src/core/trace/trace-store.d.ts +0 -60
  558. package/dist/src/core/trace/trace-store.d.ts.map +0 -1
  559. package/dist/src/core/trace/trace-store.js +0 -323
  560. package/dist/src/core/trace/trace-store.js.map +0 -1
  561. package/dist/src/core/trace/types.d.ts +0 -81
  562. package/dist/src/core/trace/types.d.ts.map +0 -1
  563. package/dist/src/core/trace/types.js +0 -70
  564. package/dist/src/core/trace/types.js.map +0 -1
  565. package/dist/src/core/types.d.ts +0 -35
  566. package/dist/src/core/types.d.ts.map +0 -1
  567. package/dist/src/core/types.js +0 -2
  568. package/dist/src/core/types.js.map +0 -1
  569. package/dist/src/core/utils/update-checker.d.ts +0 -38
  570. package/dist/src/core/utils/update-checker.d.ts.map +0 -1
  571. package/dist/src/core/utils/update-checker.js +0 -213
  572. package/dist/src/core/utils/update-checker.js.map +0 -1
  573. package/dist/src/core/worktree/worktree-manager.d.ts +0 -110
  574. package/dist/src/core/worktree/worktree-manager.d.ts.map +0 -1
  575. package/dist/src/core/worktree/worktree-manager.js +0 -456
  576. package/dist/src/core/worktree/worktree-manager.js.map +0 -1
  577. package/dist/src/features/analytics/api/analytics-api.d.ts +0 -24
  578. package/dist/src/features/analytics/api/analytics-api.d.ts.map +0 -1
  579. package/dist/src/features/analytics/api/analytics-api.js +0 -289
  580. package/dist/src/features/analytics/api/analytics-api.js.map +0 -1
  581. package/dist/src/features/analytics/core/analytics-service.d.ts +0 -29
  582. package/dist/src/features/analytics/core/analytics-service.d.ts.map +0 -1
  583. package/dist/src/features/analytics/core/analytics-service.js +0 -275
  584. package/dist/src/features/analytics/core/analytics-service.js.map +0 -1
  585. package/dist/src/features/analytics/index.d.ts +0 -12
  586. package/dist/src/features/analytics/index.d.ts.map +0 -1
  587. package/dist/src/features/analytics/index.js +0 -11
  588. package/dist/src/features/analytics/index.js.map +0 -1
  589. package/dist/src/features/analytics/queries/metrics-queries.d.ts +0 -11
  590. package/dist/src/features/analytics/queries/metrics-queries.d.ts.map +0 -1
  591. package/dist/src/features/analytics/queries/metrics-queries.js +0 -240
  592. package/dist/src/features/analytics/queries/metrics-queries.js.map +0 -1
  593. package/dist/src/features/analytics/types/metrics.d.ts +0 -60
  594. package/dist/src/features/analytics/types/metrics.d.ts.map +0 -1
  595. package/dist/src/features/analytics/types/metrics.js +0 -2
  596. package/dist/src/features/analytics/types/metrics.js.map +0 -1
  597. package/dist/src/features/browser/browser-mcp.d.ts +0 -94
  598. package/dist/src/features/browser/browser-mcp.d.ts.map +0 -1
  599. package/dist/src/features/browser/browser-mcp.js +0 -459
  600. package/dist/src/features/browser/browser-mcp.js.map +0 -1
  601. package/dist/src/features/tasks/pebbles-task-store.d.ts +0 -128
  602. package/dist/src/features/tasks/pebbles-task-store.d.ts.map +0 -1
  603. package/dist/src/features/tasks/pebbles-task-store.js +0 -572
  604. package/dist/src/features/tasks/pebbles-task-store.js.map +0 -1
  605. package/dist/src/features/tasks/task-aware-context.d.ts +0 -103
  606. package/dist/src/features/tasks/task-aware-context.d.ts.map +0 -1
  607. package/dist/src/features/tasks/task-aware-context.js +0 -412
  608. package/dist/src/features/tasks/task-aware-context.js.map +0 -1
  609. package/dist/src/index.d.ts +0 -21
  610. package/dist/src/index.d.ts.map +0 -1
  611. package/dist/src/index.js +0 -9
  612. package/dist/src/index.js.map +0 -1
  613. package/dist/src/integrations/linear/auth.d.ts +0 -99
  614. package/dist/src/integrations/linear/auth.d.ts.map +0 -1
  615. package/dist/src/integrations/linear/auth.js +0 -319
  616. package/dist/src/integrations/linear/auth.js.map +0 -1
  617. package/dist/src/integrations/linear/auto-sync.d.ts +0 -77
  618. package/dist/src/integrations/linear/auto-sync.d.ts.map +0 -1
  619. package/dist/src/integrations/linear/auto-sync.js +0 -268
  620. package/dist/src/integrations/linear/auto-sync.js.map +0 -1
  621. package/dist/src/integrations/linear/client.d.ts +0 -127
  622. package/dist/src/integrations/linear/client.d.ts.map +0 -1
  623. package/dist/src/integrations/linear/client.js +0 -446
  624. package/dist/src/integrations/linear/client.js.map +0 -1
  625. package/dist/src/integrations/linear/config.d.ts +0 -51
  626. package/dist/src/integrations/linear/config.d.ts.map +0 -1
  627. package/dist/src/integrations/linear/config.js +0 -103
  628. package/dist/src/integrations/linear/config.js.map +0 -1
  629. package/dist/src/integrations/linear/sync-manager.d.ts +0 -78
  630. package/dist/src/integrations/linear/sync-manager.d.ts.map +0 -1
  631. package/dist/src/integrations/linear/sync-manager.js +0 -235
  632. package/dist/src/integrations/linear/sync-manager.js.map +0 -1
  633. package/dist/src/integrations/linear/sync-service.d.ts +0 -46
  634. package/dist/src/integrations/linear/sync-service.d.ts.map +0 -1
  635. package/dist/src/integrations/linear/sync-service.js +0 -217
  636. package/dist/src/integrations/linear/sync-service.js.map +0 -1
  637. package/dist/src/integrations/linear/sync.d.ts +0 -125
  638. package/dist/src/integrations/linear/sync.d.ts.map +0 -1
  639. package/dist/src/integrations/linear/sync.js +0 -563
  640. package/dist/src/integrations/linear/sync.js.map +0 -1
  641. package/dist/src/integrations/linear/types.d.ts +0 -90
  642. package/dist/src/integrations/linear/types.d.ts.map +0 -1
  643. package/dist/src/integrations/linear/types.js +0 -2
  644. package/dist/src/integrations/linear/types.js.map +0 -1
  645. package/dist/src/integrations/linear/webhook-server.d.ts +0 -32
  646. package/dist/src/integrations/linear/webhook-server.d.ts.map +0 -1
  647. package/dist/src/integrations/linear/webhook-server.js +0 -190
  648. package/dist/src/integrations/linear/webhook-server.js.map +0 -1
  649. package/dist/src/integrations/linear/webhook.d.ts +0 -108
  650. package/dist/src/integrations/linear/webhook.d.ts.map +0 -1
  651. package/dist/src/integrations/linear/webhook.js +0 -291
  652. package/dist/src/integrations/linear/webhook.js.map +0 -1
  653. package/dist/src/integrations/mcp/handlers/context-handlers.d.ts +0 -39
  654. package/dist/src/integrations/mcp/handlers/context-handlers.d.ts.map +0 -1
  655. package/dist/src/integrations/mcp/handlers/context-handlers.js +0 -266
  656. package/dist/src/integrations/mcp/handlers/context-handlers.js.map +0 -1
  657. package/dist/src/integrations/mcp/handlers/index.d.ts +0 -37
  658. package/dist/src/integrations/mcp/handlers/index.d.ts.map +0 -1
  659. package/dist/src/integrations/mcp/handlers/index.js +0 -134
  660. package/dist/src/integrations/mcp/handlers/index.js.map +0 -1
  661. package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts +0 -33
  662. package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts.map +0 -1
  663. package/dist/src/integrations/mcp/handlers/linear-handlers.js +0 -251
  664. package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +0 -1
  665. package/dist/src/integrations/mcp/handlers/task-handlers.d.ts +0 -42
  666. package/dist/src/integrations/mcp/handlers/task-handlers.d.ts.map +0 -1
  667. package/dist/src/integrations/mcp/handlers/task-handlers.js +0 -238
  668. package/dist/src/integrations/mcp/handlers/task-handlers.js.map +0 -1
  669. package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts +0 -41
  670. package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts.map +0 -1
  671. package/dist/src/integrations/mcp/handlers/trace-handlers.js +0 -298
  672. package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +0 -1
  673. package/dist/src/integrations/mcp/index.d.ts +0 -13
  674. package/dist/src/integrations/mcp/index.d.ts.map +0 -1
  675. package/dist/src/integrations/mcp/index.js +0 -17
  676. package/dist/src/integrations/mcp/index.js.map +0 -1
  677. package/dist/src/integrations/mcp/refactored-server.d.ts +0 -76
  678. package/dist/src/integrations/mcp/refactored-server.d.ts.map +0 -1
  679. package/dist/src/integrations/mcp/refactored-server.js +0 -351
  680. package/dist/src/integrations/mcp/refactored-server.js.map +0 -1
  681. package/dist/src/integrations/mcp/server.d.ts +0 -54
  682. package/dist/src/integrations/mcp/server.d.ts.map +0 -1
  683. package/dist/src/integrations/mcp/server.js +0 -1616
  684. package/dist/src/integrations/mcp/server.js.map +0 -1
  685. package/dist/src/integrations/mcp/tool-definitions.d.ts +0 -44
  686. package/dist/src/integrations/mcp/tool-definitions.d.ts.map +0 -1
  687. package/dist/src/integrations/mcp/tool-definitions.js +0 -563
  688. package/dist/src/integrations/mcp/tool-definitions.js.map +0 -1
  689. package/dist/src/integrations/mcp/trace-test.d.ts +0 -5
  690. package/dist/src/integrations/mcp/trace-test.d.ts.map +0 -1
  691. package/dist/src/integrations/mcp/trace-test.js +0 -54
  692. package/dist/src/integrations/mcp/trace-test.js.map +0 -1
  693. package/dist/src/integrations/pg-aiguide/embedding-provider.d.ts +0 -48
  694. package/dist/src/integrations/pg-aiguide/embedding-provider.d.ts.map +0 -1
  695. package/dist/src/integrations/pg-aiguide/embedding-provider.js +0 -190
  696. package/dist/src/integrations/pg-aiguide/embedding-provider.js.map +0 -1
  697. package/dist/src/integrations/pg-aiguide/semantic-search.d.ts +0 -34
  698. package/dist/src/integrations/pg-aiguide/semantic-search.d.ts.map +0 -1
  699. package/dist/src/integrations/pg-aiguide/semantic-search.js +0 -176
  700. package/dist/src/integrations/pg-aiguide/semantic-search.js.map +0 -1
  701. package/dist/src/integrations/pg-aiguide/timescale-analytics.d.ts +0 -44
  702. package/dist/src/integrations/pg-aiguide/timescale-analytics.d.ts.map +0 -1
  703. package/dist/src/integrations/pg-aiguide/timescale-analytics.js +0 -215
  704. package/dist/src/integrations/pg-aiguide/timescale-analytics.js.map +0 -1
  705. package/dist/src/mcp/stackmemory-mcp-server.d.ts +0 -9
  706. package/dist/src/mcp/stackmemory-mcp-server.d.ts.map +0 -1
  707. package/dist/src/mcp/stackmemory-mcp-server.js +0 -519
  708. package/dist/src/mcp/stackmemory-mcp-server.js.map +0 -1
  709. package/dist/src/middleware/exponential-rate-limiter.d.ts +0 -78
  710. package/dist/src/middleware/exponential-rate-limiter.d.ts.map +0 -1
  711. package/dist/src/middleware/exponential-rate-limiter.js +0 -293
  712. package/dist/src/middleware/exponential-rate-limiter.js.map +0 -1
  713. package/dist/src/models/user.model.d.ts +0 -62
  714. package/dist/src/models/user.model.d.ts.map +0 -1
  715. package/dist/src/models/user.model.js +0 -311
  716. package/dist/src/models/user.model.js.map +0 -1
  717. package/dist/src/servers/production/auth-middleware.d.ts +0 -76
  718. package/dist/src/servers/production/auth-middleware.d.ts.map +0 -1
  719. package/dist/src/servers/production/auth-middleware.js +0 -558
  720. package/dist/src/servers/production/auth-middleware.js.map +0 -1
  721. package/dist/src/servers/railway/index.d.ts +0 -7
  722. package/dist/src/servers/railway/index.d.ts.map +0 -1
  723. package/dist/src/servers/railway/index.js +0 -401
  724. package/dist/src/servers/railway/index.js.map +0 -1
  725. package/dist/src/services/config-service.d.ts +0 -44
  726. package/dist/src/services/config-service.d.ts.map +0 -1
  727. package/dist/src/services/config-service.js +0 -61
  728. package/dist/src/services/config-service.js.map +0 -1
  729. package/dist/src/services/context-service.d.ts +0 -17
  730. package/dist/src/services/context-service.d.ts.map +0 -1
  731. package/dist/src/services/context-service.js +0 -173
  732. package/dist/src/services/context-service.js.map +0 -1
  733. package/dist/src/types/task.d.ts +0 -27
  734. package/dist/src/types/task.d.ts.map +0 -1
  735. package/dist/src/types/task.js +0 -2
  736. package/dist/src/types/task.js.map +0 -1
  737. package/dist/src/utils/logger.d.ts +0 -13
  738. package/dist/src/utils/logger.d.ts.map +0 -1
  739. package/dist/src/utils/logger.js +0 -52
  740. package/dist/src/utils/logger.js.map +0 -1
  741. package/dist/src/validation/schemas.d.ts +0 -633
  742. package/dist/src/validation/schemas.d.ts.map +0 -1
  743. package/dist/src/validation/schemas.js +0 -347
  744. package/dist/src/validation/schemas.js.map +0 -1
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/features/tui/services/data-service.ts"],
4
+ "sourcesContent": ["/**\n * Data Service\n * Manages data fetching and caching for TUI dashboard\n */\n\nimport { EventEmitter } from 'events';\nimport Database from 'better-sqlite3';\nimport { SessionManager } from '../../../core/session/session-manager.js';\nimport { FrameManager } from '../../../core/context/frame-manager.js';\nimport { PebblesTaskStore } from '../../tasks/pebbles-task-store.js';\nimport { existsSync, readFileSync } from 'fs';\nimport { join } from 'path';\nimport type {\n SessionData,\n LinearTask,\n FrameData,\n SubagentData,\n PRData,\n IssueData,\n AnalyticsData,\n} from '../types.js';\n\nexport class DataService extends EventEmitter {\n private db: Database.Database | null = null;\n private sessionManager: SessionManager | null = null;\n private frameManager: FrameManager | null = null;\n private taskStore: PebblesTaskStore | null = null;\n private linearMappings: Map<string, any> = new Map();\n private cache: Map<string, { data: any; timestamp: number }> = new Map();\n private cacheTimeout = 5000; // 5 seconds\n\n async initialize(): Promise<void> {\n try {\n // Initialize database with error handling\n try {\n const dbPath = process.env.PROJECT_ROOT\n ? `${process.env.PROJECT_ROOT}/.stackmemory/context.db`\n : `${process.cwd()}/.stackmemory/context.db`;\n\n if (existsSync(dbPath)) {\n this.db = new Database(dbPath);\n }\n } catch (dbError) {\n if (process.env.DEBUG) {\n console.log('Database not accessible, continuing without it');\n }\n }\n\n // Initialize task store for local synced tasks\n try {\n this.taskStore = new PebblesTaskStore();\n\n // Load Linear mappings if they exist\n const mappingsPath = join(\n process.env.PROJECT_ROOT || process.cwd(),\n '.stackmemory',\n 'linear-mappings.json'\n );\n if (existsSync(mappingsPath)) {\n const mappingsData = JSON.parse(readFileSync(mappingsPath, 'utf8'));\n mappingsData.forEach((mapping: any) => {\n this.linearMappings.set(mapping.stackmemoryId, mapping);\n });\n }\n } catch (tsError) {\n if (process.env.DEBUG) {\n console.log('Task store initialization failed:', tsError.message);\n }\n }\n\n // Initialize managers with error handling\n try {\n this.sessionManager = new SessionManager({\n enableMonitoring: true,\n });\n } catch (smError) {\n if (process.env.DEBUG) {\n console.log('SessionManager initialization failed:', smError.message);\n }\n // Continue without session manager\n }\n\n if (this.db) {\n try {\n this.frameManager = new FrameManager(this.db, 'tui');\n } catch (fmError) {\n if (process.env.DEBUG) {\n console.log('FrameManager initialization failed:', fmError.message);\n }\n // Continue without frame manager\n }\n }\n\n // Note: Linear clients removed - all syncing happens via webhook or scheduled scripts\n // The TUI only displays locally synced tasks from the task store\n if (process.env.DEBUG) {\n console.log(\n 'TUI: Using local task store only (no direct Linear API calls)'\n );\n }\n\n this.emit('data:ready');\n } catch (error) {\n if (process.env.DEBUG) {\n console.error('DataService initialization error:', error);\n }\n // Don't throw, just emit ready with mock data\n this.emit('data:ready');\n }\n }\n\n async getSessions(): Promise<SessionData[]> {\n const cached = this.getFromCache('sessions');\n if (cached) return cached;\n\n try {\n // Get active sessions from manager\n const activeSessions = this.sessionManager?.getActiveSessions() || [];\n\n // Try to get recent sessions from database\n let recentSessions = [];\n if (this.db) {\n try {\n const stmt = this.db.prepare(`\n SELECT * FROM sessions \n WHERE created_at > datetime('now', '-24 hours')\n ORDER BY created_at DESC\n LIMIT 20\n `);\n recentSessions = stmt.all() || [];\n } catch (dbError) {\n // Database table might not exist, continue with mock data\n if (process.env.DEBUG) {\n console.log('Sessions table not found, using mock data');\n }\n }\n }\n\n // If no real data, provide mock sessions for demo\n if (activeSessions.length === 0 && recentSessions.length === 0) {\n const mockSessions = this.getMockSessions();\n this.setCache('sessions', mockSessions);\n return mockSessions;\n }\n\n // Combine and format\n const sessions: SessionData[] = [\n ...activeSessions.map(this.formatSession),\n ...recentSessions.map(this.formatDatabaseSession),\n ];\n\n this.setCache('sessions', sessions);\n return sessions;\n } catch (error) {\n if (process.env.DEBUG) {\n console.error('Error getting sessions:', error);\n }\n return this.getMockSessions();\n }\n }\n\n async getTasks(): Promise<LinearTask[]> {\n const cached = this.getFromCache('tasks');\n if (cached) return cached;\n\n const tasks: LinearTask[] = [];\n\n // ONLY use locally synced tasks - no direct Linear API calls\n // Tasks should be synced via webhook or scheduled sync scripts\n if (this.taskStore) {\n try {\n const localTasks = this.taskStore.getActiveTasks();\n\n // Convert local tasks to TUI display format\n localTasks.forEach((localTask) => {\n const mapping = this.linearMappings.get(localTask.id);\n\n // Extract identifier from title (e.g., \"[ENG-123] Task title\")\n const identifierMatch = localTask.title.match(/\\[(\\w+-\\d+)\\]/);\n const identifier = identifierMatch\n ? identifierMatch[1]\n : mapping?.linearIdentifier || 'LOCAL-' + localTask.id.slice(-6);\n\n // Format local task for TUI display\n const linearTask: LinearTask = {\n id: mapping?.linearId || localTask.id,\n identifier: identifier,\n title: localTask.title.replace(/\\[\\w+-\\d+\\]\\s*/, ''), // Remove identifier from title\n description: localTask.description,\n state: this.mapLocalStatusToLinearState(localTask.status),\n priority: this.mapLocalPriorityToLinear(localTask.priority),\n estimate: localTask.estimated_effort\n ? Math.ceil(localTask.estimated_effort / 60)\n : undefined,\n assignee: localTask.assignee,\n createdAt: new Date(localTask.created_at * 1000).toISOString(),\n updatedAt: new Date(localTask.timestamp * 1000).toISOString(),\n // Add sync metadata\n lastSyncedAt: mapping?.lastSyncTimestamp\n ? new Date(mapping.lastSyncTimestamp).toISOString()\n : undefined,\n syncStatus: mapping ? 'synced' : 'local',\n };\n\n tasks.push(linearTask);\n });\n\n if (process.env.DEBUG) {\n console.log(\n `Loaded ${tasks.length} tasks from local store (no Linear API calls)`\n );\n }\n } catch (error) {\n if (process.env.DEBUG) {\n console.log('Failed to get local tasks:', error.message);\n }\n }\n }\n\n // If no local tasks, show helpful message instead of mock data\n if (tasks.length === 0) {\n console.log(\n '\u2139\uFE0F No local tasks found. Run \"npm run linear:sync\" to sync tasks from Linear.'\n );\n const mockTasks = this.getMockTasks();\n this.setCache('tasks', mockTasks);\n return mockTasks;\n }\n\n this.setCache('tasks', tasks);\n return tasks;\n }\n\n async getFrames(): Promise<FrameData[]> {\n const cached = this.getFromCache('frames');\n if (cached) return cached;\n\n try {\n const frames = this.frameManager?.getAllFrames() || [];\n\n // If no frames, return mock data\n if (frames.length === 0) {\n const mockFrames = this.getMockFrames();\n this.setCache('frames', mockFrames);\n return mockFrames;\n }\n\n const formatted = frames.map(this.formatFrame);\n this.setCache('frames', formatted);\n return formatted;\n } catch (error) {\n if (process.env.DEBUG) {\n console.error('Error getting frames:', error);\n }\n // Return mock frames on error\n const mockFrames = this.getMockFrames();\n this.setCache('frames', mockFrames);\n return mockFrames;\n }\n }\n\n async getAgents(): Promise<SubagentData[]> {\n const cached = this.getFromCache('agents');\n if (cached) return cached;\n\n try {\n // Mock data for now - would integrate with actual agent manager\n const agents: SubagentData[] = [\n {\n id: 'agent-1',\n type: 'analyzer',\n status: 'active',\n currentTask: {\n id: 'task-1',\n description: 'Analyzing codebase for performance issues',\n progress: 0.65,\n startTime: Date.now() - 120000,\n },\n tasksCompleted: 42,\n tasksFailed: 3,\n averageTime: 180000,\n successRate: 0.93,\n cpuUsage: 45,\n memoryUsage: 62,\n tokenUsage: 125000,\n },\n {\n id: 'agent-2',\n type: 'builder',\n status: 'idle',\n tasksCompleted: 28,\n tasksFailed: 1,\n averageTime: 240000,\n successRate: 0.96,\n cpuUsage: 12,\n memoryUsage: 38,\n tokenUsage: 85000,\n },\n {\n id: 'agent-3',\n type: 'tester',\n status: 'error',\n tasksCompleted: 15,\n tasksFailed: 5,\n averageTime: 90000,\n successRate: 0.75,\n lastError: {\n message: 'Test suite timeout',\n timestamp: Date.now() - 60000,\n recoverable: true,\n },\n cpuUsage: 0,\n memoryUsage: 25,\n tokenUsage: 45000,\n },\n ];\n\n this.setCache('agents', agents);\n return agents;\n } catch (error) {\n this.emit('error', error);\n return [];\n }\n }\n\n async getPRs(): Promise<PRData[]> {\n const cached = this.getFromCache('prs');\n if (cached) return cached;\n\n try {\n // Mock data - would integrate with GitHub API\n const prs: PRData[] = [\n {\n id: 'pr-1',\n number: 142,\n title: 'feat: Add TUI monitoring dashboard',\n state: 'open',\n draft: false,\n author: { login: 'stackmemory-bot' },\n reviews: [{ user: 'reviewer1', state: 'approved' }],\n checks: {\n total: 5,\n passed: 3,\n failed: 0,\n pending: 2,\n },\n createdAt: new Date(Date.now() - 3600000).toISOString(),\n updatedAt: new Date().toISOString(),\n additions: 1250,\n deletions: 85,\n changedFiles: 12,\n comments: 3,\n labels: ['enhancement', 'monitoring'],\n linearTask: 'STA-100',\n },\n ];\n\n this.setCache('prs', prs);\n return prs;\n } catch (error) {\n this.emit('error', error);\n return [];\n }\n }\n\n async getIssues(): Promise<IssueData[]> {\n const cached = this.getFromCache('issues');\n if (cached) return cached;\n\n try {\n // Mock data - would integrate with GitHub API\n const issues: IssueData[] = [\n {\n id: 'issue-1',\n number: 89,\n title: 'Session monitoring improvements needed',\n state: 'open',\n author: { login: 'user1' },\n assignees: ['stackmemory-bot'],\n labels: ['enhancement', 'monitoring'],\n createdAt: new Date(Date.now() - 86400000).toISOString(),\n updatedAt: new Date().toISOString(),\n comments: 5,\n },\n ];\n\n this.setCache('issues', issues);\n return issues;\n } catch (error) {\n this.emit('error', error);\n return [];\n }\n }\n\n async getAnalytics(): Promise<AnalyticsData> {\n const cached = this.getFromCache('analytics');\n if (cached) return cached;\n\n try {\n // Generate analytics data\n const analytics: AnalyticsData = {\n sessions: {\n labels: ['1h', '2h', '3h', '4h', '5h', '6h'],\n values: [5, 8, 12, 15, 18, 22],\n },\n tokens: {\n labels: ['1h', '2h', '3h', '4h', '5h', '6h'],\n values: [12000, 25000, 45000, 62000, 78000, 95000],\n },\n tasks: {\n completed: 45,\n inProgress: 12,\n todo: 28,\n velocity: [8, 12, 15, 18, 20],\n },\n quality: {\n testsPassed: 142,\n testsFailed: 3,\n coverage: 78,\n lintErrors: 0,\n },\n performance: {\n avgResponseTime: [120, 115, 108, 105, 110],\n errorRate: [0.02, 0.015, 0.01, 0.008, 0.005],\n throughput: [100, 120, 135, 140, 145],\n },\n };\n\n this.setCache('analytics', analytics);\n return analytics;\n } catch (error) {\n this.emit('error', error);\n return {\n sessions: { labels: [], values: [] },\n tokens: { labels: [], values: [] },\n tasks: { completed: 0, inProgress: 0, todo: 0, velocity: [] },\n quality: { testsPassed: 0, testsFailed: 0, coverage: 0, lintErrors: 0 },\n performance: { avgResponseTime: [], errorRate: [], throughput: [] },\n };\n }\n }\n\n private formatSession(session: any): SessionData {\n return {\n id: session.id,\n startTime: session.startTime,\n lastActivity: session.lastActivity,\n completed: session.completed,\n error: session.error,\n totalTokens: session.totalTokens,\n contextUsage: session.contextUsage || 0,\n filesEdited: session.filesEdited,\n commandsRun: session.commandsRun,\n errors: session.errors,\n primaryFile: session.primaryFile,\n gitBranch: session.gitBranch,\n lastCommit: session.lastCommit,\n linearTask: session.linearTask,\n agentType: session.agentType,\n recentActivities: session.recentActivities,\n };\n }\n\n private formatDatabaseSession(row: any): SessionData {\n return {\n id: row.id,\n startTime: new Date(row.created_at).getTime(),\n lastActivity: row.updated_at\n ? new Date(row.updated_at).getTime()\n : undefined,\n completed: row.status === 'completed',\n totalTokens: row.token_count,\n contextUsage: row.context_usage || 0,\n filesEdited: row.files_edited ? JSON.parse(row.files_edited) : [],\n commandsRun: row.commands_run || 0,\n };\n }\n\n private formatLinearTask(task: any): LinearTask {\n return {\n id: task.id,\n identifier: task.identifier,\n title: task.title,\n description: task.description,\n // Use Linear state.type for stable mapping ('unstarted'|'started'|...)\n state: task.state?.type || task.state?.name,\n priority: task.priority,\n estimate: task.estimate,\n dueDate: task.dueDate,\n assignee: task.assignee\n ? {\n id: task.assignee.id,\n name: task.assignee.name,\n email: task.assignee.email,\n }\n : undefined,\n labels: task.labels?.nodes.map((l: any) => l.name),\n project: task.project\n ? {\n id: task.project.id,\n name: task.project.name,\n key: task.project.key,\n }\n : undefined,\n };\n }\n\n private formatRestLinearTask(task: any): LinearTask {\n // Map Linear state.type to TUI display states\n const stateMap: Record<string, string> = {\n backlog: 'Backlog',\n unstarted: 'To Do',\n started: 'In Progress',\n completed: 'Done',\n canceled: 'Canceled',\n };\n\n return {\n id: task.id,\n identifier: task.identifier,\n title: task.title,\n description: task.description,\n state: stateMap[task.state.type] || task.state.name,\n priority: task.priority,\n estimate: task.estimate,\n assignee: task.assignee ? task.assignee.name : undefined,\n createdAt: task.createdAt,\n updatedAt: task.updatedAt,\n };\n }\n\n private formatFrame(frame: any): FrameData {\n return {\n id: frame.id,\n sessionId: frame.sessionId,\n parentId: frame.parentId,\n type: frame.type || 'leaf',\n inputs: frame.inputs,\n outputs: frame.outputs,\n tools: frame.tools,\n digest: frame.digest,\n timestamp: frame.timestamp,\n tokenCount: frame.tokenCount || 0,\n tier: frame.tier || 'hot',\n compressionRatio: frame.compressionRatio,\n score: frame.score,\n children: frame.children,\n references: frame.references,\n };\n }\n\n private getFromCache(key: string): any {\n const cached = this.cache.get(key);\n if (cached && Date.now() - cached.timestamp < this.cacheTimeout) {\n return cached.data;\n }\n return null;\n }\n\n private setCache(key: string, data: any): void {\n this.cache.set(key, { data, timestamp: Date.now() });\n }\n\n private mapLocalStatusToLinearState(status: string): string {\n const statusMap: Record<string, string> = {\n pending: 'To Do',\n in_progress: 'In Progress',\n completed: 'Done',\n cancelled: 'Canceled',\n blocked: 'To Do',\n };\n return statusMap[status] || 'To Do';\n }\n\n private mapLocalPriorityToLinear(priority: string): number {\n const priorityMap: Record<string, number> = {\n urgent: 0,\n high: 1,\n medium: 2,\n low: 3,\n };\n return priorityMap[priority] || 2;\n }\n\n cleanup(): void {\n if (this.db) {\n this.db.close();\n }\n this.cache.clear();\n }\n\n // Mock data methods for demo/offline mode\n private getMockSessions(): SessionData[] {\n const now = Date.now();\n return [\n {\n id: 'demo-session-1',\n startTime: now - 8100000, // 2h 15m ago\n lastActivity: now - 60000, // 1 minute ago\n completed: false,\n totalTokens: 45000,\n contextUsage: 0.45, // 45%\n filesEdited: ['src/components/Dashboard.tsx', 'src/hooks/useAuth.ts'],\n commandsRun: 23,\n primaryFile: 'src/components/Dashboard.tsx',\n gitBranch: 'feature/tui-dashboard',\n agentType: 'frontend',\n recentActivities: [\n {\n timestamp: now - 120000,\n type: 'file_edit' as const,\n description: 'Modified Dashboard.tsx',\n },\n {\n timestamp: now - 60000,\n type: 'command' as const,\n description: 'npm run test',\n },\n ],\n },\n {\n id: 'demo-session-2',\n startTime: now - 2700000, // 45m ago\n lastActivity: now - 300000, // 5 minutes ago\n completed: false,\n totalTokens: 22000,\n contextUsage: 0.22, // 22%\n filesEdited: ['src/api/endpoints.ts', 'src/middleware/auth.ts'],\n commandsRun: 15,\n primaryFile: 'src/api/endpoints.ts',\n gitBranch: 'main',\n agentType: 'backend',\n recentActivities: [\n {\n timestamp: now - 600000,\n type: 'file_edit' as const,\n description: 'Updated API endpoints',\n },\n ],\n },\n ];\n }\n\n private getMockFrames(): FrameData[] {\n return [\n {\n id: 'frame-1',\n sessionId: 'demo-session-1',\n type: 'root',\n tier: 'hot' as const,\n timestamp: new Date().toISOString(),\n tokenCount: 2500,\n score: 95,\n compressionRatio: 2.3,\n digest: 'Implementing React component with hooks',\n tools: ['Edit', 'Read', 'MultiEdit'],\n inputs: ['Create user dashboard'],\n outputs: ['Dashboard component created'],\n children: [],\n references: [],\n },\n {\n id: 'frame-2',\n sessionId: 'demo-session-1',\n type: 'branch',\n tier: 'warm' as const,\n timestamp: new Date(Date.now() - 3600000).toISOString(),\n tokenCount: 1800,\n score: 78,\n compressionRatio: 1.8,\n digest: 'Setting up API endpoints',\n tools: ['Write', 'Edit'],\n inputs: ['Setup REST API'],\n outputs: ['API routes configured'],\n children: [],\n references: [],\n },\n ];\n }\n\n private getMockTasks(): LinearTask[] {\n return [\n {\n id: 'task-1',\n identifier: 'STA-101',\n title: 'Implement TUI dashboard',\n state: 'In Progress',\n priority: 2,\n assignee: 'demo-user',\n createdAt: new Date(Date.now() - 86400000).toISOString(),\n updatedAt: new Date().toISOString(),\n },\n {\n id: 'task-2',\n identifier: 'STA-102',\n title: 'Add terminal compatibility',\n state: 'Done',\n priority: 1,\n assignee: 'demo-user',\n createdAt: new Date(Date.now() - 172800000).toISOString(),\n updatedAt: new Date().toISOString(),\n },\n ];\n }\n\n private getMockAgents(): SubagentData[] {\n return [\n {\n id: 'agent-1',\n name: 'code-reviewer',\n type: 'reviewer',\n status: 'idle',\n tasksCompleted: 45,\n averageTime: '2.3s',\n successRate: 98.5,\n lastActive: new Date().toISOString(),\n },\n {\n id: 'agent-2',\n name: 'test-runner',\n type: 'qa',\n status: 'active',\n tasksCompleted: 156,\n averageTime: '5.6s',\n successRate: 95.2,\n lastActive: new Date().toISOString(),\n },\n ];\n }\n\n private getMockPRs(): PRData[] {\n return [\n {\n id: 'pr-1',\n number: 123,\n title: 'feat: Add terminal compatibility layer',\n state: 'open',\n author: { login: 'demo-user' },\n assignees: [],\n labels: ['enhancement', 'tui'],\n createdAt: new Date(Date.now() - 86400000).toISOString(),\n updatedAt: new Date().toISOString(),\n comments: 3,\n reviews: 1,\n checks: {\n total: 5,\n passed: 5,\n failed: 0,\n pending: 0,\n },\n },\n ];\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,149 @@
1
+ import { EventEmitter } from "events";
2
+ import WebSocket from "ws";
3
+ class WebSocketClient extends EventEmitter {
4
+ ws = null;
5
+ url;
6
+ reconnectTimer = null;
7
+ reconnectAttempts = 0;
8
+ maxReconnectAttempts = 10;
9
+ reconnectDelay = 1e3;
10
+ constructor(url) {
11
+ super();
12
+ this.url = url;
13
+ }
14
+ async connect() {
15
+ return new Promise((resolve) => {
16
+ try {
17
+ const handleError = (error) => {
18
+ clearTimeout(connectionTimeout);
19
+ if (process.env.DEBUG) {
20
+ console.log("WebSocket connection failed:", error.message);
21
+ }
22
+ if (this.ws) {
23
+ this.ws.removeAllListeners();
24
+ this.ws.terminate();
25
+ this.ws = null;
26
+ }
27
+ resolve();
28
+ };
29
+ const connectionTimeout = setTimeout(() => {
30
+ if (this.ws) {
31
+ this.ws.removeAllListeners();
32
+ this.ws.terminate();
33
+ this.ws = null;
34
+ }
35
+ console.log("\u26A0\uFE0F Running in offline mode (no WebSocket server)");
36
+ this.emit("offline");
37
+ resolve();
38
+ }, 1e3);
39
+ try {
40
+ this.ws = new WebSocket(this.url);
41
+ } catch (wsError) {
42
+ handleError(wsError);
43
+ return;
44
+ }
45
+ this.ws.once("error", handleError);
46
+ this.ws.once("open", () => {
47
+ clearTimeout(connectionTimeout);
48
+ this.ws?.removeListener("error", handleError);
49
+ this.ws?.on("error", (error) => {
50
+ if (process.env.DEBUG) {
51
+ console.error("WebSocket error during operation:", error);
52
+ }
53
+ this.emit("error", error);
54
+ });
55
+ console.log("\u2705 WebSocket connected");
56
+ this.reconnectAttempts = 0;
57
+ this.emit("connected");
58
+ resolve();
59
+ });
60
+ this.ws.on("message", (data) => {
61
+ this.handleMessage(data);
62
+ });
63
+ this.ws.once("close", () => {
64
+ clearTimeout(connectionTimeout);
65
+ if (this.reconnectAttempts > 0) {
66
+ console.log("WebSocket disconnected");
67
+ this.emit("disconnected");
68
+ this.attemptReconnect();
69
+ }
70
+ resolve();
71
+ });
72
+ } catch (error) {
73
+ console.log("\u26A0\uFE0F Running in offline mode");
74
+ this.emit("offline");
75
+ resolve();
76
+ }
77
+ });
78
+ }
79
+ handleMessage(data) {
80
+ try {
81
+ const message = JSON.parse(data.toString());
82
+ switch (message.type) {
83
+ case "session:update":
84
+ this.emit("session:update", message.data);
85
+ break;
86
+ case "task:update":
87
+ this.emit("task:update", message.data);
88
+ break;
89
+ case "frame:update":
90
+ this.emit("frame:update", message.data);
91
+ break;
92
+ case "agent:status":
93
+ this.emit("agent:status", message.data);
94
+ break;
95
+ case "pr:update":
96
+ this.emit("pr:update", message.data);
97
+ break;
98
+ case "analytics:update":
99
+ this.emit("analytics:update", message.data);
100
+ break;
101
+ case "notification":
102
+ this.emit("notification", message.data);
103
+ break;
104
+ default:
105
+ this.emit("message", message);
106
+ }
107
+ } catch (error) {
108
+ console.error("Failed to parse WebSocket message:", error);
109
+ }
110
+ }
111
+ attemptReconnect() {
112
+ if (this.reconnectAttempts >= this.maxReconnectAttempts) {
113
+ this.emit("error", new Error("Max reconnection attempts reached"));
114
+ return;
115
+ }
116
+ this.reconnectAttempts++;
117
+ const delay = this.reconnectDelay * Math.pow(2, this.reconnectAttempts - 1);
118
+ console.log(`Attempting to reconnect in ${delay}ms (attempt ${this.reconnectAttempts}/${this.maxReconnectAttempts})`);
119
+ this.reconnectTimer = setTimeout(() => {
120
+ this.connect().catch((error) => {
121
+ console.error("Reconnection failed:", error);
122
+ });
123
+ }, delay);
124
+ }
125
+ send(type, data) {
126
+ if (this.ws && this.ws.readyState === WebSocket.OPEN) {
127
+ this.ws.send(JSON.stringify({ type, data }));
128
+ } else {
129
+ console.warn("WebSocket is not connected");
130
+ }
131
+ }
132
+ disconnect() {
133
+ if (this.reconnectTimer) {
134
+ clearTimeout(this.reconnectTimer);
135
+ this.reconnectTimer = null;
136
+ }
137
+ if (this.ws) {
138
+ this.ws.close();
139
+ this.ws = null;
140
+ }
141
+ }
142
+ isConnected() {
143
+ return this.ws !== null && this.ws.readyState === WebSocket.OPEN;
144
+ }
145
+ }
146
+ export {
147
+ WebSocketClient
148
+ };
149
+ //# sourceMappingURL=websocket-client.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/features/tui/services/websocket-client.ts"],
4
+ "sourcesContent": ["/**\n * WebSocket Client\n * Real-time data streaming for TUI dashboard\n */\n\nimport { EventEmitter } from 'events';\nimport WebSocket from 'ws';\n\nexport class WebSocketClient extends EventEmitter {\n private ws: WebSocket | null = null;\n private url: string;\n private reconnectTimer: NodeJS.Timeout | null = null;\n private reconnectAttempts = 0;\n private maxReconnectAttempts = 10;\n private reconnectDelay = 1000;\n\n constructor(url: string) {\n super();\n this.url = url;\n }\n\n async connect(): Promise<void> {\n return new Promise((resolve) => {\n try {\n // Add error handler before creating WebSocket to catch connection errors\n const handleError = (error: Error) => {\n clearTimeout(connectionTimeout);\n // Silent error handling - continue in offline mode\n if (process.env.DEBUG) {\n console.log('WebSocket connection failed:', error.message);\n }\n if (this.ws) {\n this.ws.removeAllListeners();\n this.ws.terminate();\n this.ws = null;\n }\n resolve(); // Always resolve to continue in offline mode\n };\n\n // Set a timeout for connection\n const connectionTimeout = setTimeout(() => {\n if (this.ws) {\n this.ws.removeAllListeners();\n this.ws.terminate();\n this.ws = null;\n }\n console.log('\u26A0\uFE0F Running in offline mode (no WebSocket server)');\n this.emit('offline');\n resolve();\n }, 1000); // Reduce timeout to 1 second\n\n try {\n this.ws = new WebSocket(this.url);\n } catch (wsError) {\n handleError(wsError as Error);\n return;\n }\n\n // Immediately add error handler to catch connection errors\n this.ws.once('error', handleError);\n\n this.ws.once('open', () => {\n clearTimeout(connectionTimeout);\n // Remove the error handler and add a new one for ongoing errors\n this.ws?.removeListener('error', handleError);\n this.ws?.on('error', (error: Error) => {\n if (process.env.DEBUG) {\n console.error('WebSocket error during operation:', error);\n }\n this.emit('error', error);\n });\n \n console.log('\u2705 WebSocket connected');\n this.reconnectAttempts = 0;\n this.emit('connected');\n resolve();\n });\n\n this.ws.on('message', (data: WebSocket.Data) => {\n this.handleMessage(data);\n });\n\n this.ws.once('close', () => {\n clearTimeout(connectionTimeout);\n if (this.reconnectAttempts > 0) {\n console.log('WebSocket disconnected');\n this.emit('disconnected');\n this.attemptReconnect();\n }\n // If this is the first close, just resolve\n resolve();\n });\n\n } catch (error) {\n // If anything fails, continue in offline mode\n console.log('\u26A0\uFE0F Running in offline mode');\n this.emit('offline');\n resolve();\n }\n });\n }\n\n private handleMessage(data: WebSocket.Data): void {\n try {\n const message = JSON.parse(data.toString());\n \n switch (message.type) {\n case 'session:update':\n this.emit('session:update', message.data);\n break;\n \n case 'task:update':\n this.emit('task:update', message.data);\n break;\n \n case 'frame:update':\n this.emit('frame:update', message.data);\n break;\n \n case 'agent:status':\n this.emit('agent:status', message.data);\n break;\n \n case 'pr:update':\n this.emit('pr:update', message.data);\n break;\n \n case 'analytics:update':\n this.emit('analytics:update', message.data);\n break;\n \n case 'notification':\n this.emit('notification', message.data);\n break;\n \n default:\n this.emit('message', message);\n }\n } catch (error) {\n console.error('Failed to parse WebSocket message:', error);\n }\n }\n\n private attemptReconnect(): void {\n if (this.reconnectAttempts >= this.maxReconnectAttempts) {\n this.emit('error', new Error('Max reconnection attempts reached'));\n return;\n }\n\n this.reconnectAttempts++;\n const delay = this.reconnectDelay * Math.pow(2, this.reconnectAttempts - 1);\n\n console.log(`Attempting to reconnect in ${delay}ms (attempt ${this.reconnectAttempts}/${this.maxReconnectAttempts})`);\n\n this.reconnectTimer = setTimeout(() => {\n this.connect().catch(error => {\n console.error('Reconnection failed:', error);\n });\n }, delay);\n }\n\n send(type: string, data: any): void {\n if (this.ws && this.ws.readyState === WebSocket.OPEN) {\n this.ws.send(JSON.stringify({ type, data }));\n } else {\n console.warn('WebSocket is not connected');\n }\n }\n\n disconnect(): void {\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n\n if (this.ws) {\n this.ws.close();\n this.ws = null;\n }\n }\n\n isConnected(): boolean {\n return this.ws !== null && this.ws.readyState === WebSocket.OPEN;\n }\n}"],
5
+ "mappings": "AAKA,SAAS,oBAAoB;AAC7B,OAAO,eAAe;AAEf,MAAM,wBAAwB,aAAa;AAAA,EACxC,KAAuB;AAAA,EACvB;AAAA,EACA,iBAAwC;AAAA,EACxC,oBAAoB;AAAA,EACpB,uBAAuB;AAAA,EACvB,iBAAiB;AAAA,EAEzB,YAAY,KAAa;AACvB,UAAM;AACN,SAAK,MAAM;AAAA,EACb;AAAA,EAEA,MAAM,UAAyB;AAC7B,WAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAI;AAEF,cAAM,cAAc,CAAC,UAAiB;AACpC,uBAAa,iBAAiB;AAE9B,cAAI,QAAQ,IAAI,OAAO;AACrB,oBAAQ,IAAI,gCAAgC,MAAM,OAAO;AAAA,UAC3D;AACA,cAAI,KAAK,IAAI;AACX,iBAAK,GAAG,mBAAmB;AAC3B,iBAAK,GAAG,UAAU;AAClB,iBAAK,KAAK;AAAA,UACZ;AACA,kBAAQ;AAAA,QACV;AAGA,cAAM,oBAAoB,WAAW,MAAM;AACzC,cAAI,KAAK,IAAI;AACX,iBAAK,GAAG,mBAAmB;AAC3B,iBAAK,GAAG,UAAU;AAClB,iBAAK,KAAK;AAAA,UACZ;AACA,kBAAQ,IAAI,6DAAmD;AAC/D,eAAK,KAAK,SAAS;AACnB,kBAAQ;AAAA,QACV,GAAG,GAAI;AAEP,YAAI;AACF,eAAK,KAAK,IAAI,UAAU,KAAK,GAAG;AAAA,QAClC,SAAS,SAAS;AAChB,sBAAY,OAAgB;AAC5B;AAAA,QACF;AAGA,aAAK,GAAG,KAAK,SAAS,WAAW;AAEjC,aAAK,GAAG,KAAK,QAAQ,MAAM;AACzB,uBAAa,iBAAiB;AAE9B,eAAK,IAAI,eAAe,SAAS,WAAW;AAC5C,eAAK,IAAI,GAAG,SAAS,CAAC,UAAiB;AACrC,gBAAI,QAAQ,IAAI,OAAO;AACrB,sBAAQ,MAAM,qCAAqC,KAAK;AAAA,YAC1D;AACA,iBAAK,KAAK,SAAS,KAAK;AAAA,UAC1B,CAAC;AAED,kBAAQ,IAAI,4BAAuB;AACnC,eAAK,oBAAoB;AACzB,eAAK,KAAK,WAAW;AACrB,kBAAQ;AAAA,QACV,CAAC;AAED,aAAK,GAAG,GAAG,WAAW,CAAC,SAAyB;AAC9C,eAAK,cAAc,IAAI;AAAA,QACzB,CAAC;AAED,aAAK,GAAG,KAAK,SAAS,MAAM;AAC1B,uBAAa,iBAAiB;AAC9B,cAAI,KAAK,oBAAoB,GAAG;AAC9B,oBAAQ,IAAI,wBAAwB;AACpC,iBAAK,KAAK,cAAc;AACxB,iBAAK,iBAAiB;AAAA,UACxB;AAEA,kBAAQ;AAAA,QACV,CAAC;AAAA,MAEH,SAAS,OAAO;AAEd,gBAAQ,IAAI,uCAA6B;AACzC,aAAK,KAAK,SAAS;AACnB,gBAAQ;AAAA,MACV;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEQ,cAAc,MAA4B;AAChD,QAAI;AACF,YAAM,UAAU,KAAK,MAAM,KAAK,SAAS,CAAC;AAE1C,cAAQ,QAAQ,MAAM;AAAA,QACpB,KAAK;AACH,eAAK,KAAK,kBAAkB,QAAQ,IAAI;AACxC;AAAA,QAEF,KAAK;AACH,eAAK,KAAK,eAAe,QAAQ,IAAI;AACrC;AAAA,QAEF,KAAK;AACH,eAAK,KAAK,gBAAgB,QAAQ,IAAI;AACtC;AAAA,QAEF,KAAK;AACH,eAAK,KAAK,gBAAgB,QAAQ,IAAI;AACtC;AAAA,QAEF,KAAK;AACH,eAAK,KAAK,aAAa,QAAQ,IAAI;AACnC;AAAA,QAEF,KAAK;AACH,eAAK,KAAK,oBAAoB,QAAQ,IAAI;AAC1C;AAAA,QAEF,KAAK;AACH,eAAK,KAAK,gBAAgB,QAAQ,IAAI;AACtC;AAAA,QAEF;AACE,eAAK,KAAK,WAAW,OAAO;AAAA,MAChC;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,MAAM,sCAAsC,KAAK;AAAA,IAC3D;AAAA,EACF;AAAA,EAEQ,mBAAyB;AAC/B,QAAI,KAAK,qBAAqB,KAAK,sBAAsB;AACvD,WAAK,KAAK,SAAS,IAAI,MAAM,mCAAmC,CAAC;AACjE;AAAA,IACF;AAEA,SAAK;AACL,UAAM,QAAQ,KAAK,iBAAiB,KAAK,IAAI,GAAG,KAAK,oBAAoB,CAAC;AAE1E,YAAQ,IAAI,8BAA8B,KAAK,eAAe,KAAK,iBAAiB,IAAI,KAAK,oBAAoB,GAAG;AAEpH,SAAK,iBAAiB,WAAW,MAAM;AACrC,WAAK,QAAQ,EAAE,MAAM,WAAS;AAC5B,gBAAQ,MAAM,wBAAwB,KAAK;AAAA,MAC7C,CAAC;AAAA,IACH,GAAG,KAAK;AAAA,EACV;AAAA,EAEA,KAAK,MAAc,MAAiB;AAClC,QAAI,KAAK,MAAM,KAAK,GAAG,eAAe,UAAU,MAAM;AACpD,WAAK,GAAG,KAAK,KAAK,UAAU,EAAE,MAAM,KAAK,CAAC,CAAC;AAAA,IAC7C,OAAO;AACL,cAAQ,KAAK,4BAA4B;AAAA,IAC3C;AAAA,EACF;AAAA,EAEA,aAAmB;AACjB,QAAI,KAAK,gBAAgB;AACvB,mBAAa,KAAK,cAAc;AAChC,WAAK,iBAAiB;AAAA,IACxB;AAEA,QAAI,KAAK,IAAI;AACX,WAAK,GAAG,MAAM;AACd,WAAK,KAAK;AAAA,IACZ;AAAA,EACF;AAAA,EAEA,cAAuB;AACrB,WAAO,KAAK,OAAO,QAAQ,KAAK,GAAG,eAAe,UAAU;AAAA,EAC9D;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,205 @@
1
+ class TerminalCompatibility {
2
+ static instance;
3
+ terminalInfo;
4
+ constructor() {
5
+ this.terminalInfo = this.detectTerminal();
6
+ }
7
+ static getInstance() {
8
+ if (!this.instance) {
9
+ this.instance = new TerminalCompatibility();
10
+ }
11
+ return this.instance;
12
+ }
13
+ detectTerminal() {
14
+ const termEnv = process.env.TERM || "";
15
+ const termProgram = process.env.TERM_PROGRAM || "";
16
+ const isInsideTmux = !!process.env.TMUX;
17
+ const isGhostty = termEnv.includes("ghostty") || termProgram === "ghostty";
18
+ const isIterm2 = termProgram === "iTerm.app";
19
+ const isTerminalApp = termProgram === "Apple_Terminal";
20
+ let type = "unknown";
21
+ if (isGhostty) {
22
+ type = "ghostty";
23
+ } else if (isInsideTmux) {
24
+ type = "tmux";
25
+ } else if (isIterm2) {
26
+ type = "iterm2";
27
+ } else if (isTerminalApp) {
28
+ type = "terminal";
29
+ } else if (termEnv.includes("xterm")) {
30
+ type = "xterm";
31
+ }
32
+ const supportsTrueColor = this.checkTrueColorSupport();
33
+ const supportsUnicode = this.checkUnicodeSupport();
34
+ const recommendedConfig = this.getRecommendedConfig(type, isInsideTmux);
35
+ return {
36
+ type,
37
+ isInsideTmux,
38
+ supportsTrueColor,
39
+ supportsUnicode,
40
+ termEnv,
41
+ recommendedConfig
42
+ };
43
+ }
44
+ checkTrueColorSupport() {
45
+ const colorterm = process.env.COLORTERM;
46
+ if (colorterm === "truecolor" || colorterm === "24bit") {
47
+ return true;
48
+ }
49
+ const termProgram = process.env.TERM_PROGRAM || "";
50
+ if (["iTerm.app", "Hyper", "vscode"].includes(termProgram)) {
51
+ return true;
52
+ }
53
+ return false;
54
+ }
55
+ checkUnicodeSupport() {
56
+ const lang = process.env.LANG || "";
57
+ const lcAll = process.env.LC_ALL || "";
58
+ const lcCtype = process.env.LC_CTYPE || "";
59
+ const hasUtf8 = [lang, lcAll, lcCtype].some(
60
+ (v) => v.toLowerCase().includes("utf-8") || v.toLowerCase().includes("utf8")
61
+ );
62
+ return hasUtf8;
63
+ }
64
+ getRecommendedConfig(type, isInsideTmux) {
65
+ const baseConfig = {
66
+ smartCSR: true,
67
+ fullUnicode: true,
68
+ forceUnicode: null,
69
+ dockBorders: true,
70
+ terminal: "xterm-256color",
71
+ title: "StackMemory TUI Dashboard",
72
+ warnings: false
73
+ };
74
+ switch (type) {
75
+ case "ghostty":
76
+ return {
77
+ ...baseConfig,
78
+ smartCSR: false,
79
+ // Disable smart cursor restore
80
+ terminal: "xterm",
81
+ // Use basic xterm instead of xterm-256color
82
+ dockBorders: false,
83
+ // Can cause rendering issues
84
+ artificalCursor: true,
85
+ // Use artificial cursor
86
+ grabKeys: false,
87
+ // Don't grab all keys
88
+ sendFocus: false
89
+ // Don't send focus events
90
+ };
91
+ case "tmux":
92
+ return {
93
+ ...baseConfig,
94
+ terminal: isInsideTmux ? "screen-256color" : "xterm-256color",
95
+ smartCSR: !isInsideTmux,
96
+ // Disable inside tmux
97
+ sendFocus: false
98
+ };
99
+ case "iterm2":
100
+ return {
101
+ ...baseConfig,
102
+ terminal: "xterm-256color",
103
+ fullUnicode: true,
104
+ forceUnicode: true
105
+ };
106
+ case "terminal":
107
+ return {
108
+ ...baseConfig,
109
+ terminal: "xterm-256color",
110
+ fullUnicode: true
111
+ };
112
+ case "xterm":
113
+ default:
114
+ return {
115
+ ...baseConfig,
116
+ smartCSR: false,
117
+ fullUnicode: false,
118
+ forceUnicode: false
119
+ };
120
+ }
121
+ }
122
+ getTerminalInfo() {
123
+ return this.terminalInfo;
124
+ }
125
+ getBlessedConfig() {
126
+ return this.terminalInfo.recommendedConfig;
127
+ }
128
+ /**
129
+ * Set optimal TERM environment variable for the detected terminal
130
+ */
131
+ configureEnvironment() {
132
+ const { type, isInsideTmux } = this.terminalInfo;
133
+ if (type === "ghostty") {
134
+ process.env.TERM = "xterm";
135
+ } else if (isInsideTmux) {
136
+ process.env.TERM = "screen-256color";
137
+ } else if (!process.env.TERM || process.env.TERM === "dumb") {
138
+ process.env.TERM = "xterm-256color";
139
+ }
140
+ process.env.NODE_NO_WARNINGS = "1";
141
+ }
142
+ /**
143
+ * Check if terminal is suitable for TUI
144
+ */
145
+ isCompatible() {
146
+ if (process.env.CI || process.env.CONTINUOUS_INTEGRATION) {
147
+ return false;
148
+ }
149
+ const term = process.env.TERM || "";
150
+ if (term === "dumb") {
151
+ return false;
152
+ }
153
+ if (process.env.FORCE_TUI) {
154
+ return true;
155
+ }
156
+ const hasAnyTTY = process.stdout.isTTY || process.stdin.isTTY || process.stderr.isTTY;
157
+ if (!hasAnyTTY) {
158
+ const { type } = this.terminalInfo;
159
+ if (type !== "unknown" || term.includes("xterm") || term.includes("screen")) {
160
+ return true;
161
+ }
162
+ return false;
163
+ }
164
+ return true;
165
+ }
166
+ /**
167
+ * Get compatibility warnings for the current terminal
168
+ */
169
+ getWarnings() {
170
+ const warnings = [];
171
+ const { type, supportsUnicode, supportsTrueColor } = this.terminalInfo;
172
+ if (type === "ghostty") {
173
+ warnings.push("Ghostty terminal detected: Using compatibility mode with reduced features");
174
+ }
175
+ if (!supportsUnicode) {
176
+ warnings.push("Unicode support not detected: Some icons may not display correctly");
177
+ }
178
+ if (!supportsTrueColor) {
179
+ warnings.push("True color support not detected: Using 256 color mode");
180
+ }
181
+ if (type === "unknown") {
182
+ warnings.push("Unknown terminal type: Using conservative settings");
183
+ }
184
+ return warnings;
185
+ }
186
+ /**
187
+ * Get terminal capabilities as a string for debugging
188
+ */
189
+ getCapabilitiesString() {
190
+ const { type, isInsideTmux, supportsTrueColor, supportsUnicode, termEnv } = this.terminalInfo;
191
+ return [
192
+ `Terminal Type: ${type}`,
193
+ `TERM: ${termEnv}`,
194
+ `Inside tmux: ${isInsideTmux}`,
195
+ `True Color: ${supportsTrueColor}`,
196
+ `Unicode: ${supportsUnicode}`
197
+ ].join(" | ");
198
+ }
199
+ }
200
+ const terminalCompat = TerminalCompatibility.getInstance();
201
+ export {
202
+ TerminalCompatibility,
203
+ terminalCompat
204
+ };
205
+ //# sourceMappingURL=terminal-compat.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/features/tui/terminal-compat.ts"],
4
+ "sourcesContent": ["/**\n * Terminal Compatibility Layer\n * Handles different terminal environments (Ghostty, tmux, standard terminals)\n */\n\nimport os from 'os';\nimport { execSync } from 'child_process';\n\nexport interface TerminalInfo {\n type: 'ghostty' | 'tmux' | 'iterm2' | 'terminal' | 'xterm' | 'unknown';\n isInsideTmux: boolean;\n supportsTrueColor: boolean;\n supportsUnicode: boolean;\n termEnv: string;\n recommendedConfig: BlessedConfig;\n}\n\nexport interface BlessedConfig {\n smartCSR: boolean;\n fullUnicode: boolean;\n forceUnicode: boolean | null;\n dockBorders: boolean;\n terminal: string;\n title: string;\n // Compatibility flags\n artificalCursor?: boolean;\n grabKeys?: boolean;\n sendFocus?: boolean;\n warnings?: boolean;\n}\n\nexport class TerminalCompatibility {\n private static instance: TerminalCompatibility;\n private terminalInfo: TerminalInfo;\n\n private constructor() {\n this.terminalInfo = this.detectTerminal();\n }\n\n static getInstance(): TerminalCompatibility {\n if (!this.instance) {\n this.instance = new TerminalCompatibility();\n }\n return this.instance;\n }\n\n private detectTerminal(): TerminalInfo {\n const termEnv = process.env.TERM || '';\n const termProgram = process.env.TERM_PROGRAM || '';\n const isInsideTmux = !!process.env.TMUX;\n const isGhostty = termEnv.includes('ghostty') || termProgram === 'ghostty';\n const isIterm2 = termProgram === 'iTerm.app';\n const isTerminalApp = termProgram === 'Apple_Terminal';\n \n let type: TerminalInfo['type'] = 'unknown';\n \n if (isGhostty) {\n type = 'ghostty';\n } else if (isInsideTmux) {\n type = 'tmux';\n } else if (isIterm2) {\n type = 'iterm2';\n } else if (isTerminalApp) {\n type = 'terminal';\n } else if (termEnv.includes('xterm')) {\n type = 'xterm';\n }\n\n // Check for true color support\n const supportsTrueColor = this.checkTrueColorSupport();\n const supportsUnicode = this.checkUnicodeSupport();\n\n // Get recommended config based on terminal type\n const recommendedConfig = this.getRecommendedConfig(type, isInsideTmux);\n\n return {\n type,\n isInsideTmux,\n supportsTrueColor,\n supportsUnicode,\n termEnv,\n recommendedConfig\n };\n }\n\n private checkTrueColorSupport(): boolean {\n const colorterm = process.env.COLORTERM;\n if (colorterm === 'truecolor' || colorterm === '24bit') {\n return true;\n }\n \n // Check terminal specific env vars\n const termProgram = process.env.TERM_PROGRAM || '';\n if (['iTerm.app', 'Hyper', 'vscode'].includes(termProgram)) {\n return true;\n }\n \n return false;\n }\n\n private checkUnicodeSupport(): boolean {\n // Most modern terminals support unicode\n const lang = process.env.LANG || '';\n const lcAll = process.env.LC_ALL || '';\n const lcCtype = process.env.LC_CTYPE || '';\n \n const hasUtf8 = [lang, lcAll, lcCtype].some(v => \n v.toLowerCase().includes('utf-8') || v.toLowerCase().includes('utf8')\n );\n \n return hasUtf8;\n }\n\n private getRecommendedConfig(\n type: TerminalInfo['type'],\n isInsideTmux: boolean\n ): BlessedConfig {\n const baseConfig: BlessedConfig = {\n smartCSR: true,\n fullUnicode: true,\n forceUnicode: null,\n dockBorders: true,\n terminal: 'xterm-256color',\n title: 'StackMemory TUI Dashboard',\n warnings: false\n };\n\n // Terminal-specific adjustments\n switch (type) {\n case 'ghostty':\n // Ghostty has issues with certain escape sequences\n return {\n ...baseConfig,\n smartCSR: false, // Disable smart cursor restore\n terminal: 'xterm', // Use basic xterm instead of xterm-256color\n dockBorders: false, // Can cause rendering issues\n artificalCursor: true, // Use artificial cursor\n grabKeys: false, // Don't grab all keys\n sendFocus: false // Don't send focus events\n };\n \n case 'tmux':\n // Inside tmux, we need to be more conservative\n return {\n ...baseConfig,\n terminal: isInsideTmux ? 'screen-256color' : 'xterm-256color',\n smartCSR: !isInsideTmux, // Disable inside tmux\n sendFocus: false\n };\n \n case 'iterm2':\n // iTerm2 has excellent terminal support\n return {\n ...baseConfig,\n terminal: 'xterm-256color',\n fullUnicode: true,\n forceUnicode: true\n };\n \n case 'terminal':\n // macOS Terminal.app\n return {\n ...baseConfig,\n terminal: 'xterm-256color',\n fullUnicode: true\n };\n \n case 'xterm':\n default:\n // Conservative defaults for unknown terminals\n return {\n ...baseConfig,\n smartCSR: false,\n fullUnicode: false,\n forceUnicode: false\n };\n }\n }\n\n getTerminalInfo(): TerminalInfo {\n return this.terminalInfo;\n }\n\n getBlessedConfig(): BlessedConfig {\n return this.terminalInfo.recommendedConfig;\n }\n\n /**\n * Set optimal TERM environment variable for the detected terminal\n */\n configureEnvironment(): void {\n const { type, isInsideTmux } = this.terminalInfo;\n \n if (type === 'ghostty') {\n // Ghostty works better with basic xterm\n process.env.TERM = 'xterm';\n } else if (isInsideTmux) {\n // Inside tmux, use screen-256color\n process.env.TERM = 'screen-256color';\n } else if (!process.env.TERM || process.env.TERM === 'dumb') {\n // Fallback to xterm-256color if not set\n process.env.TERM = 'xterm-256color';\n }\n\n // Disable Node warnings that can interfere with TUI\n process.env.NODE_NO_WARNINGS = '1';\n }\n\n /**\n * Check if terminal is suitable for TUI\n */\n isCompatible(): boolean {\n // Check if we're in a non-interactive environment\n if (process.env.CI || process.env.CONTINUOUS_INTEGRATION) {\n return false;\n }\n\n // Check if terminal is too basic\n const term = process.env.TERM || '';\n if (term === 'dumb') {\n return false;\n }\n\n // Allow if FORCE_TUI is set\n if (process.env.FORCE_TUI) {\n return true;\n }\n\n // Check if any TTY is available (stdout, stdin, or stderr)\n const hasAnyTTY = process.stdout.isTTY || process.stdin.isTTY || process.stderr.isTTY;\n \n // When running through npm/node, TTY detection might fail\n // but we still want to allow TUI if terminal is capable\n if (!hasAnyTTY) {\n const { type } = this.terminalInfo;\n // Allow known terminal types even without TTY detection\n if (type !== 'unknown' || term.includes('xterm') || term.includes('screen')) {\n return true;\n }\n return false;\n }\n\n return true;\n }\n\n /**\n * Get compatibility warnings for the current terminal\n */\n getWarnings(): string[] {\n const warnings: string[] = [];\n const { type, supportsUnicode, supportsTrueColor } = this.terminalInfo;\n\n if (type === 'ghostty') {\n warnings.push('Ghostty terminal detected: Using compatibility mode with reduced features');\n }\n\n if (!supportsUnicode) {\n warnings.push('Unicode support not detected: Some icons may not display correctly');\n }\n\n if (!supportsTrueColor) {\n warnings.push('True color support not detected: Using 256 color mode');\n }\n\n if (type === 'unknown') {\n warnings.push('Unknown terminal type: Using conservative settings');\n }\n\n return warnings;\n }\n\n /**\n * Get terminal capabilities as a string for debugging\n */\n getCapabilitiesString(): string {\n const { type, isInsideTmux, supportsTrueColor, supportsUnicode, termEnv } = this.terminalInfo;\n \n return [\n `Terminal Type: ${type}`,\n `TERM: ${termEnv}`,\n `Inside tmux: ${isInsideTmux}`,\n `True Color: ${supportsTrueColor}`,\n `Unicode: ${supportsUnicode}`\n ].join(' | ');\n }\n}\n\n// Export singleton instance\nexport const terminalCompat = TerminalCompatibility.getInstance();"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }