@praxis.guard/auditor-cli 0.0.62 → 0.0.63
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/approval/mcp-flow-create.d.ts +3 -0
- package/dist/approval/mcp-flow-create.d.ts.map +1 -0
- package/dist/approval/mcp-flow-create.js +76 -0
- package/dist/approval/mcp-flow-create.js.map +1 -0
- package/dist/approval/mcp-flow-existing.d.ts +14 -0
- package/dist/approval/mcp-flow-existing.d.ts.map +1 -0
- package/dist/approval/mcp-flow-existing.js +43 -0
- package/dist/approval/mcp-flow-existing.js.map +1 -0
- package/dist/approval/mcp-flow-outcome.d.ts +5 -0
- package/dist/approval/mcp-flow-outcome.d.ts.map +1 -0
- package/dist/approval/mcp-flow-outcome.js +19 -0
- package/dist/approval/mcp-flow-outcome.js.map +1 -0
- package/dist/approval/mcp-flow-pending.d.ts +7 -0
- package/dist/approval/mcp-flow-pending.d.ts.map +1 -0
- package/dist/approval/mcp-flow-pending.js +25 -0
- package/dist/approval/mcp-flow-pending.js.map +1 -0
- package/dist/approval/mcp-flow-redeem.d.ts +13 -0
- package/dist/approval/mcp-flow-redeem.d.ts.map +1 -0
- package/dist/approval/mcp-flow-redeem.js +20 -0
- package/dist/approval/mcp-flow-redeem.js.map +1 -0
- package/dist/approval/mcp-flow.d.ts +6 -28
- package/dist/approval/mcp-flow.d.ts.map +1 -1
- package/dist/approval/mcp-flow.js +21 -129
- package/dist/approval/mcp-flow.js.map +1 -1
- package/dist/approval/mcp-flow.types.d.ts +42 -0
- package/dist/approval/mcp-flow.types.d.ts.map +1 -0
- package/dist/approval/mcp-flow.types.js +2 -0
- package/dist/approval/mcp-flow.types.js.map +1 -0
- package/dist/cli/doctor-adapter-lines.d.ts +4 -0
- package/dist/cli/doctor-adapter-lines.d.ts.map +1 -0
- package/dist/cli/doctor-adapter-lines.js +47 -0
- package/dist/cli/doctor-adapter-lines.js.map +1 -0
- package/dist/cli/doctor-notifications.d.ts +5 -0
- package/dist/cli/doctor-notifications.d.ts.map +1 -0
- package/dist/cli/doctor-notifications.js +10 -0
- package/dist/cli/doctor-notifications.js.map +1 -0
- package/dist/cli/doctor-remote.d.ts +3 -0
- package/dist/cli/doctor-remote.d.ts.map +1 -0
- package/dist/cli/doctor-remote.js +48 -0
- package/dist/cli/doctor-remote.js.map +1 -0
- package/dist/cli/doctor.d.ts +1 -22
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +46 -142
- package/dist/cli/doctor.js.map +1 -1
- package/dist/mcp/evaluate-guard-approval.d.ts +47 -0
- package/dist/mcp/evaluate-guard-approval.d.ts.map +1 -0
- package/dist/mcp/evaluate-guard-approval.js +80 -0
- package/dist/mcp/evaluate-guard-approval.js.map +1 -0
- package/dist/mcp/evaluate-guard-policy.d.ts +3 -0
- package/dist/mcp/evaluate-guard-policy.d.ts.map +1 -0
- package/dist/mcp/evaluate-guard-policy.js +6 -0
- package/dist/mcp/evaluate-guard-policy.js.map +1 -0
- package/dist/mcp/evaluate-guard-proposal.d.ts +16 -0
- package/dist/mcp/evaluate-guard-proposal.d.ts.map +1 -0
- package/dist/mcp/evaluate-guard-proposal.js +57 -0
- package/dist/mcp/evaluate-guard-proposal.js.map +1 -0
- package/dist/mcp/evaluate-guard-run.d.ts +23 -0
- package/dist/mcp/evaluate-guard-run.d.ts.map +1 -0
- package/dist/mcp/evaluate-guard-run.js +75 -0
- package/dist/mcp/evaluate-guard-run.js.map +1 -0
- package/dist/mcp/evaluate-guard-telemetry.d.ts +22 -0
- package/dist/mcp/evaluate-guard-telemetry.d.ts.map +1 -0
- package/dist/mcp/evaluate-guard-telemetry.js +38 -0
- package/dist/mcp/evaluate-guard-telemetry.js.map +1 -0
- package/dist/mcp/evaluate-guard-tier.d.ts +18 -0
- package/dist/mcp/evaluate-guard-tier.d.ts.map +1 -0
- package/dist/mcp/evaluate-guard-tier.js +42 -0
- package/dist/mcp/evaluate-guard-tier.js.map +1 -0
- package/dist/mcp/evaluate-guard.d.ts +2 -5
- package/dist/mcp/evaluate-guard.d.ts.map +1 -1
- package/dist/mcp/evaluate-guard.js +18 -195
- package/dist/mcp/evaluate-guard.js.map +1 -1
- package/dist/mcp/gateway-call-handler.d.ts +9 -0
- package/dist/mcp/gateway-call-handler.d.ts.map +1 -0
- package/dist/mcp/gateway-call-handler.js +61 -0
- package/dist/mcp/gateway-call-handler.js.map +1 -0
- package/dist/mcp/gateway-call-results.d.ts +5 -0
- package/dist/mcp/gateway-call-results.d.ts.map +1 -0
- package/dist/mcp/gateway-call-results.js +14 -0
- package/dist/mcp/gateway-call-results.js.map +1 -0
- package/dist/mcp/gateway-connection-lib.d.ts +54 -0
- package/dist/mcp/gateway-connection-lib.d.ts.map +1 -0
- package/dist/mcp/gateway-connection-lib.js +39 -0
- package/dist/mcp/gateway-connection-lib.js.map +1 -0
- package/dist/mcp/gateway-connection.d.ts +16 -0
- package/dist/mcp/gateway-connection.d.ts.map +1 -0
- package/dist/mcp/gateway-connection.js +54 -0
- package/dist/mcp/gateway-connection.js.map +1 -0
- package/dist/mcp/gateway-log.d.ts +5 -0
- package/dist/mcp/gateway-log.d.ts.map +1 -0
- package/dist/mcp/gateway-log.js +9 -0
- package/dist/mcp/gateway-log.js.map +1 -0
- package/dist/mcp/gateway.d.ts +2 -20
- package/dist/mcp/gateway.d.ts.map +1 -1
- package/dist/mcp/gateway.js +18 -186
- package/dist/mcp/gateway.js.map +1 -1
- package/dist/policies.v1.json +6 -0
- package/native/darwin-amd64/praxis-guard-daemon +0 -0
- package/native/darwin-amd64/praxis-guard-hook +0 -0
- package/native/darwin-arm64/praxis-guard-daemon +0 -0
- package/native/darwin-arm64/praxis-guard-hook +0 -0
- package/native/linux-amd64/praxis-guard-daemon +0 -0
- package/native/linux-amd64/praxis-guard-hook +0 -0
- package/native/linux-arm64/praxis-guard-daemon +0 -0
- package/native/linux-arm64/praxis-guard-hook +0 -0
- package/package.json +1 -1
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
function pushHookScopeLines(lines, scope, entry) {
|
|
2
|
+
const ready = entry.shell && entry.mcp;
|
|
3
|
+
lines.push(` hook (${scope}): ${ready ? "configured" : `missing (run \`auditor setup hook${scope === "project" ? " --project" : ""}\`)`} (${entry.path})`);
|
|
4
|
+
lines.push(` ${entry.shellLabel ?? "beforeShell"}: ${entry.shell ? "ok" : "missing"} | ${entry.mcpLabel ?? "beforeMCP"}: ${entry.mcp ? "ok" : "missing"}`);
|
|
5
|
+
}
|
|
6
|
+
function pushHookLines(lines, adapter, status) {
|
|
7
|
+
const globalEntry = status.hook?.global;
|
|
8
|
+
const projectEntry = status.hook?.project;
|
|
9
|
+
if (globalEntry && adapter.preferredHookScope !== "project") {
|
|
10
|
+
pushHookScopeLines(lines, "global", globalEntry);
|
|
11
|
+
}
|
|
12
|
+
if (projectEntry) {
|
|
13
|
+
pushHookScopeLines(lines, "project", projectEntry);
|
|
14
|
+
}
|
|
15
|
+
else if (adapter.preferredHookScope !== "project") {
|
|
16
|
+
lines.push(" hook (project): none");
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export function adapterReady(adapter, status) {
|
|
20
|
+
if (status.ready === false)
|
|
21
|
+
return false;
|
|
22
|
+
const hookStatus = adapter.preferredHookScope === "project" ? status.hook?.project : status.hook?.global;
|
|
23
|
+
const hookReady = status.hookReady ?? Boolean(hookStatus?.shell && hookStatus.mcp);
|
|
24
|
+
if (adapter.upsertHook && !hookReady)
|
|
25
|
+
return false;
|
|
26
|
+
if (!status.mcp?.configured)
|
|
27
|
+
return false;
|
|
28
|
+
if (adapter.upsertCloud && !status.cloud?.configured)
|
|
29
|
+
return false;
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
export function pushAdapterLines(lines, adapter, status) {
|
|
33
|
+
const installedTag = status.installed ? "installed" : "not installed";
|
|
34
|
+
lines.push(` ${adapter.label} (${installedTag}):`);
|
|
35
|
+
if (adapter.upsertHook)
|
|
36
|
+
pushHookLines(lines, adapter, status);
|
|
37
|
+
const m = status.mcp ?? { configured: false, path: "" };
|
|
38
|
+
lines.push(` mcp: ${m.configured ? "configured" : "missing (run \`auditor setup mcp\`)"} (${m.path})`);
|
|
39
|
+
if (adapter.upsertCloud) {
|
|
40
|
+
const c = status.cloud ?? { configured: false, path: "" };
|
|
41
|
+
lines.push(` cloud (project): ${c.configured ? "configured" : "missing (run \`auditor setup cloud\`)"} (${c.path})`);
|
|
42
|
+
}
|
|
43
|
+
for (const w of status.warnings) {
|
|
44
|
+
lines.push(` warn: ${w}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=doctor-adapter-lines.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor-adapter-lines.js","sourceRoot":"","sources":["../../src/cli/doctor-adapter-lines.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor-notifications.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-notifications.ts"],"names":[],"mappings":"AAAA,wBAAgB,uBAAuB,CACrC,IAAI,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,GACxD,MAAM,CAQR"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function formatNotificationsLine(push) {
|
|
2
|
+
const enabled = push?.enabled === true;
|
|
3
|
+
const devices = push?.devices ?? 0;
|
|
4
|
+
if (enabled && devices > 0) {
|
|
5
|
+
return `Notifications: ready (push on, ${devices} device${devices === 1 ? "" : "s"}).`;
|
|
6
|
+
}
|
|
7
|
+
const reason = !enabled ? "push routing off" : "no enabled device";
|
|
8
|
+
return `Notifications: not set up (${reason}). Enable at https://app.usepraxis.tech/app/account so you get approval alerts.`;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=doctor-notifications.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor-notifications.js","sourceRoot":"","sources":["../../src/cli/doctor-notifications.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,uBAAuB,CACrC,IAAyD;IAEzD,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,CAAC,CAAC;IACnC,IAAI,OAAO,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,kCAAkC,OAAO,UAAU,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACzF,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,mBAAmB,CAAC;IACnE,OAAO,8BAA8B,MAAM,iFAAiF,CAAC;AAC/H,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor-remote.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-remote.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,MAAM,EAAE,EACf,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,IAAI,EAAE,gBAAgB,GAAG,IAAI,GAC5B,OAAO,CAAC,IAAI,CAAC,CA0Cf"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { fetchJson } from "./http-fetch.js";
|
|
2
|
+
import { functionsHttpUrl } from "./policies-callable-url.js";
|
|
3
|
+
import { formatNotificationsLine } from "./doctor-notifications.js";
|
|
4
|
+
export async function appendDoctorRemoteLines(lines, token, meta) {
|
|
5
|
+
const revisionHttpUrl = functionsHttpUrl("policiesGetRevisionHttp");
|
|
6
|
+
if (token) {
|
|
7
|
+
try {
|
|
8
|
+
const rev = await fetchJson({
|
|
9
|
+
url: revisionHttpUrl,
|
|
10
|
+
bearerToken: token,
|
|
11
|
+
});
|
|
12
|
+
const remote = rev.revision;
|
|
13
|
+
lines.push(`Remote Firestore revision: ${remote}`);
|
|
14
|
+
if (meta) {
|
|
15
|
+
lines.push(meta.revision === remote
|
|
16
|
+
? "Policies: in sync with Firestore revision."
|
|
17
|
+
: `Policies: update available (local ${meta.revision} vs remote ${remote}).`);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
lines.push(`Policies: remote revision ${remote} (no local sync meta).`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
catch (e) {
|
|
24
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
25
|
+
lines.push(`Remote revision check failed: ${msg}`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
lines.push("Remote revision: (skip — not authenticated; run `auditor login`)");
|
|
30
|
+
}
|
|
31
|
+
if (token) {
|
|
32
|
+
try {
|
|
33
|
+
const who = await fetchJson({
|
|
34
|
+
url: functionsHttpUrl("guardWhoAmIHttp"),
|
|
35
|
+
bearerToken: token,
|
|
36
|
+
});
|
|
37
|
+
lines.push(formatNotificationsLine(who.push));
|
|
38
|
+
}
|
|
39
|
+
catch (e) {
|
|
40
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
41
|
+
lines.push(`Notifications: check failed (${msg})`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
lines.push("Notifications: (skip, not authenticated)");
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=doctor-remote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor-remote.js","sourceRoot":"","sources":["../../src/cli/doctor-remote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAGpE,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,KAAe,EACf,KAAyB,EACzB,IAA6B;IAE7B,MAAM,eAAe,GAAG,gBAAgB,CAAC,yBAAyB,CAAC,CAAC;IAEpE,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,SAAS,CAAuB;gBAChD,GAAG,EAAE,eAAe;gBACpB,WAAW,EAAE,KAAK;aACnB,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,8BAA8B,MAAM,EAAE,CAAC,CAAC;YACnD,IAAI,IAAI,EAAE,CAAC;gBACT,KAAK,CAAC,IAAI,CACR,IAAI,CAAC,QAAQ,KAAK,MAAM;oBACtB,CAAC,CAAC,4CAA4C;oBAC9C,CAAC,CAAC,qCAAqC,IAAI,CAAC,QAAQ,cAAc,MAAM,IAAI,CAC/E,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,6BAA6B,MAAM,wBAAwB,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;IACjF,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,SAAS,CAAqD;gBAC9E,GAAG,EAAE,gBAAgB,CAAC,iBAAiB,CAAC;gBACxC,WAAW,EAAE,KAAK;aACnB,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC,gCAAgC,GAAG,GAAG,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IACzD,CAAC;AACH,CAAC"}
|
package/dist/cli/doctor.d.ts
CHANGED
|
@@ -4,31 +4,10 @@ export type Readiness = {
|
|
|
4
4
|
readySetup: boolean;
|
|
5
5
|
enforced: boolean;
|
|
6
6
|
};
|
|
7
|
-
/**
|
|
8
|
-
* Compute doctor readiness from adapter statuses + auth.
|
|
9
|
-
*
|
|
10
|
-
* readySetup : at least one adapter has every declared surface configured.
|
|
11
|
-
* enforced : at least one READY adapter declares a pre-tool hook (Cursor /
|
|
12
|
-
* Claude Code / Codex). adapterReady already requires that hook to
|
|
13
|
-
* be configured, so a ready hook-adapter is genuinely enforcing.
|
|
14
|
-
* If the only ready adapters lack upsertHook (Claude Desktop is
|
|
15
|
-
* MCP-only), governance is advisory: the model must choose to call
|
|
16
|
-
* guard and can be bypassed.
|
|
17
|
-
* ready : readySetup AND authenticated.
|
|
18
|
-
*/
|
|
19
7
|
export declare function resolveReadiness(adapterStatuses: {
|
|
20
8
|
adapter: AgentAdapter;
|
|
21
9
|
status: AgentStatus;
|
|
22
10
|
}[], hasAuth: boolean): Readiness;
|
|
23
|
-
|
|
24
|
-
* Doctor line for push-notification readiness. Pure so it can be unit tested;
|
|
25
|
-
* the data comes from guardWhoAmIHttp. Ready means push routing is on AND at
|
|
26
|
-
* least one device is enabled, which is what the server requires to actually
|
|
27
|
-
* send an approval push.
|
|
28
|
-
*/
|
|
29
|
-
export declare function formatNotificationsLine(push: {
|
|
30
|
-
enabled?: boolean;
|
|
31
|
-
devices?: number;
|
|
32
|
-
} | undefined): string;
|
|
11
|
+
export { formatNotificationsLine } from "./doctor-notifications.js";
|
|
33
12
|
export declare function runDoctor(): Promise<void>;
|
|
34
13
|
//# sourceMappingURL=doctor.d.ts.map
|
package/dist/cli/doctor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAWtE,MAAM,MAAM,SAAS,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC;AAEnF,wBAAgB,gBAAgB,CAC9B,eAAe,EAAE;IAAE,OAAO,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,EAAE,EACjE,OAAO,EAAE,OAAO,GACf,SAAS,CAOX;AAED,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAiFpE,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAiB/C"}
|
package/dist/cli/doctor.js
CHANGED
|
@@ -6,109 +6,38 @@ import { inspectRequestBindingIndex } from "../bridge/request-binding-index.js";
|
|
|
6
6
|
import { executionTicketDir } from "../bridge/execution-ticket.js";
|
|
7
7
|
import { shellBridgeDir } from "../bridge/shell-approval-bridge.js";
|
|
8
8
|
import { guardSubpath } from "../bridge/guard-storage-root.js";
|
|
9
|
-
import { fetchJson } from "./http-fetch.js";
|
|
10
9
|
import { credentialsPath, readCredentialsFileMode, resolveGuardToken } from "./credentials.js";
|
|
11
10
|
import { getInstallId } from "./install-id.js";
|
|
12
|
-
import { functionsHttpUrl } from "./policies-callable-url.js";
|
|
13
11
|
import { readPoliciesMetaFile } from "./policies-meta.js";
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
*
|
|
17
|
-
* readySetup : at least one adapter has every declared surface configured.
|
|
18
|
-
* enforced : at least one READY adapter declares a pre-tool hook (Cursor /
|
|
19
|
-
* Claude Code / Codex). adapterReady already requires that hook to
|
|
20
|
-
* be configured, so a ready hook-adapter is genuinely enforcing.
|
|
21
|
-
* If the only ready adapters lack upsertHook (Claude Desktop is
|
|
22
|
-
* MCP-only), governance is advisory: the model must choose to call
|
|
23
|
-
* guard and can be bypassed.
|
|
24
|
-
* ready : readySetup AND authenticated.
|
|
25
|
-
*/
|
|
12
|
+
import { adapterReady, pushAdapterLines } from "./doctor-adapter-lines.js";
|
|
13
|
+
import { appendDoctorRemoteLines } from "./doctor-remote.js";
|
|
26
14
|
export function resolveReadiness(adapterStatuses, hasAuth) {
|
|
27
15
|
const readyAdapters = adapterStatuses.filter(({ adapter, status }) => adapterReady(adapter, status));
|
|
28
16
|
const readySetup = readyAdapters.length > 0;
|
|
29
17
|
const enforced = readyAdapters.some(({ adapter }) => typeof adapter.upsertHook === "function");
|
|
30
18
|
return { ready: readySetup && hasAuth, readySetup, enforced };
|
|
31
19
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
if (enabled && devices > 0) {
|
|
42
|
-
return `Notifications: ready (push on, ${devices} device${devices === 1 ? "" : "s"}).`;
|
|
43
|
-
}
|
|
44
|
-
const reason = !enabled ? "push routing off" : "no enabled device";
|
|
45
|
-
return `Notifications: not set up (${reason}). Enable at https://app.usepraxis.tech/app/account so you get approval alerts.`;
|
|
46
|
-
}
|
|
47
|
-
function adapterReady(adapter, status) {
|
|
48
|
-
if (status.ready === false)
|
|
49
|
-
return false;
|
|
50
|
-
// For an adapter to count as "ready", every surface it declares MUST be configured.
|
|
51
|
-
// Cursor (hook + mcp + cloud) requires all three; Claude Desktop (mcp only) just needs MCP.
|
|
52
|
-
const hookStatus = adapter.preferredHookScope === "project" ? status.hook?.project : status.hook?.global;
|
|
53
|
-
const hookReady = status.hookReady ?? Boolean(hookStatus?.shell && hookStatus.mcp);
|
|
54
|
-
if (adapter.upsertHook && !hookReady)
|
|
55
|
-
return false;
|
|
56
|
-
if (!status.mcp?.configured)
|
|
57
|
-
return false;
|
|
58
|
-
if (adapter.upsertCloud && !status.cloud?.configured)
|
|
59
|
-
return false;
|
|
60
|
-
return true;
|
|
61
|
-
}
|
|
62
|
-
function pushAdapterLines(lines, adapter, status) {
|
|
63
|
-
const installedTag = status.installed ? "installed" : "not installed";
|
|
64
|
-
lines.push(` ${adapter.label} (${installedTag}):`);
|
|
65
|
-
if (adapter.upsertHook) {
|
|
66
|
-
const globalEntry = status.hook?.global;
|
|
67
|
-
const projectEntry = status.hook?.project;
|
|
68
|
-
if (globalEntry && adapter.preferredHookScope !== "project") {
|
|
69
|
-
const ready = globalEntry.shell && globalEntry.mcp;
|
|
70
|
-
lines.push(` hook (global): ${ready ? "configured" : "missing (run \`auditor setup hook\`)"} (${globalEntry.path})`);
|
|
71
|
-
lines.push(` ${globalEntry.shellLabel ?? "beforeShell"}: ${globalEntry.shell ? "ok" : "missing"} | ${globalEntry.mcpLabel ?? "beforeMCP"}: ${globalEntry.mcp ? "ok" : "missing"}`);
|
|
72
|
-
}
|
|
73
|
-
if (projectEntry) {
|
|
74
|
-
const ready = projectEntry.shell && projectEntry.mcp;
|
|
75
|
-
lines.push(` hook (project): ${ready ? "configured" : "missing (run \`auditor setup hook --project\`)"} (${projectEntry.path})`);
|
|
76
|
-
lines.push(` ${projectEntry.shellLabel ?? "beforeShell"}: ${projectEntry.shell ? "ok" : "missing"} | ${projectEntry.mcpLabel ?? "beforeMCP"}: ${projectEntry.mcp ? "ok" : "missing"}`);
|
|
77
|
-
}
|
|
78
|
-
else if (adapter.preferredHookScope !== "project") {
|
|
79
|
-
lines.push(" hook (project): none");
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
const m = status.mcp ?? { configured: false, path: "" };
|
|
83
|
-
lines.push(` mcp: ${m.configured ? "configured" : "missing (run \`auditor setup mcp\`)"} (${m.path})`);
|
|
84
|
-
if (adapter.upsertCloud) {
|
|
85
|
-
const c = status.cloud ?? { configured: false, path: "" };
|
|
86
|
-
lines.push(` cloud (project): ${c.configured ? "configured" : "missing (run \`auditor setup cloud\`)"} (${c.path})`);
|
|
87
|
-
}
|
|
88
|
-
for (const w of status.warnings) {
|
|
89
|
-
lines.push(` warn: ${w}`);
|
|
90
|
-
}
|
|
20
|
+
export { formatNotificationsLine } from "./doctor-notifications.js";
|
|
21
|
+
function policySourceLabel(meta, policyPath) {
|
|
22
|
+
if (process.env.PRAXIS_POLICIES_V1_PATH?.trim())
|
|
23
|
+
return "env:PRAXIS_POLICIES_V1_PATH";
|
|
24
|
+
if (meta?.source === "bundled-bootstrap")
|
|
25
|
+
return "~/.praxis (bootstrapped from bundled policy)";
|
|
26
|
+
if (existsSync(policyPath))
|
|
27
|
+
return "~/.praxis (local canonical file)";
|
|
28
|
+
return "missing (will bootstrap from bundled on first load)";
|
|
91
29
|
}
|
|
92
|
-
|
|
93
|
-
const cwd = process.cwd();
|
|
94
|
-
const auditPath = process.env.PRAXIS_GUARD_AUDIT_LOG ?? guardSubpath("audit.jsonl", cwd);
|
|
30
|
+
function buildDoctorHeaderLines(cwd, meta) {
|
|
95
31
|
const policyPath = process.env.PRAXIS_POLICIES_V1_PATH?.trim() || defaultPoliciesV1Path();
|
|
96
32
|
const metaPath = process.env.PRAXIS_POLICIES_META_PATH?.trim() || defaultPoliciesMetaPath();
|
|
97
|
-
const
|
|
98
|
-
|
|
99
|
-
? "env:PRAXIS_POLICIES_V1_PATH"
|
|
100
|
-
: meta?.source === "bundled-bootstrap"
|
|
101
|
-
? "~/.praxis (bootstrapped from bundled policy)"
|
|
102
|
-
: existsSync(policyPath)
|
|
103
|
-
? "~/.praxis (local canonical file)"
|
|
104
|
-
: "missing (will bootstrap from bundled on first load)";
|
|
105
|
-
const lines = [
|
|
33
|
+
const auditPath = process.env.PRAXIS_GUARD_AUDIT_LOG ?? guardSubpath("audit.jsonl", cwd);
|
|
34
|
+
return [
|
|
106
35
|
`auditor doctor`,
|
|
107
36
|
`Install ID: ${getInstallId()}`,
|
|
108
37
|
`MCP stdio: auditor mcp (Cursor/Codex: command auditor, args [mcp])`,
|
|
109
38
|
`Node: ${process.version}`,
|
|
110
39
|
`Policy file: ${policyPath}`,
|
|
111
|
-
`Policy source: ${
|
|
40
|
+
`Policy source: ${policySourceLabel(meta, policyPath)}`,
|
|
112
41
|
`Policies meta: ${metaPath}`,
|
|
113
42
|
meta
|
|
114
43
|
? ` Local synced revision: ${meta.revision}${meta.syncedAt ? ` (at ${meta.syncedAt})` : ""}`
|
|
@@ -118,6 +47,8 @@ export async function runDoctor() {
|
|
|
118
47
|
`Audit log: ${auditPath}`,
|
|
119
48
|
`PRAXIS_GUARD_AUDIT_LOG: ${process.env.PRAXIS_GUARD_AUDIT_LOG ?? "(unset; default above)"}`,
|
|
120
49
|
];
|
|
50
|
+
}
|
|
51
|
+
function appendBindingHealthLines(lines) {
|
|
121
52
|
const bindingHealth = inspectRequestBindingIndex();
|
|
122
53
|
lines.push(`Request bindings: ${bindingHealth.bindingCount} under ~/.praxis/guard/request-bindings/`);
|
|
123
54
|
if (bindingHealth.lastBinding) {
|
|
@@ -126,16 +57,8 @@ export async function runDoctor() {
|
|
|
126
57
|
if (bindingHealth.legacyHomeTicketsDir) {
|
|
127
58
|
lines.push(" warn: ~/.praxis/guard/tickets exists (legacy misroute). Tickets belong under <repo>/.praxis/guard/tickets/.");
|
|
128
59
|
}
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
for (const adapter of ALL_ADAPTERS) {
|
|
132
|
-
const status = await adapter.status({ projectDir: cwd }).catch(() => null);
|
|
133
|
-
if (!status)
|
|
134
|
-
continue;
|
|
135
|
-
adapterStatuses.push({ adapter, status });
|
|
136
|
-
pushAdapterLines(lines, adapter, status);
|
|
137
|
-
}
|
|
138
|
-
const token = resolveGuardToken() || process.env.PRAXIS_FIREBASE_ID_TOKEN?.trim();
|
|
60
|
+
}
|
|
61
|
+
function appendAuthLines(lines, token) {
|
|
139
62
|
const tokenSource = process.env.PRAXIS_GUARD_TOKEN?.trim()
|
|
140
63
|
? "env:PRAXIS_GUARD_TOKEN"
|
|
141
64
|
: token
|
|
@@ -145,53 +68,34 @@ export async function runDoctor() {
|
|
|
145
68
|
? `Auth: ${tokenSource} (token: ${token.slice(0, 6)}...${token.slice(-3)})`
|
|
146
69
|
: "Auth: (none — run `auditor login`)");
|
|
147
70
|
const credsMode = readCredentialsFileMode();
|
|
148
|
-
if (credsMode
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
lines.push(meta.revision === remote
|
|
164
|
-
? "Policies: in sync with Firestore revision."
|
|
165
|
-
: `Policies: update available (local ${meta.revision} vs remote ${remote}).`);
|
|
166
|
-
}
|
|
167
|
-
else {
|
|
168
|
-
lines.push(`Policies: remote revision ${remote} (no local sync meta).`);
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
catch (e) {
|
|
172
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
173
|
-
lines.push(`Remote revision check failed: ${msg}`);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
else {
|
|
177
|
-
lines.push("Remote revision: (skip — not authenticated; run `auditor login`)");
|
|
178
|
-
}
|
|
179
|
-
if (token) {
|
|
180
|
-
try {
|
|
181
|
-
const who = await fetchJson({
|
|
182
|
-
url: functionsHttpUrl("guardWhoAmIHttp"),
|
|
183
|
-
bearerToken: token,
|
|
184
|
-
});
|
|
185
|
-
lines.push(formatNotificationsLine(who.push));
|
|
186
|
-
}
|
|
187
|
-
catch (e) {
|
|
188
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
189
|
-
lines.push(`Notifications: check failed (${msg})`);
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
else {
|
|
193
|
-
lines.push("Notifications: (skip, not authenticated)");
|
|
71
|
+
if (credsMode === null)
|
|
72
|
+
return;
|
|
73
|
+
lines.push(credsMode === 0o600
|
|
74
|
+
? `Credentials mode: 0${credsMode.toString(8)}`
|
|
75
|
+
: `Credentials mode: 0${credsMode.toString(8)} (expected 0600)`);
|
|
76
|
+
}
|
|
77
|
+
async function collectAdapterStatuses(cwd, lines) {
|
|
78
|
+
lines.push("Agents:");
|
|
79
|
+
const adapterStatuses = [];
|
|
80
|
+
for (const adapter of ALL_ADAPTERS) {
|
|
81
|
+
const status = await adapter.status({ projectDir: cwd }).catch(() => null);
|
|
82
|
+
if (!status)
|
|
83
|
+
continue;
|
|
84
|
+
adapterStatuses.push({ adapter, status });
|
|
85
|
+
pushAdapterLines(lines, adapter, status);
|
|
194
86
|
}
|
|
87
|
+
return adapterStatuses;
|
|
88
|
+
}
|
|
89
|
+
export async function runDoctor() {
|
|
90
|
+
const cwd = process.cwd();
|
|
91
|
+
const metaPath = process.env.PRAXIS_POLICIES_META_PATH?.trim() || defaultPoliciesMetaPath();
|
|
92
|
+
const meta = await readPoliciesMetaFile(metaPath);
|
|
93
|
+
const lines = buildDoctorHeaderLines(cwd, meta);
|
|
94
|
+
appendBindingHealthLines(lines);
|
|
95
|
+
const adapterStatuses = await collectAdapterStatuses(cwd, lines);
|
|
96
|
+
const token = resolveGuardToken() || process.env.PRAXIS_FIREBASE_ID_TOKEN?.trim();
|
|
97
|
+
appendAuthLines(lines, token);
|
|
98
|
+
await appendDoctorRemoteLines(lines, token, meta);
|
|
195
99
|
const readyAuth = !!token;
|
|
196
100
|
const { ready, readySetup, enforced } = resolveReadiness(adapterStatuses, readyAuth);
|
|
197
101
|
const modeSuffix = ready ? (enforced ? " (enforced)" : " (advisory only)") : "";
|
package/dist/cli/doctor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { ApprovalBlock } from "./guard-approval-block.js";
|
|
2
|
+
import { applyGuardMode, type GuardDecision } from "./guard-mode.js";
|
|
3
|
+
import type { GuardInput } from "./guard-schemas.js";
|
|
4
|
+
import type { Tier } from "../policy/index.js";
|
|
5
|
+
import type { ShellAnalysis } from "../shell/analyze-command.js";
|
|
6
|
+
import type { GuardEvaluation } from "../shell/guard-eval.js";
|
|
7
|
+
export declare function shouldResolveMutateApproval(input: {
|
|
8
|
+
skipped: boolean;
|
|
9
|
+
tier: Tier;
|
|
10
|
+
mode: GuardInput["mode"];
|
|
11
|
+
hookApprovalRequestId: string | null;
|
|
12
|
+
hookWaitMs: number;
|
|
13
|
+
}): boolean;
|
|
14
|
+
export declare function resolveGuardMutateApproval(input: {
|
|
15
|
+
guardInput: GuardInput;
|
|
16
|
+
argv: string[];
|
|
17
|
+
storageRoot: string;
|
|
18
|
+
eventId: string;
|
|
19
|
+
policyRevision: number | null;
|
|
20
|
+
reasons: {
|
|
21
|
+
code: string;
|
|
22
|
+
message: string;
|
|
23
|
+
details?: unknown;
|
|
24
|
+
}[];
|
|
25
|
+
analysis?: ShellAnalysis;
|
|
26
|
+
}): Promise<{
|
|
27
|
+
enforceDecision: GuardDecision;
|
|
28
|
+
approvalBlock: ApprovalBlock;
|
|
29
|
+
approvalRequestId: string | null;
|
|
30
|
+
}>;
|
|
31
|
+
export declare function resolveGuardEnforcement(input: {
|
|
32
|
+
guardInput: GuardInput;
|
|
33
|
+
skipped: boolean;
|
|
34
|
+
tier: Tier;
|
|
35
|
+
reasons: GuardEvaluation["reasons"];
|
|
36
|
+
argv: string[];
|
|
37
|
+
storageRoot: string;
|
|
38
|
+
eventId: string;
|
|
39
|
+
policyRevision: number | null;
|
|
40
|
+
analysis?: ShellAnalysis;
|
|
41
|
+
}): Promise<{
|
|
42
|
+
decision: GuardDecision;
|
|
43
|
+
shadow: ReturnType<typeof applyGuardMode>["shadow"];
|
|
44
|
+
approvalBlock: ApprovalBlock;
|
|
45
|
+
approvalRequestId: string | null;
|
|
46
|
+
}>;
|
|
47
|
+
//# sourceMappingURL=evaluate-guard-approval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluate-guard-approval.d.ts","sourceRoot":"","sources":["../../src/mcp/evaluate-guard-approval.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IACzB,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAWV;AAED,wBAAsB,0BAA0B,CAAC,KAAK,EAAE;IACtD,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;IAChE,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B,GAAG,OAAO,CAAC;IACV,eAAe,EAAE,aAAa,CAAC;IAC/B,aAAa,EAAE,aAAa,CAAC;IAC7B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,CAAC,CAUD;AA+CD,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IACpC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B,GAAG,OAAO,CAAC;IACV,QAAQ,EAAE,aAAa,CAAC;IACxB,MAAM,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC;IACpD,aAAa,EAAE,aAAa,CAAC;IAC7B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,CAAC,CA+BD"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { resolveEnforceMutateApproval } from "./guard-approval-block.js";
|
|
2
|
+
import { applyGuardMode } from "./guard-mode.js";
|
|
3
|
+
import { resolveTierDecision } from "./evaluate-guard-tier.js";
|
|
4
|
+
export function shouldResolveMutateApproval(input) {
|
|
5
|
+
const redeemHookApproval = !input.skipped &&
|
|
6
|
+
input.tier !== "DESTRUCTIVE" &&
|
|
7
|
+
input.mode === "enforce" &&
|
|
8
|
+
input.hookApprovalRequestId !== null &&
|
|
9
|
+
input.hookWaitMs > 0;
|
|
10
|
+
return (redeemHookApproval ||
|
|
11
|
+
(!input.skipped && input.tier !== "DESTRUCTIVE" && input.tier !== "READ" && input.mode === "enforce"));
|
|
12
|
+
}
|
|
13
|
+
export async function resolveGuardMutateApproval(input) {
|
|
14
|
+
return resolveEnforceMutateApproval({
|
|
15
|
+
guardInput: input.guardInput,
|
|
16
|
+
argv: input.argv,
|
|
17
|
+
storageRoot: input.storageRoot,
|
|
18
|
+
eventId: input.eventId,
|
|
19
|
+
policyRevision: input.policyRevision,
|
|
20
|
+
reasons: input.reasons,
|
|
21
|
+
approval_fingerprint: input.analysis?.approval_fingerprint_payload ?? null,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
async function applyMutateApprovalIfNeeded(input) {
|
|
25
|
+
const hookApprovalRequestId = input.guardInput.context?.approval?.request_id?.trim() || null;
|
|
26
|
+
const hookWaitMs = input.guardInput.context?.wait_ms ?? 0;
|
|
27
|
+
if (!shouldResolveMutateApproval({
|
|
28
|
+
skipped: input.skipped,
|
|
29
|
+
tier: input.tier,
|
|
30
|
+
mode: input.guardInput.mode,
|
|
31
|
+
hookApprovalRequestId,
|
|
32
|
+
hookWaitMs,
|
|
33
|
+
})) {
|
|
34
|
+
return {
|
|
35
|
+
enforceDecision: input.enforceDecision,
|
|
36
|
+
approvalBlock: input.approvalBlock,
|
|
37
|
+
approvalRequestId: null,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
return resolveGuardMutateApproval({
|
|
41
|
+
guardInput: input.guardInput,
|
|
42
|
+
argv: input.argv,
|
|
43
|
+
storageRoot: input.storageRoot,
|
|
44
|
+
eventId: input.eventId,
|
|
45
|
+
policyRevision: input.policyRevision,
|
|
46
|
+
reasons: input.reasons,
|
|
47
|
+
analysis: input.analysis,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
export async function resolveGuardEnforcement(input) {
|
|
51
|
+
let { enforceDecision, approvalBlock } = resolveTierDecision({
|
|
52
|
+
mode: input.guardInput.mode,
|
|
53
|
+
skipped: input.skipped,
|
|
54
|
+
tier: input.tier,
|
|
55
|
+
});
|
|
56
|
+
const mutate = await applyMutateApprovalIfNeeded({
|
|
57
|
+
guardInput: input.guardInput,
|
|
58
|
+
skipped: input.skipped,
|
|
59
|
+
tier: input.tier,
|
|
60
|
+
reasons: input.reasons,
|
|
61
|
+
argv: input.argv,
|
|
62
|
+
storageRoot: input.storageRoot,
|
|
63
|
+
eventId: input.eventId,
|
|
64
|
+
policyRevision: input.policyRevision,
|
|
65
|
+
analysis: input.analysis,
|
|
66
|
+
enforceDecision,
|
|
67
|
+
approvalBlock,
|
|
68
|
+
});
|
|
69
|
+
enforceDecision = mutate.enforceDecision;
|
|
70
|
+
approvalBlock = mutate.approvalBlock;
|
|
71
|
+
const { decision, shadow } = applyGuardMode({
|
|
72
|
+
mode: input.guardInput.mode,
|
|
73
|
+
skipped: input.skipped,
|
|
74
|
+
tier: input.tier,
|
|
75
|
+
policyReasons: input.reasons,
|
|
76
|
+
enforceDecision,
|
|
77
|
+
});
|
|
78
|
+
return { decision, shadow, approvalBlock, approvalRequestId: mutate.approvalRequestId };
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=evaluate-guard-approval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluate-guard-approval.js","sourceRoot":"","sources":["../../src/mcp/evaluate-guard-approval.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluate-guard-policy.d.ts","sourceRoot":"","sources":["../../src/mcp/evaluate-guard-policy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAGlF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { loadPoliciesV1, readPoliciesV1Revision } from "../policy/index.js";
|
|
2
|
+
export async function loadGuardPolicyState(policyState) {
|
|
3
|
+
policyState.policy = await loadPoliciesV1();
|
|
4
|
+
policyState.policyRevision = await readPoliciesV1Revision();
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=evaluate-guard-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluate-guard-policy.js","sourceRoot":"","sources":["../../src/mcp/evaluate-guard-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAG5E,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,WAAwB;IACjE,WAAW,CAAC,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC;IAC5C,WAAW,CAAC,cAAc,GAAG,MAAM,sBAAsB,EAAE,CAAC;AAC9D,CAAC"}
|