@modus-ai/modus 0.1.3 → 0.1.5

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.
Files changed (39) hide show
  1. package/README.md +76 -28
  2. package/dist/cli/index.js +188 -12
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/commands/doctor.d.ts +2 -0
  5. package/dist/commands/doctor.d.ts.map +1 -0
  6. package/dist/commands/doctor.js +180 -0
  7. package/dist/commands/doctor.js.map +1 -0
  8. package/dist/commands/init.d.ts +12 -0
  9. package/dist/commands/init.d.ts.map +1 -1
  10. package/dist/commands/init.js +260 -6
  11. package/dist/commands/init.js.map +1 -1
  12. package/dist/commands/skill.d.ts +7 -0
  13. package/dist/commands/skill.d.ts.map +1 -0
  14. package/dist/commands/skill.js +175 -0
  15. package/dist/commands/skill.js.map +1 -0
  16. package/dist/commands/status.d.ts +2 -0
  17. package/dist/commands/status.d.ts.map +1 -0
  18. package/dist/commands/status.js +133 -0
  19. package/dist/commands/status.js.map +1 -0
  20. package/dist/generators/codebuddy.d.ts +7 -0
  21. package/dist/generators/codebuddy.d.ts.map +1 -1
  22. package/dist/generators/codebuddy.js +35 -3
  23. package/dist/generators/codebuddy.js.map +1 -1
  24. package/dist/utils/analytics.d.ts +14 -0
  25. package/dist/utils/analytics.d.ts.map +1 -0
  26. package/dist/utils/analytics.js +81 -0
  27. package/dist/utils/analytics.js.map +1 -0
  28. package/dist/utils/config.d.ts +10 -0
  29. package/dist/utils/config.d.ts.map +1 -1
  30. package/dist/utils/config.js.map +1 -1
  31. package/package.json +1 -1
  32. package/templates/commands/auto.md +38 -0
  33. package/templates/commands/modus.md +14 -2
  34. package/templates/hooks/session-start.py +52 -0
  35. package/templates/hooks/stop-update-skills.py +58 -0
  36. package/templates/skills/modus-auto/SKILL.md +210 -0
  37. package/templates/skills/modus-init/SKILL.md +133 -11
  38. package/templates/skills/modus-plan/SKILL.md +132 -19
  39. package/templates/skills/modus-spec/SKILL.md +109 -6
@@ -0,0 +1,133 @@
1
+ import path from 'node:path';
2
+ import fs from 'node:fs';
3
+ import chalk from 'chalk';
4
+ import { loadConfig } from '../utils/config.js';
5
+ import { fileExists, listDirs, readFile } from '../utils/file-system.js';
6
+ function extractFrontmatterField(content, field) {
7
+ const match = content.match(new RegExp(`^${field}:\\s*(.+)$`, 'm'));
8
+ return match ? match[1].trim().replace(/['"]/g, '') : undefined;
9
+ }
10
+ function extractMaturity(content) {
11
+ return extractFrontmatterField(content, 'maturity') ?? 'draft';
12
+ }
13
+ function extractUsageCount(content) {
14
+ const val = extractFrontmatterField(content, 'usage_count');
15
+ return val ? parseInt(val, 10) : 0;
16
+ }
17
+ function maturityBadge(maturity) {
18
+ switch (maturity) {
19
+ case 'proven': return chalk.green(`● ${maturity}`);
20
+ case 'verified': return chalk.cyan(`◑ ${maturity}`);
21
+ default: return chalk.gray(`○ draft`);
22
+ }
23
+ }
24
+ function countActivePlans(projectRoot) {
25
+ const activePlanDir = path.join(projectRoot, 'modus', 'plans', 'active');
26
+ if (!fs.existsSync(activePlanDir))
27
+ return 0;
28
+ return listDirs(activePlanDir).length;
29
+ }
30
+ function countActiveSPecs(projectRoot) {
31
+ const changesDir = path.join(projectRoot, 'modus', 'changes');
32
+ if (!fs.existsSync(changesDir))
33
+ return 0;
34
+ return listDirs(changesDir).filter(d => d !== 'archive').length;
35
+ }
36
+ function getSkills(projectRoot, prefix) {
37
+ const skillsDir = path.join(projectRoot, '.codebuddy', 'skills');
38
+ if (!fs.existsSync(skillsDir))
39
+ return [];
40
+ return listDirs(skillsDir)
41
+ .filter(d => d.startsWith(prefix))
42
+ .map(skillDir => {
43
+ const skillPath = path.join(skillsDir, skillDir, 'SKILL.md');
44
+ if (!fileExists(skillPath))
45
+ return null;
46
+ const content = readFile(skillPath);
47
+ return {
48
+ name: skillDir,
49
+ maturity: extractMaturity(content),
50
+ lastReferenced: extractFrontmatterField(content, 'last_referenced'),
51
+ usageCount: extractUsageCount(content),
52
+ };
53
+ })
54
+ .filter(Boolean);
55
+ }
56
+ export async function runStatus(projectRoot) {
57
+ const configPath = path.join(projectRoot, 'modus', 'config.yaml');
58
+ const isInitialized = fileExists(configPath);
59
+ console.log(chalk.bold('\n modus status\n'));
60
+ console.log(chalk.gray(` Project root: ${projectRoot}\n`));
61
+ // ── Initialization ──────────────────────────────────────────────────────────
62
+ if (!isInitialized) {
63
+ console.log(chalk.yellow(' ✗ Not initialized'));
64
+ console.log(chalk.dim(' Run `modus init` to get started.\n'));
65
+ return;
66
+ }
67
+ const config = loadConfig(projectRoot);
68
+ console.log(chalk.green(' ✓ Initialized') + chalk.gray(` (v${config.version})`));
69
+ if (config.context)
70
+ console.log(chalk.dim(` Context : ${config.context}`));
71
+ if (config.techStack)
72
+ console.log(chalk.dim(` Tech stack : ${config.techStack}`));
73
+ if (config.teamName)
74
+ console.log(chalk.dim(` Team : ${config.teamName}`));
75
+ if (config.tapdProjectId)
76
+ console.log(chalk.dim(` TAPD ID : ${config.tapdProjectId}`));
77
+ console.log('');
78
+ // ── Knowledge Catalog ───────────────────────────────────────────────────────
79
+ const catalogPath = path.join(projectRoot, 'modus', 'knowledge-catalog.md');
80
+ if (fileExists(catalogPath)) {
81
+ const stat = fs.statSync(catalogPath);
82
+ const ageMs = Date.now() - stat.mtimeMs;
83
+ const ageDays = Math.floor(ageMs / (1000 * 60 * 60 * 24));
84
+ const freshness = ageDays < 7
85
+ ? chalk.green(`fresh (${ageDays}d ago)`)
86
+ : ageDays < 30
87
+ ? chalk.yellow(`${ageDays}d ago`)
88
+ : chalk.red(`stale (${ageDays}d ago)`);
89
+ console.log(` Knowledge catalog ${freshness}`);
90
+ }
91
+ else {
92
+ console.log(` Knowledge catalog ${chalk.gray('not generated')}`);
93
+ }
94
+ // ── Business Skills ─────────────────────────────────────────────────────────
95
+ const bizSkills = getSkills(projectRoot, 'modus-biz-');
96
+ console.log(`\n Business Skills ${chalk.white(String(bizSkills.length))}`);
97
+ if (bizSkills.length > 0) {
98
+ const byMaturity = { proven: 0, verified: 0, draft: 0 };
99
+ for (const s of bizSkills) {
100
+ byMaturity[s.maturity] = (byMaturity[s.maturity] ?? 0) + 1;
101
+ }
102
+ const parts = [];
103
+ if (byMaturity['proven'])
104
+ parts.push(chalk.green(`${byMaturity['proven']} proven`));
105
+ if (byMaturity['verified'])
106
+ parts.push(chalk.cyan(`${byMaturity['verified']} verified`));
107
+ if (byMaturity['draft'])
108
+ parts.push(chalk.gray(`${byMaturity['draft']} draft`));
109
+ console.log(chalk.dim(` Maturity: ${parts.join(', ')}`));
110
+ for (const s of bizSkills) {
111
+ const usage = s.usageCount ? chalk.dim(` ×${s.usageCount}`) : '';
112
+ console.log(` ${chalk.white(s.name.replace('modus-biz-', ''))} ${maturityBadge(s.maturity)}${usage}`);
113
+ }
114
+ }
115
+ // ── Framework Skills (Layer 0-T / Layer 1) ──────────────────────────────────
116
+ const fwSkills = getSkills(projectRoot, 'modus-').filter(s => !s.name.startsWith('modus-biz-') && !s.name.startsWith('modus-harness-'));
117
+ if (fwSkills.length > 0) {
118
+ console.log(`\n Framework Skills ${chalk.white(String(fwSkills.length))}`);
119
+ for (const s of fwSkills) {
120
+ console.log(` ${chalk.white(s.name.replace('modus-', ''))} ${maturityBadge(s.maturity)}`);
121
+ }
122
+ }
123
+ // ── Active Plans / Changes ──────────────────────────────────────────────────
124
+ const activePlans = countActivePlans(projectRoot);
125
+ const activeChanges = countActiveSPecs(projectRoot);
126
+ console.log(`\n Active plans ${activePlans === 0 ? chalk.gray('0') : chalk.yellow(String(activePlans))}`);
127
+ console.log(` Active spec changes ${activeChanges === 0 ? chalk.gray('0') : chalk.yellow(String(activeChanges))}`);
128
+ // ── Enabled Commands ────────────────────────────────────────────────────────
129
+ const enabled = config.commands?.enabled ?? [];
130
+ console.log(`\n Enabled commands ${enabled.map(c => chalk.cyan(`/modus:${c}`)).join(' ')}`);
131
+ console.log('');
132
+ }
133
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -4,4 +4,11 @@ export interface GenerateOptions {
4
4
  syncScopes?: boolean;
5
5
  }
6
6
  export declare function generateCodeBuddyFiles(projectRoot: string, config: ModusConfig, opts?: GenerateOptions): void;
7
+ /**
8
+ * Regenerate hook command paths in `.codebuddy/settings.json` using the current
9
+ * project root. Useful after `git clone` to a different machine or path.
10
+ *
11
+ * Called by `modus rehook`.
12
+ */
13
+ export declare function rehookProject(projectRoot: string): void;
7
14
  //# sourceMappingURL=codebuddy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"codebuddy.d.ts","sourceRoot":"","sources":["../../src/generators/codebuddy.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AA6FtD,MAAM,WAAW,eAAe;IAC9B,qFAAqF;IACrF,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,WAAW,EACnB,IAAI,GAAE,eAAoB,GACzB,IAAI,CAWN"}
1
+ {"version":3,"file":"codebuddy.d.ts","sourceRoot":"","sources":["../../src/generators/codebuddy.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AA+FtD,MAAM,WAAW,eAAe;IAC9B,qFAAqF;IACrF,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,WAAW,EACnB,IAAI,GAAE,eAAoB,GACzB,IAAI,CAWN;AAuOD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CA2BvD"}
@@ -21,6 +21,7 @@ const FRAMEWORK_SKILLS = [
21
21
  'modus-vibe',
22
22
  'modus-plan',
23
23
  'modus-spec',
24
+ 'modus-auto',
24
25
  'modus-harness',
25
26
  'modus-harness-00-skills-builder',
26
27
  'modus-harness-01-analysis',
@@ -37,6 +38,7 @@ const SKILL_TEMPLATE_MAP = {
37
38
  'modus-vibe': 'modus-vibe/SKILL.md',
38
39
  'modus-plan': 'modus-plan/SKILL.md',
39
40
  'modus-spec': 'modus-spec/SKILL.md',
41
+ 'modus-auto': 'modus-auto/SKILL.md',
40
42
  'modus-harness': 'modus-harness/SKILL.md',
41
43
  'modus-harness-00-skills-builder': 'modus-harness-agents/00-skills-builder/SKILL.md',
42
44
  'modus-harness-01-analysis': 'modus-harness-agents/01-analysis/SKILL.md',
@@ -63,7 +65,7 @@ const HARNESS_AGENTS = [
63
65
  // ---------------------------------------------------------------------------
64
66
  // Commands
65
67
  // ---------------------------------------------------------------------------
66
- const COMMAND_IDS = ['init', 'vibe', 'plan', 'spec', 'harness'];
68
+ const COMMAND_IDS = ['init', 'vibe', 'plan', 'spec', 'auto', 'harness'];
67
69
  // ---------------------------------------------------------------------------
68
70
  // Hooks
69
71
  // ---------------------------------------------------------------------------
@@ -279,12 +281,42 @@ function generateHooks(projectRoot, _config) {
279
281
  console.warn(' [warn] hooks-config.json template not found, skipping settings.json update');
280
282
  return;
281
283
  }
282
- // Rewrite hook command paths to use absolute project-relative path
284
+ // Replace $CODEBUDDY_PROJECT_DIR with just the project root (forward slashes for cross-platform).
285
+ // Template paths are like: $CODEBUDDY_PROJECT_DIR/.codebuddy/hooks/<script>
286
+ // so we replace the variable name only (no trailing slash) to produce a correct absolute path.
287
+ const normalizedRoot = projectRoot.replace(/\\/g, '/');
283
288
  const hooksConfigStr = JSON.stringify(hooksConfigTemplate)
284
- .replace(/\$CODEBUDDY_PROJECT_DIR\//g, path.join(projectRoot, '.codebuddy', 'hooks', '').replace(/\\/g, '/'));
289
+ .replace(/\$CODEBUDDY_PROJECT_DIR/g, normalizedRoot);
285
290
  const hooksConfig = JSON.parse(hooksConfigStr);
286
291
  mergeSettings(projectRoot, hooksConfig);
287
292
  }
293
+ /**
294
+ * Regenerate hook command paths in `.codebuddy/settings.json` using the current
295
+ * project root. Useful after `git clone` to a different machine or path.
296
+ *
297
+ * Called by `modus rehook`.
298
+ */
299
+ export function rehookProject(projectRoot) {
300
+ const settingsPath = path.join(projectRoot, SETTINGS_PATH);
301
+ if (!fileExists(settingsPath)) {
302
+ console.error(' [error] .codebuddy/settings.json not found. Run `modus init` first.');
303
+ return;
304
+ }
305
+ let settings;
306
+ try {
307
+ settings = JSON.parse(readFile(settingsPath));
308
+ }
309
+ catch {
310
+ console.error(' [error] Could not parse .codebuddy/settings.json');
311
+ return;
312
+ }
313
+ const normalizedRoot = projectRoot.replace(/\\/g, '/');
314
+ // Replace any absolute path that ends with /.codebuddy/hooks/ with the current project root
315
+ const updated = JSON.parse(JSON.stringify(settings).replace(/\/[^"]*\/\.codebuddy\/hooks\//g, `${normalizedRoot}/.codebuddy/hooks/`));
316
+ writeFile(settingsPath, JSON.stringify(updated, null, 2) + '\n');
317
+ console.log(' ✓ Hook paths updated in .codebuddy/settings.json');
318
+ console.log(` New root: ${normalizedRoot}`);
319
+ }
288
320
  // ---------------------------------------------------------------------------
289
321
  // Rules — CodeBuddy rules in .codebuddy/rules/
290
322
  // ---------------------------------------------------------------------------
@@ -1 +1 @@
1
- {"version":3,"file":"codebuddy.js","sourceRoot":"","sources":["../../src/generators/codebuddy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codebuddy.js","sourceRoot":"","sources":["../../src/generators/codebuddy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface TrackEvent {
2
+ event_type: string;
3
+ command?: string;
4
+ sub_agent?: string;
5
+ result?: string;
6
+ payload?: Record<string, unknown>;
7
+ }
8
+ /**
9
+ * Send a usage event to the Modus Collector API.
10
+ * Fire-and-forget: errors are silently swallowed so they never block the CLI.
11
+ * Respects MODUS_ANALYTICS_DISABLED=1 env var.
12
+ */
13
+ export declare function track(projectRoot: string, event: TrackEvent): void;
14
+ //# sourceMappingURL=analytics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/utils/analytics.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AA2BD;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CA+ClE"}
@@ -0,0 +1,81 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { execSync } from 'node:child_process';
3
+ import os from 'node:os';
4
+ import { loadConfig } from './config.js';
5
+ /**
6
+ * Derive an anonymized user ID from git email or hostname (MD5, not reversible).
7
+ * Never sends the raw email.
8
+ */
9
+ function resolveUserId() {
10
+ try {
11
+ const email = execSync('git config --global user.email', {
12
+ timeout: 2000,
13
+ stdio: ['ignore', 'pipe', 'ignore'],
14
+ })
15
+ .toString()
16
+ .trim();
17
+ if (email)
18
+ return createHash('md5').update(email).digest('hex').slice(0, 16);
19
+ }
20
+ catch {
21
+ // git not available or no config
22
+ }
23
+ return createHash('md5').update(os.hostname()).digest('hex').slice(0, 16);
24
+ }
25
+ let _userId = null;
26
+ function getUserId() {
27
+ if (!_userId)
28
+ _userId = resolveUserId();
29
+ return _userId;
30
+ }
31
+ /**
32
+ * Send a usage event to the Modus Collector API.
33
+ * Fire-and-forget: errors are silently swallowed so they never block the CLI.
34
+ * Respects MODUS_ANALYTICS_DISABLED=1 env var.
35
+ */
36
+ export function track(projectRoot, event) {
37
+ // Env-level opt-out
38
+ if (process.env['MODUS_ANALYTICS_DISABLED'] === '1')
39
+ return;
40
+ // Read config lazily; if it fails, just skip
41
+ let collectorUrl;
42
+ let token;
43
+ let projectId;
44
+ let teamName;
45
+ try {
46
+ const config = loadConfig(projectRoot);
47
+ const analytics = config.analytics;
48
+ if (analytics?.enabled === false)
49
+ return;
50
+ collectorUrl = analytics?.collectorUrl?.trim();
51
+ token = analytics?.token?.trim();
52
+ projectId = config.tapdProjectId ?? undefined;
53
+ teamName = config.teamName ?? undefined;
54
+ }
55
+ catch {
56
+ return;
57
+ }
58
+ if (!collectorUrl)
59
+ return;
60
+ const body = JSON.stringify({
61
+ event_type: event.event_type,
62
+ command: event.command,
63
+ sub_agent: event.sub_agent,
64
+ user_id: getUserId(),
65
+ project_id: projectId,
66
+ team_name: teamName,
67
+ result: event.result,
68
+ payload: event.payload,
69
+ });
70
+ // Defer so the main CLI flow is never blocked
71
+ setImmediate(() => {
72
+ const url = `${collectorUrl}/track`;
73
+ const headers = { 'Content-Type': 'application/json' };
74
+ if (token)
75
+ headers['Authorization'] = `Bearer ${token}`;
76
+ fetch(url, { method: 'POST', headers, body, signal: AbortSignal.timeout(3000) }).catch(() => {
77
+ // Intentionally silent
78
+ });
79
+ });
80
+ }
81
+ //# sourceMappingURL=analytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/utils/analytics.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,11 @@
1
+ export interface ModusAnalyticsConfig {
2
+ /** Whether to send usage events. Defaults to true. */
3
+ enabled?: boolean;
4
+ /** URL of the Modus Collector API, e.g. http://43.139.34.70:3456 */
5
+ collectorUrl?: string;
6
+ /** Bearer token for the collector API (optional). */
7
+ token?: string;
8
+ }
1
9
  export interface ModusConfig {
2
10
  version: string;
3
11
  commands: {
@@ -13,6 +21,8 @@ export interface ModusConfig {
13
21
  teamName?: string;
14
22
  /** MCP server configs collected during `modus init`. Written to .codebuddy/settings.json. */
15
23
  mcpServers?: Record<string, unknown>;
24
+ /** Usage analytics — sends command/subagent events to the Collector API. */
25
+ analytics?: ModusAnalyticsConfig;
16
26
  }
17
27
  export declare function getConfigPath(projectRoot: string): string;
18
28
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6FAA6F;IAC7F,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AASD,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,CAK3D;AAED,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAIzE"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,oBAAoB;IACnC,sDAAsD;IACtD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6FAA6F;IAC7F,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,4EAA4E;IAC5E,SAAS,CAAC,EAAE,oBAAoB,CAAC;CAClC;AASD,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,CAK3D;AAED,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAIzE"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAmBnE,MAAM,cAAc,GAAgB;IAClC,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE;QACR,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC;KACrD;CACF,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,WAAmB;IAC/C,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;AACxD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;AACzD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,WAAmB;IAC5C,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC9C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;IAC1D,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;IACjC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAgB,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,WAAmB,EAAE,MAAmB;IACjE,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IACtD,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AA8BnE,MAAM,cAAc,GAAgB;IAClC,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE;QACR,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC;KACrD;CACF,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,WAAmB;IAC/C,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;AACxD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;AACzD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,WAAmB;IAC5C,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC9C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;IAC1D,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;IACjC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAgB,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,WAAmB,EAAE,MAAmB;IACjE,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IACtD,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACjC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@modus-ai/modus",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "description": "Modus — Business-grounded AI coding accelerator for CodeBuddy IDE",
5
5
  "keywords": [
6
6
  "ai",
@@ -0,0 +1,38 @@
1
+ # /modus:auto
2
+
3
+ Smart mode recommendation. Reads a TAPD Story, scores it across 4 dimensions, recommends the best Modus mode, then launches it after human confirmation.
4
+
5
+ ## Instructions
6
+
7
+ Read and follow the skill at `.codebuddy/skills/modus-auto/SKILL.md` to execute this command.
8
+
9
+ ## Quick Summary
10
+
11
+ 1. Accept a TAPD Story URL (or prompt for manual input if omitted)
12
+ 2. Read Story content via TAPD MCP
13
+ 3. Score the story across 4 dimensions: Complexity / Risk / Clarity / Contract Impact
14
+ 4. Apply the decision tree → recommend one of: vibe / plan / spec / harness
15
+ 5. Show recommendation with reasoning + comparison table of other options
16
+ 6. Wait for human mode selection
17
+ 7. Show parameter confirmation window (second confirmation step)
18
+ 8. Auto-launch the selected mode with TAPD context pre-filled
19
+
20
+ ## Usage
21
+
22
+ ```
23
+ /modus:auto https://tapd.cn/company/stories/view/1234567890
24
+ /modus:auto (without URL — will prompt for manual Story content)
25
+ ```
26
+
27
+ ## Decision Tree (summary)
28
+
29
+ | Score | Recommended Mode |
30
+ |-------|-----------------|
31
+ | Low complexity + Low risk + No contract change | vibe |
32
+ | Medium complexity + High clarity + No contract change | plan |
33
+ | Any contract change OR High risk OR needs testable acceptance criteria | spec |
34
+ | Low clarity OR High complexity + High risk OR full automation needed | harness |
35
+
36
+ ## When to Use
37
+
38
+ Use `/modus:auto` when you have a TAPD Story but are unsure which Modus mode fits best. The AI analyzes the story and presents a reasoned recommendation — you still make the final call.
@@ -10,13 +10,25 @@ Modus — Business-grounded AI coding accelerator.
10
10
  | `/modus:vibe` | Context-aware vibe coding with business Skill backing |
11
11
  | `/modus:plan` | Plan mode with Skill-backed business context |
12
12
  | `/modus:spec` | OpenSpec-style spec-driven development |
13
+ | `/modus:auto` | Smart mode recommendation — reads TAPD Story, scores 4 dimensions, recommends vibe/plan/spec/harness |
13
14
  | `/modus:harness` | Full dual-loop multi-agent Harness (analyze → dev → test → review → deploy) |
14
15
 
15
16
  ## Quick Start
16
17
 
17
18
  1. Run `/modus:init` once to scan your project and build business Skills
18
- 2. Use `/modus:vibe` for day-to-day coding with project context
19
- 3. Use `/modus:harness` for full-cycle feature delivery from a TAPD Story URL
19
+ 2. Use `/modus:auto [tapd-url]` when unsure which mode fits — AI recommends based on story analysis
20
+ 3. Use `/modus:vibe` for day-to-day coding with project context
21
+ 4. Use `/modus:harness` for full-cycle feature delivery from a TAPD Story URL
22
+
23
+ ## Mode Selection Guide
24
+
25
+ | Situation | Recommended Command |
26
+ |-----------|-------------------|
27
+ | Not sure which mode to use | `/modus:auto [tapd-url]` |
28
+ | Quick bug fix / small change | `/modus:vibe` |
29
+ | Feature with design docs, no spec needed | `/modus:plan` |
30
+ | Interface contract changes / testable acceptance criteria | `/modus:spec` |
31
+ | Full automation from TAPD story to deployment | `/modus:harness` |
20
32
 
21
33
  ## Tips
22
34
 
@@ -7,6 +7,54 @@ the session so every conversation starts with business knowledge pre-loaded.
7
7
  import json
8
8
  import os
9
9
  import sys
10
+ import urllib.request
11
+ import hashlib
12
+ import socket
13
+
14
+
15
+ def _track(project_dir: str, event: dict) -> None:
16
+ """Send a usage event to the Modus Collector. Silently swallows all errors."""
17
+ if os.environ.get("MODUS_ANALYTICS_DISABLED") == "1":
18
+ return
19
+ try:
20
+ import yaml # type: ignore[import-untyped]
21
+ config_path = os.path.join(project_dir, "modus", "config.yaml")
22
+ with open(config_path, encoding="utf-8") as f:
23
+ config = yaml.safe_load(f) or {}
24
+ analytics = config.get("analytics") or {}
25
+ if analytics.get("enabled") is False:
26
+ return
27
+ collector_url = (analytics.get("collectorUrl") or "").strip()
28
+ if not collector_url:
29
+ return
30
+ token = (analytics.get("token") or "").strip()
31
+ # Anonymize user id
32
+ try:
33
+ import subprocess
34
+ email = subprocess.check_output(
35
+ ["git", "config", "--global", "user.email"],
36
+ timeout=2, stderr=subprocess.DEVNULL
37
+ ).decode().strip()
38
+ user_id = hashlib.md5(email.encode()).hexdigest()[:16] if email else None
39
+ except Exception:
40
+ user_id = hashlib.md5(socket.gethostname().encode()).hexdigest()[:16]
41
+
42
+ body = json.dumps({
43
+ **event,
44
+ "user_id": user_id,
45
+ "project_id": config.get("tapdProjectId"),
46
+ "team_name": config.get("teamName"),
47
+ }).encode()
48
+ req = urllib.request.Request(
49
+ f"{collector_url}/track",
50
+ data=body,
51
+ headers={"Content-Type": "application/json",
52
+ **({"Authorization": f"Bearer {token}"} if token else {})},
53
+ method="POST",
54
+ )
55
+ urllib.request.urlopen(req, timeout=2)
56
+ except Exception:
57
+ pass # Intentionally silent
10
58
 
11
59
 
12
60
  def read_file_safe(path: str, max_bytes: int = 8000) -> str:
@@ -79,6 +127,10 @@ def main() -> int:
79
127
  }
80
128
 
81
129
  print(json.dumps(output, ensure_ascii=False))
130
+
131
+ # Report session start event (non-blocking best-effort)
132
+ _track(project_dir, {"event_type": "session.started"})
133
+
82
134
  return 0
83
135
 
84
136