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,37 @@
1
+ /**
2
+ * Strip Gemini CLI banner / status lines from engine passthrough (stdout before JSON lines).
3
+ * Used by crew-lead, dashboard, and Vibe.
4
+ */
5
+
6
+ function stripAnsiPassthrough(text) {
7
+ return String(text || "")
8
+ .replace(/\u001b\[[\d;?]*[ -/]*[@-~]/g, "")
9
+ .replace(/\u001b\][^\u0007]*(?:\u0007|\u001b\\)/g, "");
10
+ }
11
+
12
+ /**
13
+ * @param {string} line
14
+ * @returns {boolean} true = do not forward this line as chat content
15
+ */
16
+ export function shouldSkipGeminiPassthroughLine(line) {
17
+ const t = stripAnsiPassthrough(String(line || "").replace(/\r/g, "")).trim();
18
+ if (!t) return true;
19
+ if (/^YOLO mode is enabled/i.test(t)) return true;
20
+ if (/All tool calls will be automatically approved/i.test(t)) return true;
21
+ if (/Loaded cached credentials/i.test(t)) return true;
22
+ if (/^Using bundled/i.test(t)) return true;
23
+ if (/^Authenticated via/i.test(t)) return true;
24
+ if (/^OpenTelemetry/i.test(t)) return true;
25
+ return false;
26
+ }
27
+
28
+ /**
29
+ * @param {string} engine
30
+ * @param {string} text
31
+ */
32
+ export function filterGeminiPassthroughTextChunk(engine, text) {
33
+ if (engine !== "gemini" && engine !== "gemini-cli") return String(text ?? "");
34
+ const s = String(text ?? "");
35
+ if (!s) return s;
36
+ return s.split("\n").filter((ln) => !shouldSkipGeminiPassthroughLine(ln)).join("\n");
37
+ }
@@ -0,0 +1,259 @@
1
+ /**
2
+ * Local Semantic Code Search
3
+ * Uses ripgrep + smart ranking for semantic codebase understanding
4
+ * Zero external dependencies, 100% local, instant results
5
+ */
6
+
7
+ import { execSync } from 'node:child_process';
8
+ import fs from 'node:fs';
9
+ import path from 'node:path';
10
+
11
+ /**
12
+ * Extract meaningful keywords from natural language query
13
+ */
14
+ function extractKeywords(query) {
15
+ const stopwords = new Set([
16
+ 'how', 'does', 'what', 'where', 'when', 'why', 'the', 'is', 'are',
17
+ 'was', 'were', 'in', 'on', 'at', 'to', 'for', 'of', 'with', 'by',
18
+ 'this', 'that', 'these', 'those', 'a', 'an', 'and', 'or', 'but'
19
+ ]);
20
+
21
+ return query
22
+ .toLowerCase()
23
+ .replace(/[^a-z0-9\s]/g, ' ')
24
+ .split(/\s+/)
25
+ .filter(word => word.length > 2 && !stopwords.has(word))
26
+ .slice(0, 5); // Top 5 keywords
27
+ }
28
+
29
+ /**
30
+ * Parse ripgrep JSON output
31
+ */
32
+ function parseRipgrepJson(output) {
33
+ if (!output || !output.trim()) return [];
34
+
35
+ const matches = [];
36
+ const lines = output.split('\n').filter(l => l.trim());
37
+
38
+ for (const line of lines) {
39
+ try {
40
+ const item = JSON.parse(line);
41
+ if (item.type === 'match') {
42
+ matches.push({
43
+ file: item.data.path.text,
44
+ line: item.data.line_number,
45
+ content: item.data.lines.text,
46
+ matches: item.data.submatches.map(sm => sm.match.text)
47
+ });
48
+ }
49
+ } catch (e) {
50
+ // Skip malformed JSON
51
+ }
52
+ }
53
+
54
+ return matches;
55
+ }
56
+
57
+ /**
58
+ * Rank search results by relevance
59
+ */
60
+ function rankByRelevance(results, query, keywords) {
61
+ const queryLower = query.toLowerCase();
62
+
63
+ return results
64
+ .map(result => {
65
+ let score = 0;
66
+ const contentLower = result.content.toLowerCase();
67
+
68
+ // Exact query match = highest score
69
+ if (contentLower.includes(queryLower)) score += 100;
70
+
71
+ // Keyword matches
72
+ for (const keyword of keywords) {
73
+ if (contentLower.includes(keyword)) score += 10;
74
+ }
75
+
76
+ // Boost for function/class definitions
77
+ if (/^(function|class|def|const|let|var|export)\s/.test(result.content.trim())) {
78
+ score += 20;
79
+ }
80
+
81
+ // Boost for common patterns
82
+ if (/auth|login|session|token|verify/.test(contentLower) && /auth/i.test(query)) {
83
+ score += 15;
84
+ }
85
+
86
+ return { ...result, score };
87
+ })
88
+ .sort((a, b) => b.score - a.score);
89
+ }
90
+
91
+ /**
92
+ * Search codebase with natural language query
93
+ * @param {string} query - Natural language question (e.g., "how does authentication work?")
94
+ * @param {string} projectDir - Root directory to search
95
+ * @param {object} options - Search options
96
+ * @returns {Promise<{query: string, keywords: string[], results: Array, summary: string}>}
97
+ */
98
+ export async function searchCode(query, projectDir = process.cwd(), options = {}) {
99
+ const {
100
+ maxResults = 20,
101
+ contextLines = 3,
102
+ fileTypes = null // e.g., ['js', 'ts', 'mjs']
103
+ } = options;
104
+
105
+ // Extract keywords from query
106
+ const keywords = extractKeywords(query);
107
+
108
+ if (keywords.length === 0) {
109
+ return {
110
+ query,
111
+ keywords: [],
112
+ results: [],
113
+ summary: 'No meaningful keywords found in query'
114
+ };
115
+ }
116
+
117
+ // Build ripgrep command
118
+ const searchPattern = keywords.join('|');
119
+ let cmd = `rg --json --context ${contextLines} --max-count ${maxResults} -i`;
120
+
121
+ if (fileTypes && fileTypes.length > 0) {
122
+ cmd += ` ${fileTypes.map(t => `-t ${t}`).join(' ')}`;
123
+ }
124
+
125
+ cmd += ` "${searchPattern}" "${projectDir}"`;
126
+
127
+ try {
128
+ const output = execSync(cmd, {
129
+ encoding: 'utf8',
130
+ stdio: ['pipe', 'pipe', 'ignore'],
131
+ maxBuffer: 10 * 1024 * 1024 // 10MB buffer
132
+ });
133
+
134
+ const matches = parseRipgrepJson(output);
135
+ const ranked = rankByRelevance(matches, query, keywords);
136
+
137
+ // Group by file
138
+ const fileGroups = {};
139
+ for (const match of ranked) {
140
+ if (!fileGroups[match.file]) {
141
+ fileGroups[match.file] = [];
142
+ }
143
+ fileGroups[match.file].push(match);
144
+ }
145
+
146
+ return {
147
+ query,
148
+ keywords,
149
+ results: ranked.slice(0, maxResults),
150
+ fileGroups,
151
+ summary: `Found ${ranked.length} matches across ${Object.keys(fileGroups).length} files`
152
+ };
153
+
154
+ } catch (error) {
155
+ // ripgrep exits with code 1 if no matches found
156
+ if (error.status === 1) {
157
+ return {
158
+ query,
159
+ keywords,
160
+ results: [],
161
+ summary: 'No matches found'
162
+ };
163
+ }
164
+ throw error;
165
+ }
166
+ }
167
+
168
+ /**
169
+ * Format search results for LLM context injection
170
+ */
171
+ export function formatSearchResults(searchResults, maxChars = 4000) {
172
+ const { query, results, summary } = searchResults;
173
+
174
+ if (results.length === 0) {
175
+ return `## Code Search: "${query}"\n\n${summary}`;
176
+ }
177
+
178
+ let output = `## Code Search: "${query}"\n\n${summary}\n\n`;
179
+ let charsUsed = output.length;
180
+
181
+ for (const result of results) {
182
+ const entry = `### ${result.file}:${result.line}\n\`\`\`\n${result.content}\n\`\`\`\n\n`;
183
+
184
+ if (charsUsed + entry.length > maxChars) {
185
+ output += `\n_(${results.length - results.indexOf(result)} more results truncated)_\n`;
186
+ break;
187
+ }
188
+
189
+ output += entry;
190
+ charsUsed += entry.length;
191
+ }
192
+
193
+ return output;
194
+ }
195
+
196
+ /**
197
+ * Find files by pattern
198
+ */
199
+ export async function findFiles(pattern, projectDir = process.cwd()) {
200
+ try {
201
+ const output = execSync(`rg --files | rg "${pattern}"`, {
202
+ cwd: projectDir,
203
+ encoding: 'utf8',
204
+ stdio: ['pipe', 'pipe', 'ignore']
205
+ });
206
+
207
+ return output.split('\n').filter(f => f.trim());
208
+ } catch (error) {
209
+ if (error.status === 1) return [];
210
+ throw error;
211
+ }
212
+ }
213
+
214
+ /**
215
+ * Search for specific code patterns (regex-based)
216
+ */
217
+ export async function searchPattern(pattern, projectDir = process.cwd(), options = {}) {
218
+ const { fileTypes = null, contextLines = 2 } = options;
219
+
220
+ let cmd = `rg --json --context ${contextLines}`;
221
+
222
+ if (fileTypes && fileTypes.length > 0) {
223
+ cmd += ` ${fileTypes.map(t => `-t ${t}`).join(' ')}`;
224
+ }
225
+
226
+ cmd += ` "${pattern}" "${projectDir}"`;
227
+
228
+ try {
229
+ const output = execSync(cmd, {
230
+ encoding: 'utf8',
231
+ stdio: ['pipe', 'pipe', 'ignore'],
232
+ maxBuffer: 10 * 1024 * 1024
233
+ });
234
+
235
+ return parseRipgrepJson(output);
236
+ } catch (error) {
237
+ if (error.status === 1) return [];
238
+ throw error;
239
+ }
240
+ }
241
+
242
+ /**
243
+ * Helper: Search for function definitions
244
+ */
245
+ export async function findFunctions(name, projectDir = process.cwd()) {
246
+ // Matches: function name, const name =, export function name, etc.
247
+ // Escape special regex characters in name
248
+ const escapedName = name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
249
+ const pattern = `(function|const|let|export)\\s+${escapedName}`;
250
+ return await searchPattern(pattern, projectDir, { fileTypes: ['js', 'ts', 'mjs'] });
251
+ }
252
+
253
+ /**
254
+ * Helper: Search for class definitions
255
+ */
256
+ export async function findClasses(name, projectDir = process.cwd()) {
257
+ const pattern = `class\\s+${name}\\s*[{(]`;
258
+ return await searchPattern(pattern, projectDir, { fileTypes: ['js', 'ts', 'mjs'] });
259
+ }
@@ -0,0 +1,148 @@
1
+ /**
2
+ * Greptile API Integration
3
+ * Semantic codebase search and RAG for crewswarm agents
4
+ */
5
+
6
+ import fs from "node:fs";
7
+ import path from "node:path";
8
+ import os from "node:os";
9
+
10
+ const GREPTILE_API_BASE = "https://api.greptile.com/v2";
11
+
12
+ /**
13
+ * Get Greptile API key from config or environment
14
+ */
15
+ function getApiKey() {
16
+ // Try environment first
17
+ if (process.env.GREPTILE_API_KEY) {
18
+ return process.env.GREPTILE_API_KEY;
19
+ }
20
+
21
+ // Try crewswarm.json
22
+ try {
23
+ const cfgPath = path.join(os.homedir(), ".crewswarm/crewswarm.json");
24
+ const cfg = JSON.parse(fs.readFileSync(cfgPath, "utf8"));
25
+ return cfg.providers?.greptile?.apiKey || null;
26
+ } catch {
27
+ return null;
28
+ }
29
+ }
30
+
31
+ /**
32
+ * Index a GitHub repository
33
+ * @param {string} repository - Format: "owner/repo" (e.g. "vercel/next.js")
34
+ * @param {string} branch - Branch name (e.g. "main", "master", "canary")
35
+ * @param {string} remote - Remote type (default: "github")
36
+ * @returns {Promise<{message: string, statusEndpoint: string, repoData: object}>}
37
+ */
38
+ export async function indexRepository(repository, branch = "main", remote = "github") {
39
+ const apiKey = getApiKey();
40
+ if (!apiKey) {
41
+ throw new Error("Greptile API key not found. Set GREPTILE_API_KEY or add to ~/.crewswarm/crewswarm.json");
42
+ }
43
+
44
+ const response = await fetch(`${GREPTILE_API_BASE}/repositories`, {
45
+ method: "POST",
46
+ headers: {
47
+ "Authorization": `Bearer ${apiKey}`,
48
+ "Content-Type": "application/json",
49
+ },
50
+ body: JSON.stringify({ remote, repository, branch }),
51
+ });
52
+
53
+ if (!response.ok) {
54
+ const error = await response.text();
55
+ throw new Error(`Greptile index failed (${response.status}): ${error}`);
56
+ }
57
+
58
+ return await response.json();
59
+ }
60
+
61
+ /**
62
+ * Get repository indexing status
63
+ * @param {string} repository - Format: "owner/repo"
64
+ * @param {string} branch - Branch name
65
+ * @param {string} remote - Remote type (default: "github")
66
+ * @returns {Promise<{status: string, filesProcessed: number, numFiles: number}>}
67
+ */
68
+ export async function getRepositoryStatus(repository, branch = "main", remote = "github") {
69
+ const apiKey = getApiKey();
70
+ if (!apiKey) {
71
+ throw new Error("Greptile API key not found");
72
+ }
73
+
74
+ // Format: github:branch:owner%2Frepo
75
+ const repoId = `${remote}:${branch}:${repository.replace("/", "%2F")}`;
76
+
77
+ const response = await fetch(`${GREPTILE_API_BASE}/repositories/${repoId}`, {
78
+ method: "GET",
79
+ headers: {
80
+ "Authorization": `Bearer ${apiKey}`,
81
+ },
82
+ });
83
+
84
+ if (!response.ok) {
85
+ const error = await response.text();
86
+ throw new Error(`Greptile status check failed (${response.status}): ${error}`);
87
+ }
88
+
89
+ return await response.json();
90
+ }
91
+
92
+ /**
93
+ * Query repositories using natural language
94
+ * @param {string} query - Natural language question
95
+ * @param {Array<{remote: string, repository: string, branch: string}>} repositories
96
+ * @param {string} sessionId - Optional session ID for conversation history
97
+ * @returns {Promise<{message: string, sources: Array}>}
98
+ */
99
+ export async function queryRepositories(query, repositories, sessionId = null) {
100
+ const apiKey = getApiKey();
101
+ if (!apiKey) {
102
+ throw new Error("Greptile API key not found");
103
+ }
104
+
105
+ const payload = {
106
+ messages: [{ id: "msg-1", content: query, role: "user" }],
107
+ repositories,
108
+ stream: false,
109
+ };
110
+
111
+ if (sessionId) payload.sessionId = sessionId;
112
+
113
+ const response = await fetch(`${GREPTILE_API_BASE}/repositories/query`, {
114
+ method: "POST",
115
+ headers: {
116
+ "Authorization": `Bearer ${apiKey}`,
117
+ "Content-Type": "application/json",
118
+ "X-Github-Token": process.env.GITHUB_TOKEN || "",
119
+ },
120
+ body: JSON.stringify(payload),
121
+ });
122
+
123
+ if (!response.ok) {
124
+ const error = await response.text();
125
+ throw new Error(`Greptile query failed (${response.status}): ${error}`);
126
+ }
127
+
128
+ return await response.json();
129
+ }
130
+
131
+ /**
132
+ * Helper: Index crewswarm repository
133
+ */
134
+ export async function indexcrewswarm() {
135
+ return await indexRepository("crewswarm/crewswarm", "main");
136
+ }
137
+
138
+ /**
139
+ * Helper: Search crewswarm codebase
140
+ */
141
+ export async function searchcrewswarm(query) {
142
+ return await queryRepositories(query, [
143
+ { remote: "github", repository: "crewswarm/crewswarm", branch: "main" }
144
+ ]);
145
+ }
146
+
147
+ // Alias for backwards compatibility
148
+ export const searchRepositories = queryRepositories;