@uvl000/claude-trace 3.0.13-workflowexp.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. package/README.md +477 -0
  2. package/README.zh-CN.md +477 -0
  3. package/dist/adapt/api-format.d.ts +41 -0
  4. package/dist/adapt/api-format.d.ts.map +1 -0
  5. package/dist/adapt/api-format.js +132 -0
  6. package/dist/adapt/api-format.js.map +1 -0
  7. package/dist/adapt/openai-adapter.d.ts +123 -0
  8. package/dist/adapt/openai-adapter.d.ts.map +1 -0
  9. package/dist/adapt/openai-adapter.js +628 -0
  10. package/dist/adapt/openai-adapter.js.map +1 -0
  11. package/dist/cli/cli-common.d.ts +73 -0
  12. package/dist/cli/cli-common.d.ts.map +1 -0
  13. package/dist/cli/cli-common.js +189 -0
  14. package/dist/cli/cli-common.js.map +1 -0
  15. package/dist/cli/cli.d.ts +23 -0
  16. package/dist/cli/cli.d.ts.map +1 -0
  17. package/dist/cli/cli.js +175 -0
  18. package/dist/cli/cli.js.map +1 -0
  19. package/dist/cli/codex-cli.d.ts +24 -0
  20. package/dist/cli/codex-cli.d.ts.map +1 -0
  21. package/dist/cli/codex-cli.js +146 -0
  22. package/dist/cli/codex-cli.js.map +1 -0
  23. package/dist/cli/opencode-cli.d.ts +23 -0
  24. package/dist/cli/opencode-cli.d.ts.map +1 -0
  25. package/dist/cli/opencode-cli.js +156 -0
  26. package/dist/cli/opencode-cli.js.map +1 -0
  27. package/dist/cli/trace-runner.d.ts +21 -0
  28. package/dist/cli/trace-runner.d.ts.map +1 -0
  29. package/dist/cli/trace-runner.js +282 -0
  30. package/dist/cli/trace-runner.js.map +1 -0
  31. package/dist/cli/validate-trace.d.ts +30 -0
  32. package/dist/cli/validate-trace.d.ts.map +1 -0
  33. package/dist/cli/validate-trace.js +230 -0
  34. package/dist/cli/validate-trace.js.map +1 -0
  35. package/dist/cli/verify-offline-bundle.d.ts +13 -0
  36. package/dist/cli/verify-offline-bundle.d.ts.map +1 -0
  37. package/dist/cli/verify-offline-bundle.js +89 -0
  38. package/dist/cli/verify-offline-bundle.js.map +1 -0
  39. package/dist/cli/vibe-coding-proxy-cli.d.ts +12 -0
  40. package/dist/cli/vibe-coding-proxy-cli.d.ts.map +1 -0
  41. package/dist/cli/vibe-coding-proxy-cli.js +218 -0
  42. package/dist/cli/vibe-coding-proxy-cli.js.map +1 -0
  43. package/dist/config/claude-config-overlay.d.ts +69 -0
  44. package/dist/config/claude-config-overlay.d.ts.map +1 -0
  45. package/dist/config/claude-config-overlay.js +229 -0
  46. package/dist/config/claude-config-overlay.js.map +1 -0
  47. package/dist/config/codex-config-overlay.d.ts +122 -0
  48. package/dist/config/codex-config-overlay.d.ts.map +1 -0
  49. package/dist/config/codex-config-overlay.js +352 -0
  50. package/dist/config/codex-config-overlay.js.map +1 -0
  51. package/dist/index.d.ts +15 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +37 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/intercept/forward-proxy.d.ts +77 -0
  56. package/dist/intercept/forward-proxy.d.ts.map +1 -0
  57. package/dist/intercept/forward-proxy.js +368 -0
  58. package/dist/intercept/forward-proxy.js.map +1 -0
  59. package/dist/intercept/header-redaction.d.ts +7 -0
  60. package/dist/intercept/header-redaction.d.ts.map +1 -0
  61. package/dist/intercept/header-redaction.js +28 -0
  62. package/dist/intercept/header-redaction.js.map +1 -0
  63. package/dist/intercept/interceptor-loader.js +26 -0
  64. package/dist/intercept/interceptor.d.ts +164 -0
  65. package/dist/intercept/interceptor.d.ts.map +1 -0
  66. package/dist/intercept/interceptor.js +496 -0
  67. package/dist/intercept/interceptor.js.map +1 -0
  68. package/dist/intercept/mitm-cert.d.ts +53 -0
  69. package/dist/intercept/mitm-cert.d.ts.map +1 -0
  70. package/dist/intercept/mitm-cert.js +259 -0
  71. package/dist/intercept/mitm-cert.js.map +1 -0
  72. package/dist/intercept/proxy-log-writer.d.ts +77 -0
  73. package/dist/intercept/proxy-log-writer.d.ts.map +1 -0
  74. package/dist/intercept/proxy-log-writer.js +323 -0
  75. package/dist/intercept/proxy-log-writer.js.map +1 -0
  76. package/dist/intercept/proxy-targets.d.ts +69 -0
  77. package/dist/intercept/proxy-targets.d.ts.map +1 -0
  78. package/dist/intercept/proxy-targets.js +129 -0
  79. package/dist/intercept/proxy-targets.js.map +1 -0
  80. package/dist/intercept/reverse-proxy.d.ts +191 -0
  81. package/dist/intercept/reverse-proxy.d.ts.map +1 -0
  82. package/dist/intercept/reverse-proxy.js +807 -0
  83. package/dist/intercept/reverse-proxy.js.map +1 -0
  84. package/dist/intercept/token-extractor.js +28 -0
  85. package/dist/report/html-generator.d.ts +96 -0
  86. package/dist/report/html-generator.d.ts.map +1 -0
  87. package/dist/report/html-generator.js +225 -0
  88. package/dist/report/html-generator.js.map +1 -0
  89. package/dist/report/index-generator.d.ts +89 -0
  90. package/dist/report/index-generator.d.ts.map +1 -0
  91. package/dist/report/index-generator.js +319 -0
  92. package/dist/report/index-generator.js.map +1 -0
  93. package/dist/report/shared-conversation-processor.d.ts +200 -0
  94. package/dist/report/shared-conversation-processor.d.ts.map +1 -0
  95. package/dist/report/shared-conversation-processor.js +720 -0
  96. package/dist/report/shared-conversation-processor.js.map +1 -0
  97. package/dist/routing/codex-routing.d.ts +40 -0
  98. package/dist/routing/codex-routing.d.ts.map +1 -0
  99. package/dist/routing/codex-routing.js +96 -0
  100. package/dist/routing/codex-routing.js.map +1 -0
  101. package/dist/routing/proxy-routing.d.ts +48 -0
  102. package/dist/routing/proxy-routing.d.ts.map +1 -0
  103. package/dist/routing/proxy-routing.js +113 -0
  104. package/dist/routing/proxy-routing.js.map +1 -0
  105. package/dist/tools/binary-utils.d.ts +29 -0
  106. package/dist/tools/binary-utils.d.ts.map +1 -0
  107. package/dist/tools/binary-utils.js +134 -0
  108. package/dist/tools/binary-utils.js.map +1 -0
  109. package/dist/tools/claude.d.ts +61 -0
  110. package/dist/tools/claude.d.ts.map +1 -0
  111. package/dist/tools/claude.js +449 -0
  112. package/dist/tools/claude.js.map +1 -0
  113. package/dist/tools/codex.d.ts +70 -0
  114. package/dist/tools/codex.d.ts.map +1 -0
  115. package/dist/tools/codex.js +492 -0
  116. package/dist/tools/codex.js.map +1 -0
  117. package/dist/tools/opencode.d.ts +85 -0
  118. package/dist/tools/opencode.d.ts.map +1 -0
  119. package/dist/tools/opencode.js +401 -0
  120. package/dist/tools/opencode.js.map +1 -0
  121. package/dist/tools/types.d.ts +91 -0
  122. package/dist/tools/types.d.ts.map +1 -0
  123. package/dist/tools/types.js +11 -0
  124. package/dist/tools/types.js.map +1 -0
  125. package/dist/types.d.ts +158 -0
  126. package/dist/types.d.ts.map +1 -0
  127. package/dist/types.js +12 -0
  128. package/dist/types.js.map +1 -0
  129. package/frontend/dist/index.global.js +1551 -0
  130. package/frontend/dist/styles.css +1027 -0
  131. package/frontend/template.html +19 -0
  132. package/node_modules/agent-base/LICENSE +22 -0
  133. package/node_modules/agent-base/README.md +69 -0
  134. package/node_modules/agent-base/dist/helpers.d.ts +15 -0
  135. package/node_modules/agent-base/dist/helpers.d.ts.map +1 -0
  136. package/node_modules/agent-base/dist/helpers.js +66 -0
  137. package/node_modules/agent-base/dist/helpers.js.map +1 -0
  138. package/node_modules/agent-base/dist/index.d.ts +41 -0
  139. package/node_modules/agent-base/dist/index.d.ts.map +1 -0
  140. package/node_modules/agent-base/dist/index.js +178 -0
  141. package/node_modules/agent-base/dist/index.js.map +1 -0
  142. package/node_modules/agent-base/package.json +46 -0
  143. package/node_modules/debug/LICENSE +20 -0
  144. package/node_modules/debug/README.md +481 -0
  145. package/node_modules/debug/package.json +64 -0
  146. package/node_modules/debug/src/browser.js +272 -0
  147. package/node_modules/debug/src/common.js +292 -0
  148. package/node_modules/debug/src/index.js +10 -0
  149. package/node_modules/debug/src/node.js +263 -0
  150. package/node_modules/http-proxy-agent/LICENSE +22 -0
  151. package/node_modules/http-proxy-agent/README.md +44 -0
  152. package/node_modules/http-proxy-agent/dist/index.d.ts +44 -0
  153. package/node_modules/http-proxy-agent/dist/index.d.ts.map +1 -0
  154. package/node_modules/http-proxy-agent/dist/index.js +148 -0
  155. package/node_modules/http-proxy-agent/dist/index.js.map +1 -0
  156. package/node_modules/http-proxy-agent/package.json +47 -0
  157. package/node_modules/https-proxy-agent/LICENSE +22 -0
  158. package/node_modules/https-proxy-agent/README.md +70 -0
  159. package/node_modules/https-proxy-agent/dist/index.d.ts +47 -0
  160. package/node_modules/https-proxy-agent/dist/index.d.ts.map +1 -0
  161. package/node_modules/https-proxy-agent/dist/index.js +180 -0
  162. package/node_modules/https-proxy-agent/dist/index.js.map +1 -0
  163. package/node_modules/https-proxy-agent/dist/parse-proxy-response.d.ts +15 -0
  164. package/node_modules/https-proxy-agent/dist/parse-proxy-response.d.ts.map +1 -0
  165. package/node_modules/https-proxy-agent/dist/parse-proxy-response.js +101 -0
  166. package/node_modules/https-proxy-agent/dist/parse-proxy-response.js.map +1 -0
  167. package/node_modules/https-proxy-agent/package.json +50 -0
  168. package/node_modules/ms/index.js +162 -0
  169. package/node_modules/ms/license.md +21 -0
  170. package/node_modules/ms/package.json +38 -0
  171. package/node_modules/ms/readme.md +59 -0
  172. package/node_modules/node-forge/LICENSE +331 -0
  173. package/node_modules/node-forge/README.md +2071 -0
  174. package/node_modules/node-forge/dist/forge.all.min.js +2 -0
  175. package/node_modules/node-forge/dist/forge.all.min.js.map +1 -0
  176. package/node_modules/node-forge/dist/forge.min.js +2 -0
  177. package/node_modules/node-forge/dist/forge.min.js.map +1 -0
  178. package/node_modules/node-forge/dist/prime.worker.min.js +2 -0
  179. package/node_modules/node-forge/dist/prime.worker.min.js.map +1 -0
  180. package/node_modules/node-forge/flash/swf/SocketPool.swf +0 -0
  181. package/node_modules/node-forge/lib/aes.js +1091 -0
  182. package/node_modules/node-forge/lib/aesCipherSuites.js +282 -0
  183. package/node_modules/node-forge/lib/asn1-validator.js +91 -0
  184. package/node_modules/node-forge/lib/asn1.js +1503 -0
  185. package/node_modules/node-forge/lib/baseN.js +186 -0
  186. package/node_modules/node-forge/lib/cipher.js +230 -0
  187. package/node_modules/node-forge/lib/cipherModes.js +999 -0
  188. package/node_modules/node-forge/lib/des.js +496 -0
  189. package/node_modules/node-forge/lib/ed25519.js +1091 -0
  190. package/node_modules/node-forge/lib/forge.js +13 -0
  191. package/node_modules/node-forge/lib/form.js +149 -0
  192. package/node_modules/node-forge/lib/hmac.js +146 -0
  193. package/node_modules/node-forge/lib/http.js +1346 -0
  194. package/node_modules/node-forge/lib/index.all.js +16 -0
  195. package/node_modules/node-forge/lib/index.js +33 -0
  196. package/node_modules/node-forge/lib/jsbn.js +1294 -0
  197. package/node_modules/node-forge/lib/kem.js +168 -0
  198. package/node_modules/node-forge/lib/log.js +319 -0
  199. package/node_modules/node-forge/lib/md.all.js +13 -0
  200. package/node_modules/node-forge/lib/md.js +11 -0
  201. package/node_modules/node-forge/lib/md5.js +289 -0
  202. package/node_modules/node-forge/lib/mgf.js +12 -0
  203. package/node_modules/node-forge/lib/mgf1.js +57 -0
  204. package/node_modules/node-forge/lib/oids.js +180 -0
  205. package/node_modules/node-forge/lib/pbe.js +1023 -0
  206. package/node_modules/node-forge/lib/pbkdf2.js +211 -0
  207. package/node_modules/node-forge/lib/pem.js +237 -0
  208. package/node_modules/node-forge/lib/pkcs1.js +276 -0
  209. package/node_modules/node-forge/lib/pkcs12.js +1078 -0
  210. package/node_modules/node-forge/lib/pkcs7.js +1260 -0
  211. package/node_modules/node-forge/lib/pkcs7asn1.js +410 -0
  212. package/node_modules/node-forge/lib/pki.js +102 -0
  213. package/node_modules/node-forge/lib/prime.js +297 -0
  214. package/node_modules/node-forge/lib/prime.worker.js +168 -0
  215. package/node_modules/node-forge/lib/prng.js +419 -0
  216. package/node_modules/node-forge/lib/pss.js +241 -0
  217. package/node_modules/node-forge/lib/random.js +191 -0
  218. package/node_modules/node-forge/lib/rc2.js +410 -0
  219. package/node_modules/node-forge/lib/rsa.js +1968 -0
  220. package/node_modules/node-forge/lib/sha1.js +319 -0
  221. package/node_modules/node-forge/lib/sha256.js +327 -0
  222. package/node_modules/node-forge/lib/sha512.js +561 -0
  223. package/node_modules/node-forge/lib/socket.js +287 -0
  224. package/node_modules/node-forge/lib/ssh.js +236 -0
  225. package/node_modules/node-forge/lib/tls.js +4282 -0
  226. package/node_modules/node-forge/lib/tlssocket.js +249 -0
  227. package/node_modules/node-forge/lib/util.js +2652 -0
  228. package/node_modules/node-forge/lib/x509.js +3251 -0
  229. package/node_modules/node-forge/lib/xhr.js +738 -0
  230. package/node_modules/node-forge/package.json +123 -0
  231. package/node_modules/smol-toml/LICENSE +24 -0
  232. package/node_modules/smol-toml/README.md +239 -0
  233. package/node_modules/smol-toml/dist/date.d.ts +41 -0
  234. package/node_modules/smol-toml/dist/date.js +127 -0
  235. package/node_modules/smol-toml/dist/error.d.ts +38 -0
  236. package/node_modules/smol-toml/dist/error.js +63 -0
  237. package/node_modules/smol-toml/dist/extract.d.ts +30 -0
  238. package/node_modules/smol-toml/dist/extract.js +100 -0
  239. package/node_modules/smol-toml/dist/index.cjs +897 -0
  240. package/node_modules/smol-toml/dist/index.d.ts +43 -0
  241. package/node_modules/smol-toml/dist/index.js +33 -0
  242. package/node_modules/smol-toml/dist/parse.d.ts +37 -0
  243. package/node_modules/smol-toml/dist/parse.js +148 -0
  244. package/node_modules/smol-toml/dist/primitive.d.ts +31 -0
  245. package/node_modules/smol-toml/dist/primitive.js +179 -0
  246. package/node_modules/smol-toml/dist/stringify.d.ts +31 -0
  247. package/node_modules/smol-toml/dist/stringify.js +167 -0
  248. package/node_modules/smol-toml/dist/struct.d.ts +32 -0
  249. package/node_modules/smol-toml/dist/struct.js +184 -0
  250. package/node_modules/smol-toml/dist/util.d.ts +42 -0
  251. package/node_modules/smol-toml/dist/util.js +111 -0
  252. package/node_modules/smol-toml/package.json +54 -0
  253. package/offline/bin/claude-trace +6 -0
  254. package/offline/bin/claude-wrapper +13 -0
  255. package/offline/bin/install-agent +14 -0
  256. package/offline/bin/validate-trace +6 -0
  257. package/offline/bin/verify-bundle +7 -0
  258. package/package.json +103 -0
@@ -0,0 +1,352 @@
1
+ "use strict";
2
+ /**
3
+ * @file Persistent Codex CLI config overlay for reverse-proxy interception.
4
+ *
5
+ * Codex reads API base URLs from `$CODEX_HOME/config.toml` and optional profile
6
+ * files (`*.config.toml`). This module builds a writable overlay at
7
+ * `~/.claude-trace/codex-config-overlay/` that rewrites all base URLs to the local
8
+ * trace proxy while symlinking auth and other non-config files from the real
9
+ * `$CODEX_HOME`. WebSocket support is disabled in custom providers for MVP logging.
10
+ */
11
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ var desc = Object.getOwnPropertyDescriptor(m, k);
14
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
+ desc = { enumerable: true, get: function() { return m[k]; } };
16
+ }
17
+ Object.defineProperty(o, k2, desc);
18
+ }) : (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ o[k2] = m[k];
21
+ }));
22
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
24
+ }) : function(o, v) {
25
+ o["default"] = v;
26
+ });
27
+ var __importStar = (this && this.__importStar) || (function () {
28
+ var ownKeys = function(o) {
29
+ ownKeys = Object.getOwnPropertyNames || function (o) {
30
+ var ar = [];
31
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
32
+ return ar;
33
+ };
34
+ return ownKeys(o);
35
+ };
36
+ return function (mod) {
37
+ if (mod && mod.__esModule) return mod;
38
+ var result = {};
39
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40
+ __setModuleDefault(result, mod);
41
+ return result;
42
+ };
43
+ })();
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.RESERVED_BUILTIN_PROVIDERS = void 0;
46
+ exports.getCodexConfigOverlayDir = getCodexConfigOverlayDir;
47
+ exports.isPersistentCodexOverlayDir = isPersistentCodexOverlayDir;
48
+ exports.resolveUserCodexHome = resolveUserCodexHome;
49
+ exports.resolveCodexConfigPath = resolveCodexConfigPath;
50
+ exports.readCodexConfig = readCodexConfig;
51
+ exports.readCodexAuth = readCodexAuth;
52
+ exports.isChatGptAuthMode = isChatGptAuthMode;
53
+ exports.hasChatGptAuth = hasChatGptAuth;
54
+ exports.syncCodexConfigOverlay = syncCodexConfigOverlay;
55
+ const fs = __importStar(require("fs"));
56
+ const os = __importStar(require("os"));
57
+ const path = __importStar(require("path"));
58
+ const smol_toml_1 = require("smol-toml");
59
+ /** Primary Codex configuration filename within `$CODEX_HOME`. */
60
+ const CONFIG_FILE = "config.toml";
61
+ /**
62
+ * Built-in Codex provider ids whose base URLs are managed by Codex itself.
63
+ * Custom providers in `model_providers` are rewritten; these are skipped.
64
+ */
65
+ const RESERVED_BUILTIN_PROVIDERS = new Set(["openai", "ollama", "lmstudio"]);
66
+ exports.RESERVED_BUILTIN_PROVIDERS = RESERVED_BUILTIN_PROVIDERS;
67
+ /**
68
+ * Creates a directory symlink (junction on Windows, dir symlink elsewhere).
69
+ *
70
+ * @param sourcePath - Existing directory to link from.
71
+ * @param overlayPath - Destination path inside the overlay.
72
+ */
73
+ function linkDirectory(sourcePath, overlayPath) {
74
+ const absoluteSource = path.resolve(sourcePath);
75
+ if (process.platform === "win32") {
76
+ fs.symlinkSync(absoluteSource, overlayPath, "junction");
77
+ return;
78
+ }
79
+ fs.symlinkSync(absoluteSource, overlayPath, "dir");
80
+ }
81
+ /**
82
+ * Symlinks a file, falling back to copy when symlink creation fails.
83
+ *
84
+ * @param sourcePath - Existing file in the user's real `$CODEX_HOME`.
85
+ * @param overlayPath - Destination path inside the overlay.
86
+ */
87
+ function linkOrCopyFile(sourcePath, overlayPath) {
88
+ try {
89
+ if (process.platform === "win32") {
90
+ fs.symlinkSync(path.resolve(sourcePath), overlayPath, "file");
91
+ }
92
+ else {
93
+ fs.symlinkSync(sourcePath, overlayPath, "file");
94
+ }
95
+ }
96
+ catch {
97
+ fs.copyFileSync(sourcePath, overlayPath);
98
+ }
99
+ }
100
+ /**
101
+ * Links a file or directory into the overlay if the destination does not exist.
102
+ *
103
+ * @param sourcePath - Path to the source file or directory.
104
+ * @param overlayPath - Corresponding path inside the overlay directory.
105
+ */
106
+ function linkEntry(sourcePath, overlayPath) {
107
+ if (fs.existsSync(overlayPath)) {
108
+ return;
109
+ }
110
+ const stat = fs.lstatSync(sourcePath);
111
+ if (stat.isDirectory()) {
112
+ linkDirectory(sourcePath, overlayPath);
113
+ return;
114
+ }
115
+ linkOrCopyFile(sourcePath, overlayPath);
116
+ }
117
+ /**
118
+ * Attempts to link one entry and records the outcome in `result`.
119
+ *
120
+ * @param entryLabel - Human-readable name recorded in the sync result.
121
+ * @param sourcePath - Source file or directory path.
122
+ * @param overlayPath - Destination path inside the overlay.
123
+ * @param result - Mutable sync result accumulator.
124
+ */
125
+ function tryLinkEntryWithResult(entryLabel, sourcePath, overlayPath, result) {
126
+ if (!fs.existsSync(sourcePath)) {
127
+ return;
128
+ }
129
+ try {
130
+ linkEntry(sourcePath, overlayPath);
131
+ result.linked.push(entryLabel);
132
+ }
133
+ catch (error) {
134
+ const err = error;
135
+ result.skipped.push({ entry: entryLabel, reason: err.message });
136
+ }
137
+ }
138
+ /**
139
+ * Returns the persistent overlay directory path for Codex config.
140
+ *
141
+ * @returns Absolute path under `~/.claude-trace/codex-config-overlay/`.
142
+ */
143
+ function getCodexConfigOverlayDir() {
144
+ return path.join(os.homedir(), ".claude-trace", "codex-config-overlay");
145
+ }
146
+ /**
147
+ * Returns true when `dir` is the canonical persistent Codex overlay directory.
148
+ *
149
+ * @param dir - Directory path to check, or `null`.
150
+ */
151
+ function isPersistentCodexOverlayDir(dir) {
152
+ if (!dir) {
153
+ return false;
154
+ }
155
+ return path.resolve(dir) === path.resolve(getCodexConfigOverlayDir());
156
+ }
157
+ /**
158
+ * Resolves the user's real Codex home directory.
159
+ *
160
+ * @param env - Environment map; defaults to `process.env`.
161
+ * @returns `CODEX_HOME` if set, otherwise `~/.codex`.
162
+ */
163
+ function resolveUserCodexHome(env = process.env) {
164
+ return env.CODEX_HOME || path.join(os.homedir(), ".codex");
165
+ }
166
+ /**
167
+ * Returns the path to `config.toml` if it exists, otherwise `null`.
168
+ *
169
+ * @param codexHome - Codex home directory; defaults to {@link resolveUserCodexHome}.
170
+ */
171
+ function resolveCodexConfigPath(codexHome) {
172
+ const home = codexHome || resolveUserCodexHome();
173
+ const configPath = path.join(home, CONFIG_FILE);
174
+ return fs.existsSync(configPath) ? configPath : null;
175
+ }
176
+ /**
177
+ * Reads and parses Codex `config.toml`, returning an empty object on missing/error.
178
+ *
179
+ * @param codexHome - Codex home directory; defaults to {@link resolveUserCodexHome}.
180
+ */
181
+ function readCodexConfig(codexHome) {
182
+ const configPath = resolveCodexConfigPath(codexHome);
183
+ if (!configPath) {
184
+ return {};
185
+ }
186
+ try {
187
+ return (0, smol_toml_1.parse)(fs.readFileSync(configPath, "utf-8"));
188
+ }
189
+ catch {
190
+ return {};
191
+ }
192
+ }
193
+ /**
194
+ * Reads and parses Codex `auth.json`, returning `null` when missing or invalid.
195
+ *
196
+ * @param codexHome - Codex home directory; defaults to {@link resolveUserCodexHome}.
197
+ */
198
+ function readCodexAuth(codexHome) {
199
+ const home = codexHome || resolveUserCodexHome();
200
+ const authPath = path.join(home, "auth.json");
201
+ if (!fs.existsSync(authPath)) {
202
+ return null;
203
+ }
204
+ try {
205
+ return JSON.parse(fs.readFileSync(authPath, "utf-8"));
206
+ }
207
+ catch {
208
+ return null;
209
+ }
210
+ }
211
+ /**
212
+ * Returns true when `auth.json` explicitly selects ChatGPT OAuth.
213
+ *
214
+ * Only checks the `auth_mode` field when it is present; older auth files
215
+ * without `auth_mode` fall through to {@link hasChatGptAuth} heuristics.
216
+ *
217
+ * @param codexHome - Codex home directory; defaults to {@link resolveUserCodexHome}.
218
+ */
219
+ function isChatGptAuthMode(codexHome) {
220
+ const auth = readCodexAuth(codexHome);
221
+ return auth?.auth_mode === "chatgpt";
222
+ }
223
+ /**
224
+ * Detects whether the user has ChatGPT OAuth credentials (vs OpenAI API key auth).
225
+ *
226
+ * Prefers an explicit `auth_mode: "chatgpt"` in `auth.json`. When `auth_mode` is
227
+ * absent, falls back to a legacy content heuristic for older Codex installs.
228
+ *
229
+ * @param codexHome - Codex home directory; defaults to {@link resolveUserCodexHome}.
230
+ */
231
+ function hasChatGptAuth(codexHome) {
232
+ if (isChatGptAuthMode(codexHome)) {
233
+ return true;
234
+ }
235
+ const auth = readCodexAuth(codexHome);
236
+ if (auth && "auth_mode" in auth) {
237
+ // Explicit non-ChatGPT auth_mode — do not apply legacy heuristics.
238
+ return false;
239
+ }
240
+ const home = codexHome || resolveUserCodexHome();
241
+ const authPath = path.join(home, "auth.json");
242
+ if (!fs.existsSync(authPath)) {
243
+ return false;
244
+ }
245
+ try {
246
+ const raw = fs.readFileSync(authPath, "utf-8");
247
+ return /chatgpt|chat\.openai/i.test(raw);
248
+ }
249
+ catch {
250
+ return false;
251
+ }
252
+ }
253
+ /**
254
+ * Rewrites all API base URLs in a Codex config to point at the local trace proxy.
255
+ *
256
+ * Sets `openai_base_url` and `chatgpt_base_url` to `proxyUrl`, rewrites custom
257
+ * `model_providers` base URLs, and disables WebSockets (not yet supported for logging).
258
+ *
259
+ * @param config - Parsed Codex configuration to rewrite.
260
+ * @param proxyUrl - Local trace proxy base URL (e.g. `http://127.0.0.1:PORT`).
261
+ * @returns New config object with proxy URLs applied.
262
+ */
263
+ function rewriteConfigForProxy(config, proxyUrl) {
264
+ const proxyBase = proxyUrl.replace(/\/$/, "");
265
+ const rewritten = { ...config };
266
+ rewritten.openai_base_url = proxyBase;
267
+ rewritten.chatgpt_base_url = proxyBase;
268
+ if (config.model_providers) {
269
+ const providers = {};
270
+ for (const [id, provider] of Object.entries(config.model_providers)) {
271
+ // Built-in providers use Codex-internal routing; only custom providers are rewritten.
272
+ if (RESERVED_BUILTIN_PROVIDERS.has(id)) {
273
+ continue;
274
+ }
275
+ providers[id] = {
276
+ ...provider,
277
+ base_url: proxyBase,
278
+ supports_websockets: false,
279
+ };
280
+ }
281
+ rewritten.model_providers = providers;
282
+ }
283
+ return rewritten;
284
+ }
285
+ /**
286
+ * Writes the rewritten main `config.toml` into the overlay directory.
287
+ *
288
+ * @param overlayDir - Writable overlay directory.
289
+ * @param config - Rewritten configuration to persist.
290
+ */
291
+ function writeOverlayConfig(overlayDir, config) {
292
+ fs.mkdirSync(overlayDir, { recursive: true });
293
+ fs.writeFileSync(path.join(overlayDir, CONFIG_FILE), (0, smol_toml_1.stringify)(config));
294
+ }
295
+ /**
296
+ * Rewrites and copies all `*.config.toml` profile files into the overlay.
297
+ *
298
+ * Codex supports named profiles as separate TOML files alongside the main config.
299
+ *
300
+ * @param sourceHome - User's real `$CODEX_HOME` directory.
301
+ * @param overlayDir - Writable overlay directory.
302
+ * @param proxyUrl - Local trace proxy base URL.
303
+ */
304
+ function syncProfileConfigs(sourceHome, overlayDir, proxyUrl) {
305
+ if (!fs.existsSync(sourceHome)) {
306
+ return;
307
+ }
308
+ for (const entry of fs.readdirSync(sourceHome)) {
309
+ if (!entry.endsWith(".config.toml")) {
310
+ continue;
311
+ }
312
+ const sourcePath = path.join(sourceHome, entry);
313
+ try {
314
+ const profileConfig = (0, smol_toml_1.parse)(fs.readFileSync(sourcePath, "utf-8"));
315
+ const rewritten = rewriteConfigForProxy(profileConfig, proxyUrl);
316
+ fs.writeFileSync(path.join(overlayDir, entry), (0, smol_toml_1.stringify)(rewritten));
317
+ }
318
+ catch {
319
+ // Skip unparseable profile files rather than failing the whole overlay sync.
320
+ }
321
+ }
322
+ }
323
+ /**
324
+ * Builds or refreshes the Codex config overlay.
325
+ *
326
+ * 1. Rewrites main `config.toml` and all `*.config.toml` profiles with proxy URLs.
327
+ * 2. Symlinks remaining `$CODEX_HOME` entries (auth, sessions, etc.) into the overlay.
328
+ *
329
+ * @param sourceHome - User's real `$CODEX_HOME` directory.
330
+ * @param overlayDir - Writable overlay directory to populate.
331
+ * @param proxyUrl - Local trace proxy base URL (e.g. `http://127.0.0.1:PORT`).
332
+ * @returns Summary of linked and skipped non-config entries.
333
+ */
334
+ function syncCodexConfigOverlay(sourceHome, overlayDir, proxyUrl) {
335
+ const result = { linked: [], skipped: [] };
336
+ fs.mkdirSync(overlayDir, { recursive: true });
337
+ const sourceConfig = readCodexConfig(sourceHome);
338
+ const rewritten = rewriteConfigForProxy(sourceConfig, proxyUrl);
339
+ writeOverlayConfig(overlayDir, rewritten);
340
+ syncProfileConfigs(sourceHome, overlayDir, proxyUrl);
341
+ if (fs.existsSync(sourceHome)) {
342
+ for (const entry of fs.readdirSync(sourceHome)) {
343
+ // Config files are rewritten above; everything else is symlinked.
344
+ if (entry === CONFIG_FILE || entry.endsWith(".config.toml")) {
345
+ continue;
346
+ }
347
+ tryLinkEntryWithResult(entry, path.join(sourceHome, entry), path.join(overlayDir, entry), result);
348
+ }
349
+ }
350
+ return result;
351
+ }
352
+ //# sourceMappingURL=codex-config-overlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-config-overlay.js","sourceRoot":"","sources":["../../src/config/codex-config-overlay.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @file index.ts
3
+ * @description Public package entry point for programmatic use of claude-trace.
4
+ *
5
+ * Re-exports the traffic logger (V1 interceptor), HTML generator, and shared
6
+ * types so consumers can embed logging or report generation without invoking
7
+ * the CLI binaries directly.
8
+ */
9
+ export { ClaudeTrafficLogger, initializeInterceptor, getLogger, InterceptorConfig } from "./intercept/interceptor";
10
+ export { HTMLGenerator } from "./report/html-generator";
11
+ export { RawPair, ClaudeData, HTMLGenerationData, TemplateReplacements } from "./types";
12
+ export * from "./intercept/interceptor";
13
+ export * from "./report/html-generator";
14
+ export * from "./types";
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACnH,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAGxF,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ /**
3
+ * @file index.ts
4
+ * @description Public package entry point for programmatic use of claude-trace.
5
+ *
6
+ * Re-exports the traffic logger (V1 interceptor), HTML generator, and shared
7
+ * types so consumers can embed logging or report generation without invoking
8
+ * the CLI binaries directly.
9
+ */
10
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ var desc = Object.getOwnPropertyDescriptor(m, k);
13
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
14
+ desc = { enumerable: true, get: function() { return m[k]; } };
15
+ }
16
+ Object.defineProperty(o, k2, desc);
17
+ }) : (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ o[k2] = m[k];
20
+ }));
21
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
22
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
23
+ };
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.HTMLGenerator = exports.getLogger = exports.initializeInterceptor = exports.ClaudeTrafficLogger = void 0;
26
+ // Main exports for the package
27
+ var interceptor_1 = require("./intercept/interceptor");
28
+ Object.defineProperty(exports, "ClaudeTrafficLogger", { enumerable: true, get: function () { return interceptor_1.ClaudeTrafficLogger; } });
29
+ Object.defineProperty(exports, "initializeInterceptor", { enumerable: true, get: function () { return interceptor_1.initializeInterceptor; } });
30
+ Object.defineProperty(exports, "getLogger", { enumerable: true, get: function () { return interceptor_1.getLogger; } });
31
+ var html_generator_1 = require("./report/html-generator");
32
+ Object.defineProperty(exports, "HTMLGenerator", { enumerable: true, get: function () { return html_generator_1.HTMLGenerator; } });
33
+ // Re-export everything for convenience
34
+ __exportStar(require("./intercept/interceptor"), exports);
35
+ __exportStar(require("./report/html-generator"), exports);
36
+ __exportStar(require("./types"), exports);
37
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;;;;;;;;;AAEH,+BAA+B;AAC/B,uDAAmH;AAA1G,kHAAA,mBAAmB,OAAA;AAAE,oHAAA,qBAAqB,OAAA;AAAE,wGAAA,SAAS,OAAA;AAC9D,0DAAwD;AAA/C,+GAAA,aAAa,OAAA;AAGtB,uCAAuC;AACvC,0DAAwC;AACxC,0DAAwC;AACxC,0CAAwB"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * @file forward-proxy.ts
3
+ * @description Independent HTTP/HTTPS forward proxy for vibe-coding-proxy.
4
+ *
5
+ * Unlike the existing reverse proxy, this server is configured through
6
+ * HTTP_PROXY/HTTPS_PROXY and does not spawn or manage any coding CLI process.
7
+ * HTTPS traffic is tunneled by default; only allowlisted hosts are decrypted
8
+ * with the local MITM CA so model API JSON can be logged.
9
+ */
10
+ import { type ProxyLogPaths } from "./proxy-log-writer";
11
+ /** Configuration for {@link ForwardProxyServer}. */
12
+ export interface ForwardProxyConfig {
13
+ /** TCP host to bind; defaults to loopback for safety. */
14
+ host?: string;
15
+ /** TCP port to bind; `0` lets the OS pick an ephemeral port. */
16
+ port?: number;
17
+ /** Directory for JSONL, JSON, and HTML logs. */
18
+ logDirectory?: string;
19
+ /** Base name for log files. */
20
+ logBaseName?: string;
21
+ /** Log metadata for non-target traffic as well. */
22
+ includeAllRequests?: boolean;
23
+ /** Open generated HTML when the proxy stops. */
24
+ openBrowser?: boolean;
25
+ /** Keep sensitive headers unredacted in logs. */
26
+ logSensitiveHeaders?: boolean;
27
+ /** URL prefixes that should be decrypted and fully logged. */
28
+ targetUrls?: string[];
29
+ /** Hostnames that should be decrypted and fully logged. */
30
+ mitmHosts?: string[];
31
+ /** Disable MITM; HTTPS CONNECT is tunneled only. */
32
+ disableMitm?: boolean;
33
+ /** Persistent local CA directory. */
34
+ caDir?: string;
35
+ }
36
+ /** Resolved listen address returned by {@link ForwardProxyServer.start}. */
37
+ export interface ForwardProxyInfo {
38
+ host: string;
39
+ port: number;
40
+ url: string;
41
+ logs: ProxyLogPaths;
42
+ caCertPath?: string;
43
+ }
44
+ /**
45
+ * HTTP forward proxy with optional allowlist-scoped HTTPS MITM logging.
46
+ */
47
+ export declare class ForwardProxyServer {
48
+ private readonly config;
49
+ private readonly targets;
50
+ private readonly logger;
51
+ private readonly ca;
52
+ private readonly server;
53
+ private readonly mitmHttpServer;
54
+ private readonly mitmSocketHosts;
55
+ private started;
56
+ private stopped;
57
+ /** @param config - Bind, logging, target matching, and MITM options. */
58
+ constructor(config?: ForwardProxyConfig);
59
+ /**
60
+ * Start the forward proxy and return the URL clients should use.
61
+ * @returns Listen information, log paths, and CA certificate path when MITM is enabled.
62
+ */
63
+ start(): Promise<ForwardProxyInfo>;
64
+ /** Stop the proxy and finalize logging output. */
65
+ stop(): void;
66
+ /** Handle non-CONNECT requests sent through HTTP_PROXY. */
67
+ private handlePlainHttpRequest;
68
+ /** Handle HTTPS CONNECT by tunneling or starting allowlist-scoped MITM. */
69
+ private handleConnect;
70
+ /** Handle HTTP requests after CONNECT TLS has been decrypted. */
71
+ private handleMitmHttpRequest;
72
+ /** Open a raw TCP tunnel for non-MITM CONNECT targets. */
73
+ private tunnelConnect;
74
+ /** Forward a buffered HTTP request upstream while streaming the response back. */
75
+ private forwardHttpExchange;
76
+ }
77
+ //# sourceMappingURL=forward-proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forward-proxy.d.ts","sourceRoot":"","sources":["../../src/intercept/forward-proxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxE,oDAAoD;AACpD,MAAM,WAAW,kBAAkB;IAClC,yDAAyD;IACzD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,gDAAgD;IAChD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iDAAiD;IACjD,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,oDAAoD;IACpD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,4EAA4E;AAC5E,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,aAAa,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAwBD;;GAEG;AACH,qBAAa,kBAAkB;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAED;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAA2B;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAc;IAC7C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiC;IACjE,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;IAExB,wEAAwE;gBAC5D,MAAM,GAAE,kBAAuB;IA0C3C;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,gBAAgB,CAAC;IA+BxC,kDAAkD;IAClD,IAAI,IAAI,IAAI;IAcZ,2DAA2D;IAC3D,OAAO,CAAC,sBAAsB;IAY9B,2EAA2E;IAC3E,OAAO,CAAC,aAAa;IAqCrB,iEAAiE;IACjE,OAAO,CAAC,qBAAqB;IAa7B,0DAA0D;IAC1D,OAAO,CAAC,aAAa;IA+BrB,kFAAkF;IAClF,OAAO,CAAC,mBAAmB;CA6E3B"}