@programinglive/dev-workflow-mcp-server 1.2.1 β†’ 1.2.2

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,89 @@
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.1...v1.2.6) (2025-11-11)
6
+
7
+
8
+ ### 🧹 Chores
9
+
10
+ * **release:** 1.2.2 πŸš€ ([64eb9de](https://github.com/programinglive/dev-workflow-mcp-server/commit/64eb9dea66625ce0b21b5006f455b0d452299997))
11
+ * **release:** 1.2.3 πŸš€ ([cd113e9](https://github.com/programinglive/dev-workflow-mcp-server/commit/cd113e9a2ca7a8a374f2ec07aa4a25f1c0570051))
12
+ * **release:** 1.2.4 πŸš€ ([7d39809](https://github.com/programinglive/dev-workflow-mcp-server/commit/7d398091359ee74c69f12e8fa77443615c32d51a))
13
+ * **release:** 1.2.5 πŸš€ ([e893f26](https://github.com/programinglive/dev-workflow-mcp-server/commit/e893f26a173306f96a40f68bf2c71706cc5fdb77))
14
+
15
+
16
+ ### πŸ“ Documentation
17
+
18
+ * clarify user ID management ([a76381c](https://github.com/programinglive/dev-workflow-mcp-server/commit/a76381c842c1dea5e98116667addc4cbd0d022ed))
19
+
20
+ ### [1.2.5](https://github.com/programinglive/dev-workflow-mcp-server/compare/v1.2.1...v1.2.5) (2025-11-11)
21
+
22
+
23
+ ### 🧹 Chores
24
+
25
+ * **release:** 1.2.2 πŸš€ ([64eb9de](https://github.com/programinglive/dev-workflow-mcp-server/commit/64eb9dea66625ce0b21b5006f455b0d452299997))
26
+ * **release:** 1.2.3 πŸš€ ([cd113e9](https://github.com/programinglive/dev-workflow-mcp-server/commit/cd113e9a2ca7a8a374f2ec07aa4a25f1c0570051))
27
+ * **release:** 1.2.4 πŸš€ ([7d39809](https://github.com/programinglive/dev-workflow-mcp-server/commit/7d398091359ee74c69f12e8fa77443615c32d51a))
28
+ * **release:** 1.2.5 πŸš€ ([e893f26](https://github.com/programinglive/dev-workflow-mcp-server/commit/e893f26a173306f96a40f68bf2c71706cc5fdb77))
29
+
30
+
31
+ ### πŸ“ Documentation
32
+
33
+ * clarify user ID management ([a76381c](https://github.com/programinglive/dev-workflow-mcp-server/commit/a76381c842c1dea5e98116667addc4cbd0d022ed))
34
+
35
+ ### [1.2.4](https://github.com/programinglive/dev-workflow-mcp-server/compare/v1.2.1...v1.2.4) (2025-11-11)
36
+
37
+
38
+ ### 🧹 Chores
39
+
40
+ * **release:** 1.2.2 πŸš€ ([64eb9de](https://github.com/programinglive/dev-workflow-mcp-server/commit/64eb9dea66625ce0b21b5006f455b0d452299997))
41
+ * **release:** 1.2.3 πŸš€ ([cd113e9](https://github.com/programinglive/dev-workflow-mcp-server/commit/cd113e9a2ca7a8a374f2ec07aa4a25f1c0570051))
42
+ * **release:** 1.2.4 πŸš€ ([7d39809](https://github.com/programinglive/dev-workflow-mcp-server/commit/7d398091359ee74c69f12e8fa77443615c32d51a))
43
+ * **release:** 1.2.5 πŸš€ ([e893f26](https://github.com/programinglive/dev-workflow-mcp-server/commit/e893f26a173306f96a40f68bf2c71706cc5fdb77))
44
+
45
+
46
+ ### πŸ“ Documentation
47
+
48
+ * clarify user ID management ([a76381c](https://github.com/programinglive/dev-workflow-mcp-server/commit/a76381c842c1dea5e98116667addc4cbd0d022ed))
49
+
50
+ ### [1.2.3](https://github.com/programinglive/dev-workflow-mcp-server/compare/v1.2.1...v1.2.3) (2025-11-11)
51
+
52
+
53
+ ### 🧹 Chores
54
+
55
+ * **release:** 1.2.2 πŸš€ ([64eb9de](https://github.com/programinglive/dev-workflow-mcp-server/commit/64eb9dea66625ce0b21b5006f455b0d452299997))
56
+ * **release:** 1.2.3 πŸš€ ([cd113e9](https://github.com/programinglive/dev-workflow-mcp-server/commit/cd113e9a2ca7a8a374f2ec07aa4a25f1c0570051))
57
+ * **release:** 1.2.4 πŸš€ ([7d39809](https://github.com/programinglive/dev-workflow-mcp-server/commit/7d398091359ee74c69f12e8fa77443615c32d51a))
58
+ * **release:** 1.2.5 πŸš€ ([e893f26](https://github.com/programinglive/dev-workflow-mcp-server/commit/e893f26a173306f96a40f68bf2c71706cc5fdb77))
59
+
60
+
61
+ ### πŸ“ Documentation
62
+
63
+ * clarify user ID management ([a76381c](https://github.com/programinglive/dev-workflow-mcp-server/commit/a76381c842c1dea5e98116667addc4cbd0d022ed))
64
+
65
+ ### [1.2.2](https://github.com/programinglive/dev-workflow-mcp-server/compare/v1.2.1...v1.2.2) (2025-11-11)
66
+
67
+
68
+ ### 🧹 Chores
69
+
70
+ * **release:** 1.2.2 πŸš€ ([64eb9de](https://github.com/programinglive/dev-workflow-mcp-server/commit/64eb9dea66625ce0b21b5006f455b0d452299997))
71
+ * **release:** 1.2.3 πŸš€ ([cd113e9](https://github.com/programinglive/dev-workflow-mcp-server/commit/cd113e9a2ca7a8a374f2ec07aa4a25f1c0570051))
72
+ * **release:** 1.2.4 πŸš€ ([7d39809](https://github.com/programinglive/dev-workflow-mcp-server/commit/7d398091359ee74c69f12e8fa77443615c32d51a))
73
+ * **release:** 1.2.5 πŸš€ ([e893f26](https://github.com/programinglive/dev-workflow-mcp-server/commit/e893f26a173306f96a40f68bf2c71706cc5fdb77))
74
+
75
+
76
+ ### πŸ“ Documentation
77
+
78
+ * clarify user ID management ([a76381c](https://github.com/programinglive/dev-workflow-mcp-server/commit/a76381c842c1dea5e98116667addc4cbd0d022ed))
79
+
80
+ ### [1.2.5](https://github.com/programinglive/dev-workflow-mcp-server/compare/v1.2.4...v1.2.5) (2025-11-03)
81
+
82
+ ### [1.2.4](https://github.com/programinglive/dev-workflow-mcp-server/compare/v1.2.3...v1.2.4) (2025-11-03)
83
+
84
+ ### [1.2.3](https://github.com/programinglive/dev-workflow-mcp-server/compare/v1.2.2...v1.2.3) (2025-11-03)
85
+
86
+ ### [1.2.2](https://github.com/programinglive/dev-workflow-mcp-server/compare/v1.2.1...v1.2.2) (2025-11-03)
87
+
5
88
  ### [1.2.1](https://github.com/programinglive/dev-workflow-mcp-server/compare/v1.2.0...v1.2.1) (2025-11-03)
6
89
 
7
90
  ## [1.2.0](https://github.com/programinglive/dev-workflow-mcp-server/compare/v1.1.18...v1.2.0) (2025-11-03)
package/README.md CHANGED
@@ -54,6 +54,8 @@ Plesk supports Node.js applications through its Node.js extension. To deploy the
54
54
 
55
55
  > **Tip:** The MCP server communicates over stdio. If you only need it as a CLI tool, you can also run `npx @programinglive/dev-workflow-mcp-server` directly in an SSH session without keeping it running under the Node.js panel.
56
56
 
57
+ > **Important:** MCP clients (Windsurf, Claude Desktop, etc.) must launch the server process locally via stdio. Hosting the dashboard on a public domain does **not** expose the MCP interface. Without SSH or another way to execute `node index.js` on the server, users cannot connect their MCP clients to the hosted instance.
58
+
57
59
  #### Two Usage Modes
58
60
 
59
61
  - **Local (source)**: Point your MCP client to `index.js`. This runs directly from source and requires no build step. Recommended for MCP usage.
@@ -173,7 +175,8 @@ npm run web
173
175
  # 🌐 Dev Workflow Dashboard running at http://localhost:3111
174
176
  ```
175
177
 
176
- - **Default port:** 3111 (or the next free port if occupied). Override with `DEV_WORKFLOW_WEB_PORT`.
178
+ - **Default port:** 3111 (or the next free port if occupied).
179
+ - **Environment overrides:** Honors `PORT` (common on hosts like Plesk/Render) or `DEV_WORKFLOW_WEB_PORT` before falling back to auto-selection.
177
180
  - **Query parameter:** `?user=<id>` lets you inspect another user’s history (defaults to `default`).
178
181
  - **API endpoints:**
179
182
  - `GET /api/summary?user=<id>` β†’ overall stats for the user.
@@ -209,6 +212,28 @@ When you install this package in a project, a `.state/workflow-state.json` file
209
212
 
210
213
  Each project maintains its own isolated workflow history, so you can work on multiple projects without mixing their histories. Within that `.state` directory, the MCP server automatically creates a unique per-user subdirectory (e.g., `.state/users/user-abc123/`). The generated identifier persists locally so multiple developers sharing the same repository never clobber each other’s workflow files. If you prefer a specific name, set `DEV_WORKFLOW_USER_ID` before launching the server and that value will be used instead of the auto-generated ID.
211
214
 
215
+ #### Choosing a User ID
216
+
217
+ Use cases:
218
+
219
+ 1. **Let the server choose** – Do nothing and the first time you run any MCP tool the server creates `.state/users/<random-id>/`. The dashboard `User ID` filter accepts that value (visible in the folder name or in workflow responses).
220
+ 2. **Set an explicit ID** – Before starting the server, export `DEV_WORKFLOW_USER_ID`:
221
+
222
+ ```bash
223
+ # macOS/Linux
224
+ export DEV_WORKFLOW_USER_ID=alice
225
+ node index.js
226
+
227
+ # Windows PowerShell
228
+ $env:DEV_WORKFLOW_USER_ID = "alice"
229
+ node index.js
230
+ ```
231
+
232
+ Now all history for that session lands in `.state/users/alice/` and the dashboard can be filtered with `alice`.
233
+ 3. **Multiple users on one host** – Run separate processes (or MCP clients) with different `DEV_WORKFLOW_USER_ID` values. Each user’s workflow state remains isolated.
234
+
235
+ > **Tip:** The web dashboard simply reads existing records. Typing a new value into the `User ID` filter will only return results after a workflow session has written history into `.state/users/<that-id>/`.
236
+
212
237
  ### Adding to .gitignore
213
238
 
214
239
  If you're using this package, add this to your project's `.gitignore`:
@@ -0,0 +1,117 @@
1
+ # Release Notes
2
+
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
+
5
+ > **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
+
7
+ ## 1.2.1 β€” 2025-11-03
8
+ - Packaging touch-up; functionality remains identical to 1.2.0.
9
+
10
+ ## 1.2.0 β€” 2025-11-03
11
+ - Reload the workflow state from disk for every tool call, preventing stale data when multiple clients manipulate the same project.
12
+
13
+ ## 1.1.18 β€” 2025-11-03
14
+ - `commit_and_push` now auto-detects the primary branch (preferring `main`, then `master`) when none is supplied.
15
+
16
+ ## 1.1.17 β€” 2025-10-31
17
+ - Release bookkeeping only; no user-facing changes.
18
+
19
+ ## 1.1.16 β€” 2025-10-31
20
+ - Added npm provenance metadata so published packages include supply-chain attestations.
21
+
22
+ ## 1.1.15 β€” 2025-10-31
23
+ - Documented the automated npm publish workflow and ensured CI builds include provenance before publishing.
24
+
25
+ ## 1.1.14 β€” 2025-10-31
26
+ - Improved project-root detection for workflow state, fixing issues when the server runs from nested directories.
27
+
28
+ ## 1.1.13 β€” 2025-10-30
29
+ - Version bump to distribute refreshed dashboard assets; no new functionality beyond 1.1.12.
30
+
31
+ ## 1.1.12 β€” 2025-10-30
32
+ - Added a `node index.js call <tool>` CLI helper to invoke MCP tools without a client integration.
33
+ - Refreshed the web dashboard with a docs modal, dedicated docs API endpoints, and streamlined navigation.
34
+
35
+ ## 1.1.11 β€” 2025-10-30
36
+ - Introduced per-user workflow state stored under `.state/users/<id>/` to avoid collisions on shared repos.
37
+ - Added a SQLite-backed project knowledge summary and the dashboard that visualizes history and trends.
38
+ - Hardened resumable workflows by re-checking persisted summaries between steps.
39
+
40
+ ## 1.1.10 β€” 2025-10-29
41
+ - Shipped the initial project knowledge library with a persisted JSON summary for future database integrations.
42
+
43
+ ## 1.1.9 β€” 2025-10-29
44
+ - Made `run_full_workflow` resume intelligently from the current phase.
45
+ - Expanded automated tests around README/exec updates and other workflow paths.
46
+
47
+ ## 1.1.8 β€” 2025-10-27
48
+ - Documented the `DEV_WORKFLOW_STATE_FILE` override for relocating workflow state outside the repository.
49
+
50
+ ## 1.1.7 β€” 2025-10-26
51
+ - Added prompts guiding developers to document changes immediately after tests pass.
52
+
53
+ ## 1.1.6 β€” 2025-10-26
54
+ - Prevented `.state` from being created at filesystem roots.
55
+ - Enforced that commits must land before any release action can run.
56
+
57
+ ## 1.1.5 β€” 2025-10-25
58
+ - Introduced the release guard, blocking `npm run release:*` until every prerequisite tool has run.
59
+ - Standardized per-project workflow state creation during installs.
60
+
61
+ ## 1.1.4 β€” 2025-10-25
62
+ - Ensured the install script always targets the project root when initializing `.state`.
63
+
64
+ ## 1.1.3 β€” 2025-10-25
65
+ - Packaged the MCP server for project-level installs with per-project workflow state isolation.
66
+
67
+ ## 1.1.2 β€” 2025-10-25
68
+ - Version alignment release with no additional changes versus 1.1.1.
69
+
70
+ ## 1.1.1 β€” 2025-10-25
71
+ - Added `force_complete_task`, letting teams close tasks early with an audit trail.
72
+
73
+ ## 1.1.0 β€” 2025-10-25
74
+ - Added smart staging checks before commit, and made `continue_workflow` auto-run the next action in the commit phase.
75
+ - Enabled clean-tree commits to utilize `commit_and_push` and `perform_release` without manual staging.
76
+ - Clarified documentation for the commit/push step.
77
+
78
+ ## 1.0.11 β€” 2025-10-25
79
+ - Added contextual "continue workflow" guidance describing the next recommended tool.
80
+ - Blocked releases until commits are safely pushed.
81
+
82
+ ## 1.0.10 β€” 2025-10-24
83
+ - Modularized the workflow server internals for maintainability.
84
+ - Expanded automated tests around the release push flow.
85
+
86
+ ## 1.0.9 β€” 2025-10-23
87
+ - Documented how local workflow state is managed across projects.
88
+
89
+ ## 1.0.8 β€” 2025-10-21
90
+ - Added explicit workflows for skipping tests with justification and dropping tasks mid-flight.
91
+
92
+ ## 1.0.7 β€” 2025-10-20
93
+ - Version alignment update; no new functionality recorded.
94
+
95
+ ## 1.0.6 β€” 2025-10-20
96
+ - Strengthened release tests to ensure prerequisites are met before tagging.
97
+
98
+ ## 1.0.5 β€” 2025-10-20
99
+ - Updated tests around `workflowState` persistence and validation.
100
+
101
+ ## 1.0.4 β€” 2025-10-20
102
+ - Added an enforced release step after the ready check to ensure workflow order.
103
+ - Improved Windows compatibility by quoting commit messages safely.
104
+
105
+ ## 1.0.3 β€” 2025-10-20
106
+ - Added a project `.gitignore` and clarified cross-platform installation steps.
107
+
108
+ ## 1.0.2 β€” 2025-10-19
109
+ - Hardened `run_tests` argument validation and normalized tool call arguments.
110
+ - Expanded documentation around tool payload requirements.
111
+
112
+ ## 1.0.1 β€” 2025-10-18
113
+ - Configured release tooling to support semantic version tagging moving forward.
114
+
115
+ ## 1.0.0 β€” 2025-10-18
116
+ - Initial public release with the full MCP workflow (start β†’ fix β†’ tests β†’ docs β†’ commit β†’ release β†’ complete).
117
+ - Launched project governance, contribution guidelines, and tooling scaffolding.
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "@programinglive/dev-workflow-mcp-server",
3
- "version": "1.2.1",
3
+ "version": "1.2.2",
4
4
  "description": "MCP server to enforce development workflow discipline",
5
+ "homepage": "https://devworkflow.programinglive.com/",
5
6
  "type": "module",
6
7
  "main": "index.js",
7
8
  "bin": {
@@ -8,6 +8,7 @@ const RELEASE_TYPES = new Set(['major', 'minor', 'patch']);
8
8
 
9
9
  async function main() {
10
10
  const releaseTypeArg = (process.argv[2] || '').toLowerCase();
11
+ const forceFlag = process.argv.includes('--force') || process.env.DEV_WORKFLOW_FORCE_RELEASE === '1';
11
12
 
12
13
  if (!RELEASE_TYPES.has(releaseTypeArg)) {
13
14
  console.error(
@@ -76,15 +77,24 @@ async function main() {
76
77
  errors.push('A release has already been recorded for this task.');
77
78
  }
78
79
 
79
- if (errors.length) {
80
+ if (errors.length && !forceFlag) {
80
81
  console.error('❌ Release guard blocked the release:');
81
82
  for (const message of errors) {
82
83
  console.error(` β€’ ${message}`);
83
84
  }
84
85
  console.error("\nUse 'perform_release' through the dev-workflow MCP after completing the missing steps.");
86
+ console.error("Or use: npm run release:patch -- --force (to bypass guard)");
85
87
  process.exit(1);
86
88
  }
87
89
 
90
+ if (forceFlag && errors.length) {
91
+ console.warn('⚠️ --force flag detected. Bypassing workflow guard.');
92
+ console.warn('Errors that were skipped:');
93
+ for (const message of errors) {
94
+ console.warn(` β€’ ${message}`);
95
+ }
96
+ }
97
+
88
98
  const runRelease = async () => {
89
99
  if (process.env.DEV_WORKFLOW_SKIP_RELEASE === '1') {
90
100
  console.log('ℹ️ DEV_WORKFLOW_SKIP_RELEASE=1 detected. Skipping actual release command.');
@@ -23,6 +23,7 @@ async function runWrapper({ state, args = ["patch"], env = {} }) {
23
23
  ...process.env,
24
24
  INIT_CWD: dir,
25
25
  DEV_WORKFLOW_SKIP_RELEASE: "1",
26
+ DEV_WORKFLOW_FORCE_RELEASE: undefined,
26
27
  ...env,
27
28
  };
28
29
 
package/web/index.html CHANGED
@@ -95,6 +95,14 @@
95
95
  Overview
96
96
  </h2>
97
97
  <p class="mt-2 text-slate-600">Learn how the Dev Workflow dashboard surfaces workflow history and offers inline documentation for every MCP command.</p>
98
+ <div class="mt-4 bg-amber-50 border border-amber-200 text-amber-800 text-sm rounded-lg p-4 flex gap-3">
99
+ <i data-lucide="alert-circle" class="mt-1 shrink-0"></i>
100
+ <p>
101
+ The dashboard is read-only. MCP clients (Windsurf, Claude Desktop, etc.) must launch the server via <code>node index.js</code>
102
+ over stdio on the machine they control. Hosting this site publicly does <strong>not</strong> expose the MCP protocol; without SSH or another
103
+ execution path to the server, remote users cannot connect their MCP agents.
104
+ </p>
105
+ </div>
98
106
  </div>
99
107
  <div class="hidden md:flex items-center gap-2 text-sm text-slate-500">
100
108
  <i data-lucide="info"></i>
@@ -278,16 +286,45 @@
278
286
 
279
287
  <details class="border border-slate-200 rounded-lg">
280
288
  <summary class="cursor-pointer select-none px-4 py-3 flex items-center justify-between font-medium">
281
- <span><i data-lucide="beaker"></i> create_tests &amp; run_tests</span>
289
+ <span><i data-lucide="beaker"></i> create_tests</span>
290
+ <i data-lucide="chevron-down" class="ml-2"></i>
291
+ </summary>
292
+ <div class="px-5 pb-5 space-y-3 text-sm text-slate-600">
293
+ <p>Confirm that coverage exists for the work you just completed.</p>
294
+ <ul class="list-disc list-inside space-y-1">
295
+ <li><strong>Parameters:</strong> None.</li>
296
+ <li><strong>When to use:</strong> After <code>mark_bug_fixed</code> once tests are written.</li>
297
+ <li><strong>Next step:</strong> Execute <code>run_tests</code> and record the results.</li>
298
+ </ul>
299
+ </div>
300
+ </details>
301
+
302
+ <details class="border border-slate-200 rounded-lg">
303
+ <summary class="cursor-pointer select-none px-4 py-3 flex items-center justify-between font-medium">
304
+ <span><i data-lucide="ban"></i> skip_tests</span>
282
305
  <i data-lucide="chevron-down" class="ml-2"></i>
283
306
  </summary>
284
307
  <div class="px-5 pb-5 space-y-3 text-sm text-slate-600">
285
- <p>Track your testing workflow from coverage to execution.</p>
308
+ <p>Document why automated tests are impossible for this task.</p>
286
309
  <ul class="list-disc list-inside space-y-1">
287
- <li><strong>create_tests:</strong> No parameters β€” confirms tests exist.</li>
288
- <li><strong>run_tests:</strong> <code>passed</code> (boolean), <code>testCommand</code> (string), optional <code>details</code> (string)</li>
289
- <li><strong>Guidance:</strong> Tests must pass before documentation or commits.</li>
290
- <li><strong>Alternate:</strong> Use <code>skip_tests</code> with a detailed justification when automation is impossible.</li>
310
+ <li><strong>Parameter:</strong> <code>reason</code> (string, required)</li>
311
+ <li><strong>Effect:</strong> Flags the workflow for manual QA review.</li>
312
+ <li><strong>Next step:</strong> Continue with <code>create_documentation</code>.</li>
313
+ </ul>
314
+ </div>
315
+ </details>
316
+
317
+ <details class="border border-slate-200 rounded-lg">
318
+ <summary class="cursor-pointer select-none px-4 py-3 flex items-center justify-between font-medium">
319
+ <span><i data-lucide="test-tube"></i> run_tests</span>
320
+ <i data-lucide="chevron-down" class="ml-2"></i>
321
+ </summary>
322
+ <div class="px-5 pb-5 space-y-3 text-sm text-slate-600">
323
+ <p>Capture the outcome of your automated test run.</p>
324
+ <ul class="list-disc list-inside space-y-1">
325
+ <li><strong>Parameters:</strong> <code>passed</code> (boolean, required), <code>testCommand</code> (string, required), optional <code>details</code> (string)</li>
326
+ <li><strong>Guidance:</strong> Never proceed if tests failβ€”return to coding and re-run.</li>
327
+ <li><strong>Next step:</strong> Move to <code>create_documentation</code> when green.</li>
291
328
  </ul>
292
329
  </div>
293
330
  </details>
@@ -351,16 +388,158 @@
351
388
 
352
389
  <details class="border border-slate-200 rounded-lg">
353
390
  <summary class="cursor-pointer select-none px-4 py-3 flex items-center justify-between font-medium">
354
- <span><i data-lucide="check-square"></i> complete_task &amp; friends</span>
391
+ <span><i data-lucide="check-square"></i> complete_task</span>
392
+ <i data-lucide="chevron-down" class="ml-2"></i>
393
+ </summary>
394
+ <div class="px-5 pb-5 space-y-3 text-sm text-slate-600">
395
+ <p>Close the workflow after a successful push and release.</p>
396
+ <ul class="list-disc list-inside space-y-1">
397
+ <li><strong>Parameter:</strong> <code>commitMessage</code> (string, required)</li>
398
+ <li><strong>Effect:</strong> Archives the task in history and resets the state.</li>
399
+ <li><strong>Next step:</strong> Celebrate or begin the next task with <code>start_task</code>.</li>
400
+ </ul>
401
+ </div>
402
+ </details>
403
+
404
+ <details class="border border-slate-200 rounded-lg">
405
+ <summary class="cursor-pointer select-none px-4 py-3 flex items-center justify-between font-medium">
406
+ <span><i data-lucide="alert-triangle"></i> force_complete_task</span>
407
+ <i data-lucide="chevron-down" class="ml-2"></i>
408
+ </summary>
409
+ <div class="px-5 pb-5 space-y-3 text-sm text-slate-600">
410
+ <p>Record an incomplete task as finished with a justification.</p>
411
+ <ul class="list-disc list-inside space-y-1">
412
+ <li><strong>Parameters:</strong> optional <code>commitMessage</code>, optional <code>reason</code> (string)</li>
413
+ <li><strong>Use sparingly:</strong> Ideal for emergencies where remaining steps cannot be done.</li>
414
+ <li><strong>Next step:</strong> Follow up manually on outstanding work.</li>
415
+ </ul>
416
+ </div>
417
+ </details>
418
+
419
+ <details class="border border-slate-200 rounded-lg">
420
+ <summary class="cursor-pointer select-none px-4 py-3 flex items-center justify-between font-medium">
421
+ <span><i data-lucide="x-circle"></i> drop_task</span>
422
+ <i data-lucide="chevron-down" class="ml-2"></i>
423
+ </summary>
424
+ <div class="px-5 pb-5 space-y-3 text-sm text-slate-600">
425
+ <p>Abandon the current effort while keeping the history clean.</p>
426
+ <ul class="list-disc list-inside space-y-1">
427
+ <li><strong>Parameter:</strong> optional <code>reason</code> (string)</li>
428
+ <li><strong>When to use:</strong> Pivoting to a new approach or discarding exploratory work.</li>
429
+ <li><strong>Next step:</strong> Start a fresh task once direction is clear.</li>
430
+ </ul>
431
+ </div>
432
+ </details>
433
+
434
+ <details class="border border-slate-200 rounded-lg">
435
+ <summary class="cursor-pointer select-none px-4 py-3 flex items-center justify-between font-medium">
436
+ <span><i data-lucide="info"></i> get_workflow_status</span>
437
+ <i data-lucide="chevron-down" class="ml-2"></i>
438
+ </summary>
439
+ <div class="px-5 pb-5 space-y-3 text-sm text-slate-600">
440
+ <p>Check the current phase, pending steps, and metadata.</p>
441
+ <ul class="list-disc list-inside space-y-1">
442
+ <li><strong>Parameters:</strong> None.</li>
443
+ <li><strong>Use when:</strong> You need a quick reminder of what remains.</li>
444
+ </ul>
445
+ </div>
446
+ </details>
447
+
448
+ <details class="border border-slate-200 rounded-lg">
449
+ <summary class="cursor-pointer select-none px-4 py-3 flex items-center justify-between font-medium">
450
+ <span><i data-lucide="history"></i> view_history</span>
451
+ <i data-lucide="chevron-down" class="ml-2"></i>
452
+ </summary>
453
+ <div class="px-5 pb-5 space-y-3 text-sm text-slate-600">
454
+ <p>List recently completed tasks and their outcomes.</p>
455
+ <ul class="list-disc list-inside space-y-1">
456
+ <li><strong>Parameter:</strong> optional <code>limit</code> (number)</li>
457
+ <li><strong>Great for:</strong> Standups, retrospectives, or auditing recent work.</li>
458
+ </ul>
459
+ </div>
460
+ </details>
461
+
462
+ <details class="border border-slate-200 rounded-lg">
463
+ <summary class="cursor-pointer select-none px-4 py-3 flex items-center justify-between font-medium">
464
+ <span><i data-lucide="compass"></i> continue_workflow</span>
465
+ <i data-lucide="chevron-down" class="ml-2"></i>
466
+ </summary>
467
+ <div class="px-5 pb-5 space-y-3 text-sm text-slate-600">
468
+ <p>Receive coaching on what to do next.</p>
469
+ <ul class="list-disc list-inside space-y-1">
470
+ <li><strong>Parameters:</strong> None.</li>
471
+ <li><strong>Behavior:</strong> Runs readiness checks automatically and surfaces blockers.</li>
472
+ </ul>
473
+ </div>
474
+ </details>
475
+
476
+ <details class="border border-slate-200 rounded-lg">
477
+ <summary class="cursor-pointer select-none px-4 py-3 flex items-center justify-between font-medium">
478
+ <span><i data-lucide="refresh-cw"></i> rerun_workflow</span>
479
+ <i data-lucide="chevron-down" class="ml-2"></i>
480
+ </summary>
481
+ <div class="px-5 pb-5 space-y-3 text-sm text-slate-600">
482
+ <p>Reset the active task back to the start.</p>
483
+ <ul class="list-disc list-inside space-y-1">
484
+ <li><strong>Parameters:</strong> None.</li>
485
+ <li><strong>Use when:</strong> You want to replay the entire process with fresh inputs.</li>
486
+ </ul>
487
+ </div>
488
+ </details>
489
+
490
+ <details class="border border-slate-200 rounded-lg">
491
+ <summary class="cursor-pointer select-none px-4 py-3 flex items-center justify-between font-medium">
492
+ <span><i data-lucide="workflow"></i> run_full_workflow</span>
493
+ <i data-lucide="chevron-down" class="ml-2"></i>
494
+ </summary>
495
+ <div class="px-5 pb-5 space-y-3 text-sm text-slate-600">
496
+ <p>Execute every command in sequence when you already know the answers.</p>
497
+ <ul class="list-disc list-inside space-y-1">
498
+ <li><strong>Parameters (required):</strong> <code>summary</code>, <code>testCommand</code>, <code>documentationType</code>, <code>documentationSummary</code>, <code>commitMessage</code>, <code>releaseCommand</code></li>
499
+ <li><strong>Optional:</strong> <code>testsPassed</code>, <code>testDetails</code>, <code>branch</code>, <code>releaseNotes</code>, <code>releaseType</code>, <code>preset</code></li>
500
+ <li><strong>Ideal for:</strong> Scripted flows or demos where you want the guardrails without manual calls.</li>
501
+ </ul>
502
+ </div>
503
+ </details>
504
+
505
+ <details class="border border-slate-200 rounded-lg">
506
+ <summary class="cursor-pointer select-none px-4 py-3 flex items-center justify-between font-medium">
507
+ <span><i data-lucide="pie-chart"></i> project_summary</span>
508
+ <i data-lucide="chevron-down" class="ml-2"></i>
509
+ </summary>
510
+ <div class="px-5 pb-5 space-y-3 text-sm text-slate-600">
511
+ <p>Generate a high-level recap of the project’s workflow health.</p>
512
+ <ul class="list-disc list-inside space-y-1">
513
+ <li><strong>Parameters:</strong> None.</li>
514
+ <li><strong>Output:</strong> Aggregated stats compiled from workflow history.</li>
515
+ </ul>
516
+ </div>
517
+ </details>
518
+
519
+ <details class="border border-slate-200 rounded-lg">
520
+ <summary class="cursor-pointer select-none px-4 py-3 flex items-center justify-between font-medium">
521
+ <span><i data-lucide="database"></i> project_summary_data</span>
522
+ <i data-lucide="chevron-down" class="ml-2"></i>
523
+ </summary>
524
+ <div class="px-5 pb-5 space-y-3 text-sm text-slate-600">
525
+ <p>Read the persisted JSON knowledge base (project-summary.json).</p>
526
+ <ul class="list-disc list-inside space-y-1">
527
+ <li><strong>Parameters:</strong> None.</li>
528
+ <li><strong>Use when:</strong> You need the structured summary file for automation or reporting.</li>
529
+ </ul>
530
+ </div>
531
+ </details>
532
+
533
+ <details class="border border-slate-200 rounded-lg">
534
+ <summary class="cursor-pointer select-none px-4 py-3 flex items-center justify-between font-medium">
535
+ <span><i data-lucide="database-backup"></i> project_summary_db</span>
355
536
  <i data-lucide="chevron-down" class="ml-2"></i>
356
537
  </summary>
357
538
  <div class="px-5 pb-5 space-y-3 text-sm text-slate-600">
358
- <p>Finalize or reroute the workflow depending on outcomes.</p>
539
+ <p>Query the SQLite-backed knowledge base for the active user.</p>
359
540
  <ul class="list-disc list-inside space-y-1">
360
- <li><strong>complete_task:</strong> Requires the final <code>commitMessage</code>.</li>
361
- <li><strong>force_complete_task:</strong> Close with justification, recording in history.</li>
362
- <li><strong>drop_task:</strong> Abandon work while capturing a reason.</li>
363
- <li><strong>view_history / continue_workflow:</strong> Read-only helpers for status.</li>
541
+ <li><strong>Parameters:</strong> None.</li>
542
+ <li><strong>Tip:</strong> Set <code>DEV_WORKFLOW_USER_ID</code> to target another user’s dataset.</li>
364
543
  </ul>
365
544
  </div>
366
545
  </details>
package/web/server.js CHANGED
@@ -14,8 +14,20 @@ const allowedDocs = {
14
14
  "web-dashboard.md": join(projectRoot, "docs", "web-dashboard.md"),
15
15
  };
16
16
 
17
+ function getPreferredPort() {
18
+ const fromEnv = process.env.PORT || process.env.DEV_WORKFLOW_WEB_PORT;
19
+
20
+ if (!fromEnv) {
21
+ return null;
22
+ }
23
+
24
+ const parsed = Number(fromEnv);
25
+ return Number.isFinite(parsed) && parsed > 0 ? parsed : null;
26
+ }
27
+
17
28
  async function start() {
18
- const PORT = process.env.DEV_WORKFLOW_WEB_PORT || await getPort({ port: 3111 });
29
+ const preferred = getPreferredPort();
30
+ const PORT = preferred ?? await getPort({ port: 3111 });
19
31
 
20
32
  const server = createServer(async (req, res) => {
21
33
  try {