crewly 1.0.6 → 1.0.8

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 (321) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +146 -40
  3. package/config/roles/architect/prompt.md +11 -0
  4. package/config/roles/backend-developer/prompt.md +11 -0
  5. package/config/roles/designer/prompt.md +11 -0
  6. package/config/roles/developer/prompt.md +18 -4
  7. package/config/roles/frontend-developer/prompt.md +11 -0
  8. package/config/roles/fullstack-dev/prompt.md +11 -0
  9. package/config/roles/generalist/prompt.md +11 -0
  10. package/config/roles/orchestrator/prompt.md +53 -10
  11. package/config/roles/product-manager/prompt.md +18 -4
  12. package/config/roles/qa/prompt.md +11 -0
  13. package/config/roles/qa-engineer/prompt.md +11 -0
  14. package/config/roles/sales/prompt.md +11 -0
  15. package/config/roles/support/prompt.md +11 -0
  16. package/config/roles/tpm/prompt.md +11 -0
  17. package/config/skills/orchestrator/complete-task/execute.sh +1 -0
  18. package/config/templates/agent-claude-md.md +16 -0
  19. package/config/templates/research-team.json +22 -0
  20. package/config/templates/startup-team.json +22 -0
  21. package/config/templates/web-dev-team.json +22 -0
  22. package/dist/backend/backend/src/constants.d.ts +61 -1
  23. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  24. package/dist/backend/backend/src/constants.js +65 -7
  25. package/dist/backend/backend/src/constants.js.map +1 -1
  26. package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
  27. package/dist/backend/backend/src/controllers/slack/slack.controller.js +7 -0
  28. package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
  29. package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts +7 -0
  30. package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts.map +1 -1
  31. package/dist/backend/backend/src/controllers/task-management/task-management.controller.js +174 -4
  32. package/dist/backend/backend/src/controllers/task-management/task-management.controller.js.map +1 -1
  33. package/dist/backend/backend/src/index.d.ts.map +1 -1
  34. package/dist/backend/backend/src/index.js +34 -0
  35. package/dist/backend/backend/src/index.js.map +1 -1
  36. package/dist/backend/backend/src/routes/modules/task-management.routes.d.ts.map +1 -1
  37. package/dist/backend/backend/src/routes/modules/task-management.routes.js +2 -0
  38. package/dist/backend/backend/src/routes/modules/task-management.routes.js.map +1 -1
  39. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +8 -0
  40. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  41. package/dist/backend/backend/src/services/agent/agent-registration.service.js +75 -17
  42. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  43. package/dist/backend/backend/src/services/agent/context-window-monitor.service.d.ts +222 -0
  44. package/dist/backend/backend/src/services/agent/context-window-monitor.service.d.ts.map +1 -0
  45. package/dist/backend/backend/src/services/agent/context-window-monitor.service.js +621 -0
  46. package/dist/backend/backend/src/services/agent/context-window-monitor.service.js.map +1 -0
  47. package/dist/backend/backend/src/services/index.d.ts +3 -0
  48. package/dist/backend/backend/src/services/index.d.ts.map +1 -1
  49. package/dist/backend/backend/src/services/index.js +5 -0
  50. package/dist/backend/backend/src/services/index.js.map +1 -1
  51. package/dist/backend/backend/src/services/mcp-client.d.ts +233 -0
  52. package/dist/backend/backend/src/services/mcp-client.d.ts.map +1 -0
  53. package/dist/backend/backend/src/services/mcp-client.js +297 -0
  54. package/dist/backend/backend/src/services/mcp-client.js.map +1 -0
  55. package/dist/backend/backend/src/services/mcp-server.d.ts +167 -0
  56. package/dist/backend/backend/src/services/mcp-server.d.ts.map +1 -0
  57. package/dist/backend/backend/src/services/mcp-server.js +586 -0
  58. package/dist/backend/backend/src/services/mcp-server.js.map +1 -0
  59. package/dist/backend/backend/src/services/messaging/message-queue.service.d.ts +2 -0
  60. package/dist/backend/backend/src/services/messaging/message-queue.service.d.ts.map +1 -1
  61. package/dist/backend/backend/src/services/messaging/message-queue.service.js +6 -1
  62. package/dist/backend/backend/src/services/messaging/message-queue.service.js.map +1 -1
  63. package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts +10 -0
  64. package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
  65. package/dist/backend/backend/src/services/messaging/queue-processor.service.js +94 -38
  66. package/dist/backend/backend/src/services/messaging/queue-processor.service.js.map +1 -1
  67. package/dist/backend/backend/src/services/quality/index.d.ts +1 -0
  68. package/dist/backend/backend/src/services/quality/index.d.ts.map +1 -1
  69. package/dist/backend/backend/src/services/quality/index.js +1 -0
  70. package/dist/backend/backend/src/services/quality/index.js.map +1 -1
  71. package/dist/backend/backend/src/services/quality/task-output-validator.service.d.ts +84 -0
  72. package/dist/backend/backend/src/services/quality/task-output-validator.service.d.ts.map +1 -0
  73. package/dist/backend/backend/src/services/quality/task-output-validator.service.js +163 -0
  74. package/dist/backend/backend/src/services/quality/task-output-validator.service.js.map +1 -0
  75. package/dist/backend/backend/src/services/runtime-adapter.d.ts +234 -0
  76. package/dist/backend/backend/src/services/runtime-adapter.d.ts.map +1 -0
  77. package/dist/backend/backend/src/services/runtime-adapter.js +180 -0
  78. package/dist/backend/backend/src/services/runtime-adapter.js.map +1 -0
  79. package/dist/backend/backend/src/services/slack/slack-credentials.service.d.ts +33 -0
  80. package/dist/backend/backend/src/services/slack/slack-credentials.service.d.ts.map +1 -0
  81. package/dist/backend/backend/src/services/slack/slack-credentials.service.js +103 -0
  82. package/dist/backend/backend/src/services/slack/slack-credentials.service.js.map +1 -0
  83. package/dist/backend/backend/src/services/slack/slack-initializer.d.ts +9 -1
  84. package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
  85. package/dist/backend/backend/src/services/slack/slack-initializer.js +31 -2
  86. package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
  87. package/dist/backend/backend/src/types/event-bus.types.d.ts +2 -2
  88. package/dist/backend/backend/src/types/event-bus.types.d.ts.map +1 -1
  89. package/dist/backend/backend/src/types/event-bus.types.js +2 -0
  90. package/dist/backend/backend/src/types/event-bus.types.js.map +1 -1
  91. package/dist/backend/backend/src/types/index.d.ts +1 -0
  92. package/dist/backend/backend/src/types/index.d.ts.map +1 -1
  93. package/dist/backend/backend/src/types/index.js +2 -0
  94. package/dist/backend/backend/src/types/index.js.map +1 -1
  95. package/dist/backend/backend/src/types/messaging.types.d.ts +9 -6
  96. package/dist/backend/backend/src/types/messaging.types.d.ts.map +1 -1
  97. package/dist/backend/backend/src/types/messaging.types.js +10 -3
  98. package/dist/backend/backend/src/types/messaging.types.js.map +1 -1
  99. package/dist/backend/backend/src/types/task-output.types.d.ts +78 -0
  100. package/dist/backend/backend/src/types/task-output.types.d.ts.map +1 -0
  101. package/dist/backend/backend/src/types/task-output.types.js +27 -0
  102. package/dist/backend/backend/src/types/task-output.types.js.map +1 -0
  103. package/dist/backend/backend/src/websocket/terminal.gateway.d.ts +13 -0
  104. package/dist/backend/backend/src/websocket/terminal.gateway.d.ts.map +1 -1
  105. package/dist/backend/backend/src/websocket/terminal.gateway.js +12 -0
  106. package/dist/backend/backend/src/websocket/terminal.gateway.js.map +1 -1
  107. package/dist/cli/backend/src/constants.d.ts +751 -0
  108. package/dist/cli/backend/src/constants.d.ts.map +1 -0
  109. package/dist/cli/backend/src/constants.js +550 -0
  110. package/dist/cli/backend/src/constants.js.map +1 -0
  111. package/dist/cli/backend/src/models/Project.d.ts +18 -0
  112. package/dist/cli/backend/src/models/Project.d.ts.map +1 -0
  113. package/dist/cli/backend/src/models/Project.js +70 -0
  114. package/dist/cli/backend/src/models/Project.js.map +1 -0
  115. package/dist/cli/backend/src/models/ScheduledMessage.d.ts +27 -0
  116. package/dist/cli/backend/src/models/ScheduledMessage.d.ts.map +1 -0
  117. package/dist/cli/backend/src/models/ScheduledMessage.js +50 -0
  118. package/dist/cli/backend/src/models/ScheduledMessage.js.map +1 -0
  119. package/dist/cli/backend/src/models/Team.d.ts +20 -0
  120. package/dist/cli/backend/src/models/Team.d.ts.map +1 -0
  121. package/dist/cli/backend/src/models/Team.js +120 -0
  122. package/dist/cli/backend/src/models/Team.js.map +1 -0
  123. package/dist/cli/backend/src/models/Ticket.d.ts +24 -0
  124. package/dist/cli/backend/src/models/Ticket.d.ts.map +1 -0
  125. package/dist/cli/backend/src/models/Ticket.js +102 -0
  126. package/dist/cli/backend/src/models/Ticket.js.map +1 -0
  127. package/dist/cli/backend/src/models/index.d.ts +5 -0
  128. package/dist/cli/backend/src/models/index.d.ts.map +1 -0
  129. package/dist/cli/backend/src/models/index.js +5 -0
  130. package/dist/cli/backend/src/models/index.js.map +1 -0
  131. package/dist/cli/backend/src/services/core/config.service.d.ts +91 -0
  132. package/dist/cli/backend/src/services/core/config.service.d.ts.map +1 -0
  133. package/dist/cli/backend/src/services/core/config.service.js +246 -0
  134. package/dist/cli/backend/src/services/core/config.service.js.map +1 -0
  135. package/dist/cli/backend/src/services/core/logger.service.d.ts +70 -0
  136. package/dist/cli/backend/src/services/core/logger.service.d.ts.map +1 -0
  137. package/dist/cli/backend/src/services/core/logger.service.js +350 -0
  138. package/dist/cli/backend/src/services/core/logger.service.js.map +1 -0
  139. package/dist/cli/backend/src/services/core/storage.service.d.ts +269 -0
  140. package/dist/cli/backend/src/services/core/storage.service.d.ts.map +1 -0
  141. package/dist/cli/backend/src/services/core/storage.service.js +1406 -0
  142. package/dist/cli/backend/src/services/core/storage.service.js.map +1 -0
  143. package/dist/cli/backend/src/services/core/teams-backup.service.d.ts +92 -0
  144. package/dist/cli/backend/src/services/core/teams-backup.service.d.ts.map +1 -0
  145. package/dist/cli/backend/src/services/core/teams-backup.service.js +120 -0
  146. package/dist/cli/backend/src/services/core/teams-backup.service.js.map +1 -0
  147. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts +125 -0
  148. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts.map +1 -0
  149. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js +247 -0
  150. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js.map +1 -0
  151. package/dist/cli/backend/src/services/knowledge/knowledge.service.d.ts +153 -0
  152. package/dist/cli/backend/src/services/knowledge/knowledge.service.d.ts.map +1 -0
  153. package/dist/cli/backend/src/services/knowledge/knowledge.service.js +409 -0
  154. package/dist/cli/backend/src/services/knowledge/knowledge.service.js.map +1 -0
  155. package/dist/cli/backend/src/services/mcp-server.d.ts +167 -0
  156. package/dist/cli/backend/src/services/mcp-server.d.ts.map +1 -0
  157. package/dist/cli/backend/src/services/mcp-server.js +586 -0
  158. package/dist/cli/backend/src/services/mcp-server.js.map +1 -0
  159. package/dist/cli/backend/src/services/memory/agent-memory.service.d.ts +259 -0
  160. package/dist/cli/backend/src/services/memory/agent-memory.service.d.ts.map +1 -0
  161. package/dist/cli/backend/src/services/memory/agent-memory.service.js +539 -0
  162. package/dist/cli/backend/src/services/memory/agent-memory.service.js.map +1 -0
  163. package/dist/cli/backend/src/services/memory/memory.service.d.ts +306 -0
  164. package/dist/cli/backend/src/services/memory/memory.service.d.ts.map +1 -0
  165. package/dist/cli/backend/src/services/memory/memory.service.js +517 -0
  166. package/dist/cli/backend/src/services/memory/memory.service.js.map +1 -0
  167. package/dist/cli/backend/src/services/memory/project-memory.service.d.ts +252 -0
  168. package/dist/cli/backend/src/services/memory/project-memory.service.d.ts.map +1 -0
  169. package/dist/cli/backend/src/services/memory/project-memory.service.js +600 -0
  170. package/dist/cli/backend/src/services/memory/project-memory.service.js.map +1 -0
  171. package/dist/cli/backend/src/types/auto-assign.types.d.ts +271 -0
  172. package/dist/cli/backend/src/types/auto-assign.types.d.ts.map +1 -0
  173. package/dist/cli/backend/src/types/auto-assign.types.js +136 -0
  174. package/dist/cli/backend/src/types/auto-assign.types.js.map +1 -0
  175. package/dist/cli/backend/src/types/budget.types.d.ts +217 -0
  176. package/dist/cli/backend/src/types/budget.types.d.ts.map +1 -0
  177. package/dist/cli/backend/src/types/budget.types.js +82 -0
  178. package/dist/cli/backend/src/types/budget.types.js.map +1 -0
  179. package/dist/cli/backend/src/types/chat.types.d.ts +550 -0
  180. package/dist/cli/backend/src/types/chat.types.d.ts.map +1 -0
  181. package/dist/cli/backend/src/types/chat.types.js +743 -0
  182. package/dist/cli/backend/src/types/chat.types.js.map +1 -0
  183. package/dist/cli/backend/src/types/continuation.types.d.ts +237 -0
  184. package/dist/cli/backend/src/types/continuation.types.d.ts.map +1 -0
  185. package/dist/cli/backend/src/types/continuation.types.js +10 -0
  186. package/dist/cli/backend/src/types/continuation.types.js.map +1 -0
  187. package/dist/cli/backend/src/types/index.d.ts +164 -0
  188. package/dist/cli/backend/src/types/index.d.ts.map +1 -0
  189. package/dist/cli/backend/src/types/index.js +25 -0
  190. package/dist/cli/backend/src/types/index.js.map +1 -0
  191. package/dist/cli/backend/src/types/knowledge.types.d.ts +195 -0
  192. package/dist/cli/backend/src/types/knowledge.types.d.ts.map +1 -0
  193. package/dist/cli/backend/src/types/knowledge.types.js +38 -0
  194. package/dist/cli/backend/src/types/knowledge.types.js.map +1 -0
  195. package/dist/cli/backend/src/types/memory.types.d.ts +587 -0
  196. package/dist/cli/backend/src/types/memory.types.d.ts.map +1 -0
  197. package/dist/cli/backend/src/types/memory.types.js +47 -0
  198. package/dist/cli/backend/src/types/memory.types.js.map +1 -0
  199. package/dist/cli/backend/src/types/quality-gate.types.d.ts +171 -0
  200. package/dist/cli/backend/src/types/quality-gate.types.d.ts.map +1 -0
  201. package/dist/cli/backend/src/types/quality-gate.types.js +42 -0
  202. package/dist/cli/backend/src/types/quality-gate.types.js.map +1 -0
  203. package/dist/cli/backend/src/types/role.types.d.ts +260 -0
  204. package/dist/cli/backend/src/types/role.types.d.ts.map +1 -0
  205. package/dist/cli/backend/src/types/role.types.js +238 -0
  206. package/dist/cli/backend/src/types/role.types.js.map +1 -0
  207. package/dist/cli/backend/src/types/scheduler.types.d.ts +254 -0
  208. package/dist/cli/backend/src/types/scheduler.types.d.ts.map +1 -0
  209. package/dist/cli/backend/src/types/scheduler.types.js +32 -0
  210. package/dist/cli/backend/src/types/scheduler.types.js.map +1 -0
  211. package/dist/cli/backend/src/types/settings.types.d.ts +178 -0
  212. package/dist/cli/backend/src/types/settings.types.d.ts.map +1 -0
  213. package/dist/cli/backend/src/types/settings.types.js +206 -0
  214. package/dist/cli/backend/src/types/settings.types.js.map +1 -0
  215. package/dist/cli/backend/src/types/skill.types.d.ts +515 -0
  216. package/dist/cli/backend/src/types/skill.types.d.ts.map +1 -0
  217. package/dist/cli/backend/src/types/skill.types.js +481 -0
  218. package/dist/cli/backend/src/types/skill.types.js.map +1 -0
  219. package/dist/cli/backend/src/types/sop.types.d.ts +224 -0
  220. package/dist/cli/backend/src/types/sop.types.d.ts.map +1 -0
  221. package/dist/cli/backend/src/types/sop.types.js +85 -0
  222. package/dist/cli/backend/src/types/sop.types.js.map +1 -0
  223. package/dist/cli/backend/src/types/task-output.types.d.ts +78 -0
  224. package/dist/cli/backend/src/types/task-output.types.d.ts.map +1 -0
  225. package/dist/cli/backend/src/types/task-output.types.js +27 -0
  226. package/dist/cli/backend/src/types/task-output.types.js.map +1 -0
  227. package/dist/cli/backend/src/utils/file-io.utils.d.ts +102 -0
  228. package/dist/cli/backend/src/utils/file-io.utils.d.ts.map +1 -0
  229. package/dist/cli/backend/src/utils/file-io.utils.js +214 -0
  230. package/dist/cli/backend/src/utils/file-io.utils.js.map +1 -0
  231. package/dist/cli/backend/src/utils/terminal-output.utils.d.ts +54 -0
  232. package/dist/cli/backend/src/utils/terminal-output.utils.d.ts.map +1 -0
  233. package/dist/cli/backend/src/utils/terminal-output.utils.js +97 -0
  234. package/dist/cli/backend/src/utils/terminal-output.utils.js.map +1 -0
  235. package/dist/cli/cli/src/commands/mcp-server.d.ts +38 -0
  236. package/dist/cli/cli/src/commands/mcp-server.d.ts.map +1 -0
  237. package/dist/cli/cli/src/commands/mcp-server.js +49 -0
  238. package/dist/cli/cli/src/commands/mcp-server.js.map +1 -0
  239. package/dist/cli/cli/src/commands/onboard.d.ts +61 -7
  240. package/dist/cli/cli/src/commands/onboard.d.ts.map +1 -1
  241. package/dist/cli/cli/src/commands/onboard.js +192 -19
  242. package/dist/cli/cli/src/commands/onboard.js.map +1 -1
  243. package/dist/cli/cli/src/commands/publish.d.ts +27 -0
  244. package/dist/cli/cli/src/commands/publish.d.ts.map +1 -0
  245. package/dist/cli/cli/src/commands/publish.js +69 -0
  246. package/dist/cli/cli/src/commands/publish.js.map +1 -0
  247. package/dist/cli/cli/src/commands/start.d.ts.map +1 -1
  248. package/dist/cli/cli/src/commands/start.js +12 -2
  249. package/dist/cli/cli/src/commands/start.js.map +1 -1
  250. package/dist/cli/cli/src/index.js +14 -0
  251. package/dist/cli/cli/src/index.js.map +1 -1
  252. package/dist/cli/cli/src/utils/archive-creator.d.ts +82 -0
  253. package/dist/cli/cli/src/utils/archive-creator.d.ts.map +1 -0
  254. package/dist/cli/cli/src/utils/archive-creator.js +105 -0
  255. package/dist/cli/cli/src/utils/archive-creator.js.map +1 -0
  256. package/dist/cli/cli/src/utils/package-validator.d.ts +62 -0
  257. package/dist/cli/cli/src/utils/package-validator.d.ts.map +1 -0
  258. package/dist/cli/cli/src/utils/package-validator.js +122 -0
  259. package/dist/cli/cli/src/utils/package-validator.js.map +1 -0
  260. package/dist/cli/cli/src/utils/process-cleanup.d.ts +15 -0
  261. package/dist/cli/cli/src/utils/process-cleanup.d.ts.map +1 -0
  262. package/dist/cli/cli/src/utils/process-cleanup.js +76 -0
  263. package/dist/cli/cli/src/utils/process-cleanup.js.map +1 -0
  264. package/dist/cli/cli/src/utils/templates.d.ts +71 -0
  265. package/dist/cli/cli/src/utils/templates.d.ts.map +1 -0
  266. package/dist/cli/cli/src/utils/templates.js +91 -0
  267. package/dist/cli/cli/src/utils/templates.js.map +1 -0
  268. package/frontend/dist/assets/{index-523c7fce.js → index-68d1eb5a.js} +71 -71
  269. package/frontend/dist/assets/{index-4c050f52.css → index-c5043a83.css} +1 -1
  270. package/frontend/dist/assets/nunito-cyrillic-400-normal-e44e669f.woff2 +0 -0
  271. package/frontend/dist/assets/nunito-cyrillic-400-normal-ff8e8bdd.woff +0 -0
  272. package/frontend/dist/assets/nunito-cyrillic-500-normal-2159679b.woff +0 -0
  273. package/frontend/dist/assets/nunito-cyrillic-500-normal-61a3b80e.woff2 +0 -0
  274. package/frontend/dist/assets/nunito-cyrillic-600-normal-ac046097.woff +0 -0
  275. package/frontend/dist/assets/nunito-cyrillic-600-normal-e61eb97b.woff2 +0 -0
  276. package/frontend/dist/assets/nunito-cyrillic-700-normal-8fcefcc9.woff2 +0 -0
  277. package/frontend/dist/assets/nunito-cyrillic-700-normal-b9684104.woff +0 -0
  278. package/frontend/dist/assets/nunito-cyrillic-800-normal-40253beb.woff +0 -0
  279. package/frontend/dist/assets/nunito-cyrillic-800-normal-d80292de.woff2 +0 -0
  280. package/frontend/dist/assets/nunito-cyrillic-ext-400-normal-20d73ae7.woff2 +0 -0
  281. package/frontend/dist/assets/nunito-cyrillic-ext-400-normal-d48c37c9.woff +0 -0
  282. package/frontend/dist/assets/nunito-cyrillic-ext-500-normal-16197abd.woff +0 -0
  283. package/frontend/dist/assets/nunito-cyrillic-ext-500-normal-9dcfe9b5.woff2 +0 -0
  284. package/frontend/dist/assets/nunito-cyrillic-ext-600-normal-d53e9851.woff2 +0 -0
  285. package/frontend/dist/assets/nunito-cyrillic-ext-600-normal-e3d0201f.woff +0 -0
  286. package/frontend/dist/assets/nunito-cyrillic-ext-700-normal-5936f6ac.woff2 +0 -0
  287. package/frontend/dist/assets/nunito-cyrillic-ext-700-normal-c8c02775.woff +0 -0
  288. package/frontend/dist/assets/nunito-cyrillic-ext-800-normal-217b8f51.woff +0 -0
  289. package/frontend/dist/assets/nunito-cyrillic-ext-800-normal-796cf7bd.woff2 +0 -0
  290. package/frontend/dist/assets/nunito-latin-400-normal-a5906e15.woff2 +0 -0
  291. package/frontend/dist/assets/nunito-latin-400-normal-b51e7635.woff +0 -0
  292. package/frontend/dist/assets/nunito-latin-500-normal-23ae3083.woff2 +0 -0
  293. package/frontend/dist/assets/nunito-latin-500-normal-be14dbc6.woff +0 -0
  294. package/frontend/dist/assets/nunito-latin-600-normal-06a9c8b3.woff +0 -0
  295. package/frontend/dist/assets/nunito-latin-600-normal-45f437de.woff2 +0 -0
  296. package/frontend/dist/assets/nunito-latin-700-normal-ce9107dc.woff +0 -0
  297. package/frontend/dist/assets/nunito-latin-700-normal-fa89300b.woff2 +0 -0
  298. package/frontend/dist/assets/nunito-latin-800-normal-0ca02785.woff +0 -0
  299. package/frontend/dist/assets/nunito-latin-800-normal-2363d3ed.woff2 +0 -0
  300. package/frontend/dist/assets/nunito-latin-ext-400-normal-67250a41.woff2 +0 -0
  301. package/frontend/dist/assets/nunito-latin-ext-400-normal-d7e2415e.woff +0 -0
  302. package/frontend/dist/assets/nunito-latin-ext-500-normal-06f35d1c.woff +0 -0
  303. package/frontend/dist/assets/nunito-latin-ext-500-normal-343e7adc.woff2 +0 -0
  304. package/frontend/dist/assets/nunito-latin-ext-600-normal-5a8efd17.woff +0 -0
  305. package/frontend/dist/assets/nunito-latin-ext-600-normal-a7ba5f4f.woff2 +0 -0
  306. package/frontend/dist/assets/nunito-latin-ext-700-normal-0a4e4a02.woff2 +0 -0
  307. package/frontend/dist/assets/nunito-latin-ext-700-normal-0c607961.woff +0 -0
  308. package/frontend/dist/assets/nunito-latin-ext-800-normal-39f54b55.woff2 +0 -0
  309. package/frontend/dist/assets/nunito-latin-ext-800-normal-466d0211.woff +0 -0
  310. package/frontend/dist/assets/nunito-vietnamese-400-normal-2a755616.woff2 +0 -0
  311. package/frontend/dist/assets/nunito-vietnamese-400-normal-9c01ea9f.woff +0 -0
  312. package/frontend/dist/assets/nunito-vietnamese-500-normal-452e5e08.woff +0 -0
  313. package/frontend/dist/assets/nunito-vietnamese-500-normal-dc98d965.woff2 +0 -0
  314. package/frontend/dist/assets/nunito-vietnamese-600-normal-2ffbb85f.woff +0 -0
  315. package/frontend/dist/assets/nunito-vietnamese-600-normal-cf95b95d.woff2 +0 -0
  316. package/frontend/dist/assets/nunito-vietnamese-700-normal-0e29c28c.woff2 +0 -0
  317. package/frontend/dist/assets/nunito-vietnamese-700-normal-7793b75e.woff +0 -0
  318. package/frontend/dist/assets/nunito-vietnamese-800-normal-5baf507e.woff +0 -0
  319. package/frontend/dist/assets/nunito-vietnamese-800-normal-fac6740e.woff2 +0 -0
  320. package/frontend/dist/index.html +2 -2
  321. package/package.json +15 -5
@@ -0,0 +1,481 @@
1
+ /**
2
+ * Skill Type Definitions
3
+ *
4
+ * Types for the Skills system, which evolves from the existing SOP
5
+ * (Standard Operating Procedures) system. Skills combine prompts,
6
+ * scripts, environment variables, and browser automation capabilities.
7
+ *
8
+ * @module types/skill.types
9
+ */
10
+ // =============================================================================
11
+ // Constants
12
+ // =============================================================================
13
+ /**
14
+ * Valid skill categories
15
+ */
16
+ export const SKILL_CATEGORIES = [
17
+ 'development',
18
+ 'design',
19
+ 'communication',
20
+ 'research',
21
+ 'content-creation',
22
+ 'automation',
23
+ 'analysis',
24
+ 'integration',
25
+ 'management',
26
+ 'monitoring',
27
+ 'memory',
28
+ 'system',
29
+ 'task-management',
30
+ 'quality',
31
+ ];
32
+ /**
33
+ * Display names for skill categories
34
+ */
35
+ export const SKILL_CATEGORY_DISPLAY_NAMES = {
36
+ development: 'Development',
37
+ design: 'Design',
38
+ communication: 'Communication',
39
+ research: 'Research',
40
+ 'content-creation': 'Content Creation',
41
+ automation: 'Automation',
42
+ analysis: 'Analysis',
43
+ integration: 'Integration',
44
+ management: 'Management',
45
+ monitoring: 'Monitoring',
46
+ memory: 'Memory',
47
+ system: 'System',
48
+ 'task-management': 'Task Management',
49
+ quality: 'Quality',
50
+ };
51
+ /**
52
+ * Valid skill types
53
+ */
54
+ export const SKILL_TYPES = ['mcp', 'claude-skill', 'web-page'];
55
+ /**
56
+ * Display names for skill types
57
+ */
58
+ export const SKILL_TYPE_DISPLAY_NAMES = {
59
+ mcp: 'MCP Integration',
60
+ 'claude-skill': 'Claude Skill',
61
+ 'web-page': 'Web Page',
62
+ };
63
+ /**
64
+ * Valid execution types
65
+ */
66
+ export const EXECUTION_TYPES = [
67
+ 'script',
68
+ 'browser',
69
+ 'mcp-tool',
70
+ 'composite',
71
+ 'prompt-only',
72
+ ];
73
+ /**
74
+ * Display names for execution types
75
+ */
76
+ export const EXECUTION_TYPE_DISPLAY_NAMES = {
77
+ script: 'Script Execution',
78
+ browser: 'Browser Automation',
79
+ 'mcp-tool': 'MCP Tool',
80
+ composite: 'Composite Skill',
81
+ 'prompt-only': 'Prompt Only',
82
+ };
83
+ /**
84
+ * Valid script interpreters
85
+ */
86
+ export const SCRIPT_INTERPRETERS = ['bash', 'python', 'node'];
87
+ /**
88
+ * Skill system constants
89
+ */
90
+ export const SKILL_CONSTANTS = {
91
+ /** Directory paths */
92
+ PATHS: {
93
+ SKILLS_DIR: 'skills',
94
+ SYSTEM_SKILLS_DIR: 'system',
95
+ CUSTOM_SKILLS_DIR: 'custom',
96
+ INDEX_FILE: 'skills-index.json',
97
+ PROMPTS_DIR: 'prompts',
98
+ },
99
+ /** Limits */
100
+ LIMITS: {
101
+ MAX_NAME_LENGTH: 100,
102
+ MAX_DESCRIPTION_LENGTH: 500,
103
+ MAX_PROMPT_LENGTH: 50000,
104
+ MAX_TRIGGERS: 50,
105
+ MAX_TAGS: 20,
106
+ MAX_ASSIGNABLE_ROLES: 50,
107
+ MAX_COMPOSITE_SKILLS: 10,
108
+ DEFAULT_SCRIPT_TIMEOUT_MS: 60000,
109
+ MAX_SCRIPT_TIMEOUT_MS: 300000,
110
+ },
111
+ /** Default values */
112
+ DEFAULTS: {
113
+ VERSION: '1.0.0',
114
+ SCRIPT_TIMEOUT_MS: 60000,
115
+ IS_ENABLED: true,
116
+ IS_BUILTIN: false,
117
+ },
118
+ };
119
+ // =============================================================================
120
+ // Type Guard Functions
121
+ // =============================================================================
122
+ /**
123
+ * Check if a value is a valid skill category
124
+ *
125
+ * @param value - Value to check
126
+ * @returns True if value is a valid SkillCategory
127
+ */
128
+ export function isValidSkillCategory(value) {
129
+ return SKILL_CATEGORIES.includes(value);
130
+ }
131
+ /**
132
+ * Check if a value is a valid skill type
133
+ *
134
+ * @param value - Value to check
135
+ * @returns True if value is a valid SkillType
136
+ */
137
+ export function isValidSkillType(value) {
138
+ return SKILL_TYPES.includes(value);
139
+ }
140
+ /**
141
+ * Check if a value is a valid execution type
142
+ *
143
+ * @param value - Value to check
144
+ * @returns True if value is a valid SkillExecutionType
145
+ */
146
+ export function isValidExecutionType(value) {
147
+ return EXECUTION_TYPES.includes(value);
148
+ }
149
+ /**
150
+ * Check if a value is a valid script interpreter
151
+ *
152
+ * @param value - Value to check
153
+ * @returns True if value is a valid ScriptInterpreter
154
+ */
155
+ export function isValidScriptInterpreter(value) {
156
+ return SCRIPT_INTERPRETERS.includes(value);
157
+ }
158
+ // =============================================================================
159
+ // Utility Functions
160
+ // =============================================================================
161
+ /**
162
+ * Create a skill with default values from minimal input
163
+ *
164
+ * @param input - Required input fields for creating a skill
165
+ * @returns A complete Skill object with default values
166
+ */
167
+ export function createDefaultSkill(input) {
168
+ const now = new Date().toISOString();
169
+ const id = `skill-${input.name.toLowerCase().replace(/\s+/g, '-')}-${Date.now()}`;
170
+ return {
171
+ id,
172
+ name: input.name,
173
+ description: input.description,
174
+ category: input.category,
175
+ skillType: input.skillType ?? 'claude-skill',
176
+ promptFile: `${id}/instructions.md`,
177
+ assignableRoles: [],
178
+ triggers: [],
179
+ tags: [],
180
+ version: SKILL_CONSTANTS.DEFAULTS.VERSION,
181
+ isBuiltin: SKILL_CONSTANTS.DEFAULTS.IS_BUILTIN,
182
+ isEnabled: SKILL_CONSTANTS.DEFAULTS.IS_ENABLED,
183
+ createdAt: now,
184
+ updatedAt: now,
185
+ };
186
+ }
187
+ /**
188
+ * Convert a Skill to a SkillSummary for list views
189
+ *
190
+ * @param skill - Full skill object
191
+ * @returns SkillSummary with derived fields
192
+ */
193
+ export function skillToSummary(skill) {
194
+ return {
195
+ id: skill.id,
196
+ name: skill.name,
197
+ description: skill.description,
198
+ category: skill.category,
199
+ skillType: skill.skillType,
200
+ executionType: skill.execution?.type ?? 'prompt-only',
201
+ triggerCount: skill.triggers.length,
202
+ roleCount: skill.assignableRoles.length,
203
+ isBuiltin: skill.isBuiltin,
204
+ isEnabled: skill.isEnabled,
205
+ notices: skill.notices,
206
+ runtime: skill.runtime,
207
+ };
208
+ }
209
+ /**
210
+ * Convert a Skill to storage format (omits isBuiltin since that's determined by location)
211
+ *
212
+ * @param skill - Full skill object
213
+ * @returns SkillStorageFormat for JSON serialization
214
+ */
215
+ export function skillToStorageFormat(skill) {
216
+ return {
217
+ id: skill.id,
218
+ name: skill.name,
219
+ description: skill.description,
220
+ category: skill.category,
221
+ skillType: skill.skillType,
222
+ promptFile: skill.promptFile,
223
+ execution: skill.execution,
224
+ environment: skill.environment,
225
+ runtime: skill.runtime,
226
+ notices: skill.notices,
227
+ assignableRoles: skill.assignableRoles,
228
+ triggers: skill.triggers,
229
+ tags: skill.tags,
230
+ version: skill.version,
231
+ createdAt: skill.createdAt,
232
+ updatedAt: skill.updatedAt,
233
+ };
234
+ }
235
+ /**
236
+ * Convert storage format back to a Skill
237
+ *
238
+ * @param storage - Stored skill data
239
+ * @param isBuiltin - Whether this skill comes from the system directory
240
+ * @returns Full Skill object
241
+ */
242
+ export function storageFormatToSkill(storage, isBuiltin) {
243
+ return {
244
+ ...storage,
245
+ skillType: storage.skillType ?? 'claude-skill', // Default for backward compatibility
246
+ isBuiltin,
247
+ isEnabled: true, // Default to enabled when loading
248
+ };
249
+ }
250
+ /**
251
+ * Get display name for a skill category
252
+ *
253
+ * @param category - Skill category
254
+ * @returns Human-readable display name
255
+ */
256
+ export function getSkillCategoryDisplayName(category) {
257
+ return SKILL_CATEGORY_DISPLAY_NAMES[category] ?? category;
258
+ }
259
+ /**
260
+ * Get display name for an execution type
261
+ *
262
+ * @param executionType - Execution type
263
+ * @returns Human-readable display name
264
+ */
265
+ export function getExecutionTypeDisplayName(executionType) {
266
+ return EXECUTION_TYPE_DISPLAY_NAMES[executionType] ?? executionType;
267
+ }
268
+ // =============================================================================
269
+ // Validation Functions
270
+ // =============================================================================
271
+ /**
272
+ * Validate CreateSkillInput
273
+ *
274
+ * @param input - Input to validate
275
+ * @returns Array of error messages (empty if valid)
276
+ */
277
+ export function validateCreateSkillInput(input) {
278
+ const errors = [];
279
+ // Required fields
280
+ if (!input.name || input.name.trim().length === 0) {
281
+ errors.push('Name is required');
282
+ }
283
+ else if (input.name.length > SKILL_CONSTANTS.LIMITS.MAX_NAME_LENGTH) {
284
+ errors.push(`Name must be ${SKILL_CONSTANTS.LIMITS.MAX_NAME_LENGTH} characters or less`);
285
+ }
286
+ if (!input.description || input.description.trim().length === 0) {
287
+ errors.push('Description is required');
288
+ }
289
+ else if (input.description.length > SKILL_CONSTANTS.LIMITS.MAX_DESCRIPTION_LENGTH) {
290
+ errors.push(`Description must be ${SKILL_CONSTANTS.LIMITS.MAX_DESCRIPTION_LENGTH} characters or less`);
291
+ }
292
+ if (!isValidSkillCategory(input.category)) {
293
+ errors.push(`Invalid category: ${input.category}`);
294
+ }
295
+ if (!input.promptContent || input.promptContent.trim().length === 0) {
296
+ errors.push('Prompt content is required');
297
+ }
298
+ else if (input.promptContent.length > SKILL_CONSTANTS.LIMITS.MAX_PROMPT_LENGTH) {
299
+ errors.push(`Prompt content must be ${SKILL_CONSTANTS.LIMITS.MAX_PROMPT_LENGTH} characters or less`);
300
+ }
301
+ // Optional fields validation
302
+ if (input.triggers && input.triggers.length > SKILL_CONSTANTS.LIMITS.MAX_TRIGGERS) {
303
+ errors.push(`Maximum ${SKILL_CONSTANTS.LIMITS.MAX_TRIGGERS} triggers allowed`);
304
+ }
305
+ if (input.tags && input.tags.length > SKILL_CONSTANTS.LIMITS.MAX_TAGS) {
306
+ errors.push(`Maximum ${SKILL_CONSTANTS.LIMITS.MAX_TAGS} tags allowed`);
307
+ }
308
+ if (input.assignableRoles &&
309
+ input.assignableRoles.length > SKILL_CONSTANTS.LIMITS.MAX_ASSIGNABLE_ROLES) {
310
+ errors.push(`Maximum ${SKILL_CONSTANTS.LIMITS.MAX_ASSIGNABLE_ROLES} assignable roles allowed`);
311
+ }
312
+ // Execution config validation
313
+ if (input.execution) {
314
+ errors.push(...validateSkillExecution(input.execution));
315
+ }
316
+ return errors;
317
+ }
318
+ /**
319
+ * Validate UpdateSkillInput
320
+ *
321
+ * @param input - Input to validate
322
+ * @returns Array of error messages (empty if valid)
323
+ */
324
+ export function validateUpdateSkillInput(input) {
325
+ const errors = [];
326
+ if (input.name !== undefined) {
327
+ if (input.name.trim().length === 0) {
328
+ errors.push('Name cannot be empty');
329
+ }
330
+ else if (input.name.length > SKILL_CONSTANTS.LIMITS.MAX_NAME_LENGTH) {
331
+ errors.push(`Name must be ${SKILL_CONSTANTS.LIMITS.MAX_NAME_LENGTH} characters or less`);
332
+ }
333
+ }
334
+ if (input.description !== undefined) {
335
+ if (input.description.trim().length === 0) {
336
+ errors.push('Description cannot be empty');
337
+ }
338
+ else if (input.description.length > SKILL_CONSTANTS.LIMITS.MAX_DESCRIPTION_LENGTH) {
339
+ errors.push(`Description must be ${SKILL_CONSTANTS.LIMITS.MAX_DESCRIPTION_LENGTH} characters or less`);
340
+ }
341
+ }
342
+ if (input.category !== undefined && !isValidSkillCategory(input.category)) {
343
+ errors.push(`Invalid category: ${input.category}`);
344
+ }
345
+ if (input.promptContent !== undefined) {
346
+ if (input.promptContent.trim().length === 0) {
347
+ errors.push('Prompt content cannot be empty');
348
+ }
349
+ else if (input.promptContent.length > SKILL_CONSTANTS.LIMITS.MAX_PROMPT_LENGTH) {
350
+ errors.push(`Prompt content must be ${SKILL_CONSTANTS.LIMITS.MAX_PROMPT_LENGTH} characters or less`);
351
+ }
352
+ }
353
+ if (input.triggers && input.triggers.length > SKILL_CONSTANTS.LIMITS.MAX_TRIGGERS) {
354
+ errors.push(`Maximum ${SKILL_CONSTANTS.LIMITS.MAX_TRIGGERS} triggers allowed`);
355
+ }
356
+ if (input.tags && input.tags.length > SKILL_CONSTANTS.LIMITS.MAX_TAGS) {
357
+ errors.push(`Maximum ${SKILL_CONSTANTS.LIMITS.MAX_TAGS} tags allowed`);
358
+ }
359
+ if (input.assignableRoles &&
360
+ input.assignableRoles.length > SKILL_CONSTANTS.LIMITS.MAX_ASSIGNABLE_ROLES) {
361
+ errors.push(`Maximum ${SKILL_CONSTANTS.LIMITS.MAX_ASSIGNABLE_ROLES} assignable roles allowed`);
362
+ }
363
+ if (input.execution) {
364
+ errors.push(...validateSkillExecution(input.execution));
365
+ }
366
+ return errors;
367
+ }
368
+ /**
369
+ * Validate skill execution configuration
370
+ *
371
+ * @param config - Execution configuration to validate
372
+ * @returns Array of error messages (empty if valid)
373
+ */
374
+ export function validateSkillExecution(config) {
375
+ const errors = [];
376
+ if (!isValidExecutionType(config.type)) {
377
+ errors.push(`Invalid execution type: ${config.type}`);
378
+ return errors;
379
+ }
380
+ switch (config.type) {
381
+ case 'script':
382
+ if (!config.script) {
383
+ errors.push('Script configuration required for script type');
384
+ }
385
+ else {
386
+ if (!config.script.file || config.script.file.trim().length === 0) {
387
+ errors.push('Script file path is required');
388
+ }
389
+ if (!isValidScriptInterpreter(config.script.interpreter)) {
390
+ errors.push(`Invalid script interpreter: ${config.script.interpreter}`);
391
+ }
392
+ if (config.script.timeoutMs !== undefined &&
393
+ config.script.timeoutMs > SKILL_CONSTANTS.LIMITS.MAX_SCRIPT_TIMEOUT_MS) {
394
+ errors.push(`Script timeout cannot exceed ${SKILL_CONSTANTS.LIMITS.MAX_SCRIPT_TIMEOUT_MS}ms`);
395
+ }
396
+ }
397
+ break;
398
+ case 'browser':
399
+ if (!config.browser) {
400
+ errors.push('Browser configuration required for browser type');
401
+ }
402
+ else {
403
+ if (!config.browser.url || config.browser.url.trim().length === 0) {
404
+ errors.push('Browser URL is required');
405
+ }
406
+ if (!config.browser.instructions || config.browser.instructions.trim().length === 0) {
407
+ errors.push('Browser instructions are required');
408
+ }
409
+ }
410
+ break;
411
+ case 'mcp-tool':
412
+ if (!config.mcpTool) {
413
+ errors.push('MCP tool configuration required for mcp-tool type');
414
+ }
415
+ else if (!config.mcpTool.toolName || config.mcpTool.toolName.trim().length === 0) {
416
+ errors.push('MCP tool name is required');
417
+ }
418
+ break;
419
+ case 'composite':
420
+ if (!config.composite) {
421
+ errors.push('Composite configuration required for composite type');
422
+ }
423
+ else {
424
+ if (!config.composite.skillSequence || config.composite.skillSequence.length === 0) {
425
+ errors.push('Composite skill must have at least one skill in sequence');
426
+ }
427
+ else if (config.composite.skillSequence.length > SKILL_CONSTANTS.LIMITS.MAX_COMPOSITE_SKILLS) {
428
+ errors.push(`Composite skill cannot have more than ${SKILL_CONSTANTS.LIMITS.MAX_COMPOSITE_SKILLS} skills`);
429
+ }
430
+ }
431
+ break;
432
+ case 'prompt-only':
433
+ // No additional config required for prompt-only
434
+ break;
435
+ }
436
+ return errors;
437
+ }
438
+ /**
439
+ * Check if a skill matches the given filter
440
+ *
441
+ * @param skill - Skill to check
442
+ * @param filter - Filter criteria
443
+ * @returns True if skill matches all filter criteria
444
+ */
445
+ export function matchesSkillFilter(skill, filter) {
446
+ if (filter.category !== undefined && skill.category !== filter.category) {
447
+ return false;
448
+ }
449
+ if (filter.executionType !== undefined) {
450
+ const skillType = skill.execution?.type ?? 'prompt-only';
451
+ if (skillType !== filter.executionType) {
452
+ return false;
453
+ }
454
+ }
455
+ if (filter.roleId !== undefined && !skill.assignableRoles.includes(filter.roleId)) {
456
+ return false;
457
+ }
458
+ if (filter.isBuiltin !== undefined && skill.isBuiltin !== filter.isBuiltin) {
459
+ return false;
460
+ }
461
+ if (filter.isEnabled !== undefined && skill.isEnabled !== filter.isEnabled) {
462
+ return false;
463
+ }
464
+ if (filter.search !== undefined && filter.search.trim().length > 0) {
465
+ const searchLower = filter.search.toLowerCase();
466
+ const matchesName = skill.name.toLowerCase().includes(searchLower);
467
+ const matchesDescription = skill.description.toLowerCase().includes(searchLower);
468
+ const matchesTriggers = skill.triggers.some((t) => t.toLowerCase().includes(searchLower));
469
+ if (!matchesName && !matchesDescription && !matchesTriggers) {
470
+ return false;
471
+ }
472
+ }
473
+ if (filter.tags !== undefined && filter.tags.length > 0) {
474
+ const hasAllTags = filter.tags.every((tag) => skill.tags.some((t) => t.toLowerCase() === tag.toLowerCase()));
475
+ if (!hasAllTags) {
476
+ return false;
477
+ }
478
+ }
479
+ return true;
480
+ }
481
+ //# sourceMappingURL=skill.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.types.js","sourceRoot":"","sources":["../../../../../backend/src/types/skill.types.ts"],"names":[],"mappings":"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"}