strikethroo 3.0.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 (83) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +79 -0
  3. package/dist/cli.d.ts +9 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +187 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/conflict-detector.d.ts +24 -0
  8. package/dist/conflict-detector.d.ts.map +1 -0
  9. package/dist/conflict-detector.js +130 -0
  10. package/dist/conflict-detector.js.map +1 -0
  11. package/dist/index.d.ts +22 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +344 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/metadata.d.ts +40 -0
  16. package/dist/metadata.d.ts.map +1 -0
  17. package/dist/metadata.js +121 -0
  18. package/dist/metadata.js.map +1 -0
  19. package/dist/plan-utils.d.ts +35 -0
  20. package/dist/plan-utils.d.ts.map +1 -0
  21. package/dist/plan-utils.js +123 -0
  22. package/dist/plan-utils.js.map +1 -0
  23. package/dist/plan.d.ts +27 -0
  24. package/dist/plan.d.ts.map +1 -0
  25. package/dist/plan.js +279 -0
  26. package/dist/plan.js.map +1 -0
  27. package/dist/prompts.d.ts +21 -0
  28. package/dist/prompts.d.ts.map +1 -0
  29. package/dist/prompts.js +132 -0
  30. package/dist/prompts.js.map +1 -0
  31. package/dist/status.d.ts +73 -0
  32. package/dist/status.d.ts.map +1 -0
  33. package/dist/status.js +375 -0
  34. package/dist/status.js.map +1 -0
  35. package/dist/types.d.ts +274 -0
  36. package/dist/types.d.ts.map +1 -0
  37. package/dist/types.js +9 -0
  38. package/dist/types.js.map +1 -0
  39. package/dist/utils.d.ts +53 -0
  40. package/dist/utils.d.ts.map +1 -0
  41. package/dist/utils.js +158 -0
  42. package/dist/utils.js.map +1 -0
  43. package/package.json +94 -0
  44. package/templates/harness/agents/plan-creator.md +95 -0
  45. package/templates/harness/skills/st-create-plan/SKILL.md +120 -0
  46. package/templates/harness/skills/st-create-plan/scripts/find-strikethroo-root.cjs +116 -0
  47. package/templates/harness/skills/st-create-plan/scripts/get-next-plan-id.cjs +197 -0
  48. package/templates/harness/skills/st-execute-blueprint/SKILL.md +147 -0
  49. package/templates/harness/skills/st-execute-blueprint/scripts/create-feature-branch.cjs +359 -0
  50. package/templates/harness/skills/st-execute-blueprint/scripts/find-strikethroo-root.cjs +116 -0
  51. package/templates/harness/skills/st-execute-blueprint/scripts/validate-plan-blueprint.cjs +358 -0
  52. package/templates/harness/skills/st-execute-task/SKILL.md +195 -0
  53. package/templates/harness/skills/st-execute-task/scripts/check-task-dependencies.cjs +420 -0
  54. package/templates/harness/skills/st-execute-task/scripts/find-strikethroo-root.cjs +116 -0
  55. package/templates/harness/skills/st-execute-task/scripts/validate-plan-blueprint.cjs +358 -0
  56. package/templates/harness/skills/st-full-workflow/SKILL.md +413 -0
  57. package/templates/harness/skills/st-full-workflow/scripts/create-feature-branch.cjs +359 -0
  58. package/templates/harness/skills/st-full-workflow/scripts/find-strikethroo-root.cjs +116 -0
  59. package/templates/harness/skills/st-full-workflow/scripts/get-next-plan-id.cjs +197 -0
  60. package/templates/harness/skills/st-full-workflow/scripts/get-next-task-id.cjs +295 -0
  61. package/templates/harness/skills/st-full-workflow/scripts/validate-plan-blueprint.cjs +358 -0
  62. package/templates/harness/skills/st-generate-tasks/SKILL.md +244 -0
  63. package/templates/harness/skills/st-generate-tasks/scripts/find-strikethroo-root.cjs +116 -0
  64. package/templates/harness/skills/st-generate-tasks/scripts/get-next-task-id.cjs +295 -0
  65. package/templates/harness/skills/st-generate-tasks/scripts/validate-plan-blueprint.cjs +358 -0
  66. package/templates/harness/skills/st-refine-plan/SKILL.md +205 -0
  67. package/templates/harness/skills/st-refine-plan/scripts/find-strikethroo-root.cjs +116 -0
  68. package/templates/harness/skills/st-refine-plan/scripts/validate-plan-blueprint.cjs +358 -0
  69. package/templates/strikethroo/README.md +7 -0
  70. package/templates/strikethroo/config/STRIKETHROO.md +76 -0
  71. package/templates/strikethroo/config/hooks/POST_ERROR_DETECTION.md +46 -0
  72. package/templates/strikethroo/config/hooks/POST_EXECUTION.md +25 -0
  73. package/templates/strikethroo/config/hooks/POST_PHASE.md +24 -0
  74. package/templates/strikethroo/config/hooks/POST_PLAN.md +5 -0
  75. package/templates/strikethroo/config/hooks/POST_TASK_GENERATION_ALL.md +41 -0
  76. package/templates/strikethroo/config/hooks/PRE_PHASE.md +21 -0
  77. package/templates/strikethroo/config/hooks/PRE_PLAN.md +42 -0
  78. package/templates/strikethroo/config/hooks/PRE_TASK_ASSIGNMENT.md +32 -0
  79. package/templates/strikethroo/config/hooks/PRE_TASK_EXECUTION.md +1 -0
  80. package/templates/strikethroo/config/templates/BLUEPRINT_TEMPLATE.md +24 -0
  81. package/templates/strikethroo/config/templates/EXECUTION_SUMMARY_TEMPLATE.md +13 -0
  82. package/templates/strikethroo/config/templates/PLAN_TEMPLATE.md +109 -0
  83. package/templates/strikethroo/config/templates/TASK_TEMPLATE.md +36 -0
package/dist/index.js ADDED
@@ -0,0 +1,344 @@
1
+ "use strict";
2
+ /**
3
+ * Main Init Command Implementation
4
+ *
5
+ * This file contains the implementation of the init command
6
+ * Handles initialization of new Strikethroo projects
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var __importDefault = (this && this.__importDefault) || function (mod) {
42
+ return (mod && mod.__esModule) ? mod : { "default": mod };
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.init = init;
46
+ exports.isInitialized = isInitialized;
47
+ const fs = __importStar(require("fs-extra"));
48
+ const path = __importStar(require("path"));
49
+ const chalk_1 = __importDefault(require("chalk"));
50
+ const utils_1 = require("./utils");
51
+ const metadata_1 = require("./metadata");
52
+ const conflict_detector_1 = require("./conflict-detector");
53
+ const prompts_1 = require("./prompts");
54
+ // Visual formatting constants
55
+ const TERM_WIDTH = 80;
56
+ const DIVIDER = '─'.repeat(TERM_WIDTH);
57
+ /**
58
+ * Format a section header with cyan styling
59
+ */
60
+ function formatSectionHeader(title) {
61
+ return `\n${chalk_1.default.cyan.bold(title)}\n${chalk_1.default.cyan(DIVIDER)}\n`;
62
+ }
63
+ /**
64
+ * Get the absolute path to a template file
65
+ */
66
+ function getTemplatePath(templateFile) {
67
+ return path.join(__dirname, '..', 'templates', templateFile);
68
+ }
69
+ /**
70
+ * Resolve path segments relative to a base directory with cross-platform compatibility
71
+ */
72
+ function resolvePath(baseDir, ...segments) {
73
+ const base = baseDir || '.';
74
+ const validSegments = segments.filter(segment => segment !== null && segment !== undefined && segment !== '');
75
+ return path.resolve(base, ...validSegments);
76
+ }
77
+ /**
78
+ * Collect all file paths under a directory, sorted alphabetically
79
+ */
80
+ async function collectFiles(dir) {
81
+ const files = [];
82
+ if (!(await exists(dir)))
83
+ return files;
84
+ async function walk(current) {
85
+ const entries = await fs.readdir(current, { withFileTypes: true });
86
+ for (const entry of entries) {
87
+ const fullPath = path.join(current, entry.name);
88
+ if (entry.isDirectory()) {
89
+ await walk(fullPath);
90
+ }
91
+ else if (entry.isFile() && entry.name !== '.init-metadata.json') {
92
+ files.push(fullPath);
93
+ }
94
+ }
95
+ }
96
+ await walk(dir);
97
+ return files.sort();
98
+ }
99
+ /**
100
+ * Check if a file or directory exists
101
+ */
102
+ async function exists(filepath) {
103
+ try {
104
+ await fs.access(filepath);
105
+ return true;
106
+ }
107
+ catch {
108
+ return false;
109
+ }
110
+ }
111
+ /**
112
+ * Initialize a new Strikethroo project
113
+ *
114
+ * Creates directory structures and copies template files based on the selected harnesses.
115
+ * Validates input, creates necessary directories, and copies appropriate templates.
116
+ *
117
+ * @param options - Initialization options containing harness selection
118
+ * @returns CommandResult indicating success or failure with details
119
+ */
120
+ async function init(options) {
121
+ try {
122
+ // Determine base directory
123
+ const baseDir = options.destinationDirectory || '.';
124
+ const resolvedBaseDir = resolvePath(baseDir);
125
+ // Parse and validate harnesses
126
+ const harnesses = (0, utils_1.parseHarnesses)(options.harnesses);
127
+ (0, utils_1.validateHarnesses)(harnesses);
128
+ // ========== HEADER SECTION ==========
129
+ console.log(chalk_1.default.bold.white('\nStrikethroo Initialization'));
130
+ console.log(chalk_1.default.gray(DIVIDER));
131
+ // ========== CONFIGURATION SECTION ==========
132
+ console.log(formatSectionHeader('Configuration'));
133
+ console.log(` ${chalk_1.default.cyan('●')} Target Directory: ${resolvedBaseDir}`);
134
+ console.log(` ${chalk_1.default.cyan('●')} Harnesses: ${harnesses.join(', ')}`);
135
+ // ========== SETUP PROGRESS SECTION ==========
136
+ console.log(formatSectionHeader('Setup Progress'));
137
+ // Create .ai/strikethroo structure
138
+ console.log(` ${chalk_1.default.green('✓')} Creating .ai/strikethroo directory structure`);
139
+ await fs.ensureDir(resolvePath(baseDir, '.ai/strikethroo/plans'));
140
+ await fs.ensureDir(resolvePath(baseDir, '.ai/strikethroo/archive'));
141
+ await fs.ensureDir(resolvePath(baseDir, '.ai/strikethroo/config/hooks'));
142
+ // Copy common templates to .ai/strikethroo with conflict detection
143
+ console.log(` ${chalk_1.default.green('✓')} Copying common template files`);
144
+ await copyCommonTemplates(baseDir, options.force || false);
145
+ // Create harness-specific directories and copy templates
146
+ const allCreatedAgentFiles = new Map();
147
+ for (const harness of harnesses) {
148
+ console.log(` ${chalk_1.default.green('✓')} Setting up ${harness} harness configuration`);
149
+ const created = await createHarnessStructure(harness, baseDir);
150
+ if (created.length > 0) {
151
+ allCreatedAgentFiles.set(harness, created);
152
+ }
153
+ }
154
+ // ========== CREATED FILES SECTION ==========
155
+ console.log(formatSectionHeader('Created Files'));
156
+ // Common configuration files (dynamically listed)
157
+ console.log(chalk_1.default.cyan(' Common Configuration:'));
158
+ const commonFiles = await collectFiles(resolvePath(baseDir, '.ai/strikethroo'));
159
+ for (const file of commonFiles) {
160
+ console.log(` ${chalk_1.default.blue('●')} ${file}`);
161
+ }
162
+ for (const [harness, files] of allCreatedAgentFiles) {
163
+ console.log(chalk_1.default.cyan(` ${harness} Agents:`));
164
+ for (const file of files) {
165
+ console.log(` ${chalk_1.default.blue('●')} ${file}`);
166
+ }
167
+ }
168
+ // ========== FOOTER SECTION ==========
169
+ console.log(`\n${chalk_1.default.green('✓')} Strikethroo initialized successfully!`);
170
+ console.log(chalk_1.default.gray(DIVIDER));
171
+ // Post-init nudge directing users to install the task skills
172
+ console.log('\nNext: run `npx skills add e0ipso/strikethroo` to install the task skills for your harness(es).');
173
+ // Add documentation link
174
+ console.log(`\n 📚 Documentation: ${chalk_1.default.cyan('https://mateuaguilo.com/strikethroo')}\n`);
175
+ // Show suggested workflow help text
176
+ await displayWorkflowHelp();
177
+ return {
178
+ success: true,
179
+ message: 'Strikethroo initialized successfully!',
180
+ data: { harnesses },
181
+ };
182
+ }
183
+ catch (error) {
184
+ const errorMessage = error instanceof Error ? error.message : 'Initialization failed with unknown error';
185
+ console.error(chalk_1.default.red(`\n✗ Initialization failed: ${errorMessage}\n`));
186
+ return {
187
+ success: false,
188
+ message: errorMessage,
189
+ error: error instanceof Error ? error : new Error(String(error)),
190
+ };
191
+ }
192
+ }
193
+ /**
194
+ * Copy common template files to .ai/strikethroo directory with conflict detection
195
+ */
196
+ async function copyCommonTemplates(baseDir, force) {
197
+ const sourceDir = getTemplatePath('strikethroo');
198
+ const destDir = resolvePath(baseDir, '.ai/strikethroo');
199
+ const metadataPath = resolvePath(destDir, '.init-metadata.json');
200
+ // Check if source template directory exists
201
+ if (!(await exists(sourceDir))) {
202
+ throw new Error(`Template directory not found: ${sourceDir}`);
203
+ }
204
+ // Load existing metadata if present
205
+ const existingMetadata = await (0, metadata_1.loadMetadata)(metadataPath);
206
+ // Scenario 1: First-time init (no metadata) - copy all files
207
+ if (!existingMetadata) {
208
+ await fs.copy(sourceDir, destDir);
209
+ // Create initial metadata
210
+ await createMetadata(sourceDir, destDir, metadataPath);
211
+ return;
212
+ }
213
+ // Scenario 2: Force flag - overwrite all files
214
+ if (force) {
215
+ await fs.copy(sourceDir, destDir, { overwrite: true });
216
+ // Update metadata
217
+ await createMetadata(sourceDir, destDir, metadataPath);
218
+ return;
219
+ }
220
+ // Scenario 3: Conflict detection - check for user modifications
221
+ const conflicts = await (0, conflict_detector_1.detectConflicts)(destDir, sourceDir, existingMetadata);
222
+ if (conflicts.length === 0) {
223
+ await fs.copy(sourceDir, destDir, { overwrite: true });
224
+ // Update metadata
225
+ await createMetadata(sourceDir, destDir, metadataPath);
226
+ return;
227
+ }
228
+ // Conflicts detected - prompt user for resolution
229
+ console.log(chalk_1.default.yellow(`\n⚠ Detected ${conflicts.length} modified file(s). Prompting for resolution...\n`));
230
+ const resolutions = await (0, prompts_1.promptForConflicts)(conflicts);
231
+ // Apply resolutions
232
+ await applyResolutions(sourceDir, destDir, resolutions);
233
+ // Update metadata for all files (including resolved conflicts)
234
+ await createMetadata(sourceDir, destDir, metadataPath);
235
+ }
236
+ /**
237
+ * Create or update metadata file with current file hashes
238
+ */
239
+ async function createMetadata(sourceDir, destDir, metadataPath) {
240
+ const files = {};
241
+ async function walkDir(dir, relativeTo) {
242
+ const entries = await fs.readdir(dir, { withFileTypes: true });
243
+ for (const entry of entries) {
244
+ const fullPath = path.join(dir, entry.name);
245
+ const relativePath = path.relative(relativeTo, fullPath);
246
+ // Skip README.md (always overwrite on init/re-init)
247
+ if (relativePath === 'README.md') {
248
+ continue;
249
+ }
250
+ // Skip metadata file itself
251
+ if (relativePath === '.init-metadata.json') {
252
+ continue;
253
+ }
254
+ if (entry.isDirectory()) {
255
+ await walkDir(fullPath, relativeTo);
256
+ }
257
+ else if (entry.isFile()) {
258
+ // Calculate hash of the destination file (what we just copied)
259
+ const destFilePath = path.join(destDir, relativePath);
260
+ if (await exists(destFilePath)) {
261
+ const hash = await (0, metadata_1.calculateFileHash)(destFilePath);
262
+ files[relativePath] = hash;
263
+ }
264
+ }
265
+ }
266
+ }
267
+ const configDir = path.join(destDir, 'config');
268
+ if (await exists(configDir)) {
269
+ await walkDir(configDir, destDir);
270
+ }
271
+ // Create metadata object
272
+ const metadata = {
273
+ version: (0, metadata_1.getPackageVersion)(),
274
+ workspaceSchemaVersion: metadata_1.CURRENT_WORKSPACE_SCHEMA_VERSION,
275
+ timestamp: new Date().toISOString(),
276
+ files,
277
+ };
278
+ // Save metadata
279
+ await (0, metadata_1.saveMetadata)(metadataPath, metadata);
280
+ }
281
+ /**
282
+ * Apply user resolutions to file conflicts
283
+ */
284
+ async function applyResolutions(sourceDir, destDir, resolutions) {
285
+ for (const [relativePath, resolution] of resolutions) {
286
+ const sourcePath = path.join(sourceDir, relativePath);
287
+ const destPath = path.join(destDir, relativePath);
288
+ if (resolution === 'overwrite') {
289
+ await fs.copy(sourcePath, destPath, { overwrite: true });
290
+ }
291
+ // If 'keep', do nothing - keep user's file
292
+ }
293
+ }
294
+ async function createHarnessStructure(harness, baseDir) {
295
+ const sourceAgentsDir = getTemplatePath(path.join('harness', 'agents'));
296
+ const createdFiles = [];
297
+ if (!(await exists(sourceAgentsDir))) {
298
+ return createdFiles;
299
+ }
300
+ const agentFiles = (await fs.readdir(sourceAgentsDir)).filter(f => f.endsWith('.md'));
301
+ const formatInfo = (0, utils_1.getAgentFormat)(harness);
302
+ const targetDir = resolvePath(baseDir, formatInfo.directory);
303
+ await fs.ensureDir(targetDir);
304
+ for (const agentFile of agentFiles) {
305
+ const sourcePath = path.join(sourceAgentsDir, agentFile);
306
+ const content = await fs.readFile(sourcePath, 'utf-8');
307
+ const baseName = path.basename(agentFile, '.md');
308
+ const targetName = baseName + formatInfo.extension;
309
+ const targetPath = path.join(targetDir, targetName);
310
+ if (formatInfo.format === 'toml') {
311
+ await fs.writeFile(targetPath, (0, utils_1.convertAgentMdToToml)(content), 'utf-8');
312
+ }
313
+ else {
314
+ await fs.writeFile(targetPath, content, 'utf-8');
315
+ }
316
+ createdFiles.push(targetPath);
317
+ }
318
+ return createdFiles;
319
+ }
320
+ /**
321
+ * Check if a directory already has Strikethroo initialized
322
+ */
323
+ async function isInitialized(baseDir) {
324
+ const targetDir = baseDir || '.';
325
+ return await exists(resolvePath(targetDir, '.ai/strikethroo'));
326
+ }
327
+ /**
328
+ * Display formatted workflow help text to guide users after successful installation
329
+ */
330
+ async function displayWorkflowHelp() {
331
+ console.log(formatSectionHeader('Suggested Workflow'));
332
+ console.log(` ${chalk_1.default.cyan('●')} Install the task skills:`);
333
+ console.log(` ${chalk_1.default.gray('npx skills add e0ipso/strikethroo')}`);
334
+ console.log('');
335
+ console.log(` ${chalk_1.default.cyan('●')} Ask your AI to plan, decompose, then execute.`);
336
+ console.log(` The skills cover plan creation, refinement, task generation, and blueprint execution.`);
337
+ console.log('');
338
+ console.log(` ${chalk_1.default.cyan('●')} Review intermediate artifacts between steps:`);
339
+ console.log(` ${chalk_1.default.gray('.ai/strikethroo/plans/')}`);
340
+ console.log('');
341
+ console.log(chalk_1.default.yellow(`💡 Reviewing the plan and the task list before execution is recommended.`));
342
+ console.log('');
343
+ }
344
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Metadata Management for Init Command
3
+ *
4
+ * This file handles hash calculation, metadata file operations,
5
+ * and package version tracking for conflict detection
6
+ */
7
+ import { InitMetadata } from './types';
8
+ /**
9
+ * Current workspace schema version baked into this CLI build.
10
+ *
11
+ * Bumped only when the `.ai/strikethroo/` workspace shape changes
12
+ * incompatibly (renamed hook, new required template, restructured directory).
13
+ * Skill bundles read this constant at build time to enforce a runtime
14
+ * schema-mismatch check against the workspace they're invoked against.
15
+ */
16
+ export declare const CURRENT_WORKSPACE_SCHEMA_VERSION = 1;
17
+ /**
18
+ * Calculate SHA-256 hash of a file
19
+ * @param filePath - Absolute path to the file
20
+ * @returns SHA-256 hash as hex string
21
+ */
22
+ export declare function calculateFileHash(filePath: string): Promise<string>;
23
+ /**
24
+ * Load metadata from .init-metadata.json file
25
+ * @param metadataPath - Absolute path to metadata file
26
+ * @returns InitMetadata object or null if file doesn't exist or is invalid
27
+ */
28
+ export declare function loadMetadata(metadataPath: string): Promise<InitMetadata | null>;
29
+ /**
30
+ * Save metadata to .init-metadata.json file
31
+ * @param metadataPath - Absolute path to metadata file
32
+ * @param metadata - InitMetadata object to save
33
+ */
34
+ export declare function saveMetadata(metadataPath: string, metadata: InitMetadata): Promise<void>;
35
+ /**
36
+ * Get the current package version from package.json
37
+ * @returns Version string (e.g., "1.12.0")
38
+ */
39
+ export declare function getPackageVersion(): string;
40
+ //# sourceMappingURL=metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC;;;;;;;GAOG;AACH,eAAO,MAAM,gCAAgC,IAAI,CAAC;AAElD;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CASzE;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CA0BrF;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAG9F;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAK1C"}
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ /**
3
+ * Metadata Management for Init Command
4
+ *
5
+ * This file handles hash calculation, metadata file operations,
6
+ * and package version tracking for conflict detection
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.CURRENT_WORKSPACE_SCHEMA_VERSION = void 0;
43
+ exports.calculateFileHash = calculateFileHash;
44
+ exports.loadMetadata = loadMetadata;
45
+ exports.saveMetadata = saveMetadata;
46
+ exports.getPackageVersion = getPackageVersion;
47
+ const crypto = __importStar(require("crypto"));
48
+ const fs = __importStar(require("fs-extra"));
49
+ const path = __importStar(require("path"));
50
+ /**
51
+ * Current workspace schema version baked into this CLI build.
52
+ *
53
+ * Bumped only when the `.ai/strikethroo/` workspace shape changes
54
+ * incompatibly (renamed hook, new required template, restructured directory).
55
+ * Skill bundles read this constant at build time to enforce a runtime
56
+ * schema-mismatch check against the workspace they're invoked against.
57
+ */
58
+ exports.CURRENT_WORKSPACE_SCHEMA_VERSION = 1;
59
+ /**
60
+ * Calculate SHA-256 hash of a file
61
+ * @param filePath - Absolute path to the file
62
+ * @returns SHA-256 hash as hex string
63
+ */
64
+ async function calculateFileHash(filePath) {
65
+ const hash = crypto.createHash('sha256');
66
+ const stream = fs.createReadStream(filePath);
67
+ return new Promise((resolve, reject) => {
68
+ stream.on('data', data => hash.update(data));
69
+ stream.on('end', () => resolve(hash.digest('hex')));
70
+ stream.on('error', err => reject(err));
71
+ });
72
+ }
73
+ /**
74
+ * Load metadata from .init-metadata.json file
75
+ * @param metadataPath - Absolute path to metadata file
76
+ * @returns InitMetadata object or null if file doesn't exist or is invalid
77
+ */
78
+ async function loadMetadata(metadataPath) {
79
+ try {
80
+ const exists = await fs.pathExists(metadataPath);
81
+ if (!exists) {
82
+ return null;
83
+ }
84
+ const content = await fs.readFile(metadataPath, 'utf-8');
85
+ const metadata = JSON.parse(content);
86
+ // Validate metadata structure
87
+ if (!metadata.version || !metadata.timestamp || !metadata.files) {
88
+ return null;
89
+ }
90
+ // Backfill workspaceSchemaVersion for older workspaces missing the field
91
+ if (typeof metadata.workspaceSchemaVersion !== 'number') {
92
+ metadata.workspaceSchemaVersion = 1;
93
+ }
94
+ return metadata;
95
+ }
96
+ catch {
97
+ // If metadata is corrupted or invalid, return null
98
+ // This treats the situation as first-time init
99
+ return null;
100
+ }
101
+ }
102
+ /**
103
+ * Save metadata to .init-metadata.json file
104
+ * @param metadataPath - Absolute path to metadata file
105
+ * @param metadata - InitMetadata object to save
106
+ */
107
+ async function saveMetadata(metadataPath, metadata) {
108
+ await fs.ensureDir(path.dirname(metadataPath));
109
+ await fs.writeFile(metadataPath, JSON.stringify(metadata, null, 2), 'utf-8');
110
+ }
111
+ /**
112
+ * Get the current package version from package.json
113
+ * @returns Version string (e.g., "1.12.0")
114
+ */
115
+ function getPackageVersion() {
116
+ // Read package.json from the package root (one level up from dist/)
117
+ const packageJsonPath = path.join(__dirname, '..', 'package.json');
118
+ const packageJson = require(packageJsonPath);
119
+ return packageJson.version;
120
+ }
121
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBH,8CASC;AAOD,oCA0BC;AAOD,oCAGC;AAMD,8CAKC;AAnFD,+CAAiC;AACjC,6CAA+B;AAC/B,2CAA6B;AAG7B;;;;;;;GAOG;AACU,QAAA,gCAAgC,GAAG,CAAC,CAAC;AAElD;;;;GAIG;AACI,KAAK,UAAU,iBAAiB,CAAC,QAAgB;IACtD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAE7C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,YAAY,CAAC,YAAoB;IACrD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAiB,CAAC;QAErD,8BAA8B;QAC9B,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YAChE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,yEAAyE;QACzE,IAAI,OAAO,QAAQ,CAAC,sBAAsB,KAAK,QAAQ,EAAE,CAAC;YACxD,QAAQ,CAAC,sBAAsB,GAAG,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,mDAAmD;QACnD,+CAA+C;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,YAAY,CAAC,YAAoB,EAAE,QAAsB;IAC7E,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IAC/C,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC/E,CAAC;AAED;;;GAGG;AACH,SAAgB,iBAAiB;IAC/B,oEAAoE;IACpE,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IACnE,MAAM,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC7C,OAAO,WAAW,CAAC,OAAO,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Plan Utilities Module
3
+ *
4
+ * Provides functions for locating plans, loading plan data, and extracting content
5
+ */
6
+ import { PlanMetadata } from './status';
7
+ /**
8
+ * Location information for a plan
9
+ */
10
+ export interface PlanLocation {
11
+ planId: number;
12
+ directoryPath: string;
13
+ filePath: string;
14
+ isArchived: boolean;
15
+ }
16
+ /**
17
+ * Extended plan data including body content
18
+ */
19
+ export interface PlanData extends PlanMetadata {
20
+ bodyContent: string;
21
+ executiveSummary: string;
22
+ }
23
+ /**
24
+ * Find a plan by ID in either plans/ or archive/ directories
25
+ */
26
+ export declare function findPlanById(planId: number): Promise<PlanLocation | null>;
27
+ /**
28
+ * Extract Executive Summary section from markdown content
29
+ */
30
+ export declare function extractExecutiveSummary(markdown: string): string;
31
+ /**
32
+ * Load complete plan data including metadata, tasks, and content
33
+ */
34
+ export declare function loadPlanData(planId: number): Promise<PlanData | null>;
35
+ //# sourceMappingURL=plan-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-utils.d.ts","sourceRoot":"","sources":["../src/plan-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,YAAY,EAAkB,MAAM,UAAU,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,QAAS,SAAQ,YAAY;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAqC/E;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAWhE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAqB3E"}