@praxis.guard/auditor-cli 0.0.45 → 0.0.47

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 (114) hide show
  1. package/README.md +11 -4
  2. package/dist/adapters/claude-code/adapter.d.ts +28 -0
  3. package/dist/adapters/claude-code/adapter.d.ts.map +1 -0
  4. package/dist/adapters/claude-code/adapter.js +141 -0
  5. package/dist/adapters/claude-code/adapter.js.map +1 -0
  6. package/dist/adapters/claude-code/config-detect.d.ts +4 -0
  7. package/dist/adapters/claude-code/config-detect.d.ts.map +1 -0
  8. package/dist/adapters/claude-code/config-detect.js +44 -0
  9. package/dist/adapters/claude-code/config-detect.js.map +1 -0
  10. package/dist/adapters/claude-code/config-io.d.ts +8 -0
  11. package/dist/adapters/claude-code/config-io.d.ts.map +1 -0
  12. package/dist/adapters/claude-code/config-io.js +41 -0
  13. package/dist/adapters/claude-code/config-io.js.map +1 -0
  14. package/dist/adapters/claude-code/index.d.ts +3 -0
  15. package/dist/adapters/claude-code/index.d.ts.map +1 -0
  16. package/dist/adapters/claude-code/index.js +3 -0
  17. package/dist/adapters/claude-code/index.js.map +1 -0
  18. package/dist/adapters/claude-code/paths.d.ts +17 -0
  19. package/dist/adapters/claude-code/paths.d.ts.map +1 -0
  20. package/dist/adapters/claude-code/paths.js +32 -0
  21. package/dist/adapters/claude-code/paths.js.map +1 -0
  22. package/dist/adapters/claude-code.d.ts +1 -33
  23. package/dist/adapters/claude-code.d.ts.map +1 -1
  24. package/dist/adapters/claude-code.js +1 -246
  25. package/dist/adapters/claude-code.js.map +1 -1
  26. package/dist/adapters/codex.d.ts +11 -0
  27. package/dist/adapters/codex.d.ts.map +1 -0
  28. package/dist/adapters/codex.js +52 -0
  29. package/dist/adapters/codex.js.map +1 -0
  30. package/dist/adapters/registry.d.ts.map +1 -1
  31. package/dist/adapters/registry.js +2 -0
  32. package/dist/adapters/registry.js.map +1 -1
  33. package/dist/adapters/select-targets.js +3 -3
  34. package/dist/adapters/select-targets.js.map +1 -1
  35. package/dist/adapters/types.d.ts +9 -2
  36. package/dist/adapters/types.d.ts.map +1 -1
  37. package/dist/bridge/execution-ticket-consume.d.ts +12 -0
  38. package/dist/bridge/execution-ticket-consume.d.ts.map +1 -0
  39. package/dist/bridge/execution-ticket-consume.js +105 -0
  40. package/dist/bridge/execution-ticket-consume.js.map +1 -0
  41. package/dist/bridge/execution-ticket-match.d.ts +4 -0
  42. package/dist/bridge/execution-ticket-match.d.ts.map +1 -0
  43. package/dist/bridge/execution-ticket-match.js +40 -0
  44. package/dist/bridge/execution-ticket-match.js.map +1 -0
  45. package/dist/bridge/execution-ticket-record.d.ts +14 -0
  46. package/dist/bridge/execution-ticket-record.d.ts.map +1 -0
  47. package/dist/bridge/execution-ticket-record.js +51 -0
  48. package/dist/bridge/execution-ticket-record.js.map +1 -0
  49. package/dist/bridge/execution-ticket.d.ts +2 -23
  50. package/dist/bridge/execution-ticket.d.ts.map +1 -1
  51. package/dist/bridge/execution-ticket.js +2 -179
  52. package/dist/bridge/execution-ticket.js.map +1 -1
  53. package/dist/cli/doctor.d.ts.map +1 -1
  54. package/dist/cli/doctor.js +17 -13
  55. package/dist/cli/doctor.js.map +1 -1
  56. package/dist/cli/help.js +4 -4
  57. package/dist/cli/setup-all.d.ts.map +1 -1
  58. package/dist/cli/setup-all.js +6 -2
  59. package/dist/cli/setup-all.js.map +1 -1
  60. package/dist/cli/setup-codex.d.ts.map +1 -1
  61. package/dist/cli/setup-codex.js +4 -3
  62. package/dist/cli/setup-codex.js.map +1 -1
  63. package/dist/cli/setup-doctor.d.ts.map +1 -1
  64. package/dist/cli/setup-doctor.js +22 -7
  65. package/dist/cli/setup-doctor.js.map +1 -1
  66. package/dist/cli/setup-mcp.d.ts +1 -0
  67. package/dist/cli/setup-mcp.d.ts.map +1 -1
  68. package/dist/cli/setup-mcp.js +15 -2
  69. package/dist/cli/setup-mcp.js.map +1 -1
  70. package/dist/codex/config.d.ts +1 -0
  71. package/dist/codex/config.d.ts.map +1 -1
  72. package/dist/codex/config.js +23 -1
  73. package/dist/codex/config.js.map +1 -1
  74. package/dist/codex/evaluate-tool-audit.d.ts +29 -0
  75. package/dist/codex/evaluate-tool-audit.d.ts.map +1 -0
  76. package/dist/codex/evaluate-tool-audit.js +58 -0
  77. package/dist/codex/evaluate-tool-audit.js.map +1 -0
  78. package/dist/codex/evaluate-tool-bash.d.ts +3 -0
  79. package/dist/codex/evaluate-tool-bash.d.ts.map +1 -0
  80. package/dist/codex/evaluate-tool-bash.js +50 -0
  81. package/dist/codex/evaluate-tool-bash.js.map +1 -0
  82. package/dist/codex/evaluate-tool-mcp.d.ts +3 -0
  83. package/dist/codex/evaluate-tool-mcp.d.ts.map +1 -0
  84. package/dist/codex/evaluate-tool-mcp.js +55 -0
  85. package/dist/codex/evaluate-tool-mcp.js.map +1 -0
  86. package/dist/codex/evaluate-tool-types.d.ts +27 -0
  87. package/dist/codex/evaluate-tool-types.d.ts.map +1 -0
  88. package/dist/codex/evaluate-tool-types.js +15 -0
  89. package/dist/codex/evaluate-tool-types.js.map +1 -0
  90. package/dist/codex/evaluate-tool.d.ts +3 -26
  91. package/dist/codex/evaluate-tool.d.ts.map +1 -1
  92. package/dist/codex/evaluate-tool.js +3 -167
  93. package/dist/codex/evaluate-tool.js.map +1 -1
  94. package/dist/policy/classify.d.ts +9 -0
  95. package/dist/policy/classify.d.ts.map +1 -0
  96. package/dist/policy/classify.js +97 -0
  97. package/dist/policy/classify.js.map +1 -0
  98. package/dist/policy/index.d.ts +5 -54
  99. package/dist/policy/index.d.ts.map +1 -1
  100. package/dist/policy/index.js +4 -213
  101. package/dist/policy/index.js.map +1 -1
  102. package/dist/policy/load.d.ts +8 -0
  103. package/dist/policy/load.d.ts.map +1 -0
  104. package/dist/policy/load.js +52 -0
  105. package/dist/policy/load.js.map +1 -0
  106. package/dist/policy/paths.d.ts +9 -0
  107. package/dist/policy/paths.d.ts.map +1 -0
  108. package/dist/policy/paths.js +42 -0
  109. package/dist/policy/paths.js.map +1 -0
  110. package/dist/policy/schema.d.ts +35 -0
  111. package/dist/policy/schema.d.ts.map +1 -0
  112. package/dist/policy/schema.js +30 -0
  113. package/dist/policy/schema.js.map +1 -0
  114. package/package.json +1 -1
package/README.md CHANGED
@@ -22,19 +22,26 @@ Each `auditor setup` command auto-detects installed agents and configures all of
22
22
  | **Cursor** (`--for=cursor`) | `~/.cursor/mcp.json` | `~/.cursor/hooks.json` (or `.cursor/hooks.json` per-project) | `.cursor/environment.json` |
23
23
  | **Claude Desktop** (`--for=claude-desktop`) | `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) / `%APPDATA%/Claude/claude_desktop_config.json` (Windows) | — | — |
24
24
  | **Claude Code** (`--for=claude-code`) | `~/.claude.json` | `PreToolUse` for Bash | — |
25
+ | **Codex** (`--for=codex`) | `.codex/config.toml` (repo-local) | `.codex/hooks.json` (`PreToolUse` + `PermissionRequest`) | — |
25
26
 
26
27
  ## Codex app workflow
27
28
 
28
- Codex support is repo-local rather than an auto-detected host adapter:
29
+ Codex is supported both through the standard `setup` flow with `--for=codex` and through the
30
+ backward-compatible dedicated command below:
29
31
 
30
32
  ```bash
33
+ auditor setup all --for=codex --project .
34
+ auditor setup hook --for=codex --project .
35
+ auditor setup mcp --for=codex --project .
36
+ auditor setup doctor --project .
31
37
  auditor setup codex
32
38
  auditor setup codex doctor
33
39
  ```
34
40
 
35
- Setup merges the Praxis MCP server into `.codex/config.toml` and installs `PreToolUse` and
36
- `PermissionRequest` hooks in `.codex/hooks.json`. Open the repository in Codex and review/trust
37
- the hook definitions before they can run. V1 governs Bash and MCP calls; Praxis's own `guard`
41
+ Setup merges the Praxis MCP server into `.codex/config.toml`, disables repo-local `unified_exec`
42
+ so shell calls use Codex's hook-compatible Bash path, and installs `PreToolUse` and
43
+ `PermissionRequest` hooks in `.codex/hooks.json`. Start a new Codex session and use `/hooks` to
44
+ review/trust the hook definitions before they can run. V1 governs Bash and MCP calls; Praxis's own `guard`
38
45
  and `guard_wait` tools are excluded so approval requests cannot block themselves.
39
46
 
40
47
  The MCP server tags itself with `PRAXIS_AGENT_HOST=<agent>` in its registration env so heartbeats report which host launched it. See [docs/auditor-cli-multi-agent-adapter-design.md](../../docs/auditor-cli-multi-agent-adapter-design.md) for the full design.
@@ -0,0 +1,28 @@
1
+ import type { AgentAdapter, AgentStatus, SetupResult, StatusOpts, UpsertHookOpts, UpsertMcpOpts } from "../types.js";
2
+ /**
3
+ * ClaudeCodeAdapter: hook (PreToolUse on Bash) + MCP, both in ~/.claude.json.
4
+ *
5
+ * Unlike ClaudeDesktopAdapter (MCP-only), Claude Code exposes a PreToolUse hook that
6
+ * fires before every Bash tool call, giving Praxis shell governance.
7
+ *
8
+ * IMPORTANT — hook output format:
9
+ * Verify the exact format with a test script before relying on this adapter in production.
10
+ * Run docs/auditor-cli-claude-code-hook-format-test.sh and confirm Claude Code blocks.
11
+ * If the format is wrong, edit HOOK_BLOCK_RESPONSE in run-claude-code-pre-tool-use.ts.
12
+ *
13
+ * Binary path:
14
+ * The hook config uses the bare "auditor" command (consistent with Cursor's adapter),
15
+ * NOT an absolute path. Absolute paths break with mise/nvm node version upgrades.
16
+ * At setup time we warn if auditor is not on PATH, but do not abort.
17
+ *
18
+ * See docs/auditor-cli-multi-agent-adapter-design.md.
19
+ */
20
+ export declare class ClaudeCodeAdapter implements AgentAdapter {
21
+ readonly id: "claude-code";
22
+ readonly label = "Claude Code";
23
+ detectInstalled(): boolean;
24
+ upsertHook(opts: UpsertHookOpts): Promise<SetupResult>;
25
+ upsertMcp(opts: UpsertMcpOpts): Promise<SetupResult>;
26
+ status(opts?: StatusOpts): Promise<AgentStatus>;
27
+ }
28
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/claude-code/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EAEX,WAAW,EACX,UAAU,EACV,cAAc,EACd,aAAa,EACd,MAAM,aAAa,CAAC;AAWrB;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,iBAAkB,YAAW,YAAY;IACpD,QAAQ,CAAC,EAAE,EAAG,aAAa,CAAU;IACrC,QAAQ,CAAC,KAAK,iBAAiB;IAE/B,eAAe,IAAI,OAAO;IAIpB,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC;IAqDtD,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC;IA0CpD,MAAM,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;CAiCtD"}
@@ -0,0 +1,141 @@
1
+ import { readJson, writeJsonAtomic } from "./config-io.js";
2
+ import { hasConfiguredMcpServer, hasConfiguredPreToolUseHook } from "./config-detect.js";
3
+ import { AGENT_HOST, claudeCodeSettingsPath, detectClaudeCodeInstalled, HOOK_COMMAND, MCP_SERVER_KEY, } from "./paths.js";
4
+ /**
5
+ * ClaudeCodeAdapter: hook (PreToolUse on Bash) + MCP, both in ~/.claude.json.
6
+ *
7
+ * Unlike ClaudeDesktopAdapter (MCP-only), Claude Code exposes a PreToolUse hook that
8
+ * fires before every Bash tool call, giving Praxis shell governance.
9
+ *
10
+ * IMPORTANT — hook output format:
11
+ * Verify the exact format with a test script before relying on this adapter in production.
12
+ * Run docs/auditor-cli-claude-code-hook-format-test.sh and confirm Claude Code blocks.
13
+ * If the format is wrong, edit HOOK_BLOCK_RESPONSE in run-claude-code-pre-tool-use.ts.
14
+ *
15
+ * Binary path:
16
+ * The hook config uses the bare "auditor" command (consistent with Cursor's adapter),
17
+ * NOT an absolute path. Absolute paths break with mise/nvm node version upgrades.
18
+ * At setup time we warn if auditor is not on PATH, but do not abort.
19
+ *
20
+ * See docs/auditor-cli-multi-agent-adapter-design.md.
21
+ */
22
+ export class ClaudeCodeAdapter {
23
+ id = "claude-code";
24
+ label = "Claude Code";
25
+ detectInstalled() {
26
+ return detectClaudeCodeInstalled();
27
+ }
28
+ async upsertHook(opts) {
29
+ const dryRun = opts.dryRun ?? false;
30
+ const cfgPath = opts.explicitPath?.trim() || claudeCodeSettingsPath();
31
+ const existing = await readJson(cfgPath);
32
+ const before = JSON.stringify(existing ?? {});
33
+ const config = existing ? JSON.parse(JSON.stringify(existing)) : {};
34
+ if (!config.hooks || typeof config.hooks !== "object" || Array.isArray(config.hooks)) {
35
+ config.hooks = {};
36
+ }
37
+ const hooksMap = config.hooks;
38
+ if (!Array.isArray(hooksMap.PreToolUse)) {
39
+ hooksMap.PreToolUse = [];
40
+ }
41
+ const preToolUse = hooksMap.PreToolUse;
42
+ // Remove any existing Praxis PreToolUse[Bash] entry (idempotent upsert).
43
+ const filtered = preToolUse.filter((entry) => {
44
+ if (!entry || typeof entry !== "object")
45
+ return true;
46
+ const e = entry;
47
+ if (e.matcher !== "Bash")
48
+ return true;
49
+ const innerHooks = e.hooks;
50
+ if (!Array.isArray(innerHooks))
51
+ return true;
52
+ return !innerHooks.some((h) => {
53
+ if (!h || typeof h !== "object")
54
+ return false;
55
+ return h.command === HOOK_COMMAND;
56
+ });
57
+ });
58
+ filtered.push({
59
+ matcher: "Bash",
60
+ hooks: [{ type: "command", command: HOOK_COMMAND }],
61
+ });
62
+ hooksMap.PreToolUse = filtered;
63
+ const changed = before !== JSON.stringify(config);
64
+ if (changed && !dryRun) {
65
+ await writeJsonAtomic(cfgPath, config);
66
+ }
67
+ return {
68
+ path: cfgPath,
69
+ changed,
70
+ message: changed
71
+ ? dryRun
72
+ ? "would update Claude Code hook config (PreToolUse)"
73
+ : "updated Claude Code hook config (PreToolUse)"
74
+ : "Claude Code hook config already up to date",
75
+ };
76
+ }
77
+ async upsertMcp(opts) {
78
+ const dryRun = opts.dryRun ?? false;
79
+ const cfgPath = opts.explicitPath?.trim() || claudeCodeSettingsPath();
80
+ const existing = await readJson(cfgPath);
81
+ const before = JSON.stringify(existing ?? {});
82
+ const config = existing ? JSON.parse(JSON.stringify(existing)) : {};
83
+ if (!config.mcpServers || typeof config.mcpServers !== "object" || Array.isArray(config.mcpServers)) {
84
+ config.mcpServers = {};
85
+ }
86
+ const servers = config.mcpServers;
87
+ const existingEntry = servers[MCP_SERVER_KEY] && typeof servers[MCP_SERVER_KEY] === "object"
88
+ ? servers[MCP_SERVER_KEY]
89
+ : {};
90
+ const existingEnv = existingEntry.env && typeof existingEntry.env === "object" && !Array.isArray(existingEntry.env)
91
+ ? existingEntry.env
92
+ : {};
93
+ servers[MCP_SERVER_KEY] = {
94
+ ...existingEntry,
95
+ command: "auditor",
96
+ args: ["mcp"],
97
+ env: { ...existingEnv, PRAXIS_AGENT_HOST: AGENT_HOST },
98
+ };
99
+ const changed = before !== JSON.stringify(config);
100
+ if (changed && !dryRun) {
101
+ await writeJsonAtomic(cfgPath, config);
102
+ }
103
+ return {
104
+ path: cfgPath,
105
+ changed,
106
+ message: changed
107
+ ? dryRun
108
+ ? "would update Claude Code MCP config"
109
+ : "updated Claude Code MCP config"
110
+ : "Claude Code MCP config already up to date",
111
+ };
112
+ }
113
+ async status(opts) {
114
+ const cfgPath = opts?.mcpConfigPath?.trim() || claudeCodeSettingsPath();
115
+ const config = await readJson(cfgPath).catch(() => null);
116
+ const hookConfigured = hasConfiguredPreToolUseHook(config);
117
+ const mcpConfigured = hasConfiguredMcpServer(config);
118
+ // Claude Code has one hook (PreToolUse) covering all tool calls.
119
+ // Report shell=true when PreToolUse is configured; mcp=true mirrors it
120
+ // (no separate MCP hook needed) so adapterReady() passes correctly.
121
+ const hook = {
122
+ global: {
123
+ shell: hookConfigured,
124
+ mcp: hookConfigured,
125
+ path: cfgPath,
126
+ },
127
+ };
128
+ const warnings = [];
129
+ if (hookConfigured && !mcpConfigured) {
130
+ warnings.push("Hook is configured but MCP is not. " +
131
+ "MUTATE approvals require both. Run: auditor setup mcp --for=claude-code");
132
+ }
133
+ return {
134
+ installed: this.detectInstalled(),
135
+ hook,
136
+ mcp: { configured: mcpConfigured, path: cfgPath },
137
+ warnings,
138
+ };
139
+ }
140
+ }
141
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/adapters/claude-code/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { JsonMap } from "./config-io.js";
2
+ export declare function hasConfiguredMcpServer(config: JsonMap | null): boolean;
3
+ export declare function hasConfiguredPreToolUseHook(config: JsonMap | null): boolean;
4
+ //# sourceMappingURL=config-detect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-detect.d.ts","sourceRoot":"","sources":["../../../src/adapters/claude-code/config-detect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9C,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,CAWtE;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,CAiB3E"}
@@ -0,0 +1,44 @@
1
+ import { AGENT_HOST, HOOK_COMMAND, MCP_SERVER_KEY } from "./paths.js";
2
+ export function hasConfiguredMcpServer(config) {
3
+ if (!config)
4
+ return false;
5
+ const servers = (config.mcpServers ?? {});
6
+ const server = servers[MCP_SERVER_KEY];
7
+ if (!server || typeof server !== "object")
8
+ return false;
9
+ const map = server;
10
+ if (map.command !== "auditor")
11
+ return false;
12
+ if (!Array.isArray(map.args) || map.args.length !== 1 || map.args[0] !== "mcp")
13
+ return false;
14
+ const env = map.env;
15
+ if (!env || typeof env !== "object")
16
+ return false;
17
+ return env.PRAXIS_AGENT_HOST === AGENT_HOST;
18
+ }
19
+ export function hasConfiguredPreToolUseHook(config) {
20
+ if (!config)
21
+ return false;
22
+ const hooks = config.hooks;
23
+ if (!hooks || typeof hooks !== "object" || Array.isArray(hooks))
24
+ return false;
25
+ const preToolUse = hooks.PreToolUse;
26
+ if (!Array.isArray(preToolUse))
27
+ return false;
28
+ return preToolUse.some((entry) => {
29
+ if (!entry || typeof entry !== "object")
30
+ return false;
31
+ const e = entry;
32
+ if (e.matcher !== "Bash")
33
+ return false;
34
+ const innerHooks = e.hooks;
35
+ if (!Array.isArray(innerHooks))
36
+ return false;
37
+ return innerHooks.some((h) => {
38
+ if (!h || typeof h !== "object")
39
+ return false;
40
+ return h.command === HOOK_COMMAND;
41
+ });
42
+ });
43
+ }
44
+ //# sourceMappingURL=config-detect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-detect.js","sourceRoot":"","sources":["../../../src/adapters/claude-code/config-detect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGtE,MAAM,UAAU,sBAAsB,CAAC,MAAsB;IAC3D,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAY,CAAC;IACrD,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACxD,MAAM,GAAG,GAAG,MAAiB,CAAC;IAC9B,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAC7F,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IACpB,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAClD,OAAQ,GAAe,CAAC,iBAAiB,KAAK,UAAU,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAAsB;IAChE,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC3B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9E,MAAM,UAAU,GAAI,KAAiB,CAAC,UAAU,CAAC;IACjD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;QAC/B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACtD,MAAM,CAAC,GAAG,KAAgB,CAAC;QAC3B,IAAI,CAAC,CAAC,OAAO,KAAK,MAAM;YAAE,OAAO,KAAK,CAAC;QACvC,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;YAAE,OAAO,KAAK,CAAC;QAC7C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YAC3B,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;gBAAE,OAAO,KAAK,CAAC;YAC9C,OAAQ,CAAa,CAAC,OAAO,KAAK,YAAY,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,8 @@
1
+ export type JsonMap = Record<string, unknown>;
2
+ export declare function readJson(pathname: string): Promise<JsonMap | null>;
3
+ /**
4
+ * Atomic write: write to a temp file then rename into place.
5
+ * Prevents partial writes from corrupting ~/.claude.json.
6
+ */
7
+ export declare function writeJsonAtomic(pathname: string, data: JsonMap): Promise<void>;
8
+ //# sourceMappingURL=config-io.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-io.d.ts","sourceRoot":"","sources":["../../../src/adapters/claude-code/config-io.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE9C,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAmBxE;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAYpF"}
@@ -0,0 +1,41 @@
1
+ import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ export async function readJson(pathname) {
4
+ try {
5
+ const raw = await readFile(pathname, "utf8");
6
+ const parsed = JSON.parse(raw);
7
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
8
+ throw new Error("JSON root must be an object");
9
+ }
10
+ return parsed;
11
+ }
12
+ catch (e) {
13
+ const msg = e instanceof Error ? e.message : String(e);
14
+ if (e.code === "ENOENT")
15
+ return null;
16
+ throw new Error([
17
+ `Invalid JSON at ${pathname}: ${msg}`,
18
+ "Refusing to overwrite existing file.",
19
+ "Fix the JSON manually or back up the file and re-run setup.",
20
+ ].join(" "));
21
+ }
22
+ }
23
+ /**
24
+ * Atomic write: write to a temp file then rename into place.
25
+ * Prevents partial writes from corrupting ~/.claude.json.
26
+ */
27
+ export async function writeJsonAtomic(pathname, data) {
28
+ const dir = path.dirname(pathname);
29
+ await mkdir(dir, { recursive: true });
30
+ const tmp = path.join(dir, `.${path.basename(pathname)}.tmp.${Date.now()}`);
31
+ try {
32
+ await writeFile(tmp, `${JSON.stringify(data, null, 2)}\n`, "utf8");
33
+ await rename(tmp, pathname);
34
+ }
35
+ catch (e) {
36
+ // Best-effort cleanup of the temp file on failure.
37
+ await writeFile(tmp, "", "utf8").catch(() => undefined);
38
+ throw e;
39
+ }
40
+ }
41
+ //# sourceMappingURL=config-io.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-io.js","sourceRoot":"","sources":["../../../src/adapters/claude-code/config-io.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,QAAgB;IAC7C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACnE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,MAAiB,CAAC;IAC3B,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,IAAK,CAA2B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAChE,MAAM,IAAI,KAAK,CACb;YACE,mBAAmB,QAAQ,KAAK,GAAG,EAAE;YACrC,sCAAsC;YACtC,6DAA6D;SAC9D,CAAC,IAAI,CAAC,GAAG,CAAC,CACZ,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAgB,EAAE,IAAa;IACnE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC5E,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACnE,MAAM,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,mDAAmD;QACnD,MAAM,SAAS,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACxD,MAAM,CAAC,CAAC;IACV,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { ClaudeCodeAdapter } from "./adapter.js";
2
+ export { claudeCodeSettingsPath } from "./paths.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/claude-code/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { ClaudeCodeAdapter } from "./adapter.js";
2
+ export { claudeCodeSettingsPath } from "./paths.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/claude-code/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,17 @@
1
+ export declare const MCP_SERVER_KEY = "praxis-guard";
2
+ export declare const AGENT_HOST = "claude-code";
3
+ export declare const HOOK_COMMAND = "auditor hook claude-code";
4
+ /**
5
+ * Resolve the Claude Code global config file path (~/.claude.json).
6
+ *
7
+ * Set `PRAXIS_CLAUDE_CODE_SETTINGS` to override (used by tests).
8
+ */
9
+ export declare function claudeCodeSettingsPath(): string;
10
+ /**
11
+ * Resolve the Claude Code install directory used for detection.
12
+ * When PRAXIS_CLAUDE_CODE_SETTINGS is set (test mode), use its parent dir
13
+ * so detectInstalled() stays hermetic in tests.
14
+ */
15
+ export declare function claudeCodeInstallDir(): string;
16
+ export declare function detectClaudeCodeInstalled(): boolean;
17
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../../src/adapters/claude-code/paths.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,cAAc,iBAAiB,CAAC;AAC7C,eAAO,MAAM,UAAU,gBAAgB,CAAC;AACxC,eAAO,MAAM,YAAY,6BAA6B,CAAC;AAEvD;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAI/C;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAI7C;AAED,wBAAgB,yBAAyB,IAAI,OAAO,CAEnD"}
@@ -0,0 +1,32 @@
1
+ import { existsSync } from "node:fs";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ export const MCP_SERVER_KEY = "praxis-guard";
5
+ export const AGENT_HOST = "claude-code";
6
+ export const HOOK_COMMAND = "auditor hook claude-code";
7
+ /**
8
+ * Resolve the Claude Code global config file path (~/.claude.json).
9
+ *
10
+ * Set `PRAXIS_CLAUDE_CODE_SETTINGS` to override (used by tests).
11
+ */
12
+ export function claudeCodeSettingsPath() {
13
+ const override = process.env.PRAXIS_CLAUDE_CODE_SETTINGS?.trim();
14
+ if (override)
15
+ return override;
16
+ return path.join(os.homedir(), ".claude.json");
17
+ }
18
+ /**
19
+ * Resolve the Claude Code install directory used for detection.
20
+ * When PRAXIS_CLAUDE_CODE_SETTINGS is set (test mode), use its parent dir
21
+ * so detectInstalled() stays hermetic in tests.
22
+ */
23
+ export function claudeCodeInstallDir() {
24
+ const override = process.env.PRAXIS_CLAUDE_CODE_SETTINGS?.trim();
25
+ if (override)
26
+ return path.dirname(override);
27
+ return path.join(os.homedir(), ".claude");
28
+ }
29
+ export function detectClaudeCodeInstalled() {
30
+ return existsSync(claudeCodeInstallDir());
31
+ }
32
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/adapters/claude-code/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,CAAC;AAC7C,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,CAAC;AACxC,MAAM,CAAC,MAAM,YAAY,GAAG,0BAA0B,CAAC;AAEvD;;;;GAIG;AACH,MAAM,UAAU,sBAAsB;IACpC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,IAAI,EAAE,CAAC;IACjE,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC;AACjD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB;IAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,IAAI,EAAE,CAAC;IACjE,IAAI,QAAQ;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,yBAAyB;IACvC,OAAO,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;AAC5C,CAAC"}
@@ -1,34 +1,2 @@
1
- import type { AgentAdapter, AgentStatus, SetupResult, StatusOpts, UpsertHookOpts, UpsertMcpOpts } from "./types.js";
2
- /**
3
- * Resolve the Claude Code global config file path (~/.claude.json).
4
- *
5
- * Set `PRAXIS_CLAUDE_CODE_SETTINGS` to override (used by tests).
6
- */
7
- export declare function claudeCodeSettingsPath(): string;
8
- /**
9
- * ClaudeCodeAdapter: hook (PreToolUse on Bash) + MCP, both in ~/.claude.json.
10
- *
11
- * Unlike ClaudeDesktopAdapter (MCP-only), Claude Code exposes a PreToolUse hook that
12
- * fires before every Bash tool call, giving Praxis shell governance.
13
- *
14
- * IMPORTANT — hook output format:
15
- * Verify the exact format with a test script before relying on this adapter in production.
16
- * Run docs/auditor-cli-claude-code-hook-format-test.sh and confirm Claude Code blocks.
17
- * If the format is wrong, edit HOOK_BLOCK_RESPONSE in run-claude-code-pre-tool-use.ts.
18
- *
19
- * Binary path:
20
- * The hook config uses the bare "auditor" command (consistent with Cursor's adapter),
21
- * NOT an absolute path. Absolute paths break with mise/nvm node version upgrades.
22
- * At setup time we warn if auditor is not on PATH, but do not abort.
23
- *
24
- * See docs/auditor-cli-multi-agent-adapter-design.md.
25
- */
26
- export declare class ClaudeCodeAdapter implements AgentAdapter {
27
- readonly id: "claude-code";
28
- readonly label = "Claude Code";
29
- detectInstalled(): boolean;
30
- upsertHook(opts: UpsertHookOpts): Promise<SetupResult>;
31
- upsertMcp(opts: UpsertMcpOpts): Promise<SetupResult>;
32
- status(opts?: StatusOpts): Promise<AgentStatus>;
33
- }
1
+ export { ClaudeCodeAdapter, claudeCodeSettingsPath } from "./claude-code/index.js";
34
2
  //# sourceMappingURL=claude-code.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../src/adapters/claude-code.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EAEX,WAAW,EACX,UAAU,EACV,cAAc,EACd,aAAa,EACd,MAAM,YAAY,CAAC;AAQpB;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAI/C;AAoFD;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,iBAAkB,YAAW,YAAY;IACpD,QAAQ,CAAC,EAAE,EAAG,aAAa,CAAU;IACrC,QAAQ,CAAC,KAAK,iBAAiB;IAE/B,eAAe,IAAI,OAAO;IAIpB,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC;IAqDtD,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC;IA0CpD,MAAM,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;CAiCtD"}
1
+ {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../src/adapters/claude-code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC"}