dino-spec 0.1.3 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli/index.js CHANGED
@@ -71,6 +71,7 @@ program
71
71
  .command('update')
72
72
  .description('Update dino-spec configuration files')
73
73
  .option('-f, --force', 'Force overwrite existing files')
74
+ .option('-n, --dry-run', 'Preview changes without applying them')
74
75
  .action(async (options) => {
75
76
  await updateCommand(options);
76
77
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAkBA,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAiGzF"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAqBA,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAqKD;;GAEG;AACH,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAkIzF"}
@@ -2,12 +2,137 @@ import chalk from 'chalk';
2
2
  import ora from 'ora';
3
3
  import { join } from 'path';
4
4
  import { FileSystem } from '../utils/file-system.js';
5
- import { getSuccessDino, getWarningDino } from '../utils/ascii-art.js';
6
- import { DINO_DIR_NAME, CLAUDE_DIR_NAME, DINO_DIRS, CLAUDE_DIRS, FILES, VERSION, } from '../core/config.js';
5
+ import { getSuccessDino } from '../utils/ascii-art.js';
6
+ import { DINO_DIR_NAME, CLAUDE_DIR_NAME, DINO_DIRS, CLAUDE_DIRS, FILES, VERSION, GENERATED_FILES, } from '../core/config.js';
7
7
  import { getSlashCommandTemplates } from '../core/templates/slash-commands.js';
8
8
  import { getWorkflowSkillTemplate } from '../core/templates/skill-template.js';
9
9
  import { getWorkflowRulesTemplate } from '../core/templates/rules-template.js';
10
10
  import { getDnaTemplate } from '../core/templates/dna-template.js';
11
+ /**
12
+ * Get template content for a given template key
13
+ */
14
+ function getTemplateContent(templateKey, templates) {
15
+ // Check slash command templates first
16
+ if (templates[templateKey]) {
17
+ return templates[templateKey];
18
+ }
19
+ // Check other templates
20
+ switch (templateKey) {
21
+ case 'workflowSkill':
22
+ return getWorkflowSkillTemplate();
23
+ case 'workflowRules':
24
+ return getWorkflowRulesTemplate();
25
+ case 'projectDna':
26
+ return getDnaTemplate();
27
+ default:
28
+ return null;
29
+ }
30
+ }
31
+ /**
32
+ * Determine what action to take for each file during init
33
+ */
34
+ async function planInitActions(projectDir, force) {
35
+ const actions = [];
36
+ for (const [fileName, meta] of Object.entries(GENERATED_FILES)) {
37
+ // Skip active.json - handled separately
38
+ if (meta.templateKey === 'activeJson') {
39
+ continue;
40
+ }
41
+ const filePath = join(projectDir, meta.relativePath);
42
+ const exists = await FileSystem.exists(filePath);
43
+ if (!exists) {
44
+ // File doesn't exist - create it
45
+ actions.push({
46
+ filePath,
47
+ fileName,
48
+ action: 'create',
49
+ reason: 'File does not exist',
50
+ behavior: meta.behavior,
51
+ meta,
52
+ });
53
+ continue;
54
+ }
55
+ // File exists - determine action based on behavior and force flag
56
+ switch (meta.behavior) {
57
+ case 'protected':
58
+ // Protected files are never overwritten (dna.md)
59
+ actions.push({
60
+ filePath,
61
+ fileName,
62
+ action: 'skip',
63
+ reason: 'Protected file with user content',
64
+ behavior: meta.behavior,
65
+ meta,
66
+ });
67
+ break;
68
+ case 'always-replace':
69
+ if (force) {
70
+ // Force flag overrides everything
71
+ actions.push({
72
+ filePath,
73
+ fileName,
74
+ action: 'replace',
75
+ reason: 'Force flag enabled',
76
+ behavior: meta.behavior,
77
+ meta,
78
+ });
79
+ }
80
+ else {
81
+ // Check version to determine if update needed
82
+ const versionResult = await FileSystem.checkFileVersion(filePath);
83
+ if (versionResult.needsUpdate) {
84
+ const versionInfo = versionResult.currentVersion
85
+ ? `${versionResult.currentVersion} -> ${versionResult.latestVersion}`
86
+ : `${versionResult.reason} -> ${versionResult.latestVersion}`;
87
+ actions.push({
88
+ filePath,
89
+ fileName,
90
+ action: 'replace',
91
+ reason: `Outdated (${versionInfo})`,
92
+ behavior: meta.behavior,
93
+ meta,
94
+ });
95
+ }
96
+ else {
97
+ actions.push({
98
+ filePath,
99
+ fileName,
100
+ action: 'skip',
101
+ reason: 'Already up to date',
102
+ behavior: meta.behavior,
103
+ meta,
104
+ });
105
+ }
106
+ }
107
+ break;
108
+ case 'data-file':
109
+ // Data files are merged, not replaced
110
+ actions.push({
111
+ filePath,
112
+ fileName,
113
+ action: 'merge',
114
+ reason: 'Merge with existing data',
115
+ behavior: meta.behavior,
116
+ meta,
117
+ });
118
+ break;
119
+ }
120
+ }
121
+ return actions;
122
+ }
123
+ /**
124
+ * Execute a file action
125
+ */
126
+ async function executeAction(action, templates) {
127
+ if (action.action === 'skip') {
128
+ return;
129
+ }
130
+ const content = getTemplateContent(action.meta.templateKey, templates);
131
+ if (!content) {
132
+ throw new Error(`No template found for ${action.meta.templateKey}`);
133
+ }
134
+ await FileSystem.writeFile(action.filePath, content);
135
+ }
11
136
  /**
12
137
  * Initialize dino-spec in a project
13
138
  */
@@ -15,43 +140,61 @@ export async function initCommand(targetPath, options) {
15
140
  const projectDir = join(process.cwd(), targetPath);
16
141
  const dinoDir = join(projectDir, DINO_DIR_NAME);
17
142
  const claudeDir = join(projectDir, CLAUDE_DIR_NAME);
18
- // Check if already initialized
19
- if (await FileSystem.exists(dinoDir) && !options.force) {
20
- console.log(getWarningDino('dino-spec is already initialized in this project.'));
21
- console.log(chalk.dim('Use --force to reinitialize.\n'));
22
- return;
143
+ // Check if already initialized (but allow reinit with smart updates)
144
+ const alreadyInitialized = await FileSystem.exists(dinoDir);
145
+ if (alreadyInitialized && !options.force) {
146
+ // Show a different message - we'll do a smart update instead of blocking
147
+ console.log(chalk.dim('\ndino-spec is already initialized. Checking for updates...\n'));
23
148
  }
24
- const spinner = ora('Initializing dino-spec...').start();
149
+ const spinner = ora('Planning initialization...').start();
25
150
  try {
26
- // Create .dino directory structure
27
- spinner.text = 'Creating .dino directory...';
151
+ // Plan what actions to take
152
+ const actions = await planInitActions(projectDir, options.force ?? false);
153
+ const result = {
154
+ created: [],
155
+ updated: [],
156
+ skipped: [],
157
+ };
158
+ // Create directory structure
159
+ spinner.text = 'Creating directory structure...';
28
160
  await FileSystem.createDirectory(join(dinoDir, DINO_DIRS.specs));
29
161
  await FileSystem.createDirectory(join(dinoDir, DINO_DIRS.archive));
30
- // Create active.json
31
- await FileSystem.writeJson(join(dinoDir, FILES.active), {
32
- id: null,
33
- phase: null,
34
- createdAt: null,
35
- });
36
- // Create dna.md template
37
- await FileSystem.writeFile(join(dinoDir, FILES.dna), getDnaTemplate());
38
- // Create .claude directory structure
39
- spinner.text = 'Creating .claude/commands...';
40
162
  await FileSystem.createDirectory(join(claudeDir, CLAUDE_DIRS.commands));
41
- // Create slash commands
42
- const slashCommands = getSlashCommandTemplates();
43
- for (const [name, content] of Object.entries(slashCommands)) {
44
- await FileSystem.writeFile(join(claudeDir, CLAUDE_DIRS.commands, `dino.${name}.md`), content);
45
- }
46
- // Create skills directory and workflow skill
47
- spinner.text = 'Creating .claude/skills/dino-workflow...';
48
163
  await FileSystem.createDirectory(join(claudeDir, CLAUDE_DIRS.skills));
49
- await FileSystem.writeFile(join(claudeDir, CLAUDE_DIRS.skills, 'SKILL.md'), getWorkflowSkillTemplate());
50
- // Create rules directory and workflow rules
51
- spinner.text = 'Creating .claude/rules/dino...';
52
164
  await FileSystem.createDirectory(join(claudeDir, CLAUDE_DIRS.rules));
53
- await FileSystem.writeFile(join(claudeDir, CLAUDE_DIRS.rules, 'workflow.md'), getWorkflowRulesTemplate());
54
- // Merge hooks into settings.json
165
+ // Get templates
166
+ const templates = getSlashCommandTemplates();
167
+ // Execute planned actions
168
+ spinner.text = 'Generating files...';
169
+ for (const action of actions) {
170
+ await executeAction(action, templates);
171
+ switch (action.action) {
172
+ case 'create':
173
+ result.created.push(action.fileName);
174
+ break;
175
+ case 'replace':
176
+ result.updated.push(action.fileName);
177
+ break;
178
+ case 'skip':
179
+ result.skipped.push(action.fileName);
180
+ break;
181
+ case 'merge':
182
+ // Merge is treated as update
183
+ result.updated.push(action.fileName);
184
+ break;
185
+ }
186
+ }
187
+ // Handle active.json separately (always create if missing, merge if exists)
188
+ const activeJsonPath = join(dinoDir, FILES.active);
189
+ if (!await FileSystem.exists(activeJsonPath)) {
190
+ await FileSystem.writeJson(activeJsonPath, {
191
+ id: null,
192
+ phase: null,
193
+ createdAt: null,
194
+ });
195
+ result.created.push('active.json');
196
+ }
197
+ // Configure hooks
55
198
  spinner.text = 'Configuring hooks...';
56
199
  const settingsPath = join(claudeDir, 'settings.json');
57
200
  await FileSystem.deepMergeJson(settingsPath, {
@@ -69,17 +212,36 @@ export async function initCommand(targetPath, options) {
69
212
  },
70
213
  });
71
214
  spinner.succeed('dino-spec initialized successfully!');
72
- // Show success message
215
+ // Show success message with summary
73
216
  console.log(getSuccessDino(`dino-spec v${VERSION} is ready!`));
74
- console.log(chalk.dim(' Created:'));
75
- console.log(chalk.dim(` ${DINO_DIR_NAME}/ - Specification data`));
76
- console.log(chalk.dim(` ${CLAUDE_DIR_NAME}/commands/ - Slash commands (dino.*)`));
77
- console.log(chalk.dim(` ${CLAUDE_DIR_NAME}/skills/ - Workflow skill`));
78
- console.log(chalk.dim(` ${CLAUDE_DIR_NAME}/rules/dino/ - Workflow rules`));
217
+ // Show detailed summary
218
+ if (result.created.length > 0) {
219
+ console.log(chalk.green(` Created: ${result.created.length} files`));
220
+ }
221
+ if (result.updated.length > 0) {
222
+ console.log(chalk.yellow(` Updated: ${result.updated.length} files`));
223
+ }
224
+ if (result.skipped.length > 0) {
225
+ console.log(chalk.dim(` Skipped: ${result.skipped.length} files (protected/up-to-date)`));
226
+ }
227
+ // Show what was skipped if there are protected files
228
+ const protectedSkipped = actions.filter(a => a.action === 'skip' && a.behavior === 'protected');
229
+ if (protectedSkipped.length > 0) {
230
+ console.log('');
231
+ console.log(chalk.dim(' Protected files (user content preserved):'));
232
+ for (const action of protectedSkipped) {
233
+ console.log(chalk.dim(` - ${action.meta.relativePath}`));
234
+ }
235
+ }
79
236
  console.log('');
80
237
  console.log(chalk.bold(' Next steps:'));
81
- console.log(chalk.cyan(' 1. Edit .dino/dna.md with your project conventions'));
82
- console.log(chalk.cyan(' 2. Run /dino.discover <your feature idea>'));
238
+ if (!alreadyInitialized || options.force) {
239
+ console.log(chalk.cyan(' 1. Edit .dino/dna.md with your project conventions'));
240
+ console.log(chalk.cyan(' 2. Run /dino.discover <your feature idea>'));
241
+ }
242
+ else {
243
+ console.log(chalk.cyan(' Run /dino.discover <your feature idea>'));
244
+ }
83
245
  console.log('');
84
246
  }
85
247
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
1
  interface UpdateOptions {
2
2
  force?: boolean;
3
+ dryRun?: boolean;
3
4
  }
4
5
  /**
5
- * Update dino-spec configuration files in .claude/
6
+ * Update dino-spec configuration files
6
7
  */
7
8
  export declare function updateCommand(options?: UpdateOptions): Promise<void>;
8
9
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AASA,UAAU,aAAa;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA2D1E"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAkBA,UAAU,aAAa;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAmJD;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA2H1E"}
@@ -2,59 +2,226 @@ import chalk from 'chalk';
2
2
  import ora from 'ora';
3
3
  import { join } from 'path';
4
4
  import { FileSystem } from '../utils/file-system.js';
5
- import { DINO_DIR_NAME, CLAUDE_DIR_NAME, CLAUDE_DIRS } from '../core/config.js';
5
+ import { DINO_DIR_NAME, GENERATED_FILES, TEMPLATE_VERSION, VERSION, } from '../core/config.js';
6
6
  import { getSlashCommandTemplates } from '../core/templates/slash-commands.js';
7
7
  import { getWorkflowSkillTemplate } from '../core/templates/skill-template.js';
8
8
  import { getWorkflowRulesTemplate } from '../core/templates/rules-template.js';
9
+ import { getDnaTemplate } from '../core/templates/dna-template.js';
9
10
  /**
10
- * Update dino-spec configuration files in .claude/
11
+ * Get template content for a given template key
12
+ */
13
+ function getTemplateContent(templateKey, templates) {
14
+ if (templates[templateKey]) {
15
+ return templates[templateKey];
16
+ }
17
+ switch (templateKey) {
18
+ case 'workflowSkill':
19
+ return getWorkflowSkillTemplate();
20
+ case 'workflowRules':
21
+ return getWorkflowRulesTemplate();
22
+ case 'projectDna':
23
+ return getDnaTemplate();
24
+ default:
25
+ return null;
26
+ }
27
+ }
28
+ /**
29
+ * Analyze files and determine what needs updating
30
+ */
31
+ async function analyzeFiles(projectDir, force) {
32
+ const actions = [];
33
+ for (const [fileName, meta] of Object.entries(GENERATED_FILES)) {
34
+ // Skip active.json - it's a data file that shouldn't be touched
35
+ if (meta.templateKey === 'activeJson') {
36
+ continue;
37
+ }
38
+ const filePath = join(projectDir, meta.relativePath);
39
+ const exists = await FileSystem.exists(filePath);
40
+ if (!exists) {
41
+ // File missing - will create
42
+ actions.push({
43
+ filePath,
44
+ fileName,
45
+ action: 'create',
46
+ reason: 'File missing',
47
+ behavior: meta.behavior,
48
+ currentVersion: null,
49
+ meta,
50
+ });
51
+ continue;
52
+ }
53
+ switch (meta.behavior) {
54
+ case 'protected':
55
+ // Protected files are never updated
56
+ actions.push({
57
+ filePath,
58
+ fileName,
59
+ action: 'skip',
60
+ reason: 'Protected file - contains user customizations',
61
+ behavior: meta.behavior,
62
+ currentVersion: null,
63
+ meta,
64
+ });
65
+ break;
66
+ case 'always-replace':
67
+ const versionResult = await FileSystem.checkFileVersion(filePath);
68
+ if (force) {
69
+ actions.push({
70
+ filePath,
71
+ fileName,
72
+ action: 'replace',
73
+ reason: 'Force update',
74
+ behavior: meta.behavior,
75
+ currentVersion: versionResult.currentVersion,
76
+ meta,
77
+ });
78
+ }
79
+ else if (versionResult.needsUpdate) {
80
+ const reasonText = versionResult.reason === 'legacy'
81
+ ? 'Legacy file (no version marker)'
82
+ : `Version ${versionResult.currentVersion} -> ${TEMPLATE_VERSION}`;
83
+ actions.push({
84
+ filePath,
85
+ fileName,
86
+ action: 'replace',
87
+ reason: reasonText,
88
+ behavior: meta.behavior,
89
+ currentVersion: versionResult.currentVersion,
90
+ meta,
91
+ });
92
+ }
93
+ else {
94
+ actions.push({
95
+ filePath,
96
+ fileName,
97
+ action: 'skip',
98
+ reason: `Already at version ${TEMPLATE_VERSION}`,
99
+ behavior: meta.behavior,
100
+ currentVersion: versionResult.currentVersion,
101
+ meta,
102
+ });
103
+ }
104
+ break;
105
+ case 'data-file':
106
+ // Data files are not updated via this command
107
+ actions.push({
108
+ filePath,
109
+ fileName,
110
+ action: 'skip',
111
+ reason: 'Data file - no updates needed',
112
+ behavior: meta.behavior,
113
+ currentVersion: null,
114
+ meta,
115
+ });
116
+ break;
117
+ }
118
+ }
119
+ return actions;
120
+ }
121
+ /**
122
+ * Update dino-spec configuration files
11
123
  */
12
124
  export async function updateCommand(options) {
13
125
  const cwd = process.cwd();
14
126
  const dinoDir = join(cwd, DINO_DIR_NAME);
15
- const claudeDir = join(cwd, CLAUDE_DIR_NAME);
16
127
  // Check if dino is initialized
17
128
  if (!await FileSystem.exists(dinoDir)) {
18
129
  console.log(chalk.yellow('\nNo .dino directory found.'));
19
130
  console.log(chalk.dim('Run "dino init" to initialize dino-spec in this project.\n'));
20
131
  return;
21
132
  }
22
- const spinner = ora('Updating dino-spec configuration...').start();
133
+ const spinner = ora('Analyzing files...').start();
23
134
  try {
24
- // Update slash commands
25
- const commandsDir = join(claudeDir, CLAUDE_DIRS.commands);
26
- const templates = getSlashCommandTemplates();
27
- let updated = 0;
28
- for (const [name, content] of Object.entries(templates)) {
29
- const filePath = join(commandsDir, `dino.${name}.md`);
30
- const existing = await FileSystem.readFileSafe(filePath);
31
- if (!existing || options?.force) {
32
- await FileSystem.writeFile(filePath, content);
33
- updated++;
135
+ const actions = await analyzeFiles(cwd, options?.force ?? false);
136
+ // Separate actions by type for reporting
137
+ const toUpdate = actions.filter(a => a.action === 'create' || a.action === 'replace');
138
+ const toSkip = actions.filter(a => a.action === 'skip');
139
+ const upToDate = toSkip.filter(a => a.reason.includes('Already at version'));
140
+ const protected_ = toSkip.filter(a => a.behavior === 'protected');
141
+ const dataFiles = toSkip.filter(a => a.behavior === 'data-file');
142
+ // Dry run - just show what would happen
143
+ if (options?.dryRun) {
144
+ spinner.succeed('Analysis complete (dry run)');
145
+ console.log('');
146
+ if (toUpdate.length > 0) {
147
+ console.log(chalk.bold(' Would update:'));
148
+ for (const action of toUpdate) {
149
+ const icon = action.action === 'create' ? '+' : '~';
150
+ const color = action.action === 'create' ? chalk.green : chalk.yellow;
151
+ console.log(color(` ${icon} ${action.fileName}`), chalk.dim(`(${action.reason})`));
152
+ }
153
+ console.log('');
34
154
  }
155
+ if (upToDate.length > 0) {
156
+ console.log(chalk.dim(` Up to date: ${upToDate.length} files`));
157
+ }
158
+ if (protected_.length > 0) {
159
+ console.log(chalk.dim(' Protected (skipped):'));
160
+ for (const action of protected_) {
161
+ console.log(chalk.dim(` - ${action.fileName}`));
162
+ }
163
+ }
164
+ console.log('');
165
+ console.log(chalk.dim('Run without --dry-run to apply changes.\n'));
166
+ return;
35
167
  }
36
- // Update skill
37
- const skillPath = join(claudeDir, CLAUDE_DIRS.skills, 'SKILL.md');
38
- const existingSkill = await FileSystem.readFileSafe(skillPath);
39
- if (!existingSkill || options?.force) {
40
- await FileSystem.writeFile(skillPath, getWorkflowSkillTemplate());
41
- updated++;
42
- }
43
- // Update rules
44
- const rulesPath = join(claudeDir, CLAUDE_DIRS.rules, 'workflow.md');
45
- const existingRules = await FileSystem.readFileSafe(rulesPath);
46
- if (!existingRules || options?.force) {
47
- await FileSystem.writeFile(rulesPath, getWorkflowRulesTemplate());
48
- updated++;
168
+ // Execute updates
169
+ spinner.text = 'Updating files...';
170
+ const templates = getSlashCommandTemplates();
171
+ const result = {
172
+ updated: [],
173
+ skipped: [],
174
+ upToDate: [],
175
+ };
176
+ for (const action of actions) {
177
+ if (action.action === 'skip') {
178
+ if (action.reason.includes('Already at version')) {
179
+ result.upToDate.push(action.fileName);
180
+ }
181
+ else {
182
+ result.skipped.push({ file: action.fileName, reason: action.reason });
183
+ }
184
+ continue;
185
+ }
186
+ // Get and write template content
187
+ const content = getTemplateContent(action.meta.templateKey, templates);
188
+ if (content) {
189
+ await FileSystem.writeFile(action.filePath, content);
190
+ result.updated.push({
191
+ file: action.fileName,
192
+ from: action.currentVersion,
193
+ to: TEMPLATE_VERSION,
194
+ });
195
+ }
49
196
  }
50
- if (updated === 0) {
51
- spinner.succeed('All configuration files are up to date');
52
- console.log(chalk.dim(' Use --force to overwrite existing files.\n'));
197
+ // Show results
198
+ if (result.updated.length === 0) {
199
+ spinner.succeed('All files are up to date');
53
200
  }
54
201
  else {
55
- spinner.succeed(`Updated ${updated} configuration file(s)`);
202
+ spinner.succeed(`Update complete (dino-spec v${VERSION})`);
203
+ }
204
+ console.log('');
205
+ if (result.updated.length > 0) {
206
+ console.log(chalk.green(' Updated:'));
207
+ for (const item of result.updated) {
208
+ const versionInfo = item.from
209
+ ? chalk.dim(` (${item.from} -> ${item.to})`)
210
+ : chalk.dim(` (-> ${item.to})`);
211
+ console.log(` ${item.file}${versionInfo}`);
212
+ }
56
213
  console.log('');
57
214
  }
215
+ if (result.upToDate.length > 0) {
216
+ console.log(chalk.dim(` Up to date: ${result.upToDate.length} files`));
217
+ }
218
+ if (result.skipped.length > 0) {
219
+ console.log(chalk.dim(' Skipped:'));
220
+ for (const item of result.skipped) {
221
+ console.log(chalk.dim(` ${item.file} - ${item.reason}`));
222
+ }
223
+ }
224
+ console.log('');
58
225
  }
59
226
  catch (error) {
60
227
  spinner.fail('Failed to update configuration');
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,31 @@ export declare const DINO_MARKERS: {
13
13
  readonly coreEnd: "<!-- DINO:CORE:END -->";
14
14
  readonly userStart: "<!-- DINO:USER:START -->";
15
15
  readonly userEnd: "<!-- DINO:USER:END -->";
16
+ readonly versionPrefix: "<!-- DINO:VERSION:";
17
+ readonly versionSuffix: " -->";
16
18
  };
19
+ /**
20
+ * Template version - increment when template content changes significantly
21
+ * This is separate from package version to allow independent template updates
22
+ */
23
+ export declare const TEMPLATE_VERSION = "1.1.0";
24
+ /**
25
+ * File update behavior categories
26
+ */
27
+ export type FileUpdateBehavior = 'always-replace' | 'protected' | 'data-file';
28
+ /**
29
+ * Metadata for a generated file
30
+ */
31
+ export interface GeneratedFileMetadata {
32
+ relativePath: string;
33
+ behavior: FileUpdateBehavior;
34
+ templateKey: string;
35
+ description: string;
36
+ }
37
+ /**
38
+ * Registry of all generated files and their update behaviors
39
+ */
40
+ export declare const GENERATED_FILES: Record<string, GeneratedFileMetadata>;
17
41
  /** Workflow phases in order */
18
42
  export declare const WORKFLOW_PHASES: readonly ["discover", "scout", "clarify", "nest", "hatch", "hunt", "fossil", "next"];
19
43
  export type WorkflowPhase = typeof WORKFLOW_PHASES[number];
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,yCAAyC;AACzC,eAAO,MAAM,aAAa,UAAU,CAAC;AAErC,mDAAmD;AACnD,eAAO,MAAM,eAAe,YAAY,CAAC;AAEzC,2CAA2C;AAC3C,eAAO,MAAM,YAAY;;;;;;;CAOf,CAAC;AAEX,+BAA+B;AAC/B,eAAO,MAAM,eAAe,sFASlB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;AAE3D,oCAAoC;AACpC,eAAO,MAAM,gBAAgB,EAAE,aAAa,EAAsB,CAAC;AAEnE,yDAAyD;AACzD,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAE1C,sDAAsD;AACtD,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,oBAAoB;AACpB,eAAO,MAAM,aAAa,uDAAwD,CAAC;AACnF,MAAM,MAAM,UAAU,GAAG,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;AAEtD,iBAAiB;AACjB,eAAO,MAAM,KAAK;;;;;;;CAOR,CAAC;AAEX,mCAAmC;AACnC,eAAO,MAAM,SAAS;;;CAGZ,CAAC;AAEX,qCAAqC;AACrC,eAAO,MAAM,WAAW;;;;CAId,CAAC;AAEX,+CAA+C;AAC/C,eAAO,MAAM,OAAO,EAAE,MAAoB,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,yCAAyC;AACzC,eAAO,MAAM,aAAa,UAAU,CAAC;AAErC,mDAAmD;AACnD,eAAO,MAAM,eAAe,YAAY,CAAC;AAEzC,2CAA2C;AAC3C,eAAO,MAAM,YAAY;;;;;;;;;CASf,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,gBAAgB,UAAU,CAAC;AAExC;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,gBAAgB,GAAG,WAAW,GAAG,WAAW,CAAC;AAE9E;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CA0FjE,CAAC;AAEF,+BAA+B;AAC/B,eAAO,MAAM,eAAe,sFASlB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;AAE3D,oCAAoC;AACpC,eAAO,MAAM,gBAAgB,EAAE,aAAa,EAAsB,CAAC;AAEnE,yDAAyD;AACzD,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAE1C,sDAAsD;AACtD,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,oBAAoB;AACpB,eAAO,MAAM,aAAa,uDAAwD,CAAC;AACnF,MAAM,MAAM,UAAU,GAAG,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;AAEtD,iBAAiB;AACjB,eAAO,MAAM,KAAK;;;;;;;CAOR,CAAC;AAEX,mCAAmC;AACnC,eAAO,MAAM,SAAS;;;CAGZ,CAAC;AAEX,qCAAqC;AACrC,eAAO,MAAM,WAAW;;;;CAId,CAAC;AAEX,+CAA+C;AAC/C,eAAO,MAAM,OAAO,EAAE,MAAoB,CAAC"}
@@ -16,6 +16,107 @@ export const DINO_MARKERS = {
16
16
  coreEnd: '<!-- DINO:CORE:END -->',
17
17
  userStart: '<!-- DINO:USER:START -->',
18
18
  userEnd: '<!-- DINO:USER:END -->',
19
+ versionPrefix: '<!-- DINO:VERSION:',
20
+ versionSuffix: ' -->',
21
+ };
22
+ /**
23
+ * Template version - increment when template content changes significantly
24
+ * This is separate from package version to allow independent template updates
25
+ */
26
+ export const TEMPLATE_VERSION = '1.1.0';
27
+ /**
28
+ * Registry of all generated files and their update behaviors
29
+ */
30
+ export const GENERATED_FILES = {
31
+ // Slash commands - always replaceable (no user content)
32
+ 'dino.discover.md': {
33
+ relativePath: '.claude/commands/dino.discover.md',
34
+ behavior: 'always-replace',
35
+ templateKey: 'discover',
36
+ description: 'Discover phase slash command',
37
+ },
38
+ 'dino.scout.md': {
39
+ relativePath: '.claude/commands/dino.scout.md',
40
+ behavior: 'always-replace',
41
+ templateKey: 'scout',
42
+ description: 'Scout phase slash command',
43
+ },
44
+ 'dino.clarify.md': {
45
+ relativePath: '.claude/commands/dino.clarify.md',
46
+ behavior: 'always-replace',
47
+ templateKey: 'clarify',
48
+ description: 'Clarify phase slash command',
49
+ },
50
+ 'dino.nest.md': {
51
+ relativePath: '.claude/commands/dino.nest.md',
52
+ behavior: 'always-replace',
53
+ templateKey: 'nest',
54
+ description: 'Nest phase slash command',
55
+ },
56
+ 'dino.hatch.md': {
57
+ relativePath: '.claude/commands/dino.hatch.md',
58
+ behavior: 'always-replace',
59
+ templateKey: 'hatch',
60
+ description: 'Hatch phase slash command',
61
+ },
62
+ 'dino.hunt.md': {
63
+ relativePath: '.claude/commands/dino.hunt.md',
64
+ behavior: 'always-replace',
65
+ templateKey: 'hunt',
66
+ description: 'Hunt phase slash command',
67
+ },
68
+ 'dino.fossil.md': {
69
+ relativePath: '.claude/commands/dino.fossil.md',
70
+ behavior: 'always-replace',
71
+ templateKey: 'fossil',
72
+ description: 'Fossil phase slash command',
73
+ },
74
+ 'dino.next.md': {
75
+ relativePath: '.claude/commands/dino.next.md',
76
+ behavior: 'always-replace',
77
+ templateKey: 'next',
78
+ description: 'Next suggestions slash command',
79
+ },
80
+ 'dino.dna.md': {
81
+ relativePath: '.claude/commands/dino.dna.md',
82
+ behavior: 'always-replace',
83
+ templateKey: 'dna',
84
+ description: 'DNA analysis slash command',
85
+ },
86
+ 'dino.skill.md': {
87
+ relativePath: '.claude/commands/dino.skill.md',
88
+ behavior: 'always-replace',
89
+ templateKey: 'skill',
90
+ description: 'Skill creation slash command',
91
+ },
92
+ // Workflow skill - always replaceable
93
+ 'SKILL.md': {
94
+ relativePath: '.claude/skills/dino-workflow/SKILL.md',
95
+ behavior: 'always-replace',
96
+ templateKey: 'workflowSkill',
97
+ description: 'Dino workflow skill definition',
98
+ },
99
+ // Workflow rules - always replaceable
100
+ 'workflow.md': {
101
+ relativePath: '.claude/rules/dino/workflow.md',
102
+ behavior: 'always-replace',
103
+ templateKey: 'workflowRules',
104
+ description: 'Dino workflow rules',
105
+ },
106
+ // Project DNA - protected (user customizations)
107
+ 'dna.md': {
108
+ relativePath: '.dino/dna.md',
109
+ behavior: 'protected',
110
+ templateKey: 'projectDna',
111
+ description: 'Project conventions (user-customized)',
112
+ },
113
+ // Active spec pointer - data file
114
+ 'active.json': {
115
+ relativePath: '.dino/active.json',
116
+ behavior: 'data-file',
117
+ templateKey: 'activeJson',
118
+ description: 'Active specification pointer',
119
+ },
19
120
  };
20
121
  /** Workflow phases in order */
21
122
  export const WORKFLOW_PHASES = [
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAE1C,yCAAyC;AACzC,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC;AAErC,mDAAmD;AACnD,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC;AAEzC,2CAA2C;AAC3C,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,KAAK,EAAE,qBAAqB;IAC5B,GAAG,EAAE,mBAAmB;IACxB,SAAS,EAAE,0BAA0B;IACrC,OAAO,EAAE,wBAAwB;IACjC,SAAS,EAAE,0BAA0B;IACrC,OAAO,EAAE,wBAAwB;CACzB,CAAC;AAEX,+BAA+B;AAC/B,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,UAAU;IACV,OAAO;IACP,SAAS;IACT,MAAM;IACN,OAAO;IACP,MAAM;IACN,QAAQ;IACR,MAAM;CACE,CAAC;AAIX,oCAAoC;AACpC,MAAM,CAAC,MAAM,gBAAgB,GAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEnE,yDAAyD;AACzD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAE1C,sDAAsD;AACtD,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAEtC,oBAAoB;AACpB,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,CAAU,CAAC;AAGnF,iBAAiB;AACjB,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,MAAM,EAAE,aAAa;IACrB,GAAG,EAAE,QAAQ;IACb,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;IACf,QAAQ,EAAE,aAAa;IACvB,KAAK,EAAE,UAAU;CACT,CAAC;AAEX,mCAAmC;AACnC,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;CACV,CAAC;AAEX,qCAAqC;AACrC,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,sBAAsB;IAC9B,KAAK,EAAE,YAAY;CACX,CAAC;AAEX,+CAA+C;AAC/C,MAAM,CAAC,MAAM,OAAO,GAAW,GAAG,CAAC,OAAO,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"rules-template.d.ts","sourceRoot":"","sources":["../../../src/core/templates/rules-template.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAkEjD"}
1
+ {"version":3,"file":"rules-template.d.ts","sourceRoot":"","sources":["../../../src/core/templates/rules-template.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,wBAAgB,wBAAwB,IAAI,MAAM,CAmEjD"}
@@ -1,11 +1,13 @@
1
1
  /**
2
2
  * Template for .claude/rules/dino/workflow.md
3
3
  */
4
+ import { TEMPLATE_VERSION } from '../config.js';
4
5
  export function getWorkflowRulesTemplate() {
5
6
  return `---
6
7
  paths:
7
8
  - ".dino/**"
8
9
  - ".claude/commands/dino/**"
10
+ dino-version: ${TEMPLATE_VERSION}
9
11
  ---
10
12
 
11
13
  # Dino Workflow Rules
@@ -1 +1 @@
1
- {"version":3,"file":"rules-template.js","sourceRoot":"","sources":["../../../src/core/templates/rules-template.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgER,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"rules-template.js","sourceRoot":"","sources":["../../../src/core/templates/rules-template.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,UAAU,wBAAwB;IACtC,OAAO;;;;gBAIO,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6D/B,CAAC;AACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"skill-template.d.ts","sourceRoot":"","sources":["../../../src/core/templates/skill-template.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CA0DjD"}
1
+ {"version":3,"file":"skill-template.d.ts","sourceRoot":"","sources":["../../../src/core/templates/skill-template.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,wBAAgB,wBAAwB,IAAI,MAAM,CA2DjD"}
@@ -1,10 +1,12 @@
1
1
  /**
2
2
  * Template for .claude/skills/dino-workflow/SKILL.md
3
3
  */
4
+ import { TEMPLATE_VERSION } from '../config.js';
4
5
  export function getWorkflowSkillTemplate() {
5
6
  return `---
6
7
  name: dino-workflow
7
8
  description: Structured specification-driven development workflow with dinosaur-themed phases
9
+ dino-version: ${TEMPLATE_VERSION}
8
10
  ---
9
11
 
10
12
  # Dino Workflow Skill
@@ -1 +1 @@
1
- {"version":3,"file":"skill-template.js","sourceRoot":"","sources":["../../../src/core/templates/skill-template.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwDR,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"skill-template.js","sourceRoot":"","sources":["../../../src/core/templates/skill-template.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,UAAU,wBAAwB;IACtC,OAAO;;;gBAGO,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsD/B,CAAC;AACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"slash-commands.d.ts","sourceRoot":"","sources":["../../../src/core/templates/slash-commands.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wBAAgB,wBAAwB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAajE"}
1
+ {"version":3,"file":"slash-commands.d.ts","sourceRoot":"","sources":["../../../src/core/templates/slash-commands.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,wBAAgB,wBAAwB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAajE"}
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Slash command templates for .claude/commands/dino/
3
3
  */
4
+ import { TEMPLATE_VERSION } from '../config.js';
4
5
  export function getSlashCommandTemplates() {
5
6
  return {
6
7
  discover: getDiscoverTemplate(),
@@ -19,6 +20,7 @@ function getDiscoverTemplate() {
19
20
  return `---
20
21
  description: Create a new specification from user intent
21
22
  argument-hint: <feature description>
23
+ dino-version: ${TEMPLATE_VERSION}
22
24
  ---
23
25
 
24
26
  # /dino.discover
@@ -91,6 +93,7 @@ function getScoutTemplate() {
91
93
  return `---
92
94
  description: Research codebase and technical options for the active spec
93
95
  argument-hint: [tech stack or focus area]
96
+ dino-version: ${TEMPLATE_VERSION}
94
97
  ---
95
98
 
96
99
  # /dino.scout
@@ -171,6 +174,7 @@ $ARGUMENTS
171
174
  function getClarifyTemplate() {
172
175
  return `---
173
176
  description: Resolve ambiguity in the active specification
177
+ dino-version: ${TEMPLATE_VERSION}
174
178
  ---
175
179
 
176
180
  # /dino.clarify
@@ -228,6 +232,7 @@ Use AskUserQuestion tool with this structure:
228
232
  function getNestTemplate() {
229
233
  return `---
230
234
  description: Create implementation plan for the active spec (requires Plan Mode)
235
+ dino-version: ${TEMPLATE_VERSION}
231
236
  ---
232
237
 
233
238
  # /dino.nest
@@ -313,6 +318,7 @@ You are creating the implementation plan for the active specification.
313
318
  function getHatchTemplate() {
314
319
  return `---
315
320
  description: Break implementation plan into phased tasks
321
+ dino-version: ${TEMPLATE_VERSION}
316
322
  ---
317
323
 
318
324
  # /dino.hatch
@@ -405,6 +411,7 @@ You are breaking the implementation plan into actionable, phased tasks.
405
411
  function getHuntTemplate() {
406
412
  return `---
407
413
  description: Implement tasks from the active specification
414
+ dino-version: ${TEMPLATE_VERSION}
408
415
  ---
409
416
 
410
417
  # /dino.hunt
@@ -471,6 +478,7 @@ Next: T004 Add validation to user model
471
478
  function getFossilTemplate() {
472
479
  return `---
473
480
  description: Archive the completed specification
481
+ dino-version: ${TEMPLATE_VERSION}
474
482
  ---
475
483
 
476
484
  # /dino.fossil
@@ -534,6 +542,7 @@ Duration: {time from created to now}
534
542
  function getNextTemplate() {
535
543
  return `---
536
544
  description: Suggest next features or improvements
545
+ dino-version: ${TEMPLATE_VERSION}
537
546
  ---
538
547
 
539
548
  # /dino.next
@@ -588,6 +597,7 @@ Present each suggestion as:
588
597
  function getDnaCommandTemplate() {
589
598
  return `---
590
599
  description: Generate project-specific skills based on tech stack analysis
600
+ dino-version: ${TEMPLATE_VERSION}
591
601
  ---
592
602
 
593
603
  # /dino.dna
@@ -679,6 +689,7 @@ function getSkillCommandTemplate() {
679
689
  return `---
680
690
  description: Create a custom skill from description
681
691
  argument-hint: <skill description>
692
+ dino-version: ${TEMPLATE_VERSION}
682
693
  ---
683
694
 
684
695
  # /dino.skill
@@ -1 +1 @@
1
- {"version":3,"file":"slash-commands.js","sourceRoot":"","sources":["../../../src/core/templates/slash-commands.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,UAAU,wBAAwB;IACtC,OAAO;QACL,QAAQ,EAAE,mBAAmB,EAAE;QAC/B,KAAK,EAAE,gBAAgB,EAAE;QACzB,OAAO,EAAE,kBAAkB,EAAE;QAC7B,IAAI,EAAE,eAAe,EAAE;QACvB,KAAK,EAAE,gBAAgB,EAAE;QACzB,IAAI,EAAE,eAAe,EAAE;QACvB,MAAM,EAAE,iBAAiB,EAAE;QAC3B,IAAI,EAAE,eAAe,EAAE;QACvB,GAAG,EAAE,qBAAqB,EAAE;QAC5B,KAAK,EAAE,uBAAuB,EAAE;KACjC,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB;IAC1B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqER,CAAC;AACF,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8ER,CAAC;AACF,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsDR,CAAC;AACF,CAAC;AAED,SAAS,eAAe;IACtB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkFR,CAAC;AACF,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyFR,CAAC;AACF,CAAC;AAED,SAAS,eAAe;IACtB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+DR,CAAC;AACF,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4DR,CAAC;AACF,CAAC;AAED,SAAS,eAAe;IACtB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmDR,CAAC;AACF,CAAC;AAED,SAAS,qBAAqB;IAC5B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuFR,CAAC;AACF,CAAC;AAED,SAAS,uBAAuB;IAC9B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwER,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"slash-commands.js","sourceRoot":"","sources":["../../../src/core/templates/slash-commands.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,UAAU,wBAAwB;IACtC,OAAO;QACL,QAAQ,EAAE,mBAAmB,EAAE;QAC/B,KAAK,EAAE,gBAAgB,EAAE;QACzB,OAAO,EAAE,kBAAkB,EAAE;QAC7B,IAAI,EAAE,eAAe,EAAE;QACvB,KAAK,EAAE,gBAAgB,EAAE;QACzB,IAAI,EAAE,eAAe,EAAE;QACvB,MAAM,EAAE,iBAAiB,EAAE;QAC3B,IAAI,EAAE,eAAe,EAAE;QACvB,GAAG,EAAE,qBAAqB,EAAE;QAC5B,KAAK,EAAE,uBAAuB,EAAE;KACjC,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB;IAC1B,OAAO;;;gBAGO,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmE/B,CAAC;AACF,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO;;;gBAGO,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4E/B,CAAC;AACF,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO;;gBAEO,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqD/B,CAAC;AACF,CAAC;AAED,SAAS,eAAe;IACtB,OAAO;;gBAEO,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiF/B,CAAC;AACF,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO;;gBAEO,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwF/B,CAAC;AACF,CAAC;AAED,SAAS,eAAe;IACtB,OAAO;;gBAEO,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8D/B,CAAC;AACF,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO;;gBAEO,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2D/B,CAAC;AACF,CAAC;AAED,SAAS,eAAe;IACtB,OAAO;;gBAEO,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkD/B,CAAC;AACF,CAAC;AAED,SAAS,qBAAqB;IAC5B,OAAO;;gBAEO,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsF/B,CAAC;AACF,CAAC;AAED,SAAS,uBAAuB;IAC9B,OAAO;;;gBAGO,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsE/B,CAAC;AACF,CAAC"}
@@ -1,3 +1,20 @@
1
+ /**
2
+ * Version info extracted from a file
3
+ */
4
+ export interface FileVersionInfo {
5
+ version: string | null;
6
+ hasVersionMarker: boolean;
7
+ }
8
+ /**
9
+ * Result of checking file version
10
+ */
11
+ export interface VersionCheckResult {
12
+ filePath: string;
13
+ currentVersion: string | null;
14
+ latestVersion: string;
15
+ needsUpdate: boolean;
16
+ reason: 'missing' | 'outdated' | 'legacy' | 'up-to-date';
17
+ }
1
18
  /**
2
19
  * File system utilities for dino-spec
3
20
  */
@@ -63,5 +80,23 @@ export declare class FileSystem {
63
80
  * Deep merge JSON object into existing file
64
81
  */
65
82
  static deepMergeJson<T extends Record<string, unknown>>(path: string, data: Partial<T>): Promise<void>;
83
+ /**
84
+ * Extract version info from file content
85
+ * Supports both YAML frontmatter format (dino-version: X.X.X) and legacy HTML comment format
86
+ */
87
+ static extractVersionInfo(content: string): FileVersionInfo;
88
+ /**
89
+ * Compare semver versions
90
+ * Returns: -1 if a < b, 0 if a === b, 1 if a > b
91
+ */
92
+ static compareVersions(a: string, b: string): number;
93
+ /**
94
+ * Check if a file needs updating based on version
95
+ */
96
+ static checkFileVersion(filePath: string): Promise<VersionCheckResult>;
97
+ /**
98
+ * Generate version header for template files
99
+ */
100
+ static getVersionHeader(): string;
66
101
  }
67
102
  //# sourceMappingURL=file-system.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-system.d.ts","sourceRoot":"","sources":["../../src/utils/file-system.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,qBAAa,UAAU;IACrB;;OAEG;WACU,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASnD;;OAEG;WACU,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASxD;;OAEG;WACU,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzD;;OAEG;WACU,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIpD;;OAEG;WACU,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAQ/D;;OAEG;WACU,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpE;;OAEG;WACU,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAKlD;;OAEG;WACU,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAS7D;;OAEG;WACU,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlE;;OAEG;WACU,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAQ3D;;OAEG;WACU,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhD;;OAEG;WACU,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrE;;;OAGG;WACU,iBAAiB,CAC5B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,MAA2B,EACxC,SAAS,GAAE,MAAyB,GACnC,OAAO,CAAC,IAAI,CAAC;IA4BhB;;OAEG;WACU,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtD,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GACf,OAAO,CAAC,IAAI,CAAC;IAMhB;;OAEG;WACU,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1D,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GACf,OAAO,CAAC,IAAI,CAAC;CAKjB"}
1
+ {"version":3,"file":"file-system.d.ts","sourceRoot":"","sources":["../../src/utils/file-system.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,YAAY,CAAC;CAC1D;AAED;;GAEG;AACH,qBAAa,UAAU;IACrB;;OAEG;WACU,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASnD;;OAEG;WACU,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASxD;;OAEG;WACU,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzD;;OAEG;WACU,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIpD;;OAEG;WACU,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAQ/D;;OAEG;WACU,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpE;;OAEG;WACU,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAKlD;;OAEG;WACU,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAS7D;;OAEG;WACU,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlE;;OAEG;WACU,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAQ3D;;OAEG;WACU,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhD;;OAEG;WACU,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrE;;;OAGG;WACU,iBAAiB,CAC5B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,MAA2B,EACxC,SAAS,GAAE,MAAyB,GACnC,OAAO,CAAC,IAAI,CAAC;IA4BhB;;OAEG;WACU,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtD,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GACf,OAAO,CAAC,IAAI,CAAC;IAMhB;;OAEG;WACU,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1D,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GACf,OAAO,CAAC,IAAI,CAAC;IAMhB;;;OAGG;IACH,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe;IAsB3D;;;OAGG;IACH,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAWpD;;OAEG;WACU,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAwC5E;;OAEG;IACH,MAAM,CAAC,gBAAgB,IAAI,MAAM;CAGlC"}
@@ -1,6 +1,6 @@
1
1
  import { mkdir, readFile, writeFile, access, readdir, stat, rm, rename } from 'fs/promises';
2
2
  import { dirname } from 'path';
3
- import { DINO_MARKERS } from '../core/config.js';
3
+ import { DINO_MARKERS, TEMPLATE_VERSION } from '../core/config.js';
4
4
  /**
5
5
  * File system utilities for dino-spec
6
6
  */
@@ -151,6 +151,83 @@ export class FileSystem {
151
151
  const merged = deepMerge(existing, data);
152
152
  await this.writeJson(path, merged);
153
153
  }
154
+ /**
155
+ * Extract version info from file content
156
+ * Supports both YAML frontmatter format (dino-version: X.X.X) and legacy HTML comment format
157
+ */
158
+ static extractVersionInfo(content) {
159
+ // Try YAML frontmatter format first (new format)
160
+ const yamlPattern = /dino-version:\s*([0-9]+\.[0-9]+\.[0-9]+)/;
161
+ const yamlMatch = content.match(yamlPattern);
162
+ if (yamlMatch) {
163
+ return {
164
+ version: yamlMatch[1],
165
+ hasVersionMarker: true,
166
+ };
167
+ }
168
+ // Fall back to legacy HTML comment format
169
+ const legacyPattern = /<!-- DINO:VERSION:([0-9]+\.[0-9]+\.[0-9]+) -->/;
170
+ const legacyMatch = content.match(legacyPattern);
171
+ return {
172
+ version: legacyMatch ? legacyMatch[1] : null,
173
+ hasVersionMarker: legacyMatch !== null || content.includes(DINO_MARKERS.versionPrefix),
174
+ };
175
+ }
176
+ /**
177
+ * Compare semver versions
178
+ * Returns: -1 if a < b, 0 if a === b, 1 if a > b
179
+ */
180
+ static compareVersions(a, b) {
181
+ const partsA = a.split('.').map(Number);
182
+ const partsB = b.split('.').map(Number);
183
+ for (let i = 0; i < 3; i++) {
184
+ if (partsA[i] < partsB[i])
185
+ return -1;
186
+ if (partsA[i] > partsB[i])
187
+ return 1;
188
+ }
189
+ return 0;
190
+ }
191
+ /**
192
+ * Check if a file needs updating based on version
193
+ */
194
+ static async checkFileVersion(filePath) {
195
+ const content = await this.readFileSafe(filePath);
196
+ if (!content) {
197
+ return {
198
+ filePath,
199
+ currentVersion: null,
200
+ latestVersion: TEMPLATE_VERSION,
201
+ needsUpdate: true,
202
+ reason: 'missing',
203
+ };
204
+ }
205
+ const versionInfo = this.extractVersionInfo(content);
206
+ if (!versionInfo.hasVersionMarker) {
207
+ // Legacy file without version marker - treat as outdated
208
+ return {
209
+ filePath,
210
+ currentVersion: null,
211
+ latestVersion: TEMPLATE_VERSION,
212
+ needsUpdate: true,
213
+ reason: 'legacy',
214
+ };
215
+ }
216
+ const needsUpdate = this.compareVersions(versionInfo.version, TEMPLATE_VERSION) < 0;
217
+ return {
218
+ filePath,
219
+ currentVersion: versionInfo.version,
220
+ latestVersion: TEMPLATE_VERSION,
221
+ needsUpdate,
222
+ reason: needsUpdate ? 'outdated' : 'up-to-date',
223
+ };
224
+ }
225
+ /**
226
+ * Generate version header for template files
227
+ */
228
+ static getVersionHeader() {
229
+ return `${DINO_MARKERS.versionPrefix}${TEMPLATE_VERSION}${DINO_MARKERS.versionSuffix}\n`;
230
+ }
154
231
  }
155
232
  /**
156
233
  * Deep merge two objects
@@ -1 +1 @@
1
- {"version":3,"file":"file-system.js","sourceRoot":"","sources":["../../src/utils/file-system.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"file-system.js","sourceRoot":"","sources":["../../src/utils/file-system.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dino-spec",
3
- "version": "0.1.3",
3
+ "version": "0.2.1",
4
4
  "description": "Claude Code workflow system with dinosaur-themed specification phases",
5
5
  "type": "module",
6
6
  "exports": {