codymaster 4.6.0 → 4.8.0
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 +19 -1
- package/README.md +80 -30
- package/dist/browse-server.js +251 -0
- package/dist/cli/command-registry.js +26 -0
- package/dist/cli/commands/agent.js +120 -0
- package/dist/cli/commands/dashboard.js +93 -0
- package/dist/cli/commands/design-studio.js +111 -0
- package/dist/cli/commands/distro.js +25 -0
- package/dist/cli/commands/engineering.js +488 -0
- package/dist/cli/commands/project.js +324 -0
- package/dist/cli/commands/skill-chain.js +269 -0
- package/dist/cli/commands/system.js +89 -0
- package/dist/cli/commands/task.js +254 -0
- package/dist/cli/update-check.js +83 -0
- package/dist/cm-config.js +110 -0
- package/dist/cm-suggest.js +77 -0
- package/dist/distro-validate.js +54 -0
- package/dist/guardian-core.js +74 -0
- package/dist/index.js +36 -2759
- package/dist/mcp-context-server.js +60 -1
- package/dist/mcp-skills-tools.js +81 -0
- package/dist/retro-summary.js +70 -0
- package/dist/second-opinion-providers.js +79 -0
- package/dist/sprint-pipeline.js +228 -0
- package/dist/storage-backend.js +5 -60
- package/dist/utils/cli-utils.js +76 -0
- package/dist/utils/skill-utils.js +32 -0
- package/install.sh +274 -50
- package/package.json +16 -5
- package/scripts/build-skills.mjs +51 -0
- package/scripts/gate-0-repo-hygiene.js +75 -0
- package/scripts/postinstall.js +55 -0
- package/scripts/security-scan.js +1 -1
- package/scripts/validate-skills.mjs +42 -0
- package/scripts/viking-demo.ts +105 -0
- package/skills/CLAUDE.md +2 -2
- package/skills/cm-ads-tracker/SKILL.md +3 -6
- package/skills/cm-browse/SKILL.md +28 -0
- package/skills/cm-conductor-worktrees/SKILL.md +24 -0
- package/skills/cm-content-factory/SKILL.md +1 -1
- 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 +99 -99
- package/skills/cm-content-factory/landing/script.js +42 -0
- package/skills/cm-content-factory/landing/translations.js +400 -400
- package/skills/cm-design-studio/SKILL.md +30 -0
- package/skills/cm-ecosystem-roadmap/SKILL.md +11 -0
- package/skills/cm-engineering-meta/SKILL.md +69 -0
- package/skills/cm-growth-hacking/SKILL.md +1 -12
- package/skills/cm-guardian-runtime/SKILL.md +22 -0
- package/skills/cm-mcp-engineering/SKILL.md +18 -0
- package/skills/cm-notebooklm/SKILL.md +1 -17
- package/skills/cm-post-deploy-canary/SKILL.md +18 -0
- package/skills/cm-qa-visual-cli/SKILL.md +18 -0
- package/skills/cm-retro-cli/SKILL.md +19 -0
- package/skills/cm-second-opinion-cli/SKILL.md +19 -0
- package/skills/cm-secret-shield/SKILL.md +2 -2
- package/skills/cm-sprint-bus/SKILL.md +29 -0
- package/skills/cm-tdd/SKILL.md +61 -74
- package/skills/profiles/README.md +21 -0
- package/skills/profiles/core.txt +23 -0
- package/skills/profiles/design.txt +6 -0
- package/skills/profiles/full.txt +58 -0
- package/skills/profiles/growth.txt +10 -0
- package/skills/profiles/knowledge.txt +7 -0
- package/scripts/test-gemini.js +0 -13
- package/skills/cm-frappe-agent/SKILL.md +0 -134
- package/skills/cm-frappe-agent/agents/doctype-architect.md +0 -596
- package/skills/cm-frappe-agent/agents/erpnext-customizer.md +0 -643
- package/skills/cm-frappe-agent/agents/frappe-backend.md +0 -814
- package/skills/cm-frappe-agent/agents/frappe-custom-frontend.md +0 -557
- package/skills/cm-frappe-agent/agents/frappe-debugger.md +0 -625
- package/skills/cm-frappe-agent/agents/frappe-fixer.md +0 -275
- package/skills/cm-frappe-agent/agents/frappe-frontend.md +0 -660
- package/skills/cm-frappe-agent/agents/frappe-installer.md +0 -158
- package/skills/cm-frappe-agent/agents/frappe-performance.md +0 -307
- package/skills/cm-frappe-agent/agents/frappe-planner.md +0 -419
- package/skills/cm-frappe-agent/agents/frappe-remote-ops.md +0 -153
- package/skills/cm-frappe-agent/agents/github-workflow.md +0 -286
- package/skills/cm-frappe-agent/commands/frappe-app.md +0 -351
- package/skills/cm-frappe-agent/commands/frappe-backend.md +0 -162
- package/skills/cm-frappe-agent/commands/frappe-bench.md +0 -254
- package/skills/cm-frappe-agent/commands/frappe-debug.md +0 -263
- package/skills/cm-frappe-agent/commands/frappe-doctype-create.md +0 -272
- package/skills/cm-frappe-agent/commands/frappe-doctype-field.md +0 -310
- package/skills/cm-frappe-agent/commands/frappe-erpnext.md +0 -210
- package/skills/cm-frappe-agent/commands/frappe-fix.md +0 -59
- package/skills/cm-frappe-agent/commands/frappe-frontend.md +0 -210
- package/skills/cm-frappe-agent/commands/frappe-fullstack.md +0 -243
- package/skills/cm-frappe-agent/commands/frappe-github.md +0 -57
- package/skills/cm-frappe-agent/commands/frappe-install.md +0 -52
- package/skills/cm-frappe-agent/commands/frappe-plan.md +0 -442
- package/skills/cm-frappe-agent/commands/frappe-remote.md +0 -58
- package/skills/cm-frappe-agent/commands/frappe-test.md +0 -356
- package/skills/cm-frappe-agent/docs/README.md +0 -51
- package/skills/cm-frappe-agent/docs/agents-catalog.md +0 -113
- package/skills/cm-frappe-agent/docs/architecture.md +0 -149
- package/skills/cm-frappe-agent/docs/commands-catalog.md +0 -82
- package/skills/cm-frappe-agent/docs/resources-catalog.md +0 -66
- package/skills/cm-frappe-agent/docs/sitemap-urls.txt +0 -52
- package/skills/cm-frappe-agent/docs/sitemap.md +0 -81
- package/skills/cm-frappe-agent/docs/sop/user-guide.md +0 -178
- package/skills/cm-frappe-agent/docs/sop/vibe-coding-guide.md +0 -122
- package/skills/cm-frappe-agent/resources/7-layer-architecture.md +0 -985
- package/skills/cm-frappe-agent/resources/bench_commands.md +0 -73
- package/skills/cm-frappe-agent/resources/code-patterns-guide.md +0 -948
- package/skills/cm-frappe-agent/resources/common_pitfalls.md +0 -266
- package/skills/cm-frappe-agent/resources/doctype-registry.md +0 -158
- package/skills/cm-frappe-agent/resources/installation-guide.md +0 -289
- package/skills/cm-frappe-agent/resources/rest-api-patterns.md +0 -182
- package/skills/cm-frappe-agent/resources/scaffold_checklist.md +0 -82
- package/skills/cm-frappe-agent/resources/upgrade_patterns.md +0 -113
- package/skills/cm-frappe-agent/resources/web-form-patterns.md +0 -252
- package/skills/cm-frappe-agent/skills/bench-commands/SKILL.md +0 -621
- package/skills/cm-frappe-agent/skills/client-scripts/SKILL.md +0 -642
- package/skills/cm-frappe-agent/skills/doctype-patterns/SKILL.md +0 -576
- package/skills/cm-frappe-agent/skills/frappe-api/SKILL.md +0 -740
- package/skills/cm-frappe-agent/skills/remote-operations/SKILL.md +0 -47
- package/skills/cm-frappe-agent/skills/server-scripts/SKILL.md +0 -608
- package/skills/cm-frappe-agent/skills/web-forms/SKILL.md +0 -46
- package/skills/frappe-app-builder.zip +0 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.registerDashboardCommands = registerDashboardCommands;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const dashboard_1 = require("../../dashboard");
|
|
9
|
+
const data_1 = require("../../data");
|
|
10
|
+
const theme_1 = require("../../ui/theme");
|
|
11
|
+
const box_1 = require("../../ui/box");
|
|
12
|
+
const cli_utils_1 = require("../../utils/cli-utils");
|
|
13
|
+
function registerDashboardCommands(program) {
|
|
14
|
+
program
|
|
15
|
+
.command('dashboard [cmd]')
|
|
16
|
+
.alias('dash')
|
|
17
|
+
.description('Dashboard server (start|stop|status|open)')
|
|
18
|
+
.option('-p, --port <port>', 'Port number', String(data_1.DEFAULT_PORT))
|
|
19
|
+
.action((cmd, opts) => {
|
|
20
|
+
const port = parseInt(opts.port) || data_1.DEFAULT_PORT;
|
|
21
|
+
switch (cmd) {
|
|
22
|
+
case 'start':
|
|
23
|
+
case undefined:
|
|
24
|
+
if (isDashboardRunning()) {
|
|
25
|
+
console.log((0, box_1.renderResult)('warning', 'Dashboard already running.', [`${(0, theme_1.dim)('URL:')} ${(0, theme_1.brand)(`http://localhost:${port}`)}`]));
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
(0, dashboard_1.launchDashboard)(port);
|
|
29
|
+
break;
|
|
30
|
+
case 'stop':
|
|
31
|
+
stopDashboard();
|
|
32
|
+
break;
|
|
33
|
+
case 'status':
|
|
34
|
+
dashboardStatus(port);
|
|
35
|
+
break;
|
|
36
|
+
case 'open':
|
|
37
|
+
console.log((0, box_1.renderResult)('info', `Opening http://localhost:${port} ...`));
|
|
38
|
+
(0, cli_utils_1.openUrl)(`http://localhost:${port}`);
|
|
39
|
+
break;
|
|
40
|
+
case 'url':
|
|
41
|
+
console.log(`http://localhost:${port}`);
|
|
42
|
+
break;
|
|
43
|
+
default: console.log((0, box_1.renderResult)('error', `Unknown: ${cmd}`, [(0, theme_1.dim)('Available: start, stop, status, open, url')]));
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
function isDashboardRunning() {
|
|
48
|
+
try {
|
|
49
|
+
if (!fs_1.default.existsSync(data_1.PID_FILE))
|
|
50
|
+
return false;
|
|
51
|
+
const pid = parseInt(fs_1.default.readFileSync(data_1.PID_FILE, 'utf-8').trim());
|
|
52
|
+
process.kill(pid, 0);
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
catch (_a) {
|
|
56
|
+
try {
|
|
57
|
+
fs_1.default.unlinkSync(data_1.PID_FILE);
|
|
58
|
+
}
|
|
59
|
+
catch (_b) { }
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function stopDashboard() {
|
|
64
|
+
try {
|
|
65
|
+
if (!fs_1.default.existsSync(data_1.PID_FILE)) {
|
|
66
|
+
console.log((0, box_1.renderResult)('warning', 'No dashboard running.'));
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
const pid = parseInt(fs_1.default.readFileSync(data_1.PID_FILE, 'utf-8').trim());
|
|
70
|
+
process.kill(pid, 'SIGTERM');
|
|
71
|
+
try {
|
|
72
|
+
fs_1.default.unlinkSync(data_1.PID_FILE);
|
|
73
|
+
}
|
|
74
|
+
catch (_a) { }
|
|
75
|
+
console.log((0, box_1.renderResult)('success', `Dashboard stopped (PID ${pid}).`));
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
console.log((0, box_1.renderResult)('error', `Failed to stop: ${err.message}`));
|
|
79
|
+
try {
|
|
80
|
+
fs_1.default.unlinkSync(data_1.PID_FILE);
|
|
81
|
+
}
|
|
82
|
+
catch (_b) { }
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
function dashboardStatus(port) {
|
|
86
|
+
if (isDashboardRunning()) {
|
|
87
|
+
const pid = fs_1.default.readFileSync(data_1.PID_FILE, 'utf-8').trim();
|
|
88
|
+
console.log((0, box_1.renderResult)('success', 'Dashboard RUNNING', [`${(0, theme_1.dim)('PID:')} ${(0, theme_1.brand)(pid)}`, `${(0, theme_1.dim)('URL:')} ${(0, theme_1.brand)(`http://localhost:${port}`)}`]));
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
console.log((0, box_1.renderResult)('warning', 'Dashboard NOT running', [(0, theme_1.dim)('Start with: cm dashboard start')]));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.initDesignStudioArtifacts = initDesignStudioArtifacts;
|
|
7
|
+
exports.registerDesignStudioCommands = registerDesignStudioCommands;
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
11
|
+
function projectPath(opt) {
|
|
12
|
+
return path_1.default.resolve(opt || process.cwd());
|
|
13
|
+
}
|
|
14
|
+
const CHECKLIST = `# Design studio — checklist
|
|
15
|
+
|
|
16
|
+
- [ ] Problem / JTBD one-liner
|
|
17
|
+
- [ ] 2–3 UI variants named (A/B/C)
|
|
18
|
+
- [ ] Chosen variant + rationale
|
|
19
|
+
- [ ] Handoff block filled in HANDOFF.md
|
|
20
|
+
`;
|
|
21
|
+
const VARIANTS = `# Variants
|
|
22
|
+
|
|
23
|
+
| Id | Name | Notes |
|
|
24
|
+
|----|------|-------|
|
|
25
|
+
| A | | |
|
|
26
|
+
| B | | |
|
|
27
|
+
| C | | |
|
|
28
|
+
`;
|
|
29
|
+
const HANDOFF = `# Handoff to implementation
|
|
30
|
+
|
|
31
|
+
**Chosen variant:** (A/B/C)
|
|
32
|
+
|
|
33
|
+
**Screens / flows:**
|
|
34
|
+
|
|
35
|
+
**Tokens / components to reuse:**
|
|
36
|
+
|
|
37
|
+
**Out of scope:**
|
|
38
|
+
|
|
39
|
+
**Agent prompt stub:**
|
|
40
|
+
|
|
41
|
+
\`\`\`
|
|
42
|
+
Implement the chosen variant using existing design system tokens. …
|
|
43
|
+
\`\`\`
|
|
44
|
+
`;
|
|
45
|
+
const README = `# .cm/design-studio
|
|
46
|
+
|
|
47
|
+
Local artifact folder for **cm-design-studio**: variants, checklist, handoff.
|
|
48
|
+
|
|
49
|
+
Happy path:
|
|
50
|
+
|
|
51
|
+
1. \`cm design-studio init\`
|
|
52
|
+
2. Edit CHECKLIST.md + VARIANTS.md
|
|
53
|
+
3. Fill HANDOFF.md, then run your build skill (e.g. cm-execution) with that stub.
|
|
54
|
+
`;
|
|
55
|
+
/** Writes default artifact files; skips paths that already exist. Returns created + skipped counts. */
|
|
56
|
+
function initDesignStudioArtifacts(root) {
|
|
57
|
+
const base = path_1.default.join(root, '.cm', 'design-studio');
|
|
58
|
+
fs_1.default.mkdirSync(base, { recursive: true });
|
|
59
|
+
const files = [
|
|
60
|
+
['README.md', README],
|
|
61
|
+
['CHECKLIST.md', CHECKLIST],
|
|
62
|
+
['VARIANTS.md', VARIANTS],
|
|
63
|
+
['HANDOFF.md', HANDOFF],
|
|
64
|
+
];
|
|
65
|
+
let created = 0;
|
|
66
|
+
let skipped = 0;
|
|
67
|
+
for (const [name, body] of files) {
|
|
68
|
+
const p = path_1.default.join(base, name);
|
|
69
|
+
if (fs_1.default.existsSync(p)) {
|
|
70
|
+
skipped++;
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
fs_1.default.writeFileSync(p, body, 'utf8');
|
|
74
|
+
created++;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return { created, skipped };
|
|
78
|
+
}
|
|
79
|
+
function registerDesignStudioCommands(program) {
|
|
80
|
+
const ds = program
|
|
81
|
+
.command('design-studio')
|
|
82
|
+
.description('Design variant workspace under .cm/design-studio');
|
|
83
|
+
ds.command('init')
|
|
84
|
+
.description('Create .cm/design-studio with checklist and handoff templates')
|
|
85
|
+
.option('--project <dir>', 'project root', process.cwd())
|
|
86
|
+
.action((opts) => {
|
|
87
|
+
const root = projectPath(opts.project);
|
|
88
|
+
const { created, skipped } = initDesignStudioArtifacts(root);
|
|
89
|
+
const base = path_1.default.join(root, '.cm', 'design-studio');
|
|
90
|
+
if (created)
|
|
91
|
+
console.log(chalk_1.default.green(`wrote ${created} file(s) under`), base);
|
|
92
|
+
if (skipped)
|
|
93
|
+
console.log(chalk_1.default.yellow(`skipped ${skipped} existing`));
|
|
94
|
+
});
|
|
95
|
+
ds.command('status')
|
|
96
|
+
.description('List design-studio artifact files if present')
|
|
97
|
+
.option('--project <dir>', 'project root', process.cwd())
|
|
98
|
+
.action((opts) => {
|
|
99
|
+
const root = projectPath(opts.project);
|
|
100
|
+
const base = path_1.default.join(root, '.cm', 'design-studio');
|
|
101
|
+
if (!fs_1.default.existsSync(base)) {
|
|
102
|
+
console.log(chalk_1.default.yellow('Not initialized. Run:'), chalk_1.default.cyan('cm design-studio init'));
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
for (const f of fs_1.default.readdirSync(base)) {
|
|
106
|
+
const p = path_1.default.join(base, f);
|
|
107
|
+
const st = fs_1.default.statSync(p);
|
|
108
|
+
console.log(st.isDirectory() ? `${f}/` : f);
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.registerDistroCommands = registerDistroCommands;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const distro_validate_1 = require("../../distro-validate");
|
|
9
|
+
function registerDistroCommands(program) {
|
|
10
|
+
const distro = program.command('distro').description('Skill pack validation (ecosystem roadmap)');
|
|
11
|
+
distro
|
|
12
|
+
.command('validate')
|
|
13
|
+
.description('Validate a skill directory (SKILL.md / tmpl + optional meta.json)')
|
|
14
|
+
.argument('<dir>', 'path to skill folder')
|
|
15
|
+
.action((dir) => {
|
|
16
|
+
const r = (0, distro_validate_1.validateSkillPackDir)(dir);
|
|
17
|
+
for (const w of r.warnings)
|
|
18
|
+
console.log(chalk_1.default.yellow('warning:'), w);
|
|
19
|
+
for (const e of r.errors)
|
|
20
|
+
console.error(chalk_1.default.red('error:'), e);
|
|
21
|
+
if (!r.ok)
|
|
22
|
+
process.exit(1);
|
|
23
|
+
console.log(chalk_1.default.green('OK'), dir);
|
|
24
|
+
});
|
|
25
|
+
}
|