@girardmedia/bootspring 2.0.12 → 2.0.14

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/cli/build.js CHANGED
@@ -249,87 +249,26 @@ async function buildNextTask(projectRoot, _args = {}) {
249
249
 
250
250
  if (!nextTask) {
251
251
  console.log(`${c.green}All tasks complete!${c.reset}`);
252
- clearCurrentTask(projectRoot);
253
252
  return;
254
253
  }
255
254
 
256
255
  // Mark task as in progress
257
256
  buildState.updateProgress(projectRoot, nextTask.id, 'in_progress');
258
257
 
259
- // Generate the task prompt
260
- const prompt = generateTaskPrompt(nextTask, projectRoot);
261
-
262
- // Write to CURRENT_TASK.md for Claude Code to read
263
- const taskFile = writeCurrentTask(projectRoot, nextTask, prompt);
264
-
265
258
  console.log(`
266
- ${c.green}${c.bold}✓ Task ready for Claude Code${c.reset}
259
+ ${c.green}${c.bold}✓ Task ${nextTask.id} now in progress${c.reset}
267
260
 
268
261
  ${c.bold}Task:${c.reset} ${nextTask.title}
269
- ${c.bold}File:${c.reset} ${path.relative(projectRoot, taskFile)}
262
+ ${c.bold}Phase:${c.reset} ${nextTask.phase || 'MVP'}
263
+ ${c.bold}Source:${c.reset} ${nextTask.source || 'PRD.md'}
270
264
 
271
265
  ${c.cyan}${c.bold}Tell Claude Code:${c.reset}
272
- "Read planning/CURRENT_TASK.md and implement it"
266
+ "Read planning/TASK_QUEUE.md, find ${nextTask.id}, and implement it"
273
267
 
274
- ${c.dim}Or for the loop, select option 2 to run autonomously.${c.reset}
268
+ ${c.dim}When done, run: bootspring build done${c.reset}
275
269
  `);
276
270
  }
277
271
 
278
- /**
279
- * Write current task to planning/CURRENT_TASK.md
280
- */
281
- function writeCurrentTask(projectRoot, task, prompt) {
282
- const planningDir = path.join(projectRoot, 'planning');
283
- if (!fs.existsSync(planningDir)) {
284
- fs.mkdirSync(planningDir, { recursive: true });
285
- }
286
-
287
- const taskFile = path.join(planningDir, 'CURRENT_TASK.md');
288
- const content = `# Current Task
289
-
290
- > This file is auto-generated by bootspring. Claude Code should read this and implement the task.
291
-
292
- ---
293
-
294
- ## ${task.title}
295
-
296
- ${prompt}
297
-
298
- ---
299
-
300
- ## When Complete
301
-
302
- Run this command to mark the task done and get the next task:
303
-
304
- \`\`\`bash
305
- bootspring build done
306
- \`\`\`
307
-
308
- Or to skip this task:
309
-
310
- \`\`\`bash
311
- bootspring build skip
312
- \`\`\`
313
-
314
- ---
315
-
316
- *Task ID: ${task.id}*
317
- *Generated: ${new Date().toISOString()}*
318
- `;
319
-
320
- fs.writeFileSync(taskFile, content);
321
- return taskFile;
322
- }
323
-
324
- /**
325
- * Clear the current task file
326
- */
327
- function clearCurrentTask(projectRoot) {
328
- const taskFile = path.join(projectRoot, 'planning', 'CURRENT_TASK.md');
329
- if (fs.existsSync(taskFile)) {
330
- fs.unlinkSync(taskFile);
331
- }
332
- }
333
272
 
334
273
  /**
335
274
  * Generate a prompt for Claude Code to execute
@@ -400,19 +339,16 @@ async function markTaskDone(projectRoot, _args = {}) {
400
339
  const nextTask = buildState.getNextTask(projectRoot);
401
340
 
402
341
  if (nextTask) {
403
- // Mark as in progress and write to CURRENT_TASK.md
342
+ // Mark as in progress
404
343
  buildState.updateProgress(projectRoot, nextTask.id, 'in_progress');
405
- const prompt = generateTaskPrompt(nextTask, projectRoot);
406
- const taskFile = writeCurrentTask(projectRoot, nextTask, prompt);
407
344
 
408
345
  console.log(`
409
- ${c.cyan}${c.bold}Next task ready:${c.reset} ${nextTask.title}
410
- ${c.dim}File: ${path.relative(projectRoot, taskFile)}${c.reset}
346
+ ${c.cyan}${c.bold}Next task:${c.reset} ${nextTask.title} (${nextTask.id})
411
347
 
412
- ${c.bold}Continue working on planning/CURRENT_TASK.md${c.reset}
348
+ ${c.bold}Find task in:${c.reset} planning/TASK_QUEUE.md
349
+ ${c.dim}When done, run: bootspring build done${c.reset}
413
350
  `);
414
351
  } else {
415
- clearCurrentTask(projectRoot);
416
352
  console.log(`
417
353
  ${c.green}${c.bold}🎉 All tasks complete!${c.reset}
418
354
 
@@ -46,7 +46,7 @@ function generate(config) {
46
46
  sections.push('');
47
47
  sections.push('This project uses Bootspring for autonomous task management.');
48
48
  sections.push('');
49
- sections.push('1. Check `planning/CURRENT_TASK.md` for the current task');
49
+ sections.push('1. Check `planning/TASK_QUEUE.md` for the current task (status: in_progress)');
50
50
  sections.push('2. Implement the task following acceptance criteria');
51
51
  sections.push('3. Run quality checks');
52
52
  sections.push('4. Commit changes');
@@ -129,7 +129,7 @@ function generatePlanningAgents(_config) {
129
129
 
130
130
  sections.push('## Current Task');
131
131
  sections.push('');
132
- sections.push('Read `CURRENT_TASK.md` for the task you should implement now.');
132
+ sections.push('Find the task with `status: in_progress` in `TASK_QUEUE.md`.');
133
133
  sections.push('');
134
134
 
135
135
  sections.push('## Commands');
@@ -145,16 +145,16 @@ function generatePlanningAgents(_config) {
145
145
  sections.push('');
146
146
  sections.push('| File | Purpose |');
147
147
  sections.push('|------|---------|');
148
- sections.push('| `CURRENT_TASK.md` | Task to implement now |');
148
+ sections.push('| `TASK_QUEUE.md` | All tasks - find in_progress task |');
149
149
  sections.push('| `TODO.md` | Full task checklist |');
150
150
  sections.push('| `BUILD_STATE.json` | Build state (do not edit) |');
151
- sections.push('| `IMPLEMENTATION_QUEUE.md` | Ordered task queue |');
151
+ sections.push('| `TASK_QUEUE.md` | Ordered task queue |');
152
152
  sections.push('| `CONTEXT.md` | Build context summary |');
153
153
  sections.push('');
154
154
 
155
155
  sections.push('## Workflow');
156
156
  sections.push('');
157
- sections.push('1. Read `CURRENT_TASK.md`');
157
+ sections.push('1. Find in_progress task in `TASK_QUEUE.md`');
158
158
  sections.push('2. Implement in the main codebase (not here)');
159
159
  sections.push('3. Ensure acceptance criteria met');
160
160
  sections.push('4. Run `npm run lint && npm run test`');
@@ -4,7 +4,7 @@
4
4
  * Generates planning artifacts for the autonomous build loop:
5
5
  * - MASTER_PLAN.md - Vision + phases + progress tracker
6
6
  * - TODO.md - Checkbox list by phase
7
- * - IMPLEMENTATION_QUEUE.md - Ordered tasks with acceptance criteria
7
+ * - TASK_QUEUE.md - Ordered tasks with acceptance criteria
8
8
  * - CONTEXT.md - Condensed context for AI iterations
9
9
  *
10
10
  * @package bootspring
@@ -44,9 +44,9 @@ function generateAll(projectRoot, docs, tasks, options = {}) {
44
44
  fs.writeFileSync(todoPath, todo);
45
45
  files.todo = todoPath;
46
46
 
47
- // Generate IMPLEMENTATION_QUEUE.md
47
+ // Generate TASK_QUEUE.md
48
48
  const queue = generateImplementationQueue(tasks, options);
49
- const queuePath = path.join(planningDir, 'IMPLEMENTATION_QUEUE.md');
49
+ const queuePath = path.join(planningDir, 'TASK_QUEUE.md');
50
50
  fs.writeFileSync(queuePath, queue);
51
51
  files.implementationQueue = queuePath;
52
52
 
@@ -86,11 +86,11 @@ bootspring build status # View progress
86
86
 
87
87
  ## Current Task
88
88
 
89
- Read \`CURRENT_TASK.md\` for the task you should implement now.
89
+ Find the task with \`status: in_progress\` in \`TASK_QUEUE.md\`.
90
90
 
91
91
  ## Workflow
92
92
 
93
- 1. Read \`CURRENT_TASK.md\`
93
+ 1. Find in_progress task in \`TASK_QUEUE.md\`
94
94
  2. Implement in the main codebase (not in this folder)
95
95
  3. Ensure acceptance criteria are met
96
96
  4. Run quality checks: \`npm run lint && npm run test\`
@@ -101,10 +101,10 @@ Read \`CURRENT_TASK.md\` for the task you should implement now.
101
101
 
102
102
  | File | Purpose |
103
103
  |------|---------|
104
- | \`CURRENT_TASK.md\` | Task to implement now |
104
+ | \`TASK_QUEUE.md\` | All tasks - find in_progress task |
105
105
  | \`TODO.md\` | Full task checklist |
106
106
  | \`BUILD_STATE.json\` | Build state (do not edit directly) |
107
- | \`IMPLEMENTATION_QUEUE.md\` | Ordered task queue |
107
+ | \`TASK_QUEUE.md\` | Ordered task queue |
108
108
  | \`CONTEXT.md\` | Build context summary |
109
109
 
110
110
  ## Boundaries
@@ -301,10 +301,10 @@ function generateTodo(tasks, options = {}) {
301
301
  }
302
302
 
303
303
  /**
304
- * Generate IMPLEMENTATION_QUEUE.md
304
+ * Generate TASK_QUEUE.md
305
305
  * @param {array} tasks - Extracted tasks
306
306
  * @param {object} options - Options
307
- * @returns {string} IMPLEMENTATION_QUEUE.md content
307
+ * @returns {string} TASK_QUEUE.md content
308
308
  */
309
309
  function generateImplementationQueue(tasks, options = {}) {
310
310
  const projectName = options.projectName || 'Project';
@@ -642,9 +642,9 @@ function updateFromState(projectRoot, state) {
642
642
  const todo = generateTodo(tasks, { projectName: state.projectName });
643
643
  fs.writeFileSync(path.join(planningDir, 'TODO.md'), todo);
644
644
 
645
- // Regenerate IMPLEMENTATION_QUEUE.md
645
+ // Regenerate TASK_QUEUE.md
646
646
  const queue = generateImplementationQueue(tasks, { projectName: state.projectName });
647
- fs.writeFileSync(path.join(planningDir, 'IMPLEMENTATION_QUEUE.md'), queue);
647
+ fs.writeFileSync(path.join(planningDir, 'TASK_QUEUE.md'), queue);
648
648
  }
649
649
 
650
650
  module.exports = {
@@ -25,38 +25,56 @@ function generate(config) {
25
25
  sections.push('---');
26
26
  sections.push('');
27
27
 
28
- // CRITICAL: Start Here - Put this first so Claude sees it immediately
29
- sections.push('## Start Here');
28
+ // CRITICAL: Planning is the single source of truth
29
+ sections.push('## IMPORTANT: Planning First');
30
30
  sections.push('');
31
- sections.push('**Read these files to understand the project:**');
31
+ sections.push('**The `/planning` folder is the SINGLE SOURCE OF TRUTH for all implementation.**');
32
32
  sections.push('');
33
- sections.push('### Current Task');
34
- sections.push('```');
35
- sections.push('planning/CURRENT_TASK.md # Implement this task now');
36
- sections.push('```');
33
+ sections.push('### Before Writing ANY Code');
34
+ sections.push('1. Read `planning/MASTER_PLAN.md` - Overall vision and phases');
35
+ sections.push('2. Read `planning/TASK_QUEUE.md` - Your specific task');
36
+ sections.push('3. Read `planning/CONTEXT.md` - Current build context');
37
+ sections.push('4. Understand the acceptance criteria before implementing');
37
38
  sections.push('');
38
- sections.push('### Project Vision & Strategy');
39
- sections.push('```');
40
- sections.push('.bootspring/preseed/VISION.md # Product vision, goals, problem/solution');
41
- sections.push('.bootspring/preseed/AUDIENCE.md # Target users, personas, ICP');
42
- sections.push('.bootspring/preseed/MARKET.md # Market analysis, TAM/SAM/SOM');
43
- sections.push('.bootspring/preseed/COMPETITORS.md # Competitive landscape, differentiation');
44
- sections.push('.bootspring/preseed/BUSINESS_MODEL.md # Revenue model, pricing, unit economics');
45
- sections.push('```');
39
+ sections.push('### After Completing ANY Task');
40
+ sections.push('1. Update `planning/TODO.md` - Check off completed items');
41
+ sections.push('2. Run `bootspring build done` - Updates BUILD_STATE.json automatically');
42
+ sections.push('3. Document any architectural decisions or deviations');
46
43
  sections.push('');
47
- sections.push('### Technical Specifications');
48
- sections.push('```');
49
- sections.push('.bootspring/preseed/PRD.md # Product requirements, features, user stories');
50
- sections.push('.bootspring/preseed/TECHNICAL_SPEC.md # Architecture, stack, data model, APIs');
51
- sections.push('.bootspring/preseed/ROADMAP.md # Implementation phases, milestones');
52
- sections.push('```');
44
+ sections.push('**DO NOT skip reading planning docs. DO NOT skip updating them.**');
53
45
  sections.push('');
54
- sections.push('### Build Progress');
55
- sections.push('```');
56
- sections.push('planning/BUILD_STATE.json # Task queue and progress (do not edit)');
57
- sections.push('planning/TODO.md # Checkbox task list');
58
- sections.push('SEED.md # Project configuration summary');
59
- sections.push('```');
46
+ sections.push('---');
47
+ sections.push('');
48
+
49
+ // Planning folder contents
50
+ sections.push('## Planning Folder (`/planning`)');
51
+ sections.push('');
52
+ sections.push('| File | Purpose | When to Read |');
53
+ sections.push('|------|---------|--------------|');
54
+ sections.push('| `MASTER_PLAN.md` | Overall vision, phases, success criteria | **Always read first** |');
55
+ sections.push('| `TASK_QUEUE.md` | All tasks with acceptance criteria, find current task by status | **Before each task** |');
56
+ sections.push('| `CONTEXT.md` | Current build context and decisions | Before each task |');
57
+ sections.push('| `TODO.md` | Checkbox task list | Update after completing |');
58
+ sections.push('| `BUILD_STATE.json` | Machine state - shows current task ID | Reference only |');
59
+ sections.push('');
60
+ sections.push('---');
61
+ sections.push('');
62
+
63
+ // Preseed docs - the source material
64
+ sections.push('## Source Documents (`.bootspring/preseed/`)');
65
+ sections.push('');
66
+ sections.push('These are the original specifications the planning was derived from:');
67
+ sections.push('');
68
+ sections.push('| File | Contains |');
69
+ sections.push('|------|----------|');
70
+ sections.push('| `VISION.md` | Product vision, problem/solution, goals |');
71
+ sections.push('| `AUDIENCE.md` | Target users, personas, ICP |');
72
+ sections.push('| `MARKET.md` | Market analysis, TAM/SAM/SOM |');
73
+ sections.push('| `COMPETITORS.md` | Competitive landscape, differentiation |');
74
+ sections.push('| `BUSINESS_MODEL.md` | Revenue model, pricing, unit economics |');
75
+ sections.push('| `PRD.md` | Product requirements, features, user stories |');
76
+ sections.push('| `TECHNICAL_SPEC.md` | Architecture, stack, data model, APIs |');
77
+ sections.push('| `ROADMAP.md` | Implementation phases, milestones |');
60
78
  sections.push('');
61
79
  sections.push('---');
62
80
  sections.push('');
@@ -196,46 +214,43 @@ function generate(config) {
196
214
  }
197
215
 
198
216
  // Autonomous Build System
199
- sections.push('## Build Workflow');
200
- sections.push('');
201
- sections.push('### When You Start');
202
- sections.push('1. Check if `planning/CURRENT_TASK.md` exists');
203
- sections.push('2. If yes → Read it and implement the task');
204
- sections.push('3. If no → Run `bootspring build next` to get the next task');
217
+ sections.push('## Task Workflow');
205
218
  sections.push('');
206
- sections.push('### When You Finish a Task');
207
- sections.push('1. Ensure acceptance criteria are met');
208
- sections.push('2. Run `bootspring build done` to mark complete and get next task');
219
+ sections.push('```');
220
+ sections.push('┌─────────────────────────────────────────────────────────────┐');
221
+ sections.push('│ 1. READ planning/MASTER_PLAN.md │');
222
+ sections.push('│ planning/TASK_QUEUE.md (find in_progress task) │');
223
+ sections.push('│ ↓ │');
224
+ sections.push('│ 2. IMPLEMENT Write code to meet acceptance criteria │');
225
+ sections.push('│ ↓ │');
226
+ sections.push('│ 3. COMPLETE Run: bootspring build done │');
227
+ sections.push('│ (marks done, queues next task) │');
228
+ sections.push('│ ↓ │');
229
+ sections.push('│ 4. REPEAT Check TASK_QUEUE.md for next in_progress task │');
230
+ sections.push('└─────────────────────────────────────────────────────────────┘');
231
+ sections.push('```');
209
232
  sections.push('');
210
233
  sections.push('### Commands');
211
234
  sections.push('');
212
235
  sections.push('| Command | What it does |');
213
236
  sections.push('|---------|--------------|');
214
237
  sections.push('| `bootspring build` | Interactive menu |');
215
- sections.push('| `bootspring build next` | Get next task `planning/CURRENT_TASK.md` |');
216
- sections.push('| `bootspring build done` | Mark complete, auto-queue next |');
238
+ sections.push('| `bootspring build next` | Mark next task as in_progress |');
239
+ sections.push('| `bootspring build done` | Mark current complete, queue next |');
217
240
  sections.push('| `bootspring build status` | View progress |');
218
241
  sections.push('| `bootspring build skip` | Skip current task |');
219
242
  sections.push('');
220
243
  sections.push('---');
221
244
  sections.push('');
222
245
 
223
- // Key Files Reference
224
- sections.push('## Quick Reference');
246
+ // Rules
247
+ sections.push('## Rules');
225
248
  sections.push('');
226
- sections.push('| File | What it contains |');
227
- sections.push('|------|------------------|');
228
- sections.push('| `planning/CURRENT_TASK.md` | **Your current task** - implement this |');
229
- sections.push('| `.bootspring/preseed/VISION.md` | Product vision, problem, solution |');
230
- sections.push('| `.bootspring/preseed/AUDIENCE.md` | Target users, personas |');
231
- sections.push('| `.bootspring/preseed/MARKET.md` | Market size, trends |');
232
- sections.push('| `.bootspring/preseed/COMPETITORS.md` | Competition, differentiation |');
233
- sections.push('| `.bootspring/preseed/BUSINESS_MODEL.md` | Revenue, pricing |');
234
- sections.push('| `.bootspring/preseed/PRD.md` | Features, requirements |');
235
- sections.push('| `.bootspring/preseed/TECHNICAL_SPEC.md` | Architecture, data model |');
236
- sections.push('| `.bootspring/preseed/ROADMAP.md` | Phases, milestones |');
237
- sections.push('| `planning/BUILD_STATE.json` | Progress tracking (auto-managed) |');
238
- sections.push('| `SEED.md` | Config summary |');
249
+ sections.push('1. **Always read before coding** - No implementation without reading MASTER_PLAN.md and TASK_QUEUE.md');
250
+ sections.push('2. **Follow acceptance criteria exactly** - The task is not done until all criteria are met');
251
+ sections.push('3. **Update planning docs** - Check off TODO.md items, run `bootspring build done`');
252
+ sections.push('4. **One task at a time** - Complete current task before starting next');
253
+ sections.push('5. **Document decisions** - If you deviate from the plan, document why');
239
254
  sections.push('');
240
255
  sections.push('---');
241
256
  sections.push('');
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "contractVersion": "v1",
3
3
  "packageName": "@girardmedia/bootspring",
4
- "packageVersion": "2.0.12",
4
+ "packageVersion": "2.0.14",
5
5
  "tools": [
6
6
  {
7
7
  "name": "bootspring_assist",
@@ -271,9 +271,6 @@ function createHandler({ configModule }) {
271
271
  // Mark as in progress
272
272
  buildState.updateProgress(projectRoot, nextTask.id, 'in_progress');
273
273
 
274
- // Write to CURRENT_TASK.md
275
- writeCurrentTaskFile(projectRoot, nextTask);
276
-
277
274
  return {
278
275
  content: [{
279
276
  type: 'text',
@@ -287,9 +284,9 @@ function createHandler({ configModule }) {
287
284
  sourceSection: nextTask.sourceSection,
288
285
  acceptanceCriteria: nextTask.acceptanceCriteria || []
289
286
  },
290
- file: 'planning/CURRENT_TASK.md',
287
+ file: 'planning/TASK_QUEUE.md',
291
288
  instructions: [
292
- 'Read the task details above',
289
+ `Find ${nextTask.id} in planning/TASK_QUEUE.md for full details`,
293
290
  'Implement the task in the codebase',
294
291
  'Ensure acceptance criteria are met',
295
292
  'Run quality checks (lint, test)',
@@ -336,9 +333,6 @@ function createHandler({ configModule }) {
336
333
  // Auto-queue next task
337
334
  if (nextTask) {
338
335
  buildState.updateProgress(projectRoot, nextTask.id, 'in_progress');
339
- writeCurrentTaskFile(projectRoot, nextTask);
340
- } else {
341
- clearCurrentTaskFile(projectRoot);
342
336
  }
343
337
 
344
338
  return {
@@ -402,7 +396,6 @@ function createHandler({ configModule }) {
402
396
 
403
397
  if (nextTask) {
404
398
  buildState.updateProgress(projectRoot, nextTask.id, 'in_progress');
405
- writeCurrentTaskFile(projectRoot, nextTask);
406
399
  }
407
400
 
408
401
  return {
@@ -417,7 +410,8 @@ function createHandler({ configModule }) {
417
410
  nextTask: nextTask ? {
418
411
  id: nextTask.id,
419
412
  title: nextTask.title,
420
- description: nextTask.description
413
+ description: nextTask.description,
414
+ file: 'planning/TASK_QUEUE.md'
421
415
  } : null,
422
416
  message: nextTask
423
417
  ? `Skipped. Next: ${nextTask.title}`
@@ -441,63 +435,6 @@ function createHandler({ configModule }) {
441
435
  };
442
436
  }
443
437
 
444
- /**
445
- * Write task to planning/CURRENT_TASK.md
446
- */
447
- function writeCurrentTaskFile(projectRoot, task) {
448
- const planningDir = path.join(projectRoot, 'planning');
449
- if (!fs.existsSync(planningDir)) {
450
- fs.mkdirSync(planningDir, { recursive: true });
451
- }
452
-
453
- const content = `# Current Task
454
-
455
- > Auto-generated by bootspring. Implement this task.
456
-
457
- ---
458
-
459
- ## ${task.title}
460
-
461
- ${task.description || ''}
462
-
463
- ${task.acceptanceCriteria?.length ? `### Acceptance Criteria
464
-
465
- ${task.acceptanceCriteria.map(ac => `- [ ] ${ac}`).join('\n')}
466
- ` : ''}
467
-
468
- ### Source
469
-
470
- ${task.source}${task.sourceSection ? ` - ${task.sourceSection}` : ''}
471
-
472
- ---
473
-
474
- ## Instructions
475
-
476
- 1. Implement the task as described above
477
- 2. Ensure all acceptance criteria are met
478
- 3. Run quality checks (lint, test)
479
- 4. Commit your changes
480
- 5. Mark complete with: \`bootspring build done\` or MCP action=done
481
-
482
- ---
483
-
484
- *Task ID: ${task.id}*
485
- *Generated: ${new Date().toISOString()}*
486
- `;
487
-
488
- fs.writeFileSync(path.join(planningDir, 'CURRENT_TASK.md'), content);
489
- }
490
-
491
- /**
492
- * Clear CURRENT_TASK.md
493
- */
494
- function clearCurrentTaskFile(projectRoot) {
495
- const taskFile = path.join(projectRoot, 'planning', 'CURRENT_TASK.md');
496
- if (fs.existsSync(taskFile)) {
497
- fs.unlinkSync(taskFile);
498
- }
499
- }
500
-
501
438
  module.exports = {
502
439
  getToolDefinition,
503
440
  createHandler
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@girardmedia/bootspring",
3
- "version": "2.0.12",
3
+ "version": "2.0.14",
4
4
  "description": "Development scaffolding with intelligence - AI-powered context, agents, and workflows for any MCP-compatible assistant",
5
5
  "keywords": [
6
6
  "ai",