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