@praxis.guard/auditor-cli 0.0.62 → 0.0.64

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 (203) hide show
  1. package/README.md +19 -0
  2. package/dist/adapters/claude-code/adapter.d.ts +3 -1
  3. package/dist/adapters/claude-code/adapter.d.ts.map +1 -1
  4. package/dist/adapters/claude-code/adapter.js +68 -0
  5. package/dist/adapters/claude-code/adapter.js.map +1 -1
  6. package/dist/adapters/claude-desktop.d.ts +2 -1
  7. package/dist/adapters/claude-desktop.d.ts.map +1 -1
  8. package/dist/adapters/claude-desktop.js +24 -0
  9. package/dist/adapters/claude-desktop.js.map +1 -1
  10. package/dist/adapters/codex.d.ts +3 -1
  11. package/dist/adapters/codex.d.ts.map +1 -1
  12. package/dist/adapters/codex.js +7 -1
  13. package/dist/adapters/codex.js.map +1 -1
  14. package/dist/adapters/copilot-cli/adapter.d.ts +3 -1
  15. package/dist/adapters/copilot-cli/adapter.d.ts.map +1 -1
  16. package/dist/adapters/copilot-cli/adapter.js +57 -1
  17. package/dist/adapters/copilot-cli/adapter.js.map +1 -1
  18. package/dist/adapters/copilot-cli/config.d.ts +6 -0
  19. package/dist/adapters/copilot-cli/config.d.ts.map +1 -1
  20. package/dist/adapters/copilot-cli/config.js +23 -0
  21. package/dist/adapters/copilot-cli/config.js.map +1 -1
  22. package/dist/adapters/cursor.d.ts +4 -1
  23. package/dist/adapters/cursor.d.ts.map +1 -1
  24. package/dist/adapters/cursor.js +15 -1
  25. package/dist/adapters/cursor.js.map +1 -1
  26. package/dist/adapters/remove-helpers.d.ts +23 -0
  27. package/dist/adapters/remove-helpers.d.ts.map +1 -0
  28. package/dist/adapters/remove-helpers.js +40 -0
  29. package/dist/adapters/remove-helpers.js.map +1 -0
  30. package/dist/adapters/select-targets.d.ts +10 -0
  31. package/dist/adapters/select-targets.d.ts.map +1 -1
  32. package/dist/adapters/select-targets.js +23 -1
  33. package/dist/adapters/select-targets.js.map +1 -1
  34. package/dist/adapters/types.d.ts +29 -0
  35. package/dist/adapters/types.d.ts.map +1 -1
  36. package/dist/adapters/vscode.d.ts +2 -1
  37. package/dist/adapters/vscode.d.ts.map +1 -1
  38. package/dist/adapters/vscode.js +38 -6
  39. package/dist/adapters/vscode.js.map +1 -1
  40. package/dist/approval/mcp-flow-create.d.ts +3 -0
  41. package/dist/approval/mcp-flow-create.d.ts.map +1 -0
  42. package/dist/approval/mcp-flow-create.js +76 -0
  43. package/dist/approval/mcp-flow-create.js.map +1 -0
  44. package/dist/approval/mcp-flow-existing.d.ts +14 -0
  45. package/dist/approval/mcp-flow-existing.d.ts.map +1 -0
  46. package/dist/approval/mcp-flow-existing.js +43 -0
  47. package/dist/approval/mcp-flow-existing.js.map +1 -0
  48. package/dist/approval/mcp-flow-outcome.d.ts +5 -0
  49. package/dist/approval/mcp-flow-outcome.d.ts.map +1 -0
  50. package/dist/approval/mcp-flow-outcome.js +19 -0
  51. package/dist/approval/mcp-flow-outcome.js.map +1 -0
  52. package/dist/approval/mcp-flow-pending.d.ts +7 -0
  53. package/dist/approval/mcp-flow-pending.d.ts.map +1 -0
  54. package/dist/approval/mcp-flow-pending.js +25 -0
  55. package/dist/approval/mcp-flow-pending.js.map +1 -0
  56. package/dist/approval/mcp-flow-redeem.d.ts +13 -0
  57. package/dist/approval/mcp-flow-redeem.d.ts.map +1 -0
  58. package/dist/approval/mcp-flow-redeem.js +20 -0
  59. package/dist/approval/mcp-flow-redeem.js.map +1 -0
  60. package/dist/approval/mcp-flow.d.ts +6 -28
  61. package/dist/approval/mcp-flow.d.ts.map +1 -1
  62. package/dist/approval/mcp-flow.js +21 -129
  63. package/dist/approval/mcp-flow.js.map +1 -1
  64. package/dist/approval/mcp-flow.types.d.ts +42 -0
  65. package/dist/approval/mcp-flow.types.d.ts.map +1 -0
  66. package/dist/approval/mcp-flow.types.js +2 -0
  67. package/dist/approval/mcp-flow.types.js.map +1 -0
  68. package/dist/cli/cursor-config/environment-config.d.ts +8 -0
  69. package/dist/cli/cursor-config/environment-config.d.ts.map +1 -1
  70. package/dist/cli/cursor-config/environment-config.js +45 -1
  71. package/dist/cli/cursor-config/environment-config.js.map +1 -1
  72. package/dist/cli/cursor-config/hooks-config.d.ts +13 -0
  73. package/dist/cli/cursor-config/hooks-config.d.ts.map +1 -1
  74. package/dist/cli/cursor-config/hooks-config.js +64 -0
  75. package/dist/cli/cursor-config/hooks-config.js.map +1 -1
  76. package/dist/cli/cursor-config/index.d.ts +3 -3
  77. package/dist/cli/cursor-config/index.d.ts.map +1 -1
  78. package/dist/cli/cursor-config/index.js +3 -3
  79. package/dist/cli/cursor-config/index.js.map +1 -1
  80. package/dist/cli/cursor-config/json-io.d.ts +2 -0
  81. package/dist/cli/cursor-config/json-io.d.ts.map +1 -1
  82. package/dist/cli/cursor-config/json-io.js +5 -1
  83. package/dist/cli/cursor-config/json-io.js.map +1 -1
  84. package/dist/cli/cursor-config/mcp-config.d.ts +5 -0
  85. package/dist/cli/cursor-config/mcp-config.d.ts.map +1 -1
  86. package/dist/cli/cursor-config/mcp-config.js +37 -0
  87. package/dist/cli/cursor-config/mcp-config.js.map +1 -1
  88. package/dist/cli/cursor-config.d.ts +1 -1
  89. package/dist/cli/cursor-config.d.ts.map +1 -1
  90. package/dist/cli/cursor-config.js +1 -1
  91. package/dist/cli/cursor-config.js.map +1 -1
  92. package/dist/cli/dispatch-uninstall.d.ts +6 -0
  93. package/dist/cli/dispatch-uninstall.d.ts.map +1 -0
  94. package/dist/cli/dispatch-uninstall.js +10 -0
  95. package/dist/cli/dispatch-uninstall.js.map +1 -0
  96. package/dist/cli/doctor-adapter-lines.d.ts +4 -0
  97. package/dist/cli/doctor-adapter-lines.d.ts.map +1 -0
  98. package/dist/cli/doctor-adapter-lines.js +47 -0
  99. package/dist/cli/doctor-adapter-lines.js.map +1 -0
  100. package/dist/cli/doctor-notifications.d.ts +5 -0
  101. package/dist/cli/doctor-notifications.d.ts.map +1 -0
  102. package/dist/cli/doctor-notifications.js +10 -0
  103. package/dist/cli/doctor-notifications.js.map +1 -0
  104. package/dist/cli/doctor-remote.d.ts +3 -0
  105. package/dist/cli/doctor-remote.d.ts.map +1 -0
  106. package/dist/cli/doctor-remote.js +48 -0
  107. package/dist/cli/doctor-remote.js.map +1 -0
  108. package/dist/cli/doctor.d.ts +1 -22
  109. package/dist/cli/doctor.d.ts.map +1 -1
  110. package/dist/cli/doctor.js +46 -142
  111. package/dist/cli/doctor.js.map +1 -1
  112. package/dist/cli/help.d.ts.map +1 -1
  113. package/dist/cli/help.js +3 -0
  114. package/dist/cli/help.js.map +1 -1
  115. package/dist/cli/main.d.ts.map +1 -1
  116. package/dist/cli/main.js +12 -0
  117. package/dist/cli/main.js.map +1 -1
  118. package/dist/cli/setup-gateway.d.ts +13 -0
  119. package/dist/cli/setup-gateway.d.ts.map +1 -1
  120. package/dist/cli/setup-gateway.js +24 -0
  121. package/dist/cli/setup-gateway.js.map +1 -1
  122. package/dist/cli/uninstall-all.d.ts +24 -0
  123. package/dist/cli/uninstall-all.d.ts.map +1 -0
  124. package/dist/cli/uninstall-all.js +249 -0
  125. package/dist/cli/uninstall-all.js.map +1 -0
  126. package/dist/codex/config-hooks.d.ts +7 -0
  127. package/dist/codex/config-hooks.d.ts.map +1 -1
  128. package/dist/codex/config-hooks.js +28 -0
  129. package/dist/codex/config-hooks.js.map +1 -1
  130. package/dist/codex/config-io.d.ts +1 -0
  131. package/dist/codex/config-io.d.ts.map +1 -1
  132. package/dist/codex/config-io.js +4 -1
  133. package/dist/codex/config-io.js.map +1 -1
  134. package/dist/codex/config-toml.d.ts +7 -0
  135. package/dist/codex/config-toml.d.ts.map +1 -1
  136. package/dist/codex/config-toml.js +50 -0
  137. package/dist/codex/config-toml.js.map +1 -1
  138. package/dist/codex/config.d.ts +2 -0
  139. package/dist/codex/config.d.ts.map +1 -1
  140. package/dist/codex/config.js +52 -3
  141. package/dist/codex/config.js.map +1 -1
  142. package/dist/mcp/evaluate-guard-approval.d.ts +47 -0
  143. package/dist/mcp/evaluate-guard-approval.d.ts.map +1 -0
  144. package/dist/mcp/evaluate-guard-approval.js +80 -0
  145. package/dist/mcp/evaluate-guard-approval.js.map +1 -0
  146. package/dist/mcp/evaluate-guard-policy.d.ts +3 -0
  147. package/dist/mcp/evaluate-guard-policy.d.ts.map +1 -0
  148. package/dist/mcp/evaluate-guard-policy.js +6 -0
  149. package/dist/mcp/evaluate-guard-policy.js.map +1 -0
  150. package/dist/mcp/evaluate-guard-proposal.d.ts +16 -0
  151. package/dist/mcp/evaluate-guard-proposal.d.ts.map +1 -0
  152. package/dist/mcp/evaluate-guard-proposal.js +57 -0
  153. package/dist/mcp/evaluate-guard-proposal.js.map +1 -0
  154. package/dist/mcp/evaluate-guard-run.d.ts +23 -0
  155. package/dist/mcp/evaluate-guard-run.d.ts.map +1 -0
  156. package/dist/mcp/evaluate-guard-run.js +75 -0
  157. package/dist/mcp/evaluate-guard-run.js.map +1 -0
  158. package/dist/mcp/evaluate-guard-telemetry.d.ts +22 -0
  159. package/dist/mcp/evaluate-guard-telemetry.d.ts.map +1 -0
  160. package/dist/mcp/evaluate-guard-telemetry.js +38 -0
  161. package/dist/mcp/evaluate-guard-telemetry.js.map +1 -0
  162. package/dist/mcp/evaluate-guard-tier.d.ts +18 -0
  163. package/dist/mcp/evaluate-guard-tier.d.ts.map +1 -0
  164. package/dist/mcp/evaluate-guard-tier.js +42 -0
  165. package/dist/mcp/evaluate-guard-tier.js.map +1 -0
  166. package/dist/mcp/evaluate-guard.d.ts +2 -5
  167. package/dist/mcp/evaluate-guard.d.ts.map +1 -1
  168. package/dist/mcp/evaluate-guard.js +18 -195
  169. package/dist/mcp/evaluate-guard.js.map +1 -1
  170. package/dist/mcp/gateway-call-handler.d.ts +9 -0
  171. package/dist/mcp/gateway-call-handler.d.ts.map +1 -0
  172. package/dist/mcp/gateway-call-handler.js +61 -0
  173. package/dist/mcp/gateway-call-handler.js.map +1 -0
  174. package/dist/mcp/gateway-call-results.d.ts +5 -0
  175. package/dist/mcp/gateway-call-results.d.ts.map +1 -0
  176. package/dist/mcp/gateway-call-results.js +14 -0
  177. package/dist/mcp/gateway-call-results.js.map +1 -0
  178. package/dist/mcp/gateway-connection-lib.d.ts +54 -0
  179. package/dist/mcp/gateway-connection-lib.d.ts.map +1 -0
  180. package/dist/mcp/gateway-connection-lib.js +39 -0
  181. package/dist/mcp/gateway-connection-lib.js.map +1 -0
  182. package/dist/mcp/gateway-connection.d.ts +16 -0
  183. package/dist/mcp/gateway-connection.d.ts.map +1 -0
  184. package/dist/mcp/gateway-connection.js +54 -0
  185. package/dist/mcp/gateway-connection.js.map +1 -0
  186. package/dist/mcp/gateway-log.d.ts +5 -0
  187. package/dist/mcp/gateway-log.d.ts.map +1 -0
  188. package/dist/mcp/gateway-log.js +9 -0
  189. package/dist/mcp/gateway-log.js.map +1 -0
  190. package/dist/mcp/gateway.d.ts +2 -20
  191. package/dist/mcp/gateway.d.ts.map +1 -1
  192. package/dist/mcp/gateway.js +18 -186
  193. package/dist/mcp/gateway.js.map +1 -1
  194. package/dist/policies.v1.json +6 -0
  195. package/native/darwin-amd64/praxis-guard-daemon +0 -0
  196. package/native/darwin-amd64/praxis-guard-hook +0 -0
  197. package/native/darwin-arm64/praxis-guard-daemon +0 -0
  198. package/native/darwin-arm64/praxis-guard-hook +0 -0
  199. package/native/linux-amd64/praxis-guard-daemon +0 -0
  200. package/native/linux-amd64/praxis-guard-hook +0 -0
  201. package/native/linux-arm64/praxis-guard-daemon +0 -0
  202. package/native/linux-arm64/praxis-guard-hook +0 -0
  203. package/package.json +1 -1
@@ -61,4 +61,41 @@ export async function readMcpConfigured(explicitPath) {
61
61
  const config = await readJson(resolveUserMcpConfigPath(explicitPath));
62
62
  return hasConfiguredMcpServer(config);
63
63
  }
64
+ /**
65
+ * Remove the Praxis MCP server (and any legacy guard-mcp variants) from
66
+ * ~/.cursor/mcp.json. Prunes the mcpServers object if it becomes empty.
67
+ */
68
+ export async function removeMcpConfig(explicitPath, dryRun = false) {
69
+ const mcpPath = resolveUserMcpConfigPath(explicitPath);
70
+ const existing = await readJson(mcpPath);
71
+ if (!existing) {
72
+ return { path: mcpPath, changed: false, message: "no MCP config to remove" };
73
+ }
74
+ const beforeJson = JSON.stringify(existing);
75
+ const config = cloneJsonMap(existing);
76
+ const servers = config.mcpServers && typeof config.mcpServers === "object" && !Array.isArray(config.mcpServers)
77
+ ? config.mcpServers
78
+ : null;
79
+ if (servers) {
80
+ for (const key of Object.keys(servers)) {
81
+ if (key === MCP_SERVER_KEY || isLegacyPraxisGuardMcpServer(servers[key])) {
82
+ delete servers[key];
83
+ }
84
+ }
85
+ if (Object.keys(servers).length === 0)
86
+ delete config.mcpServers;
87
+ }
88
+ const changed = beforeJson !== JSON.stringify(config);
89
+ if (changed && !dryRun)
90
+ await writeJson(mcpPath, config);
91
+ return {
92
+ path: mcpPath,
93
+ changed,
94
+ message: changed
95
+ ? dryRun
96
+ ? "would remove MCP config"
97
+ : "removed MCP config"
98
+ : "no MCP config to remove",
99
+ };
100
+ }
64
101
  //# sourceMappingURL=mcp-config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../../../src/cli/cursor-config/mcp-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../../../src/cli/cursor-config/mcp-config.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  export type { HookConfigScope, JsonMap, SetupResult, UpsertHookConfigOptions, } from "./cursor-config/index.js";
2
- export { referencesGuardMcp, scanHooksForLegacyGuardMcp, scanMcpForLegacyGuardMcp, readJson, resolveEnvironmentJsonPath, resolveHooksConfigPath, resolveProjectHooksPath, resolveUserHooksPath, resolveUserMcpConfigPath, duplicatePraxisHooksWarning, hasConfiguredBeforeMcpHook, hasConfiguredHook, hasAnyPraxisHookEntry, readBeforeMcpHookConfigured, readGlobalHooksConfigured, readHookConfigured, readHooksStatusAt, readProjectHooksConfigured, upsertHookConfig, hasConfiguredMcpServer, readMcpConfigured, upsertMcpConfig, detectInstallCommand, detectMonorepoGuardInstallCommand, hasConfiguredEnvironment, readEnvironmentConfigured, upsertEnvironmentConfig, } from "./cursor-config/index.js";
2
+ export { referencesGuardMcp, scanHooksForLegacyGuardMcp, scanMcpForLegacyGuardMcp, readJson, resolveEnvironmentJsonPath, resolveHooksConfigPath, resolveProjectHooksPath, resolveUserHooksPath, resolveUserMcpConfigPath, duplicatePraxisHooksWarning, hasConfiguredBeforeMcpHook, hasConfiguredHook, hasAnyPraxisHookEntry, readBeforeMcpHookConfigured, readGlobalHooksConfigured, readHookConfigured, readHooksStatusAt, readProjectHooksConfigured, removeHookConfig, upsertHookConfig, hasConfiguredMcpServer, readMcpConfigured, removeMcpConfig, upsertMcpConfig, detectInstallCommand, detectMonorepoGuardInstallCommand, hasConfiguredEnvironment, readEnvironmentConfigured, removeEnvironmentConfig, upsertEnvironmentConfig, } from "./cursor-config/index.js";
3
3
  //# sourceMappingURL=cursor-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cursor-config.d.ts","sourceRoot":"","sources":["../../src/cli/cursor-config.ts"],"names":[],"mappings":"AACA,YAAY,EACV,eAAe,EACf,OAAO,EACP,WAAW,EACX,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,wBAAwB,EACxB,QAAQ,EACR,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,oBAAoB,EACpB,wBAAwB,EACxB,2BAA2B,EAC3B,0BAA0B,EAC1B,iBAAiB,EACjB,qBAAqB,EACrB,2BAA2B,EAC3B,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,EACjB,0BAA0B,EAC1B,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,iCAAiC,EACjC,wBAAwB,EACxB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"cursor-config.d.ts","sourceRoot":"","sources":["../../src/cli/cursor-config.ts"],"names":[],"mappings":"AACA,YAAY,EACV,eAAe,EACf,OAAO,EACP,WAAW,EACX,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,wBAAwB,EACxB,QAAQ,EACR,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,oBAAoB,EACpB,wBAAwB,EACxB,2BAA2B,EAC3B,0BAA0B,EAC1B,iBAAiB,EACjB,qBAAqB,EACrB,2BAA2B,EAC3B,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,EACjB,0BAA0B,EAC1B,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,iCAAiC,EACjC,wBAAwB,EACxB,yBAAyB,EACzB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,0BAA0B,CAAC"}
@@ -1,2 +1,2 @@
1
- export { referencesGuardMcp, scanHooksForLegacyGuardMcp, scanMcpForLegacyGuardMcp, readJson, resolveEnvironmentJsonPath, resolveHooksConfigPath, resolveProjectHooksPath, resolveUserHooksPath, resolveUserMcpConfigPath, duplicatePraxisHooksWarning, hasConfiguredBeforeMcpHook, hasConfiguredHook, hasAnyPraxisHookEntry, readBeforeMcpHookConfigured, readGlobalHooksConfigured, readHookConfigured, readHooksStatusAt, readProjectHooksConfigured, upsertHookConfig, hasConfiguredMcpServer, readMcpConfigured, upsertMcpConfig, detectInstallCommand, detectMonorepoGuardInstallCommand, hasConfiguredEnvironment, readEnvironmentConfigured, upsertEnvironmentConfig, } from "./cursor-config/index.js";
1
+ export { referencesGuardMcp, scanHooksForLegacyGuardMcp, scanMcpForLegacyGuardMcp, readJson, resolveEnvironmentJsonPath, resolveHooksConfigPath, resolveProjectHooksPath, resolveUserHooksPath, resolveUserMcpConfigPath, duplicatePraxisHooksWarning, hasConfiguredBeforeMcpHook, hasConfiguredHook, hasAnyPraxisHookEntry, readBeforeMcpHookConfigured, readGlobalHooksConfigured, readHookConfigured, readHooksStatusAt, readProjectHooksConfigured, removeHookConfig, upsertHookConfig, hasConfiguredMcpServer, readMcpConfigured, removeMcpConfig, upsertMcpConfig, detectInstallCommand, detectMonorepoGuardInstallCommand, hasConfiguredEnvironment, readEnvironmentConfigured, removeEnvironmentConfig, upsertEnvironmentConfig, } from "./cursor-config/index.js";
2
2
  //# sourceMappingURL=cursor-config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cursor-config.js","sourceRoot":"","sources":["../../src/cli/cursor-config.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,wBAAwB,EACxB,QAAQ,EACR,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,oBAAoB,EACpB,wBAAwB,EACxB,2BAA2B,EAC3B,0BAA0B,EAC1B,iBAAiB,EACjB,qBAAqB,EACrB,2BAA2B,EAC3B,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,EACjB,0BAA0B,EAC1B,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,iCAAiC,EACjC,wBAAwB,EACxB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"cursor-config.js","sourceRoot":"","sources":["../../src/cli/cursor-config.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,wBAAwB,EACxB,QAAQ,EACR,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,oBAAoB,EACpB,wBAAwB,EACxB,2BAA2B,EAC3B,0BAA0B,EAC1B,iBAAiB,EACjB,qBAAqB,EACrB,2BAA2B,EAC3B,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,EACjB,0BAA0B,EAC1B,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,iCAAiC,EACjC,wBAAwB,EACxB,yBAAyB,EACzB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Dispatch `auditor uninstall [...]`. Mirrors dispatch-setup so a future
3
+ * `uninstall doctor` subcommand slots in alongside the default teardown.
4
+ */
5
+ export declare function dispatchUninstallCommand(sub: string | undefined, args: string[]): Promise<void>;
6
+ //# sourceMappingURL=dispatch-uninstall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch-uninstall.d.ts","sourceRoot":"","sources":["../../src/cli/dispatch-uninstall.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAsB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAIrG"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Dispatch `auditor uninstall [...]`. Mirrors dispatch-setup so a future
3
+ * `uninstall doctor` subcommand slots in alongside the default teardown.
4
+ */
5
+ export async function dispatchUninstallCommand(sub, args) {
6
+ const { runUninstall } = await import("./uninstall-all.js");
7
+ // No subcommands yet: `sub` is just the first option/flag, forwarded verbatim.
8
+ await runUninstall(sub === undefined ? args : [sub, ...args]);
9
+ }
10
+ //# sourceMappingURL=dispatch-uninstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch-uninstall.js","sourceRoot":"","sources":["../../src/cli/dispatch-uninstall.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,GAAuB,EAAE,IAAc;IACpF,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAC5D,+EAA+E;IAC/E,MAAM,YAAY,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;AAChE,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { AgentAdapter, AgentStatus } from "../adapters/types.js";
2
+ export declare function adapterReady(adapter: AgentAdapter, status: AgentStatus): boolean;
3
+ export declare function pushAdapterLines(lines: string[], adapter: AgentAdapter, status: AgentStatus): void;
4
+ //# sourceMappingURL=doctor-adapter-lines.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor-adapter-lines.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-adapter-lines.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AA+BtE,wBAAgB,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAShF;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,WAAW,GAClB,IAAI,CAiBN"}
@@ -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,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
@@ -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;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,GACxD,MAAM,CAQR;AA6DD,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CA6H/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,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
- * 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
- /**
33
- * Doctor line for push-notification readiness. Pure so it can be unit tested;
34
- * the data comes from guardWhoAmIHttp. Ready means push routing is on AND at
35
- * least one device is enabled, which is what the server requires to actually
36
- * send an approval push.
37
- */
38
- export function formatNotificationsLine(push) {
39
- const enabled = push?.enabled === true;
40
- const devices = push?.devices ?? 0;
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
- export async function runDoctor() {
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 meta = await readPoliciesMetaFile(metaPath);
98
- const policySource = process.env.PRAXIS_POLICIES_V1_PATH?.trim()
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: ${policySource}`,
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
- lines.push("Agents:");
130
- const adapterStatuses = [];
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 !== null) {
149
- lines.push(credsMode === 0o600
150
- ? `Credentials mode: 0${credsMode.toString(8)}`
151
- : `Credentials mode: 0${credsMode.toString(8)} (expected 0600)`);
152
- }
153
- const revisionHttpUrl = functionsHttpUrl("policiesGetRevisionHttp");
154
- if (token) {
155
- try {
156
- const rev = await fetchJson({
157
- url: revisionHttpUrl,
158
- bearerToken: token,
159
- });
160
- const remote = rev.revision;
161
- lines.push(`Remote Firestore revision: ${remote}`);
162
- if (meta) {
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)") : "";
@@ -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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAwEA,wBAAgB,SAAS,IAAI,IAAI,CAEhC"}
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AA2EA,wBAAgB,SAAS,IAAI,IAAI,CAEhC"}
package/dist/cli/help.js CHANGED
@@ -11,6 +11,9 @@ Usage:
11
11
  auditor setup codex doctor Validate repo-local Codex setup
12
12
  auditor setup gateway Route Claude Desktop connectors through the Praxis gateway
13
13
  (dry-run by default; --apply to write, --revert --apply to undo)
14
+ auditor uninstall Reverse setup across all agents + daemon + state
15
+ (dry-run by default; --apply to write, --for=<agent>,
16
+ --purge to also drop credentials/policies/backups)
14
17
  auditor login Authenticate this CLI with your Praxis account (device code flow)
15
18
  auditor logout [--revoke] Remove saved credentials (and optionally revoke token server-side)
16
19
  auditor token create Generate a new bearer token (for Cloud Agents, CI, etc.)
@@ -1 +1 @@
1
- {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoEjB,CAAC;AAEF,MAAM,UAAU,SAAS;IACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuEjB,CAAC;AAEF,MAAM,UAAU,SAAS;IACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"AAQA,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmI1D"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"AAQA,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+I1D"}