@speclife/mcp-server 0.1.7 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,107 @@
1
+ # @speclife/mcp-server
2
+
3
+ > ⚠️ **DEPRECATED**: This MCP server is deprecated in favor of slash commands.
4
+ > See [Migration Guide](#migration-guide) below.
5
+
6
+ MCP server for SpecLife - provides spec-driven development tools for AI assistants.
7
+
8
+ ## Migration Guide
9
+
10
+ Replace MCP tool calls with slash commands:
11
+
12
+ | MCP Tool | Slash Command | Notes |
13
+ |----------|---------------|-------|
14
+ | `speclife_init` | `/speclife start` | Creates worktree + branch |
15
+ | `speclife_submit` | `/speclife ship` | Commit, push, create PR |
16
+ | `speclife_merge` | `/speclife land` | Merge PR, cleanup, release |
17
+ | `speclife_release` | `/speclife release` | Manual release |
18
+ | `speclife_implement` | `/openspec-apply` | Use OpenSpec for implementation |
19
+ | `speclife_status` | `speclife status` | CLI command |
20
+ | `speclife_list` | `speclife worktree list` | CLI command |
21
+
22
+ ### Why Migrate?
23
+
24
+ 1. **No token configuration**: Slash commands use your editor's @github MCP
25
+ 2. **Better integration**: Works with OpenSpec's existing commands
26
+ 3. **Simpler setup**: No `GITHUB_TOKEN` or `ANTHROPIC_API_KEY` needed
27
+
28
+ ### Setup Slash Commands
29
+
30
+ ```bash
31
+ # Install CLI
32
+ npm install -g @speclife/cli
33
+
34
+ # Initialize project (creates slash commands)
35
+ speclife init
36
+
37
+ # Run AI-guided setup
38
+ /speclife setup
39
+ ```
40
+
41
+ ## Continued Support
42
+
43
+ The MCP server remains available for:
44
+ - CI/automation scenarios
45
+ - Editors without slash command support
46
+ - Gradual migration
47
+
48
+ No breaking changes are planned. The server will continue to work as-is.
49
+
50
+ ## Installation
51
+
52
+ ```bash
53
+ npm install -g @speclife/mcp-server
54
+ ```
55
+
56
+ ## Configuration
57
+
58
+ Add to your MCP configuration:
59
+
60
+ ### Claude Desktop
61
+
62
+ ```json
63
+ {
64
+ "mcpServers": {
65
+ "speclife": {
66
+ "command": "speclife-mcp",
67
+ "env": {
68
+ "GITHUB_TOKEN": "ghp_xxxx"
69
+ }
70
+ }
71
+ }
72
+ }
73
+ ```
74
+
75
+ ### Cursor
76
+
77
+ ```json
78
+ {
79
+ "mcpServers": {
80
+ "speclife": {
81
+ "command": "speclife-mcp",
82
+ "env": {
83
+ "GITHUB_TOKEN": "ghp_xxxx"
84
+ }
85
+ }
86
+ }
87
+ }
88
+ ```
89
+
90
+ ## Available Tools
91
+
92
+ All tools are deprecated. Use slash commands instead.
93
+
94
+ | Tool | Description | Replacement |
95
+ |------|-------------|-------------|
96
+ | `speclife_init` | Create worktree and scaffold proposal | `/speclife start` |
97
+ | `speclife_status` | Show change state and progress | `speclife status` |
98
+ | `speclife_list` | List all active changes | `speclife worktree list` |
99
+ | `speclife_submit` | Commit, push, create PR | `/speclife ship` |
100
+ | `speclife_merge` | Merge PR and cleanup | `/speclife land` |
101
+ | `speclife_implement` | AI-driven implementation | `/openspec-apply` |
102
+ | `speclife_release` | Create release PR | `/speclife release` |
103
+
104
+ ## License
105
+
106
+ MIT
107
+
package/dist/index.d.ts CHANGED
@@ -2,8 +2,20 @@
2
2
  /**
3
3
  * SpecLife MCP Server
4
4
  *
5
- * Exposes spec-driven development workflows as MCP tools
6
- * for AI assistants (Claude Desktop, Cursor).
5
+ * ⚠️ DEPRECATED: This MCP server is deprecated in favor of slash commands.
6
+ *
7
+ * Use /speclife slash commands instead:
8
+ * - /speclife start → replaces speclife_init
9
+ * - /speclife ship → replaces speclife_submit
10
+ * - /speclife land → replaces speclife_merge
11
+ * - /speclife release → replaces speclife_release
12
+ * - /openspec-apply → replaces speclife_implement
13
+ *
14
+ * The MCP server remains available for:
15
+ * - CI/automation scenarios
16
+ * - Editors without slash command support
17
+ *
18
+ * See README.md for migration guide.
7
19
  */
8
20
  export {};
9
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;GAKG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;GAiBG"}
package/dist/index.js CHANGED
@@ -2,8 +2,20 @@
2
2
  /**
3
3
  * SpecLife MCP Server
4
4
  *
5
- * Exposes spec-driven development workflows as MCP tools
6
- * for AI assistants (Claude Desktop, Cursor).
5
+ * ⚠️ DEPRECATED: This MCP server is deprecated in favor of slash commands.
6
+ *
7
+ * Use /speclife slash commands instead:
8
+ * - /speclife start → replaces speclife_init
9
+ * - /speclife ship → replaces speclife_submit
10
+ * - /speclife land → replaces speclife_merge
11
+ * - /speclife release → replaces speclife_release
12
+ * - /openspec-apply → replaces speclife_implement
13
+ *
14
+ * The MCP server remains available for:
15
+ * - CI/automation scenarios
16
+ * - Editors without slash command support
17
+ *
18
+ * See README.md for migration guide.
7
19
  */
8
20
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
9
21
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,qBAAqB;AACrB,aAAa,CAAC,MAAM,CAAC,CAAC;AAEtB,oCAAoC;AACpC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,qBAAqB;AACrB,aAAa,CAAC,MAAM,CAAC,CAAC;AAEtB,oCAAoC;AACpC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"implement.d.ts","sourceRoot":"","sources":["../../src/tools/implement.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAyBzE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoI7D"}
1
+ {"version":3,"file":"implement.d.ts","sourceRoot":"","sources":["../../src/tools/implement.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAyBzE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0H7D"}
@@ -15,7 +15,7 @@ const ImplementArgsSchema = z.object({
15
15
  dryRun: z.boolean().optional().describe("Return the planned prompt/actions without executing (default: false)"),
16
16
  });
17
17
  export function registerImplementTool(server) {
18
- server.tool("speclife_implement", "Implement a change using AI. Supports multiple modes: 'claude-cli' (primary - uses Claude CLI with MCP servers), 'claude-sdk' (fully automated with tool-use), or 'cursor' (opens IDE for manual implementation).", ImplementArgsSchema.shape, async (args) => {
18
+ server.tool("speclife_implement", "[DEPRECATED: Use /openspec-apply slash command instead] Implement a change using AI. Supports multiple modes: 'claude-cli' (primary - uses Claude CLI with MCP servers), 'claude-sdk' (fully automated with tool-use), or 'cursor' (opens IDE for manual implementation).", ImplementArgsSchema.shape, async (args) => {
19
19
  try {
20
20
  const parsed = ImplementArgsSchema.parse(args);
21
21
  const cwd = process.cwd();
@@ -67,35 +67,26 @@ export function registerImplementTool(server) {
67
67
  lines.push('```');
68
68
  }
69
69
  else {
70
- // Show output
70
+ // Show message/output
71
71
  lines.push('## Output');
72
72
  lines.push('');
73
- if (result.output) {
73
+ if (result.message) {
74
74
  // Truncate if very long
75
75
  const maxOutputLength = 3000;
76
- if (result.output.length > maxOutputLength) {
77
- lines.push(result.output.slice(0, maxOutputLength));
78
- lines.push(`... (truncated, ${result.output.length - maxOutputLength} more characters)`);
76
+ if (result.message.length > maxOutputLength) {
77
+ lines.push(result.message.slice(0, maxOutputLength));
78
+ lines.push(`... (truncated, ${result.message.length - maxOutputLength} more characters)`);
79
79
  }
80
80
  else {
81
- lines.push(result.output);
81
+ lines.push(result.message);
82
82
  }
83
83
  }
84
- // Tasks completed
85
- if (result.tasksCompleted.length > 0) {
84
+ // Task summary
85
+ if (result.tasksAttempted > 0 || result.tasksCompleted > 0) {
86
86
  lines.push('');
87
- lines.push('## Tasks Completed');
88
- for (const taskId of result.tasksCompleted) {
89
- lines.push(`- [x] ${taskId}`);
90
- }
91
- }
92
- // Tasks failed
93
- if (result.tasksFailed && result.tasksFailed.length > 0) {
94
- lines.push('');
95
- lines.push('## Tasks Failed');
96
- for (const { taskId, reason } of result.tasksFailed) {
97
- lines.push(`- [ ] ${taskId}: ${reason}`);
98
- }
87
+ lines.push(`## Task Summary`);
88
+ lines.push(`- Attempted: ${result.tasksAttempted}`);
89
+ lines.push(`- Completed: ${result.tasksCompleted}`);
99
90
  }
100
91
  }
101
92
  // Next steps based on mode and status
@@ -1 +1 @@
1
- {"version":3,"file":"implement.js","sourceRoot":"","sources":["../../src/tools/implement.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"implement.js","sourceRoot":"","sources":["../../src/tools/implement.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQzE;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAYrD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAerD"}
@@ -7,6 +7,7 @@ import { registerListTool } from "./list.js";
7
7
  import { registerSubmitTool } from "./submit.js";
8
8
  import { registerMergeTool } from "./merge.js";
9
9
  import { registerImplementTool } from "./implement.js";
10
+ import { registerReleaseTool } from "./release.js";
10
11
  /**
11
12
  * Register all SpecLife tools with the MCP server
12
13
  */
@@ -20,5 +21,7 @@ export function registerTools(server) {
20
21
  registerMergeTool(server);
21
22
  // Phase 3: Implement (includes internal test loop)
22
23
  registerImplementTool(server);
24
+ // Phase 5: Release management
25
+ registerReleaseTool(server);
23
26
  }
24
27
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEvD;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,MAAiB;IAC7C,sBAAsB;IACtB,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzB,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAEzB,4BAA4B;IAC5B,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAE1B,mDAAmD;IACnD,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,MAAiB;IAC7C,sBAAsB;IACtB,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzB,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAEzB,4BAA4B;IAC5B,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAE1B,mDAAmD;IACnD,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAE9B,8BAA8B;IAC9B,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/tools/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAyBzE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuFxD"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/tools/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA2BzE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgFxD"}
@@ -3,16 +3,17 @@
3
3
  *
4
4
  * Initialize a new change: create branch and scaffold proposal
5
5
  */
6
- import { loadConfig, createGitAdapter, createGitHubAdapter, createOpenSpecAdapter, initWorkflow } from "@speclife/core";
6
+ import { loadConfig, createGitAdapter, createOpenSpecAdapter, initWorkflow } from "@speclife/core";
7
7
  import { z } from "zod";
8
8
  const InitArgsSchema = z.object({
9
9
  changeId: z.string().describe("Unique identifier for the change (kebab-case, e.g., 'add-user-auth')"),
10
10
  description: z.string().optional().describe("Brief description of the change (populates proposal.md)"),
11
11
  noWorktree: z.boolean().optional().describe("Disable worktree creation - create branch in current directory instead (default: false)"),
12
12
  skipDraftPR: z.boolean().optional().describe("Skip creating a draft PR (overrides config.createDraftPR)"),
13
+ generateTasks: z.boolean().optional().describe("Use AI to generate implementation tasks based on the description (requires Claude CLI)"),
13
14
  });
14
15
  export function registerInitTool(server) {
15
- server.tool("speclife_init", "Initialize a new change: create worktree (default), scaffold proposal files (proposal.md, tasks.md), and create a draft PR for early visibility", InitArgsSchema.shape, async (args) => {
16
+ server.tool("speclife_init", "[DEPRECATED: Use /speclife start slash command instead] Initialize a new change: create worktree (default), scaffold proposal files (proposal.md, tasks.md), and create a draft PR for early visibility", InitArgsSchema.shape, async (args) => {
16
17
  try {
17
18
  const parsed = InitArgsSchema.parse(args);
18
19
  const cwd = process.cwd();
@@ -23,21 +24,14 @@ export function registerInitTool(server) {
23
24
  projectRoot: cwd,
24
25
  specDir: config.specDir
25
26
  });
26
- // Create GitHub adapter if draft PR creation is enabled
27
- const shouldCreateDraftPR = config.createDraftPR && !parsed.skipDraftPR;
28
- const github = shouldCreateDraftPR
29
- ? createGitHubAdapter({
30
- owner: config.github.owner,
31
- repo: config.github.repo,
32
- })
33
- : undefined;
34
27
  // Run workflow
35
28
  const result = await initWorkflow({
36
29
  changeId: parsed.changeId,
37
30
  description: parsed.description,
38
31
  noWorktree: parsed.noWorktree,
39
32
  skipDraftPR: parsed.skipDraftPR,
40
- }, { git, openspec, config, github });
33
+ generateTasks: parsed.generateTasks,
34
+ }, { git, openspec, config });
41
35
  const lines = result.worktreePath
42
36
  ? [
43
37
  `✓ Created worktree: ${result.worktreePath}`,
@@ -50,9 +44,12 @@ export function registerInitTool(server) {
50
44
  `✓ Scaffolded proposal: ${result.proposalPath}`,
51
45
  `✓ Scaffolded tasks: ${result.tasksPath}`,
52
46
  ];
53
- // Add PR info if created
54
- if (result.pullRequest) {
55
- lines.push(`✓ Created draft PR #${result.pullRequest.number}: ${result.pullRequest.url}`);
47
+ // Add bootstrap results if any
48
+ if (result.bootstrapResults && result.bootstrapResults.length > 0) {
49
+ const successful = result.bootstrapResults.filter(r => r.success);
50
+ if (successful.length > 0) {
51
+ lines.push(`✓ Bootstrapped environments: ${successful.map(r => r.environment).join(', ')}`);
52
+ }
56
53
  }
57
54
  lines.push("");
58
55
  lines.push("Next steps:");
@@ -60,17 +57,15 @@ export function registerInitTool(server) {
60
57
  lines.push(`1. cd ${result.worktreePath}`);
61
58
  lines.push("2. Edit proposal.md to describe your change");
62
59
  lines.push("3. Edit tasks.md to list implementation steps");
63
- lines.push("4. Run speclife_implement to start AI-driven implementation");
60
+ lines.push("4. Use /openspec-apply to implement tasks");
64
61
  }
65
62
  else {
66
63
  lines.push("1. Edit proposal.md to describe your change");
67
64
  lines.push("2. Edit tasks.md to list implementation steps");
68
- lines.push("3. Run speclife_implement to start AI-driven implementation");
69
- }
70
- if (result.pullRequest) {
71
- lines.push("");
72
- lines.push(`Note: Draft PR is live at ${result.pullRequest.url} - team can see progress early!`);
65
+ lines.push("3. Use /openspec-apply to implement tasks");
73
66
  }
67
+ lines.push("");
68
+ lines.push("Note: Use /speclife start slash command for a better experience.");
74
69
  return {
75
70
  content: [{ type: "text", text: lines.join("\n") }],
76
71
  };
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/tools/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,YAAY,EACb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAC3B,sEAAsE,CACvE;IACD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CACzC,yDAAyD,CAC1D;IACD,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CACzC,yFAAyF,CAC1F;IACD,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAC1C,2DAA2D,CAC5D;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,MAAM,CAAC,IAAI,CACT,eAAe,EACf,iJAAiJ,EACjJ,cAAc,CAAC,KAAK,EACpB,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC1C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YAE1B,kCAAkC;YAClC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;YACrC,MAAM,GAAG,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,QAAQ,GAAG,qBAAqB,CAAC;gBACrC,WAAW,EAAE,GAAG;gBAChB,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC,CAAC;YAEH,wDAAwD;YACxD,MAAM,mBAAmB,GAAG,MAAM,CAAC,aAAa,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;YACxE,MAAM,MAAM,GAAG,mBAAmB;gBAChC,CAAC,CAAC,mBAAmB,CAAC;oBAClB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;oBAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI;iBACzB,CAAC;gBACJ,CAAC,CAAC,SAAS,CAAC;YAEd,eAAe;YACf,MAAM,MAAM,GAAG,MAAM,YAAY,CAC/B;gBACE,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,WAAW,EAAE,MAAM,CAAC,WAAW;aAChC,EACD,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,CAClC,CAAC;YAEF,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY;gBAC/B,CAAC,CAAC;oBACE,uBAAuB,MAAM,CAAC,YAAY,EAAE;oBAC5C,qBAAqB,MAAM,CAAC,MAAM,EAAE;oBACpC,0BAA0B,MAAM,CAAC,YAAY,EAAE;oBAC/C,uBAAuB,MAAM,CAAC,SAAS,EAAE;iBAC1C;gBACH,CAAC,CAAC;oBACE,qBAAqB,MAAM,CAAC,MAAM,EAAE;oBACpC,0BAA0B,MAAM,CAAC,YAAY,EAAE;oBAC/C,uBAAuB,MAAM,CAAC,SAAS,EAAE;iBAC1C,CAAC;YAEN,yBAAyB;YACzB,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;gBACvB,KAAK,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC;YAC5F,CAAC;YAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAE1B,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;gBAC3C,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;gBAC1D,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;gBAC5D,KAAK,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;YAC5E,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;gBAC1D,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;gBAC5D,KAAK,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;YAC5E,CAAC;YAED,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;gBACvB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACf,KAAK,CAAC,IAAI,CAAC,6BAA6B,MAAM,CAAC,WAAW,CAAC,GAAG,iCAAiC,CAAC,CAAC;YACnG,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;aACpD,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC;gBACtD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/tools/init.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * speclife_list tool
3
3
  *
4
- * List all active changes in the project
4
+ * List all active changes with progress, PR status, and timestamps
5
5
  */
6
6
  import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
7
7
  export declare function registerListTool(server: McpServer): void;
@@ -1 +1 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/tools/list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWzE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyDxD"}
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/tools/list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAyEzE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkHxD"}
@@ -1,14 +1,63 @@
1
1
  /**
2
2
  * speclife_list tool
3
3
  *
4
- * List all active changes in the project
4
+ * List all active changes with progress, PR status, and timestamps
5
5
  */
6
- import { loadConfig, createGitAdapter, createOpenSpecAdapter, statusWorkflow } from "@speclife/core";
6
+ import { loadConfig, createGitAdapter, createGitHubAdapter, createOpenSpecAdapter, statusWorkflow, formatCompactLine, formatTable, formatSummary, sortItems, filterByStatus, } from "@speclife/core";
7
7
  import { z } from "zod";
8
- const ListArgsSchema = z.object({});
8
+ const ListArgsSchema = z.object({
9
+ compact: z.boolean().optional().describe("Show compact single-line output per change (default: false)"),
10
+ status: z.enum(['draft', 'ready', 'merged', 'closed', 'local']).optional().describe("Filter by PR status: draft, ready, merged, closed, or local"),
11
+ sort: z.enum(['activity', 'progress', 'name']).optional().describe("Sort by: activity (default), progress, or name"),
12
+ });
13
+ /**
14
+ * Calculate progress from task summary
15
+ */
16
+ function calculateProgress(completed, total) {
17
+ return {
18
+ completed,
19
+ total,
20
+ percentage: total > 0 ? Math.round((completed / total) * 100) : 0,
21
+ };
22
+ }
23
+ /**
24
+ * Get PR status for a branch
25
+ */
26
+ async function getPRStatus(github, branch) {
27
+ try {
28
+ const pr = await github.getPullRequestByBranch(branch);
29
+ if (!pr) {
30
+ return { status: 'local' };
31
+ }
32
+ let status;
33
+ if (pr.state === 'merged') {
34
+ status = 'merged';
35
+ }
36
+ else if (pr.state === 'closed') {
37
+ status = 'closed';
38
+ }
39
+ else if (pr.draft) {
40
+ status = 'draft';
41
+ }
42
+ else {
43
+ status = 'ready';
44
+ }
45
+ return { status, number: pr.number, url: pr.url };
46
+ }
47
+ catch {
48
+ // If GitHub lookup fails, treat as local
49
+ return { status: 'local' };
50
+ }
51
+ }
9
52
  export function registerListTool(server) {
10
- server.tool("speclife_list", "List all active changes in the project", ListArgsSchema.shape, async () => {
53
+ server.tool("speclife_list", "[DEPRECATED: Use speclife worktree list CLI command instead] List all active changes with progress bars, PR status, and last activity timestamps", ListArgsSchema.shape, async (args) => {
11
54
  try {
55
+ const parsed = ListArgsSchema.parse(args);
56
+ const options = {
57
+ compact: parsed.compact,
58
+ status: parsed.status,
59
+ sort: parsed.sort,
60
+ };
12
61
  const cwd = process.cwd();
13
62
  // Load config and create adapters
14
63
  const config = await loadConfig(cwd);
@@ -17,26 +66,75 @@ export function registerListTool(server) {
17
66
  projectRoot: cwd,
18
67
  specDir: config.specDir
19
68
  });
69
+ // Create GitHub adapter for PR lookups
70
+ let github = null;
71
+ try {
72
+ github = createGitHubAdapter(config.github.owner, config.github.repo);
73
+ }
74
+ catch {
75
+ // GitHub not configured, will show all as "local"
76
+ }
20
77
  // List changes
21
78
  const changeIds = await openspec.listChanges();
22
79
  if (changeIds.length === 0) {
23
80
  return {
24
81
  content: [{
25
82
  type: "text",
26
- text: "No active changes. Use speclife_init to create one.",
83
+ text: "No active changes. Use `speclife_init` to create one.",
27
84
  }],
28
85
  };
29
86
  }
30
- // Get status for each change
31
- const lines = ["# Active Changes", ""];
87
+ // Collect enriched data for each change
88
+ const items = [];
32
89
  for (const changeId of changeIds) {
33
90
  const result = await statusWorkflow({ changeId }, { git, openspec });
34
- if (result) {
35
- const { change, taskSummary, onBranch } = result;
36
- const branchIndicator = onBranch ? " ← current" : "";
37
- lines.push(`- **${changeId}**${branchIndicator}`, ` State: ${change.state} | Tasks: ${taskSummary.completed}/${taskSummary.total}`, "");
91
+ if (!result)
92
+ continue;
93
+ const { change, taskSummary, onBranch } = result;
94
+ const branch = `spec/${changeId}`;
95
+ // Get PR status
96
+ let prInfo = { status: 'local' };
97
+ if (github) {
98
+ prInfo = await getPRStatus(github, branch);
99
+ }
100
+ // Get last activity (use change createdAt as fallback)
101
+ const lastActive = change.createdAt;
102
+ items.push({
103
+ id: changeId,
104
+ progress: calculateProgress(taskSummary.completed, taskSummary.total),
105
+ prStatus: prInfo.status,
106
+ prNumber: prInfo.number,
107
+ prUrl: prInfo.url,
108
+ lastActive,
109
+ isCurrent: onBranch,
110
+ });
111
+ }
112
+ // Filter and sort
113
+ let filtered = filterByStatus(items, options.status);
114
+ const sorted = sortItems(filtered, options.sort ?? 'activity');
115
+ // Format output
116
+ const lines = [];
117
+ if (options.status) {
118
+ lines.push(`# Changes (filtered: ${options.status})`, '');
119
+ }
120
+ else {
121
+ lines.push('# Active Changes', '');
122
+ }
123
+ if (sorted.length === 0) {
124
+ lines.push('No changes match the filter.');
125
+ }
126
+ else if (options.compact) {
127
+ // Compact format
128
+ for (const item of sorted) {
129
+ lines.push(formatCompactLine(item));
38
130
  }
39
131
  }
132
+ else {
133
+ // Table format
134
+ lines.push(formatTable(sorted));
135
+ }
136
+ lines.push('');
137
+ lines.push(formatSummary(items)); // Use unfiltered items for summary
40
138
  return {
41
139
  content: [{ type: "text", text: lines.join("\n") }],
42
140
  };
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/tools/list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAEpC,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,MAAM,CAAC,IAAI,CACT,eAAe,EACf,wCAAwC,EACxC,cAAc,CAAC,KAAK,EACpB,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YAE1B,kCAAkC;YAClC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;YACrC,MAAM,GAAG,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,QAAQ,GAAG,qBAAqB,CAAC;gBACrC,WAAW,EAAE,GAAG;gBAChB,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC,CAAC;YAEH,eAAe;YACf,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;YAE/C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,qDAAqD;yBAC5D,CAAC;iBACH,CAAC;YACJ,CAAC;YAED,6BAA6B;YAC7B,MAAM,KAAK,GAAG,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;YAEvC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACrE,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;oBACjD,MAAM,eAAe,GAAG,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrD,KAAK,CAAC,IAAI,CACR,OAAO,QAAQ,KAAK,eAAe,EAAE,EACrC,YAAY,MAAM,CAAC,KAAK,aAAa,WAAW,CAAC,SAAS,IAAI,WAAW,CAAC,KAAK,EAAE,EACjF,EAAE,CACH,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;aACpD,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC;gBACtD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/tools/list.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * speclife_merge tool
3
3
  *
4
- * Merge PR, sync main, cleanup worktree/branch, and auto-bump version
4
+ * Merge PR, sync main, cleanup worktree/branch.
5
+ * Optionally auto-releases based on config (auto for patch/minor, manual for major).
5
6
  */
6
7
  import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
7
8
  export declare function registerMergeTool(server: McpServer): void;
@@ -1 +1 @@
1
- {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/tools/merge.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA6BzE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkFzD"}
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/tools/merge.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAgCzE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuJzD"}
@@ -1,67 +1,132 @@
1
1
  /**
2
2
  * speclife_merge tool
3
3
  *
4
- * Merge PR, sync main, cleanup worktree/branch, and auto-bump version
4
+ * Merge PR, sync main, cleanup worktree/branch.
5
+ * Optionally auto-releases based on config (auto for patch/minor, manual for major).
5
6
  */
6
- import { loadConfig, createGitAdapter, createGitHubAdapter, createClaudeCliAdapter, createOpenSpecAdapter, mergeWorkflow } from "@speclife/core";
7
+ import { loadConfig, createGitAdapter, createGitHubAdapter, mergeWorkflow, releaseWorkflow, suggestVersionBump, parseConventionalCommit, isAutoReleaseAllowed, } from "@speclife/core";
7
8
  import { z } from "zod";
8
9
  const MergeArgsSchema = z.object({
9
10
  changeId: z.string().describe("Change ID to merge (e.g., 'add-user-auth')"),
10
11
  method: z.enum(['squash', 'merge', 'rebase']).optional().describe("Merge method: 'squash' (default), 'merge', or 'rebase'"),
11
12
  deleteBranch: z.boolean().optional().describe("Delete local branch after merge (default: true)"),
12
13
  removeWorktree: z.boolean().optional().describe("Remove worktree after merge if applicable (default: true)"),
13
- versionBump: z.enum(['auto', 'patch', 'minor', 'major', 'none']).optional().describe("Version bump type after merge. 'auto' uses AI to analyze changes and determine bump type (default). 'none' skips version bump."),
14
+ skipRelease: z.boolean().optional().describe("Skip auto-release even if enabled in config (default: false)"),
14
15
  });
15
16
  export function registerMergeTool(server) {
16
- server.tool("speclife_merge", "Merge a submitted PR, sync main branch, cleanup local branch/worktree, and bump version", MergeArgsSchema.shape, async (args) => {
17
+ server.tool("speclife_merge", "[DEPRECATED: Use /speclife land slash command instead] Merge a submitted PR, sync main branch, and cleanup local branch/worktree. Auto-creates release PR for patch/minor bumps (configurable).", MergeArgsSchema.shape, async (args) => {
17
18
  try {
18
19
  const parsed = MergeArgsSchema.parse(args);
19
20
  const cwd = process.cwd();
20
21
  // Load config and create adapters
21
22
  const config = await loadConfig(cwd);
22
23
  const git = createGitAdapter(cwd);
23
- const github = createGitHubAdapter({
24
- owner: config.github.owner,
25
- repo: config.github.repo,
26
- });
27
- // Create optional adapters for version analysis
28
- const versionBump = parsed.versionBump ?? 'auto';
29
- const claudeCli = versionBump === 'auto' ? createClaudeCliAdapter() : undefined;
30
- const openspec = versionBump === 'auto' ? createOpenSpecAdapter({ projectRoot: cwd }) : undefined;
31
- // Run workflow
24
+ const github = createGitHubAdapter(config.github.owner, config.github.repo);
25
+ // Run merge workflow
32
26
  const result = await mergeWorkflow({
33
27
  changeId: parsed.changeId,
34
28
  method: parsed.method,
35
29
  deleteBranch: parsed.deleteBranch,
36
30
  removeWorktree: parsed.removeWorktree,
37
- versionBump,
38
- }, { git, github, config, claudeCli, openspec });
31
+ }, { git, github, config });
39
32
  const lines = [
40
33
  `✓ Merged PR #${result.pullRequest.number}: ${result.pullRequest.url}`,
41
34
  ];
42
35
  if (result.mainSynced) {
43
36
  lines.push(`✓ Synced ${config.github.baseBranch} with latest changes`);
44
37
  }
45
- // Show version analysis and bump info
46
- if (result.versionAnalysis) {
47
- lines.push('');
48
- lines.push(`📊 Version Analysis:`);
49
- lines.push(` Bump: ${result.versionAnalysis.bump}`);
50
- lines.push(` Reasoning: ${result.versionAnalysis.reasoning}`);
51
- }
52
- if (result.newVersion) {
53
- lines.push(`✓ Bumped version to v${result.newVersion}`);
54
- lines.push(`✓ Pushed version commit to ${config.github.baseBranch}`);
55
- }
56
38
  if (result.branchDeleted) {
57
39
  lines.push(`✓ Deleted local branch spec/${parsed.changeId}`);
58
40
  }
59
41
  if (result.worktreeRemoved) {
60
42
  lines.push(`✓ Removed worktree at ${result.worktreePath}`);
61
43
  }
62
- lines.push('', 'Change complete! You are now on the main branch with the merged changes.');
63
- if (result.newVersion) {
64
- lines.push(`CI will automatically publish v${result.newVersion} to npm.`);
44
+ lines.push('');
45
+ lines.push('Change complete! You are now on the main branch with the merged changes.');
46
+ // Auto-release analysis (if not skipped)
47
+ if (!parsed.skipRelease) {
48
+ lines.push('');
49
+ lines.push('---');
50
+ lines.push('');
51
+ try {
52
+ // Create git adapter for main repo
53
+ const mainRepoPath = result.repoPath || cwd;
54
+ const mainGit = createGitAdapter(mainRepoPath);
55
+ // Get latest tag and commits
56
+ const latestTag = await mainGit.getLatestTag();
57
+ const previousVersion = latestTag ? latestTag.replace(/^v/, '') : '0.0.0';
58
+ const rawCommits = latestTag
59
+ ? await mainGit.getCommitsSince(latestTag)
60
+ : await mainGit.getCommitsSince('HEAD~10');
61
+ if (rawCommits.length > 0) {
62
+ // Parse commits
63
+ const commits = rawCommits.map(({ sha, message }) => {
64
+ const parsed = parseConventionalCommit(message);
65
+ return {
66
+ sha,
67
+ message,
68
+ type: parsed.type,
69
+ scope: parsed.scope,
70
+ isBreaking: parsed.isBreaking,
71
+ };
72
+ });
73
+ // Determine bump type
74
+ const bumpType = suggestVersionBump(commits, previousVersion);
75
+ // Check if auto-release is allowed
76
+ const autoReleaseAllowed = isAutoReleaseAllowed(config, bumpType);
77
+ lines.push(`📊 **Release Analysis**`);
78
+ lines.push(` Commits since ${latestTag || 'start'}: ${commits.length}`);
79
+ lines.push(` Suggested bump: **${bumpType}** (${previousVersion} → next)`);
80
+ lines.push('');
81
+ if (autoReleaseAllowed) {
82
+ // Auto-release with auto-merge for patch/minor
83
+ const enableAutoMerge = bumpType !== 'major';
84
+ lines.push(`✨ Auto-release enabled for ${bumpType} bumps. Creating release PR...`);
85
+ lines.push('');
86
+ const releaseResult = await releaseWorkflow({ dryRun: false, autoMerge: enableAutoMerge }, { git: mainGit, github, repoPath: mainRepoPath });
87
+ lines.push(`✓ Created release PR: ${releaseResult.prUrl}`);
88
+ lines.push(` Version: ${releaseResult.previousVersion} → ${releaseResult.version}`);
89
+ if (releaseResult.autoMergeEnabled) {
90
+ lines.push(` 🤖 Auto-merge enabled - will merge when CI passes`);
91
+ lines.push('');
92
+ lines.push('**Release will happen automatically once CI passes!**');
93
+ }
94
+ else {
95
+ lines.push('');
96
+ lines.push('**Next:** Review and merge the release PR to publish.');
97
+ lines.push('(Auto-merge not available - enable in repo settings for fully automated releases)');
98
+ }
99
+ }
100
+ else {
101
+ // Manual release required (major bump)
102
+ lines.push(`⚠️ **Manual release required** (${bumpType} bump)`);
103
+ lines.push('');
104
+ if (bumpType === 'major') {
105
+ lines.push('Major releases require explicit confirmation. Run:');
106
+ lines.push('```');
107
+ lines.push('speclife_release --major');
108
+ lines.push('```');
109
+ }
110
+ else {
111
+ lines.push(`Auto-release disabled for ${bumpType} in config. Run:`);
112
+ lines.push('```');
113
+ lines.push('speclife_release');
114
+ lines.push('```');
115
+ }
116
+ }
117
+ }
118
+ else {
119
+ lines.push('💡 No commits since last release. Run `speclife_release` when ready.');
120
+ }
121
+ }
122
+ catch (releaseError) {
123
+ // Release analysis/creation failed - not critical
124
+ lines.push('💡 Ready to release? Run `speclife_release` to create a release PR.');
125
+ }
126
+ }
127
+ else {
128
+ lines.push('');
129
+ lines.push('💡 Ready to release? Run `speclife_release` to create a release PR.');
65
130
  }
66
131
  return {
67
132
  content: [{ type: "text", text: lines.join("\n") }],
@@ -1 +1 @@
1
- {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/tools/merge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/tools/merge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * speclife_release tool
3
+ *
4
+ * Create a release PR with AI-driven version decisions.
5
+ * Analyzes commits since last release and suggests appropriate version bump.
6
+ */
7
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
8
+ export declare function registerReleaseTool(server: McpServer): void;
9
+ //# sourceMappingURL=release.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release.d.ts","sourceRoot":"","sources":["../../src/tools/release.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAkCzE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmJ3D"}
@@ -0,0 +1,151 @@
1
+ /**
2
+ * speclife_release tool
3
+ *
4
+ * Create a release PR with AI-driven version decisions.
5
+ * Analyzes commits since last release and suggests appropriate version bump.
6
+ */
7
+ import { loadConfig, createGitAdapter, createGitHubAdapter, releaseWorkflow, bumpVersion, } from "@speclife/core";
8
+ import { z } from "zod";
9
+ const ReleaseArgsSchema = z.object({
10
+ version: z.string().optional().describe("Explicit version to release (e.g., '0.2.0'). If not provided, version is suggested based on commit analysis."),
11
+ major: z.boolean().optional().describe("Force a major version bump (e.g., 0.x.x → 1.0.0). Use for intentional breaking releases."),
12
+ minor: z.boolean().optional().describe("Force a minor version bump (e.g., 0.1.x → 0.2.0)."),
13
+ patch: z.boolean().optional().describe("Force a patch version bump (e.g., 0.1.0 → 0.1.1)."),
14
+ dryRun: z.boolean().optional().describe("Show what would be released without making changes (default: false)"),
15
+ skipChangelog: z.boolean().optional().describe("Skip changelog generation (default: false)"),
16
+ autoMerge: z.boolean().optional().describe("Enable auto-merge on the release PR (default: true for patch/minor, false for major). Requires repo settings to allow auto-merge."),
17
+ });
18
+ export function registerReleaseTool(server) {
19
+ server.tool("speclife_release", "[DEPRECATED: Use /speclife release slash command instead] Create a release PR with version bump and changelog. Analyzes commits since last release to suggest appropriate version. Use --major for intentional breaking releases, --minor/--patch to override suggestions.", ReleaseArgsSchema.shape, async (args) => {
20
+ try {
21
+ const parsed = ReleaseArgsSchema.parse(args);
22
+ const cwd = process.cwd();
23
+ // Load config and create adapters
24
+ const config = await loadConfig(cwd);
25
+ const git = createGitAdapter(cwd);
26
+ const github = createGitHubAdapter(config.github.owner, config.github.repo);
27
+ // Determine version from flags
28
+ let version = parsed.version;
29
+ let forcedBumpType;
30
+ if (!version) {
31
+ // Check for forced bump type flags
32
+ if (parsed.major) {
33
+ forcedBumpType = 'major';
34
+ }
35
+ else if (parsed.minor) {
36
+ forcedBumpType = 'minor';
37
+ }
38
+ else if (parsed.patch) {
39
+ forcedBumpType = 'patch';
40
+ }
41
+ // If forced bump, calculate version now
42
+ if (forcedBumpType) {
43
+ const latestTag = await git.getLatestTag();
44
+ const previousVersion = latestTag ? latestTag.replace(/^v/, '') : '0.0.0';
45
+ version = bumpVersion(previousVersion, forcedBumpType);
46
+ }
47
+ }
48
+ // Determine auto-merge: default to true for patch/minor, false for major
49
+ // User can override with explicit --autoMerge flag
50
+ const shouldAutoMerge = parsed.autoMerge ?? (forcedBumpType !== 'major');
51
+ // Run workflow
52
+ const result = await releaseWorkflow({
53
+ version,
54
+ dryRun: parsed.dryRun,
55
+ skipChangelog: parsed.skipChangelog,
56
+ autoMerge: shouldAutoMerge,
57
+ }, { git, github, repoPath: cwd });
58
+ const lines = [];
59
+ if (parsed.dryRun) {
60
+ lines.push('🔍 **Dry Run** - No changes made');
61
+ lines.push('');
62
+ }
63
+ lines.push(`## Version: ${result.previousVersion} → ${result.version}`);
64
+ // Show if bump was forced or auto-detected
65
+ if (forcedBumpType) {
66
+ lines.push(`Bump type: **${forcedBumpType}** (forced via --${forcedBumpType})`);
67
+ }
68
+ else if (parsed.version) {
69
+ lines.push(`Bump type: **${result.bumpType}** (explicit version provided)`);
70
+ }
71
+ else {
72
+ lines.push(`Bump type: **${result.bumpType}** (auto-detected from commits)`);
73
+ }
74
+ lines.push('');
75
+ // Commits summary
76
+ lines.push(`### Commits (${result.commits.length})`);
77
+ const breaking = result.commits.filter(c => c.isBreaking);
78
+ const features = result.commits.filter(c => c.type === 'feat');
79
+ const fixes = result.commits.filter(c => c.type === 'fix');
80
+ if (breaking.length > 0) {
81
+ lines.push(`- ⚠️ ${breaking.length} breaking change(s)`);
82
+ }
83
+ if (features.length > 0) {
84
+ lines.push(`- ✨ ${features.length} feature(s)`);
85
+ }
86
+ if (fixes.length > 0) {
87
+ lines.push(`- 🐛 ${fixes.length} fix(es)`);
88
+ }
89
+ lines.push('');
90
+ // Commit list
91
+ lines.push('**Changes:**');
92
+ for (const commit of result.commits.slice(0, 10)) {
93
+ const icon = commit.isBreaking ? '⚠️' : commit.type === 'feat' ? '✨' : commit.type === 'fix' ? '🐛' : '📝';
94
+ lines.push(`- ${icon} ${commit.message.slice(0, 80)}${commit.message.length > 80 ? '...' : ''}`);
95
+ }
96
+ if (result.commits.length > 10) {
97
+ lines.push(`- ... and ${result.commits.length - 10} more`);
98
+ }
99
+ lines.push('');
100
+ if (!parsed.dryRun) {
101
+ lines.push('---');
102
+ lines.push(`✓ Created release branch: ${result.branch}`);
103
+ lines.push(`✓ Updated package versions to ${result.version}`);
104
+ if (result.changelog) {
105
+ lines.push('✓ Generated changelog');
106
+ }
107
+ lines.push(`✓ Created PR: ${result.prUrl}`);
108
+ if (result.autoMergeEnabled) {
109
+ lines.push(`✓ 🤖 Auto-merge enabled - will merge when CI passes`);
110
+ lines.push('');
111
+ lines.push('**Release will happen automatically once CI passes!**');
112
+ }
113
+ else {
114
+ lines.push('');
115
+ lines.push('**Next steps:**');
116
+ lines.push('1. Review and merge the release PR');
117
+ lines.push('2. CI will automatically create git tag and GitHub release');
118
+ lines.push('3. CI will publish packages to npm');
119
+ if (shouldAutoMerge) {
120
+ lines.push('');
121
+ lines.push('💡 Auto-merge was requested but not available. Enable in repo settings for fully automated releases.');
122
+ }
123
+ }
124
+ }
125
+ else {
126
+ lines.push('---');
127
+ lines.push('Run `speclife_release` without `--dry-run` to create the release PR.');
128
+ if (parsed.version) {
129
+ lines.push(`Using explicit version: ${parsed.version}`);
130
+ }
131
+ else if (forcedBumpType) {
132
+ lines.push(`Forced ${forcedBumpType} bump → ${result.version}`);
133
+ }
134
+ else {
135
+ lines.push(`Suggested version: ${result.version} (based on commit analysis)`);
136
+ }
137
+ }
138
+ return {
139
+ content: [{ type: "text", text: lines.join("\n") }],
140
+ };
141
+ }
142
+ catch (error) {
143
+ const message = error instanceof Error ? error.message : String(error);
144
+ return {
145
+ content: [{ type: "text", text: `Error: ${message}` }],
146
+ isError: true,
147
+ };
148
+ }
149
+ });
150
+ }
151
+ //# sourceMappingURL=release.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release.js","sourceRoot":"","sources":["../../src/tools/release.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@ const StatusArgsSchema = z.object({
9
9
  changeId: z.string().optional().describe("Change ID to get status for (uses current branch if not provided)"),
10
10
  });
11
11
  export function registerStatusTool(server) {
12
- server.tool("speclife_status", "Show the current state and progress of a change", StatusArgsSchema.shape, async (args) => {
12
+ server.tool("speclife_status", "[DEPRECATED: Use speclife status CLI command instead] Show the current state and progress of a change", StatusArgsSchema.shape, async (args) => {
13
13
  try {
14
14
  const parsed = StatusArgsSchema.parse(args);
15
15
  const cwd = process.cwd();
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/tools/status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/tools/status.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"submit.d.ts","sourceRoot":"","sources":["../../src/tools/submit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAsBzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmE1D"}
1
+ {"version":3,"file":"submit.d.ts","sourceRoot":"","sources":["../../src/tools/submit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA4BzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyF1D"}
@@ -9,19 +9,18 @@ const SubmitArgsSchema = z.object({
9
9
  changeId: z.string().describe("Change ID to submit (e.g., 'add-user-auth')"),
10
10
  draft: z.boolean().optional().describe("Create PR as draft (default: false)"),
11
11
  commitMessage: z.string().optional().describe("Custom commit message (defaults to proposal-based message)"),
12
+ skipValidation: z.boolean().optional().describe("Skip spec validation before submitting (default: false)"),
13
+ strict: z.boolean().optional().describe("Enable strict validation mode - fail on any warnings (default: false)"),
12
14
  });
13
15
  export function registerSubmitTool(server) {
14
- server.tool("speclife_submit", "Submit a change: commit all changes, push to remote, create GitHub PR, and archive the change", SubmitArgsSchema.shape, async (args) => {
16
+ server.tool("speclife_submit", "[DEPRECATED: Use /speclife ship slash command instead] Submit a change: validate spec, commit all changes, push to remote, create GitHub PR, and archive the change", SubmitArgsSchema.shape, async (args) => {
15
17
  try {
16
18
  const parsed = SubmitArgsSchema.parse(args);
17
19
  const cwd = process.cwd();
18
20
  // Load config and create adapters
19
21
  const config = await loadConfig(cwd);
20
22
  const git = createGitAdapter(cwd);
21
- const github = createGitHubAdapter({
22
- owner: config.github.owner,
23
- repo: config.github.repo,
24
- });
23
+ const github = createGitHubAdapter(config.github.owner, config.github.repo);
25
24
  const openspec = createOpenSpecAdapter({
26
25
  projectRoot: cwd,
27
26
  specDir: config.specDir
@@ -31,11 +30,28 @@ export function registerSubmitTool(server) {
31
30
  changeId: parsed.changeId,
32
31
  draft: parsed.draft,
33
32
  commitMessage: parsed.commitMessage,
33
+ skipValidation: parsed.skipValidation,
34
+ strict: parsed.strict,
34
35
  }, { git, github, openspec, config });
35
- const lines = [
36
- `✓ Committed: ${result.commitSha.slice(0, 7)}`,
37
- `✓ Pushed to: origin/${result.branch}`,
38
- ];
36
+ const lines = [];
37
+ // Show validation results if validation was run
38
+ if (result.validation) {
39
+ const statusEmoji = result.validation.status === 'pass' ? '✅' :
40
+ result.validation.status === 'pass_with_warnings' ? '⚠️' : '❌';
41
+ lines.push(`${statusEmoji} Spec Validation: ${result.validation.status.replace(/_/g, ' ').toUpperCase()}`);
42
+ if (result.validation.errors.length > 0) {
43
+ for (const error of result.validation.errors) {
44
+ lines.push(` ❌ ${error}`);
45
+ }
46
+ }
47
+ if (result.validation.warnings.length > 0) {
48
+ for (const warning of result.validation.warnings) {
49
+ lines.push(` ⚠️ ${warning}`);
50
+ }
51
+ }
52
+ lines.push('');
53
+ }
54
+ lines.push(`✓ Committed: ${result.commitSha.slice(0, 7)}`, `✓ Pushed to: origin/${result.branch}`);
39
55
  if (result.prCreated) {
40
56
  lines.push(`✓ Created PR #${result.pullRequest.number}: ${result.pullRequest.url}`);
41
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"submit.js","sourceRoot":"","sources":["../../src/tools/submit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"submit.js","sourceRoot":"","sources":["../../src/tools/submit.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@speclife/mcp-server",
3
- "version": "0.1.7",
3
+ "version": "0.3.0",
4
4
  "description": "MCP server for SpecLife - AI assistant interface",
5
5
  "repository": {
6
6
  "type": "git",
@@ -17,7 +17,7 @@
17
17
  "build": "tsc",
18
18
  "start": "node dist/index.js",
19
19
  "dev": "tsc --watch",
20
- "test": "vitest run --passWithNoTests",
20
+ "test": "vitest run",
21
21
  "typecheck": "tsc --noEmit"
22
22
  },
23
23
  "dependencies": {