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
|
-
|
|
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">☽</span>
|
|
61
61
|
</button>
|
|
62
|
-
<a href="https://github.com/
|
|
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.
|
|
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
|
-
|
|
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">☽</span>
|
|
61
61
|
</button>
|
|
62
|
-
<a href="https://github.com/
|
|
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>
|