@speclife/mcp-server 0.1.7 → 0.2.1
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/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +3 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/init.d.ts.map +1 -1
- package/dist/tools/init.js +13 -0
- package/dist/tools/init.js.map +1 -1
- package/dist/tools/list.d.ts +1 -1
- package/dist/tools/list.d.ts.map +1 -1
- package/dist/tools/list.js +112 -11
- package/dist/tools/list.js.map +1 -1
- package/dist/tools/merge.d.ts +2 -1
- package/dist/tools/merge.d.ts.map +1 -1
- package/dist/tools/merge.js +93 -25
- package/dist/tools/merge.js.map +1 -1
- package/dist/tools/release.d.ts +9 -0
- package/dist/tools/release.d.ts.map +1 -0
- package/dist/tools/release.js +154 -0
- package/dist/tools/release.js.map +1 -0
- package/dist/tools/submit.d.ts.map +1 -1
- package/dist/tools/submit.js +24 -5
- package/dist/tools/submit.js.map +1 -1
- package/package.json +2 -2
|
@@ -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;
|
|
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"}
|
package/dist/tools/index.js
CHANGED
|
@@ -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
|
package/dist/tools/index.js.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/tools/init.d.ts.map
CHANGED
|
@@ -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;
|
|
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;AA4BzE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoGxD"}
|
package/dist/tools/init.js
CHANGED
|
@@ -10,6 +10,7 @@ const InitArgsSchema = z.object({
|
|
|
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
16
|
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) => {
|
|
@@ -37,6 +38,7 @@ export function registerInitTool(server) {
|
|
|
37
38
|
description: parsed.description,
|
|
38
39
|
noWorktree: parsed.noWorktree,
|
|
39
40
|
skipDraftPR: parsed.skipDraftPR,
|
|
41
|
+
generateTasks: parsed.generateTasks,
|
|
40
42
|
}, { git, openspec, config, github });
|
|
41
43
|
const lines = result.worktreePath
|
|
42
44
|
? [
|
|
@@ -50,6 +52,17 @@ export function registerInitTool(server) {
|
|
|
50
52
|
`✓ Scaffolded proposal: ${result.proposalPath}`,
|
|
51
53
|
`✓ Scaffolded tasks: ${result.tasksPath}`,
|
|
52
54
|
];
|
|
55
|
+
// Add task generation info
|
|
56
|
+
if (result.tasksGenerated) {
|
|
57
|
+
lines.push(`✓ Generated tasks with AI`);
|
|
58
|
+
if (result.tasksPreview) {
|
|
59
|
+
lines.push('');
|
|
60
|
+
lines.push('Generated tasks preview:');
|
|
61
|
+
lines.push('```');
|
|
62
|
+
lines.push(result.tasksPreview);
|
|
63
|
+
lines.push('```');
|
|
64
|
+
}
|
|
65
|
+
}
|
|
53
66
|
// Add PR info if created
|
|
54
67
|
if (result.pullRequest) {
|
|
55
68
|
lines.push(`✓ Created draft PR #${result.pullRequest.number}: ${result.pullRequest.url}`);
|
package/dist/tools/init.js.map
CHANGED
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/tools/init.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/list.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* speclife_list tool
|
|
3
3
|
*
|
|
4
|
-
* List all active changes
|
|
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;
|
package/dist/tools/list.d.ts.map
CHANGED
|
@@ -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;
|
|
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,CAqHxD"}
|
package/dist/tools/list.js
CHANGED
|
@@ -1,14 +1,63 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* speclife_list tool
|
|
3
3
|
*
|
|
4
|
-
* List all active changes
|
|
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
|
|
53
|
+
server.tool("speclife_list", "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,78 @@ 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({
|
|
73
|
+
owner: config.github.owner,
|
|
74
|
+
repo: config.github.repo,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
// GitHub not configured, will show all as "local"
|
|
79
|
+
}
|
|
20
80
|
// List changes
|
|
21
81
|
const changeIds = await openspec.listChanges();
|
|
22
82
|
if (changeIds.length === 0) {
|
|
23
83
|
return {
|
|
24
84
|
content: [{
|
|
25
85
|
type: "text",
|
|
26
|
-
text: "No active changes. Use speclife_init to create one.",
|
|
86
|
+
text: "No active changes. Use `speclife_init` to create one.",
|
|
27
87
|
}],
|
|
28
88
|
};
|
|
29
89
|
}
|
|
30
|
-
//
|
|
31
|
-
const
|
|
90
|
+
// Collect enriched data for each change
|
|
91
|
+
const items = [];
|
|
32
92
|
for (const changeId of changeIds) {
|
|
33
93
|
const result = await statusWorkflow({ changeId }, { git, openspec });
|
|
34
|
-
if (result)
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
94
|
+
if (!result)
|
|
95
|
+
continue;
|
|
96
|
+
const { change, taskSummary, onBranch } = result;
|
|
97
|
+
const branch = `spec/${changeId}`;
|
|
98
|
+
// Get PR status
|
|
99
|
+
let prInfo = { status: 'local' };
|
|
100
|
+
if (github) {
|
|
101
|
+
prInfo = await getPRStatus(github, branch);
|
|
102
|
+
}
|
|
103
|
+
// Get last activity (use change createdAt as fallback)
|
|
104
|
+
const lastActive = change.createdAt;
|
|
105
|
+
items.push({
|
|
106
|
+
id: changeId,
|
|
107
|
+
progress: calculateProgress(taskSummary.completed, taskSummary.total),
|
|
108
|
+
prStatus: prInfo.status,
|
|
109
|
+
prNumber: prInfo.number,
|
|
110
|
+
prUrl: prInfo.url,
|
|
111
|
+
lastActive,
|
|
112
|
+
isCurrent: onBranch,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
// Filter and sort
|
|
116
|
+
let filtered = filterByStatus(items, options.status);
|
|
117
|
+
const sorted = sortItems(filtered, options.sort ?? 'activity');
|
|
118
|
+
// Format output
|
|
119
|
+
const lines = [];
|
|
120
|
+
if (options.status) {
|
|
121
|
+
lines.push(`# Changes (filtered: ${options.status})`, '');
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
lines.push('# Active Changes', '');
|
|
125
|
+
}
|
|
126
|
+
if (sorted.length === 0) {
|
|
127
|
+
lines.push('No changes match the filter.');
|
|
128
|
+
}
|
|
129
|
+
else if (options.compact) {
|
|
130
|
+
// Compact format
|
|
131
|
+
for (const item of sorted) {
|
|
132
|
+
lines.push(formatCompactLine(item));
|
|
38
133
|
}
|
|
39
134
|
}
|
|
135
|
+
else {
|
|
136
|
+
// Table format
|
|
137
|
+
lines.push(formatTable(sorted));
|
|
138
|
+
}
|
|
139
|
+
lines.push('');
|
|
140
|
+
lines.push(formatSummary(items)); // Use unfiltered items for summary
|
|
40
141
|
return {
|
|
41
142
|
content: [{ type: "text", text: lines.join("\n") }],
|
|
42
143
|
};
|
package/dist/tools/list.js.map
CHANGED
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/tools/list.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/merge.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* speclife_merge tool
|
|
3
3
|
*
|
|
4
|
-
* Merge PR, sync main, cleanup worktree/branch
|
|
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
|
|
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,CA0JzD"}
|
package/dist/tools/merge.js
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* speclife_merge tool
|
|
3
3
|
*
|
|
4
|
-
* Merge PR, sync main, cleanup worktree/branch
|
|
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,
|
|
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
|
-
|
|
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
|
|
17
|
+
server.tool("speclife_merge", "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();
|
|
@@ -24,44 +25,111 @@ export function registerMergeTool(server) {
|
|
|
24
25
|
owner: config.github.owner,
|
|
25
26
|
repo: config.github.repo,
|
|
26
27
|
});
|
|
27
|
-
//
|
|
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
|
|
28
|
+
// Run merge workflow
|
|
32
29
|
const result = await mergeWorkflow({
|
|
33
30
|
changeId: parsed.changeId,
|
|
34
31
|
method: parsed.method,
|
|
35
32
|
deleteBranch: parsed.deleteBranch,
|
|
36
33
|
removeWorktree: parsed.removeWorktree,
|
|
37
|
-
|
|
38
|
-
}, { git, github, config, claudeCli, openspec });
|
|
34
|
+
}, { git, github, config });
|
|
39
35
|
const lines = [
|
|
40
36
|
`✓ Merged PR #${result.pullRequest.number}: ${result.pullRequest.url}`,
|
|
41
37
|
];
|
|
42
38
|
if (result.mainSynced) {
|
|
43
39
|
lines.push(`✓ Synced ${config.github.baseBranch} with latest changes`);
|
|
44
40
|
}
|
|
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
41
|
if (result.branchDeleted) {
|
|
57
42
|
lines.push(`✓ Deleted local branch spec/${parsed.changeId}`);
|
|
58
43
|
}
|
|
59
44
|
if (result.worktreeRemoved) {
|
|
60
45
|
lines.push(`✓ Removed worktree at ${result.worktreePath}`);
|
|
61
46
|
}
|
|
62
|
-
lines.push(''
|
|
63
|
-
|
|
64
|
-
|
|
47
|
+
lines.push('');
|
|
48
|
+
lines.push('Change complete! You are now on the main branch with the merged changes.');
|
|
49
|
+
// Auto-release analysis (if not skipped)
|
|
50
|
+
if (!parsed.skipRelease) {
|
|
51
|
+
lines.push('');
|
|
52
|
+
lines.push('---');
|
|
53
|
+
lines.push('');
|
|
54
|
+
try {
|
|
55
|
+
// Create git adapter for main repo
|
|
56
|
+
const mainRepoPath = result.repoPath || cwd;
|
|
57
|
+
const mainGit = createGitAdapter(mainRepoPath);
|
|
58
|
+
// Get latest tag and commits
|
|
59
|
+
const latestTag = await mainGit.getLatestTag();
|
|
60
|
+
const previousVersion = latestTag ? latestTag.replace(/^v/, '') : '0.0.0';
|
|
61
|
+
const rawCommits = latestTag
|
|
62
|
+
? await mainGit.getCommitsSince(latestTag)
|
|
63
|
+
: await mainGit.getCommitsSince('HEAD~10');
|
|
64
|
+
if (rawCommits.length > 0) {
|
|
65
|
+
// Parse commits
|
|
66
|
+
const commits = rawCommits.map(({ sha, message }) => {
|
|
67
|
+
const parsed = parseConventionalCommit(message);
|
|
68
|
+
return {
|
|
69
|
+
sha,
|
|
70
|
+
message,
|
|
71
|
+
type: parsed.type,
|
|
72
|
+
scope: parsed.scope,
|
|
73
|
+
isBreaking: parsed.isBreaking,
|
|
74
|
+
};
|
|
75
|
+
});
|
|
76
|
+
// Determine bump type
|
|
77
|
+
const bumpType = suggestVersionBump(commits, previousVersion);
|
|
78
|
+
// Check if auto-release is allowed
|
|
79
|
+
const autoReleaseAllowed = isAutoReleaseAllowed(config, bumpType);
|
|
80
|
+
lines.push(`📊 **Release Analysis**`);
|
|
81
|
+
lines.push(` Commits since ${latestTag || 'start'}: ${commits.length}`);
|
|
82
|
+
lines.push(` Suggested bump: **${bumpType}** (${previousVersion} → next)`);
|
|
83
|
+
lines.push('');
|
|
84
|
+
if (autoReleaseAllowed) {
|
|
85
|
+
// Auto-release with auto-merge for patch/minor
|
|
86
|
+
const enableAutoMerge = bumpType !== 'major';
|
|
87
|
+
lines.push(`✨ Auto-release enabled for ${bumpType} bumps. Creating release PR...`);
|
|
88
|
+
lines.push('');
|
|
89
|
+
const releaseResult = await releaseWorkflow({ dryRun: false, autoMerge: enableAutoMerge }, { git: mainGit, github, repoPath: mainRepoPath });
|
|
90
|
+
lines.push(`✓ Created release PR: ${releaseResult.prUrl}`);
|
|
91
|
+
lines.push(` Version: ${releaseResult.previousVersion} → ${releaseResult.version}`);
|
|
92
|
+
if (releaseResult.autoMergeEnabled) {
|
|
93
|
+
lines.push(` 🤖 Auto-merge enabled - will merge when CI passes`);
|
|
94
|
+
lines.push('');
|
|
95
|
+
lines.push('**Release will happen automatically once CI passes!**');
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
lines.push('');
|
|
99
|
+
lines.push('**Next:** Review and merge the release PR to publish.');
|
|
100
|
+
lines.push('(Auto-merge not available - enable in repo settings for fully automated releases)');
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
// Manual release required (major bump)
|
|
105
|
+
lines.push(`⚠️ **Manual release required** (${bumpType} bump)`);
|
|
106
|
+
lines.push('');
|
|
107
|
+
if (bumpType === 'major') {
|
|
108
|
+
lines.push('Major releases require explicit confirmation. Run:');
|
|
109
|
+
lines.push('```');
|
|
110
|
+
lines.push('speclife_release --major');
|
|
111
|
+
lines.push('```');
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
lines.push(`Auto-release disabled for ${bumpType} in config. Run:`);
|
|
115
|
+
lines.push('```');
|
|
116
|
+
lines.push('speclife_release');
|
|
117
|
+
lines.push('```');
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
lines.push('💡 No commits since last release. Run `speclife_release` when ready.');
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
catch (releaseError) {
|
|
126
|
+
// Release analysis/creation failed - not critical
|
|
127
|
+
lines.push('💡 Ready to release? Run `speclife_release` to create a release PR.');
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
lines.push('');
|
|
132
|
+
lines.push('💡 Ready to release? Run `speclife_release` to create a release PR.');
|
|
65
133
|
}
|
|
66
134
|
return {
|
|
67
135
|
content: [{ type: "text", text: lines.join("\n") }],
|
package/dist/tools/merge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/tools/merge.ts"],"names":[],"mappings":"AAAA
|
|
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,CAsJ3D"}
|
|
@@ -0,0 +1,154 @@
|
|
|
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", "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({
|
|
27
|
+
owner: config.github.owner,
|
|
28
|
+
repo: config.github.repo,
|
|
29
|
+
});
|
|
30
|
+
// Determine version from flags
|
|
31
|
+
let version = parsed.version;
|
|
32
|
+
let forcedBumpType;
|
|
33
|
+
if (!version) {
|
|
34
|
+
// Check for forced bump type flags
|
|
35
|
+
if (parsed.major) {
|
|
36
|
+
forcedBumpType = 'major';
|
|
37
|
+
}
|
|
38
|
+
else if (parsed.minor) {
|
|
39
|
+
forcedBumpType = 'minor';
|
|
40
|
+
}
|
|
41
|
+
else if (parsed.patch) {
|
|
42
|
+
forcedBumpType = 'patch';
|
|
43
|
+
}
|
|
44
|
+
// If forced bump, calculate version now
|
|
45
|
+
if (forcedBumpType) {
|
|
46
|
+
const latestTag = await git.getLatestTag();
|
|
47
|
+
const previousVersion = latestTag ? latestTag.replace(/^v/, '') : '0.0.0';
|
|
48
|
+
version = bumpVersion(previousVersion, forcedBumpType);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Determine auto-merge: default to true for patch/minor, false for major
|
|
52
|
+
// User can override with explicit --autoMerge flag
|
|
53
|
+
const shouldAutoMerge = parsed.autoMerge ?? (forcedBumpType !== 'major');
|
|
54
|
+
// Run workflow
|
|
55
|
+
const result = await releaseWorkflow({
|
|
56
|
+
version,
|
|
57
|
+
dryRun: parsed.dryRun,
|
|
58
|
+
skipChangelog: parsed.skipChangelog,
|
|
59
|
+
autoMerge: shouldAutoMerge,
|
|
60
|
+
}, { git, github, repoPath: cwd });
|
|
61
|
+
const lines = [];
|
|
62
|
+
if (parsed.dryRun) {
|
|
63
|
+
lines.push('🔍 **Dry Run** - No changes made');
|
|
64
|
+
lines.push('');
|
|
65
|
+
}
|
|
66
|
+
lines.push(`## Version: ${result.previousVersion} → ${result.version}`);
|
|
67
|
+
// Show if bump was forced or auto-detected
|
|
68
|
+
if (forcedBumpType) {
|
|
69
|
+
lines.push(`Bump type: **${forcedBumpType}** (forced via --${forcedBumpType})`);
|
|
70
|
+
}
|
|
71
|
+
else if (parsed.version) {
|
|
72
|
+
lines.push(`Bump type: **${result.bumpType}** (explicit version provided)`);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
lines.push(`Bump type: **${result.bumpType}** (auto-detected from commits)`);
|
|
76
|
+
}
|
|
77
|
+
lines.push('');
|
|
78
|
+
// Commits summary
|
|
79
|
+
lines.push(`### Commits (${result.commits.length})`);
|
|
80
|
+
const breaking = result.commits.filter(c => c.isBreaking);
|
|
81
|
+
const features = result.commits.filter(c => c.type === 'feat');
|
|
82
|
+
const fixes = result.commits.filter(c => c.type === 'fix');
|
|
83
|
+
if (breaking.length > 0) {
|
|
84
|
+
lines.push(`- ⚠️ ${breaking.length} breaking change(s)`);
|
|
85
|
+
}
|
|
86
|
+
if (features.length > 0) {
|
|
87
|
+
lines.push(`- ✨ ${features.length} feature(s)`);
|
|
88
|
+
}
|
|
89
|
+
if (fixes.length > 0) {
|
|
90
|
+
lines.push(`- 🐛 ${fixes.length} fix(es)`);
|
|
91
|
+
}
|
|
92
|
+
lines.push('');
|
|
93
|
+
// Commit list
|
|
94
|
+
lines.push('**Changes:**');
|
|
95
|
+
for (const commit of result.commits.slice(0, 10)) {
|
|
96
|
+
const icon = commit.isBreaking ? '⚠️' : commit.type === 'feat' ? '✨' : commit.type === 'fix' ? '🐛' : '📝';
|
|
97
|
+
lines.push(`- ${icon} ${commit.message.slice(0, 80)}${commit.message.length > 80 ? '...' : ''}`);
|
|
98
|
+
}
|
|
99
|
+
if (result.commits.length > 10) {
|
|
100
|
+
lines.push(`- ... and ${result.commits.length - 10} more`);
|
|
101
|
+
}
|
|
102
|
+
lines.push('');
|
|
103
|
+
if (!parsed.dryRun) {
|
|
104
|
+
lines.push('---');
|
|
105
|
+
lines.push(`✓ Created release branch: ${result.branch}`);
|
|
106
|
+
lines.push(`✓ Updated package versions to ${result.version}`);
|
|
107
|
+
if (result.changelog) {
|
|
108
|
+
lines.push('✓ Generated changelog');
|
|
109
|
+
}
|
|
110
|
+
lines.push(`✓ Created PR: ${result.prUrl}`);
|
|
111
|
+
if (result.autoMergeEnabled) {
|
|
112
|
+
lines.push(`✓ 🤖 Auto-merge enabled - will merge when CI passes`);
|
|
113
|
+
lines.push('');
|
|
114
|
+
lines.push('**Release will happen automatically once CI passes!**');
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
lines.push('');
|
|
118
|
+
lines.push('**Next steps:**');
|
|
119
|
+
lines.push('1. Review and merge the release PR');
|
|
120
|
+
lines.push('2. CI will automatically create git tag and GitHub release');
|
|
121
|
+
lines.push('3. CI will publish packages to npm');
|
|
122
|
+
if (shouldAutoMerge) {
|
|
123
|
+
lines.push('');
|
|
124
|
+
lines.push('💡 Auto-merge was requested but not available. Enable in repo settings for fully automated releases.');
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
lines.push('---');
|
|
130
|
+
lines.push('Run `speclife_release` without `--dry-run` to create the release PR.');
|
|
131
|
+
if (parsed.version) {
|
|
132
|
+
lines.push(`Using explicit version: ${parsed.version}`);
|
|
133
|
+
}
|
|
134
|
+
else if (forcedBumpType) {
|
|
135
|
+
lines.push(`Forced ${forcedBumpType} bump → ${result.version}`);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
lines.push(`Suggested version: ${result.version} (based on commit analysis)`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return {
|
|
142
|
+
content: [{ type: "text", text: lines.join("\n") }],
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
147
|
+
return {
|
|
148
|
+
content: [{ type: "text", text: `Error: ${message}` }],
|
|
149
|
+
isError: true,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
//# 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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"}
|
|
@@ -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;
|
|
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,CA4F1D"}
|
package/dist/tools/submit.js
CHANGED
|
@@ -9,9 +9,11 @@ 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", "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();
|
|
@@ -31,11 +33,28 @@ export function registerSubmitTool(server) {
|
|
|
31
33
|
changeId: parsed.changeId,
|
|
32
34
|
draft: parsed.draft,
|
|
33
35
|
commitMessage: parsed.commitMessage,
|
|
36
|
+
skipValidation: parsed.skipValidation,
|
|
37
|
+
strict: parsed.strict,
|
|
34
38
|
}, { git, github, openspec, config });
|
|
35
|
-
const lines = [
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
+
const lines = [];
|
|
40
|
+
// Show validation results if validation was run
|
|
41
|
+
if (result.validation) {
|
|
42
|
+
const statusEmoji = result.validation.status === 'pass' ? '✅' :
|
|
43
|
+
result.validation.status === 'pass_with_warnings' ? '⚠️' : '❌';
|
|
44
|
+
lines.push(`${statusEmoji} Spec Validation: ${result.validation.status.replace(/_/g, ' ').toUpperCase()}`);
|
|
45
|
+
if (result.validation.errors.length > 0) {
|
|
46
|
+
for (const error of result.validation.errors) {
|
|
47
|
+
lines.push(` ❌ ${error}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (result.validation.warnings.length > 0) {
|
|
51
|
+
for (const warning of result.validation.warnings) {
|
|
52
|
+
lines.push(` ⚠️ ${warning}`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
lines.push('');
|
|
56
|
+
}
|
|
57
|
+
lines.push(`✓ Committed: ${result.commitSha.slice(0, 7)}`, `✓ Pushed to: origin/${result.branch}`);
|
|
39
58
|
if (result.prCreated) {
|
|
40
59
|
lines.push(`✓ Created PR #${result.pullRequest.number}: ${result.pullRequest.url}`);
|
|
41
60
|
}
|
package/dist/tools/submit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"submit.js","sourceRoot":"","sources":["../../src/tools/submit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,cAAc,EACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAC3B,6CAA6C,CAC9C;IACD,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CACpC,qCAAqC,CACtC;IACD,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAC3C,4DAA4D,CAC7D;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB
|
|
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
|
|
3
|
+
"version": "0.2.1",
|
|
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
|
|
20
|
+
"test": "vitest run",
|
|
21
21
|
"typecheck": "tsc --noEmit"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|