@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,230 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.validateTrace = validateTrace;
38
+ const crypto = __importStar(require("crypto"));
39
+ const fs = __importStar(require("fs"));
40
+ const path = __importStar(require("path"));
41
+ const child_process_1 = require("child_process");
42
+ const header_redaction_1 = require("../intercept/header-redaction");
43
+ function upstreamRedaction(value) {
44
+ if (value.length > 14)
45
+ return `${value.substring(0, 10)}...${value.slice(-4)}`;
46
+ if (value.length > 4)
47
+ return `${value.substring(0, 2)}...${value.slice(-2)}`;
48
+ return "[REDACTED]";
49
+ }
50
+ function timestampMillis(value) {
51
+ if (typeof value === "number" && Number.isFinite(value)) {
52
+ return value < 1000000000000 ? value * 1000 : value;
53
+ }
54
+ if (typeof value === "string") {
55
+ const parsed = Date.parse(value);
56
+ return Number.isNaN(parsed) ? null : parsed;
57
+ }
58
+ return null;
59
+ }
60
+ function isMessageExchange(record) {
61
+ return (record.request?.method === "POST" &&
62
+ String(record.request?.url || "").includes("/v1/messages"));
63
+ }
64
+ function hasMeaningfulSuccessfulResponse(record) {
65
+ const response = record.response;
66
+ if (!response)
67
+ return false;
68
+ const status = Number(response.status_code);
69
+ if (status < 200 || status >= 300)
70
+ return true;
71
+ if (typeof response.body_raw === "string" && response.body_raw.trim())
72
+ return true;
73
+ if (Array.isArray(response.events) && response.events.length > 0)
74
+ return true;
75
+ const body = response.body;
76
+ return Boolean(body &&
77
+ typeof body === "object" &&
78
+ ((Array.isArray(body.content) && body.content.length > 0) || body.error));
79
+ }
80
+ function readPackageVersion() {
81
+ const packageRoot = path.resolve(__dirname, "..", "..");
82
+ const manifest = JSON.parse(fs.readFileSync(path.join(packageRoot, "package.json"), "utf8"));
83
+ return manifest.version;
84
+ }
85
+ /** Validate a WorkflowExp JSONL trace and atomically write metadata.json. */
86
+ function validateTrace(options) {
87
+ const environment = options.environment || process.env;
88
+ if (!path.isAbsolute(options.traceDirectory)) {
89
+ throw new Error("trace directory must be an absolute path");
90
+ }
91
+ fs.mkdirSync(options.traceDirectory, { recursive: true });
92
+ const tracePath = path.join(options.traceDirectory, "trace.jsonl");
93
+ const metadataPath = path.join(options.traceDirectory, "metadata.json");
94
+ const errors = [];
95
+ let redactionViolation = false;
96
+ let raw = fs.existsSync(tracePath) ? fs.readFileSync(tracePath, "utf8") : "";
97
+ const secrets = [environment.ANTHROPIC_API_KEY, environment.ANTHROPIC_AUTH_TOKEN].filter((value, index, values) => Boolean(value) && values.indexOf(value) === index);
98
+ for (const secret of secrets) {
99
+ const candidates = [
100
+ secret,
101
+ upstreamRedaction(secret),
102
+ upstreamRedaction(`Bearer ${secret}`),
103
+ ].filter((value) => value !== "[REDACTED]");
104
+ for (const candidate of candidates) {
105
+ if (!raw.includes(candidate))
106
+ continue;
107
+ raw = raw.split(candidate).join("[REDACTED]");
108
+ redactionViolation = true;
109
+ errors.push("secret material was found and removed");
110
+ }
111
+ }
112
+ if (fs.existsSync(tracePath))
113
+ fs.writeFileSync(tracePath, raw);
114
+ const records = [];
115
+ if (!raw.trim()) {
116
+ errors.push("trace.jsonl is missing or empty");
117
+ }
118
+ else {
119
+ for (const [index, line] of raw.split(/\r?\n/).entries()) {
120
+ if (!line.trim())
121
+ continue;
122
+ try {
123
+ const record = JSON.parse(line);
124
+ if (!record.request || !record.response) {
125
+ errors.push(`line ${index + 1} is not a request/response pair`);
126
+ }
127
+ records.push(record);
128
+ }
129
+ catch (error) {
130
+ errors.push(`line ${index + 1} is invalid JSON: ${error.message}`);
131
+ }
132
+ }
133
+ }
134
+ for (const [index, record] of records.entries()) {
135
+ for (const side of [record.request, record.response]) {
136
+ const headers = side?.headers;
137
+ if (!headers || typeof headers !== "object")
138
+ continue;
139
+ for (const [key, value] of Object.entries(headers)) {
140
+ const sensitive = header_redaction_1.SENSITIVE_HEADER_PARTS.some((part) => key.toLowerCase().includes(part));
141
+ if (sensitive && value !== "[REDACTED]") {
142
+ redactionViolation = true;
143
+ errors.push(`line ${index + 1} contains an unredacted ${key} header`);
144
+ }
145
+ }
146
+ }
147
+ }
148
+ const messageExchanges = records.filter(isMessageExchange);
149
+ if (messageExchanges.length === 0) {
150
+ errors.push("no /v1/messages request/response exchange was recorded");
151
+ }
152
+ if (messageExchanges.length > 0 &&
153
+ !messageExchanges.some((record) => {
154
+ const status = Number(record.response?.status_code);
155
+ return status >= 200 && status < 300;
156
+ })) {
157
+ errors.push("no successful /v1/messages response was recorded");
158
+ }
159
+ for (const [index, record] of messageExchanges.entries()) {
160
+ if (!hasMeaningfulSuccessfulResponse(record)) {
161
+ errors.push(`/v1/messages exchange ${index + 1} has an empty successful response`);
162
+ }
163
+ }
164
+ const statusCodes = {};
165
+ for (const record of records) {
166
+ const status = String(record.response?.status_code || "unknown");
167
+ statusCodes[status] = (statusCodes[status] || 0) + 1;
168
+ }
169
+ const timestamps = records
170
+ .flatMap((record) => [record.logged_at, record.request?.timestamp, record.response?.timestamp])
171
+ .map(timestampMillis)
172
+ .filter((value) => value !== null)
173
+ .sort((left, right) => left - right);
174
+ const hash = raw ? crypto.createHash("sha256").update(Buffer.from(raw)).digest("hex") : null;
175
+ let claudeVersion = null;
176
+ const versionResult = (0, child_process_1.spawnSync)(options.claudePath, ["--version"], {
177
+ encoding: "utf8",
178
+ env: { ...environment, CLAUDE_TRACE_ENABLED: "0" },
179
+ });
180
+ if (versionResult.status === 0) {
181
+ claudeVersion = (versionResult.stdout || versionResult.stderr || "").trim();
182
+ }
183
+ const uniqueErrors = [...new Set(errors)];
184
+ const metadata = {
185
+ schema_version: 1,
186
+ status: options.mode === "complete" && uniqueErrors.length === 0 ? "complete" : "incomplete",
187
+ trace_format: "@uvl000/claude-trace-jsonl",
188
+ trace_file: "trace.jsonl",
189
+ trace_sha256: hash,
190
+ trace_bytes: Buffer.byteLength(raw),
191
+ exchange_count: records.length,
192
+ message_exchange_count: messageExchanges.length,
193
+ http_status_codes: statusCodes,
194
+ started_at: timestamps.length > 0 ? new Date(timestamps[0]).toISOString() : null,
195
+ finished_at: timestamps.length > 0 ? new Date(timestamps[timestamps.length - 1]).toISOString() : null,
196
+ headers_fully_redacted: !redactionViolation,
197
+ include_all_requests: true,
198
+ claude_version: claudeVersion,
199
+ claude_trace_version: readPackageVersion(),
200
+ node_version: process.version,
201
+ validation_errors: uniqueErrors,
202
+ };
203
+ const metadataTemporary = `${metadataPath}.tmp`;
204
+ fs.writeFileSync(metadataTemporary, `${JSON.stringify(metadata, null, 2)}\n`);
205
+ fs.renameSync(metadataTemporary, metadataPath);
206
+ for (const duplicate of ["trace.json", "trace.html"]) {
207
+ fs.rmSync(path.join(options.traceDirectory, duplicate), { force: true });
208
+ }
209
+ return metadata;
210
+ }
211
+ function main() {
212
+ const mode = process.argv[2];
213
+ const claudePath = process.argv[3];
214
+ if (!mode || !new Set(["complete", "incomplete"]).has(mode) || !claudePath) {
215
+ console.error("Usage: claude-trace-validate <complete|incomplete> CLAUDE_PATH");
216
+ process.exit(2);
217
+ }
218
+ const traceDirectory = process.env.CLAUDE_TRACE_LOG_DIR;
219
+ if (!traceDirectory) {
220
+ console.error("CLAUDE_TRACE_LOG_DIR must be set to an absolute path");
221
+ process.exit(2);
222
+ }
223
+ const metadata = validateTrace({ mode, claudePath, traceDirectory });
224
+ console.log(JSON.stringify(metadata));
225
+ if (mode === "complete" && metadata.validation_errors.length > 0)
226
+ process.exit(1);
227
+ }
228
+ if (require.main === module)
229
+ main();
230
+ //# sourceMappingURL=validate-trace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-trace.js","sourceRoot":"","sources":["../../src/cli/validate-trace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+ interface BundleManifest {
3
+ schema_version: number;
4
+ platform: string;
5
+ arch: string;
6
+ node_version: string;
7
+ claude_trace_package: string;
8
+ claude_trace_version: string;
9
+ }
10
+ /** Verify platform, embedded package identity, and every file checksum in a bundle. */
11
+ export declare function verifyOfflineBundle(root: string): BundleManifest;
12
+ export {};
13
+ //# sourceMappingURL=verify-offline-bundle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-offline-bundle.d.ts","sourceRoot":"","sources":["../../src/cli/verify-offline-bundle.ts"],"names":[],"mappings":";AAMA,UAAU,cAAc;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,EAAE,MAAM,CAAC;CAC7B;AAED,uFAAuF;AACvF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAoDhE"}
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.verifyOfflineBundle = verifyOfflineBundle;
38
+ const crypto = __importStar(require("crypto"));
39
+ const fs = __importStar(require("fs"));
40
+ const path = __importStar(require("path"));
41
+ /** Verify platform, embedded package identity, and every file checksum in a bundle. */
42
+ function verifyOfflineBundle(root) {
43
+ const resolvedRoot = path.resolve(root);
44
+ const manifest = JSON.parse(fs.readFileSync(path.join(resolvedRoot, "manifest.json"), "utf8"));
45
+ if (process.platform !== manifest.platform || process.arch !== manifest.arch) {
46
+ throw new Error(`Bundle requires ${manifest.platform}/${manifest.arch}, got ${process.platform}/${process.arch}`);
47
+ }
48
+ if (process.version !== `v${manifest.node_version}`) {
49
+ throw new Error(`Bundle requires Node ${manifest.node_version}, got ${process.version}`);
50
+ }
51
+ const packageManifestPath = path.join(resolvedRoot, "package", "node_modules", ...manifest.claude_trace_package.split("/"), "package.json");
52
+ const packageManifest = JSON.parse(fs.readFileSync(packageManifestPath, "utf8"));
53
+ if (packageManifest.name !== manifest.claude_trace_package ||
54
+ packageManifest.version !== manifest.claude_trace_version) {
55
+ throw new Error(`Expected ${manifest.claude_trace_package}@${manifest.claude_trace_version}, ` +
56
+ `got ${packageManifest.name}@${packageManifest.version}`);
57
+ }
58
+ const checksumLines = fs
59
+ .readFileSync(path.join(resolvedRoot, "SHA256SUMS"), "utf8")
60
+ .trim()
61
+ .split("\n");
62
+ for (const line of checksumLines) {
63
+ const match = /^([0-9a-f]{64}) (.+)$/.exec(line);
64
+ if (!match)
65
+ throw new Error(`Invalid SHA256SUMS line: ${line}`);
66
+ const filePath = path.resolve(resolvedRoot, match[2]);
67
+ if (!filePath.startsWith(`${resolvedRoot}${path.sep}`)) {
68
+ throw new Error(`Checksum path escapes bundle: ${match[2]}`);
69
+ }
70
+ const actual = crypto
71
+ .createHash("sha256")
72
+ .update(fs.readFileSync(filePath))
73
+ .digest("hex");
74
+ if (actual !== match[1])
75
+ throw new Error(`Checksum mismatch: ${match[2]}`);
76
+ }
77
+ return manifest;
78
+ }
79
+ function main() {
80
+ const root = process.argv[2];
81
+ if (!root) {
82
+ console.error("Usage: verify-offline-bundle BUNDLE_ROOT");
83
+ process.exit(2);
84
+ }
85
+ console.log(JSON.stringify({ ok: true, ...verifyOfflineBundle(root) }));
86
+ }
87
+ if (require.main === module)
88
+ main();
89
+ //# sourceMappingURL=verify-offline-bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-offline-bundle.js","sourceRoot":"","sources":["../../src/cli/verify-offline-bundle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * @file vibe-coding-proxy-cli.ts
4
+ * @description Entry point for the standalone `vibe-coding-proxy` command.
5
+ *
6
+ * Starts an independent HTTP/HTTPS forward proxy that clients can use through
7
+ * HTTP_PROXY, HTTPS_PROXY, or ALL_PROXY. The command does not spawn Claude Code
8
+ * or any other CLI; it only prints the proxy URL, captures allowlisted model API
9
+ * traffic, and writes JSONL/JSON/HTML reports compatible with the existing UI.
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=vibe-coding-proxy-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vibe-coding-proxy-cli.d.ts","sourceRoot":"","sources":["../../src/cli/vibe-coding-proxy-cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;GAQG"}
@@ -0,0 +1,218 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * @file vibe-coding-proxy-cli.ts
5
+ * @description Entry point for the standalone `vibe-coding-proxy` command.
6
+ *
7
+ * Starts an independent HTTP/HTTPS forward proxy that clients can use through
8
+ * HTTP_PROXY, HTTPS_PROXY, or ALL_PROXY. The command does not spawn Claude Code
9
+ * or any other CLI; it only prints the proxy URL, captures allowlisted model API
10
+ * traffic, and writes JSONL/JSON/HTML reports compatible with the existing UI.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ const cli_common_1 = require("./cli-common");
14
+ const forward_proxy_1 = require("../intercept/forward-proxy");
15
+ /**
16
+ * Print a short reference list for common LLM API hosts/paths.
17
+ * This helps users configure `--target-url` / `--mitm-host` without memorizing vendor URLs.
18
+ */
19
+ function printCommonApiAddresses() {
20
+ console.log("Common API endpoints (examples):");
21
+ console.log("");
22
+ console.log(" Anthropic Messages API:");
23
+ console.log(" host: api.anthropic.com");
24
+ console.log(" path: /v1/messages");
25
+ console.log(" target-url example:");
26
+ console.log(" vibe-coding-proxy --target-url https://api.anthropic.com/v1/messages");
27
+ console.log("");
28
+ console.log(" OpenAI API:");
29
+ console.log(" host: api.openai.com");
30
+ console.log(" paths:");
31
+ console.log(" - /v1/responses");
32
+ console.log(" - /v1/chat/completions");
33
+ console.log(" target-url examples:");
34
+ console.log(" vibe-coding-proxy --target-url https://api.openai.com/v1/responses");
35
+ console.log(" vibe-coding-proxy --target-url https://api.openai.com/v1/chat/completions");
36
+ console.log("");
37
+ console.log(" Codex (ChatGPT OAuth) API:");
38
+ console.log(" host: chatgpt.com");
39
+ console.log(" base: https://chatgpt.com/backend-api/codex");
40
+ console.log(" common path: /backend-api/codex/responses");
41
+ console.log(" target-url examples:");
42
+ console.log(" vibe-coding-proxy --target-url https://chatgpt.com/backend-api/codex");
43
+ console.log(" vibe-coding-proxy --target-url https://chatgpt.com/backend-api/codex/responses");
44
+ console.log("");
45
+ console.log(" Anthropic-compatible gateways (examples):");
46
+ console.log(" - https://api.deepseek.com/anthropic");
47
+ console.log(" - https://api.minimax.chat/anthropic (if enabled by your provider)");
48
+ console.log("");
49
+ console.log("Tip: if you're not sure, start with --mitm-host <host> to decrypt all HTTPS requests for that host.");
50
+ }
51
+ /** Print command usage and examples. */
52
+ function showHelp() {
53
+ console.log(`
54
+ ${cli_common_1.colors.blue}vibe-coding-proxy${cli_common_1.colors.reset}
55
+ Standalone forward proxy for logging allowlisted LLM API traffic
56
+
57
+ ${cli_common_1.colors.yellow}USAGE:${cli_common_1.colors.reset}
58
+ vibe-coding-proxy --target-url URL [--target-url URL...]
59
+
60
+ ${cli_common_1.colors.yellow}OPTIONS:${cli_common_1.colors.reset}
61
+ --target-url URL Full URL prefix to MITM and log (repeatable)
62
+ --mitm-host HOST Hostname to MITM and log (repeatable)
63
+ --host HOST Listen host (default: 127.0.0.1)
64
+ --port PORT Listen port (default: 0, random)
65
+ --log-dir DIR Log directory (default: .vibe-coding-proxy)
66
+ --log NAME Log file base name (without extension)
67
+ --ca-dir DIR Local CA/cache directory
68
+ --no-mitm Disable TLS MITM; HTTPS CONNECT is pass-through only
69
+ --include-all-requests Log pass-through CONNECT metadata and non-target HTTP traffic
70
+ --include-sensitive-headers Log auth headers without redaction
71
+ --no-open Do not open generated HTML when the proxy exits
72
+ --generate-html FILE [OUT] Generate HTML from an existing JSONL/JSON log
73
+ --help, -h Show this help message
74
+
75
+ ${cli_common_1.colors.yellow}EXAMPLES:${cli_common_1.colors.reset}
76
+ vibe-coding-proxy --target-url https://api.deepseek.com/anthropic
77
+ vibe-coding-proxy --mitm-host api.deepseek.com --port 8888
78
+
79
+ ${cli_common_1.colors.yellow}CLIENT SETUP:${cli_common_1.colors.reset}
80
+ export HTTP_PROXY=http://127.0.0.1:PORT
81
+ export HTTPS_PROXY=http://127.0.0.1:PORT
82
+ export ALL_PROXY=http://127.0.0.1:PORT
83
+ export NODE_TLS_REJECT_UNAUTHORIZED=0
84
+ export SSL_CERT_FILE=CA_CERT_PATH
85
+ `);
86
+ console.log("");
87
+ printCommonApiAddresses();
88
+ }
89
+ /**
90
+ * Parse repeatable flags and simple scalar options.
91
+ * @param args - Usually `process.argv.slice(2)`.
92
+ */
93
+ function parseArgs(args) {
94
+ const config = {
95
+ targetUrls: [],
96
+ mitmHosts: [],
97
+ openBrowser: true,
98
+ };
99
+ for (let i = 0; i < args.length; i++) {
100
+ const arg = args[i];
101
+ const next = args[i + 1];
102
+ switch (arg) {
103
+ case "--target-url":
104
+ requireValue(arg, next);
105
+ config.targetUrls?.push(next);
106
+ i++;
107
+ break;
108
+ case "--mitm-host":
109
+ requireValue(arg, next);
110
+ config.mitmHosts?.push(next);
111
+ i++;
112
+ break;
113
+ case "--host":
114
+ requireValue(arg, next);
115
+ config.host = next;
116
+ i++;
117
+ break;
118
+ case "--port":
119
+ requireValue(arg, next);
120
+ config.port = Number(next);
121
+ i++;
122
+ break;
123
+ case "--log-dir":
124
+ requireValue(arg, next);
125
+ config.logDirectory = next;
126
+ i++;
127
+ break;
128
+ case "--log":
129
+ requireValue(arg, next);
130
+ config.logBaseName = next;
131
+ i++;
132
+ break;
133
+ case "--ca-dir":
134
+ requireValue(arg, next);
135
+ config.caDir = next;
136
+ i++;
137
+ break;
138
+ case "--no-mitm":
139
+ config.disableMitm = true;
140
+ break;
141
+ case "--include-all-requests":
142
+ config.includeAllRequests = true;
143
+ break;
144
+ case "--include-sensitive-headers":
145
+ config.logSensitiveHeaders = true;
146
+ break;
147
+ case "--no-open":
148
+ config.openBrowser = false;
149
+ break;
150
+ }
151
+ }
152
+ return { traceArgs: args, config };
153
+ }
154
+ /**
155
+ * Ensure an option with a required argument is followed by a usable value.
156
+ * @param flag - Current option name.
157
+ * @param value - Candidate option value.
158
+ */
159
+ function requireValue(flag, value) {
160
+ if (!value || value.startsWith("--")) {
161
+ throw new Error(`Missing value for ${flag}`);
162
+ }
163
+ }
164
+ /** Main CLI dispatcher. */
165
+ async function main() {
166
+ const args = process.argv.slice(2);
167
+ const { traceArgs, config } = parseArgs(args);
168
+ if (traceArgs.includes("--help") || traceArgs.includes("-h")) {
169
+ showHelp();
170
+ process.exit(0);
171
+ }
172
+ if (traceArgs.includes("--generate-html")) {
173
+ const { inputFile, outputFile } = (0, cli_common_1.parseGenerateHtmlArgs)(traceArgs);
174
+ if (!inputFile) {
175
+ (0, cli_common_1.log)("Missing input file for --generate-html", "red");
176
+ process.exit(1);
177
+ }
178
+ await (0, cli_common_1.generateHTMLFromCLI)(inputFile, outputFile, config.includeAllRequests || false, config.openBrowser !== false, "vibe-coding-proxy");
179
+ return;
180
+ }
181
+ const proxy = new forward_proxy_1.ForwardProxyServer(config);
182
+ const info = await proxy.start();
183
+ (0, cli_common_1.log)(`vibe-coding-proxy started`, "green");
184
+ console.log("");
185
+ console.log(`Proxy URL: ${info.url}`);
186
+ console.log(`Export:`);
187
+ console.log(` export HTTP_PROXY=${info.url}`);
188
+ console.log(` export HTTPS_PROXY=${info.url}`);
189
+ console.log(` export ALL_PROXY=${info.url}`);
190
+ console.log(` export NODE_TLS_REJECT_UNAUTHORIZED=0`);
191
+ if (info.caCertPath) {
192
+ console.log(` export SSL_CERT_FILE=${info.caCertPath}`);
193
+ console.log(`CA certificate: ${info.caCertPath}`);
194
+ console.log(`Trust this CA in clients that should expose HTTPS bodies to the proxy.`);
195
+ }
196
+ console.log(`Logs:`);
197
+ console.log(` JSONL: ${info.logs.jsonl}`);
198
+ console.log(` JSON: ${info.logs.json}`);
199
+ console.log(` HTML: ${info.logs.html}`);
200
+ console.log("");
201
+ console.log("Press Ctrl+C to stop the proxy.");
202
+ const shutdown = () => {
203
+ (0, cli_common_1.log)("\nStopping vibe-coding-proxy...", "yellow");
204
+ proxy.stop();
205
+ process.exit(0);
206
+ };
207
+ process.on("SIGINT", shutdown);
208
+ process.on("SIGTERM", shutdown);
209
+ await new Promise(() => {
210
+ // Keep the CLI alive until a signal arrives.
211
+ });
212
+ }
213
+ main().catch((error) => {
214
+ const err = error;
215
+ (0, cli_common_1.log)(`Error: ${err.message}`, "red");
216
+ process.exit(1);
217
+ });
218
+ //# sourceMappingURL=vibe-coding-proxy-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vibe-coding-proxy-cli.js","sourceRoot":"","sources":["../../src/cli/vibe-coding-proxy-cli.ts"],"names":[],"mappings":"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"}