@programinglive/dev-workflow-mcp-server 1.2.4 â 1.2.6
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/CHANGELOG.md +17 -0
- package/README.md +10 -0
- package/docs/RELEASE-NOTES.md +3 -0
- package/index.js +3 -0
- package/package.json +1 -1
- package/release-wrapper.js +22 -6
- package/tests/release-wrapper.test.js +4 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
### [1.2.6](https://github.com/programinglive/dev-workflow-mcp-server/compare/v1.2.5...v1.2.6) (2025-11-11)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### đī¸ Build System
|
|
9
|
+
|
|
10
|
+
* **release:** delegate to commiter ([e174d8d](https://github.com/programinglive/dev-workflow-mcp-server/commit/e174d8dca300e4822f67681a39dc5f4d9f56232a))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### đ Bug Fixes
|
|
14
|
+
|
|
15
|
+
* **cli:** expose primary branch helper ([a3fb9c8](https://github.com/programinglive/dev-workflow-mcp-server/commit/a3fb9c881df67298eba4a8446ba9a14473f54e0a))
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### đ Documentation
|
|
19
|
+
|
|
20
|
+
* **changelog:** note commiter delegation ([6352aa2](https://github.com/programinglive/dev-workflow-mcp-server/commit/6352aa2f561e9d7f7d8a4f26d9c930e108bbe81b))
|
|
21
|
+
|
|
5
22
|
### [1.2.4](https://github.com/programinglive/dev-workflow-mcp-server/compare/v1.2.3...v1.2.4) (2025-11-11)
|
|
6
23
|
|
|
7
24
|
|
package/README.md
CHANGED
|
@@ -207,6 +207,16 @@ For MCP server usage, point your client at `index.js` (source) to avoid stdio tr
|
|
|
207
207
|
- Performance optimization
|
|
208
208
|
- Embedding in other projects
|
|
209
209
|
|
|
210
|
+
#### PowerShell CLI tip
|
|
211
|
+
|
|
212
|
+
When invoking the lightweight CLI from PowerShell, use `--%` to prevent PowerShell from rewriting JSON arguments, for example:
|
|
213
|
+
|
|
214
|
+
```powershell
|
|
215
|
+
node --% index.js call start_task --args "{\"description\":\"Convert docs to HTML during build\",\"type\":\"feature\"}"
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
The `--%` prefix and escaped double quotes ensure the JSON reaches the MCP server unchanged.
|
|
219
|
+
|
|
210
220
|
## đ Project-Specific Workflow State
|
|
211
221
|
|
|
212
222
|
When you install this package in a project, a `.state/workflow-state.json` file is automatically created in your project root. This file:
|
package/docs/RELEASE-NOTES.md
CHANGED
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
Authoritative history of user-visible changes for the Development Workflow MCP Server. Each entry highlights the improvements that shipped with the tagged version.
|
|
4
4
|
|
|
5
|
+
## Unreleased
|
|
6
|
+
- Release guard now delegates to `@programinglive/commiter` and verifies the package is installed before running.
|
|
7
|
+
|
|
5
8
|
> **Notice:** Versions 1.2.2 through 1.2.5 were published briefly for packaging experiments and have been withdrawn. The current latest version is **1.2.1**.
|
|
6
9
|
|
|
7
10
|
## 1.2.1 â 2025-11-03
|
package/index.js
CHANGED
|
@@ -14,6 +14,7 @@ import { normalizeRequestArgs, shellEscape } from "./utils.js";
|
|
|
14
14
|
import {
|
|
15
15
|
getCurrentBranch,
|
|
16
16
|
getLastCommitMessage,
|
|
17
|
+
getPrimaryBranch,
|
|
17
18
|
getStagedChanges,
|
|
18
19
|
hasStagedChanges,
|
|
19
20
|
hasTestChanges,
|
|
@@ -72,6 +73,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
72
73
|
hasStagedChanges,
|
|
73
74
|
getStagedChanges,
|
|
74
75
|
getCurrentBranch,
|
|
76
|
+
getPrimaryBranch,
|
|
75
77
|
getLastCommitMessage,
|
|
76
78
|
workingTreeSummary,
|
|
77
79
|
},
|
|
@@ -246,6 +248,7 @@ async function cliMain(argv) {
|
|
|
246
248
|
hasStagedChanges,
|
|
247
249
|
getStagedChanges,
|
|
248
250
|
getCurrentBranch,
|
|
251
|
+
getPrimaryBranch,
|
|
249
252
|
getLastCommitMessage,
|
|
250
253
|
workingTreeSummary,
|
|
251
254
|
},
|
package/package.json
CHANGED
package/release-wrapper.js
CHANGED
|
@@ -9,6 +9,7 @@ const RELEASE_TYPES = new Set(['major', 'minor', 'patch']);
|
|
|
9
9
|
async function main() {
|
|
10
10
|
const releaseTypeArg = (process.argv[2] || '').toLowerCase();
|
|
11
11
|
const forceFlag = process.argv.includes('--force') || process.env.DEV_WORKFLOW_FORCE_RELEASE === '1';
|
|
12
|
+
const additionalArgs = process.argv.slice(3).filter((arg) => arg !== '--force');
|
|
12
13
|
|
|
13
14
|
if (!RELEASE_TYPES.has(releaseTypeArg)) {
|
|
14
15
|
console.error(
|
|
@@ -17,11 +18,13 @@ async function main() {
|
|
|
17
18
|
process.exit(1);
|
|
18
19
|
}
|
|
19
20
|
|
|
20
|
-
const
|
|
21
|
-
|
|
21
|
+
const repoRoot = process.cwd();
|
|
22
|
+
const projectRootCandidate = process.env.INIT_CWD || repoRoot;
|
|
23
|
+
if (projectRootCandidate.includes(`node_modules${path.sep}`)) {
|
|
22
24
|
console.error('â Release guard: refusing to run inside node_modules.');
|
|
23
25
|
process.exit(1);
|
|
24
26
|
}
|
|
27
|
+
const projectRoot = projectRootCandidate;
|
|
25
28
|
|
|
26
29
|
// Prefer state under INIT_CWD to support per-project runs and tests.
|
|
27
30
|
// If DEV_WORKFLOW_USER_ID is set and a user-scoped file exists, use it; otherwise fall back to legacy path.
|
|
@@ -95,6 +98,17 @@ async function main() {
|
|
|
95
98
|
}
|
|
96
99
|
}
|
|
97
100
|
|
|
101
|
+
const commiterReleaseScript = path.join(repoRoot, 'node_modules', '@programinglive', 'commiter', 'scripts', 'release.js');
|
|
102
|
+
|
|
103
|
+
try {
|
|
104
|
+
await fs.access(commiterReleaseScript);
|
|
105
|
+
} catch {
|
|
106
|
+
console.error('â Release guard: @programinglive/commiter release script not found.');
|
|
107
|
+
console.error(' Ensure @programinglive/commiter is installed as a dev dependency.');
|
|
108
|
+
console.error(' Try: npm install --save-dev @programinglive/commiter');
|
|
109
|
+
process.exit(1);
|
|
110
|
+
}
|
|
111
|
+
|
|
98
112
|
const runRelease = async () => {
|
|
99
113
|
if (process.env.DEV_WORKFLOW_SKIP_RELEASE === '1') {
|
|
100
114
|
console.log('âšī¸ DEV_WORKFLOW_SKIP_RELEASE=1 detected. Skipping actual release command.');
|
|
@@ -103,9 +117,9 @@ async function main() {
|
|
|
103
117
|
|
|
104
118
|
return await new Promise((resolve, reject) => {
|
|
105
119
|
const child = spawn(
|
|
106
|
-
|
|
107
|
-
[
|
|
108
|
-
{ stdio: 'inherit',
|
|
120
|
+
process.execPath,
|
|
121
|
+
[commiterReleaseScript, releaseTypeArg, ...additionalArgs],
|
|
122
|
+
{ stdio: 'inherit', cwd: repoRoot }
|
|
109
123
|
);
|
|
110
124
|
|
|
111
125
|
child.on('error', (error) => reject(error));
|
|
@@ -124,8 +138,10 @@ async function main() {
|
|
|
124
138
|
process.exit(1);
|
|
125
139
|
}
|
|
126
140
|
|
|
141
|
+
const recordedReleaseCommand = `node node_modules/@programinglive/commiter/scripts/release.js ${releaseTypeArg}`;
|
|
142
|
+
|
|
127
143
|
state.released = true;
|
|
128
|
-
state.releaseCommand =
|
|
144
|
+
state.releaseCommand = recordedReleaseCommand;
|
|
129
145
|
state.currentPhase = 'ready_to_complete';
|
|
130
146
|
|
|
131
147
|
try {
|
|
@@ -98,5 +98,8 @@ test("release-wrapper marks release after validation passes", async () => {
|
|
|
98
98
|
assert.ok(result.stdout.includes("Release recorded"));
|
|
99
99
|
assert.equal(result.updatedState.released, true);
|
|
100
100
|
assert.equal(result.updatedState.currentPhase, "ready_to_complete");
|
|
101
|
-
assert.equal(
|
|
101
|
+
assert.equal(
|
|
102
|
+
result.updatedState.releaseCommand,
|
|
103
|
+
"node node_modules/@programinglive/commiter/scripts/release.js patch"
|
|
104
|
+
);
|
|
102
105
|
});
|