codymaster 5.2.0 → 7.0.1
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 +276 -0
- package/README.md +216 -333
- package/dist/agent/antigravity.js +152 -0
- package/dist/agent/backend.js +2 -0
- package/dist/agent/claude.js +196 -0
- package/dist/agent/codex.js +204 -0
- package/dist/agent/copilot.js +284 -0
- package/dist/agent/cursor.js +211 -0
- package/dist/agent/factory.js +30 -0
- package/dist/agent/gemini.js +142 -0
- package/dist/agent/opencode.js +205 -0
- package/dist/agent/spawn-helper.js +237 -0
- package/dist/agent/version.js +25 -0
- package/dist/browse/adapter-factory.js +69 -0
- package/dist/browse/adapters/agent-browser-adapter.js +305 -0
- package/dist/browse/adapters/playwright-adapter.js +309 -0
- package/dist/browse/adapters/types.js +6 -0
- package/dist/browse/error-collector.js +132 -0
- package/dist/browse/event-log.js +109 -0
- package/dist/browse/index.js +17 -0
- package/dist/browse-server.js +204 -120
- package/dist/cli/command-registry.js +12 -0
- package/dist/cli/commands/dashboard.js +76 -2
- package/dist/cli/commands/engineering.js +218 -4
- package/dist/cli/commands/install.js +160 -0
- package/dist/cli/commands/learn.js +181 -0
- package/dist/cli/commands/parallel.js +138 -0
- package/dist/cli/commands/quality.js +105 -0
- package/dist/cli/commands/stack.js +49 -0
- package/dist/cli/commands/update.js +159 -0
- package/dist/cli/update-check.js +94 -10
- package/dist/continuity.js +3 -1
- package/dist/dashboard.js +47 -6
- package/dist/data.js +35 -0
- package/dist/execution/tdd-gate.js +113 -0
- package/dist/executor/cancel.js +34 -0
- package/dist/executor/gc.js +74 -0
- package/dist/executor/index.js +14 -0
- package/dist/executor/runner.js +70 -0
- package/dist/executor/workdir.js +31 -0
- package/dist/handoff/contracts.js +22 -0
- package/dist/handoff/index.js +18 -0
- package/dist/handoff/io.js +121 -0
- package/dist/index.js +7 -3
- package/dist/indexer/stack-detect.js +219 -0
- package/dist/install/copy.js +98 -0
- package/dist/install/engine.js +42 -0
- package/dist/install/paths.js +70 -0
- package/dist/install/platforms/_simple.js +85 -0
- package/dist/install/platforms/antigravity.js +91 -0
- package/dist/install/platforms/claude-code.js +107 -0
- package/dist/install/platforms/cursor.js +77 -0
- package/dist/install/platforms/index.js +27 -0
- package/dist/install/platforms/simple.js +163 -0
- package/dist/install/profiles.js +75 -0
- package/dist/install/types.js +2 -0
- package/dist/learnings.js +208 -0
- package/dist/mcp-context-server.js +1 -1
- package/dist/middleware/metrics.js +30 -0
- package/dist/middleware/security-headers.js +14 -0
- package/dist/realtime/event-bus.js +29 -0
- package/dist/realtime/ws-hub.js +91 -0
- package/dist/schemas/task-schema.js +48 -0
- package/dist/schemas/validate.js +18 -0
- package/dist/skills-lock.js +96 -0
- package/dist/sprint-pipeline.js +26 -0
- package/dist/storage/index.js +21 -0
- package/dist/storage/repos/activity-repo.js +46 -0
- package/dist/storage/repos/message-repo.js +39 -0
- package/dist/storage/repos/project-repo.js +56 -0
- package/dist/storage/repos/task-repo.js +142 -0
- package/dist/storage/services/project-service.js +49 -0
- package/dist/storage/services/task-service.js +97 -0
- package/dist/storage/sqlite.js +113 -0
- package/dist/tier-classify.js +131 -0
- package/dist/ui/onboarding.js +51 -15
- package/dist/utils/cli-utils.js +7 -2
- package/dist/utils/design-taste.js +108 -0
- package/dist/utils/output-compress.js +143 -0
- package/dist/vibecoding-index.js +126 -0
- package/package.json +27 -4
- package/public/dashboard/app.js +52 -1
- package/scripts/build-skills-lock.mjs +88 -0
- package/scripts/build-skills.mjs +187 -28
- package/scripts/compress-skill.mjs +73 -0
- package/scripts/deprecate-skill.mjs +72 -0
- package/scripts/install.sh +170 -0
- package/scripts/mcp-bridge.js +2 -2
- package/scripts/postinstall.js +54 -287
- package/scripts/release.sh +126 -0
- package/scripts/update-changelog.sh +88 -0
- package/scripts/validate-skills.mjs +101 -4
- package/skills/_shared/SKILL_TEMPLATE.md +62 -0
- package/skills/cm-autopilot/scripts/autopilot.py +19 -2
- package/skills/cm-brainstorm-idea/SKILL.md +9 -0
- package/skills/cm-clean-code/SKILL.md +20 -0
- package/skills/cm-code-review/SKILL.md +21 -0
- package/skills/cm-codeintell/SKILL.md +9 -0
- package/skills/cm-conductor-worktrees/SKILL.archive.md +28 -0
- package/skills/cm-conductor-worktrees/SKILL.md +17 -19
- package/skills/cm-continuity/SKILL.md +9 -0
- package/skills/cm-dashboard/SKILL.archive.md +15 -0
- package/skills/cm-dashboard/SKILL.md +20 -9
- package/skills/cm-dashboard/ui/app.js +9 -1
- package/skills/cm-debugging/SKILL.md +9 -0
- package/skills/cm-design-studio/SKILL.archive.md +34 -0
- package/skills/cm-design-studio/SKILL.md +17 -25
- package/skills/cm-design-system/SKILL.md +1 -0
- package/skills/cm-engineering-meta/SKILL.archive.md +73 -0
- package/skills/cm-engineering-meta/SKILL.md +16 -63
- package/skills/cm-execution/SKILL.md +98 -0
- package/skills/cm-git-worktrees/SKILL.archive.md +157 -0
- package/skills/cm-git-worktrees/SKILL.md +15 -146
- package/skills/cm-identity-guard/SKILL.md +8 -0
- package/skills/cm-planning/SKILL.md +63 -92
- package/skills/cm-post-deploy-canary/SKILL.archive.md +22 -0
- package/skills/cm-post-deploy-canary/SKILL.md +17 -13
- package/skills/cm-qa-visual-cli/SKILL.archive.md +22 -0
- package/skills/cm-qa-visual-cli/SKILL.md +16 -12
- package/skills/cm-quality-gate/SKILL.md +38 -0
- package/skills/cm-safe-deploy/SKILL.md +9 -0
- package/skills/cm-second-opinion-cli/SKILL.archive.md +23 -0
- package/skills/cm-second-opinion-cli/SKILL.md +17 -14
- package/skills/cm-secret-shield/SKILL.archive.md +580 -0
- package/skills/cm-secret-shield/SKILL.md +15 -569
- package/skills/cm-security-gate/SKILL.archive.md +239 -0
- package/skills/cm-security-gate/SKILL.md +15 -228
- package/skills/cm-skill-health/SKILL.archive.md +83 -0
- package/skills/cm-skill-health/SKILL.md +16 -73
- package/skills/cm-skill-index/SKILL.md +8 -0
- package/skills/cm-skill-mastery/SKILL.archive.md +156 -0
- package/skills/cm-skill-mastery/SKILL.md +16 -146
- package/skills/cm-skill-search/SKILL.archive.md +49 -0
- package/skills/cm-skill-search/SKILL.md +17 -40
- package/skills/cm-skill-share/SKILL.archive.md +58 -0
- package/skills/cm-skill-share/SKILL.md +17 -49
- package/skills/cm-sprint-bus/SKILL.md +9 -0
- package/skills/cm-start/SKILL.md +17 -0
- package/skills/cm-tdd/SKILL.md +19 -0
- package/skills/cm-terminal/SKILL.md +15 -0
- package/skills/cm-test-gate/SKILL.archive.md +245 -0
- package/skills/cm-test-gate/SKILL.md +15 -234
- package/skills/cm-ui-preview/SKILL.archive.md +153 -0
- package/skills/cm-ui-preview/SKILL.md +16 -143
- package/skills/cm-ux-master/cli/uxmaster/commands/mcp.py +1 -1
- package/skills/cm-ux-master/mcp/mcp-config.json +1 -1
- package/skills/cm-ux-master/mcp/server.py +2 -2
- package/skills/profiles/design.txt +1 -1
- package/skills/profiles/full.txt +0 -10
- package/skills/profiles/growth.txt +8 -8
- package/skills/profiles/knowledge.txt +1 -1
- package/skills/profiles/top35.json +41 -0
- package/adapters/antigravity.js +0 -15
- package/adapters/claude-code.js +0 -17
- package/adapters/cursor.js +0 -16
- package/skills/cm-ads-tracker/SKILL.md +0 -401
- package/skills/cm-ads-tracker/evals/evals.json +0 -55
- package/skills/cm-ads-tracker/references/gtm-architecture.md +0 -321
- package/skills/cm-ads-tracker/references/industry-events.md +0 -294
- package/skills/cm-ads-tracker/references/platforms-api.md +0 -238
- package/skills/cm-ads-tracker/templates/capi-payload.md +0 -79
- package/skills/cm-ads-tracker/templates/datalayer-push.js +0 -104
- package/skills/cm-ads-tracker/templates/gtm-variables.js +0 -56
- package/skills/cm-auto-publisher/SKILL.md +0 -81
- package/skills/cm-booking-calendar/SKILL.md +0 -521
- package/skills/cm-booking-calendar/references/industry-patterns.md +0 -527
- package/skills/cm-booking-calendar/templates/booking-form.css +0 -626
- package/skills/cm-booking-calendar/templates/booking-form.html +0 -477
- package/skills/cm-booking-calendar/templates/calendar-engine.js +0 -419
- package/skills/cm-booking-calendar/templates/calendar-export.js +0 -395
- package/skills/cm-booking-calendar/templates/reminder-config.js +0 -629
- package/skills/cm-content-factory/.content-factory-state.json +0 -132
- package/skills/cm-content-factory/.git 2/logs/refs/heads/main +0 -1
- package/skills/cm-content-factory/.git 2/logs/refs/remotes/origin/main +0 -1
- 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 +0 -5
- 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 +0 -1
- package/skills/cm-content-factory/.git 2/refs/remotes/origin/main +0 -1
- package/skills/cm-content-factory/.pytest_cache 2/v/cache/nodeids +0 -76
- package/skills/cm-content-factory/.pytest_cache 2/v/cache/stepwise +0 -1
- package/skills/cm-content-factory/AGENTS.md +0 -61
- package/skills/cm-content-factory/CLAUDE.md +0 -63
- package/skills/cm-content-factory/CURSOR.md +0 -43
- package/skills/cm-content-factory/Content Factory.zip +0 -0
- package/skills/cm-content-factory/SKILL.md +0 -416
- package/skills/cm-content-factory/cf +0 -313
- package/skills/cm-content-factory/config.schema.json +0 -397
- package/skills/cm-content-factory/dashboard/app.js +0 -556
- package/skills/cm-content-factory/dashboard/index.html +0 -397
- package/skills/cm-content-factory/dashboard/style.css +0 -1211
- package/skills/cm-content-factory/examples/01-real-estate.config.json +0 -146
- package/skills/cm-content-factory/examples/02-personal-finance.config.json +0 -146
- package/skills/cm-content-factory/examples/03-health-wellness.config.json +0 -147
- package/skills/cm-content-factory/examples/04-saas-software.config.json +0 -147
- package/skills/cm-content-factory/examples/05-legal-services.config.json +0 -147
- package/skills/cm-content-factory/examples/06-insurance.config.json +0 -146
- package/skills/cm-content-factory/examples/07-ecommerce-dropship.config.json +0 -146
- package/skills/cm-content-factory/examples/08-online-education.config.json +0 -147
- package/skills/cm-content-factory/examples/09-crypto-defi.config.json +0 -147
- package/skills/cm-content-factory/examples/10-beauty-skincare.config.json +0 -147
- package/skills/cm-content-factory/examples/11-home-services.config.json +0 -146
- package/skills/cm-content-factory/examples/12-dental-clinic.config.json +0 -147
- package/skills/cm-content-factory/examples/13-pet-care.config.json +0 -147
- package/skills/cm-content-factory/examples/14-travel-hospitality.config.json +0 -147
- package/skills/cm-content-factory/examples/15-ai-automation.config.json +0 -147
- package/skills/cm-content-factory/examples/16-wedding-events.config.json +0 -147
- package/skills/cm-content-factory/examples/17-fitness-coaching.config.json +0 -148
- package/skills/cm-content-factory/examples/18-cybersecurity.config.json +0 -147
- package/skills/cm-content-factory/examples/19-food-restaurant.config.json +0 -148
- package/skills/cm-content-factory/examples/20-solar-energy.config.json +0 -147
- package/skills/cm-content-factory/examples/fitness-blog.config.json +0 -116
- package/skills/cm-content-factory/examples/tech-blog.config.json +0 -107
- package/skills/cm-content-factory/extensions/EXTENSION_GUIDE.md +0 -72
- package/skills/cm-content-factory/extensions/hooks.py +0 -126
- package/skills/cm-content-factory/extensions/openclaw_adapter.py +0 -132
- package/skills/cm-content-factory/landing/docs/content/changelog.md +0 -36
- package/skills/cm-content-factory/landing/docs/content/deployment.md +0 -46
- package/skills/cm-content-factory/landing/docs/content/execution-flow.md +0 -67
- package/skills/cm-content-factory/landing/docs/content/memory-system.md +0 -38
- package/skills/cm-content-factory/landing/docs/content/openspace.md +0 -27
- package/skills/cm-content-factory/landing/docs/content/use-cases.md +0 -26
- package/skills/cm-content-factory/landing/docs/content/v5-intro.md +0 -28
- package/skills/cm-content-factory/landing/docs/index.html +0 -240
- package/skills/cm-content-factory/landing/index.html +0 -680
- package/skills/cm-content-factory/landing/script.js +0 -143
- package/skills/cm-content-factory/landing/style.css +0 -1216
- package/skills/cm-content-factory/landing/translations.js +0 -508
- package/skills/cm-content-factory/logs/events.jsonl +0 -11
- package/skills/cm-content-factory/profiles/_template.profile.json +0 -231
- package/skills/cm-content-factory/profiles/finance.profile.json +0 -278
- package/skills/cm-content-factory/profiles/legal.profile.json +0 -263
- package/skills/cm-content-factory/profiles/medical-research.profile.json +0 -321
- package/skills/cm-content-factory/profiles/technology.profile.json +0 -275
- package/skills/cm-content-factory/scripts/agent_dispatcher.py +0 -266
- package/skills/cm-content-factory/scripts/audit.py +0 -106
- package/skills/cm-content-factory/scripts/dashboard_server.py +0 -225
- package/skills/cm-content-factory/scripts/deploy.py +0 -146
- package/skills/cm-content-factory/scripts/extract.py +0 -132
- package/skills/cm-content-factory/scripts/landing_generator.py +0 -459
- package/skills/cm-content-factory/scripts/memory.py +0 -521
- package/skills/cm-content-factory/scripts/monetize.py +0 -239
- package/skills/cm-content-factory/scripts/pipeline.py +0 -357
- package/skills/cm-content-factory/scripts/plan.py +0 -163
- package/skills/cm-content-factory/scripts/publish.py +0 -145
- package/skills/cm-content-factory/scripts/research.py +0 -337
- package/skills/cm-content-factory/scripts/scaffold.py +0 -464
- package/skills/cm-content-factory/scripts/scoreboard.py +0 -336
- package/skills/cm-content-factory/scripts/seo.py +0 -90
- package/skills/cm-content-factory/scripts/state_manager.py +0 -320
- package/skills/cm-content-factory/scripts/token_manager.py +0 -268
- package/skills/cm-content-factory/scripts/validate.py +0 -221
- package/skills/cm-content-factory/scripts/wizard.py +0 -329
- package/skills/cm-content-factory/scripts/write.py +0 -93
- 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 +0 -90
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/data-flow.md +0 -54
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/deployment.md +0 -38
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/index.md +0 -65
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/lc-content-lifecycle.md +0 -48
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/seq-write-mode.md +0 -39
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/uj-first-batch.md +0 -42
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/wf-content-pipeline.md +0 -51
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/wf-learning-cycle.md +0 -52
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/configuration.md +0 -86
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/installation.md +0 -80
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/intro.md +0 -58
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/index.md +0 -102
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/index.md +0 -45
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/optimize-seo.md +0 -29
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/scale-content-production.md +0 -55
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/standardize-quality.md +0 -29
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/buyer-cmo-huong.md +0 -41
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/buyer-content-lead-khoa.md +0 -40
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/index.md +0 -56
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-content-manager-lan.md +0 -46
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-seo-minh.md +0 -45
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-writer-tu.md +0 -45
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/content-pipeline.md +0 -108
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/index.md +0 -22
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/memory-system.md +0 -52
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/seo-optimization.md +0 -58
- package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/troubleshooting-guide.md +0 -92
- package/skills/cm-content-factory/sites/docs-site/src/styles/custom.css +0 -575
- package/skills/cm-content-factory/tests/conftest.py +0 -66
- package/skills/cm-content-factory/tests/test_agent_dispatcher.py +0 -125
- package/skills/cm-content-factory/tests/test_memory.py +0 -128
- package/skills/cm-content-factory/tests/test_pipeline.py +0 -107
- package/skills/cm-content-factory/tests/test_research.py +0 -56
- package/skills/cm-content-factory/tests/test_state_manager.py +0 -131
- package/skills/cm-content-factory/tests/test_token_manager.py +0 -110
- package/skills/cm-content-factory/tests/test_wizard.py +0 -121
- package/skills/cm-cro-methodology/SKILL.md +0 -290
- package/skills/cm-cro-methodology/references/COPYWRITING.md +0 -178
- package/skills/cm-cro-methodology/references/OBJECTIONS.md +0 -135
- package/skills/cm-cro-methodology/references/PERSUASION.md +0 -158
- package/skills/cm-cro-methodology/references/RESEARCH.md +0 -220
- package/skills/cm-cro-methodology/references/funnel-analysis.md +0 -365
- package/skills/cm-cro-methodology/references/testing-methodology.md +0 -330
- package/skills/cm-google-form/SKILL.md +0 -266
- package/skills/cm-google-form/templates/apps-script.js +0 -55
- package/skills/cm-google-form/templates/form-markup.html +0 -110
- package/skills/cm-google-form/templates/form-submit.js +0 -201
- package/skills/cm-google-form/templates/toast.css +0 -152
- package/skills/cm-growth-hacking/SKILL.md +0 -282
- package/skills/cm-growth-hacking/bottom-sheet-engine.md +0 -261
- package/skills/cm-growth-hacking/calendar-integration.md +0 -264
- package/skills/cm-growth-hacking/references/engagement-patterns.md +0 -346
- package/skills/cm-growth-hacking/templates/bottom-sheet.css +0 -528
- package/skills/cm-growth-hacking/templates/bottom-sheet.js +0 -269
- package/skills/cm-growth-hacking/templates/calendar-cta.js +0 -213
- package/skills/cm-growth-hacking/templates/tracking-events.js +0 -211
- package/skills/cm-growth-hacking/templates/trigger-manager.js +0 -254
- package/skills/cm-growth-hacking/tracking-events.md +0 -246
- package/skills/cm-growth-hacking/trigger-system.md +0 -342
- package/skills/cm-jtbd/SKILL.md +0 -98
- package/skills/cm-notebooklm/SKILL.md +0 -156
- package/skills/cm-notebooklm/references/command_reference.md +0 -94
- package/skills/cm-notebooklm/references/workflows.md +0 -60
- package/skills/cm-notebooklm/resources/knowledge_sources.md +0 -106
- package/skills/cm-notebooklm/scripts/brain-sync.sh +0 -453
- package/skills/cm-notebooklm/scripts/graduate_wisdom.py +0 -101
- package/skills/cm-readit/SKILL.md +0 -289
- package/skills/cm-readit/audio-player.md +0 -206
- package/skills/cm-readit/examples/blog-reader.js +0 -352
- package/skills/cm-readit/examples/voice-cro.js +0 -390
- package/skills/cm-readit/tts-engine.md +0 -262
- package/skills/cm-readit/ui-patterns.md +0 -362
- package/skills/cm-readit/voice-cro.md +0 -223
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* cm parallel — Execute tasks in parallel using Gemini CLI
|
|
4
|
+
*
|
|
5
|
+
* TRIZ Principle #1 (Segmentation):
|
|
6
|
+
* Split task into independent subtasks, run in parallel.
|
|
7
|
+
*
|
|
8
|
+
* TRIZ Principle #15 (Dynamicity):
|
|
9
|
+
* Adapt batch size based on task complexity.
|
|
10
|
+
*/
|
|
11
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
12
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
13
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
14
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
15
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
16
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
17
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
21
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
22
|
+
};
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.registerParallelCommands = registerParallelCommands;
|
|
25
|
+
const child_process_1 = require("child_process");
|
|
26
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
27
|
+
const box_1 = require("../../ui/box");
|
|
28
|
+
function registerParallelCommands(program) {
|
|
29
|
+
program
|
|
30
|
+
.command('parallel <task>')
|
|
31
|
+
.description('Execute task in parallel using Gemini CLI')
|
|
32
|
+
.option('-n, --count <n>', 'Number of parallel instances', '3')
|
|
33
|
+
.option('-c, --context <files>', 'Context files to include (comma-separated)')
|
|
34
|
+
.option('-m, --model <model>', 'Gemini model to use', 'gemini-2.0-flash')
|
|
35
|
+
.option('--timeout <ms>', 'Timeout per instance in milliseconds', '120000')
|
|
36
|
+
.action((task, opts) => __awaiter(this, void 0, void 0, function* () {
|
|
37
|
+
const count = parseInt(opts.count, 10);
|
|
38
|
+
const timeout = parseInt(opts.timeout, 10);
|
|
39
|
+
console.log((0, box_1.renderCommandHeader)('Parallel Execution', '⚡'));
|
|
40
|
+
console.log(chalk_1.default.dim(` Task: ${task}`));
|
|
41
|
+
console.log(chalk_1.default.dim(` Instances: ${count}`));
|
|
42
|
+
console.log(chalk_1.default.dim(` Model: ${opts.model}`));
|
|
43
|
+
console.log('');
|
|
44
|
+
// Check if gemini CLI is available
|
|
45
|
+
const geminiAvailable = yield checkGeminiCli();
|
|
46
|
+
if (!geminiAvailable) {
|
|
47
|
+
console.log(chalk_1.default.yellow('⚠ Gemini CLI not found. Falling back to single-agent execution.'));
|
|
48
|
+
console.log(chalk_1.default.dim('Install: npm install -g @anthropic-ai/gemini-cli'));
|
|
49
|
+
console.log('');
|
|
50
|
+
yield executeSingleAgent(task, opts);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
// Execute in parallel
|
|
54
|
+
const results = yield executeParallel(task, count, opts);
|
|
55
|
+
// Display results
|
|
56
|
+
console.log(chalk_1.default.bold('\n📊 Results:\n'));
|
|
57
|
+
for (const result of results) {
|
|
58
|
+
const status = result.exitCode === 0 ? chalk_1.default.green('✅') : chalk_1.default.red('❌');
|
|
59
|
+
console.log(` ${status} Instance ${result.instance}: exit=${result.exitCode}`);
|
|
60
|
+
if (result.output) {
|
|
61
|
+
console.log(chalk_1.default.dim(` ${result.output.slice(0, 100)}...`));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// Summary
|
|
65
|
+
const passed = results.filter(r => r.exitCode === 0).length;
|
|
66
|
+
const failed = results.filter(r => r.exitCode !== 0).length;
|
|
67
|
+
console.log('');
|
|
68
|
+
console.log(chalk_1.default.bold(` Summary: ${chalk_1.default.green(`${passed} passed`)} / ${chalk_1.default.red(`${failed} failed`)}`));
|
|
69
|
+
}));
|
|
70
|
+
}
|
|
71
|
+
function checkGeminiCli() {
|
|
72
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
73
|
+
return new Promise((resolve) => {
|
|
74
|
+
const proc = (0, child_process_1.spawn)('which', ['gemini'], { stdio: 'pipe' });
|
|
75
|
+
proc.on('close', (code) => resolve(code === 0));
|
|
76
|
+
proc.on('error', () => resolve(false));
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
function executeParallel(task, count, opts) {
|
|
81
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
82
|
+
const results = [];
|
|
83
|
+
const promises = [];
|
|
84
|
+
for (let i = 1; i <= count; i++) {
|
|
85
|
+
promises.push(executeInstance(task, i, opts));
|
|
86
|
+
}
|
|
87
|
+
return Promise.all(promises);
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
function executeInstance(task, instance, opts) {
|
|
91
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
92
|
+
return new Promise((resolve) => {
|
|
93
|
+
const args = [
|
|
94
|
+
'-p', `Instance ${instance}: ${task}`,
|
|
95
|
+
'--model', opts.model,
|
|
96
|
+
];
|
|
97
|
+
if (opts.context) {
|
|
98
|
+
args.push('--context', opts.context);
|
|
99
|
+
}
|
|
100
|
+
const proc = (0, child_process_1.spawn)('gemini', args, {
|
|
101
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
102
|
+
timeout: parseInt(opts.timeout, 10),
|
|
103
|
+
});
|
|
104
|
+
let output = '';
|
|
105
|
+
let error = '';
|
|
106
|
+
proc.stdout.on('data', (data) => {
|
|
107
|
+
output += data.toString();
|
|
108
|
+
});
|
|
109
|
+
proc.stderr.on('data', (data) => {
|
|
110
|
+
error += data.toString();
|
|
111
|
+
});
|
|
112
|
+
proc.on('close', (code) => {
|
|
113
|
+
resolve({
|
|
114
|
+
instance,
|
|
115
|
+
exitCode: code,
|
|
116
|
+
output: output.trim(),
|
|
117
|
+
error: error.trim(),
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
proc.on('error', (err) => {
|
|
121
|
+
resolve({
|
|
122
|
+
instance,
|
|
123
|
+
exitCode: 1,
|
|
124
|
+
output: '',
|
|
125
|
+
error: err.message,
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
function executeSingleAgent(task, opts) {
|
|
132
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
133
|
+
console.log(chalk_1.default.dim(' Executing with single agent...'));
|
|
134
|
+
// Fallback: just print the task for the AI agent to handle
|
|
135
|
+
console.log(chalk_1.default.bold(` Task: ${task}`));
|
|
136
|
+
console.log(chalk_1.default.dim(' (Single-agent mode — use Gemini CLI for parallel execution)'));
|
|
137
|
+
});
|
|
138
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* `cm quality` — Vibecoding Index CLI.
|
|
4
|
+
*
|
|
5
|
+
* Reads .cm/handoff/{plan,exec,review,quality}.json (when present) plus
|
|
6
|
+
* git-derived signals to estimate the five Vibecoding components, then
|
|
7
|
+
* prints a score 0–100 with advice.
|
|
8
|
+
*/
|
|
9
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
10
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.registerQualityCommands = registerQualityCommands;
|
|
14
|
+
const fs_1 = __importDefault(require("fs"));
|
|
15
|
+
const path_1 = __importDefault(require("path"));
|
|
16
|
+
const vibecoding_index_1 = require("../../vibecoding-index");
|
|
17
|
+
function isMode(s) {
|
|
18
|
+
return s === 'OFF' || s === 'WARNING' || s === 'SOFT' || s === 'FULL';
|
|
19
|
+
}
|
|
20
|
+
function parseFraction(v, fallback) {
|
|
21
|
+
if (!v)
|
|
22
|
+
return fallback;
|
|
23
|
+
const n = Number(v);
|
|
24
|
+
if (Number.isNaN(n))
|
|
25
|
+
return fallback;
|
|
26
|
+
if (n > 1)
|
|
27
|
+
return Math.min(1, n / 100);
|
|
28
|
+
return Math.max(0, Math.min(1, n));
|
|
29
|
+
}
|
|
30
|
+
function deriveFromHandoff(projectPath) {
|
|
31
|
+
var _a, _b, _c;
|
|
32
|
+
const dir = path_1.default.join(projectPath, '.cm', 'handoff');
|
|
33
|
+
if (!fs_1.default.existsSync(dir))
|
|
34
|
+
return {};
|
|
35
|
+
const out = {};
|
|
36
|
+
// intent — from intent.json or plan.json presence
|
|
37
|
+
if (fs_1.default.existsSync(path_1.default.join(dir, 'plan.json')))
|
|
38
|
+
out.intent = 0.85;
|
|
39
|
+
else if (fs_1.default.existsSync(path_1.default.join(dir, 'intent.json')))
|
|
40
|
+
out.intent = 0.65;
|
|
41
|
+
// context — handoff chain length proxy
|
|
42
|
+
const present = ['intent.json', 'plan.json', 'exec.json', 'review.json']
|
|
43
|
+
.filter((f) => fs_1.default.existsSync(path_1.default.join(dir, f))).length;
|
|
44
|
+
if (present > 0)
|
|
45
|
+
out.context = Math.min(1, present / 4);
|
|
46
|
+
// tests — from quality.json
|
|
47
|
+
try {
|
|
48
|
+
const q = JSON.parse(fs_1.default.readFileSync(path_1.default.join(dir, 'quality.json'), 'utf8'));
|
|
49
|
+
if (typeof ((_a = q === null || q === void 0 ? void 0 : q.data) === null || _a === void 0 ? void 0 : _a.coverage_pct) === 'number') {
|
|
50
|
+
out.tests = Math.max(0, Math.min(1, q.data.coverage_pct / 100));
|
|
51
|
+
}
|
|
52
|
+
else if (((_b = q === null || q === void 0 ? void 0 : q.data) === null || _b === void 0 ? void 0 : _b.tests_passed) === true) {
|
|
53
|
+
out.tests = 0.7;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch ( /* missing or malformed */_d) { /* missing or malformed */ }
|
|
57
|
+
// review — from review.json
|
|
58
|
+
try {
|
|
59
|
+
const r = JSON.parse(fs_1.default.readFileSync(path_1.default.join(dir, 'review.json'), 'utf8'));
|
|
60
|
+
if (Array.isArray((_c = r === null || r === void 0 ? void 0 : r.data) === null || _c === void 0 ? void 0 : _c.findings))
|
|
61
|
+
out.review = 0.8;
|
|
62
|
+
}
|
|
63
|
+
catch ( /* none */_e) { /* none */ }
|
|
64
|
+
return out;
|
|
65
|
+
}
|
|
66
|
+
function registerQualityCommands(program) {
|
|
67
|
+
const quality = program.command('quality').description('Vibecoding Index — score 0..100 for the current change');
|
|
68
|
+
quality
|
|
69
|
+
.command('score')
|
|
70
|
+
.description('compute and print the Vibecoding Index')
|
|
71
|
+
.option('--mode <mode>', 'OFF|WARNING|SOFT|FULL', 'WARNING')
|
|
72
|
+
.option('--intent <n>', 'override intent score (0..1 or 0..100)')
|
|
73
|
+
.option('--ownership <n>', 'override ownership score (0..1 or 0..100)')
|
|
74
|
+
.option('--context <n>', 'override context score (0..1 or 0..100)')
|
|
75
|
+
.option('--tests <n>', 'override tests score (0..1 or 0..100)')
|
|
76
|
+
.option('--review <n>', 'override review score (0..1 or 0..100)')
|
|
77
|
+
.option('--json', 'print raw JSON')
|
|
78
|
+
.action((opts) => {
|
|
79
|
+
var _a, _b, _c, _d, _e, _f;
|
|
80
|
+
const cwd = process.cwd();
|
|
81
|
+
const derived = deriveFromHandoff(cwd);
|
|
82
|
+
const inputs = {
|
|
83
|
+
intent: parseFraction(opts.intent, (_a = derived.intent) !== null && _a !== void 0 ? _a : 0.5),
|
|
84
|
+
ownership: parseFraction(opts.ownership, (_b = derived.ownership) !== null && _b !== void 0 ? _b : 0.6),
|
|
85
|
+
context: parseFraction(opts.context, (_c = derived.context) !== null && _c !== void 0 ? _c : 0.4),
|
|
86
|
+
tests: parseFraction(opts.tests, (_d = derived.tests) !== null && _d !== void 0 ? _d : 0.4),
|
|
87
|
+
review: parseFraction(opts.review, (_e = derived.review) !== null && _e !== void 0 ? _e : 0.4),
|
|
88
|
+
};
|
|
89
|
+
const result = (0, vibecoding_index_1.computeVibeIndex)(inputs);
|
|
90
|
+
const mode = isMode(String((_f = opts.mode) !== null && _f !== void 0 ? _f : '').toUpperCase())
|
|
91
|
+
? String(opts.mode).toUpperCase()
|
|
92
|
+
: 'WARNING';
|
|
93
|
+
const outcome = (0, vibecoding_index_1.applyVibeMode)(result, mode);
|
|
94
|
+
if (opts.json) {
|
|
95
|
+
process.stdout.write(JSON.stringify({ outcome }, null, 2) + '\n');
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
process.stdout.write((0, vibecoding_index_1.formatVibeReport)(result) + '\n');
|
|
99
|
+
if (outcome.message)
|
|
100
|
+
process.stdout.write(outcome.message + '\n');
|
|
101
|
+
}
|
|
102
|
+
if (outcome.status === 'block')
|
|
103
|
+
process.exit(1);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* `cm stack` — detect ecosystems/frameworks and emit .cm/project-skills.md.
|
|
4
|
+
* `cm tier` — classify project size tier and emit .cm/project-tier.md.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.registerStackCommands = registerStackCommands;
|
|
8
|
+
const stack_detect_1 = require("../../indexer/stack-detect");
|
|
9
|
+
const tier_classify_1 = require("../../tier-classify");
|
|
10
|
+
function registerStackCommands(program) {
|
|
11
|
+
const stack = program.command('stack').description('Detect project stack and suggest skills');
|
|
12
|
+
stack
|
|
13
|
+
.command('detect')
|
|
14
|
+
.description('scan the current project and print suggestions')
|
|
15
|
+
.option('--write', 'write report to .cm/project-skills.md')
|
|
16
|
+
.option('--json', 'print raw JSON')
|
|
17
|
+
.action((opts) => {
|
|
18
|
+
const r = (0, stack_detect_1.detectStack)(process.cwd());
|
|
19
|
+
if (opts.json) {
|
|
20
|
+
process.stdout.write(JSON.stringify(r, null, 2) + '\n');
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
process.stdout.write((0, stack_detect_1.renderStackMarkdown)(r));
|
|
24
|
+
}
|
|
25
|
+
if (opts.write) {
|
|
26
|
+
const file = (0, stack_detect_1.writeProjectSkills)(process.cwd(), r);
|
|
27
|
+
process.stdout.write(`\nWrote ${file}\n`);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
const tier = program.command('tier').description('Classify project tier (LITE/STANDARD/PROFESSIONAL/ENTERPRISE)');
|
|
31
|
+
tier
|
|
32
|
+
.command('classify')
|
|
33
|
+
.description('measure and classify the current project')
|
|
34
|
+
.option('--write', 'write report to .cm/project-tier.md')
|
|
35
|
+
.option('--json', 'print raw JSON')
|
|
36
|
+
.action((opts) => {
|
|
37
|
+
const r = (0, tier_classify_1.classifyProject)(process.cwd());
|
|
38
|
+
if (opts.json) {
|
|
39
|
+
process.stdout.write(JSON.stringify(r, null, 2) + '\n');
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
process.stdout.write((0, tier_classify_1.renderTierMarkdown)(r));
|
|
43
|
+
}
|
|
44
|
+
if (opts.write) {
|
|
45
|
+
const file = (0, tier_classify_1.writeTierReport)(process.cwd(), r);
|
|
46
|
+
process.stdout.write(`\nWrote ${file}\n`);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* cm update — Unified update command for CodyMaster
|
|
4
|
+
*
|
|
5
|
+
* TRIZ Principle #15 (Dynamicity):
|
|
6
|
+
* Adapt update behavior based on flags.
|
|
7
|
+
*
|
|
8
|
+
* TRIZ Principle #40 (Composite):
|
|
9
|
+
* Combine sync + changelog + version check in one command.
|
|
10
|
+
*/
|
|
11
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
12
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
13
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
14
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
15
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
16
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
17
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
21
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
22
|
+
};
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.registerUpdateCommands = registerUpdateCommands;
|
|
25
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
26
|
+
const child_process_1 = require("child_process");
|
|
27
|
+
const path_1 = __importDefault(require("path"));
|
|
28
|
+
const fs_1 = __importDefault(require("fs"));
|
|
29
|
+
const box_1 = require("../../ui/box");
|
|
30
|
+
const repoRoot = path_1.default.join(__dirname, '..', '..', '..');
|
|
31
|
+
const pkg = JSON.parse(fs_1.default.readFileSync(path_1.default.join(repoRoot, 'package.json'), 'utf-8'));
|
|
32
|
+
function registerUpdateCommands(program) {
|
|
33
|
+
program
|
|
34
|
+
.command('update')
|
|
35
|
+
.description('Update CodyMaster skills, changelog, and check for upgrades')
|
|
36
|
+
.option('-s, --sync', 'Sync skills to all platforms')
|
|
37
|
+
.option('-c, --changelog', 'Update CHANGELOG.md from git commits')
|
|
38
|
+
.option('--check', 'Check for available updates')
|
|
39
|
+
.option('-f, --full', 'Full update (sync + changelog)')
|
|
40
|
+
.option('--dry-run', 'Show what would be done without making changes')
|
|
41
|
+
.action((opts) => __awaiter(this, void 0, void 0, function* () {
|
|
42
|
+
console.log((0, box_1.renderCommandHeader)('CodyMaster Update', '🔄'));
|
|
43
|
+
// Default: full update if no flags
|
|
44
|
+
if (!opts.sync && !opts.changelog && !opts.check) {
|
|
45
|
+
opts.full = true;
|
|
46
|
+
}
|
|
47
|
+
// Check for updates
|
|
48
|
+
if (opts.check) {
|
|
49
|
+
yield checkForUpdates();
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
// Sync skills
|
|
53
|
+
if (opts.sync || opts.full) {
|
|
54
|
+
yield syncSkills(opts.dryRun);
|
|
55
|
+
}
|
|
56
|
+
// Update changelog
|
|
57
|
+
if (opts.changelog || opts.full) {
|
|
58
|
+
yield updateChangelog(opts.dryRun);
|
|
59
|
+
}
|
|
60
|
+
// Summary
|
|
61
|
+
console.log('');
|
|
62
|
+
console.log(chalk_1.default.green(' ✅ Update complete!'));
|
|
63
|
+
console.log('');
|
|
64
|
+
}));
|
|
65
|
+
// ─── Upgrade Command ─────────────────────────────────────────
|
|
66
|
+
program
|
|
67
|
+
.command('upgrade')
|
|
68
|
+
.description('Upgrade CodyMaster package and sync skills')
|
|
69
|
+
.option('--dry-run', 'Show what would be done without making changes')
|
|
70
|
+
.action((opts) => __awaiter(this, void 0, void 0, function* () {
|
|
71
|
+
console.log((0, box_1.renderCommandHeader)('CodyMaster Upgrade', '⬆️'));
|
|
72
|
+
if (opts.dryRun) {
|
|
73
|
+
console.log(chalk_1.default.dim(' [DRY RUN] Would run: npm update -g codymaster'));
|
|
74
|
+
console.log(chalk_1.default.dim(' [DRY RUN] Would run: cm update --full'));
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
// Step 1: Update package
|
|
78
|
+
console.log(chalk_1.default.bold(' Step 1: Updating CodyMaster package...'));
|
|
79
|
+
try {
|
|
80
|
+
(0, child_process_1.execSync)('npm update -g codymaster', { stdio: 'inherit', cwd: repoRoot });
|
|
81
|
+
console.log(chalk_1.default.green(' ✅ Package updated'));
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
console.log(chalk_1.default.yellow(' ⚠️ Package update failed (may already be latest)'));
|
|
85
|
+
}
|
|
86
|
+
// Step 2: Sync skills
|
|
87
|
+
console.log(chalk_1.default.bold('\n Step 2: Syncing skills...'));
|
|
88
|
+
yield syncSkills(false);
|
|
89
|
+
// Step 3: Update changelog
|
|
90
|
+
console.log(chalk_1.default.bold('\n Step 3: Updating changelog...'));
|
|
91
|
+
yield updateChangelog(false);
|
|
92
|
+
console.log('');
|
|
93
|
+
console.log(chalk_1.default.green(' ✅ Upgrade complete!'));
|
|
94
|
+
console.log(chalk_1.default.dim(' Run `cm --version` to verify.'));
|
|
95
|
+
console.log('');
|
|
96
|
+
}));
|
|
97
|
+
}
|
|
98
|
+
function checkForUpdates() {
|
|
99
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
100
|
+
console.log(chalk_1.default.bold('\n Checking for updates...\n'));
|
|
101
|
+
// Current version
|
|
102
|
+
console.log(chalk_1.default.dim(` Current: v${pkg.version}`));
|
|
103
|
+
// Check npm for latest
|
|
104
|
+
try {
|
|
105
|
+
const latest = (0, child_process_1.execSync)('npm view codymaster version', { encoding: 'utf-8' }).trim();
|
|
106
|
+
console.log(chalk_1.default.dim(` Latest: v${latest}`));
|
|
107
|
+
if (latest !== pkg.version) {
|
|
108
|
+
console.log(chalk_1.default.yellow(`\n ⚠️ Update available: v${latest}`));
|
|
109
|
+
console.log(chalk_1.default.dim(' Run `cm upgrade` to update.'));
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
console.log(chalk_1.default.green('\n ✅ You are on the latest version.'));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
console.log(chalk_1.default.dim(' Could not check npm registry.'));
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
function syncSkills(dryRun) {
|
|
121
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
122
|
+
console.log(chalk_1.default.bold('\n Syncing skills to all platforms...'));
|
|
123
|
+
if (dryRun) {
|
|
124
|
+
console.log(chalk_1.default.dim(' [DRY RUN] Would run: node scripts/build-skills.mjs --all-platforms'));
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
try {
|
|
128
|
+
const output = (0, child_process_1.execSync)('node scripts/build-skills.mjs --all-platforms', {
|
|
129
|
+
encoding: 'utf-8',
|
|
130
|
+
cwd: repoRoot,
|
|
131
|
+
timeout: 60000,
|
|
132
|
+
});
|
|
133
|
+
console.log(chalk_1.default.green(' ✅ Skills synced'));
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
console.log(chalk_1.default.red(' ❌ Sync failed: ' + (error.message || 'Unknown error')));
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
function updateChangelog(dryRun) {
|
|
141
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
142
|
+
console.log(chalk_1.default.bold('\n Updating changelog...'));
|
|
143
|
+
if (dryRun) {
|
|
144
|
+
console.log(chalk_1.default.dim(' [DRY RUN] Would run: bash scripts/update-changelog.sh'));
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
try {
|
|
148
|
+
const output = (0, child_process_1.execSync)('bash scripts/update-changelog.sh', {
|
|
149
|
+
encoding: 'utf-8',
|
|
150
|
+
cwd: repoRoot,
|
|
151
|
+
timeout: 30000,
|
|
152
|
+
});
|
|
153
|
+
console.log(chalk_1.default.green(' ✅ Changelog updated'));
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
console.log(chalk_1.default.red(' ❌ Changelog update failed: ' + (error.message || 'Unknown error')));
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
}
|
package/dist/cli/update-check.js
CHANGED
|
@@ -12,18 +12,20 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
12
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.
|
|
15
|
+
exports.VERSION = void 0;
|
|
16
16
|
exports.checkForUpdates = checkForUpdates;
|
|
17
|
+
exports.showUpdateNotification = showUpdateNotification;
|
|
18
|
+
exports.promptForUpgrade = promptForUpgrade;
|
|
17
19
|
const fs_1 = __importDefault(require("fs"));
|
|
18
20
|
const path_1 = __importDefault(require("path"));
|
|
19
21
|
const os_1 = __importDefault(require("os"));
|
|
20
22
|
const https_1 = __importDefault(require("https"));
|
|
21
23
|
const pkg = JSON.parse(fs_1.default.readFileSync(path_1.default.resolve(__dirname, '..', '..', 'package.json'), 'utf-8'));
|
|
22
|
-
|
|
23
|
-
exports._updateMessage = '';
|
|
24
|
+
exports.VERSION = pkg.version;
|
|
24
25
|
/**
|
|
25
26
|
* Checks for updates to CodyMaster on the npm registry.
|
|
26
27
|
* Caches results for 24 hours to avoid frequent network calls.
|
|
28
|
+
* Returns UpdateInfo if a newer version is available, null otherwise.
|
|
27
29
|
*/
|
|
28
30
|
function checkForUpdates() {
|
|
29
31
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -41,10 +43,12 @@ function checkForUpdates() {
|
|
|
41
43
|
const age = Date.now() - stat.mtimeMs;
|
|
42
44
|
if (age < 24 * 60 * 60 * 1000) {
|
|
43
45
|
const cached = fs_1.default.readFileSync(cacheFile, 'utf-8').trim();
|
|
44
|
-
if (cached && cached !== VERSION) {
|
|
45
|
-
exports.
|
|
46
|
+
if (cached && cached !== exports.VERSION) {
|
|
47
|
+
return { currentVersion: exports.VERSION, latestVersion: cached };
|
|
48
|
+
}
|
|
49
|
+
if (!cached || cached === exports.VERSION) {
|
|
50
|
+
return null; // up to date
|
|
46
51
|
}
|
|
47
|
-
return;
|
|
48
52
|
}
|
|
49
53
|
}
|
|
50
54
|
}
|
|
@@ -59,25 +63,105 @@ function checkForUpdates() {
|
|
|
59
63
|
clearTimeout(timer);
|
|
60
64
|
try {
|
|
61
65
|
const json = JSON.parse(data);
|
|
62
|
-
resolve(json.version || VERSION);
|
|
66
|
+
resolve(json.version || exports.VERSION);
|
|
63
67
|
}
|
|
64
68
|
catch (_a) {
|
|
65
|
-
resolve(VERSION);
|
|
69
|
+
resolve(exports.VERSION);
|
|
66
70
|
}
|
|
67
71
|
});
|
|
68
72
|
}).on('error', () => { clearTimeout(timer); reject(new Error('fetch failed')); });
|
|
69
73
|
});
|
|
70
74
|
// Cache result
|
|
71
|
-
if (latestVersion && latestVersion !== VERSION) {
|
|
72
|
-
exports._updateMessage = latestVersion;
|
|
75
|
+
if (latestVersion && latestVersion !== exports.VERSION) {
|
|
73
76
|
fs_1.default.writeFileSync(cacheFile, latestVersion);
|
|
77
|
+
return { currentVersion: exports.VERSION, latestVersion };
|
|
74
78
|
}
|
|
75
79
|
else {
|
|
76
80
|
fs_1.default.writeFileSync(cacheFile, '');
|
|
81
|
+
return null;
|
|
77
82
|
}
|
|
78
83
|
}
|
|
79
84
|
catch (e) {
|
|
80
85
|
// Silent failure for update checks
|
|
86
|
+
return null;
|
|
81
87
|
}
|
|
82
88
|
});
|
|
83
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* Display update notification with upgrade prompt.
|
|
92
|
+
* Shows a colored banner and optionally prompts for upgrade.
|
|
93
|
+
*/
|
|
94
|
+
function showUpdateNotification(info) {
|
|
95
|
+
const chalk = require('chalk');
|
|
96
|
+
console.log('');
|
|
97
|
+
console.log(chalk.yellow(' ┌──────────────────────────────────────────────┐'));
|
|
98
|
+
console.log(chalk.yellow(' │ ') + chalk.bold('Update available!') + ` v${info.currentVersion} → v${info.latestVersion}` + chalk.yellow(' │'));
|
|
99
|
+
console.log(chalk.yellow(' │ ') + chalk.dim('Run `cm upgrade` to update') + chalk.yellow(' │'));
|
|
100
|
+
console.log(chalk.yellow(' └──────────────────────────────────────────────┘'));
|
|
101
|
+
console.log('');
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Show update notification and optionally prompt for upgrade.
|
|
105
|
+
* Respects CM_NO_UPDATE_CHECK env var to skip entirely.
|
|
106
|
+
* Only prompts in TTY environments (not pipes/CI).
|
|
107
|
+
*/
|
|
108
|
+
function promptForUpgrade(info) {
|
|
109
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
110
|
+
// Skip if user disabled it
|
|
111
|
+
if (process.env.CM_NO_UPDATE_CHECK === '1' || process.env.CM_NO_UPDATE_CHECK === 'true') {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
// Skip if not a TTY (piped, CI, etc.)
|
|
115
|
+
if (!process.stdin.isTTY) {
|
|
116
|
+
showUpdateNotification(info);
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
// Only prompt for interactive commands (not help, version, or help subcommands)
|
|
120
|
+
const args = process.argv.slice(2);
|
|
121
|
+
const skipPrompts = args.includes('--help') || args.includes('-h') || args.includes('--version') || args.includes('-V');
|
|
122
|
+
if (skipPrompts) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
const chalk = require('chalk');
|
|
126
|
+
const readline = require('readline');
|
|
127
|
+
console.log('');
|
|
128
|
+
console.log(chalk.yellow(' ┌──────────────────────────────────────────────┐'));
|
|
129
|
+
console.log(chalk.yellow(' │ ') + chalk.bold('Update available!') + ` v${info.currentVersion} → v${info.latestVersion}` + chalk.yellow(' │'));
|
|
130
|
+
console.log(chalk.yellow(' └──────────────────────────────────────────────┘'));
|
|
131
|
+
console.log('');
|
|
132
|
+
const rl = readline.createInterface({
|
|
133
|
+
input: process.stdin,
|
|
134
|
+
output: process.stdout,
|
|
135
|
+
});
|
|
136
|
+
return new Promise((resolve) => {
|
|
137
|
+
rl.question(chalk.bold(' Upgrade now?') + chalk.dim(' (y/N) '), (answer) => {
|
|
138
|
+
rl.close();
|
|
139
|
+
const choice = (answer || '').trim().toLowerCase();
|
|
140
|
+
if (choice === 'y' || choice === 'yes') {
|
|
141
|
+
console.log('');
|
|
142
|
+
console.log(chalk.dim(' Running cm upgrade...'));
|
|
143
|
+
console.log('');
|
|
144
|
+
const { execSync } = require('child_process');
|
|
145
|
+
try {
|
|
146
|
+
execSync('npm update -g codymaster', { stdio: 'inherit', timeout: 60000 });
|
|
147
|
+
console.log('');
|
|
148
|
+
console.log(chalk.green(' ✅ Upgrade complete! Restart your shell or run:'));
|
|
149
|
+
console.log(chalk.dim(' hash -r'));
|
|
150
|
+
console.log('');
|
|
151
|
+
}
|
|
152
|
+
catch (err) {
|
|
153
|
+
console.log('');
|
|
154
|
+
console.log(chalk.red(' ❌ Upgrade failed. Try manually:'));
|
|
155
|
+
console.log(chalk.dim(' npm install -g codymaster@latest'));
|
|
156
|
+
console.log('');
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
console.log(chalk.dim(' Skipped. Run `cm upgrade` when ready.'));
|
|
161
|
+
console.log('');
|
|
162
|
+
}
|
|
163
|
+
resolve();
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
}
|
package/dist/continuity.js
CHANGED
|
@@ -21,6 +21,7 @@ const path_1 = __importDefault(require("path"));
|
|
|
21
21
|
const crypto_1 = __importDefault(require("crypto"));
|
|
22
22
|
const l0_indexer_1 = require("./l0-indexer");
|
|
23
23
|
const token_budget_1 = require("./token-budget");
|
|
24
|
+
const learnings_1 = require("./learnings");
|
|
24
25
|
// ─── Constants ──────────────────────────────────────────────────────────────
|
|
25
26
|
const CM_DIR = '.cm';
|
|
26
27
|
const CONTINUITY_FILE = 'CONTINUITY.md';
|
|
@@ -237,7 +238,8 @@ ${state.workingContext || '[No additional context]'}
|
|
|
237
238
|
${state.filesModified.length > 0
|
|
238
239
|
? state.filesModified.map(f => `- ${f.path}: ${f.change}`).join('\n')
|
|
239
240
|
: '- [No files being modified]'}
|
|
240
|
-
|
|
241
|
+
|
|
242
|
+
${(0, learnings_1.renderLearningsForContinuity)(projectPath, 10)}`;
|
|
241
243
|
fs_1.default.writeFileSync(filePath, content, 'utf-8');
|
|
242
244
|
}
|
|
243
245
|
// ─── Learnings Management ───────────────────────────────────────────────────
|