dino-spec 0.1.2 → 0.2.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/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.0.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];
@@ -46,6 +70,6 @@ export declare const CLAUDE_DIRS: {
46
70
  readonly skills: "skills/dino-workflow";
47
71
  readonly rules: "rules/dino";
48
72
  };
49
- /** Package version (will be replaced during build) */
50
- export declare const VERSION = "0.1.0";
73
+ /** Package version - read from package.json */
74
+ export declare const VERSION: string;
51
75
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,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,sDAAsD;AACtD,eAAO,MAAM,OAAO,UAAU,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"}
@@ -1,6 +1,9 @@
1
1
  /**
2
2
  * Core configuration constants for dino-spec
3
3
  */
4
+ import { createRequire } from 'module';
5
+ const require = createRequire(import.meta.url);
6
+ const pkg = require('../../package.json');
4
7
  /** Directory name for dino data files */
5
8
  export const DINO_DIR_NAME = '.dino';
6
9
  /** Directory name for Claude Code configuration */
@@ -13,6 +16,107 @@ export const DINO_MARKERS = {
13
16
  coreEnd: '<!-- DINO:CORE:END -->',
14
17
  userStart: '<!-- DINO:USER:START -->',
15
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.0.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
+ },
16
120
  };
17
121
  /** Workflow phases in order */
18
122
  export const WORKFLOW_PHASES = [
@@ -53,6 +157,6 @@ export const CLAUDE_DIRS = {
53
157
  skills: 'skills/dino-workflow',
54
158
  rules: 'rules/dino',
55
159
  };
56
- /** Package version (will be replaced during build) */
57
- export const VERSION = '0.1.0';
160
+ /** Package version - read from package.json */
161
+ export const VERSION = pkg.version;
58
162
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,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,sDAAsD;AACtD,MAAM,CAAC,MAAM,OAAO,GAAG,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;AAQH,wBAAgB,wBAAwB,IAAI,MAAM,CAkEjD"}
@@ -1,8 +1,12 @@
1
1
  /**
2
2
  * Template for .claude/rules/dino/workflow.md
3
3
  */
4
+ import { DINO_MARKERS, TEMPLATE_VERSION } from '../config.js';
5
+ function getVersionHeader() {
6
+ return `${DINO_MARKERS.versionPrefix}${TEMPLATE_VERSION}${DINO_MARKERS.versionSuffix}\n`;
7
+ }
4
8
  export function getWorkflowRulesTemplate() {
5
- return `---
9
+ return `${getVersionHeader()}---
6
10
  paths:
7
11
  - ".dino/**"
8
12
  - ".claude/commands/dino/**"
@@ -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,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAE9D,SAAS,gBAAgB;IACvB,OAAO,GAAG,YAAY,CAAC,aAAa,GAAG,gBAAgB,GAAG,YAAY,CAAC,aAAa,IAAI,CAAC;AAC3F,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,OAAO,GAAG,gBAAgB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgE7B,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;AAQH,wBAAgB,wBAAwB,IAAI,MAAM,CA0DjD"}
@@ -1,8 +1,12 @@
1
1
  /**
2
2
  * Template for .claude/skills/dino-workflow/SKILL.md
3
3
  */
4
+ import { DINO_MARKERS, TEMPLATE_VERSION } from '../config.js';
5
+ function getVersionHeader() {
6
+ return `${DINO_MARKERS.versionPrefix}${TEMPLATE_VERSION}${DINO_MARKERS.versionSuffix}\n`;
7
+ }
4
8
  export function getWorkflowSkillTemplate() {
5
- return `---
9
+ return `${getVersionHeader()}---
6
10
  name: dino-workflow
7
11
  description: Structured specification-driven development workflow with dinosaur-themed phases
8
12
  ---
@@ -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,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAE9D,SAAS,gBAAgB;IACvB,OAAO,GAAG,YAAY,CAAC,aAAa,GAAG,gBAAgB,GAAG,YAAY,CAAC,aAAa,IAAI,CAAC;AAC3F,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,OAAO,GAAG,gBAAgB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwD7B,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;AAWH,wBAAgB,wBAAwB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAajE"}
@@ -1,6 +1,13 @@
1
1
  /**
2
2
  * Slash command templates for .claude/commands/dino/
3
3
  */
4
+ import { DINO_MARKERS, TEMPLATE_VERSION } from '../config.js';
5
+ /**
6
+ * Generate version header for template files
7
+ */
8
+ function getVersionHeader() {
9
+ return `${DINO_MARKERS.versionPrefix}${TEMPLATE_VERSION}${DINO_MARKERS.versionSuffix}\n`;
10
+ }
4
11
  export function getSlashCommandTemplates() {
5
12
  return {
6
13
  discover: getDiscoverTemplate(),
@@ -16,7 +23,7 @@ export function getSlashCommandTemplates() {
16
23
  };
17
24
  }
18
25
  function getDiscoverTemplate() {
19
- return `---
26
+ return `${getVersionHeader()}---
20
27
  description: Create a new specification from user intent
21
28
  argument-hint: <feature description>
22
29
  ---
@@ -88,7 +95,7 @@ Created: {date} | Status: draft | Phase: discover
88
95
  `;
89
96
  }
90
97
  function getScoutTemplate() {
91
- return `---
98
+ return `${getVersionHeader()}---
92
99
  description: Research codebase and technical options for the active spec
93
100
  argument-hint: [tech stack or focus area]
94
101
  ---
@@ -169,7 +176,7 @@ $ARGUMENTS
169
176
  `;
170
177
  }
171
178
  function getClarifyTemplate() {
172
- return `---
179
+ return `${getVersionHeader()}---
173
180
  description: Resolve ambiguity in the active specification
174
181
  ---
175
182
 
@@ -226,7 +233,7 @@ Use AskUserQuestion tool with this structure:
226
233
  `;
227
234
  }
228
235
  function getNestTemplate() {
229
- return `---
236
+ return `${getVersionHeader()}---
230
237
  description: Create implementation plan for the active spec (requires Plan Mode)
231
238
  ---
232
239
 
@@ -311,7 +318,7 @@ You are creating the implementation plan for the active specification.
311
318
  `;
312
319
  }
313
320
  function getHatchTemplate() {
314
- return `---
321
+ return `${getVersionHeader()}---
315
322
  description: Break implementation plan into phased tasks
316
323
  ---
317
324
 
@@ -403,7 +410,7 @@ You are breaking the implementation plan into actionable, phased tasks.
403
410
  `;
404
411
  }
405
412
  function getHuntTemplate() {
406
- return `---
413
+ return `${getVersionHeader()}---
407
414
  description: Implement tasks from the active specification
408
415
  ---
409
416
 
@@ -469,7 +476,7 @@ Next: T004 Add validation to user model
469
476
  `;
470
477
  }
471
478
  function getFossilTemplate() {
472
- return `---
479
+ return `${getVersionHeader()}---
473
480
  description: Archive the completed specification
474
481
  ---
475
482
 
@@ -532,7 +539,7 @@ Duration: {time from created to now}
532
539
  `;
533
540
  }
534
541
  function getNextTemplate() {
535
- return `---
542
+ return `${getVersionHeader()}---
536
543
  description: Suggest next features or improvements
537
544
  ---
538
545
 
@@ -586,7 +593,7 @@ Present each suggestion as:
586
593
  `;
587
594
  }
588
595
  function getDnaCommandTemplate() {
589
- return `---
596
+ return `${getVersionHeader()}---
590
597
  description: Generate project-specific skills based on tech stack analysis
591
598
  ---
592
599
 
@@ -676,7 +683,7 @@ Run ESLint to catch errors and enforce code style after generating or modifying
676
683
  `;
677
684
  }
678
685
  function getSkillCommandTemplate() {
679
- return `---
686
+ return `${getVersionHeader()}---
680
687
  description: Create a custom skill from description
681
688
  argument-hint: <skill description>
682
689
  ---
@@ -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,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAE9D;;GAEG;AACH,SAAS,gBAAgB;IACvB,OAAO,GAAG,YAAY,CAAC,aAAa,GAAG,gBAAgB,GAAG,YAAY,CAAC,aAAa,IAAI,CAAC;AAC3F,CAAC;AAED,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,GAAG,gBAAgB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqE7B,CAAC;AACF,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO,GAAG,gBAAgB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8E7B,CAAC;AACF,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO,GAAG,gBAAgB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsD7B,CAAC;AACF,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,GAAG,gBAAgB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkF7B,CAAC;AACF,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO,GAAG,gBAAgB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyF7B,CAAC;AACF,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,GAAG,gBAAgB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+D7B,CAAC;AACF,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO,GAAG,gBAAgB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4D7B,CAAC;AACF,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,GAAG,gBAAgB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmD7B,CAAC;AACF,CAAC;AAED,SAAS,qBAAqB;IAC5B,OAAO,GAAG,gBAAgB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuF7B,CAAC;AACF,CAAC;AAED,SAAS,uBAAuB;IAC9B,OAAO,GAAG,gBAAgB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwE7B,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,22 @@ 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
+ */
86
+ static extractVersionInfo(content: string): FileVersionInfo;
87
+ /**
88
+ * Compare semver versions
89
+ * Returns: -1 if a < b, 0 if a === b, 1 if a > b
90
+ */
91
+ static compareVersions(a: string, b: string): number;
92
+ /**
93
+ * Check if a file needs updating based on version
94
+ */
95
+ static checkFileVersion(filePath: string): Promise<VersionCheckResult>;
96
+ /**
97
+ * Generate version header for template files
98
+ */
99
+ static getVersionHeader(): string;
66
100
  }
67
101
  //# 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;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe;IAU3D;;;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,72 @@ 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
+ */
157
+ static extractVersionInfo(content) {
158
+ const versionPattern = /<!-- DINO:VERSION:([0-9]+\.[0-9]+\.[0-9]+) -->/;
159
+ const match = content.match(versionPattern);
160
+ return {
161
+ version: match ? match[1] : null,
162
+ hasVersionMarker: content.includes(DINO_MARKERS.versionPrefix),
163
+ };
164
+ }
165
+ /**
166
+ * Compare semver versions
167
+ * Returns: -1 if a < b, 0 if a === b, 1 if a > b
168
+ */
169
+ static compareVersions(a, b) {
170
+ const partsA = a.split('.').map(Number);
171
+ const partsB = b.split('.').map(Number);
172
+ for (let i = 0; i < 3; i++) {
173
+ if (partsA[i] < partsB[i])
174
+ return -1;
175
+ if (partsA[i] > partsB[i])
176
+ return 1;
177
+ }
178
+ return 0;
179
+ }
180
+ /**
181
+ * Check if a file needs updating based on version
182
+ */
183
+ static async checkFileVersion(filePath) {
184
+ const content = await this.readFileSafe(filePath);
185
+ if (!content) {
186
+ return {
187
+ filePath,
188
+ currentVersion: null,
189
+ latestVersion: TEMPLATE_VERSION,
190
+ needsUpdate: true,
191
+ reason: 'missing',
192
+ };
193
+ }
194
+ const versionInfo = this.extractVersionInfo(content);
195
+ if (!versionInfo.hasVersionMarker) {
196
+ // Legacy file without version marker - treat as outdated
197
+ return {
198
+ filePath,
199
+ currentVersion: null,
200
+ latestVersion: TEMPLATE_VERSION,
201
+ needsUpdate: true,
202
+ reason: 'legacy',
203
+ };
204
+ }
205
+ const needsUpdate = this.compareVersions(versionInfo.version, TEMPLATE_VERSION) < 0;
206
+ return {
207
+ filePath,
208
+ currentVersion: versionInfo.version,
209
+ latestVersion: TEMPLATE_VERSION,
210
+ needsUpdate,
211
+ reason: needsUpdate ? 'outdated' : 'up-to-date',
212
+ };
213
+ }
214
+ /**
215
+ * Generate version header for template files
216
+ */
217
+ static getVersionHeader() {
218
+ return `${DINO_MARKERS.versionPrefix}${TEMPLATE_VERSION}${DINO_MARKERS.versionSuffix}\n`;
219
+ }
154
220
  }
155
221
  /**
156
222
  * 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.2",
3
+ "version": "0.2.0",
4
4
  "description": "Claude Code workflow system with dinosaur-themed specification phases",
5
5
  "type": "module",
6
6
  "exports": {