mcp-pacemaker 2.0.1 → 2.1.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/CHANGELOG.md +105 -1
- package/CONTRIBUTING.md +49 -13
- package/README.md +361 -60
- package/THIRD_PARTY_NOTICES.txt +1 -28
- package/autostart/windows/account-task.ps1 +167 -0
- package/autostart/windows/inspect-task.ps1 +42 -0
- package/autostart/windows/inspect-worker-process-sessions.ps1 +155 -0
- package/autostart/windows/legacy-task.ps1 +301 -0
- package/autostart/windows/register-task.ps1 +11 -2
- package/bin/account-task-adapter.mjs +47 -0
- package/bin/account-upgrade-controller.mjs +198 -0
- package/bin/account-upgrade-worker.mjs +134 -0
- package/bin/account-worker-session.mjs +215 -0
- package/bin/cli-dispatch.mjs +154 -0
- package/bin/cli-main.mjs +1007 -0
- package/bin/cli-selection.mjs +43 -0
- package/bin/cli.mjs +7 -876
- package/bin/legacy-1.3.json +32 -0
- package/bin/legacy-installation.mjs +217 -0
- package/bin/legacy-task.mjs +52 -0
- package/bin/legacy-upgrade.mjs +471 -0
- package/bin/managed-runtime.mjs +170 -0
- package/bin/managed-state.mjs +257 -0
- package/bin/managed-upgrade.mjs +491 -0
- package/bin/mcp-bridge.mjs +132 -4
- package/bin/pooling-batches.mjs +13 -0
- package/bin/pooling-writer.mjs +4 -0
- package/bin/prewarm.mjs +33 -21
- package/bin/runtime-context.mjs +100 -0
- package/bin/service-control.mjs +27 -4
- package/bin/stable-launcher.mjs +54 -0
- package/bin/task-only-controller.mjs +226 -0
- package/bin/task-scope.mjs +65 -0
- package/bin/task-transaction-protocol.mjs +173 -0
- package/bin/top.mjs +22 -10
- package/bin/update-check.mjs +13 -2
- package/bin/upgrade-autostart.mjs +47 -0
- package/bin/upgrade-capability.json +8 -0
- package/bin/upgrade-dependencies.mjs +122 -0
- package/bin/upgrade-package.mjs +203 -0
- package/bin/windows-legacy/LegacyProcessBroker.build.json +42 -0
- package/bin/windows-legacy/LegacyProcessBroker.exe +0 -0
- package/bin/windows-legacy/src/AssemblyInfo.cs +8 -0
- package/bin/windows-legacy/src/LegacyNative.cs +783 -0
- package/bin/windows-legacy/src/LegacyProcessBroker.cs +841 -0
- package/bin/windows-legacy-process.mjs +241 -0
- package/bin/windows-lifetime/ProcessLifetimeHelper.build.json +38 -0
- package/bin/windows-lifetime/ProcessLifetimeHelper.exe +0 -0
- package/bin/windows-lifetime/src/AssemblyInfo.cs +8 -0
- package/bin/windows-lifetime/src/ProcessLifetimeHelper.cs +468 -0
- package/bin/windows-process-lifetime.mjs +218 -0
- package/bin/windows-task-channel/TaskChannelGuard.build.json +45 -0
- package/bin/windows-task-channel/TaskChannelGuard.exe +0 -0
- package/bin/windows-task-channel/src/AssemblyInfo.cs +8 -0
- package/bin/windows-task-channel/src/ChannelCliContext.cs +210 -0
- package/bin/windows-task-channel/src/ChannelFiles.cs +231 -0
- package/bin/windows-task-channel/src/ChannelNative.cs +477 -0
- package/bin/windows-task-channel/src/ChannelSession.cs +203 -0
- package/bin/windows-task-channel/src/TaskChannelGuard.cs +686 -0
- package/bin/windows-task-channel.mjs +335 -0
- package/docs/account-upgrades.md +205 -0
- package/docs/execution-context.md +113 -0
- package/package.json +12 -5
- package/supervisor/supervise.mjs +226 -40
- package/tools/account-upgrade/qualify-two-account.ps1 +66 -0
- package/tools/windows-legacy/README.md +225 -0
- package/tools/windows-legacy/build.ps1 +122 -0
- package/tools/windows-legacy/inventory.mjs +90 -0
- package/tools/windows-process-lifetime/README.md +119 -0
- package/tools/windows-process-lifetime/build.ps1 +122 -0
- package/tools/windows-process-lifetime/inventory.mjs +86 -0
- package/tools/windows-task-channel/README.md +329 -0
- package/tools/windows-task-channel/build.ps1 +107 -0
- package/tools/windows-task-channel/inventory.mjs +117 -0
- package/ui/dist/THIRD_PARTY_NOTICES.txt +1 -28
- package/ui/dist/assets/{index-CgPruWYi.js → index-CcwMo2sI.js} +1 -1
- package/ui/dist/assets/index-PVcuDNrN.css +1 -0
- package/ui/dist/index.html +2 -2
- package/ui/dist/third-party-manifest.json +37 -25
- package/ui/dist/assets/index-CaLPg0c-.css +0 -1
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import { createHash } from 'node:crypto';
|
|
3
|
+
import { lstatSync, readFileSync, readdirSync } from 'node:fs';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
|
|
6
|
+
export const TASK_CHANNEL_FILES = Object.freeze([
|
|
7
|
+
'bin/windows-task-channel.mjs',
|
|
8
|
+
'bin/windows-task-channel/TaskChannelGuard.exe',
|
|
9
|
+
'bin/windows-task-channel/TaskChannelGuard.build.json',
|
|
10
|
+
'bin/windows-task-channel/src/AssemblyInfo.cs',
|
|
11
|
+
'bin/windows-task-channel/src/ChannelCliContext.cs',
|
|
12
|
+
'bin/windows-task-channel/src/ChannelFiles.cs',
|
|
13
|
+
'bin/windows-task-channel/src/ChannelNative.cs',
|
|
14
|
+
'bin/windows-task-channel/src/ChannelSession.cs',
|
|
15
|
+
'bin/windows-task-channel/src/TaskChannelGuard.cs',
|
|
16
|
+
'tools/windows-task-channel/build.ps1',
|
|
17
|
+
'tools/windows-task-channel/inventory.mjs',
|
|
18
|
+
'tools/windows-task-channel/README.md',
|
|
19
|
+
]);
|
|
20
|
+
export const TASK_CHANNEL_TEST = 'test/windows-task-channel.test.mjs';
|
|
21
|
+
export const TASK_CHANNEL_REQUIRED_TESTS = Object.freeze([
|
|
22
|
+
...['invalid UTF8', 'invalid JSON', 'nonobject'].map(name =>
|
|
23
|
+
`task channel rejects completed ${name} before authorization acknowledgement`),
|
|
24
|
+
...['prepeer', 'postpeer'].flatMap(phase => ['close', 'EOF'].map(action =>
|
|
25
|
+
`task channel ${phase} ${action} cancels blocked authorization`)),
|
|
26
|
+
'task channel preserves valid opaque frames and FIFO commands across authorization',
|
|
27
|
+
...['close', 'EOF'].map(action => `task channel ${action} stays observable behind a queued authorization`),
|
|
28
|
+
...['duplicate sequence', 'queue overflow'].map(fault =>
|
|
29
|
+
`task channel refuses ${fault} while authorization is blocked`),
|
|
30
|
+
'task channel observes its actual caller token and held parent identity',
|
|
31
|
+
'task channel binds direct Node peer and preserves identity across bidirectional frames',
|
|
32
|
+
'task channel refuses another SID without actual elevated token despite supplied admin flags',
|
|
33
|
+
'task channel refuses wrong peer generation without stopping the worker',
|
|
34
|
+
'task channel refuses an unavailable bound session before creating bootstrap resources',
|
|
35
|
+
'task channel refuses extra worker argv without stopping the worker',
|
|
36
|
+
'task channel rejects changed bootstrap bytes before creating operation resources',
|
|
37
|
+
'task channel accepts only its first connection and cannot reconnect after close',
|
|
38
|
+
...['disconnect', 'exit'].map(action => `task channel invalidates held connection on worker ${action}`),
|
|
39
|
+
...['exit', 'disconnect'].map(action =>
|
|
40
|
+
`task channel refuses authorization when peer ${action} occurs during token observation`),
|
|
41
|
+
...['nonobject', 'invalid json', 'invalid UTF8', 'oversize', 'CR framing', 'incomplete frame timeout']
|
|
42
|
+
.map(name => `task channel refuses ${name} without terminating its peer`),
|
|
43
|
+
'task channel processes fragmented UTF8 and multiple complete frames on the same peer',
|
|
44
|
+
'task channel handshake deadline releases its resources without adopting a peer',
|
|
45
|
+
'task channel rejects unsupported role and never uses claimed parent or admin identity',
|
|
46
|
+
'task channel admin policy requires all actual token and parent-thread facts',
|
|
47
|
+
'task channel session policy refuses unavailable owner state and logon-generation ambiguity',
|
|
48
|
+
'task channel trusted-root inspection refuses a reparse path and does not import files',
|
|
49
|
+
'task channel parent exit releases native proof without stopping the direct worker',
|
|
50
|
+
'task channel manifest reader rejects wrong operation and a caller that is not its bootstrap',
|
|
51
|
+
'task channel refuses a newly created untrusted-writer code file without repairing its ACL',
|
|
52
|
+
'task channel inventories exact packaged native bytes and rejects source metadata or binary drift',
|
|
53
|
+
'task channel checks helper hashes before every native role and refuses missing helpers',
|
|
54
|
+
'task channel stdin cancellation ends a blocked query with its early owned identity',
|
|
55
|
+
'task channel parent loss ends a blocked query without waiting for its root walk',
|
|
56
|
+
'task channel blocked query deadline reports verified native exit without a surviving helper',
|
|
57
|
+
'task channel preserves exit-unverified evidence when a test-only native watchdog is blocked',
|
|
58
|
+
'task channel ordinary context proves the actual owned caller through complete held PSS threads',
|
|
59
|
+
'task channel ordinary eligibility refuses incomplete ambiguous or privileged policy facts',
|
|
60
|
+
...['denied', 'token', 'churn', 'layout', 'binding'].map(variant =>
|
|
61
|
+
`task channel ordinary context refuses owned ${variant} fault without relaxing authority`),
|
|
62
|
+
...['query-denied', 'denied', 'token', 'churn', 'reuse', 'layout', 'no-info', 'walk',
|
|
63
|
+
'marker-free', 'snapshot-free', 'duplicate', 'empty', 'count',
|
|
64
|
+
'owner', 'birth', 'exit-zero', 'exit-future', 'missing-flag', 'unknown-flags',
|
|
65
|
+
'changed-exit', 'classification', 'thread-denied', 'no-live'].map(variant =>
|
|
66
|
+
`task channel full facts refuses owned ${variant} fault without fallback`),
|
|
67
|
+
'task channel full facts repeats PSS per authorization and keeps peer and reader limited',
|
|
68
|
+
...['caller', 'cli-context'].flatMap(role => [
|
|
69
|
+
`task channel ${role} accepts proven already-ended held thread`,
|
|
70
|
+
`task channel ${role} refuses live thread ending after first snapshot`,
|
|
71
|
+
]),
|
|
72
|
+
]);
|
|
73
|
+
|
|
74
|
+
export function verifyTaskChannelAssets(root) {
|
|
75
|
+
for (const path of ['bin', 'bin/windows-task-channel', 'bin/windows-task-channel/src',
|
|
76
|
+
'tools', 'tools/windows-task-channel']) {
|
|
77
|
+
const stat = lstatSync(join(root, path));
|
|
78
|
+
assert.ok(stat.isDirectory() &&
|
|
79
|
+
!stat.isSymbolicLink(), `Invalid task channel directory: ${path}`);
|
|
80
|
+
}
|
|
81
|
+
const hash = bytes => createHash('sha256').update(bytes).digest('hex');
|
|
82
|
+
const files = TASK_CHANNEL_FILES.map(path => {
|
|
83
|
+
const full = join(root, path);
|
|
84
|
+
const stat = lstatSync(full);
|
|
85
|
+
assert.ok(stat.isFile() &&
|
|
86
|
+
!stat.isSymbolicLink() &&
|
|
87
|
+
stat.size > 0, `Invalid task channel asset: ${path}`);
|
|
88
|
+
return { path, sha256: hash(readFileSync(full)) };
|
|
89
|
+
});
|
|
90
|
+
assert.deepEqual(readdirSync(join(root, 'bin/windows-task-channel')).sort(),
|
|
91
|
+
['TaskChannelGuard.build.json', 'TaskChannelGuard.exe', 'src']);
|
|
92
|
+
const sources = ['AssemblyInfo.cs', 'ChannelCliContext.cs', 'ChannelFiles.cs', 'ChannelNative.cs', 'ChannelSession.cs', 'TaskChannelGuard.cs'];
|
|
93
|
+
assert.deepEqual(readdirSync(join(root, 'bin/windows-task-channel/src')).sort(), sources);
|
|
94
|
+
const metadata = JSON.parse(readFileSync(join(root, 'bin/windows-task-channel/TaskChannelGuard.build.json')));
|
|
95
|
+
assert.equal(metadata.schemaVersion, 1);
|
|
96
|
+
assert.equal(metadata.binary, 'TaskChannelGuard.exe');
|
|
97
|
+
assert.equal(metadata.inputs.targetFramework, '.NETFramework,Version=v4.6.2');
|
|
98
|
+
assert.equal(metadata.inputs.platform, 'AnyCPU');
|
|
99
|
+
assert.equal(metadata.inputs.pathMap, '/_/mcp-pacemaker/windows-task-channel');
|
|
100
|
+
assert.deepEqual(Object.keys(metadata.inputs.sourceSha256).sort(), sources);
|
|
101
|
+
assert.deepEqual(Object.keys(metadata.inputs.referenceSha256).sort(),
|
|
102
|
+
['System.Core.dll', 'System.Management.dll', 'System.Web.Extensions.dll', 'System.dll', 'mscorlib.dll']);
|
|
103
|
+
assert.match(metadata.inputs.compilerSha256, /^[a-f0-9]{64}$/);
|
|
104
|
+
assert.deepEqual(metadata.inputs.compilerArguments, [
|
|
105
|
+
'/nologo', '/noconfig', '/nostdlib+', '/target:exe', '/platform:anycpu', '/langversion:7.3',
|
|
106
|
+
'/optimize+', '/debug-', '/deterministic+', '/checked-', '/unsafe-', '/warn:4', '/warnaserror+', '/utf8output',
|
|
107
|
+
]);
|
|
108
|
+
assert.equal(files.find(file => file.path.endsWith('.exe')).sha256, metadata.binarySha256);
|
|
109
|
+
const inputs = sources.map(name => [`bin/windows-task-channel/src/${name}`, metadata.inputs.sourceSha256[name]]);
|
|
110
|
+
inputs.push(['tools/windows-task-channel/build.ps1', metadata.inputs.buildScriptSha256]);
|
|
111
|
+
for (const [path, expected] of inputs) {
|
|
112
|
+
assert.equal(hash(readFileSync(join(root, path), 'utf8').replaceAll('\r\n', '\n')), expected,
|
|
113
|
+
`Changed task channel build input: ${path}`);
|
|
114
|
+
}
|
|
115
|
+
return { status: 'source-and-binary-hashes-verified', files, binarySha256: metadata.binarySha256,
|
|
116
|
+
compilerSha256: metadata.inputs.compilerSha256, reproducibilityBuild: 'requires-recorded-toolchain-verify' };
|
|
117
|
+
}
|
|
@@ -192,7 +192,7 @@ SOFTWARE.
|
|
|
192
192
|
*/
|
|
193
193
|
|
|
194
194
|
==============================================================================
|
|
195
|
-
tailwindcss@3.
|
|
195
|
+
tailwindcss@4.3.3
|
|
196
196
|
Declared license: MIT
|
|
197
197
|
|
|
198
198
|
--- LICENSE ---
|
|
@@ -218,33 +218,6 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
218
218
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
219
219
|
SOFTWARE.
|
|
220
220
|
|
|
221
|
-
--- lib/css/LICENSE ---
|
|
222
|
-
MIT License
|
|
223
|
-
|
|
224
|
-
Copyright (c) Nicolas Gallagher
|
|
225
|
-
Copyright (c) Jonathan Neal
|
|
226
|
-
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
|
|
227
|
-
Copyright (c) Adam Wathan
|
|
228
|
-
Copyright (c) Jonathan Reinink
|
|
229
|
-
|
|
230
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
231
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
232
|
-
in the Software without restriction, including without limitation the rights
|
|
233
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
234
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
235
|
-
furnished to do so, subject to the following conditions:
|
|
236
|
-
|
|
237
|
-
The above copyright notice and this permission notice shall be included in all
|
|
238
|
-
copies or substantial portions of the Software.
|
|
239
|
-
|
|
240
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
241
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
242
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
243
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
244
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
245
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
246
|
-
SOFTWARE.
|
|
247
|
-
|
|
248
221
|
==============================================================================
|
|
249
222
|
vite@7.3.6
|
|
250
223
|
Declared license: MIT
|