wicked-crew 0.10.0 → 0.10.2
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/api/roster-standing.d.ts +27 -1
- package/dist/api/roster-standing.d.ts.map +1 -1
- package/dist/api/roster-standing.js +126 -10
- package/dist/api/roster-standing.js.map +1 -1
- package/dist/api/routes.d.ts.map +1 -1
- package/dist/api/routes.js +28 -11
- package/dist/api/routes.js.map +1 -1
- package/dist/api/seat-agents.d.ts +135 -0
- package/dist/api/seat-agents.d.ts.map +1 -0
- package/dist/api/seat-agents.js +186 -0
- package/dist/api/seat-agents.js.map +1 -0
- package/dist/api/seat-health.d.ts +23 -0
- package/dist/api/seat-health.d.ts.map +1 -1
- package/dist/api/seat-health.js +70 -8
- package/dist/api/seat-health.js.map +1 -1
- package/dist/api/seat-probe.d.ts +11 -2
- package/dist/api/seat-probe.d.ts.map +1 -1
- package/dist/api/seat-probe.js +28 -9
- package/dist/api/seat-probe.js.map +1 -1
- package/dist/api/seat-scrub.d.ts +65 -0
- package/dist/api/seat-scrub.d.ts.map +1 -0
- package/dist/api/seat-scrub.js +193 -0
- package/dist/api/seat-scrub.js.map +1 -0
- package/dist/api/seat-standing.d.ts +3 -2
- package/dist/api/seat-standing.d.ts.map +1 -1
- package/dist/api/seat-standing.js +8 -7
- package/dist/api/seat-standing.js.map +1 -1
- package/dist/api/seat-version.d.ts +81 -0
- package/dist/api/seat-version.d.ts.map +1 -0
- package/dist/api/seat-version.js +174 -0
- package/dist/api/seat-version.js.map +1 -0
- package/dist/api/server.js +1 -1
- package/dist/core/adapter.d.ts +12 -0
- package/dist/core/adapter.d.ts.map +1 -1
- package/dist/core/adapter.js +25 -0
- package/dist/core/adapter.js.map +1 -1
- package/dist/core/engine-roster.d.ts.map +1 -1
- package/dist/core/engine-roster.js +8 -0
- package/dist/core/engine-roster.js.map +1 -1
- package/dist/editors/registry.d.ts +2 -2
- package/dist/interactive/council-outcome.d.ts +5 -1
- package/dist/interactive/council-outcome.d.ts.map +1 -1
- package/dist/interactive/council-outcome.js +11 -2
- package/dist/interactive/council-outcome.js.map +1 -1
- package/dist/standing-orders/parse.js +1 -1
- package/dist/studio/assets/index-C6DLorst.css +32 -0
- package/dist/studio/assets/index-CAhuFWeA.js +609 -0
- package/dist/studio/editors/wicked-page/editor.json +1 -1
- package/dist/studio/editors/wicked-page/index.html +1 -1
- package/dist/studio/index.html +2 -2
- package/dist/studio/testid-inventory.json +553 -144
- package/endpoint-manifest.json +6 -14
- package/package.json +4 -4
- package/dist/studio/assets/index-DlZl1q2Q.js +0 -593
- package/dist/studio/assets/index-eLCOoPWX.css +0 -32
package/dist/api/seat-probe.d.ts
CHANGED
|
@@ -45,10 +45,11 @@
|
|
|
45
45
|
* one refresh in the background (deduplicated per seat, one probe process at a time host-wide
|
|
46
46
|
* for this daemon). A signed-in answer is kept for 5 minutes (so a live check costs at most one
|
|
47
47
|
* one-word request per seat per 5 minutes); a signed-out or unknown one for 30 s, so a seat signed
|
|
48
|
-
* in from the
|
|
48
|
+
* in from the Agents page turns green on the next poll or two. The cache is keyed by (seat, worker
|
|
49
49
|
* home): changing `worker_config_root` discards every answer at once. A launch awaits a missing or
|
|
50
50
|
* stale answer, bounded, before it routes ({@link SeatProbe.ensureFresh}).
|
|
51
51
|
*/
|
|
52
|
+
import { type SeatAccount } from './seat-scrub.js';
|
|
52
53
|
/** A probe process's outcome, as the runner reports it. `error` is set when it never ran to exit
|
|
53
54
|
* (not installed, timed out, killed). */
|
|
54
55
|
export interface ProbeOutput {
|
|
@@ -70,8 +71,11 @@ export interface SeatProbeReading {
|
|
|
70
71
|
check: ProbeCheck;
|
|
71
72
|
/** ISO-8601 of the probe. */
|
|
72
73
|
probedAt: string;
|
|
73
|
-
/** A bounded excerpt of what the CLI said (its own words for a `false`)
|
|
74
|
+
/** A bounded excerpt of what the CLI said (its own words for a `false`), with every account
|
|
75
|
+
* identifier dropped (A8, `seat-scrub.ts`): it rides the roster's `auth_evidence` / `login_note`. */
|
|
74
76
|
detail: string;
|
|
77
|
+
/** (A2) The account KIND the status command stated, when it stated one — never an identifier. */
|
|
78
|
+
account?: SeatAccount;
|
|
75
79
|
}
|
|
76
80
|
/** How long an answer is trusted before a background refresh (the stale answer is served meanwhile). */
|
|
77
81
|
export declare const PROBE_TTL_SIGNED_IN_MS: number;
|
|
@@ -132,6 +136,11 @@ export declare class SeatProbe {
|
|
|
132
136
|
ensureFresh(seatKeys: string[], workerRoot: string | undefined, waitMs?: number): Promise<void>;
|
|
133
137
|
/** Probe now (deduplicated per seat and worker home); resolves to the fresh answer. */
|
|
134
138
|
refresh(seatKey: string, workerRoot: string | undefined): Promise<SeatProbeReading | undefined>;
|
|
139
|
+
/**
|
|
140
|
+
* A3b: probe AGAIN, after any probe already running for this seat has finished. A running probe
|
|
141
|
+
* may have started before the operator signed in, so its answer cannot be the fresh one.
|
|
142
|
+
*/
|
|
143
|
+
refreshFresh(seatKey: string, workerRoot: string | undefined): Promise<SeatProbeReading | undefined>;
|
|
135
144
|
/** The status command, then — when it says signed in — the live check. */
|
|
136
145
|
private probeOnce;
|
|
137
146
|
private reading;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seat-probe.d.ts","sourceRoot":"","sources":["../../src/api/seat-probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;
|
|
1
|
+
{"version":3,"file":"seat-probe.d.ts","sourceRoot":"","sources":["../../src/api/seat-probe.ts"],"names":[],"mappings":"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"}
|
package/dist/api/seat-probe.js
CHANGED
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
* one refresh in the background (deduplicated per seat, one probe process at a time host-wide
|
|
46
46
|
* for this daemon). A signed-in answer is kept for 5 minutes (so a live check costs at most one
|
|
47
47
|
* one-word request per seat per 5 minutes); a signed-out or unknown one for 30 s, so a seat signed
|
|
48
|
-
* in from the
|
|
48
|
+
* in from the Agents page turns green on the next poll or two. The cache is keyed by (seat, worker
|
|
49
49
|
* home): changing `worker_config_root` discards every answer at once. A launch awaits a missing or
|
|
50
50
|
* stale answer, bounded, before it routes ({@link SeatProbe.ensureFresh}).
|
|
51
51
|
*/
|
|
@@ -54,6 +54,7 @@ import { homedir, tmpdir } from 'node:os';
|
|
|
54
54
|
import { join } from 'node:path';
|
|
55
55
|
import { childEnvWithBootEstateDb } from '../core/governance-store.js';
|
|
56
56
|
import { isAuthRefusal } from './seat-health.js';
|
|
57
|
+
import { accountFromStatus, liveSummary, statusSummary } from './seat-scrub.js';
|
|
57
58
|
/** How long an answer is trusted before a background refresh (the stale answer is served meanwhile). */
|
|
58
59
|
export const PROBE_TTL_SIGNED_IN_MS = 5 * 60 * 1000;
|
|
59
60
|
export const PROBE_TTL_OTHER_MS = 30 * 1000;
|
|
@@ -179,7 +180,13 @@ export class SeatProbe {
|
|
|
179
180
|
void this.refresh(seatKey, workerRoot);
|
|
180
181
|
if (hit === undefined)
|
|
181
182
|
return undefined;
|
|
182
|
-
return {
|
|
183
|
+
return {
|
|
184
|
+
signedIn: hit.signedIn,
|
|
185
|
+
check: hit.check,
|
|
186
|
+
probedAt: hit.probedAt,
|
|
187
|
+
detail: hit.detail,
|
|
188
|
+
...(hit.account !== undefined ? { account: hit.account } : {}),
|
|
189
|
+
};
|
|
183
190
|
}
|
|
184
191
|
/**
|
|
185
192
|
* Before a launch routes: probe every probed seat whose answer is missing or stale and wait for
|
|
@@ -227,24 +234,36 @@ export class SeatProbe {
|
|
|
227
234
|
this.inflight.set(key, job);
|
|
228
235
|
return job;
|
|
229
236
|
}
|
|
237
|
+
/**
|
|
238
|
+
* A3b: probe AGAIN, after any probe already running for this seat has finished. A running probe
|
|
239
|
+
* may have started before the operator signed in, so its answer cannot be the fresh one.
|
|
240
|
+
*/
|
|
241
|
+
async refreshFresh(seatKey, workerRoot) {
|
|
242
|
+
const running = this.inflight.get(cacheKey(seatKey, workerRoot));
|
|
243
|
+
if (running !== undefined)
|
|
244
|
+
await running.catch(() => undefined);
|
|
245
|
+
return this.refresh(seatKey, workerRoot);
|
|
246
|
+
}
|
|
230
247
|
/** The status command, then — when it says signed in — the live check. */
|
|
231
248
|
async probeOnce(seatKey, status, verify) {
|
|
232
249
|
const out = await this.run(status.cmd, status.args, status.env, PROBE_TIMEOUT_MS);
|
|
233
250
|
const said = classifyProbe(seatKey, out);
|
|
234
|
-
|
|
251
|
+
// A8: only crew's own words for what the CLI said (`seat-scrub.ts`), never its prose.
|
|
252
|
+
const statusWords = excerpt(statusSummary(seatKey, out));
|
|
253
|
+
const account = said === true ? accountFromStatus(seatKey, out.stdout, out.stderr) : undefined;
|
|
235
254
|
if (said !== true || verify === null)
|
|
236
|
-
return this.reading(said, 'status', statusWords);
|
|
255
|
+
return this.reading(said, 'status', statusWords, account);
|
|
237
256
|
const live = await this.run(verify.cmd, verify.args, verify.env, VERIFY_TIMEOUT_MS);
|
|
238
257
|
const verdict = classifyVerify(live);
|
|
239
|
-
const liveWords = excerpt(live
|
|
258
|
+
const liveWords = excerpt(liveSummary(live));
|
|
240
259
|
if (verdict === false)
|
|
241
260
|
return this.reading(false, 'live', liveWords);
|
|
242
261
|
if (verdict === true)
|
|
243
|
-
return this.reading(true, 'live', statusWords);
|
|
244
|
-
return this.reading(true, 'status', `the live check could not tell (${liveWords}); status: ${statusWords}
|
|
262
|
+
return this.reading(true, 'live', statusWords, account);
|
|
263
|
+
return this.reading(true, 'status', `the live check could not tell (${liveWords}); status: ${statusWords}`, account);
|
|
245
264
|
}
|
|
246
|
-
reading(signedIn, check, detail) {
|
|
247
|
-
return { signedIn, check, probedAt: new Date(this.now()).toISOString(), detail };
|
|
265
|
+
reading(signedIn, check, detail, account) {
|
|
266
|
+
return { signedIn, check, probedAt: new Date(this.now()).toISOString(), detail, ...(account !== undefined ? { account } : {}) };
|
|
248
267
|
}
|
|
249
268
|
stale(hit) {
|
|
250
269
|
const ttl = hit.signedIn === true ? PROBE_TTL_SIGNED_IN_MS : PROBE_TTL_OTHER_MS;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seat-probe.js","sourceRoot":"","sources":["../../src/api/seat-probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"seat-probe.js","sourceRoot":"","sources":["../../src/api/seat-probe.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Account identifiers never reach the wire (DES-seats-page A8 and A2).
|
|
3
|
+
*
|
|
4
|
+
* A seat's own words ride `GET /roster` as `auth_evidence` and inside `login_note`, and those are
|
|
5
|
+
* the CLI's status output. Signed in, `claude auth status --json` prints the account (`email`,
|
|
6
|
+
* `orgId`, `orgName`) beside the fields the roster needs (`loggedIn`, `authMethod`). `codex login
|
|
7
|
+
* status` prints a masked key prefix ("Logged in using an API key - sk-proj-***"). This module is
|
|
8
|
+
* the one place that turns that output into something the roster may carry:
|
|
9
|
+
*
|
|
10
|
+
* - {@link scrubStatusOutput} reads a JSON status object for its ALLOWLISTED fields only, so an
|
|
11
|
+
* account field that a newer CLI adds is dropped too, and a field this module does not know is
|
|
12
|
+
* never carried;
|
|
13
|
+
* - {@link scrubEvidence} is the second guard for free text: email-like, UUID-like and key-shaped
|
|
14
|
+
* strings are masked, wherever they appear;
|
|
15
|
+
* - {@link accountFromStatus} reads the account KIND (and a provider-public plan name) from the
|
|
16
|
+
* raw output BEFORE the scrub. It never returns an identifier.
|
|
17
|
+
*
|
|
18
|
+
* The roster's evidence fields carry ONLY crew's own vocabulary (codex r2 on #996: no mask can know
|
|
19
|
+
* every shape an identifier takes in a CLI's prose): {@link statusSummary} for a status command,
|
|
20
|
+
* {@link liveSummary} for the live check, `refusalSummary` (seat-health.ts) for a seat's refusal.
|
|
21
|
+
* {@link scrubEvidence} stays as the second guard over all of them.
|
|
22
|
+
*
|
|
23
|
+
* Pure: no IO, no clock.
|
|
24
|
+
*/
|
|
25
|
+
/** Mask every account identifier in free text (the second guard; see the module doc). */
|
|
26
|
+
export declare function scrubEvidence(text: string): string;
|
|
27
|
+
/**
|
|
28
|
+
* A CLI's status output reduced to what the roster may carry. JSON objects (claude) keep only the
|
|
29
|
+
* {@link STATUS_ALLOWLIST} fields, re-serialized compactly; anything else goes through
|
|
30
|
+
* {@link scrubEvidence}.
|
|
31
|
+
*/
|
|
32
|
+
export declare function scrubStatusOutput(text: string): string;
|
|
33
|
+
/** `RosterSeat.account.kind` (api-types 0.115.0). */
|
|
34
|
+
export type SeatAccountKind = 'subscription' | 'api_key' | 'free' | 'unknown';
|
|
35
|
+
export interface SeatAccount {
|
|
36
|
+
kind: SeatAccountKind;
|
|
37
|
+
/** A provider-public plan name ("Max", "Pro"), only from the fixed table below. */
|
|
38
|
+
plan?: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* The account kind a seat's auth-status output states, or `undefined` when it states none (the
|
|
42
|
+
* caller then says `unknown`). Read from the RAW output; returns no identifier.
|
|
43
|
+
*
|
|
44
|
+
* - claude (`auth status --json`): `authMethod: "claude.ai"` is a subscription (plan from
|
|
45
|
+
* `subscriptionType`), `"api_key"` an API key;
|
|
46
|
+
* - codex (`login status`): "Logged in using ChatGPT" is a subscription; an API key, an access
|
|
47
|
+
* token or a Bedrock key is `api_key`.
|
|
48
|
+
*/
|
|
49
|
+
export declare function accountFromStatus(seatKey: string, stdout: string, stderr?: string): SeatAccount | undefined;
|
|
50
|
+
/** A probe process's outcome, as `seat-probe.ts` reports it (structural). */
|
|
51
|
+
export interface ProbeOutputLike {
|
|
52
|
+
code: number | null;
|
|
53
|
+
stdout: string;
|
|
54
|
+
stderr: string;
|
|
55
|
+
error?: string;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* A status command's answer, in crew's words only: claude's JSON reduced to its allowlisted
|
|
59
|
+
* fields (stdout alone — a stderr warning never turns the allowlist off; malformed JSON is
|
|
60
|
+
* withheld, never echoed), codex's known phrase, plus any refusal phrase stderr carried.
|
|
61
|
+
*/
|
|
62
|
+
export declare function statusSummary(seatKey: string, out: ProbeOutputLike): string;
|
|
63
|
+
/** The live check's answer, in crew's words only: the refusal phrase, a known blocker, or the exit. */
|
|
64
|
+
export declare function liveSummary(out: ProbeOutputLike): string;
|
|
65
|
+
//# sourceMappingURL=seat-scrub.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seat-scrub.d.ts","sourceRoot":"","sources":["../../src/api/seat-scrub.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAwBH,yFAAyF;AACzF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQlD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkBtD;AAED,qDAAqD;AACrD,MAAM,MAAM,eAAe,GAAG,cAAc,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;AAE9E,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,eAAe,CAAC;IACtB,mFAAmF;IACnF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAUD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,SAAK,GAAG,WAAW,GAAG,SAAS,CAsBvG;AAED,6EAA6E;AAC7E,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAmBD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,GAAG,MAAM,CAgB3E;AAWD,uGAAuG;AACvG,wBAAgB,WAAW,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAOxD"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Account identifiers never reach the wire (DES-seats-page A8 and A2).
|
|
3
|
+
*
|
|
4
|
+
* A seat's own words ride `GET /roster` as `auth_evidence` and inside `login_note`, and those are
|
|
5
|
+
* the CLI's status output. Signed in, `claude auth status --json` prints the account (`email`,
|
|
6
|
+
* `orgId`, `orgName`) beside the fields the roster needs (`loggedIn`, `authMethod`). `codex login
|
|
7
|
+
* status` prints a masked key prefix ("Logged in using an API key - sk-proj-***"). This module is
|
|
8
|
+
* the one place that turns that output into something the roster may carry:
|
|
9
|
+
*
|
|
10
|
+
* - {@link scrubStatusOutput} reads a JSON status object for its ALLOWLISTED fields only, so an
|
|
11
|
+
* account field that a newer CLI adds is dropped too, and a field this module does not know is
|
|
12
|
+
* never carried;
|
|
13
|
+
* - {@link scrubEvidence} is the second guard for free text: email-like, UUID-like and key-shaped
|
|
14
|
+
* strings are masked, wherever they appear;
|
|
15
|
+
* - {@link accountFromStatus} reads the account KIND (and a provider-public plan name) from the
|
|
16
|
+
* raw output BEFORE the scrub. It never returns an identifier.
|
|
17
|
+
*
|
|
18
|
+
* The roster's evidence fields carry ONLY crew's own vocabulary (codex r2 on #996: no mask can know
|
|
19
|
+
* every shape an identifier takes in a CLI's prose): {@link statusSummary} for a status command,
|
|
20
|
+
* {@link liveSummary} for the live check, `refusalSummary` (seat-health.ts) for a seat's refusal.
|
|
21
|
+
* {@link scrubEvidence} stays as the second guard over all of them.
|
|
22
|
+
*
|
|
23
|
+
* Pure: no IO, no clock.
|
|
24
|
+
*/
|
|
25
|
+
import { refusalSummary } from './seat-health.js';
|
|
26
|
+
/** The fields of a JSON auth-status object the roster may carry. Everything else is dropped. */
|
|
27
|
+
const STATUS_ALLOWLIST = ['loggedIn', 'authMethod', 'apiProvider'];
|
|
28
|
+
const EMAIL_RE = /[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/g;
|
|
29
|
+
const UUID_RE = /\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/gi;
|
|
30
|
+
/** A provider key prefix with whatever follows it (masked or not): `sk-…`, `sk-ant-…`, `ghp_…`,
|
|
31
|
+
* `gho_…`, `github_pat_…`, `xox?-…`, `AKIA…`. */
|
|
32
|
+
const KEY_PREFIX_RE = /\b(?:sk-[A-Za-z0-9_*.-]*|gh[pousr]_[A-Za-z0-9_*]*|github_pat_[A-Za-z0-9_*]*|xox[abprs]-[A-Za-z0-9*-]*|AKIA[A-Z0-9*]*)/g;
|
|
33
|
+
/** A long unbroken token (24+ chars of a key alphabet, holding a digit or a capital): an access
|
|
34
|
+
* token, a bearer, a hash. Version strings never reach this length without a separator, and a
|
|
35
|
+
* snake_case word (`read_only_requires_wrapped`) holds neither. */
|
|
36
|
+
const LONG_TOKEN_RE = /\b(?=[A-Za-z0-9_\-]*[0-9A-Z])[A-Za-z0-9_\-]{24,}\b/g;
|
|
37
|
+
/** `Bearer <token>` / `Basic <token>`: whatever follows the scheme. */
|
|
38
|
+
const AUTH_SCHEME_RE = /\b(Bearer|Basic|Token)\s+[^\s,;)}\]]+/gi;
|
|
39
|
+
/** `key: value` / `key=value` pairs whose key names an account identifier or a secret. The value is
|
|
40
|
+
* masked to the end of its clause — a quoted string, or everything up to `,` `;` `)` `}` `]` or the
|
|
41
|
+
* line's end — so a multi-word name ("organization: Acme Research Ltd") goes whole. */
|
|
42
|
+
const ACCOUNT_PAIR_RE = /("?(?:e-?mail|email_?address|account(?:_?id|_?uuid|_?name)?|org(?:ani[sz]ation)?(?:_?id|_?uuid|_?name)?|team(?:_?id|_?name)?|workspace(?:_?id|_?name)?|tenant(?:_?id)?|user(?:_?id|_?name)?|login|username|(?:access_?|refresh_?|id_?|session_?|auth_?)?token|api_?key|secret|password|passwd|credentials?|authorization|cookie)"?\s*[:=]\s*)("[^"]*"|[^,;)}\]\n]+)/gi;
|
|
43
|
+
/** Mask every account identifier in free text (the second guard; see the module doc). */
|
|
44
|
+
export function scrubEvidence(text) {
|
|
45
|
+
return text
|
|
46
|
+
.replace(ACCOUNT_PAIR_RE, (_m, key, value) => `${key}${value.startsWith('"') ? '"<redacted>"' : '<redacted>'}`)
|
|
47
|
+
.replace(AUTH_SCHEME_RE, (_m, scheme) => `${scheme} <redacted>`)
|
|
48
|
+
.replace(EMAIL_RE, '<email>')
|
|
49
|
+
.replace(UUID_RE, '<id>')
|
|
50
|
+
.replace(KEY_PREFIX_RE, '<key>')
|
|
51
|
+
.replace(LONG_TOKEN_RE, '<redacted>');
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* A CLI's status output reduced to what the roster may carry. JSON objects (claude) keep only the
|
|
55
|
+
* {@link STATUS_ALLOWLIST} fields, re-serialized compactly; anything else goes through
|
|
56
|
+
* {@link scrubEvidence}.
|
|
57
|
+
*/
|
|
58
|
+
export function scrubStatusOutput(text) {
|
|
59
|
+
const trimmed = text.trim();
|
|
60
|
+
if (trimmed.startsWith('{')) {
|
|
61
|
+
try {
|
|
62
|
+
const parsed = JSON.parse(trimmed);
|
|
63
|
+
if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {
|
|
64
|
+
const kept = {};
|
|
65
|
+
for (const k of STATUS_ALLOWLIST) {
|
|
66
|
+
const v = parsed[k];
|
|
67
|
+
if (typeof v === 'boolean' || typeof v === 'number' || (typeof v === 'string' && v.length <= 40))
|
|
68
|
+
kept[k] = v;
|
|
69
|
+
}
|
|
70
|
+
return scrubEvidence(JSON.stringify(kept));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
/* not one JSON object: the text guard below */
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return scrubEvidence(text);
|
|
78
|
+
}
|
|
79
|
+
/** Provider-public plan names, by the status output's own token. Anything else is not carried. */
|
|
80
|
+
const CLAUDE_PLANS = Object.freeze({
|
|
81
|
+
max: 'Max',
|
|
82
|
+
pro: 'Pro',
|
|
83
|
+
team: 'Team',
|
|
84
|
+
enterprise: 'Enterprise',
|
|
85
|
+
});
|
|
86
|
+
/**
|
|
87
|
+
* The account kind a seat's auth-status output states, or `undefined` when it states none (the
|
|
88
|
+
* caller then says `unknown`). Read from the RAW output; returns no identifier.
|
|
89
|
+
*
|
|
90
|
+
* - claude (`auth status --json`): `authMethod: "claude.ai"` is a subscription (plan from
|
|
91
|
+
* `subscriptionType`), `"api_key"` an API key;
|
|
92
|
+
* - codex (`login status`): "Logged in using ChatGPT" is a subscription; an API key, an access
|
|
93
|
+
* token or a Bedrock key is `api_key`.
|
|
94
|
+
*/
|
|
95
|
+
export function accountFromStatus(seatKey, stdout, stderr = '') {
|
|
96
|
+
if (seatKey === 'claude') {
|
|
97
|
+
try {
|
|
98
|
+
const parsed = JSON.parse(stdout.trim());
|
|
99
|
+
if (parsed.loggedIn !== true)
|
|
100
|
+
return undefined;
|
|
101
|
+
if (parsed.authMethod === 'claude.ai') {
|
|
102
|
+
const plan = typeof parsed.subscriptionType === 'string' ? CLAUDE_PLANS[parsed.subscriptionType.toLowerCase()] : undefined;
|
|
103
|
+
return { kind: 'subscription', ...(plan !== undefined ? { plan } : {}) };
|
|
104
|
+
}
|
|
105
|
+
if (parsed.authMethod === 'api_key')
|
|
106
|
+
return { kind: 'api_key' };
|
|
107
|
+
return { kind: 'unknown' };
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
if (seatKey === 'codex') {
|
|
114
|
+
const said = `${stdout}\n${stderr}`;
|
|
115
|
+
if (/logged in using chatgpt/i.test(said))
|
|
116
|
+
return { kind: 'subscription' };
|
|
117
|
+
if (/logged in using (?:an api key|amazon bedrock|(?:a )?(?:personal )?access token)/i.test(said))
|
|
118
|
+
return { kind: 'api_key' };
|
|
119
|
+
if (/logged in using/i.test(said))
|
|
120
|
+
return { kind: 'unknown' };
|
|
121
|
+
}
|
|
122
|
+
return undefined;
|
|
123
|
+
}
|
|
124
|
+
/** Why a probe process did not answer, in crew's words. */
|
|
125
|
+
function processFailure(error) {
|
|
126
|
+
if (/ENOENT/.test(error))
|
|
127
|
+
return 'the CLI is not installed (ENOENT)';
|
|
128
|
+
if (/ETIMEDOUT|timed? ?out|SIGTERM|killed/i.test(error))
|
|
129
|
+
return 'timed out';
|
|
130
|
+
return 'the CLI did not run';
|
|
131
|
+
}
|
|
132
|
+
/** codex `login status` phrases (codex 0.16x), the only words carried from its output. */
|
|
133
|
+
const CODEX_STATUS_PHRASES = [
|
|
134
|
+
/Not logged in/i,
|
|
135
|
+
/Logged in using ChatGPT/i,
|
|
136
|
+
/Logged in using an API key/i,
|
|
137
|
+
/Logged in using Amazon Bedrock (?:API key|AWS access keys)/i,
|
|
138
|
+
/Logged in using (?:personal )?access token/i,
|
|
139
|
+
/Logged in using workload identity/i,
|
|
140
|
+
];
|
|
141
|
+
/**
|
|
142
|
+
* A status command's answer, in crew's words only: claude's JSON reduced to its allowlisted
|
|
143
|
+
* fields (stdout alone — a stderr warning never turns the allowlist off; malformed JSON is
|
|
144
|
+
* withheld, never echoed), codex's known phrase, plus any refusal phrase stderr carried.
|
|
145
|
+
*/
|
|
146
|
+
export function statusSummary(seatKey, out) {
|
|
147
|
+
if (out.error !== undefined || out.code === null)
|
|
148
|
+
return processFailure(out.error ?? '');
|
|
149
|
+
let main;
|
|
150
|
+
if (seatKey === 'claude') {
|
|
151
|
+
const stdout = out.stdout.trim();
|
|
152
|
+
main =
|
|
153
|
+
stdout.startsWith('{') && isJsonObject(stdout)
|
|
154
|
+
? scrubStatusOutput(stdout)
|
|
155
|
+
: (refusalSummary(out.stdout) ?? `exit ${out.code}: the status output is not JSON (withheld)`);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
const said = `${out.stdout}\n${out.stderr}`;
|
|
159
|
+
const phrase = CODEX_STATUS_PHRASES.map((re) => re.exec(said)?.[0]).find((p) => p !== undefined);
|
|
160
|
+
main = phrase ?? `exit ${out.code}: the status output is withheld`;
|
|
161
|
+
}
|
|
162
|
+
const refused = refusalSummary(out.stderr);
|
|
163
|
+
return scrubEvidence(refused !== null && !main.toLowerCase().includes(refused.toLowerCase()) ? `${main}; ${refused}` : main);
|
|
164
|
+
}
|
|
165
|
+
/** What stops a live request, beyond a refusal for want of a credential (crew's words). */
|
|
166
|
+
const LIVE_BLOCKERS = [
|
|
167
|
+
[/usage limit/i, 'usage limit'],
|
|
168
|
+
[/rate[ -]?limit/i, 'rate limit'],
|
|
169
|
+
[/quota/i, 'quota'],
|
|
170
|
+
[/overloaded/i, 'overloaded'],
|
|
171
|
+
[/stream disconnected|ECONNRESET|ECONNREFUSED|ENOTFOUND|network/i, 'network'],
|
|
172
|
+
];
|
|
173
|
+
/** The live check's answer, in crew's words only: the refusal phrase, a known blocker, or the exit. */
|
|
174
|
+
export function liveSummary(out) {
|
|
175
|
+
if (out.error !== undefined || out.code === null)
|
|
176
|
+
return processFailure(out.error ?? '');
|
|
177
|
+
const said = `${out.stdout}\n${out.stderr}`;
|
|
178
|
+
const refused = refusalSummary(said);
|
|
179
|
+
if (refused !== null)
|
|
180
|
+
return scrubEvidence(refused);
|
|
181
|
+
const blocker = LIVE_BLOCKERS.find(([re]) => re.test(said))?.[1];
|
|
182
|
+
return blocker !== undefined ? `exit ${out.code}: ${blocker}` : `exit ${out.code}`;
|
|
183
|
+
}
|
|
184
|
+
function isJsonObject(text) {
|
|
185
|
+
try {
|
|
186
|
+
const v = JSON.parse(text);
|
|
187
|
+
return typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=seat-scrub.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seat-scrub.js","sourceRoot":"","sources":["../../src/api/seat-scrub.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,11 +44,12 @@ import type { SeatProbeReading } from './seat-probe.js';
|
|
|
44
44
|
export declare function plainEvidence(detail: string): string | null;
|
|
45
45
|
/**
|
|
46
46
|
* `auth_evidence` with the operator's home directory written `~` (crew#771: screen shares and
|
|
47
|
-
* recordings).
|
|
47
|
+
* recordings). A command's display passes `$HOME` instead (`seat-agents.ts`): it expands inside the
|
|
48
|
+
* double quotes the engine puts around a seat's root, where `~` does not. Only the home as a whole path segment — `/home/al` never eats the start of
|
|
48
49
|
* `/home/alice` — and in every separator spelling: `/`, `\`, and the JSON-escaped `\\` a Windows
|
|
49
50
|
* home takes inside a CLI's JSON status (codex on #797). A root home (`/`) is left alone.
|
|
50
51
|
*/
|
|
51
|
-
export declare function homeless(detail: string, home?: string): string;
|
|
52
|
+
export declare function homeless(detail: string, home?: string, replacement?: string): string;
|
|
52
53
|
/** The seat's auth state, read for what it MEANS for the seat's usability. */
|
|
53
54
|
export type SeatAuth = 'signed_in' | 'signed_out' | 'not_required' | 'unknown';
|
|
54
55
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seat-standing.d.ts","sourceRoot":"","sources":["../../src/api/seat-standing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAGH,OAAO,KAAK,EAAC,eAAe,EAAE,eAAe,EAAC,MAAM,kBAAkB,CAAC;AACvE,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,iBAAiB,CAAC;AAMtD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ3D;AAMD
|
|
1
|
+
{"version":3,"file":"seat-standing.d.ts","sourceRoot":"","sources":["../../src/api/seat-standing.ts"],"names":[],"mappings":"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"}
|
|
@@ -59,11 +59,12 @@ function escapeRegExp(s) {
|
|
|
59
59
|
}
|
|
60
60
|
/**
|
|
61
61
|
* `auth_evidence` with the operator's home directory written `~` (crew#771: screen shares and
|
|
62
|
-
* recordings).
|
|
62
|
+
* recordings). A command's display passes `$HOME` instead (`seat-agents.ts`): it expands inside the
|
|
63
|
+
* double quotes the engine puts around a seat's root, where `~` does not. Only the home as a whole path segment — `/home/al` never eats the start of
|
|
63
64
|
* `/home/alice` — and in every separator spelling: `/`, `\`, and the JSON-escaped `\\` a Windows
|
|
64
65
|
* home takes inside a CLI's JSON status (codex on #797). A root home (`/`) is left alone.
|
|
65
66
|
*/
|
|
66
|
-
export function homeless(detail, home = homedir()) {
|
|
67
|
+
export function homeless(detail, home = homedir(), replacement = '~') {
|
|
67
68
|
const trimmed = home.replace(/[\\/]+$/, '');
|
|
68
69
|
if (trimmed === '')
|
|
69
70
|
return detail;
|
|
@@ -71,7 +72,7 @@ export function homeless(detail, home = homedir()) {
|
|
|
71
72
|
const spellings = new Set([trimmed, trimmed.replace(/\\/g, '/'), back, back.replace(/\\/g, '\\\\')]);
|
|
72
73
|
let out = detail;
|
|
73
74
|
for (const h of [...spellings].sort((a, b) => b.length - a.length))
|
|
74
|
-
out = out.replace(new RegExp(`${escapeRegExp(h)}(?=$|[\\\\/\\s"'),;:])`, 'g'),
|
|
75
|
+
out = out.replace(new RegExp(`${escapeRegExp(h)}(?=$|[\\\\/\\s"'),;:])`, 'g'), () => replacement);
|
|
75
76
|
return out;
|
|
76
77
|
}
|
|
77
78
|
/**
|
|
@@ -154,10 +155,10 @@ export function seatStanding(seat, signedIn, authFailure = null, probeInput = un
|
|
|
154
155
|
...base,
|
|
155
156
|
council_eligible: false,
|
|
156
157
|
council_ineligible_reason: authFailure !== null
|
|
157
|
-
? `signed out — the seat itself reported no credential (${noCredentialCause(authFailure)}); sign it in from the
|
|
158
|
+
? `signed out — the seat itself reported no credential (${noCredentialCause(authFailure)}); sign it in from the Agents page`
|
|
158
159
|
: read.auth_source === 'probe'
|
|
159
|
-
? `signed out — the seat's own auth check says ${probeWords(read.auth_evidence)}; sign it in from the
|
|
160
|
-
: 'signed out — a council would bench this seat on its first ballot; sign it in from the
|
|
160
|
+
? `signed out — the seat's own auth check says ${probeWords(read.auth_evidence)}; sign it in from the Agents page`
|
|
161
|
+
: 'signed out — a council would bench this seat on its first ballot; sign it in from the Agents page',
|
|
161
162
|
};
|
|
162
163
|
}
|
|
163
164
|
// A seat the ENGINE benched in a recent run on its own refusal (`seatBenched`: out of quota, not
|
|
@@ -217,7 +218,7 @@ kind = 'pool') {
|
|
|
217
218
|
const reasons = [];
|
|
218
219
|
let source = 'scope';
|
|
219
220
|
if (!authUsable(auth)) {
|
|
220
|
-
reasons.push('signed out — it cannot take a turn until it is signed in from the
|
|
221
|
+
reasons.push('signed out — it cannot take a turn until it is signed in from the Agents page');
|
|
221
222
|
source = 'auth';
|
|
222
223
|
}
|
|
223
224
|
if (seat.enabled_for_council === false) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seat-standing.js","sourceRoot":"","sources":["../../src/api/seat-standing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,mFAAmF;AACnF,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAE/B;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IACxB,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,MAAM,GAAG,kBAAkB,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACrF,gGAAgG;IAChG,kGAAkG;IAClG,qGAAqG;IACrG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACjC,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,YAAY,CAAC,CAAS;IAC7B,OAAO,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"seat-standing.js","sourceRoot":"","sources":["../../src/api/seat-standing.ts"],"names":[],"mappings":"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"}
|