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.
- package/.env.example +155 -0
- package/LICENSE +21 -0
- package/README.md +316 -0
- package/apps/dashboard/dist/assets/chat-core-BwSoInmZ.js +1 -0
- package/apps/dashboard/dist/assets/chat-core-BwSoInmZ.js.br +0 -0
- package/apps/dashboard/dist/assets/cli-process-COMRNPqr.js +1 -0
- package/apps/dashboard/dist/assets/cli-process-COMRNPqr.js.br +0 -0
- package/apps/dashboard/dist/assets/components-CSUb80ze.js +1 -0
- package/apps/dashboard/dist/assets/components-CSUb80ze.js.br +0 -0
- package/apps/dashboard/dist/assets/core-utils-CAVnDoe1.js +1 -0
- package/apps/dashboard/dist/assets/core-utils-CAVnDoe1.js.br +0 -0
- package/apps/dashboard/dist/assets/index-CF0aJRtC.css +1 -0
- package/apps/dashboard/dist/assets/index-CF0aJRtC.css.br +0 -0
- package/apps/dashboard/dist/assets/index-Px49zu76.js +2 -0
- package/apps/dashboard/dist/assets/index-Px49zu76.js.br +0 -0
- package/apps/dashboard/dist/assets/orchestration-Ca2DLWN-.js +1 -0
- package/apps/dashboard/dist/assets/orchestration-Ca2DLWN-.js.br +0 -0
- package/apps/dashboard/dist/assets/setup-wizard-i3eEixlo.js +1 -0
- package/apps/dashboard/dist/assets/setup-wizard-i3eEixlo.js.br +0 -0
- package/apps/dashboard/dist/assets/tab-agents-tab-BThdsdJY.js +1 -0
- package/apps/dashboard/dist/assets/tab-agents-tab-BThdsdJY.js.br +0 -0
- package/apps/dashboard/dist/assets/tab-benchmarks-tab-DfCuAClu.js +1 -0
- package/apps/dashboard/dist/assets/tab-comms-tab-eHpOSBhG.js +1 -0
- package/apps/dashboard/dist/assets/tab-comms-tab-eHpOSBhG.js.br +0 -0
- package/apps/dashboard/dist/assets/tab-contacts-tab-yEegNyO4.js +1 -0
- package/apps/dashboard/dist/assets/tab-contacts-tab-yEegNyO4.js.br +0 -0
- package/apps/dashboard/dist/assets/tab-engines-tab-C3DYxTwy.js +1 -0
- package/apps/dashboard/dist/assets/tab-engines-tab-C3DYxTwy.js.br +0 -0
- package/apps/dashboard/dist/assets/tab-memory-tab-C59BYFQD.js +1 -0
- package/apps/dashboard/dist/assets/tab-memory-tab-C59BYFQD.js.br +0 -0
- package/apps/dashboard/dist/assets/tab-models-tab-9Ur7pXWA.js +1 -0
- package/apps/dashboard/dist/assets/tab-models-tab-9Ur7pXWA.js.br +0 -0
- package/apps/dashboard/dist/assets/tab-pm-loop-tab-D7mnDelU.js +1 -0
- package/apps/dashboard/dist/assets/tab-pm-loop-tab-D7mnDelU.js.br +0 -0
- package/apps/dashboard/dist/assets/tab-projects-tab-C6h2Mv1K.js +1 -0
- package/apps/dashboard/dist/assets/tab-projects-tab-C6h2Mv1K.js.br +0 -0
- package/apps/dashboard/dist/assets/tab-prompts-tab-C0wZvWK3.js +1 -0
- package/apps/dashboard/dist/assets/tab-prompts-tab-C0wZvWK3.js.br +0 -0
- package/apps/dashboard/dist/assets/tab-services-tab-DBj_w3bc.js +1 -0
- package/apps/dashboard/dist/assets/tab-services-tab-DBj_w3bc.js.br +0 -0
- package/apps/dashboard/dist/assets/tab-settings-tab-ezeqAjZk.js +1 -0
- package/apps/dashboard/dist/assets/tab-settings-tab-ezeqAjZk.js.br +0 -0
- package/apps/dashboard/dist/assets/tab-skills-tab-BYdU2whk.js +1 -0
- package/apps/dashboard/dist/assets/tab-skills-tab-BYdU2whk.js.br +0 -0
- package/apps/dashboard/dist/assets/tab-spending-tab-Bg6w9t_p.js +1 -0
- package/apps/dashboard/dist/assets/tab-spending-tab-Bg6w9t_p.js.br +0 -0
- package/apps/dashboard/dist/assets/tab-swarm-chat-tab-BBV9HB2X.js +1 -0
- package/apps/dashboard/dist/assets/tab-swarm-chat-tab-BBV9HB2X.js.br +0 -0
- package/apps/dashboard/dist/assets/tab-swarm-tab-ChqLlEVs.js +1 -0
- package/apps/dashboard/dist/assets/tab-swarm-tab-ChqLlEVs.js.br +0 -0
- package/apps/dashboard/dist/assets/tab-usage-tab-B2UWXenJ.js +1 -0
- package/apps/dashboard/dist/assets/tab-usage-tab-B2UWXenJ.js.br +0 -0
- package/apps/dashboard/dist/assets/tab-waves-tab-SaJDkb4x.js +1 -0
- package/apps/dashboard/dist/assets/tab-waves-tab-SaJDkb4x.js.br +0 -0
- package/apps/dashboard/dist/assets/tab-workflows-tab-6QSXLJ0i.js +1 -0
- package/apps/dashboard/dist/assets/tab-workflows-tab-6QSXLJ0i.js.br +0 -0
- package/apps/dashboard/dist/favicon.png +0 -0
- package/apps/dashboard/dist/index.html +6466 -0
- package/apps/dashboard/dist/index.html.br +0 -0
- package/apps/dashboard/dist/index.html.gz +0 -0
- package/apps/dashboard/dist/signup.html +446 -0
- package/apps/dashboard/index.html +6442 -0
- package/apps/dashboard/package.json +15 -0
- package/apps/dashboard/src/app.js +2823 -0
- package/apps/dashboard/src/app.js.br +0 -0
- package/apps/dashboard/src/app.js.gz +0 -0
- package/apps/dashboard/src/chat/chat-actions.js +1847 -0
- package/apps/dashboard/src/chat/chat-actions.js.br +0 -0
- package/apps/dashboard/src/chat/unified-messages.js +327 -0
- package/apps/dashboard/src/chat/unified-messages.js.br +0 -0
- package/apps/dashboard/src/cli-process.js +208 -0
- package/apps/dashboard/src/cli-process.js.br +0 -0
- package/apps/dashboard/src/cli-process.js.gz +0 -0
- package/apps/dashboard/src/components/active-tasks-panel.js +175 -0
- package/apps/dashboard/src/components/active-tasks-panel.js.br +0 -0
- package/apps/dashboard/src/core/api.js +18 -0
- package/apps/dashboard/src/core/api.js.br +0 -0
- package/apps/dashboard/src/core/dom.js +220 -0
- package/apps/dashboard/src/core/dom.js.br +0 -0
- package/apps/dashboard/src/core/state.js +91 -0
- package/apps/dashboard/src/core/state.js.br +0 -0
- package/apps/dashboard/src/core/task-manager.js +134 -0
- package/apps/dashboard/src/core/task-manager.js.br +0 -0
- package/apps/dashboard/src/orchestration-status.js +127 -0
- package/apps/dashboard/src/orchestration-status.js.br +0 -0
- package/apps/dashboard/src/setup-wizard.js +555 -0
- package/apps/dashboard/src/setup-wizard.js.br +0 -0
- package/apps/dashboard/src/styles.css +2085 -0
- package/apps/dashboard/src/styles.css.br +0 -0
- package/apps/dashboard/src/styles.css.gz +0 -0
- package/apps/dashboard/src/tabs/agents-tab.js +2237 -0
- package/apps/dashboard/src/tabs/agents-tab.js.br +0 -0
- package/apps/dashboard/src/tabs/benchmarks-tab.js +229 -0
- package/apps/dashboard/src/tabs/benchmarks-tab.js.br +0 -0
- package/apps/dashboard/src/tabs/comms-tab.js +955 -0
- package/apps/dashboard/src/tabs/comms-tab.js.br +0 -0
- package/apps/dashboard/src/tabs/contacts-tab.js +654 -0
- package/apps/dashboard/src/tabs/contacts-tab.js.br +0 -0
- package/apps/dashboard/src/tabs/engines-tab.js +175 -0
- package/apps/dashboard/src/tabs/engines-tab.js.br +0 -0
- package/apps/dashboard/src/tabs/memory-tab.js +182 -0
- package/apps/dashboard/src/tabs/memory-tab.js.br +0 -0
- package/apps/dashboard/src/tabs/models-tab.js +441 -0
- package/apps/dashboard/src/tabs/models-tab.js.br +0 -0
- package/apps/dashboard/src/tabs/pm-loop-tab.js +185 -0
- package/apps/dashboard/src/tabs/pm-loop-tab.js.br +0 -0
- package/apps/dashboard/src/tabs/projects-tab.js +663 -0
- package/apps/dashboard/src/tabs/projects-tab.js.br +0 -0
- package/apps/dashboard/src/tabs/projects-tab.js.gz +0 -0
- package/apps/dashboard/src/tabs/prompts-tab.js +160 -0
- package/apps/dashboard/src/tabs/prompts-tab.js.br +0 -0
- package/apps/dashboard/src/tabs/services-tab.js +202 -0
- package/apps/dashboard/src/tabs/services-tab.js.br +0 -0
- package/apps/dashboard/src/tabs/settings-tab.js +803 -0
- package/apps/dashboard/src/tabs/settings-tab.js.br +0 -0
- package/apps/dashboard/src/tabs/skills-tab.js +284 -0
- package/apps/dashboard/src/tabs/skills-tab.js.br +0 -0
- package/apps/dashboard/src/tabs/spending-tab.js +173 -0
- package/apps/dashboard/src/tabs/spending-tab.js.br +0 -0
- package/apps/dashboard/src/tabs/swarm-chat-tab.js +660 -0
- package/apps/dashboard/src/tabs/swarm-chat-tab.js.br +0 -0
- package/apps/dashboard/src/tabs/swarm-tab.js +538 -0
- package/apps/dashboard/src/tabs/swarm-tab.js.br +0 -0
- package/apps/dashboard/src/tabs/usage-tab.js +390 -0
- package/apps/dashboard/src/tabs/usage-tab.js.br +0 -0
- package/apps/dashboard/src/tabs/waves-tab.js +238 -0
- package/apps/dashboard/src/tabs/waves-tab.js.br +0 -0
- package/apps/dashboard/src/tabs/workflows-tab.js +747 -0
- package/apps/dashboard/src/tabs/workflows-tab.js.br +0 -0
- package/apps/vibe/.crew/agent-memory/pipeline.json +249 -0
- package/apps/vibe/.crew/cost.json +17 -0
- package/apps/vibe/.crew/json-parse-metrics.jsonl +22 -0
- package/apps/vibe/.crew/pipeline-metrics.jsonl +22 -0
- package/apps/vibe/.crew/pipeline-runs/pipeline-0f90c392-2425-4ae5-850c-bd9d17b1d690.jsonl +5 -0
- package/apps/vibe/.crew/pipeline-runs/pipeline-1c269dd9-a63f-4fba-af81-5cf08048ef06.jsonl +5 -0
- package/apps/vibe/.crew/pipeline-runs/pipeline-288a7765-da24-4a22-89bc-1f3cc9b0562c.jsonl +1 -0
- package/apps/vibe/.crew/pipeline-runs/pipeline-2c78fd22-a657-4bd1-bc49-0679fb384409.jsonl +5 -0
- package/apps/vibe/.crew/pipeline-runs/pipeline-3e6fe08d-3264-404a-8df3-aab7efef10e7.jsonl +5 -0
- package/apps/vibe/.crew/pipeline-runs/pipeline-42eec610-57fe-4e09-9e7e-b315038495c2.jsonl +5 -0
- package/apps/vibe/.crew/pipeline-runs/pipeline-4438eb4c-ae13-42b1-90e2-b043d8983be8.jsonl +5 -0
- package/apps/vibe/.crew/pipeline-runs/pipeline-4740a9f5-86e7-44b6-a394-de433e291727.jsonl +5 -0
- package/apps/vibe/.crew/pipeline-runs/pipeline-49e1da6a-957e-48fd-9220-415019e4f8e2.jsonl +5 -0
- package/apps/vibe/.crew/pipeline-runs/pipeline-4c9251db-be68-427b-a3fc-a264f2b5778d.jsonl +5 -0
- package/apps/vibe/.crew/pipeline-runs/pipeline-65e29a57-664d-4196-8109-017e364f182e.jsonl +5 -0
- package/apps/vibe/.crew/pipeline-runs/pipeline-6aa04bc5-9593-4b1f-b58d-3bf2978cb602.jsonl +5 -0
- package/apps/vibe/.crew/pipeline-runs/pipeline-6e1cba53-9b70-457e-99e0-59199149dd21.jsonl +5 -0
- package/apps/vibe/.crew/pipeline-runs/pipeline-749f41cc-4dac-4204-be64-873a6080a0d2.jsonl +5 -0
- package/apps/vibe/.crew/pipeline-runs/pipeline-74d68121-e181-4864-bd9a-c3211341dfaf.jsonl +5 -0
- package/apps/vibe/.crew/pipeline-runs/pipeline-8509bc24-142d-4e07-b44a-a50bf99d1103.jsonl +5 -0
- package/apps/vibe/.crew/pipeline-runs/pipeline-960339c6-07ca-43ce-9900-f6e1702b39b9.jsonl +5 -0
- package/apps/vibe/.crew/pipeline-runs/pipeline-9c6480a9-7031-4146-b241-825b9a2d1de1.jsonl +5 -0
- package/apps/vibe/.crew/pipeline-runs/pipeline-9fd42426-8492-4157-9d5f-e1537c060489.jsonl +2 -0
- package/apps/vibe/.crew/pipeline-runs/pipeline-ad6d40a3-2f5e-46a9-a345-47caaccc51aa.jsonl +5 -0
- package/apps/vibe/.crew/pipeline-runs/pipeline-bc606133-8d5b-4535-8d85-f1a29cdaa981.jsonl +5 -0
- package/apps/vibe/.crew/pipeline-runs/pipeline-c1a13ccd-634a-4d01-a4a7-1177b8a752ff.jsonl +5 -0
- package/apps/vibe/.crew/pipeline-runs/pipeline-c7d27b42-249e-4bd4-8f26-6aa998110b8a.jsonl +5 -0
- package/apps/vibe/.crew/pipeline-runs/pipeline-cca2e9b9-4a34-4d25-a311-5c793fa7e91e.jsonl +5 -0
- package/apps/vibe/.crew/sandbox.json +7 -0
- package/apps/vibe/.crew/session.json +285 -0
- package/apps/vibe/.crew/training-data.jsonl +0 -0
- package/apps/vibe/.github/workflows/studio-quality.yml +37 -0
- package/apps/vibe/.studio-data/project-messages/chuck-norris.jsonl +12 -0
- package/apps/vibe/.studio-data/project-messages/general.jsonl +54 -0
- package/apps/vibe/.studio-data/project-messages/studio-local.jsonl +10 -0
- package/apps/vibe/ARCHITECTURE.md +3393 -0
- package/apps/vibe/QUICK-REFERENCE.md +211 -0
- package/apps/vibe/README.md +76 -0
- package/apps/vibe/ROADMAP.md +41 -0
- package/apps/vibe/STUDIO-SETUP-COMPLETE.md +35 -0
- package/apps/vibe/VISUAL-GUIDE.md +378 -0
- package/apps/vibe/capture-demo.mjs +160 -0
- package/apps/vibe/capture-vibe-assets.mjs +71 -0
- package/apps/vibe/capture-vibe-video.mjs +260 -0
- package/apps/vibe/check-buttons.js +41 -0
- package/apps/vibe/diagnose.html +106 -0
- package/apps/vibe/fix-buttons.js +103 -0
- package/apps/vibe/index.html +3401 -0
- package/apps/vibe/package-lock.json +920 -0
- package/apps/vibe/package.json +31 -0
- package/apps/vibe/public/favicon.png +0 -0
- package/apps/vibe/scripts/studio-pty-host.py +117 -0
- package/apps/vibe/server.mjs +1835 -0
- package/apps/vibe/src/main.js +2846 -0
- package/apps/vibe/src/register-all-languages.js +98 -0
- package/apps/vibe/start-studio.sh +11 -0
- package/apps/vibe/test/accessibility-tests.js +77 -0
- package/apps/vibe/test/browser-performance-audit.mjs +205 -0
- package/apps/vibe/test/performance-tests.js +120 -0
- package/apps/vibe/test/security-tests.js +213 -0
- package/apps/vibe/tests/e2e.local.mjs +54 -0
- package/apps/vibe/tests/server.smoke.mjs +106 -0
- package/apps/vibe/update_website.mjs +74 -0
- package/apps/vibe/vite.config.js +19 -0
- package/apps/vibe/watch-server.mjs +108 -0
- package/contrib/openclaw-plugin/README.md +199 -0
- package/contrib/openclaw-plugin/index.ts +306 -0
- package/contrib/openclaw-plugin/openclaw.plugin.json +41 -0
- package/contrib/openclaw-plugin/package.json +27 -0
- package/contrib/openclaw-plugin/skills/crewswarm/SKILL.md +88 -0
- package/crew-lead.mjs +649 -0
- package/engines/claude-code.json +36 -0
- package/engines/codex.json +37 -0
- package/engines/crew-cli.json +42 -0
- package/engines/cursor.json +40 -0
- package/engines/docker-sandbox.json +38 -0
- package/engines/gemini-cli.json +75 -0
- package/engines/opencode.json +31 -0
- package/gateway-bridge.mjs +1575 -0
- package/install.sh +738 -0
- package/lib/agent-registry.mjs +232 -0
- package/lib/agents/daemon.mjs +121 -0
- package/lib/agents/dispatch.mjs +225 -0
- package/lib/agents/permissions.mjs +90 -0
- package/lib/agents/platform-formatting.mjs +102 -0
- package/lib/agents/registry.mjs +81 -0
- package/lib/agents/tool-instructions.mjs +257 -0
- package/lib/agents/validation.mjs +75 -0
- package/lib/approval/policy-manager.mjs +221 -0
- package/lib/autoharness/index.mjs +391 -0
- package/lib/bridges/cli-executor.mjs +332 -0
- package/lib/bridges/gateway-ws.mjs +345 -0
- package/lib/bridges/integration.mjs +229 -0
- package/lib/bridges/rag-helper.mjs +90 -0
- package/lib/browser/opencode-passthrough-filter.js +44 -0
- package/lib/browser/passthrough-stderr.js +109 -0
- package/lib/chat/autonomous-mentions.mjs +373 -0
- package/lib/chat/history.mjs +82 -0
- package/lib/chat/mention-routing-intent.mjs +136 -0
- package/lib/chat/participants.mjs +95 -0
- package/lib/chat/project-messages-rag.mjs +265 -0
- package/lib/chat/project-messages.mjs +479 -0
- package/lib/chat/shared-chat-prompt-overlay.mjs +52 -0
- package/lib/chat/thread-binding.mjs +34 -0
- package/lib/chat/unified-history.mjs +223 -0
- package/lib/chat/unified-wrapper.mjs +41 -0
- package/lib/cli-process-tracker.mjs +228 -0
- package/lib/collections/index.mjs +433 -0
- package/lib/contacts/identity-linker.mjs +248 -0
- package/lib/contacts/index.mjs +341 -0
- package/lib/crew-judge/PROMPT.md +93 -0
- package/lib/crew-judge/judge.mjs +260 -0
- package/lib/crew-lead/agent-manager.mjs +125 -0
- package/lib/crew-lead/background.mjs +270 -0
- package/lib/crew-lead/brain.mjs +110 -0
- package/lib/crew-lead/chat-handler.mjs +2603 -0
- package/lib/crew-lead/chat-handler.mjs.bak +1274 -0
- package/lib/crew-lead/classifier.mjs +83 -0
- package/lib/crew-lead/http-server.mjs +4824 -0
- package/lib/crew-lead/intent.mjs +102 -0
- package/lib/crew-lead/interval-manager.mjs +41 -0
- package/lib/crew-lead/llm-caller.mjs +544 -0
- package/lib/crew-lead/prompts.mjs +392 -0
- package/lib/crew-lead/retry-manager.mjs +118 -0
- package/lib/crew-lead/tools.mjs +318 -0
- package/lib/crew-lead/wave-dispatcher.mjs +798 -0
- package/lib/crew-lead/waves-config.json +73 -0
- package/lib/crew-lead/waves-loader.mjs +110 -0
- package/lib/crew-lead/ws-router.mjs +428 -0
- package/lib/dispatch/parsers.mjs +299 -0
- package/lib/domain-planning/detector.mjs +196 -0
- package/lib/domain-planning/prompts/crew-pm-cli.md +96 -0
- package/lib/domain-planning/prompts/crew-pm-core.md +122 -0
- package/lib/domain-planning/prompts/crew-pm-frontend.md +111 -0
- package/lib/engines/crew-cli-sandbox.mjs +422 -0
- package/lib/engines/crew-cli.mjs +155 -0
- package/lib/engines/cursor-launcher.mjs +110 -0
- package/lib/engines/engine-registry.mjs +253 -0
- package/lib/engines/llm-direct.mjs +184 -0
- package/lib/engines/opencode.mjs +256 -0
- package/lib/engines/ouroboros.mjs +114 -0
- package/lib/engines/rt-envelope.mjs +1643 -0
- package/lib/engines/rt-envelope.mjs.backup-current +870 -0
- package/lib/engines/runners.mjs +1367 -0
- package/lib/gemini-cli-passthrough-noise.mjs +37 -0
- package/lib/integrations/code-search.mjs +259 -0
- package/lib/integrations/greptile.mjs +148 -0
- package/lib/integrations/multimodal.mjs +313 -0
- package/lib/integrations/telegram-streaming.mjs +153 -0
- package/lib/integrations/tts.mjs +312 -0
- package/lib/integrations/twitter-links.mjs +294 -0
- package/lib/memory/shared-adapter.mjs +296 -0
- package/lib/pipeline/manager.mjs +539 -0
- package/lib/preferences/extractor.mjs +347 -0
- package/lib/project-dir.mjs +20 -0
- package/lib/runtime/config.mjs +388 -0
- package/lib/runtime/dlq.mjs +170 -0
- package/lib/runtime/log-rotation.mjs +82 -0
- package/lib/runtime/logger.mjs +58 -0
- package/lib/runtime/memory.mjs +421 -0
- package/lib/runtime/paths.mjs +76 -0
- package/lib/runtime/project-dir.mjs +127 -0
- package/lib/runtime/spending.mjs +204 -0
- package/lib/runtime/startup-guard.mjs +291 -0
- package/lib/runtime/task-lease.mjs +234 -0
- package/lib/runtime/telemetry-schema.mjs +208 -0
- package/lib/runtime/telemetry.mjs +101 -0
- package/lib/runtime/utils.mjs +64 -0
- package/lib/skills/index.mjs +265 -0
- package/lib/tools/browser.mjs +135 -0
- package/lib/tools/executor.mjs +913 -0
- package/lib/types.d.ts +57 -0
- package/package.json +106 -0
- package/pm-loop.mjs +1626 -0
- package/prompts/coder-back.md +27 -0
- package/prompts/coder-front.md +27 -0
- package/prompts/coder.md +28 -0
- package/prompts/copywriter.md +17 -0
- package/prompts/fixer.md +39 -0
- package/prompts/frontend.md +23 -0
- package/prompts/github.md +24 -0
- package/prompts/main.md +39 -0
- package/prompts/pm-cli.md +95 -0
- package/prompts/pm-core.md +121 -0
- package/prompts/pm-frontend.md +110 -0
- package/prompts/pm.md +234 -0
- package/prompts/qa.md +44 -0
- package/prompts/security.md +19 -0
- package/scripts/build-crew-chat.sh +28 -0
- package/scripts/build-llms-full.mjs +52 -0
- package/scripts/chatmock-login.sh +16 -0
- package/scripts/chatmock-serve.sh +16 -0
- package/scripts/check-dashboard.mjs +88 -0
- package/scripts/crew-scribe.mjs +326 -0
- package/scripts/dashboard-helpers.mjs +391 -0
- package/scripts/dashboard-validation.mjs +198 -0
- package/scripts/dashboard.mjs +9717 -0
- package/scripts/dlq-replay.mjs +61 -0
- package/scripts/doctor.mjs +196 -0
- package/scripts/file-lock.mjs +186 -0
- package/scripts/fresh-machine-smoke.sh +323 -0
- package/scripts/generate-changelog.mjs +227 -0
- package/scripts/generate-openapi.mjs +334 -0
- package/scripts/health-check.mjs +229 -0
- package/scripts/install-docker.sh +213 -0
- package/scripts/mcp-server.mjs +1625 -0
- package/scripts/opencrew-rt-daemon.mjs +568 -0
- package/scripts/openswitchctl +646 -0
- package/scripts/refactor-configs.mjs +39 -0
- package/scripts/release-check.sh +46 -0
- package/scripts/resolve-node-bin.sh +25 -0
- package/scripts/restart-all-from-repo.sh +329 -0
- package/scripts/restart-crew-lead.sh +98 -0
- package/scripts/restart-dashboard.sh +104 -0
- package/scripts/restart-service.sh +274 -0
- package/scripts/run-accessibility-audit.mjs +356 -0
- package/scripts/run-integration-bounded.mjs +188 -0
- package/scripts/run-scheduled-pipeline.mjs +230 -0
- package/scripts/run.mjs +41 -0
- package/scripts/scan-skills.mjs +79 -0
- package/scripts/setup-firewall.sh +128 -0
- package/scripts/smoke-dispatch.mjs +149 -0
- package/scripts/smoke.sh +163 -0
- package/scripts/start-crew.mjs +328 -0
- package/scripts/start.mjs +146 -0
- package/scripts/swiftbar-restart-service.sh +19 -0
- package/scripts/sync-agents.mjs +152 -0
- package/scripts/sync-prompts.mjs +79 -0
- package/scripts/validate-config.mjs +337 -0
- package/scripts/wow.mjs +89 -0
- package/telegram-bridge.mjs +2421 -0
- package/unified-orchestrator.mjs +519 -0
- package/whatsapp-bridge.mjs +1481 -0
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { chromium } from "playwright";
|
|
3
|
+
import { mkdirSync, rmSync } from "node:fs";
|
|
4
|
+
import { join, dirname } from "node:path";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
import http from "node:http";
|
|
7
|
+
|
|
8
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
9
|
+
const OUT = join(__dirname, "..", "..", "website", "vibe-assets");
|
|
10
|
+
const VIDEO_NAME = "vibe-demo.webm";
|
|
11
|
+
const OUTPUT_PATH = join(OUT, VIDEO_NAME);
|
|
12
|
+
|
|
13
|
+
const DASHBOARD_URL = process.env.CREWSWARM_DASHBOARD_URL || "http://127.0.0.1:4319";
|
|
14
|
+
const VIBE_URL = process.env.CREWSWARM_VIBE_URL || "http://127.0.0.1:3333";
|
|
15
|
+
|
|
16
|
+
const VIEWPORT = { width: 1440, height: 900 };
|
|
17
|
+
const SPLIT_SCENE_MS = 18_000;
|
|
18
|
+
const VIBE_SCENE_MS = 38_000;
|
|
19
|
+
const DASHBOARD_SCENE_MS = 34_000;
|
|
20
|
+
|
|
21
|
+
mkdirSync(OUT, { recursive: true });
|
|
22
|
+
|
|
23
|
+
function isUrlUp(url) {
|
|
24
|
+
return new Promise((resolve) => {
|
|
25
|
+
const req = http.get(url, (res) => {
|
|
26
|
+
res.resume();
|
|
27
|
+
resolve(Boolean(res.statusCode) && res.statusCode < 500);
|
|
28
|
+
});
|
|
29
|
+
req.on("error", () => resolve(false));
|
|
30
|
+
req.setTimeout(1500, () => {
|
|
31
|
+
req.destroy();
|
|
32
|
+
resolve(false);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
async function waitForUrl(url, label, timeoutMs = 15_000) {
|
|
38
|
+
const start = Date.now();
|
|
39
|
+
while (Date.now() - start < timeoutMs) {
|
|
40
|
+
if (await isUrlUp(url)) return true;
|
|
41
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
42
|
+
}
|
|
43
|
+
throw new Error(`${label} did not become ready at ${url}`);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function buildSplitSceneHtml() {
|
|
47
|
+
return `<!doctype html>
|
|
48
|
+
<html>
|
|
49
|
+
<head>
|
|
50
|
+
<meta charset="utf-8" />
|
|
51
|
+
<title>CrewSwarm Demo Scene</title>
|
|
52
|
+
<style>
|
|
53
|
+
:root {
|
|
54
|
+
color-scheme: dark;
|
|
55
|
+
--bg: #060a10;
|
|
56
|
+
--panel: #0c121b;
|
|
57
|
+
--text: #f4f7fb;
|
|
58
|
+
--muted: #9cb0c7;
|
|
59
|
+
--accent: #35d6c2;
|
|
60
|
+
--border: rgba(255, 255, 255, 0.08);
|
|
61
|
+
}
|
|
62
|
+
* { box-sizing: border-box; }
|
|
63
|
+
body {
|
|
64
|
+
margin: 0;
|
|
65
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
66
|
+
background:
|
|
67
|
+
radial-gradient(circle at 20% 0%, rgba(53, 214, 194, 0.14), transparent 32%),
|
|
68
|
+
radial-gradient(circle at 80% 10%, rgba(73, 124, 255, 0.14), transparent 28%),
|
|
69
|
+
var(--bg);
|
|
70
|
+
color: var(--text);
|
|
71
|
+
}
|
|
72
|
+
.wrap {
|
|
73
|
+
display: grid;
|
|
74
|
+
grid-template-rows: auto 1fr;
|
|
75
|
+
height: 100vh;
|
|
76
|
+
padding: 18px 18px 14px;
|
|
77
|
+
gap: 14px;
|
|
78
|
+
}
|
|
79
|
+
.header {
|
|
80
|
+
display: grid;
|
|
81
|
+
grid-template-columns: 1.15fr 1fr;
|
|
82
|
+
gap: 16px;
|
|
83
|
+
align-items: stretch;
|
|
84
|
+
}
|
|
85
|
+
.hero {
|
|
86
|
+
background: rgba(10, 16, 24, 0.82);
|
|
87
|
+
border: 1px solid var(--border);
|
|
88
|
+
border-radius: 18px;
|
|
89
|
+
padding: 20px 22px;
|
|
90
|
+
backdrop-filter: blur(10px);
|
|
91
|
+
}
|
|
92
|
+
.hero h1 {
|
|
93
|
+
margin: 0 0 8px;
|
|
94
|
+
font-size: 28px;
|
|
95
|
+
line-height: 1.1;
|
|
96
|
+
}
|
|
97
|
+
.hero p {
|
|
98
|
+
margin: 0;
|
|
99
|
+
color: var(--muted);
|
|
100
|
+
font-size: 15px;
|
|
101
|
+
line-height: 1.45;
|
|
102
|
+
}
|
|
103
|
+
.command {
|
|
104
|
+
background: rgba(7, 12, 18, 0.95);
|
|
105
|
+
border: 1px solid var(--border);
|
|
106
|
+
border-radius: 18px;
|
|
107
|
+
padding: 18px 20px;
|
|
108
|
+
display: flex;
|
|
109
|
+
flex-direction: column;
|
|
110
|
+
justify-content: center;
|
|
111
|
+
gap: 10px;
|
|
112
|
+
}
|
|
113
|
+
.command .eyebrow {
|
|
114
|
+
color: var(--accent);
|
|
115
|
+
font-size: 11px;
|
|
116
|
+
font-weight: 700;
|
|
117
|
+
letter-spacing: 0.16em;
|
|
118
|
+
text-transform: uppercase;
|
|
119
|
+
}
|
|
120
|
+
.command code {
|
|
121
|
+
display: block;
|
|
122
|
+
font-family: "SF Mono", "Fira Code", monospace;
|
|
123
|
+
font-size: 16px;
|
|
124
|
+
line-height: 1.4;
|
|
125
|
+
color: #ecfeff;
|
|
126
|
+
white-space: pre-wrap;
|
|
127
|
+
}
|
|
128
|
+
.panes {
|
|
129
|
+
display: grid;
|
|
130
|
+
grid-template-columns: 1fr 1fr;
|
|
131
|
+
gap: 14px;
|
|
132
|
+
min-height: 0;
|
|
133
|
+
}
|
|
134
|
+
.pane {
|
|
135
|
+
min-height: 0;
|
|
136
|
+
background: var(--panel);
|
|
137
|
+
border: 1px solid var(--border);
|
|
138
|
+
border-radius: 18px;
|
|
139
|
+
overflow: hidden;
|
|
140
|
+
display: grid;
|
|
141
|
+
grid-template-rows: auto 1fr;
|
|
142
|
+
}
|
|
143
|
+
.pane-bar {
|
|
144
|
+
display: flex;
|
|
145
|
+
align-items: center;
|
|
146
|
+
justify-content: space-between;
|
|
147
|
+
padding: 10px 14px;
|
|
148
|
+
font-size: 12px;
|
|
149
|
+
color: var(--muted);
|
|
150
|
+
background: rgba(255, 255, 255, 0.02);
|
|
151
|
+
border-bottom: 1px solid var(--border);
|
|
152
|
+
}
|
|
153
|
+
.pane-bar strong {
|
|
154
|
+
color: var(--text);
|
|
155
|
+
font-size: 13px;
|
|
156
|
+
}
|
|
157
|
+
iframe {
|
|
158
|
+
width: 100%;
|
|
159
|
+
height: 100%;
|
|
160
|
+
border: 0;
|
|
161
|
+
background: #0b1016;
|
|
162
|
+
}
|
|
163
|
+
</style>
|
|
164
|
+
</head>
|
|
165
|
+
<body>
|
|
166
|
+
<div class="wrap">
|
|
167
|
+
<div class="header">
|
|
168
|
+
<section class="hero">
|
|
169
|
+
<h1>CrewSwarm in one fast pass</h1>
|
|
170
|
+
<p>
|
|
171
|
+
Launch the stack, code in Vibe, and keep the runtime visible in the dashboard.
|
|
172
|
+
This cut is recorded from the live local surfaces, not mocked marketing panels.
|
|
173
|
+
</p>
|
|
174
|
+
</section>
|
|
175
|
+
<section class="command">
|
|
176
|
+
<div class="eyebrow">Install</div>
|
|
177
|
+
<code>bash <(curl -fsSL https://raw.githubusercontent.com/crewswarm/crewswarm/main/install.sh)</code>
|
|
178
|
+
</section>
|
|
179
|
+
</div>
|
|
180
|
+
<section class="panes">
|
|
181
|
+
<div class="pane">
|
|
182
|
+
<div class="pane-bar"><strong>Dashboard</strong><span>${DASHBOARD_URL}</span></div>
|
|
183
|
+
<iframe id="dash-frame" src="${DASHBOARD_URL}"></iframe>
|
|
184
|
+
</div>
|
|
185
|
+
<div class="pane">
|
|
186
|
+
<div class="pane-bar"><strong>Vibe</strong><span>${VIBE_URL}</span></div>
|
|
187
|
+
<iframe id="vibe-frame" src="${VIBE_URL}"></iframe>
|
|
188
|
+
</div>
|
|
189
|
+
</section>
|
|
190
|
+
</div>
|
|
191
|
+
</body>
|
|
192
|
+
</html>`;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
async function record() {
|
|
196
|
+
await waitForUrl(DASHBOARD_URL, "dashboard");
|
|
197
|
+
await waitForUrl(VIBE_URL, "vibe");
|
|
198
|
+
|
|
199
|
+
rmSync(OUTPUT_PATH, { force: true });
|
|
200
|
+
|
|
201
|
+
const browser = await chromium.launch({ headless: true });
|
|
202
|
+
const context = await browser.newContext({
|
|
203
|
+
recordVideo: {
|
|
204
|
+
dir: OUT,
|
|
205
|
+
size: VIEWPORT,
|
|
206
|
+
},
|
|
207
|
+
viewport: VIEWPORT,
|
|
208
|
+
colorScheme: "dark",
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
const page = await context.newPage();
|
|
212
|
+
|
|
213
|
+
try {
|
|
214
|
+
console.log("š¬ Scene 1/3: split dashboard + vibe");
|
|
215
|
+
await page.setContent(buildSplitSceneHtml(), { waitUntil: "domcontentloaded" });
|
|
216
|
+
await page.waitForTimeout(SPLIT_SCENE_MS);
|
|
217
|
+
|
|
218
|
+
console.log("š¬ Scene 2/3: Vibe");
|
|
219
|
+
await page.goto(VIBE_URL, { waitUntil: "networkidle", timeout: 30_000 });
|
|
220
|
+
await page.waitForTimeout(2_000);
|
|
221
|
+
await page.selectOption("#chat-mode-selector", "cli:codex").catch(() => {});
|
|
222
|
+
await page.waitForTimeout(1_000);
|
|
223
|
+
await page.click("#toggle-bottom-terminal").catch(() => {});
|
|
224
|
+
await page.waitForTimeout(3_000);
|
|
225
|
+
await page.click("#preview-diff-trigger").catch(() => {});
|
|
226
|
+
await page.waitForTimeout(5_000);
|
|
227
|
+
await page.click(".diff-preview-close").catch(() => {});
|
|
228
|
+
await page.waitForTimeout(1_000);
|
|
229
|
+
await page.fill("#chat-input", "Explain what this workspace is for in one short paragraph.").catch(() => {});
|
|
230
|
+
await page.keyboard.press("Enter").catch(() => {});
|
|
231
|
+
await page.waitForTimeout(VIBE_SCENE_MS - 12_000);
|
|
232
|
+
|
|
233
|
+
console.log("š¬ Scene 3/3: dashboard");
|
|
234
|
+
await page.goto(DASHBOARD_URL, { waitUntil: "networkidle", timeout: 30_000 });
|
|
235
|
+
await page.waitForTimeout(2_000);
|
|
236
|
+
await page.click("#navServices").catch(() => {});
|
|
237
|
+
await page.waitForTimeout(10_000);
|
|
238
|
+
await page.click("#navAgents").catch(() => {});
|
|
239
|
+
await page.waitForTimeout(10_000);
|
|
240
|
+
await page.click("#navBuild").catch(() => {});
|
|
241
|
+
await page.waitForTimeout(DASHBOARD_SCENE_MS - 22_000);
|
|
242
|
+
} finally {
|
|
243
|
+
const video = page.video();
|
|
244
|
+
if (video) {
|
|
245
|
+
await video.saveAs(OUTPUT_PATH);
|
|
246
|
+
}
|
|
247
|
+
await page.close();
|
|
248
|
+
await context.close();
|
|
249
|
+
await browser.close();
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
record()
|
|
254
|
+
.then(() => {
|
|
255
|
+
console.log(`⨠Saved 90-second demo to ${OUTPUT_PATH}`);
|
|
256
|
+
})
|
|
257
|
+
.catch((error) => {
|
|
258
|
+
console.error("ā Demo capture failed:", error.message);
|
|
259
|
+
process.exit(1);
|
|
260
|
+
});
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Paste this in console RIGHT NOW (while file is open)
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
console.log('=== BUTTON STATE DEBUG ===\n');
|
|
6
|
+
|
|
7
|
+
// Check editor state
|
|
8
|
+
console.log('1. Editor state:');
|
|
9
|
+
console.log(' window.editor:', window.editor ? 'EXISTS' : 'NULL');
|
|
10
|
+
console.log(' activeTab:', window.activeTab || 'NULL');
|
|
11
|
+
console.log(' monaco:', typeof window.monaco !== 'undefined' ? 'LOADED' : 'NOT LOADED');
|
|
12
|
+
|
|
13
|
+
// Check each button
|
|
14
|
+
console.log('\n2. Button states:');
|
|
15
|
+
const buttons = document.querySelectorAll('.editor-toolbar-btn');
|
|
16
|
+
buttons.forEach(btn => {
|
|
17
|
+
console.log(` ${btn.id}:`);
|
|
18
|
+
console.log(` - disabled: ${btn.disabled}`);
|
|
19
|
+
console.log(` - title: "${btn.title}"`);
|
|
20
|
+
console.log(` - visible: ${btn.offsetWidth > 0}`);
|
|
21
|
+
console.log(` - computed opacity: ${window.getComputedStyle(btn).opacity}`);
|
|
22
|
+
console.log(` - computed cursor: ${window.getComputedStyle(btn).cursor}`);
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
// Check if updateEditorToolbarState exists
|
|
26
|
+
console.log('\n3. Functions available:');
|
|
27
|
+
console.log(' updateEditorToolbarState:', typeof window.updateEditorToolbarState);
|
|
28
|
+
|
|
29
|
+
// FORCE UPDATE
|
|
30
|
+
console.log('\n4. Forcing button state update...');
|
|
31
|
+
if (window.editor && window.activeTab) {
|
|
32
|
+
// Manually enable buttons (this is what updateEditorToolbarState should do)
|
|
33
|
+
buttons.forEach(btn => {
|
|
34
|
+
btn.disabled = false;
|
|
35
|
+
btn.title = 'Enabled manually';
|
|
36
|
+
});
|
|
37
|
+
console.log(' ā
All buttons force-enabled');
|
|
38
|
+
console.log(' šÆ Now try hovering - should see blue glow');
|
|
39
|
+
} else {
|
|
40
|
+
console.log(' ā Cannot enable - editor or activeTab missing');
|
|
41
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title>Vibe Diagnostic</title>
|
|
5
|
+
<style>
|
|
6
|
+
body {
|
|
7
|
+
font-family: monospace;
|
|
8
|
+
padding: 20px;
|
|
9
|
+
background: #0a0e14;
|
|
10
|
+
color: #f0f6ff;
|
|
11
|
+
}
|
|
12
|
+
.test { margin: 10px 0; padding: 10px; border-left: 3px solid #38bdf8; }
|
|
13
|
+
.pass { border-color: #34d399; }
|
|
14
|
+
.fail { border-color: #f87171; }
|
|
15
|
+
pre { background: #0d1420; padding: 10px; overflow: auto; }
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
<body>
|
|
19
|
+
<h1>š Vibe Diagnostic</h1>
|
|
20
|
+
<div id="results"></div>
|
|
21
|
+
|
|
22
|
+
<script>
|
|
23
|
+
const results = document.getElementById('results');
|
|
24
|
+
|
|
25
|
+
function test(name, fn) {
|
|
26
|
+
const div = document.createElement('div');
|
|
27
|
+
div.className = 'test';
|
|
28
|
+
try {
|
|
29
|
+
const result = fn();
|
|
30
|
+
div.classList.add('pass');
|
|
31
|
+
div.innerHTML = `<strong>ā
${name}</strong><pre>${JSON.stringify(result, null, 2)}</pre>`;
|
|
32
|
+
} catch (err) {
|
|
33
|
+
div.classList.add('fail');
|
|
34
|
+
div.innerHTML = `<strong>ā ${name}</strong><pre>${err.message}</pre>`;
|
|
35
|
+
}
|
|
36
|
+
results.appendChild(div);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Wait for Vibe to load
|
|
40
|
+
setTimeout(() => {
|
|
41
|
+
test('Vibe URL is accessible', () => {
|
|
42
|
+
return { url: window.location.href };
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
test('Monaco loaded', () => {
|
|
46
|
+
if (typeof window.monaco === 'undefined') {
|
|
47
|
+
throw new Error('window.monaco is undefined - Monaco did not load');
|
|
48
|
+
}
|
|
49
|
+
return { monaco: 'loaded' };
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
test('Editor instance', () => {
|
|
53
|
+
if (typeof window.editor === 'undefined') {
|
|
54
|
+
return { editor: 'undefined (normal - not initialized until file opened)' };
|
|
55
|
+
}
|
|
56
|
+
return { editor: window.editor ? 'initialized' : 'null' };
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
test('Fetch projects API', async () => {
|
|
60
|
+
const res = await fetch(`${window.location.origin}/api/studio/projects`);
|
|
61
|
+
const data = await res.json();
|
|
62
|
+
return { status: res.status, projects: data.projects?.length };
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
test('Fetch files API', async () => {
|
|
66
|
+
const rootDir =
|
|
67
|
+
typeof window.__studioGetCurrentProjectDir === 'function'
|
|
68
|
+
? window.__studioGetCurrentProjectDir()
|
|
69
|
+
: 'apps/vibe';
|
|
70
|
+
const res = await fetch(
|
|
71
|
+
`${window.location.origin}/api/studio/files?dir=${encodeURIComponent(rootDir)}`
|
|
72
|
+
);
|
|
73
|
+
const data = await res.json();
|
|
74
|
+
return { status: res.status, files: data.files?.length };
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
test('Terminal content element', () => {
|
|
78
|
+
const el = document.getElementById('terminal-content');
|
|
79
|
+
if (!el) throw new Error('terminal-content element not found');
|
|
80
|
+
return {
|
|
81
|
+
exists: true,
|
|
82
|
+
children: el.children.length,
|
|
83
|
+
innerHTML: el.innerHTML.slice(0, 200)
|
|
84
|
+
};
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
test('Editor toolbar buttons', () => {
|
|
88
|
+
const buttons = document.querySelectorAll('.editor-toolbar-btn');
|
|
89
|
+
if (!buttons.length) throw new Error('No toolbar buttons found');
|
|
90
|
+
const states = Array.from(buttons).map(btn => ({
|
|
91
|
+
id: btn.id,
|
|
92
|
+
disabled: btn.disabled,
|
|
93
|
+
title: btn.title
|
|
94
|
+
}));
|
|
95
|
+
return { count: buttons.length, states };
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
test('Console errors', () => {
|
|
99
|
+
// Can't capture past errors, but can show if any are visible
|
|
100
|
+
return { note: 'Check browser DevTools console for red errors' };
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
}, 2000);
|
|
104
|
+
</script>
|
|
105
|
+
</body>
|
|
106
|
+
</html>
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Studio Button Fix Script
|
|
3
|
+
*
|
|
4
|
+
* Run this in the browser console (F12) when Studio is open:
|
|
5
|
+
* 1. Copy this entire file
|
|
6
|
+
* 2. Paste into console
|
|
7
|
+
* 3. Press Enter
|
|
8
|
+
*
|
|
9
|
+
* This will diagnose and fix common issues.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
console.log('š§ Studio Diagnostic & Fix Script Starting...\n');
|
|
13
|
+
|
|
14
|
+
// Check 1: Files in Explorer
|
|
15
|
+
const fileTree = document.getElementById('file-tree');
|
|
16
|
+
if (!fileTree) {
|
|
17
|
+
console.error('ā file-tree element not found!');
|
|
18
|
+
} else {
|
|
19
|
+
const files = fileTree.querySelectorAll('li');
|
|
20
|
+
console.log(`ā
File tree found: ${files.length} files visible`);
|
|
21
|
+
|
|
22
|
+
if (files.length === 0) {
|
|
23
|
+
console.warn('ā ļø No files in Explorer - trying to refresh...');
|
|
24
|
+
if (typeof window.loadFileTree === 'function') {
|
|
25
|
+
window.loadFileTree();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Check 2: Editor instance
|
|
31
|
+
if (typeof window.editor === 'undefined') {
|
|
32
|
+
console.log('ā¹ļø Editor not yet initialized (normal until you open a file)');
|
|
33
|
+
} else if (window.editor === null) {
|
|
34
|
+
console.log('ā¹ļø Editor is null (will initialize when you open a file)');
|
|
35
|
+
} else {
|
|
36
|
+
console.log('ā
Editor is initialized!');
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Check 3: Monaco loaded
|
|
40
|
+
if (typeof window.monaco === 'undefined') {
|
|
41
|
+
console.error('ā Monaco not loaded - this is the problem!');
|
|
42
|
+
console.log(' Try refreshing the page (Cmd+R)');
|
|
43
|
+
} else {
|
|
44
|
+
console.log('ā
Monaco loaded successfully');
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Check 4: Button states
|
|
48
|
+
const buttons = document.querySelectorAll('.editor-toolbar-btn');
|
|
49
|
+
if (buttons.length === 0) {
|
|
50
|
+
console.error('ā No toolbar buttons found');
|
|
51
|
+
} else {
|
|
52
|
+
console.log(`ā
Found ${buttons.length} toolbar buttons`);
|
|
53
|
+
const disabledCount = Array.from(buttons).filter(b => b.disabled).length;
|
|
54
|
+
console.log(` ${disabledCount} disabled, ${buttons.length - disabledCount} enabled`);
|
|
55
|
+
|
|
56
|
+
if (disabledCount === buttons.length) {
|
|
57
|
+
console.log(' ā¹ļø All buttons disabled (normal - no file is open yet)');
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Check 5: Activity Trace
|
|
62
|
+
const terminal = document.getElementById('terminal-content');
|
|
63
|
+
if (!terminal) {
|
|
64
|
+
console.error('ā terminal-content element not found');
|
|
65
|
+
} else {
|
|
66
|
+
const lines = terminal.children.length;
|
|
67
|
+
console.log(`ā
Activity Trace found: ${lines} entries`);
|
|
68
|
+
if (lines === 0) {
|
|
69
|
+
console.log(' ā¹ļø Terminal empty (will populate when activity happens)');
|
|
70
|
+
} else {
|
|
71
|
+
console.log(` Last entry: ${terminal.lastElementChild?.textContent?.slice(0, 60)}...`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// FIX: Auto-open first file to enable buttons
|
|
76
|
+
console.log('\nš§ Attempting auto-fix: opening first file...');
|
|
77
|
+
const firstFile = fileTree?.querySelector('li[data-path]');
|
|
78
|
+
if (firstFile) {
|
|
79
|
+
const filePath = firstFile.dataset.path;
|
|
80
|
+
console.log(` Opening: ${filePath}`);
|
|
81
|
+
|
|
82
|
+
// Click the file to trigger opening
|
|
83
|
+
firstFile.click();
|
|
84
|
+
|
|
85
|
+
setTimeout(() => {
|
|
86
|
+
const enabledCount = Array.from(buttons).filter(b => !b.disabled).length;
|
|
87
|
+
if (enabledCount > 0) {
|
|
88
|
+
console.log(`ā
FIX SUCCESSFUL: ${enabledCount} buttons now enabled!`);
|
|
89
|
+
console.log(' Try hovering over the Find or Replace buttons now.');
|
|
90
|
+
} else {
|
|
91
|
+
console.warn('ā ļø Buttons still disabled - check console for errors');
|
|
92
|
+
}
|
|
93
|
+
}, 1000);
|
|
94
|
+
} else {
|
|
95
|
+
console.warn('ā ļø No files found to open');
|
|
96
|
+
console.log(' Try clicking a file in the Explorer manually');
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
console.log('\nš Summary:');
|
|
100
|
+
console.log(' 1. If buttons are still disabled ā click any file in Explorer');
|
|
101
|
+
console.log(' 2. If Explorer is empty ā check that files are loading');
|
|
102
|
+
console.log(' 3. If Monaco failed ā refresh the page');
|
|
103
|
+
console.log(' 4. Hover over enabled buttons to see the blue glow');
|