dino-spec 0.1.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.
Files changed (92) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +243 -0
  3. package/bin/dino.js +3 -0
  4. package/dist/cli/index.d.ts +3 -0
  5. package/dist/cli/index.d.ts.map +1 -0
  6. package/dist/cli/index.js +114 -0
  7. package/dist/cli/index.js.map +1 -0
  8. package/dist/commands/active.d.ts +5 -0
  9. package/dist/commands/active.d.ts.map +1 -0
  10. package/dist/commands/active.js +85 -0
  11. package/dist/commands/active.js.map +1 -0
  12. package/dist/commands/archive.d.ts +9 -0
  13. package/dist/commands/archive.d.ts.map +1 -0
  14. package/dist/commands/archive.js +77 -0
  15. package/dist/commands/archive.js.map +1 -0
  16. package/dist/commands/init.d.ts +9 -0
  17. package/dist/commands/init.d.ts.map +1 -0
  18. package/dist/commands/init.js +91 -0
  19. package/dist/commands/init.js.map +1 -0
  20. package/dist/commands/list.d.ts +12 -0
  21. package/dist/commands/list.d.ts.map +1 -0
  22. package/dist/commands/list.js +169 -0
  23. package/dist/commands/list.js.map +1 -0
  24. package/dist/commands/skill.d.ts +17 -0
  25. package/dist/commands/skill.d.ts.map +1 -0
  26. package/dist/commands/skill.js +143 -0
  27. package/dist/commands/skill.js.map +1 -0
  28. package/dist/commands/status.d.ts +9 -0
  29. package/dist/commands/status.d.ts.map +1 -0
  30. package/dist/commands/status.js +96 -0
  31. package/dist/commands/status.js.map +1 -0
  32. package/dist/commands/update.d.ts +9 -0
  33. package/dist/commands/update.d.ts.map +1 -0
  34. package/dist/commands/update.js +64 -0
  35. package/dist/commands/update.js.map +1 -0
  36. package/dist/commands/view.d.ts +5 -0
  37. package/dist/commands/view.d.ts.map +1 -0
  38. package/dist/commands/view.js +177 -0
  39. package/dist/commands/view.js.map +1 -0
  40. package/dist/core/config.d.ts +51 -0
  41. package/dist/core/config.d.ts.map +1 -0
  42. package/dist/core/config.js +58 -0
  43. package/dist/core/config.js.map +1 -0
  44. package/dist/core/skills/index.d.ts +7 -0
  45. package/dist/core/skills/index.d.ts.map +1 -0
  46. package/dist/core/skills/index.js +6 -0
  47. package/dist/core/skills/index.js.map +1 -0
  48. package/dist/core/skills/loader.d.ts +34 -0
  49. package/dist/core/skills/loader.d.ts.map +1 -0
  50. package/dist/core/skills/loader.js +110 -0
  51. package/dist/core/skills/loader.js.map +1 -0
  52. package/dist/core/skills/registry.d.ts +31 -0
  53. package/dist/core/skills/registry.d.ts.map +1 -0
  54. package/dist/core/skills/registry.js +150 -0
  55. package/dist/core/skills/registry.js.map +1 -0
  56. package/dist/core/skills/types.d.ts +33 -0
  57. package/dist/core/skills/types.d.ts.map +1 -0
  58. package/dist/core/skills/types.js +5 -0
  59. package/dist/core/skills/types.js.map +1 -0
  60. package/dist/core/templates/dna-template.d.ts +5 -0
  61. package/dist/core/templates/dna-template.d.ts.map +1 -0
  62. package/dist/core/templates/dna-template.js +52 -0
  63. package/dist/core/templates/dna-template.js.map +1 -0
  64. package/dist/core/templates/index.d.ts +8 -0
  65. package/dist/core/templates/index.d.ts.map +1 -0
  66. package/dist/core/templates/index.js +8 -0
  67. package/dist/core/templates/index.js.map +1 -0
  68. package/dist/core/templates/rules-template.d.ts +5 -0
  69. package/dist/core/templates/rules-template.d.ts.map +1 -0
  70. package/dist/core/templates/rules-template.js +71 -0
  71. package/dist/core/templates/rules-template.js.map +1 -0
  72. package/dist/core/templates/skill-template.d.ts +5 -0
  73. package/dist/core/templates/skill-template.d.ts.map +1 -0
  74. package/dist/core/templates/skill-template.js +63 -0
  75. package/dist/core/templates/skill-template.js.map +1 -0
  76. package/dist/core/templates/slash-commands.d.ts +5 -0
  77. package/dist/core/templates/slash-commands.d.ts.map +1 -0
  78. package/dist/core/templates/slash-commands.js +753 -0
  79. package/dist/core/templates/slash-commands.js.map +1 -0
  80. package/dist/index.d.ts +7 -0
  81. package/dist/index.d.ts.map +1 -0
  82. package/dist/index.js +7 -0
  83. package/dist/index.js.map +1 -0
  84. package/dist/utils/ascii-art.d.ts +38 -0
  85. package/dist/utils/ascii-art.d.ts.map +1 -0
  86. package/dist/utils/ascii-art.js +66 -0
  87. package/dist/utils/ascii-art.js.map +1 -0
  88. package/dist/utils/file-system.d.ts +67 -0
  89. package/dist/utils/file-system.d.ts.map +1 -0
  90. package/dist/utils/file-system.js +177 -0
  91. package/dist/utils/file-system.js.map +1 -0
  92. package/package.json +68 -0
@@ -0,0 +1,64 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import { join } from 'path';
4
+ import { FileSystem } from '../utils/file-system.js';
5
+ import { DINO_DIR_NAME, CLAUDE_DIR_NAME, CLAUDE_DIRS } from '../core/config.js';
6
+ import { getSlashCommandTemplates } from '../core/templates/slash-commands.js';
7
+ import { getWorkflowSkillTemplate } from '../core/templates/skill-template.js';
8
+ import { getWorkflowRulesTemplate } from '../core/templates/rules-template.js';
9
+ /**
10
+ * Update dino-spec configuration files in .claude/
11
+ */
12
+ export async function updateCommand(options) {
13
+ const cwd = process.cwd();
14
+ const dinoDir = join(cwd, DINO_DIR_NAME);
15
+ const claudeDir = join(cwd, CLAUDE_DIR_NAME);
16
+ // Check if dino is initialized
17
+ if (!await FileSystem.exists(dinoDir)) {
18
+ console.log(chalk.yellow('\nNo .dino directory found.'));
19
+ console.log(chalk.dim('Run "dino init" to initialize dino-spec in this project.\n'));
20
+ return;
21
+ }
22
+ const spinner = ora('Updating dino-spec configuration...').start();
23
+ 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, `${name}.md`);
30
+ const existing = await FileSystem.readFileSafe(filePath);
31
+ if (!existing || options?.force) {
32
+ await FileSystem.writeFile(filePath, content);
33
+ updated++;
34
+ }
35
+ }
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++;
49
+ }
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'));
53
+ }
54
+ else {
55
+ spinner.succeed(`Updated ${updated} configuration file(s)`);
56
+ console.log('');
57
+ }
58
+ }
59
+ catch (error) {
60
+ spinner.fail('Failed to update configuration');
61
+ console.error(chalk.red(`\n${error}\n`));
62
+ }
63
+ }
64
+ //# sourceMappingURL=update.js.map
@@ -0,0 +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,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChF,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;AAM/E;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAuB;IACzD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IAE7C,+BAA+B;IAC/B,IAAI,CAAC,MAAM,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC,CAAC;QACrF,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,qCAAqC,CAAC,CAAC,KAAK,EAAE,CAAC;IAEnE,IAAI,CAAC;QACH,wBAAwB;QACxB,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC1D,MAAM,SAAS,GAAG,wBAAwB,EAAE,CAAC;QAC7C,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;YACjD,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YAEzD,IAAI,CAAC,QAAQ,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;gBAChC,MAAM,UAAU,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC9C,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QAED,eAAe;QACf,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAClE,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAE/D,IAAI,CAAC,aAAa,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;YACrC,MAAM,UAAU,CAAC,SAAS,CAAC,SAAS,EAAE,wBAAwB,EAAE,CAAC,CAAC;YAClE,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,eAAe;QACf,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QACpE,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAE/D,IAAI,CAAC,aAAa,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;YACrC,MAAM,UAAU,CAAC,SAAS,CAAC,SAAS,EAAE,wBAAwB,EAAE,CAAC,CAAC;YAClE,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;YAClB,OAAO,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC,CAAC;QACzE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,OAAO,CAAC,WAAW,OAAO,wBAAwB,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;IACH,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,KAAK,IAAI,CAAC,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Show interactive dashboard view
3
+ */
4
+ export declare function viewCommand(): Promise<void>;
5
+ //# sourceMappingURL=view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../src/commands/view.ts"],"names":[],"mappings":"AAqBA;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CA2EjD"}
@@ -0,0 +1,177 @@
1
+ import chalk from 'chalk';
2
+ import { join } from 'path';
3
+ import { FileSystem } from '../utils/file-system.js';
4
+ import { DINO_DIR_NAME, DINO_DIRS, FILES, WORKFLOW_PHASES } from '../core/config.js';
5
+ import { getDinoHeader } from '../utils/ascii-art.js';
6
+ import { VERSION } from '../core/config.js';
7
+ /**
8
+ * Show interactive dashboard view
9
+ */
10
+ export async function viewCommand() {
11
+ const dinoDir = join(process.cwd(), DINO_DIR_NAME);
12
+ // Check if dino is initialized
13
+ if (!await FileSystem.exists(dinoDir)) {
14
+ console.log(getDinoHeader('Spec-Driven Development for Claude Code', VERSION));
15
+ console.log(chalk.yellow('No .dino directory found.'));
16
+ console.log(chalk.dim('Run "dino init" to initialize dino-spec in this project.\n'));
17
+ return;
18
+ }
19
+ // Read active spec
20
+ const activePath = join(dinoDir, FILES.active);
21
+ const active = await FileSystem.readJsonSafe(activePath);
22
+ // Get all specs
23
+ const specsDir = join(dinoDir, DINO_DIRS.specs);
24
+ const archiveDir = join(dinoDir, DINO_DIRS.archive);
25
+ const activeSpecs = await getSpecsSummary(specsDir, active?.id ?? null);
26
+ const archivedSpecs = await getSpecsSummary(archiveDir, null, true);
27
+ // Display dashboard
28
+ console.log(getDinoHeader('Dashboard', VERSION));
29
+ // Workflow phases visualization
30
+ console.log(chalk.bold('Workflow Phases'));
31
+ console.log(chalk.dim('─'.repeat(60)));
32
+ displayWorkflowPhases(active?.phase ?? null);
33
+ console.log('');
34
+ // Active spec details
35
+ if (active?.id && activeSpecs.length > 0) {
36
+ const currentSpec = activeSpecs.find(s => s.id === active.id);
37
+ if (currentSpec) {
38
+ console.log(chalk.bold('Current Specification'));
39
+ console.log(chalk.dim('─'.repeat(60)));
40
+ displaySpecDetail(currentSpec);
41
+ console.log('');
42
+ }
43
+ }
44
+ // All specs
45
+ console.log(chalk.bold('All Specifications'));
46
+ console.log(chalk.dim('─'.repeat(60)));
47
+ if (activeSpecs.length === 0 && archivedSpecs.length === 0) {
48
+ console.log(chalk.dim(' No specifications found.'));
49
+ console.log(chalk.dim(' Run "/dino.discover" to create your first specification.\n'));
50
+ }
51
+ else {
52
+ if (activeSpecs.length > 0) {
53
+ console.log(chalk.dim(' Active:'));
54
+ for (const spec of activeSpecs) {
55
+ displaySpecLine(spec);
56
+ }
57
+ }
58
+ if (archivedSpecs.length > 0) {
59
+ console.log(chalk.dim('\n Archived:'));
60
+ for (const spec of archivedSpecs) {
61
+ displaySpecLine(spec, true);
62
+ }
63
+ }
64
+ }
65
+ console.log('');
66
+ // Quick commands
67
+ console.log(chalk.bold('Quick Commands'));
68
+ console.log(chalk.dim('─'.repeat(60)));
69
+ console.log(` ${chalk.cyan('dino status')} Show current spec progress`);
70
+ console.log(` ${chalk.cyan('dino list')} List all specs and skills`);
71
+ console.log(` ${chalk.cyan('dino active')} Show or set active spec`);
72
+ console.log(` ${chalk.cyan('/dino.discover')} Start a new specification`);
73
+ console.log('');
74
+ }
75
+ /**
76
+ * Get summaries of all specs in a directory
77
+ */
78
+ async function getSpecsSummary(dir, activeId, archived = false) {
79
+ const summaries = [];
80
+ if (!await FileSystem.exists(dir)) {
81
+ return summaries;
82
+ }
83
+ const specIds = await FileSystem.listDirectory(dir);
84
+ for (const id of specIds) {
85
+ const specDir = join(dir, id);
86
+ if (!await FileSystem.isDirectory(specDir))
87
+ continue;
88
+ const specPath = join(specDir, FILES.spec);
89
+ const tasksPath = join(specDir, FILES.tasks);
90
+ const specContent = await FileSystem.readFileSafe(specPath);
91
+ if (!specContent)
92
+ continue;
93
+ // Extract title and phase
94
+ const titleMatch = specContent.match(/^#\s+(.+)$/m);
95
+ const phaseMatch = specContent.match(/Phase:\s*(\w+)/i);
96
+ const title = titleMatch?.[1] ?? id;
97
+ const phase = archived ? 'archived' : (phaseMatch?.[1] ?? 'discover');
98
+ // Count tasks
99
+ let completed = 0;
100
+ let total = 0;
101
+ const tasksContent = await FileSystem.readFileSafe(tasksPath);
102
+ if (tasksContent) {
103
+ const lines = tasksContent.split('\n');
104
+ for (const line of lines) {
105
+ if (line.match(/^- \[[ x]\]/)) {
106
+ total++;
107
+ if (line.match(/^- \[x\]/i)) {
108
+ completed++;
109
+ }
110
+ }
111
+ }
112
+ }
113
+ summaries.push({
114
+ id,
115
+ title,
116
+ phase,
117
+ progress: { completed, total },
118
+ isActive: id === activeId,
119
+ });
120
+ }
121
+ return summaries;
122
+ }
123
+ /**
124
+ * Display workflow phases with current phase highlighted
125
+ */
126
+ function displayWorkflowPhases(currentPhase) {
127
+ const phaseDisplay = WORKFLOW_PHASES.map(phase => {
128
+ if (phase === currentPhase) {
129
+ return chalk.cyan.bold(`[${phase}]`);
130
+ }
131
+ const index = WORKFLOW_PHASES.indexOf(phase);
132
+ const currentIndex = currentPhase ? WORKFLOW_PHASES.indexOf(currentPhase) : -1;
133
+ if (currentIndex >= 0 && index < currentIndex) {
134
+ return chalk.green(phase);
135
+ }
136
+ return chalk.dim(phase);
137
+ });
138
+ console.log(` ${phaseDisplay.join(' → ')}`);
139
+ }
140
+ /**
141
+ * Display detailed spec info
142
+ */
143
+ function displaySpecDetail(spec) {
144
+ console.log(` ${chalk.bold(spec.title)}`);
145
+ console.log(chalk.dim(` ID: ${spec.id}`));
146
+ console.log(` Phase: ${chalk.cyan(spec.phase)}`);
147
+ if (spec.progress.total > 0) {
148
+ const percentage = Math.round((spec.progress.completed / spec.progress.total) * 100);
149
+ const progressBar = createProgressBar(percentage);
150
+ console.log(` Progress: ${progressBar} ${percentage}% (${spec.progress.completed}/${spec.progress.total})`);
151
+ }
152
+ }
153
+ /**
154
+ * Display a single spec line
155
+ */
156
+ function displaySpecLine(spec, archived = false) {
157
+ const icon = spec.isActive ? chalk.green('●') : (archived ? chalk.dim('○') : chalk.yellow('○'));
158
+ const progress = spec.progress.total > 0
159
+ ? chalk.dim(` [${spec.progress.completed}/${spec.progress.total}]`)
160
+ : '';
161
+ const activeMarker = spec.isActive ? chalk.cyan(' (active)') : '';
162
+ console.log(` ${icon} ${spec.id}${progress}${activeMarker}`);
163
+ if (spec.title !== spec.id) {
164
+ console.log(chalk.dim(` ${spec.title}`));
165
+ }
166
+ }
167
+ /**
168
+ * Create a progress bar
169
+ */
170
+ function createProgressBar(percentage, width = 15) {
171
+ const filled = Math.round((percentage / 100) * width);
172
+ const empty = width - filled;
173
+ const filledChar = chalk.green('█');
174
+ const emptyChar = chalk.dim('░');
175
+ return `[${filledChar.repeat(filled)}${emptyChar.repeat(empty)}]`;
176
+ }
177
+ //# sourceMappingURL=view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../../src/commands/view.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Core configuration constants for dino-spec
3
+ */
4
+ /** Directory name for dino data files */
5
+ export declare const DINO_DIR_NAME = ".dino";
6
+ /** Directory name for Claude Code configuration */
7
+ export declare const CLAUDE_DIR_NAME = ".claude";
8
+ /** Markers for managed content sections */
9
+ export declare const DINO_MARKERS: {
10
+ readonly start: "<!-- DINO:START -->";
11
+ readonly end: "<!-- DINO:END -->";
12
+ readonly coreStart: "<!-- DINO:CORE:START -->";
13
+ readonly coreEnd: "<!-- DINO:CORE:END -->";
14
+ readonly userStart: "<!-- DINO:USER:START -->";
15
+ readonly userEnd: "<!-- DINO:USER:END -->";
16
+ };
17
+ /** Workflow phases in order */
18
+ export declare const WORKFLOW_PHASES: readonly ["discover", "scout", "clarify", "nest", "hatch", "hunt", "fossil", "next"];
19
+ export type WorkflowPhase = typeof WORKFLOW_PHASES[number];
20
+ /** Phases that require Plan Mode */
21
+ export declare const PLAN_MODE_PHASES: WorkflowPhase[];
22
+ /** Minimum tasks before requiring Plan Mode for hatch */
23
+ export declare const PLAN_MODE_TASK_THRESHOLD = 5;
24
+ /** Maximum tasks per phase to prevent context loss */
25
+ export declare const MAX_TASKS_PER_PHASE = 10;
26
+ /** Spec statuses */
27
+ export declare const SPEC_STATUSES: readonly ["draft", "active", "completed", "archived"];
28
+ export type SpecStatus = typeof SPEC_STATUSES[number];
29
+ /** File names */
30
+ export declare const FILES: {
31
+ readonly active: "active.json";
32
+ readonly dna: "dna.md";
33
+ readonly spec: "spec.md";
34
+ readonly plan: "plan.md";
35
+ readonly research: "research.md";
36
+ readonly tasks: "tasks.md";
37
+ };
38
+ /** Directory names within .dino */
39
+ export declare const DINO_DIRS: {
40
+ readonly specs: "specs";
41
+ readonly archive: "archive";
42
+ };
43
+ /** Directory names within .claude */
44
+ export declare const CLAUDE_DIRS: {
45
+ readonly commands: "commands/dino";
46
+ readonly skills: "skills/dino-workflow";
47
+ readonly rules: "rules/dino";
48
+ };
49
+ /** Package version (will be replaced during build) */
50
+ export declare const VERSION = "0.1.0";
51
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Core configuration constants for dino-spec
3
+ */
4
+ /** Directory name for dino data files */
5
+ export const DINO_DIR_NAME = '.dino';
6
+ /** Directory name for Claude Code configuration */
7
+ export const CLAUDE_DIR_NAME = '.claude';
8
+ /** Markers for managed content sections */
9
+ export const DINO_MARKERS = {
10
+ start: '<!-- DINO:START -->',
11
+ end: '<!-- DINO:END -->',
12
+ coreStart: '<!-- DINO:CORE:START -->',
13
+ coreEnd: '<!-- DINO:CORE:END -->',
14
+ userStart: '<!-- DINO:USER:START -->',
15
+ userEnd: '<!-- DINO:USER:END -->',
16
+ };
17
+ /** Workflow phases in order */
18
+ export const WORKFLOW_PHASES = [
19
+ 'discover',
20
+ 'scout',
21
+ 'clarify',
22
+ 'nest',
23
+ 'hatch',
24
+ 'hunt',
25
+ 'fossil',
26
+ 'next',
27
+ ];
28
+ /** Phases that require Plan Mode */
29
+ export const PLAN_MODE_PHASES = ['nest', 'hatch'];
30
+ /** Minimum tasks before requiring Plan Mode for hatch */
31
+ export const PLAN_MODE_TASK_THRESHOLD = 5;
32
+ /** Maximum tasks per phase to prevent context loss */
33
+ export const MAX_TASKS_PER_PHASE = 10;
34
+ /** Spec statuses */
35
+ export const SPEC_STATUSES = ['draft', 'active', 'completed', 'archived'];
36
+ /** File names */
37
+ export const FILES = {
38
+ active: 'active.json',
39
+ dna: 'dna.md',
40
+ spec: 'spec.md',
41
+ plan: 'plan.md',
42
+ research: 'research.md',
43
+ tasks: 'tasks.md',
44
+ };
45
+ /** Directory names within .dino */
46
+ export const DINO_DIRS = {
47
+ specs: 'specs',
48
+ archive: 'archive',
49
+ };
50
+ /** Directory names within .claude */
51
+ export const CLAUDE_DIRS = {
52
+ commands: 'commands/dino',
53
+ skills: 'skills/dino-workflow',
54
+ rules: 'rules/dino',
55
+ };
56
+ /** Package version (will be replaced during build) */
57
+ export const VERSION = '0.1.0';
58
+ //# sourceMappingURL=config.js.map
@@ -0,0 +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,eAAe;IACzB,MAAM,EAAE,sBAAsB;IAC9B,KAAK,EAAE,YAAY;CACX,CAAC;AAEX,sDAAsD;AACtD,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Skills module exports
3
+ */
4
+ export { SkillRegistry } from './registry.js';
5
+ export { SkillLoader } from './loader.js';
6
+ export type { Skill, SkillMetadata, RegistrySkill } from './types.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/skills/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Skills module exports
3
+ */
4
+ export { SkillRegistry } from './registry.js';
5
+ export { SkillLoader } from './loader.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/skills/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Skill Loader - loads and parses skill files
3
+ */
4
+ import type { Skill } from './types.js';
5
+ export declare class SkillLoader {
6
+ private projectPath;
7
+ private skillsDir;
8
+ constructor(projectPath: string);
9
+ /**
10
+ * Load all skills from the project
11
+ */
12
+ loadAll(): Promise<Skill[]>;
13
+ /**
14
+ * Load a specific skill by ID
15
+ */
16
+ load(skillId: string): Promise<Skill | null>;
17
+ /**
18
+ * Check if a skill exists
19
+ */
20
+ exists(skillId: string): Promise<boolean>;
21
+ /**
22
+ * Parse skill metadata from content
23
+ */
24
+ private parseMetadata;
25
+ /**
26
+ * Determine the source of a skill
27
+ */
28
+ private determineSource;
29
+ /**
30
+ * Get the skills directory path
31
+ */
32
+ getSkillsDir(): string;
33
+ }
34
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/core/skills/loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,KAAK,EAAiB,MAAM,YAAY,CAAC;AAEvD,qBAAa,WAAW;IACtB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAS;gBAEd,WAAW,EAAE,MAAM;IAK/B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAmBjC;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IA4BlD;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK/C;;OAEG;IACH,OAAO,CAAC,aAAa;IA4BrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAWvB;;OAEG;IACH,YAAY,IAAI,MAAM;CAGvB"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Skill Loader - loads and parses skill files
3
+ */
4
+ import { join } from 'path';
5
+ import { FileSystem } from '../../utils/file-system.js';
6
+ import { CLAUDE_DIR_NAME } from '../config.js';
7
+ export class SkillLoader {
8
+ projectPath;
9
+ skillsDir;
10
+ constructor(projectPath) {
11
+ this.projectPath = projectPath;
12
+ this.skillsDir = join(projectPath, CLAUDE_DIR_NAME, 'skills');
13
+ }
14
+ /**
15
+ * Load all skills from the project
16
+ */
17
+ async loadAll() {
18
+ const skills = [];
19
+ if (!await FileSystem.exists(this.skillsDir)) {
20
+ return skills;
21
+ }
22
+ const dirs = await FileSystem.listDirectory(this.skillsDir);
23
+ for (const dir of dirs) {
24
+ const skill = await this.load(dir);
25
+ if (skill) {
26
+ skills.push(skill);
27
+ }
28
+ }
29
+ return skills;
30
+ }
31
+ /**
32
+ * Load a specific skill by ID
33
+ */
34
+ async load(skillId) {
35
+ const skillPath = join(this.skillsDir, skillId);
36
+ if (!await FileSystem.isDirectory(skillPath)) {
37
+ return null;
38
+ }
39
+ const skillFile = join(skillPath, 'SKILL.md');
40
+ const content = await FileSystem.readFileSafe(skillFile);
41
+ if (!content) {
42
+ return null;
43
+ }
44
+ const metadata = this.parseMetadata(content);
45
+ if (!metadata) {
46
+ return null;
47
+ }
48
+ return {
49
+ id: skillId,
50
+ metadata,
51
+ path: skillPath,
52
+ content,
53
+ source: this.determineSource(skillId),
54
+ };
55
+ }
56
+ /**
57
+ * Check if a skill exists
58
+ */
59
+ async exists(skillId) {
60
+ const skillPath = join(this.skillsDir, skillId, 'SKILL.md');
61
+ return FileSystem.exists(skillPath);
62
+ }
63
+ /**
64
+ * Parse skill metadata from content
65
+ */
66
+ parseMetadata(content) {
67
+ const match = content.match(/^---\n([\s\S]*?)\n---/);
68
+ if (!match)
69
+ return null;
70
+ const frontmatter = match[1];
71
+ const lines = frontmatter.split('\n');
72
+ const data = {};
73
+ for (const line of lines) {
74
+ const colonIndex = line.indexOf(':');
75
+ if (colonIndex > 0) {
76
+ const key = line.substring(0, colonIndex).trim();
77
+ const value = line.substring(colonIndex + 1).trim();
78
+ data[key] = value;
79
+ }
80
+ }
81
+ if (!data.name)
82
+ return null;
83
+ return {
84
+ name: data.name,
85
+ description: data.description ?? 'No description',
86
+ version: data.version,
87
+ author: data.author,
88
+ repository: data.repository,
89
+ };
90
+ }
91
+ /**
92
+ * Determine the source of a skill
93
+ */
94
+ determineSource(skillId) {
95
+ // Bundled skills
96
+ if (skillId === 'dino-workflow') {
97
+ return 'bundled';
98
+ }
99
+ // Future: Check for registry marker
100
+ // For now, all non-bundled skills are local
101
+ return 'local';
102
+ }
103
+ /**
104
+ * Get the skills directory path
105
+ */
106
+ getSkillsDir() {
107
+ return this.skillsDir;
108
+ }
109
+ }
110
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/core/skills/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Skill Registry - manages skill discovery and installation
3
+ */
4
+ import type { Skill, RegistrySkill } from './types.js';
5
+ export declare class SkillRegistry {
6
+ private registryUrl;
7
+ private cache;
8
+ constructor(registryUrl?: string);
9
+ /**
10
+ * List all installed skills in the project
11
+ */
12
+ listInstalled(projectPath: string): Promise<Skill[]>;
13
+ /**
14
+ * Get a specific installed skill
15
+ */
16
+ getInstalled(projectPath: string, skillId: string): Promise<Skill | null>;
17
+ /**
18
+ * Install a skill from registry
19
+ * For MVP, this creates a placeholder - full registry support coming later
20
+ */
21
+ install(projectPath: string, skillName: string): Promise<boolean>;
22
+ /**
23
+ * Remove an installed skill
24
+ */
25
+ remove(projectPath: string, skillId: string): Promise<boolean>;
26
+ /**
27
+ * Search registry for skills (MVP: returns empty, future: queries registry)
28
+ */
29
+ search(query: string): Promise<RegistrySkill[]>;
30
+ }
31
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/core/skills/registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,KAAK,EAAiB,aAAa,EAAE,MAAM,YAAY,CAAC;AAKtE,qBAAa,aAAa;IACxB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,KAAK,CAAyC;gBAE1C,WAAW,GAAE,MAA6B;IAItD;;OAEG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAkC1D;;OAEG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAmB/E;;;OAGG;IACG,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBvE;;OAEG;IACG,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBpE;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAKtD"}