@groundnuty/macf 0.2.37 → 0.2.39
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/dist/.build-info.json +2 -2
- package/dist/cli/claude-sh.d.ts.map +1 -1
- package/dist/cli/claude-sh.js +13 -0
- package/dist/cli/claude-sh.js.map +1 -1
- package/dist/cli/commands/certs.d.ts.map +1 -1
- package/dist/cli/commands/certs.js +6 -2
- package/dist/cli/commands/certs.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts +102 -3
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +349 -55
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/fleet-doctor-inject.d.ts +52 -0
- package/dist/cli/commands/fleet-doctor-inject.d.ts.map +1 -0
- package/dist/cli/commands/fleet-doctor-inject.js +100 -0
- package/dist/cli/commands/fleet-doctor-inject.js.map +1 -0
- package/dist/cli/commands/fleet-doctor.d.ts +236 -0
- package/dist/cli/commands/fleet-doctor.d.ts.map +1 -0
- package/dist/cli/commands/fleet-doctor.js +481 -0
- package/dist/cli/commands/fleet-doctor.js.map +1 -0
- package/dist/cli/commands/fleet.d.ts +83 -0
- package/dist/cli/commands/fleet.d.ts.map +1 -0
- package/dist/cli/commands/fleet.js +225 -0
- package/dist/cli/commands/fleet.js.map +1 -0
- package/dist/cli/commands/init.d.ts +24 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +79 -8
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/migrate.d.ts +1 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/ps.d.ts +17 -0
- package/dist/cli/commands/ps.d.ts.map +1 -0
- package/dist/cli/commands/ps.js +69 -0
- package/dist/cli/commands/ps.js.map +1 -0
- package/dist/cli/commands/registry-prune.d.ts +81 -0
- package/dist/cli/commands/registry-prune.d.ts.map +1 -0
- package/dist/cli/commands/registry-prune.js +163 -0
- package/dist/cli/commands/registry-prune.js.map +1 -0
- package/dist/cli/commands/restart-self.d.ts +111 -0
- package/dist/cli/commands/restart-self.d.ts.map +1 -0
- package/dist/cli/commands/restart-self.js +312 -0
- package/dist/cli/commands/restart-self.js.map +1 -0
- package/dist/cli/commands/routing-doctor-gh.d.ts +29 -0
- package/dist/cli/commands/routing-doctor-gh.d.ts.map +1 -0
- package/dist/cli/commands/routing-doctor-gh.js +103 -0
- package/dist/cli/commands/routing-doctor-gh.js.map +1 -0
- package/dist/cli/commands/routing-doctor.d.ts +183 -0
- package/dist/cli/commands/routing-doctor.d.ts.map +1 -0
- package/dist/cli/commands/routing-doctor.js +504 -0
- package/dist/cli/commands/routing-doctor.js.map +1 -0
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +9 -0
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/config.d.ts +2 -0
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +16 -0
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/env-files.d.ts.map +1 -1
- package/dist/cli/env-files.js +11 -0
- package/dist/cli/env-files.js.map +1 -1
- package/dist/cli/host-prelude.d.ts +50 -0
- package/dist/cli/host-prelude.d.ts.map +1 -0
- package/dist/cli/host-prelude.js +256 -0
- package/dist/cli/host-prelude.js.map +1 -0
- package/dist/cli/index.js +122 -5
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/proc-scan.d.ts +81 -0
- package/dist/cli/proc-scan.d.ts.map +1 -0
- package/dist/cli/proc-scan.js +172 -0
- package/dist/cli/proc-scan.js.map +1 -0
- package/dist/cli/role-settings-model.d.ts +70 -0
- package/dist/cli/role-settings-model.d.ts.map +1 -0
- package/dist/cli/role-settings-model.js +90 -0
- package/dist/cli/role-settings-model.js.map +1 -0
- package/dist/cli/settings-writer.d.ts +27 -0
- package/dist/cli/settings-writer.d.ts.map +1 -1
- package/dist/cli/settings-writer.js +144 -2
- package/dist/cli/settings-writer.js.map +1 -1
- package/package.json +2 -2
- package/plugin/rules/coordination.md +10 -0
- package/plugin/rules/silent-fallback-hazards.md +19 -4
- package/scripts/check-gh-attribution.sh +34 -10
- package/scripts/emit-turn-receipt.sh +44 -4
package/dist/cli/index.js
CHANGED
|
@@ -9,6 +9,12 @@ import { initAgent } from './commands/init.js';
|
|
|
9
9
|
import { update } from './commands/update.js';
|
|
10
10
|
import { showStatus } from './commands/status.js';
|
|
11
11
|
import { listPeers } from './commands/peers.js';
|
|
12
|
+
import { runPs } from './commands/ps.js';
|
|
13
|
+
import { runFleetStatus } from './commands/fleet.js';
|
|
14
|
+
import { runFleetDoctor } from './commands/fleet-doctor.js';
|
|
15
|
+
import { runRoutingDoctor } from './commands/routing-doctor.js';
|
|
16
|
+
import { runRegistryPrune } from './commands/registry-prune.js';
|
|
17
|
+
import { runRestartSelfCommand } from './commands/restart-self.js';
|
|
12
18
|
import { certsInit, certsRecover, certsRotate, issueRoutingClient } from './commands/certs.js';
|
|
13
19
|
import { repoInit } from './commands/repo-init.js';
|
|
14
20
|
import { rulesRefresh } from './commands/rules-refresh.js';
|
|
@@ -65,8 +71,9 @@ program
|
|
|
65
71
|
.command('init')
|
|
66
72
|
.description('Set up a project directory for an agent')
|
|
67
73
|
.requiredOption('--project <name>', 'Project name (e.g., macf)')
|
|
68
|
-
.requiredOption('--role <role>', 'Agent role (
|
|
69
|
-
.option('--name <name>', 'Agent name (defaults to role)')
|
|
74
|
+
.requiredOption('--role <role>', 'Agent role — a canonical role (auditor, code-agent, science-agent, devops-agent, writing-agent) or a custom one. NOTE: the auditor role is the exact string "auditor" (no -agent suffix) — a near-miss silently skips its never-acts safety hook (macf#551).')
|
|
75
|
+
.option('--name <name>', 'Agent name (defaults to role) — the OTEL bot-name / GitHub-attribution identity')
|
|
76
|
+
.option('--routing-label <label>', 'Routing identity (registry key + cert CN), defaults to the agent name. Set only when it must differ from the bot-name, e.g. the substrate (devops-agent vs macf-devops-agent) (macf#545).')
|
|
70
77
|
.option('--type <type>', 'Agent type: permanent or worker', 'permanent')
|
|
71
78
|
// App-cred flags are required only for GitHub-backed registries.
|
|
72
79
|
// `--local` (DR-024 / macf#322) skips token mint entirely; commander
|
|
@@ -76,7 +83,8 @@ program
|
|
|
76
83
|
// rather than commander's generic missing-required message.
|
|
77
84
|
.option('--app-id <id>', 'GitHub App ID (required for repo/org/profile registries)')
|
|
78
85
|
.option('--install-id <id>', 'GitHub App Installation ID (required for repo/org/profile registries)')
|
|
79
|
-
.option('--key-path <path>', '
|
|
86
|
+
.option('--key-path <path>', 'Destination the App private key lives at + what env.github points to (repo/org/profile registries). Defaults to ~/.macf/keys/<agent>.pem; pass --app-key to ingest the key here at init.')
|
|
87
|
+
.option('--app-key <path>', 'Source path of the downloaded App private key (.pem) to INGEST into --key-path (default ~/.macf/keys/<agent>.pem) at 0600. Onboarding: create the App -> download the .pem -> macf init --app-key <path> ... (macf#530).')
|
|
80
88
|
.option('--registry-type <type>', 'Registry: repo, org, profile, or local (DR-024)', 'repo')
|
|
81
89
|
.option('--registry-org <org>', 'Org name (for org registry)')
|
|
82
90
|
.option('--registry-user <user>', 'User name (for profile registry)')
|
|
@@ -102,10 +110,12 @@ program
|
|
|
102
110
|
project: opts.project,
|
|
103
111
|
role: opts.role,
|
|
104
112
|
name: opts.name,
|
|
113
|
+
routingLabel: opts.routingLabel,
|
|
105
114
|
type: opts.type,
|
|
106
115
|
appId: opts.appId,
|
|
107
116
|
installId: opts.installId,
|
|
108
117
|
keyPath: opts.keyPath,
|
|
118
|
+
appKey: opts.appKey,
|
|
109
119
|
registryType,
|
|
110
120
|
registryOrg: opts.registryOrg,
|
|
111
121
|
registryUser: opts.registryUser,
|
|
@@ -213,6 +223,111 @@ program
|
|
|
213
223
|
const dir = opts.dir ? validateProjectDir(opts.dir) : undefined;
|
|
214
224
|
await listPeers(dir);
|
|
215
225
|
});
|
|
226
|
+
program
|
|
227
|
+
.command('ps')
|
|
228
|
+
.description('List MACF claude / channel-server processes (Linux /proc), keyed by ' +
|
|
229
|
+
'cwd + agent identity — multi-tenant-correct (never `pgrep | head -1`)')
|
|
230
|
+
.action(() => {
|
|
231
|
+
process.exitCode = runPs();
|
|
232
|
+
});
|
|
233
|
+
const fleet = program
|
|
234
|
+
.command('fleet')
|
|
235
|
+
.description('Fleet roster + interconnect-health (DR-030)');
|
|
236
|
+
fleet
|
|
237
|
+
.command('status')
|
|
238
|
+
.description('Roster + LIVE health for every registered agent: NAME / HOST:PORT / ' +
|
|
239
|
+
'online-offline (mTLS /health) / uptime + the present self-report fields ' +
|
|
240
|
+
'(instance_id, cert_expiry warn<30d/crit<7d, and idle/busy state + otel ' +
|
|
241
|
+
'reachability when the agent reports them). Reachable + self-reports only — ' +
|
|
242
|
+
'no inject/delivery probes (those are later DR-030 increments).')
|
|
243
|
+
.option('--json', 'Emit the structured roster as JSON for automation', false)
|
|
244
|
+
.option('--dir <path>', 'Project directory (defaults to auto-discovery from cwd)')
|
|
245
|
+
.action(async (opts) => {
|
|
246
|
+
const code = await runFleetStatus(resolveProjectDir(opts.dir), { json: opts.json });
|
|
247
|
+
process.exitCode = code;
|
|
248
|
+
});
|
|
249
|
+
fleet
|
|
250
|
+
.command('doctor')
|
|
251
|
+
.description('Mesh-interconnect test per registered agent. DEFAULT (non-invasive): ' +
|
|
252
|
+
'REACHABLE (mTLS /health answers) + ACCEPTED (diagnostic mTLS /notify ACK — ' +
|
|
253
|
+
'200 + ack + correlation-token echo) — proves protocol-reaches-server ONLY. ' +
|
|
254
|
+
'With --inject (INVASIVE): also PROCESSED — routes a REAL marker-bearing /notify ' +
|
|
255
|
+
'to each reachable agent, WAKING it, then matches the echoed run_id off ' +
|
|
256
|
+
'/health.last_processed to prove the full deliver→process chain. --inject is the ' +
|
|
257
|
+
'IDLE-agent fallback (prefer passive last_processed for a busy agent); a timeout ' +
|
|
258
|
+
'is UNCONFIRMED (possibly busy), NOT a gap. Exits non-zero when DEGRADED ' +
|
|
259
|
+
'(Reachable+Accepted; PROCESSED does not affect the verdict).')
|
|
260
|
+
.option('--json', 'Emit the structured per-agent result as JSON (DR-031 watchdog contract)', false)
|
|
261
|
+
.option('--inject', 'INVASIVE Processed-now delivery-proof: routes a real probe + wakes each reachable agent', false)
|
|
262
|
+
.option('--inject-timeout <sec>', 'Per-agent poll budget for --inject, in seconds (default 24)', (v) => parseInt(v, 10))
|
|
263
|
+
.option('--dir <path>', 'Project directory (defaults to auto-discovery from cwd)')
|
|
264
|
+
.action(async (opts) => {
|
|
265
|
+
const code = await runFleetDoctor(resolveProjectDir(opts.dir), {
|
|
266
|
+
json: opts.json,
|
|
267
|
+
inject: opts.inject,
|
|
268
|
+
injectTimeoutSec: opts.injectTimeout,
|
|
269
|
+
});
|
|
270
|
+
process.exitCode = code;
|
|
271
|
+
});
|
|
272
|
+
const routing = program
|
|
273
|
+
.command('routing')
|
|
274
|
+
.description('Routing-infra (GitHub delivery plane) interconnect-health (DR-030)');
|
|
275
|
+
routing
|
|
276
|
+
.command('doctor')
|
|
277
|
+
.description('Routing-infra interconnect check (DR-030 phase-2): STATIC GitHub-plane checks ' +
|
|
278
|
+
'that the delivery plane is wired right — (1) CALLER-PIN consistency across the ' +
|
|
279
|
+
'App install-set, (2) the #538 split: ROUTABLE (MACF_AGENT_<LABEL> registry key) ' +
|
|
280
|
+
'+ SELF-SKIP (agent-config app_name == bot-login, #566), (3) registration ' +
|
|
281
|
+
'FRESHNESS (registry instance_id == live /health), (4) MACF_CA_CERT present + ' +
|
|
282
|
+
'parses (#563), (5) tmux_session <project>@<agent> convention. These prove the ' +
|
|
283
|
+
'PLUMBING, NOT end-to-end delivery (that is --e2e, a later increment). Exits ' +
|
|
284
|
+
'non-zero when DEGRADED.')
|
|
285
|
+
.option('--json', 'Emit the structured per-check result as JSON (DR-031 watchdog contract)', false)
|
|
286
|
+
.option('--expected-pin <pin>', 'Expected macf-actions caller-pin (else the modal pin across the fleet)')
|
|
287
|
+
.option('--dir <path>', 'Project directory (defaults to auto-discovery from cwd)')
|
|
288
|
+
.action(async (opts) => {
|
|
289
|
+
const code = await runRoutingDoctor(resolveProjectDir(opts.dir), {
|
|
290
|
+
json: opts.json,
|
|
291
|
+
expectedPin: opts.expectedPin,
|
|
292
|
+
});
|
|
293
|
+
process.exitCode = code;
|
|
294
|
+
});
|
|
295
|
+
const registry = program
|
|
296
|
+
.command('registry')
|
|
297
|
+
.description('Registry maintenance');
|
|
298
|
+
registry
|
|
299
|
+
.command('prune')
|
|
300
|
+
.description('mTLS-/health-check each registry entry and remove ONLY confirmed-dead ones ' +
|
|
301
|
+
'(refused/timeout after a retry). Consent required (default No); --yes bypasses.')
|
|
302
|
+
.option('--dir <path>', 'Project directory (defaults to auto-discovery from cwd)')
|
|
303
|
+
.option('--yes', 'Skip the confirmation prompt (non-interactive)', false)
|
|
304
|
+
.action(async (opts) => {
|
|
305
|
+
const code = await runRegistryPrune(resolveProjectDir(opts.dir), { yes: opts.yes });
|
|
306
|
+
process.exitCode = code;
|
|
307
|
+
});
|
|
308
|
+
program
|
|
309
|
+
.command('restart-self')
|
|
310
|
+
.description('DR-031 piece 3 (be-replaceable): prepare the workspace + spawn a DETACHED ' +
|
|
311
|
+
'relauncher that OUTLIVES this session, so a watchdog (or the agent) can ' +
|
|
312
|
+
'trigger a clean restart without losing work. DRY-RUN BY DEFAULT — emits the ' +
|
|
313
|
+
'plan (marked-stash, RESUME-note, relauncher cmd, session to kill) and does ' +
|
|
314
|
+
'NOTHING without --confirm. With --confirm: marked-stash any uncommitted ' +
|
|
315
|
+
'tracked changes -> RESUME-note -> spawn detached relauncher -> kill the ' +
|
|
316
|
+
'current tmux session (the restart trigger).')
|
|
317
|
+
.option('--reason <fault|upgrade|manual>', 'Restart driver (fault/upgrade/manual)', 'manual')
|
|
318
|
+
.option('--confirm', 'Actually act (otherwise dry-run)', false)
|
|
319
|
+
.option('--dry-run', 'Force dry-run even with --confirm (the safer wins)', false)
|
|
320
|
+
.option('--json', 'Emit the structured plan/result as JSON', false)
|
|
321
|
+
.option('--dir <path>', 'Project directory (defaults to auto-discovery from cwd)')
|
|
322
|
+
.action(async (opts) => {
|
|
323
|
+
const code = await runRestartSelfCommand(resolveProjectDir(opts.dir), {
|
|
324
|
+
reason: opts.reason,
|
|
325
|
+
confirm: opts.confirm,
|
|
326
|
+
dryRun: opts.dryRun,
|
|
327
|
+
json: opts.json,
|
|
328
|
+
});
|
|
329
|
+
process.exitCode = code;
|
|
330
|
+
});
|
|
216
331
|
const certs = program
|
|
217
332
|
.command('certs')
|
|
218
333
|
.description('Certificate management');
|
|
@@ -265,10 +380,12 @@ program
|
|
|
265
380
|
});
|
|
266
381
|
program
|
|
267
382
|
.command('doctor')
|
|
268
|
-
.description('Verify the workspace\'s bot token
|
|
383
|
+
.description('Verify the workspace\'s bot token (DR-019) + settings match the role-aware floor (DR-028)')
|
|
269
384
|
.option('--dir <path>', 'Project directory (defaults to auto-discovery from cwd)')
|
|
385
|
+
.option('--fix', 'Write the DR-028 role-settings floor (allow/deny/hooks) + sandbox entries into .claude/settings.json after confirmation', false)
|
|
386
|
+
.option('--yes', 'Skip the --fix confirmation prompt (non-interactive)', false)
|
|
270
387
|
.action(async (opts) => {
|
|
271
|
-
const code = await runDoctor(resolveProjectDir(opts.dir));
|
|
388
|
+
const code = await runDoctor(resolveProjectDir(opts.dir), { fix: opts.fix, yes: opts.yes });
|
|
272
389
|
process.exitCode = code;
|
|
273
390
|
});
|
|
274
391
|
program
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/** The MACF process kinds this scanner recognises. */
|
|
2
|
+
export type MacfProcessKind = 'claude' | 'channel-server';
|
|
3
|
+
/** Where an agent identity was sourced from (precedence high→low). */
|
|
4
|
+
export type IdentitySource = 'otel' | 'env-name' | 'env-label';
|
|
5
|
+
/**
|
|
6
|
+
* Injectable `/proc` reader. The default implementation reads the real
|
|
7
|
+
* filesystem; tests pass a synthetic one. Every accessor returns `null`
|
|
8
|
+
* rather than throwing so a PID vanishing mid-scan (ESRCH) or owned by
|
|
9
|
+
* another user (EACCES) degrades to "unknown", not a crash.
|
|
10
|
+
*/
|
|
11
|
+
export interface ProcReader {
|
|
12
|
+
/** Is `/proc`-based introspection available on this host? */
|
|
13
|
+
readonly available: () => boolean;
|
|
14
|
+
/** Numeric PID directory names under `/proc`. */
|
|
15
|
+
readonly listPids: () => readonly string[];
|
|
16
|
+
/** `readlink /proc/<pid>/cwd` — absolute path, or null. */
|
|
17
|
+
readonly readCwd: (pid: string) => string | null;
|
|
18
|
+
/** Raw NUL-separated `/proc/<pid>/cmdline`, or null. */
|
|
19
|
+
readonly readCmdline: (pid: string) => string | null;
|
|
20
|
+
/** Raw NUL-separated `/proc/<pid>/environ`, or null. */
|
|
21
|
+
readonly readEnviron: (pid: string) => string | null;
|
|
22
|
+
}
|
|
23
|
+
/** One discovered MACF process, keyed by its own cwd + identity. */
|
|
24
|
+
export interface MacfProcess {
|
|
25
|
+
readonly pid: string;
|
|
26
|
+
readonly kind: MacfProcessKind;
|
|
27
|
+
/** Absolute cwd from `/proc/<pid>/cwd` (the disambiguation key). */
|
|
28
|
+
readonly cwd: string | null;
|
|
29
|
+
/** `basename(cwd)` for compact display. */
|
|
30
|
+
readonly cwdBasename: string | null;
|
|
31
|
+
/** Resolved agent identity (see `agentIdentityFromEnv`). */
|
|
32
|
+
readonly agentIdentity: string | null;
|
|
33
|
+
readonly identitySource: IdentitySource | null;
|
|
34
|
+
/** `MACF_PORT` from the process environment. */
|
|
35
|
+
readonly port: string | null;
|
|
36
|
+
/** `OTEL_EXPORTER_OTLP_ENDPOINT` from the process environment. */
|
|
37
|
+
readonly otelEndpoint: string | null;
|
|
38
|
+
}
|
|
39
|
+
/** Split a NUL-separated `/proc` blob (cmdline / environ) into tokens. */
|
|
40
|
+
export declare function splitNul(raw: string): readonly string[];
|
|
41
|
+
/**
|
|
42
|
+
* Parse a NUL-separated `/proc/<pid>/environ` blob into a key→value map.
|
|
43
|
+
* Splits each entry on the FIRST `=` (values may contain `=`).
|
|
44
|
+
*/
|
|
45
|
+
export declare function parseEnviron(raw: string): Readonly<Record<string, string>>;
|
|
46
|
+
/**
|
|
47
|
+
* Parse an `OTEL_RESOURCE_ATTRIBUTES` value (`k1=v1,k2=v2`) into a map.
|
|
48
|
+
* Used to recover `gen_ai.agent.name`, the OTEL-canonical agent identity.
|
|
49
|
+
*/
|
|
50
|
+
export declare function parseOtelResourceAttributes(value: string): Readonly<Record<string, string>>;
|
|
51
|
+
/**
|
|
52
|
+
* Resolve an agent identity from a process environment, in precedence order:
|
|
53
|
+
* 1. `gen_ai.agent.name` inside `OTEL_RESOURCE_ATTRIBUTES` (telemetry-canonical)
|
|
54
|
+
* 2. `MACF_AGENT_NAME`
|
|
55
|
+
* 3. `MACF_ROUTING_LABEL`
|
|
56
|
+
* Returns null when none is present.
|
|
57
|
+
*/
|
|
58
|
+
export declare function agentIdentityFromEnv(env: Readonly<Record<string, string>>): {
|
|
59
|
+
readonly identity: string;
|
|
60
|
+
readonly source: IdentitySource;
|
|
61
|
+
} | null;
|
|
62
|
+
/**
|
|
63
|
+
* Classify a raw cmdline blob as a MACF process kind, or null if it's neither.
|
|
64
|
+
* channel-server wins over claude (a server is a node process that never
|
|
65
|
+
* carries a `claude` argv0). claude matches when any argv token's basename is
|
|
66
|
+
* exactly `claude` (covers `claude`, `/usr/local/bin/claude`, `.../bin/claude`).
|
|
67
|
+
*/
|
|
68
|
+
export declare function classifyCmdline(raw: string): MacfProcessKind | null;
|
|
69
|
+
/**
|
|
70
|
+
* Enumerate every MACF claude / channel-server process via the reader.
|
|
71
|
+
* PURE w.r.t. the reader: no real-process dependency. Each process is keyed by
|
|
72
|
+
* its OWN cwd + environment — never `head -1`. Returns a stable ordering
|
|
73
|
+
* (by cwd, then kind, then numeric pid) for readable, diffable output.
|
|
74
|
+
*/
|
|
75
|
+
export declare function scanMacfProcesses(reader: ProcReader): readonly MacfProcess[];
|
|
76
|
+
/**
|
|
77
|
+
* Real `/proc` reader. Each accessor swallows errors → null so a PID racing
|
|
78
|
+
* away mid-scan or an unreadable (other-user) process degrades gracefully.
|
|
79
|
+
*/
|
|
80
|
+
export declare const defaultProcReader: ProcReader;
|
|
81
|
+
//# sourceMappingURL=proc-scan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proc-scan.d.ts","sourceRoot":"","sources":["../../src/cli/proc-scan.ts"],"names":[],"mappings":"AAmBA,sDAAsD;AACtD,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,gBAAgB,CAAC;AAE1D,sEAAsE;AACtE,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,6DAA6D;IAC7D,QAAQ,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC;IAClC,iDAAiD;IACjD,QAAQ,CAAC,QAAQ,EAAE,MAAM,SAAS,MAAM,EAAE,CAAC;IAC3C,2DAA2D;IAC3D,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACjD,wDAAwD;IACxD,QAAQ,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACrD,wDAAwD;IACxD,QAAQ,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CACtD;AAED,oEAAoE;AACpE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,oEAAoE;IACpE,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,2CAA2C;IAC3C,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,4DAA4D;IAC5D,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/C,gDAAgD;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,kEAAkE;IAClE,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,0EAA0E;AAC1E,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAEvD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAQ1E;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAQ3F;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GACpC;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAA;CAAE,GAAG,IAAI,CAWvE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAMnE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,WAAW,EAAE,CA0B5E;AAWD;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,UA8B/B,CAAC"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Identity-scoped `/proc` scanning for MACF process diagnostics (macf#556).
|
|
3
|
+
*
|
|
4
|
+
* Single-tenant instruments (`pgrep claude | head -1`) are WRONG on a
|
|
5
|
+
* multi-tenant host: `head -1` grabs an arbitrary one of several `claude`
|
|
6
|
+
* processes, producing a "no OTEL" false negative against a sibling agent.
|
|
7
|
+
* This module is correct-by-construction: it enumerates EVERY MACF process
|
|
8
|
+
* and keys each one by its own `readlink /proc/<pid>/cwd` + per-process
|
|
9
|
+
* environment, so the caller can disambiguate by workspace / agent identity
|
|
10
|
+
* instead of picking one at random.
|
|
11
|
+
*
|
|
12
|
+
* Linux `/proc` only. The `ProcReader` seam keeps the scan a PURE function of
|
|
13
|
+
* injectable inputs so tests feed synthetic `/proc` data (no real running
|
|
14
|
+
* processes), and the real reader degrades gracefully (every read returns
|
|
15
|
+
* `null` on EACCES / ESRCH races; `available()` is false off-Linux).
|
|
16
|
+
*/
|
|
17
|
+
import { readdirSync, readlinkSync, readFileSync, existsSync } from 'node:fs';
|
|
18
|
+
import { basename } from 'node:path';
|
|
19
|
+
/** Split a NUL-separated `/proc` blob (cmdline / environ) into tokens. */
|
|
20
|
+
export function splitNul(raw) {
|
|
21
|
+
return raw.split('\0').filter((t) => t.length > 0);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Parse a NUL-separated `/proc/<pid>/environ` blob into a key→value map.
|
|
25
|
+
* Splits each entry on the FIRST `=` (values may contain `=`).
|
|
26
|
+
*/
|
|
27
|
+
export function parseEnviron(raw) {
|
|
28
|
+
const env = {};
|
|
29
|
+
for (const entry of splitNul(raw)) {
|
|
30
|
+
const eq = entry.indexOf('=');
|
|
31
|
+
if (eq <= 0)
|
|
32
|
+
continue;
|
|
33
|
+
env[entry.slice(0, eq)] = entry.slice(eq + 1);
|
|
34
|
+
}
|
|
35
|
+
return env;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Parse an `OTEL_RESOURCE_ATTRIBUTES` value (`k1=v1,k2=v2`) into a map.
|
|
39
|
+
* Used to recover `gen_ai.agent.name`, the OTEL-canonical agent identity.
|
|
40
|
+
*/
|
|
41
|
+
export function parseOtelResourceAttributes(value) {
|
|
42
|
+
const attrs = {};
|
|
43
|
+
for (const pair of value.split(',')) {
|
|
44
|
+
const eq = pair.indexOf('=');
|
|
45
|
+
if (eq <= 0)
|
|
46
|
+
continue;
|
|
47
|
+
attrs[pair.slice(0, eq).trim()] = pair.slice(eq + 1).trim();
|
|
48
|
+
}
|
|
49
|
+
return attrs;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Resolve an agent identity from a process environment, in precedence order:
|
|
53
|
+
* 1. `gen_ai.agent.name` inside `OTEL_RESOURCE_ATTRIBUTES` (telemetry-canonical)
|
|
54
|
+
* 2. `MACF_AGENT_NAME`
|
|
55
|
+
* 3. `MACF_ROUTING_LABEL`
|
|
56
|
+
* Returns null when none is present.
|
|
57
|
+
*/
|
|
58
|
+
export function agentIdentityFromEnv(env) {
|
|
59
|
+
const ra = env['OTEL_RESOURCE_ATTRIBUTES'];
|
|
60
|
+
if (ra) {
|
|
61
|
+
const name = parseOtelResourceAttributes(ra)['gen_ai.agent.name'];
|
|
62
|
+
if (name)
|
|
63
|
+
return { identity: name, source: 'otel' };
|
|
64
|
+
}
|
|
65
|
+
const envName = env['MACF_AGENT_NAME'];
|
|
66
|
+
if (envName)
|
|
67
|
+
return { identity: envName, source: 'env-name' };
|
|
68
|
+
const envLabel = env['MACF_ROUTING_LABEL'];
|
|
69
|
+
if (envLabel)
|
|
70
|
+
return { identity: envLabel, source: 'env-label' };
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Classify a raw cmdline blob as a MACF process kind, or null if it's neither.
|
|
75
|
+
* channel-server wins over claude (a server is a node process that never
|
|
76
|
+
* carries a `claude` argv0). claude matches when any argv token's basename is
|
|
77
|
+
* exactly `claude` (covers `claude`, `/usr/local/bin/claude`, `.../bin/claude`).
|
|
78
|
+
*/
|
|
79
|
+
export function classifyCmdline(raw) {
|
|
80
|
+
const tokens = splitNul(raw);
|
|
81
|
+
if (tokens.length === 0)
|
|
82
|
+
return null;
|
|
83
|
+
if (tokens.some((t) => t.includes('macf-channel-server')))
|
|
84
|
+
return 'channel-server';
|
|
85
|
+
if (tokens.some((t) => basename(t) === 'claude'))
|
|
86
|
+
return 'claude';
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Enumerate every MACF claude / channel-server process via the reader.
|
|
91
|
+
* PURE w.r.t. the reader: no real-process dependency. Each process is keyed by
|
|
92
|
+
* its OWN cwd + environment — never `head -1`. Returns a stable ordering
|
|
93
|
+
* (by cwd, then kind, then numeric pid) for readable, diffable output.
|
|
94
|
+
*/
|
|
95
|
+
export function scanMacfProcesses(reader) {
|
|
96
|
+
if (!reader.available())
|
|
97
|
+
return [];
|
|
98
|
+
const out = [];
|
|
99
|
+
for (const pid of reader.listPids()) {
|
|
100
|
+
const cmdline = reader.readCmdline(pid);
|
|
101
|
+
if (cmdline === null)
|
|
102
|
+
continue;
|
|
103
|
+
const kind = classifyCmdline(cmdline);
|
|
104
|
+
if (!kind)
|
|
105
|
+
continue;
|
|
106
|
+
const cwd = reader.readCwd(pid);
|
|
107
|
+
const environRaw = reader.readEnviron(pid);
|
|
108
|
+
const env = environRaw ? parseEnviron(environRaw) : {};
|
|
109
|
+
const id = agentIdentityFromEnv(env);
|
|
110
|
+
out.push({
|
|
111
|
+
pid,
|
|
112
|
+
kind,
|
|
113
|
+
cwd,
|
|
114
|
+
cwdBasename: cwd ? basename(cwd) : null,
|
|
115
|
+
agentIdentity: id?.identity ?? null,
|
|
116
|
+
identitySource: id?.source ?? null,
|
|
117
|
+
port: env['MACF_PORT'] ?? null,
|
|
118
|
+
otelEndpoint: env['OTEL_EXPORTER_OTLP_ENDPOINT'] ?? null,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
return [...out].sort(compareProcesses);
|
|
122
|
+
}
|
|
123
|
+
/** Stable ordering: cwd (nulls last) → kind → numeric pid. */
|
|
124
|
+
function compareProcesses(a, b) {
|
|
125
|
+
const ca = a.cwd ?? '';
|
|
126
|
+
const cb = b.cwd ?? '';
|
|
127
|
+
if (ca !== cb)
|
|
128
|
+
return ca < cb ? -1 : 1;
|
|
129
|
+
if (a.kind !== b.kind)
|
|
130
|
+
return a.kind < b.kind ? -1 : 1;
|
|
131
|
+
return Number(a.pid) - Number(b.pid);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Real `/proc` reader. Each accessor swallows errors → null so a PID racing
|
|
135
|
+
* away mid-scan or an unreadable (other-user) process degrades gracefully.
|
|
136
|
+
*/
|
|
137
|
+
export const defaultProcReader = {
|
|
138
|
+
available: () => process.platform === 'linux' && existsSync('/proc'),
|
|
139
|
+
listPids: () => {
|
|
140
|
+
try {
|
|
141
|
+
return readdirSync('/proc').filter((n) => /^\d+$/.test(n));
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
return [];
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
readCwd: (pid) => {
|
|
148
|
+
try {
|
|
149
|
+
return readlinkSync(`/proc/${pid}/cwd`);
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
readCmdline: (pid) => {
|
|
156
|
+
try {
|
|
157
|
+
return readFileSync(`/proc/${pid}/cmdline`, 'utf-8');
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
readEnviron: (pid) => {
|
|
164
|
+
try {
|
|
165
|
+
return readFileSync(`/proc/${pid}/environ`, 'utf-8');
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
};
|
|
172
|
+
//# sourceMappingURL=proc-scan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proc-scan.js","sourceRoot":"","sources":["../../src/cli/proc-scan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DR-028 — the canonical expected-`settings.json`-per-role model.
|
|
3
|
+
*
|
|
4
|
+
* A universal **floor** + per-role **deltas**: the single source of truth that
|
|
5
|
+
* BOTH `macf init` (emit) and `macf doctor` (validate / `--fix`) consume, so
|
|
6
|
+
* init-output and doctor-expectation can't diverge. See
|
|
7
|
+
* `design/decisions/DR-028-expected-settings-per-role.md`.
|
|
8
|
+
*
|
|
9
|
+
* **Doctrine** (DR-028 §Decision 1): the defense is the **`deny` list + the
|
|
10
|
+
* PreToolUse hooks**, NOT allow-enumeration — canonical macf commands embed
|
|
11
|
+
* `$GH_TOKEN`/`$MACF_WORKSPACE_DIR` ("Contains simple_expansion"), which defeat
|
|
12
|
+
* narrow `Bash(...)` patterns, so the floor uses broad `Bash(*)`.
|
|
13
|
+
*
|
|
14
|
+
* This module is the **data model only**. The `macf init` emit and the
|
|
15
|
+
* `macf doctor` validate/`--fix` wiring land in follow-up increments (gated on
|
|
16
|
+
* DR-028 ratification, macf#539). Importing the hook-command constants from
|
|
17
|
+
* `settings-writer` is one-directional (settings-writer does not import this),
|
|
18
|
+
* so there is no import cycle.
|
|
19
|
+
*/
|
|
20
|
+
import { ROLE_FLOOR_ALLOW, ROLE_FLOOR_DENY } from './settings-writer.js';
|
|
21
|
+
/** A hook the model expects in `.claude/settings.json`. */
|
|
22
|
+
export interface ExpectedHook {
|
|
23
|
+
readonly event: 'PreToolUse' | 'PostToolUse' | 'UserPromptSubmit' | 'PreCompact';
|
|
24
|
+
/** Tool matcher for tool-scoped events (e.g. `Bash`); omitted for prompt/compact hooks. */
|
|
25
|
+
readonly matcher?: string;
|
|
26
|
+
readonly command: string;
|
|
27
|
+
/**
|
|
28
|
+
* `true` → a missing/changed instance of this hook is an **error**, not
|
|
29
|
+
* drift (DR-028: the auditor's `never-acts` hook). `false` → recommended;
|
|
30
|
+
* absence is reported as drift the operator may `--fix`.
|
|
31
|
+
*/
|
|
32
|
+
readonly required: boolean;
|
|
33
|
+
}
|
|
34
|
+
export { ROLE_FLOOR_ALLOW, ROLE_FLOOR_DENY };
|
|
35
|
+
/** Universal floor hooks (every role) — DR-028 §Decision 1. */
|
|
36
|
+
export declare const ROLE_FLOOR_HOOKS: readonly ExpectedHook[];
|
|
37
|
+
/** Per-role additions beyond the floor (DR-028 §Decision 1, Per-role deltas). */
|
|
38
|
+
export interface RoleSettingsDelta {
|
|
39
|
+
/** Hooks this role adds beyond the floor. */
|
|
40
|
+
readonly hooks?: readonly ExpectedHook[];
|
|
41
|
+
/** Extra `allow` entries (e.g. the role's MCP servers) beyond the floor. */
|
|
42
|
+
readonly allow?: readonly string[];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Per-role deltas. Roles not listed get the universal floor as-is
|
|
46
|
+
* (code / science / devops — they all file + review PRs).
|
|
47
|
+
*/
|
|
48
|
+
export declare const ROLE_SETTINGS_DELTAS: Readonly<Record<string, RoleSettingsDelta>>;
|
|
49
|
+
/**
|
|
50
|
+
* The roles the framework recognizes — ships an agent template / model handling
|
|
51
|
+
* for (macf#551). The floor applies to ALL roles; only some carry deltas
|
|
52
|
+
* (`ROLE_SETTINGS_DELTAS`). An `agent_role` OUTSIDE this set is a custom role
|
|
53
|
+
* (legitimate — floor-only), but `macf doctor` surfaces it (INFO) so a typo on
|
|
54
|
+
* a delta-bearing SAFETY-critical role — e.g. `auditor-agent` instead of the
|
|
55
|
+
* exact `auditor`, which would silently skip the never-acts hook AND its doctor
|
|
56
|
+
* ERROR — becomes visible instead of degrading silently. NOTE: `auditor` has no
|
|
57
|
+
* `-agent` suffix (unlike `code-agent`); use the exact strings here.
|
|
58
|
+
*/
|
|
59
|
+
export declare const KNOWN_ROLES: readonly string[];
|
|
60
|
+
/** True if `role` is a framework-recognized role (see `KNOWN_ROLES`). */
|
|
61
|
+
export declare function isKnownRole(role: string): boolean;
|
|
62
|
+
/** Expected hooks for a role = the floor + the role's delta hooks. */
|
|
63
|
+
export declare function expectedHooksForRole(role: string): readonly ExpectedHook[];
|
|
64
|
+
/**
|
|
65
|
+
* Expected base `allow` for a role = the floor + the role's extra allow
|
|
66
|
+
* entries. The emitter composes `PLUGIN_SKILL_PERMISSIONS` +
|
|
67
|
+
* `PLUGIN_MCP_TOOL_PERMISSIONS` onto this.
|
|
68
|
+
*/
|
|
69
|
+
export declare function expectedAllowForRole(role: string): readonly string[];
|
|
70
|
+
//# sourceMappingURL=role-settings-model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-settings-model.d.ts","sourceRoot":"","sources":["../../src/cli/role-settings-model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EASL,gBAAgB,EAChB,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAE9B,2DAA2D;AAC3D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,GAAG,kBAAkB,GAAG,YAAY,CAAC;IACjF,2FAA2F;IAC3F,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAMD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC;AAE7C,+DAA+D;AAC/D,eAAO,MAAM,gBAAgB,EAAE,SAAS,YAAY,EAQnD,CAAC;AAEF,iFAAiF;AACjF,MAAM,WAAW,iBAAiB;IAChC,6CAA6C;IAC7C,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IACzC,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAU5E,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,WAAW,EAAE,SAAS,MAAM,EAUxC,CAAC;AAEF,yEAAyE;AACzE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,sEAAsE;AACtE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,YAAY,EAAE,CAG1E;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAGpE"}
|