@groundnuty/macf 0.2.38 → 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/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.map +1 -1
- package/dist/cli/commands/init.js +8 -0
- 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/registry-prune.d.ts +43 -6
- package/dist/cli/commands/registry-prune.d.ts.map +1 -1
- package/dist/cli/commands/registry-prune.js +53 -14
- package/dist/cli/commands/registry-prune.js.map +1 -1
- 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/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 +89 -0
- package/dist/cli/index.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/emit-turn-receipt.sh +44 -4
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import type { AgentInfo, HealthResponse } from '@groundnuty/macf-core';
|
|
2
|
+
export type CallerPinStatus = 'pinned' | 'no-workflow' | 'error';
|
|
3
|
+
/** One repo's caller-pin read. `pinned` ones participate in the consistency verdict. */
|
|
4
|
+
export interface CallerPinResult {
|
|
5
|
+
readonly repo: string;
|
|
6
|
+
readonly pin: string | null;
|
|
7
|
+
readonly status: CallerPinStatus;
|
|
8
|
+
readonly error?: string;
|
|
9
|
+
}
|
|
10
|
+
/** One agent's entry in a repo's `.github/agent-config.json`. */
|
|
11
|
+
export interface RoutingConfigEntry {
|
|
12
|
+
readonly app_name?: string;
|
|
13
|
+
readonly tmux_session?: string;
|
|
14
|
+
}
|
|
15
|
+
/** A repo's `.github/agent-config.json` (the router's per-label config). */
|
|
16
|
+
export interface RoutingConfig {
|
|
17
|
+
readonly agents: Readonly<Record<string, RoutingConfigEntry>>;
|
|
18
|
+
}
|
|
19
|
+
/** Probe a single endpoint's `/health`; null on any failure. Injectable for tests. */
|
|
20
|
+
export type RoutingProbeFn = (host: string, port: number) => Promise<HealthResponse | null>;
|
|
21
|
+
/** Normalize a GitHub login for comparison: lowercase, strip `app/` + `[bot]`. */
|
|
22
|
+
export declare function normalizeLogin(s: string): string;
|
|
23
|
+
/**
|
|
24
|
+
* The expected fleet caller-pin: an explicit override, else the MODAL (most
|
|
25
|
+
* common) pin among the repos that ARE routing callers. `null` when no repo pins
|
|
26
|
+
* macf-actions (nothing to be consistent about).
|
|
27
|
+
*/
|
|
28
|
+
export declare function computeExpectedPin(pinned: readonly string[], override?: string): string | null;
|
|
29
|
+
/**
|
|
30
|
+
* Self-skip correctness (#538 check b / #566). `app_name` must be the bot-LOGIN.
|
|
31
|
+
* When an authoritative `expectedBotLogin` is known (the running agent's own
|
|
32
|
+
* `github_app.bot_login`, macf#535), compare exactly (normalized). Otherwise fall
|
|
33
|
+
* back to the structural heuristic: the #566 bug is literally `app_name === <bare
|
|
34
|
+
* routing label>`, so flag that — anything else passes (we can't prove the exact
|
|
35
|
+
* bot-login without an authoritative actor source; stated in the legend).
|
|
36
|
+
*/
|
|
37
|
+
export declare function evaluateSelfSkip(label: string, appName: string | undefined, expectedBotLogin?: string): {
|
|
38
|
+
readonly ok: boolean;
|
|
39
|
+
readonly reason?: string;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Session-name drift (#? Stage-2 fallback). The CONVENTION check: `tmux_session`
|
|
43
|
+
* must equal `<project>@<label>`. This is a STATIC convention check — it proves the
|
|
44
|
+
* config follows the canonical naming, NOT that it matches the LIVE tmux session
|
|
45
|
+
* (a runtime fact this command can't see). Stated in the legend.
|
|
46
|
+
*/
|
|
47
|
+
export declare function evaluateSession(label: string, tmuxSession: string | undefined, project: string): {
|
|
48
|
+
readonly ok: boolean;
|
|
49
|
+
readonly expected: string;
|
|
50
|
+
readonly reason?: string;
|
|
51
|
+
};
|
|
52
|
+
/** Strict base64: only the base64 alphabet, padded to a multiple of 4. */
|
|
53
|
+
export declare function isStrictBase64(s: string): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* CA material check (#563). `MACF_CA_CERT` is a readable VARIABLE; validate it is
|
|
56
|
+
* present AND parses — either as a PEM cert block whose body is strict base64, or
|
|
57
|
+
* as a base64-of-PEM blob that decodes to a cert. A present-but-malformed value
|
|
58
|
+
* (truncated / garbled base64) is the #563 class: present ≠ valid.
|
|
59
|
+
*/
|
|
60
|
+
export declare function evaluateCaCert(raw: string | null | undefined): {
|
|
61
|
+
readonly present: boolean;
|
|
62
|
+
readonly valid: boolean;
|
|
63
|
+
readonly reason?: string;
|
|
64
|
+
};
|
|
65
|
+
export type FreshnessState = 'fresh' | 'stale' | 'unreachable' | 'unknown' | 'unregistered';
|
|
66
|
+
/**
|
|
67
|
+
* Classify a registry entry's freshness against the LIVE `/health`:
|
|
68
|
+
* - `/health` answers + instance_id MATCHES → `fresh`.
|
|
69
|
+
* - `/health` answers + instance_id MISMATCH → `stale` (registry points at an
|
|
70
|
+
* older instance; a newer one answered).
|
|
71
|
+
* - `/health` answers but reports no instance_id (older cs) → `unknown`.
|
|
72
|
+
* - `/health` unreachable + heartbeat aged past TTL (DR-031) → `stale` (definitively
|
|
73
|
+
* dead — ungraceful death).
|
|
74
|
+
* - `/health` unreachable, heartbeat fresh/absent → `unreachable` (can't confirm;
|
|
75
|
+
* NOT a verdict failure — liveness is
|
|
76
|
+
* `fleet doctor`'s job, not the plane's).
|
|
77
|
+
*/
|
|
78
|
+
export declare function classifyFreshness(info: AgentInfo, health: HealthResponse | null, now: number, ttlMs: number): FreshnessState;
|
|
79
|
+
export interface RepoPinRow {
|
|
80
|
+
readonly repo: string;
|
|
81
|
+
readonly pin: string | null;
|
|
82
|
+
readonly status: CallerPinStatus;
|
|
83
|
+
/** `true`/`false` for routing callers; `null` for non-callers (excluded from verdict). */
|
|
84
|
+
readonly consistent: boolean | null;
|
|
85
|
+
}
|
|
86
|
+
export interface AgentRow {
|
|
87
|
+
readonly label: string;
|
|
88
|
+
readonly appName: string | null;
|
|
89
|
+
readonly tmuxSession: string | null;
|
|
90
|
+
readonly routable: boolean;
|
|
91
|
+
readonly selfSkipOk: boolean;
|
|
92
|
+
readonly selfSkipReason?: string;
|
|
93
|
+
readonly sessionOk: boolean;
|
|
94
|
+
readonly sessionExpected: string;
|
|
95
|
+
readonly sessionReason?: string;
|
|
96
|
+
readonly freshness: FreshnessState;
|
|
97
|
+
readonly registryInstanceId?: string | null;
|
|
98
|
+
readonly healthInstanceId?: string | null;
|
|
99
|
+
}
|
|
100
|
+
export interface CaCheckResult {
|
|
101
|
+
readonly present: boolean;
|
|
102
|
+
readonly valid: boolean;
|
|
103
|
+
readonly reason?: string;
|
|
104
|
+
}
|
|
105
|
+
export interface RoutingDoctorReport {
|
|
106
|
+
readonly project: string;
|
|
107
|
+
readonly repoPins: readonly RepoPinRow[];
|
|
108
|
+
readonly expectedPin: string | null;
|
|
109
|
+
readonly hasRoutingConfig: boolean;
|
|
110
|
+
readonly agents: readonly AgentRow[];
|
|
111
|
+
readonly ca: CaCheckResult;
|
|
112
|
+
}
|
|
113
|
+
/** Injectable seam so tests drive the command fully offline. */
|
|
114
|
+
export interface RoutingDoctorDeps {
|
|
115
|
+
readonly project: string;
|
|
116
|
+
/** The App install-set (DR-030 Q3 repo-set source). */
|
|
117
|
+
readonly listRepos: () => Promise<readonly string[]>;
|
|
118
|
+
/** Read a repo's macf-actions caller-pin from agent-router.yml. */
|
|
119
|
+
readonly readCallerPin: (repo: string) => Promise<CallerPinResult>;
|
|
120
|
+
/** The CURRENT project's routing config (`.github/agent-config.json`). */
|
|
121
|
+
readonly readRoutingConfig: () => Promise<RoutingConfig | null>;
|
|
122
|
+
/** Registry agents (for routability + freshness). */
|
|
123
|
+
readonly listRegistry: () => Promise<readonly {
|
|
124
|
+
readonly name: string;
|
|
125
|
+
readonly info: AgentInfo;
|
|
126
|
+
}[]>;
|
|
127
|
+
/** mTLS `/health` probe (freshness). */
|
|
128
|
+
readonly probe: RoutingProbeFn;
|
|
129
|
+
/** The `MACF_CA_CERT` variable's raw value. */
|
|
130
|
+
readonly readCaCert: () => Promise<string | null>;
|
|
131
|
+
/** Authoritative expected bot-logins by routing label (partial; heuristic fallback). */
|
|
132
|
+
readonly botLogins?: Readonly<Record<string, string>>;
|
|
133
|
+
/** Explicit expected caller-pin (else the modal pin). */
|
|
134
|
+
readonly expectedPin?: string;
|
|
135
|
+
/** Clock for the heartbeat-TTL staleness math (defaults to `Date.now()`). */
|
|
136
|
+
readonly now?: number;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Run all five checks. PURE w.r.t. the injected deps — tests pass fakes so nothing
|
|
140
|
+
* hits gh / the registry / the network.
|
|
141
|
+
*/
|
|
142
|
+
export declare function gatherRoutingDoctor(deps: RoutingDoctorDeps): Promise<RoutingDoctorReport>;
|
|
143
|
+
export type RoutingVerdict = 'HEALTHY' | 'DEGRADED' | 'EMPTY';
|
|
144
|
+
export declare function routingVerdict(report: RoutingDoctorReport): RoutingVerdict;
|
|
145
|
+
/** `4 fleet repos (pins consistent); 3 agents (2 routing-OK); CA ✓; routing plane: HEALTHY`. */
|
|
146
|
+
export declare function summaryLine(report: RoutingDoctorReport): string;
|
|
147
|
+
/** ✓ consistent / ✗ divergent / `— n/a` (non-caller). */
|
|
148
|
+
export declare function pinGlyph(consistent: boolean | null): string;
|
|
149
|
+
/** Freshness → short glyph: fresh ✓, stale ✗, unreachable/unknown ?, unregistered —. */
|
|
150
|
+
export declare function freshnessGlyph(s: FreshnessState): string;
|
|
151
|
+
export declare function buildRepoRows(rows: readonly RepoPinRow[]): readonly (readonly string[])[];
|
|
152
|
+
export declare function buildAgentRows(rows: readonly AgentRow[]): readonly (readonly string[])[];
|
|
153
|
+
export declare function formatRepoTable(rows: readonly RepoPinRow[]): string;
|
|
154
|
+
export declare function formatAgentTable(rows: readonly AgentRow[]): string;
|
|
155
|
+
/**
|
|
156
|
+
* The honesty legend — these are STATIC GitHub-plane checks: they prove the
|
|
157
|
+
* routing PLUMBING is wired right, NOT that a message was delivered (that is
|
|
158
|
+
* `--e2e`, a later increment). Carried verbatim in the `--json` `disclaimer`.
|
|
159
|
+
*/
|
|
160
|
+
export declare const HONESTY_LEGEND: string;
|
|
161
|
+
/**
|
|
162
|
+
* `schema_version` is the HARD version contract (DR-006 watchdog, devops #118):
|
|
163
|
+
* a consumer asserts `schema_version === <known>` and refuses an unknown value,
|
|
164
|
+
* so ANY breaking change (rename / removal / a same-name SEMANTIC shift) fails
|
|
165
|
+
* LOUD rather than silently misreading. BUMP on any breaking change; additive-
|
|
166
|
+
* optional fields do NOT bump it. Independent from fleet doctor's schema_version
|
|
167
|
+
* (a separate command, a separate contract).
|
|
168
|
+
*/
|
|
169
|
+
export declare const ROUTING_DOCTOR_JSON_SCHEMA_VERSION = 1;
|
|
170
|
+
export declare function routingDoctorToJson(report: RoutingDoctorReport): unknown;
|
|
171
|
+
export interface RunRoutingDoctorOptions {
|
|
172
|
+
readonly json?: boolean;
|
|
173
|
+
/** Explicit expected caller-pin (else the modal pin across the fleet). */
|
|
174
|
+
readonly expectedPin?: string;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* `macf routing doctor` entry point. Returns the shell exit code — 1 when the
|
|
178
|
+
* routing plane is DEGRADED, 0 when HEALTHY or EMPTY (matching `fleet doctor` /
|
|
179
|
+
* `macf doctor` "non-zero on problem"). The `--json` body prints regardless; the
|
|
180
|
+
* watchdog reads `summary.verdict`. `deps` is injected by tests.
|
|
181
|
+
*/
|
|
182
|
+
export declare function runRoutingDoctor(projectDir: string, opts?: RunRoutingDoctorOptions, deps?: RoutingDoctorDeps): Promise<number>;
|
|
183
|
+
//# sourceMappingURL=routing-doctor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing-doctor.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/routing-doctor.ts"],"names":[],"mappings":"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"}
|