@stackmemoryai/stackmemory 0.2.9 → 0.3.0

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 (575) hide show
  1. package/dist/agents/core/agent-task-manager.js +512 -0
  2. package/dist/agents/core/agent-task-manager.js.map +7 -0
  3. package/dist/agents/verifiers/base-verifier.js +129 -0
  4. package/dist/agents/verifiers/base-verifier.js.map +7 -0
  5. package/dist/agents/verifiers/formatter-verifier.js +126 -0
  6. package/dist/agents/verifiers/formatter-verifier.js.map +7 -0
  7. package/dist/agents/verifiers/llm-judge.js +248 -0
  8. package/dist/agents/verifiers/llm-judge.js.map +7 -0
  9. package/dist/cli/__tests__/index.test.js +290 -0
  10. package/dist/cli/__tests__/index.test.js.map +7 -0
  11. package/dist/cli/auto-detect.js +317 -0
  12. package/dist/cli/auto-detect.js.map +7 -0
  13. package/dist/cli/browser-test.js +29 -0
  14. package/dist/cli/browser-test.js.map +7 -0
  15. package/dist/cli/claude-sm.js +369 -0
  16. package/dist/cli/claude-sm.js.map +7 -0
  17. package/dist/cli/codex-sm.js +283 -0
  18. package/dist/cli/codex-sm.js.map +7 -0
  19. package/dist/cli/commands/agent.js +286 -0
  20. package/dist/cli/commands/agent.js.map +7 -0
  21. package/dist/cli/commands/config.js +199 -0
  22. package/dist/cli/commands/config.js.map +7 -0
  23. package/dist/cli/commands/context.js +327 -0
  24. package/dist/cli/commands/context.js.map +7 -0
  25. package/dist/cli/commands/handoff.js +191 -0
  26. package/dist/cli/commands/handoff.js.map +7 -0
  27. package/dist/cli/commands/linear-test.js +115 -0
  28. package/dist/cli/commands/linear-test.js.map +7 -0
  29. package/dist/cli/commands/linear.js +378 -0
  30. package/dist/cli/commands/linear.js.map +7 -0
  31. package/dist/cli/commands/log.js +165 -0
  32. package/dist/cli/commands/log.js.map +7 -0
  33. package/dist/cli/commands/onboard.js +349 -0
  34. package/dist/cli/commands/onboard.js.map +7 -0
  35. package/dist/cli/commands/projects.js +195 -0
  36. package/dist/cli/commands/projects.js.map +7 -0
  37. package/dist/cli/commands/search.js +152 -0
  38. package/dist/cli/commands/search.js.map +7 -0
  39. package/dist/cli/commands/session.js +179 -0
  40. package/dist/cli/commands/session.js.map +7 -0
  41. package/dist/cli/commands/tasks.js +205 -0
  42. package/dist/cli/commands/tasks.js.map +7 -0
  43. package/dist/cli/commands/webhook.js +131 -0
  44. package/dist/cli/commands/webhook.js.map +7 -0
  45. package/dist/cli/commands/worktree.js +276 -0
  46. package/dist/cli/commands/worktree.js.map +7 -0
  47. package/dist/cli/index.js +953 -0
  48. package/dist/cli/index.js.map +7 -0
  49. package/dist/cli/utils/viewer.js +92 -0
  50. package/dist/cli/utils/viewer.js.map +7 -0
  51. package/dist/core/config/__tests__/config-manager.test.js +248 -0
  52. package/dist/core/config/__tests__/config-manager.test.js.map +7 -0
  53. package/dist/core/config/config-manager.js +368 -0
  54. package/dist/core/config/config-manager.js.map +7 -0
  55. package/dist/core/config/types.js +140 -0
  56. package/dist/core/config/types.js.map +7 -0
  57. package/dist/core/context/__tests__/frame-manager.test.js +879 -0
  58. package/dist/core/context/__tests__/frame-manager.test.js.map +7 -0
  59. package/dist/core/context/auto-context.js +72 -0
  60. package/dist/core/context/auto-context.js.map +7 -0
  61. package/dist/core/context/compaction-handler.js +326 -0
  62. package/dist/core/context/compaction-handler.js.map +7 -0
  63. package/dist/core/context/frame-database.js +376 -0
  64. package/dist/core/context/frame-database.js.map +7 -0
  65. package/dist/core/context/frame-digest.js +239 -0
  66. package/dist/core/context/frame-digest.js.map +7 -0
  67. package/dist/core/context/frame-manager.js +682 -0
  68. package/dist/core/context/frame-manager.js.map +7 -0
  69. package/dist/core/context/frame-stack.js +270 -0
  70. package/dist/core/context/frame-stack.js.map +7 -0
  71. package/dist/core/context/frame-types.js +1 -0
  72. package/dist/core/context/frame-types.js.map +7 -0
  73. package/dist/core/context/index.js +33 -0
  74. package/dist/core/context/index.js.map +7 -0
  75. package/dist/core/context/model-aware-compaction.js +619 -0
  76. package/dist/core/context/model-aware-compaction.js.map +7 -0
  77. package/dist/core/context/refactored-frame-manager.js +393 -0
  78. package/dist/core/context/refactored-frame-manager.js.map +7 -0
  79. package/dist/core/database/batch-operations.js +329 -0
  80. package/dist/core/database/batch-operations.js.map +7 -0
  81. package/dist/core/database/connection-pool.js +224 -0
  82. package/dist/core/database/connection-pool.js.map +7 -0
  83. package/dist/core/database/query-cache.js +284 -0
  84. package/dist/core/database/query-cache.js.map +7 -0
  85. package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js +379 -0
  86. package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js.map +7 -0
  87. package/dist/core/digest/__tests__/frame-digest-integration.test.js +230 -0
  88. package/dist/core/digest/__tests__/frame-digest-integration.test.js.map +7 -0
  89. package/dist/core/digest/enhanced-hybrid-digest.js +267 -0
  90. package/dist/core/digest/enhanced-hybrid-digest.js.map +7 -0
  91. package/dist/core/digest/frame-digest-integration.js +172 -0
  92. package/dist/core/digest/frame-digest-integration.js.map +7 -0
  93. package/dist/core/digest/hybrid-digest-generator.js +549 -0
  94. package/dist/core/digest/hybrid-digest-generator.js.map +7 -0
  95. package/dist/core/digest/index.js +5 -0
  96. package/dist/core/digest/index.js.map +7 -0
  97. package/dist/core/digest/types.js +21 -0
  98. package/dist/core/digest/types.js.map +7 -0
  99. package/dist/core/errors/__tests__/error-handling.test.js +270 -0
  100. package/dist/core/errors/__tests__/error-handling.test.js.map +7 -0
  101. package/dist/core/errors/index.js +239 -0
  102. package/dist/core/errors/index.js.map +7 -0
  103. package/dist/core/errors/recovery.js +258 -0
  104. package/dist/core/errors/recovery.js.map +7 -0
  105. package/dist/core/merge/__tests__/conflict-scenarios.test.js +414 -0
  106. package/dist/core/merge/__tests__/conflict-scenarios.test.js.map +7 -0
  107. package/dist/core/merge/conflict-detector.js +424 -0
  108. package/dist/core/merge/conflict-detector.js.map +7 -0
  109. package/dist/core/merge/index.js +5 -0
  110. package/dist/core/merge/index.js.map +7 -0
  111. package/dist/core/merge/resolution-engine.js +565 -0
  112. package/dist/core/merge/resolution-engine.js.map +7 -0
  113. package/dist/core/merge/stack-diff.js +528 -0
  114. package/dist/core/merge/stack-diff.js.map +7 -0
  115. package/dist/core/merge/types.js +1 -0
  116. package/dist/core/merge/types.js.map +7 -0
  117. package/dist/core/monitoring/error-handler.js +278 -0
  118. package/dist/core/monitoring/error-handler.js.map +7 -0
  119. package/dist/core/monitoring/logger.js +115 -0
  120. package/dist/core/monitoring/logger.js.map +7 -0
  121. package/dist/core/monitoring/metrics.js +157 -0
  122. package/dist/core/monitoring/metrics.js.map +7 -0
  123. package/dist/core/monitoring/progress-tracker.js +174 -0
  124. package/dist/core/monitoring/progress-tracker.js.map +7 -0
  125. package/dist/core/performance/context-cache.js +269 -0
  126. package/dist/core/performance/context-cache.js.map +7 -0
  127. package/dist/core/performance/index.js +7 -0
  128. package/dist/core/performance/index.js.map +7 -0
  129. package/dist/core/performance/lazy-context-loader.js +319 -0
  130. package/dist/core/performance/lazy-context-loader.js.map +7 -0
  131. package/dist/core/performance/monitor.js +217 -0
  132. package/dist/core/performance/monitor.js.map +7 -0
  133. package/dist/core/performance/optimized-frame-context.js +326 -0
  134. package/dist/core/performance/optimized-frame-context.js.map +7 -0
  135. package/dist/core/performance/performance-benchmark.js +269 -0
  136. package/dist/core/performance/performance-benchmark.js.map +7 -0
  137. package/dist/core/performance/performance-profiler.js +318 -0
  138. package/dist/core/performance/performance-profiler.js.map +7 -0
  139. package/dist/core/performance/streaming-jsonl-parser.js +187 -0
  140. package/dist/core/performance/streaming-jsonl-parser.js.map +7 -0
  141. package/dist/core/persistence/postgres-adapter.js +345 -0
  142. package/dist/core/persistence/postgres-adapter.js.map +7 -0
  143. package/dist/core/projects/project-manager.js +699 -0
  144. package/dist/core/projects/project-manager.js.map +7 -0
  145. package/dist/core/query/__tests__/query-parser.test.js +301 -0
  146. package/dist/core/query/__tests__/query-parser.test.js.map +7 -0
  147. package/dist/core/query/__tests__/query-templates.test.js +210 -0
  148. package/dist/core/query/__tests__/query-templates.test.js.map +7 -0
  149. package/dist/core/query/query-parser.js +366 -0
  150. package/dist/core/query/query-parser.js.map +7 -0
  151. package/dist/core/query/query-templates.js +317 -0
  152. package/dist/core/query/query-templates.js.map +7 -0
  153. package/dist/core/retrieval/index.js +4 -0
  154. package/dist/core/retrieval/index.js.map +7 -0
  155. package/dist/core/retrieval/llm-context-retrieval.js +577 -0
  156. package/dist/core/retrieval/llm-context-retrieval.js.map +7 -0
  157. package/dist/core/retrieval/summary-generator.js +585 -0
  158. package/dist/core/retrieval/summary-generator.js.map +7 -0
  159. package/dist/core/retrieval/types.js +17 -0
  160. package/dist/core/retrieval/types.js.map +7 -0
  161. package/dist/core/session/index.js +11 -0
  162. package/dist/core/session/index.js.map +7 -0
  163. package/dist/core/session/session-manager.js +297 -0
  164. package/dist/core/session/session-manager.js.map +7 -0
  165. package/dist/core/trace/cli-trace-wrapper.js +110 -0
  166. package/dist/core/trace/cli-trace-wrapper.js.map +7 -0
  167. package/dist/core/trace/db-trace-wrapper.js +215 -0
  168. package/dist/core/trace/db-trace-wrapper.js.map +7 -0
  169. package/dist/core/trace/debug-trace.js +385 -0
  170. package/dist/core/trace/debug-trace.js.map +7 -0
  171. package/dist/core/trace/index.js +158 -0
  172. package/dist/core/trace/index.js.map +7 -0
  173. package/dist/core/trace/linear-api-wrapper.js +169 -0
  174. package/dist/core/trace/linear-api-wrapper.js.map +7 -0
  175. package/dist/core/trace/trace-demo.js +135 -0
  176. package/dist/core/trace/trace-demo.js.map +7 -0
  177. package/dist/core/trace/trace-detector.demo.js +138 -0
  178. package/dist/core/trace/trace-detector.demo.js.map +7 -0
  179. package/dist/core/trace/trace-detector.js +386 -0
  180. package/dist/core/trace/trace-detector.js.map +7 -0
  181. package/dist/core/trace/trace-detector.test.js +401 -0
  182. package/dist/core/trace/trace-detector.test.js.map +7 -0
  183. package/dist/core/trace/trace-store.js +341 -0
  184. package/dist/core/trace/trace-store.js.map +7 -0
  185. package/dist/core/trace/types.js +73 -0
  186. package/dist/core/trace/types.js.map +7 -0
  187. package/dist/core/types.js +1 -0
  188. package/dist/core/types.js.map +7 -0
  189. package/dist/core/utils/update-checker.js +214 -0
  190. package/dist/core/utils/update-checker.js.map +7 -0
  191. package/dist/core/worktree/worktree-manager.js +450 -0
  192. package/dist/core/worktree/worktree-manager.js.map +7 -0
  193. package/dist/features/analytics/api/analytics-api.js +283 -0
  194. package/dist/features/analytics/api/analytics-api.js.map +7 -0
  195. package/dist/features/analytics/core/analytics-service.js +267 -0
  196. package/dist/features/analytics/core/analytics-service.js.map +7 -0
  197. package/dist/features/analytics/index.js +14 -0
  198. package/dist/features/analytics/index.js.map +7 -0
  199. package/dist/features/analytics/queries/metrics-queries.js +273 -0
  200. package/dist/features/analytics/queries/metrics-queries.js.map +7 -0
  201. package/dist/features/analytics/types/metrics.js +1 -0
  202. package/dist/features/analytics/types/metrics.js.map +7 -0
  203. package/dist/features/browser/browser-mcp.js +488 -0
  204. package/dist/features/browser/browser-mcp.js.map +7 -0
  205. package/dist/features/tasks/__tests__/pebbles-task-store.test.js +747 -0
  206. package/dist/features/tasks/__tests__/pebbles-task-store.test.js.map +7 -0
  207. package/dist/features/tasks/pebbles-task-store.js +647 -0
  208. package/dist/features/tasks/pebbles-task-store.js.map +7 -0
  209. package/dist/features/tasks/task-aware-context.js +406 -0
  210. package/dist/features/tasks/task-aware-context.js.map +7 -0
  211. package/dist/index.js +21 -0
  212. package/dist/index.js.map +7 -0
  213. package/dist/integrations/linear/__tests__/auth.test.js +558 -0
  214. package/dist/integrations/linear/__tests__/auth.test.js.map +7 -0
  215. package/dist/integrations/linear/__tests__/sync-service.test.js +760 -0
  216. package/dist/integrations/linear/__tests__/sync-service.test.js.map +7 -0
  217. package/dist/integrations/linear/auth.js +308 -0
  218. package/dist/integrations/linear/auth.js.map +7 -0
  219. package/dist/integrations/linear/auto-sync.js +244 -0
  220. package/dist/integrations/linear/auto-sync.js.map +7 -0
  221. package/dist/integrations/linear/client.js +448 -0
  222. package/dist/integrations/linear/client.js.map +7 -0
  223. package/dist/integrations/linear/config.js +115 -0
  224. package/dist/integrations/linear/config.js.map +7 -0
  225. package/dist/integrations/linear/sync-manager.js +233 -0
  226. package/dist/integrations/linear/sync-manager.js.map +7 -0
  227. package/dist/integrations/linear/sync-service.js +214 -0
  228. package/dist/integrations/linear/sync-service.js.map +7 -0
  229. package/dist/integrations/linear/sync.js +565 -0
  230. package/dist/integrations/linear/sync.js.map +7 -0
  231. package/dist/integrations/linear/types.js +1 -0
  232. package/dist/integrations/linear/types.js.map +7 -0
  233. package/dist/integrations/linear/webhook-server.js +204 -0
  234. package/dist/integrations/linear/webhook-server.js.map +7 -0
  235. package/dist/integrations/linear/webhook.js +269 -0
  236. package/dist/integrations/linear/webhook.js.map +7 -0
  237. package/dist/integrations/mcp/__tests__/server.test.js +798 -0
  238. package/dist/integrations/mcp/__tests__/server.test.js.map +7 -0
  239. package/dist/integrations/mcp/handlers/context-handlers.js +253 -0
  240. package/dist/integrations/mcp/handlers/context-handlers.js.map +7 -0
  241. package/dist/integrations/mcp/handlers/index.js +134 -0
  242. package/dist/integrations/mcp/handlers/index.js.map +7 -0
  243. package/dist/integrations/mcp/handlers/linear-handlers.js +243 -0
  244. package/dist/integrations/mcp/handlers/linear-handlers.js.map +7 -0
  245. package/dist/integrations/mcp/handlers/task-handlers.js +235 -0
  246. package/dist/integrations/mcp/handlers/task-handlers.js.map +7 -0
  247. package/dist/integrations/mcp/handlers/trace-handlers.js +304 -0
  248. package/dist/integrations/mcp/handlers/trace-handlers.js.map +7 -0
  249. package/dist/integrations/mcp/index.js +19 -0
  250. package/dist/integrations/mcp/index.js.map +7 -0
  251. package/dist/integrations/mcp/refactored-server.js +331 -0
  252. package/dist/integrations/mcp/refactored-server.js.map +7 -0
  253. package/dist/integrations/mcp/server.js +1621 -0
  254. package/dist/integrations/mcp/server.js.map +7 -0
  255. package/dist/integrations/mcp/tool-definitions.js +562 -0
  256. package/dist/integrations/mcp/tool-definitions.js.map +7 -0
  257. package/dist/integrations/mcp/trace-test.js +44 -0
  258. package/dist/integrations/mcp/trace-test.js.map +7 -0
  259. package/dist/integrations/pg-aiguide/embedding-provider.js +174 -0
  260. package/dist/integrations/pg-aiguide/embedding-provider.js.map +7 -0
  261. package/dist/integrations/pg-aiguide/semantic-search.js +183 -0
  262. package/dist/integrations/pg-aiguide/semantic-search.js.map +7 -0
  263. package/dist/integrations/pg-aiguide/timescale-analytics.js +220 -0
  264. package/dist/integrations/pg-aiguide/timescale-analytics.js.map +7 -0
  265. package/dist/mcp/stackmemory-mcp-server.js +550 -0
  266. package/dist/mcp/stackmemory-mcp-server.js.map +7 -0
  267. package/dist/middleware/exponential-rate-limiter.js +285 -0
  268. package/dist/middleware/exponential-rate-limiter.js.map +7 -0
  269. package/dist/models/user.model.js +351 -0
  270. package/dist/models/user.model.js.map +7 -0
  271. package/dist/scripts/benchmark-performance.d.ts +7 -0
  272. package/dist/scripts/benchmark-performance.d.ts.map +1 -0
  273. package/dist/scripts/benchmark-performance.js +44 -0
  274. package/dist/scripts/benchmark-performance.js.map +1 -0
  275. package/dist/scripts/cleanup-duplicate-tasks.d.ts +12 -0
  276. package/dist/scripts/cleanup-duplicate-tasks.d.ts.map +1 -0
  277. package/dist/scripts/cleanup-duplicate-tasks.js +215 -0
  278. package/dist/scripts/cleanup-duplicate-tasks.js.map +1 -0
  279. package/dist/servers/production/auth-middleware.js +513 -0
  280. package/dist/servers/production/auth-middleware.js.map +7 -0
  281. package/dist/servers/railway/index.js +390 -0
  282. package/dist/servers/railway/index.js.map +7 -0
  283. package/dist/services/config-service.js +62 -0
  284. package/dist/services/config-service.js.map +7 -0
  285. package/dist/services/context-service.js +191 -0
  286. package/dist/services/context-service.js.map +7 -0
  287. package/dist/src/agents/core/agent-task-manager.d.ts +154 -0
  288. package/dist/src/agents/core/agent-task-manager.d.ts.map +1 -0
  289. package/dist/src/agents/core/agent-task-manager.js +504 -0
  290. package/dist/src/agents/core/agent-task-manager.js.map +1 -0
  291. package/dist/src/agents/verifiers/base-verifier.d.ts +112 -0
  292. package/dist/src/agents/verifiers/base-verifier.d.ts.map +1 -0
  293. package/dist/src/agents/verifiers/base-verifier.js +130 -0
  294. package/dist/src/agents/verifiers/base-verifier.js.map +1 -0
  295. package/dist/src/agents/verifiers/formatter-verifier.d.ts +14 -0
  296. package/dist/src/agents/verifiers/formatter-verifier.d.ts.map +1 -0
  297. package/dist/src/agents/verifiers/formatter-verifier.js +107 -0
  298. package/dist/src/agents/verifiers/formatter-verifier.js.map +1 -0
  299. package/dist/src/agents/verifiers/llm-judge.d.ts +46 -0
  300. package/dist/src/agents/verifiers/llm-judge.d.ts.map +1 -0
  301. package/dist/src/agents/verifiers/llm-judge.js +248 -0
  302. package/dist/src/agents/verifiers/llm-judge.js.map +1 -0
  303. package/dist/src/cli/claude-sm.js +55 -0
  304. package/dist/src/cli/claude-sm.js.map +1 -1
  305. package/dist/src/cli/commands/agent.d.ts +9 -0
  306. package/dist/src/cli/commands/agent.d.ts.map +1 -0
  307. package/dist/src/cli/commands/agent.js +303 -0
  308. package/dist/src/cli/commands/agent.js.map +1 -0
  309. package/dist/src/cli/commands/handoff.d.ts +6 -0
  310. package/dist/src/cli/commands/handoff.d.ts.map +1 -0
  311. package/dist/src/cli/commands/handoff.js +212 -0
  312. package/dist/src/cli/commands/handoff.js.map +1 -0
  313. package/dist/src/cli/index.d.ts.map +1 -1
  314. package/dist/src/cli/index.js +4 -0
  315. package/dist/src/cli/index.js.map +1 -1
  316. package/dist/src/core/context/frame-database.d.ts +59 -0
  317. package/dist/src/core/context/frame-database.d.ts.map +1 -0
  318. package/dist/src/core/context/frame-database.js +333 -0
  319. package/dist/src/core/context/frame-database.js.map +1 -0
  320. package/dist/src/core/context/frame-digest.d.ts +59 -0
  321. package/dist/src/core/context/frame-digest.d.ts.map +1 -0
  322. package/dist/src/core/context/frame-digest.js +264 -0
  323. package/dist/src/core/context/frame-digest.js.map +1 -0
  324. package/dist/src/core/context/frame-manager.d.ts +2 -0
  325. package/dist/src/core/context/frame-manager.d.ts.map +1 -1
  326. package/dist/src/core/context/frame-manager.js +7 -0
  327. package/dist/src/core/context/frame-manager.js.map +1 -1
  328. package/dist/src/core/context/frame-stack.d.ts +85 -0
  329. package/dist/src/core/context/frame-stack.d.ts.map +1 -0
  330. package/dist/src/core/context/frame-stack.js +287 -0
  331. package/dist/src/core/context/frame-stack.js.map +1 -0
  332. package/dist/src/core/context/frame-types.d.ts +67 -0
  333. package/dist/src/core/context/frame-types.d.ts.map +1 -0
  334. package/dist/src/core/context/frame-types.js +6 -0
  335. package/dist/src/core/context/frame-types.js.map +1 -0
  336. package/dist/src/core/context/index.d.ts +11 -0
  337. package/dist/src/core/context/index.d.ts.map +1 -0
  338. package/dist/src/core/context/index.js +14 -0
  339. package/dist/src/core/context/index.js.map +1 -0
  340. package/dist/src/core/context/refactored-frame-manager.d.ts +99 -0
  341. package/dist/src/core/context/refactored-frame-manager.d.ts.map +1 -0
  342. package/dist/src/core/context/refactored-frame-manager.js +340 -0
  343. package/dist/src/core/context/refactored-frame-manager.js.map +1 -0
  344. package/dist/src/core/database/batch-operations.d.ts +118 -0
  345. package/dist/src/core/database/batch-operations.d.ts.map +1 -0
  346. package/dist/src/core/database/batch-operations.js +339 -0
  347. package/dist/src/core/database/batch-operations.js.map +1 -0
  348. package/dist/src/core/database/connection-pool.d.ts +79 -0
  349. package/dist/src/core/database/connection-pool.d.ts.map +1 -0
  350. package/dist/src/core/database/connection-pool.js +236 -0
  351. package/dist/src/core/database/connection-pool.js.map +1 -0
  352. package/dist/src/core/database/query-cache.d.ts +135 -0
  353. package/dist/src/core/database/query-cache.d.ts.map +1 -0
  354. package/dist/src/core/database/query-cache.js +294 -0
  355. package/dist/src/core/database/query-cache.js.map +1 -0
  356. package/dist/src/core/digest/enhanced-hybrid-digest.d.ts +125 -0
  357. package/dist/src/core/digest/enhanced-hybrid-digest.d.ts.map +1 -0
  358. package/dist/src/core/digest/enhanced-hybrid-digest.js +282 -0
  359. package/dist/src/core/digest/enhanced-hybrid-digest.js.map +1 -0
  360. package/dist/src/core/digest/frame-digest-integration.d.ts +67 -0
  361. package/dist/src/core/digest/frame-digest-integration.d.ts.map +1 -0
  362. package/dist/src/core/digest/frame-digest-integration.js +198 -0
  363. package/dist/src/core/digest/frame-digest-integration.js.map +1 -0
  364. package/dist/src/core/digest/hybrid-digest-generator.d.ts +3 -3
  365. package/dist/src/core/digest/hybrid-digest-generator.d.ts.map +1 -1
  366. package/dist/src/core/digest/hybrid-digest-generator.js.map +1 -1
  367. package/dist/src/core/digest/index.d.ts +3 -1
  368. package/dist/src/core/digest/index.d.ts.map +1 -1
  369. package/dist/src/core/digest/index.js +3 -1
  370. package/dist/src/core/digest/index.js.map +1 -1
  371. package/dist/src/core/errors/index.d.ts +13 -5
  372. package/dist/src/core/errors/index.d.ts.map +1 -1
  373. package/dist/src/core/errors/index.js +13 -5
  374. package/dist/src/core/errors/index.js.map +1 -1
  375. package/dist/src/core/merge/conflict-detector.d.ts +122 -0
  376. package/dist/src/core/merge/conflict-detector.d.ts.map +1 -0
  377. package/dist/src/core/merge/conflict-detector.js +468 -0
  378. package/dist/src/core/merge/conflict-detector.js.map +1 -0
  379. package/dist/src/core/merge/index.d.ts +9 -0
  380. package/dist/src/core/merge/index.d.ts.map +1 -0
  381. package/dist/src/core/merge/index.js +9 -0
  382. package/dist/src/core/merge/index.js.map +1 -0
  383. package/dist/src/core/merge/resolution-engine.d.ts +120 -0
  384. package/dist/src/core/merge/resolution-engine.d.ts.map +1 -0
  385. package/dist/src/core/merge/resolution-engine.js +573 -0
  386. package/dist/src/core/merge/resolution-engine.js.map +1 -0
  387. package/dist/src/core/merge/stack-diff.d.ts +97 -0
  388. package/dist/src/core/merge/stack-diff.d.ts.map +1 -0
  389. package/dist/src/core/merge/stack-diff.js +516 -0
  390. package/dist/src/core/merge/stack-diff.js.map +1 -0
  391. package/dist/src/core/merge/types.d.ts +110 -0
  392. package/dist/src/core/merge/types.d.ts.map +1 -0
  393. package/dist/src/core/merge/types.js +6 -0
  394. package/dist/src/core/merge/types.js.map +1 -0
  395. package/dist/src/core/performance/context-cache.d.ts +109 -0
  396. package/dist/src/core/performance/context-cache.d.ts.map +1 -0
  397. package/dist/src/core/performance/context-cache.js +280 -0
  398. package/dist/src/core/performance/context-cache.js.map +1 -0
  399. package/dist/src/core/performance/index.d.ts +3 -0
  400. package/dist/src/core/performance/index.d.ts.map +1 -0
  401. package/dist/src/core/performance/index.js +3 -0
  402. package/dist/src/core/performance/index.js.map +1 -0
  403. package/dist/src/core/performance/lazy-context-loader.d.ts +93 -0
  404. package/dist/src/core/performance/lazy-context-loader.d.ts.map +1 -0
  405. package/dist/src/core/performance/lazy-context-loader.js +332 -0
  406. package/dist/src/core/performance/lazy-context-loader.js.map +1 -0
  407. package/dist/src/core/performance/monitor.d.ts +48 -0
  408. package/dist/src/core/performance/monitor.d.ts.map +1 -0
  409. package/dist/src/core/performance/monitor.js +226 -0
  410. package/dist/src/core/performance/monitor.js.map +1 -0
  411. package/dist/src/core/performance/optimized-frame-context.d.ts +74 -0
  412. package/dist/src/core/performance/optimized-frame-context.d.ts.map +1 -0
  413. package/dist/src/core/performance/optimized-frame-context.js +330 -0
  414. package/dist/src/core/performance/optimized-frame-context.js.map +1 -0
  415. package/dist/src/core/performance/performance-benchmark.d.ts +50 -0
  416. package/dist/src/core/performance/performance-benchmark.d.ts.map +1 -0
  417. package/dist/src/core/performance/performance-benchmark.js +290 -0
  418. package/dist/src/core/performance/performance-benchmark.js.map +1 -0
  419. package/dist/src/core/performance/performance-profiler.d.ts +151 -0
  420. package/dist/src/core/performance/performance-profiler.d.ts.map +1 -0
  421. package/dist/src/core/performance/performance-profiler.js +346 -0
  422. package/dist/src/core/performance/performance-profiler.js.map +1 -0
  423. package/dist/src/core/performance/streaming-jsonl-parser.d.ts +41 -0
  424. package/dist/src/core/performance/streaming-jsonl-parser.d.ts.map +1 -0
  425. package/dist/src/core/performance/streaming-jsonl-parser.js +193 -0
  426. package/dist/src/core/performance/streaming-jsonl-parser.js.map +1 -0
  427. package/dist/src/core/persistence/postgres-adapter.d.ts.map +1 -1
  428. package/dist/src/core/persistence/postgres-adapter.js +18 -4
  429. package/dist/src/core/persistence/postgres-adapter.js.map +1 -1
  430. package/dist/src/core/query/query-parser.d.ts +5 -0
  431. package/dist/src/core/query/query-parser.d.ts.map +1 -1
  432. package/dist/src/core/query/query-parser.js +86 -18
  433. package/dist/src/core/query/query-parser.js.map +1 -1
  434. package/dist/src/core/query/query-templates.d.ts +44 -0
  435. package/dist/src/core/query/query-templates.d.ts.map +1 -0
  436. package/dist/src/core/query/query-templates.js +326 -0
  437. package/dist/src/core/query/query-templates.js.map +1 -0
  438. package/dist/src/core/retrieval/llm-context-retrieval.d.ts +5 -3
  439. package/dist/src/core/retrieval/llm-context-retrieval.d.ts.map +1 -1
  440. package/dist/src/core/retrieval/llm-context-retrieval.js +73 -21
  441. package/dist/src/core/retrieval/llm-context-retrieval.js.map +1 -1
  442. package/dist/src/core/trace/cli-trace-wrapper.d.ts +23 -0
  443. package/dist/src/core/trace/cli-trace-wrapper.d.ts.map +1 -0
  444. package/dist/src/core/trace/cli-trace-wrapper.js +141 -0
  445. package/dist/src/core/trace/cli-trace-wrapper.js.map +1 -0
  446. package/dist/src/core/trace/db-trace-wrapper.d.ts +36 -0
  447. package/dist/src/core/trace/db-trace-wrapper.d.ts.map +1 -0
  448. package/dist/src/core/trace/db-trace-wrapper.js +252 -0
  449. package/dist/src/core/trace/db-trace-wrapper.js.map +1 -0
  450. package/dist/src/core/trace/debug-trace.d.ts +84 -0
  451. package/dist/src/core/trace/debug-trace.d.ts.map +1 -0
  452. package/dist/src/core/trace/debug-trace.js +402 -0
  453. package/dist/src/core/trace/debug-trace.js.map +1 -0
  454. package/dist/src/core/trace/error-test.d.ts +6 -0
  455. package/dist/src/core/trace/error-test.d.ts.map +1 -0
  456. package/dist/src/core/trace/error-test.js +128 -0
  457. package/dist/src/core/trace/error-test.js.map +1 -0
  458. package/dist/src/core/trace/index.d.ts +25 -0
  459. package/dist/src/core/trace/index.d.ts.map +1 -0
  460. package/dist/src/core/trace/index.js +121 -0
  461. package/dist/src/core/trace/index.js.map +1 -0
  462. package/dist/src/core/trace/linear-api-wrapper.d.ts +17 -0
  463. package/dist/src/core/trace/linear-api-wrapper.d.ts.map +1 -0
  464. package/dist/src/core/trace/linear-api-wrapper.js +205 -0
  465. package/dist/src/core/trace/linear-api-wrapper.js.map +1 -0
  466. package/dist/src/core/trace/performance-test.d.ts +6 -0
  467. package/dist/src/core/trace/performance-test.d.ts.map +1 -0
  468. package/dist/src/core/trace/performance-test.js +111 -0
  469. package/dist/src/core/trace/performance-test.js.map +1 -0
  470. package/dist/src/core/trace/trace-demo.d.ts +8 -0
  471. package/dist/src/core/trace/trace-demo.d.ts.map +1 -0
  472. package/dist/src/core/trace/trace-demo.js +154 -0
  473. package/dist/src/core/trace/trace-demo.js.map +1 -0
  474. package/dist/src/core/trace/trace-detector.d.ts +2 -2
  475. package/dist/src/core/trace/trace-detector.d.ts.map +1 -1
  476. package/dist/src/core/trace/trace-detector.demo.js +1 -1
  477. package/dist/src/core/trace/trace-detector.demo.js.map +1 -1
  478. package/dist/src/core/trace/trace-detector.js +3 -3
  479. package/dist/src/core/trace/trace-detector.js.map +1 -1
  480. package/dist/src/features/tasks/pebbles-task-store.d.ts +9 -2
  481. package/dist/src/features/tasks/pebbles-task-store.d.ts.map +1 -1
  482. package/dist/src/features/tasks/pebbles-task-store.js +97 -18
  483. package/dist/src/features/tasks/pebbles-task-store.js.map +1 -1
  484. package/dist/src/integrations/linear/auth.d.ts.map +1 -1
  485. package/dist/src/integrations/linear/auth.js.map +1 -1
  486. package/dist/src/integrations/linear/client.d.ts +15 -1
  487. package/dist/src/integrations/linear/client.d.ts.map +1 -1
  488. package/dist/src/integrations/linear/client.js +85 -3
  489. package/dist/src/integrations/linear/client.js.map +1 -1
  490. package/dist/src/integrations/linear/sync-manager.d.ts +2 -0
  491. package/dist/src/integrations/linear/sync-manager.d.ts.map +1 -1
  492. package/dist/src/integrations/linear/sync-manager.js +16 -4
  493. package/dist/src/integrations/linear/sync-manager.js.map +1 -1
  494. package/dist/src/integrations/linear/sync-service.d.ts +23 -2
  495. package/dist/src/integrations/linear/sync-service.d.ts.map +1 -1
  496. package/dist/src/integrations/linear/sync-service.js +44 -25
  497. package/dist/src/integrations/linear/sync-service.js.map +1 -1
  498. package/dist/src/integrations/linear/sync.d.ts +6 -0
  499. package/dist/src/integrations/linear/sync.d.ts.map +1 -1
  500. package/dist/src/integrations/linear/sync.js +27 -2
  501. package/dist/src/integrations/linear/sync.js.map +1 -1
  502. package/dist/src/integrations/linear/types.d.ts +16 -1
  503. package/dist/src/integrations/linear/types.d.ts.map +1 -1
  504. package/dist/src/integrations/linear/webhook-server.d.ts.map +1 -1
  505. package/dist/src/integrations/linear/webhook-server.js +10 -8
  506. package/dist/src/integrations/linear/webhook-server.js.map +1 -1
  507. package/dist/src/integrations/linear/webhook.d.ts +13 -0
  508. package/dist/src/integrations/linear/webhook.d.ts.map +1 -1
  509. package/dist/src/integrations/linear/webhook.js +101 -14
  510. package/dist/src/integrations/linear/webhook.js.map +1 -1
  511. package/dist/src/integrations/mcp/handlers/context-handlers.d.ts +39 -0
  512. package/dist/src/integrations/mcp/handlers/context-handlers.d.ts.map +1 -0
  513. package/dist/src/integrations/mcp/handlers/context-handlers.js +266 -0
  514. package/dist/src/integrations/mcp/handlers/context-handlers.js.map +1 -0
  515. package/dist/src/integrations/mcp/handlers/index.d.ts +37 -0
  516. package/dist/src/integrations/mcp/handlers/index.d.ts.map +1 -0
  517. package/dist/src/integrations/mcp/handlers/index.js +134 -0
  518. package/dist/src/integrations/mcp/handlers/index.js.map +1 -0
  519. package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts +33 -0
  520. package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts.map +1 -0
  521. package/dist/src/integrations/mcp/handlers/linear-handlers.js +251 -0
  522. package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +1 -0
  523. package/dist/src/integrations/mcp/handlers/task-handlers.d.ts +42 -0
  524. package/dist/src/integrations/mcp/handlers/task-handlers.d.ts.map +1 -0
  525. package/dist/src/integrations/mcp/handlers/task-handlers.js +238 -0
  526. package/dist/src/integrations/mcp/handlers/task-handlers.js.map +1 -0
  527. package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts +41 -0
  528. package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts.map +1 -0
  529. package/dist/src/integrations/mcp/handlers/trace-handlers.js +298 -0
  530. package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +1 -0
  531. package/dist/src/integrations/mcp/index.d.ts +13 -0
  532. package/dist/src/integrations/mcp/index.d.ts.map +1 -0
  533. package/dist/src/integrations/mcp/index.js +17 -0
  534. package/dist/src/integrations/mcp/index.js.map +1 -0
  535. package/dist/src/integrations/mcp/refactored-server.d.ts +76 -0
  536. package/dist/src/integrations/mcp/refactored-server.d.ts.map +1 -0
  537. package/dist/src/integrations/mcp/refactored-server.js +351 -0
  538. package/dist/src/integrations/mcp/refactored-server.js.map +1 -0
  539. package/dist/src/integrations/mcp/tool-definitions.d.ts +44 -0
  540. package/dist/src/integrations/mcp/tool-definitions.d.ts.map +1 -0
  541. package/dist/src/integrations/mcp/tool-definitions.js +563 -0
  542. package/dist/src/integrations/mcp/tool-definitions.js.map +1 -0
  543. package/dist/src/integrations/pg-aiguide/semantic-search.d.ts.map +1 -1
  544. package/dist/src/integrations/pg-aiguide/semantic-search.js +43 -21
  545. package/dist/src/integrations/pg-aiguide/semantic-search.js.map +1 -1
  546. package/dist/src/mcp/stackmemory-mcp-server.d.ts +9 -0
  547. package/dist/src/mcp/stackmemory-mcp-server.d.ts.map +1 -0
  548. package/dist/src/mcp/stackmemory-mcp-server.js +519 -0
  549. package/dist/src/mcp/stackmemory-mcp-server.js.map +1 -0
  550. package/dist/src/middleware/exponential-rate-limiter.d.ts +78 -0
  551. package/dist/src/middleware/exponential-rate-limiter.d.ts.map +1 -0
  552. package/dist/src/middleware/exponential-rate-limiter.js +293 -0
  553. package/dist/src/middleware/exponential-rate-limiter.js.map +1 -0
  554. package/dist/src/models/user.model.d.ts +8 -1
  555. package/dist/src/models/user.model.d.ts.map +1 -1
  556. package/dist/src/models/user.model.js +62 -14
  557. package/dist/src/models/user.model.js.map +1 -1
  558. package/dist/src/servers/production/auth-middleware.d.ts +5 -2
  559. package/dist/src/servers/production/auth-middleware.d.ts.map +1 -1
  560. package/dist/src/servers/production/auth-middleware.js +71 -34
  561. package/dist/src/servers/production/auth-middleware.js.map +1 -1
  562. package/dist/src/services/context-service.d.ts.map +1 -1
  563. package/dist/src/services/context-service.js +86 -1
  564. package/dist/src/services/context-service.js.map +1 -1
  565. package/dist/src/validation/schemas.d.ts +633 -0
  566. package/dist/src/validation/schemas.d.ts.map +1 -0
  567. package/dist/src/validation/schemas.js +347 -0
  568. package/dist/src/validation/schemas.js.map +1 -0
  569. package/dist/types/task.js +1 -0
  570. package/dist/types/task.js.map +7 -0
  571. package/dist/utils/logger.js +52 -0
  572. package/dist/utils/logger.js.map +7 -0
  573. package/dist/validation/schemas.js +218 -0
  574. package/dist/validation/schemas.js.map +7 -0
  575. package/package.json +7 -3
@@ -0,0 +1,283 @@
1
+ #!/usr/bin/env node
2
+ import { spawn, execSync } from "child_process";
3
+ import * as fs from "fs";
4
+ import * as path from "path";
5
+ import * as os from "os";
6
+ import { program } from "commander";
7
+ import { v4 as uuidv4 } from "uuid";
8
+ import chalk from "chalk";
9
+ import { initializeTracing, trace } from "../core/trace/index.js";
10
+ class CodexSM {
11
+ config;
12
+ stackmemoryPath;
13
+ constructor() {
14
+ this.config = {
15
+ instanceId: this.generateInstanceId(),
16
+ useWorktree: false,
17
+ contextEnabled: true,
18
+ tracingEnabled: true,
19
+ verboseTracing: false
20
+ };
21
+ this.stackmemoryPath = this.findStackMemory();
22
+ }
23
+ generateInstanceId() {
24
+ return uuidv4().substring(0, 8);
25
+ }
26
+ findStackMemory() {
27
+ const possiblePaths = [
28
+ path.join(os.homedir(), ".stackmemory", "bin", "stackmemory"),
29
+ "/usr/local/bin/stackmemory",
30
+ "/opt/homebrew/bin/stackmemory",
31
+ "stackmemory"
32
+ ];
33
+ for (const smPath of possiblePaths) {
34
+ try {
35
+ execSync(`which ${smPath}`, { stdio: "ignore" });
36
+ return smPath;
37
+ } catch {
38
+ }
39
+ }
40
+ return "stackmemory";
41
+ }
42
+ isGitRepo() {
43
+ try {
44
+ execSync("git rev-parse --git-dir", { stdio: "ignore" });
45
+ return true;
46
+ } catch {
47
+ return false;
48
+ }
49
+ }
50
+ getCurrentBranch() {
51
+ try {
52
+ return execSync("git rev-parse --abbrev-ref HEAD", { encoding: "utf8" }).trim();
53
+ } catch {
54
+ return "main";
55
+ }
56
+ }
57
+ hasUncommittedChanges() {
58
+ try {
59
+ const status = execSync("git status --porcelain", { encoding: "utf8" });
60
+ return status.length > 0;
61
+ } catch {
62
+ return false;
63
+ }
64
+ }
65
+ setupWorktree() {
66
+ if (!this.config.useWorktree || !this.isGitRepo()) return null;
67
+ console.log(chalk.blue("\u{1F333} Setting up isolated worktree..."));
68
+ const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-").substring(0, 19);
69
+ const branch = this.config.branch || `codex-${this.config.task || "work"}-${timestamp}-${this.config.instanceId}`;
70
+ const repoName = path.basename(process.cwd());
71
+ const worktreePath = path.join(path.dirname(process.cwd()), `${repoName}--${branch}`);
72
+ try {
73
+ const cmd = `git worktree add -b "${branch}" "${worktreePath}"`;
74
+ execSync(cmd, { stdio: "inherit" });
75
+ console.log(chalk.green(`\u2705 Worktree created: ${worktreePath}`));
76
+ console.log(chalk.gray(` Branch: ${branch}`));
77
+ const configPath = path.join(worktreePath, ".codex-instance.json");
78
+ const configData = {
79
+ instanceId: this.config.instanceId,
80
+ worktreePath,
81
+ branch,
82
+ task: this.config.task,
83
+ created: (/* @__PURE__ */ new Date()).toISOString(),
84
+ parentRepo: process.cwd()
85
+ };
86
+ fs.writeFileSync(configPath, JSON.stringify(configData, null, 2));
87
+ const envFiles = [".env", ".env.local", ".mise.toml", ".tool-versions"];
88
+ for (const file of envFiles) {
89
+ const srcPath = path.join(process.cwd(), file);
90
+ if (fs.existsSync(srcPath)) fs.copyFileSync(srcPath, path.join(worktreePath, file));
91
+ }
92
+ return worktreePath;
93
+ } catch (err) {
94
+ console.error(chalk.red("\u274C Failed to create worktree:"), err);
95
+ return null;
96
+ }
97
+ }
98
+ saveContext(message, metadata = {}) {
99
+ if (!this.config.contextEnabled) return;
100
+ try {
101
+ const contextData = {
102
+ message,
103
+ metadata: {
104
+ ...metadata,
105
+ instanceId: this.config.instanceId,
106
+ worktree: this.config.worktreePath,
107
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
108
+ }
109
+ };
110
+ const cmd = `${this.stackmemoryPath} context save --json '${JSON.stringify(contextData)}'`;
111
+ execSync(cmd, { stdio: "ignore" });
112
+ } catch {
113
+ }
114
+ }
115
+ loadContext() {
116
+ if (!this.config.contextEnabled) return;
117
+ try {
118
+ console.log(chalk.blue("\u{1F4DA} Loading previous context..."));
119
+ const cmd = `${this.stackmemoryPath} context list --limit 5 --format json`;
120
+ const output = execSync(cmd, { encoding: "utf8" });
121
+ const contexts = JSON.parse(output);
122
+ if (Array.isArray(contexts) && contexts.length > 0) {
123
+ console.log(chalk.gray("Recent context loaded:"));
124
+ contexts.forEach((ctx) => {
125
+ console.log(chalk.gray(` - ${ctx.message} (${ctx.metadata?.timestamp})`));
126
+ });
127
+ }
128
+ } catch {
129
+ }
130
+ }
131
+ suggestWorktreeMode() {
132
+ if (this.hasUncommittedChanges()) {
133
+ console.log(chalk.yellow("\u26A0\uFE0F Uncommitted changes detected"));
134
+ console.log(chalk.gray(" Consider using --worktree to work in isolation"));
135
+ }
136
+ }
137
+ async run(args) {
138
+ const codexArgs = [];
139
+ let i = 0;
140
+ while (i < args.length) {
141
+ const arg = args[i];
142
+ switch (arg) {
143
+ case "--worktree":
144
+ case "-w":
145
+ this.config.useWorktree = true;
146
+ break;
147
+ case "--no-context":
148
+ this.config.contextEnabled = false;
149
+ break;
150
+ case "--no-trace":
151
+ this.config.tracingEnabled = false;
152
+ break;
153
+ case "--verbose-trace":
154
+ this.config.verboseTracing = true;
155
+ break;
156
+ case "--branch":
157
+ case "-b":
158
+ i++;
159
+ this.config.branch = args[i];
160
+ break;
161
+ case "--task":
162
+ case "-t":
163
+ i++;
164
+ this.config.task = args[i];
165
+ break;
166
+ case "--auto":
167
+ case "-a":
168
+ if (this.isGitRepo()) {
169
+ this.config.useWorktree = this.hasUncommittedChanges();
170
+ }
171
+ break;
172
+ default:
173
+ codexArgs.push(arg);
174
+ }
175
+ i++;
176
+ }
177
+ if (this.config.tracingEnabled) {
178
+ process.env.DEBUG_TRACE = "true";
179
+ process.env.STACKMEMORY_DEBUG = "true";
180
+ process.env.TRACE_OUTPUT = "file";
181
+ process.env.TRACE_MASK_SENSITIVE = "true";
182
+ if (this.config.verboseTracing) {
183
+ process.env.TRACE_VERBOSITY = "full";
184
+ process.env.TRACE_PARAMS = "true";
185
+ process.env.TRACE_RESULTS = "true";
186
+ process.env.TRACE_MEMORY = "true";
187
+ } else {
188
+ process.env.TRACE_VERBOSITY = "summary";
189
+ process.env.TRACE_PARAMS = "true";
190
+ process.env.TRACE_RESULTS = "false";
191
+ }
192
+ initializeTracing();
193
+ trace.command("codex-sm", {
194
+ instanceId: this.config.instanceId,
195
+ worktree: this.config.useWorktree,
196
+ task: this.config.task
197
+ }, async () => {
198
+ });
199
+ }
200
+ console.log(chalk.blue("\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557"));
201
+ console.log(chalk.blue("\u2551 Codex + StackMemory + Worktree \u2551"));
202
+ console.log(chalk.blue("\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D"));
203
+ console.log();
204
+ if (this.isGitRepo()) {
205
+ const branch = this.getCurrentBranch();
206
+ console.log(chalk.gray(`\u{1F4CD} Current branch: ${branch}`));
207
+ if (!this.config.useWorktree) this.suggestWorktreeMode();
208
+ }
209
+ if (this.config.useWorktree) {
210
+ const worktreePath = this.setupWorktree();
211
+ if (worktreePath) {
212
+ this.config.worktreePath = worktreePath;
213
+ process.chdir(worktreePath);
214
+ this.saveContext("Created worktree for Codex instance", {
215
+ action: "worktree_created",
216
+ path: worktreePath,
217
+ branch: this.config.branch
218
+ });
219
+ }
220
+ }
221
+ this.loadContext();
222
+ process.env.CODEX_INSTANCE_ID = this.config.instanceId;
223
+ if (this.config.worktreePath) process.env.CODEX_WORKTREE_PATH = this.config.worktreePath;
224
+ console.log(chalk.gray(`\u{1F916} Instance ID: ${this.config.instanceId}`));
225
+ console.log(chalk.gray(`\u{1F4C1} Working in: ${process.cwd()}`));
226
+ console.log();
227
+ console.log(chalk.gray("Starting Codex..."));
228
+ console.log(chalk.gray("\u2500".repeat(42)));
229
+ const codexBin = (() => {
230
+ try {
231
+ execSync("which codex", { stdio: "ignore" });
232
+ return "codex";
233
+ } catch {
234
+ }
235
+ try {
236
+ execSync("which codex-cli", { stdio: "ignore" });
237
+ return "codex-cli";
238
+ } catch {
239
+ }
240
+ return null;
241
+ })();
242
+ if (!codexBin) {
243
+ console.error(chalk.red("\u274C Codex CLI not found in PATH (codex or codex-cli)."));
244
+ process.exit(1);
245
+ return;
246
+ }
247
+ const child = spawn(codexBin, codexArgs, { stdio: "inherit", env: process.env });
248
+ child.on("exit", (code) => {
249
+ this.saveContext("Codex session ended", { action: "session_end", exitCode: code });
250
+ if (this.config.tracingEnabled) {
251
+ const summary = trace.getExecutionSummary();
252
+ console.log();
253
+ console.log(chalk.gray("\u2500".repeat(42)));
254
+ console.log(chalk.blue("Debug Trace Summary:"));
255
+ console.log(chalk.gray(summary));
256
+ }
257
+ if (this.config.worktreePath) {
258
+ console.log();
259
+ console.log(chalk.gray("\u2500".repeat(42)));
260
+ console.log(chalk.blue("Session ended in worktree:"));
261
+ console.log(chalk.gray(` ${this.config.worktreePath}`));
262
+ }
263
+ process.exit(code || 0);
264
+ });
265
+ process.on("SIGINT", () => {
266
+ this.saveContext("Codex session interrupted", { action: "session_interrupt" });
267
+ child.kill("SIGINT");
268
+ });
269
+ process.on("SIGTERM", () => {
270
+ this.saveContext("Codex session terminated", { action: "session_terminate" });
271
+ child.kill("SIGTERM");
272
+ });
273
+ }
274
+ }
275
+ program.name("codex-sm").description("Codex with StackMemory context and optional worktree isolation").version("1.0.0").option("-w, --worktree", "Create isolated worktree for this instance").option("-a, --auto", "Automatically detect and apply best settings").option("-b, --branch <name>", "Specify branch name for worktree").option("-t, --task <desc>", "Task description for context").option("--no-context", "Disable StackMemory context integration").option("--no-trace", "Disable debug tracing (enabled by default)").option("--verbose-trace", "Enable verbose debug tracing with full details").helpOption("-h, --help", "Display help").allowUnknownOption(true).action(async (_options) => {
276
+ const codexSM = new CodexSM();
277
+ const args = process.argv.slice(2);
278
+ await codexSM.run(args);
279
+ });
280
+ if (require.main === module) {
281
+ program.parse(process.argv);
282
+ }
283
+ //# sourceMappingURL=codex-sm.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/cli/codex-sm.ts"],
4
+ "sourcesContent": ["#!/usr/bin/env node\n\n/**\n * codex-sm: Codex wrapper with StackMemory and worktree integration\n * Automatically manages context persistence, optional worktree isolation, and tracing\n */\n\nimport { spawn, execSync } from 'child_process';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport * as os from 'os';\nimport { program } from 'commander';\nimport { v4 as uuidv4 } from 'uuid';\nimport chalk from 'chalk';\nimport { initializeTracing, trace } from '../core/trace/index.js';\n\ninterface CodexConfig {\n instanceId: string;\n worktreePath?: string;\n useWorktree: boolean;\n contextEnabled: boolean;\n branch?: string;\n task?: string;\n tracingEnabled: boolean;\n verboseTracing: boolean;\n}\n\nclass CodexSM {\n private config: CodexConfig;\n private stackmemoryPath: string;\n\n constructor() {\n this.config = {\n instanceId: this.generateInstanceId(),\n useWorktree: false,\n contextEnabled: true,\n tracingEnabled: true,\n verboseTracing: false,\n };\n\n this.stackmemoryPath = this.findStackMemory();\n }\n\n private generateInstanceId(): string {\n return uuidv4().substring(0, 8);\n }\n\n private findStackMemory(): string {\n const possiblePaths = [\n path.join(os.homedir(), '.stackmemory', 'bin', 'stackmemory'),\n '/usr/local/bin/stackmemory',\n '/opt/homebrew/bin/stackmemory',\n 'stackmemory',\n ];\n for (const smPath of possiblePaths) {\n try {\n execSync(`which ${smPath}`, { stdio: 'ignore' });\n return smPath;\n } catch {\n // continue\n }\n }\n return 'stackmemory';\n }\n\n private isGitRepo(): boolean {\n try {\n execSync('git rev-parse --git-dir', { stdio: 'ignore' });\n return true;\n } catch {\n return false;\n }\n }\n\n private getCurrentBranch(): string {\n try {\n return execSync('git rev-parse --abbrev-ref HEAD', { encoding: 'utf8' }).trim();\n } catch {\n return 'main';\n }\n }\n\n private hasUncommittedChanges(): boolean {\n try {\n const status = execSync('git status --porcelain', { encoding: 'utf8' });\n return status.length > 0;\n } catch {\n return false;\n }\n }\n\n private setupWorktree(): string | null {\n if (!this.config.useWorktree || !this.isGitRepo()) return null;\n\n console.log(chalk.blue('\uD83C\uDF33 Setting up isolated worktree...'));\n\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-').substring(0, 19);\n const branch =\n this.config.branch || `codex-${this.config.task || 'work'}-${timestamp}-${this.config.instanceId}`;\n const repoName = path.basename(process.cwd());\n const worktreePath = path.join(path.dirname(process.cwd()), `${repoName}--${branch}`);\n\n try {\n const cmd = `git worktree add -b \"${branch}\" \"${worktreePath}\"`;\n execSync(cmd, { stdio: 'inherit' });\n\n console.log(chalk.green(`\u2705 Worktree created: ${worktreePath}`));\n console.log(chalk.gray(` Branch: ${branch}`));\n\n const configPath = path.join(worktreePath, '.codex-instance.json');\n const configData = {\n instanceId: this.config.instanceId,\n worktreePath,\n branch,\n task: this.config.task,\n created: new Date().toISOString(),\n parentRepo: process.cwd(),\n };\n fs.writeFileSync(configPath, JSON.stringify(configData, null, 2));\n\n const envFiles = ['.env', '.env.local', '.mise.toml', '.tool-versions'];\n for (const file of envFiles) {\n const srcPath = path.join(process.cwd(), file);\n if (fs.existsSync(srcPath)) fs.copyFileSync(srcPath, path.join(worktreePath, file));\n }\n\n return worktreePath;\n } catch (err) {\n console.error(chalk.red('\u274C Failed to create worktree:'), err);\n return null;\n }\n }\n\n private saveContext(message: string, metadata: Record<string, unknown> = {}): void {\n if (!this.config.contextEnabled) return;\n try {\n const contextData = {\n message,\n metadata: {\n ...metadata,\n instanceId: this.config.instanceId,\n worktree: this.config.worktreePath,\n timestamp: new Date().toISOString(),\n },\n };\n const cmd = `${this.stackmemoryPath} context save --json '${JSON.stringify(contextData)}'`;\n execSync(cmd, { stdio: 'ignore' });\n } catch {\n // ignore\n }\n }\n\n private loadContext(): void {\n if (!this.config.contextEnabled) return;\n try {\n console.log(chalk.blue('\uD83D\uDCDA Loading previous context...'));\n const cmd = `${this.stackmemoryPath} context list --limit 5 --format json`;\n const output = execSync(cmd, { encoding: 'utf8' });\n const contexts = JSON.parse(output);\n if (Array.isArray(contexts) && contexts.length > 0) {\n console.log(chalk.gray('Recent context loaded:'));\n contexts.forEach((ctx: { message: string; metadata?: { timestamp?: string } }) => {\n console.log(chalk.gray(` - ${ctx.message} (${ctx.metadata?.timestamp})`));\n });\n }\n } catch {\n // ignore\n }\n }\n\n private suggestWorktreeMode(): void {\n if (this.hasUncommittedChanges()) {\n console.log(chalk.yellow('\u26A0\uFE0F Uncommitted changes detected'));\n console.log(chalk.gray(' Consider using --worktree to work in isolation'));\n }\n }\n\n public async run(args: string[]): Promise<void> {\n const codexArgs: string[] = [];\n let i = 0;\n while (i < args.length) {\n const arg = args[i];\n switch (arg) {\n case '--worktree':\n case '-w':\n this.config.useWorktree = true;\n break;\n case '--no-context':\n this.config.contextEnabled = false;\n break;\n case '--no-trace':\n this.config.tracingEnabled = false;\n break;\n case '--verbose-trace':\n this.config.verboseTracing = true;\n break;\n case '--branch':\n case '-b':\n i++;\n this.config.branch = args[i];\n break;\n case '--task':\n case '-t':\n i++;\n this.config.task = args[i];\n break;\n case '--auto':\n case '-a':\n if (this.isGitRepo()) {\n this.config.useWorktree = this.hasUncommittedChanges();\n }\n break;\n default:\n codexArgs.push(arg);\n }\n i++;\n }\n\n if (this.config.tracingEnabled) {\n process.env.DEBUG_TRACE = 'true';\n process.env.STACKMEMORY_DEBUG = 'true';\n process.env.TRACE_OUTPUT = 'file';\n process.env.TRACE_MASK_SENSITIVE = 'true';\n if (this.config.verboseTracing) {\n process.env.TRACE_VERBOSITY = 'full';\n process.env.TRACE_PARAMS = 'true';\n process.env.TRACE_RESULTS = 'true';\n process.env.TRACE_MEMORY = 'true';\n } else {\n process.env.TRACE_VERBOSITY = 'summary';\n process.env.TRACE_PARAMS = 'true';\n process.env.TRACE_RESULTS = 'false';\n }\n initializeTracing();\n trace.command('codex-sm', {\n instanceId: this.config.instanceId,\n worktree: this.config.useWorktree,\n task: this.config.task,\n }, async () => {});\n }\n\n console.log(chalk.blue('\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557'));\n console.log(chalk.blue('\u2551 Codex + StackMemory + Worktree \u2551'));\n console.log(chalk.blue('\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D'));\n console.log();\n\n if (this.isGitRepo()) {\n const branch = this.getCurrentBranch();\n console.log(chalk.gray(`\uD83D\uDCCD Current branch: ${branch}`));\n if (!this.config.useWorktree) this.suggestWorktreeMode();\n }\n\n if (this.config.useWorktree) {\n const worktreePath = this.setupWorktree();\n if (worktreePath) {\n this.config.worktreePath = worktreePath;\n process.chdir(worktreePath);\n this.saveContext('Created worktree for Codex instance', {\n action: 'worktree_created',\n path: worktreePath,\n branch: this.config.branch,\n });\n }\n }\n\n this.loadContext();\n\n process.env.CODEX_INSTANCE_ID = this.config.instanceId;\n if (this.config.worktreePath) process.env.CODEX_WORKTREE_PATH = this.config.worktreePath;\n\n console.log(chalk.gray(`\uD83E\uDD16 Instance ID: ${this.config.instanceId}`));\n console.log(chalk.gray(`\uD83D\uDCC1 Working in: ${process.cwd()}`));\n\n console.log();\n console.log(chalk.gray('Starting Codex...'));\n console.log(chalk.gray('\u2500'.repeat(42)));\n\n const codexBin = (() => {\n try { execSync('which codex', { stdio: 'ignore' }); return 'codex'; } catch {}\n try { execSync('which codex-cli', { stdio: 'ignore' }); return 'codex-cli'; } catch {}\n return null;\n })();\n\n if (!codexBin) {\n console.error(chalk.red('\u274C Codex CLI not found in PATH (codex or codex-cli).'));\n process.exit(1);\n return;\n }\n\n const child = spawn(codexBin, codexArgs, { stdio: 'inherit', env: process.env });\n\n child.on('exit', (code) => {\n this.saveContext('Codex session ended', { action: 'session_end', exitCode: code });\n if (this.config.tracingEnabled) {\n const summary = trace.getExecutionSummary();\n console.log();\n console.log(chalk.gray('\u2500'.repeat(42)));\n console.log(chalk.blue('Debug Trace Summary:'));\n console.log(chalk.gray(summary));\n }\n if (this.config.worktreePath) {\n console.log();\n console.log(chalk.gray('\u2500'.repeat(42)));\n console.log(chalk.blue('Session ended in worktree:'));\n console.log(chalk.gray(` ${this.config.worktreePath}`));\n }\n process.exit(code || 0);\n });\n\n process.on('SIGINT', () => {\n this.saveContext('Codex session interrupted', { action: 'session_interrupt' });\n child.kill('SIGINT');\n });\n\n process.on('SIGTERM', () => {\n this.saveContext('Codex session terminated', { action: 'session_terminate' });\n child.kill('SIGTERM');\n });\n }\n}\n\nprogram\n .name('codex-sm')\n .description('Codex with StackMemory context and optional worktree isolation')\n .version('1.0.0')\n .option('-w, --worktree', 'Create isolated worktree for this instance')\n .option('-a, --auto', 'Automatically detect and apply best settings')\n .option('-b, --branch <name>', 'Specify branch name for worktree')\n .option('-t, --task <desc>', 'Task description for context')\n .option('--no-context', 'Disable StackMemory context integration')\n .option('--no-trace', 'Disable debug tracing (enabled by default)')\n .option('--verbose-trace', 'Enable verbose debug tracing with full details')\n .helpOption('-h, --help', 'Display help')\n .allowUnknownOption(true)\n .action(async (_options) => {\n const codexSM = new CodexSM();\n const args = process.argv.slice(2);\n await codexSM.run(args);\n });\n\nif (require.main === module) {\n program.parse(process.argv);\n}\n\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,286 @@
1
+ import { Command } from "commander";
2
+ import Database from "better-sqlite3";
3
+ import { join } from "path";
4
+ import { existsSync } from "fs";
5
+ import chalk from "chalk";
6
+ import ora from "ora";
7
+ import { PebblesTaskStore } from "../../features/tasks/pebbles-task-store.js";
8
+ import { FrameManager } from "../../core/context/frame-manager.js";
9
+ import {
10
+ AgentTaskManager
11
+ } from "../../agents/core/agent-task-manager.js";
12
+ function createAgentCommand() {
13
+ const agent = new Command("agent").description("AI agent task execution with Spotify-inspired strategies").option("-p, --project <path>", "Project root directory", process.cwd());
14
+ agent.command("execute <taskId>").description("Execute a task with agent assistance").option("-f, --frame <frameId>", "Frame ID to use").option("--max-turns <number>", "Maximum turns per session", "10").option("--no-verify", "Skip verification loops").action(async (taskId, options) => {
15
+ const spinner = ora("Initializing agent...").start();
16
+ try {
17
+ const { taskManager, session } = await initializeAgent(
18
+ options.project,
19
+ taskId,
20
+ options.frame,
21
+ parseInt(options.maxTurns)
22
+ );
23
+ spinner.succeed("Agent initialized");
24
+ console.log(chalk.cyan("\n\u{1F4CB} Task Session Started"));
25
+ console.log(chalk.gray(" Session ID:"), session.id);
26
+ console.log(chalk.gray(" Task ID:"), session.taskId);
27
+ console.log(chalk.gray(" Max Turns:"), session.maxTurns);
28
+ console.log(
29
+ chalk.gray(" Verification:"),
30
+ options.verify ? "Enabled" : "Disabled"
31
+ );
32
+ await executeTaskWithFeedback(taskManager, session, options.verify);
33
+ } catch (error) {
34
+ spinner.fail("Agent execution failed");
35
+ console.error(
36
+ chalk.red("Error:"),
37
+ error instanceof Error ? error.message : String(error)
38
+ );
39
+ process.exit(1);
40
+ }
41
+ });
42
+ agent.command("status").description("Show active agent sessions").action(async (options) => {
43
+ const spinner = ora("Loading sessions...").start();
44
+ try {
45
+ const projectRoot = options.parent?.project || process.cwd();
46
+ const { taskManager } = await initializeAgentManager(projectRoot);
47
+ const sessions = taskManager.getActiveSessions();
48
+ spinner.stop();
49
+ if (sessions.length === 0) {
50
+ console.log(chalk.yellow("No active agent sessions"));
51
+ return;
52
+ }
53
+ console.log(chalk.cyan("\n\u{1F916} Active Agent Sessions\n"));
54
+ for (const session of sessions) {
55
+ console.log(chalk.bold(`Session: ${session.sessionId}`));
56
+ console.log(chalk.gray(" Task:"), session.taskId);
57
+ console.log(
58
+ chalk.gray(" Status:"),
59
+ getStatusColor(session.status)(session.status)
60
+ );
61
+ console.log(chalk.gray(" Turn:"), `${session.turnCount}/10`);
62
+ console.log(
63
+ chalk.gray(" Started:"),
64
+ session.startedAt.toLocaleString()
65
+ );
66
+ console.log("");
67
+ }
68
+ } catch (error) {
69
+ spinner.fail("Failed to load sessions");
70
+ console.error(
71
+ chalk.red("Error:"),
72
+ error instanceof Error ? error.message : String(error)
73
+ );
74
+ process.exit(1);
75
+ }
76
+ });
77
+ agent.command("retry <sessionId>").description("Retry a failed session with learned context").action(async (sessionId, options) => {
78
+ const spinner = ora("Retrying session...").start();
79
+ try {
80
+ const projectRoot = options.parent?.project || process.cwd();
81
+ const { taskManager } = await initializeAgentManager(projectRoot);
82
+ const newSession = await taskManager.retrySession(sessionId);
83
+ if (!newSession) {
84
+ spinner.fail(
85
+ "Cannot retry session (max retries reached or session active)"
86
+ );
87
+ return;
88
+ }
89
+ spinner.succeed("Session retry started");
90
+ console.log(chalk.cyan("\n\u267B\uFE0F Retry Session Started"));
91
+ console.log(chalk.gray(" New Session ID:"), newSession.id);
92
+ console.log(chalk.gray(" Task ID:"), newSession.taskId);
93
+ await executeTaskWithFeedback(taskManager, newSession, true);
94
+ } catch (error) {
95
+ spinner.fail("Retry failed");
96
+ console.error(
97
+ chalk.red("Error:"),
98
+ error instanceof Error ? error.message : String(error)
99
+ );
100
+ process.exit(1);
101
+ }
102
+ });
103
+ agent.command("breakdown <taskId>").description("Break down a complex task into subtasks").action(async (taskId, options) => {
104
+ const spinner = ora("Analyzing task complexity...").start();
105
+ try {
106
+ const projectRoot = options.parent?.project || process.cwd();
107
+ const db = await openDatabase(projectRoot);
108
+ const taskStore = new PebblesTaskStore(projectRoot, db);
109
+ const task = taskStore.getTask(taskId);
110
+ if (!task) {
111
+ spinner.fail(`Task ${taskId} not found`);
112
+ return;
113
+ }
114
+ spinner.text = "Breaking down task...";
115
+ const subtasks = generateTaskBreakdown(
116
+ task.title,
117
+ task.description || ""
118
+ );
119
+ spinner.succeed("Task breakdown complete");
120
+ console.log(chalk.cyan(`
121
+ \u{1F4CA} Task Breakdown: ${task.title}
122
+ `));
123
+ subtasks.forEach((subtask, index) => {
124
+ console.log(chalk.bold(`${index + 1}. ${subtask.title}`));
125
+ console.log(chalk.gray(" Description:"), subtask.description);
126
+ console.log(
127
+ chalk.gray(" Estimated turns:"),
128
+ subtask.estimatedTurns
129
+ );
130
+ console.log(
131
+ chalk.gray(" Verifiers:"),
132
+ subtask.verifiers.join(", ")
133
+ );
134
+ console.log("");
135
+ });
136
+ console.log(
137
+ chalk.yellow("Total estimated turns:"),
138
+ subtasks.reduce((sum, st) => sum + st.estimatedTurns, 0)
139
+ );
140
+ } catch (error) {
141
+ spinner.fail("Breakdown failed");
142
+ console.error(
143
+ chalk.red("Error:"),
144
+ error instanceof Error ? error.message : String(error)
145
+ );
146
+ process.exit(1);
147
+ }
148
+ });
149
+ return agent;
150
+ }
151
+ async function initializeAgent(projectRoot, taskId, frameId, maxTurns = 10) {
152
+ const { taskManager, frameManager, taskStore } = await initializeAgentManager(projectRoot);
153
+ const finalFrameId = frameId || frameManager.createFrame({
154
+ type: "task",
155
+ name: `Agent task execution for ${taskId}`,
156
+ inputs: { taskId, agentSession: true }
157
+ });
158
+ const session = await taskManager.startTaskSession(taskId, finalFrameId);
159
+ if (maxTurns !== 10) {
160
+ session.maxTurns = maxTurns;
161
+ }
162
+ return { taskManager, session };
163
+ }
164
+ async function initializeAgentManager(projectRoot) {
165
+ const db = await openDatabase(projectRoot);
166
+ const taskStore = new PebblesTaskStore(projectRoot, db);
167
+ const frameManager = new FrameManager(db, projectRoot, void 0);
168
+ const taskManager = new AgentTaskManager(taskStore, frameManager);
169
+ return { taskManager, frameManager, taskStore };
170
+ }
171
+ async function executeTaskWithFeedback(taskManager, session, enableVerification) {
172
+ console.log(chalk.cyan("\n\u{1F504} Starting execution loop...\n"));
173
+ let turnCount = 0;
174
+ let shouldContinue = true;
175
+ let lastFeedback = "";
176
+ while (shouldContinue && turnCount < session.maxTurns) {
177
+ turnCount++;
178
+ console.log(chalk.bold(`
179
+ \u2550\u2550\u2550 Turn ${turnCount}/${session.maxTurns} \u2550\u2550\u2550`));
180
+ const action = generateMockAction(turnCount, lastFeedback);
181
+ console.log(chalk.gray("Action:"), action.substring(0, 100) + "...");
182
+ const spinner = ora("Executing...").start();
183
+ const result = await taskManager.executeTurn(session.id, action, {
184
+ codeChange: turnCount > 1,
185
+ testsPresent: turnCount > 2,
186
+ enableVerification
187
+ });
188
+ if (result.success) {
189
+ spinner.succeed("Turn completed successfully");
190
+ } else {
191
+ spinner.warn("Turn completed with issues");
192
+ }
193
+ console.log(chalk.yellow("\n\u{1F4DD} Feedback:"));
194
+ console.log(result.feedback);
195
+ if (result.verificationResults.length > 0) {
196
+ console.log(chalk.cyan("\n\u2713 Verification Results:"));
197
+ for (const vr of result.verificationResults) {
198
+ const icon = vr.passed ? "\u2713" : "\u2717";
199
+ const color = vr.passed ? chalk.green : chalk.red;
200
+ console.log(color(` ${icon} ${vr.verifierId}: ${vr.message}`));
201
+ }
202
+ }
203
+ shouldContinue = result.shouldContinue;
204
+ lastFeedback = result.feedback;
205
+ await delay(1e3);
206
+ }
207
+ console.log(chalk.cyan("\n\u2550\u2550\u2550 Session Complete \u2550\u2550\u2550\n"));
208
+ console.log(chalk.gray("Total turns:"), turnCount);
209
+ console.log(chalk.gray("Final status:"), session.status);
210
+ }
211
+ function generateMockAction(turn, previousFeedback) {
212
+ const actions = [
213
+ "Analyzing task requirements and constraints",
214
+ "Setting up project structure and dependencies",
215
+ "Implementing core functionality",
216
+ "Adding error handling and validation",
217
+ "Writing unit tests",
218
+ "Refactoring for better code organization",
219
+ "Adding documentation and comments",
220
+ "Running final verification checks",
221
+ "Optimizing performance",
222
+ "Completing final cleanup"
223
+ ];
224
+ if (previousFeedback.includes("error")) {
225
+ return `Fixing issues: ${previousFeedback.substring(0, 50)}...`;
226
+ }
227
+ return actions[Math.min(turn - 1, actions.length - 1)];
228
+ }
229
+ function generateTaskBreakdown(title, description) {
230
+ return [
231
+ {
232
+ title: `Analyze and plan: ${title}`,
233
+ description: "Understand requirements and create implementation plan",
234
+ estimatedTurns: 2,
235
+ verifiers: ["semantic-validator"]
236
+ },
237
+ {
238
+ title: `Implement core: ${title}`,
239
+ description: "Build main functionality",
240
+ estimatedTurns: 4,
241
+ verifiers: ["formatter", "linter", "semantic-validator"]
242
+ },
243
+ {
244
+ title: `Test and validate: ${title}`,
245
+ description: "Add tests and validate implementation",
246
+ estimatedTurns: 3,
247
+ verifiers: ["test-runner", "semantic-validator"]
248
+ },
249
+ {
250
+ title: `Polish and document: ${title}`,
251
+ description: "Final improvements and documentation",
252
+ estimatedTurns: 1,
253
+ verifiers: ["formatter", "linter"]
254
+ }
255
+ ];
256
+ }
257
+ async function openDatabase(projectRoot) {
258
+ const dbPath = join(projectRoot, ".stackmemory", "cache.db");
259
+ if (!existsSync(join(projectRoot, ".stackmemory"))) {
260
+ throw new Error(
261
+ 'StackMemory not initialized. Run "stackmemory init" first.'
262
+ );
263
+ }
264
+ return new Database(dbPath);
265
+ }
266
+ function getStatusColor(status) {
267
+ switch (status) {
268
+ case "active":
269
+ return chalk.green;
270
+ case "completed":
271
+ return chalk.blue;
272
+ case "failed":
273
+ return chalk.red;
274
+ case "timeout":
275
+ return chalk.yellow;
276
+ default:
277
+ return chalk.gray;
278
+ }
279
+ }
280
+ function delay(ms) {
281
+ return new Promise((resolve) => setTimeout(resolve, ms));
282
+ }
283
+ export {
284
+ createAgentCommand
285
+ };
286
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/cli/commands/agent.ts"],
4
+ "sourcesContent": ["/**\n * Agent command - Integrates Spotify's background coding agent strategies\n * with StackMemory's task system\n *\n * Usage: stackmemory agent <action> [options]\n */\n\nimport { Command } from 'commander';\nimport Database from 'better-sqlite3';\nimport { join } from 'path';\nimport { existsSync } from 'fs';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { PebblesTaskStore } from '../../features/tasks/pebbles-task-store.js';\nimport { FrameManager } from '../../core/context/frame-manager.js';\nimport {\n AgentTaskManager,\n AgentTaskSession,\n} from '../../agents/core/agent-task-manager.js';\nimport { FormatterVerifier } from '../../agents/verifiers/formatter-verifier.js';\nimport { LLMJudge } from '../../agents/verifiers/llm-judge.js';\nimport { logger } from '../../core/monitoring/logger.js';\n\nexport function createAgentCommand(): Command {\n const agent = new Command('agent')\n .description('AI agent task execution with Spotify-inspired strategies')\n .option('-p, --project <path>', 'Project root directory', process.cwd());\n\n agent\n .command('execute <taskId>')\n .description('Execute a task with agent assistance')\n .option('-f, --frame <frameId>', 'Frame ID to use')\n .option('--max-turns <number>', 'Maximum turns per session', '10')\n .option('--no-verify', 'Skip verification loops')\n .action(async (taskId: string, options) => {\n const spinner = ora('Initializing agent...').start();\n\n try {\n const { taskManager, session } = await initializeAgent(\n options.project,\n taskId,\n options.frame,\n parseInt(options.maxTurns)\n );\n\n spinner.succeed('Agent initialized');\n\n // Display session info\n console.log(chalk.cyan('\\n\uD83D\uDCCB Task Session Started'));\n console.log(chalk.gray(' Session ID:'), session.id);\n console.log(chalk.gray(' Task ID:'), session.taskId);\n console.log(chalk.gray(' Max Turns:'), session.maxTurns);\n console.log(\n chalk.gray(' Verification:'),\n options.verify ? 'Enabled' : 'Disabled'\n );\n\n // Execute task with feedback loop\n await executeTaskWithFeedback(taskManager, session, options.verify);\n } catch (error) {\n spinner.fail('Agent execution failed');\n console.error(\n chalk.red('Error:'),\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n });\n\n agent\n .command('status')\n .description('Show active agent sessions')\n .action(async (options) => {\n const spinner = ora('Loading sessions...').start();\n\n try {\n const projectRoot = options.parent?.project || process.cwd();\n const { taskManager } = await initializeAgentManager(projectRoot);\n\n const sessions = taskManager.getActiveSessions();\n spinner.stop();\n\n if (sessions.length === 0) {\n console.log(chalk.yellow('No active agent sessions'));\n return;\n }\n\n console.log(chalk.cyan('\\n\uD83E\uDD16 Active Agent Sessions\\n'));\n\n for (const session of sessions) {\n console.log(chalk.bold(`Session: ${session.sessionId}`));\n console.log(chalk.gray(' Task:'), session.taskId);\n console.log(\n chalk.gray(' Status:'),\n getStatusColor(session.status)(session.status)\n );\n console.log(chalk.gray(' Turn:'), `${session.turnCount}/10`);\n console.log(\n chalk.gray(' Started:'),\n session.startedAt.toLocaleString()\n );\n console.log('');\n }\n } catch (error) {\n spinner.fail('Failed to load sessions');\n console.error(\n chalk.red('Error:'),\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n });\n\n agent\n .command('retry <sessionId>')\n .description('Retry a failed session with learned context')\n .action(async (sessionId: string, options) => {\n const spinner = ora('Retrying session...').start();\n\n try {\n const projectRoot = options.parent?.project || process.cwd();\n const { taskManager } = await initializeAgentManager(projectRoot);\n\n const newSession = await taskManager.retrySession(sessionId);\n\n if (!newSession) {\n spinner.fail(\n 'Cannot retry session (max retries reached or session active)'\n );\n return;\n }\n\n spinner.succeed('Session retry started');\n console.log(chalk.cyan('\\n\u267B\uFE0F Retry Session Started'));\n console.log(chalk.gray(' New Session ID:'), newSession.id);\n console.log(chalk.gray(' Task ID:'), newSession.taskId);\n\n // Execute with feedback\n await executeTaskWithFeedback(taskManager, newSession, true);\n } catch (error) {\n spinner.fail('Retry failed');\n console.error(\n chalk.red('Error:'),\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n });\n\n agent\n .command('breakdown <taskId>')\n .description('Break down a complex task into subtasks')\n .action(async (taskId: string, options) => {\n const spinner = ora('Analyzing task complexity...').start();\n\n try {\n const projectRoot = options.parent?.project || process.cwd();\n const db = await openDatabase(projectRoot);\n const taskStore = new PebblesTaskStore(projectRoot, db);\n\n const task = taskStore.getTask(taskId);\n if (!task) {\n spinner.fail(`Task ${taskId} not found`);\n return;\n }\n\n spinner.text = 'Breaking down task...';\n\n // Simulate task breakdown (in production, would use LLM)\n const subtasks = generateTaskBreakdown(\n task.title,\n task.description || ''\n );\n\n spinner.succeed('Task breakdown complete');\n\n console.log(chalk.cyan(`\\n\uD83D\uDCCA Task Breakdown: ${task.title}\\n`));\n\n subtasks.forEach((subtask, index) => {\n console.log(chalk.bold(`${index + 1}. ${subtask.title}`));\n console.log(chalk.gray(' Description:'), subtask.description);\n console.log(\n chalk.gray(' Estimated turns:'),\n subtask.estimatedTurns\n );\n console.log(\n chalk.gray(' Verifiers:'),\n subtask.verifiers.join(', ')\n );\n console.log('');\n });\n\n console.log(\n chalk.yellow('Total estimated turns:'),\n subtasks.reduce((sum, st) => sum + st.estimatedTurns, 0)\n );\n } catch (error) {\n spinner.fail('Breakdown failed');\n console.error(\n chalk.red('Error:'),\n error instanceof Error ? error.message : String(error)\n );\n process.exit(1);\n }\n });\n\n return agent;\n}\n\n/**\n * Initialize agent and start task session\n */\nasync function initializeAgent(\n projectRoot: string,\n taskId: string,\n frameId?: string,\n maxTurns = 10\n): Promise<{\n taskManager: AgentTaskManager;\n session: AgentTaskSession;\n}> {\n const { taskManager, frameManager, taskStore } =\n await initializeAgentManager(projectRoot);\n\n // Create or get frame\n const finalFrameId =\n frameId ||\n frameManager.createFrame({\n type: 'task',\n name: `Agent task execution for ${taskId}`,\n inputs: { taskId, agentSession: true },\n });\n\n // Start session\n const session = await taskManager.startTaskSession(taskId, finalFrameId);\n\n // Override max turns if specified\n if (maxTurns !== 10) {\n session.maxTurns = maxTurns;\n }\n\n return { taskManager, session };\n}\n\n/**\n * Initialize agent manager components\n */\nasync function initializeAgentManager(projectRoot: string): Promise<{\n taskManager: AgentTaskManager;\n frameManager: FrameManager;\n taskStore: PebblesTaskStore;\n}> {\n const db = await openDatabase(projectRoot);\n const taskStore = new PebblesTaskStore(projectRoot, db);\n const frameManager = new FrameManager(db, projectRoot, undefined);\n const taskManager = new AgentTaskManager(taskStore, frameManager);\n\n return { taskManager, frameManager, taskStore };\n}\n\n/**\n * Execute task with feedback loop (Spotify pattern)\n */\nasync function executeTaskWithFeedback(\n taskManager: AgentTaskManager,\n session: AgentTaskSession,\n enableVerification: boolean\n): Promise<void> {\n console.log(chalk.cyan('\\n\uD83D\uDD04 Starting execution loop...\\n'));\n\n let turnCount = 0;\n let shouldContinue = true;\n let lastFeedback = '';\n\n while (shouldContinue && turnCount < session.maxTurns) {\n turnCount++;\n\n console.log(chalk.bold(`\\n\u2550\u2550\u2550 Turn ${turnCount}/${session.maxTurns} \u2550\u2550\u2550`));\n\n // Simulate agent action (in production, would use actual AI)\n const action = generateMockAction(turnCount, lastFeedback);\n console.log(chalk.gray('Action:'), action.substring(0, 100) + '...');\n\n // Execute turn with verification\n const spinner = ora('Executing...').start();\n\n const result = await taskManager.executeTurn(session.id, action, {\n codeChange: turnCount > 1,\n testsPresent: turnCount > 2,\n enableVerification,\n });\n\n if (result.success) {\n spinner.succeed('Turn completed successfully');\n } else {\n spinner.warn('Turn completed with issues');\n }\n\n // Display feedback\n console.log(chalk.yellow('\\n\uD83D\uDCDD Feedback:'));\n console.log(result.feedback);\n\n // Display verification results if any\n if (result.verificationResults.length > 0) {\n console.log(chalk.cyan('\\n\u2713 Verification Results:'));\n for (const vr of result.verificationResults) {\n const icon = vr.passed ? '\u2713' : '\u2717';\n const color = vr.passed ? chalk.green : chalk.red;\n console.log(color(` ${icon} ${vr.verifierId}: ${vr.message}`));\n }\n }\n\n shouldContinue = result.shouldContinue;\n lastFeedback = result.feedback;\n\n // Short delay for readability\n await delay(1000);\n }\n\n // Final status\n console.log(chalk.cyan('\\n\u2550\u2550\u2550 Session Complete \u2550\u2550\u2550\\n'));\n console.log(chalk.gray('Total turns:'), turnCount);\n console.log(chalk.gray('Final status:'), session.status);\n}\n\n/**\n * Generate mock action for demonstration\n */\nfunction generateMockAction(turn: number, previousFeedback: string): string {\n const actions = [\n 'Analyzing task requirements and constraints',\n 'Setting up project structure and dependencies',\n 'Implementing core functionality',\n 'Adding error handling and validation',\n 'Writing unit tests',\n 'Refactoring for better code organization',\n 'Adding documentation and comments',\n 'Running final verification checks',\n 'Optimizing performance',\n 'Completing final cleanup',\n ];\n\n if (previousFeedback.includes('error')) {\n return `Fixing issues: ${previousFeedback.substring(0, 50)}...`;\n }\n\n return actions[Math.min(turn - 1, actions.length - 1)];\n}\n\n/**\n * Generate task breakdown for complex tasks\n */\nfunction generateTaskBreakdown(\n title: string,\n description: string\n): Array<{\n title: string;\n description: string;\n estimatedTurns: number;\n verifiers: string[];\n}> {\n // Simple heuristic breakdown (in production, would use LLM)\n return [\n {\n title: `Analyze and plan: ${title}`,\n description: 'Understand requirements and create implementation plan',\n estimatedTurns: 2,\n verifiers: ['semantic-validator'],\n },\n {\n title: `Implement core: ${title}`,\n description: 'Build main functionality',\n estimatedTurns: 4,\n verifiers: ['formatter', 'linter', 'semantic-validator'],\n },\n {\n title: `Test and validate: ${title}`,\n description: 'Add tests and validate implementation',\n estimatedTurns: 3,\n verifiers: ['test-runner', 'semantic-validator'],\n },\n {\n title: `Polish and document: ${title}`,\n description: 'Final improvements and documentation',\n estimatedTurns: 1,\n verifiers: ['formatter', 'linter'],\n },\n ];\n}\n\n/**\n * Open or create database\n */\nasync function openDatabase(projectRoot: string): Promise<Database.Database> {\n const dbPath = join(projectRoot, '.stackmemory', 'cache.db');\n\n if (!existsSync(join(projectRoot, '.stackmemory'))) {\n throw new Error(\n 'StackMemory not initialized. Run \"stackmemory init\" first.'\n );\n }\n\n return new Database(dbPath);\n}\n\n/**\n * Get color function for status\n */\nfunction getStatusColor(status: string): (text: string) => string {\n switch (status) {\n case 'active':\n return chalk.green;\n case 'completed':\n return chalk.blue;\n case 'failed':\n return chalk.red;\n case 'timeout':\n return chalk.yellow;\n default:\n return chalk.gray;\n }\n}\n\n/**\n * Delay helper\n */\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }