crewly 1.0.7 → 1.0.10

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 (468) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +50 -3
  3. package/config/constants.ts +59 -0
  4. package/config/index.ts +2 -0
  5. package/config/roles/architect/prompt.md +17 -5
  6. package/config/roles/backend-developer/prompt.md +35 -5
  7. package/config/roles/designer/prompt.md +17 -5
  8. package/config/roles/developer/prompt.md +43 -9
  9. package/config/roles/frontend-developer/prompt.md +35 -5
  10. package/config/roles/fullstack-dev/prompt.md +35 -5
  11. package/config/roles/generalist/prompt.md +18 -5
  12. package/config/roles/orchestrator/prompt.md +126 -3
  13. package/config/roles/product-manager/prompt.md +24 -9
  14. package/config/roles/qa/prompt.md +35 -5
  15. package/config/roles/qa-engineer/prompt.md +35 -5
  16. package/config/roles/sales/prompt.md +17 -5
  17. package/config/roles/support/prompt.md +17 -5
  18. package/config/roles/tpm/prompt.md +17 -5
  19. package/config/skills/agent/_common/lib.sh +4 -0
  20. package/config/skills/agent/core/accept-task/execute.sh +21 -0
  21. package/config/skills/agent/core/accept-task/instructions.md +20 -0
  22. package/config/skills/agent/core/accept-task/skill.json +20 -0
  23. package/config/skills/agent/core/block-task/execute.sh +26 -0
  24. package/config/skills/agent/core/block-task/instructions.md +22 -0
  25. package/config/skills/agent/core/block-task/skill.json +20 -0
  26. package/config/skills/agent/core/check-quality-gates/execute.sh +20 -0
  27. package/config/skills/agent/core/check-quality-gates/instructions.md +23 -0
  28. package/config/skills/agent/core/check-quality-gates/skill.json +20 -0
  29. package/config/skills/agent/core/complete-task/execute.sh +29 -0
  30. package/config/skills/agent/core/complete-task/instructions.md +53 -0
  31. package/config/skills/agent/core/complete-task/skill.json +20 -0
  32. package/config/skills/agent/core/get-my-context/execute.sh +23 -0
  33. package/config/skills/agent/core/get-my-context/instructions.md +21 -0
  34. package/config/skills/agent/core/get-my-context/skill.json +20 -0
  35. package/config/skills/agent/core/get-sops/execute.sh +24 -0
  36. package/config/skills/agent/core/get-sops/instructions.md +21 -0
  37. package/config/skills/agent/core/get-sops/skill.json +20 -0
  38. package/config/skills/agent/core/get-team-status/execute.sh +8 -0
  39. package/config/skills/agent/core/get-team-status/instructions.md +17 -0
  40. package/config/skills/agent/core/get-team-status/skill.json +20 -0
  41. package/config/skills/agent/core/heartbeat/execute.sh +22 -0
  42. package/config/skills/agent/core/heartbeat/instructions.md +23 -0
  43. package/config/skills/agent/core/heartbeat/skill.json +20 -0
  44. package/config/skills/agent/core/manage-knowledge/execute.sh +60 -0
  45. package/config/skills/agent/core/manage-knowledge/instructions.md +46 -0
  46. package/config/skills/agent/core/marketplace-search/execute.sh +77 -0
  47. package/config/skills/agent/core/marketplace-search/instructions.md +59 -0
  48. package/config/skills/agent/core/marketplace-search/skill.json +20 -0
  49. package/config/skills/agent/core/query-knowledge/execute.sh +30 -0
  50. package/config/skills/agent/core/query-knowledge/instructions.md +47 -0
  51. package/config/skills/agent/core/query-knowledge/skill.json +20 -0
  52. package/config/skills/agent/core/read-task/execute.sh +15 -0
  53. package/config/skills/agent/core/read-task/instructions.md +19 -0
  54. package/config/skills/agent/core/read-task/skill.json +20 -0
  55. package/config/skills/agent/core/recall/execute.sh +24 -0
  56. package/config/skills/agent/core/recall/instructions.md +23 -0
  57. package/config/skills/agent/core/recall/skill.json +20 -0
  58. package/config/skills/agent/core/record-learning/execute.sh +29 -0
  59. package/config/skills/agent/core/record-learning/instructions.md +24 -0
  60. package/config/skills/agent/core/record-learning/skill.json +20 -0
  61. package/config/skills/agent/core/register-self/execute.sh +28 -0
  62. package/config/skills/agent/core/register-self/instructions.md +18 -0
  63. package/config/skills/agent/core/register-self/skill.json +20 -0
  64. package/config/skills/agent/core/remember/execute.sh +29 -0
  65. package/config/skills/agent/core/remember/instructions.md +24 -0
  66. package/config/skills/agent/core/remember/skill.json +20 -0
  67. package/config/skills/agent/core/report-progress/execute.sh +28 -0
  68. package/config/skills/agent/core/report-progress/instructions.md +25 -0
  69. package/config/skills/agent/core/report-progress/skill.json +20 -0
  70. package/config/skills/agent/core/report-status/execute.sh +35 -0
  71. package/config/skills/agent/core/report-status/instructions.md +36 -0
  72. package/config/skills/agent/core/report-status/skill.json +20 -0
  73. package/config/skills/agent/core/send-chat-response/execute.sh +26 -0
  74. package/config/skills/agent/core/send-chat-response/instructions.md +22 -0
  75. package/config/skills/agent/core/send-chat-response/skill.json +20 -0
  76. package/config/skills/agent/core/send-message/execute.sh +17 -0
  77. package/config/skills/agent/core/send-message/instructions.md +20 -0
  78. package/config/skills/agent/core/send-message/skill.json +20 -0
  79. package/config/skills/orchestrator/complete-task/execute.sh +1 -0
  80. package/config/skills/orchestrator/delegate-task/execute.sh +1 -1
  81. package/config/skills/registry.json +850 -0
  82. package/config/templates/agent-claude-md.md +16 -0
  83. package/config/templates/research-team.json +22 -0
  84. package/config/templates/startup-team.json +22 -0
  85. package/config/templates/web-dev-team.json +22 -0
  86. package/dist/backend/backend/src/constants.d.ts +127 -1
  87. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  88. package/dist/backend/backend/src/constants.js +119 -8
  89. package/dist/backend/backend/src/constants.js.map +1 -1
  90. package/dist/backend/backend/src/controllers/marketplace/index.d.ts +1 -1
  91. package/dist/backend/backend/src/controllers/marketplace/index.d.ts.map +1 -1
  92. package/dist/backend/backend/src/controllers/marketplace/index.js +1 -1
  93. package/dist/backend/backend/src/controllers/marketplace/index.js.map +1 -1
  94. package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.d.ts +64 -8
  95. package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.d.ts.map +1 -1
  96. package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.js +194 -96
  97. package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.js.map +1 -1
  98. package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.d.ts.map +1 -1
  99. package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.js +7 -2
  100. package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.js.map +1 -1
  101. package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts +7 -0
  102. package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts.map +1 -1
  103. package/dist/backend/backend/src/controllers/task-management/task-management.controller.js +174 -4
  104. package/dist/backend/backend/src/controllers/task-management/task-management.controller.js.map +1 -1
  105. package/dist/backend/backend/src/index.d.ts.map +1 -1
  106. package/dist/backend/backend/src/index.js +34 -0
  107. package/dist/backend/backend/src/index.js.map +1 -1
  108. package/dist/backend/backend/src/routes/modules/task-management.routes.d.ts.map +1 -1
  109. package/dist/backend/backend/src/routes/modules/task-management.routes.js +2 -0
  110. package/dist/backend/backend/src/routes/modules/task-management.routes.js.map +1 -1
  111. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +8 -0
  112. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  113. package/dist/backend/backend/src/services/agent/agent-registration.service.js +89 -17
  114. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  115. package/dist/backend/backend/src/services/agent/context-window-monitor.service.d.ts +265 -0
  116. package/dist/backend/backend/src/services/agent/context-window-monitor.service.d.ts.map +1 -0
  117. package/dist/backend/backend/src/services/agent/context-window-monitor.service.js +811 -0
  118. package/dist/backend/backend/src/services/agent/context-window-monitor.service.js.map +1 -0
  119. package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts.map +1 -1
  120. package/dist/backend/backend/src/services/agent/idle-detection.service.js +11 -4
  121. package/dist/backend/backend/src/services/agent/idle-detection.service.js.map +1 -1
  122. package/dist/backend/backend/src/services/agent/pty-activity-tracker.service.d.ts +11 -0
  123. package/dist/backend/backend/src/services/agent/pty-activity-tracker.service.d.ts.map +1 -1
  124. package/dist/backend/backend/src/services/agent/pty-activity-tracker.service.js +18 -0
  125. package/dist/backend/backend/src/services/agent/pty-activity-tracker.service.js.map +1 -1
  126. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts +12 -0
  127. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
  128. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js +51 -1
  129. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
  130. package/dist/backend/backend/src/services/continuation/patterns/waiting-patterns.d.ts +6 -0
  131. package/dist/backend/backend/src/services/continuation/patterns/waiting-patterns.d.ts.map +1 -1
  132. package/dist/backend/backend/src/services/continuation/patterns/waiting-patterns.js +10 -0
  133. package/dist/backend/backend/src/services/continuation/patterns/waiting-patterns.js.map +1 -1
  134. package/dist/backend/backend/src/services/index.d.ts +3 -0
  135. package/dist/backend/backend/src/services/index.d.ts.map +1 -1
  136. package/dist/backend/backend/src/services/index.js +5 -0
  137. package/dist/backend/backend/src/services/index.js.map +1 -1
  138. package/dist/backend/backend/src/services/marketplace/index.d.ts +1 -0
  139. package/dist/backend/backend/src/services/marketplace/index.d.ts.map +1 -1
  140. package/dist/backend/backend/src/services/marketplace/index.js +2 -0
  141. package/dist/backend/backend/src/services/marketplace/index.js.map +1 -1
  142. package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.d.ts +10 -9
  143. package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.d.ts.map +1 -1
  144. package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.js +262 -73
  145. package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.js.map +1 -1
  146. package/dist/backend/backend/src/services/marketplace/marketplace-submission.service.d.ts +71 -0
  147. package/dist/backend/backend/src/services/marketplace/marketplace-submission.service.d.ts.map +1 -0
  148. package/dist/backend/backend/src/services/marketplace/marketplace-submission.service.js +339 -0
  149. package/dist/backend/backend/src/services/marketplace/marketplace-submission.service.js.map +1 -0
  150. package/dist/backend/backend/src/services/marketplace/marketplace.service.d.ts +4 -15
  151. package/dist/backend/backend/src/services/marketplace/marketplace.service.d.ts.map +1 -1
  152. package/dist/backend/backend/src/services/marketplace/marketplace.service.js +172 -27
  153. package/dist/backend/backend/src/services/marketplace/marketplace.service.js.map +1 -1
  154. package/dist/backend/backend/src/services/mcp-client.d.ts +233 -0
  155. package/dist/backend/backend/src/services/mcp-client.d.ts.map +1 -0
  156. package/dist/backend/backend/src/services/mcp-client.js +297 -0
  157. package/dist/backend/backend/src/services/mcp-client.js.map +1 -0
  158. package/dist/backend/backend/src/services/mcp-server.d.ts +167 -0
  159. package/dist/backend/backend/src/services/mcp-server.d.ts.map +1 -0
  160. package/dist/backend/backend/src/services/mcp-server.js +586 -0
  161. package/dist/backend/backend/src/services/mcp-server.js.map +1 -0
  162. package/dist/backend/backend/src/services/messaging/message-queue.service.d.ts +32 -2
  163. package/dist/backend/backend/src/services/messaging/message-queue.service.d.ts.map +1 -1
  164. package/dist/backend/backend/src/services/messaging/message-queue.service.js +85 -4
  165. package/dist/backend/backend/src/services/messaging/message-queue.service.js.map +1 -1
  166. package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts +10 -0
  167. package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
  168. package/dist/backend/backend/src/services/messaging/queue-processor.service.js +129 -41
  169. package/dist/backend/backend/src/services/messaging/queue-processor.service.js.map +1 -1
  170. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.d.ts.map +1 -1
  171. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js +31 -0
  172. package/dist/backend/backend/src/services/orchestrator/orchestrator-status.service.js.map +1 -1
  173. package/dist/backend/backend/src/services/quality/index.d.ts +1 -0
  174. package/dist/backend/backend/src/services/quality/index.d.ts.map +1 -1
  175. package/dist/backend/backend/src/services/quality/index.js +1 -0
  176. package/dist/backend/backend/src/services/quality/index.js.map +1 -1
  177. package/dist/backend/backend/src/services/quality/task-output-validator.service.d.ts +84 -0
  178. package/dist/backend/backend/src/services/quality/task-output-validator.service.d.ts.map +1 -0
  179. package/dist/backend/backend/src/services/quality/task-output-validator.service.js +163 -0
  180. package/dist/backend/backend/src/services/quality/task-output-validator.service.js.map +1 -0
  181. package/dist/backend/backend/src/services/runtime-adapter.d.ts +254 -0
  182. package/dist/backend/backend/src/services/runtime-adapter.d.ts.map +1 -0
  183. package/dist/backend/backend/src/services/runtime-adapter.js +201 -0
  184. package/dist/backend/backend/src/services/runtime-adapter.js.map +1 -0
  185. package/dist/backend/backend/src/services/session/pty/pty-session-backend.d.ts +19 -0
  186. package/dist/backend/backend/src/services/session/pty/pty-session-backend.d.ts.map +1 -1
  187. package/dist/backend/backend/src/services/session/pty/pty-session-backend.js +31 -2
  188. package/dist/backend/backend/src/services/session/pty/pty-session-backend.js.map +1 -1
  189. package/dist/backend/backend/src/services/session/session-backend.interface.d.ts +14 -0
  190. package/dist/backend/backend/src/services/session/session-backend.interface.d.ts.map +1 -1
  191. package/dist/backend/backend/src/services/session/session-backend.interface.js.map +1 -1
  192. package/dist/backend/backend/src/services/session/session-command-helper.d.ts +9 -0
  193. package/dist/backend/backend/src/services/session/session-command-helper.d.ts.map +1 -1
  194. package/dist/backend/backend/src/services/session/session-command-helper.js +24 -1
  195. package/dist/backend/backend/src/services/session/session-command-helper.js.map +1 -1
  196. package/dist/backend/backend/src/services/skill/skill-catalog.service.d.ts +7 -13
  197. package/dist/backend/backend/src/services/skill/skill-catalog.service.d.ts.map +1 -1
  198. package/dist/backend/backend/src/services/skill/skill-catalog.service.js +38 -47
  199. package/dist/backend/backend/src/services/skill/skill-catalog.service.js.map +1 -1
  200. package/dist/backend/backend/src/services/skill/skill.service.d.ts +3 -0
  201. package/dist/backend/backend/src/services/skill/skill.service.d.ts.map +1 -1
  202. package/dist/backend/backend/src/services/skill/skill.service.js +17 -0
  203. package/dist/backend/backend/src/services/skill/skill.service.js.map +1 -1
  204. package/dist/backend/backend/src/types/event-bus.types.d.ts +2 -2
  205. package/dist/backend/backend/src/types/event-bus.types.d.ts.map +1 -1
  206. package/dist/backend/backend/src/types/event-bus.types.js +2 -0
  207. package/dist/backend/backend/src/types/event-bus.types.js.map +1 -1
  208. package/dist/backend/backend/src/types/index.d.ts +1 -0
  209. package/dist/backend/backend/src/types/index.d.ts.map +1 -1
  210. package/dist/backend/backend/src/types/index.js +2 -0
  211. package/dist/backend/backend/src/types/index.js.map +1 -1
  212. package/dist/backend/backend/src/types/marketplace.types.d.ts +37 -0
  213. package/dist/backend/backend/src/types/marketplace.types.d.ts.map +1 -1
  214. package/dist/backend/backend/src/types/messaging.types.d.ts +9 -6
  215. package/dist/backend/backend/src/types/messaging.types.d.ts.map +1 -1
  216. package/dist/backend/backend/src/types/messaging.types.js +10 -3
  217. package/dist/backend/backend/src/types/messaging.types.js.map +1 -1
  218. package/dist/backend/backend/src/types/task-output.types.d.ts +78 -0
  219. package/dist/backend/backend/src/types/task-output.types.d.ts.map +1 -0
  220. package/dist/backend/backend/src/types/task-output.types.js +27 -0
  221. package/dist/backend/backend/src/types/task-output.types.js.map +1 -0
  222. package/dist/backend/backend/src/websocket/terminal.gateway.d.ts +13 -0
  223. package/dist/backend/backend/src/websocket/terminal.gateway.d.ts.map +1 -1
  224. package/dist/backend/backend/src/websocket/terminal.gateway.js +12 -0
  225. package/dist/backend/backend/src/websocket/terminal.gateway.js.map +1 -1
  226. package/dist/backend/config/constants.d.ts +41 -0
  227. package/dist/backend/config/constants.d.ts.map +1 -1
  228. package/dist/backend/config/constants.js +57 -0
  229. package/dist/backend/config/constants.js.map +1 -1
  230. package/dist/backend/config/index.d.ts +2 -2
  231. package/dist/backend/config/index.d.ts.map +1 -1
  232. package/dist/backend/config/index.js +2 -2
  233. package/dist/backend/config/index.js.map +1 -1
  234. package/dist/cli/backend/src/constants.d.ts +817 -0
  235. package/dist/cli/backend/src/constants.d.ts.map +1 -0
  236. package/dist/cli/backend/src/constants.js +603 -0
  237. package/dist/cli/backend/src/constants.js.map +1 -0
  238. package/dist/cli/backend/src/models/Project.d.ts +18 -0
  239. package/dist/cli/backend/src/models/Project.d.ts.map +1 -0
  240. package/dist/cli/backend/src/models/Project.js +70 -0
  241. package/dist/cli/backend/src/models/Project.js.map +1 -0
  242. package/dist/cli/backend/src/models/ScheduledMessage.d.ts +27 -0
  243. package/dist/cli/backend/src/models/ScheduledMessage.d.ts.map +1 -0
  244. package/dist/cli/backend/src/models/ScheduledMessage.js +50 -0
  245. package/dist/cli/backend/src/models/ScheduledMessage.js.map +1 -0
  246. package/dist/cli/backend/src/models/Team.d.ts +20 -0
  247. package/dist/cli/backend/src/models/Team.d.ts.map +1 -0
  248. package/dist/cli/backend/src/models/Team.js +120 -0
  249. package/dist/cli/backend/src/models/Team.js.map +1 -0
  250. package/dist/cli/backend/src/models/Ticket.d.ts +24 -0
  251. package/dist/cli/backend/src/models/Ticket.d.ts.map +1 -0
  252. package/dist/cli/backend/src/models/Ticket.js +102 -0
  253. package/dist/cli/backend/src/models/Ticket.js.map +1 -0
  254. package/dist/cli/backend/src/models/index.d.ts +5 -0
  255. package/dist/cli/backend/src/models/index.d.ts.map +1 -0
  256. package/dist/cli/backend/src/models/index.js +5 -0
  257. package/dist/cli/backend/src/models/index.js.map +1 -0
  258. package/dist/cli/backend/src/services/continuation/patterns/waiting-patterns.d.ts +40 -0
  259. package/dist/cli/backend/src/services/continuation/patterns/waiting-patterns.d.ts.map +1 -0
  260. package/dist/cli/backend/src/services/continuation/patterns/waiting-patterns.js +74 -0
  261. package/dist/cli/backend/src/services/continuation/patterns/waiting-patterns.js.map +1 -0
  262. package/dist/cli/backend/src/services/core/config.service.d.ts +91 -0
  263. package/dist/cli/backend/src/services/core/config.service.d.ts.map +1 -0
  264. package/dist/cli/backend/src/services/core/config.service.js +246 -0
  265. package/dist/cli/backend/src/services/core/config.service.js.map +1 -0
  266. package/dist/cli/backend/src/services/core/logger.service.d.ts +70 -0
  267. package/dist/cli/backend/src/services/core/logger.service.d.ts.map +1 -0
  268. package/dist/cli/backend/src/services/core/logger.service.js +350 -0
  269. package/dist/cli/backend/src/services/core/logger.service.js.map +1 -0
  270. package/dist/cli/backend/src/services/core/storage.service.d.ts +269 -0
  271. package/dist/cli/backend/src/services/core/storage.service.d.ts.map +1 -0
  272. package/dist/cli/backend/src/services/core/storage.service.js +1406 -0
  273. package/dist/cli/backend/src/services/core/storage.service.js.map +1 -0
  274. package/dist/cli/backend/src/services/core/teams-backup.service.d.ts +92 -0
  275. package/dist/cli/backend/src/services/core/teams-backup.service.d.ts.map +1 -0
  276. package/dist/cli/backend/src/services/core/teams-backup.service.js +120 -0
  277. package/dist/cli/backend/src/services/core/teams-backup.service.js.map +1 -0
  278. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts +125 -0
  279. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts.map +1 -0
  280. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js +247 -0
  281. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js.map +1 -0
  282. package/dist/cli/backend/src/services/knowledge/knowledge.service.d.ts +153 -0
  283. package/dist/cli/backend/src/services/knowledge/knowledge.service.d.ts.map +1 -0
  284. package/dist/cli/backend/src/services/knowledge/knowledge.service.js +409 -0
  285. package/dist/cli/backend/src/services/knowledge/knowledge.service.js.map +1 -0
  286. package/dist/cli/backend/src/services/mcp-server.d.ts +167 -0
  287. package/dist/cli/backend/src/services/mcp-server.d.ts.map +1 -0
  288. package/dist/cli/backend/src/services/mcp-server.js +586 -0
  289. package/dist/cli/backend/src/services/mcp-server.js.map +1 -0
  290. package/dist/cli/backend/src/services/memory/agent-memory.service.d.ts +259 -0
  291. package/dist/cli/backend/src/services/memory/agent-memory.service.d.ts.map +1 -0
  292. package/dist/cli/backend/src/services/memory/agent-memory.service.js +539 -0
  293. package/dist/cli/backend/src/services/memory/agent-memory.service.js.map +1 -0
  294. package/dist/cli/backend/src/services/memory/memory.service.d.ts +306 -0
  295. package/dist/cli/backend/src/services/memory/memory.service.d.ts.map +1 -0
  296. package/dist/cli/backend/src/services/memory/memory.service.js +517 -0
  297. package/dist/cli/backend/src/services/memory/memory.service.js.map +1 -0
  298. package/dist/cli/backend/src/services/memory/project-memory.service.d.ts +252 -0
  299. package/dist/cli/backend/src/services/memory/project-memory.service.d.ts.map +1 -0
  300. package/dist/cli/backend/src/services/memory/project-memory.service.js +600 -0
  301. package/dist/cli/backend/src/services/memory/project-memory.service.js.map +1 -0
  302. package/dist/cli/backend/src/types/auto-assign.types.d.ts +271 -0
  303. package/dist/cli/backend/src/types/auto-assign.types.d.ts.map +1 -0
  304. package/dist/cli/backend/src/types/auto-assign.types.js +136 -0
  305. package/dist/cli/backend/src/types/auto-assign.types.js.map +1 -0
  306. package/dist/cli/backend/src/types/budget.types.d.ts +217 -0
  307. package/dist/cli/backend/src/types/budget.types.d.ts.map +1 -0
  308. package/dist/cli/backend/src/types/budget.types.js +82 -0
  309. package/dist/cli/backend/src/types/budget.types.js.map +1 -0
  310. package/dist/cli/backend/src/types/chat.types.d.ts +550 -0
  311. package/dist/cli/backend/src/types/chat.types.d.ts.map +1 -0
  312. package/dist/cli/backend/src/types/chat.types.js +743 -0
  313. package/dist/cli/backend/src/types/chat.types.js.map +1 -0
  314. package/dist/cli/backend/src/types/continuation.types.d.ts +237 -0
  315. package/dist/cli/backend/src/types/continuation.types.d.ts.map +1 -0
  316. package/dist/cli/backend/src/types/continuation.types.js +10 -0
  317. package/dist/cli/backend/src/types/continuation.types.js.map +1 -0
  318. package/dist/cli/backend/src/types/index.d.ts +164 -0
  319. package/dist/cli/backend/src/types/index.d.ts.map +1 -0
  320. package/dist/cli/backend/src/types/index.js +25 -0
  321. package/dist/cli/backend/src/types/index.js.map +1 -0
  322. package/dist/cli/backend/src/types/knowledge.types.d.ts +195 -0
  323. package/dist/cli/backend/src/types/knowledge.types.d.ts.map +1 -0
  324. package/dist/cli/backend/src/types/knowledge.types.js +38 -0
  325. package/dist/cli/backend/src/types/knowledge.types.js.map +1 -0
  326. package/dist/cli/backend/src/types/memory.types.d.ts +587 -0
  327. package/dist/cli/backend/src/types/memory.types.d.ts.map +1 -0
  328. package/dist/cli/backend/src/types/memory.types.js +47 -0
  329. package/dist/cli/backend/src/types/memory.types.js.map +1 -0
  330. package/dist/cli/backend/src/types/quality-gate.types.d.ts +171 -0
  331. package/dist/cli/backend/src/types/quality-gate.types.d.ts.map +1 -0
  332. package/dist/cli/backend/src/types/quality-gate.types.js +42 -0
  333. package/dist/cli/backend/src/types/quality-gate.types.js.map +1 -0
  334. package/dist/cli/backend/src/types/role.types.d.ts +260 -0
  335. package/dist/cli/backend/src/types/role.types.d.ts.map +1 -0
  336. package/dist/cli/backend/src/types/role.types.js +238 -0
  337. package/dist/cli/backend/src/types/role.types.js.map +1 -0
  338. package/dist/cli/backend/src/types/scheduler.types.d.ts +254 -0
  339. package/dist/cli/backend/src/types/scheduler.types.d.ts.map +1 -0
  340. package/dist/cli/backend/src/types/scheduler.types.js +32 -0
  341. package/dist/cli/backend/src/types/scheduler.types.js.map +1 -0
  342. package/dist/cli/backend/src/types/settings.types.d.ts +178 -0
  343. package/dist/cli/backend/src/types/settings.types.d.ts.map +1 -0
  344. package/dist/cli/backend/src/types/settings.types.js +206 -0
  345. package/dist/cli/backend/src/types/settings.types.js.map +1 -0
  346. package/dist/cli/backend/src/types/skill.types.d.ts +515 -0
  347. package/dist/cli/backend/src/types/skill.types.d.ts.map +1 -0
  348. package/dist/cli/backend/src/types/skill.types.js +481 -0
  349. package/dist/cli/backend/src/types/skill.types.js.map +1 -0
  350. package/dist/cli/backend/src/types/sop.types.d.ts +224 -0
  351. package/dist/cli/backend/src/types/sop.types.d.ts.map +1 -0
  352. package/dist/cli/backend/src/types/sop.types.js +85 -0
  353. package/dist/cli/backend/src/types/sop.types.js.map +1 -0
  354. package/dist/cli/backend/src/types/task-output.types.d.ts +78 -0
  355. package/dist/cli/backend/src/types/task-output.types.d.ts.map +1 -0
  356. package/dist/cli/backend/src/types/task-output.types.js +27 -0
  357. package/dist/cli/backend/src/types/task-output.types.js.map +1 -0
  358. package/dist/cli/backend/src/utils/file-io.utils.d.ts +102 -0
  359. package/dist/cli/backend/src/utils/file-io.utils.d.ts.map +1 -0
  360. package/dist/cli/backend/src/utils/file-io.utils.js +214 -0
  361. package/dist/cli/backend/src/utils/file-io.utils.js.map +1 -0
  362. package/dist/cli/backend/src/utils/terminal-output.utils.d.ts +54 -0
  363. package/dist/cli/backend/src/utils/terminal-output.utils.d.ts.map +1 -0
  364. package/dist/cli/backend/src/utils/terminal-output.utils.js +97 -0
  365. package/dist/cli/backend/src/utils/terminal-output.utils.js.map +1 -0
  366. package/dist/cli/cli/src/commands/mcp-server.d.ts +38 -0
  367. package/dist/cli/cli/src/commands/mcp-server.d.ts.map +1 -0
  368. package/dist/cli/cli/src/commands/mcp-server.js +49 -0
  369. package/dist/cli/cli/src/commands/mcp-server.js.map +1 -0
  370. package/dist/cli/cli/src/commands/onboard.d.ts +72 -8
  371. package/dist/cli/cli/src/commands/onboard.d.ts.map +1 -1
  372. package/dist/cli/cli/src/commands/onboard.js +306 -33
  373. package/dist/cli/cli/src/commands/onboard.js.map +1 -1
  374. package/dist/cli/cli/src/commands/publish.d.ts +35 -0
  375. package/dist/cli/cli/src/commands/publish.d.ts.map +1 -0
  376. package/dist/cli/cli/src/commands/publish.js +93 -0
  377. package/dist/cli/cli/src/commands/publish.js.map +1 -0
  378. package/dist/cli/cli/src/commands/seed-marketplace.d.ts +28 -0
  379. package/dist/cli/cli/src/commands/seed-marketplace.d.ts.map +1 -0
  380. package/dist/cli/cli/src/commands/seed-marketplace.js +148 -0
  381. package/dist/cli/cli/src/commands/seed-marketplace.js.map +1 -0
  382. package/dist/cli/cli/src/index.js +23 -0
  383. package/dist/cli/cli/src/index.js.map +1 -1
  384. package/dist/cli/cli/src/utils/archive-creator.d.ts +82 -0
  385. package/dist/cli/cli/src/utils/archive-creator.d.ts.map +1 -0
  386. package/dist/cli/cli/src/utils/archive-creator.js +105 -0
  387. package/dist/cli/cli/src/utils/archive-creator.js.map +1 -0
  388. package/dist/cli/cli/src/utils/marketplace.d.ts +17 -4
  389. package/dist/cli/cli/src/utils/marketplace.d.ts.map +1 -1
  390. package/dist/cli/cli/src/utils/marketplace.js +172 -58
  391. package/dist/cli/cli/src/utils/marketplace.js.map +1 -1
  392. package/dist/cli/cli/src/utils/package-validator.d.ts +62 -0
  393. package/dist/cli/cli/src/utils/package-validator.d.ts.map +1 -0
  394. package/dist/cli/cli/src/utils/package-validator.js +122 -0
  395. package/dist/cli/cli/src/utils/package-validator.js.map +1 -0
  396. package/dist/cli/cli/src/utils/templates.d.ts +71 -0
  397. package/dist/cli/cli/src/utils/templates.d.ts.map +1 -0
  398. package/dist/cli/cli/src/utils/templates.js +91 -0
  399. package/dist/cli/cli/src/utils/templates.js.map +1 -0
  400. package/dist/cli/config/constants.d.ts +41 -0
  401. package/dist/cli/config/constants.d.ts.map +1 -1
  402. package/dist/cli/config/constants.js +57 -0
  403. package/dist/cli/config/constants.js.map +1 -1
  404. package/dist/cli/config/index.d.ts +2 -2
  405. package/dist/cli/config/index.d.ts.map +1 -1
  406. package/dist/cli/config/index.js +2 -2
  407. package/dist/cli/config/index.js.map +1 -1
  408. package/frontend/dist/assets/{index-523c7fce.js → index-0a245b0d.js} +247 -247
  409. package/frontend/dist/assets/{index-4c050f52.css → index-6972eeee.css} +1 -1
  410. package/frontend/dist/assets/nunito-cyrillic-400-normal-e44e669f.woff2 +0 -0
  411. package/frontend/dist/assets/nunito-cyrillic-400-normal-ff8e8bdd.woff +0 -0
  412. package/frontend/dist/assets/nunito-cyrillic-500-normal-2159679b.woff +0 -0
  413. package/frontend/dist/assets/nunito-cyrillic-500-normal-61a3b80e.woff2 +0 -0
  414. package/frontend/dist/assets/nunito-cyrillic-600-normal-ac046097.woff +0 -0
  415. package/frontend/dist/assets/nunito-cyrillic-600-normal-e61eb97b.woff2 +0 -0
  416. package/frontend/dist/assets/nunito-cyrillic-700-normal-8fcefcc9.woff2 +0 -0
  417. package/frontend/dist/assets/nunito-cyrillic-700-normal-b9684104.woff +0 -0
  418. package/frontend/dist/assets/nunito-cyrillic-800-normal-40253beb.woff +0 -0
  419. package/frontend/dist/assets/nunito-cyrillic-800-normal-d80292de.woff2 +0 -0
  420. package/frontend/dist/assets/nunito-cyrillic-ext-400-normal-20d73ae7.woff2 +0 -0
  421. package/frontend/dist/assets/nunito-cyrillic-ext-400-normal-d48c37c9.woff +0 -0
  422. package/frontend/dist/assets/nunito-cyrillic-ext-500-normal-16197abd.woff +0 -0
  423. package/frontend/dist/assets/nunito-cyrillic-ext-500-normal-9dcfe9b5.woff2 +0 -0
  424. package/frontend/dist/assets/nunito-cyrillic-ext-600-normal-d53e9851.woff2 +0 -0
  425. package/frontend/dist/assets/nunito-cyrillic-ext-600-normal-e3d0201f.woff +0 -0
  426. package/frontend/dist/assets/nunito-cyrillic-ext-700-normal-5936f6ac.woff2 +0 -0
  427. package/frontend/dist/assets/nunito-cyrillic-ext-700-normal-c8c02775.woff +0 -0
  428. package/frontend/dist/assets/nunito-cyrillic-ext-800-normal-217b8f51.woff +0 -0
  429. package/frontend/dist/assets/nunito-cyrillic-ext-800-normal-796cf7bd.woff2 +0 -0
  430. package/frontend/dist/assets/nunito-latin-400-normal-a5906e15.woff2 +0 -0
  431. package/frontend/dist/assets/nunito-latin-400-normal-b51e7635.woff +0 -0
  432. package/frontend/dist/assets/nunito-latin-500-normal-23ae3083.woff2 +0 -0
  433. package/frontend/dist/assets/nunito-latin-500-normal-be14dbc6.woff +0 -0
  434. package/frontend/dist/assets/nunito-latin-600-normal-06a9c8b3.woff +0 -0
  435. package/frontend/dist/assets/nunito-latin-600-normal-45f437de.woff2 +0 -0
  436. package/frontend/dist/assets/nunito-latin-700-normal-ce9107dc.woff +0 -0
  437. package/frontend/dist/assets/nunito-latin-700-normal-fa89300b.woff2 +0 -0
  438. package/frontend/dist/assets/nunito-latin-800-normal-0ca02785.woff +0 -0
  439. package/frontend/dist/assets/nunito-latin-800-normal-2363d3ed.woff2 +0 -0
  440. package/frontend/dist/assets/nunito-latin-ext-400-normal-67250a41.woff2 +0 -0
  441. package/frontend/dist/assets/nunito-latin-ext-400-normal-d7e2415e.woff +0 -0
  442. package/frontend/dist/assets/nunito-latin-ext-500-normal-06f35d1c.woff +0 -0
  443. package/frontend/dist/assets/nunito-latin-ext-500-normal-343e7adc.woff2 +0 -0
  444. package/frontend/dist/assets/nunito-latin-ext-600-normal-5a8efd17.woff +0 -0
  445. package/frontend/dist/assets/nunito-latin-ext-600-normal-a7ba5f4f.woff2 +0 -0
  446. package/frontend/dist/assets/nunito-latin-ext-700-normal-0a4e4a02.woff2 +0 -0
  447. package/frontend/dist/assets/nunito-latin-ext-700-normal-0c607961.woff +0 -0
  448. package/frontend/dist/assets/nunito-latin-ext-800-normal-39f54b55.woff2 +0 -0
  449. package/frontend/dist/assets/nunito-latin-ext-800-normal-466d0211.woff +0 -0
  450. package/frontend/dist/assets/nunito-vietnamese-400-normal-2a755616.woff2 +0 -0
  451. package/frontend/dist/assets/nunito-vietnamese-400-normal-9c01ea9f.woff +0 -0
  452. package/frontend/dist/assets/nunito-vietnamese-500-normal-452e5e08.woff +0 -0
  453. package/frontend/dist/assets/nunito-vietnamese-500-normal-dc98d965.woff2 +0 -0
  454. package/frontend/dist/assets/nunito-vietnamese-600-normal-2ffbb85f.woff +0 -0
  455. package/frontend/dist/assets/nunito-vietnamese-600-normal-cf95b95d.woff2 +0 -0
  456. package/frontend/dist/assets/nunito-vietnamese-700-normal-0e29c28c.woff2 +0 -0
  457. package/frontend/dist/assets/nunito-vietnamese-700-normal-7793b75e.woff +0 -0
  458. package/frontend/dist/assets/nunito-vietnamese-800-normal-5baf507e.woff +0 -0
  459. package/frontend/dist/assets/nunito-vietnamese-800-normal-fac6740e.woff2 +0 -0
  460. package/frontend/dist/index.html +2 -2
  461. package/package.json +16 -6
  462. package/config/skills/chrome-browser/instructions.md +0 -42
  463. package/config/skills/chrome-browser/skill.json +0 -39
  464. package/config/skills/nano-banana-image/generate.sh +0 -73
  465. package/config/skills/nano-banana-image/instructions.md +0 -50
  466. package/config/skills/nano-banana-image/skill.json +0 -39
  467. package/config/skills/playwright-chrome-browser/instructions.md +0 -95
  468. package/config/skills/playwright-chrome-browser/skill.json +0 -44
@@ -0,0 +1,600 @@
1
+ /**
2
+ * Project Memory Service
3
+ *
4
+ * Manages project-level persistent memory stored in project/.crewly/knowledge/
5
+ * Provides storage for patterns, decisions, gotchas, and relationships.
6
+ *
7
+ * @module services/memory/project-memory.service
8
+ */
9
+ import * as fs from 'fs/promises';
10
+ import * as path from 'path';
11
+ import { v4 as uuidv4 } from 'uuid';
12
+ import { atomicWriteJson, safeReadJson } from '../../utils/file-io.utils.js';
13
+ import { DEFAULT_PROJECT_MEMORY, } from '../../types/memory.types.js';
14
+ import { MEMORY_CONSTANTS, CREWLY_CONSTANTS } from '../../constants.js';
15
+ import { LoggerService } from '../core/logger.service.js';
16
+ /**
17
+ * Service for managing project-level persistent memory
18
+ *
19
+ * Follows singleton pattern for consistent state management.
20
+ * Uses atomic file writes to prevent data corruption.
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * const memoryService = ProjectMemoryService.getInstance();
25
+ * await memoryService.initializeProject('/path/to/project');
26
+ * await memoryService.addPattern('/path/to/project', {
27
+ * category: 'api',
28
+ * title: 'Error Handling Wrapper',
29
+ * description: 'All API endpoints use handleApiError() wrapper',
30
+ * discoveredBy: 'backend-dev-001'
31
+ * });
32
+ * ```
33
+ */
34
+ export class ProjectMemoryService {
35
+ static instance = null;
36
+ logger = LoggerService.getInstance().createComponentLogger('ProjectMemoryService');
37
+ // In-memory cache for frequently accessed data
38
+ memoryCache = new Map();
39
+ CACHE_TTL_MS = 30000; // 30 second cache
40
+ /**
41
+ * Creates a new ProjectMemoryService instance
42
+ */
43
+ constructor() {
44
+ // No base path needed - each project has its own knowledge directory
45
+ }
46
+ /**
47
+ * Gets the singleton instance of ProjectMemoryService
48
+ *
49
+ * @returns The singleton ProjectMemoryService instance
50
+ */
51
+ static getInstance() {
52
+ if (!ProjectMemoryService.instance) {
53
+ ProjectMemoryService.instance = new ProjectMemoryService();
54
+ }
55
+ return ProjectMemoryService.instance;
56
+ }
57
+ /**
58
+ * Clears the singleton instance (useful for testing)
59
+ */
60
+ static clearInstance() {
61
+ ProjectMemoryService.instance = null;
62
+ }
63
+ /**
64
+ * Gets the path to a project's knowledge directory
65
+ *
66
+ * @param projectPath - Absolute path to the project
67
+ * @returns Path to the knowledge directory
68
+ */
69
+ getKnowledgePath(projectPath) {
70
+ return path.join(projectPath, CREWLY_CONSTANTS.PATHS.CREWLY_HOME, MEMORY_CONSTANTS.PATHS.KNOWLEDGE_DIR);
71
+ }
72
+ /**
73
+ * Gets the path to a specific memory file for a project
74
+ *
75
+ * @param projectPath - Absolute path to the project
76
+ * @param fileName - The memory file name
77
+ * @returns Absolute path to the memory file
78
+ */
79
+ getFilePath(projectPath, fileName) {
80
+ return path.join(this.getKnowledgePath(projectPath), fileName);
81
+ }
82
+ /**
83
+ * Checks if a file exists
84
+ *
85
+ * @param filePath - Path to check
86
+ * @returns true if file exists
87
+ */
88
+ async fileExists(filePath) {
89
+ try {
90
+ await fs.access(filePath);
91
+ return true;
92
+ }
93
+ catch {
94
+ return false;
95
+ }
96
+ }
97
+ /**
98
+ * Invalidates the cache for a project
99
+ *
100
+ * @param projectPath - Project path
101
+ */
102
+ invalidateCache(projectPath) {
103
+ this.memoryCache.delete(projectPath);
104
+ }
105
+ /**
106
+ * Checks if content is similar (simple substring matching)
107
+ *
108
+ * @param existing - Existing content
109
+ * @param newContent - New content to compare
110
+ * @returns true if content is similar
111
+ */
112
+ isSimilarContent(existing, newContent) {
113
+ const normalizedExisting = existing.toLowerCase().trim();
114
+ const normalizedNew = newContent.toLowerCase().trim();
115
+ if (normalizedExisting === normalizedNew)
116
+ return true;
117
+ // Check for significant substring overlap (>70% of shorter string)
118
+ const shorter = normalizedExisting.length < normalizedNew.length ? normalizedExisting : normalizedNew;
119
+ const longer = normalizedExisting.length >= normalizedNew.length ? normalizedExisting : normalizedNew;
120
+ if (shorter.length > 30 && longer.includes(shorter))
121
+ return true;
122
+ return false;
123
+ }
124
+ // ========================= PUBLIC INTERFACE =========================
125
+ /**
126
+ * Initializes memory storage for a project
127
+ *
128
+ * @param projectPath - Absolute path to the project
129
+ *
130
+ * @example
131
+ * ```typescript
132
+ * await memoryService.initializeProject('/home/user/projects/my-app');
133
+ * ```
134
+ */
135
+ async initializeProject(projectPath) {
136
+ const knowledgePath = this.getKnowledgePath(projectPath);
137
+ // Create knowledge directory
138
+ await fs.mkdir(knowledgePath, { recursive: true });
139
+ // Initialize empty JSON files if they don't exist
140
+ const jsonFiles = [
141
+ MEMORY_CONSTANTS.PROJECT_FILES.INDEX,
142
+ MEMORY_CONSTANTS.PROJECT_FILES.PATTERNS,
143
+ MEMORY_CONSTANTS.PROJECT_FILES.DECISIONS,
144
+ MEMORY_CONSTANTS.PROJECT_FILES.GOTCHAS,
145
+ MEMORY_CONSTANTS.PROJECT_FILES.RELATIONSHIPS,
146
+ ];
147
+ for (const file of jsonFiles) {
148
+ const filePath = path.join(knowledgePath, file);
149
+ if (!await this.fileExists(filePath)) {
150
+ if (file === MEMORY_CONSTANTS.PROJECT_FILES.INDEX) {
151
+ const projectId = path.basename(projectPath);
152
+ const now = new Date().toISOString();
153
+ const indexData = {
154
+ projectId,
155
+ projectPath,
156
+ createdAt: now,
157
+ updatedAt: now,
158
+ ...DEFAULT_PROJECT_MEMORY,
159
+ };
160
+ await atomicWriteJson(filePath, indexData);
161
+ }
162
+ else {
163
+ await atomicWriteJson(filePath, []);
164
+ }
165
+ }
166
+ }
167
+ // Initialize learnings.md
168
+ const learningsPath = path.join(knowledgePath, MEMORY_CONSTANTS.PROJECT_FILES.LEARNINGS);
169
+ if (!await this.fileExists(learningsPath)) {
170
+ const projectName = path.basename(projectPath);
171
+ await fs.writeFile(learningsPath, `# Project Learnings: ${projectName}\n\nThis file contains learnings discovered during development.\n\n---\n\n`);
172
+ }
173
+ this.logger.info('Initialized project memory', { projectPath });
174
+ }
175
+ /**
176
+ * Adds a new pattern entry
177
+ *
178
+ * @param projectPath - Project path
179
+ * @param pattern - Pattern data (without id and createdAt)
180
+ * @returns ID of the created or existing pattern
181
+ */
182
+ async addPattern(projectPath, pattern) {
183
+ const patterns = await this.getPatterns(projectPath);
184
+ // Check for existing similar pattern
185
+ const existing = patterns.find(p => p.title.toLowerCase() === pattern.title.toLowerCase() ||
186
+ this.isSimilarContent(p.description, pattern.description));
187
+ if (existing) {
188
+ // Update existing pattern if new info provided
189
+ let updated = false;
190
+ if (pattern.example && !existing.example) {
191
+ existing.example = pattern.example;
192
+ updated = true;
193
+ }
194
+ if (pattern.files && pattern.files.length > 0) {
195
+ existing.files = [...new Set([...(existing.files || []), ...pattern.files])];
196
+ updated = true;
197
+ }
198
+ if (updated) {
199
+ await this.savePatterns(projectPath, patterns);
200
+ }
201
+ this.logger.debug('Found existing similar pattern', { projectPath, patternId: existing.id });
202
+ return existing.id;
203
+ }
204
+ // Enforce storage limits
205
+ if (patterns.length >= MEMORY_CONSTANTS.LIMITS.MAX_PATTERN_ENTRIES) {
206
+ patterns.shift(); // Remove oldest
207
+ this.logger.debug('Removed oldest pattern to stay within limits', { projectPath });
208
+ }
209
+ const newPattern = {
210
+ ...pattern,
211
+ id: uuidv4(),
212
+ createdAt: new Date().toISOString(),
213
+ };
214
+ patterns.push(newPattern);
215
+ await this.savePatterns(projectPath, patterns);
216
+ // Record as learning
217
+ await this.recordLearning(projectPath, pattern.discoveredBy, 'agent', `Discovered pattern: ${pattern.title} - ${pattern.description}`, { type: 'pattern', patternId: newPattern.id });
218
+ this.logger.info('Added pattern', { projectPath, patternId: newPattern.id, category: newPattern.category });
219
+ return newPattern.id;
220
+ }
221
+ /**
222
+ * Gets all patterns, optionally filtered by category
223
+ *
224
+ * @param projectPath - Project path
225
+ * @param category - Optional category filter
226
+ * @returns Array of patterns
227
+ */
228
+ async getPatterns(projectPath, category) {
229
+ const filePath = this.getFilePath(projectPath, MEMORY_CONSTANTS.PROJECT_FILES.PATTERNS);
230
+ const patterns = await safeReadJson(filePath, []);
231
+ if (category) {
232
+ return patterns.filter(p => p.category === category);
233
+ }
234
+ return patterns;
235
+ }
236
+ /**
237
+ * Saves patterns to disk
238
+ */
239
+ async savePatterns(projectPath, patterns) {
240
+ const filePath = this.getFilePath(projectPath, MEMORY_CONSTANTS.PROJECT_FILES.PATTERNS);
241
+ await atomicWriteJson(filePath, patterns);
242
+ this.invalidateCache(projectPath);
243
+ }
244
+ /**
245
+ * Searches patterns by query
246
+ *
247
+ * @param projectPath - Project path
248
+ * @param query - Search query
249
+ * @returns Matching patterns
250
+ */
251
+ async searchPatterns(projectPath, query) {
252
+ const patterns = await this.getPatterns(projectPath);
253
+ const queryLower = query.toLowerCase();
254
+ return patterns.filter(p => p.title.toLowerCase().includes(queryLower) ||
255
+ p.description.toLowerCase().includes(queryLower) ||
256
+ p.category.toLowerCase().includes(queryLower) ||
257
+ p.tags?.some(t => t.toLowerCase().includes(queryLower)));
258
+ }
259
+ /**
260
+ * Adds a new decision entry
261
+ *
262
+ * @param projectPath - Project path
263
+ * @param decision - Decision data (without id and decidedAt)
264
+ * @returns ID of the created decision
265
+ */
266
+ async addDecision(projectPath, decision) {
267
+ const decisions = await this.getDecisions(projectPath);
268
+ // Check for existing similar decision
269
+ const existing = decisions.find(d => d.title.toLowerCase() === decision.title.toLowerCase());
270
+ if (existing) {
271
+ this.logger.debug('Found existing similar decision', { projectPath, decisionId: existing.id });
272
+ return existing.id;
273
+ }
274
+ // Enforce storage limits
275
+ if (decisions.length >= MEMORY_CONSTANTS.LIMITS.MAX_DECISION_ENTRIES) {
276
+ // Mark oldest as superseded rather than deleting
277
+ const oldest = decisions.find(d => d.status === 'active');
278
+ if (oldest) {
279
+ oldest.status = 'superseded';
280
+ }
281
+ }
282
+ const newDecision = {
283
+ ...decision,
284
+ id: uuidv4(),
285
+ decidedAt: new Date().toISOString(),
286
+ status: 'active',
287
+ };
288
+ decisions.push(newDecision);
289
+ await this.saveDecisions(projectPath, decisions);
290
+ // Record as learning
291
+ await this.recordLearning(projectPath, decision.decidedBy, 'agent', `Decision made: ${decision.title} - ${decision.decision} (Rationale: ${decision.rationale})`, { type: 'decision', decisionId: newDecision.id });
292
+ this.logger.info('Added decision', { projectPath, decisionId: newDecision.id });
293
+ return newDecision.id;
294
+ }
295
+ /**
296
+ * Gets all decisions
297
+ *
298
+ * @param projectPath - Project path
299
+ * @returns Array of decisions (active ones first)
300
+ */
301
+ async getDecisions(projectPath) {
302
+ const filePath = this.getFilePath(projectPath, MEMORY_CONSTANTS.PROJECT_FILES.DECISIONS);
303
+ const decisions = await safeReadJson(filePath, []);
304
+ // Sort: active first, then by date
305
+ return decisions.sort((a, b) => {
306
+ if (a.status === 'active' && b.status !== 'active')
307
+ return -1;
308
+ if (a.status !== 'active' && b.status === 'active')
309
+ return 1;
310
+ return new Date(b.decidedAt).getTime() - new Date(a.decidedAt).getTime();
311
+ });
312
+ }
313
+ /**
314
+ * Saves decisions to disk
315
+ */
316
+ async saveDecisions(projectPath, decisions) {
317
+ const filePath = this.getFilePath(projectPath, MEMORY_CONSTANTS.PROJECT_FILES.DECISIONS);
318
+ await atomicWriteJson(filePath, decisions);
319
+ this.invalidateCache(projectPath);
320
+ }
321
+ /**
322
+ * Adds a new gotcha entry
323
+ *
324
+ * @param projectPath - Project path
325
+ * @param gotcha - Gotcha data (without id and createdAt)
326
+ * @returns ID of the created gotcha
327
+ */
328
+ async addGotcha(projectPath, gotcha) {
329
+ const gotchas = await this.getGotchas(projectPath);
330
+ // Check for existing similar gotcha
331
+ const existing = gotchas.find(g => g.title.toLowerCase() === gotcha.title.toLowerCase() ||
332
+ this.isSimilarContent(g.problem, gotcha.problem));
333
+ if (existing) {
334
+ // Update with better solution if provided
335
+ if (gotcha.solution && gotcha.solution.length > (existing.solution?.length || 0)) {
336
+ existing.solution = gotcha.solution;
337
+ await this.saveGotchas(projectPath, gotchas);
338
+ }
339
+ this.logger.debug('Found existing similar gotcha', { projectPath, gotchaId: existing.id });
340
+ return existing.id;
341
+ }
342
+ // Enforce storage limits
343
+ if (gotchas.length >= MEMORY_CONSTANTS.LIMITS.MAX_GOTCHA_ENTRIES) {
344
+ // Remove lowest severity resolved gotchas first
345
+ const toRemove = gotchas.find(g => g.resolved && g.severity === 'low');
346
+ if (toRemove) {
347
+ const idx = gotchas.indexOf(toRemove);
348
+ gotchas.splice(idx, 1);
349
+ }
350
+ }
351
+ const newGotcha = {
352
+ ...gotcha,
353
+ id: uuidv4(),
354
+ createdAt: new Date().toISOString(),
355
+ };
356
+ gotchas.push(newGotcha);
357
+ await this.saveGotchas(projectPath, gotchas);
358
+ // Record as learning
359
+ await this.recordLearning(projectPath, gotcha.discoveredBy, 'agent', `Discovered gotcha: ${gotcha.title} - ${gotcha.problem} → ${gotcha.solution}`, { type: 'gotcha', gotchaId: newGotcha.id, severity: gotcha.severity });
360
+ this.logger.info('Added gotcha', { projectPath, gotchaId: newGotcha.id, severity: gotcha.severity });
361
+ return newGotcha.id;
362
+ }
363
+ /**
364
+ * Gets all gotchas, optionally filtered by severity
365
+ *
366
+ * @param projectPath - Project path
367
+ * @param severity - Optional severity filter
368
+ * @returns Array of gotchas (high severity first)
369
+ */
370
+ async getGotchas(projectPath, severity) {
371
+ const filePath = this.getFilePath(projectPath, MEMORY_CONSTANTS.PROJECT_FILES.GOTCHAS);
372
+ let gotchas = await safeReadJson(filePath, []);
373
+ if (severity) {
374
+ gotchas = gotchas.filter(g => g.severity === severity);
375
+ }
376
+ // Sort by severity (critical > high > medium > low)
377
+ const severityOrder = { critical: 0, high: 1, medium: 2, low: 3 };
378
+ return gotchas.sort((a, b) => severityOrder[a.severity] - severityOrder[b.severity]);
379
+ }
380
+ /**
381
+ * Saves gotchas to disk
382
+ */
383
+ async saveGotchas(projectPath, gotchas) {
384
+ const filePath = this.getFilePath(projectPath, MEMORY_CONSTANTS.PROJECT_FILES.GOTCHAS);
385
+ await atomicWriteJson(filePath, gotchas);
386
+ this.invalidateCache(projectPath);
387
+ }
388
+ /**
389
+ * Adds a new relationship entry
390
+ *
391
+ * @param projectPath - Project path
392
+ * @param relationship - Relationship data (without id)
393
+ * @returns ID of the created relationship
394
+ */
395
+ async addRelationship(projectPath, relationship) {
396
+ const relationships = await this.getRelationships(projectPath);
397
+ // Check for existing same relationship
398
+ const existing = relationships.find(r => r.from === relationship.from &&
399
+ r.to === relationship.to &&
400
+ r.relationshipType === relationship.relationshipType);
401
+ if (existing) {
402
+ // Update description if provided
403
+ if (relationship.description && !existing.description) {
404
+ existing.description = relationship.description;
405
+ await this.saveRelationships(projectPath, relationships);
406
+ }
407
+ return existing.id;
408
+ }
409
+ // Enforce storage limits
410
+ if (relationships.length >= MEMORY_CONSTANTS.LIMITS.MAX_RELATIONSHIP_ENTRIES) {
411
+ relationships.shift(); // Remove oldest
412
+ }
413
+ const newRelationship = {
414
+ ...relationship,
415
+ id: uuidv4(),
416
+ };
417
+ relationships.push(newRelationship);
418
+ await this.saveRelationships(projectPath, relationships);
419
+ this.logger.debug('Added relationship', { projectPath, relationshipId: newRelationship.id });
420
+ return newRelationship.id;
421
+ }
422
+ /**
423
+ * Gets relationships, optionally filtered by component name
424
+ *
425
+ * @param projectPath - Project path
426
+ * @param componentName - Optional component name filter
427
+ * @returns Array of relationships
428
+ */
429
+ async getRelationships(projectPath, componentName) {
430
+ const filePath = this.getFilePath(projectPath, MEMORY_CONSTANTS.PROJECT_FILES.RELATIONSHIPS);
431
+ const relationships = await safeReadJson(filePath, []);
432
+ if (componentName) {
433
+ return relationships.filter(r => r.from === componentName || r.to === componentName);
434
+ }
435
+ return relationships;
436
+ }
437
+ /**
438
+ * Saves relationships to disk
439
+ */
440
+ async saveRelationships(projectPath, relationships) {
441
+ const filePath = this.getFilePath(projectPath, MEMORY_CONSTANTS.PROJECT_FILES.RELATIONSHIPS);
442
+ await atomicWriteJson(filePath, relationships);
443
+ this.invalidateCache(projectPath);
444
+ }
445
+ /**
446
+ * Records a learning entry to the append-only log
447
+ *
448
+ * @param projectPath - Project path
449
+ * @param agentId - Agent that made the learning
450
+ * @param agentRole - Agent's role
451
+ * @param learning - The learning content
452
+ * @param metadata - Optional metadata
453
+ */
454
+ async recordLearning(projectPath, agentId, agentRole, learning, metadata) {
455
+ const learningsPath = this.getFilePath(projectPath, MEMORY_CONSTANTS.PROJECT_FILES.LEARNINGS);
456
+ const now = new Date();
457
+ const date = now.toISOString().split('T')[0];
458
+ const time = now.toISOString().split('T')[1].split('.')[0];
459
+ let entry = `## ${date}\n\n`;
460
+ entry += `### [${agentRole}/${agentId}] ${time}\n`;
461
+ entry += `${learning}\n`;
462
+ if (metadata?.relatedFiles && Array.isArray(metadata.relatedFiles)) {
463
+ entry += `\n**Related files:** ${metadata.relatedFiles.join(', ')}\n`;
464
+ }
465
+ if (metadata?.type) {
466
+ entry += `**Type:** ${metadata.type}\n`;
467
+ }
468
+ entry += '\n---\n\n';
469
+ await fs.appendFile(learningsPath, entry);
470
+ this.logger.debug('Recorded learning', { projectPath, agentId });
471
+ }
472
+ /**
473
+ * Gets recent learnings from the log
474
+ *
475
+ * @param projectPath - Project path
476
+ * @param limit - Maximum number of entries to return
477
+ * @returns Recent learnings as markdown
478
+ */
479
+ async getRecentLearnings(projectPath, limit = 10) {
480
+ const learningsPath = this.getFilePath(projectPath, MEMORY_CONSTANTS.PROJECT_FILES.LEARNINGS);
481
+ try {
482
+ const content = await fs.readFile(learningsPath, 'utf-8');
483
+ const entries = content.split('---').filter(e => e.trim() && !e.includes('# Project Learnings'));
484
+ // Get last N entries
485
+ const recent = entries.slice(-limit);
486
+ return recent.join('\n---\n').trim();
487
+ }
488
+ catch {
489
+ return '';
490
+ }
491
+ }
492
+ /**
493
+ * Generates a context string for prompt injection
494
+ *
495
+ * @param projectPath - Project path
496
+ * @returns Formatted context string
497
+ */
498
+ async generateProjectContext(projectPath) {
499
+ const [patterns, decisions, gotchas, relationships] = await Promise.all([
500
+ this.getPatterns(projectPath),
501
+ this.getDecisions(projectPath),
502
+ this.getGotchas(projectPath),
503
+ this.getRelationships(projectPath),
504
+ ]);
505
+ const recentLearnings = await this.getRecentLearnings(projectPath, 5);
506
+ let context = '## Project Knowledge Base\n\n';
507
+ // Critical gotchas first (high priority warnings)
508
+ const criticalGotchas = gotchas.filter(g => g.severity === 'critical' || g.severity === 'high');
509
+ if (criticalGotchas.length > 0) {
510
+ context += '### Critical Gotchas (Must Know!)\n\n';
511
+ criticalGotchas.forEach(g => {
512
+ context += `- **${g.title}**: ${g.problem} → ${g.solution}\n`;
513
+ });
514
+ context += '\n';
515
+ }
516
+ // Key patterns
517
+ if (patterns.length > 0) {
518
+ context += '### Code Patterns\n\n';
519
+ patterns.slice(0, 10).forEach(p => {
520
+ context += `- **[${p.category}] ${p.title}**: ${p.description}\n`;
521
+ if (p.example) {
522
+ context += ` Example: \`${p.example}\`\n`;
523
+ }
524
+ });
525
+ context += '\n';
526
+ }
527
+ // Active decisions
528
+ const activeDecisions = decisions.filter(d => d.status === 'active');
529
+ if (activeDecisions.length > 0) {
530
+ context += '### Architecture Decisions\n\n';
531
+ activeDecisions.slice(0, 5).forEach(d => {
532
+ context += `- **${d.title}**: ${d.decision}\n _Rationale: ${d.rationale}_\n`;
533
+ });
534
+ context += '\n';
535
+ }
536
+ // Component relationships (if not too many)
537
+ if (relationships.length > 0 && relationships.length <= 20) {
538
+ context += '### Component Relationships\n\n';
539
+ relationships.forEach(r => {
540
+ context += `- ${r.from} ${r.relationshipType} ${r.to}`;
541
+ if (r.description) {
542
+ context += ` (${r.description})`;
543
+ }
544
+ context += '\n';
545
+ });
546
+ context += '\n';
547
+ }
548
+ // Recent learnings
549
+ if (recentLearnings) {
550
+ context += '### Recent Learnings\n\n';
551
+ context += recentLearnings + '\n';
552
+ }
553
+ return context.trim();
554
+ }
555
+ /**
556
+ * Searches across all entity types
557
+ *
558
+ * @param projectPath - Project path
559
+ * @param query - Search query
560
+ * @returns Search results from all categories
561
+ */
562
+ async searchAll(projectPath, query) {
563
+ const queryLower = query.toLowerCase();
564
+ const [patterns, decisions, gotchas, relationships] = await Promise.all([
565
+ this.getPatterns(projectPath),
566
+ this.getDecisions(projectPath),
567
+ this.getGotchas(projectPath),
568
+ this.getRelationships(projectPath),
569
+ ]);
570
+ const matchingPatterns = patterns.filter(p => p.title.toLowerCase().includes(queryLower) ||
571
+ p.description.toLowerCase().includes(queryLower));
572
+ const matchingDecisions = decisions.filter(d => d.title.toLowerCase().includes(queryLower) ||
573
+ d.decision.toLowerCase().includes(queryLower) ||
574
+ d.rationale.toLowerCase().includes(queryLower));
575
+ const matchingGotchas = gotchas.filter(g => g.title.toLowerCase().includes(queryLower) ||
576
+ g.problem.toLowerCase().includes(queryLower) ||
577
+ g.solution.toLowerCase().includes(queryLower));
578
+ const matchingRelationships = relationships.filter(r => r.from.toLowerCase().includes(queryLower) ||
579
+ r.to.toLowerCase().includes(queryLower) ||
580
+ r.description?.toLowerCase().includes(queryLower));
581
+ return {
582
+ patterns: matchingPatterns,
583
+ decisions: matchingDecisions,
584
+ gotchas: matchingGotchas,
585
+ relationships: matchingRelationships,
586
+ totalCount: matchingPatterns.length + matchingDecisions.length + matchingGotchas.length + matchingRelationships.length,
587
+ };
588
+ }
589
+ /**
590
+ * Gets the complete project memory object
591
+ *
592
+ * @param projectPath - Project path
593
+ * @returns Full project memory or null if not initialized
594
+ */
595
+ async getProjectMemory(projectPath) {
596
+ const filePath = this.getFilePath(projectPath, MEMORY_CONSTANTS.PROJECT_FILES.INDEX);
597
+ return safeReadJson(filePath, null, this.logger);
598
+ }
599
+ }
600
+ //# sourceMappingURL=project-memory.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-memory.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/memory/project-memory.service.ts"],"names":[],"mappings":"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"}