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
|
@@ -0,0 +1,453 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# brain-sync.sh — CodyMaster NotebookLM Brain Sync Engine
|
|
3
|
+
# Compile → Hash → Upload → Verify
|
|
4
|
+
#
|
|
5
|
+
# Usage:
|
|
6
|
+
# bash brain-sync.sh compile # Compile brain.md locally
|
|
7
|
+
# bash brain-sync.sh upload # Upload brain.md to NotebookLM
|
|
8
|
+
# bash brain-sync.sh sync # Compile + upload if changed
|
|
9
|
+
# bash brain-sync.sh lesson "title" # Add lesson interactively
|
|
10
|
+
# bash brain-sync.sh status # Show brain status
|
|
11
|
+
# bash brain-sync.sh init # First-time setup
|
|
12
|
+
|
|
13
|
+
set -euo pipefail
|
|
14
|
+
|
|
15
|
+
# --- Config ---
|
|
16
|
+
BRAIN_DIR="${HOME}/.codymaster"
|
|
17
|
+
BRAIN_FILE="${BRAIN_DIR}/brain.md"
|
|
18
|
+
LESSONS_FILE="${BRAIN_DIR}/lessons.md"
|
|
19
|
+
EXPERIENCES_FILE="${BRAIN_DIR}/experiences.md"
|
|
20
|
+
HASH_FILE="${BRAIN_DIR}/.brain-hash"
|
|
21
|
+
SKILLS_DIR="${HOME}/.gemini/antigravity/skills"
|
|
22
|
+
NOTEBOOK_ALIAS="codymaster"
|
|
23
|
+
GRADUATED_FILE="${BRAIN_DIR}/graduated_wisdom.md"
|
|
24
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
25
|
+
GRADUATE_SCRIPT="${SCRIPT_DIR}/graduate_wisdom.py"
|
|
26
|
+
|
|
27
|
+
# --- Helpers ---
|
|
28
|
+
info() { echo "🧠 $*"; }
|
|
29
|
+
warn() { echo "⚠️ $*"; }
|
|
30
|
+
error() { echo "❌ $*" >&2; exit 1; }
|
|
31
|
+
|
|
32
|
+
ensure_dir() {
|
|
33
|
+
mkdir -p "$BRAIN_DIR"
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
check_nlm() {
|
|
37
|
+
command -v nlm &>/dev/null || error "nlm not installed. Run: uv tool install notebooklm-mcp-cli"
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
check_auth() {
|
|
41
|
+
nlm auth status &>/dev/null || {
|
|
42
|
+
warn "Session expired. Running nlm login..."
|
|
43
|
+
nlm login
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
current_hash() {
|
|
48
|
+
[ -f "$BRAIN_FILE" ] && md5 -q "$BRAIN_FILE" 2>/dev/null || echo "none"
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
saved_hash() {
|
|
52
|
+
[ -f "$HASH_FILE" ] && cat "$HASH_FILE" || echo "none"
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
save_hash() {
|
|
56
|
+
current_hash > "$HASH_FILE"
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
# --- Commands ---
|
|
60
|
+
|
|
61
|
+
cmd_graduate() {
|
|
62
|
+
info "Graduating proven wisdom from local .cm/ folder..."
|
|
63
|
+
python3 "$GRADUATE_SCRIPT" || warn "Graduation script encountered an error."
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
cmd_compile() {
|
|
67
|
+
ensure_dir
|
|
68
|
+
info "Compiling brain.md..."
|
|
69
|
+
|
|
70
|
+
cat > "$BRAIN_FILE" << 'HEADER'
|
|
71
|
+
# CodyMaster Brain
|
|
72
|
+
> Auto-compiled knowledge base. Do not edit directly.
|
|
73
|
+
> Re-compile with: bash brain-sync.sh compile
|
|
74
|
+
|
|
75
|
+
HEADER
|
|
76
|
+
|
|
77
|
+
echo "Generated: $(date +%Y-%m-%d' '%H:%M)" >> "$BRAIN_FILE"
|
|
78
|
+
echo "" >> "$BRAIN_FILE"
|
|
79
|
+
|
|
80
|
+
# Section 1: Skill Index (names + descriptions only)
|
|
81
|
+
echo "---" >> "$BRAIN_FILE"
|
|
82
|
+
echo "# Skill Index" >> "$BRAIN_FILE"
|
|
83
|
+
echo "" >> "$BRAIN_FILE"
|
|
84
|
+
|
|
85
|
+
local count=0
|
|
86
|
+
for skill_dir in "$SKILLS_DIR"/*/; do
|
|
87
|
+
[ -d "$skill_dir" ] || continue
|
|
88
|
+
local name=$(basename "$skill_dir")
|
|
89
|
+
local file="$skill_dir/SKILL.md"
|
|
90
|
+
[ -f "$file" ] || continue
|
|
91
|
+
|
|
92
|
+
# Extract description from frontmatter
|
|
93
|
+
local desc=$(awk '/^description:/{found=1; sub(/^description: */, ""); print; next} found && /^ /{print; next} found{exit}' "$file" | head -3)
|
|
94
|
+
echo "## $name" >> "$BRAIN_FILE"
|
|
95
|
+
echo "$desc" >> "$BRAIN_FILE"
|
|
96
|
+
echo "" >> "$BRAIN_FILE"
|
|
97
|
+
count=$((count + 1))
|
|
98
|
+
done
|
|
99
|
+
info " → $count skills indexed"
|
|
100
|
+
|
|
101
|
+
# Section 2: Lessons Learned
|
|
102
|
+
if [ -f "$LESSONS_FILE" ]; then
|
|
103
|
+
echo "---" >> "$BRAIN_FILE"
|
|
104
|
+
echo "# Lessons Learned" >> "$BRAIN_FILE"
|
|
105
|
+
echo "" >> "$BRAIN_FILE"
|
|
106
|
+
cat "$LESSONS_FILE" >> "$BRAIN_FILE"
|
|
107
|
+
local lesson_count=$(grep -c "^## Lesson:" "$LESSONS_FILE" 2>/dev/null || echo 0)
|
|
108
|
+
info " → $lesson_count lessons included"
|
|
109
|
+
fi
|
|
110
|
+
|
|
111
|
+
# Section 3: Coding Experiences
|
|
112
|
+
if [ -f "$EXPERIENCES_FILE" ]; then
|
|
113
|
+
echo "---" >> "$BRAIN_FILE"
|
|
114
|
+
echo "# Coding Experiences" >> "$BRAIN_FILE"
|
|
115
|
+
echo "" >> "$BRAIN_FILE"
|
|
116
|
+
cat "$EXPERIENCES_FILE" >> "$BRAIN_FILE"
|
|
117
|
+
local exp_count=$(grep -c "^## Experience:" "$EXPERIENCES_FILE" 2>/dev/null || echo 0)
|
|
118
|
+
info " → $exp_count experiences included"
|
|
119
|
+
fi
|
|
120
|
+
|
|
121
|
+
# Section 3b: Graduated Project Wisdom
|
|
122
|
+
if [ -f "$GRADUATED_FILE" ]; then
|
|
123
|
+
echo "---" >> "$BRAIN_FILE"
|
|
124
|
+
echo "# Graduated Project Wisdom" >> "$BRAIN_FILE"
|
|
125
|
+
echo "" >> "$BRAIN_FILE"
|
|
126
|
+
cat "$GRADUATED_FILE" >> "$BRAIN_FILE"
|
|
127
|
+
local grad_count=$(grep -c "\*\*ID:\*\*" "$GRADUATED_FILE" 2>/dev/null || echo 0)
|
|
128
|
+
info " → $grad_count graduated items included"
|
|
129
|
+
fi
|
|
130
|
+
|
|
131
|
+
# Section 4: Project identity (if exists)
|
|
132
|
+
local agents_file="$SKILLS_DIR/AGENTS.md"
|
|
133
|
+
if [ -f "$agents_file" ]; then
|
|
134
|
+
echo "---" >> "$BRAIN_FILE"
|
|
135
|
+
echo "# Project Identity" >> "$BRAIN_FILE"
|
|
136
|
+
echo "" >> "$BRAIN_FILE"
|
|
137
|
+
cat "$agents_file" >> "$BRAIN_FILE"
|
|
138
|
+
fi
|
|
139
|
+
|
|
140
|
+
local size=$(wc -c < "$BRAIN_FILE" | tr -d ' ')
|
|
141
|
+
local lines=$(wc -l < "$BRAIN_FILE" | tr -d ' ')
|
|
142
|
+
info "Compiled: $BRAIN_FILE ($lines lines, ${size} bytes)"
|
|
143
|
+
|
|
144
|
+
# Check if changed
|
|
145
|
+
if [ "$(current_hash)" = "$(saved_hash)" ]; then
|
|
146
|
+
info "No changes since last upload."
|
|
147
|
+
else
|
|
148
|
+
info "Changes detected. Run 'brain-sync.sh upload' to sync to cloud."
|
|
149
|
+
fi
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
cmd_upload() {
|
|
153
|
+
check_nlm
|
|
154
|
+
check_auth
|
|
155
|
+
|
|
156
|
+
[ -f "$BRAIN_FILE" ] || error "brain.md not found. Run 'brain-sync.sh compile' first."
|
|
157
|
+
|
|
158
|
+
# Check if changed
|
|
159
|
+
if [ "$(current_hash)" = "$(saved_hash)" ]; then
|
|
160
|
+
info "No changes. Skipping upload."
|
|
161
|
+
return 0
|
|
162
|
+
fi
|
|
163
|
+
|
|
164
|
+
info "Uploading brain.md to NotebookLM..."
|
|
165
|
+
|
|
166
|
+
# Check if source already exists (by title match)
|
|
167
|
+
local existing=$(nlm source list "$NOTEBOOK_ALIAS" --quiet 2>/dev/null | head -1)
|
|
168
|
+
|
|
169
|
+
if [ -n "$existing" ]; then
|
|
170
|
+
# Delete old brain source and re-add (NotebookLM has no update API)
|
|
171
|
+
info "Replacing existing brain source..."
|
|
172
|
+
# We search by title to find the right source
|
|
173
|
+
local source_id=$(nlm source list "$NOTEBOOK_ALIAS" --json 2>/dev/null | \
|
|
174
|
+
python3 -c "import sys,json; sources=json.load(sys.stdin); [print(s['id']) for s in sources if 'CodyMaster Brain' in s.get('title','')]" 2>/dev/null | head -1)
|
|
175
|
+
if [ -n "$source_id" ]; then
|
|
176
|
+
nlm source delete "$source_id" --confirm 2>/dev/null || true
|
|
177
|
+
sleep 2
|
|
178
|
+
fi
|
|
179
|
+
fi
|
|
180
|
+
|
|
181
|
+
nlm source add "$NOTEBOOK_ALIAS" \
|
|
182
|
+
--text "$(cat "$BRAIN_FILE")" \
|
|
183
|
+
--title "CodyMaster Brain — Compiled Knowledge"
|
|
184
|
+
|
|
185
|
+
save_hash
|
|
186
|
+
info "Upload complete! Hash: $(current_hash)"
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
cmd_sync() {
|
|
190
|
+
cmd_graduate
|
|
191
|
+
cmd_compile
|
|
192
|
+
if [ "$(current_hash)" != "$(saved_hash)" ]; then
|
|
193
|
+
echo ""
|
|
194
|
+
read -p "🔄 Changes detected. Upload to NotebookLM? [Y/n] " -n 1 -r
|
|
195
|
+
echo ""
|
|
196
|
+
if [[ $REPLY =~ ^[Yy]$ ]] || [[ -z $REPLY ]]; then
|
|
197
|
+
cmd_upload
|
|
198
|
+
else
|
|
199
|
+
info "Skipped upload. brain.md saved locally."
|
|
200
|
+
fi
|
|
201
|
+
fi
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
cmd_lesson() {
|
|
205
|
+
ensure_dir
|
|
206
|
+
local title="${1:-}"
|
|
207
|
+
|
|
208
|
+
if [ -z "$title" ]; then
|
|
209
|
+
read -p "📝 Lesson title: " title
|
|
210
|
+
fi
|
|
211
|
+
|
|
212
|
+
[ -z "$title" ] && error "Title required."
|
|
213
|
+
|
|
214
|
+
cat >> "$LESSONS_FILE" << EOF
|
|
215
|
+
|
|
216
|
+
## Lesson: $title
|
|
217
|
+
**Date:** $(date +%Y-%m-%d)
|
|
218
|
+
**Context:**
|
|
219
|
+
**Problem:**
|
|
220
|
+
**Root Cause:**
|
|
221
|
+
**Solution:**
|
|
222
|
+
**Prevention:**
|
|
223
|
+
**Tags:**
|
|
224
|
+
EOF
|
|
225
|
+
|
|
226
|
+
info "Lesson template added to $LESSONS_FILE"
|
|
227
|
+
info "Edit the file, then run 'brain-sync.sh sync' to upload."
|
|
228
|
+
echo " → $LESSONS_FILE"
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
cmd_experience() {
|
|
232
|
+
ensure_dir
|
|
233
|
+
local title="${1:-}"
|
|
234
|
+
|
|
235
|
+
if [ -z "$title" ]; then
|
|
236
|
+
read -p "💡 Experience title: " title
|
|
237
|
+
fi
|
|
238
|
+
|
|
239
|
+
[ -z "$title" ] && error "Title required."
|
|
240
|
+
|
|
241
|
+
cat >> "$EXPERIENCES_FILE" << EOF
|
|
242
|
+
|
|
243
|
+
## Experience: $title
|
|
244
|
+
**Date:** $(date +%Y-%m-%d)
|
|
245
|
+
**Stack:**
|
|
246
|
+
**Pattern:**
|
|
247
|
+
**When to Use:**
|
|
248
|
+
**Pitfalls:**
|
|
249
|
+
EOF
|
|
250
|
+
|
|
251
|
+
info "Experience template added to $EXPERIENCES_FILE"
|
|
252
|
+
info "Edit the file, then run 'brain-sync.sh sync' to upload."
|
|
253
|
+
echo " → $EXPERIENCES_FILE"
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
cmd_status() {
|
|
257
|
+
ensure_dir
|
|
258
|
+
echo "🧠 CodyMaster Brain Status"
|
|
259
|
+
echo "=========================="
|
|
260
|
+
|
|
261
|
+
if [ -f "$BRAIN_FILE" ]; then
|
|
262
|
+
local size=$(wc -c < "$BRAIN_FILE" | tr -d ' ')
|
|
263
|
+
local lines=$(wc -l < "$BRAIN_FILE" | tr -d ' ')
|
|
264
|
+
echo "📄 brain.md: $lines lines, $size bytes"
|
|
265
|
+
echo "🔑 Local hash: $(current_hash)"
|
|
266
|
+
echo "🔑 Synced hash: $(saved_hash)"
|
|
267
|
+
if [ "$(current_hash)" = "$(saved_hash)" ]; then
|
|
268
|
+
echo "✅ Status: In sync"
|
|
269
|
+
else
|
|
270
|
+
echo "🔄 Status: Changes pending"
|
|
271
|
+
fi
|
|
272
|
+
else
|
|
273
|
+
echo "📄 brain.md: Not compiled yet"
|
|
274
|
+
fi
|
|
275
|
+
|
|
276
|
+
echo ""
|
|
277
|
+
if [ -f "$LESSONS_FILE" ]; then
|
|
278
|
+
local lc=$(grep -c "^## Lesson:" "$LESSONS_FILE" 2>/dev/null || echo 0)
|
|
279
|
+
echo "📝 Lessons: $lc"
|
|
280
|
+
else
|
|
281
|
+
echo "📝 Lessons: 0"
|
|
282
|
+
fi
|
|
283
|
+
|
|
284
|
+
if [ -f "$EXPERIENCES_FILE" ]; then
|
|
285
|
+
local ec=$(grep -c "^## Experience:" "$EXPERIENCES_FILE" 2>/dev/null || echo 0)
|
|
286
|
+
echo "💡 Experiences: $ec"
|
|
287
|
+
else
|
|
288
|
+
echo "💡 Experiences: 0"
|
|
289
|
+
fi
|
|
290
|
+
|
|
291
|
+
echo ""
|
|
292
|
+
local skill_count=$(find "$SKILLS_DIR" -maxdepth 2 -name "SKILL.md" 2>/dev/null | wc -l | tr -d ' ')
|
|
293
|
+
echo "📦 Skills found: $skill_count"
|
|
294
|
+
|
|
295
|
+
if [ -f "$GRADUATED_FILE" ]; then
|
|
296
|
+
local gc=$(grep -c "\*\*ID:\*\*" "$GRADUATED_FILE" 2>/dev/null || echo 0)
|
|
297
|
+
echo "🎓 Graduated: $gc items"
|
|
298
|
+
else
|
|
299
|
+
echo "🎓 Graduated: 0 items"
|
|
300
|
+
fi
|
|
301
|
+
|
|
302
|
+
# NLM status (if available)
|
|
303
|
+
if command -v nlm &>/dev/null; then
|
|
304
|
+
echo ""
|
|
305
|
+
echo "--- NotebookLM ---"
|
|
306
|
+
nlm auth status 2>/dev/null && echo "🔐 Auth: Active" || echo "🔐 Auth: Expired (run nlm login)"
|
|
307
|
+
fi
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
cmd_init() {
|
|
311
|
+
check_nlm
|
|
312
|
+
ensure_dir
|
|
313
|
+
|
|
314
|
+
info "First-time setup..."
|
|
315
|
+
|
|
316
|
+
# 1. Login
|
|
317
|
+
check_auth
|
|
318
|
+
|
|
319
|
+
# 2. Create notebook
|
|
320
|
+
info "Creating CodyMaster Brain notebook..."
|
|
321
|
+
local nb_id=$(nlm notebook create "CodyMaster Brain" --quiet 2>/dev/null)
|
|
322
|
+
if [ -z "$nb_id" ]; then
|
|
323
|
+
error "Failed to create notebook. Check nlm auth."
|
|
324
|
+
fi
|
|
325
|
+
|
|
326
|
+
# 3. Set alias
|
|
327
|
+
nlm alias set codymaster "$nb_id"
|
|
328
|
+
info "Alias set: codymaster → $nb_id"
|
|
329
|
+
|
|
330
|
+
# 4. Compile & upload
|
|
331
|
+
cmd_compile
|
|
332
|
+
cmd_upload
|
|
333
|
+
|
|
334
|
+
info "✅ Setup complete! Your master brain is ready."
|
|
335
|
+
echo ""
|
|
336
|
+
echo "Quick commands:"
|
|
337
|
+
echo " brain-sync.sh status — Check status"
|
|
338
|
+
echo " brain-sync.sh lesson — Add lesson learned"
|
|
339
|
+
echo " brain-sync.sh sync — Recompile & upload"
|
|
340
|
+
echo " brain-sync.sh init-project — Create a project-specific brain (Dual-Brain)"
|
|
341
|
+
echo " nlm notebook query codymaster 'your question'"
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
cmd_init_project() {
|
|
345
|
+
check_nlm
|
|
346
|
+
check_auth
|
|
347
|
+
|
|
348
|
+
local project_name="${PWD##*/}"
|
|
349
|
+
info "Initializing Project Brain for: $project_name"
|
|
350
|
+
|
|
351
|
+
mkdir -p .cm
|
|
352
|
+
if [ -f ".cm/notebook_id" ]; then
|
|
353
|
+
warn "Project Brain already initialized. ID: $(cat .cm/notebook_id)"
|
|
354
|
+
return 0
|
|
355
|
+
fi
|
|
356
|
+
|
|
357
|
+
local output=$(nlm notebook create "Project $project_name" 2>/dev/null)
|
|
358
|
+
|
|
359
|
+
# output has format:
|
|
360
|
+
# ✓ Created notebook: Project test
|
|
361
|
+
# ID: 7a97...
|
|
362
|
+
local nb_id=$(echo "$output" | grep "ID:" | awk '{print $2}')
|
|
363
|
+
|
|
364
|
+
if [ -z "$nb_id" ]; then
|
|
365
|
+
error "Failed to create Project Brain. Output: $output"
|
|
366
|
+
fi
|
|
367
|
+
|
|
368
|
+
echo "$nb_id" > .cm/notebook_id
|
|
369
|
+
info "✅ Project Brain created! ID saved in .cm/notebook_id"
|
|
370
|
+
echo "Use 'brain-sync.sh sync-project' to upload your local docs."
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
cmd_sync_project() {
|
|
374
|
+
check_nlm
|
|
375
|
+
check_auth
|
|
376
|
+
|
|
377
|
+
[ -f ".cm/notebook_id" ] || error "Project Brain not initialized. Run 'init-project' first."
|
|
378
|
+
local nb_id=$(cat .cm/notebook_id)
|
|
379
|
+
|
|
380
|
+
info "Compiling project documents..."
|
|
381
|
+
local temp_compile=".cm/project_context.md"
|
|
382
|
+
mkdir -p .cm
|
|
383
|
+
|
|
384
|
+
echo "# Project Context: ${PWD##*/}" > "$temp_compile"
|
|
385
|
+
echo "Compiled: $(date +%Y-%m-%d' '%H:%M)" >> "$temp_compile"
|
|
386
|
+
echo "" >> "$temp_compile"
|
|
387
|
+
|
|
388
|
+
local doc_count=0
|
|
389
|
+
|
|
390
|
+
# Search for docs and READMEs
|
|
391
|
+
for md in $(find . -maxdepth 3 -type f -name "*.md" ! -path "*/node_modules/*" ! -path "*/.git/*" ! -path "*/.cm/*" 2>/dev/null); do
|
|
392
|
+
echo "## File: $md" >> "$temp_compile"
|
|
393
|
+
cat "$md" >> "$temp_compile"
|
|
394
|
+
echo "" >> "$temp_compile"
|
|
395
|
+
doc_count=$((doc_count + 1))
|
|
396
|
+
done
|
|
397
|
+
|
|
398
|
+
info " → $doc_count markdown files compiled."
|
|
399
|
+
if [ $doc_count -eq 0 ]; then
|
|
400
|
+
warn "No local markdown files found to sync."
|
|
401
|
+
return 0
|
|
402
|
+
fi
|
|
403
|
+
|
|
404
|
+
info "Uploading Context to Project Brain ($nb_id)..."
|
|
405
|
+
|
|
406
|
+
# Delete old Project Context source and re-add
|
|
407
|
+
local existing=$(nlm source list "$nb_id" --quiet 2>/dev/null | head -1)
|
|
408
|
+
if [ -n "$existing" ]; then
|
|
409
|
+
local source_id=$(nlm source list "$nb_id" --json 2>/dev/null | \
|
|
410
|
+
python3 -c "import sys,json; sources=json.load(sys.stdin); [print(s['id']) for s in sources if 'Project Context' in s.get('title','')]" 2>/dev/null | head -1)
|
|
411
|
+
if [ -n "$source_id" ]; then
|
|
412
|
+
nlm source delete "$source_id" --confirm 2>/dev/null || true
|
|
413
|
+
sleep 2
|
|
414
|
+
fi
|
|
415
|
+
fi
|
|
416
|
+
|
|
417
|
+
nlm source add "$nb_id" \
|
|
418
|
+
--text "$(cat "$temp_compile")" \
|
|
419
|
+
--title "Project Context — Local Docs"
|
|
420
|
+
|
|
421
|
+
info "✅ Project Brain synced successfully!"
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
# --- Main ---
|
|
425
|
+
case "${1:-help}" in
|
|
426
|
+
graduate) cmd_graduate ;;
|
|
427
|
+
init-project) cmd_init_project ;;
|
|
428
|
+
sync-project) cmd_sync_project ;;
|
|
429
|
+
compile) cmd_compile ;;
|
|
430
|
+
upload) cmd_upload ;;
|
|
431
|
+
sync) cmd_sync ;;
|
|
432
|
+
lesson) cmd_lesson "${2:-}" ;;
|
|
433
|
+
experience) cmd_experience "${2:-}" ;;
|
|
434
|
+
status) cmd_status ;;
|
|
435
|
+
init) cmd_init ;;
|
|
436
|
+
*)
|
|
437
|
+
echo "🧠 CodyMaster Brain Sync"
|
|
438
|
+
echo ""
|
|
439
|
+
echo "Usage: brain-sync.sh <command>"
|
|
440
|
+
echo ""
|
|
441
|
+
echo "Commands:"
|
|
442
|
+
echo " init First-time setup (create master notebook + compile + upload)"
|
|
443
|
+
echo " init-project Create an isolated Project Brain for the current directory"
|
|
444
|
+
echo " graduate Extract proven local learnings & decisions to global limits"
|
|
445
|
+
echo " compile Compile brain.md from skills + lessons + experiences"
|
|
446
|
+
echo " upload Upload brain.md to NotebookLM"
|
|
447
|
+
echo " sync Compile + upload if changed (asks confirmation)"
|
|
448
|
+
echo " sync-project Merge local markdown files and push to isolated Project Brain"
|
|
449
|
+
echo " lesson Add a lesson learned"
|
|
450
|
+
echo " experience Add a coding experience"
|
|
451
|
+
echo " status Show brain status"
|
|
452
|
+
;;
|
|
453
|
+
esac
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
import os
|
|
3
|
+
import json
|
|
4
|
+
from datetime import datetime
|
|
5
|
+
import re
|
|
6
|
+
|
|
7
|
+
BRAIN_DIR = os.path.expanduser("~/.codymaster")
|
|
8
|
+
GRADUATED_FILE = os.path.join(BRAIN_DIR, "graduated_wisdom.md")
|
|
9
|
+
|
|
10
|
+
def get_existing_ids():
|
|
11
|
+
if not os.path.exists(GRADUATED_FILE):
|
|
12
|
+
return set()
|
|
13
|
+
with open(GRADUATED_FILE, 'r', encoding='utf-8') as f:
|
|
14
|
+
content = f.read()
|
|
15
|
+
# Find all **ID:** patterns
|
|
16
|
+
ids = set(re.findall(r'\*\*ID:\*\*\s+([A-Z0-9_-]+)', content))
|
|
17
|
+
return ids
|
|
18
|
+
|
|
19
|
+
def append_to_graduated(text):
|
|
20
|
+
os.makedirs(BRAIN_DIR, exist_ok=True)
|
|
21
|
+
with open(GRADUATED_FILE, 'a', encoding='utf-8') as f:
|
|
22
|
+
f.write(text)
|
|
23
|
+
|
|
24
|
+
def graduate_learnings(existing_ids):
|
|
25
|
+
learnings_path = os.path.join(os.getcwd(), ".cm", "learnings.json")
|
|
26
|
+
if not os.path.exists(learnings_path):
|
|
27
|
+
return 0
|
|
28
|
+
|
|
29
|
+
count = 0
|
|
30
|
+
try:
|
|
31
|
+
with open(learnings_path, 'r', encoding='utf-8') as f:
|
|
32
|
+
learnings = json.load(f)
|
|
33
|
+
|
|
34
|
+
for l in learnings:
|
|
35
|
+
lid = str(l.get('id', ''))
|
|
36
|
+
status = l.get('status', 'active')
|
|
37
|
+
reinforce_count = int(l.get('reinforceCount', 0))
|
|
38
|
+
|
|
39
|
+
if status == "active" and reinforce_count >= 3 and lid and lid not in existing_ids:
|
|
40
|
+
md = f"""
|
|
41
|
+
### Learning: {l.get('error', 'Unknown Error')}
|
|
42
|
+
**ID:** {lid}
|
|
43
|
+
**Date Graduated:** {datetime.now().strftime('%Y-%m-%d')}
|
|
44
|
+
**Scope:** {l.get('scope', 'global')}
|
|
45
|
+
**Cause:** {l.get('cause', '')}
|
|
46
|
+
**Prevention:** {l.get('prevention', '')}
|
|
47
|
+
**Reinforced:** {reinforce_count} times
|
|
48
|
+
|
|
49
|
+
"""
|
|
50
|
+
append_to_graduated(md)
|
|
51
|
+
existing_ids.add(lid)
|
|
52
|
+
count += 1
|
|
53
|
+
except Exception as e:
|
|
54
|
+
print(f"Error processing {learnings_path}: {e}")
|
|
55
|
+
return count
|
|
56
|
+
|
|
57
|
+
def graduate_decisions(existing_ids):
|
|
58
|
+
decisions_path = os.path.join(os.getcwd(), ".cm", "decisions.json")
|
|
59
|
+
if not os.path.exists(decisions_path):
|
|
60
|
+
return 0
|
|
61
|
+
|
|
62
|
+
count = 0
|
|
63
|
+
try:
|
|
64
|
+
with open(decisions_path, 'r', encoding='utf-8') as f:
|
|
65
|
+
decisions = json.load(f)
|
|
66
|
+
|
|
67
|
+
for d in decisions:
|
|
68
|
+
did = str(d.get('id', ''))
|
|
69
|
+
status = d.get('status', 'active')
|
|
70
|
+
|
|
71
|
+
if status == "active" and did and did not in existing_ids:
|
|
72
|
+
md = f"""
|
|
73
|
+
### Architecture Decision: {d.get('decision', 'Unknown')}
|
|
74
|
+
**ID:** {did}
|
|
75
|
+
**Date Graduated:** {datetime.now().strftime('%Y-%m-%d')}
|
|
76
|
+
**Scope:** {d.get('scope', 'global')}
|
|
77
|
+
**Rationale:** {d.get('rationale', '')}
|
|
78
|
+
|
|
79
|
+
"""
|
|
80
|
+
append_to_graduated(md)
|
|
81
|
+
existing_ids.add(did)
|
|
82
|
+
count += 1
|
|
83
|
+
except Exception as e:
|
|
84
|
+
print(f"Error processing {decisions_path}: {e}")
|
|
85
|
+
return count
|
|
86
|
+
|
|
87
|
+
def main():
|
|
88
|
+
existing_ids = get_existing_ids()
|
|
89
|
+
start_count = len(existing_ids)
|
|
90
|
+
|
|
91
|
+
l_count = graduate_learnings(existing_ids)
|
|
92
|
+
d_count = graduate_decisions(existing_ids)
|
|
93
|
+
|
|
94
|
+
if l_count > 0 or d_count > 0:
|
|
95
|
+
print(f"✅ Graduated {l_count} learnings and {d_count} decisions to NotebookLM Brain.")
|
|
96
|
+
print(f" → Saved to {GRADUATED_FILE}")
|
|
97
|
+
else:
|
|
98
|
+
print("💡 No new highly-reinforced learnings or active decisions to graduate.")
|
|
99
|
+
|
|
100
|
+
if __name__ == "__main__":
|
|
101
|
+
main()
|
|
@@ -27,7 +27,7 @@ deprecated: false
|
|
|
27
27
|
1. **Intent** — Ask clarifying questions. Don't assume scope. Surface hidden requirements.
|
|
28
28
|
2. **Options** — List 2-3 approaches with pros/cons. Recommend one with reasoning.
|
|
29
29
|
3. **Scope** — Must-have vs nice-to-have; edges to handle vs explicitly skip.
|
|
30
|
-
4. **Design** — Data flow, component boundaries, API contracts. UI work → `cm-
|
|
30
|
+
4. **Design** — Data flow, component boundaries, API contracts. UI work → `cm-design-system`.
|
|
31
31
|
|
|
32
32
|
**Red flags (STOP)**: code before brainstorm; assuming intent; skipping scope; "it's simple."
|
|
33
33
|
|
|
@@ -80,10 +80,10 @@ Update `.cm/CONTINUITY.md`:
|
|
|
80
80
|
| After planning... | Use skill |
|
|
81
81
|
|---|---|
|
|
82
82
|
| Complex initiative | `cm-brainstorm-idea` (run BEFORE) |
|
|
83
|
-
| Need isolated workspace | `cm-
|
|
83
|
+
| Need isolated workspace | `cm-execution` |
|
|
84
84
|
| Execute the plan | `cm-execution` |
|
|
85
85
|
| Tests first | `cm-tdd` |
|
|
86
|
-
| UI/frontend | `cm-
|
|
86
|
+
| UI/frontend | `cm-design-system` |
|
|
87
87
|
|
|
88
88
|
## Karpathy Discipline — Think Before Coding
|
|
89
89
|
|
|
@@ -140,7 +140,7 @@ After creating `.project-identity.json`, update `~/.cm-identity-history.json`:
|
|
|
140
140
|
## Phase 0.5: Security Foundation 🛡️
|
|
141
141
|
|
|
142
142
|
> **NEW — Defense-in-depth from day 0. Secrets leak at project start when security is "later."**
|
|
143
|
-
> **Calls `cm-
|
|
143
|
+
> **Calls `cm-safe-deploy` for setup.**
|
|
144
144
|
|
|
145
145
|
### Step 1: Create `.gitleaks.toml`
|
|
146
146
|
|
|
@@ -208,7 +208,7 @@ Add to `package.json`:
|
|
|
208
208
|
```json
|
|
209
209
|
{
|
|
210
210
|
"scripts": {
|
|
211
|
-
"security:scan": "node scripts/security-scan.js || echo 'Create scripts/security-scan.js from cm-
|
|
211
|
+
"security:scan": "node scripts/security-scan.js || echo 'Create scripts/security-scan.js from cm-safe-deploy guidance'"
|
|
212
212
|
}
|
|
213
213
|
}
|
|
214
214
|
```
|
|
@@ -196,7 +196,7 @@ After ANY gate fails, **FIRST run Memory Integrity Check:**
|
|
|
196
196
|
| `cm-identity-guard` | Verify identity before using quality gate to ship |
|
|
197
197
|
| `cm-tdd` | TDD creates the logic for Layer 3 |
|
|
198
198
|
| `cm-safe-i18n` | Leverages Layer 4 for parity checks |
|
|
199
|
-
| `cm-
|
|
199
|
+
| `cm-safe-deploy` | **PRE-REQUISITE for production:** Security scan (Snyk + Aikido) PASS must be in deployment evidence. No production deploy without security clearance. |
|
|
200
200
|
|
|
201
201
|
## Evidence Requirements for Production Deploy
|
|
202
202
|
|