@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 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:
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@programinglive/dev-workflow-mcp-server",
3
- "version": "1.2.4",
3
+ "version": "1.2.6",
4
4
  "description": "MCP server to enforce development workflow discipline",
5
5
  "homepage": "https://devworkflow.programinglive.com/",
6
6
  "type": "module",
@@ -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 projectRoot = process.env.INIT_CWD || process.cwd();
21
- if (projectRoot.includes(`node_modules${path.sep}`)) {
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
- 'npm',
107
- ['run', 'release', '--', '--release-as', releaseTypeArg],
108
- { stdio: 'inherit', shell: process.platform === 'win32', cwd: projectRoot }
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 = `npm run release:${releaseTypeArg}`;
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(result.updatedState.releaseCommand, "npm run release:patch");
101
+ assert.equal(
102
+ result.updatedState.releaseCommand,
103
+ "node node_modules/@programinglive/commiter/scripts/release.js patch"
104
+ );
102
105
  });