codymaster 7.0.2 → 7.0.3
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/CHANGELOG.md +64 -0
- package/README.md +38 -1
- package/dist/agent/codex.js +73 -21
- package/dist/agent-dispatch.js +63 -48
- package/dist/cli/commands/brain.js +18 -0
- package/dist/cli/commands/design-studio.js +1 -1
- package/dist/cm-suggest.js +3 -3
- package/dist/dashboard-project-summary.js +9 -0
- package/dist/dashboard.js +11 -5
- package/dist/execution-analyzer.js +9 -1
- package/dist/judge.js +16 -15
- package/dist/mcp-context-server.js +45 -23
- package/dist/mcp-skills-tools.js +2 -2
- package/dist/skill-chain.js +26 -3
- package/dist/skill-token-report.js +105 -0
- package/dist/sprint-pipeline.js +3 -3
- package/dist/ui/onboarding.js +3 -4
- package/dist/utils/design-taste.js +1 -1
- package/dist/utils/output-compress.js +8 -0
- package/package.json +2 -1
- package/public/dashboard/app.js +40 -13
- package/public/dashboard/index.html +190 -5
- package/public/dashboard/style.css +1 -1
- package/scripts/build-skills.mjs +36 -2
- package/scripts/mcp-bridge.js +41 -24
- package/scripts/pack-plugin.mjs +206 -0
- package/skills/cm-ads-tracker/SKILL.md +401 -0
- package/skills/cm-ads-tracker/evals/evals.json +55 -0
- package/skills/cm-ads-tracker/references/gtm-architecture.md +321 -0
- package/skills/cm-ads-tracker/references/industry-events.md +294 -0
- package/skills/cm-ads-tracker/references/platforms-api.md +238 -0
- package/skills/cm-ads-tracker/templates/capi-payload.md +79 -0
- package/skills/cm-ads-tracker/templates/datalayer-push.js +104 -0
- package/skills/cm-ads-tracker/templates/gtm-variables.js +56 -0
- package/skills/cm-auto-publisher/SKILL.md +81 -0
- package/skills/cm-booking-calendar/SKILL.md +521 -0
- package/skills/cm-booking-calendar/references/industry-patterns.md +527 -0
- package/skills/cm-booking-calendar/templates/booking-form.css +626 -0
- package/skills/cm-booking-calendar/templates/booking-form.html +477 -0
- package/skills/cm-booking-calendar/templates/calendar-engine.js +419 -0
- package/skills/cm-booking-calendar/templates/calendar-export.js +395 -0
- package/skills/cm-booking-calendar/templates/reminder-config.js +629 -0
- package/skills/cm-brainstorm-idea/SKILL.md +5 -5
- package/skills/cm-code-review/SKILL.md +2 -2
- package/skills/cm-codeintell/SKILL.md +47 -580
- package/skills/cm-codeintell/references/integration-workflows.md +23 -0
- package/skills/cm-codeintell/references/layer-0-skeleton.md +54 -0
- package/skills/cm-codeintell/references/layer-1-codegraph.md +58 -0
- package/skills/cm-codeintell/references/layer-2-architecture.md +31 -0
- package/skills/cm-codeintell/references/layer-3-context-builder.md +32 -0
- package/skills/cm-content-factory/.content-factory-state.json +132 -0
- package/skills/cm-content-factory/.git 2/logs/refs/heads/main +1 -0
- package/skills/cm-content-factory/.git 2/logs/refs/remotes/origin/main +1 -0
- package/skills/cm-content-factory/.git 2/objects/02/fb0956734b5f8ba3f918b7defd04a89cfe0076 +0 -0
- package/skills/cm-content-factory/.git 2/objects/08/1e129d75dc6feac6c02037272e6bd1a04e3324 +0 -0
- package/skills/cm-content-factory/.git 2/objects/0c/5393416f3c5e01c9a655a802bff0dd52f76f0a +0 -0
- package/skills/cm-content-factory/.git 2/objects/10/0b9be46978a946a77188f68be725098a122001 +0 -0
- package/skills/cm-content-factory/.git 2/objects/10/cf041167fc9843610eb3d90259ef3396315fdc +0 -0
- package/skills/cm-content-factory/.git 2/objects/12/5e19538dd6e1338ffe74f6c4c165b00435bf48 +0 -0
- package/skills/cm-content-factory/.git 2/objects/16/a9b9d0088d5c1347628b45a2620b479d8ad57c +0 -0
- package/skills/cm-content-factory/.git 2/objects/17/8c2a9ef93c33ae4eec9d58e82321f9229843a1 +0 -0
- package/skills/cm-content-factory/.git 2/objects/25/397ae41d09104d763bdcac2695209d85cdea89 +0 -0
- package/skills/cm-content-factory/.git 2/objects/2f/a836b7947f2d458e1f639788bf4bb0983a3305 +0 -0
- package/skills/cm-content-factory/.git 2/objects/3a/baaaf0a1c0909c0828335791557125fba911e0 +0 -0
- package/skills/cm-content-factory/.git 2/objects/42/2924221b81f5ce3c4e4daac9a64a24f9b01f9a +0 -0
- package/skills/cm-content-factory/.git 2/objects/42/ec0ce707447dc11446a34c9995fb8533801731 +0 -0
- package/skills/cm-content-factory/.git 2/objects/46/e43ce92866d56ce74b1d750db307cfe6154a15 +0 -0
- package/skills/cm-content-factory/.git 2/objects/48/5e41b633c63f55b8277bcc59f44f67681f671a +0 -0
- package/skills/cm-content-factory/.git 2/objects/49/49c596a3a89fa240642acd95dd3258e261eb09 +0 -0
- package/skills/cm-content-factory/.git 2/objects/50/9d42d8412ef8eaf7f7e138476bac2e4d10ce60 +0 -0
- package/skills/cm-content-factory/.git 2/objects/55/0c8c389d981b463ef849aeb792d8be3ccb6ec8 +0 -0
- package/skills/cm-content-factory/.git 2/objects/5d/82d3b18410cdda3ace3677436f0cb599dbe2d2 +0 -0
- package/skills/cm-content-factory/.git 2/objects/60/0617c58e871a38b33bf29e282d132bb3c381ad +0 -0
- package/skills/cm-content-factory/.git 2/objects/6a/8369a99c687b7245c92ffaf0e0f0dab9014504 +0 -0
- package/skills/cm-content-factory/.git 2/objects/79/bea435d40ab531c1aaf6be0432c6a5b7aaed21 +0 -0
- package/skills/cm-content-factory/.git 2/objects/7e/5ebd79251c2f14e4aceb86c74b6b6daae6b500 +0 -0
- package/skills/cm-content-factory/.git 2/objects/81/98a822a60178d6d5023ddb3e222cddf048742e +0 -0
- package/skills/cm-content-factory/.git 2/objects/86/0a0e1943dfe53411d2e499a1f16f46a96ef758 +0 -0
- package/skills/cm-content-factory/.git 2/objects/86/971fb55fdc081fdbae52376f0f13e57a4e9b04 +0 -0
- package/skills/cm-content-factory/.git 2/objects/88/b89dd609a0a03f8d4fe8bfde20d5b8fc1d326d +0 -0
- package/skills/cm-content-factory/.git 2/objects/90/8737edb6b7809e32cc01590b4e08ba42a9d40d +0 -0
- package/skills/cm-content-factory/.git 2/objects/93/d5a8a9a7d4fb7f11491cb596a6880528725118 +0 -0
- package/skills/cm-content-factory/.git 2/objects/98/46a2ab81d0c3b3eb00ef88fc56989aa7e9f316 +0 -0
- package/skills/cm-content-factory/.git 2/objects/9b/d8dd1e49cf274eaf9c555f3ab39dce7af5715e +0 -0
- package/skills/cm-content-factory/.git 2/objects/a1/13329fb0cec96ae78b222d33a24c3b5bc7fa1f +0 -0
- package/skills/cm-content-factory/.git 2/objects/a9/e6effe626e8a3aea3a8fc3364b492191c6e7d0 +0 -0
- package/skills/cm-content-factory/.git 2/objects/ad/6de7e48d9782cca9353d1ff0aa1aab7fe1df85 +0 -0
- package/skills/cm-content-factory/.git 2/objects/af/54ae316f771ff692e299ffcd8bf2f06b413b59 +0 -0
- package/skills/cm-content-factory/.git 2/objects/b0/4cb8b0b00dad633e731c1472161419e738d674 +0 -0
- package/skills/cm-content-factory/.git 2/objects/b3/094abb0b9ed46419b269e4a4e36a459690e3b0 +0 -0
- package/skills/cm-content-factory/.git 2/objects/b9/435c5d4baac2cfc5c83009ddd27b46b60db5f1 +0 -0
- package/skills/cm-content-factory/.git 2/objects/ba/5da17dbaec5ec2dcfdfd126aead518d1171d5c +0 -0
- package/skills/cm-content-factory/.git 2/objects/c0/bf58703aa258ba5dd63083bebaec8f223d844c +0 -0
- package/skills/cm-content-factory/.git 2/objects/c4/701a34edf1fc1bad58ccc57bd03f9426acb59a +0 -0
- package/skills/cm-content-factory/.git 2/objects/c7/5ccce9a4e5cc74d9b3174550cf6d993ca43638 +0 -0
- package/skills/cm-content-factory/.git 2/objects/c7/710d59b5a35b0f1f0a0399386643a0bd94c929 +0 -0
- package/skills/cm-content-factory/.git 2/objects/d1/fe58237112e953e5fec52da22cf38e08be3df9 +5 -0
- package/skills/cm-content-factory/.git 2/objects/d2/2bbe9fd2f74c95bc5583e803f5e435f1e2cd86 +0 -0
- package/skills/cm-content-factory/.git 2/objects/d7/e72852ea2bff74581dbf247d400120086229f4 +0 -0
- package/skills/cm-content-factory/.git 2/objects/d8/d4c3b5553e4fd72807e1d4b49ef07d9ef3ac35 +0 -0
- package/skills/cm-content-factory/.git 2/objects/dc/75050c2876f6a02ae2a53a3c886f395b622977 +0 -0
- package/skills/cm-content-factory/.git 2/objects/ee/e8546f95acec500187c08a28a8b9ee02db0dec +0 -0
- package/skills/cm-content-factory/.git 2/objects/ef/263c059208b416c2146434f10cb2b9fabcba16 +0 -0
- package/skills/cm-content-factory/.git 2/objects/f3/ae597e84d9a59b88acd21c99bde2eaf686d785 +0 -0
- package/skills/cm-content-factory/.git 2/objects/f3/f6f5673c821d3d8e76fa267a9e882e7a5387ea +0 -0
- package/skills/cm-content-factory/.git 2/objects/f9/6e6d0ad02624dd11d5848594d056caef7a5e8b +0 -0
- package/skills/cm-content-factory/.git 2/objects/ff/278988fc1edf0db3abcf18de795f4cc0b4f3e1 +0 -0
- package/skills/cm-content-factory/.git 2/refs/heads/main +1 -0
- package/skills/cm-content-factory/.git 2/refs/remotes/origin/main +1 -0
- package/skills/cm-content-factory/.pytest_cache 2/v/cache/nodeids +76 -0
- package/skills/cm-content-factory/.pytest_cache 2/v/cache/stepwise +1 -0
- package/skills/cm-content-factory/AGENTS.md +61 -0
- package/skills/cm-content-factory/CLAUDE.md +63 -0
- package/skills/cm-content-factory/CURSOR.md +43 -0
- package/skills/cm-content-factory/Content Factory.zip +0 -0
- package/skills/cm-content-factory/SKILL.md +416 -0
- package/skills/cm-content-factory/cf +313 -0
- package/skills/cm-content-factory/config.schema.json +397 -0
- package/skills/cm-content-factory/dashboard/app.js +556 -0
- package/skills/cm-content-factory/dashboard/index.html +397 -0
- package/skills/cm-content-factory/dashboard/style.css +1211 -0
- package/skills/cm-content-factory/examples/01-real-estate.config.json +146 -0
- package/skills/cm-content-factory/examples/02-personal-finance.config.json +146 -0
- package/skills/cm-content-factory/examples/03-health-wellness.config.json +147 -0
- package/skills/cm-content-factory/examples/04-saas-software.config.json +147 -0
- package/skills/cm-content-factory/examples/05-legal-services.config.json +147 -0
- package/skills/cm-content-factory/examples/06-insurance.config.json +146 -0
- package/skills/cm-content-factory/examples/07-ecommerce-dropship.config.json +146 -0
- package/skills/cm-content-factory/examples/08-online-education.config.json +147 -0
- package/skills/cm-content-factory/examples/09-crypto-defi.config.json +147 -0
- package/skills/cm-content-factory/examples/10-beauty-skincare.config.json +147 -0
- package/skills/cm-content-factory/examples/11-home-services.config.json +146 -0
- package/skills/cm-content-factory/examples/12-dental-clinic.config.json +147 -0
- package/skills/cm-content-factory/examples/13-pet-care.config.json +147 -0
- package/skills/cm-content-factory/examples/14-travel-hospitality.config.json +147 -0
- package/skills/cm-content-factory/examples/15-ai-automation.config.json +147 -0
- package/skills/cm-content-factory/examples/16-wedding-events.config.json +147 -0
- package/skills/cm-content-factory/examples/17-fitness-coaching.config.json +148 -0
- package/skills/cm-content-factory/examples/18-cybersecurity.config.json +147 -0
- package/skills/cm-content-factory/examples/19-food-restaurant.config.json +148 -0
- package/skills/cm-content-factory/examples/20-solar-energy.config.json +147 -0
- package/skills/cm-content-factory/examples/fitness-blog.config.json +116 -0
- package/skills/cm-content-factory/examples/tech-blog.config.json +107 -0
- package/skills/cm-content-factory/extensions/EXTENSION_GUIDE.md +72 -0
- package/skills/cm-content-factory/extensions/hooks.py +126 -0
- package/skills/cm-content-factory/extensions/openclaw_adapter.py +132 -0
- package/skills/cm-content-factory/landing/docs/content/changelog.md +36 -0
- package/skills/cm-content-factory/landing/docs/content/deployment.md +46 -0
- package/skills/cm-content-factory/landing/docs/content/execution-flow.md +67 -0
- package/skills/cm-content-factory/landing/docs/content/openspace.md +27 -0
- package/skills/cm-content-factory/landing/docs/content/openviking.md +33 -0
- package/skills/cm-content-factory/landing/docs/content/use-cases.md +26 -0
- package/skills/cm-content-factory/landing/docs/content/v5-intro.md +28 -0
- package/skills/cm-content-factory/landing/docs/index.html +240 -0
- package/skills/cm-content-factory/landing/index.html +680 -0
- package/skills/cm-content-factory/landing/script.js +143 -0
- package/skills/cm-content-factory/landing/style.css +1216 -0
- package/skills/cm-content-factory/landing/translations.js +508 -0
- package/skills/cm-content-factory/logs/events.jsonl +11 -0
- package/skills/cm-content-factory/profiles/_template.profile.json +231 -0
- package/skills/cm-content-factory/profiles/finance.profile.json +278 -0
- package/skills/cm-content-factory/profiles/legal.profile.json +263 -0
- package/skills/cm-content-factory/profiles/medical-research.profile.json +321 -0
- package/skills/cm-content-factory/profiles/technology.profile.json +275 -0
- package/skills/cm-content-factory/scripts/agent_dispatcher.py +266 -0
- package/skills/cm-content-factory/scripts/audit.py +106 -0
- package/skills/cm-content-factory/scripts/dashboard_server.py +225 -0
- package/skills/cm-content-factory/scripts/deploy.py +146 -0
- package/skills/cm-content-factory/scripts/extract.py +132 -0
- package/skills/cm-content-factory/scripts/landing_generator.py +459 -0
- package/skills/cm-content-factory/scripts/memory.py +521 -0
- package/skills/cm-content-factory/scripts/monetize.py +239 -0
- package/skills/cm-content-factory/scripts/pipeline.py +357 -0
- package/skills/cm-content-factory/scripts/plan.py +163 -0
- package/skills/cm-content-factory/scripts/publish.py +145 -0
- package/skills/cm-content-factory/scripts/research.py +337 -0
- package/skills/cm-content-factory/scripts/scaffold.py +464 -0
- package/skills/cm-content-factory/scripts/scoreboard.py +336 -0
- package/skills/cm-content-factory/scripts/seo.py +90 -0
- package/skills/cm-content-factory/scripts/state_manager.py +320 -0
- package/skills/cm-content-factory/scripts/token_manager.py +268 -0
- package/skills/cm-content-factory/scripts/validate.py +221 -0
- package/skills/cm-content-factory/scripts/wizard.py +329 -0
- package/skills/cm-content-factory/scripts/write.py +93 -0
- package/skills/cm-content-factory/sites/docs-site/src/assets/houston.webp +0 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/architecture.md +90 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/data-flow.md +54 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/deployment.md +38 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/index.md +65 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/lc-content-lifecycle.md +48 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/seq-write-mode.md +39 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/uj-first-batch.md +42 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/wf-content-pipeline.md +51 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/wf-learning-cycle.md +52 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/configuration.md +86 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/installation.md +80 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/intro.md +58 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/index.md +102 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/index.md +45 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/optimize-seo.md +29 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/scale-content-production.md +55 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/standardize-quality.md +29 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/buyer-cmo-huong.md +41 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/buyer-content-lead-khoa.md +40 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/index.md +56 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-content-manager-lan.md +46 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-seo-minh.md +45 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-writer-tu.md +45 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/content-pipeline.md +108 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/index.md +22 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/memory-system.md +52 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/seo-optimization.md +58 -0
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/troubleshooting-guide.md +92 -0
- package/skills/cm-content-factory/sites/docs-site/src/styles/custom.css +575 -0
- package/skills/cm-content-factory/tests/conftest.py +66 -0
- package/skills/cm-content-factory/tests/test_agent_dispatcher.py +125 -0
- package/skills/cm-content-factory/tests/test_memory.py +128 -0
- package/skills/cm-content-factory/tests/test_pipeline.py +107 -0
- package/skills/cm-content-factory/tests/test_research.py +56 -0
- package/skills/cm-content-factory/tests/test_state_manager.py +131 -0
- package/skills/cm-content-factory/tests/test_token_manager.py +110 -0
- package/skills/cm-content-factory/tests/test_wizard.py +121 -0
- package/skills/cm-continuity/SKILL.md +49 -480
- package/skills/cm-continuity/references/cm-uri-scheme.md +23 -0
- package/skills/cm-continuity/references/continuity-template.md +48 -0
- package/skills/cm-continuity/references/mcp-context-server.md +27 -0
- package/skills/cm-continuity/references/memory-architecture.md +26 -0
- package/skills/cm-continuity/references/memory-audit.md +18 -0
- package/skills/cm-continuity/references/session-protocol.md +31 -0
- package/skills/cm-continuity/references/storage-formats.md +20 -0
- package/skills/cm-cro-methodology/SKILL.md +290 -0
- package/skills/cm-cro-methodology/references/COPYWRITING.md +178 -0
- package/skills/cm-cro-methodology/references/OBJECTIONS.md +135 -0
- package/skills/cm-cro-methodology/references/PERSUASION.md +158 -0
- package/skills/cm-cro-methodology/references/RESEARCH.md +220 -0
- package/skills/cm-cro-methodology/references/funnel-analysis.md +365 -0
- package/skills/cm-cro-methodology/references/testing-methodology.md +330 -0
- package/skills/cm-design-system/SKILL.md +5 -6
- package/skills/cm-execution/SKILL.md +61 -379
- package/skills/cm-execution/references/mode-a-batch.md +28 -0
- package/skills/cm-execution/references/mode-b-subagent.md +46 -0
- package/skills/cm-execution/references/mode-c-parallel.md +39 -0
- package/skills/cm-execution/references/mode-d-rarv.md +62 -0
- package/skills/cm-execution/references/mode-e-triz-parallel.md +53 -0
- package/skills/cm-execution/references/mode-f-party.md +61 -0
- package/skills/cm-execution/references/persona-dispatch.md +22 -0
- package/skills/cm-execution/references/security-rules.md +47 -0
- package/skills/cm-google-form/SKILL.md +266 -0
- package/skills/cm-google-form/templates/apps-script.js +55 -0
- package/skills/cm-google-form/templates/form-markup.html +110 -0
- package/skills/cm-google-form/templates/form-submit.js +201 -0
- package/skills/cm-google-form/templates/toast.css +152 -0
- package/skills/cm-growth-hacking/SKILL.md +282 -0
- package/skills/cm-growth-hacking/bottom-sheet-engine.md +261 -0
- package/skills/cm-growth-hacking/calendar-integration.md +264 -0
- package/skills/cm-growth-hacking/references/engagement-patterns.md +346 -0
- package/skills/cm-growth-hacking/templates/bottom-sheet.css +528 -0
- package/skills/cm-growth-hacking/templates/bottom-sheet.js +269 -0
- package/skills/cm-growth-hacking/templates/calendar-cta.js +213 -0
- package/skills/cm-growth-hacking/templates/tracking-events.js +211 -0
- package/skills/cm-growth-hacking/templates/trigger-manager.js +254 -0
- package/skills/cm-growth-hacking/tracking-events.md +246 -0
- package/skills/cm-growth-hacking/trigger-system.md +342 -0
- package/skills/cm-how-it-work/SKILL.md +8 -9
- package/skills/cm-identity-guard/SKILL.md +4 -4
- package/skills/cm-jtbd/SKILL.md +98 -0
- package/skills/cm-notebooklm/SKILL.md +156 -0
- package/skills/cm-notebooklm/references/command_reference.md +94 -0
- package/skills/cm-notebooklm/references/workflows.md +60 -0
- package/skills/cm-notebooklm/resources/knowledge_sources.md +106 -0
- package/skills/cm-notebooklm/scripts/brain-sync.sh +453 -0
- package/skills/cm-notebooklm/scripts/graduate_wisdom.py +101 -0
- package/skills/cm-planning/SKILL.md +3 -3
- package/skills/cm-project-bootstrap/SKILL.md +2 -2
- package/skills/cm-quality-gate/SKILL.md +1 -1
- package/skills/cm-readit/SKILL.md +289 -0
- package/skills/cm-readit/audio-player.md +206 -0
- package/skills/cm-readit/examples/blog-reader.js +352 -0
- package/skills/cm-readit/examples/voice-cro.js +390 -0
- package/skills/cm-readit/tts-engine.md +262 -0
- package/skills/cm-readit/ui-patterns.md +362 -0
- package/skills/cm-readit/voice-cro.md +223 -0
- package/skills/cm-safe-deploy/SKILL.md +80 -510
- package/skills/cm-safe-deploy/references/gate-0-5-security-scan.md +31 -0
- package/skills/cm-safe-deploy/references/gate-0-secret-hygiene.md +68 -0
- package/skills/cm-safe-deploy/references/gate-1-syntax.md +23 -0
- package/skills/cm-safe-deploy/references/gate-2-test-suite.md +28 -0
- package/skills/cm-safe-deploy/references/gate-3-i18n.md +19 -0
- package/skills/cm-safe-deploy/references/gate-4-5-build-dist.md +16 -0
- package/skills/cm-safe-deploy/references/gate-6-deploy-smoke.md +18 -0
- package/skills/cm-safe-deploy/references/rollback.md +17 -0
- package/skills/cm-safe-deploy/references/setup-new-project.md +20 -0
- package/skills/cm-skill-index/SKILL.md +15 -15
- package/skills/cm-start/SKILL.md +1 -1
- package/skills/cm-tdd/SKILL.md +51 -356
- package/skills/cm-tdd/references/bugfix-example.md +15 -0
- package/skills/cm-tdd/references/rationalizations.md +20 -0
- package/skills/cm-tdd/references/red-green-refactor.md +33 -0
- package/skills/cm-tdd/references/stuck-debugging.md +18 -0
- package/skills/cm-tdd/references/test-quality.md +19 -0
- package/skills/cm-ux-master/SKILL.md +368 -115
- package/skills/profiles/core.txt +1 -4
- package/skills/profiles/design.txt +1 -2
- package/skills/profiles/full.txt +10 -16
- package/skills/profiles/growth.txt +9 -9
- package/skills/profiles/top35.json +13 -13
- package/skills/cm-conductor-worktrees/SKILL.archive.md +0 -28
- package/skills/cm-conductor-worktrees/SKILL.md +0 -26
- package/skills/cm-dashboard/SKILL.archive.md +0 -15
- package/skills/cm-dashboard/SKILL.md +0 -26
- package/skills/cm-dashboard/ui/app.js +0 -1278
- package/skills/cm-dashboard/ui/index.html +0 -206
- package/skills/cm-dashboard/ui/style.css +0 -440
- package/skills/cm-design-studio/SKILL.archive.md +0 -34
- package/skills/cm-design-studio/SKILL.md +0 -26
- package/skills/cm-engineering-meta/SKILL.archive.md +0 -73
- package/skills/cm-engineering-meta/SKILL.md +0 -26
- package/skills/cm-git-worktrees/SKILL.archive.md +0 -157
- package/skills/cm-git-worktrees/SKILL.md +0 -26
- package/skills/cm-post-deploy-canary/SKILL.archive.md +0 -22
- package/skills/cm-post-deploy-canary/SKILL.md +0 -26
- package/skills/cm-qa-visual-cli/SKILL.archive.md +0 -22
- package/skills/cm-qa-visual-cli/SKILL.md +0 -26
- package/skills/cm-second-opinion-cli/SKILL.archive.md +0 -23
- package/skills/cm-second-opinion-cli/SKILL.md +0 -26
- package/skills/cm-secret-shield/SKILL.archive.md +0 -580
- package/skills/cm-secret-shield/SKILL.md +0 -26
- package/skills/cm-security-gate/SKILL.archive.md +0 -239
- package/skills/cm-security-gate/SKILL.md +0 -26
- package/skills/cm-skill-health/SKILL.archive.md +0 -83
- package/skills/cm-skill-health/SKILL.md +0 -26
- package/skills/cm-skill-mastery/SKILL.archive.md +0 -156
- package/skills/cm-skill-mastery/SKILL.md +0 -26
- package/skills/cm-skill-search/SKILL.archive.md +0 -49
- package/skills/cm-skill-search/SKILL.md +0 -26
- package/skills/cm-skill-share/SKILL.archive.md +0 -58
- package/skills/cm-skill-share/SKILL.md +0 -26
- package/skills/cm-test-gate/SKILL.archive.md +0 -245
- package/skills/cm-test-gate/SKILL.md +0 -26
- package/skills/cm-ui-preview/SKILL.archive.md +0 -153
- package/skills/cm-ui-preview/SKILL.md +0 -26
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,70 @@ Categories: 🚀 **Improvements** | 🐛 **Bug Fixes** | 🔒 **Security**
|
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
+
## [7.0.3] - 2026-05-13
|
|
10
|
+
|
|
11
|
+
### 🚀 Improvements — Codex Runtime + Token-Efficient Handoffs
|
|
12
|
+
|
|
13
|
+
Focused compatibility and cleanup release. Align CodyMaster with the current Codex CLI, reduce agent handoff noise, and remove dead references to deprecated skills across docs, profiles, and runtime hints.
|
|
14
|
+
|
|
15
|
+
### 🚀 Improvements — Skill Token Auditing + Progressive Disclosure
|
|
16
|
+
|
|
17
|
+
Added first-class skill token footprint auditing and used it to refactor the heaviest always-on skills into lazy-loaded `references/` packs.
|
|
18
|
+
|
|
19
|
+
**Skill Token Auditing:**
|
|
20
|
+
- Added `cm token skill <skillName>` under the existing `cm token` namespace
|
|
21
|
+
- New `--project`, `--json`, and `--baseline` options for repo-scoped reports, machine-readable output, and before/after comparisons
|
|
22
|
+
- New `src/skill-token-report.ts` analyzer for `SKILL.md`, direct `references/`, `progressive_min`, `progressive_max`, and baseline deltas
|
|
23
|
+
- Added `test/skill-token-report.test.ts` and `test/brain-token-skill.test.ts`
|
|
24
|
+
|
|
25
|
+
**Progressive Disclosure Refactors:**
|
|
26
|
+
- Split `skills/cm-execution/` into a short router `SKILL.md` plus mode-specific references
|
|
27
|
+
- Split `skills/cm-codeintell/` by intelligence layer: skeleton, codegraph, architecture, context builder, integration workflows
|
|
28
|
+
- Split `skills/cm-safe-deploy/` by deploy path: individual gates, setup, and rollback
|
|
29
|
+
- Split `skills/cm-continuity/` by concern: session protocol, template, memory model, MCP bridge, URI scheme, storage, audit
|
|
30
|
+
- Split `skills/cm-tdd/` by workflow/support: red-green-refactor, test quality, rationalizations, bugfix example, stuck/debugging
|
|
31
|
+
- Preserved existing skill names, compressed frontmatter style, and distribution compatibility with flat `references/`
|
|
32
|
+
|
|
33
|
+
**Measured Token Wins (`progressive_min`):**
|
|
34
|
+
- `cm-execution`: `3990 → 963` tokens
|
|
35
|
+
- `cm-codeintell`: `4981 → 685` tokens
|
|
36
|
+
- `cm-safe-deploy`: `4268 → 780` tokens
|
|
37
|
+
- `cm-continuity`: `4157 → 652` tokens
|
|
38
|
+
- `cm-tdd`: `2953 → 554` tokens
|
|
39
|
+
|
|
40
|
+
**Codex Compatibility:**
|
|
41
|
+
- Updated `src/agent/codex.ts` to use `codex exec --json`
|
|
42
|
+
- Added proper `codex exec resume` support for resumed sessions
|
|
43
|
+
- Parse real Codex JSONL events (`thread.started`, `item.completed`, `turn.completed`)
|
|
44
|
+
- Preserve `sessionId` and token `usage` from Codex runtime output
|
|
45
|
+
|
|
46
|
+
**Token Efficiency + Runtime Reuse:**
|
|
47
|
+
- Refactored `src/agent-dispatch.ts` to emit compact structured JSON task envelopes instead of verbose Markdown task files
|
|
48
|
+
- Fixed generated CLI handoff commands for Codex and Claude Code to match current CLIs
|
|
49
|
+
- Wired `SkillExecutionCache` into `src/skill-chain.ts` for real cached skill-chain reuse during execution
|
|
50
|
+
- Wired successful execution write-back into `src/execution-analyzer.ts`
|
|
51
|
+
- Added `compressMaybe()` helper in `src/utils/output-compress.ts` for safer runtime log compression
|
|
52
|
+
|
|
53
|
+
**Docs, Profiles, and Naming Cleanup:**
|
|
54
|
+
- Synced skill install manifests in `skills/profiles/{core,design,growth,full}.txt` and `skills/profiles/top35.json`
|
|
55
|
+
- Updated skill library docs under `docs/skills/` to remove broken links to deleted/deprecated skill folders
|
|
56
|
+
- Cleaned workflow and operations docs to point at current skills like `cm-safe-deploy`, `cm-design-system`, `cm-quality-gate`, `cm-execution`, and `cm-skill-index`
|
|
57
|
+
- Reduced deprecation-heavy copywriting in user-facing docs so new users see the current path first
|
|
58
|
+
- Kept migration-specific references only where they still serve version-upgrade guidance (`docs/migration-v2.md`) or advisory protocol compatibility
|
|
59
|
+
|
|
60
|
+
**Tests Added:**
|
|
61
|
+
- `test/codex-backend.test.ts`
|
|
62
|
+
- `test/agent-dispatch.test.ts`
|
|
63
|
+
- `test/skill-chain-cache.test.ts`
|
|
64
|
+
- `test/skill-token-report.test.ts`
|
|
65
|
+
- `test/brain-token-skill.test.ts`
|
|
66
|
+
|
|
67
|
+
**Verification:**
|
|
68
|
+
- `npm run test:gate:kit`
|
|
69
|
+
- Result: 54 test files passed, 422 tests passed
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
9
73
|
## [7.0.0] - 2026-05-11
|
|
10
74
|
|
|
11
75
|
### 🚀 Improvements — Browse Hybrid Bridge
|
package/README.md
CHANGED
|
@@ -20,7 +20,6 @@
|
|
|
20
20
|
[](https://www.npmjs.com/package/codymaster)
|
|
21
21
|
[](https://www.npmjs.com/package/codymaster)
|
|
22
22
|
[](https://github.com/tody-agent/codymaster/blob/main/LICENSE)
|
|
23
|
-
[](https://discord.gg/codymaster)
|
|
24
23
|
|
|
25
24
|
---
|
|
26
25
|
|
|
@@ -246,6 +245,44 @@ cm status # See your tasks and progress
|
|
|
246
245
|
cm dashboard # Open the visual dashboard
|
|
247
246
|
```
|
|
248
247
|
|
|
248
|
+
### For OpenCode users
|
|
249
|
+
|
|
250
|
+
OpenCode supports both skills and plugins:
|
|
251
|
+
|
|
252
|
+
```bash
|
|
253
|
+
git clone https://github.com/tody-agent/codymaster.git ~/.cody-master
|
|
254
|
+
|
|
255
|
+
# Skills (auto-load)
|
|
256
|
+
ln -s ~/.cody-master/.opencode/skills ~/.opencode/skills
|
|
257
|
+
|
|
258
|
+
# Plugins (optional — adds custom tools)
|
|
259
|
+
mkdir -p ~/.opencode/plugins
|
|
260
|
+
ln -s ~/.cody-master/.opencode/plugins/cm-brainstorm-idea.ts ~/.opencode/plugins/
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
Restart OpenCode to activate. The `cm-brainstorm-idea` plugin adds a strategic analysis tool with auto-detection for brainstorm keywords.
|
|
264
|
+
|
|
265
|
+
📖 [Full OpenCode installation guide →](.opencode/INSTALL.md)
|
|
266
|
+
|
|
267
|
+
### For Codex users
|
|
268
|
+
|
|
269
|
+
Fastest path:
|
|
270
|
+
|
|
271
|
+
```bash
|
|
272
|
+
git clone https://github.com/tody-agent/codymaster.git ~/.cody-master
|
|
273
|
+
cd ~/.cody-master
|
|
274
|
+
npm ci
|
|
275
|
+
npm run build:platforms
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
Then tell Codex:
|
|
279
|
+
|
|
280
|
+
```text
|
|
281
|
+
Fetch and follow instructions from https://raw.githubusercontent.com/tody-agent/codymaster/main/.codex/INSTALL.md
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
Or use the local Codex skill tree directly at `.codex/skills/`.
|
|
285
|
+
|
|
249
286
|
### No Node.js?
|
|
250
287
|
|
|
251
288
|
```bash
|
package/dist/agent/codex.js
CHANGED
|
@@ -30,32 +30,79 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar
|
|
|
30
30
|
};
|
|
31
31
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
32
|
exports.CodexBackend = void 0;
|
|
33
|
+
exports.buildCodexPrompt = buildCodexPrompt;
|
|
34
|
+
exports.buildCodexArgs = buildCodexArgs;
|
|
33
35
|
const spawn_helper_1 = require("./spawn-helper");
|
|
36
|
+
function buildCodexPrompt(prompt, opts) {
|
|
37
|
+
var _a;
|
|
38
|
+
if (!((_a = opts.systemPrompt) === null || _a === void 0 ? void 0 : _a.trim()))
|
|
39
|
+
return prompt;
|
|
40
|
+
return [
|
|
41
|
+
'<system_prompt>',
|
|
42
|
+
opts.systemPrompt.trim(),
|
|
43
|
+
'</system_prompt>',
|
|
44
|
+
'',
|
|
45
|
+
prompt,
|
|
46
|
+
].join('\n');
|
|
47
|
+
}
|
|
48
|
+
function buildCodexArgs(prompt, opts) {
|
|
49
|
+
const baseArgs = ['--json', '--skip-git-repo-check'];
|
|
50
|
+
if (opts.model)
|
|
51
|
+
baseArgs.push('--model', opts.model);
|
|
52
|
+
if (opts.customArgs)
|
|
53
|
+
baseArgs.push(...opts.customArgs);
|
|
54
|
+
const finalPrompt = buildCodexPrompt(prompt, opts);
|
|
55
|
+
if (opts.resumeSessionId) {
|
|
56
|
+
return ['exec', 'resume', ...baseArgs, opts.resumeSessionId, finalPrompt];
|
|
57
|
+
}
|
|
58
|
+
return ['exec', ...baseArgs, finalPrompt];
|
|
59
|
+
}
|
|
34
60
|
class AgentMessageTransformer {
|
|
35
61
|
constructor() {
|
|
36
62
|
this.output = [];
|
|
37
63
|
}
|
|
38
64
|
transform(msg) {
|
|
39
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
|
|
65
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0;
|
|
66
|
+
const codexEvent = msg;
|
|
67
|
+
if (codexEvent.thread_id) {
|
|
68
|
+
this.lastThreadId = codexEvent.thread_id;
|
|
69
|
+
}
|
|
70
|
+
if (codexEvent.type === 'item.completed' && ((_a = codexEvent.item) === null || _a === void 0 ? void 0 : _a.type) === 'agent_message') {
|
|
71
|
+
const content = (_b = codexEvent.item.text) !== null && _b !== void 0 ? _b : '';
|
|
72
|
+
if (content) {
|
|
73
|
+
this.output.push(content);
|
|
74
|
+
return [{ type: 'text', content, sessionId: this.lastThreadId }];
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (codexEvent.type === 'turn.completed' && codexEvent.usage) {
|
|
78
|
+
this.usage = {
|
|
79
|
+
codex: {
|
|
80
|
+
input: (_c = codexEvent.usage.input_tokens) !== null && _c !== void 0 ? _c : 0,
|
|
81
|
+
output: (_d = codexEvent.usage.output_tokens) !== null && _d !== void 0 ? _d : 0,
|
|
82
|
+
cacheRead: (_e = codexEvent.usage.cached_input_tokens) !== null && _e !== void 0 ? _e : 0,
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
return [];
|
|
86
|
+
}
|
|
40
87
|
const t = msg.type;
|
|
41
88
|
if (t === 'message' || t === 'text' || t === 'assistant') {
|
|
42
|
-
const content = (
|
|
89
|
+
const content = (_g = (_f = msg.content) !== null && _f !== void 0 ? _f : msg.text) !== null && _g !== void 0 ? _g : '';
|
|
43
90
|
if (content) {
|
|
44
91
|
this.output.push(content);
|
|
45
|
-
return [{ type: 'text', content }];
|
|
92
|
+
return [{ type: 'text', content, sessionId: this.lastThreadId }];
|
|
46
93
|
}
|
|
47
94
|
}
|
|
48
95
|
if (t === 'thinking') {
|
|
49
|
-
return [{ type: 'thinking', content: (
|
|
96
|
+
return [{ type: 'thinking', content: (_h = msg.content) !== null && _h !== void 0 ? _h : '' }];
|
|
50
97
|
}
|
|
51
98
|
if (t === 'tool_use' || t === 'tool-use') {
|
|
52
99
|
return [
|
|
53
100
|
{
|
|
54
101
|
type: 'tool-use',
|
|
55
|
-
tool: (
|
|
56
|
-
callId: (
|
|
57
|
-
input: (
|
|
58
|
-
attempt: (
|
|
102
|
+
tool: (_k = (_j = msg.tool) !== null && _j !== void 0 ? _j : msg.name) !== null && _k !== void 0 ? _k : 'unknown',
|
|
103
|
+
callId: (_m = (_l = msg.callId) !== null && _l !== void 0 ? _l : msg.id) !== null && _m !== void 0 ? _m : '',
|
|
104
|
+
input: (_p = (_o = msg.input) !== null && _o !== void 0 ? _o : msg.arguments) !== null && _p !== void 0 ? _p : {},
|
|
105
|
+
attempt: (_q = msg.attempt) !== null && _q !== void 0 ? _q : 1,
|
|
59
106
|
parentCallId: msg.parentCallId,
|
|
60
107
|
},
|
|
61
108
|
];
|
|
@@ -64,26 +111,26 @@ class AgentMessageTransformer {
|
|
|
64
111
|
return [
|
|
65
112
|
{
|
|
66
113
|
type: 'tool-result',
|
|
67
|
-
callId: (
|
|
68
|
-
output: (
|
|
69
|
-
isError: (
|
|
114
|
+
callId: (_s = (_r = msg.callId) !== null && _r !== void 0 ? _r : msg.id) !== null && _s !== void 0 ? _s : '',
|
|
115
|
+
output: (_u = (_t = msg.output) !== null && _t !== void 0 ? _t : msg.content) !== null && _u !== void 0 ? _u : '',
|
|
116
|
+
isError: (_v = msg.isError) !== null && _v !== void 0 ? _v : false,
|
|
70
117
|
},
|
|
71
118
|
];
|
|
72
119
|
}
|
|
73
120
|
if (t === 'status') {
|
|
74
|
-
return [{ type: 'status', status: (
|
|
121
|
+
return [{ type: 'status', status: (_w = msg.status) !== null && _w !== void 0 ? _w : '' }];
|
|
75
122
|
}
|
|
76
123
|
if (t === 'log') {
|
|
77
124
|
return [
|
|
78
125
|
{
|
|
79
126
|
type: 'log',
|
|
80
|
-
level: (
|
|
81
|
-
content: (
|
|
127
|
+
level: (_x = msg.level) !== null && _x !== void 0 ? _x : 'info',
|
|
128
|
+
content: (_y = msg.content) !== null && _y !== void 0 ? _y : '',
|
|
82
129
|
},
|
|
83
130
|
];
|
|
84
131
|
}
|
|
85
132
|
if (t === 'error') {
|
|
86
|
-
return [{ type: 'error', content: (
|
|
133
|
+
return [{ type: 'error', content: (_0 = (_z = msg.content) !== null && _z !== void 0 ? _z : msg.message) !== null && _0 !== void 0 ? _0 : '' }];
|
|
87
134
|
}
|
|
88
135
|
// Unknown message types are surfaced as status
|
|
89
136
|
return [{ type: 'status', status: JSON.stringify(msg) }];
|
|
@@ -91,6 +138,12 @@ class AgentMessageTransformer {
|
|
|
91
138
|
getOutput() {
|
|
92
139
|
return this.output.join('');
|
|
93
140
|
}
|
|
141
|
+
getSessionId() {
|
|
142
|
+
return this.lastThreadId;
|
|
143
|
+
}
|
|
144
|
+
getUsage() {
|
|
145
|
+
return this.usage;
|
|
146
|
+
}
|
|
94
147
|
}
|
|
95
148
|
function transformMessages(raw, transformer) {
|
|
96
149
|
return __asyncGenerator(this, arguments, function* transformMessages_1() {
|
|
@@ -134,6 +187,8 @@ function collectResult(proc, transformer, startTime) {
|
|
|
134
187
|
output: transformer.getOutput(),
|
|
135
188
|
durationMs,
|
|
136
189
|
failureReason,
|
|
190
|
+
sessionId: transformer.getSessionId(),
|
|
191
|
+
usage: transformer.getUsage(),
|
|
137
192
|
});
|
|
138
193
|
});
|
|
139
194
|
proc.child.on('error', (err) => {
|
|
@@ -144,6 +199,8 @@ function collectResult(proc, transformer, startTime) {
|
|
|
144
199
|
error: err instanceof Error ? err.message : String(err),
|
|
145
200
|
failureReason: 'agent_crash',
|
|
146
201
|
durationMs,
|
|
202
|
+
sessionId: transformer.getSessionId(),
|
|
203
|
+
usage: transformer.getUsage(),
|
|
147
204
|
});
|
|
148
205
|
});
|
|
149
206
|
});
|
|
@@ -177,12 +234,7 @@ class CodexBackend {
|
|
|
177
234
|
}
|
|
178
235
|
execute(prompt, opts) {
|
|
179
236
|
return __awaiter(this, void 0, void 0, function* () {
|
|
180
|
-
const args =
|
|
181
|
-
if (opts.model)
|
|
182
|
-
args.push('--model', opts.model);
|
|
183
|
-
if (opts.customArgs)
|
|
184
|
-
args.push(...opts.customArgs);
|
|
185
|
-
args.push(prompt);
|
|
237
|
+
const args = buildCodexArgs(prompt, opts);
|
|
186
238
|
const proc = (0, spawn_helper_1.spawnProcess)({
|
|
187
239
|
command: 'codex',
|
|
188
240
|
args,
|
package/dist/agent-dispatch.js
CHANGED
|
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.validateDispatch = validateDispatch;
|
|
7
|
+
exports.generateTaskEnvelope = generateTaskEnvelope;
|
|
7
8
|
exports.dispatchTaskToAgent = dispatchTaskToAgent;
|
|
8
9
|
const fs_1 = __importDefault(require("fs"));
|
|
9
10
|
const path_1 = __importDefault(require("path"));
|
|
@@ -11,6 +12,8 @@ const path_1 = __importDefault(require("path"));
|
|
|
11
12
|
const AGENT_SKILL_PREFIX = {
|
|
12
13
|
'antigravity': '@[/',
|
|
13
14
|
'claude-code': '/',
|
|
15
|
+
'codex': '/',
|
|
16
|
+
'opencode': '/',
|
|
14
17
|
'cursor': '@',
|
|
15
18
|
'gemini-cli': '@[/',
|
|
16
19
|
'windsurf': '@',
|
|
@@ -20,6 +23,8 @@ const AGENT_SKILL_PREFIX = {
|
|
|
20
23
|
const AGENT_DISPLAY = {
|
|
21
24
|
'antigravity': 'Google Antigravity',
|
|
22
25
|
'claude-code': 'Claude Code',
|
|
26
|
+
'codex': 'OpenAI Codex',
|
|
27
|
+
'opencode': 'OpenCode',
|
|
23
28
|
'cursor': 'Cursor',
|
|
24
29
|
'gemini-cli': 'Gemini CLI',
|
|
25
30
|
'windsurf': 'Windsurf',
|
|
@@ -56,58 +61,60 @@ function validateDispatch(task, project, force = false) {
|
|
|
56
61
|
return null; // All validations passed
|
|
57
62
|
}
|
|
58
63
|
// ─── Task File Generation ───────────────────────────────────────────────────
|
|
59
|
-
function
|
|
64
|
+
function buildDoneCriteria(task) {
|
|
65
|
+
const criteria = [
|
|
66
|
+
'Complete the requested scope only.',
|
|
67
|
+
'Preserve unrelated existing changes.',
|
|
68
|
+
'Report verification evidence before claiming completion.',
|
|
69
|
+
];
|
|
70
|
+
if (task.skill) {
|
|
71
|
+
criteria.unshift(`Follow the workflow guidance from skill "${task.skill}" when it applies.`);
|
|
72
|
+
}
|
|
73
|
+
return criteria;
|
|
74
|
+
}
|
|
75
|
+
function generateTaskEnvelope(task, project, dashboardPort = 6969) {
|
|
60
76
|
const agentName = AGENT_DISPLAY[task.agent] || task.agent;
|
|
61
77
|
const skillPrefix = AGENT_SKILL_PREFIX[task.agent] || '';
|
|
62
78
|
const skillSuffix = task.agent === 'antigravity' || task.agent === 'gemini-cli' ? ']' : '';
|
|
63
79
|
const skillRef = task.skill ? `${skillPrefix}${task.skill}${skillSuffix}` : 'None';
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
80
|
+
return {
|
|
81
|
+
schema: 'codymaster-task@2',
|
|
82
|
+
task: {
|
|
83
|
+
id: task.id,
|
|
84
|
+
title: task.title,
|
|
85
|
+
description: task.description || '',
|
|
86
|
+
priority: task.priority,
|
|
87
|
+
createdAt: task.createdAt,
|
|
88
|
+
dispatchedAt: new Date().toISOString(),
|
|
89
|
+
},
|
|
90
|
+
execution: {
|
|
91
|
+
agent: agentName,
|
|
92
|
+
workspace: project.path,
|
|
93
|
+
skill: task.skill || null,
|
|
94
|
+
skillInvocation: task.skill ? skillRef : null,
|
|
95
|
+
doneCriteria: buildDoneCriteria(task),
|
|
96
|
+
},
|
|
97
|
+
project: {
|
|
98
|
+
id: project.id,
|
|
99
|
+
name: project.name,
|
|
100
|
+
},
|
|
101
|
+
progressReporting: {
|
|
102
|
+
baseUrl: `http://localhost:${dashboardPort}`,
|
|
103
|
+
inProgress: {
|
|
104
|
+
method: 'PUT',
|
|
105
|
+
path: `/api/tasks/${task.id}/move`,
|
|
106
|
+
body: { column: 'in-progress' },
|
|
107
|
+
},
|
|
108
|
+
done: {
|
|
109
|
+
method: 'PUT',
|
|
110
|
+
path: `/api/tasks/${task.id}/move`,
|
|
111
|
+
body: { column: 'done' },
|
|
112
|
+
},
|
|
113
|
+
},
|
|
67
114
|
};
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|-------|-------|
|
|
72
|
-
| Agent | ${agentName} |
|
|
73
|
-
| Skill | ${skillRef} |
|
|
74
|
-
| Priority | ${priorityEmoji[task.priority] || '🟡'} ${task.priority} |
|
|
75
|
-
| Project | ${project.name} |
|
|
76
|
-
| Created | ${task.createdAt} |
|
|
77
|
-
| Dispatched | ${now} |
|
|
78
|
-
| Task ID | ${task.id} |
|
|
79
|
-
|
|
80
|
-
## Description
|
|
81
|
-
|
|
82
|
-
${task.description || 'No additional description provided.'}
|
|
83
|
-
|
|
84
|
-
## Instructions
|
|
85
|
-
|
|
86
|
-
Execute this task in the project workspace at: \`${project.path}\`
|
|
87
|
-
`;
|
|
88
|
-
if (task.skill) {
|
|
89
|
-
content += `
|
|
90
|
-
Use the skill \`${task.skill}\` to guide execution. Invoke it with: ${skillRef}
|
|
91
|
-
`;
|
|
92
|
-
}
|
|
93
|
-
content += `
|
|
94
|
-
## Progress Reporting
|
|
95
|
-
|
|
96
|
-
After completing the task, update the status via CodyMaster API:
|
|
97
|
-
|
|
98
|
-
\`\`\`bash
|
|
99
|
-
# Mark as in-progress
|
|
100
|
-
curl -s -X PUT http://localhost:${dashboardPort}/api/tasks/${task.id}/move \\
|
|
101
|
-
-H "Content-Type: application/json" \\
|
|
102
|
-
-d '{"column": "in-progress"}'
|
|
103
|
-
|
|
104
|
-
# Mark as done when complete
|
|
105
|
-
curl -s -X PUT http://localhost:${dashboardPort}/api/tasks/${task.id}/move \\
|
|
106
|
-
-H "Content-Type: application/json" \\
|
|
107
|
-
-d '{"column": "done"}'
|
|
108
|
-
\`\`\`
|
|
109
|
-
`;
|
|
110
|
-
return content;
|
|
115
|
+
}
|
|
116
|
+
function generateTaskFileContent(task, project, dashboardPort = 6969) {
|
|
117
|
+
return JSON.stringify(generateTaskEnvelope(task, project, dashboardPort), null, 2);
|
|
111
118
|
}
|
|
112
119
|
// ─── Dispatcher ─────────────────────────────────────────────────────────────
|
|
113
120
|
function dispatchTaskToAgent(task, project, force = false) {
|
|
@@ -156,6 +163,14 @@ function dispatchTaskToAgent(task, project, force = false) {
|
|
|
156
163
|
}
|
|
157
164
|
// Generate CLI command
|
|
158
165
|
const relativePath = path_1.default.relative(project.path, filePath);
|
|
159
|
-
const
|
|
166
|
+
const AGENT_CLI = {
|
|
167
|
+
'antigravity': `antigravity -p "$(cat \\"${relativePath}\\")"`,
|
|
168
|
+
'codex': `codex exec "$(cat \\"${relativePath}\\")"`,
|
|
169
|
+
'opencode': `opencode --task "${relativePath}"`,
|
|
170
|
+
'cursor': `cursor --task "${relativePath}"`,
|
|
171
|
+
'gemini-cli': `gemini run --task "${relativePath}"`,
|
|
172
|
+
'claude-code': `claude -p "$(cat \\"${relativePath}\\")"`,
|
|
173
|
+
};
|
|
174
|
+
const cliCommand = AGENT_CLI[task.agent] || `# Open and run: ${relativePath}`;
|
|
160
175
|
return { success: true, filePath, prompt: content, cliCommand };
|
|
161
176
|
}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.registerBrainCommands = registerBrainCommands;
|
|
4
4
|
const smart_brain_router_1 = require("../../smart-brain-router");
|
|
5
5
|
const skill_execution_cache_1 = require("../../skill-execution-cache");
|
|
6
|
+
const skill_token_report_1 = require("../../skill-token-report");
|
|
6
7
|
const token_budget_1 = require("../../token-budget");
|
|
7
8
|
// ─── Brain & Token CLI Commands ──────────────────────────────────────────────
|
|
8
9
|
function registerBrainCommands(program) {
|
|
@@ -27,6 +28,23 @@ function registerBrainCommands(program) {
|
|
|
27
28
|
const token = program
|
|
28
29
|
.command('token')
|
|
29
30
|
.description('Token usage analysis and savings tracking');
|
|
31
|
+
token
|
|
32
|
+
.command('skill <skillName>')
|
|
33
|
+
.description('Show token footprint for a skill SKILL.md and direct references/')
|
|
34
|
+
.option('-p, --project <path>', 'Project path', process.cwd())
|
|
35
|
+
.option('--json', 'Emit stable JSON output', false)
|
|
36
|
+
.option('--baseline <file>', 'Compare against a legacy monolithic file')
|
|
37
|
+
.action((skillName, opts) => {
|
|
38
|
+
const report = (0, skill_token_report_1.analyzeSkillTokenFootprint)(skillName, {
|
|
39
|
+
projectPath: opts.project,
|
|
40
|
+
baselinePath: opts.baseline,
|
|
41
|
+
});
|
|
42
|
+
if (opts.json) {
|
|
43
|
+
console.log(JSON.stringify(report, null, 2));
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
console.log((0, skill_token_report_1.formatSkillTokenReport)(report));
|
|
47
|
+
});
|
|
30
48
|
token
|
|
31
49
|
.command('report')
|
|
32
50
|
.description('Show current token budget allocation')
|
|
@@ -44,7 +44,7 @@ Implement the chosen variant using existing design system tokens. …
|
|
|
44
44
|
`;
|
|
45
45
|
const README = `# .cm/design-studio
|
|
46
46
|
|
|
47
|
-
Local artifact folder for **
|
|
47
|
+
Local artifact folder for the **design-studio** flow: variants, checklist, handoff.
|
|
48
48
|
|
|
49
49
|
Happy path:
|
|
50
50
|
|
package/dist/cm-suggest.js
CHANGED
|
@@ -50,13 +50,13 @@ function suggestFromContext(projectPath) {
|
|
|
50
50
|
out.push({ skill: 'cm-dockit', reason: 'Markdown/docs paths changed.' });
|
|
51
51
|
}
|
|
52
52
|
if (/(package\.json|package-lock\.json|pnpm-lock|yarn\.lock)/m.test(joined)) {
|
|
53
|
-
out.push({ skill: 'cm-
|
|
53
|
+
out.push({ skill: 'cm-quality-gate', reason: 'Dependency lockfiles changed; run the verification gate.' });
|
|
54
54
|
}
|
|
55
55
|
if (/(\.github\/workflows\/|Dockerfile|fly\.toml|wrangler)/m.test(joined)) {
|
|
56
56
|
out.push({ skill: 'cm-safe-deploy', reason: 'CI or deploy config changed.' });
|
|
57
57
|
}
|
|
58
58
|
if (lines.length > 8) {
|
|
59
|
-
out.push({ skill: 'cm-
|
|
59
|
+
out.push({ skill: 'cm-execution', reason: 'Many working-tree changes; consider isolated execution or a clean workspace.' });
|
|
60
60
|
}
|
|
61
61
|
const sprint = (0, sprint_pipeline_1.readSprintState)(root);
|
|
62
62
|
if (sprint && sprint.current_index >= 0 && sprint.current_index < sprint.pipeline.length) {
|
|
@@ -69,7 +69,7 @@ function suggestFromContext(projectPath) {
|
|
|
69
69
|
}
|
|
70
70
|
if (fs_1.default.existsSync(path_1.default.join(root, '.cm', 'config.yaml'))) {
|
|
71
71
|
out.push({
|
|
72
|
-
skill: 'cm-engineering
|
|
72
|
+
skill: 'cm-mcp-engineering',
|
|
73
73
|
reason: '`.cm/config.yaml` present; engineering commands honor shared config.',
|
|
74
74
|
});
|
|
75
75
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getProjectActiveAgents = getProjectActiveAgents;
|
|
4
|
+
function getProjectActiveAgents(project, tasks) {
|
|
5
|
+
return [...new Set([
|
|
6
|
+
...(Array.isArray(project.agents) ? project.agents : []),
|
|
7
|
+
...tasks.map(t => t.agent).filter(Boolean),
|
|
8
|
+
])];
|
|
9
|
+
}
|
package/dist/dashboard.js
CHANGED
|
@@ -22,13 +22,15 @@ const skill_chain_1 = require("./skill-chain");
|
|
|
22
22
|
const validate_1 = require("./schemas/validate");
|
|
23
23
|
const task_schema_1 = require("./schemas/task-schema");
|
|
24
24
|
const security_headers_1 = require("./middleware/security-headers");
|
|
25
|
+
const dashboard_project_summary_1 = require("./dashboard-project-summary");
|
|
25
26
|
// ─── Dashboard Server ───────────────────────────────────────────────────────
|
|
26
27
|
function launchDashboard(port = data_1.DEFAULT_PORT, silent = false) {
|
|
27
28
|
const app = (0, express_1.default)();
|
|
28
29
|
app.disable('x-powered-by');
|
|
29
30
|
app.use((0, security_headers_1.securityHeaders)());
|
|
30
31
|
app.use(express_1.default.json({ limit: '1mb' }));
|
|
31
|
-
|
|
32
|
+
// Default to 'warn' to keep CLI clean; opt-in verbose via CM_LOG_LEVEL=info|debug|trace
|
|
33
|
+
const logger = (0, pino_1.default)({ level: process.env.CM_LOG_LEVEL || 'warn' });
|
|
32
34
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
33
35
|
app.use((0, pino_http_1.default)({ logger: logger }));
|
|
34
36
|
const publicDir = path_1.default.join(__dirname, '..', 'public', 'dashboard');
|
|
@@ -38,7 +40,7 @@ function launchDashboard(port = data_1.DEFAULT_PORT, silent = false) {
|
|
|
38
40
|
const data = (0, data_1.loadData)();
|
|
39
41
|
const enriched = data.projects.map(p => {
|
|
40
42
|
const pt = data.tasks.filter(t => t.projectId === p.id);
|
|
41
|
-
return Object.assign(Object.assign({}, p), { taskCount: pt.length, doneCount: pt.filter(t => t.column === 'done').length, activeAgents:
|
|
43
|
+
return Object.assign(Object.assign({}, p), { taskCount: pt.length, doneCount: pt.filter(t => t.column === 'done').length, activeAgents: (0, dashboard_project_summary_1.getProjectActiveAgents)(p, pt) });
|
|
42
44
|
});
|
|
43
45
|
res.json(enriched);
|
|
44
46
|
});
|
|
@@ -939,7 +941,11 @@ function launchDashboard(port = data_1.DEFAULT_PORT, silent = false) {
|
|
|
939
941
|
res.status(404).json({ error: 'not found' });
|
|
940
942
|
});
|
|
941
943
|
app.get('/{*path}', (_req, res) => {
|
|
942
|
-
res.sendFile(path_1.default.join(publicDir, 'index.html'))
|
|
944
|
+
res.sendFile(path_1.default.join(publicDir, 'index.html'), (err) => {
|
|
945
|
+
if (err && !res.headersSent) {
|
|
946
|
+
res.status(500).send('Internal Server Error');
|
|
947
|
+
}
|
|
948
|
+
});
|
|
943
949
|
});
|
|
944
950
|
// ─── Start Server ─────────────────────────────────────────────────────
|
|
945
951
|
const server = app.listen(port, '127.0.0.1', () => {
|
|
@@ -948,13 +954,13 @@ function launchDashboard(port = data_1.DEFAULT_PORT, silent = false) {
|
|
|
948
954
|
}
|
|
949
955
|
catch (_a) { }
|
|
950
956
|
if (!silent) {
|
|
951
|
-
console.log(chalk_1.default.cyan(`\n🚀 Mission Control at http://
|
|
957
|
+
console.log(chalk_1.default.cyan(`\n🚀 Mission Control at http://localhost:${port}`));
|
|
952
958
|
console.log(chalk_1.default.gray(` Data: ${data_1.DATA_FILE}`));
|
|
953
959
|
console.log(chalk_1.default.gray(` Press Ctrl+C to stop.\n`));
|
|
954
960
|
}
|
|
955
961
|
else {
|
|
956
962
|
// Silent auto-start: just a subtle hint
|
|
957
|
-
console.log(chalk_1.default.gray(` 📊 Dashboard auto-started → http://
|
|
963
|
+
console.log(chalk_1.default.gray(` 📊 Dashboard auto-started → http://localhost:${port}`));
|
|
958
964
|
}
|
|
959
965
|
});
|
|
960
966
|
(0, ws_hub_1.initWsHub)(server);
|
|
@@ -10,6 +10,7 @@ const path_1 = __importDefault(require("path"));
|
|
|
10
10
|
const context_bus_1 = require("./context-bus");
|
|
11
11
|
const storage_backend_1 = require("./storage-backend");
|
|
12
12
|
const retro_summary_1 = require("./retro-summary");
|
|
13
|
+
const skill_execution_cache_1 = require("./skill-execution-cache");
|
|
13
14
|
function bucketLatency(latencyMs) {
|
|
14
15
|
if (latencyMs === undefined || latencyMs < 0)
|
|
15
16
|
return undefined;
|
|
@@ -106,9 +107,11 @@ class ExecutionAnalyzer {
|
|
|
106
107
|
this.projectPath = projectPath;
|
|
107
108
|
this.backend = backend !== null && backend !== void 0 ? backend : (0, storage_backend_1.getBackend)(projectPath);
|
|
108
109
|
this.backend.initialize();
|
|
110
|
+
this.cache = new skill_execution_cache_1.SkillExecutionCache(projectPath);
|
|
111
|
+
this.cache.initialize();
|
|
109
112
|
}
|
|
110
113
|
analyzeExecution(input) {
|
|
111
|
-
var _a, _b, _c;
|
|
114
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
112
115
|
const judgments = normalizeJudgments(input);
|
|
113
116
|
const bus = (0, context_bus_1.readBus)(this.projectPath);
|
|
114
117
|
const retroSummary = buildRetroSummary(this.projectPath);
|
|
@@ -132,6 +135,11 @@ class ExecutionAnalyzer {
|
|
|
132
135
|
created_at: new Date().toISOString(),
|
|
133
136
|
};
|
|
134
137
|
this.backend.recordExecutionAnalysis(analysis);
|
|
138
|
+
if (input.taskStatus === 'completed' && ((_e = (_d = input.selectedSkills) === null || _d === void 0 ? void 0 : _d.length) !== null && _e !== void 0 ? _e : 0) > 0) {
|
|
139
|
+
const effectiveSkills = (_f = input.selectedSkills) !== null && _f !== void 0 ? _f : [];
|
|
140
|
+
const effectiveness = effectiveSkills.length > 0 ? 0.9 : 0;
|
|
141
|
+
this.cache.cacheExecution(input.taskTitle, effectiveSkills, effectiveness, (_g = input.tokenEstimate) !== null && _g !== void 0 ? _g : 0);
|
|
142
|
+
}
|
|
135
143
|
return analysis;
|
|
136
144
|
}
|
|
137
145
|
}
|