@kaitranntt/ccs 4.4.0 → 5.0.0

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 (262) hide show
  1. package/README.md +14 -7
  2. package/VERSION +1 -1
  3. package/config/base-agy.settings.json +10 -0
  4. package/config/base-codex.settings.json +10 -0
  5. package/config/base-gemini.settings.json +10 -0
  6. package/dist/auth/auth-commands.d.ts +52 -0
  7. package/dist/auth/auth-commands.d.ts.map +1 -0
  8. package/dist/auth/auth-commands.js +479 -0
  9. package/dist/auth/auth-commands.js.map +1 -0
  10. package/dist/auth/profile-detector.d.ts +68 -0
  11. package/dist/auth/profile-detector.d.ts.map +1 -0
  12. package/dist/auth/profile-detector.js +209 -0
  13. package/dist/auth/profile-detector.js.map +1 -0
  14. package/dist/auth/profile-registry.d.ts +60 -0
  15. package/dist/auth/profile-registry.d.ts.map +1 -0
  16. package/dist/auth/profile-registry.js +188 -0
  17. package/dist/auth/profile-registry.js.map +1 -0
  18. package/dist/ccs.d.ts +10 -0
  19. package/dist/ccs.d.ts.map +1 -0
  20. package/dist/ccs.js +320 -0
  21. package/dist/ccs.js.map +1 -0
  22. package/dist/cliproxy/auth-handler.d.ts +93 -0
  23. package/dist/cliproxy/auth-handler.d.ts.map +1 -0
  24. package/dist/cliproxy/auth-handler.js +402 -0
  25. package/dist/cliproxy/auth-handler.js.map +1 -0
  26. package/dist/cliproxy/base-config-loader.d.ts +42 -0
  27. package/dist/cliproxy/base-config-loader.d.ts.map +1 -0
  28. package/dist/cliproxy/base-config-loader.js +123 -0
  29. package/dist/cliproxy/base-config-loader.js.map +1 -0
  30. package/dist/cliproxy/binary-manager.d.ts +104 -0
  31. package/dist/cliproxy/binary-manager.d.ts.map +1 -0
  32. package/dist/cliproxy/binary-manager.js +567 -0
  33. package/dist/cliproxy/binary-manager.js.map +1 -0
  34. package/dist/cliproxy/cliproxy-executor.d.ts +33 -0
  35. package/dist/cliproxy/cliproxy-executor.d.ts.map +1 -0
  36. package/dist/cliproxy/cliproxy-executor.js +297 -0
  37. package/dist/cliproxy/cliproxy-executor.js.map +1 -0
  38. package/dist/cliproxy/config-generator.d.ts +89 -0
  39. package/dist/cliproxy/config-generator.d.ts.map +1 -0
  40. package/dist/cliproxy/config-generator.js +263 -0
  41. package/dist/cliproxy/config-generator.js.map +1 -0
  42. package/dist/cliproxy/index.d.ts +13 -0
  43. package/dist/cliproxy/index.d.ts.map +1 -0
  44. package/dist/cliproxy/index.js +62 -0
  45. package/dist/cliproxy/index.js.map +1 -0
  46. package/dist/cliproxy/platform-detector.d.ts +48 -0
  47. package/dist/cliproxy/platform-detector.d.ts.map +1 -0
  48. package/dist/cliproxy/platform-detector.js +118 -0
  49. package/dist/cliproxy/platform-detector.js.map +1 -0
  50. package/dist/cliproxy/types.d.ts +169 -0
  51. package/dist/cliproxy/types.d.ts.map +1 -0
  52. package/dist/cliproxy/types.js +7 -0
  53. package/dist/cliproxy/types.js.map +1 -0
  54. package/dist/commands/doctor-command.d.ts +10 -0
  55. package/dist/commands/doctor-command.d.ts.map +1 -0
  56. package/dist/commands/doctor-command.js +44 -0
  57. package/dist/commands/doctor-command.js.map +1 -0
  58. package/dist/commands/help-command.d.ts +5 -0
  59. package/dist/commands/help-command.d.ts.map +1 -0
  60. package/dist/commands/help-command.js +104 -0
  61. package/dist/commands/help-command.js.map +1 -0
  62. package/dist/commands/install-command.d.ts +14 -0
  63. package/dist/commands/install-command.d.ts.map +1 -0
  64. package/dist/commands/install-command.js +39 -0
  65. package/dist/commands/install-command.js.map +1 -0
  66. package/dist/commands/shell-completion-command.d.ts +10 -0
  67. package/dist/commands/shell-completion-command.d.ts.map +1 -0
  68. package/dist/commands/shell-completion-command.js +85 -0
  69. package/dist/commands/shell-completion-command.js.map +1 -0
  70. package/dist/commands/sync-command.d.ts +10 -0
  71. package/dist/commands/sync-command.d.ts.map +1 -0
  72. package/dist/commands/sync-command.js +59 -0
  73. package/dist/commands/sync-command.js.map +1 -0
  74. package/dist/commands/update-command.d.ts +12 -0
  75. package/dist/commands/update-command.d.ts.map +1 -0
  76. package/dist/commands/update-command.js +295 -0
  77. package/dist/commands/update-command.js.map +1 -0
  78. package/dist/commands/version-command.d.ts +10 -0
  79. package/dist/commands/version-command.d.ts.map +1 -0
  80. package/dist/commands/version-command.js +100 -0
  81. package/dist/commands/version-command.js.map +1 -0
  82. package/dist/delegation/delegation-handler.d.ts +60 -0
  83. package/dist/delegation/delegation-handler.d.ts.map +1 -0
  84. package/dist/delegation/delegation-handler.js +174 -0
  85. package/dist/delegation/delegation-handler.js.map +1 -0
  86. package/dist/delegation/headless-executor.d.ts +114 -0
  87. package/dist/delegation/headless-executor.d.ts.map +1 -0
  88. package/dist/delegation/headless-executor.js +562 -0
  89. package/dist/delegation/headless-executor.js.map +1 -0
  90. package/dist/delegation/result-formatter.d.ts +108 -0
  91. package/dist/delegation/result-formatter.d.ts.map +1 -0
  92. package/dist/delegation/result-formatter.js +391 -0
  93. package/dist/delegation/result-formatter.js.map +1 -0
  94. package/dist/delegation/session-manager.d.ts +58 -0
  95. package/dist/delegation/session-manager.d.ts.map +1 -0
  96. package/dist/delegation/session-manager.js +153 -0
  97. package/dist/delegation/session-manager.js.map +1 -0
  98. package/dist/delegation/settings-parser.d.ts +31 -0
  99. package/dist/delegation/settings-parser.d.ts.map +1 -0
  100. package/dist/delegation/settings-parser.js +107 -0
  101. package/dist/delegation/settings-parser.js.map +1 -0
  102. package/dist/glmt/delta-accumulator.d.ts +210 -0
  103. package/dist/glmt/delta-accumulator.d.ts.map +1 -0
  104. package/dist/glmt/delta-accumulator.js +351 -0
  105. package/dist/glmt/delta-accumulator.js.map +1 -0
  106. package/dist/glmt/glmt-proxy.d.ts +72 -0
  107. package/dist/glmt/glmt-proxy.d.ts.map +1 -0
  108. package/dist/glmt/glmt-proxy.js +427 -0
  109. package/dist/glmt/glmt-proxy.js.map +1 -0
  110. package/dist/glmt/glmt-transformer.d.ts +265 -0
  111. package/dist/glmt/glmt-transformer.d.ts.map +1 -0
  112. package/dist/glmt/glmt-transformer.js +832 -0
  113. package/dist/glmt/glmt-transformer.js.map +1 -0
  114. package/dist/glmt/locale-enforcer.d.ts +38 -0
  115. package/dist/glmt/locale-enforcer.d.ts.map +1 -0
  116. package/dist/glmt/locale-enforcer.js +69 -0
  117. package/dist/glmt/locale-enforcer.js.map +1 -0
  118. package/dist/glmt/reasoning-enforcer.d.ts +52 -0
  119. package/dist/glmt/reasoning-enforcer.d.ts.map +1 -0
  120. package/dist/glmt/reasoning-enforcer.js +151 -0
  121. package/dist/glmt/reasoning-enforcer.js.map +1 -0
  122. package/dist/glmt/sse-parser.d.ts +47 -0
  123. package/dist/glmt/sse-parser.d.ts.map +1 -0
  124. package/dist/glmt/sse-parser.js +93 -0
  125. package/dist/glmt/sse-parser.js.map +1 -0
  126. package/dist/management/doctor.d.ts +104 -0
  127. package/dist/management/doctor.d.ts.map +1 -0
  128. package/dist/management/doctor.js +673 -0
  129. package/dist/management/doctor.js.map +1 -0
  130. package/dist/management/instance-manager.d.ts +57 -0
  131. package/dist/management/instance-manager.d.ts.map +1 -0
  132. package/dist/management/instance-manager.js +195 -0
  133. package/dist/management/instance-manager.js.map +1 -0
  134. package/dist/management/recovery-manager.d.ts +39 -0
  135. package/dist/management/recovery-manager.d.ts.map +1 -0
  136. package/dist/management/recovery-manager.js +141 -0
  137. package/dist/management/recovery-manager.js.map +1 -0
  138. package/dist/management/shared-manager.d.ts +47 -0
  139. package/dist/management/shared-manager.d.ts.map +1 -0
  140. package/dist/management/shared-manager.js +388 -0
  141. package/dist/management/shared-manager.js.map +1 -0
  142. package/dist/types/cli.d.ts +50 -0
  143. package/dist/types/cli.d.ts.map +1 -0
  144. package/dist/types/cli.js +16 -0
  145. package/dist/types/cli.js.map +1 -0
  146. package/dist/types/config.d.ts +51 -0
  147. package/dist/types/config.d.ts.map +1 -0
  148. package/dist/types/config.js +26 -0
  149. package/dist/types/config.js.map +1 -0
  150. package/dist/types/delegation.d.ts +61 -0
  151. package/dist/types/delegation.d.ts.map +1 -0
  152. package/dist/types/delegation.js +6 -0
  153. package/dist/types/delegation.js.map +1 -0
  154. package/dist/types/glmt.d.ts +95 -0
  155. package/dist/types/glmt.d.ts.map +1 -0
  156. package/dist/types/glmt.js +7 -0
  157. package/dist/types/glmt.js.map +1 -0
  158. package/dist/types/index.d.ts +13 -0
  159. package/dist/types/index.d.ts.map +1 -0
  160. package/dist/types/index.js +16 -0
  161. package/dist/types/index.js.map +1 -0
  162. package/dist/types/utils.d.ts +36 -0
  163. package/dist/types/utils.d.ts.map +1 -0
  164. package/dist/types/utils.js +22 -0
  165. package/dist/types/utils.js.map +1 -0
  166. package/dist/utils/claude-detector.d.ts +14 -0
  167. package/dist/utils/claude-detector.d.ts.map +1 -0
  168. package/dist/utils/claude-detector.js +112 -0
  169. package/dist/utils/claude-detector.js.map +1 -0
  170. package/dist/utils/claude-dir-installer.d.ts +46 -0
  171. package/dist/utils/claude-dir-installer.d.ts.map +1 -0
  172. package/dist/utils/claude-dir-installer.js +289 -0
  173. package/dist/utils/claude-dir-installer.js.map +1 -0
  174. package/dist/utils/claude-symlink-manager.d.ts +61 -0
  175. package/dist/utils/claude-symlink-manager.d.ts.map +1 -0
  176. package/dist/utils/claude-symlink-manager.js +291 -0
  177. package/dist/utils/claude-symlink-manager.js.map +1 -0
  178. package/dist/utils/config-manager.d.ts +32 -0
  179. package/dist/utils/config-manager.d.ts.map +1 -0
  180. package/dist/utils/config-manager.js +143 -0
  181. package/dist/utils/config-manager.js.map +1 -0
  182. package/dist/utils/delegation-validator.d.ts +39 -0
  183. package/dist/utils/delegation-validator.d.ts.map +1 -0
  184. package/dist/utils/delegation-validator.js +161 -0
  185. package/dist/utils/delegation-validator.js.map +1 -0
  186. package/dist/utils/error-codes.d.ts +36 -0
  187. package/dist/utils/error-codes.d.ts.map +1 -0
  188. package/dist/utils/error-codes.js +63 -0
  189. package/dist/utils/error-codes.js.map +1 -0
  190. package/dist/utils/error-manager.d.ts +59 -0
  191. package/dist/utils/error-manager.d.ts.map +1 -0
  192. package/dist/utils/error-manager.js +228 -0
  193. package/dist/utils/error-manager.js.map +1 -0
  194. package/dist/utils/helpers.d.ts +27 -0
  195. package/dist/utils/helpers.d.ts.map +1 -0
  196. package/dist/utils/helpers.js +150 -0
  197. package/dist/utils/helpers.js.map +1 -0
  198. package/dist/utils/package-manager-detector.d.ts +14 -0
  199. package/dist/utils/package-manager-detector.d.ts.map +1 -0
  200. package/dist/utils/package-manager-detector.js +162 -0
  201. package/dist/utils/package-manager-detector.js.map +1 -0
  202. package/dist/utils/progress-indicator.d.ts +52 -0
  203. package/dist/utils/progress-indicator.d.ts.map +1 -0
  204. package/dist/utils/progress-indicator.js +102 -0
  205. package/dist/utils/progress-indicator.js.map +1 -0
  206. package/dist/utils/prompt.d.ts +29 -0
  207. package/dist/utils/prompt.d.ts.map +1 -0
  208. package/dist/utils/prompt.js +116 -0
  209. package/dist/utils/prompt.js.map +1 -0
  210. package/dist/utils/shell-completion.d.ts +52 -0
  211. package/dist/utils/shell-completion.d.ts.map +1 -0
  212. package/dist/utils/shell-completion.js +231 -0
  213. package/dist/utils/shell-completion.js.map +1 -0
  214. package/dist/utils/shell-executor.d.ts +15 -0
  215. package/dist/utils/shell-executor.d.ts.map +1 -0
  216. package/dist/utils/shell-executor.js +57 -0
  217. package/dist/utils/shell-executor.js.map +1 -0
  218. package/dist/utils/update-checker.d.ts +48 -0
  219. package/dist/utils/update-checker.d.ts.map +1 -0
  220. package/dist/utils/update-checker.js +241 -0
  221. package/dist/utils/update-checker.js.map +1 -0
  222. package/lib/ccs +21 -1907
  223. package/lib/ccs.ps1 +26 -1800
  224. package/lib/error-codes.ps1 +2 -1
  225. package/lib/prompt.ps1 +2 -2
  226. package/package.json +31 -11
  227. package/scripts/add-shebang.js +39 -0
  228. package/scripts/bump-version.sh +25 -37
  229. package/scripts/dev-install.sh +32 -11
  230. package/scripts/postinstall.js +29 -29
  231. package/bin/auth/auth-commands.js +0 -499
  232. package/bin/auth/profile-detector.js +0 -204
  233. package/bin/auth/profile-registry.js +0 -225
  234. package/bin/ccs.js +0 -1034
  235. package/bin/delegation/README.md +0 -191
  236. package/bin/delegation/delegation-handler.js +0 -212
  237. package/bin/delegation/headless-executor.js +0 -618
  238. package/bin/delegation/result-formatter.js +0 -485
  239. package/bin/delegation/session-manager.js +0 -157
  240. package/bin/delegation/settings-parser.js +0 -109
  241. package/bin/glmt/delta-accumulator.js +0 -276
  242. package/bin/glmt/glmt-proxy.js +0 -495
  243. package/bin/glmt/glmt-transformer.js +0 -999
  244. package/bin/glmt/locale-enforcer.js +0 -72
  245. package/bin/glmt/reasoning-enforcer.js +0 -173
  246. package/bin/glmt/sse-parser.js +0 -96
  247. package/bin/management/doctor.js +0 -721
  248. package/bin/management/instance-manager.js +0 -202
  249. package/bin/management/recovery-manager.js +0 -135
  250. package/bin/management/shared-manager.js +0 -402
  251. package/bin/utils/claude-detector.js +0 -73
  252. package/bin/utils/claude-dir-installer.js +0 -283
  253. package/bin/utils/claude-symlink-manager.js +0 -289
  254. package/bin/utils/config-manager.js +0 -103
  255. package/bin/utils/delegation-validator.js +0 -154
  256. package/bin/utils/error-codes.js +0 -59
  257. package/bin/utils/error-manager.js +0 -165
  258. package/bin/utils/helpers.js +0 -136
  259. package/bin/utils/progress-indicator.js +0 -111
  260. package/bin/utils/prompt.js +0 -134
  261. package/bin/utils/shell-completion.js +0 -256
  262. package/bin/utils/update-checker.js +0 -243
@@ -0,0 +1,427 @@
1
+ "use strict";
2
+ /**
3
+ * GlmtProxy - Embedded HTTP proxy for GLM thinking support
4
+ *
5
+ * Architecture:
6
+ * - Intercepts Claude CLI → Z.AI calls
7
+ * - Transforms Anthropic format → OpenAI format
8
+ * - Converts reasoning_content → thinking blocks
9
+ * - Supports both streaming and buffered modes
10
+ *
11
+ * Lifecycle:
12
+ * - Spawned by bin/ccs.js when 'glmt' profile detected
13
+ * - Binds to 127.0.0.1:random_port (security + avoid conflicts)
14
+ * - Terminates when parent process exits
15
+ *
16
+ * Debugging:
17
+ * - Verbose: Pass --verbose to see request/response logs
18
+ * - Debug: Set CCS_DEBUG=1 to write logs to ~/.ccs/logs/
19
+ */
20
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ var desc = Object.getOwnPropertyDescriptor(m, k);
23
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
24
+ desc = { enumerable: true, get: function() { return m[k]; } };
25
+ }
26
+ Object.defineProperty(o, k2, desc);
27
+ }) : (function(o, m, k, k2) {
28
+ if (k2 === undefined) k2 = k;
29
+ o[k2] = m[k];
30
+ }));
31
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
32
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
33
+ }) : function(o, v) {
34
+ o["default"] = v;
35
+ });
36
+ var __importStar = (this && this.__importStar) || function (mod) {
37
+ if (mod && mod.__esModule) return mod;
38
+ var result = {};
39
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
40
+ __setModuleDefault(result, mod);
41
+ return result;
42
+ };
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ exports.GlmtProxy = void 0;
45
+ const http = __importStar(require("http"));
46
+ const https = __importStar(require("https"));
47
+ const glmt_transformer_1 = require("./glmt-transformer");
48
+ const sse_parser_1 = require("./sse-parser");
49
+ const delta_accumulator_1 = require("./delta-accumulator");
50
+ class GlmtProxy {
51
+ constructor(config = {}) {
52
+ this.transformer = new glmt_transformer_1.GlmtTransformer({
53
+ verbose: config.verbose,
54
+ debugLog: config.debugLog || process.env.CCS_DEBUG === '1' || process.env.CCS_DEBUG_LOG === '1',
55
+ });
56
+ // Use ANTHROPIC_BASE_URL from environment (set by settings.json) or fallback to Z.AI default
57
+ this.upstreamUrl =
58
+ process.env.ANTHROPIC_BASE_URL || 'https://api.z.ai/api/coding/paas/v4/chat/completions';
59
+ this.server = null;
60
+ this.port = null;
61
+ this.verbose = config.verbose || false;
62
+ this.timeout = config.timeout || 120000; // 120s default
63
+ }
64
+ /**
65
+ * Start HTTP server on random port
66
+ */
67
+ async start() {
68
+ return new Promise((resolve, reject) => {
69
+ this.server = http.createServer((req, res) => {
70
+ this.handleRequest(req, res);
71
+ });
72
+ // Bind to 127.0.0.1:0 (random port for security + avoid conflicts)
73
+ this.server.listen(0, '127.0.0.1', () => {
74
+ const address = this.server?.address();
75
+ this.port = typeof address === 'object' && address ? address.port : 0;
76
+ // Signal parent process
77
+ console.log(`PROXY_READY:${this.port}`);
78
+ // Info message (only show in verbose mode)
79
+ if (this.verbose) {
80
+ console.error(`[glmt] Proxy listening on port ${this.port} (streaming with auto-fallback)`);
81
+ }
82
+ // Debug mode notice
83
+ if (this.transformer.debugLog) {
84
+ console.error(`[glmt] Debug logging enabled: ${this.transformer.debugLogDir}`);
85
+ console.error(`[glmt] WARNING: Debug logs contain full request/response data`);
86
+ }
87
+ this.log(`Verbose logging enabled`);
88
+ resolve(this.port);
89
+ });
90
+ this.server.on('error', (error) => {
91
+ console.error('[glmt-proxy] Server error:', error);
92
+ reject(error);
93
+ });
94
+ });
95
+ }
96
+ /**
97
+ * Handle incoming HTTP request
98
+ */
99
+ async handleRequest(req, res) {
100
+ const startTime = Date.now();
101
+ this.log(`Request: ${req.method} ${req.url}`);
102
+ try {
103
+ // Only accept POST requests
104
+ if (req.method !== 'POST') {
105
+ res.writeHead(405, { 'Content-Type': 'application/json' });
106
+ res.end(JSON.stringify({ error: 'Method not allowed' }));
107
+ return;
108
+ }
109
+ // Read request body
110
+ const body = await this.readBody(req);
111
+ this.log(`Request body size: ${body.length} bytes`);
112
+ // Parse JSON with error handling
113
+ let anthropicRequest;
114
+ try {
115
+ anthropicRequest = JSON.parse(body);
116
+ }
117
+ catch (jsonError) {
118
+ const err = jsonError;
119
+ res.writeHead(400, { 'Content-Type': 'application/json' });
120
+ res.end(JSON.stringify({
121
+ error: {
122
+ type: 'invalid_request_error',
123
+ message: 'Invalid JSON in request body: ' + err.message,
124
+ },
125
+ }));
126
+ return;
127
+ }
128
+ // Log thinking parameter for debugging
129
+ if (anthropicRequest.thinking) {
130
+ this.log(`Request contains thinking parameter: ${JSON.stringify(anthropicRequest.thinking)}`);
131
+ }
132
+ else {
133
+ this.log(`Request does NOT contain thinking parameter (will use message tags or default)`);
134
+ }
135
+ // Try streaming first (default), fallback to buffered on error
136
+ const useStreaming = anthropicRequest.stream !== false;
137
+ if (useStreaming) {
138
+ try {
139
+ await this.handleStreamingRequest(req, res, anthropicRequest, startTime);
140
+ }
141
+ catch (streamError) {
142
+ const err = streamError;
143
+ this.log(`Streaming failed: ${err.message}, retrying buffered mode`);
144
+ try {
145
+ await this.handleBufferedRequest(req, res, anthropicRequest, startTime);
146
+ }
147
+ catch (bufferedError) {
148
+ // Both modes failed, propagate error
149
+ throw bufferedError;
150
+ }
151
+ }
152
+ }
153
+ else {
154
+ await this.handleBufferedRequest(req, res, anthropicRequest, startTime);
155
+ }
156
+ }
157
+ catch (error) {
158
+ const err = error;
159
+ console.error('[glmt-proxy] Request error:', err.message);
160
+ const duration = Date.now() - startTime;
161
+ this.log(`Request failed after ${duration}ms: ${err.message}`);
162
+ res.writeHead(500, { 'Content-Type': 'application/json' });
163
+ res.end(JSON.stringify({
164
+ error: {
165
+ type: 'proxy_error',
166
+ message: err.message,
167
+ },
168
+ }));
169
+ }
170
+ }
171
+ /**
172
+ * Handle buffered (non-streaming) request
173
+ */
174
+ async handleBufferedRequest(_req, res, anthropicRequest, startTime) {
175
+ // Transform to OpenAI format
176
+ const { openaiRequest, thinkingConfig } = this.transformer.transformRequest(anthropicRequest);
177
+ this.log(`Transformed request, thinking: ${thinkingConfig.thinking}`);
178
+ // Forward to Z.AI
179
+ const openaiResponse = (await this.forwardToUpstream(openaiRequest, {}));
180
+ this.log(`Received response from upstream`);
181
+ // Transform back to Anthropic format
182
+ const anthropicResponse = this.transformer.transformResponse(openaiResponse, thinkingConfig);
183
+ // Return to Claude CLI
184
+ res.writeHead(200, {
185
+ 'Content-Type': 'application/json',
186
+ 'Access-Control-Allow-Origin': '*',
187
+ });
188
+ res.end(JSON.stringify(anthropicResponse));
189
+ const duration = Date.now() - startTime;
190
+ this.log(`Request completed in ${duration}ms`);
191
+ }
192
+ /**
193
+ * Handle streaming request
194
+ */
195
+ async handleStreamingRequest(_req, res, anthropicRequest, startTime) {
196
+ this.log('Using streaming mode');
197
+ // Transform request
198
+ const { openaiRequest, thinkingConfig } = this.transformer.transformRequest(anthropicRequest);
199
+ // Force streaming
200
+ openaiRequest.stream = true;
201
+ // Set SSE headers
202
+ res.writeHead(200, {
203
+ 'Content-Type': 'text/event-stream',
204
+ 'Cache-Control': 'no-cache',
205
+ Connection: 'keep-alive',
206
+ 'Access-Control-Allow-Origin': '*',
207
+ 'X-Accel-Buffering': 'no', // Disable proxy buffering
208
+ });
209
+ // Disable Nagle's algorithm to prevent buffering at socket level
210
+ if (res.socket) {
211
+ res.socket.setNoDelay(true);
212
+ }
213
+ this.log('Starting SSE stream to Claude CLI (socket buffering disabled)');
214
+ // Forward and stream
215
+ await this.forwardAndStreamUpstream(openaiRequest, {}, res, thinkingConfig, startTime);
216
+ }
217
+ /**
218
+ * Read request body
219
+ */
220
+ readBody(req) {
221
+ return new Promise((resolve, reject) => {
222
+ const chunks = [];
223
+ const maxSize = 10 * 1024 * 1024; // 10MB limit
224
+ let totalSize = 0;
225
+ req.on('data', (chunk) => {
226
+ totalSize += chunk.length;
227
+ if (totalSize > maxSize) {
228
+ reject(new Error('Request body too large (max 10MB)'));
229
+ return;
230
+ }
231
+ chunks.push(chunk);
232
+ });
233
+ req.on('end', () => resolve(Buffer.concat(chunks).toString()));
234
+ req.on('error', reject);
235
+ });
236
+ }
237
+ /**
238
+ * Forward request to Z.AI upstream
239
+ */
240
+ forwardToUpstream(openaiRequest, _originalHeaders) {
241
+ return new Promise((resolve, reject) => {
242
+ const url = new URL(this.upstreamUrl);
243
+ const requestBody = JSON.stringify(openaiRequest);
244
+ const options = {
245
+ hostname: url.hostname,
246
+ port: url.port || 443,
247
+ path: url.pathname || '/api/coding/paas/v4/chat/completions',
248
+ method: 'POST',
249
+ headers: {
250
+ 'Content-Type': 'application/json',
251
+ 'Content-Length': Buffer.byteLength(requestBody),
252
+ Authorization: process.env.ANTHROPIC_AUTH_TOKEN || '',
253
+ 'User-Agent': 'CCS-GLMT-Proxy/1.0',
254
+ },
255
+ };
256
+ // Debug logging
257
+ this.log(`Forwarding to: ${url.hostname}${url.pathname}`);
258
+ // Set timeout
259
+ const timeoutHandle = setTimeout(() => {
260
+ req.destroy();
261
+ reject(new Error('Upstream request timeout'));
262
+ }, this.timeout);
263
+ const req = https.request(options, (res) => {
264
+ clearTimeout(timeoutHandle);
265
+ const chunks = [];
266
+ res.on('data', (chunk) => chunks.push(chunk));
267
+ res.on('end', () => {
268
+ try {
269
+ const body = Buffer.concat(chunks).toString();
270
+ this.log(`Upstream response size: ${body.length} bytes`);
271
+ // Check for non-200 status
272
+ if (res.statusCode !== 200) {
273
+ reject(new Error(`Upstream error: ${res.statusCode} ${res.statusMessage}\n${body}`));
274
+ return;
275
+ }
276
+ const response = JSON.parse(body);
277
+ resolve(response);
278
+ }
279
+ catch (error) {
280
+ const err = error;
281
+ reject(new Error('Invalid JSON from upstream: ' + err.message));
282
+ }
283
+ });
284
+ });
285
+ req.on('error', (error) => {
286
+ clearTimeout(timeoutHandle);
287
+ reject(error);
288
+ });
289
+ req.write(requestBody);
290
+ req.end();
291
+ });
292
+ }
293
+ /**
294
+ * Forward request to Z.AI and stream response
295
+ */
296
+ async forwardAndStreamUpstream(openaiRequest, _originalHeaders, clientRes, thinkingConfig, startTime) {
297
+ return new Promise((resolve, reject) => {
298
+ const url = new URL(this.upstreamUrl);
299
+ const requestBody = JSON.stringify(openaiRequest);
300
+ const options = {
301
+ hostname: url.hostname,
302
+ port: url.port || 443,
303
+ path: url.pathname || '/api/coding/paas/v4/chat/completions',
304
+ method: 'POST',
305
+ headers: {
306
+ 'Content-Type': 'application/json',
307
+ 'Content-Length': Buffer.byteLength(requestBody),
308
+ Authorization: process.env.ANTHROPIC_AUTH_TOKEN || '',
309
+ 'User-Agent': 'CCS-GLMT-Proxy/1.0',
310
+ Accept: 'text/event-stream',
311
+ },
312
+ };
313
+ this.log(`Forwarding streaming request to: ${url.hostname}${url.pathname}`);
314
+ // Apply timeout to streaming requests
315
+ const timeoutHandle = setTimeout(() => {
316
+ req.destroy();
317
+ reject(new Error(`Streaming request timeout after ${this.timeout}ms`));
318
+ }, this.timeout);
319
+ const req = https.request(options, (upstreamRes) => {
320
+ clearTimeout(timeoutHandle);
321
+ if (upstreamRes.statusCode !== 200) {
322
+ let body = '';
323
+ upstreamRes.on('data', (chunk) => (body += chunk.toString()));
324
+ upstreamRes.on('end', () => {
325
+ reject(new Error(`Upstream error: ${upstreamRes.statusCode}\n${body}`));
326
+ });
327
+ return;
328
+ }
329
+ const parser = new sse_parser_1.SSEParser();
330
+ const accumulator = new delta_accumulator_1.DeltaAccumulator(thinkingConfig);
331
+ upstreamRes.on('data', (chunk) => {
332
+ try {
333
+ const events = parser.parse(chunk);
334
+ events.forEach((event) => {
335
+ // Transform OpenAI delta → Anthropic events
336
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
337
+ const anthropicEvents = this.transformer.transformDelta(event, accumulator);
338
+ // Forward to Claude CLI with immediate flush
339
+ anthropicEvents.forEach((evt) => {
340
+ const eventLine = `event: ${evt.event}\n`;
341
+ const dataLine = `data: ${JSON.stringify(evt.data)}\n\n`;
342
+ clientRes.write(eventLine + dataLine);
343
+ // Flush immediately if method available
344
+ if (typeof clientRes.flush === 'function') {
345
+ clientRes.flush();
346
+ }
347
+ });
348
+ });
349
+ }
350
+ catch (error) {
351
+ const err = error;
352
+ this.log(`Error processing chunk: ${err.message}`);
353
+ }
354
+ });
355
+ upstreamRes.on('end', () => {
356
+ const duration = Date.now() - startTime;
357
+ this.log(`Streaming completed in ${duration}ms`);
358
+ clientRes.end();
359
+ resolve();
360
+ });
361
+ upstreamRes.on('error', (error) => {
362
+ clearTimeout(timeoutHandle);
363
+ this.log(`Upstream stream error: ${error.message}`);
364
+ clientRes.write(`event: error\n`);
365
+ clientRes.write(`data: ${JSON.stringify({ error: error.message })}\n\n`);
366
+ clientRes.end();
367
+ reject(error);
368
+ });
369
+ });
370
+ req.on('error', (error) => {
371
+ clearTimeout(timeoutHandle);
372
+ this.log(`Request error: ${error.message}`);
373
+ clientRes.write(`event: error\n`);
374
+ clientRes.write(`data: ${JSON.stringify({ error: error.message })}\n\n`);
375
+ clientRes.end();
376
+ reject(error);
377
+ });
378
+ req.write(requestBody);
379
+ req.end();
380
+ });
381
+ }
382
+ /**
383
+ * Stop proxy server
384
+ */
385
+ stop() {
386
+ if (this.server) {
387
+ this.log('Stopping proxy server');
388
+ this.server.close();
389
+ }
390
+ }
391
+ /**
392
+ * Log message if verbose
393
+ */
394
+ log(message) {
395
+ if (this.verbose) {
396
+ console.error(`[glmt-proxy] ${message}`);
397
+ }
398
+ }
399
+ }
400
+ exports.GlmtProxy = GlmtProxy;
401
+ // Main entry point
402
+ if (require.main === module) {
403
+ const args = process.argv.slice(2);
404
+ const verbose = args.includes('--verbose') || args.includes('-v');
405
+ const proxy = new GlmtProxy({ verbose });
406
+ proxy.start().catch((error) => {
407
+ console.error('[glmt-proxy] Failed to start:', error);
408
+ process.exit(1);
409
+ });
410
+ // Cleanup on signals
411
+ process.on('SIGTERM', () => {
412
+ proxy.stop();
413
+ process.exit(0);
414
+ });
415
+ process.on('SIGINT', () => {
416
+ proxy.stop();
417
+ process.exit(0);
418
+ });
419
+ // Keep process alive
420
+ process.on('uncaughtException', (error) => {
421
+ console.error('[glmt-proxy] Uncaught exception:', error);
422
+ proxy.stop();
423
+ process.exit(1);
424
+ });
425
+ }
426
+ exports.default = GlmtProxy;
427
+ //# sourceMappingURL=glmt-proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glmt-proxy.js","sourceRoot":"","sources":["../../src/glmt/glmt-proxy.ts"],"names":[],"mappings":"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"}