@praxis.guard/auditor-cli 0.0.61 → 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.
Files changed (106) hide show
  1. package/dist/approval/mcp-flow-create.d.ts +3 -0
  2. package/dist/approval/mcp-flow-create.d.ts.map +1 -0
  3. package/dist/approval/mcp-flow-create.js +76 -0
  4. package/dist/approval/mcp-flow-create.js.map +1 -0
  5. package/dist/approval/mcp-flow-existing.d.ts +14 -0
  6. package/dist/approval/mcp-flow-existing.d.ts.map +1 -0
  7. package/dist/approval/mcp-flow-existing.js +43 -0
  8. package/dist/approval/mcp-flow-existing.js.map +1 -0
  9. package/dist/approval/mcp-flow-outcome.d.ts +5 -0
  10. package/dist/approval/mcp-flow-outcome.d.ts.map +1 -0
  11. package/dist/approval/mcp-flow-outcome.js +19 -0
  12. package/dist/approval/mcp-flow-outcome.js.map +1 -0
  13. package/dist/approval/mcp-flow-pending.d.ts +7 -0
  14. package/dist/approval/mcp-flow-pending.d.ts.map +1 -0
  15. package/dist/approval/mcp-flow-pending.js +25 -0
  16. package/dist/approval/mcp-flow-pending.js.map +1 -0
  17. package/dist/approval/mcp-flow-redeem.d.ts +13 -0
  18. package/dist/approval/mcp-flow-redeem.d.ts.map +1 -0
  19. package/dist/approval/mcp-flow-redeem.js +20 -0
  20. package/dist/approval/mcp-flow-redeem.js.map +1 -0
  21. package/dist/approval/mcp-flow.d.ts +6 -28
  22. package/dist/approval/mcp-flow.d.ts.map +1 -1
  23. package/dist/approval/mcp-flow.js +21 -129
  24. package/dist/approval/mcp-flow.js.map +1 -1
  25. package/dist/approval/mcp-flow.types.d.ts +42 -0
  26. package/dist/approval/mcp-flow.types.d.ts.map +1 -0
  27. package/dist/approval/mcp-flow.types.js +2 -0
  28. package/dist/approval/mcp-flow.types.js.map +1 -0
  29. package/dist/cli/doctor-adapter-lines.d.ts +4 -0
  30. package/dist/cli/doctor-adapter-lines.d.ts.map +1 -0
  31. package/dist/cli/doctor-adapter-lines.js +47 -0
  32. package/dist/cli/doctor-adapter-lines.js.map +1 -0
  33. package/dist/cli/doctor-notifications.d.ts +5 -0
  34. package/dist/cli/doctor-notifications.d.ts.map +1 -0
  35. package/dist/cli/doctor-notifications.js +10 -0
  36. package/dist/cli/doctor-notifications.js.map +1 -0
  37. package/dist/cli/doctor-remote.d.ts +3 -0
  38. package/dist/cli/doctor-remote.d.ts.map +1 -0
  39. package/dist/cli/doctor-remote.js +48 -0
  40. package/dist/cli/doctor-remote.js.map +1 -0
  41. package/dist/cli/doctor.d.ts +1 -12
  42. package/dist/cli/doctor.d.ts.map +1 -1
  43. package/dist/cli/doctor.js +46 -111
  44. package/dist/cli/doctor.js.map +1 -1
  45. package/dist/mcp/evaluate-guard-approval.d.ts +47 -0
  46. package/dist/mcp/evaluate-guard-approval.d.ts.map +1 -0
  47. package/dist/mcp/evaluate-guard-approval.js +80 -0
  48. package/dist/mcp/evaluate-guard-approval.js.map +1 -0
  49. package/dist/mcp/evaluate-guard-policy.d.ts +3 -0
  50. package/dist/mcp/evaluate-guard-policy.d.ts.map +1 -0
  51. package/dist/mcp/evaluate-guard-policy.js +6 -0
  52. package/dist/mcp/evaluate-guard-policy.js.map +1 -0
  53. package/dist/mcp/evaluate-guard-proposal.d.ts +16 -0
  54. package/dist/mcp/evaluate-guard-proposal.d.ts.map +1 -0
  55. package/dist/mcp/evaluate-guard-proposal.js +57 -0
  56. package/dist/mcp/evaluate-guard-proposal.js.map +1 -0
  57. package/dist/mcp/evaluate-guard-run.d.ts +23 -0
  58. package/dist/mcp/evaluate-guard-run.d.ts.map +1 -0
  59. package/dist/mcp/evaluate-guard-run.js +75 -0
  60. package/dist/mcp/evaluate-guard-run.js.map +1 -0
  61. package/dist/mcp/evaluate-guard-telemetry.d.ts +22 -0
  62. package/dist/mcp/evaluate-guard-telemetry.d.ts.map +1 -0
  63. package/dist/mcp/evaluate-guard-telemetry.js +38 -0
  64. package/dist/mcp/evaluate-guard-telemetry.js.map +1 -0
  65. package/dist/mcp/evaluate-guard-tier.d.ts +18 -0
  66. package/dist/mcp/evaluate-guard-tier.d.ts.map +1 -0
  67. package/dist/mcp/evaluate-guard-tier.js +42 -0
  68. package/dist/mcp/evaluate-guard-tier.js.map +1 -0
  69. package/dist/mcp/evaluate-guard.d.ts +2 -5
  70. package/dist/mcp/evaluate-guard.d.ts.map +1 -1
  71. package/dist/mcp/evaluate-guard.js +18 -195
  72. package/dist/mcp/evaluate-guard.js.map +1 -1
  73. package/dist/mcp/gateway-call-handler.d.ts +9 -0
  74. package/dist/mcp/gateway-call-handler.d.ts.map +1 -0
  75. package/dist/mcp/gateway-call-handler.js +61 -0
  76. package/dist/mcp/gateway-call-handler.js.map +1 -0
  77. package/dist/mcp/gateway-call-results.d.ts +5 -0
  78. package/dist/mcp/gateway-call-results.d.ts.map +1 -0
  79. package/dist/mcp/gateway-call-results.js +14 -0
  80. package/dist/mcp/gateway-call-results.js.map +1 -0
  81. package/dist/mcp/gateway-connection-lib.d.ts +54 -0
  82. package/dist/mcp/gateway-connection-lib.d.ts.map +1 -0
  83. package/dist/mcp/gateway-connection-lib.js +39 -0
  84. package/dist/mcp/gateway-connection-lib.js.map +1 -0
  85. package/dist/mcp/gateway-connection.d.ts +16 -0
  86. package/dist/mcp/gateway-connection.d.ts.map +1 -0
  87. package/dist/mcp/gateway-connection.js +54 -0
  88. package/dist/mcp/gateway-connection.js.map +1 -0
  89. package/dist/mcp/gateway-log.d.ts +5 -0
  90. package/dist/mcp/gateway-log.d.ts.map +1 -0
  91. package/dist/mcp/gateway-log.js +9 -0
  92. package/dist/mcp/gateway-log.js.map +1 -0
  93. package/dist/mcp/gateway.d.ts +2 -20
  94. package/dist/mcp/gateway.d.ts.map +1 -1
  95. package/dist/mcp/gateway.js +18 -186
  96. package/dist/mcp/gateway.js.map +1 -1
  97. package/dist/policies.v1.json +6 -0
  98. package/native/darwin-amd64/praxis-guard-daemon +0 -0
  99. package/native/darwin-amd64/praxis-guard-hook +0 -0
  100. package/native/darwin-arm64/praxis-guard-daemon +0 -0
  101. package/native/darwin-arm64/praxis-guard-hook +0 -0
  102. package/native/linux-amd64/praxis-guard-daemon +0 -0
  103. package/native/linux-amd64/praxis-guard-hook +0 -0
  104. package/native/linux-arm64/praxis-guard-daemon +0 -0
  105. package/native/linux-arm64/praxis-guard-hook +0 -0
  106. 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,5 @@
1
+ export declare function formatNotificationsLine(push: {
2
+ enabled?: boolean;
3
+ devices?: number;
4
+ } | undefined): string;
5
+ //# sourceMappingURL=doctor-notifications.d.ts.map
@@ -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,3 @@
1
+ import type { PoliciesMetaFile } from "./policies-meta.js";
2
+ export declare function appendDoctorRemoteLines(lines: string[], token: string | undefined, meta: PoliciesMetaFile | null): Promise<void>;
3
+ //# sourceMappingURL=doctor-remote.d.ts.map
@@ -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"}
@@ -4,21 +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;
11
+ export { formatNotificationsLine } from "./doctor-notifications.js";
23
12
  export declare function runDoctor(): Promise<void>;
24
13
  //# sourceMappingURL=doctor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AAMA,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;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,eAAe,EAAE;IAAE,OAAO,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,EAAE,EACjE,OAAO,EAAE,OAAO,GACf,SAAS,CAOX;AA6DD,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CA8G/C"}
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"}
@@ -6,94 +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
- * Compute doctor readiness from adapter statuses + auth.
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
- function adapterReady(adapter, status) {
33
- if (status.ready === false)
34
- return false;
35
- // For an adapter to count as "ready", every surface it declares MUST be configured.
36
- // Cursor (hook + mcp + cloud) requires all three; Claude Desktop (mcp only) just needs MCP.
37
- const hookStatus = adapter.preferredHookScope === "project" ? status.hook?.project : status.hook?.global;
38
- const hookReady = status.hookReady ?? Boolean(hookStatus?.shell && hookStatus.mcp);
39
- if (adapter.upsertHook && !hookReady)
40
- return false;
41
- if (!status.mcp?.configured)
42
- return false;
43
- if (adapter.upsertCloud && !status.cloud?.configured)
44
- return false;
45
- return true;
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)";
46
29
  }
47
- function pushAdapterLines(lines, adapter, status) {
48
- const installedTag = status.installed ? "installed" : "not installed";
49
- lines.push(` ${adapter.label} (${installedTag}):`);
50
- if (adapter.upsertHook) {
51
- const globalEntry = status.hook?.global;
52
- const projectEntry = status.hook?.project;
53
- if (globalEntry && adapter.preferredHookScope !== "project") {
54
- const ready = globalEntry.shell && globalEntry.mcp;
55
- lines.push(` hook (global): ${ready ? "configured" : "missing (run \`auditor setup hook\`)"} (${globalEntry.path})`);
56
- lines.push(` ${globalEntry.shellLabel ?? "beforeShell"}: ${globalEntry.shell ? "ok" : "missing"} | ${globalEntry.mcpLabel ?? "beforeMCP"}: ${globalEntry.mcp ? "ok" : "missing"}`);
57
- }
58
- if (projectEntry) {
59
- const ready = projectEntry.shell && projectEntry.mcp;
60
- lines.push(` hook (project): ${ready ? "configured" : "missing (run \`auditor setup hook --project\`)"} (${projectEntry.path})`);
61
- lines.push(` ${projectEntry.shellLabel ?? "beforeShell"}: ${projectEntry.shell ? "ok" : "missing"} | ${projectEntry.mcpLabel ?? "beforeMCP"}: ${projectEntry.mcp ? "ok" : "missing"}`);
62
- }
63
- else if (adapter.preferredHookScope !== "project") {
64
- lines.push(" hook (project): none");
65
- }
66
- }
67
- const m = status.mcp ?? { configured: false, path: "" };
68
- lines.push(` mcp: ${m.configured ? "configured" : "missing (run \`auditor setup mcp\`)"} (${m.path})`);
69
- if (adapter.upsertCloud) {
70
- const c = status.cloud ?? { configured: false, path: "" };
71
- lines.push(` cloud (project): ${c.configured ? "configured" : "missing (run \`auditor setup cloud\`)"} (${c.path})`);
72
- }
73
- for (const w of status.warnings) {
74
- lines.push(` warn: ${w}`);
75
- }
76
- }
77
- export async function runDoctor() {
78
- const cwd = process.cwd();
79
- const auditPath = process.env.PRAXIS_GUARD_AUDIT_LOG ?? guardSubpath("audit.jsonl", cwd);
30
+ function buildDoctorHeaderLines(cwd, meta) {
80
31
  const policyPath = process.env.PRAXIS_POLICIES_V1_PATH?.trim() || defaultPoliciesV1Path();
81
32
  const metaPath = process.env.PRAXIS_POLICIES_META_PATH?.trim() || defaultPoliciesMetaPath();
82
- const meta = await readPoliciesMetaFile(metaPath);
83
- const policySource = process.env.PRAXIS_POLICIES_V1_PATH?.trim()
84
- ? "env:PRAXIS_POLICIES_V1_PATH"
85
- : meta?.source === "bundled-bootstrap"
86
- ? "~/.praxis (bootstrapped from bundled policy)"
87
- : existsSync(policyPath)
88
- ? "~/.praxis (local canonical file)"
89
- : "missing (will bootstrap from bundled on first load)";
90
- const lines = [
33
+ const auditPath = process.env.PRAXIS_GUARD_AUDIT_LOG ?? guardSubpath("audit.jsonl", cwd);
34
+ return [
91
35
  `auditor doctor`,
92
36
  `Install ID: ${getInstallId()}`,
93
37
  `MCP stdio: auditor mcp (Cursor/Codex: command auditor, args [mcp])`,
94
38
  `Node: ${process.version}`,
95
39
  `Policy file: ${policyPath}`,
96
- `Policy source: ${policySource}`,
40
+ `Policy source: ${policySourceLabel(meta, policyPath)}`,
97
41
  `Policies meta: ${metaPath}`,
98
42
  meta
99
43
  ? ` Local synced revision: ${meta.revision}${meta.syncedAt ? ` (at ${meta.syncedAt})` : ""}`
@@ -103,6 +47,8 @@ export async function runDoctor() {
103
47
  `Audit log: ${auditPath}`,
104
48
  `PRAXIS_GUARD_AUDIT_LOG: ${process.env.PRAXIS_GUARD_AUDIT_LOG ?? "(unset; default above)"}`,
105
49
  ];
50
+ }
51
+ function appendBindingHealthLines(lines) {
106
52
  const bindingHealth = inspectRequestBindingIndex();
107
53
  lines.push(`Request bindings: ${bindingHealth.bindingCount} under ~/.praxis/guard/request-bindings/`);
108
54
  if (bindingHealth.lastBinding) {
@@ -111,16 +57,8 @@ export async function runDoctor() {
111
57
  if (bindingHealth.legacyHomeTicketsDir) {
112
58
  lines.push(" warn: ~/.praxis/guard/tickets exists (legacy misroute). Tickets belong under <repo>/.praxis/guard/tickets/.");
113
59
  }
114
- lines.push("Agents:");
115
- const adapterStatuses = [];
116
- for (const adapter of ALL_ADAPTERS) {
117
- const status = await adapter.status({ projectDir: cwd }).catch(() => null);
118
- if (!status)
119
- continue;
120
- adapterStatuses.push({ adapter, status });
121
- pushAdapterLines(lines, adapter, status);
122
- }
123
- const token = resolveGuardToken() || process.env.PRAXIS_FIREBASE_ID_TOKEN?.trim();
60
+ }
61
+ function appendAuthLines(lines, token) {
124
62
  const tokenSource = process.env.PRAXIS_GUARD_TOKEN?.trim()
125
63
  ? "env:PRAXIS_GUARD_TOKEN"
126
64
  : token
@@ -130,37 +68,34 @@ export async function runDoctor() {
130
68
  ? `Auth: ${tokenSource} (token: ${token.slice(0, 6)}...${token.slice(-3)})`
131
69
  : "Auth: (none — run `auditor login`)");
132
70
  const credsMode = readCredentialsFileMode();
133
- if (credsMode !== null) {
134
- lines.push(credsMode === 0o600
135
- ? `Credentials mode: 0${credsMode.toString(8)}`
136
- : `Credentials mode: 0${credsMode.toString(8)} (expected 0600)`);
137
- }
138
- const revisionHttpUrl = functionsHttpUrl("policiesGetRevisionHttp");
139
- if (token) {
140
- try {
141
- const rev = await fetchJson({
142
- url: revisionHttpUrl,
143
- bearerToken: token,
144
- });
145
- const remote = rev.revision;
146
- lines.push(`Remote Firestore revision: ${remote}`);
147
- if (meta) {
148
- lines.push(meta.revision === remote
149
- ? "Policies: in sync with Firestore revision."
150
- : `Policies: update available (local ${meta.revision} vs remote ${remote}).`);
151
- }
152
- else {
153
- lines.push(`Policies: remote revision ${remote} (no local sync meta).`);
154
- }
155
- }
156
- catch (e) {
157
- const msg = e instanceof Error ? e.message : String(e);
158
- lines.push(`Remote revision check failed: ${msg}`);
159
- }
160
- }
161
- else {
162
- lines.push("Remote revision: (skip — not authenticated; run `auditor login`)");
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);
163
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);
164
99
  const readyAuth = !!token;
165
100
  const { ready, readySetup, enforced } = resolveReadiness(adapterStatuses, readyAuth);
166
101
  const modeSuffix = ready ? (enforced ? " (enforced)" : " (advisory only)") : "";
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"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"}
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,3 @@
1
+ import type { PolicyState } from "./evaluate-guard-tier.js";
2
+ export declare function loadGuardPolicyState(policyState: PolicyState): Promise<void>;
3
+ //# sourceMappingURL=evaluate-guard-policy.d.ts.map
@@ -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"}
@@ -0,0 +1,16 @@
1
+ import type { GuardEvaluation } from "../shell/guard-eval.js";
2
+ import type { ShellAnalysis } from "../shell/analyze-command.js";
3
+ import type { GuardInput } from "./guard-schemas.js";
4
+ import type { PoliciesV1 } from "../policy/index.js";
5
+ export type GuardProposalEvaluation = {
6
+ skipped: boolean;
7
+ evaluation: GuardEvaluation;
8
+ analysis?: ShellAnalysis;
9
+ shellCommand: string | null;
10
+ };
11
+ export declare function evaluateGuardProposal(input: GuardInput, policy: PoliciesV1): GuardProposalEvaluation;
12
+ export declare function applyDaemonEvaluation(argv: string[], evaluation: GuardEvaluation): Promise<{
13
+ skipped: boolean;
14
+ evaluation: GuardEvaluation;
15
+ }>;
16
+ //# sourceMappingURL=evaluate-guard-proposal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluate-guard-proposal.d.ts","sourceRoot":"","sources":["../../src/mcp/evaluate-guard-proposal.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,eAAe,CAAC;IAC5B,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,CAAC;AAEF,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,UAAU,GACjB,uBAAuB,CAoBzB;AAED,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EAAE,EACd,UAAU,EAAE,eAAe,GAC1B,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,eAAe,CAAA;CAAE,CAAC,CAiC5D"}