starmux 0.10.0 → 0.12.0
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/CONTRIBUTING.md +1 -1
- package/README.md +184 -59
- package/SECURITY.md +3 -3
- package/app/README.md +6 -2
- package/dist/src/access-control.js +23 -20
- package/dist/src/access-control.js.map +1 -1
- package/dist/src/access-dashboard.js +8 -2
- package/dist/src/access-dashboard.js.map +1 -1
- package/dist/src/cli/instances.js +87 -14
- package/dist/src/cli/instances.js.map +1 -1
- package/dist/src/cli/starmux-status.js +122 -0
- package/dist/src/cli/starmux-status.js.map +1 -0
- package/dist/src/cli/starmux.js +222 -49
- package/dist/src/cli/starmux.js.map +1 -1
- package/dist/src/deny-dashboard.js +2 -2
- package/dist/src/deny-dashboard.js.map +1 -1
- package/dist/src/instance-runtime.js +11 -2
- package/dist/src/instance-runtime.js.map +1 -1
- package/dist/src/instance-store.js +3 -1
- package/dist/src/instance-store.js.map +1 -1
- package/dist/src/ops-dashboard.js +4 -4
- package/dist/src/ops-dashboard.js.map +1 -1
- package/dist/src/permissions-dashboard.js +2 -2
- package/dist/src/permissions-dashboard.js.map +1 -1
- package/dist/src/starmux-migration.js +1 -1
- package/dist/src/starmux-migration.js.map +1 -1
- package/docs/ACCESS_CONTROL.md +5 -5
- package/docs/CLIENTS.md +11 -19
- package/docs/CONNECT_CHATGPT.md +4 -6
- package/docs/INSTALL.md +9 -5
- package/docs/INSTANCES.md +5 -2
- package/docs/OAUTH.md +6 -14
- package/docs/PLATFORMS.md +4 -4
- package/docs/README.md +2 -11
- package/docs/REMOTE_SETUP.md +13 -13
- package/docs/SECURITY.md +5 -5
- package/docs/assets/starmux-app-en.png +0 -0
- package/docs/assets/starmux-architecture.svg +315 -0
- package/package.json +1 -1
- package/docs/ARCHITECTURE.md +0 -51
- package/docs/MIGRATION.md +0 -37
- package/docs/RELEASE_STATUS.md +0 -22
- package/docs/TYPESCRIPT_MIGRATION.md +0 -56
- package/docs/VALIDATION_OAUTH.md +0 -79
- package/docs/VALIDATION_TUNNEL.md +0 -39
- package/docs/VALIDATION_WORKBUDDY.md +0 -59
- package/docs/assets/mcp-connection-route.svg +0 -104
- package/docs/assets/mcp-gateway-simple.svg +0 -62
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
<?xml version='1.0' encoding='UTF-8'?>
|
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1672 941" width="1672" height="941" role="img" aria-labelledby="diagram-title diagram-desc">
|
|
3
|
+
<title id="diagram-title">Starmux — Cloud MCP clients. Real computers on earth.</title>
|
|
4
|
+
<desc id="diagram-desc">Editable vector diagram: cloud MCP clients connect through Direct HTTPS or a Secure Tunnel to independent self-hosted Starmux instances. Each instance acts as programmable MCP middleware for policies, routing and tool adapters before reaching MCP servers such as Desktop Commander on real macOS, Windows and Linux computers.</desc>
|
|
5
|
+
<defs>
|
|
6
|
+
<linearGradient id="brandText" x1="0" y1="0" x2="1" y2="0"><stop offset="0" stop-color="#2765f4"/><stop offset="1" stop-color="#1c55e9"/></linearGradient>
|
|
7
|
+
<linearGradient id="panel" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#fcfdff"/><stop offset="1" stop-color="#f9fbff"/></linearGradient>
|
|
8
|
+
<linearGradient id="directBg" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#f8fffc"/><stop offset="1" stop-color="#f1faf8"/></linearGradient>
|
|
9
|
+
<linearGradient id="tunnelBg" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#faf7ff"/><stop offset="1" stop-color="#f4f0ff"/></linearGradient>
|
|
10
|
+
<linearGradient id="machineBlue" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#f0f7ff"/><stop offset="1" stop-color="#eaf3ff"/></linearGradient>
|
|
11
|
+
<linearGradient id="machineGreen" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#f1fffc"/><stop offset="1" stop-color="#e6fbf7"/></linearGradient>
|
|
12
|
+
<linearGradient id="machinePurple" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#f8f4ff"/><stop offset="1" stop-color="#f1edff"/></linearGradient>
|
|
13
|
+
<linearGradient id="gateway" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#f3f9ff"/><stop offset="1" stop-color="#e5f2ff"/></linearGradient>
|
|
14
|
+
<linearGradient id="blueDisc" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#d7ecff"/><stop offset="1" stop-color="#c2e3ff"/></linearGradient>
|
|
15
|
+
<linearGradient id="greenDisc" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#d3fff2"/><stop offset="1" stop-color="#aff2d8"/></linearGradient>
|
|
16
|
+
<linearGradient id="purpleDisc" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#ebe0ff"/><stop offset="1" stop-color="#d7c6ff"/></linearGradient>
|
|
17
|
+
<linearGradient id="workbuddyBadge" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#1fd0a2"/><stop offset="1" stop-color="#1f8bff"/></linearGradient>
|
|
18
|
+
<filter id="softShadow" x="-20%" y="-35%" width="140%" height="190%"><feGaussianBlur in="SourceAlpha" stdDeviation="7" result="blur"/><feOffset dy="5" result="offset"/><feComponentTransfer in="offset" result="dim"><feFuncA type="linear" slope="0.09"/></feComponentTransfer><feMerge><feMergeNode in="dim"/><feMergeNode in="SourceGraphic"/></feMerge></filter>
|
|
19
|
+
<marker id="arrBlue" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto" markerUnits="userSpaceOnUse"><path d="M0 0 L8 4 L0 8 L2.0 4 Z" fill="#298cff"/></marker>
|
|
20
|
+
<marker id="arrPurple" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto" markerUnits="userSpaceOnUse"><path d="M0 0 L8 4 L0 8 L2.0 4 Z" fill="#8059f5"/></marker>
|
|
21
|
+
<marker id="arrLavender" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto" markerUnits="userSpaceOnUse"><path d="M0 0 L8 4 L0 8 L2.0 4 Z" fill="#a084f4"/></marker>
|
|
22
|
+
<marker id="arrGreen" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto" markerUnits="userSpaceOnUse"><path d="M0 0 L8 4 L0 8 L2.0 4 Z" fill="#14b78a"/></marker>
|
|
23
|
+
<marker id="arrDark" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto" markerUnits="userSpaceOnUse"><path d="M0 0 L8 4 L0 8 L2.0 4 Z" fill="#48475c"/></marker>
|
|
24
|
+
|
|
25
|
+
<linearGradient id="workbuddyOfficialGreen" x1="0" y1="0" x2="0" y2="1" gradientUnits="objectBoundingBox">
|
|
26
|
+
<stop offset="0" stop-color="#10C8A6"/>
|
|
27
|
+
<stop offset="1" stop-color="#05C98B"/>
|
|
28
|
+
</linearGradient>
|
|
29
|
+
<linearGradient id="workbuddyOfficialCream" x1="0" y1="1" x2="1" y2="0" gradientUnits="objectBoundingBox">
|
|
30
|
+
<stop offset="0" stop-color="#DDF8EF"/>
|
|
31
|
+
<stop offset="1" stop-color="#EEFBF8"/>
|
|
32
|
+
</linearGradient>
|
|
33
|
+
<clipPath id="workbuddyOfficialRoundedSquare"><rect x="0" y="0" width="104" height="104" rx="20"/></clipPath>
|
|
34
|
+
|
|
35
|
+
</defs>
|
|
36
|
+
<style>
|
|
37
|
+
text { font-family: 'Inter', 'Arial', sans-serif; font-feature-settings: 'kern'; }
|
|
38
|
+
.connector { fill:none; stroke-width:3; stroke-linecap:round; stroke-linejoin:round; }
|
|
39
|
+
.pill { font-size:17px; font-weight:500; }
|
|
40
|
+
</style>
|
|
41
|
+
|
|
42
|
+
<rect x="0" y="0" width="1672" height="941" rx="0" fill="#ffffff" stroke="none" stroke-width="1.5"/>
|
|
43
|
+
<g id="heading">
|
|
44
|
+
<text x="317" y="61" fill="#090d34" font-size="50" font-weight="790" text-anchor="start" letter-spacing="0">Cloud AI clients.</text>
|
|
45
|
+
<text x="741" y="61" fill="url(#brandText)" font-size="50" font-weight="790" text-anchor="start" letter-spacing="0">Real computers on earth.</text>
|
|
46
|
+
<text x="836" y="103" fill="#475778" font-size="21.3" font-weight="400" text-anchor="middle" letter-spacing="0">Use Direct HTTPS or Secure Tunnel to let cloud MCP clients securely access MCP servers and tools on your computers anywhere on earth.</text>
|
|
47
|
+
</g>
|
|
48
|
+
<g id="four-column-panels">
|
|
49
|
+
<rect x="28" y="137" width="366" height="591" rx="17" fill="url(#panel)" stroke="#e5edf8" stroke-width="1.5"/>
|
|
50
|
+
<rect x="423" y="137" width="315" height="591" rx="17" fill="url(#panel)" stroke="#e5edf8" stroke-width="1.5"/>
|
|
51
|
+
<rect x="764" y="137" width="420" height="591" rx="17" fill="url(#panel)" stroke="#e5edf8" stroke-width="1.5"/>
|
|
52
|
+
<rect x="1210" y="137" width="431" height="591" rx="17" fill="url(#panel)" stroke="#e5edf8" stroke-width="1.5"/>
|
|
53
|
+
</g>
|
|
54
|
+
<g id="connections">
|
|
55
|
+
<title>Client, transport and gateway connection routes</title>
|
|
56
|
+
<path d="M 335 257.5 C 392 257.5 393 323 439 335" stroke="#298cff" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="none" class="connector" marker-end="url(#arrBlue)"/>
|
|
57
|
+
<path d="M 335 275.5 C 392 275.5 398 493 439 505" stroke="#8059f5" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="none" class="connector" marker-end="url(#arrPurple)"/>
|
|
58
|
+
<path d="M 335 339.5 C 392 339.5 393 336 439 348" stroke="#298cff" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="none" class="connector" marker-end="url(#arrBlue)"/>
|
|
59
|
+
<path d="M 335 356.5 C 392 356.5 398 502 439 514" stroke="#a084f4" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="none" class="connector" marker-end="url(#arrLavender)"/>
|
|
60
|
+
<path d="M 335 425.5 C 402 422.5 393 374 439 364" stroke="#14b78a" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="none" class="connector" marker-end="url(#arrGreen)"/>
|
|
61
|
+
<path d="M 335 443.5 C 402 443.5 398 516 439 528" stroke="#298cff" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="none" class="connector" marker-end="url(#arrBlue)"/>
|
|
62
|
+
<path d="M 335 499.5 C 402 496.5 393 354 439 344" stroke="#14b78a" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="none" class="connector" marker-end="url(#arrGreen)"/>
|
|
63
|
+
<path d="M 335 518.5 C 402 518.5 398 536 439 548" stroke="#8059f5" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="none" class="connector" marker-end="url(#arrPurple)"/>
|
|
64
|
+
<path d="M 335 585.5 C 402 582.5 398 563 439 553" stroke="#8059f5" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="none" class="connector" marker-end="url(#arrPurple)"/>
|
|
65
|
+
<path d="M 335 665.5 C 402 662.5 393 375 439 365" stroke="#14b78a" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="none" class="connector" marker-end="url(#arrGreen)"/>
|
|
66
|
+
<path d="M 718 334 C 754 335 751 292 782 292" stroke="#12b784" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="none" class="connector" marker-end="url(#arrGreen)"/>
|
|
67
|
+
<path d="M 718 356 C 751 357 747 448 782 447" stroke="#48475c" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="none" class="connector" marker-end="url(#arrDark)"/>
|
|
68
|
+
<path d="M 718 381 C 753 399 744 602 782 603" stroke="#12b784" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="none" class="connector" marker-end="url(#arrGreen)"/>
|
|
69
|
+
<path d="M 718 522 C 750 515 752 320 782 315" stroke="#a084f4" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="none" class="connector" marker-end="url(#arrLavender)"/>
|
|
70
|
+
<path d="M 718 537 C 752 541 747 481 782 478" stroke="#8059f5" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="none" class="connector" marker-end="url(#arrPurple)"/>
|
|
71
|
+
<path d="M 718 553 C 751 557 748 628 782 631" stroke="#8059f5" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" fill="none" class="connector" marker-end="url(#arrPurple)"/>
|
|
72
|
+
<path d="M 1160 308 L 1228 308" stroke="#298cff" stroke-width="3.4" stroke-linecap="round" stroke-linejoin="round" fill="none" marker-end="url(#arrBlue)"/>
|
|
73
|
+
<path d="M 1160 466 L 1228 466" stroke="#10b787" stroke-width="3.4" stroke-linecap="round" stroke-linejoin="round" fill="none" marker-end="url(#arrGreen)"/>
|
|
74
|
+
<path d="M 1160 626 L 1228 626" stroke="#8059f5" stroke-width="3.4" stroke-linecap="round" stroke-linejoin="round" fill="none" marker-end="url(#arrPurple)"/>
|
|
75
|
+
</g>
|
|
76
|
+
<g id="panel-headings">
|
|
77
|
+
<text x="58" y="184" fill="#080d34" font-size="29.5" font-weight="760" text-anchor="start" letter-spacing="0">Cloud MCP Clients</text>
|
|
78
|
+
<text x="58" y="213" fill="#607193" font-size="18.5" font-weight="400" text-anchor="start" letter-spacing="0">Any MCP-capable cloud AI client</text>
|
|
79
|
+
<text x="447" y="190" fill="#080d34" font-size="24.8" font-weight="760" text-anchor="start" letter-spacing="0">MCP connection options</text>
|
|
80
|
+
<text x="790" y="184" fill="#080d34" font-size="27" font-weight="760" text-anchor="start" letter-spacing="0">Self-hosted Starmux</text>
|
|
81
|
+
<text x="790" y="211" fill="#607193" font-size="16.2" font-weight="400" text-anchor="start" letter-spacing="0">Programmable MCP middleware on each computer</text>
|
|
82
|
+
<text x="1238" y="183" fill="#080d34" font-size="28" font-weight="760" text-anchor="start" letter-spacing="0">Your computers on earth</text>
|
|
83
|
+
<text x="1238" y="211" fill="#607193" font-size="16.5" font-weight="400" text-anchor="start" letter-spacing="0">MCP servers running on your machines</text>
|
|
84
|
+
</g>
|
|
85
|
+
<g id="client-chatgpt">
|
|
86
|
+
<rect x="52" y="232" width="283" height="67" rx="14" fill="#ffffff" stroke="#dde8f3" stroke-width="1.35" filter="url(#softShadow)"/>
|
|
87
|
+
<g id="chatgpt-vector-mark">
|
|
88
|
+
<rect x="73" y="238.5" width="54" height="54" rx="12" fill="#10a780" stroke="none" stroke-width="1.5"/>
|
|
89
|
+
<g transform="translate(100 265.5) rotate(0)">
|
|
90
|
+
<path d="M -2 -19 C 9 -22 19 -12 17 -2 C 16 5 10 9 4 12" stroke="#ffffff" stroke-width="2.15" stroke-linecap="round" stroke-linejoin="round" fill="none" opacity="0.98"/>
|
|
91
|
+
</g>
|
|
92
|
+
<g transform="translate(100 265.5) rotate(60)">
|
|
93
|
+
<path d="M -2 -19 C 9 -22 19 -12 17 -2 C 16 5 10 9 4 12" stroke="#ffffff" stroke-width="2.15" stroke-linecap="round" stroke-linejoin="round" fill="none" opacity="0.98"/>
|
|
94
|
+
</g>
|
|
95
|
+
<g transform="translate(100 265.5) rotate(120)">
|
|
96
|
+
<path d="M -2 -19 C 9 -22 19 -12 17 -2 C 16 5 10 9 4 12" stroke="#ffffff" stroke-width="2.15" stroke-linecap="round" stroke-linejoin="round" fill="none" opacity="0.98"/>
|
|
97
|
+
</g>
|
|
98
|
+
<g transform="translate(100 265.5) rotate(180)">
|
|
99
|
+
<path d="M -2 -19 C 9 -22 19 -12 17 -2 C 16 5 10 9 4 12" stroke="#ffffff" stroke-width="2.15" stroke-linecap="round" stroke-linejoin="round" fill="none" opacity="0.98"/>
|
|
100
|
+
</g>
|
|
101
|
+
<g transform="translate(100 265.5) rotate(240)">
|
|
102
|
+
<path d="M -2 -19 C 9 -22 19 -12 17 -2 C 16 5 10 9 4 12" stroke="#ffffff" stroke-width="2.15" stroke-linecap="round" stroke-linejoin="round" fill="none" opacity="0.98"/>
|
|
103
|
+
</g>
|
|
104
|
+
<g transform="translate(100 265.5) rotate(300)">
|
|
105
|
+
<path d="M -2 -19 C 9 -22 19 -12 17 -2 C 16 5 10 9 4 12" stroke="#ffffff" stroke-width="2.15" stroke-linecap="round" stroke-linejoin="round" fill="none" opacity="0.98"/>
|
|
106
|
+
</g>
|
|
107
|
+
<path d="M 95 261.5 L 103 256.5 L 110 262.5 L 109 271.5 L 101 275.5 L 93 269.5 Z" stroke="#ffffff" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" fill="none"/>
|
|
108
|
+
</g>
|
|
109
|
+
<text x="153" y="274" fill="#101436" font-size="19.5" font-weight="565" text-anchor="start" letter-spacing="0">ChatGPT</text>
|
|
110
|
+
</g>
|
|
111
|
+
<g id="client-claude">
|
|
112
|
+
<rect x="52" y="312" width="283" height="67" rx="14" fill="#ffffff" stroke="#dde8f3" stroke-width="1.35" filter="url(#softShadow)"/>
|
|
113
|
+
<g id="claude-vector-mark">
|
|
114
|
+
<g transform="translate(100 345.5) rotate(0)">
|
|
115
|
+
<path d="M 0 -9 L -2.8 -23 Q 0 -26 2.8 -23 L 0 -9 Z" stroke="#e57553" stroke-width="0" stroke-linecap="round" stroke-linejoin="round" fill="#e57553"/>
|
|
116
|
+
</g>
|
|
117
|
+
<g transform="translate(100 345.5) rotate(30)">
|
|
118
|
+
<path d="M 0 -9 L -2.8 -23 Q 0 -26 2.8 -23 L 0 -9 Z" stroke="#e57553" stroke-width="0" stroke-linecap="round" stroke-linejoin="round" fill="#e57553"/>
|
|
119
|
+
</g>
|
|
120
|
+
<g transform="translate(100 345.5) rotate(60)">
|
|
121
|
+
<path d="M 0 -9 L -2.8 -23 Q 0 -26 2.8 -23 L 0 -9 Z" stroke="#e57553" stroke-width="0" stroke-linecap="round" stroke-linejoin="round" fill="#e57553"/>
|
|
122
|
+
</g>
|
|
123
|
+
<g transform="translate(100 345.5) rotate(90)">
|
|
124
|
+
<path d="M 0 -9 L -2.8 -23 Q 0 -26 2.8 -23 L 0 -9 Z" stroke="#e57553" stroke-width="0" stroke-linecap="round" stroke-linejoin="round" fill="#e57553"/>
|
|
125
|
+
</g>
|
|
126
|
+
<g transform="translate(100 345.5) rotate(120)">
|
|
127
|
+
<path d="M 0 -9 L -2.8 -23 Q 0 -26 2.8 -23 L 0 -9 Z" stroke="#e57553" stroke-width="0" stroke-linecap="round" stroke-linejoin="round" fill="#e57553"/>
|
|
128
|
+
</g>
|
|
129
|
+
<g transform="translate(100 345.5) rotate(150)">
|
|
130
|
+
<path d="M 0 -9 L -2.8 -23 Q 0 -26 2.8 -23 L 0 -9 Z" stroke="#e57553" stroke-width="0" stroke-linecap="round" stroke-linejoin="round" fill="#e57553"/>
|
|
131
|
+
</g>
|
|
132
|
+
<g transform="translate(100 345.5) rotate(180)">
|
|
133
|
+
<path d="M 0 -9 L -2.8 -23 Q 0 -26 2.8 -23 L 0 -9 Z" stroke="#e57553" stroke-width="0" stroke-linecap="round" stroke-linejoin="round" fill="#e57553"/>
|
|
134
|
+
</g>
|
|
135
|
+
<g transform="translate(100 345.5) rotate(210)">
|
|
136
|
+
<path d="M 0 -9 L -2.8 -23 Q 0 -26 2.8 -23 L 0 -9 Z" stroke="#e57553" stroke-width="0" stroke-linecap="round" stroke-linejoin="round" fill="#e57553"/>
|
|
137
|
+
</g>
|
|
138
|
+
<g transform="translate(100 345.5) rotate(240)">
|
|
139
|
+
<path d="M 0 -9 L -2.8 -23 Q 0 -26 2.8 -23 L 0 -9 Z" stroke="#e57553" stroke-width="0" stroke-linecap="round" stroke-linejoin="round" fill="#e57553"/>
|
|
140
|
+
</g>
|
|
141
|
+
<g transform="translate(100 345.5) rotate(270)">
|
|
142
|
+
<path d="M 0 -9 L -2.8 -23 Q 0 -26 2.8 -23 L 0 -9 Z" stroke="#e57553" stroke-width="0" stroke-linecap="round" stroke-linejoin="round" fill="#e57553"/>
|
|
143
|
+
</g>
|
|
144
|
+
<g transform="translate(100 345.5) rotate(300)">
|
|
145
|
+
<path d="M 0 -9 L -2.8 -23 Q 0 -26 2.8 -23 L 0 -9 Z" stroke="#e57553" stroke-width="0" stroke-linecap="round" stroke-linejoin="round" fill="#e57553"/>
|
|
146
|
+
</g>
|
|
147
|
+
<g transform="translate(100 345.5) rotate(330)">
|
|
148
|
+
<path d="M 0 -9 L -2.8 -23 Q 0 -26 2.8 -23 L 0 -9 Z" stroke="#e57553" stroke-width="0" stroke-linecap="round" stroke-linejoin="round" fill="#e57553"/>
|
|
149
|
+
</g>
|
|
150
|
+
<circle cx="100" cy="345.5" r="8" fill="#e57553" stroke="none" stroke-width="1.5"/>
|
|
151
|
+
</g>
|
|
152
|
+
<text x="153" y="354" fill="#101436" font-size="19.5" font-weight="565" text-anchor="start" letter-spacing="0">Claude</text>
|
|
153
|
+
</g>
|
|
154
|
+
<g id="client-cursor">
|
|
155
|
+
<rect x="52" y="392" width="283" height="67" rx="14" fill="#ffffff" stroke="#dde8f3" stroke-width="1.35" filter="url(#softShadow)"/>
|
|
156
|
+
<g id="cursor-vector-mark">
|
|
157
|
+
<rect x="73" y="398.5" width="54" height="54" rx="12" fill="#222326" stroke="none" stroke-width="1.5"/>
|
|
158
|
+
<path d="M 81 418.5 L 105 406.5 L 119 415.5 L 109 439.5 L 94 446.5 L 81 428.5 Z" stroke="#ffffff" stroke-width="0" stroke-linecap="round" stroke-linejoin="round" fill="#ffffff"/>
|
|
159
|
+
<path d="M 81 418.5 L 101 427.5 L 105 406.5 Z" stroke="#b0b5bc" stroke-width="0" stroke-linecap="round" stroke-linejoin="round" fill="#b0b5bc"/>
|
|
160
|
+
<path d="M 101 427.5 L 119 415.5 L 109 439.5 Z" stroke="#5e626a" stroke-width="0" stroke-linecap="round" stroke-linejoin="round" fill="#5e626a"/>
|
|
161
|
+
<path d="M 94 446.5 L 101 427.5 L 109 439.5 Z" stroke="#dddddf" stroke-width="0" stroke-linecap="round" stroke-linejoin="round" fill="#dddddf"/>
|
|
162
|
+
</g>
|
|
163
|
+
<text x="153" y="434" fill="#101436" font-size="19.5" font-weight="565" text-anchor="start" letter-spacing="0">Cursor</text>
|
|
164
|
+
</g>
|
|
165
|
+
<g id="client-workbuddy">
|
|
166
|
+
<rect x="52" y="472" width="283" height="67" rx="14" fill="#ffffff" stroke="#dde8f3" stroke-width="1.35" filter="url(#softShadow)"/>
|
|
167
|
+
<g id="workbuddy-vector-mark" aria-label="WorkBuddy icon vectorized from the uploaded official PNG">
|
|
168
|
+
<g transform="translate(73 478.5) scale(0.519230769)">
|
|
169
|
+
<g clip-path="url(#workbuddyOfficialRoundedSquare)">
|
|
170
|
+
<rect x="0" y="0" width="104" height="104" fill="url(#workbuddyOfficialGreen)"/>
|
|
171
|
+
<path d="M 81.3,7.1 C 76.6,6.7 70.8,25.0 65.7,33.8 C 55.1,37.0 43.6,45.0 34.1,51.3 C 23.6,49.7 10.9,48.3 6.4,50.5 C 1.8,53.3 10.6,72.1 15.8,79.0 C 16.9,83.6 17.4,87.5 16.8,90.4 C 14.6,94.7 13.7,98.7 14.6,104 L 36.6,104 C 31.6,97.9 28.4,90.7 28.9,83.0 C 29.4,71.0 41.6,64.9 57.0,55.2 C 69.7,47.3 79.5,42.2 86.1,41.8 C 92.9,40.5 99.5,44.7 104,47.9 L 104,34.5 C 98.5,25.3 86.9,7.5 81.3,7.1 Z" fill="url(#workbuddyOfficialCream)"/>
|
|
172
|
+
<path d="M 82.6,62.3 C 86.5,61.1 88.0,67.7 90.2,71.3 C 92.5,75.1 94.5,78.1 90.7,80.7 C 87.0,83.5 84.2,78.2 82.2,74.4 L 78.8,68.3 C 77.3,65.3 79.6,62.7 82.6,62.3 Z" fill="#FFFFFF"/>
|
|
173
|
+
<path d="M 54.2,78.5 C 58.3,77.4 59.9,83.2 61.8,86.3 C 63.9,90.0 67.0,94.2 62.6,96.9 C 58.5,99.7 55.8,94.2 53.9,90.6 L 50.8,85.2 C 48.8,81.6 51.2,79.0 54.2,78.5 Z" fill="#FFFFFF"/>
|
|
174
|
+
</g>
|
|
175
|
+
</g>
|
|
176
|
+
</g>
|
|
177
|
+
<text x="153" y="514" fill="#101436" font-size="19.5" font-weight="565" text-anchor="start" letter-spacing="0">WorkBuddy</text>
|
|
178
|
+
</g>
|
|
179
|
+
<g id="client-vscode">
|
|
180
|
+
<rect x="52" y="552" width="283" height="67" rx="14" fill="#ffffff" stroke="#dde8f3" stroke-width="1.35" filter="url(#softShadow)"/>
|
|
181
|
+
<g id="vscode-vector-mark">
|
|
182
|
+
<path d="M 77 573.5 L 86 565.5 L 101 580.5 L 115 565.5 L 126 570.5 L 126 602.5 L 115 608.5 L 101 593.5 L 86 608.5 L 77 599.5 L 93 584.5 Z" stroke="#1878f6" stroke-width="0" stroke-linecap="round" stroke-linejoin="round" fill="#1878f6"/>
|
|
183
|
+
<path d="M 115 565.5 L 115 608.5 L 126 602.5 L 126 570.5 Z" stroke="#45a4ff" stroke-width="0" stroke-linecap="round" stroke-linejoin="round" fill="#45a4ff"/>
|
|
184
|
+
<path d="M 86 565.5 L 115 587.5 L 101 593.5 L 77 573.5 Z" stroke="#0065ce" stroke-width="0" stroke-linecap="round" stroke-linejoin="round" fill="#0065ce"/>
|
|
185
|
+
</g>
|
|
186
|
+
<text x="153" y="594" fill="#101436" font-size="19.5" font-weight="565" text-anchor="start" letter-spacing="0">VS Code / CLI</text>
|
|
187
|
+
</g>
|
|
188
|
+
<g id="client-other">
|
|
189
|
+
<rect x="52" y="632" width="283" height="67" rx="14" fill="#ffffff" stroke="#dde8f3" stroke-width="1.35" filter="url(#softShadow)"/>
|
|
190
|
+
<circle cx="100" cy="665.5" r="27" fill="#e2e7ed" stroke="none" stroke-width="1.5"/>
|
|
191
|
+
<circle cx="90" cy="665.5" r="2.7" fill="#2c4a78" stroke="none" stroke-width="1.5"/>
|
|
192
|
+
<circle cx="100" cy="665.5" r="2.7" fill="#2c4a78" stroke="none" stroke-width="1.5"/>
|
|
193
|
+
<circle cx="110" cy="665.5" r="2.7" fill="#2c4a78" stroke="none" stroke-width="1.5"/>
|
|
194
|
+
<text x="153" y="674" fill="#101436" font-size="19.5" font-weight="565" text-anchor="start" letter-spacing="0">Other MCP client</text>
|
|
195
|
+
</g>
|
|
196
|
+
<g id="transport-direct-https">
|
|
197
|
+
<rect x="445" y="270" width="273" height="153" rx="17" fill="url(#directBg)" stroke="#44cdb0" stroke-width="1.5" filter="url(#softShadow)"/>
|
|
198
|
+
<circle cx="485" cy="331" r="31" fill="url(#greenDisc)"/>
|
|
199
|
+
<path d="M 474 331 V 324 C 474 307 496 307 496 324 V 331" fill="none" stroke="#008963" stroke-width="3.6" stroke-linecap="round"/>
|
|
200
|
+
<rect x="473" y="329" width="25" height="23" rx="5" fill="#03996d"/>
|
|
201
|
+
<circle cx="485.5" cy="340.2" r="2.5" fill="#ffffff"/>
|
|
202
|
+
<path d="M 485.5 342 L 485.5 348" fill="none" stroke="#ffffff" stroke-width="2.5"/>
|
|
203
|
+
<text x="529" y="325" font-size="22" font-weight="750" fill="#0c1236">Direct HTTPS</text>
|
|
204
|
+
<rect x="528" y="344" width="177" height="58" rx="11" fill="#d5f7eb"/>
|
|
205
|
+
<text x="540" y="368" font-size="15" font-weight="500" fill="#04755e">Preferred when your</text>
|
|
206
|
+
<text x="540" y="388" font-size="15" font-weight="500" fill="#04755e">network is reachable</text>
|
|
207
|
+
</g>
|
|
208
|
+
<g id="transport-secure-tunnel">
|
|
209
|
+
<rect x="445" y="473" width="273" height="153" rx="17" fill="url(#tunnelBg)" stroke="#a783ff" stroke-width="1.5" filter="url(#softShadow)"/>
|
|
210
|
+
<circle cx="485" cy="536" r="31" fill="url(#purpleDisc)"/>
|
|
211
|
+
<path d="M 474 542 L 494 527 M 479 549 L 496 554" fill="none" stroke="#4a23bc" stroke-width="3.2" stroke-linecap="round"/>
|
|
212
|
+
<circle cx="472" cy="542" r="6.2" fill="#e7ddff" stroke="#4a23bc" stroke-width="3"/>
|
|
213
|
+
<circle cx="496" cy="523" r="6.2" fill="#e7ddff" stroke="#4a23bc" stroke-width="3"/>
|
|
214
|
+
<circle cx="496" cy="555" r="6.2" fill="#e7ddff" stroke="#4a23bc" stroke-width="3"/>
|
|
215
|
+
<text x="529" y="529" font-size="21.5" font-weight="740" fill="#101036">Secure Tunnel</text>
|
|
216
|
+
<rect x="528" y="547" width="177" height="58" rx="11" fill="#e9e1ff"/>
|
|
217
|
+
<text x="540" y="571" font-size="15.5" font-weight="500" fill="#5938e4">Best for restrictive</text>
|
|
218
|
+
<text x="540" y="591" font-size="15.5" font-weight="500" fill="#5938e4">networks</text>
|
|
219
|
+
</g>
|
|
220
|
+
<g id="starmux-instance-A" transform="translate(-116 0)">
|
|
221
|
+
<rect x="904" y="247" width="372" height="122" rx="15" fill="url(#gateway)" stroke="#3b9cff" stroke-width="1.5" filter="url(#softShadow)"/>
|
|
222
|
+
<g transform="translate(959 308) scale(1)">
|
|
223
|
+
<circle cx="0" cy="0" r="38" fill="url(#blueDisc)" stroke="none" stroke-width="1.5"/>
|
|
224
|
+
<path d="M -15 -10 L 1 15 L 17 -10 M -15 -10 L 17 -10" stroke="#1265c7" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round" fill="none"/>
|
|
225
|
+
<circle cx="-15" cy="-12" r="7" fill="#ecf7ff" stroke="#1265c7" stroke-width="3.2"/>
|
|
226
|
+
<circle cx="17" cy="-12" r="7" fill="#ecf7ff" stroke="#1265c7" stroke-width="3.2"/>
|
|
227
|
+
<circle cx="1" cy="17" r="7" fill="#ecf7ff" stroke="#1265c7" stroke-width="3.2"/>
|
|
228
|
+
</g>
|
|
229
|
+
<text x="1017" y="290" fill="#0a1039" font-size="23" font-weight="750" text-anchor="start" letter-spacing="0">Starmux A</text>
|
|
230
|
+
<text x="1017" y="319" fill="#2462b0" font-size="17" font-weight="455" text-anchor="start" letter-spacing="0">Local runtime</text>
|
|
231
|
+
<rect x="1017" y="331" width="92" height="27" rx="14" fill="#dbfaeb" stroke="#b2edcf" stroke-width="1.1"/>
|
|
232
|
+
<circle cx="1034" cy="344.5" r="6.4" fill="#0bb585" stroke="none" stroke-width="1.5"/>
|
|
233
|
+
<text x="1047" y="350" fill="#008863" font-size="16" font-weight="540" text-anchor="start" letter-spacing="0">Online</text>
|
|
234
|
+
<g id="programmable-middleware-A"><path d="M 1137 264 L 1137 352" fill="none" stroke="#c7dff8" stroke-width="1.3"/><rect x="1147" y="263" width="113" height="90" rx="11" fill="#ffffff" fill-opacity=".70" stroke="#c7dff8" stroke-width="1.1"/><text x="1203.5" y="282" fill="#2361a4" font-size="13.0" font-weight="730" text-anchor="middle">Programmable</text><rect x="1156" y="293" width="44" height="23" rx="11.5" fill="#e6f1ff" stroke="#d5e8fb" stroke-width=".8"/><text x="1178.0" y="308.5" fill="#2363a3" font-size="11.5" font-weight="560" text-anchor="middle">Policy</text><rect x="1204" y="293" width="48" height="23" rx="11.5" fill="#e6f1ff" stroke="#d5e8fb" stroke-width=".8"/><text x="1228.0" y="308.5" fill="#2363a3" font-size="11.1" font-weight="560" text-anchor="middle">Routing</text><rect x="1156" y="321" width="96" height="23" rx="11.5" fill="#e7f7f4" stroke="#c8eee6" stroke-width=".8"/><text x="1204" y="336.5" fill="#087e72" font-size="11.7" font-weight="570" text-anchor="middle">Tool adapters</text></g></g>
|
|
235
|
+
<g id="starmux-instance-B" transform="translate(-116 0)">
|
|
236
|
+
<rect x="904" y="402" width="372" height="122" rx="15" fill="url(#gateway)" stroke="#3b9cff" stroke-width="1.5" filter="url(#softShadow)"/>
|
|
237
|
+
<g transform="translate(959 463) scale(1)">
|
|
238
|
+
<circle cx="0" cy="0" r="38" fill="url(#blueDisc)" stroke="none" stroke-width="1.5"/>
|
|
239
|
+
<path d="M -15 -10 L 1 15 L 17 -10 M -15 -10 L 17 -10" stroke="#1265c7" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round" fill="none"/>
|
|
240
|
+
<circle cx="-15" cy="-12" r="7" fill="#ecf7ff" stroke="#1265c7" stroke-width="3.2"/>
|
|
241
|
+
<circle cx="17" cy="-12" r="7" fill="#ecf7ff" stroke="#1265c7" stroke-width="3.2"/>
|
|
242
|
+
<circle cx="1" cy="17" r="7" fill="#ecf7ff" stroke="#1265c7" stroke-width="3.2"/>
|
|
243
|
+
</g>
|
|
244
|
+
<text x="1017" y="445" fill="#0a1039" font-size="23" font-weight="750" text-anchor="start" letter-spacing="0">Starmux B</text>
|
|
245
|
+
<text x="1017" y="474" fill="#2462b0" font-size="17" font-weight="455" text-anchor="start" letter-spacing="0">Local runtime</text>
|
|
246
|
+
<rect x="1017" y="486" width="92" height="27" rx="14" fill="#dbfaeb" stroke="#b2edcf" stroke-width="1.1"/>
|
|
247
|
+
<circle cx="1034" cy="499.5" r="6.4" fill="#0bb585" stroke="none" stroke-width="1.5"/>
|
|
248
|
+
<text x="1047" y="505" fill="#008863" font-size="16" font-weight="540" text-anchor="start" letter-spacing="0">Online</text>
|
|
249
|
+
<g id="programmable-middleware-B"><path d="M 1137 419 L 1137 507" fill="none" stroke="#c7dff8" stroke-width="1.3"/><rect x="1147" y="418" width="113" height="90" rx="11" fill="#ffffff" fill-opacity=".70" stroke="#c7dff8" stroke-width="1.1"/><text x="1203.5" y="437" fill="#2361a4" font-size="13.0" font-weight="730" text-anchor="middle">Programmable</text><rect x="1156" y="448" width="44" height="23" rx="11.5" fill="#e6f1ff" stroke="#d5e8fb" stroke-width=".8"/><text x="1178.0" y="463.5" fill="#2363a3" font-size="11.5" font-weight="560" text-anchor="middle">Policy</text><rect x="1204" y="448" width="48" height="23" rx="11.5" fill="#e6f1ff" stroke="#d5e8fb" stroke-width=".8"/><text x="1228.0" y="463.5" fill="#2363a3" font-size="11.1" font-weight="560" text-anchor="middle">Routing</text><rect x="1156" y="476" width="96" height="23" rx="11.5" fill="#e7f7f4" stroke="#c8eee6" stroke-width=".8"/><text x="1204" y="491.5" fill="#087e72" font-size="11.7" font-weight="570" text-anchor="middle">Tool adapters</text></g></g>
|
|
250
|
+
<g id="starmux-instance-C" transform="translate(-116 0)">
|
|
251
|
+
<rect x="904" y="563" width="372" height="122" rx="15" fill="url(#gateway)" stroke="#3b9cff" stroke-width="1.5" filter="url(#softShadow)"/>
|
|
252
|
+
<g transform="translate(959 624) scale(1)">
|
|
253
|
+
<circle cx="0" cy="0" r="38" fill="url(#blueDisc)" stroke="none" stroke-width="1.5"/>
|
|
254
|
+
<path d="M -15 -10 L 1 15 L 17 -10 M -15 -10 L 17 -10" stroke="#1265c7" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round" fill="none"/>
|
|
255
|
+
<circle cx="-15" cy="-12" r="7" fill="#ecf7ff" stroke="#1265c7" stroke-width="3.2"/>
|
|
256
|
+
<circle cx="17" cy="-12" r="7" fill="#ecf7ff" stroke="#1265c7" stroke-width="3.2"/>
|
|
257
|
+
<circle cx="1" cy="17" r="7" fill="#ecf7ff" stroke="#1265c7" stroke-width="3.2"/>
|
|
258
|
+
</g>
|
|
259
|
+
<text x="1017" y="606" fill="#0a1039" font-size="23" font-weight="750" text-anchor="start" letter-spacing="0">Starmux C</text>
|
|
260
|
+
<text x="1017" y="635" fill="#2462b0" font-size="17" font-weight="455" text-anchor="start" letter-spacing="0">Local runtime</text>
|
|
261
|
+
<rect x="1017" y="647" width="92" height="27" rx="14" fill="#dbfaeb" stroke="#b2edcf" stroke-width="1.1"/>
|
|
262
|
+
<circle cx="1034" cy="660.5" r="6.4" fill="#0bb585" stroke="none" stroke-width="1.5"/>
|
|
263
|
+
<text x="1047" y="666" fill="#008863" font-size="16" font-weight="540" text-anchor="start" letter-spacing="0">Online</text>
|
|
264
|
+
<g id="programmable-middleware-C"><path d="M 1137 580 L 1137 668" fill="none" stroke="#c7dff8" stroke-width="1.3"/><rect x="1147" y="579" width="113" height="90" rx="11" fill="#ffffff" fill-opacity=".70" stroke="#c7dff8" stroke-width="1.1"/><text x="1203.5" y="598" fill="#2361a4" font-size="13.0" font-weight="730" text-anchor="middle">Programmable</text><rect x="1156" y="609" width="44" height="23" rx="11.5" fill="#e6f1ff" stroke="#d5e8fb" stroke-width=".8"/><text x="1178.0" y="624.5" fill="#2363a3" font-size="11.5" font-weight="560" text-anchor="middle">Policy</text><rect x="1204" y="609" width="48" height="23" rx="11.5" fill="#e6f1ff" stroke="#d5e8fb" stroke-width=".8"/><text x="1228.0" y="624.5" fill="#2363a3" font-size="11.1" font-weight="560" text-anchor="middle">Routing</text><rect x="1156" y="637" width="96" height="23" rx="11.5" fill="#e7f7f4" stroke="#c8eee6" stroke-width=".8"/><text x="1204" y="652.5" fill="#087e72" font-size="11.7" font-weight="570" text-anchor="middle">Tool adapters</text></g></g>
|
|
265
|
+
<g id="macos-tools" transform="translate(-64 0)">
|
|
266
|
+
<rect x="1298" y="232" width="355" height="151" rx="15" fill="url(#machineBlue)" stroke="#c5e1ff" stroke-width="1.5"/>
|
|
267
|
+
<rect x="1329" y="250" width="46" height="33" rx="3" fill="none" stroke="#1062cd" stroke-width="3.3"/>
|
|
268
|
+
<path d="M 1323 287 L 1381 287 L 1374 292 L 1331 292 Z" stroke="#1062cd" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" fill="#1062cd"/>
|
|
269
|
+
<text x="1407" y="266" fill="#0a1036" font-size="21" font-weight="725" text-anchor="start" letter-spacing="0">macOS</text>
|
|
270
|
+
<g id="macos-tools-server-badge"><rect x="1407" y="279" width="170" height="25" rx="12.5" fill="#ffffff" fill-opacity=".90" stroke="#1062cd" stroke-width="1.0"/><text x="1492" y="296" fill="#1062cd" font-size="13.2" font-weight="620" text-anchor="middle" letter-spacing="0">Desktop Commander</text></g><g id="macos-tools-tool-capabilities" role="group"><line x1="1327" y1="326" x2="1624" y2="326" stroke="#bfdaf9" stroke-width="1.15" stroke-linecap="round"/><rect x="1327" y="338" width="74" height="29" rx="14.5" fill="#daedff" stroke="none"/><text x="1364.0" y="357" fill="#1062cd" font-size="15.4" font-weight="500" text-anchor="middle" letter-spacing="0">Files</text><rect x="1415" y="338" width="94" height="29" rx="14.5" fill="#daedff" stroke="none"/><text x="1462.0" y="357" fill="#1062cd" font-size="15.4" font-weight="500" text-anchor="middle" letter-spacing="0">Terminal</text><rect x="1523" y="338" width="101" height="29" rx="14.5" fill="#daedff" stroke="none"/><text x="1573.5" y="357" fill="#1062cd" font-size="15.4" font-weight="500" text-anchor="middle" letter-spacing="0">Services</text></g></g>
|
|
271
|
+
<g id="windows-tools" transform="translate(-64 0)">
|
|
272
|
+
<rect x="1298" y="401" width="355" height="151" rx="15" fill="url(#machineGreen)" stroke="#aaeedf" stroke-width="1.5"/>
|
|
273
|
+
<rect x="1329" y="419" width="46" height="33" rx="3" fill="none" stroke="#008c70" stroke-width="3.3"/>
|
|
274
|
+
<path d="M 1340 429 L 1351 427 L 1351 441 L 1340 441 Z" stroke="#008c70" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" fill="#008c70"/>
|
|
275
|
+
<path d="M 1354 427 L 1365 425 L 1365 441 L 1354 441 Z" stroke="#008c70" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" fill="#008c70"/>
|
|
276
|
+
<path d="M 1340 444 L 1351 444 L 1351 458 L 1340 456 Z" stroke="#008c70" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" fill="#008c70"/>
|
|
277
|
+
<path d="M 1354 444 L 1365 444 L 1365 460 L 1354 458 Z" stroke="#008c70" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" fill="#008c70"/>
|
|
278
|
+
<path d="M 1323 456 L 1381 456 L 1374 461 L 1331 461 Z" stroke="#008c70" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" fill="#008c70"/>
|
|
279
|
+
<text x="1407" y="435" fill="#0a1036" font-size="21" font-weight="725" text-anchor="start" letter-spacing="0">Windows</text>
|
|
280
|
+
<g id="windows-tools-server-badge"><rect x="1407" y="448" width="170" height="25" rx="12.5" fill="#ffffff" fill-opacity=".90" stroke="#008c70" stroke-width="1.0"/><text x="1492" y="465" fill="#008c70" font-size="13.2" font-weight="620" text-anchor="middle" letter-spacing="0">Desktop Commander</text></g><g id="windows-tools-tool-capabilities" role="group"><line x1="1327" y1="495" x2="1624" y2="495" stroke="#b7e9df" stroke-width="1.15" stroke-linecap="round"/><rect x="1327" y="507" width="74" height="29" rx="14.5" fill="#d1f5f0" stroke="none"/><text x="1364.0" y="526" fill="#008c70" font-size="15.4" font-weight="500" text-anchor="middle" letter-spacing="0">Files</text><rect x="1415" y="507" width="94" height="29" rx="14.5" fill="#d1f5f0" stroke="none"/><text x="1462.0" y="526" fill="#008c70" font-size="15.4" font-weight="500" text-anchor="middle" letter-spacing="0">Terminal</text><rect x="1523" y="507" width="101" height="29" rx="14.5" fill="#d1f5f0" stroke="none"/><text x="1573.5" y="526" fill="#008c70" font-size="15.4" font-weight="500" text-anchor="middle" letter-spacing="0">Services</text></g></g>
|
|
281
|
+
<g id="linux-tools" transform="translate(-64 0)">
|
|
282
|
+
<rect x="1298" y="564" width="355" height="151" rx="15" fill="url(#machinePurple)" stroke="#d9c9ff" stroke-width="1.5"/>
|
|
283
|
+
<rect x="1329" y="583" width="46" height="20" rx="4" fill="#4b3ebb" stroke="none" stroke-width="1.5"/>
|
|
284
|
+
<rect x="1329" y="606" width="46" height="20" rx="4" fill="#4b3ebb" stroke="none" stroke-width="1.5"/>
|
|
285
|
+
<circle cx="1339" cy="593" r="2" fill="#d8d5fb" stroke="none" stroke-width="1.5"/>
|
|
286
|
+
<path d="M 1348 593 L 1366 593" stroke="#d8d5fb" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" fill="none"/>
|
|
287
|
+
<circle cx="1339" cy="616" r="2" fill="#d8d5fb" stroke="none" stroke-width="1.5"/>
|
|
288
|
+
<path d="M 1348 616 L 1366 616" stroke="#d8d5fb" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" fill="none"/>
|
|
289
|
+
<text x="1407" y="598" fill="#0a1036" font-size="21" font-weight="725" text-anchor="start" letter-spacing="0">Linux / Workstation</text>
|
|
290
|
+
<g id="linux-tools-server-badge"><rect x="1407" y="611" width="170" height="25" rx="12.5" fill="#ffffff" fill-opacity=".90" stroke="#4b3ebb" stroke-width="1.0"/><text x="1492" y="628" fill="#4b3ebb" font-size="13.2" font-weight="620" text-anchor="middle" letter-spacing="0">Desktop Commander</text></g><g id="linux-tools-tool-capabilities" role="group"><line x1="1327" y1="658" x2="1624" y2="658" stroke="#d5c9fa" stroke-width="1.15" stroke-linecap="round"/><rect x="1327" y="670" width="74" height="29" rx="14.5" fill="#e7dfff" stroke="none"/><text x="1364.0" y="689" fill="#4b3ebb" font-size="15.4" font-weight="500" text-anchor="middle" letter-spacing="0">Files</text><rect x="1415" y="670" width="94" height="29" rx="14.5" fill="#e7dfff" stroke="none"/><text x="1462.0" y="689" fill="#4b3ebb" font-size="15.4" font-weight="500" text-anchor="middle" letter-spacing="0">Terminal</text><rect x="1523" y="670" width="101" height="29" rx="14.5" fill="#e7dfff" stroke="none"/><text x="1573.5" y="689" fill="#4b3ebb" font-size="15.4" font-weight="500" text-anchor="middle" letter-spacing="0">Services</text></g></g>
|
|
291
|
+
<g id="product-value-strip">
|
|
292
|
+
<rect x="29" y="746" width="1611" height="125" rx="16" fill="#ffffff" stroke="#e2eaf7" stroke-width="1.4"/>
|
|
293
|
+
<path d="M 528 773 L 528 847" stroke="#e3eaf4" stroke-width="1.35" stroke-linecap="round" stroke-linejoin="round" fill="none"/>
|
|
294
|
+
<path d="M 1080 773 L 1080 847" stroke="#e3eaf4" stroke-width="1.35" stroke-linecap="round" stroke-linejoin="round" fill="none"/>
|
|
295
|
+
<circle cx="97" cy="807" r="39" fill="#d7ebff" stroke="none" stroke-width="1.5"/>
|
|
296
|
+
<path d="M 97 784 L 114 791 L 114 807 C 114 820 104 827 97 830 C 90 827 80 820 80 807 L 80 791 Z" stroke="#0059cf" stroke-width="3.0" stroke-linecap="round" stroke-linejoin="round" fill="none"/>
|
|
297
|
+
<path d="M 97 790 L 108 794 L 108 807 C 108 815 103 820 97 824 C 91 820 86 815 86 807 L 86 794 Z" stroke="#d7ebff" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" fill="none"/>
|
|
298
|
+
<text x="153" y="802" fill="#0c1036" font-size="21" font-weight="750" text-anchor="start" letter-spacing="0">Self-hosted control</text>
|
|
299
|
+
<text x="153" y="830" fill="#647595" font-size="16" font-weight="440" text-anchor="start" letter-spacing="0">Your gateways. Your machines. Your data.</text>
|
|
300
|
+
<circle cx="610" cy="807" r="39" fill="#d4f9ed" stroke="none" stroke-width="1.5"/>
|
|
301
|
+
<polygon points="610.0,789.0 616.0,784.8 619.0,791.4 622.7,794.3 629.9,795.5 627.4,802.3 628.0,807.0 632.2,813.0 625.6,816.0 622.7,819.7 621.5,826.9 614.7,824.4 610.0,825.0 604.0,829.2 601.0,822.6 597.3,819.7 590.1,818.5 592.6,811.7 592.0,807.0 587.8,801.0 594.4,798.0 597.3,794.3 598.5,787.1 605.3,789.6" fill="none" stroke="#008e69" stroke-width="3" stroke-linejoin="round"/>
|
|
302
|
+
<circle cx="610" cy="807" r="7" fill="none" stroke="#008e69" stroke-width="3"/>
|
|
303
|
+
<text x="666" y="790" fill="#0c1036" font-size="20" font-weight="735" text-anchor="start" letter-spacing="0">Use your real environments</text>
|
|
304
|
+
<text x="666" y="817" fill="#647595" font-size="16" font-weight="400" text-anchor="start" letter-spacing="0">Work with your files, terminal, Git and services</text>
|
|
305
|
+
<text x="666" y="841" fill="#647595" font-size="16" font-weight="400" text-anchor="start" letter-spacing="0">on your own computers.</text>
|
|
306
|
+
<circle cx="1169" cy="807" r="39" fill="#e8e0ff" stroke="none" stroke-width="1.5"/>
|
|
307
|
+
<text x="1227" y="790" fill="#0c1036" font-size="20" font-weight="735" text-anchor="start" letter-spacing="0">Programmable middleware</text>
|
|
308
|
+
<text x="1227" y="817" fill="#647595" font-size="16" font-weight="400" text-anchor="start" letter-spacing="0">Define policies, routing and tool adapters</text>
|
|
309
|
+
<text x="1227" y="841" fill="#647595" font-size="16" font-weight="400" text-anchor="start" letter-spacing="0">for each host environment.</text>
|
|
310
|
+
<g id="programmable-middleware-symbol"><path d="M 1154 790 L 1154 823" fill="none" stroke="#4937c8" stroke-width="3" stroke-linecap="round"/><circle cx="1154" cy="803" r="5.3" fill="#f2edff" stroke="#4937c8" stroke-width="2.8"/><path d="M 1169 790 L 1169 823" fill="none" stroke="#4937c8" stroke-width="3" stroke-linecap="round"/><circle cx="1169" cy="813" r="5.3" fill="#f2edff" stroke="#4937c8" stroke-width="2.8"/><path d="M 1184 790 L 1184 823" fill="none" stroke="#4937c8" stroke-width="3" stroke-linecap="round"/><circle cx="1184" cy="798" r="5.3" fill="#f2edff" stroke="#4937c8" stroke-width="2.8"/></g></g>
|
|
311
|
+
<path d="M 30 888 L 1641 888" stroke="#eaf0f8" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" fill="none"/>
|
|
312
|
+
<g id="technical-footnote">
|
|
313
|
+
<text x="836" y="914" fill="#637495" font-size="14.4" font-weight="400" text-anchor="middle" letter-spacing="0">Direct HTTPS avoids a managed relay. Secure Tunnel uses OpenAI forwarding. Multi-computer orchestration is a deployment pattern, not a single built-in unified control plane.</text>
|
|
314
|
+
</g>
|
|
315
|
+
</svg>
|
package/package.json
CHANGED
package/docs/ARCHITECTURE.md
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
# Architecture
|
|
2
|
-
|
|
3
|
-
```text
|
|
4
|
-
Remote MCP Client(s)
|
|
5
|
-
|
|
|
6
|
-
+--> Authenticated Direct HTTPS (public TLS 443 + caller auth) --+
|
|
7
|
-
| |
|
|
8
|
-
+--> Secure MCP Tunnel (outbound, OpenAI infrastructure) --------+
|
|
9
|
-
|
|
|
10
|
-
Starmux Core
|
|
11
|
-
localhost MCP + policy
|
|
12
|
-
|
|
|
13
|
-
Desktop Commander MCP (stdio)
|
|
14
|
-
|
|
|
15
|
-
User's Mac OS / tools
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
The menu bar App and CLI are two controllers for **one** local Core. Remote transports are separate from those controllers. Gateway owns ingress/routing/authorization boundaries and doesn't reimplement the actual upstream MCP file/Git/Shell tools. Real remote caller identity and authorization must be checked **before** granting trusted developer capabilities.
|
|
19
|
-
|
|
20
|
-
Foreground startup separates configuration from executable selection. Automatic selection prefers the saved onboarding configuration, then a validated legacy configuration if no onboarding file exists. Legacy configuration supplies settings only: the Core and Node process come from the invoked CLI installation. `run` prints the configuration path, actual compiled Core module path, package version/code fingerprint and port in English; `run --json` and App-parent launches emit structured lifecycle events. Advanced profile selection changes configuration, not the executable version.
|
|
21
|
-
|
|
22
|
-
This release provides a single-Mac Gateway that was owner-tested with 25 native Desktop Commander tools and 2 Gateway tools. Operator-configured stdio upstreams are supported with explicit tool grants and namespaced tool names; public external client verification, unified multi-Mac management, generalized user-script middleware and GUI Computer Use are **not** fully shipped.
|
|
23
|
-
|
|
24
|
-
## Core implementation
|
|
25
|
-
|
|
26
|
-
Gateway Core and CLI are one ESM npm package written in strict TypeScript. SwiftUI remains the native App interface. `tsc` uses NodeNext resolution and ES2022 output; relative source imports end in `.js`. Production entrypoints run emitted JavaScript without a TypeScript loader.
|
|
27
|
-
|
|
28
|
-
| Boundary | Implementation |
|
|
29
|
-
| --- | --- |
|
|
30
|
-
| Shared protocol and configuration | `src/contracts.ts`, SDK MCP types, `src/config-schemas.ts` (Zod 3) |
|
|
31
|
-
| Upstream lifecycle and native forwarding | `local-desktop-read-probe.ts`, `configured-mcp-upstreams.ts` |
|
|
32
|
-
| Names, collisions and default resources | `mcp-upstream-router.ts` |
|
|
33
|
-
| Internal identity and revocation primitives (not wired into Core HTTP) | `remote-auth.ts`, `community-remote-revocations.ts` |
|
|
34
|
-
| Workspace authorization and argument preparation | workspace policies, grants, explicit deny rules |
|
|
35
|
-
| Internal execution and observations | `invocation.ts`, `tool-dispatch.ts` |
|
|
36
|
-
| Explicit HTTP lifecycle | `createGatewayRuntime()` in `dc-workspace-http.ts` |
|
|
37
|
-
| CLI and owner control | `src/cli/`, `operator-cli.ts`, `global-core-control.ts` |
|
|
38
|
-
|
|
39
|
-
Calls pass through explicit deny checks, internal `beforeCall` hooks, target dispatch, policy preparation, execution, and `afterCall` observation. Dispatch preserves the priority of Gateway tools, extension routes, owner-enabled native mode, workspace mode and fixed fixtures. The executor consumes an internal authorized invocation once before awaiting an upstream response. An uncertain call is never automatically replayed. Hooks receive frozen copies; failed observers or audit sinks cannot replace an obtained result. The original MCP result is returned, including structured content, resource/image content and extension fields.
|
|
40
|
-
|
|
41
|
-
These hooks are package-internal code contracts. There is no public Middleware SDK, user-script loader or package-level SDK export. The internal authenticator checks JWT identity, an explicitly required scope and revocation state; it is not an HTTP service and is not connected to Core requests. Core requests remain explicitly `unverified-local` because loopback and ordinary headers do not establish that identity. Remote deployments must supply their actual authenticated access boundary. Owner control uses its separate private socket/lease protocol.
|
|
42
|
-
|
|
43
|
-
The former optional two-tool read-only ingress and its dedicated doctor command have been removed. Normal Core permission profiles, explicit deny rules and trusted native Desktop Commander forwarding are unchanged. The retained `remote:revoke` helper manages revocation data for the internal authenticator only; it does not disconnect an existing Tunnel or revoke access in an external identity provider.
|
|
44
|
-
|
|
45
|
-
Importing Core modules or constructing a runtime does not listen, start upstream processes or register signal handlers. `start()` and `close()` manage an instance; `runGateway()` is the process entrypoint that owns signals. Remaining `bin/*.mjs` adapters and `src/dc-workspace-http.mjs` load `dist/src` implementations. Installation paths resolve from the compiled package location, including child CLI restarts, independently of the caller's current directory. Source builds clear `dist` before compiling so removed modules cannot remain in published artifacts.
|
|
46
|
-
|
|
47
|
-
## Named instance management
|
|
48
|
-
|
|
49
|
-
`instance-store.ts` owns the private registry, JSONC parsing, generated JSON Schema, source revisions and independent state paths. App and CLI use the same commands. `instance-runtime.ts` supervises one Core process per instance, with authenticated instance-ID/run-ID control plus the existing global port lease. The supervisor applies immutable configuration snapshots, restarts only its worker and restores the prior snapshot once on launch failure. Dynamic credential and authorization state is never restored from a startup snapshot. `instance-migration.ts` provides read-only legacy discovery followed by an explicit switch. Legacy entrypoints remain available before migration.
|
|
50
|
-
|
|
51
|
-
Swift `InstanceController` invokes the shared CLI and tracks only its own child supervisors. The manager window edits stopped instances and shows saved versus active configuration. Quitting stops that App session's children without adopting CLI instances. The old diagnostic views remain available as supporting code; the primary menu now opens instance management.
|
package/docs/MIGRATION.md
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
# Migrate from Mac MCP Gateway
|
|
2
|
-
|
|
3
|
-
Starmux 0.10.0 replaces the old public command name. It uses `~/.config/starmux`; migration retains the original data in `~/.config/mac-mcp-gateway`.
|
|
4
|
-
|
|
5
|
-
```sh
|
|
6
|
-
starmux migrate # Preview discovered sources
|
|
7
|
-
starmux migrate registry # Migrate existing named instances
|
|
8
|
-
# For an installation that only has a legacy profile:
|
|
9
|
-
starmux migrate setup
|
|
10
|
-
# Or: starmux migrate live
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
Migration asks before stopping the selected old processes. Add `-y` for unattended operation. Migrate the registry when present, so previously imported profiles are not duplicated. The destination must be empty. After migration:
|
|
14
|
-
|
|
15
|
-
```sh
|
|
16
|
-
starmux ls
|
|
17
|
-
starmux up
|
|
18
|
-
starmux status
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
The registry migration retains stable IDs, the default selection, saved permissions, keys, OAuth settings and revocations, management tokens, policies, secrets and successful configuration snapshots. Managed paths are rewritten; externally linked configuration remains in place. Runtime locks and PID records are recreated by a new start. If interrupted before commit, rerun the same migration to rebuild the recognized staging directory from the originals.
|
|
22
|
-
|
|
23
|
-
Existing Home-only configurations retain that boundary. To choose full OS-account coding permissions explicitly, run `starmux up --code` and confirm.
|
|
24
|
-
|
|
25
|
-
| Previous workflow | Starmux |
|
|
26
|
-
| --- | --- |
|
|
27
|
-
| `setup` / `instance create` | `init`, or simply `up` |
|
|
28
|
-
| `run` | `up` (background), `up --foreground` |
|
|
29
|
-
| `stop` | `down` / `stop` |
|
|
30
|
-
| `instance list` | `ls` |
|
|
31
|
-
| `access create` + `access mode api-key` | `auth key "Name"` |
|
|
32
|
-
| `access status` / `access list` | `auth` |
|
|
33
|
-
| `access revoke` / `access revoke-oauth` | `auth revoke ID` |
|
|
34
|
-
| `access owner-token` | `dashboard --token` |
|
|
35
|
-
| `instance import/copy/rename/archive/restore/default` | corresponding `config` subcommand |
|
|
36
|
-
|
|
37
|
-
Update scripts to `starmux` and `-i NAME`. Public environment settings use `STARMUX_*`; ordinary commands ignore old `MAC_MCP_*` overlays. Use `STARMUX_TOKEN` for local authenticated verification. Old `mgw_` credentials remain valid until expiry or revocation.
|
package/docs/RELEASE_STATUS.md
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
# Starmux 0.10.0 preview
|
|
2
|
-
|
|
3
|
-
This release introduces the Starmux name, background `up`, CWD-based first setup, `--code` / `--write`, unified authentication commands and explicit migration from Mac MCP Gateway.
|
|
4
|
-
|
|
5
|
-
The release target is the public `starmux@0.10.0` npm package. Publication is complete only after installing that version from the public registry and passing the Quick Start. A local build or tarball alone does not establish registry availability.
|
|
6
|
-
|
|
7
|
-
## Included
|
|
8
|
-
|
|
9
|
-
- TypeScript CLI/Core, automatic local initialization and supervised background processes.
|
|
10
|
-
- Read-only and full OS-account coding modes, independent instances and JSONC configuration with apply/rollback.
|
|
11
|
-
- Ingress, API-key and OAuth authentication; local Access console and persistent revocation.
|
|
12
|
-
- macOS App source and development build tooling.
|
|
13
|
-
|
|
14
|
-
## Tested deployment history
|
|
15
|
-
|
|
16
|
-
ChatGPT web OAuth over Tunnel has passed login, coding, session revocation and fresh-login recovery on the earlier Core. WorkBuddy HTTPS + API key has passed remote file reads/writes. Those results describe the recorded deployments; this CLI rebrand does not rerun their external services automatically. See [clients](CLIENTS.md) and the [validation archives](README.md#validation-archives).
|
|
17
|
-
|
|
18
|
-
## Preview limits
|
|
19
|
-
|
|
20
|
-
Windows native installation and the new CLI's Linux release acceptance remain pending. The macOS App is not distributed as a signed, notarized public download. OAuth provider provisioning, general user-defined script hooks and multi-computer orchestration are future work.
|
|
21
|
-
|
|
22
|
-
[Install](INSTALL.md) · [Remote setup](REMOTE_SETUP.md) · [Platforms](PLATFORMS.md)
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
# TypeScript migration acceptance record
|
|
2
|
-
|
|
3
|
-
Validated on Apple Silicon macOS, 2026-10-20.
|
|
4
|
-
|
|
5
|
-
## Subsequent product scope change
|
|
6
|
-
|
|
7
|
-
At the owner's request, the optional fixed two-tool read-only ingress and its dedicated doctor command were removed after migration. Their CLI adapters and implementation modules are no longer shipped. The normal Core, trusted native forwarding, restricted workspace profile and Swift sources are unchanged. JWT verification and revocation remain internal, tested primitives; they no longer depend on ingress configuration and are not an active HTTP authentication layer.
|
|
8
|
-
|
|
9
|
-
Source build and prepare now clear `dist` before compilation so removed modules cannot leak into npm or App artifacts. The original counts and validation matrix below record the migration milestone, including the now-removed ingress test; they are not the current file inventory. The post-removal suite has four integration scripts and 13 Node tests.
|
|
10
|
-
|
|
11
|
-
## Implemented
|
|
12
|
-
|
|
13
|
-
Subsequent CLI usability fixes add direct `setup`, saved-configuration `doctor`, and `verify` commands; visible English startup identity; onboarding-first configuration selection; and current-CLI Core execution even with legacy settings. Integration coverage includes trusted Home setup/doctor/write/Shell/status/stop and legacy settings whose old executable paths no longer exist. These supersede the original implicit legacy executable selection.
|
|
14
|
-
|
|
15
|
-
- Migrated all 28 original Core modules, 9 CLI implementations and 4 original test scripts to TypeScript. Added shared contracts, Zod schemas, unknown-value boundary helpers, centralized runtime paths, result validation, remote authentication, internal invocation middleware and a separate dispatcher. There are 45 business TypeScript modules in `src/`, including the CLI.
|
|
16
|
-
- One ESM package; NodeNext/ES2022, strict checking, unchecked-index protection, exact optional properties, verbatim module syntax and no emit on errors. Runtime JavaScript and source maps are emitted to `dist/src`. Source maps contain original sources. No TypeScript loader, broad `any`, `@ts-nocheck` or parallel JavaScript business implementation is used.
|
|
17
|
-
- Retained nine CLI `.mjs` adapters and `src/dc-workspace-http.mjs`. Stable CLI paths survive subprocess launches; Desktop Commander resolves through Node's dependency resolution, including hoisted npm installs.
|
|
18
|
-
- Core construction/import is inert. Runtime instances explicitly start and close, coalesce concurrent starts and clean up failed startup. Signal ownership is confined to the process entrypoint.
|
|
19
|
-
- Explicit deny checks and before hooks precede dispatch. Dispatcher preserves Gateway/extension/native/workspace/fixture priority. Upstream execution consumes an authorized invocation once. After hooks receive frozen copies; observation/audit exceptions do not mask returned results or replay effects. Remote identity validation remains separate from workspace authorization and local owner control.
|
|
20
|
-
- Swift sources are unchanged: all 12 `.swift` files are byte-identical to the pre-migration snapshot. Existing launcher, setup wizard and live settings paths remain present.
|
|
21
|
-
- App build compiles a separate source staging directory with locked development dependencies, then includes emitted runtime files and locked production dependencies. Pinned bundled Node and ad-hoc signature order remain unchanged.
|
|
22
|
-
|
|
23
|
-
## Validation results
|
|
24
|
-
|
|
25
|
-
| Check | Result |
|
|
26
|
-
| --- | --- |
|
|
27
|
-
| Original JavaScript baseline before edits | All four scripts passed |
|
|
28
|
-
| `npm run typecheck` | Passed |
|
|
29
|
-
| Delete `dist`, then `npm test` on Node 26.10.0 | Four integration scripts plus 14 Node tests passed |
|
|
30
|
-
| Same compiled test suite on official Node 22.0.0 arm64 | Four integration scripts plus 14 Node tests passed |
|
|
31
|
-
| Real Desktop Commander 0.3.0 | 25 native tools; discovery, authorized write/read roundtrip and restricted write refusal passed |
|
|
32
|
-
| Router and MCP results | Schema, annotations, `_meta`, structured/text/image/resource content and extension preservation; unknown names/collisions and default resources passed |
|
|
33
|
-
| Authentication | Local ES256 keys: invalid signatures/issuer/audience/expiry/subject/scope rejected; live token revocation and unavailable/unsafe state fail closed |
|
|
34
|
-
| Ingress authorization | Read-only discovery and calls; write refusal; caller identity headers not forwarded as trusted Core identity |
|
|
35
|
-
| Invocation faults | Rejection causes zero calls; extension grants checked before native passthrough; failing observers/audit preserve results; uncertain stdio effects executed once |
|
|
36
|
-
| Configuration and control | v1/v2/v3, roles, private permissions, symlink/traversal refusal, sandbox unavailable refusal, duplicate ownership, forged socket messages and unknown listeners passed |
|
|
37
|
-
| Lifecycle | Coalesced starts, close/restart, occupied port, failed startup, trusted stop and parent App exit release resources/ports |
|
|
38
|
-
| Source installation | Fresh staging `npm ci` ran prepare and produced runtime artifacts |
|
|
39
|
-
| Packed npm installation | Explicit allowlist, source maps and stable entries; production install without TypeScript; Node 22.0.0 onboarding/doctor/status/MCP/stop from unrelated working directory passed |
|
|
40
|
-
| Self-contained App | Fresh staging build, bundled Node 26.10.0, Swift `--selftest`, deep/strict codesign verification and isolated onboarding/doctor/status/MCP/stop passed |
|
|
41
|
-
|
|
42
|
-
The tests run emitted JavaScript. `test/run.ts` supplies a temporary HOME and removes inherited Gateway configuration variables; individual configuration/control tests also allocate temporary roots and ports. `test/test-release1-onboarding.ts` accepts `GATEWAY_TEST_PACKAGE_ROOT` to exercise a packed install or App Core using the same external CLI contract checks, from an unrelated working directory.
|
|
43
|
-
|
|
44
|
-
## Dependency and compatibility notes
|
|
45
|
-
|
|
46
|
-
The direct runtime versions remain MCP SDK 1.32.1, Desktop Commander 0.3.0, jose 6.2.12 and Zod 3.25.76. Existing lock entries changed only for `@types/node`, now pinned to 22.20.5; TypeScript is pinned to 5.9.3. npm tarball consumers use npm's normal dependency resolution; the App uses the committed lockfile for its production install.
|
|
47
|
-
|
|
48
|
-
The declared package Node floor remains 22 for compatibility. Runtime tests also passed on 22.0.0; Desktop Commander's own existing package metadata requires >=22.12.0, so use 22.12 or later when installing with strict engine enforcement. The App includes Node 26.10.0.
|
|
49
|
-
|
|
50
|
-
The pinned MCP SDK transport declarations do not fully align with exact optional properties. One documented `Transport` assertion remains at the SDK HTTP connection boundary. This does not weaken the Gateway compiler options or expose an `any` contract.
|
|
51
|
-
|
|
52
|
-
`typescript-baseline-sha256.json` records the pre-migration snapshot. `FILE_INVENTORY.sha256` covers the current source delivery, excluding dependencies, emitted output and the local CodeGraph index. The JavaScript baseline was supplied as a source snapshot. Local Git history begins with the TypeScript refactor; the earlier history is not reconstructed.
|
|
53
|
-
|
|
54
|
-
## Separate release gates
|
|
55
|
-
|
|
56
|
-
This validates the TypeScript refactor and local distribution layouts. It does not establish public release approval, Developer ID signing/notarization, independent clean-Mac UI onboarding, or live cloud/Tunnel client acceptance. Authentication tests use local signing keys and a simulated upstream; the genuine remote acceptance matrix remains in `RELEASE_STATUS.md`. No public Middleware SDK, script plugin loader, Catalog or new authentication mechanism was introduced.
|