twining-mcp 1.8.1 → 1.8.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/README.md CHANGED
@@ -145,6 +145,16 @@ The plugin handles agent instructions automatically via skills. For the MCP-only
145
145
 
146
146
  A web dashboard starts automatically at `http://localhost:24282` — browse decisions, blackboard entries, knowledge graph, and agent state. Configurable via `TWINING_DASHBOARD_PORT`.
147
147
 
148
+ <p align="center">
149
+ <img src="assets/dashboard-stats.png" alt="Dashboard — Stats overview" width="700"><br>
150
+ <em>Stats overview: blackboard entries, decisions, graph entities, and activity breakdown</em>
151
+ </p>
152
+
153
+ <p align="center">
154
+ <img src="assets/dashboard-graph.png" alt="Dashboard — Knowledge graph" width="700"><br>
155
+ <em>Interactive knowledge graph: files, decisions, classes, and their relationships</em>
156
+ </p>
157
+
148
158
  ## What's Inside
149
159
 
150
160
  ### Persistent Decisions
@@ -29,6 +29,18 @@ var state = {
29
29
  sessionEnded: false
30
30
  };
31
31
 
32
+ /* URL parameter overrides (e.g. ?poll=1000&demo=1 for faster refresh during demos) */
33
+ (function() {
34
+ var params = new URLSearchParams(window.location.search);
35
+ var poll = parseInt(params.get('poll'), 10);
36
+ if (poll && poll >= 500 && poll <= 30000) {
37
+ state.pollInterval = poll;
38
+ }
39
+ if (params.get('demo') === '1') {
40
+ state.demoMode = true;
41
+ }
42
+ })();
43
+
32
44
  /* ========== Debounce Utility ========== */
33
45
 
34
46
  function debounce(fn, delay) {
@@ -96,7 +108,8 @@ function updateConnectionIndicator() {
96
108
  if (state.wasConnected) {
97
109
  state.disconnectCount++;
98
110
  // After 3 consecutive failed polls (~9 seconds), show session ended overlay
99
- if (state.disconnectCount >= 3 && !state.sessionEnded) {
111
+ // In demo mode, never show session ended (server restarts between acts)
112
+ if (state.disconnectCount >= 3 && !state.sessionEnded && !state.demoMode) {
100
113
  showSessionEnded();
101
114
  }
102
115
  }
@@ -59,7 +59,7 @@
59
59
  <button id="theme-toggle" title="Toggle theme" aria-label="Toggle theme">
60
60
  <span id="theme-icon">&#9789;</span>
61
61
  </button>
62
- <a href="https://github.com/twining-mcp/twining-mcp" target="_blank" rel="noopener noreferrer" class="github-link" title="View on GitHub">
62
+ <a href="https://github.com/daveangulo/twining-mcp" target="_blank" rel="noopener noreferrer" class="github-link" title="View on GitHub">
63
63
  <svg width="18" height="18" viewBox="0 0 16 16" fill="currentColor"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"/></svg>
64
64
  </a>
65
65
  </div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "twining-mcp",
3
- "version": "1.8.1",
3
+ "version": "1.8.2",
4
4
  "description": "Agent coordination MCP server and Claude Code plugin — shared blackboard, decision tracking, and context assembly",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -18,7 +18,9 @@
18
18
  "build": "tsc",
19
19
  "postbuild": "rm -rf dist/dashboard/public && cp -r src/dashboard/public dist/dashboard/public",
20
20
  "test": "vitest run",
21
- "test:watch": "vitest"
21
+ "test:watch": "vitest",
22
+ "demo:record": "npx tsx examples/demo-automation/playwright/record-demo.ts",
23
+ "demo:record:pause": "DEMO_PAUSE=1 npx tsx examples/demo-automation/playwright/record-demo.ts"
22
24
  },
23
25
  "keywords": [
24
26
  "mcp",
@@ -34,6 +36,9 @@
34
36
  ],
35
37
  "author": "Dave Angulo",
36
38
  "license": "MIT",
39
+ "engines": {
40
+ "node": ">=18"
41
+ },
37
42
  "repository": {
38
43
  "type": "git",
39
44
  "url": "git+https://github.com/daveangulo/twining-mcp.git"
@@ -56,6 +61,7 @@
56
61
  "posthog-node": "^4.18.0"
57
62
  },
58
63
  "devDependencies": {
64
+ "@playwright/test": "^1.52.0",
59
65
  "@types/js-yaml": "^4.0.9",
60
66
  "@types/node": "^25.2.3",
61
67
  "@types/proper-lockfile": "^4.1.4",
@@ -29,6 +29,18 @@ var state = {
29
29
  sessionEnded: false
30
30
  };
31
31
 
32
+ /* URL parameter overrides (e.g. ?poll=1000&demo=1 for faster refresh during demos) */
33
+ (function() {
34
+ var params = new URLSearchParams(window.location.search);
35
+ var poll = parseInt(params.get('poll'), 10);
36
+ if (poll && poll >= 500 && poll <= 30000) {
37
+ state.pollInterval = poll;
38
+ }
39
+ if (params.get('demo') === '1') {
40
+ state.demoMode = true;
41
+ }
42
+ })();
43
+
32
44
  /* ========== Debounce Utility ========== */
33
45
 
34
46
  function debounce(fn, delay) {
@@ -96,7 +108,8 @@ function updateConnectionIndicator() {
96
108
  if (state.wasConnected) {
97
109
  state.disconnectCount++;
98
110
  // After 3 consecutive failed polls (~9 seconds), show session ended overlay
99
- if (state.disconnectCount >= 3 && !state.sessionEnded) {
111
+ // In demo mode, never show session ended (server restarts between acts)
112
+ if (state.disconnectCount >= 3 && !state.sessionEnded && !state.demoMode) {
100
113
  showSessionEnded();
101
114
  }
102
115
  }
@@ -59,7 +59,7 @@
59
59
  <button id="theme-toggle" title="Toggle theme" aria-label="Toggle theme">
60
60
  <span id="theme-icon">&#9789;</span>
61
61
  </button>
62
- <a href="https://github.com/twining-mcp/twining-mcp" target="_blank" rel="noopener noreferrer" class="github-link" title="View on GitHub">
62
+ <a href="https://github.com/daveangulo/twining-mcp" target="_blank" rel="noopener noreferrer" class="github-link" title="View on GitHub">
63
63
  <svg width="18" height="18" viewBox="0 0 16 16" fill="currentColor"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"/></svg>
64
64
  </a>
65
65
  </div>