@praxis.guard/auditor-cli 0.0.63 → 0.0.65

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/README.md +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.map +1 -1
  41. package/dist/approval/mcp-flow-create.js +35 -9
  42. package/dist/approval/mcp-flow-create.js.map +1 -1
  43. package/dist/cli/cursor-config/environment-config.d.ts +8 -0
  44. package/dist/cli/cursor-config/environment-config.d.ts.map +1 -1
  45. package/dist/cli/cursor-config/environment-config.js +45 -1
  46. package/dist/cli/cursor-config/environment-config.js.map +1 -1
  47. package/dist/cli/cursor-config/hooks-config.d.ts +13 -0
  48. package/dist/cli/cursor-config/hooks-config.d.ts.map +1 -1
  49. package/dist/cli/cursor-config/hooks-config.js +64 -0
  50. package/dist/cli/cursor-config/hooks-config.js.map +1 -1
  51. package/dist/cli/cursor-config/index.d.ts +3 -3
  52. package/dist/cli/cursor-config/index.d.ts.map +1 -1
  53. package/dist/cli/cursor-config/index.js +3 -3
  54. package/dist/cli/cursor-config/index.js.map +1 -1
  55. package/dist/cli/cursor-config/json-io.d.ts +2 -0
  56. package/dist/cli/cursor-config/json-io.d.ts.map +1 -1
  57. package/dist/cli/cursor-config/json-io.js +5 -1
  58. package/dist/cli/cursor-config/json-io.js.map +1 -1
  59. package/dist/cli/cursor-config/mcp-config.d.ts +5 -0
  60. package/dist/cli/cursor-config/mcp-config.d.ts.map +1 -1
  61. package/dist/cli/cursor-config/mcp-config.js +37 -0
  62. package/dist/cli/cursor-config/mcp-config.js.map +1 -1
  63. package/dist/cli/cursor-config.d.ts +1 -1
  64. package/dist/cli/cursor-config.d.ts.map +1 -1
  65. package/dist/cli/cursor-config.js +1 -1
  66. package/dist/cli/cursor-config.js.map +1 -1
  67. package/dist/cli/dispatch-uninstall.d.ts +6 -0
  68. package/dist/cli/dispatch-uninstall.d.ts.map +1 -0
  69. package/dist/cli/dispatch-uninstall.js +10 -0
  70. package/dist/cli/dispatch-uninstall.js.map +1 -0
  71. package/dist/cli/help.d.ts.map +1 -1
  72. package/dist/cli/help.js +3 -0
  73. package/dist/cli/help.js.map +1 -1
  74. package/dist/cli/main.d.ts.map +1 -1
  75. package/dist/cli/main.js +12 -0
  76. package/dist/cli/main.js.map +1 -1
  77. package/dist/cli/setup-gateway.d.ts +13 -0
  78. package/dist/cli/setup-gateway.d.ts.map +1 -1
  79. package/dist/cli/setup-gateway.js +24 -0
  80. package/dist/cli/setup-gateway.js.map +1 -1
  81. package/dist/cli/uninstall-all.d.ts +24 -0
  82. package/dist/cli/uninstall-all.d.ts.map +1 -0
  83. package/dist/cli/uninstall-all.js +249 -0
  84. package/dist/cli/uninstall-all.js.map +1 -0
  85. package/dist/codex/config-hooks.d.ts +7 -0
  86. package/dist/codex/config-hooks.d.ts.map +1 -1
  87. package/dist/codex/config-hooks.js +28 -0
  88. package/dist/codex/config-hooks.js.map +1 -1
  89. package/dist/codex/config-io.d.ts +1 -0
  90. package/dist/codex/config-io.d.ts.map +1 -1
  91. package/dist/codex/config-io.js +4 -1
  92. package/dist/codex/config-io.js.map +1 -1
  93. package/dist/codex/config-toml.d.ts +7 -0
  94. package/dist/codex/config-toml.d.ts.map +1 -1
  95. package/dist/codex/config-toml.js +50 -0
  96. package/dist/codex/config-toml.js.map +1 -1
  97. package/dist/codex/config.d.ts +2 -0
  98. package/dist/codex/config.d.ts.map +1 -1
  99. package/dist/codex/config.js +52 -3
  100. package/dist/codex/config.js.map +1 -1
  101. package/dist/codex/evaluate-tool-audit.d.ts.map +1 -1
  102. package/dist/codex/evaluate-tool-audit.js +4 -1
  103. package/dist/codex/evaluate-tool-audit.js.map +1 -1
  104. package/dist/hooks/before-shell-evaluate.d.ts +32 -0
  105. package/dist/hooks/before-shell-evaluate.d.ts.map +1 -0
  106. package/dist/hooks/before-shell-evaluate.js +150 -0
  107. package/dist/hooks/before-shell-evaluate.js.map +1 -0
  108. package/dist/hooks/run-before-shell.d.ts.map +1 -1
  109. package/dist/hooks/run-before-shell.js +37 -130
  110. package/dist/hooks/run-before-shell.js.map +1 -1
  111. package/dist/mcp/server.d.ts.map +1 -1
  112. package/dist/mcp/server.js +12 -6
  113. package/dist/mcp/server.js.map +1 -1
  114. package/dist/shell/analyze-command-aggregate.d.ts +10 -1
  115. package/dist/shell/analyze-command-aggregate.d.ts.map +1 -1
  116. package/dist/shell/analyze-command-aggregate.js +25 -2
  117. package/dist/shell/analyze-command-aggregate.js.map +1 -1
  118. package/dist/shell/analyze-command.js +1 -1
  119. package/dist/shell/analyze-command.js.map +1 -1
  120. package/dist/shell/evaluate.d.ts.map +1 -1
  121. package/dist/shell/evaluate.js +4 -1
  122. package/dist/shell/evaluate.js.map +1 -1
  123. package/native/darwin-amd64/praxis-guard-daemon +0 -0
  124. package/native/darwin-amd64/praxis-guard-hook +0 -0
  125. package/native/darwin-arm64/praxis-guard-daemon +0 -0
  126. package/native/darwin-arm64/praxis-guard-hook +0 -0
  127. package/native/linux-amd64/praxis-guard-daemon +0 -0
  128. package/native/linux-amd64/praxis-guard-hook +0 -0
  129. package/native/linux-arm64/praxis-guard-daemon +0 -0
  130. package/native/linux-arm64/praxis-guard-hook +0 -0
  131. package/package.json +2 -2
@@ -0,0 +1,249 @@
1
+ import { existsSync } from "node:fs";
2
+ import { readdir, rm } from "node:fs/promises";
3
+ import os from "node:os";
4
+ import path from "node:path";
5
+ import process from "node:process";
6
+ import { claudeDesktopConfigPath } from "../adapters/claude-desktop.js";
7
+ import { parseForFlag, selectUninstallTargets } from "../adapters/select-targets.js";
8
+ import { guardDaemonPidPath, guardDaemonSocketPath } from "../daemon/paths.js";
9
+ import { uninstallDaemonService } from "../daemon/service.js";
10
+ import { resolveGatewayConfigPath, resolveGatewayStorageRoot } from "../mcp/gateway-config.js";
11
+ import { policiesV1MetaPathFor, resolvedPoliciesV1Path } from "../policy/paths.js";
12
+ import { credentialsPath } from "./credentials.js";
13
+ import { installIdPath } from "./install-id.js";
14
+ import { revertGatewayForUninstall } from "./setup-gateway.js";
15
+ const NPM_PACKAGE = "@praxis.guard/auditor-cli";
16
+ export function parseUninstallOptions(args) {
17
+ const { forIds, rest } = parseForFlag(args);
18
+ let apply = false;
19
+ let purge = false;
20
+ let projectDir = process.cwd();
21
+ for (let i = 0; i < rest.length; i++) {
22
+ const arg = rest[i];
23
+ if (arg === "--apply") {
24
+ apply = true;
25
+ continue;
26
+ }
27
+ if (arg === "--dry-run") {
28
+ apply = false;
29
+ continue;
30
+ }
31
+ if (arg === "--purge") {
32
+ purge = true;
33
+ continue;
34
+ }
35
+ if (arg === "--project") {
36
+ const value = rest[i + 1];
37
+ if (!value)
38
+ throw new Error("Missing value for --project");
39
+ projectDir = value;
40
+ i++;
41
+ continue;
42
+ }
43
+ throw new Error(`Unknown uninstall option: ${arg}`);
44
+ }
45
+ return { apply, purge, projectDir, forIds };
46
+ }
47
+ function out(line) {
48
+ process.stdout.write(`${line}\n`);
49
+ }
50
+ async function runStep(label, fn, results) {
51
+ try {
52
+ const r = await fn();
53
+ results.push({ label, status: r.changed ? "changed" : "noop", message: r.message });
54
+ }
55
+ catch (e) {
56
+ results.push({ label, status: "error", message: e instanceof Error ? e.message : String(e) });
57
+ }
58
+ }
59
+ /** Root of the global Praxis state dir (~/.praxis). Honors a sandboxed HOME. */
60
+ function praxisRoot() {
61
+ return path.join(os.homedir(), ".praxis");
62
+ }
63
+ /** Directory holding credentials + install-id (~/.config/praxis, or $XDG_CONFIG_HOME/praxis). */
64
+ function praxisConfigDir() {
65
+ return path.dirname(credentialsPath());
66
+ }
67
+ /** Remove a file or directory, honoring dry-run and reporting what happened. */
68
+ async function rmPath(pathname, dryRun) {
69
+ if (!existsSync(pathname))
70
+ return { changed: false, message: `absent: ${pathname}`, path: pathname };
71
+ if (dryRun)
72
+ return { changed: true, message: `would remove ${pathname}`, path: pathname };
73
+ await rm(pathname, { recursive: true, force: true });
74
+ return { changed: true, message: `removed ${pathname}`, path: pathname };
75
+ }
76
+ /**
77
+ * Remove a directory only when it is empty. Everything under ~/.praxis and
78
+ * ~/.config/praxis is Praxis-owned, so once the targeted pieces are gone an
79
+ * empty parent is residue worth sweeping (e.g. the dir is kept when policies
80
+ * remain without --purge, removed once --purge clears them).
81
+ */
82
+ async function pruneEmptyDir(dir, dryRun) {
83
+ if (!existsSync(dir))
84
+ return { changed: false, message: `absent: ${dir}`, path: dir };
85
+ let entries = [];
86
+ try {
87
+ entries = await readdir(dir);
88
+ }
89
+ catch {
90
+ return { changed: false, message: `unreadable: ${dir}`, path: dir };
91
+ }
92
+ if (entries.length > 0)
93
+ return { changed: false, message: `kept (not empty): ${dir}`, path: dir };
94
+ if (dryRun)
95
+ return { changed: true, message: `would remove empty ${dir}`, path: dir };
96
+ await rm(dir, { recursive: true, force: true });
97
+ return { changed: true, message: `removed empty ${dir}`, path: dir };
98
+ }
99
+ /** Stop the running daemon and remove its launchd/systemd service + socket/pid. */
100
+ async function removeDaemon(dryRun) {
101
+ const sock = guardDaemonSocketPath();
102
+ const pid = guardDaemonPidPath();
103
+ const present = existsSync(sock) || existsSync(pid);
104
+ if (dryRun) {
105
+ return { changed: true, message: "would stop daemon and remove launchd/systemd service" };
106
+ }
107
+ let serviceMsg = "no service to remove";
108
+ try {
109
+ const target = await uninstallDaemonService();
110
+ serviceMsg = `removed service ${target}`;
111
+ }
112
+ catch {
113
+ // Unsupported platform or nothing installed — non-fatal.
114
+ }
115
+ await rm(sock, { force: true }).catch(() => undefined);
116
+ await rm(pid, { force: true }).catch(() => undefined);
117
+ return { changed: present || serviceMsg.startsWith("removed"), message: serviceMsg };
118
+ }
119
+ /** Remove gateway-migration backups (`claude_desktop_config.json.praxis-bak-*`). */
120
+ async function removeGatewayBackups(dryRun, results) {
121
+ const desktop = claudeDesktopConfigPath();
122
+ const dir = path.dirname(desktop);
123
+ const base = path.basename(desktop);
124
+ let names = [];
125
+ try {
126
+ names = await readdir(dir);
127
+ }
128
+ catch {
129
+ return;
130
+ }
131
+ for (const name of names.filter((n) => n.startsWith(`${base}.praxis-bak-`))) {
132
+ await runStep(`backup ${name}`, () => rmPath(path.join(dir, name), dryRun), results);
133
+ }
134
+ }
135
+ function anyHookConfigured(st) {
136
+ const g = st.hook?.global;
137
+ const p = st.hook?.project;
138
+ return !!(g?.shell || g?.mcp || p?.shell || p?.mcp);
139
+ }
140
+ /** Re-read each target's status and collect anything still configured. */
141
+ async function collectResidue(targets, projectDir) {
142
+ const residue = [];
143
+ for (const adapter of targets) {
144
+ try {
145
+ const st = await adapter.status({ projectDir });
146
+ const hookOn = anyHookConfigured(st);
147
+ const mcpOn = !!st.mcp?.configured;
148
+ if (hookOn || mcpOn) {
149
+ const parts = [hookOn ? "hook" : "", mcpOn ? "mcp" : ""].filter(Boolean).join("+");
150
+ residue.push(`${adapter.id}: ${parts} still configured`);
151
+ }
152
+ }
153
+ catch {
154
+ // status() is best-effort during verification — ignore read failures.
155
+ }
156
+ }
157
+ return residue;
158
+ }
159
+ /** Strip a single adapter's hook + MCP + cloud config, each isolated. */
160
+ async function removeFromAdapter(adapter, projectDir, dryRun, results) {
161
+ if (adapter.removeHook) {
162
+ await runStep(`${adapter.id} hook`, () => adapter.removeHook({ scope: "global", projectDir, dryRun }), results);
163
+ }
164
+ await runStep(`${adapter.id} mcp`, () => adapter.removeMcp({ projectDir, dryRun }), results);
165
+ if (adapter.removeCloud) {
166
+ await runStep(`${adapter.id} cloud`, () => adapter.removeCloud({ projectDir, dryRun }), results);
167
+ }
168
+ }
169
+ /**
170
+ * `auditor uninstall` — reverse everything `auditor setup *` created.
171
+ *
172
+ * Order is load-bearing: agent configs are stripped BEFORE the daemon/binary
173
+ * go, so a fail-closed Cursor/Codex hook can never lock the user out mid-run.
174
+ * Gateway revert runs first so connectors moved behind the gateway are restored
175
+ * before the Claude Desktop adapter strips the `praxis-guard` entry.
176
+ *
177
+ * configs (gateway revert -> per-adapter remove) -> daemon -> state -> [purge] -> verify
178
+ *
179
+ * Dry-run by default; pass --apply to write. Every step is isolated: one
180
+ * unreadable file is reported and skipped, never aborting the rest.
181
+ */
182
+ export async function runUninstall(args) {
183
+ const opts = parseUninstallOptions(args);
184
+ const dryRun = !opts.apply;
185
+ const targets = selectUninstallTargets(opts.forIds);
186
+ const results = [];
187
+ out(`uninstall${dryRun ? " (dry run)" : ""} — agents: ${targets.map((a) => a.id).join(", ")}`);
188
+ // 1. Agent configs. Gateway revert first (restores moved Desktop connectors),
189
+ // then each adapter strips its hook/MCP/cloud entries.
190
+ await runStep("gateway revert", () => revertGatewayForUninstall({ apply: opts.apply }), results);
191
+ for (const adapter of targets) {
192
+ await removeFromAdapter(adapter, opts.projectDir, dryRun, results);
193
+ }
194
+ // 2. Daemon (after configs so fail-closed hooks are already gone).
195
+ await runStep("daemon", () => removeDaemon(dryRun), results);
196
+ // 3. Runtime state.
197
+ await runStep("state ~/.praxis/guard", () => rmPath(path.dirname(guardDaemonSocketPath()), dryRun), results);
198
+ await runStep("state ~/.praxis/gateway", () => rmPath(resolveGatewayStorageRoot(), dryRun), results);
199
+ await runStep("state gateway-servers.json", () => rmPath(resolveGatewayConfigPath(), dryRun), results);
200
+ // The bin shim is dropped by the auditor-cli postinstall; it is Praxis-owned.
201
+ await runStep("state ~/.praxis/bin", () => rmPath(path.join(praxisRoot(), "bin"), dryRun), results);
202
+ // 4. Purge (opt-in): credentials, install id, policies, gateway backups.
203
+ if (opts.purge) {
204
+ await runStep("purge credentials", () => rmPath(credentialsPath(), dryRun), results);
205
+ await runStep("purge install-id", () => rmPath(installIdPath(), dryRun), results);
206
+ const policyPath = resolvedPoliciesV1Path();
207
+ await runStep("purge policies", () => rmPath(policyPath, dryRun), results);
208
+ await runStep("purge policies meta", () => rmPath(policiesV1MetaPathFor(policyPath), dryRun), results);
209
+ await removeGatewayBackups(dryRun, results);
210
+ }
211
+ // 5. Sweep now-empty Praxis dirs (kept when policies remain without --purge).
212
+ await runStep("prune ~/.praxis", () => pruneEmptyDir(praxisRoot(), dryRun), results);
213
+ await runStep("prune ~/.config/praxis", () => pruneEmptyDir(praxisConfigDir(), dryRun), results);
214
+ // Report.
215
+ out("");
216
+ for (const r of results) {
217
+ const mark = r.status === "error" ? "ERROR" : r.status === "changed" ? "•" : "·";
218
+ out(` ${mark} ${r.label}: ${r.message}`);
219
+ }
220
+ const errors = results.filter((r) => r.status === "error");
221
+ // 6. Verify (post-write only): re-read status and flag any residue.
222
+ if (!dryRun) {
223
+ const residue = await collectResidue(targets, opts.projectDir);
224
+ out("");
225
+ if (residue.length === 0) {
226
+ out("Verified: no agent hook/MCP residue remains.");
227
+ }
228
+ else {
229
+ out("Residue still present (re-run uninstall, or remove by hand):");
230
+ for (const line of residue)
231
+ out(` ! ${line}`);
232
+ }
233
+ }
234
+ out("");
235
+ if (dryRun) {
236
+ out("Dry run: no files written. Re-run with --apply to uninstall.");
237
+ }
238
+ else {
239
+ if (!opts.purge) {
240
+ out("Kept credentials + policies. Re-run with --purge to remove those too.");
241
+ }
242
+ out(`Last step (this CLI cannot remove its own binary): npm uninstall -g ${NPM_PACKAGE}`);
243
+ }
244
+ if (errors.length > 0) {
245
+ process.exitCode = 1;
246
+ process.stderr.write(`\n${errors.length} step(s) failed; see ERROR lines above.\n`);
247
+ }
248
+ }
249
+ //# sourceMappingURL=uninstall-all.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall-all.js","sourceRoot":"","sources":["../../src/cli/uninstall-all.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAErF,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAC/F,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEnF,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,MAAM,WAAW,GAAG,2BAA2B,CAAC;AAYhD,MAAM,UAAU,qBAAqB,CAAC,IAAc;IAClD,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,KAAK,GAAG,IAAI,CAAC;YACb,SAAS;QACX,CAAC;QACD,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YACxB,KAAK,GAAG,KAAK,CAAC;YACd,SAAS;QACX,CAAC;QACD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,KAAK,GAAG,IAAI,CAAC;YACb,SAAS;QACX,CAAC;QACD,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAC3D,UAAU,GAAG,KAAK,CAAC;YACnB,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AAC9C,CAAC;AAED,SAAS,GAAG,CAAC,IAAY;IACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,KAAK,UAAU,OAAO,CACpB,KAAa,EACb,EAA6B,EAC7B,OAAsB;IAEtB,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACtF,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAChG,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,SAAS,UAAU;IACjB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AAC5C,CAAC;AAED,iGAAiG;AACjG,SAAS,eAAe;IACtB,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,gFAAgF;AAChF,KAAK,UAAU,MAAM,CAAC,QAAgB,EAAE,MAAe;IACrD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACrG,IAAI,MAAM;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC1F,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC3E,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,aAAa,CAAC,GAAW,EAAE,MAAe;IACvD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IACtF,IAAI,OAAO,GAAa,EAAE,CAAC;IAC3B,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IACtE,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,qBAAqB,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAClG,IAAI,MAAM;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,sBAAsB,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IACtF,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,iBAAiB,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACvE,CAAC;AAED,mFAAmF;AACnF,KAAK,UAAU,YAAY,CAAC,MAAe;IACzC,MAAM,IAAI,GAAG,qBAAqB,EAAE,CAAC;IACrC,MAAM,GAAG,GAAG,kBAAkB,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IACpD,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,sDAAsD,EAAE,CAAC;IAC5F,CAAC;IACD,IAAI,UAAU,GAAG,sBAAsB,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,sBAAsB,EAAE,CAAC;QAC9C,UAAU,GAAG,mBAAmB,MAAM,EAAE,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,yDAAyD;IAC3D,CAAC;IACD,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACvD,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACtD,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AACvF,CAAC;AAED,oFAAoF;AACpF,KAAK,UAAU,oBAAoB,CAAC,MAAe,EAAE,OAAsB;IACzE,MAAM,OAAO,GAAG,uBAAuB,EAAE,CAAC;IAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,KAAK,GAAa,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI,cAAc,CAAC,CAAC,EAAE,CAAC;QAC5E,MAAM,OAAO,CAAC,UAAU,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;IACvF,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,EAAe;IACxC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;AACtD,CAAC;AAED,0EAA0E;AAC1E,KAAK,UAAU,cAAc,CAAC,OAAuB,EAAE,UAAkB;IACvE,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YAChD,MAAM,MAAM,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;YACrC,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,CAAC;YACnC,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;gBACpB,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACnF,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE,KAAK,KAAK,mBAAmB,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,sEAAsE;QACxE,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,yEAAyE;AACzE,KAAK,UAAU,iBAAiB,CAC9B,OAAqB,EACrB,UAAkB,EAClB,MAAe,EACf,OAAsB;IAEtB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,OAAO,CACX,GAAG,OAAO,CAAC,EAAE,OAAO,EACpB,GAAG,EAAE,CAAC,OAAO,CAAC,UAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,EAClE,OAAO,CACR,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,CAAC,GAAG,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7F,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,OAAO,CACX,GAAG,OAAO,CAAC,EAAE,QAAQ,EACrB,GAAG,EAAE,CAAC,OAAO,CAAC,WAAY,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,EAClD,OAAO,CACR,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAc;IAC/C,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3B,MAAM,OAAO,GAAG,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,GAAG,CAAC,YAAY,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,cAAc,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE/F,8EAA8E;IAC9E,0DAA0D;IAC1D,MAAM,OAAO,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,yBAAyB,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IACjG,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE,CAAC;QAC9B,MAAM,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACrE,CAAC;IAED,mEAAmE;IACnE,MAAM,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;IAE7D,oBAAoB;IACpB,MAAM,OAAO,CACX,uBAAuB,EACvB,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,EAAE,MAAM,CAAC,EAC3D,OAAO,CACR,CAAC;IACF,MAAM,OAAO,CAAC,yBAAyB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,yBAAyB,EAAE,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;IACrG,MAAM,OAAO,CACX,4BAA4B,EAC5B,GAAG,EAAE,CAAC,MAAM,CAAC,wBAAwB,EAAE,EAAE,MAAM,CAAC,EAChD,OAAO,CACR,CAAC;IACF,8EAA8E;IAC9E,MAAM,OAAO,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;IAEpG,yEAAyE;IACzE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,eAAe,EAAE,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;QACrF,MAAM,OAAO,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;QAClF,MAAM,UAAU,GAAG,sBAAsB,EAAE,CAAC;QAC5C,MAAM,OAAO,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;QAC3E,MAAM,OAAO,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;QACvG,MAAM,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,8EAA8E;IAC9E,MAAM,OAAO,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;IACrF,MAAM,OAAO,CAAC,wBAAwB,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,eAAe,EAAE,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;IAEjG,UAAU;IACV,GAAG,CAAC,EAAE,CAAC,CAAC;IACR,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACjF,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC;IAE3D,oEAAoE;IACpE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/D,GAAG,CAAC,EAAE,CAAC,CAAC;QACR,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,GAAG,CAAC,8CAA8C,CAAC,CAAC;QACtD,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,8DAA8D,CAAC,CAAC;YACpE,KAAK,MAAM,IAAI,IAAI,OAAO;gBAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,GAAG,CAAC,EAAE,CAAC,CAAC;IACR,IAAI,MAAM,EAAE,CAAC;QACX,GAAG,CAAC,8DAA8D,CAAC,CAAC;IACtE,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,GAAG,CAAC,uEAAuE,CAAC,CAAC;QAC/E,CAAC;QACD,GAAG,CAAC,uEAAuE,WAAW,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,MAAM,2CAA2C,CAAC,CAAC;IACtF,CAAC;AACH,CAAC"}
@@ -1,5 +1,12 @@
1
1
  type JsonMap = Record<string, unknown>;
2
2
  export declare function mergeCodexHooks(existing: JsonMap | null): JsonMap;
3
+ /**
4
+ * Inverse of mergeCodexHooks: drop the Praxis hook groups from PreToolUse and
5
+ * PermissionRequest, pruning emptied arrays and the `hooks` object. Returns the
6
+ * stripped config (caller deletes the file if nothing meaningful remains), or
7
+ * null when there was no input.
8
+ */
9
+ export declare function removePraxisCodexHooks(existing: JsonMap | null): JsonMap | null;
3
10
  export declare function hooksContainCommand(config: JsonMap | null, event: string, command: string): boolean;
4
11
  export declare const CODEX_PRE_TOOL_COMMAND = "auditor hook codex-pre-tool-use";
5
12
  export declare const CODEX_PERMISSION_COMMAND = "auditor hook codex-permission-request";
@@ -1 +1 @@
1
- {"version":3,"file":"config-hooks.d.ts","sourceRoot":"","sources":["../../src/codex/config-hooks.ts"],"names":[],"mappings":"AAAA,KAAK,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAyBvC,wBAAgB,eAAe,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,CAqBjE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAYnG;AAED,eAAO,MAAM,sBAAsB,oCAAmB,CAAC;AACvD,eAAO,MAAM,wBAAwB,0CAAqB,CAAC"}
1
+ {"version":3,"file":"config-hooks.d.ts","sourceRoot":"","sources":["../../src/codex/config-hooks.ts"],"names":[],"mappings":"AAAA,KAAK,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAyBvC,wBAAgB,eAAe,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,CAqBjE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,GAAG,IAAI,CAgB/E;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAYnG;AAED,eAAO,MAAM,sBAAsB,oCAAmB,CAAC;AACvD,eAAO,MAAM,wBAAwB,0CAAqB,CAAC"}
@@ -40,6 +40,34 @@ export function mergeCodexHooks(existing) {
40
40
  ]);
41
41
  return config;
42
42
  }
43
+ /**
44
+ * Inverse of mergeCodexHooks: drop the Praxis hook groups from PreToolUse and
45
+ * PermissionRequest, pruning emptied arrays and the `hooks` object. Returns the
46
+ * stripped config (caller deletes the file if nothing meaningful remains), or
47
+ * null when there was no input.
48
+ */
49
+ export function removePraxisCodexHooks(existing) {
50
+ if (!existing)
51
+ return null;
52
+ const config = structuredClone(existing);
53
+ const hooks = config.hooks && typeof config.hooks === "object" && !Array.isArray(config.hooks)
54
+ ? config.hooks
55
+ : null;
56
+ if (!hooks)
57
+ return config;
58
+ for (const event of ["PreToolUse", "PermissionRequest"]) {
59
+ if (!Array.isArray(hooks[event]))
60
+ continue;
61
+ const filtered = hooks[event].filter((entry) => !isPraxisHookGroup(entry));
62
+ if (filtered.length === 0)
63
+ delete hooks[event];
64
+ else
65
+ hooks[event] = filtered;
66
+ }
67
+ if (Object.keys(hooks).length === 0)
68
+ delete config.hooks;
69
+ return config;
70
+ }
43
71
  export function hooksContainCommand(config, event, command) {
44
72
  const hooks = config?.hooks;
45
73
  if (!hooks || typeof hooks !== "object" || Array.isArray(hooks))
@@ -1 +1 @@
1
- {"version":3,"file":"config-hooks.js","sourceRoot":"","sources":["../../src/codex/config-hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-hooks.js","sourceRoot":"","sources":["../../src/codex/config-hooks.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  type JsonMap = Record<string, unknown>;
2
2
  export declare function readText(pathname: string): Promise<string>;
3
3
  export declare function writeAtomic(pathname: string, content: string): Promise<void>;
4
+ export declare function removeFile(pathname: string): Promise<void>;
4
5
  export declare function readJson(pathname: string): Promise<JsonMap | null>;
5
6
  export {};
6
7
  //# sourceMappingURL=config-io.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-io.d.ts","sourceRoot":"","sources":["../../src/codex/config-io.ts"],"names":[],"mappings":"AAGA,KAAK,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEvC,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOhE;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKlF;AAED,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAYxE"}
1
+ {"version":3,"file":"config-io.d.ts","sourceRoot":"","sources":["../../src/codex/config-io.ts"],"names":[],"mappings":"AAGA,KAAK,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEvC,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOhE;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKlF;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhE;AAED,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAYxE"}
@@ -1,4 +1,4 @@
1
- import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
1
+ import { mkdir, readFile, rename, rm, writeFile } from "node:fs/promises";
2
2
  import path from "node:path";
3
3
  export async function readText(pathname) {
4
4
  try {
@@ -16,6 +16,9 @@ export async function writeAtomic(pathname, content) {
16
16
  await writeFile(temp, content, "utf8");
17
17
  await rename(temp, pathname);
18
18
  }
19
+ export async function removeFile(pathname) {
20
+ await rm(pathname, { force: true });
21
+ }
19
22
  export async function readJson(pathname) {
20
23
  const raw = await readText(pathname);
21
24
  if (!raw)
@@ -1 +1 @@
1
- {"version":3,"file":"config-io.js","sourceRoot":"","sources":["../../src/codex/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,OAAO,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QAClE,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAgB,EAAE,OAAe;IACjE,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACjG,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACvC,MAAM,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,QAAgB;IAC7C,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,CAAC;QACH,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,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,KAAK,MAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IACzG,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"config-io.js","sourceRoot":"","sources":["../../src/codex/config-io.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,QAAgB;IAC7C,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QAClE,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAgB,EAAE,OAAe;IACjE,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACjG,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACvC,MAAM,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,QAAgB;IAC7C,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,CAAC;QACH,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,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,KAAK,MAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IACzG,CAAC;AACH,CAAC"}
@@ -1,4 +1,11 @@
1
1
  export declare function mergeCodexConfigToml(source: string): string;
2
2
  export declare function isPraxisMcpConfigured(config: string): boolean;
3
3
  export declare function isUnifiedExecDisabled(config: string): boolean;
4
+ /**
5
+ * Inverse of mergeCodexConfigToml: strip the Praxis MCP tables and the
6
+ * Praxis-added `[features] unified_exec = false`. A `[features]` table that
7
+ * holds nothing but that flag is removed entirely; one with other keys keeps
8
+ * them. Returns "" when the document is left empty (caller deletes the file).
9
+ */
10
+ export declare function removePraxisCodexConfig(source: string): string;
4
11
  //# sourceMappingURL=config-toml.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-toml.d.ts","sourceRoot":"","sources":["../../src/codex/config-toml.ts"],"names":[],"mappings":"AA8DA,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAG3D;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAI7D;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE7D"}
1
+ {"version":3,"file":"config-toml.d.ts","sourceRoot":"","sources":["../../src/codex/config-toml.ts"],"names":[],"mappings":"AA8DA,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAG3D;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAI7D;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE7D;AA2BD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAmB9D"}
@@ -62,4 +62,54 @@ export function isPraxisMcpConfigured(config) {
62
62
  export function isUnifiedExecDisabled(config) {
63
63
  return /^\s*unified_exec\s*=\s*false\s*(?:#.*)?$/m.test(config);
64
64
  }
65
+ const FEATURES_HEADER_RE = /^\s*\[features\]\s*(?:#.*)?$/;
66
+ const UNIFIED_EXEC_FALSE_RE = /^\s*unified_exec\s*=\s*false\s*(?:#.*)?$/;
67
+ /** Split a TOML document into a leading section (header=null) plus one per table header. */
68
+ function splitSections(source) {
69
+ const sections = [];
70
+ let current = { header: null, body: [] };
71
+ for (const line of source.split(/\r?\n/)) {
72
+ if (isTableHeader(line)) {
73
+ sections.push(current);
74
+ current = { header: line, body: [] };
75
+ }
76
+ else {
77
+ current.body.push(line);
78
+ }
79
+ }
80
+ sections.push(current);
81
+ return sections;
82
+ }
83
+ function bodyIsBlank(body) {
84
+ return body.every((line) => line.trim() === "" || line.trim().startsWith("#"));
85
+ }
86
+ /**
87
+ * Inverse of mergeCodexConfigToml: strip the Praxis MCP tables and the
88
+ * Praxis-added `[features] unified_exec = false`. A `[features]` table that
89
+ * holds nothing but that flag is removed entirely; one with other keys keeps
90
+ * them. Returns "" when the document is left empty (caller deletes the file).
91
+ */
92
+ export function removePraxisCodexConfig(source) {
93
+ if (!source.trim())
94
+ return "";
95
+ const kept = [];
96
+ for (const section of splitSections(source)) {
97
+ if (section.header && isPraxisMcpHeader(section.header))
98
+ continue;
99
+ if (section.header && FEATURES_HEADER_RE.test(section.header)) {
100
+ const body = section.body.filter((line) => !UNIFIED_EXEC_FALSE_RE.test(line));
101
+ if (bodyIsBlank(body))
102
+ continue;
103
+ kept.push({ header: section.header, body });
104
+ continue;
105
+ }
106
+ kept.push(section);
107
+ }
108
+ const rebuilt = kept
109
+ .map((s) => (s.header ? [s.header, ...s.body].join("\n") : s.body.join("\n")))
110
+ .join("\n")
111
+ .replace(/\n{3,}/g, "\n\n")
112
+ .trim();
113
+ return rebuilt ? `${rebuilt}\n` : "";
114
+ }
65
115
  //# sourceMappingURL=config-toml.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-toml.js","sourceRoot":"","sources":["../../src/codex/config-toml.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,GAAG,8BAA8B,CAAC;AAClD,MAAM,cAAc,GAAG,kCAAkC,CAAC;AAE1D,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,kCAAkC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,OAAO,2FAA2F,CAAC,IAAI,CACrG,IAAI,CACL,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAc;IAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;AACnC,CAAC;AAED,SAAS,qBAAqB;IAC5B,OAAO;QACL,UAAU;QACV,qBAAqB;QACrB,gBAAgB;QAChB,EAAE;QACF,cAAc;QACd,iCAAiC;KAClC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAc;IACxC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3F,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;QAC9B,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,kCAAkC,CAAC;IACxE,CAAC;IAED,IAAI,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,KAAK,IAAI,CAAC,GAAG,aAAa,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtD,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAClC,QAAQ,GAAG,CAAC,CAAC;YACb,MAAM;QACR,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAC9B,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,aAAa,IAAI,KAAK,GAAG,QAAQ,IAAI,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAChG,CAAC;IACF,IAAI,QAAQ,IAAI,CAAC;QAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,sBAAsB,CAAC;;QACvD,KAAK,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC,EAAE,sBAAsB,CAAC,CAAC;IAChE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAc;IACjD,MAAM,IAAI,GAAG,kBAAkB,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/D,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,qBAAqB,EAAE,IAAI,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAc;IAClD,OAAO,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;WAC7B,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC;WACtC,MAAM,CAAC,QAAQ,CAAC,iCAAiC,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAc;IAClD,OAAO,2CAA2C,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAClE,CAAC"}
1
+ {"version":3,"file":"config-toml.js","sourceRoot":"","sources":["../../src/codex/config-toml.ts"],"names":[],"mappings":"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"}
@@ -17,5 +17,7 @@ export declare function codexHooksPath(projectDir: string): string;
17
17
  export { mergeCodexConfigToml } from "./config-toml.js";
18
18
  export declare function upsertCodexConfig(projectDir: string, dryRun?: boolean): Promise<CodexSetupResult>;
19
19
  export declare function upsertCodexHooks(projectDir: string, dryRun?: boolean): Promise<CodexSetupResult>;
20
+ export declare function removeCodexConfig(projectDir: string, dryRun?: boolean): Promise<CodexSetupResult>;
21
+ export declare function removeCodexHooks(projectDir: string, dryRun?: boolean): Promise<CodexSetupResult>;
20
22
  export declare function readCodexSetupStatus(projectDir: string): Promise<CodexSetupStatus>;
21
23
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/codex/config.ts"],"names":[],"mappings":"AAkBA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;IACvB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,2BAA2B,EAAE,OAAO,CAAC;IACrC,qBAAqB,EAAE,OAAO,CAAC;CAChC,CAAC;AAEF,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,UAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAWrG;AAED,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,UAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAYpG;AAED,wBAAsB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAcxF"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/codex/config.ts"],"names":[],"mappings":"AAoBA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;IACvB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,2BAA2B,EAAE,OAAO,CAAC;IACrC,qBAAqB,EAAE,OAAO,CAAC;CAChC,CAAC;AAEF,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,UAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAWrG;AAED,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,UAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAYpG;AAED,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,UAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAmBrG;AAED,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,UAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAsBpG;AAED,wBAAsB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAcxF"}
@@ -1,8 +1,8 @@
1
1
  import { existsSync } from "node:fs";
2
2
  import path from "node:path";
3
- import { CODEX_PERMISSION_COMMAND, CODEX_PRE_TOOL_COMMAND, hooksContainCommand, mergeCodexHooks, } from "./config-hooks.js";
4
- import { readJson, readText, writeAtomic } from "./config-io.js";
5
- import { isPraxisMcpConfigured, isUnifiedExecDisabled, mergeCodexConfigToml, } from "./config-toml.js";
3
+ import { CODEX_PERMISSION_COMMAND, CODEX_PRE_TOOL_COMMAND, hooksContainCommand, mergeCodexHooks, removePraxisCodexHooks, } from "./config-hooks.js";
4
+ import { readJson, readText, removeFile, writeAtomic } from "./config-io.js";
5
+ import { isPraxisMcpConfigured, isUnifiedExecDisabled, mergeCodexConfigToml, removePraxisCodexConfig, } from "./config-toml.js";
6
6
  const CODEX_DIR = ".codex";
7
7
  export function codexConfigPath(projectDir) {
8
8
  return path.join(projectDir, CODEX_DIR, "config.toml");
@@ -38,6 +38,55 @@ export async function upsertCodexHooks(projectDir, dryRun = false) {
38
38
  message: changed ? (dryRun ? "would update Codex hooks" : "updated Codex hooks") : "Codex hooks already up to date",
39
39
  };
40
40
  }
41
+ export async function removeCodexConfig(projectDir, dryRun = false) {
42
+ const pathname = codexConfigPath(projectDir);
43
+ const before = await readText(pathname);
44
+ if (!before)
45
+ return { path: pathname, changed: false, message: "no Codex MCP config to remove" };
46
+ const after = removePraxisCodexConfig(before);
47
+ const changed = before !== after;
48
+ if (changed && !dryRun) {
49
+ if (after.trim() === "")
50
+ await removeFile(pathname);
51
+ else
52
+ await writeAtomic(pathname, after);
53
+ }
54
+ return {
55
+ path: pathname,
56
+ changed,
57
+ message: changed
58
+ ? dryRun
59
+ ? "would remove Codex MCP config"
60
+ : "removed Codex MCP config"
61
+ : "no Codex MCP config to remove",
62
+ };
63
+ }
64
+ export async function removeCodexHooks(projectDir, dryRun = false) {
65
+ const pathname = codexHooksPath(projectDir);
66
+ const existing = await readJson(pathname);
67
+ if (!existing)
68
+ return { path: pathname, changed: false, message: "no Codex hooks to remove" };
69
+ const before = `${JSON.stringify(existing, null, 2)}\n`;
70
+ const next = removePraxisCodexHooks(existing);
71
+ const isEmpty = !next || Object.keys(next).length === 0;
72
+ const after = isEmpty ? "" : `${JSON.stringify(next, null, 2)}\n`;
73
+ const changed = before !== after;
74
+ if (changed && !dryRun) {
75
+ if (isEmpty)
76
+ await removeFile(pathname);
77
+ else
78
+ await writeAtomic(pathname, after);
79
+ }
80
+ return {
81
+ path: pathname,
82
+ changed,
83
+ message: changed
84
+ ? dryRun
85
+ ? "would remove Codex hooks"
86
+ : "removed Codex hooks"
87
+ : "no Codex hooks to remove",
88
+ };
89
+ }
41
90
  export async function readCodexSetupStatus(projectDir) {
42
91
  const configPath = codexConfigPath(projectDir);
43
92
  const hooksPath = codexHooksPath(projectDir);
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/codex/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/codex/config.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"evaluate-tool-audit.d.ts","sourceRoot":"","sources":["../../src/codex/evaluate-tool-audit.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAExF,wBAAgB,WAAW,CAAC,KAAK,EAAE;IACjC,IAAI,EAAE,OAAO,GAAG,KAAK,CAAC;IACtB,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAClE,GAAG,MAAM,CAUT;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE;IACxC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,OAAO,EAAE,qBAAqB,CAAC;IAC/B,IAAI,EAAE,OAAO,GAAG,KAAK,CAAC;IACtB,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BhB;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,EAAE,CAQ9D"}
1
+ {"version":3,"file":"evaluate-tool-audit.d.ts","sourceRoot":"","sources":["../../src/codex/evaluate-tool-audit.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAExF,wBAAgB,WAAW,CAAC,KAAK,EAAE;IACjC,IAAI,EAAE,OAAO,GAAG,KAAK,CAAC;IACtB,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAClE,GAAG,MAAM,CAUT;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE;IACxC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,OAAO,EAAE,qBAAqB,CAAC;IAC/B,IAAI,EAAE,OAAO,GAAG,KAAK,CAAC;IACtB,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BhB;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,EAAE,CAa9D"}
@@ -1,6 +1,7 @@
1
1
  import { appendAuditJsonl } from "../audit/jsonl.js";
2
2
  import { formatHookDenyMessages } from "../hooks/agent-message.js";
3
3
  import { sendGuardEvent } from "../telemetry/guard-events.js";
4
+ import { shouldBumpReadChainToMutate } from "../shell/analyze-command-aggregate.js";
4
5
  export function codexReason(input) {
5
6
  const formatted = formatHookDenyMessages({
6
7
  hook: input.kind === "shell" ? "beforeShellExecution" : "beforeMCPExecution",
@@ -45,8 +46,10 @@ export function shellReasons(analysis) {
45
46
  const reasons = [];
46
47
  if (!analysis.primary.evaluation.classification.matched)
47
48
  reasons.push("unknown_command(default_deny)");
48
- if (analysis.primary.evaluation.flags.metacharacters || analysis.raw_metacharacters)
49
+ if ((analysis.primary.evaluation.flags.metacharacters || analysis.raw_metacharacters) &&
50
+ shouldBumpReadChainToMutate(analysis.raw_command, analysis.operators)) {
49
51
  reasons.push("metacharacters");
52
+ }
50
53
  if (analysis.primary.evaluation.flags.dangerous_flags)
51
54
  reasons.push("dangerous_flags");
52
55
  if (analysis.fail_closed)
@@ -1 +1 @@
1
- {"version":3,"file":"evaluate-tool-audit.js","sourceRoot":"","sources":["../../src/codex/evaluate-tool-audit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAK9D,MAAM,UAAU,WAAW,CAAC,KAO3B;IACC,MAAM,SAAS,GAAG,sBAAsB,CAAC;QACvC,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,oBAAoB;QAC5E,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,cAAc,EAAE,KAAK,CAAC,cAAc;KACrC,CAAC,CAAC;IACH,OAAO,SAAS,CAAC,aAAa,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAalC;IACC,MAAM,KAAK,GAAG;QACZ,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC5B,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI;QACxB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;QAC1B,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS;QAClC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU;QACpC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO;QAC3C,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,UAAU,EAAE,KAAK,CAAC,SAAS;KAC5B,CAAC;IACF,MAAM,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QAC/D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IACH,MAAM,cAAc,CAAC;QACnB,GAAG,KAAK;QACR,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;QAC5C,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,kBAAkB;QAClE,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI;QACnC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI;QAC3B,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI;QAC/C,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,GAAG,CAAC,KAAK,CAAC,cAAc,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAuB;IAClD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO;QAAE,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IACvG,IAAI,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,IAAI,QAAQ,CAAC,kBAAkB;QAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACpH,IAAI,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,eAAe;QAAE,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACvF,IAAI,QAAQ,CAAC,WAAW;QAAE,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACnE,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,iCAAiC,QAAQ,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;IACnH,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"evaluate-tool-audit.js","sourceRoot":"","sources":["../../src/codex/evaluate-tool-audit.ts"],"names":[],"mappings":"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"}