@programinglive/dev-workflow-mcp-server 1.3.1 → 1.3.3

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,20 @@
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.3.3](https://github.com/programinglive/dev-workflow-mcp-server/compare/v1.3.2...v1.3.3) (2025-11-22)
6
+
7
+
8
+ ### ✨ Features
9
+
10
+ * **web:** add version display to dashboard ([cb412bf](https://github.com/programinglive/dev-workflow-mcp-server/commit/cb412bf03f015e9549c09d967463790bb3564bc3))
11
+
12
+ ### [1.3.2](https://github.com/programinglive/dev-workflow-mcp-server/compare/v1.3.1...v1.3.2) (2025-11-22)
13
+
14
+
15
+ ### ✨ Features
16
+
17
+ * **web:** update dashboard with new documentation links ([57c4b9a](https://github.com/programinglive/dev-workflow-mcp-server/commit/57c4b9ab0b13fd3a2a5e4d04a758be20d0de9f04))
18
+
5
19
  ### [1.3.1](https://github.com/programinglive/dev-workflow-mcp-server/compare/v1.3.0...v1.3.1) (2025-11-22)
6
20
 
7
21
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@programinglive/dev-workflow-mcp-server",
3
- "version": "1.3.1",
3
+ "version": "1.3.3",
4
4
  "description": "MCP server to enforce development workflow discipline",
5
5
  "homepage": "https://devworkflow.programinglive.com/",
6
6
  "type": "module",
@@ -18,6 +18,31 @@ const docs = [
18
18
  source: path.join(projectRoot, 'docs', 'web-dashboard.md'),
19
19
  output: 'web-dashboard.html',
20
20
  },
21
+ {
22
+ key: 'GETTING-STARTED.md',
23
+ source: path.join(projectRoot, 'docs', 'antigravity', 'GETTING-STARTED.md'),
24
+ output: 'GETTING-STARTED.html',
25
+ },
26
+ {
27
+ key: 'EXAMPLES.md',
28
+ source: path.join(projectRoot, 'docs', 'antigravity', 'EXAMPLES.md'),
29
+ output: 'EXAMPLES.html',
30
+ },
31
+ {
32
+ key: 'WORKFLOW-TEMPLATES.md',
33
+ source: path.join(projectRoot, 'docs', 'antigravity', 'WORKFLOW-TEMPLATES.md'),
34
+ output: 'WORKFLOW-TEMPLATES.html',
35
+ },
36
+ {
37
+ key: 'TROUBLESHOOTING.md',
38
+ source: path.join(projectRoot, 'docs', 'antigravity', 'TROUBLESHOOTING.md'),
39
+ output: 'TROUBLESHOOTING.html',
40
+ },
41
+ {
42
+ key: 'RELEASE_NOTES.md',
43
+ source: path.join(projectRoot, 'docs', 'release-notes', 'RELEASE_NOTES.md'),
44
+ output: 'RELEASE_NOTES.html',
45
+ },
21
46
  ];
22
47
 
23
48
  const distDocDir = path.join(projectRoot, 'dist', 'docs');
package/web/index.html CHANGED
@@ -1,5 +1,6 @@
1
1
  <!DOCTYPE html>
2
2
  <html lang="en">
3
+
3
4
  <head>
4
5
  <meta charset="UTF-8">
5
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
@@ -8,6 +9,7 @@
8
9
  <script src="https://unpkg.com/lucide@latest"></script>
9
10
  <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
10
11
  </head>
12
+
11
13
  <body class="bg-slate-50 text-slate-900">
12
14
  <div class="min-h-screen flex flex-col">
13
15
  <header class="border-b bg-gradient-to-r from-indigo-600 via-indigo-500 to-purple-500 text-white shadow-lg">
@@ -15,47 +17,69 @@
15
17
  <div class="flex items-start gap-4">
16
18
  <div class="relative">
17
19
  <div class="absolute inset-0 rounded-2xl bg-white/20 blur-md"></div>
18
- <span class="relative inline-flex items-center justify-center h-14 w-14 rounded-2xl bg-white text-indigo-600 text-xl font-semibold shadow-lg">
20
+ <span
21
+ class="relative inline-flex items-center justify-center h-14 w-14 rounded-2xl bg-white text-indigo-600 text-xl font-semibold shadow-lg">
19
22
  DW
20
23
  </span>
21
24
  </div>
22
25
  <div>
23
26
  <h1 class="text-3xl font-semibold flex items-center gap-3">
24
- <span class="inline-flex h-9 w-9 items-center justify-center rounded-full bg-white/20 text-white shadow-sm">
27
+ <span
28
+ class="inline-flex h-9 w-9 items-center justify-center rounded-full bg-white/20 text-white shadow-sm">
25
29
  <i data-lucide="book-open"></i>
26
30
  </span>
27
31
  Dev Workflow Knowledge Hub
32
+ <span id="appVersion"
33
+ class="text-sm bg-white/20 px-2 py-0.5 rounded-full font-normal opacity-90 hidden"></span>
28
34
  </h1>
29
35
  <p class="text-sm md:text-base text-indigo-100/90 mt-2 max-w-xl">
30
- History, commands, and documentation unified into one dashboard so every task follows the disciplined workflow.
36
+ History, commands, and documentation unified into one dashboard so every task follows the disciplined
37
+ workflow.
31
38
  </p>
32
39
  <div class="mt-4 flex flex-wrap gap-3 text-sm">
33
- <span class="inline-flex items-center gap-2 rounded-full bg-white/15 px-3 py-1"><i data-lucide="sparkles" class="h-4 w-4"></i> Live insights</span>
34
- <span class="inline-flex items-center gap-2 rounded-full bg-white/15 px-3 py-1"><i data-lucide="workflow" class="h-4 w-4"></i> Workflow guardrails</span>
35
- <span class="inline-flex items-center gap-2 rounded-full bg-white/15 px-3 py-1"><i data-lucide="book-open-check" class="h-4 w-4"></i> Embedded documentation</span>
40
+ <span class="inline-flex items-center gap-2 rounded-full bg-white/15 px-3 py-1"><i data-lucide="sparkles"
41
+ class="h-4 w-4"></i> Live insights</span>
42
+ <span class="inline-flex items-center gap-2 rounded-full bg-white/15 px-3 py-1"><i data-lucide="workflow"
43
+ class="h-4 w-4"></i> Workflow guardrails</span>
44
+ <span class="inline-flex items-center gap-2 rounded-full bg-white/15 px-3 py-1"><i
45
+ data-lucide="book-open-check" class="h-4 w-4"></i> Embedded documentation</span>
36
46
  </div>
37
47
  </div>
38
48
  </div>
39
49
  <div class="flex flex-col gap-4 md:items-end">
40
50
  <div class="flex items-center gap-3 w-full md:w-auto">
41
51
  <div class="relative flex-1 md:flex-initial">
42
- <i data-lucide="search" class="pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-indigo-300 h-4 w-4"></i>
43
- <input type="search" placeholder="Search sections" aria-label="Search sections" class="w-full pl-9 pr-4 py-2 rounded-full bg-white/20 text-white placeholder:text-indigo-200/80 focus:outline-none focus:ring-2 focus:ring-white/60 focus:bg-white/30" oninput="handleSectionSearch(event)" />
52
+ <i data-lucide="search"
53
+ class="pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-indigo-300 h-4 w-4"></i>
54
+ <input type="search" placeholder="Search sections" aria-label="Search sections"
55
+ class="w-full pl-9 pr-4 py-2 rounded-full bg-white/20 text-white placeholder:text-indigo-200/80 focus:outline-none focus:ring-2 focus:ring-white/60 focus:bg-white/30"
56
+ oninput="handleSectionSearch(event)" />
44
57
  </div>
45
- <button class="inline-flex items-center gap-2 rounded-full bg-white text-indigo-600 px-4 py-2 text-sm font-semibold shadow-md hover:bg-indigo-50" id="refreshDashboardBtn">
58
+ <button
59
+ class="inline-flex items-center gap-2 rounded-full bg-white text-indigo-600 px-4 py-2 text-sm font-semibold shadow-md hover:bg-indigo-50"
60
+ id="refreshDashboardBtn">
46
61
  <i data-lucide="refresh-ccw"></i>
47
62
  Refresh data
48
63
  </button>
49
64
  </div>
50
65
  <div class="flex flex-wrap gap-2 text-xs text-indigo-100/80 md:justify-end">
51
- <span class="inline-flex items-center gap-2"><i data-lucide="keyboard"></i> Press ⬇️ to navigate sections</span>
66
+ <span class="inline-flex items-center gap-2"><i data-lucide="keyboard"></i> Press ⬇️ to navigate
67
+ sections</span>
52
68
  <span class="inline-flex items-center gap-2"><i data-lucide="external-link"></i> Docs open inline</span>
53
69
  </div>
54
70
  <div class="flex flex-wrap gap-3 md:justify-end">
55
- <button class="scroll-link inline-flex items-center gap-2 rounded-full bg-white/15 px-3 py-1 text-sm font-medium hover:bg-white/25 transition" data-scroll-target="#overview"><i data-lucide="compass" class="h-4 w-4"></i> Overview</button>
56
- <button class="scroll-link inline-flex items-center gap-2 rounded-full bg-white/15 px-3 py-1 text-sm font-medium hover:bg-white/25 transition" data-scroll-target="#history"><i data-lucide="clock" class="h-4 w-4"></i> History</button>
57
- <button class="scroll-link inline-flex items-center gap-2 rounded-full bg-white/15 px-3 py-1 text-sm font-medium hover:bg-white/25 transition" data-scroll-target="#commands"><i data-lucide="workflow" class="h-4 w-4"></i> Commands</button>
58
- <button class="scroll-link inline-flex items-center gap-2 rounded-full bg-white/15 px-3 py-1 text-sm font-medium hover:bg-white/25 transition" data-scroll-target="#api"><i data-lucide="code" class="h-4 w-4"></i> API</button>
71
+ <button
72
+ class="scroll-link inline-flex items-center gap-2 rounded-full bg-white/15 px-3 py-1 text-sm font-medium hover:bg-white/25 transition"
73
+ data-scroll-target="#overview"><i data-lucide="compass" class="h-4 w-4"></i> Overview</button>
74
+ <button
75
+ class="scroll-link inline-flex items-center gap-2 rounded-full bg-white/15 px-3 py-1 text-sm font-medium hover:bg-white/25 transition"
76
+ data-scroll-target="#history"><i data-lucide="clock" class="h-4 w-4"></i> History</button>
77
+ <button
78
+ class="scroll-link inline-flex items-center gap-2 rounded-full bg-white/15 px-3 py-1 text-sm font-medium hover:bg-white/25 transition"
79
+ data-scroll-target="#commands"><i data-lucide="workflow" class="h-4 w-4"></i> Commands</button>
80
+ <button
81
+ class="scroll-link inline-flex items-center gap-2 rounded-full bg-white/15 px-3 py-1 text-sm font-medium hover:bg-white/25 transition"
82
+ data-scroll-target="#api"><i data-lucide="code" class="h-4 w-4"></i> API</button>
59
83
  </div>
60
84
  </div>
61
85
  </div>
@@ -67,20 +91,46 @@
67
91
  <div>
68
92
  <h2 class="text-xs uppercase tracking-wide text-slate-500 mb-2">Documentation</h2>
69
93
  <ul class="space-y-1 text-sm" id="sidebarNav">
70
- <li><a href="#overview" class="block px-3 py-2 rounded hover:bg-indigo-50 text-slate-700">Overview</a></li>
71
- <li><a href="#history" class="block px-3 py-2 rounded hover:bg-indigo-50 text-slate-700">Workflow History</a></li>
72
- <li><a href="#usage" class="block px-3 py-2 rounded hover:bg-indigo-50 text-slate-700">Using Filters</a></li>
73
- <li><a href="#commands" class="block px-3 py-2 rounded hover:bg-indigo-50 text-slate-700">Commands Reference</a></li>
74
- <li><a href="#api" class="block px-3 py-2 rounded hover:bg-indigo-50 text-slate-700">API Endpoints</a></li>
75
- <li><a href="#troubleshooting" class="block px-3 py-2 rounded hover:bg-indigo-50 text-slate-700">Troubleshooting</a></li>
94
+ <li><a href="#overview" class="block px-3 py-2 rounded hover:bg-indigo-50 text-slate-700">Overview</a>
95
+ </li>
96
+ <li><a href="#history" class="block px-3 py-2 rounded hover:bg-indigo-50 text-slate-700">Workflow
97
+ History</a></li>
98
+ <li><a href="#usage" class="block px-3 py-2 rounded hover:bg-indigo-50 text-slate-700">Using Filters</a>
99
+ </li>
100
+ <li><a href="#commands" class="block px-3 py-2 rounded hover:bg-indigo-50 text-slate-700">Commands
101
+ Reference</a></li>
102
+ <li><a href="#api" class="block px-3 py-2 rounded hover:bg-indigo-50 text-slate-700">API Endpoints</a>
103
+ </li>
104
+ <li><a href="#troubleshooting"
105
+ class="block px-3 py-2 rounded hover:bg-indigo-50 text-slate-700">Troubleshooting</a></li>
76
106
  </ul>
77
107
  </div>
78
108
  <div class="border-t pt-4">
79
109
  <h2 class="text-xs uppercase tracking-wide text-slate-500 mb-2">Resources</h2>
80
110
  <ul class="space-y-1 text-sm">
81
- <li><a href="https://github.com/programinglive/dev-workflow-mcp-server" target="_blank" rel="noopener" class="block px-3 py-2 rounded hover:bg-indigo-50 text-indigo-600">GitHub Repository</a></li>
82
- <li><button data-doc="README.md" class="doc-link block w-full text-left px-3 py-2 rounded hover:bg-indigo-50 text-indigo-600">Project README</button></li>
83
- <li><button data-doc="web-dashboard.md" class="doc-link block w-full text-left px-3 py-2 rounded hover:bg-indigo-50 text-indigo-600">Web Dashboard Guide</button></li>
111
+ <li><a href="https://github.com/programinglive/dev-workflow-mcp-server" target="_blank" rel="noopener"
112
+ class="block px-3 py-2 rounded hover:bg-indigo-50 text-indigo-600">GitHub Repository</a></li>
113
+ <li><button data-doc="README.md"
114
+ class="doc-link block w-full text-left px-3 py-2 rounded hover:bg-indigo-50 text-indigo-600">Project
115
+ README</button></li>
116
+ <li><button data-doc="web-dashboard.md"
117
+ class="doc-link block w-full text-left px-3 py-2 rounded hover:bg-indigo-50 text-indigo-600">Web
118
+ Dashboard Guide</button></li>
119
+ <li><button data-doc="GETTING-STARTED.md"
120
+ class="doc-link block w-full text-left px-3 py-2 rounded hover:bg-indigo-50 text-indigo-600">Getting
121
+ Started</button></li>
122
+ <li><button data-doc="EXAMPLES.md"
123
+ class="doc-link block w-full text-left px-3 py-2 rounded hover:bg-indigo-50 text-indigo-600">Examples</button>
124
+ </li>
125
+ <li><button data-doc="WORKFLOW-TEMPLATES.md"
126
+ class="doc-link block w-full text-left px-3 py-2 rounded hover:bg-indigo-50 text-indigo-600">Workflow
127
+ Templates</button></li>
128
+ <li><button data-doc="TROUBLESHOOTING.md"
129
+ class="doc-link block w-full text-left px-3 py-2 rounded hover:bg-indigo-50 text-indigo-600">Troubleshooting</button>
130
+ </li>
131
+ <li><button data-doc="RELEASE_NOTES.md"
132
+ class="doc-link block w-full text-left px-3 py-2 rounded hover:bg-indigo-50 text-indigo-600">Release
133
+ Notes</button></li>
84
134
  </ul>
85
135
  </div>
86
136
  </nav>
@@ -94,29 +144,37 @@
94
144
  <i data-lucide="compass"></i>
95
145
  Overview
96
146
  </h2>
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>
147
+ <p class="mt-2 text-slate-600">Learn how the Dev Workflow dashboard surfaces workflow history and offers
148
+ inline documentation for every MCP command.</p>
98
149
  <div class="mt-4 bg-amber-50 border border-amber-200 text-amber-800 text-sm rounded-lg p-4 flex gap-3">
99
150
  <i data-lucide="alert-circle" class="mt-1 shrink-0"></i>
100
151
  <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
152
+ The dashboard is read-only. MCP clients (Windsurf, Claude Desktop, etc.) must launch the server via
153
+ <code>node index.js</code>
154
+ over stdio on the machine they control. Hosting this site publicly does <strong>not</strong> expose
155
+ the MCP protocol; without SSH or another
103
156
  execution path to the server, remote users cannot connect their MCP agents.
104
157
  </p>
105
158
  </div>
106
159
  </div>
107
160
  <div class="hidden md:flex items-center gap-2 text-sm text-slate-500">
108
161
  <i data-lucide="info"></i>
109
- <span>Need help? Jump to <a href="#commands" class="text-indigo-600 underline">Commands Reference</a>.</span>
162
+ <span>Need help? Jump to <a href="#commands" class="text-indigo-600 underline">Commands
163
+ Reference</a>.</span>
110
164
  </div>
111
165
  </div>
112
166
  <div class="mt-6 grid gap-6 md:grid-cols-2">
113
167
  <div class="p-4 bg-indigo-50 rounded-lg border border-indigo-100">
114
- <h3 class="font-medium text-indigo-900 flex items-center gap-2"><i data-lucide="activity"></i> Live Insights</h3>
115
- <p class="text-sm text-indigo-900/80 mt-2">Connects directly to your `.state` history to show progress, release cadence, and team activity trends.</p>
168
+ <h3 class="font-medium text-indigo-900 flex items-center gap-2"><i data-lucide="activity"></i> Live
169
+ Insights</h3>
170
+ <p class="text-sm text-indigo-900/80 mt-2">Connects directly to your `.state` history to show progress,
171
+ release cadence, and team activity trends.</p>
116
172
  </div>
117
173
  <div class="p-4 bg-emerald-50 rounded-lg border border-emerald-100">
118
- <h3 class="font-medium text-emerald-900 flex items-center gap-2"><i data-lucide="book"></i> Built-in Playbook</h3>
119
- <p class="text-sm text-emerald-900/80 mt-2">Every MCP tool is documented with prerequisites, recommended usage, and follow-up actions.</p>
174
+ <h3 class="font-medium text-emerald-900 flex items-center gap-2"><i data-lucide="book"></i> Built-in
175
+ Playbook</h3>
176
+ <p class="text-sm text-emerald-900/80 mt-2">Every MCP tool is documented with prerequisites, recommended
177
+ usage, and follow-up actions.</p>
120
178
  </div>
121
179
  </div>
122
180
  </section>
@@ -128,7 +186,8 @@
128
186
  <i data-lucide="clock-4"></i>
129
187
  Workflow History Explorer
130
188
  </h2>
131
- <p class="text-slate-600 mt-2">Slice and explore your task history. Use the filters below to focus on a user, time range, or frequency.</p>
189
+ <p class="text-slate-600 mt-2">Slice and explore your task history. Use the filters below to focus on a
190
+ user, time range, or frequency.</p>
132
191
  </div>
133
192
  <a href="#api" class="inline-flex items-center gap-2 text-sm text-indigo-600 hover:text-indigo-700">
134
193
  <i data-lucide="terminal"></i>
@@ -145,19 +204,23 @@
145
204
  <div class="grid gap-4 sm:grid-cols-2 xl:grid-cols-3">
146
205
  <label class="flex flex-col gap-1">
147
206
  <span class="text-sm font-medium text-slate-600">User ID</span>
148
- <input id="userId" type="text" placeholder="default" class="border border-slate-300 rounded px-3 py-2 focus:outline-none focus:ring-2 focus:ring-indigo-500" />
207
+ <input id="userId" type="text" placeholder="default"
208
+ class="border border-slate-300 rounded px-3 py-2 focus:outline-none focus:ring-2 focus:ring-indigo-500" />
149
209
  </label>
150
210
  <label class="flex flex-col gap-1">
151
211
  <span class="text-sm font-medium text-slate-600">Start date</span>
152
- <input id="startDate" type="date" class="border border-slate-300 rounded px-3 py-2 focus:outline-none focus:ring-2 focus:ring-indigo-500" />
212
+ <input id="startDate" type="date"
213
+ class="border border-slate-300 rounded px-3 py-2 focus:outline-none focus:ring-2 focus:ring-indigo-500" />
153
214
  </label>
154
215
  <label class="flex flex-col gap-1">
155
216
  <span class="text-sm font-medium text-slate-600">End date</span>
156
- <input id="endDate" type="date" class="border border-slate-300 rounded px-3 py-2 focus:outline-none focus:ring-2 focus:ring-indigo-500" />
217
+ <input id="endDate" type="date"
218
+ class="border border-slate-300 rounded px-3 py-2 focus:outline-none focus:ring-2 focus:ring-indigo-500" />
157
219
  </label>
158
220
  <label class="flex flex-col gap-1">
159
221
  <span class="text-sm font-medium text-slate-600">Activity frequency</span>
160
- <select id="frequency" class="border border-slate-300 rounded px-3 py-2 focus:outline-none focus:ring-2 focus:ring-indigo-500">
222
+ <select id="frequency"
223
+ class="border border-slate-300 rounded px-3 py-2 focus:outline-none focus:ring-2 focus:ring-indigo-500">
161
224
  <option value="daily">Daily</option>
162
225
  <option value="monthly">Monthly</option>
163
226
  <option value="yearly">Yearly</option>
@@ -165,7 +228,8 @@
165
228
  </label>
166
229
  <label class="flex flex-col gap-1">
167
230
  <span class="text-sm font-medium text-slate-600">Page size</span>
168
- <select id="pageSize" class="border border-slate-300 rounded px-3 py-2 focus:outline-none focus:ring-2 focus:ring-indigo-500">
231
+ <select id="pageSize"
232
+ class="border border-slate-300 rounded px-3 py-2 focus:outline-none focus:ring-2 focus:ring-indigo-500">
169
233
  <option value="10">10</option>
170
234
  <option value="20" selected>20</option>
171
235
  <option value="50">50</option>
@@ -173,8 +237,10 @@
173
237
  </label>
174
238
  </div>
175
239
  <div class="flex flex-wrap gap-3 items-center mt-5">
176
- <button id="applyFiltersBtn" class="bg-indigo-600 text-white px-4 py-2 rounded-md hover:bg-indigo-700">Apply filters</button>
177
- <button id="resetFiltersBtn" class="bg-white border border-slate-300 text-slate-700 px-4 py-2 rounded-md hover:bg-slate-100">Reset</button>
240
+ <button id="applyFiltersBtn"
241
+ class="bg-indigo-600 text-white px-4 py-2 rounded-md hover:bg-indigo-700">Apply filters</button>
242
+ <button id="resetFiltersBtn"
243
+ class="bg-white border border-slate-300 text-slate-700 px-4 py-2 rounded-md hover:bg-slate-100">Reset</button>
178
244
  <span class="text-sm text-slate-500">Leave fields empty to view all data for the default user.</span>
179
245
  </div>
180
246
  </div>
@@ -205,9 +271,11 @@
205
271
  </h3>
206
272
  <div id="historyContent" class="space-y-3 text-sm"></div>
207
273
  <div id="paginationControls" class="flex items-center justify-between mt-6 hidden">
208
- <button id="prevPageBtn" class="bg-white border border-slate-300 text-slate-700 px-3 py-1 rounded-md hover:bg-slate-100 disabled:opacity-50 disabled:cursor-not-allowed">Previous</button>
274
+ <button id="prevPageBtn"
275
+ class="bg-white border border-slate-300 text-slate-700 px-3 py-1 rounded-md hover:bg-slate-100 disabled:opacity-50 disabled:cursor-not-allowed">Previous</button>
209
276
  <span id="pageInfo" class="text-sm text-slate-600"></span>
210
- <button id="nextPageBtn" class="bg-white border border-slate-300 text-slate-700 px-3 py-1 rounded-md hover:bg-slate-100 disabled:opacity-50 disabled:cursor-not-allowed">Next</button>
277
+ <button id="nextPageBtn"
278
+ class="bg-white border border-slate-300 text-slate-700 px-3 py-1 rounded-md hover:bg-slate-100 disabled:opacity-50 disabled:cursor-not-allowed">Next</button>
211
279
  </div>
212
280
  </div>
213
281
  </section>
@@ -221,19 +289,23 @@
221
289
  <div class="mt-4 grid gap-6 md:grid-cols-2">
222
290
  <div>
223
291
  <h3 class="font-semibold text-slate-800">1. Filter your scope</h3>
224
- <p class="text-sm text-slate-600 mt-2">Pick a user ID to analyze individual contributions. Add date ranges to focus on a release window, sprint, or quarter.</p>
292
+ <p class="text-sm text-slate-600 mt-2">Pick a user ID to analyze individual contributions. Add date ranges
293
+ to focus on a release window, sprint, or quarter.</p>
225
294
  </div>
226
295
  <div>
227
296
  <h3 class="font-semibold text-slate-800">2. Inspect the summary</h3>
228
- <p class="text-sm text-slate-600 mt-2">Review overall throughput, mix of task types, and recent activity. The summary auto-updates whenever you change filters.</p>
297
+ <p class="text-sm text-slate-600 mt-2">Review overall throughput, mix of task types, and recent activity.
298
+ The summary auto-updates whenever you change filters.</p>
229
299
  </div>
230
300
  <div>
231
301
  <h3 class="font-semibold text-slate-800">3. Dive into entries</h3>
232
- <p class="text-sm text-slate-600 mt-2">Scroll the event log to see commit messages, forced completions, and dropped tasks. Use pagination to traverse older work.</p>
302
+ <p class="text-sm text-slate-600 mt-2">Scroll the event log to see commit messages, forced completions,
303
+ and dropped tasks. Use pagination to traverse older work.</p>
233
304
  </div>
234
305
  <div>
235
306
  <h3 class="font-semibold text-slate-800">4. Export via API</h3>
236
- <p class="text-sm text-slate-600 mt-2">Need automation or reporting? Jump to the <a href="#api" class="text-indigo-600 underline">API section</a> and query JSON endpoints directly.</p>
307
+ <p class="text-sm text-slate-600 mt-2">Need automation or reporting? Jump to the <a href="#api"
308
+ class="text-indigo-600 underline">API section</a> and query JSON endpoints directly.</p>
237
309
  </div>
238
310
  </div>
239
311
  </section>
@@ -245,13 +317,16 @@
245
317
  <i data-lucide="workflow"></i>
246
318
  Commands Reference
247
319
  </h2>
248
- <div class="mt-2 inline-flex items-center gap-2 rounded-full bg-indigo-50 px-3 py-1 text-xs font-semibold text-indigo-600 uppercase tracking-wide">
320
+ <div
321
+ class="mt-2 inline-flex items-center gap-2 rounded-full bg-indigo-50 px-3 py-1 text-xs font-semibold text-indigo-600 uppercase tracking-wide">
249
322
  <i data-lucide="check-square"></i>
250
323
  <span>All Tools · 20 commands</span>
251
324
  </div>
252
- <p class="text-slate-600 mt-3">Explore all <strong>20</strong> MCP tools that keep the workflow honest. Review prerequisites, usage tips, and next steps for each command below.</p>
325
+ <p class="text-slate-600 mt-3">Explore all <strong>20</strong> MCP tools that keep the workflow honest.
326
+ Review prerequisites, usage tips, and next steps for each command below.</p>
253
327
  </div>
254
- <button data-doc="README.md" data-doc-heading="🛠️ Available Tools" class="doc-link inline-flex items-center gap-2 text-sm text-indigo-600 hover:text-indigo-700">
328
+ <button data-doc="README.md" data-doc-heading="🛠️ Available Tools"
329
+ class="doc-link inline-flex items-center gap-2 text-sm text-indigo-600 hover:text-indigo-700">
255
330
  <i data-lucide="external-link"></i>
256
331
  Full README Reference
257
332
  </button>
@@ -266,7 +341,8 @@
266
341
  <div class="px-5 pb-5 space-y-3 text-sm text-slate-600">
267
342
  <p>Begin every effort with a clear description and task type.</p>
268
343
  <ul class="list-disc list-inside space-y-1">
269
- <li><strong>Parameters:</strong> <code>description</code> (string, required), <code>type</code> ("feature" | "bugfix" | "refactor" | "other", required)</li>
344
+ <li><strong>Parameters:</strong> <code>description</code> (string, required), <code>type</code>
345
+ ("feature" | "bugfix" | "refactor" | "other", required)</li>
270
346
  <li><strong>When to use:</strong> Before writing code or touching files.</li>
271
347
  <li><strong>Next step:</strong> Implement your changes then run <code>mark_bug_fixed</code>.</li>
272
348
  </ul>
@@ -326,7 +402,8 @@
326
402
  <div class="px-5 pb-5 space-y-3 text-sm text-slate-600">
327
403
  <p>Capture the outcome of your automated test run.</p>
328
404
  <ul class="list-disc list-inside space-y-1">
329
- <li><strong>Parameters:</strong> <code>passed</code> (boolean, required), <code>testCommand</code> (string, required), optional <code>details</code> (string)</li>
405
+ <li><strong>Parameters:</strong> <code>passed</code> (boolean, required), <code>testCommand</code>
406
+ (string, required), optional <code>details</code> (string)</li>
330
407
  <li><strong>Guidance:</strong> Never proceed if tests fail—return to coding and re-run.</li>
331
408
  <li><strong>Next step:</strong> Move to <code>create_documentation</code> when green.</li>
332
409
  </ul>
@@ -341,8 +418,10 @@
341
418
  <div class="px-5 pb-5 space-y-3 text-sm text-slate-600">
342
419
  <p>Record documentation updates before proceeding to verification.</p>
343
420
  <ul class="list-disc list-inside space-y-1">
344
- <li><strong>Parameters:</strong> <code>documentationType</code> (enum), <code>summary</code> (string)</li>
345
- <li><strong>Tip:</strong> Keep summaries short but action-oriented. Include links to README sections or docs PRs.</li>
421
+ <li><strong>Parameters:</strong> <code>documentationType</code> (enum), <code>summary</code> (string)
422
+ </li>
423
+ <li><strong>Tip:</strong> Keep summaries short but action-oriented. Include links to README sections
424
+ or docs PRs.</li>
346
425
  </ul>
347
426
  </div>
348
427
  </details>
@@ -369,7 +448,8 @@
369
448
  <div class="px-5 pb-5 space-y-3 text-sm text-slate-600">
370
449
  <p>Automatically stage, commit, and push once verification passes.</p>
371
450
  <ul class="list-disc list-inside space-y-1">
372
- <li><strong>Parameters:</strong> <code>commitMessage</code> (string), optional <code>branch</code> (string)</li>
451
+ <li><strong>Parameters:</strong> <code>commitMessage</code> (string), optional <code>branch</code>
452
+ (string)</li>
373
453
  <li><strong>Behavior:</strong> Detects clean working trees and reuses the latest commit metadata.</li>
374
454
  <li><strong>Reminder:</strong> Any new edits will bounce you back to this step.</li>
375
455
  </ul>
@@ -384,8 +464,11 @@
384
464
  <div class="px-5 pb-5 space-y-3 text-sm text-slate-600">
385
465
  <p>Record release details once the commit is live. Guards ensure the workflow order.</p>
386
466
  <ul class="list-disc list-inside space-y-1">
387
- <li><strong>Parameters:</strong> <code>command</code> (string), optional <code>notes</code>, <code>releaseType</code>, <code>preset</code></li>
388
- <li><strong>Integration:</strong> Wraps <code>release-wrapper.js</code> to prevent accidental version bumps.</li>
467
+ <li><strong>Parameters:</strong> <code>command</code> (string), optional <code>notes</code>,
468
+ <code>releaseType</code>, <code>preset</code>
469
+ </li>
470
+ <li><strong>Integration:</strong> Wraps <code>release-wrapper.js</code> to prevent accidental version
471
+ bumps.</li>
389
472
  </ul>
390
473
  </div>
391
474
  </details>
@@ -413,7 +496,8 @@
413
496
  <div class="px-5 pb-5 space-y-3 text-sm text-slate-600">
414
497
  <p>Record an incomplete task as finished with a justification.</p>
415
498
  <ul class="list-disc list-inside space-y-1">
416
- <li><strong>Parameters:</strong> optional <code>commitMessage</code>, optional <code>reason</code> (string)</li>
499
+ <li><strong>Parameters:</strong> optional <code>commitMessage</code>, optional <code>reason</code>
500
+ (string)</li>
417
501
  <li><strong>Use sparingly:</strong> Ideal for emergencies where remaining steps cannot be done.</li>
418
502
  <li><strong>Next step:</strong> Follow up manually on outstanding work.</li>
419
503
  </ul>
@@ -499,9 +583,15 @@
499
583
  <div class="px-5 pb-5 space-y-3 text-sm text-slate-600">
500
584
  <p>Execute every command in sequence when you already know the answers.</p>
501
585
  <ul class="list-disc list-inside space-y-1">
502
- <li><strong>Parameters (required):</strong> <code>summary</code>, <code>testCommand</code>, <code>documentationType</code>, <code>documentationSummary</code>, <code>commitMessage</code>, <code>releaseCommand</code></li>
503
- <li><strong>Optional:</strong> <code>testsPassed</code>, <code>testDetails</code>, <code>branch</code>, <code>releaseNotes</code>, <code>releaseType</code>, <code>preset</code></li>
504
- <li><strong>Ideal for:</strong> Scripted flows or demos where you want the guardrails without manual calls.</li>
586
+ <li><strong>Parameters (required):</strong> <code>summary</code>, <code>testCommand</code>,
587
+ <code>documentationType</code>, <code>documentationSummary</code>, <code>commitMessage</code>,
588
+ <code>releaseCommand</code>
589
+ </li>
590
+ <li><strong>Optional:</strong> <code>testsPassed</code>, <code>testDetails</code>,
591
+ <code>branch</code>, <code>releaseNotes</code>, <code>releaseType</code>, <code>preset</code>
592
+ </li>
593
+ <li><strong>Ideal for:</strong> Scripted flows or demos where you want the guardrails without manual
594
+ calls.</li>
505
595
  </ul>
506
596
  </div>
507
597
  </details>
@@ -555,7 +645,8 @@
555
645
  <i data-lucide="code"></i>
556
646
  API Endpoints
557
647
  </div>
558
- <p class="text-slate-600">Use these JSON endpoints to integrate task history into automation, dashboards, or reports.</p>
648
+ <p class="text-slate-600">Use these JSON endpoints to integrate task history into automation, dashboards, or
649
+ reports.</p>
559
650
  <div class="space-y-4 text-sm text-slate-700">
560
651
  <div class="border border-slate-200 rounded-lg p-4">
561
652
  <h3 class="font-medium text-slate-800">GET /api/summary</h3>
@@ -565,12 +656,16 @@
565
656
  <div class="border border-slate-200 rounded-lg p-4">
566
657
  <h3 class="font-medium text-slate-800">GET /api/history</h3>
567
658
  <p class="mt-1">Paginated timeline of workflow entries with commit metadata.</p>
568
- <p class="mt-2 text-xs text-slate-500">Query params: <code>user</code>, <code>page</code>, <code>pageSize</code>, <code>startDate</code>, <code>endDate</code></p>
659
+ <p class="mt-2 text-xs text-slate-500">Query params: <code>user</code>, <code>page</code>,
660
+ <code>pageSize</code>, <code>startDate</code>, <code>endDate</code>
661
+ </p>
569
662
  </div>
570
663
  <div class="border border-slate-200 rounded-lg p-4">
571
664
  <h3 class="font-medium text-slate-800">GET /api/history-summary</h3>
572
665
  <p class="mt-1">Counts per day, month, or year for trend analysis.</p>
573
- <p class="mt-2 text-xs text-slate-500">Query params: <code>user</code>, <code>frequency</code>, <code>startDate</code>, <code>endDate</code></p>
666
+ <p class="mt-2 text-xs text-slate-500">Query params: <code>user</code>, <code>frequency</code>,
667
+ <code>startDate</code>, <code>endDate</code>
668
+ </p>
574
669
  </div>
575
670
  </div>
576
671
  </section>
@@ -591,15 +686,19 @@
591
686
  <tbody class="divide-y divide-slate-100">
592
687
  <tr>
593
688
  <td class="px-4 py-3">Dashboard shows empty data</td>
594
- <td class="px-4 py-3">Verify the MCP server has created `.state/users/<user>/workflow-state.json` and that the selected user matches.</td>
689
+ <td class="px-4 py-3">Verify the MCP server has created `.state/users/<user>/workflow-state.json` and
690
+ that the selected user matches.</td>
595
691
  </tr>
596
692
  <tr>
597
693
  <td class="px-4 py-3">`better-sqlite3` build error on startup</td>
598
- <td class="px-4 py-3">Install Python 3 and native build tools (Windows) or ensure SQLite headers are installed (macOS/Linux).</td>
694
+ <td class="px-4 py-3">Install Python 3 and native build tools (Windows) or ensure SQLite headers are
695
+ installed (macOS/Linux).</td>
599
696
  </tr>
600
697
  <tr>
601
698
  <td class="px-4 py-3">Port already in use</td>
602
- <td class="px-4 py-3">Set <code>DEV_WORKFLOW_WEB_PORT</code> to a free port before running <code>npm run web</code>.</td>
699
+ <td class="px-4 py-3">Set <code>DEV_WORKFLOW_WEB_PORT</code> to a free port before running
700
+ <code>npm run web</code>.
701
+ </td>
603
702
  </tr>
604
703
  </tbody>
605
704
  </table>
@@ -618,7 +717,8 @@
618
717
  <h3 id="docModalTitle" class="text-lg font-semibold text-slate-800">Documentation</h3>
619
718
  <p id="docModalSubtitle" class="text-xs text-slate-500 mt-1"></p>
620
719
  </div>
621
- <button id="docModalClose" class="p-2 rounded-md text-slate-500 hover:text-slate-700 hover:bg-slate-100" aria-label="Close documentation">
720
+ <button id="docModalClose" class="p-2 rounded-md text-slate-500 hover:text-slate-700 hover:bg-slate-100"
721
+ aria-label="Close documentation">
622
722
  <i data-lucide="x"></i>
623
723
  </button>
624
724
  </header>
@@ -779,6 +879,16 @@
779
879
 
780
880
  async function load() {
781
881
  const userId = state.userId || "default";
882
+
883
+ // Fetch version
884
+ fetchJson('/api/version').then(({ version }) => {
885
+ const verEl = el('appVersion');
886
+ if (verEl && version) {
887
+ verEl.textContent = `v${version}`;
888
+ verEl.classList.remove('hidden');
889
+ }
890
+ }).catch(() => { }); // Ignore version fetch errors
891
+
782
892
  try {
783
893
  const historyParams = {
784
894
  user: userId,
@@ -930,4 +1040,5 @@
930
1040
  load();
931
1041
  </script>
932
1042
  </body>
933
- </html>
1043
+
1044
+ </html>
package/web/server.js CHANGED
@@ -18,6 +18,26 @@ const docSources = {
18
18
  markdown: join(projectRoot, "docs", "web-dashboard.md"),
19
19
  html: join(projectRoot, "dist", "docs", "web-dashboard.html"),
20
20
  },
21
+ "GETTING-STARTED.md": {
22
+ markdown: join(projectRoot, "docs", "antigravity", "GETTING-STARTED.md"),
23
+ html: join(projectRoot, "dist", "docs", "GETTING-STARTED.html"),
24
+ },
25
+ "EXAMPLES.md": {
26
+ markdown: join(projectRoot, "docs", "antigravity", "EXAMPLES.md"),
27
+ html: join(projectRoot, "dist", "docs", "EXAMPLES.html"),
28
+ },
29
+ "WORKFLOW-TEMPLATES.md": {
30
+ markdown: join(projectRoot, "docs", "antigravity", "WORKFLOW-TEMPLATES.md"),
31
+ html: join(projectRoot, "dist", "docs", "WORKFLOW-TEMPLATES.html"),
32
+ },
33
+ "TROUBLESHOOTING.md": {
34
+ markdown: join(projectRoot, "docs", "antigravity", "TROUBLESHOOTING.md"),
35
+ html: join(projectRoot, "dist", "docs", "TROUBLESHOOTING.html"),
36
+ },
37
+ "RELEASE_NOTES.md": {
38
+ markdown: join(projectRoot, "docs", "release-notes", "RELEASE_NOTES.md"),
39
+ html: join(projectRoot, "dist", "docs", "RELEASE_NOTES.html"),
40
+ },
21
41
  };
22
42
 
23
43
  async function resolveDocContent(docKey) {
@@ -112,6 +132,11 @@ async function start() {
112
132
 
113
133
  res.writeHead(200, { "Content-Type": "application/json" });
114
134
  res.end(JSON.stringify({ doc: resolvedKey, content: result.content, format: result.format }));
135
+ } else if (req.method === "GET" && url.pathname === "/api/version") {
136
+ const packageJson = await readFile(join(projectRoot, "package.json"), "utf-8");
137
+ const { version } = JSON.parse(packageJson);
138
+ res.writeHead(200, { "Content-Type": "application/json" });
139
+ res.end(JSON.stringify({ version }));
115
140
  } else {
116
141
  res.writeHead(404, { "Content-Type": "text/plain" });
117
142
  res.end("Not found");