@claudexor/gateway 1.0.1 → 2.1.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/auth-readiness.d.ts +44 -0
- package/dist/auth-readiness.d.ts.map +1 -0
- package/dist/auth-readiness.js +90 -0
- package/dist/auth-readiness.js.map +1 -0
- package/dist/gateway.d.ts +22 -1
- package/dist/gateway.d.ts.map +1 -1
- package/dist/gateway.js +30 -1
- package/dist/gateway.js.map +1 -1
- package/dist/gating.d.ts.map +1 -1
- package/dist/gating.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/readiness-presentation.d.ts +8 -0
- package/dist/readiness-presentation.d.ts.map +1 -0
- package/dist/readiness-presentation.js +81 -0
- package/dist/readiness-presentation.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type ControlAuthReadinessRefreshResponse as AuthReadinessRefreshResponse } from "@claudexor/schema";
|
|
2
|
+
import type { HarnessGateway } from "./gateway.js";
|
|
3
|
+
export type AuthReadinessServiceErrorCode = "unknown_harness" | "auth_source_evidence_missing" | "auth_readiness_probe_failed";
|
|
4
|
+
/**
|
|
5
|
+
* Typed service failure designed to project directly to the control plane's
|
|
6
|
+
* application/problem+json boundary. No transport-specific response logic
|
|
7
|
+
* belongs in this domain service.
|
|
8
|
+
*/
|
|
9
|
+
export declare class AuthReadinessServiceError extends Error {
|
|
10
|
+
readonly code: AuthReadinessServiceErrorCode;
|
|
11
|
+
readonly status: 404 | 502 | 503;
|
|
12
|
+
readonly retryable: boolean;
|
|
13
|
+
readonly requiredActions: string[];
|
|
14
|
+
readonly evidenceRefs: string[];
|
|
15
|
+
readonly fieldErrors: Record<string, string[]>;
|
|
16
|
+
constructor(code: AuthReadinessServiceErrorCode, status: 404 | 502 | 503, message: string, retryable: boolean, requiredActions?: string[], evidenceRefs?: string[]);
|
|
17
|
+
}
|
|
18
|
+
export interface AuthReadinessServiceOptions {
|
|
19
|
+
/** Stable daemon-owned no-project root used by every no-project doctor probe. */
|
|
20
|
+
cwd: string;
|
|
21
|
+
now?: () => Date;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Exact auth-readiness application service.
|
|
25
|
+
*
|
|
26
|
+
* It deliberately does not call discovery or aggregate status: one request
|
|
27
|
+
* probes exactly one adapter/source. The surrounding invalidations remove all
|
|
28
|
+
* cached variants for that adapter, including stale project-scoped aggregate
|
|
29
|
+
* reports, because a native login changes global harness state rather than one
|
|
30
|
+
* repository's state. Unrelated harness evidence remains cached. Fresh probes
|
|
31
|
+
* themselves never seed the shared cache.
|
|
32
|
+
*/
|
|
33
|
+
export declare class AuthReadinessService {
|
|
34
|
+
private readonly gateway;
|
|
35
|
+
private readonly cwd;
|
|
36
|
+
private readonly now;
|
|
37
|
+
constructor(gateway: HarnessGateway, options: AuthReadinessServiceOptions);
|
|
38
|
+
/** Invalidate every cwd/source projection for one adapter only. */
|
|
39
|
+
invalidate(harnessIdInput: string): void;
|
|
40
|
+
refresh(harnessIdInput: string, input: unknown, runtime?: {
|
|
41
|
+
abortSignal?: AbortSignal;
|
|
42
|
+
}): Promise<AuthReadinessRefreshResponse>;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=auth-readiness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-readiness.d.ts","sourceRoot":"","sources":["../src/auth-readiness.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,mCAAmC,IAAI,4BAA4B,EACzE,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,MAAM,6BAA6B,GACvC,iBAAiB,GAAG,8BAA8B,GAAG,6BAA6B,CAAC;AAErF;;;;GAIG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;IAIhD,QAAQ,CAAC,IAAI,EAAE,6BAA6B;IAC5C,QAAQ,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG;IAEhC,QAAQ,CAAC,SAAS,EAAE,OAAO;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,EAAE;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE;IARjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAM;gBAGzC,IAAI,EAAE,6BAA6B,EACnC,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAChC,OAAO,EAAE,MAAM,EACN,SAAS,EAAE,OAAO,EAClB,eAAe,GAAE,MAAM,EAAO,EAC9B,YAAY,GAAE,MAAM,EAAO;CAKvC;AAED,MAAM,WAAW,2BAA2B;IAC1C,iFAAiF;IACjF,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,qBAAa,oBAAoB;IAK7B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJ1B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;gBAGd,OAAO,EAAE,cAAc,EACxC,OAAO,EAAE,2BAA2B;IAStC,mEAAmE;IACnE,UAAU,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAKlC,OAAO,CACX,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,OAAO,EACd,OAAO,GAAE;QAAE,WAAW,CAAC,EAAE,WAAW,CAAA;KAAO,GAC1C,OAAO,CAAC,4BAA4B,CAAC;CAuDzC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { isAbsolute } from "node:path";
|
|
2
|
+
import { invalidateDoctorCache } from "@claudexor/core";
|
|
3
|
+
import { ControlAuthReadinessRefreshRequest, ControlAuthReadinessRefreshResponse, Id, } from "@claudexor/schema";
|
|
4
|
+
/**
|
|
5
|
+
* Typed service failure designed to project directly to the control plane's
|
|
6
|
+
* application/problem+json boundary. No transport-specific response logic
|
|
7
|
+
* belongs in this domain service.
|
|
8
|
+
*/
|
|
9
|
+
export class AuthReadinessServiceError extends Error {
|
|
10
|
+
code;
|
|
11
|
+
status;
|
|
12
|
+
retryable;
|
|
13
|
+
requiredActions;
|
|
14
|
+
evidenceRefs;
|
|
15
|
+
fieldErrors = {};
|
|
16
|
+
constructor(code, status, message, retryable, requiredActions = [], evidenceRefs = []) {
|
|
17
|
+
super(message);
|
|
18
|
+
this.code = code;
|
|
19
|
+
this.status = status;
|
|
20
|
+
this.retryable = retryable;
|
|
21
|
+
this.requiredActions = requiredActions;
|
|
22
|
+
this.evidenceRefs = evidenceRefs;
|
|
23
|
+
this.name = "AuthReadinessServiceError";
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Exact auth-readiness application service.
|
|
28
|
+
*
|
|
29
|
+
* It deliberately does not call discovery or aggregate status: one request
|
|
30
|
+
* probes exactly one adapter/source. The surrounding invalidations remove all
|
|
31
|
+
* cached variants for that adapter, including stale project-scoped aggregate
|
|
32
|
+
* reports, because a native login changes global harness state rather than one
|
|
33
|
+
* repository's state. Unrelated harness evidence remains cached. Fresh probes
|
|
34
|
+
* themselves never seed the shared cache.
|
|
35
|
+
*/
|
|
36
|
+
export class AuthReadinessService {
|
|
37
|
+
gateway;
|
|
38
|
+
cwd;
|
|
39
|
+
now;
|
|
40
|
+
constructor(gateway, options) {
|
|
41
|
+
this.gateway = gateway;
|
|
42
|
+
if (!isAbsolute(options.cwd)) {
|
|
43
|
+
throw new TypeError("auth readiness service cwd must be absolute");
|
|
44
|
+
}
|
|
45
|
+
this.cwd = options.cwd;
|
|
46
|
+
this.now = options.now ?? (() => new Date());
|
|
47
|
+
}
|
|
48
|
+
/** Invalidate every cwd/source projection for one adapter only. */
|
|
49
|
+
invalidate(harnessIdInput) {
|
|
50
|
+
const harnessId = Id.parse(harnessIdInput);
|
|
51
|
+
invalidateDoctorCache({ adapterId: harnessId });
|
|
52
|
+
}
|
|
53
|
+
async refresh(harnessIdInput, input, runtime = {}) {
|
|
54
|
+
const harnessId = Id.parse(harnessIdInput);
|
|
55
|
+
const request = ControlAuthReadinessRefreshRequest.parse(input);
|
|
56
|
+
if (!this.gateway.get(harnessId)) {
|
|
57
|
+
throw new AuthReadinessServiceError("unknown_harness", 404, `unknown harness '${harnessId}'`, false, ["refresh_harness_catalog"]);
|
|
58
|
+
}
|
|
59
|
+
// Invalidate both sides of the fresh probe. The second invalidation closes
|
|
60
|
+
// the race where an aggregate status request began before this refresh and
|
|
61
|
+
// populated a stale target entry while the exact probe was in flight.
|
|
62
|
+
this.invalidate(harnessId);
|
|
63
|
+
let readiness;
|
|
64
|
+
try {
|
|
65
|
+
readiness = await this.gateway.probeAuthSource(harnessId, request.source, {
|
|
66
|
+
cwd: this.cwd,
|
|
67
|
+
fresh: true,
|
|
68
|
+
authPreference: request.authRequest,
|
|
69
|
+
...(runtime.abortSignal ? { abortSignal: runtime.abortSignal } : {}),
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
throw new AuthReadinessServiceError("auth_readiness_probe_failed", 503, `auth readiness probe failed for harness '${harnessId}': ${error instanceof Error ? error.message : String(error)}`, true, ["retry_auth_readiness_refresh"]);
|
|
74
|
+
}
|
|
75
|
+
finally {
|
|
76
|
+
this.invalidate(harnessId);
|
|
77
|
+
}
|
|
78
|
+
if (!readiness) {
|
|
79
|
+
throw new AuthReadinessServiceError("auth_source_evidence_missing", 502, `harness '${harnessId}' returned no evidence for requested auth source '${request.source}'`, false, ["inspect_harness_doctor"]);
|
|
80
|
+
}
|
|
81
|
+
return ControlAuthReadinessRefreshResponse.parse({
|
|
82
|
+
harnessId,
|
|
83
|
+
authRequest: request.authRequest,
|
|
84
|
+
requestedSource: request.source,
|
|
85
|
+
observedAt: this.now().toISOString(),
|
|
86
|
+
readiness,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=auth-readiness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-readiness.js","sourceRoot":"","sources":["../src/auth-readiness.ts"],"names":[],"mappings":"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"}
|
package/dist/gateway.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ConformanceCheck, HarnessManifest, Intent } from "@claudexor/schema";
|
|
1
|
+
import type { AuthSourceKind, AuthSourceReadiness, ConformanceCheck, HarnessManifest, Intent } from "@claudexor/schema";
|
|
2
2
|
import type { AdapterRegistry, DoctorSpec, HarnessAdapter } from "@claudexor/core";
|
|
3
3
|
export interface HarnessStatus {
|
|
4
4
|
id: string;
|
|
@@ -6,9 +6,15 @@ export interface HarnessStatus {
|
|
|
6
6
|
status: "ok" | "degraded" | "unavailable";
|
|
7
7
|
manifest: HarnessManifest | null;
|
|
8
8
|
enabledIntents: Intent[];
|
|
9
|
+
/** Intents this harness is ACTUALLY routable for right now: enabledIntents
|
|
10
|
+
* gated by doctor readiness (BIBLE §2 — doctor decides; a degraded or
|
|
11
|
+
* unauth'd harness routes NOTHING). The server-side availability truth: UI
|
|
12
|
+
* surfaces read this field instead of re-deriving business logic (R8). */
|
|
13
|
+
routableIntents: Intent[];
|
|
9
14
|
disabledIntents: Intent[];
|
|
10
15
|
checks: ConformanceCheck[];
|
|
11
16
|
reasons: string[];
|
|
17
|
+
authSources: AuthSourceReadiness[];
|
|
12
18
|
}
|
|
13
19
|
/**
|
|
14
20
|
* Wraps an adapter registry with discovery and conformance role-gating.
|
|
@@ -20,6 +26,21 @@ export declare class HarnessGateway {
|
|
|
20
26
|
constructor(registry: AdapterRegistry);
|
|
21
27
|
list(): string[];
|
|
22
28
|
get(id: string): HarnessAdapter | undefined;
|
|
29
|
+
/**
|
|
30
|
+
* Probe one concrete auth source on one concrete harness. This deliberately
|
|
31
|
+
* bypasses discover() and every other adapter: post-login verification must
|
|
32
|
+
* not spend or accidentally accept an unrelated credential route.
|
|
33
|
+
*/
|
|
34
|
+
probeAuthSource(harnessId: string, source: AuthSourceKind, spec: DoctorSpec): Promise<AuthSourceReadiness | null>;
|
|
35
|
+
/**
|
|
36
|
+
* Source-targeted readiness point-probe for ROUTE gating (W3.3 / TZ-1 §B):
|
|
37
|
+
* re-derives ONE harness's readiness in the exact resolved env/cwd its run
|
|
38
|
+
* will spawn with, so routing never admits a route on host-env auth truth
|
|
39
|
+
* the run's scoped env cannot reproduce. Discovery stays host-level
|
|
40
|
+
* (statusAll); this never probes unrelated adapters and never resurrects a
|
|
41
|
+
* harness that host discovery dropped.
|
|
42
|
+
*/
|
|
43
|
+
routeStatus(harnessId: string, spec: DoctorSpec): Promise<HarnessStatus | null>;
|
|
23
44
|
/**
|
|
24
45
|
* Discover + conformance-probe harnesses. When `only` is given, ONLY those
|
|
25
46
|
* adapters are probed (so `doctor --harness X` / `auth status X` pay one
|
package/dist/gateway.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,MAAM,EACP,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAInF,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,IAAI,GAAG,UAAU,GAAG,aAAa,CAAC;IAC1C,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;IACjC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB;;;8EAG0E;IAC1E,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,mBAAmB,EAAE,CAAC;CACpC;AAED;;;;GAIG;AACH,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,eAAe;IAEtD,IAAI,IAAI,MAAM,EAAE;IAIhB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI3C;;;;OAIG;IACG,eAAe,CACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAStC;;;;;;;OAOG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAMrF;;;;;OAKG;IACG,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;YAM9D,oBAAoB;IAmClC;;;;OAIG;IACG,YAAY,CAChB,IAAI,GAAE,UAAmC,EACzC,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,EAAE,CAAC;CAYrB"}
|
package/dist/gateway.js
CHANGED
|
@@ -16,6 +16,32 @@ export class HarnessGateway {
|
|
|
16
16
|
get(id) {
|
|
17
17
|
return this.registry.get(id);
|
|
18
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* Probe one concrete auth source on one concrete harness. This deliberately
|
|
21
|
+
* bypasses discover() and every other adapter: post-login verification must
|
|
22
|
+
* not spend or accidentally accept an unrelated credential route.
|
|
23
|
+
*/
|
|
24
|
+
async probeAuthSource(harnessId, source, spec) {
|
|
25
|
+
const adapter = this.registry.get(harnessId);
|
|
26
|
+
if (!adapter)
|
|
27
|
+
return null;
|
|
28
|
+
const report = (await runDoctor(new Map([[adapter.id, adapter]]), { ...spec, authSource: source }))[0];
|
|
29
|
+
return report?.auth_sources.find((candidate) => candidate.source === source) ?? null;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Source-targeted readiness point-probe for ROUTE gating (W3.3 / TZ-1 §B):
|
|
33
|
+
* re-derives ONE harness's readiness in the exact resolved env/cwd its run
|
|
34
|
+
* will spawn with, so routing never admits a route on host-env auth truth
|
|
35
|
+
* the run's scoped env cannot reproduce. Discovery stays host-level
|
|
36
|
+
* (statusAll); this never probes unrelated adapters and never resurrects a
|
|
37
|
+
* harness that host discovery dropped.
|
|
38
|
+
*/
|
|
39
|
+
async routeStatus(harnessId, spec) {
|
|
40
|
+
const adapter = this.registry.get(harnessId);
|
|
41
|
+
if (!adapter)
|
|
42
|
+
return null;
|
|
43
|
+
return (await this.statusAllForAdapters([adapter], spec))[0] ?? null;
|
|
44
|
+
}
|
|
19
45
|
/**
|
|
20
46
|
* Discover + conformance-probe harnesses. When `only` is given, ONLY those
|
|
21
47
|
* adapters are probed (so `doctor --harness X` / `auth status X` pay one
|
|
@@ -43,15 +69,18 @@ export class HarnessGateway {
|
|
|
43
69
|
}
|
|
44
70
|
const report = (await runDoctor(new Map([[adapter.id, adapter]]), spec))[0] ?? null;
|
|
45
71
|
const status = report?.status ?? "unavailable";
|
|
72
|
+
const enabledIntents = manifest ? allowedIntents(manifest, report) : [];
|
|
46
73
|
out.push({
|
|
47
74
|
id: adapter.id,
|
|
48
75
|
available: manifest !== null && status !== "unavailable",
|
|
49
76
|
status,
|
|
50
77
|
manifest,
|
|
51
|
-
enabledIntents
|
|
78
|
+
enabledIntents,
|
|
79
|
+
routableIntents: status === "ok" ? enabledIntents : [],
|
|
52
80
|
disabledIntents: report?.disabled_intents ?? [],
|
|
53
81
|
checks: report?.checks ?? [],
|
|
54
82
|
reasons: [...(discoverError ? [discoverError] : []), ...(report?.reasons ?? [])],
|
|
83
|
+
authSources: report?.auth_sources ?? [],
|
|
55
84
|
});
|
|
56
85
|
}
|
|
57
86
|
return out;
|
package/dist/gateway.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"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"}
|
package/dist/gating.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gating.d.ts","sourceRoot":"","sources":["../src/gating.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"gating.d.ts","sourceRoot":"","sources":["../src/gating.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,MAAM,EACP,MAAM,mBAAmB,CAAC;AAE3B,mFAAmF;AACnF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,EAAE,CAWrE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,iBAAiB,GAAG,IAAI,GAC/B,MAAM,EAAE,CAiBV"}
|
package/dist/gating.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gating.js","sourceRoot":"","sources":["../src/gating.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gating.js","sourceRoot":"","sources":["../src/gating.ts"],"names":[],"mappings":"AAOA,mFAAmF;AACnF,MAAM,UAAU,iBAAiB,CAAC,IAAyB;IACzD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,IAAI,IAAI,CAAC,SAAS;QAAE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACxD,IAAI,IAAI,CAAC,mBAAmB;QAAE,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAClE,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,IAAI,CAAC,UAAU;QAAE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAChD,IAAI,IAAI,CAAC,UAAU;QAAE,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACtD,IAAI,IAAI,CAAC,WAAW;QAAE,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC5B,QAAyB,EACzB,MAAgC;IAEhC,MAAM,IAAI,GAAG,iBAAiB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACtD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,aAAa;QAAE,OAAO,EAAE,CAAC;IAC1D,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QAC3B,qFAAqF;QACrF,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,sEAAsE;IACtE,2EAA2E;IAC3E,gCAAgC;IAChC,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACnD,OAAO,IAAI,CAAC,MAAM,CAChB,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAClF,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,6BAA6B,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { HarnessStatusDto, ReadinessCheckDto } from "@claudexor/schema";
|
|
2
|
+
export declare function normalizeReadiness(input: Pick<HarnessStatusDto, "checks" | "authSources" | "configuredModel"> & {
|
|
3
|
+
configuredModelCheck: {
|
|
4
|
+
status: "ok" | "rejected";
|
|
5
|
+
message?: string | null;
|
|
6
|
+
} | null;
|
|
7
|
+
}): ReadinessCheckDto[];
|
|
8
|
+
//# sourceMappingURL=readiness-presentation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readiness-presentation.d.ts","sourceRoot":"","sources":["../src/readiness-presentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AAqE3B,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,QAAQ,GAAG,aAAa,GAAG,iBAAiB,CAAC,GAAG;IAC5E,oBAAoB,EAAE;QAAE,MAAM,EAAE,IAAI,GAAG,UAAU,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;CACrF,GACA,iBAAiB,EAAE,CAiBrB"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* THE producer of the display-ready readiness list (W4.7 sol #18): raw doctor
|
|
3
|
+
* probes, per-source auth readiness, and the configured-model verdict
|
|
4
|
+
* normalize HERE, once, into typed rows every surface renders identically.
|
|
5
|
+
* Classification is an explicit TABLE — never an id-substring match (the
|
|
6
|
+
* no-regex governance class): an adapter adding a probe id extends the table
|
|
7
|
+
* (pinned by a test enumerating the real adapter ids), and an unknown id
|
|
8
|
+
* degrades honestly to a generic probe row with the id as its name.
|
|
9
|
+
*/
|
|
10
|
+
const KNOWN_CHECKS = {
|
|
11
|
+
installed: { title: "Installed", kind: "binary" },
|
|
12
|
+
api_key: { title: "API key", kind: "auth" },
|
|
13
|
+
provider_auth: { title: "Provider login", kind: "auth" },
|
|
14
|
+
isolated_smoke: { title: "Isolated API-key smoke", kind: "smoke" },
|
|
15
|
+
structured_output: { title: "Structured output", kind: "probe" },
|
|
16
|
+
};
|
|
17
|
+
const AUTH_SOURCE_TITLES = {
|
|
18
|
+
native_session: "Native session",
|
|
19
|
+
oauth_token_env: "Setup token",
|
|
20
|
+
api_key_env: "API key",
|
|
21
|
+
};
|
|
22
|
+
function humanizeId(id) {
|
|
23
|
+
const words = id.split(/[_-]+/).filter(Boolean);
|
|
24
|
+
if (words.length === 0)
|
|
25
|
+
return id;
|
|
26
|
+
const joined = words.join(" ");
|
|
27
|
+
return joined.charAt(0).toUpperCase() + joined.slice(1);
|
|
28
|
+
}
|
|
29
|
+
function checkRow(check) {
|
|
30
|
+
const known = KNOWN_CHECKS[check.id];
|
|
31
|
+
return {
|
|
32
|
+
id: check.id,
|
|
33
|
+
kind: known?.kind ?? "probe",
|
|
34
|
+
title: known?.title ?? humanizeId(check.id),
|
|
35
|
+
status: check.status,
|
|
36
|
+
detail: check.detail ?? null,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* An auth source is a row about THAT source: verified -> pass, a failed
|
|
41
|
+
* verification -> fail, everything else -> skip with honest detail (an
|
|
42
|
+
* unconfigured fallback source is not a failure of the harness).
|
|
43
|
+
*/
|
|
44
|
+
function authSourceRow(source) {
|
|
45
|
+
const status = source.verification === "passed" ? "pass" : source.verification === "failed" ? "fail" : "skip";
|
|
46
|
+
const detail = source.detail ??
|
|
47
|
+
(source.verification === "not_run"
|
|
48
|
+
? source.availability === "available"
|
|
49
|
+
? "present, not verified"
|
|
50
|
+
: source.availability === "unavailable"
|
|
51
|
+
? "not configured"
|
|
52
|
+
: "availability unknown"
|
|
53
|
+
: null);
|
|
54
|
+
return {
|
|
55
|
+
id: `auth_source:${source.source}`,
|
|
56
|
+
kind: "auth",
|
|
57
|
+
title: AUTH_SOURCE_TITLES[source.source] ?? humanizeId(source.source),
|
|
58
|
+
status,
|
|
59
|
+
detail,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
export function normalizeReadiness(input) {
|
|
63
|
+
const rows = [];
|
|
64
|
+
for (const check of input.checks)
|
|
65
|
+
rows.push(checkRow(check));
|
|
66
|
+
for (const source of input.authSources)
|
|
67
|
+
rows.push(authSourceRow(source));
|
|
68
|
+
if (input.configuredModel && input.configuredModelCheck) {
|
|
69
|
+
rows.push({
|
|
70
|
+
id: "configured_model",
|
|
71
|
+
kind: "model",
|
|
72
|
+
title: "Configured model",
|
|
73
|
+
status: input.configuredModelCheck.status === "ok" ? "pass" : "fail",
|
|
74
|
+
detail: input.configuredModelCheck.status === "ok"
|
|
75
|
+
? input.configuredModel
|
|
76
|
+
: (input.configuredModelCheck.message ?? null),
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
return rows;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=readiness-presentation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readiness-presentation.js","sourceRoot":"","sources":["../src/readiness-presentation.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@claudexor/gateway",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "2.1.2",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "HarnessGateway: discovery, conformance intent-gating, and harness selection.",
|
|
6
6
|
"type": "module",
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
"dist"
|
|
17
17
|
],
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@claudexor/schema": "1.
|
|
20
|
-
"@claudexor/core": "1.
|
|
19
|
+
"@claudexor/schema": "2.1.2",
|
|
20
|
+
"@claudexor/core": "2.1.2"
|
|
21
21
|
},
|
|
22
22
|
"repository": {
|
|
23
23
|
"type": "git",
|