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 +1 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +202 -40
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/update.d.ts +2 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +198 -31
- package/dist/commands/update.js.map +1 -1
- package/dist/core/config.d.ts +24 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +101 -0
- package/dist/core/config.js.map +1 -1
- package/dist/core/templates/rules-template.d.ts.map +1 -1
- package/dist/core/templates/rules-template.js +2 -0
- package/dist/core/templates/rules-template.js.map +1 -1
- package/dist/core/templates/skill-template.d.ts.map +1 -1
- package/dist/core/templates/skill-template.js +2 -0
- package/dist/core/templates/skill-template.js.map +1 -1
- package/dist/core/templates/slash-commands.d.ts.map +1 -1
- package/dist/core/templates/slash-commands.js +11 -0
- package/dist/core/templates/slash-commands.js.map +1 -1
- package/dist/utils/file-system.d.ts +35 -0
- package/dist/utils/file-system.d.ts.map +1 -1
- package/dist/utils/file-system.js +78 -1
- package/dist/utils/file-system.js.map +1 -1
- package/package.json +1 -1
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
|
});
|
package/dist/cli/index.js.map
CHANGED
|
@@ -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":"
|
|
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"}
|
package/dist/commands/init.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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('
|
|
149
|
+
const spinner = ora('Planning initialization...').start();
|
|
25
150
|
try {
|
|
26
|
-
//
|
|
27
|
-
|
|
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
|
-
|
|
54
|
-
|
|
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
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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
|
-
|
|
82
|
-
|
|
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":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAsB,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,cAAc,EAAkB,MAAM,uBAAuB,CAAC;AACvE,OAAO,EACL,aAAa,EACb,eAAe,EACf,SAAS,EACT,WAAW,EACX,KAAK,EACL,OAAO,EACP,eAAe,GAGhB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AA2BnE;;GAEG;AACH,SAAS,kBAAkB,CAAC,WAAmB,EAAE,SAAiC;IAChF,sCAAsC;IACtC,IAAI,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC,WAAW,CAAC,CAAC;IAChC,CAAC;IAED,wBAAwB;IACxB,QAAQ,WAAW,EAAE,CAAC;QACpB,KAAK,eAAe;YAClB,OAAO,wBAAwB,EAAE,CAAC;QACpC,KAAK,eAAe;YAClB,OAAO,wBAAwB,EAAE,CAAC;QACpC,KAAK,YAAY;YACf,OAAO,cAAc,EAAE,CAAC;QAC1B;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe,CAC5B,UAAkB,EAClB,KAAc;IAEd,MAAM,OAAO,GAAuB,EAAE,CAAC;IAEvC,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;QAC/D,wCAAwC;QACxC,IAAI,IAAI,CAAC,WAAW,KAAK,YAAY,EAAE,CAAC;YACtC,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEjD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,iCAAiC;YACjC,OAAO,CAAC,IAAI,CAAC;gBACX,QAAQ;gBACR,QAAQ;gBACR,MAAM,EAAE,QAAQ;gBAChB,MAAM,EAAE,qBAAqB;gBAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,IAAI;aACL,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,kEAAkE;QAClE,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtB,KAAK,WAAW;gBACd,iDAAiD;gBACjD,OAAO,CAAC,IAAI,CAAC;oBACX,QAAQ;oBACR,QAAQ;oBACR,MAAM,EAAE,MAAM;oBACd,MAAM,EAAE,kCAAkC;oBAC1C,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,IAAI;iBACL,CAAC,CAAC;gBACH,MAAM;YAER,KAAK,gBAAgB;gBACnB,IAAI,KAAK,EAAE,CAAC;oBACV,kCAAkC;oBAClC,OAAO,CAAC,IAAI,CAAC;wBACX,QAAQ;wBACR,QAAQ;wBACR,MAAM,EAAE,SAAS;wBACjB,MAAM,EAAE,oBAAoB;wBAC5B,QAAQ,EAAE,IAAI,CAAC,QAAQ;wBACvB,IAAI;qBACL,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,8CAA8C;oBAC9C,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;oBAClE,IAAI,aAAa,CAAC,WAAW,EAAE,CAAC;wBAC9B,MAAM,WAAW,GAAG,aAAa,CAAC,cAAc;4BAC9C,CAAC,CAAC,GAAG,aAAa,CAAC,cAAc,OAAO,aAAa,CAAC,aAAa,EAAE;4BACrE,CAAC,CAAC,GAAG,aAAa,CAAC,MAAM,OAAO,aAAa,CAAC,aAAa,EAAE,CAAC;wBAChE,OAAO,CAAC,IAAI,CAAC;4BACX,QAAQ;4BACR,QAAQ;4BACR,MAAM,EAAE,SAAS;4BACjB,MAAM,EAAE,aAAa,WAAW,GAAG;4BACnC,QAAQ,EAAE,IAAI,CAAC,QAAQ;4BACvB,IAAI;yBACL,CAAC,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,IAAI,CAAC;4BACX,QAAQ;4BACR,QAAQ;4BACR,MAAM,EAAE,MAAM;4BACd,MAAM,EAAE,oBAAoB;4BAC5B,QAAQ,EAAE,IAAI,CAAC,QAAQ;4BACvB,IAAI;yBACL,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBACD,MAAM;YAER,KAAK,WAAW;gBACd,sCAAsC;gBACtC,OAAO,CAAC,IAAI,CAAC;oBACX,QAAQ;oBACR,QAAQ;oBACR,MAAM,EAAE,OAAO;oBACf,MAAM,EAAE,0BAA0B;oBAClC,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,IAAI;iBACL,CAAC,CAAC;gBACH,MAAM;QACV,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAC1B,MAAwB,EACxB,SAAiC;IAEjC,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC7B,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACvE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,UAAkB,EAAE,OAAoB;IACxE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;IAEpD,qEAAqE;IACrE,MAAM,kBAAkB,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5D,IAAI,kBAAkB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACzC,yEAAyE;QACzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC,CAAC;IAC1F,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,4BAA4B,CAAC,CAAC,KAAK,EAAE,CAAC;IAE1D,IAAI,CAAC;QACH,4BAA4B;QAC5B,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;QAE1E,MAAM,MAAM,GAAe;YACzB,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,EAAE;SACZ,CAAC;QAEF,6BAA6B;QAC7B,OAAO,CAAC,IAAI,GAAG,iCAAiC,CAAC;QACjD,MAAM,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QACjE,MAAM,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QACnE,MAAM,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxE,MAAM,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;QACtE,MAAM,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAErE,gBAAgB;QAChB,MAAM,SAAS,GAAG,wBAAwB,EAAE,CAAC;QAE7C,0BAA0B;QAC1B,OAAO,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAErC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAEvC,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;gBACtB,KAAK,QAAQ;oBACX,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBACrC,MAAM;gBACR,KAAK,SAAS;oBACZ,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBACrC,MAAM;gBACR,KAAK,MAAM;oBACT,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBACrC,MAAM;gBACR,KAAK,OAAO;oBACV,6BAA6B;oBAC7B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBACrC,MAAM;YACV,CAAC;QACH,CAAC;QAED,4EAA4E;QAC5E,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;YAC7C,MAAM,UAAU,CAAC,SAAS,CAAC,cAAc,EAAE;gBACzC,EAAE,EAAE,IAAI;gBACR,KAAK,EAAE,IAAI;gBACX,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;YACH,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACrC,CAAC;QAED,kBAAkB;QAClB,OAAO,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACtC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;QACtD,MAAM,UAAU,CAAC,aAAa,CAAC,YAAY,EAAE;YAC3C,KAAK,EAAE;gBACL,gBAAgB,EAAE;oBAChB;wBACE,KAAK,EAAE;4BACL;gCACE,IAAI,EAAE,SAAS;gCACf,OAAO,EAAE,yCAAyC;6BACnD;yBACF;qBACF;iBACF;aACF;SACF,CAAC,CAAC;QAEH,OAAO,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;QAEvD,oCAAoC;QACpC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,cAAc,OAAO,YAAY,CAAC,CAAC,CAAC;QAE/D,wBAAwB;QACxB,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,MAAM,CAAC,OAAO,CAAC,MAAM,QAAQ,CAAC,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,MAAM,CAAC,OAAO,CAAC,MAAM,QAAQ,CAAC,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,OAAO,CAAC,MAAM,+BAA+B,CAAC,CAAC,CAAC;QAC7F,CAAC;QAED,qDAAqD;QACrD,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CACrC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,QAAQ,KAAK,WAAW,CACvD,CAAC;QACF,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC,CAAC;YACtE,KAAK,MAAM,MAAM,IAAI,gBAAgB,EAAE,CAAC;gBACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,kBAAkB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC,CAAC;YAClF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC,CAAC;QAC3E,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAElB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC/C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -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
|
|
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":"
|
|
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"}
|
package/dist/commands/update.js
CHANGED
|
@@ -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,
|
|
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
|
-
*
|
|
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('
|
|
133
|
+
const spinner = ora('Analyzing files...').start();
|
|
23
134
|
try {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
-
//
|
|
37
|
-
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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(`
|
|
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":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
package/dist/core/config.d.ts
CHANGED
|
@@ -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
|
|
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"}
|
package/dist/core/config.js
CHANGED
|
@@ -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 = [
|
package/dist/core/config.js.map
CHANGED
|
@@ -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;
|
|
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;
|
|
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;
|
|
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;
|
|
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;
|
|
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;
|
|
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
|
|
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;
|
|
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":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC5F,OAAO,EAAE,OAAO,EAAQ,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"file-system.js","sourceRoot":"","sources":["../../src/utils/file-system.ts"],"names":[],"mappings":"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"}
|