@specforge/mcp 3.3.5 → 3.3.8
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/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 +84 -0
- 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,67 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SF-Review Command Template
|
|
3
|
-
*
|
|
4
|
-
* Template for reviewing accomplishments and progress analysis.
|
|
5
|
-
*/
|
|
6
|
-
export const SF_REVIEW_CONTENT = `# Review Accomplishments (SpecForge)
|
|
7
|
-
|
|
8
|
-
Comprehensive review of implementation progress and accomplishments.
|
|
9
|
-
|
|
10
|
-
## Arguments
|
|
11
|
-
- \`$ARGUMENTS\` - Optional: Specification ID to review
|
|
12
|
-
|
|
13
|
-
## Task
|
|
14
|
-
|
|
15
|
-
### 1. Get Specification Context
|
|
16
|
-
|
|
17
|
-
**MCP Calls:**
|
|
18
|
-
\`\`\`typescript
|
|
19
|
-
get_working_context()
|
|
20
|
-
|
|
21
|
-
if ($ARGUMENTS) {
|
|
22
|
-
set_working_context({ specificationId: "$ARGUMENTS" })
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
get_specification(specificationId)
|
|
26
|
-
\`\`\`
|
|
27
|
-
|
|
28
|
-
### 2. Load Implementation Data
|
|
29
|
-
|
|
30
|
-
**MCP Calls:**
|
|
31
|
-
\`\`\`typescript
|
|
32
|
-
list_epics({ specificationId })
|
|
33
|
-
list_tickets({ specificationId })
|
|
34
|
-
\`\`\`
|
|
35
|
-
|
|
36
|
-
### 3. Display Review Summary
|
|
37
|
-
|
|
38
|
-
**Output:**
|
|
39
|
-
\`\`\`
|
|
40
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
41
|
-
IMPLEMENTATION REVIEW
|
|
42
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
43
|
-
Specification: {title}
|
|
44
|
-
Overall: {done}/{total} ({percentage}%)
|
|
45
|
-
|
|
46
|
-
PROGRESS BY EPIC
|
|
47
|
-
─────────────────────────────────────────────────────────────────
|
|
48
|
-
E{n} │ {title} │ {ticketsDone}/{ticketsTotal} ({pct}%)
|
|
49
|
-
|
|
50
|
-
RECENTLY COMPLETED
|
|
51
|
-
─────────────────────────────────────────────────────────────────
|
|
52
|
-
✓ E{n}-T{m} │ {title} │ {completedDate}
|
|
53
|
-
|
|
54
|
-
VELOCITY
|
|
55
|
-
─────────────────────────────────────────────────────────────────
|
|
56
|
-
Last 7 days: {ticketsCompleted} tickets
|
|
57
|
-
Average: {avgPerDay} tickets/day
|
|
58
|
-
Remaining: ~{estimatedDays} days
|
|
59
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
60
|
-
\`\`\`
|
|
61
|
-
|
|
62
|
-
## Notes
|
|
63
|
-
- Shows completed tickets and velocity metrics
|
|
64
|
-
- Provides estimated completion timeline
|
|
65
|
-
- Use /sf-status for current state
|
|
66
|
-
`;
|
|
67
|
-
//# sourceMappingURL=sf-review.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sf-review.js","sourceRoot":"","sources":["../../../../src/cli/templates/content/sf-review.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4DhC,CAAC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SF-Ticket-Implementation Command Template
|
|
3
|
-
*
|
|
4
|
-
* Template for implementing a specific ticket with streamlined workflow.
|
|
5
|
-
*/
|
|
6
|
-
export declare const SF_TICKET_IMPLEMENTATION_CONTENT = "# Implement Ticket (SpecForge)\n\nImplement a specific ticket with full context and streamlined workflow.\n\n## Arguments\n- `$ARGUMENTS` - Optional: Ticket ID to implement (e.g., E1-T3)\n\n## Task\n\n### 1. Select Ticket\n\n**MCP Calls:**\n```typescript\n// If no arguments, prompt user\nif (!$ARGUMENTS) {\n list_tickets({\n specificationId,\n status: 'ready'\n })\n // Display selection menu\n}\n\n// Get ticket details\nget_ticket($ARGUMENTS || selectedId)\n```\n\n### 2. Verify Dependencies\n\n**MCP Calls:**\n```typescript\n// Check all dependencies are completed\nfor (const depId of ticket.dependencies) {\n get_ticket(depId)\n // Verify status is 'done'\n}\n```\n\n### 3. Set Context and Start\n\n**MCP Calls:**\n```typescript\nset_working_context({ ticketId: ticket.id })\nupdate_ticket({\n ticketId: ticket.id,\n status: 'in_progress'\n})\n```\n\n### 4. Display Implementation View\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\nIMPLEMENTING: 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\n{title}\n\n{fullDescription}\n{implementationGuidance}\n{acceptanceCriteria}\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\nBegin implementation\n```\n\n## Notes\n- Verifies all dependencies are completed\n- Provides full ticket context for implementation\n- Use /sf-commit when complete\n";
|
|
7
|
-
//# sourceMappingURL=sf-ticket.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sf-ticket.d.ts","sourceRoot":"","sources":["../../../../src/cli/templates/content/sf-ticket.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,gCAAgC,4jEAqE5C,CAAC"}
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SF-Ticket-Implementation Command Template
|
|
3
|
-
*
|
|
4
|
-
* Template for implementing a specific ticket with streamlined workflow.
|
|
5
|
-
*/
|
|
6
|
-
export const SF_TICKET_IMPLEMENTATION_CONTENT = `# Implement Ticket (SpecForge)
|
|
7
|
-
|
|
8
|
-
Implement a specific ticket with full context and streamlined workflow.
|
|
9
|
-
|
|
10
|
-
## Arguments
|
|
11
|
-
- \`$ARGUMENTS\` - Optional: Ticket ID to implement (e.g., E1-T3)
|
|
12
|
-
|
|
13
|
-
## Task
|
|
14
|
-
|
|
15
|
-
### 1. Select Ticket
|
|
16
|
-
|
|
17
|
-
**MCP Calls:**
|
|
18
|
-
\`\`\`typescript
|
|
19
|
-
// If no arguments, prompt user
|
|
20
|
-
if (!$ARGUMENTS) {
|
|
21
|
-
list_tickets({
|
|
22
|
-
specificationId,
|
|
23
|
-
status: 'ready'
|
|
24
|
-
})
|
|
25
|
-
// Display selection menu
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
// Get ticket details
|
|
29
|
-
get_ticket($ARGUMENTS || selectedId)
|
|
30
|
-
\`\`\`
|
|
31
|
-
|
|
32
|
-
### 2. Verify Dependencies
|
|
33
|
-
|
|
34
|
-
**MCP Calls:**
|
|
35
|
-
\`\`\`typescript
|
|
36
|
-
// Check all dependencies are completed
|
|
37
|
-
for (const depId of ticket.dependencies) {
|
|
38
|
-
get_ticket(depId)
|
|
39
|
-
// Verify status is 'done'
|
|
40
|
-
}
|
|
41
|
-
\`\`\`
|
|
42
|
-
|
|
43
|
-
### 3. Set Context and Start
|
|
44
|
-
|
|
45
|
-
**MCP Calls:**
|
|
46
|
-
\`\`\`typescript
|
|
47
|
-
set_working_context({ ticketId: ticket.id })
|
|
48
|
-
update_ticket({
|
|
49
|
-
ticketId: ticket.id,
|
|
50
|
-
status: 'in_progress'
|
|
51
|
-
})
|
|
52
|
-
\`\`\`
|
|
53
|
-
|
|
54
|
-
### 4. Display Implementation View
|
|
55
|
-
|
|
56
|
-
**Output:**
|
|
57
|
-
\`\`\`
|
|
58
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
59
|
-
IMPLEMENTING: E{n}-T{m}
|
|
60
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
61
|
-
{title}
|
|
62
|
-
|
|
63
|
-
{fullDescription}
|
|
64
|
-
{implementationGuidance}
|
|
65
|
-
{acceptanceCriteria}
|
|
66
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
67
|
-
|
|
68
|
-
Begin implementation
|
|
69
|
-
\`\`\`
|
|
70
|
-
|
|
71
|
-
## Notes
|
|
72
|
-
- Verifies all dependencies are completed
|
|
73
|
-
- Provides full ticket context for implementation
|
|
74
|
-
- Use /sf-commit when complete
|
|
75
|
-
`;
|
|
76
|
-
//# sourceMappingURL=sf-ticket.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sf-ticket.js","sourceRoot":"","sources":["../../../../src/cli/templates/content/sf-ticket.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,gCAAgC,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqE/C,CAAC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SF-Validate Command Template
|
|
3
|
-
*
|
|
4
|
-
* Template for validating ticket system health.
|
|
5
|
-
*/
|
|
6
|
-
export declare const SF_VALIDATE_CONTENT = "# Validate Ticket System (SpecForge)\n\nRun comprehensive health checks on the ticket system.\n\n## Arguments\n- `$ARGUMENTS` - Optional: Specification ID to validate\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 and Validate Data\n\n**MCP Calls:**\n```typescript\nlist_epics({ specificationId })\nlist_tickets({ specificationId })\n\n// Validate each ticket\nfor (const ticket of tickets) {\n get_ticket(ticket.id)\n // Check dependencies, status, fields\n}\n```\n\n### 3. Display Validation 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\nSYSTEM VALIDATION\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\nCHECKS\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 All epics have valid structure\n\u2713 All tickets have required fields\n\u2713 Dependency graph is acyclic\n\u2713 Status transitions are valid\n\u2713 No orphaned tickets\n\nWARNINGS\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\u26A0 E{n}-T{m}: Missing acceptance criteria\n\u26A0 E{n}-T{m}: Long dependency chain (depth {n})\n\nERRORS\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}: Circular dependency detected\n\u2717 E{n}-T{m}: Invalid dependency reference\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\nStatus: {errors ? 'FAILED' : 'PASSED'}\n```\n\n## Notes\n- Checks dependency graph integrity\n- Validates ticket structure and fields\n- Reports warnings and errors\n";
|
|
7
|
-
//# sourceMappingURL=sf-validate.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sf-validate.d.ts","sourceRoot":"","sources":["../../../../src/cli/templates/content/sf-validate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,mBAAmB,s2GAuE/B,CAAC"}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SF-Validate Command Template
|
|
3
|
-
*
|
|
4
|
-
* Template for validating ticket system health.
|
|
5
|
-
*/
|
|
6
|
-
export const SF_VALIDATE_CONTENT = `# Validate Ticket System (SpecForge)
|
|
7
|
-
|
|
8
|
-
Run comprehensive health checks on the ticket system.
|
|
9
|
-
|
|
10
|
-
## Arguments
|
|
11
|
-
- \`$ARGUMENTS\` - Optional: Specification ID to validate
|
|
12
|
-
|
|
13
|
-
## Task
|
|
14
|
-
|
|
15
|
-
### 1. Get Specification Context
|
|
16
|
-
|
|
17
|
-
**MCP Calls:**
|
|
18
|
-
\`\`\`typescript
|
|
19
|
-
get_working_context()
|
|
20
|
-
|
|
21
|
-
if ($ARGUMENTS) {
|
|
22
|
-
set_working_context({ specificationId: "$ARGUMENTS" })
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
get_specification(specificationId)
|
|
26
|
-
\`\`\`
|
|
27
|
-
|
|
28
|
-
### 2. Load and Validate Data
|
|
29
|
-
|
|
30
|
-
**MCP Calls:**
|
|
31
|
-
\`\`\`typescript
|
|
32
|
-
list_epics({ specificationId })
|
|
33
|
-
list_tickets({ specificationId })
|
|
34
|
-
|
|
35
|
-
// Validate each ticket
|
|
36
|
-
for (const ticket of tickets) {
|
|
37
|
-
get_ticket(ticket.id)
|
|
38
|
-
// Check dependencies, status, fields
|
|
39
|
-
}
|
|
40
|
-
\`\`\`
|
|
41
|
-
|
|
42
|
-
### 3. Display Validation Results
|
|
43
|
-
|
|
44
|
-
**Output:**
|
|
45
|
-
\`\`\`
|
|
46
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
47
|
-
SYSTEM VALIDATION
|
|
48
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
49
|
-
Specification: {title}
|
|
50
|
-
|
|
51
|
-
CHECKS
|
|
52
|
-
─────────────────────────────────────────────────────────────────
|
|
53
|
-
✓ All epics have valid structure
|
|
54
|
-
✓ All tickets have required fields
|
|
55
|
-
✓ Dependency graph is acyclic
|
|
56
|
-
✓ Status transitions are valid
|
|
57
|
-
✓ No orphaned tickets
|
|
58
|
-
|
|
59
|
-
WARNINGS
|
|
60
|
-
─────────────────────────────────────────────────────────────────
|
|
61
|
-
⚠ E{n}-T{m}: Missing acceptance criteria
|
|
62
|
-
⚠ E{n}-T{m}: Long dependency chain (depth {n})
|
|
63
|
-
|
|
64
|
-
ERRORS
|
|
65
|
-
─────────────────────────────────────────────────────────────────
|
|
66
|
-
✗ E{n}-T{m}: Circular dependency detected
|
|
67
|
-
✗ E{n}-T{m}: Invalid dependency reference
|
|
68
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
69
|
-
|
|
70
|
-
Status: {errors ? 'FAILED' : 'PASSED'}
|
|
71
|
-
\`\`\`
|
|
72
|
-
|
|
73
|
-
## Notes
|
|
74
|
-
- Checks dependency graph integrity
|
|
75
|
-
- Validates ticket structure and fields
|
|
76
|
-
- Reports warnings and errors
|
|
77
|
-
`;
|
|
78
|
-
//# sourceMappingURL=sf-validate.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sf-validate.js","sourceRoot":"","sources":["../../../../src/cli/templates/content/sf-validate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuElC,CAAC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
-
import { ConsolidatedToolArgs, OperationHandler } from './types.js';
|
|
3
|
-
import { ApiClient } from '../../client/api-client.js';
|
|
4
|
-
export declare const contextTool: Tool;
|
|
5
|
-
export declare function createContextOperations(apiClient: ApiClient): Record<string, OperationHandler>;
|
|
6
|
-
export declare function createContextHandler(apiClient: ApiClient): (args: ConsolidatedToolArgs, userId: string) => Promise<unknown>;
|
|
7
|
-
//# sourceMappingURL=context.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/tools/core/context.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD,eAAO,MAAM,WAAW,EAAE,IA+BzB,CAAC;AAUF,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAgC9F;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,SAAS,oEAGxD"}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
// mcp/src/tools/core/context.ts
|
|
2
|
-
import { createOperationRouter } from './router.js';
|
|
3
|
-
export const contextTool = {
|
|
4
|
-
name: 'context',
|
|
5
|
-
description: `Get and manage context. Operations:
|
|
6
|
-
- working: Get current working context (project scope)
|
|
7
|
-
- implementation: Get implementation context for a ticket
|
|
8
|
-
- set: Set/update current working context`,
|
|
9
|
-
inputSchema: {
|
|
10
|
-
type: 'object',
|
|
11
|
-
properties: {
|
|
12
|
-
operation: {
|
|
13
|
-
type: 'string',
|
|
14
|
-
enum: ['working', 'implementation', 'set'],
|
|
15
|
-
description: 'The operation to perform',
|
|
16
|
-
},
|
|
17
|
-
// For set working context
|
|
18
|
-
projectId: { type: 'string', description: 'Project ID' },
|
|
19
|
-
specificationId: { type: 'string', description: 'Specification ID' },
|
|
20
|
-
epicId: { type: 'string', description: 'Epic ID' },
|
|
21
|
-
// For implementation context
|
|
22
|
-
ticketId: { type: 'string', description: 'Ticket ID for implementation context' },
|
|
23
|
-
depth: {
|
|
24
|
-
type: 'string',
|
|
25
|
-
enum: ['minimal', 'standard', 'full'],
|
|
26
|
-
description: 'Context depth level',
|
|
27
|
-
},
|
|
28
|
-
// Response options
|
|
29
|
-
format: { type: 'string', enum: ['json', 'toon'] },
|
|
30
|
-
responseMode: { type: 'string', enum: ['full', 'minimal', 'summary', 'id-only'] },
|
|
31
|
-
},
|
|
32
|
-
required: ['operation'],
|
|
33
|
-
},
|
|
34
|
-
};
|
|
35
|
-
function validateRequired(args, ...fields) {
|
|
36
|
-
for (const field of fields) {
|
|
37
|
-
if (args[field] === undefined || args[field] === null || args[field] === '') {
|
|
38
|
-
throw new Error(`${field} is required`);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
export function createContextOperations(apiClient) {
|
|
43
|
-
return {
|
|
44
|
-
working: async (_args, _userId) => {
|
|
45
|
-
// Note: In actual implementation, this uses client.getSessionId()
|
|
46
|
-
// For the consolidated tool, we pass through to the API
|
|
47
|
-
return await apiClient.call('get_working_context', {});
|
|
48
|
-
},
|
|
49
|
-
implementation: async (args, _userId) => {
|
|
50
|
-
validateRequired(args, 'ticketId');
|
|
51
|
-
const depth = args.depth || 'standard';
|
|
52
|
-
return await apiClient.call('get_implementation_context', {
|
|
53
|
-
ticketId: args.ticketId,
|
|
54
|
-
depth,
|
|
55
|
-
});
|
|
56
|
-
},
|
|
57
|
-
set: async (args, _userId) => {
|
|
58
|
-
// At least one context field should be provided
|
|
59
|
-
if (!args.projectId && !args.specificationId && !args.epicId && !args.ticketId) {
|
|
60
|
-
throw new Error('At least one of projectId, specificationId, epicId, or ticketId is required');
|
|
61
|
-
}
|
|
62
|
-
return await apiClient.call('set_working_context', {
|
|
63
|
-
projectId: args.projectId,
|
|
64
|
-
specificationId: args.specificationId,
|
|
65
|
-
epicId: args.epicId,
|
|
66
|
-
ticketId: args.ticketId,
|
|
67
|
-
});
|
|
68
|
-
},
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
export function createContextHandler(apiClient) {
|
|
72
|
-
const operations = createContextOperations(apiClient);
|
|
73
|
-
return createOperationRouter('context', operations);
|
|
74
|
-
}
|
|
75
|
-
//# sourceMappingURL=context.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/tools/core/context.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/core/job.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
-
import { ConsolidatedToolArgs, OperationHandler } from './types.js';
|
|
3
|
-
import { ApiClient } from '../../client/api-client.js';
|
|
4
|
-
export declare const jobTool: Tool;
|
|
5
|
-
export declare function createJobOperations(apiClient: ApiClient): Record<string, OperationHandler>;
|
|
6
|
-
export declare function createJobHandler(apiClient: ApiClient): (args: ConsolidatedToolArgs, userId: string) => Promise<unknown>;
|
|
7
|
-
//# sourceMappingURL=job.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"job.d.ts","sourceRoot":"","sources":["../../../src/tools/core/job.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD,eAAO,MAAM,OAAO,EAAE,IAmBrB,CAAC;AAUF,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAgB1F;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,oEAGpD"}
|
package/dist/tools/core/job.js
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
// mcp/src/tools/core/job.ts
|
|
2
|
-
import { createOperationRouter } from './router.js';
|
|
3
|
-
export const jobTool = {
|
|
4
|
-
name: 'job',
|
|
5
|
-
description: `Manage async jobs. Operations:
|
|
6
|
-
- status: Get job status
|
|
7
|
-
- cancel: Cancel a running job`,
|
|
8
|
-
inputSchema: {
|
|
9
|
-
type: 'object',
|
|
10
|
-
properties: {
|
|
11
|
-
operation: {
|
|
12
|
-
type: 'string',
|
|
13
|
-
enum: ['status', 'cancel'],
|
|
14
|
-
description: 'The operation to perform',
|
|
15
|
-
},
|
|
16
|
-
jobId: { type: 'string', description: 'Job ID' },
|
|
17
|
-
// Response options
|
|
18
|
-
format: { type: 'string', enum: ['json', 'toon'] },
|
|
19
|
-
},
|
|
20
|
-
required: ['operation'],
|
|
21
|
-
},
|
|
22
|
-
};
|
|
23
|
-
function validateRequired(args, ...fields) {
|
|
24
|
-
for (const field of fields) {
|
|
25
|
-
if (args[field] === undefined || args[field] === null || args[field] === '') {
|
|
26
|
-
throw new Error(`${field} is required`);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
export function createJobOperations(apiClient) {
|
|
31
|
-
return {
|
|
32
|
-
status: async (args, _userId) => {
|
|
33
|
-
validateRequired(args, 'jobId');
|
|
34
|
-
return await apiClient.call('get_job_status', {
|
|
35
|
-
jobId: args.jobId,
|
|
36
|
-
});
|
|
37
|
-
},
|
|
38
|
-
cancel: async (args, _userId) => {
|
|
39
|
-
validateRequired(args, 'jobId');
|
|
40
|
-
return await apiClient.call('cancel_job', {
|
|
41
|
-
jobId: args.jobId,
|
|
42
|
-
});
|
|
43
|
-
},
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
export function createJobHandler(apiClient) {
|
|
47
|
-
const operations = createJobOperations(apiClient);
|
|
48
|
-
return createOperationRouter('job', operations);
|
|
49
|
-
}
|
|
50
|
-
//# sourceMappingURL=job.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"job.js","sourceRoot":"","sources":["../../../src/tools/core/job.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAG5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAIpD,MAAM,CAAC,MAAM,OAAO,GAAS;IAC3B,IAAI,EAAE,KAAK;IACX,WAAW,EAAE;;+BAEgB;IAC7B,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;gBAC1B,WAAW,EAAE,0BAA0B;aACxC;YACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE;YAChD,mBAAmB;YACnB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;SACnD;QACD,QAAQ,EAAE,CAAC,WAAW,CAAC;KACxB;CACF,CAAC;AAEF,SAAS,gBAAgB,CAAC,IAA0B,EAAE,GAAG,MAAgB;IACvE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,cAAc,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,SAAoB;IACtD,OAAO;QACL,MAAM,EAAE,KAAK,EAAE,IAA0B,EAAE,OAAe,EAAE,EAAE;YAC5D,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAChC,OAAO,MAAM,SAAS,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAC5C,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,IAA0B,EAAE,OAAe,EAAE,EAAE;YAC5D,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAChC,OAAO,MAAM,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE;gBACxC,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,SAAoB;IACnD,MAAM,UAAU,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAClD,OAAO,qBAAqB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AAClD,CAAC"}
|