@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.
- package/dist/autopilot/cli/index.js +1 -1
- package/dist/autopilot/cli/index.js.map +1 -1
- package/dist/tools/core/epic.d.ts.map +1 -1
- package/dist/tools/core/epic.js +1 -0
- package/dist/tools/core/epic.js.map +1 -1
- package/dist/tools/core/index.d.ts +0 -1
- package/dist/tools/core/index.d.ts.map +1 -1
- package/dist/tools/core/index.js +0 -1
- package/dist/tools/core/index.js.map +1 -1
- package/dist/tools/core/specification.d.ts.map +1 -1
- package/dist/tools/core/specification.js +1 -0
- package/dist/tools/core/specification.js.map +1 -1
- package/dist/tools/core/ticket.d.ts.map +1 -1
- package/dist/tools/core/ticket.js +1 -0
- package/dist/tools/core/ticket.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +0 -57
- package/dist/tools/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/cli/templates/agents/content/core/sfag-implementer.d.ts +0 -8
- package/dist/cli/templates/agents/content/core/sfag-implementer.d.ts.map +0 -1
- package/dist/cli/templates/agents/content/core/sfag-implementer.js +0 -111
- package/dist/cli/templates/agents/content/core/sfag-implementer.js.map +0 -1
- package/dist/cli/templates/agents/content/task-type/sfag-api-implementer.d.ts +0 -8
- package/dist/cli/templates/agents/content/task-type/sfag-api-implementer.d.ts.map +0 -1
- package/dist/cli/templates/agents/content/task-type/sfag-api-implementer.js +0 -130
- package/dist/cli/templates/agents/content/task-type/sfag-api-implementer.js.map +0 -1
- package/dist/cli/templates/agents/content/task-type/sfag-docs-writer.d.ts +0 -8
- package/dist/cli/templates/agents/content/task-type/sfag-docs-writer.d.ts.map +0 -1
- package/dist/cli/templates/agents/content/task-type/sfag-docs-writer.js +0 -181
- package/dist/cli/templates/agents/content/task-type/sfag-docs-writer.js.map +0 -1
- package/dist/cli/templates/agents/content/task-type/sfag-frontend-builder.d.ts +0 -8
- package/dist/cli/templates/agents/content/task-type/sfag-frontend-builder.d.ts.map +0 -1
- package/dist/cli/templates/agents/content/task-type/sfag-frontend-builder.js +0 -139
- package/dist/cli/templates/agents/content/task-type/sfag-frontend-builder.js.map +0 -1
- package/dist/cli/templates/agents/content/task-type/sfag-infra-architect.d.ts +0 -8
- package/dist/cli/templates/agents/content/task-type/sfag-infra-architect.d.ts.map +0 -1
- package/dist/cli/templates/agents/content/task-type/sfag-infra-architect.js +0 -147
- package/dist/cli/templates/agents/content/task-type/sfag-infra-architect.js.map +0 -1
- package/dist/cli/templates/agents/content/task-type/sfag-schema-designer.d.ts +0 -8
- package/dist/cli/templates/agents/content/task-type/sfag-schema-designer.d.ts.map +0 -1
- package/dist/cli/templates/agents/content/task-type/sfag-schema-designer.js +0 -130
- package/dist/cli/templates/agents/content/task-type/sfag-schema-designer.js.map +0 -1
- package/dist/cli/templates/agents/content/task-type/sfag-test-writer.d.ts +0 -8
- package/dist/cli/templates/agents/content/task-type/sfag-test-writer.d.ts.map +0 -1
- package/dist/cli/templates/agents/content/task-type/sfag-test-writer.js +0 -169
- package/dist/cli/templates/agents/content/task-type/sfag-test-writer.js.map +0 -1
- package/dist/cli/templates/content/sf-autonomous.d.ts +0 -7
- package/dist/cli/templates/content/sf-autonomous.d.ts.map +0 -1
- package/dist/cli/templates/content/sf-autonomous.js +0 -78
- package/dist/cli/templates/content/sf-autonomous.js.map +0 -1
- package/dist/cli/templates/content/sf-create-epics.d.ts +0 -7
- package/dist/cli/templates/content/sf-create-epics.d.ts.map +0 -1
- package/dist/cli/templates/content/sf-create-epics.js +0 -129
- package/dist/cli/templates/content/sf-create-epics.js.map +0 -1
- package/dist/cli/templates/content/sf-create-spec.d.ts +0 -7
- package/dist/cli/templates/content/sf-create-spec.d.ts.map +0 -1
- package/dist/cli/templates/content/sf-create-spec.js +0 -136
- package/dist/cli/templates/content/sf-create-spec.js.map +0 -1
- package/dist/cli/templates/content/sf-create-tickets.d.ts +0 -7
- package/dist/cli/templates/content/sf-create-tickets.d.ts.map +0 -1
- package/dist/cli/templates/content/sf-create-tickets.js +0 -148
- package/dist/cli/templates/content/sf-create-tickets.js.map +0 -1
- package/dist/cli/templates/content/sf-epic.d.ts +0 -7
- package/dist/cli/templates/content/sf-epic.d.ts.map +0 -1
- package/dist/cli/templates/content/sf-epic.js +0 -69
- package/dist/cli/templates/content/sf-epic.js.map +0 -1
- package/dist/cli/templates/content/sf-import.d.ts +0 -7
- package/dist/cli/templates/content/sf-import.d.ts.map +0 -1
- package/dist/cli/templates/content/sf-import.js +0 -88
- package/dist/cli/templates/content/sf-import.js.map +0 -1
- package/dist/cli/templates/content/sf-next.d.ts +0 -7
- package/dist/cli/templates/content/sf-next.d.ts.map +0 -1
- package/dist/cli/templates/content/sf-next.js +0 -67
- package/dist/cli/templates/content/sf-next.js.map +0 -1
- package/dist/cli/templates/content/sf-review.d.ts +0 -7
- package/dist/cli/templates/content/sf-review.d.ts.map +0 -1
- package/dist/cli/templates/content/sf-review.js +0 -67
- package/dist/cli/templates/content/sf-review.js.map +0 -1
- package/dist/cli/templates/content/sf-ticket.d.ts +0 -7
- package/dist/cli/templates/content/sf-ticket.d.ts.map +0 -1
- package/dist/cli/templates/content/sf-ticket.js +0 -76
- package/dist/cli/templates/content/sf-ticket.js.map +0 -1
- package/dist/cli/templates/content/sf-validate.d.ts +0 -7
- package/dist/cli/templates/content/sf-validate.d.ts.map +0 -1
- package/dist/cli/templates/content/sf-validate.js +0 -78
- package/dist/cli/templates/content/sf-validate.js.map +0 -1
- package/dist/tools/core/context.d.ts +0 -7
- package/dist/tools/core/context.d.ts.map +0 -1
- package/dist/tools/core/context.js +0 -75
- package/dist/tools/core/context.js.map +0 -1
- package/dist/tools/core/job.d.ts +0 -7
- package/dist/tools/core/job.d.ts.map +0 -1
- package/dist/tools/core/job.js +0 -50
- package/dist/tools/core/job.js.map +0 -1
|
@@ -1,136 +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 const SF_CREATE_SPEC_CONTENT = `# Create Specification (SpecForge)
|
|
7
|
-
|
|
8
|
-
Create a SpecForge specification structure with metadata extracted from a plan document.
|
|
9
|
-
|
|
10
|
-
## Arguments
|
|
11
|
-
- \`$ARGUMENTS\` - Required: Path to plan markdown file
|
|
12
|
-
|
|
13
|
-
## Task
|
|
14
|
-
|
|
15
|
-
### 1. Read and Analyze Plan
|
|
16
|
-
|
|
17
|
-
**Logic:**
|
|
18
|
-
- Read file at $ARGUMENTS
|
|
19
|
-
- Extract specification title and description
|
|
20
|
-
- Identify priority level (high/medium/low)
|
|
21
|
-
- Parse tags from plan categories/themes
|
|
22
|
-
- Extract goals, requirements, and constraints
|
|
23
|
-
|
|
24
|
-
### 2. Create Specification
|
|
25
|
-
|
|
26
|
-
**MCP Calls:**
|
|
27
|
-
\`\`\`typescript
|
|
28
|
-
specification({
|
|
29
|
-
operation: 'create',
|
|
30
|
-
|
|
31
|
-
// === REQUIRED ===
|
|
32
|
-
projectId: currentProjectId,
|
|
33
|
-
title: extractedTitle,
|
|
34
|
-
|
|
35
|
-
// === CORE (recommended) ===
|
|
36
|
-
description: shortSummary, // 2-3 sentence summary
|
|
37
|
-
content: fullMarkdownContent, // Full markdown content
|
|
38
|
-
background: problemContext, // Why this exists
|
|
39
|
-
scope: scopeDefinition, // What's in/out of scope
|
|
40
|
-
priority: 'high', // high | medium | low
|
|
41
|
-
tags: ['feature', 'api'],
|
|
42
|
-
estimatedHours: 40,
|
|
43
|
-
targetAudience: 'developers',
|
|
44
|
-
|
|
45
|
-
// === GOALS & REQUIREMENTS ===
|
|
46
|
-
goals: ['Enable X', 'Improve Y'],
|
|
47
|
-
requirements: ['Must do A', 'Must support B'],
|
|
48
|
-
nonFunctionalRequirements: ['< 100ms latency', '99.9% uptime'],
|
|
49
|
-
acceptanceCriteria: ['Users can X', 'System handles Y'],
|
|
50
|
-
successMetrics: ['50% reduction in Z'],
|
|
51
|
-
|
|
52
|
-
// === GUARDRAILS & RISKS ===
|
|
53
|
-
guardrails: ['Do NOT modify X', 'Avoid pattern Y'],
|
|
54
|
-
constraints: ['Must use existing auth', 'Budget limit'],
|
|
55
|
-
assumptions: ['Users have Node 18+'],
|
|
56
|
-
risks: ['Third-party API may change'],
|
|
57
|
-
|
|
58
|
-
// === TECHNICAL ===
|
|
59
|
-
architecture: 'Microservices with event-driven communication',
|
|
60
|
-
fileStructure: 'src/\\n components/\\n services/\\n utils/',
|
|
61
|
-
techStack: ['typescript', 'react', 'node'],
|
|
62
|
-
dependencies: ['@aws-sdk/client-s3', 'zod'],
|
|
63
|
-
apiContracts: { endpoints: [{ path: '/api/v1/users', method: 'GET' }] },
|
|
64
|
-
|
|
65
|
-
// === PATTERN INHERITANCE (for epics/tickets) ===
|
|
66
|
-
codeStandards: {
|
|
67
|
-
errorHandling: 'Use Result<T, E> pattern',
|
|
68
|
-
naming: 'camelCase for functions, PascalCase for types'
|
|
69
|
-
},
|
|
70
|
-
commonImports: [
|
|
71
|
-
"import { logger } from '@/lib/logger'",
|
|
72
|
-
"import { db } from '@/lib/db'"
|
|
73
|
-
],
|
|
74
|
-
returnTypes: {
|
|
75
|
-
success: '{ success: true, data: T }',
|
|
76
|
-
error: '{ success: false, error: string }'
|
|
77
|
-
},
|
|
78
|
-
|
|
79
|
-
// === VALIDATION (for CI/CD) ===
|
|
80
|
-
validationCommands: {
|
|
81
|
-
test: 'npm test',
|
|
82
|
-
lint: 'npm run lint',
|
|
83
|
-
build: 'npm run build',
|
|
84
|
-
typeCheck: 'npm run typecheck'
|
|
85
|
-
},
|
|
86
|
-
workingDirectory: './src',
|
|
87
|
-
outputDirectory: './dist'
|
|
88
|
-
})
|
|
89
|
-
\`\`\`
|
|
90
|
-
|
|
91
|
-
### 3. Display Creation Results
|
|
92
|
-
|
|
93
|
-
**Output:**
|
|
94
|
-
\`\`\`
|
|
95
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
96
|
-
SPECIFICATION CREATED
|
|
97
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
98
|
-
Title: {title}
|
|
99
|
-
ID: {specificationId}
|
|
100
|
-
Priority: {priority}
|
|
101
|
-
|
|
102
|
-
DESCRIPTION
|
|
103
|
-
─────────────────────────────────────────────────────────────────
|
|
104
|
-
{description}
|
|
105
|
-
|
|
106
|
-
TAGS
|
|
107
|
-
─────────────────────────────────────────────────────────────────
|
|
108
|
-
{tags}
|
|
109
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
110
|
-
|
|
111
|
-
Next: Run /sf-create-epics {specificationId} to create epics
|
|
112
|
-
\`\`\`
|
|
113
|
-
|
|
114
|
-
## Field Reference
|
|
115
|
-
|
|
116
|
-
| Field | Required | Description |
|
|
117
|
-
|-------|----------|-------------|
|
|
118
|
-
| projectId | ✅ | Project to create spec in |
|
|
119
|
-
| title | ✅ | Specification title |
|
|
120
|
-
| description | | Short summary |
|
|
121
|
-
| content | | Full markdown content |
|
|
122
|
-
| background | | Problem context |
|
|
123
|
-
| scope | | In/out of scope |
|
|
124
|
-
| goals | | Business objectives |
|
|
125
|
-
| requirements | | Functional requirements |
|
|
126
|
-
| guardrails | | What NOT to do |
|
|
127
|
-
| architecture | | System design |
|
|
128
|
-
| techStack | | Technologies used |
|
|
129
|
-
| codeStandards | | Inherited by epics/tickets |
|
|
130
|
-
|
|
131
|
-
## Notes
|
|
132
|
-
- Only projectId and title are required
|
|
133
|
-
- codeStandards, commonImports, returnTypes are inherited by child epics/tickets
|
|
134
|
-
- Use /sf-create-epics to add epics after creation
|
|
135
|
-
`;
|
|
136
|
-
//# sourceMappingURL=sf-create-spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sf-create-spec.js","sourceRoot":"","sources":["../../../../src/cli/templates/content/sf-create-spec.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiIrC,CAAC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SF-Create-Tickets Command Template
|
|
3
|
-
*
|
|
4
|
-
* Template for creating detailed tickets individually with full implementation context.
|
|
5
|
-
*/
|
|
6
|
-
export declare const SF_CREATE_TICKETS_CONTENT = "# Create Tickets (SpecForge)\n\nCreate detailed tickets for an epic with full implementation context.\n\n## Arguments\n- `$ARGUMENTS` - Required: Epic ID\n\n## Task\n\n### 1. Get Epic Context\n\n**MCP Calls:**\n```typescript\nepic({\n operation: 'get',\n epicId: $ARGUMENTS,\n include: ['tickets', 'specification'] // Get existing tickets and parent spec\n})\n```\n\n### 2. Extract Ticket Definitions\n\n**Logic:**\n- Read epic description and objective\n- Parse task breakdown from epic content\n- Determine complexity and dependencies\n- Extract acceptance criteria for each ticket\n\n### 3. Create Tickets\n\n**MCP Calls:**\n```typescript\n// For each task in epic\nfor (const task of tasks) {\n await ticket({\n operation: 'create',\n\n // === REQUIRED ===\n epicId: $ARGUMENTS,\n title: task.title,\n\n // === CORE (recommended) ===\n description: task.description,\n priority: 'high', // high | medium | low\n complexity: 'medium', // small | medium | large | xlarge\n estimatedHours: 4,\n tags: ['feature', 'api'],\n notes: 'Watch out for edge case X', // Warnings, considerations\n\n // === ACCEPTANCE CRITERIA ===\n acceptanceCriteria: [\n 'Function returns correct result for valid input',\n 'Function throws error for invalid input',\n 'Unit tests cover all branches'\n ],\n\n // === IMPLEMENTATION GUIDANCE ===\n implementation: {\n filesToCreate: ['src/services/user.service.ts'],\n filesToModify: ['src/index.ts'],\n steps: [\n 'Create UserService class',\n 'Implement createUser method',\n 'Add validation with zod',\n 'Write unit tests'\n ],\n testing: 'Use vitest with mocked database'\n },\n technicalDetails: {\n approach: 'Repository pattern with dependency injection',\n stack: ['typescript', 'prisma', 'zod'],\n endpoints: ['/api/users POST'],\n databaseChanges: ['Add users table']\n },\n\n // === CODE REFERENCES ===\n codeReferences: [{\n name: 'createUser',\n language: 'typescript',\n code: `async function createUser(data: CreateUserInput): Promise<User> {\n const validated = createUserSchema.parse(data);\n return await db.user.create({ data: validated });\n}`\n }],\n typeReferences: [{\n name: 'CreateUserInput',\n definition: `interface CreateUserInput {\n email: string;\n name: string;\n role?: 'admin' | 'user';\n}`\n }],\n\n // === DEPENDENCIES ===\n dependsOn: ['ticket-id-1', 'ticket-id-2'] // Must complete these first\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\nTICKETS 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\nEpic: E{n} - {epicTitle}\n\nCREATED 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\nE{n}-T1 \u2502 {title} \u2502 {complexity} \u2502 ready\nE{n}-T2 \u2502 {title} \u2502 {complexity} \u2502 pending (depends on T1)\nE{n}-T3 \u2502 {title} \u2502 {complexity} \u2502 ready\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\nTotal: {ticketCount} tickets created\n\nNext: Run /sf-status to see overall progress\n```\n\n## Field Reference\n\n| Field | Required | Description |\n|-------|----------|-------------|\n| epicId | \u2705 | Parent epic |\n| title | \u2705 | Ticket title |\n| description | | What to implement |\n| complexity | | small \\| medium \\| large \\| xlarge |\n| acceptanceCriteria | | Success criteria (array of strings) |\n| implementation | | Steps, files to create/modify |\n| technicalDetails | | Approach, stack, endpoints |\n| codeReferences | | Code snippets to guide implementation |\n| typeReferences | | Type definitions to implement |\n| dependsOn | | Ticket IDs that must complete first |\n| notes | | Warnings, edge cases, considerations |\n\n## Notes\n- Only epicId and title are required\n- Tickets with dependsOn start as 'pending', others as 'ready'\n- codeReferences and typeReferences provide implementation guidance\n- Use /sf-next to start working on ready tickets\n";
|
|
7
|
-
//# sourceMappingURL=sf-create-tickets.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sf-create-tickets.d.ts","sourceRoot":"","sources":["../../../../src/cli/templates/content/sf-create-tickets.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,yBAAyB,4kKA6IrC,CAAC"}
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SF-Create-Tickets Command Template
|
|
3
|
-
*
|
|
4
|
-
* Template for creating detailed tickets individually with full implementation context.
|
|
5
|
-
*/
|
|
6
|
-
export const SF_CREATE_TICKETS_CONTENT = `# Create Tickets (SpecForge)
|
|
7
|
-
|
|
8
|
-
Create detailed tickets for an epic with full implementation context.
|
|
9
|
-
|
|
10
|
-
## Arguments
|
|
11
|
-
- \`$ARGUMENTS\` - Required: Epic ID
|
|
12
|
-
|
|
13
|
-
## Task
|
|
14
|
-
|
|
15
|
-
### 1. Get Epic Context
|
|
16
|
-
|
|
17
|
-
**MCP Calls:**
|
|
18
|
-
\`\`\`typescript
|
|
19
|
-
epic({
|
|
20
|
-
operation: 'get',
|
|
21
|
-
epicId: $ARGUMENTS,
|
|
22
|
-
include: ['tickets', 'specification'] // Get existing tickets and parent spec
|
|
23
|
-
})
|
|
24
|
-
\`\`\`
|
|
25
|
-
|
|
26
|
-
### 2. Extract Ticket Definitions
|
|
27
|
-
|
|
28
|
-
**Logic:**
|
|
29
|
-
- Read epic description and objective
|
|
30
|
-
- Parse task breakdown from epic content
|
|
31
|
-
- Determine complexity and dependencies
|
|
32
|
-
- Extract acceptance criteria for each ticket
|
|
33
|
-
|
|
34
|
-
### 3. Create Tickets
|
|
35
|
-
|
|
36
|
-
**MCP Calls:**
|
|
37
|
-
\`\`\`typescript
|
|
38
|
-
// For each task in epic
|
|
39
|
-
for (const task of tasks) {
|
|
40
|
-
await ticket({
|
|
41
|
-
operation: 'create',
|
|
42
|
-
|
|
43
|
-
// === REQUIRED ===
|
|
44
|
-
epicId: $ARGUMENTS,
|
|
45
|
-
title: task.title,
|
|
46
|
-
|
|
47
|
-
// === CORE (recommended) ===
|
|
48
|
-
description: task.description,
|
|
49
|
-
priority: 'high', // high | medium | low
|
|
50
|
-
complexity: 'medium', // small | medium | large | xlarge
|
|
51
|
-
estimatedHours: 4,
|
|
52
|
-
tags: ['feature', 'api'],
|
|
53
|
-
notes: 'Watch out for edge case X', // Warnings, considerations
|
|
54
|
-
|
|
55
|
-
// === ACCEPTANCE CRITERIA ===
|
|
56
|
-
acceptanceCriteria: [
|
|
57
|
-
'Function returns correct result for valid input',
|
|
58
|
-
'Function throws error for invalid input',
|
|
59
|
-
'Unit tests cover all branches'
|
|
60
|
-
],
|
|
61
|
-
|
|
62
|
-
// === IMPLEMENTATION GUIDANCE ===
|
|
63
|
-
implementation: {
|
|
64
|
-
filesToCreate: ['src/services/user.service.ts'],
|
|
65
|
-
filesToModify: ['src/index.ts'],
|
|
66
|
-
steps: [
|
|
67
|
-
'Create UserService class',
|
|
68
|
-
'Implement createUser method',
|
|
69
|
-
'Add validation with zod',
|
|
70
|
-
'Write unit tests'
|
|
71
|
-
],
|
|
72
|
-
testing: 'Use vitest with mocked database'
|
|
73
|
-
},
|
|
74
|
-
technicalDetails: {
|
|
75
|
-
approach: 'Repository pattern with dependency injection',
|
|
76
|
-
stack: ['typescript', 'prisma', 'zod'],
|
|
77
|
-
endpoints: ['/api/users POST'],
|
|
78
|
-
databaseChanges: ['Add users table']
|
|
79
|
-
},
|
|
80
|
-
|
|
81
|
-
// === CODE REFERENCES ===
|
|
82
|
-
codeReferences: [{
|
|
83
|
-
name: 'createUser',
|
|
84
|
-
language: 'typescript',
|
|
85
|
-
code: \`async function createUser(data: CreateUserInput): Promise<User> {
|
|
86
|
-
const validated = createUserSchema.parse(data);
|
|
87
|
-
return await db.user.create({ data: validated });
|
|
88
|
-
}\`
|
|
89
|
-
}],
|
|
90
|
-
typeReferences: [{
|
|
91
|
-
name: 'CreateUserInput',
|
|
92
|
-
definition: \`interface CreateUserInput {
|
|
93
|
-
email: string;
|
|
94
|
-
name: string;
|
|
95
|
-
role?: 'admin' | 'user';
|
|
96
|
-
}\`
|
|
97
|
-
}],
|
|
98
|
-
|
|
99
|
-
// === DEPENDENCIES ===
|
|
100
|
-
dependsOn: ['ticket-id-1', 'ticket-id-2'] // Must complete these first
|
|
101
|
-
})
|
|
102
|
-
}
|
|
103
|
-
\`\`\`
|
|
104
|
-
|
|
105
|
-
### 4. Display Creation Results
|
|
106
|
-
|
|
107
|
-
**Output:**
|
|
108
|
-
\`\`\`
|
|
109
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
110
|
-
TICKETS CREATED
|
|
111
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
112
|
-
Epic: E{n} - {epicTitle}
|
|
113
|
-
|
|
114
|
-
CREATED TICKETS
|
|
115
|
-
─────────────────────────────────────────────────────────────────
|
|
116
|
-
E{n}-T1 │ {title} │ {complexity} │ ready
|
|
117
|
-
E{n}-T2 │ {title} │ {complexity} │ pending (depends on T1)
|
|
118
|
-
E{n}-T3 │ {title} │ {complexity} │ ready
|
|
119
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
120
|
-
|
|
121
|
-
Total: {ticketCount} tickets created
|
|
122
|
-
|
|
123
|
-
Next: Run /sf-status to see overall progress
|
|
124
|
-
\`\`\`
|
|
125
|
-
|
|
126
|
-
## Field Reference
|
|
127
|
-
|
|
128
|
-
| Field | Required | Description |
|
|
129
|
-
|-------|----------|-------------|
|
|
130
|
-
| epicId | ✅ | Parent epic |
|
|
131
|
-
| title | ✅ | Ticket title |
|
|
132
|
-
| description | | What to implement |
|
|
133
|
-
| complexity | | small \\| medium \\| large \\| xlarge |
|
|
134
|
-
| acceptanceCriteria | | Success criteria (array of strings) |
|
|
135
|
-
| implementation | | Steps, files to create/modify |
|
|
136
|
-
| technicalDetails | | Approach, stack, endpoints |
|
|
137
|
-
| codeReferences | | Code snippets to guide implementation |
|
|
138
|
-
| typeReferences | | Type definitions to implement |
|
|
139
|
-
| dependsOn | | Ticket IDs that must complete first |
|
|
140
|
-
| notes | | Warnings, edge cases, considerations |
|
|
141
|
-
|
|
142
|
-
## Notes
|
|
143
|
-
- Only epicId and title are required
|
|
144
|
-
- Tickets with dependsOn start as 'pending', others as 'ready'
|
|
145
|
-
- codeReferences and typeReferences provide implementation guidance
|
|
146
|
-
- Use /sf-next to start working on ready tickets
|
|
147
|
-
`;
|
|
148
|
-
//# sourceMappingURL=sf-create-tickets.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sf-create-tickets.js","sourceRoot":"","sources":["../../../../src/cli/templates/content/sf-create-tickets.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,yBAAyB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6IxC,CAAC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SF-Epic Command Template
|
|
3
|
-
*
|
|
4
|
-
* Template for viewing epic details and progress.
|
|
5
|
-
*/
|
|
6
|
-
export declare const SF_EPIC_CONTENT = "# View Epic (SpecForge)\n\nView detailed information about a specific epic and its progress.\n\n## Arguments\n- `$ARGUMENTS` - Required: Epic ID (e.g., E1)\n\n## Task\n\n### 1. Get Epic Details\n\n**MCP Calls:**\n```typescript\nget_epic($ARGUMENTS)\nget_specification(epic.specificationId)\nlist_tickets({ epicId: $ARGUMENTS })\n```\n\n### 2. Calculate Progress\n\n**Logic:**\n- Count tickets by status\n- Calculate completion percentage\n- Identify blockers\n- Track velocity\n\n### 3. Display Epic Overview\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\nEPIC: E{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\n{title}\n\nSpecification: {specTitle}\nProgress: {done}/{total} ({percentage}%)\nStatus: {status}\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\nTICKETS\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} \u2502 done\n\u2192 E{n}-T{m} \u2502 {title} \u2502 in_progress\n\u25CB E{n}-T{m} \u2502 {title} \u2502 ready\n\u2297 E{n}-T{m} \u2502 {title} \u2502 blocked\n\nPATTERNS\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{epicPatterns}\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-next to continue implementation\n```\n\n## Notes\n- Shows all tickets in epic\n- Displays epic-level patterns\n- Use /sf-ticket-implementation <id> to work on specific ticket\n";
|
|
7
|
-
//# sourceMappingURL=sf-epic.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sf-epic.d.ts","sourceRoot":"","sources":["../../../../src/cli/templates/content/sf-epic.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,eAAe,wnGA8D3B,CAAC"}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SF-Epic Command Template
|
|
3
|
-
*
|
|
4
|
-
* Template for viewing epic details and progress.
|
|
5
|
-
*/
|
|
6
|
-
export const SF_EPIC_CONTENT = `# View Epic (SpecForge)
|
|
7
|
-
|
|
8
|
-
View detailed information about a specific epic and its progress.
|
|
9
|
-
|
|
10
|
-
## Arguments
|
|
11
|
-
- \`$ARGUMENTS\` - Required: Epic ID (e.g., E1)
|
|
12
|
-
|
|
13
|
-
## Task
|
|
14
|
-
|
|
15
|
-
### 1. Get Epic Details
|
|
16
|
-
|
|
17
|
-
**MCP Calls:**
|
|
18
|
-
\`\`\`typescript
|
|
19
|
-
get_epic($ARGUMENTS)
|
|
20
|
-
get_specification(epic.specificationId)
|
|
21
|
-
list_tickets({ epicId: $ARGUMENTS })
|
|
22
|
-
\`\`\`
|
|
23
|
-
|
|
24
|
-
### 2. Calculate Progress
|
|
25
|
-
|
|
26
|
-
**Logic:**
|
|
27
|
-
- Count tickets by status
|
|
28
|
-
- Calculate completion percentage
|
|
29
|
-
- Identify blockers
|
|
30
|
-
- Track velocity
|
|
31
|
-
|
|
32
|
-
### 3. Display Epic Overview
|
|
33
|
-
|
|
34
|
-
**Output:**
|
|
35
|
-
\`\`\`
|
|
36
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
37
|
-
EPIC: E{n}
|
|
38
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
39
|
-
{title}
|
|
40
|
-
|
|
41
|
-
Specification: {specTitle}
|
|
42
|
-
Progress: {done}/{total} ({percentage}%)
|
|
43
|
-
Status: {status}
|
|
44
|
-
|
|
45
|
-
DESCRIPTION
|
|
46
|
-
─────────────────────────────────────────────────────────────────
|
|
47
|
-
{description}
|
|
48
|
-
|
|
49
|
-
TICKETS
|
|
50
|
-
─────────────────────────────────────────────────────────────────
|
|
51
|
-
✓ E{n}-T{m} │ {title} │ done
|
|
52
|
-
→ E{n}-T{m} │ {title} │ in_progress
|
|
53
|
-
○ E{n}-T{m} │ {title} │ ready
|
|
54
|
-
⊗ E{n}-T{m} │ {title} │ blocked
|
|
55
|
-
|
|
56
|
-
PATTERNS
|
|
57
|
-
─────────────────────────────────────────────────────────────────
|
|
58
|
-
{epicPatterns}
|
|
59
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
60
|
-
|
|
61
|
-
Next: Run /sf-next to continue implementation
|
|
62
|
-
\`\`\`
|
|
63
|
-
|
|
64
|
-
## Notes
|
|
65
|
-
- Shows all tickets in epic
|
|
66
|
-
- Displays epic-level patterns
|
|
67
|
-
- Use /sf-ticket-implementation <id> to work on specific ticket
|
|
68
|
-
`;
|
|
69
|
-
//# sourceMappingURL=sf-epic.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sf-epic.js","sourceRoot":"","sources":["../../../../src/cli/templates/content/sf-epic.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8D9B,CAAC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SF-Import-Plan Command Template
|
|
3
|
-
*
|
|
4
|
-
* Template for transforming a plan into a complete SpecForge specification.
|
|
5
|
-
*/
|
|
6
|
-
export declare const SF_IMPORT_PLAN_CONTENT = "# Import Plan (SpecForge)\n\nTransform a plan document into a complete SpecForge specification with epics and tickets.\n\n## Arguments\n- `$ARGUMENTS` - Required: Path to plan markdown file\n\n## Task\n\n### 1. Read and Parse Plan\n\n**Logic:**\n- Read file at $ARGUMENTS\n- Extract specification metadata\n- Parse epic sections\n- Extract ticket information\n- Identify patterns and guardrails\n\n### 2. Create Specification\n\n**MCP Calls:**\n```typescript\ncreate_specification({\n title: extractedTitle,\n description: extractedDescription,\n metadata: extractedMetadata\n})\n```\n\n### 3. Create Epics and Tickets\n\n**MCP Calls:**\n```typescript\n// For each epic in plan\nfor (const epic of epics) {\n const epicId = await create_epic({\n specificationId,\n title: epic.title,\n description: epic.description\n })\n\n // For each ticket in epic\n for (const ticket of epic.tickets) {\n await create_ticket({\n epicId,\n title: ticket.title,\n description: ticket.description,\n dependencies: ticket.dependencies\n })\n }\n}\n```\n\n### 4. Display Import 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\nPLAN IMPORT 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\nSpecification: {title}\nID: {specificationId}\n\nCREATED\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\nEpics: {epicCount}\nTickets: {ticketCount}\n\nSTRUCTURE\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 {ticketCount} tickets\nE2 \u2502 {title} \u2502 {ticketCount} tickets\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-init {specificationId} to start work\n```\n\n## Notes\n- Automatically creates full ticket system from plan\n- Preserves epic and ticket structure\n- Use /sf-init to begin implementation\n";
|
|
7
|
-
//# sourceMappingURL=sf-import.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sf-import.d.ts","sourceRoot":"","sources":["../../../../src/cli/templates/content/sf-import.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,sBAAsB,gtGAiFlC,CAAC"}
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SF-Import-Plan Command Template
|
|
3
|
-
*
|
|
4
|
-
* Template for transforming a plan into a complete SpecForge specification.
|
|
5
|
-
*/
|
|
6
|
-
export const SF_IMPORT_PLAN_CONTENT = `# Import Plan (SpecForge)
|
|
7
|
-
|
|
8
|
-
Transform a plan document into a complete SpecForge specification with epics and tickets.
|
|
9
|
-
|
|
10
|
-
## Arguments
|
|
11
|
-
- \`$ARGUMENTS\` - Required: Path to plan markdown file
|
|
12
|
-
|
|
13
|
-
## Task
|
|
14
|
-
|
|
15
|
-
### 1. Read and Parse Plan
|
|
16
|
-
|
|
17
|
-
**Logic:**
|
|
18
|
-
- Read file at $ARGUMENTS
|
|
19
|
-
- Extract specification metadata
|
|
20
|
-
- Parse epic sections
|
|
21
|
-
- Extract ticket information
|
|
22
|
-
- Identify patterns and guardrails
|
|
23
|
-
|
|
24
|
-
### 2. Create Specification
|
|
25
|
-
|
|
26
|
-
**MCP Calls:**
|
|
27
|
-
\`\`\`typescript
|
|
28
|
-
create_specification({
|
|
29
|
-
title: extractedTitle,
|
|
30
|
-
description: extractedDescription,
|
|
31
|
-
metadata: extractedMetadata
|
|
32
|
-
})
|
|
33
|
-
\`\`\`
|
|
34
|
-
|
|
35
|
-
### 3. Create Epics and Tickets
|
|
36
|
-
|
|
37
|
-
**MCP Calls:**
|
|
38
|
-
\`\`\`typescript
|
|
39
|
-
// For each epic in plan
|
|
40
|
-
for (const epic of epics) {
|
|
41
|
-
const epicId = await create_epic({
|
|
42
|
-
specificationId,
|
|
43
|
-
title: epic.title,
|
|
44
|
-
description: epic.description
|
|
45
|
-
})
|
|
46
|
-
|
|
47
|
-
// For each ticket in epic
|
|
48
|
-
for (const ticket of epic.tickets) {
|
|
49
|
-
await create_ticket({
|
|
50
|
-
epicId,
|
|
51
|
-
title: ticket.title,
|
|
52
|
-
description: ticket.description,
|
|
53
|
-
dependencies: ticket.dependencies
|
|
54
|
-
})
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
\`\`\`
|
|
58
|
-
|
|
59
|
-
### 4. Display Import Results
|
|
60
|
-
|
|
61
|
-
**Output:**
|
|
62
|
-
\`\`\`
|
|
63
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
64
|
-
PLAN IMPORT COMPLETE
|
|
65
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
66
|
-
Specification: {title}
|
|
67
|
-
ID: {specificationId}
|
|
68
|
-
|
|
69
|
-
CREATED
|
|
70
|
-
─────────────────────────────────────────────────────────────────
|
|
71
|
-
Epics: {epicCount}
|
|
72
|
-
Tickets: {ticketCount}
|
|
73
|
-
|
|
74
|
-
STRUCTURE
|
|
75
|
-
─────────────────────────────────────────────────────────────────
|
|
76
|
-
E1 │ {title} │ {ticketCount} tickets
|
|
77
|
-
E2 │ {title} │ {ticketCount} tickets
|
|
78
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
79
|
-
|
|
80
|
-
Next: Run /sf-init {specificationId} to start work
|
|
81
|
-
\`\`\`
|
|
82
|
-
|
|
83
|
-
## Notes
|
|
84
|
-
- Automatically creates full ticket system from plan
|
|
85
|
-
- Preserves epic and ticket structure
|
|
86
|
-
- Use /sf-init to begin implementation
|
|
87
|
-
`;
|
|
88
|
-
//# sourceMappingURL=sf-import.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sf-import.js","sourceRoot":"","sources":["../../../../src/cli/templates/content/sf-import.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiFrC,CAAC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SF-Next Command Template
|
|
3
|
-
*
|
|
4
|
-
* Template for quick starting the next ready ticket.
|
|
5
|
-
*/
|
|
6
|
-
export declare const SF_NEXT_CONTENT = "# Quick Start Next Ticket (SpecForge)\n\nAutomatically find and start the next ready ticket for implementation.\n\n## Task\n\n### 1. Find Next Ready Ticket\n\n**MCP Calls:**\n```typescript\nget_working_context()\nlist_tickets({\n specificationId,\n status: 'ready',\n sortBy: 'priority'\n})\n```\n\n### 2. Set Ticket Context\n\n**MCP Calls:**\n```typescript\nset_working_context({\n ticketId: nextTicket.id\n})\nupdate_ticket({\n ticketId: nextTicket.id,\n status: 'in_progress'\n})\n```\n\n### 3. Display Ticket Details\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\nSTARTING: E{n}-T{m}\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}\nPriority: {priority}\nEpic: E{n} - {epicTitle}\nDependencies: {depCount} completed\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\nACCEPTANCE CRITERIA\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\u25A1 {criterion1}\n\u25A1 {criterion2}\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\nReady to implement!\n```\n\n## Notes\n- Automatically selects highest priority ready ticket\n- Updates ticket status to in_progress\n- Sets working context to selected ticket\n";
|
|
7
|
-
//# sourceMappingURL=sf-next.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sf-next.d.ts","sourceRoot":"","sources":["../../../../src/cli/templates/content/sf-next.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,eAAe,gmFA4D3B,CAAC"}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SF-Next Command Template
|
|
3
|
-
*
|
|
4
|
-
* Template for quick starting the next ready ticket.
|
|
5
|
-
*/
|
|
6
|
-
export const SF_NEXT_CONTENT = `# Quick Start Next Ticket (SpecForge)
|
|
7
|
-
|
|
8
|
-
Automatically find and start the next ready ticket for implementation.
|
|
9
|
-
|
|
10
|
-
## Task
|
|
11
|
-
|
|
12
|
-
### 1. Find Next Ready Ticket
|
|
13
|
-
|
|
14
|
-
**MCP Calls:**
|
|
15
|
-
\`\`\`typescript
|
|
16
|
-
get_working_context()
|
|
17
|
-
list_tickets({
|
|
18
|
-
specificationId,
|
|
19
|
-
status: 'ready',
|
|
20
|
-
sortBy: 'priority'
|
|
21
|
-
})
|
|
22
|
-
\`\`\`
|
|
23
|
-
|
|
24
|
-
### 2. Set Ticket Context
|
|
25
|
-
|
|
26
|
-
**MCP Calls:**
|
|
27
|
-
\`\`\`typescript
|
|
28
|
-
set_working_context({
|
|
29
|
-
ticketId: nextTicket.id
|
|
30
|
-
})
|
|
31
|
-
update_ticket({
|
|
32
|
-
ticketId: nextTicket.id,
|
|
33
|
-
status: 'in_progress'
|
|
34
|
-
})
|
|
35
|
-
\`\`\`
|
|
36
|
-
|
|
37
|
-
### 3. Display Ticket Details
|
|
38
|
-
|
|
39
|
-
**Output:**
|
|
40
|
-
\`\`\`
|
|
41
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
42
|
-
STARTING: E{n}-T{m}
|
|
43
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
44
|
-
Title: {title}
|
|
45
|
-
Priority: {priority}
|
|
46
|
-
Epic: E{n} - {epicTitle}
|
|
47
|
-
Dependencies: {depCount} completed
|
|
48
|
-
|
|
49
|
-
DESCRIPTION
|
|
50
|
-
─────────────────────────────────────────────────────────────────
|
|
51
|
-
{description}
|
|
52
|
-
|
|
53
|
-
ACCEPTANCE CRITERIA
|
|
54
|
-
─────────────────────────────────────────────────────────────────
|
|
55
|
-
□ {criterion1}
|
|
56
|
-
□ {criterion2}
|
|
57
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
58
|
-
|
|
59
|
-
Ready to implement!
|
|
60
|
-
\`\`\`
|
|
61
|
-
|
|
62
|
-
## Notes
|
|
63
|
-
- Automatically selects highest priority ready ticket
|
|
64
|
-
- Updates ticket status to in_progress
|
|
65
|
-
- Sets working context to selected ticket
|
|
66
|
-
`;
|
|
67
|
-
//# sourceMappingURL=sf-next.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sf-next.js","sourceRoot":"","sources":["../../../../src/cli/templates/content/sf-next.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4D9B,CAAC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SF-Review Command Template
|
|
3
|
-
*
|
|
4
|
-
* Template for reviewing accomplishments and progress analysis.
|
|
5
|
-
*/
|
|
6
|
-
export declare const SF_REVIEW_CONTENT = "# Review Accomplishments (SpecForge)\n\nComprehensive review of implementation progress and accomplishments.\n\n## Arguments\n- `$ARGUMENTS` - Optional: Specification ID to review\n\n## Task\n\n### 1. Get Specification Context\n\n**MCP Calls:**\n```typescript\nget_working_context()\n\nif ($ARGUMENTS) {\n set_working_context({ specificationId: \"$ARGUMENTS\" })\n}\n\nget_specification(specificationId)\n```\n\n### 2. Load Implementation Data\n\n**MCP Calls:**\n```typescript\nlist_epics({ specificationId })\nlist_tickets({ specificationId })\n```\n\n### 3. Display Review 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\nIMPLEMENTATION REVIEW\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}\nOverall: {done}/{total} ({percentage}%)\n\nPROGRESS BY EPIC\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\nE{n} \u2502 {title} \u2502 {ticketsDone}/{ticketsTotal} ({pct}%)\n\nRECENTLY COMPLETED\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} \u2502 {completedDate}\n\nVELOCITY\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\nLast 7 days: {ticketsCompleted} tickets\nAverage: {avgPerDay} tickets/day\nRemaining: ~{estimatedDays} days\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- Shows completed tickets and velocity metrics\n- Provides estimated completion timeline\n- Use /sf-status for current state\n";
|
|
7
|
-
//# sourceMappingURL=sf-review.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sf-review.d.ts","sourceRoot":"","sources":["../../../../src/cli/templates/content/sf-review.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,iBAAiB,upGA4D7B,CAAC"}
|