@specforge/mcp 3.3.4 → 3.3.7

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 (95) hide show
  1. package/dist/autopilot/cli/index.js +1 -1
  2. package/dist/autopilot/cli/index.js.map +1 -1
  3. package/dist/tools/core/epic.d.ts.map +1 -1
  4. package/dist/tools/core/epic.js +1 -0
  5. package/dist/tools/core/epic.js.map +1 -1
  6. package/dist/tools/core/index.d.ts +0 -1
  7. package/dist/tools/core/index.d.ts.map +1 -1
  8. package/dist/tools/core/index.js +0 -1
  9. package/dist/tools/core/index.js.map +1 -1
  10. package/dist/tools/core/specification.d.ts.map +1 -1
  11. package/dist/tools/core/specification.js +1 -0
  12. package/dist/tools/core/specification.js.map +1 -1
  13. package/dist/tools/core/ticket.d.ts.map +1 -1
  14. package/dist/tools/core/ticket.js +1 -0
  15. package/dist/tools/core/ticket.js.map +1 -1
  16. package/dist/tools/index.d.ts.map +1 -1
  17. package/dist/tools/index.js +0 -57
  18. package/dist/tools/index.js.map +1 -1
  19. package/package.json +1 -1
  20. package/dist/cli/templates/agents/content/core/sfag-implementer.d.ts +0 -8
  21. package/dist/cli/templates/agents/content/core/sfag-implementer.d.ts.map +0 -1
  22. package/dist/cli/templates/agents/content/core/sfag-implementer.js +0 -111
  23. package/dist/cli/templates/agents/content/core/sfag-implementer.js.map +0 -1
  24. package/dist/cli/templates/agents/content/task-type/sfag-api-implementer.d.ts +0 -8
  25. package/dist/cli/templates/agents/content/task-type/sfag-api-implementer.d.ts.map +0 -1
  26. package/dist/cli/templates/agents/content/task-type/sfag-api-implementer.js +0 -130
  27. package/dist/cli/templates/agents/content/task-type/sfag-api-implementer.js.map +0 -1
  28. package/dist/cli/templates/agents/content/task-type/sfag-docs-writer.d.ts +0 -8
  29. package/dist/cli/templates/agents/content/task-type/sfag-docs-writer.d.ts.map +0 -1
  30. package/dist/cli/templates/agents/content/task-type/sfag-docs-writer.js +0 -181
  31. package/dist/cli/templates/agents/content/task-type/sfag-docs-writer.js.map +0 -1
  32. package/dist/cli/templates/agents/content/task-type/sfag-frontend-builder.d.ts +0 -8
  33. package/dist/cli/templates/agents/content/task-type/sfag-frontend-builder.d.ts.map +0 -1
  34. package/dist/cli/templates/agents/content/task-type/sfag-frontend-builder.js +0 -139
  35. package/dist/cli/templates/agents/content/task-type/sfag-frontend-builder.js.map +0 -1
  36. package/dist/cli/templates/agents/content/task-type/sfag-infra-architect.d.ts +0 -8
  37. package/dist/cli/templates/agents/content/task-type/sfag-infra-architect.d.ts.map +0 -1
  38. package/dist/cli/templates/agents/content/task-type/sfag-infra-architect.js +0 -147
  39. package/dist/cli/templates/agents/content/task-type/sfag-infra-architect.js.map +0 -1
  40. package/dist/cli/templates/agents/content/task-type/sfag-schema-designer.d.ts +0 -8
  41. package/dist/cli/templates/agents/content/task-type/sfag-schema-designer.d.ts.map +0 -1
  42. package/dist/cli/templates/agents/content/task-type/sfag-schema-designer.js +0 -130
  43. package/dist/cli/templates/agents/content/task-type/sfag-schema-designer.js.map +0 -1
  44. package/dist/cli/templates/agents/content/task-type/sfag-test-writer.d.ts +0 -8
  45. package/dist/cli/templates/agents/content/task-type/sfag-test-writer.d.ts.map +0 -1
  46. package/dist/cli/templates/agents/content/task-type/sfag-test-writer.js +0 -169
  47. package/dist/cli/templates/agents/content/task-type/sfag-test-writer.js.map +0 -1
  48. package/dist/cli/templates/content/sf-autonomous.d.ts +0 -7
  49. package/dist/cli/templates/content/sf-autonomous.d.ts.map +0 -1
  50. package/dist/cli/templates/content/sf-autonomous.js +0 -78
  51. package/dist/cli/templates/content/sf-autonomous.js.map +0 -1
  52. package/dist/cli/templates/content/sf-create-epics.d.ts +0 -7
  53. package/dist/cli/templates/content/sf-create-epics.d.ts.map +0 -1
  54. package/dist/cli/templates/content/sf-create-epics.js +0 -129
  55. package/dist/cli/templates/content/sf-create-epics.js.map +0 -1
  56. package/dist/cli/templates/content/sf-create-spec.d.ts +0 -7
  57. package/dist/cli/templates/content/sf-create-spec.d.ts.map +0 -1
  58. package/dist/cli/templates/content/sf-create-spec.js +0 -136
  59. package/dist/cli/templates/content/sf-create-spec.js.map +0 -1
  60. package/dist/cli/templates/content/sf-create-tickets.d.ts +0 -7
  61. package/dist/cli/templates/content/sf-create-tickets.d.ts.map +0 -1
  62. package/dist/cli/templates/content/sf-create-tickets.js +0 -148
  63. package/dist/cli/templates/content/sf-create-tickets.js.map +0 -1
  64. package/dist/cli/templates/content/sf-epic.d.ts +0 -7
  65. package/dist/cli/templates/content/sf-epic.d.ts.map +0 -1
  66. package/dist/cli/templates/content/sf-epic.js +0 -69
  67. package/dist/cli/templates/content/sf-epic.js.map +0 -1
  68. package/dist/cli/templates/content/sf-import.d.ts +0 -7
  69. package/dist/cli/templates/content/sf-import.d.ts.map +0 -1
  70. package/dist/cli/templates/content/sf-import.js +0 -88
  71. package/dist/cli/templates/content/sf-import.js.map +0 -1
  72. package/dist/cli/templates/content/sf-next.d.ts +0 -7
  73. package/dist/cli/templates/content/sf-next.d.ts.map +0 -1
  74. package/dist/cli/templates/content/sf-next.js +0 -67
  75. package/dist/cli/templates/content/sf-next.js.map +0 -1
  76. package/dist/cli/templates/content/sf-review.d.ts +0 -7
  77. package/dist/cli/templates/content/sf-review.d.ts.map +0 -1
  78. package/dist/cli/templates/content/sf-review.js +0 -67
  79. package/dist/cli/templates/content/sf-review.js.map +0 -1
  80. package/dist/cli/templates/content/sf-ticket.d.ts +0 -7
  81. package/dist/cli/templates/content/sf-ticket.d.ts.map +0 -1
  82. package/dist/cli/templates/content/sf-ticket.js +0 -76
  83. package/dist/cli/templates/content/sf-ticket.js.map +0 -1
  84. package/dist/cli/templates/content/sf-validate.d.ts +0 -7
  85. package/dist/cli/templates/content/sf-validate.d.ts.map +0 -1
  86. package/dist/cli/templates/content/sf-validate.js +0 -78
  87. package/dist/cli/templates/content/sf-validate.js.map +0 -1
  88. package/dist/tools/core/context.d.ts +0 -7
  89. package/dist/tools/core/context.d.ts.map +0 -1
  90. package/dist/tools/core/context.js +0 -75
  91. package/dist/tools/core/context.js.map +0 -1
  92. package/dist/tools/core/job.d.ts +0 -7
  93. package/dist/tools/core/job.d.ts.map +0 -1
  94. package/dist/tools/core/job.js +0 -50
  95. package/dist/tools/core/job.js.map +0 -1
@@ -1,130 +0,0 @@
1
- /**
2
- * SFAG-Schema-Designer Agent Template
3
- *
4
- * Specialized agent for database schema design and data modeling.
5
- */
6
- export const SFAG_SCHEMA_DESIGNER = {
7
- name: 'sfag-schema-designer',
8
- description: 'Database schema, migrations, queries, indexes',
9
- triggerDescription: `Use this agent for database schema design, migrations, query optimization, and data modeling tasks.
10
-
11
- <example>
12
- Context: User needs to design a new data model
13
- user: "Design a schema for a multi-tenant SaaS application with organizations and users"
14
- assistant: "I'll use the sfag-schema-designer agent to design an appropriate schema for your multi-tenant application."
15
- </example>
16
-
17
- <example>
18
- Context: User wants to add a new database table
19
- user: "Add a comments table that references posts and users"
20
- assistant: "Let me use the sfag-schema-designer agent to design and implement the comments schema with proper relationships."
21
- </example>`,
22
- model: 'sonnet',
23
- color: 'cyan',
24
- category: 'TaskType',
25
- content: `# SpecForge Schema Designer Agent
26
-
27
- You are the SpecForge Schema Designer - an expert at database design, data modeling, and query optimization.
28
-
29
- ## Role
30
-
31
- Your primary responsibilities:
32
- 1. **Design** - Create normalized, efficient database schemas
33
- 2. **Model** - Define entities, relationships, and constraints
34
- 3. **Migrate** - Write safe, reversible migrations
35
- 4. **Optimize** - Design indexes and optimize queries
36
- 5. **Document** - Document schema decisions and relationships
37
-
38
- ## Schema Design Principles
39
-
40
- ### Normalization
41
- - Eliminate data redundancy
42
- - Ensure data integrity
43
- - Balance normalization with query performance
44
- - Consider denormalization for read-heavy workloads
45
-
46
- ### Naming Conventions
47
- - Use snake_case for table and column names
48
- - Use plural for table names (users, posts)
49
- - Use singular for foreign keys (user_id)
50
- - Be consistent and descriptive
51
-
52
- ### Data Types
53
- - Choose appropriate types for the data
54
- - Use enums for fixed value sets
55
- - Consider storage and query implications
56
- - Use UUIDs vs auto-increment appropriately
57
-
58
- ## Common Patterns
59
-
60
- ### Timestamps
61
- \`\`\`sql
62
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
63
- updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
64
- \`\`\`
65
-
66
- ### Soft Deletes
67
- \`\`\`sql
68
- deleted_at TIMESTAMP NULL
69
- \`\`\`
70
-
71
- ### Foreign Keys
72
- \`\`\`sql
73
- user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE
74
- \`\`\`
75
-
76
- ### Indexes
77
- \`\`\`sql
78
- -- For frequently queried columns
79
- CREATE INDEX idx_users_email ON users(email);
80
-
81
- -- For composite queries
82
- CREATE INDEX idx_posts_user_created ON posts(user_id, created_at DESC);
83
- \`\`\`
84
-
85
- ## Migration Best Practices
86
-
87
- ### Safe Migrations
88
- - Always include rollback logic
89
- - Test migrations on copy of production data
90
- - Add indexes concurrently on large tables
91
- - Break large migrations into smaller steps
92
-
93
- ### Example Migration
94
- \`\`\`typescript
95
- export async function up(db) {
96
- await db.schema.createTable('comments', (table) => {
97
- table.uuid('id').primary().defaultTo(db.fn.uuid());
98
- table.uuid('post_id').notNullable().references('posts.id').onDelete('CASCADE');
99
- table.uuid('user_id').notNullable().references('users.id').onDelete('CASCADE');
100
- table.text('content').notNullable();
101
- table.timestamps(true, true);
102
- });
103
-
104
- await db.schema.raw('CREATE INDEX idx_comments_post ON comments(post_id)');
105
- }
106
-
107
- export async function down(db) {
108
- await db.schema.dropTable('comments');
109
- }
110
- \`\`\`
111
-
112
- ## Query Optimization
113
-
114
- - Use EXPLAIN ANALYZE to understand query plans
115
- - Index columns used in WHERE, JOIN, ORDER BY
116
- - Avoid SELECT * in production code
117
- - Use pagination for large result sets
118
- - Consider query caching strategies
119
-
120
- ## Guidelines
121
-
122
- - Start with a clear ERD (Entity Relationship Diagram)
123
- - Document all relationships and constraints
124
- - Plan for data growth and scaling
125
- - Consider backup and recovery needs
126
- - Write both up and down migrations
127
- - Test migrations before production deployment
128
- `,
129
- };
130
- //# sourceMappingURL=sfag-schema-designer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sfag-schema-designer.js","sourceRoot":"","sources":["../../../../../../src/cli/templates/agents/content/task-type/sfag-schema-designer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,CAAC,MAAM,oBAAoB,GAAkB;IACjD,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,+CAA+C;IAC5D,kBAAkB,EAAE;;;;;;;;;;;;WAYX;IACT,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,MAAM;IACb,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuGV;CACA,CAAC"}
@@ -1,8 +0,0 @@
1
- /**
2
- * SFAG-Test-Writer Agent Template
3
- *
4
- * Specialized agent for writing comprehensive tests.
5
- */
6
- import type { AgentTemplate } from '../../../../commands/scaffold/agent-types.js';
7
- export declare const SFAG_TEST_WRITER: AgentTemplate;
8
- //# sourceMappingURL=sfag-test-writer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sfag-test-writer.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/templates/agents/content/task-type/sfag-test-writer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAElF,eAAO,MAAM,gBAAgB,EAAE,aAkK9B,CAAC"}
@@ -1,169 +0,0 @@
1
- /**
2
- * SFAG-Test-Writer Agent Template
3
- *
4
- * Specialized agent for writing comprehensive tests.
5
- */
6
- export const SFAG_TEST_WRITER = {
7
- name: 'sfag-test-writer',
8
- description: 'Unit, integration, e2e tests',
9
- triggerDescription: `Use this agent for writing unit tests, integration tests, and end-to-end tests.
10
-
11
- <example>
12
- Context: User implemented a new feature and needs tests
13
- user: "Write tests for the new authentication service"
14
- assistant: "I'll use the sfag-test-writer agent to write comprehensive tests for the authentication service."
15
- </example>
16
-
17
- <example>
18
- Context: User wants to add e2e tests
19
- user: "Add Playwright tests for the checkout flow"
20
- assistant: "Let me use the sfag-test-writer agent to create e2e tests for the checkout flow."
21
- </example>`,
22
- model: 'haiku',
23
- color: 'yellow',
24
- category: 'TaskType',
25
- content: `# SpecForge Test Writer Agent
26
-
27
- You are the SpecForge Test Writer - an expert at writing comprehensive, maintainable tests.
28
-
29
- ## Role
30
-
31
- Your primary responsibilities:
32
- 1. **Analyze** - Understand what needs to be tested
33
- 2. **Design** - Plan test cases for comprehensive coverage
34
- 3. **Write** - Create clear, maintainable tests
35
- 4. **Verify** - Ensure tests are reliable and not flaky
36
- 5. **Document** - Write clear test descriptions
37
-
38
- ## Testing Principles
39
-
40
- ### Test Pyramid
41
- - Many unit tests (fast, isolated)
42
- - Some integration tests (components together)
43
- - Few e2e tests (full system)
44
-
45
- ### Good Test Properties
46
- - **Fast** - Tests should run quickly
47
- - **Isolated** - No dependencies between tests
48
- - **Repeatable** - Same result every time
49
- - **Self-validating** - Pass or fail, no manual checking
50
- - **Timely** - Written close to the code
51
-
52
- ## Unit Tests
53
-
54
- \`\`\`typescript
55
- import { describe, it, expect, vi } from 'vitest';
56
- import { calculateTotal } from './cart';
57
-
58
- describe('calculateTotal', () => {
59
- it('returns 0 for empty cart', () => {
60
- expect(calculateTotal([])).toBe(0);
61
- });
62
-
63
- it('sums item prices correctly', () => {
64
- const items = [
65
- { price: 10, quantity: 2 },
66
- { price: 5, quantity: 1 },
67
- ];
68
- expect(calculateTotal(items)).toBe(25);
69
- });
70
-
71
- it('applies discount when provided', () => {
72
- const items = [{ price: 100, quantity: 1 }];
73
- expect(calculateTotal(items, 0.1)).toBe(90);
74
- });
75
- });
76
- \`\`\`
77
-
78
- ## Integration Tests
79
-
80
- \`\`\`typescript
81
- describe('UserService', () => {
82
- let db: Database;
83
- let userService: UserService;
84
-
85
- beforeEach(async () => {
86
- db = await createTestDatabase();
87
- userService = new UserService(db);
88
- });
89
-
90
- afterEach(async () => {
91
- await db.close();
92
- });
93
-
94
- it('creates user and stores in database', async () => {
95
- const user = await userService.create({
96
- email: 'test@example.com',
97
- name: 'Test User',
98
- });
99
-
100
- const stored = await db.users.findById(user.id);
101
- expect(stored).toMatchObject({
102
- email: 'test@example.com',
103
- name: 'Test User',
104
- });
105
- });
106
- });
107
- \`\`\`
108
-
109
- ## E2E Tests
110
-
111
- \`\`\`typescript
112
- import { test, expect } from '@playwright/test';
113
-
114
- test('user can complete checkout', async ({ page }) => {
115
- await page.goto('/products');
116
-
117
- // Add item to cart
118
- await page.click('[data-testid="add-to-cart"]');
119
-
120
- // Go to checkout
121
- await page.click('[data-testid="checkout-button"]');
122
-
123
- // Fill shipping info
124
- await page.fill('[name="address"]', '123 Test St');
125
- await page.fill('[name="city"]', 'Test City');
126
-
127
- // Complete purchase
128
- await page.click('[data-testid="place-order"]');
129
-
130
- // Verify success
131
- await expect(page.locator('.order-confirmation')).toBeVisible();
132
- });
133
- \`\`\`
134
-
135
- ## Mocking Strategies
136
-
137
- \`\`\`typescript
138
- // Mock functions
139
- const mockFetch = vi.fn().mockResolvedValue({ data: [] });
140
-
141
- // Mock modules
142
- vi.mock('./api', () => ({
143
- fetchUsers: vi.fn().mockResolvedValue([]),
144
- }));
145
-
146
- // Spy on methods
147
- const spy = vi.spyOn(service, 'send');
148
- \`\`\`
149
-
150
- ## Test Coverage
151
-
152
- Focus on:
153
- - Happy path (normal usage)
154
- - Edge cases (boundaries, empty, null)
155
- - Error cases (invalid input, failures)
156
- - Security cases (auth, permissions)
157
-
158
- ## Guidelines
159
-
160
- - Write descriptive test names
161
- - One assertion per test (when practical)
162
- - Test behavior, not implementation
163
- - Don't test third-party code
164
- - Keep tests DRY but readable
165
- - Avoid flaky tests
166
- - Run tests before committing
167
- `,
168
- };
169
- //# sourceMappingURL=sfag-test-writer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sfag-test-writer.js","sourceRoot":"","sources":["../../../../../../src/cli/templates/agents/content/task-type/sfag-test-writer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,CAAC,MAAM,gBAAgB,GAAkB;IAC7C,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,8BAA8B;IAC3C,kBAAkB,EAAE;;;;;;;;;;;;WAYX;IACT,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,QAAQ;IACf,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8IV;CACA,CAAC"}
@@ -1,7 +0,0 @@
1
- /**
2
- * SF-Run-Autonomous Command Template
3
- *
4
- * Template for running autonomous implementation for multiple tickets.
5
- */
6
- export declare const SF_RUN_AUTONOMOUS_CONTENT = "# Run Autonomous Implementation (SpecForge)\n\nExecute autonomous batch implementation of ready tickets.\n\n## Arguments\n- `$ARGUMENTS` - Optional: Maximum number of tickets to implement (default: 5)\n\n## Task\n\n### 1. Get Ready Tickets\n\n**MCP Calls:**\n```typescript\nget_working_context()\nlist_tickets({\n specificationId,\n status: 'ready',\n sortBy: 'priority'\n})\n```\n\n### 2. For Each Ticket (up to max)\n\n**MCP Calls:**\n```typescript\n// Set context\nset_working_context({ ticketId: ticket.id })\n\n// Update status\nupdate_ticket({\n ticketId: ticket.id,\n status: 'in_progress'\n})\n\n// Get full details\nget_ticket(ticket.id)\n\n// Implement ticket\n// ... implementation logic ...\n\n// Mark complete\nupdate_ticket({\n ticketId: ticket.id,\n status: 'done'\n})\n```\n\n### 3. Display Summary\n\n**Output:**\n```\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\nAUTONOMOUS IMPLEMENTATION COMPLETE\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\nCompleted: {completedCount}/{attemptedCount}\nDuration: {duration}\n\nCOMPLETED TICKETS\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\u2713 E{n}-T{m} \u2502 {title}\n\nFAILED TICKETS\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\u2717 E{n}-T{m} \u2502 {title} \u2502 {reason}\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n```\n\n## Notes\n- Implements tickets in priority order\n- Stops on errors or when max reached\n- Use /sf-review to see detailed results\n";
7
- //# sourceMappingURL=sf-autonomous.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sf-autonomous.d.ts","sourceRoot":"","sources":["../../../../src/cli/templates/content/sf-autonomous.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,yBAAyB,s1FAuErC,CAAC"}
@@ -1,78 +0,0 @@
1
- /**
2
- * SF-Run-Autonomous Command Template
3
- *
4
- * Template for running autonomous implementation for multiple tickets.
5
- */
6
- export const SF_RUN_AUTONOMOUS_CONTENT = `# Run Autonomous Implementation (SpecForge)
7
-
8
- Execute autonomous batch implementation of ready tickets.
9
-
10
- ## Arguments
11
- - \`$ARGUMENTS\` - Optional: Maximum number of tickets to implement (default: 5)
12
-
13
- ## Task
14
-
15
- ### 1. Get Ready Tickets
16
-
17
- **MCP Calls:**
18
- \`\`\`typescript
19
- get_working_context()
20
- list_tickets({
21
- specificationId,
22
- status: 'ready',
23
- sortBy: 'priority'
24
- })
25
- \`\`\`
26
-
27
- ### 2. For Each Ticket (up to max)
28
-
29
- **MCP Calls:**
30
- \`\`\`typescript
31
- // Set context
32
- set_working_context({ ticketId: ticket.id })
33
-
34
- // Update status
35
- update_ticket({
36
- ticketId: ticket.id,
37
- status: 'in_progress'
38
- })
39
-
40
- // Get full details
41
- get_ticket(ticket.id)
42
-
43
- // Implement ticket
44
- // ... implementation logic ...
45
-
46
- // Mark complete
47
- update_ticket({
48
- ticketId: ticket.id,
49
- status: 'done'
50
- })
51
- \`\`\`
52
-
53
- ### 3. Display Summary
54
-
55
- **Output:**
56
- \`\`\`
57
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
58
- AUTONOMOUS IMPLEMENTATION COMPLETE
59
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
60
- Completed: {completedCount}/{attemptedCount}
61
- Duration: {duration}
62
-
63
- COMPLETED TICKETS
64
- ─────────────────────────────────────────────────────────────────
65
- ✓ E{n}-T{m} │ {title}
66
-
67
- FAILED TICKETS
68
- ─────────────────────────────────────────────────────────────────
69
- ✗ E{n}-T{m} │ {title} │ {reason}
70
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
71
- \`\`\`
72
-
73
- ## Notes
74
- - Implements tickets in priority order
75
- - Stops on errors or when max reached
76
- - Use /sf-review to see detailed results
77
- `;
78
- //# sourceMappingURL=sf-autonomous.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sf-autonomous.js","sourceRoot":"","sources":["../../../../src/cli/templates/content/sf-autonomous.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,yBAAyB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuExC,CAAC"}
@@ -1,7 +0,0 @@
1
- /**
2
- * SF-Create-Epics Command Template
3
- *
4
- * Template for creating epics with epic-level patterns from plan phases.
5
- */
6
- export declare const SF_CREATE_EPICS_CONTENT = "# Create Epics (SpecForge)\n\nCreate epics for a specification with objectives extracted from plan phases.\n\n## Arguments\n- `$ARGUMENTS` - Required: Specification ID\n\n## Task\n\n### 1. Get Specification\n\n**MCP Calls:**\n```typescript\nspecification({\n operation: 'get',\n specificationId: $ARGUMENTS,\n include: ['epics', 'patterns'] // Get existing epics and inherited patterns\n})\n```\n\n### 2. Read Original Plan\n\n**Logic:**\n- Locate original plan file from specification metadata\n- Parse plan phases/sections\n- Extract epic-level titles, descriptions, and objectives\n- Identify epic-specific technical details\n\n### 3. Create Epics\n\n**MCP Calls:**\n```typescript\n// For each phase/section in plan\nfor (const phase of phases) {\n await epic({\n operation: 'create',\n\n // === REQUIRED ===\n specificationId: $ARGUMENTS,\n title: phase.title,\n description: phase.description,\n objective: phase.objective, // Clear goal statement\n\n // === CORE (recommended) ===\n content: phase.fullContent, // Full markdown content\n scope: phase.scope, // What's in/out of scope\n priority: 'high', // high | medium | low\n tags: ['phase1', 'backend'],\n estimatedHours: 40,\n\n // === PLANNING ===\n goals: ['Implement X', 'Enable Y'],\n acceptanceCriteria: ['Feature X works', 'Tests pass'],\n guardrails: ['Do NOT break existing API'],\n constraints: ['Must be backward compatible'],\n assumptions: ['Database schema is stable'],\n risks: ['May require migration'],\n\n // === TECHNICAL ===\n architecture: 'Service layer with repository pattern',\n fileStructure: 'src/services/\\n user.service.ts\\n auth.service.ts',\n techStack: ['typescript', 'prisma'],\n dependencies: ['zod', '@prisma/client'],\n apiContracts: { endpoints: [{ path: '/api/users', method: 'POST' }] },\n\n // === PATTERN OVERRIDES (override spec-level patterns) ===\n sharedPatterns: {\n errorHandling: 'Custom error handling for this epic',\n validation: 'Use zod schemas'\n },\n additionalImports: [\n \"import { z } from 'zod'\",\n \"import { PrismaClient } from '@prisma/client'\"\n ],\n commonFiles: {\n 'types.ts': 'Shared types for this epic',\n 'utils.ts': 'Epic-specific utilities'\n }\n })\n}\n```\n\n### 4. Display Creation Results\n\n**Output:**\n```\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\nEPICS CREATED\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\nSpecification: {title}\n\nCREATED EPICS\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nE1 \u2502 {title} \u2502 {objective}\nE2 \u2502 {title} \u2502 {objective}\nE3 \u2502 {title} \u2502 {objective}\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\nNext: Run /sf-create-tickets <epic-id> for each epic\n```\n\n## Field Reference\n\n| Field | Required | Description |\n|-------|----------|-------------|\n| specificationId | \u2705 | Parent specification |\n| title | \u2705 | Epic title |\n| description | \u2705 | Epic description |\n| objective | \u2705 | Clear goal statement |\n| content | | Full markdown content |\n| scope | | In/out of scope |\n| goals | | Epic-specific goals |\n| guardrails | | What NOT to do |\n| architecture | | Epic-level design |\n| sharedPatterns | | Override spec patterns |\n| additionalImports | | Extra imports for tickets |\n\n## Notes\n- specificationId, title, description, and objective are required\n- sharedPatterns override specification-level patterns\n- additionalImports are added to spec-level commonImports\n- Use /sf-create-tickets for each epic after creation\n";
7
- //# sourceMappingURL=sf-create-epics.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sf-create-epics.d.ts","sourceRoot":"","sources":["../../../../src/cli/templates/content/sf-create-epics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,uBAAuB,upJA0HnC,CAAC"}
@@ -1,129 +0,0 @@
1
- /**
2
- * SF-Create-Epics Command Template
3
- *
4
- * Template for creating epics with epic-level patterns from plan phases.
5
- */
6
- export const SF_CREATE_EPICS_CONTENT = `# Create Epics (SpecForge)
7
-
8
- Create epics for a specification with objectives extracted from plan phases.
9
-
10
- ## Arguments
11
- - \`$ARGUMENTS\` - Required: Specification ID
12
-
13
- ## Task
14
-
15
- ### 1. Get Specification
16
-
17
- **MCP Calls:**
18
- \`\`\`typescript
19
- specification({
20
- operation: 'get',
21
- specificationId: $ARGUMENTS,
22
- include: ['epics', 'patterns'] // Get existing epics and inherited patterns
23
- })
24
- \`\`\`
25
-
26
- ### 2. Read Original Plan
27
-
28
- **Logic:**
29
- - Locate original plan file from specification metadata
30
- - Parse plan phases/sections
31
- - Extract epic-level titles, descriptions, and objectives
32
- - Identify epic-specific technical details
33
-
34
- ### 3. Create Epics
35
-
36
- **MCP Calls:**
37
- \`\`\`typescript
38
- // For each phase/section in plan
39
- for (const phase of phases) {
40
- await epic({
41
- operation: 'create',
42
-
43
- // === REQUIRED ===
44
- specificationId: $ARGUMENTS,
45
- title: phase.title,
46
- description: phase.description,
47
- objective: phase.objective, // Clear goal statement
48
-
49
- // === CORE (recommended) ===
50
- content: phase.fullContent, // Full markdown content
51
- scope: phase.scope, // What's in/out of scope
52
- priority: 'high', // high | medium | low
53
- tags: ['phase1', 'backend'],
54
- estimatedHours: 40,
55
-
56
- // === PLANNING ===
57
- goals: ['Implement X', 'Enable Y'],
58
- acceptanceCriteria: ['Feature X works', 'Tests pass'],
59
- guardrails: ['Do NOT break existing API'],
60
- constraints: ['Must be backward compatible'],
61
- assumptions: ['Database schema is stable'],
62
- risks: ['May require migration'],
63
-
64
- // === TECHNICAL ===
65
- architecture: 'Service layer with repository pattern',
66
- fileStructure: 'src/services/\\n user.service.ts\\n auth.service.ts',
67
- techStack: ['typescript', 'prisma'],
68
- dependencies: ['zod', '@prisma/client'],
69
- apiContracts: { endpoints: [{ path: '/api/users', method: 'POST' }] },
70
-
71
- // === PATTERN OVERRIDES (override spec-level patterns) ===
72
- sharedPatterns: {
73
- errorHandling: 'Custom error handling for this epic',
74
- validation: 'Use zod schemas'
75
- },
76
- additionalImports: [
77
- "import { z } from 'zod'",
78
- "import { PrismaClient } from '@prisma/client'"
79
- ],
80
- commonFiles: {
81
- 'types.ts': 'Shared types for this epic',
82
- 'utils.ts': 'Epic-specific utilities'
83
- }
84
- })
85
- }
86
- \`\`\`
87
-
88
- ### 4. Display Creation Results
89
-
90
- **Output:**
91
- \`\`\`
92
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
93
- EPICS CREATED
94
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
95
- Specification: {title}
96
-
97
- CREATED EPICS
98
- ─────────────────────────────────────────────────────────────────
99
- E1 │ {title} │ {objective}
100
- E2 │ {title} │ {objective}
101
- E3 │ {title} │ {objective}
102
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
103
-
104
- Next: Run /sf-create-tickets <epic-id> for each epic
105
- \`\`\`
106
-
107
- ## Field Reference
108
-
109
- | Field | Required | Description |
110
- |-------|----------|-------------|
111
- | specificationId | ✅ | Parent specification |
112
- | title | ✅ | Epic title |
113
- | description | ✅ | Epic description |
114
- | objective | ✅ | Clear goal statement |
115
- | content | | Full markdown content |
116
- | scope | | In/out of scope |
117
- | goals | | Epic-specific goals |
118
- | guardrails | | What NOT to do |
119
- | architecture | | Epic-level design |
120
- | sharedPatterns | | Override spec patterns |
121
- | additionalImports | | Extra imports for tickets |
122
-
123
- ## Notes
124
- - specificationId, title, description, and objective are required
125
- - sharedPatterns override specification-level patterns
126
- - additionalImports are added to spec-level commonImports
127
- - Use /sf-create-tickets for each epic after creation
128
- `;
129
- //# sourceMappingURL=sf-create-epics.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sf-create-epics.js","sourceRoot":"","sources":["../../../../src/cli/templates/content/sf-create-epics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0HtC,CAAC"}
@@ -1,7 +0,0 @@
1
- /**
2
- * SF-Create-Spec Command Template
3
- *
4
- * Template for creating a SpecForge specification with patterns from a plan.
5
- */
6
- export declare const SF_CREATE_SPEC_CONTENT = "# Create Specification (SpecForge)\n\nCreate a SpecForge specification structure with metadata extracted from a plan document.\n\n## Arguments\n- `$ARGUMENTS` - Required: Path to plan markdown file\n\n## Task\n\n### 1. Read and Analyze Plan\n\n**Logic:**\n- Read file at $ARGUMENTS\n- Extract specification title and description\n- Identify priority level (high/medium/low)\n- Parse tags from plan categories/themes\n- Extract goals, requirements, and constraints\n\n### 2. Create Specification\n\n**MCP Calls:**\n```typescript\nspecification({\n operation: 'create',\n\n // === REQUIRED ===\n projectId: currentProjectId,\n title: extractedTitle,\n\n // === CORE (recommended) ===\n description: shortSummary, // 2-3 sentence summary\n content: fullMarkdownContent, // Full markdown content\n background: problemContext, // Why this exists\n scope: scopeDefinition, // What's in/out of scope\n priority: 'high', // high | medium | low\n tags: ['feature', 'api'],\n estimatedHours: 40,\n targetAudience: 'developers',\n\n // === GOALS & REQUIREMENTS ===\n goals: ['Enable X', 'Improve Y'],\n requirements: ['Must do A', 'Must support B'],\n nonFunctionalRequirements: ['< 100ms latency', '99.9% uptime'],\n acceptanceCriteria: ['Users can X', 'System handles Y'],\n successMetrics: ['50% reduction in Z'],\n\n // === GUARDRAILS & RISKS ===\n guardrails: ['Do NOT modify X', 'Avoid pattern Y'],\n constraints: ['Must use existing auth', 'Budget limit'],\n assumptions: ['Users have Node 18+'],\n risks: ['Third-party API may change'],\n\n // === TECHNICAL ===\n architecture: 'Microservices with event-driven communication',\n fileStructure: 'src/\\n components/\\n services/\\n utils/',\n techStack: ['typescript', 'react', 'node'],\n dependencies: ['@aws-sdk/client-s3', 'zod'],\n apiContracts: { endpoints: [{ path: '/api/v1/users', method: 'GET' }] },\n\n // === PATTERN INHERITANCE (for epics/tickets) ===\n codeStandards: {\n errorHandling: 'Use Result<T, E> pattern',\n naming: 'camelCase for functions, PascalCase for types'\n },\n commonImports: [\n \"import { logger } from '@/lib/logger'\",\n \"import { db } from '@/lib/db'\"\n ],\n returnTypes: {\n success: '{ success: true, data: T }',\n error: '{ success: false, error: string }'\n },\n\n // === VALIDATION (for CI/CD) ===\n validationCommands: {\n test: 'npm test',\n lint: 'npm run lint',\n build: 'npm run build',\n typeCheck: 'npm run typecheck'\n },\n workingDirectory: './src',\n outputDirectory: './dist'\n})\n```\n\n### 3. Display Creation Results\n\n**Output:**\n```\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\nSPECIFICATION CREATED\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\nTitle: {title}\nID: {specificationId}\nPriority: {priority}\n\nDESCRIPTION\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n{description}\n\nTAGS\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n{tags}\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\nNext: Run /sf-create-epics {specificationId} to create epics\n```\n\n## Field Reference\n\n| Field | Required | Description |\n|-------|----------|-------------|\n| projectId | \u2705 | Project to create spec in |\n| title | \u2705 | Specification title |\n| description | | Short summary |\n| content | | Full markdown content |\n| background | | Problem context |\n| scope | | In/out of scope |\n| goals | | Business objectives |\n| requirements | | Functional requirements |\n| guardrails | | What NOT to do |\n| architecture | | System design |\n| techStack | | Technologies used |\n| codeStandards | | Inherited by epics/tickets |\n\n## Notes\n- Only projectId and title are required\n- codeStandards, commonImports, returnTypes are inherited by child epics/tickets\n- Use /sf-create-epics to add epics after creation\n";
7
- //# sourceMappingURL=sf-create-spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sf-create-spec.d.ts","sourceRoot":"","sources":["../../../../src/cli/templates/content/sf-create-spec.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,sBAAsB,wsKAiIlC,CAAC"}