crewswarm 0.8.1-beta

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 (362) hide show
  1. package/.env.example +155 -0
  2. package/LICENSE +21 -0
  3. package/README.md +316 -0
  4. package/apps/dashboard/dist/assets/chat-core-BwSoInmZ.js +1 -0
  5. package/apps/dashboard/dist/assets/chat-core-BwSoInmZ.js.br +0 -0
  6. package/apps/dashboard/dist/assets/cli-process-COMRNPqr.js +1 -0
  7. package/apps/dashboard/dist/assets/cli-process-COMRNPqr.js.br +0 -0
  8. package/apps/dashboard/dist/assets/components-CSUb80ze.js +1 -0
  9. package/apps/dashboard/dist/assets/components-CSUb80ze.js.br +0 -0
  10. package/apps/dashboard/dist/assets/core-utils-CAVnDoe1.js +1 -0
  11. package/apps/dashboard/dist/assets/core-utils-CAVnDoe1.js.br +0 -0
  12. package/apps/dashboard/dist/assets/index-CF0aJRtC.css +1 -0
  13. package/apps/dashboard/dist/assets/index-CF0aJRtC.css.br +0 -0
  14. package/apps/dashboard/dist/assets/index-Px49zu76.js +2 -0
  15. package/apps/dashboard/dist/assets/index-Px49zu76.js.br +0 -0
  16. package/apps/dashboard/dist/assets/orchestration-Ca2DLWN-.js +1 -0
  17. package/apps/dashboard/dist/assets/orchestration-Ca2DLWN-.js.br +0 -0
  18. package/apps/dashboard/dist/assets/setup-wizard-i3eEixlo.js +1 -0
  19. package/apps/dashboard/dist/assets/setup-wizard-i3eEixlo.js.br +0 -0
  20. package/apps/dashboard/dist/assets/tab-agents-tab-BThdsdJY.js +1 -0
  21. package/apps/dashboard/dist/assets/tab-agents-tab-BThdsdJY.js.br +0 -0
  22. package/apps/dashboard/dist/assets/tab-benchmarks-tab-DfCuAClu.js +1 -0
  23. package/apps/dashboard/dist/assets/tab-comms-tab-eHpOSBhG.js +1 -0
  24. package/apps/dashboard/dist/assets/tab-comms-tab-eHpOSBhG.js.br +0 -0
  25. package/apps/dashboard/dist/assets/tab-contacts-tab-yEegNyO4.js +1 -0
  26. package/apps/dashboard/dist/assets/tab-contacts-tab-yEegNyO4.js.br +0 -0
  27. package/apps/dashboard/dist/assets/tab-engines-tab-C3DYxTwy.js +1 -0
  28. package/apps/dashboard/dist/assets/tab-engines-tab-C3DYxTwy.js.br +0 -0
  29. package/apps/dashboard/dist/assets/tab-memory-tab-C59BYFQD.js +1 -0
  30. package/apps/dashboard/dist/assets/tab-memory-tab-C59BYFQD.js.br +0 -0
  31. package/apps/dashboard/dist/assets/tab-models-tab-9Ur7pXWA.js +1 -0
  32. package/apps/dashboard/dist/assets/tab-models-tab-9Ur7pXWA.js.br +0 -0
  33. package/apps/dashboard/dist/assets/tab-pm-loop-tab-D7mnDelU.js +1 -0
  34. package/apps/dashboard/dist/assets/tab-pm-loop-tab-D7mnDelU.js.br +0 -0
  35. package/apps/dashboard/dist/assets/tab-projects-tab-C6h2Mv1K.js +1 -0
  36. package/apps/dashboard/dist/assets/tab-projects-tab-C6h2Mv1K.js.br +0 -0
  37. package/apps/dashboard/dist/assets/tab-prompts-tab-C0wZvWK3.js +1 -0
  38. package/apps/dashboard/dist/assets/tab-prompts-tab-C0wZvWK3.js.br +0 -0
  39. package/apps/dashboard/dist/assets/tab-services-tab-DBj_w3bc.js +1 -0
  40. package/apps/dashboard/dist/assets/tab-services-tab-DBj_w3bc.js.br +0 -0
  41. package/apps/dashboard/dist/assets/tab-settings-tab-ezeqAjZk.js +1 -0
  42. package/apps/dashboard/dist/assets/tab-settings-tab-ezeqAjZk.js.br +0 -0
  43. package/apps/dashboard/dist/assets/tab-skills-tab-BYdU2whk.js +1 -0
  44. package/apps/dashboard/dist/assets/tab-skills-tab-BYdU2whk.js.br +0 -0
  45. package/apps/dashboard/dist/assets/tab-spending-tab-Bg6w9t_p.js +1 -0
  46. package/apps/dashboard/dist/assets/tab-spending-tab-Bg6w9t_p.js.br +0 -0
  47. package/apps/dashboard/dist/assets/tab-swarm-chat-tab-BBV9HB2X.js +1 -0
  48. package/apps/dashboard/dist/assets/tab-swarm-chat-tab-BBV9HB2X.js.br +0 -0
  49. package/apps/dashboard/dist/assets/tab-swarm-tab-ChqLlEVs.js +1 -0
  50. package/apps/dashboard/dist/assets/tab-swarm-tab-ChqLlEVs.js.br +0 -0
  51. package/apps/dashboard/dist/assets/tab-usage-tab-B2UWXenJ.js +1 -0
  52. package/apps/dashboard/dist/assets/tab-usage-tab-B2UWXenJ.js.br +0 -0
  53. package/apps/dashboard/dist/assets/tab-waves-tab-SaJDkb4x.js +1 -0
  54. package/apps/dashboard/dist/assets/tab-waves-tab-SaJDkb4x.js.br +0 -0
  55. package/apps/dashboard/dist/assets/tab-workflows-tab-6QSXLJ0i.js +1 -0
  56. package/apps/dashboard/dist/assets/tab-workflows-tab-6QSXLJ0i.js.br +0 -0
  57. package/apps/dashboard/dist/favicon.png +0 -0
  58. package/apps/dashboard/dist/index.html +6466 -0
  59. package/apps/dashboard/dist/index.html.br +0 -0
  60. package/apps/dashboard/dist/index.html.gz +0 -0
  61. package/apps/dashboard/dist/signup.html +446 -0
  62. package/apps/dashboard/index.html +6442 -0
  63. package/apps/dashboard/package.json +15 -0
  64. package/apps/dashboard/src/app.js +2823 -0
  65. package/apps/dashboard/src/app.js.br +0 -0
  66. package/apps/dashboard/src/app.js.gz +0 -0
  67. package/apps/dashboard/src/chat/chat-actions.js +1847 -0
  68. package/apps/dashboard/src/chat/chat-actions.js.br +0 -0
  69. package/apps/dashboard/src/chat/unified-messages.js +327 -0
  70. package/apps/dashboard/src/chat/unified-messages.js.br +0 -0
  71. package/apps/dashboard/src/cli-process.js +208 -0
  72. package/apps/dashboard/src/cli-process.js.br +0 -0
  73. package/apps/dashboard/src/cli-process.js.gz +0 -0
  74. package/apps/dashboard/src/components/active-tasks-panel.js +175 -0
  75. package/apps/dashboard/src/components/active-tasks-panel.js.br +0 -0
  76. package/apps/dashboard/src/core/api.js +18 -0
  77. package/apps/dashboard/src/core/api.js.br +0 -0
  78. package/apps/dashboard/src/core/dom.js +220 -0
  79. package/apps/dashboard/src/core/dom.js.br +0 -0
  80. package/apps/dashboard/src/core/state.js +91 -0
  81. package/apps/dashboard/src/core/state.js.br +0 -0
  82. package/apps/dashboard/src/core/task-manager.js +134 -0
  83. package/apps/dashboard/src/core/task-manager.js.br +0 -0
  84. package/apps/dashboard/src/orchestration-status.js +127 -0
  85. package/apps/dashboard/src/orchestration-status.js.br +0 -0
  86. package/apps/dashboard/src/setup-wizard.js +555 -0
  87. package/apps/dashboard/src/setup-wizard.js.br +0 -0
  88. package/apps/dashboard/src/styles.css +2085 -0
  89. package/apps/dashboard/src/styles.css.br +0 -0
  90. package/apps/dashboard/src/styles.css.gz +0 -0
  91. package/apps/dashboard/src/tabs/agents-tab.js +2237 -0
  92. package/apps/dashboard/src/tabs/agents-tab.js.br +0 -0
  93. package/apps/dashboard/src/tabs/benchmarks-tab.js +229 -0
  94. package/apps/dashboard/src/tabs/benchmarks-tab.js.br +0 -0
  95. package/apps/dashboard/src/tabs/comms-tab.js +955 -0
  96. package/apps/dashboard/src/tabs/comms-tab.js.br +0 -0
  97. package/apps/dashboard/src/tabs/contacts-tab.js +654 -0
  98. package/apps/dashboard/src/tabs/contacts-tab.js.br +0 -0
  99. package/apps/dashboard/src/tabs/engines-tab.js +175 -0
  100. package/apps/dashboard/src/tabs/engines-tab.js.br +0 -0
  101. package/apps/dashboard/src/tabs/memory-tab.js +182 -0
  102. package/apps/dashboard/src/tabs/memory-tab.js.br +0 -0
  103. package/apps/dashboard/src/tabs/models-tab.js +441 -0
  104. package/apps/dashboard/src/tabs/models-tab.js.br +0 -0
  105. package/apps/dashboard/src/tabs/pm-loop-tab.js +185 -0
  106. package/apps/dashboard/src/tabs/pm-loop-tab.js.br +0 -0
  107. package/apps/dashboard/src/tabs/projects-tab.js +663 -0
  108. package/apps/dashboard/src/tabs/projects-tab.js.br +0 -0
  109. package/apps/dashboard/src/tabs/projects-tab.js.gz +0 -0
  110. package/apps/dashboard/src/tabs/prompts-tab.js +160 -0
  111. package/apps/dashboard/src/tabs/prompts-tab.js.br +0 -0
  112. package/apps/dashboard/src/tabs/services-tab.js +202 -0
  113. package/apps/dashboard/src/tabs/services-tab.js.br +0 -0
  114. package/apps/dashboard/src/tabs/settings-tab.js +803 -0
  115. package/apps/dashboard/src/tabs/settings-tab.js.br +0 -0
  116. package/apps/dashboard/src/tabs/skills-tab.js +284 -0
  117. package/apps/dashboard/src/tabs/skills-tab.js.br +0 -0
  118. package/apps/dashboard/src/tabs/spending-tab.js +173 -0
  119. package/apps/dashboard/src/tabs/spending-tab.js.br +0 -0
  120. package/apps/dashboard/src/tabs/swarm-chat-tab.js +660 -0
  121. package/apps/dashboard/src/tabs/swarm-chat-tab.js.br +0 -0
  122. package/apps/dashboard/src/tabs/swarm-tab.js +538 -0
  123. package/apps/dashboard/src/tabs/swarm-tab.js.br +0 -0
  124. package/apps/dashboard/src/tabs/usage-tab.js +390 -0
  125. package/apps/dashboard/src/tabs/usage-tab.js.br +0 -0
  126. package/apps/dashboard/src/tabs/waves-tab.js +238 -0
  127. package/apps/dashboard/src/tabs/waves-tab.js.br +0 -0
  128. package/apps/dashboard/src/tabs/workflows-tab.js +747 -0
  129. package/apps/dashboard/src/tabs/workflows-tab.js.br +0 -0
  130. package/apps/vibe/.crew/agent-memory/pipeline.json +249 -0
  131. package/apps/vibe/.crew/cost.json +17 -0
  132. package/apps/vibe/.crew/json-parse-metrics.jsonl +22 -0
  133. package/apps/vibe/.crew/pipeline-metrics.jsonl +22 -0
  134. package/apps/vibe/.crew/pipeline-runs/pipeline-0f90c392-2425-4ae5-850c-bd9d17b1d690.jsonl +5 -0
  135. package/apps/vibe/.crew/pipeline-runs/pipeline-1c269dd9-a63f-4fba-af81-5cf08048ef06.jsonl +5 -0
  136. package/apps/vibe/.crew/pipeline-runs/pipeline-288a7765-da24-4a22-89bc-1f3cc9b0562c.jsonl +1 -0
  137. package/apps/vibe/.crew/pipeline-runs/pipeline-2c78fd22-a657-4bd1-bc49-0679fb384409.jsonl +5 -0
  138. package/apps/vibe/.crew/pipeline-runs/pipeline-3e6fe08d-3264-404a-8df3-aab7efef10e7.jsonl +5 -0
  139. package/apps/vibe/.crew/pipeline-runs/pipeline-42eec610-57fe-4e09-9e7e-b315038495c2.jsonl +5 -0
  140. package/apps/vibe/.crew/pipeline-runs/pipeline-4438eb4c-ae13-42b1-90e2-b043d8983be8.jsonl +5 -0
  141. package/apps/vibe/.crew/pipeline-runs/pipeline-4740a9f5-86e7-44b6-a394-de433e291727.jsonl +5 -0
  142. package/apps/vibe/.crew/pipeline-runs/pipeline-49e1da6a-957e-48fd-9220-415019e4f8e2.jsonl +5 -0
  143. package/apps/vibe/.crew/pipeline-runs/pipeline-4c9251db-be68-427b-a3fc-a264f2b5778d.jsonl +5 -0
  144. package/apps/vibe/.crew/pipeline-runs/pipeline-65e29a57-664d-4196-8109-017e364f182e.jsonl +5 -0
  145. package/apps/vibe/.crew/pipeline-runs/pipeline-6aa04bc5-9593-4b1f-b58d-3bf2978cb602.jsonl +5 -0
  146. package/apps/vibe/.crew/pipeline-runs/pipeline-6e1cba53-9b70-457e-99e0-59199149dd21.jsonl +5 -0
  147. package/apps/vibe/.crew/pipeline-runs/pipeline-749f41cc-4dac-4204-be64-873a6080a0d2.jsonl +5 -0
  148. package/apps/vibe/.crew/pipeline-runs/pipeline-74d68121-e181-4864-bd9a-c3211341dfaf.jsonl +5 -0
  149. package/apps/vibe/.crew/pipeline-runs/pipeline-8509bc24-142d-4e07-b44a-a50bf99d1103.jsonl +5 -0
  150. package/apps/vibe/.crew/pipeline-runs/pipeline-960339c6-07ca-43ce-9900-f6e1702b39b9.jsonl +5 -0
  151. package/apps/vibe/.crew/pipeline-runs/pipeline-9c6480a9-7031-4146-b241-825b9a2d1de1.jsonl +5 -0
  152. package/apps/vibe/.crew/pipeline-runs/pipeline-9fd42426-8492-4157-9d5f-e1537c060489.jsonl +2 -0
  153. package/apps/vibe/.crew/pipeline-runs/pipeline-ad6d40a3-2f5e-46a9-a345-47caaccc51aa.jsonl +5 -0
  154. package/apps/vibe/.crew/pipeline-runs/pipeline-bc606133-8d5b-4535-8d85-f1a29cdaa981.jsonl +5 -0
  155. package/apps/vibe/.crew/pipeline-runs/pipeline-c1a13ccd-634a-4d01-a4a7-1177b8a752ff.jsonl +5 -0
  156. package/apps/vibe/.crew/pipeline-runs/pipeline-c7d27b42-249e-4bd4-8f26-6aa998110b8a.jsonl +5 -0
  157. package/apps/vibe/.crew/pipeline-runs/pipeline-cca2e9b9-4a34-4d25-a311-5c793fa7e91e.jsonl +5 -0
  158. package/apps/vibe/.crew/sandbox.json +7 -0
  159. package/apps/vibe/.crew/session.json +285 -0
  160. package/apps/vibe/.crew/training-data.jsonl +0 -0
  161. package/apps/vibe/.github/workflows/studio-quality.yml +37 -0
  162. package/apps/vibe/.studio-data/project-messages/chuck-norris.jsonl +12 -0
  163. package/apps/vibe/.studio-data/project-messages/general.jsonl +54 -0
  164. package/apps/vibe/.studio-data/project-messages/studio-local.jsonl +10 -0
  165. package/apps/vibe/ARCHITECTURE.md +3393 -0
  166. package/apps/vibe/QUICK-REFERENCE.md +211 -0
  167. package/apps/vibe/README.md +76 -0
  168. package/apps/vibe/ROADMAP.md +41 -0
  169. package/apps/vibe/STUDIO-SETUP-COMPLETE.md +35 -0
  170. package/apps/vibe/VISUAL-GUIDE.md +378 -0
  171. package/apps/vibe/capture-demo.mjs +160 -0
  172. package/apps/vibe/capture-vibe-assets.mjs +71 -0
  173. package/apps/vibe/capture-vibe-video.mjs +260 -0
  174. package/apps/vibe/check-buttons.js +41 -0
  175. package/apps/vibe/diagnose.html +106 -0
  176. package/apps/vibe/fix-buttons.js +103 -0
  177. package/apps/vibe/index.html +3401 -0
  178. package/apps/vibe/package-lock.json +920 -0
  179. package/apps/vibe/package.json +31 -0
  180. package/apps/vibe/public/favicon.png +0 -0
  181. package/apps/vibe/scripts/studio-pty-host.py +117 -0
  182. package/apps/vibe/server.mjs +1835 -0
  183. package/apps/vibe/src/main.js +2846 -0
  184. package/apps/vibe/src/register-all-languages.js +98 -0
  185. package/apps/vibe/start-studio.sh +11 -0
  186. package/apps/vibe/test/accessibility-tests.js +77 -0
  187. package/apps/vibe/test/browser-performance-audit.mjs +205 -0
  188. package/apps/vibe/test/performance-tests.js +120 -0
  189. package/apps/vibe/test/security-tests.js +213 -0
  190. package/apps/vibe/tests/e2e.local.mjs +54 -0
  191. package/apps/vibe/tests/server.smoke.mjs +106 -0
  192. package/apps/vibe/update_website.mjs +74 -0
  193. package/apps/vibe/vite.config.js +19 -0
  194. package/apps/vibe/watch-server.mjs +108 -0
  195. package/contrib/openclaw-plugin/README.md +199 -0
  196. package/contrib/openclaw-plugin/index.ts +306 -0
  197. package/contrib/openclaw-plugin/openclaw.plugin.json +41 -0
  198. package/contrib/openclaw-plugin/package.json +27 -0
  199. package/contrib/openclaw-plugin/skills/crewswarm/SKILL.md +88 -0
  200. package/crew-lead.mjs +649 -0
  201. package/engines/claude-code.json +36 -0
  202. package/engines/codex.json +37 -0
  203. package/engines/crew-cli.json +42 -0
  204. package/engines/cursor.json +40 -0
  205. package/engines/docker-sandbox.json +38 -0
  206. package/engines/gemini-cli.json +75 -0
  207. package/engines/opencode.json +31 -0
  208. package/gateway-bridge.mjs +1575 -0
  209. package/install.sh +738 -0
  210. package/lib/agent-registry.mjs +232 -0
  211. package/lib/agents/daemon.mjs +121 -0
  212. package/lib/agents/dispatch.mjs +225 -0
  213. package/lib/agents/permissions.mjs +90 -0
  214. package/lib/agents/platform-formatting.mjs +102 -0
  215. package/lib/agents/registry.mjs +81 -0
  216. package/lib/agents/tool-instructions.mjs +257 -0
  217. package/lib/agents/validation.mjs +75 -0
  218. package/lib/approval/policy-manager.mjs +221 -0
  219. package/lib/autoharness/index.mjs +391 -0
  220. package/lib/bridges/cli-executor.mjs +332 -0
  221. package/lib/bridges/gateway-ws.mjs +345 -0
  222. package/lib/bridges/integration.mjs +229 -0
  223. package/lib/bridges/rag-helper.mjs +90 -0
  224. package/lib/browser/opencode-passthrough-filter.js +44 -0
  225. package/lib/browser/passthrough-stderr.js +109 -0
  226. package/lib/chat/autonomous-mentions.mjs +373 -0
  227. package/lib/chat/history.mjs +82 -0
  228. package/lib/chat/mention-routing-intent.mjs +136 -0
  229. package/lib/chat/participants.mjs +95 -0
  230. package/lib/chat/project-messages-rag.mjs +265 -0
  231. package/lib/chat/project-messages.mjs +479 -0
  232. package/lib/chat/shared-chat-prompt-overlay.mjs +52 -0
  233. package/lib/chat/thread-binding.mjs +34 -0
  234. package/lib/chat/unified-history.mjs +223 -0
  235. package/lib/chat/unified-wrapper.mjs +41 -0
  236. package/lib/cli-process-tracker.mjs +228 -0
  237. package/lib/collections/index.mjs +433 -0
  238. package/lib/contacts/identity-linker.mjs +248 -0
  239. package/lib/contacts/index.mjs +341 -0
  240. package/lib/crew-judge/PROMPT.md +93 -0
  241. package/lib/crew-judge/judge.mjs +260 -0
  242. package/lib/crew-lead/agent-manager.mjs +125 -0
  243. package/lib/crew-lead/background.mjs +270 -0
  244. package/lib/crew-lead/brain.mjs +110 -0
  245. package/lib/crew-lead/chat-handler.mjs +2603 -0
  246. package/lib/crew-lead/chat-handler.mjs.bak +1274 -0
  247. package/lib/crew-lead/classifier.mjs +83 -0
  248. package/lib/crew-lead/http-server.mjs +4824 -0
  249. package/lib/crew-lead/intent.mjs +102 -0
  250. package/lib/crew-lead/interval-manager.mjs +41 -0
  251. package/lib/crew-lead/llm-caller.mjs +544 -0
  252. package/lib/crew-lead/prompts.mjs +392 -0
  253. package/lib/crew-lead/retry-manager.mjs +118 -0
  254. package/lib/crew-lead/tools.mjs +318 -0
  255. package/lib/crew-lead/wave-dispatcher.mjs +798 -0
  256. package/lib/crew-lead/waves-config.json +73 -0
  257. package/lib/crew-lead/waves-loader.mjs +110 -0
  258. package/lib/crew-lead/ws-router.mjs +428 -0
  259. package/lib/dispatch/parsers.mjs +299 -0
  260. package/lib/domain-planning/detector.mjs +196 -0
  261. package/lib/domain-planning/prompts/crew-pm-cli.md +96 -0
  262. package/lib/domain-planning/prompts/crew-pm-core.md +122 -0
  263. package/lib/domain-planning/prompts/crew-pm-frontend.md +111 -0
  264. package/lib/engines/crew-cli-sandbox.mjs +422 -0
  265. package/lib/engines/crew-cli.mjs +155 -0
  266. package/lib/engines/cursor-launcher.mjs +110 -0
  267. package/lib/engines/engine-registry.mjs +253 -0
  268. package/lib/engines/llm-direct.mjs +184 -0
  269. package/lib/engines/opencode.mjs +256 -0
  270. package/lib/engines/ouroboros.mjs +114 -0
  271. package/lib/engines/rt-envelope.mjs +1643 -0
  272. package/lib/engines/rt-envelope.mjs.backup-current +870 -0
  273. package/lib/engines/runners.mjs +1367 -0
  274. package/lib/gemini-cli-passthrough-noise.mjs +37 -0
  275. package/lib/integrations/code-search.mjs +259 -0
  276. package/lib/integrations/greptile.mjs +148 -0
  277. package/lib/integrations/multimodal.mjs +313 -0
  278. package/lib/integrations/telegram-streaming.mjs +153 -0
  279. package/lib/integrations/tts.mjs +312 -0
  280. package/lib/integrations/twitter-links.mjs +294 -0
  281. package/lib/memory/shared-adapter.mjs +296 -0
  282. package/lib/pipeline/manager.mjs +539 -0
  283. package/lib/preferences/extractor.mjs +347 -0
  284. package/lib/project-dir.mjs +20 -0
  285. package/lib/runtime/config.mjs +388 -0
  286. package/lib/runtime/dlq.mjs +170 -0
  287. package/lib/runtime/log-rotation.mjs +82 -0
  288. package/lib/runtime/logger.mjs +58 -0
  289. package/lib/runtime/memory.mjs +421 -0
  290. package/lib/runtime/paths.mjs +76 -0
  291. package/lib/runtime/project-dir.mjs +127 -0
  292. package/lib/runtime/spending.mjs +204 -0
  293. package/lib/runtime/startup-guard.mjs +291 -0
  294. package/lib/runtime/task-lease.mjs +234 -0
  295. package/lib/runtime/telemetry-schema.mjs +208 -0
  296. package/lib/runtime/telemetry.mjs +101 -0
  297. package/lib/runtime/utils.mjs +64 -0
  298. package/lib/skills/index.mjs +265 -0
  299. package/lib/tools/browser.mjs +135 -0
  300. package/lib/tools/executor.mjs +913 -0
  301. package/lib/types.d.ts +57 -0
  302. package/package.json +106 -0
  303. package/pm-loop.mjs +1626 -0
  304. package/prompts/coder-back.md +27 -0
  305. package/prompts/coder-front.md +27 -0
  306. package/prompts/coder.md +28 -0
  307. package/prompts/copywriter.md +17 -0
  308. package/prompts/fixer.md +39 -0
  309. package/prompts/frontend.md +23 -0
  310. package/prompts/github.md +24 -0
  311. package/prompts/main.md +39 -0
  312. package/prompts/pm-cli.md +95 -0
  313. package/prompts/pm-core.md +121 -0
  314. package/prompts/pm-frontend.md +110 -0
  315. package/prompts/pm.md +234 -0
  316. package/prompts/qa.md +44 -0
  317. package/prompts/security.md +19 -0
  318. package/scripts/build-crew-chat.sh +28 -0
  319. package/scripts/build-llms-full.mjs +52 -0
  320. package/scripts/chatmock-login.sh +16 -0
  321. package/scripts/chatmock-serve.sh +16 -0
  322. package/scripts/check-dashboard.mjs +88 -0
  323. package/scripts/crew-scribe.mjs +326 -0
  324. package/scripts/dashboard-helpers.mjs +391 -0
  325. package/scripts/dashboard-validation.mjs +198 -0
  326. package/scripts/dashboard.mjs +9717 -0
  327. package/scripts/dlq-replay.mjs +61 -0
  328. package/scripts/doctor.mjs +196 -0
  329. package/scripts/file-lock.mjs +186 -0
  330. package/scripts/fresh-machine-smoke.sh +323 -0
  331. package/scripts/generate-changelog.mjs +227 -0
  332. package/scripts/generate-openapi.mjs +334 -0
  333. package/scripts/health-check.mjs +229 -0
  334. package/scripts/install-docker.sh +213 -0
  335. package/scripts/mcp-server.mjs +1625 -0
  336. package/scripts/opencrew-rt-daemon.mjs +568 -0
  337. package/scripts/openswitchctl +646 -0
  338. package/scripts/refactor-configs.mjs +39 -0
  339. package/scripts/release-check.sh +46 -0
  340. package/scripts/resolve-node-bin.sh +25 -0
  341. package/scripts/restart-all-from-repo.sh +329 -0
  342. package/scripts/restart-crew-lead.sh +98 -0
  343. package/scripts/restart-dashboard.sh +104 -0
  344. package/scripts/restart-service.sh +274 -0
  345. package/scripts/run-accessibility-audit.mjs +356 -0
  346. package/scripts/run-integration-bounded.mjs +188 -0
  347. package/scripts/run-scheduled-pipeline.mjs +230 -0
  348. package/scripts/run.mjs +41 -0
  349. package/scripts/scan-skills.mjs +79 -0
  350. package/scripts/setup-firewall.sh +128 -0
  351. package/scripts/smoke-dispatch.mjs +149 -0
  352. package/scripts/smoke.sh +163 -0
  353. package/scripts/start-crew.mjs +328 -0
  354. package/scripts/start.mjs +146 -0
  355. package/scripts/swiftbar-restart-service.sh +19 -0
  356. package/scripts/sync-agents.mjs +152 -0
  357. package/scripts/sync-prompts.mjs +79 -0
  358. package/scripts/validate-config.mjs +337 -0
  359. package/scripts/wow.mjs +89 -0
  360. package/telegram-bridge.mjs +2421 -0
  361. package/unified-orchestrator.mjs +519 -0
  362. package/whatsapp-bridge.mjs +1481 -0
@@ -0,0 +1,446 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <title>Sign Up — CrewSwarm</title>
7
+ <link rel="icon" type="image/png" href="/favicon.png" />
8
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
9
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
10
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet" />
11
+ <style>
12
+ :root {
13
+ --bg: #060a10;
14
+ --bg-card: #0d1420;
15
+ --bg-card2: #111827;
16
+ --border: rgba(255,255,255,0.07);
17
+ --text: #f0f6ff;
18
+ --text-2: #a0b3cc;
19
+ --text-3: #7a8a9f;
20
+ --accent: #38bdf8;
21
+ --green: #34d399;
22
+ --red: #f87171;
23
+ --radius: 10px;
24
+ }
25
+ * { box-sizing: border-box; margin: 0; padding: 0; }
26
+ body {
27
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
28
+ background: var(--bg);
29
+ color: var(--text);
30
+ min-height: 100vh;
31
+ display: flex;
32
+ align-items: center;
33
+ justify-content: center;
34
+ padding: 20px;
35
+ font-size: 14px;
36
+ }
37
+ .container {
38
+ max-width: 480px;
39
+ width: 100%;
40
+ }
41
+ .brand {
42
+ text-align: center;
43
+ margin-bottom: 32px;
44
+ }
45
+ .brand-name {
46
+ font-size: 24px;
47
+ font-weight: 800;
48
+ letter-spacing: 0.06em;
49
+ text-transform: uppercase;
50
+ color: var(--text);
51
+ }
52
+ .brand-name span { color: var(--accent); }
53
+ .brand-sub {
54
+ font-size: 14px;
55
+ color: var(--text-2);
56
+ margin-top: 6px;
57
+ }
58
+ .card {
59
+ background: var(--bg-card);
60
+ border: 1px solid var(--border);
61
+ border-radius: var(--radius);
62
+ padding: 32px;
63
+ }
64
+ .form-title {
65
+ font-size: 18px;
66
+ font-weight: 700;
67
+ margin-bottom: 6px;
68
+ }
69
+ .form-subtitle {
70
+ font-size: 13px;
71
+ color: var(--text-2);
72
+ margin-bottom: 24px;
73
+ }
74
+ .form-group {
75
+ margin-bottom: 18px;
76
+ }
77
+ label {
78
+ display: block;
79
+ font-size: 13px;
80
+ font-weight: 600;
81
+ margin-bottom: 6px;
82
+ color: var(--text);
83
+ }
84
+ label .required {
85
+ color: var(--red);
86
+ margin-left: 2px;
87
+ }
88
+ input, select, textarea {
89
+ width: 100%;
90
+ background: var(--bg-card2);
91
+ border: 1px solid var(--border);
92
+ border-radius: 7px;
93
+ padding: 10px 12px;
94
+ color: var(--text);
95
+ font-size: 14px;
96
+ font-family: inherit;
97
+ transition: border-color 0.2s;
98
+ }
99
+ input:focus, select:focus, textarea:focus {
100
+ outline: none;
101
+ border-color: var(--accent);
102
+ }
103
+ /* Keyboard navigation focus */
104
+ input:focus-visible, select:focus-visible, textarea:focus-visible, button:focus-visible, a:focus-visible {
105
+ outline: 3px solid var(--accent);
106
+ outline-offset: 2px;
107
+ }
108
+ input::placeholder {
109
+ color: var(--text-3);
110
+ }
111
+ textarea {
112
+ resize: vertical;
113
+ min-height: 60px;
114
+ }
115
+ .help-text {
116
+ font-size: 12px;
117
+ color: var(--text-3);
118
+ margin-top: 4px;
119
+ }
120
+ .btn {
121
+ width: 100%;
122
+ background: var(--accent);
123
+ color: var(--bg);
124
+ border: none;
125
+ border-radius: 7px;
126
+ padding: 12px 16px;
127
+ font-size: 14px;
128
+ font-weight: 600;
129
+ cursor: pointer;
130
+ font-family: inherit;
131
+ transition: opacity 0.2s;
132
+ }
133
+ .btn:hover:not(:disabled) {
134
+ opacity: 0.9;
135
+ }
136
+ .btn:disabled {
137
+ opacity: 0.5;
138
+ cursor: not-allowed;
139
+ }
140
+ .alert {
141
+ padding: 12px 14px;
142
+ border-radius: 7px;
143
+ margin-top: 16px;
144
+ font-size: 13px;
145
+ display: none;
146
+ }
147
+ .alert.error {
148
+ background: rgba(248,113,113,0.12);
149
+ color: var(--red);
150
+ border: 1px solid rgba(248,113,113,0.25);
151
+ }
152
+ .alert.success {
153
+ background: rgba(52,211,153,0.12);
154
+ color: var(--green);
155
+ border: 1px solid rgba(52,211,153,0.25);
156
+ }
157
+ .footer {
158
+ text-align: center;
159
+ margin-top: 24px;
160
+ font-size: 13px;
161
+ color: var(--text-2);
162
+ }
163
+ .footer a {
164
+ color: var(--accent);
165
+ text-decoration: none;
166
+ }
167
+ .footer a:hover {
168
+ text-decoration: underline;
169
+ }
170
+ #successCard {
171
+ display: none;
172
+ }
173
+ .success-icon {
174
+ font-size: 48px;
175
+ text-align: center;
176
+ margin-bottom: 16px;
177
+ }
178
+ .whatsapp-btn {
179
+ background: #25D366;
180
+ margin-top: 16px;
181
+ display: inline-flex;
182
+ align-items: center;
183
+ justify-content: center;
184
+ gap: 8px;
185
+ text-decoration: none;
186
+ width: 100%;
187
+ }
188
+ .whatsapp-btn:hover {
189
+ opacity: 0.9;
190
+ }
191
+ </style>
192
+ </head>
193
+ <body>
194
+ <main class="container" role="main" aria-label="Sign up form">
195
+ <header class="brand">
196
+ <div class="brand-name">Crew<span>Swarm</span></div>
197
+ <div class="brand-sub">Multi-Agent AI Orchestration</div>
198
+ </header>
199
+
200
+ <!-- Signup Form -->
201
+ <div class="card" id="signupCard">
202
+ <h1 class="form-title">Create Your Account</h1>
203
+ <p class="form-subtitle">Get started with our AI crew assistant on WhatsApp</p>
204
+
205
+ <form id="signupForm" aria-label="Account creation form">
206
+ <div class="form-group">
207
+ <label>Name <span class="required">*</span></label>
208
+ <input type="text" id="name" name="name" placeholder="Your full name" required maxlength="100" />
209
+ </div>
210
+
211
+ <div class="form-group">
212
+ <label>WhatsApp Phone <span class="required">*</span></label>
213
+ <input type="tel" id="phone" name="phone" placeholder="+1234567890" required pattern="^\+[1-9]\d{1,14}$" />
214
+ <div class="help-text">Include country code (e.g., +1 for US)</div>
215
+ </div>
216
+
217
+ <div class="form-group">
218
+ <label>Email</label>
219
+ <input type="email" id="email" name="email" placeholder="you@example.com" maxlength="100" />
220
+ <div class="help-text">Optional — for notifications and updates</div>
221
+ </div>
222
+
223
+ <div class="form-group">
224
+ <label>City</label>
225
+ <input type="text" id="city" name="city" placeholder="Grand Bend" maxlength="100" />
226
+ <div class="help-text">Your current city (helps with local recommendations)</div>
227
+ </div>
228
+
229
+ <div class="form-group">
230
+ <label>State / Province</label>
231
+ <input type="text" id="state" name="state" placeholder="Ontario" maxlength="100" />
232
+ </div>
233
+
234
+ <div class="form-group">
235
+ <label>Country</label>
236
+ <input type="text" id="country" name="country" placeholder="Canada" maxlength="100" />
237
+ </div>
238
+
239
+ <div class="form-group">
240
+ <label>Diet Preference</label>
241
+ <select id="diet" name="diet">
242
+ <option value="">— Select —</option>
243
+ <option value="omnivore">Omnivore</option>
244
+ <option value="vegetarian">Vegetarian</option>
245
+ <option value="vegan">Vegan</option>
246
+ <option value="pescatarian">Pescatarian</option>
247
+ </select>
248
+ </div>
249
+
250
+ <div class="form-group">
251
+ <label>Spice Level</label>
252
+ <select id="spiceLevel" name="spiceLevel">
253
+ <option value="">— Select —</option>
254
+ <option value="mild">Mild</option>
255
+ <option value="medium">Medium</option>
256
+ <option value="hot">Hot</option>
257
+ </select>
258
+ </div>
259
+
260
+ <div class="form-group">
261
+ <label>Budget</label>
262
+ <select id="budget" name="budget">
263
+ <option value="">— Select —</option>
264
+ <option value="$">$ (Budget-friendly)</option>
265
+ <option value="$$">$$ (Moderate)</option>
266
+ <option value="$$$">$$$ (Premium)</option>
267
+ </select>
268
+ </div>
269
+
270
+ <div class="form-group">
271
+ <label>Allergies</label>
272
+ <input type="text" id="allergies" name="allergies" placeholder="shellfish, peanuts" maxlength="200" />
273
+ <div class="help-text">Comma-separated list</div>
274
+ </div>
275
+
276
+ <div class="form-group">
277
+ <label>Favorite Cuisines</label>
278
+ <input type="text" id="favCuisines" name="favCuisines" placeholder="Thai, Mexican, Italian" maxlength="200" />
279
+ <div class="help-text">Comma-separated list</div>
280
+ </div>
281
+
282
+ <button type="submit" class="btn" id="submitBtn">Sign Up</button>
283
+ </form>
284
+
285
+ <div class="alert error" id="errorAlert"></div>
286
+ <div class="alert success" id="successAlert"></div>
287
+ </div>
288
+
289
+ <!-- Success Confirmation -->
290
+ <div class="card" id="successCard">
291
+ <div class="success-icon">✅</div>
292
+ <h1 class="form-title" style="text-align: center;">You're All Set!</h1>
293
+ <p class="form-subtitle" style="text-align: center;">Your account has been created. Now message us on WhatsApp to get started.</p>
294
+
295
+ <a href="#" class="btn whatsapp-btn" id="whatsappBtn">
296
+ <span style="font-size: 20px;">📱</span>
297
+ Open WhatsApp
298
+ </a>
299
+
300
+ <div class="help-text" style="text-align: center; margin-top: 16px;">
301
+ Or manually message: <strong id="whatsappNumber"></strong>
302
+ </div>
303
+ </div>
304
+
305
+ <footer class="footer">
306
+ Already have an account? <a href="/">Go to Dashboard</a>
307
+ </footer>
308
+ </main>
309
+
310
+ <script>
311
+ const form = document.getElementById('signupForm');
312
+ const submitBtn = document.getElementById('submitBtn');
313
+ const errorAlert = document.getElementById('errorAlert');
314
+ const successAlert = document.getElementById('successAlert');
315
+ const signupCard = document.getElementById('signupCard');
316
+ const successCard = document.getElementById('successCard');
317
+
318
+ // Sanitize input (prevent XSS)
319
+ function sanitize(str) {
320
+ if (!str) return '';
321
+ const div = document.createElement('div');
322
+ div.textContent = str;
323
+ return div.innerHTML.trim().slice(0, 1000); // Max 1000 chars
324
+ }
325
+
326
+ // Validate phone format
327
+ function validatePhone(phone) {
328
+ const phoneRegex = /^\+[1-9]\d{1,14}$/;
329
+ return phoneRegex.test(phone);
330
+ }
331
+
332
+ // Show error
333
+ function showError(message) {
334
+ errorAlert.textContent = message;
335
+ errorAlert.style.display = 'block';
336
+ successAlert.style.display = 'none';
337
+ }
338
+
339
+ // Show success
340
+ function showSuccess(message) {
341
+ successAlert.textContent = message;
342
+ successAlert.style.display = 'block';
343
+ errorAlert.style.display = 'none';
344
+ }
345
+
346
+ form.addEventListener('submit', async (e) => {
347
+ e.preventDefault();
348
+
349
+ // Clear alerts
350
+ errorAlert.style.display = 'none';
351
+ successAlert.style.display = 'none';
352
+
353
+ // Disable submit button
354
+ submitBtn.disabled = true;
355
+ submitBtn.textContent = 'Creating account...';
356
+
357
+ // Get and sanitize form values
358
+ const name = sanitize(document.getElementById('name').value);
359
+ const phone = sanitize(document.getElementById('phone').value);
360
+ const email = sanitize(document.getElementById('email').value);
361
+ const city = sanitize(document.getElementById('city').value);
362
+ const state = sanitize(document.getElementById('state').value);
363
+ const country = sanitize(document.getElementById('country').value);
364
+ const diet = sanitize(document.getElementById('diet').value);
365
+ const spiceLevel = sanitize(document.getElementById('spiceLevel').value);
366
+ const budget = sanitize(document.getElementById('budget').value);
367
+ const allergies = sanitize(document.getElementById('allergies').value);
368
+ const favCuisines = sanitize(document.getElementById('favCuisines').value);
369
+
370
+ // Validate required fields
371
+ if (!name || name.length < 2) {
372
+ showError('Please enter a valid name (at least 2 characters)');
373
+ submitBtn.disabled = false;
374
+ submitBtn.textContent = 'Sign Up';
375
+ return;
376
+ }
377
+
378
+ if (!phone || !validatePhone(phone)) {
379
+ showError('Please enter a valid phone number with country code (e.g., +1234567890)');
380
+ submitBtn.disabled = false;
381
+ submitBtn.textContent = 'Sign Up';
382
+ return;
383
+ }
384
+
385
+ // Build preferences object
386
+ const preferences = {};
387
+ if (diet) preferences.diet = diet;
388
+ if (spiceLevel) preferences.spiceLevel = spiceLevel;
389
+ if (budget) preferences.budget = budget;
390
+ if (allergies) {
391
+ preferences.allergies = allergies.split(',').map(a => a.trim()).filter(Boolean);
392
+ }
393
+ if (favCuisines) {
394
+ preferences.favCuisines = favCuisines.split(',').map(c => c.trim()).filter(Boolean);
395
+ }
396
+
397
+ // Submit to API
398
+ try {
399
+ const response = await fetch('/api/signup', {
400
+ method: 'POST',
401
+ headers: { 'Content-Type': 'application/json' },
402
+ body: JSON.stringify({
403
+ name,
404
+ phone,
405
+ email,
406
+ city,
407
+ state,
408
+ country,
409
+ preferences
410
+ })
411
+ });
412
+
413
+ const data = await response.json();
414
+
415
+ if (!response.ok) {
416
+ throw new Error(data.error || 'Failed to create account');
417
+ }
418
+
419
+ // Success — show confirmation card
420
+ signupCard.style.display = 'none';
421
+ successCard.style.display = 'block';
422
+
423
+ // Set WhatsApp link
424
+ const whatsappNumber = data.whatsappNumber || '+1234567890'; // Fallback
425
+ document.getElementById('whatsappNumber').textContent = whatsappNumber;
426
+
427
+ const whatsappLink = `https://wa.me/${whatsappNumber.replace(/[^\d]/g, '')}?text=Hi!`;
428
+ document.getElementById('whatsappBtn').href = whatsappLink;
429
+
430
+ } catch (error) {
431
+ showError(error.message || 'Something went wrong. Please try again.');
432
+ submitBtn.disabled = false;
433
+ submitBtn.textContent = 'Sign Up';
434
+ }
435
+ });
436
+
437
+ // Real-time phone validation
438
+ document.getElementById('phone').addEventListener('input', (e) => {
439
+ const phone = e.target.value;
440
+ if (phone && !phone.startsWith('+')) {
441
+ e.target.value = '+' + phone.replace(/[^\d]/g, '');
442
+ }
443
+ });
444
+ </script>
445
+ </body>
446
+ </html>