@programinglive/dev-workflow-mcp-server 1.2.5 → 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
 
@@ -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.5",
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
  });