@praxis.guard/auditor-cli 0.0.1

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 (131) hide show
  1. package/README.md +46 -0
  2. package/dist/audit/jsonl.d.ts +7 -0
  3. package/dist/audit/jsonl.d.ts.map +1 -0
  4. package/dist/audit/jsonl.js +16 -0
  5. package/dist/audit/jsonl.js.map +1 -0
  6. package/dist/bridge/shell-approval-bridge.d.ts +28 -0
  7. package/dist/bridge/shell-approval-bridge.d.ts.map +1 -0
  8. package/dist/bridge/shell-approval-bridge.js +63 -0
  9. package/dist/bridge/shell-approval-bridge.js.map +1 -0
  10. package/dist/cli/callable-fetch.d.ts +8 -0
  11. package/dist/cli/callable-fetch.d.ts.map +1 -0
  12. package/dist/cli/callable-fetch.js +30 -0
  13. package/dist/cli/callable-fetch.js.map +1 -0
  14. package/dist/cli/credentials.d.ts +10 -0
  15. package/dist/cli/credentials.d.ts.map +1 -0
  16. package/dist/cli/credentials.js +53 -0
  17. package/dist/cli/credentials.js.map +1 -0
  18. package/dist/cli/cursor-config.d.ts +16 -0
  19. package/dist/cli/cursor-config.d.ts.map +1 -0
  20. package/dist/cli/cursor-config.js +153 -0
  21. package/dist/cli/cursor-config.js.map +1 -0
  22. package/dist/cli/doctor.d.ts +2 -0
  23. package/dist/cli/doctor.d.ts.map +1 -0
  24. package/dist/cli/doctor.js +83 -0
  25. package/dist/cli/doctor.js.map +1 -0
  26. package/dist/cli/firebase-targets.d.ts +7 -0
  27. package/dist/cli/firebase-targets.d.ts.map +1 -0
  28. package/dist/cli/firebase-targets.js +49 -0
  29. package/dist/cli/firebase-targets.js.map +1 -0
  30. package/dist/cli/function-url.d.ts +8 -0
  31. package/dist/cli/function-url.d.ts.map +1 -0
  32. package/dist/cli/function-url.js +20 -0
  33. package/dist/cli/function-url.js.map +1 -0
  34. package/dist/cli/http-fetch.d.ts +7 -0
  35. package/dist/cli/http-fetch.d.ts.map +1 -0
  36. package/dist/cli/http-fetch.js +21 -0
  37. package/dist/cli/http-fetch.js.map +1 -0
  38. package/dist/cli/install-id.d.ts +6 -0
  39. package/dist/cli/install-id.d.ts.map +1 -0
  40. package/dist/cli/install-id.js +30 -0
  41. package/dist/cli/install-id.js.map +1 -0
  42. package/dist/cli/login.d.ts +2 -0
  43. package/dist/cli/login.d.ts.map +1 -0
  44. package/dist/cli/login.js +76 -0
  45. package/dist/cli/login.js.map +1 -0
  46. package/dist/cli/logout.d.ts +2 -0
  47. package/dist/cli/logout.d.ts.map +1 -0
  48. package/dist/cli/logout.js +51 -0
  49. package/dist/cli/logout.js.map +1 -0
  50. package/dist/cli/main.d.ts +2 -0
  51. package/dist/cli/main.d.ts.map +1 -0
  52. package/dist/cli/main.js +158 -0
  53. package/dist/cli/main.js.map +1 -0
  54. package/dist/cli/policies-callable-url.d.ts +24 -0
  55. package/dist/cli/policies-callable-url.d.ts.map +1 -0
  56. package/dist/cli/policies-callable-url.js +66 -0
  57. package/dist/cli/policies-callable-url.js.map +1 -0
  58. package/dist/cli/policies-meta.d.ts +6 -0
  59. package/dist/cli/policies-meta.d.ts.map +1 -0
  60. package/dist/cli/policies-meta.js +18 -0
  61. package/dist/cli/policies-meta.js.map +1 -0
  62. package/dist/cli/policies-sync.d.ts +2 -0
  63. package/dist/cli/policies-sync.d.ts.map +1 -0
  64. package/dist/cli/policies-sync.js +40 -0
  65. package/dist/cli/policies-sync.js.map +1 -0
  66. package/dist/cli/setup-all.d.ts +9 -0
  67. package/dist/cli/setup-all.d.ts.map +1 -0
  68. package/dist/cli/setup-all.js +43 -0
  69. package/dist/cli/setup-all.js.map +1 -0
  70. package/dist/cli/setup-doctor.d.ts +8 -0
  71. package/dist/cli/setup-doctor.d.ts.map +1 -0
  72. package/dist/cli/setup-doctor.js +42 -0
  73. package/dist/cli/setup-doctor.js.map +1 -0
  74. package/dist/cli/setup-hook.d.ts +8 -0
  75. package/dist/cli/setup-hook.d.ts.map +1 -0
  76. package/dist/cli/setup-hook.js +30 -0
  77. package/dist/cli/setup-hook.js.map +1 -0
  78. package/dist/cli/setup-mcp.d.ts +8 -0
  79. package/dist/cli/setup-mcp.d.ts.map +1 -0
  80. package/dist/cli/setup-mcp.js +30 -0
  81. package/dist/cli/setup-mcp.js.map +1 -0
  82. package/dist/cli/touch-last-seen.d.ts +6 -0
  83. package/dist/cli/touch-last-seen.d.ts.map +1 -0
  84. package/dist/cli/touch-last-seen.js +46 -0
  85. package/dist/cli/touch-last-seen.js.map +1 -0
  86. package/dist/cli/version.d.ts +2 -0
  87. package/dist/cli/version.d.ts.map +1 -0
  88. package/dist/cli/version.js +19 -0
  89. package/dist/cli/version.js.map +1 -0
  90. package/dist/cli/whoami.d.ts +2 -0
  91. package/dist/cli/whoami.d.ts.map +1 -0
  92. package/dist/cli/whoami.js +36 -0
  93. package/dist/cli/whoami.js.map +1 -0
  94. package/dist/cli.d.ts +3 -0
  95. package/dist/cli.d.ts.map +1 -0
  96. package/dist/cli.js +19 -0
  97. package/dist/cli.js.map +1 -0
  98. package/dist/hooks/run-before-shell.d.ts +16 -0
  99. package/dist/hooks/run-before-shell.d.ts.map +1 -0
  100. package/dist/hooks/run-before-shell.js +132 -0
  101. package/dist/hooks/run-before-shell.js.map +1 -0
  102. package/dist/index.d.ts +7 -0
  103. package/dist/index.d.ts.map +1 -0
  104. package/dist/index.js +6 -0
  105. package/dist/index.js.map +1 -0
  106. package/dist/mcp/server.d.ts +3 -0
  107. package/dist/mcp/server.d.ts.map +1 -0
  108. package/dist/mcp/server.js +252 -0
  109. package/dist/mcp/server.js.map +1 -0
  110. package/dist/policies.v1.json +502 -0
  111. package/dist/policy/index.d.ts +47 -0
  112. package/dist/policy/index.d.ts.map +1 -0
  113. package/dist/policy/index.js +170 -0
  114. package/dist/policy/index.js.map +1 -0
  115. package/dist/shell/evaluate.d.ts +37 -0
  116. package/dist/shell/evaluate.d.ts.map +1 -0
  117. package/dist/shell/evaluate.js +81 -0
  118. package/dist/shell/evaluate.js.map +1 -0
  119. package/dist/shell/governed-tools.d.ts +3 -0
  120. package/dist/shell/governed-tools.d.ts.map +1 -0
  121. package/dist/shell/governed-tools.js +3 -0
  122. package/dist/shell/governed-tools.js.map +1 -0
  123. package/dist/shell/parse.d.ts +2 -0
  124. package/dist/shell/parse.d.ts.map +1 -0
  125. package/dist/shell/parse.js +7 -0
  126. package/dist/shell/parse.js.map +1 -0
  127. package/dist/telemetry/guard-events.d.ts +9 -0
  128. package/dist/telemetry/guard-events.d.ts.map +1 -0
  129. package/dist/telemetry/guard-events.js +86 -0
  130. package/dist/telemetry/guard-events.js.map +1 -0
  131. package/package.json +40 -0
@@ -0,0 +1,18 @@
1
+ import { readFile } from "node:fs/promises";
2
+ export async function readPoliciesMetaFile(metaPath) {
3
+ try {
4
+ const raw = await readFile(metaPath, "utf8");
5
+ const j = JSON.parse(raw);
6
+ if (typeof j.revision !== "number" || !Number.isFinite(j.revision)) {
7
+ return null;
8
+ }
9
+ return {
10
+ revision: j.revision,
11
+ syncedAt: typeof j.syncedAt === "string" ? j.syncedAt : undefined,
12
+ };
13
+ }
14
+ catch {
15
+ return null;
16
+ }
17
+ }
18
+ //# sourceMappingURL=policies-meta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policies-meta.js","sourceRoot":"","sources":["../../src/cli/policies-meta.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAO5C,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,QAAgB;IACzD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA+C,CAAC;QACxE,IAAI,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO;YACL,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;SAClE,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function runPoliciesSync(): Promise<void>;
2
+ //# sourceMappingURL=policies-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policies-sync.d.ts","sourceRoot":"","sources":["../../src/cli/policies-sync.ts"],"names":[],"mappings":"AA8BA,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CA6BrD"}
@@ -0,0 +1,40 @@
1
+ import { writeFile, rename } from "node:fs/promises";
2
+ import process from "node:process";
3
+ import { defaultPoliciesMetaPath, defaultPoliciesV1Path, parsePoliciesV1Json, } from "../policy/index.js";
4
+ import { fetchJson } from "./http-fetch.js";
5
+ import { resolveGuardToken } from "./credentials.js";
6
+ import { getInstallId } from "./install-id.js";
7
+ import { functionsHttpUrl } from "./policies-callable-url.js";
8
+ function policiesCallableBearer() {
9
+ const token = resolveGuardToken();
10
+ if (token)
11
+ return token;
12
+ const idToken = process.env.PRAXIS_FIREBASE_ID_TOKEN?.trim();
13
+ if (idToken)
14
+ return idToken;
15
+ throw new Error("Not authenticated. Run `auditor login`, or set PRAXIS_GUARD_TOKEN / PRAXIS_FIREBASE_ID_TOKEN.");
16
+ }
17
+ export async function runPoliciesSync() {
18
+ const bearer = policiesCallableBearer();
19
+ const url = functionsHttpUrl("policiesGetHttp");
20
+ const result = await fetchJson({
21
+ url,
22
+ bearerToken: bearer,
23
+ method: "POST",
24
+ body: { installId: getInstallId() },
25
+ });
26
+ const policies = parsePoliciesV1Json(result.policies);
27
+ const policyPath = process.env.PRAXIS_POLICIES_V1_PATH?.trim() || defaultPoliciesV1Path();
28
+ const metaPath = process.env.PRAXIS_POLICIES_META_PATH?.trim() || defaultPoliciesMetaPath();
29
+ const tmp = `${policyPath}.tmp.${process.pid}`;
30
+ const body = `${JSON.stringify(policies, null, 2)}\n`;
31
+ await writeFile(tmp, body, "utf8");
32
+ await rename(tmp, policyPath);
33
+ const meta = {
34
+ revision: result.revision,
35
+ syncedAt: new Date().toISOString(),
36
+ };
37
+ await writeFile(metaPath, `${JSON.stringify(meta, null, 2)}\n`, "utf8");
38
+ process.stdout.write(`Synced policies revision ${result.revision} to:\n ${policyPath}\n ${metaPath}\n`);
39
+ }
40
+ //# sourceMappingURL=policies-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policies-sync.js","sourceRoot":"","sources":["../../src/cli/policies-sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAQ9D,SAAS,sBAAsB;IAC7B,MAAM,KAAK,GAAG,iBAAiB,EAAE,CAAC;IAClC,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACxB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,IAAI,EAAE,CAAC;IAC7D,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAC5B,MAAM,IAAI,KAAK,CACb,+FAA+F,CAChG,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,MAAM,GAAG,sBAAsB,EAAE,CAAC;IAExC,MAAM,GAAG,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAoB;QAChD,GAAG;QACH,WAAW,EAAE,MAAM;QACnB,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE;KACpC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,EAAE,IAAI,qBAAqB,EAAE,CAAC;IAC1F,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,IAAI,EAAE,IAAI,uBAAuB,EAAE,CAAC;IAE5F,MAAM,GAAG,GAAG,GAAG,UAAU,QAAQ,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/C,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;IACtD,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACnC,MAAM,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAE9B,MAAM,IAAI,GAAG;QACX,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACnC,CAAC;IACF,MAAM,SAAS,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAExE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,4BAA4B,MAAM,CAAC,QAAQ,WAAW,UAAU,OAAO,QAAQ,IAAI,CACpF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ type AllOptions = {
2
+ projectDir: string;
3
+ userConfigPath?: string;
4
+ dryRun: boolean;
5
+ };
6
+ export declare function parseSetupAllOptions(args: string[]): AllOptions;
7
+ export declare function runSetupAll(args: string[]): Promise<void>;
8
+ export {};
9
+ //# sourceMappingURL=setup-all.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-all.d.ts","sourceRoot":"","sources":["../../src/cli/setup-all.ts"],"names":[],"mappings":"AAIA,KAAK,UAAU,GAAG;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CA6B/D;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAU/D"}
@@ -0,0 +1,43 @@
1
+ import process from "node:process";
2
+ import { upsertHookConfig, upsertMcpConfig } from "./cursor-config.js";
3
+ export function parseSetupAllOptions(args) {
4
+ let projectDir = process.cwd();
5
+ let userConfigPath;
6
+ let dryRun = false;
7
+ for (let i = 0; i < args.length; i++) {
8
+ const arg = args[i];
9
+ if (arg === "--dry-run") {
10
+ dryRun = true;
11
+ continue;
12
+ }
13
+ if (arg === "--project") {
14
+ const value = args[i + 1];
15
+ if (!value)
16
+ throw new Error("Missing value for --project");
17
+ projectDir = value;
18
+ i++;
19
+ continue;
20
+ }
21
+ if (arg === "--user-config") {
22
+ const value = args[i + 1];
23
+ if (!value)
24
+ throw new Error("Missing value for --user-config");
25
+ userConfigPath = value;
26
+ i++;
27
+ continue;
28
+ }
29
+ throw new Error(`Unknown setup all option: ${arg}`);
30
+ }
31
+ return { projectDir, userConfigPath, dryRun };
32
+ }
33
+ export async function runSetupAll(args) {
34
+ const opts = parseSetupAllOptions(args);
35
+ const hook = await upsertHookConfig(opts.projectDir, opts.dryRun);
36
+ const mcp = await upsertMcpConfig(opts.userConfigPath, opts.dryRun);
37
+ process.stdout.write("setup all:\n");
38
+ process.stdout.write(` hook: ${hook.message}\n`);
39
+ process.stdout.write(` path: ${hook.path}\n`);
40
+ process.stdout.write(` mcp: ${mcp.message}\n`);
41
+ process.stdout.write(` path: ${mcp.path}\n`);
42
+ }
43
+ //# sourceMappingURL=setup-all.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-all.js","sourceRoot":"","sources":["../../src/cli/setup-all.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAQvE,MAAM,UAAU,oBAAoB,CAAC,IAAc;IACjD,IAAI,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/B,IAAI,cAAkC,CAAC;IACvC,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YACxB,MAAM,GAAG,IAAI,CAAC;YACd,SAAS;QACX,CAAC;QACD,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAC3D,UAAU,GAAG,KAAK,CAAC;YACnB,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QACD,IAAI,GAAG,KAAK,eAAe,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;YAC/D,cAAc,GAAG,KAAK,CAAC;YACvB,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAc;IAC9C,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAClE,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAEpE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;IAClD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;IACjD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;IAChD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1,8 @@
1
+ type SetupDoctorOptions = {
2
+ projectDir: string;
3
+ userConfigPath?: string;
4
+ };
5
+ export declare function parseSetupDoctorOptions(args: string[]): SetupDoctorOptions;
6
+ export declare function runSetupDoctor(args: string[]): Promise<void>;
7
+ export {};
8
+ //# sourceMappingURL=setup-doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-doctor.d.ts","sourceRoot":"","sources":["../../src/cli/setup-doctor.ts"],"names":[],"mappings":"AASA,KAAK,kBAAkB,GAAG;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAwB1E;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBlE"}
@@ -0,0 +1,42 @@
1
+ import process from "node:process";
2
+ import { readHookConfigured, readMcpConfigured, resolveProjectHooksPath, resolveUserMcpConfigPath, } from "./cursor-config.js";
3
+ export function parseSetupDoctorOptions(args) {
4
+ let projectDir = process.cwd();
5
+ let userConfigPath;
6
+ for (let i = 0; i < args.length; i++) {
7
+ const arg = args[i];
8
+ if (arg === "--project") {
9
+ const value = args[i + 1];
10
+ if (!value)
11
+ throw new Error("Missing value for --project");
12
+ projectDir = value;
13
+ i++;
14
+ continue;
15
+ }
16
+ if (arg === "--user-config") {
17
+ const value = args[i + 1];
18
+ if (!value)
19
+ throw new Error("Missing value for --user-config");
20
+ userConfigPath = value;
21
+ i++;
22
+ continue;
23
+ }
24
+ throw new Error(`Unknown setup doctor option: ${arg}`);
25
+ }
26
+ return { projectDir, userConfigPath };
27
+ }
28
+ export async function runSetupDoctor(args) {
29
+ const opts = parseSetupDoctorOptions(args);
30
+ const hookPath = resolveProjectHooksPath(opts.projectDir);
31
+ const mcpPath = resolveUserMcpConfigPath(opts.userConfigPath);
32
+ const hookConfigured = await readHookConfigured(opts.projectDir).catch(() => false);
33
+ const mcpConfigured = await readMcpConfigured(opts.userConfigPath).catch(() => false);
34
+ process.stdout.write("setup doctor:\n");
35
+ process.stdout.write(` hook: ${hookConfigured ? "configured" : "missing"} (${hookPath})\n`);
36
+ process.stdout.write(` mcp: ${mcpConfigured ? "configured" : "missing"} (${mcpPath})\n`);
37
+ if (!hookConfigured || !mcpConfigured) {
38
+ process.stdout.write(" suggestion: run `auditor setup all`\n");
39
+ process.exitCode = 1;
40
+ }
41
+ }
42
+ //# sourceMappingURL=setup-doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-doctor.js","sourceRoot":"","sources":["../../src/cli/setup-doctor.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAO5B,MAAM,UAAU,uBAAuB,CAAC,IAAc;IACpD,IAAI,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/B,IAAI,cAAkC,CAAC;IAEvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAC3D,UAAU,GAAG,KAAK,CAAC;YACnB,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QACD,IAAI,GAAG,KAAK,eAAe,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;YAC/D,cAAc,GAAG,KAAK,CAAC;YACvB,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAc;IACjD,MAAM,IAAI,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,uBAAuB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,wBAAwB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAE9D,MAAM,cAAc,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IACpF,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IAEtF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,WAAW,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,KAAK,QAAQ,KAAK,CACvE,CAAC;IACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,UAAU,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,KAAK,OAAO,KAAK,CACpE,CAAC;IAEF,IAAI,CAAC,cAAc,IAAI,CAAC,aAAa,EAAE,CAAC;QACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAChE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ type HookOptions = {
2
+ projectDir: string;
3
+ dryRun: boolean;
4
+ };
5
+ export declare function parseSetupHookOptions(args: string[]): HookOptions;
6
+ export declare function runSetupHook(args: string[]): Promise<void>;
7
+ export {};
8
+ //# sourceMappingURL=setup-hook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-hook.d.ts","sourceRoot":"","sources":["../../src/cli/setup-hook.ts"],"names":[],"mappings":"AAIA,KAAK,WAAW,GAAG;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,CAqBjE;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAKhE"}
@@ -0,0 +1,30 @@
1
+ import process from "node:process";
2
+ import { upsertHookConfig } from "./cursor-config.js";
3
+ export function parseSetupHookOptions(args) {
4
+ let projectDir = process.cwd();
5
+ let dryRun = false;
6
+ for (let i = 0; i < args.length; i++) {
7
+ const arg = args[i];
8
+ if (arg === "--dry-run") {
9
+ dryRun = true;
10
+ continue;
11
+ }
12
+ if (arg === "--project") {
13
+ const value = args[i + 1];
14
+ if (!value)
15
+ throw new Error("Missing value for --project");
16
+ projectDir = value;
17
+ i++;
18
+ continue;
19
+ }
20
+ throw new Error(`Unknown setup hook option: ${arg}`);
21
+ }
22
+ return { projectDir, dryRun };
23
+ }
24
+ export async function runSetupHook(args) {
25
+ const opts = parseSetupHookOptions(args);
26
+ const result = await upsertHookConfig(opts.projectDir, opts.dryRun);
27
+ process.stdout.write(`setup hook: ${result.message}\n`);
28
+ process.stdout.write(`path: ${result.path}\n`);
29
+ }
30
+ //# sourceMappingURL=setup-hook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-hook.js","sourceRoot":"","sources":["../../src/cli/setup-hook.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAOtD,MAAM,UAAU,qBAAqB,CAAC,IAAc;IAClD,IAAI,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/B,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YACxB,MAAM,GAAG,IAAI,CAAC;YACd,SAAS;QACX,CAAC;QACD,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAC3D,UAAU,GAAG,KAAK,CAAC;YACnB,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,8BAA8B,GAAG,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAc;IAC/C,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACpE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;IACxD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;AACjD,CAAC"}
@@ -0,0 +1,8 @@
1
+ type McpOptions = {
2
+ userConfigPath?: string;
3
+ dryRun: boolean;
4
+ };
5
+ export declare function parseSetupMcpOptions(args: string[]): McpOptions;
6
+ export declare function runSetupMcp(args: string[]): Promise<void>;
7
+ export {};
8
+ //# sourceMappingURL=setup-mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-mcp.d.ts","sourceRoot":"","sources":["../../src/cli/setup-mcp.ts"],"names":[],"mappings":"AAIA,KAAK,UAAU,GAAG;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAqB/D;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAK/D"}
@@ -0,0 +1,30 @@
1
+ import process from "node:process";
2
+ import { upsertMcpConfig } from "./cursor-config.js";
3
+ export function parseSetupMcpOptions(args) {
4
+ let userConfigPath;
5
+ let dryRun = false;
6
+ for (let i = 0; i < args.length; i++) {
7
+ const arg = args[i];
8
+ if (arg === "--dry-run") {
9
+ dryRun = true;
10
+ continue;
11
+ }
12
+ if (arg === "--user-config") {
13
+ const value = args[i + 1];
14
+ if (!value)
15
+ throw new Error("Missing value for --user-config");
16
+ userConfigPath = value;
17
+ i++;
18
+ continue;
19
+ }
20
+ throw new Error(`Unknown setup mcp option: ${arg}`);
21
+ }
22
+ return { userConfigPath, dryRun };
23
+ }
24
+ export async function runSetupMcp(args) {
25
+ const opts = parseSetupMcpOptions(args);
26
+ const result = await upsertMcpConfig(opts.userConfigPath, opts.dryRun);
27
+ process.stdout.write(`setup mcp: ${result.message}\n`);
28
+ process.stdout.write(`path: ${result.path}\n`);
29
+ }
30
+ //# sourceMappingURL=setup-mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-mcp.js","sourceRoot":"","sources":["../../src/cli/setup-mcp.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAOrD,MAAM,UAAU,oBAAoB,CAAC,IAAc;IACjD,IAAI,cAAkC,CAAC;IACvC,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YACxB,MAAM,GAAG,IAAI,CAAC;YACd,SAAS;QACX,CAAC;QACD,IAAI,GAAG,KAAK,eAAe,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;YAC/D,cAAc,GAAG,KAAK,CAAC;YACvB,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAc;IAC9C,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACvE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;IACvD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;AACjD,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Best-effort fire-and-forget heartbeat to keep `lastSeenAt` fresh.
3
+ * Debounced: skips if called again within 30s.
4
+ */
5
+ export declare function touchLastSeen(): Promise<void>;
6
+ //# sourceMappingURL=touch-last-seen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"touch-last-seen.d.ts","sourceRoot":"","sources":["../../src/cli/touch-last-seen.ts"],"names":[],"mappings":"AASA;;;GAGG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAkCnD"}
@@ -0,0 +1,46 @@
1
+ import { resolveGuardToken } from "./credentials.js";
2
+ import { getInstallId } from "./install-id.js";
3
+ import { prodFunctionUrl } from "./function-url.js";
4
+ const CLI_VERSION = "0.0.1";
5
+ let lastTouchMs = 0;
6
+ const MIN_TOUCH_INTERVAL_MS = 30_000;
7
+ /**
8
+ * Best-effort fire-and-forget heartbeat to keep `lastSeenAt` fresh.
9
+ * Debounced: skips if called again within 30s.
10
+ */
11
+ export async function touchLastSeen() {
12
+ const now = Date.now();
13
+ if (now - lastTouchMs < MIN_TOUCH_INTERVAL_MS)
14
+ return;
15
+ lastTouchMs = now;
16
+ const heartbeatUrl = process.env.PRAXIS_GUARD_HEARTBEAT_URL || prodFunctionUrl("guardHeartbeat");
17
+ const token = resolveGuardToken();
18
+ if (!token)
19
+ return;
20
+ const payload = {
21
+ installId: getInstallId(),
22
+ kind: "auditor-cli",
23
+ version: CLI_VERSION,
24
+ status: "active",
25
+ client: {
26
+ os: process.platform,
27
+ arch: process.arch,
28
+ node: process.version,
29
+ },
30
+ };
31
+ try {
32
+ await fetch(heartbeatUrl, {
33
+ method: "POST",
34
+ headers: {
35
+ Authorization: `Bearer ${token}`,
36
+ "Content-Type": "application/json",
37
+ },
38
+ body: JSON.stringify(payload),
39
+ signal: AbortSignal.timeout(3000),
40
+ });
41
+ }
42
+ catch {
43
+ // best-effort — never fails the caller
44
+ }
45
+ }
46
+ //# sourceMappingURL=touch-last-seen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"touch-last-seen.js","sourceRoot":"","sources":["../../src/cli/touch-last-seen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,WAAW,GAAG,OAAO,CAAC;AAE5B,IAAI,WAAW,GAAG,CAAC,CAAC;AACpB,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAErC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,IAAI,GAAG,GAAG,WAAW,GAAG,qBAAqB;QAAE,OAAO;IACtD,WAAW,GAAG,GAAG,CAAC;IAElB,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,eAAe,CAAC,gBAAgB,CAAC,CAAC;IACjG,MAAM,KAAK,GAAG,iBAAiB,EAAE,CAAC;IAClC,IAAI,CAAC,KAAK;QAAE,OAAO;IAEnB,MAAM,OAAO,GAAG;QACd,SAAS,EAAE,YAAY,EAAE;QACzB,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,WAAW;QACpB,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE;YACN,EAAE,EAAE,OAAO,CAAC,QAAQ;YACpB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,OAAO,CAAC,OAAO;SACtB;KACF,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,YAAY,EAAE;YACxB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,KAAK,EAAE;gBAChC,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAC7B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;SAClC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,uCAAuC;IACzC,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function runVersion(): void;
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/cli/version.ts"],"names":[],"mappings":"AAMA,wBAAgB,UAAU,IAAI,IAAI,CAajC"}
@@ -0,0 +1,19 @@
1
+ import { execSync } from "node:child_process";
2
+ import { readFileSync } from "node:fs";
3
+ import { fileURLToPath } from "node:url";
4
+ import path from "node:path";
5
+ import process from "node:process";
6
+ export function runVersion() {
7
+ const pkgPath = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../package.json");
8
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
9
+ const version = pkg.version ?? "0.0.0";
10
+ let sha = "";
11
+ try {
12
+ sha = execSync("git rev-parse --short HEAD", { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim();
13
+ }
14
+ catch {
15
+ // Not a git checkout or git unavailable
16
+ }
17
+ process.stdout.write(sha ? `auditor ${version} (${sha})\n` : `auditor ${version}\n`);
18
+ }
19
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/cli/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,MAAM,UAAU,UAAU;IACxB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC;IACjG,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAyB,CAAC;IAC9E,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;IAEvC,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,QAAQ,CAAC,4BAA4B,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACjH,CAAC;IAAC,MAAM,CAAC;QACP,wCAAwC;IAC1C,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,OAAO,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,WAAW,OAAO,IAAI,CAAC,CAAC;AACvF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function runWhoami(): Promise<void>;
2
+ //# sourceMappingURL=whoami.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../src/cli/whoami.ts"],"names":[],"mappings":"AAaA,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAgC/C"}
@@ -0,0 +1,36 @@
1
+ import process from "node:process";
2
+ import { fetchJson } from "./http-fetch.js";
3
+ import { credentialsPath, resolveGuardToken } from "./credentials.js";
4
+ import { getInstallId } from "./install-id.js";
5
+ import { functionsHttpUrl } from "./policies-callable-url.js";
6
+ export async function runWhoami() {
7
+ const token = resolveGuardToken() || process.env.PRAXIS_FIREBASE_ID_TOKEN?.trim();
8
+ if (!token) {
9
+ process.stderr.write("Not authenticated. Run `auditor login` or set PRAXIS_GUARD_TOKEN or PRAXIS_FIREBASE_ID_TOKEN.\n");
10
+ process.exitCode = 1;
11
+ return;
12
+ }
13
+ const tokenSource = process.env.PRAXIS_GUARD_TOKEN?.trim()
14
+ ? "env:PRAXIS_GUARD_TOKEN"
15
+ : process.env.PRAXIS_FIREBASE_ID_TOKEN?.trim()
16
+ ? "env:PRAXIS_FIREBASE_ID_TOKEN"
17
+ : `file:${credentialsPath()}`;
18
+ try {
19
+ const installId = getInstallId();
20
+ const me = await fetchJson({
21
+ url: functionsHttpUrl("guardWhoAmIHttp"),
22
+ bearerToken: token,
23
+ });
24
+ process.stdout.write(`uid: ${me.uid}\n`);
25
+ process.stdout.write(`email: ${me.email ?? "(none)"}\n`);
26
+ process.stdout.write(`displayName: ${me.displayName ?? "(none)"}\n`);
27
+ process.stdout.write(`installId: ${installId}\n`);
28
+ process.stdout.write(`tokenSource: ${tokenSource}\n`);
29
+ }
30
+ catch (e) {
31
+ const msg = e instanceof Error ? e.message : String(e);
32
+ process.stderr.write(`whoami failed: ${msg}\n`);
33
+ process.exitCode = 1;
34
+ }
35
+ }
36
+ //# sourceMappingURL=whoami.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/cli/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAuB,MAAM,4BAA4B,CAAC;AAQnF,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,MAAM,KAAK,GAAG,iBAAiB,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,IAAI,EAAE,CAAC;IAClF,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,iGAAiG,CAClG,CAAC;QACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,EAAE;QACxD,CAAC,CAAC,wBAAwB;QAC1B,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,IAAI,EAAE;YAC5C,CAAC,CAAC,8BAA8B;YAChC,CAAC,CAAC,QAAQ,eAAe,EAAE,EAAE,CAAC;IAElC,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;QACjC,MAAM,EAAE,GAAG,MAAM,SAAS,CAAe;YACvC,GAAG,EAAE,gBAAgB,CAAC,iBAAiB,CAAC;YACxC,WAAW,EAAE,KAAK;SACnB,CAAC,CAAC;QACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACjD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,KAAK,IAAI,QAAQ,IAAI,CAAC,CAAC;QAC/D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,WAAW,IAAI,QAAQ,IAAI,CAAC,CAAC;QACrE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,SAAS,IAAI,CAAC,CAAC;QACpD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,WAAW,IAAI,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;QAChD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env node
2
+ import process from "node:process";
3
+ import { runCli } from "./cli/main.js";
4
+ import { failClosedHookErrorResponse } from "./hooks/run-before-shell.js";
5
+ const argv = process.argv.slice(2);
6
+ const isBeforeShellHook = argv[0] === "hook" && argv[1] === "before-shell";
7
+ if (isBeforeShellHook) {
8
+ void runCli(argv).catch((err) => {
9
+ process.stdout.write(JSON.stringify(failClosedHookErrorResponse(err), null, 2));
10
+ process.exit(0);
11
+ });
12
+ }
13
+ else {
14
+ void runCli(argv).catch((err) => {
15
+ console.error(err);
16
+ process.exit(1);
17
+ });
18
+ }
19
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAE1E,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,iBAAiB,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC;AAE3E,IAAI,iBAAiB,EAAE,CAAC;IACtB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,2BAA2B,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;KAAM,CAAC;IACN,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QAC9B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,16 @@
1
+ export type BeforeShellExecutionPayload = {
2
+ command: string;
3
+ cwd?: string;
4
+ sandbox?: boolean;
5
+ };
6
+ export type BeforeShellExecutionResponse = {
7
+ permission: "allow" | "deny" | "ask";
8
+ user_message?: string;
9
+ agent_message?: string;
10
+ };
11
+ /**
12
+ * Cursor `beforeShellExecution` contract: read one JSON object from stdin, write one JSON object to stdout.
13
+ */
14
+ export declare function runBeforeShellHookFromStdin(): Promise<void>;
15
+ export declare function failClosedHookErrorResponse(err: unknown): BeforeShellExecutionResponse;
16
+ //# sourceMappingURL=run-before-shell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-before-shell.d.ts","sourceRoot":"","sources":["../../src/hooks/run-before-shell.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,2BAA2B,GAAG;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,UAAU,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AA+BF;;GAEG;AACH,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC,CA8FjE;AAED,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,OAAO,GAAG,4BAA4B,CAMtF"}