@mcsherrylabs/pi-meerkat 0.8.0 → 0.10.1
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 +34 -10
- package/dist/installer/genesis.devnet.conf +92 -0
- package/dist/installer/node-join.sh +8 -1
- package/dist/installer/node.conf +3 -0
- package/dist/installer/node.devnet.conf +238 -0
- package/dist/installer/runtime.json +1 -1
- package/dist/installer-runtime/dist/src/app.js +15 -2
- package/dist/installer-runtime/dist/src/env.js +12 -0
- package/dist/installer-runtime/dist/src/registry/index.js +11 -2
- package/dist/installer-runtime/dist/src/registry/provision.js +46 -1
- package/dist/installer-runtime/dist/src/runtime.js +37 -9
- package/dist/installer.d.ts +189 -12
- package/dist/installer.d.ts.map +1 -1
- package/dist/installer.js +159 -49
- package/dist/installer.js.map +1 -1
- package/dist/mcp-announce.d.ts +18 -0
- package/dist/mcp-announce.d.ts.map +1 -1
- package/dist/mcp-announce.js +18 -4
- package/dist/mcp-announce.js.map +1 -1
- package/dist/mcp-cli.d.ts.map +1 -1
- package/dist/mcp-cli.js +28 -18
- package/dist/mcp-cli.js.map +1 -1
- package/dist/mcp-config.d.ts +1 -0
- package/dist/mcp-config.d.ts.map +1 -1
- package/dist/mcp-config.js +2 -1
- package/dist/mcp-config.js.map +1 -1
- package/dist/mcp-upstream.d.ts +1 -1
- package/dist/mcp-upstream.d.ts.map +1 -1
- package/dist/mcp-upstream.js +7 -2
- package/dist/mcp-upstream.js.map +1 -1
- package/dist/tools.js +4 -4
- package/dist/tools.js.map +1 -1
- package/installer/Node.Dockerfile +4 -0
- package/installer/runtime-control.mjs +179 -16
- package/package.json +5 -5
- package/skills/channel-subscription/SKILL.md +3 -3
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
// Meerkat composition root for the shared processor, not a second collector/runtime.
|
|
2
2
|
// All paths/capabilities are operator-fixed here; requests can supply only a channel id.
|
|
3
3
|
import { join } from "node:path";
|
|
4
|
-
import {
|
|
4
|
+
import { connect as netConnect } from "node:net";
|
|
5
|
+
import { lstat, unlink } from "node:fs/promises";
|
|
6
|
+
import { nodeControlRestarter, nodeObserver, nodePuller, startControlServer, startProcessor, startReadServer, subscriptionConfig, subscriptionController, } from "@mcsherrylabs/evolver-client/processor";
|
|
5
7
|
import { ensureStateDir } from "./env.js";
|
|
6
8
|
const productionSdk = {
|
|
7
|
-
|
|
9
|
+
nodeControlRestarter, nodeObserver, nodePuller, startControlServer, startProcessor,
|
|
8
10
|
startReadServer, subscriptionConfig, subscriptionController,
|
|
9
11
|
};
|
|
10
12
|
export function processorBinding() {
|
|
@@ -16,6 +18,35 @@ export function processorConfigPath(target) {
|
|
|
16
18
|
export function processorStatePath(target) {
|
|
17
19
|
return join(target.stateDir, "registry.db");
|
|
18
20
|
}
|
|
21
|
+
/** A stale control socket left by an unclean registry exit would make the SDK's control
|
|
22
|
+
* server refuse to bind ("Never unlink/steal a pre-existing socket"). Only when the path is
|
|
23
|
+
* a SOCKET and nobody is listening (ECONNREFUSED on a bounded connect) is it safe to unlink:
|
|
24
|
+
* this process is the sole owner of its control directory. A live owner (connect succeeds) or
|
|
25
|
+
* any other error, or a non-socket path, is left untouched so the SDK refuses as designed. */
|
|
26
|
+
export async function removeStaleControlSocket(socketPath) {
|
|
27
|
+
let stat;
|
|
28
|
+
try {
|
|
29
|
+
stat = await lstat(socketPath);
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
if (error.code === "ENOENT")
|
|
33
|
+
return;
|
|
34
|
+
throw error;
|
|
35
|
+
}
|
|
36
|
+
if (!stat.isSocket())
|
|
37
|
+
return; // never unlink a non-socket; the node/SDK fails closed on it
|
|
38
|
+
const result = await new Promise(resolve => {
|
|
39
|
+
const socket = netConnect(socketPath);
|
|
40
|
+
const timer = setTimeout(() => { socket.destroy(); resolve("error"); }, 1000);
|
|
41
|
+
socket.once("connect", () => { clearTimeout(timer); socket.destroy(); resolve("connected"); });
|
|
42
|
+
socket.once("error", (error) => {
|
|
43
|
+
clearTimeout(timer);
|
|
44
|
+
resolve(error.code === "ECONNREFUSED" ? "refused" : "error");
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
if (result === "refused")
|
|
48
|
+
await unlink(socketPath);
|
|
49
|
+
}
|
|
19
50
|
export async function startMeerkatProcessor(args, sdk = productionSdk) {
|
|
20
51
|
const binding = processorBinding();
|
|
21
52
|
// Synchronous SDK validation of fixed expectations, NOT an online-node startup dependency.
|
|
@@ -72,17 +103,14 @@ export async function startMeerkatServers(args, sdk = productionSdk) {
|
|
|
72
103
|
store: args.runtime.store, port: args.port,
|
|
73
104
|
host: process.env.PROCESSOR_READ_HOST?.trim() || "127.0.0.1", routes: args.routes, say: args.say,
|
|
74
105
|
}));
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
if (socketPath || dockerSocket || containerName) {
|
|
79
|
-
if (!socketPath || !dockerSocket || !containerName)
|
|
80
|
-
throw new Error("managed control requires explicit control socket, Docker socket and fixed node container");
|
|
106
|
+
const socketPath = process.env.EVOLVER_PROCESSOR_CONTROL_SOCKET?.trim();
|
|
107
|
+
if (socketPath) {
|
|
108
|
+
await removeStaleControlSocket(socketPath);
|
|
81
109
|
const binding = processorBinding();
|
|
82
110
|
const controller = sdk.subscriptionController({
|
|
83
111
|
binding, runtime: args.runtime, config: sdk.subscriptionConfig(processorConfigPath(args.target)),
|
|
84
112
|
observe: sdk.nodeObserver({ baseUrl: args.target.nodeUrl, binding }),
|
|
85
|
-
restart: sdk.
|
|
113
|
+
restart: sdk.nodeControlRestarter({ socketPath: "/node-control/node.sock", expected: binding }),
|
|
86
114
|
});
|
|
87
115
|
servers.push(await sdk.startControlServer({ socketPath, mode: 0o660, controller, say: args.say }));
|
|
88
116
|
}
|
package/dist/installer.d.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
+
export type Mode = 'devnet' | 'local';
|
|
1
2
|
export interface Installation {
|
|
2
3
|
version: 1;
|
|
3
4
|
uid: number;
|
|
4
5
|
id: string;
|
|
5
6
|
dir: string;
|
|
6
7
|
project: string;
|
|
8
|
+
mode: Mode;
|
|
7
9
|
nodeId: string;
|
|
8
|
-
committeeId
|
|
10
|
+
committeeId?: string;
|
|
9
11
|
identity: string;
|
|
10
12
|
registryOperator: string;
|
|
11
13
|
channel: string;
|
|
@@ -21,17 +23,20 @@ export interface Installation {
|
|
|
21
23
|
}
|
|
22
24
|
export interface InstallerDeps {
|
|
23
25
|
command(command: string, args: string[], env?: NodeJS.ProcessEnv, cwd?: string): Promise<string>;
|
|
24
|
-
committeeReady(state: Installation, env: NodeJS.ProcessEnv): Promise<void>;
|
|
26
|
+
committeeReady?(state: Installation, env: NodeJS.ProcessEnv): Promise<void>;
|
|
25
27
|
nodeBinding(state: Installation, env: NodeJS.ProcessEnv): Promise<{
|
|
26
28
|
chainId: string;
|
|
27
29
|
nodeId: string;
|
|
28
30
|
}>;
|
|
29
31
|
registryReady(state: Installation, env: NodeJS.ProcessEnv): Promise<void>;
|
|
30
32
|
bootstrap(state: Installation, env: NodeJS.ProcessEnv): Promise<void>;
|
|
33
|
+
claimChannel?(state: Installation, env: NodeJS.ProcessEnv): Promise<void>;
|
|
31
34
|
}
|
|
32
35
|
export declare function managedDirectory(env?: NodeJS.ProcessEnv): string;
|
|
33
|
-
|
|
34
|
-
export declare function
|
|
36
|
+
/** Per-mode state directory. The 0.8.0 path `<state>/meerkat/` (installation.json) is never used. */
|
|
37
|
+
export declare function modeDirectory(mode: Mode, env?: NodeJS.ProcessEnv): string;
|
|
38
|
+
export declare const managedConfigPath: (mode?: Mode, env?: NodeJS.ProcessEnv) => string;
|
|
39
|
+
export declare function pinnedRegistration(version: string, mode?: Mode): {
|
|
35
40
|
mcpServers: {
|
|
36
41
|
meerkat: {
|
|
37
42
|
command: string;
|
|
@@ -40,6 +45,157 @@ export declare function pinnedRegistration(version: string): {
|
|
|
40
45
|
};
|
|
41
46
|
};
|
|
42
47
|
export declare function renderDeployment(state: Installation): {
|
|
48
|
+
name: string;
|
|
49
|
+
services: {
|
|
50
|
+
node: {
|
|
51
|
+
image: string;
|
|
52
|
+
labels: {
|
|
53
|
+
"io.meerkat.installation": string;
|
|
54
|
+
};
|
|
55
|
+
container_name: string;
|
|
56
|
+
entrypoint: string[];
|
|
57
|
+
build: {
|
|
58
|
+
context: string;
|
|
59
|
+
dockerfile: string;
|
|
60
|
+
labels: {
|
|
61
|
+
"io.meerkat.installation": string;
|
|
62
|
+
};
|
|
63
|
+
args: {
|
|
64
|
+
EVOLVER_NODE_IMAGE: string;
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
environment: {
|
|
68
|
+
APP_NODE_ID: string;
|
|
69
|
+
DEVNET_API: string;
|
|
70
|
+
EVOLVER_UPSTREAM_NODE_ID: string;
|
|
71
|
+
EVOLVER_DA_PEERS: string;
|
|
72
|
+
EVOLVER_ALLOWED_OUTBOUND: string;
|
|
73
|
+
EVOLVER_EXECUTION_ENABLED: string;
|
|
74
|
+
EVOLVER_NODE_PORT: string;
|
|
75
|
+
EVOLVER_NODE_CONFIG: string;
|
|
76
|
+
CLAIM_TIMEOUT?: undefined;
|
|
77
|
+
CLAIM_WATCH_SECS?: undefined;
|
|
78
|
+
};
|
|
79
|
+
group_add: string[];
|
|
80
|
+
volumes: string[];
|
|
81
|
+
restart: string;
|
|
82
|
+
};
|
|
83
|
+
registry: {
|
|
84
|
+
image: string;
|
|
85
|
+
labels: {
|
|
86
|
+
"io.meerkat.installation": string;
|
|
87
|
+
};
|
|
88
|
+
container_name: string;
|
|
89
|
+
build: {
|
|
90
|
+
context: string;
|
|
91
|
+
dockerfile: string;
|
|
92
|
+
labels: {
|
|
93
|
+
"io.meerkat.installation": string;
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
user: string;
|
|
97
|
+
group_add: string[];
|
|
98
|
+
environment: {
|
|
99
|
+
EVOLVER_FAUCET_URL: string;
|
|
100
|
+
EVOLVER_CHAIN_ID: string;
|
|
101
|
+
APP_NODE_ID: string;
|
|
102
|
+
EVOLVER_SUBSCRIPTIONS_FILE: string;
|
|
103
|
+
REGISTRY_CHANNEL: string;
|
|
104
|
+
REGISTRY_CHANNEL_OPERATOR: string;
|
|
105
|
+
REGISTRY_READ_ONLY: string;
|
|
106
|
+
REGISTRY_CONTENT_URL: string;
|
|
107
|
+
PROCESSOR_HTTP_PORT: string;
|
|
108
|
+
PROCESSOR_READ_HOST: string;
|
|
109
|
+
EVOLVER_PROCESSOR_CONTROL_SOCKET: string;
|
|
110
|
+
EVOLVER_DEVNET_URL?: string | undefined;
|
|
111
|
+
EVOLVER_TARGET: string;
|
|
112
|
+
EVOLVER_NODE: string;
|
|
113
|
+
};
|
|
114
|
+
volumes: string[];
|
|
115
|
+
restart: string;
|
|
116
|
+
};
|
|
117
|
+
'subscriptions-init': {
|
|
118
|
+
image: string;
|
|
119
|
+
labels: {
|
|
120
|
+
"io.meerkat.installation": string;
|
|
121
|
+
};
|
|
122
|
+
profiles: string[];
|
|
123
|
+
user: string;
|
|
124
|
+
environment: {
|
|
125
|
+
EVOLVER_INITIAL_CHANNELS: string;
|
|
126
|
+
EVOLVER_OPERATOR_UID: string;
|
|
127
|
+
EVOLVER_OPERATOR_GID: string;
|
|
128
|
+
EVOLVER_FAUCET_URL: string;
|
|
129
|
+
EVOLVER_CHAIN_ID: string;
|
|
130
|
+
APP_NODE_ID: string;
|
|
131
|
+
EVOLVER_SUBSCRIPTIONS_FILE: string;
|
|
132
|
+
REGISTRY_CHANNEL: string;
|
|
133
|
+
REGISTRY_CHANNEL_OPERATOR: string;
|
|
134
|
+
REGISTRY_READ_ONLY: string;
|
|
135
|
+
REGISTRY_CONTENT_URL: string;
|
|
136
|
+
PROCESSOR_HTTP_PORT: string;
|
|
137
|
+
PROCESSOR_READ_HOST: string;
|
|
138
|
+
EVOLVER_PROCESSOR_CONTROL_SOCKET: string;
|
|
139
|
+
EVOLVER_DEVNET_URL?: string | undefined;
|
|
140
|
+
EVOLVER_TARGET: string;
|
|
141
|
+
EVOLVER_NODE: string;
|
|
142
|
+
};
|
|
143
|
+
entrypoint: string[];
|
|
144
|
+
command: string[];
|
|
145
|
+
volumes: string[];
|
|
146
|
+
};
|
|
147
|
+
committee?: undefined;
|
|
148
|
+
};
|
|
149
|
+
volumes: {
|
|
150
|
+
'node-data': {
|
|
151
|
+
name: string;
|
|
152
|
+
labels: {
|
|
153
|
+
"io.meerkat.installation": string;
|
|
154
|
+
};
|
|
155
|
+
};
|
|
156
|
+
'app-state': {
|
|
157
|
+
name: string;
|
|
158
|
+
labels: {
|
|
159
|
+
"io.meerkat.installation": string;
|
|
160
|
+
};
|
|
161
|
+
};
|
|
162
|
+
subscriptions: {
|
|
163
|
+
name: string;
|
|
164
|
+
labels: {
|
|
165
|
+
"io.meerkat.installation": string;
|
|
166
|
+
};
|
|
167
|
+
};
|
|
168
|
+
'agent-state': {
|
|
169
|
+
name: string;
|
|
170
|
+
labels: {
|
|
171
|
+
"io.meerkat.installation": string;
|
|
172
|
+
};
|
|
173
|
+
};
|
|
174
|
+
'node-control': {
|
|
175
|
+
name: string;
|
|
176
|
+
labels: {
|
|
177
|
+
"io.meerkat.installation": string;
|
|
178
|
+
};
|
|
179
|
+
};
|
|
180
|
+
control: {
|
|
181
|
+
name: string;
|
|
182
|
+
labels: {
|
|
183
|
+
"io.meerkat.installation": string;
|
|
184
|
+
};
|
|
185
|
+
};
|
|
186
|
+
'committee-data'?: undefined;
|
|
187
|
+
genesis?: undefined;
|
|
188
|
+
};
|
|
189
|
+
networks: {
|
|
190
|
+
default: {
|
|
191
|
+
name: string;
|
|
192
|
+
labels: {
|
|
193
|
+
"io.meerkat.installation": string;
|
|
194
|
+
};
|
|
195
|
+
internal?: undefined;
|
|
196
|
+
};
|
|
197
|
+
};
|
|
198
|
+
} | {
|
|
43
199
|
name: string;
|
|
44
200
|
services: {
|
|
45
201
|
committee: {
|
|
@@ -60,7 +216,7 @@ export declare function renderDeployment(state: Installation): {
|
|
|
60
216
|
};
|
|
61
217
|
entrypoint: string[];
|
|
62
218
|
environment: {
|
|
63
|
-
NODE_ID: string;
|
|
219
|
+
NODE_ID: string | undefined;
|
|
64
220
|
PUBLIC_HOST: string;
|
|
65
221
|
};
|
|
66
222
|
group_add: string[];
|
|
@@ -87,12 +243,14 @@ export declare function renderDeployment(state: Installation): {
|
|
|
87
243
|
environment: {
|
|
88
244
|
APP_NODE_ID: string;
|
|
89
245
|
DEVNET_API: string;
|
|
90
|
-
EVOLVER_UPSTREAM_NODE_ID: string;
|
|
246
|
+
EVOLVER_UPSTREAM_NODE_ID: string | undefined;
|
|
91
247
|
EVOLVER_ALLOWED_OUTBOUND: string;
|
|
92
248
|
EVOLVER_EXECUTION_ENABLED: string;
|
|
93
249
|
EVOLVER_NODE_PORT: string;
|
|
94
250
|
CLAIM_TIMEOUT: string;
|
|
95
251
|
CLAIM_WATCH_SECS: string;
|
|
252
|
+
EVOLVER_DA_PEERS?: undefined;
|
|
253
|
+
EVOLVER_NODE_CONFIG?: undefined;
|
|
96
254
|
};
|
|
97
255
|
group_add: string[];
|
|
98
256
|
volumes: string[];
|
|
@@ -112,18 +270,22 @@ export declare function renderDeployment(state: Installation): {
|
|
|
112
270
|
};
|
|
113
271
|
};
|
|
114
272
|
user: string;
|
|
273
|
+
group_add: string[];
|
|
115
274
|
environment: {
|
|
116
|
-
EVOLVER_TARGET: string;
|
|
117
|
-
EVOLVER_NODE: string;
|
|
118
275
|
EVOLVER_FAUCET_URL: string;
|
|
119
276
|
EVOLVER_CHAIN_ID: string;
|
|
120
277
|
APP_NODE_ID: string;
|
|
121
278
|
EVOLVER_SUBSCRIPTIONS_FILE: string;
|
|
122
279
|
REGISTRY_CHANNEL: string;
|
|
123
280
|
REGISTRY_CHANNEL_OPERATOR: string;
|
|
281
|
+
REGISTRY_READ_ONLY: string;
|
|
124
282
|
REGISTRY_CONTENT_URL: string;
|
|
125
283
|
PROCESSOR_HTTP_PORT: string;
|
|
126
284
|
PROCESSOR_READ_HOST: string;
|
|
285
|
+
EVOLVER_PROCESSOR_CONTROL_SOCKET: string;
|
|
286
|
+
EVOLVER_DEVNET_URL?: string | undefined;
|
|
287
|
+
EVOLVER_TARGET: string;
|
|
288
|
+
EVOLVER_NODE: string;
|
|
127
289
|
};
|
|
128
290
|
volumes: string[];
|
|
129
291
|
restart: string;
|
|
@@ -139,17 +301,20 @@ export declare function renderDeployment(state: Installation): {
|
|
|
139
301
|
EVOLVER_INITIAL_CHANNELS: string;
|
|
140
302
|
EVOLVER_OPERATOR_UID: string;
|
|
141
303
|
EVOLVER_OPERATOR_GID: string;
|
|
142
|
-
EVOLVER_TARGET: string;
|
|
143
|
-
EVOLVER_NODE: string;
|
|
144
304
|
EVOLVER_FAUCET_URL: string;
|
|
145
305
|
EVOLVER_CHAIN_ID: string;
|
|
146
306
|
APP_NODE_ID: string;
|
|
147
307
|
EVOLVER_SUBSCRIPTIONS_FILE: string;
|
|
148
308
|
REGISTRY_CHANNEL: string;
|
|
149
309
|
REGISTRY_CHANNEL_OPERATOR: string;
|
|
310
|
+
REGISTRY_READ_ONLY: string;
|
|
150
311
|
REGISTRY_CONTENT_URL: string;
|
|
151
312
|
PROCESSOR_HTTP_PORT: string;
|
|
152
313
|
PROCESSOR_READ_HOST: string;
|
|
314
|
+
EVOLVER_PROCESSOR_CONTROL_SOCKET: string;
|
|
315
|
+
EVOLVER_DEVNET_URL?: string | undefined;
|
|
316
|
+
EVOLVER_TARGET: string;
|
|
317
|
+
EVOLVER_NODE: string;
|
|
153
318
|
};
|
|
154
319
|
entrypoint: string[];
|
|
155
320
|
command: string[];
|
|
@@ -193,6 +358,18 @@ export declare function renderDeployment(state: Installation): {
|
|
|
193
358
|
"io.meerkat.installation": string;
|
|
194
359
|
};
|
|
195
360
|
};
|
|
361
|
+
'node-control': {
|
|
362
|
+
name: string;
|
|
363
|
+
labels: {
|
|
364
|
+
"io.meerkat.installation": string;
|
|
365
|
+
};
|
|
366
|
+
};
|
|
367
|
+
control: {
|
|
368
|
+
name: string;
|
|
369
|
+
labels: {
|
|
370
|
+
"io.meerkat.installation": string;
|
|
371
|
+
};
|
|
372
|
+
};
|
|
196
373
|
};
|
|
197
374
|
networks: {
|
|
198
375
|
default: {
|
|
@@ -205,11 +382,11 @@ export declare function renderDeployment(state: Installation): {
|
|
|
205
382
|
};
|
|
206
383
|
};
|
|
207
384
|
export declare function operatorEnvironment(env: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
|
|
208
|
-
export declare function managedInstallation(env?: NodeJS.ProcessEnv): Promise<Installation | undefined>;
|
|
385
|
+
export declare function managedInstallation(mode?: Mode, env?: NodeJS.ProcessEnv): Promise<Installation | undefined>;
|
|
209
386
|
/** Protocol-only stdio bridge, one new facade/private child/session per harness connection.
|
|
210
387
|
* Docker exec works even when daemon and harness share neither filesystem nor loopback. */
|
|
211
388
|
export declare function serveManaged(state: Installation, env?: NodeJS.ProcessEnv): Promise<void>;
|
|
212
|
-
export declare function installMeerkat(env?: NodeJS.ProcessEnv, deps?: InstallerDeps): Promise<{
|
|
389
|
+
export declare function installMeerkat(mode?: Mode, env?: NodeJS.ProcessEnv, deps?: InstallerDeps): Promise<{
|
|
213
390
|
dir: string;
|
|
214
391
|
configPath: string;
|
|
215
392
|
registration: {
|
package/dist/installer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":"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"}
|