@kaitranntt/ccs 7.54.0-dev.1 → 7.54.0-dev.10

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 (171) hide show
  1. package/README.md +26 -4
  2. package/dist/ccs.js +2 -112
  3. package/dist/ccs.js.map +1 -1
  4. package/dist/commands/api-command/copy-command.d.ts +2 -0
  5. package/dist/commands/api-command/copy-command.d.ts.map +1 -0
  6. package/dist/commands/api-command/copy-command.js +41 -0
  7. package/dist/commands/api-command/copy-command.js.map +1 -0
  8. package/dist/commands/api-command/create-command.d.ts +2 -0
  9. package/dist/commands/api-command/create-command.d.ts.map +1 -0
  10. package/dist/commands/api-command/create-command.js +239 -0
  11. package/dist/commands/api-command/create-command.js.map +1 -0
  12. package/dist/commands/api-command/discover-command.d.ts +2 -0
  13. package/dist/commands/api-command/discover-command.d.ts.map +1 -0
  14. package/dist/commands/api-command/discover-command.js +69 -0
  15. package/dist/commands/api-command/discover-command.js.map +1 -0
  16. package/dist/commands/api-command/export-command.d.ts +2 -0
  17. package/dist/commands/api-command/export-command.d.ts.map +1 -0
  18. package/dist/commands/api-command/export-command.js +73 -0
  19. package/dist/commands/api-command/export-command.js.map +1 -0
  20. package/dist/commands/api-command/help.d.ts +3 -0
  21. package/dist/commands/api-command/help.d.ts.map +1 -0
  22. package/dist/commands/api-command/help.js +100 -0
  23. package/dist/commands/api-command/help.js.map +1 -0
  24. package/dist/commands/api-command/import-command.d.ts +2 -0
  25. package/dist/commands/api-command/import-command.d.ts.map +1 -0
  26. package/dist/commands/api-command/import-command.js +111 -0
  27. package/dist/commands/api-command/import-command.js.map +1 -0
  28. package/dist/commands/api-command/index.d.ts +3 -0
  29. package/dist/commands/api-command/index.d.ts.map +1 -0
  30. package/dist/commands/api-command/index.js +34 -0
  31. package/dist/commands/api-command/index.js.map +1 -0
  32. package/dist/commands/api-command/list-command.d.ts +2 -0
  33. package/dist/commands/api-command/list-command.d.ts.map +1 -0
  34. package/dist/commands/api-command/list-command.js +53 -0
  35. package/dist/commands/api-command/list-command.js.map +1 -0
  36. package/dist/commands/api-command/remove-command.d.ts +2 -0
  37. package/dist/commands/api-command/remove-command.d.ts.map +1 -0
  38. package/dist/commands/api-command/remove-command.js +63 -0
  39. package/dist/commands/api-command/remove-command.js.map +1 -0
  40. package/dist/commands/api-command/shared.d.ts +36 -0
  41. package/dist/commands/api-command/shared.d.ts.map +1 -0
  42. package/dist/commands/api-command/shared.js +164 -0
  43. package/dist/commands/api-command/shared.js.map +1 -0
  44. package/dist/commands/api-command.d.ts +1 -26
  45. package/dist/commands/api-command.d.ts.map +1 -1
  46. package/dist/commands/api-command.js +3 -807
  47. package/dist/commands/api-command.js.map +1 -1
  48. package/dist/commands/arg-extractor.d.ts +15 -0
  49. package/dist/commands/arg-extractor.d.ts.map +1 -1
  50. package/dist/commands/arg-extractor.js +48 -2
  51. package/dist/commands/arg-extractor.js.map +1 -1
  52. package/dist/commands/config-auth/index.d.ts.map +1 -1
  53. package/dist/commands/config-auth/index.js +35 -19
  54. package/dist/commands/config-auth/index.js.map +1 -1
  55. package/dist/commands/config-command-options.d.ts +14 -0
  56. package/dist/commands/config-command-options.d.ts.map +1 -0
  57. package/dist/commands/config-command-options.js +108 -0
  58. package/dist/commands/config-command-options.js.map +1 -0
  59. package/dist/commands/config-command.d.ts +1 -1
  60. package/dist/commands/config-command.d.ts.map +1 -1
  61. package/dist/commands/config-command.js +91 -104
  62. package/dist/commands/config-command.js.map +1 -1
  63. package/dist/commands/config-dashboard-host.d.ts +17 -0
  64. package/dist/commands/config-dashboard-host.d.ts.map +1 -0
  65. package/dist/commands/config-dashboard-host.js +99 -0
  66. package/dist/commands/config-dashboard-host.js.map +1 -0
  67. package/dist/commands/help-command.d.ts.map +1 -1
  68. package/dist/commands/help-command.js +1 -0
  69. package/dist/commands/help-command.js.map +1 -1
  70. package/dist/commands/named-command-router.d.ts +17 -0
  71. package/dist/commands/named-command-router.d.ts.map +1 -0
  72. package/dist/commands/named-command-router.js +39 -0
  73. package/dist/commands/named-command-router.js.map +1 -0
  74. package/dist/commands/root-command-router.d.ts +2 -0
  75. package/dist/commands/root-command-router.d.ts.map +1 -0
  76. package/dist/commands/root-command-router.js +209 -0
  77. package/dist/commands/root-command-router.js.map +1 -0
  78. package/dist/cursor/cursor-anthropic-response.d.ts +6 -0
  79. package/dist/cursor/cursor-anthropic-response.d.ts.map +1 -0
  80. package/dist/cursor/cursor-anthropic-response.js +190 -0
  81. package/dist/cursor/cursor-anthropic-response.js.map +1 -0
  82. package/dist/cursor/cursor-anthropic-translator.d.ts +11 -0
  83. package/dist/cursor/cursor-anthropic-translator.d.ts.map +1 -0
  84. package/dist/cursor/cursor-anthropic-translator.js +167 -0
  85. package/dist/cursor/cursor-anthropic-translator.js.map +1 -0
  86. package/dist/cursor/cursor-anthropic-types.d.ts +46 -0
  87. package/dist/cursor/cursor-anthropic-types.d.ts.map +1 -0
  88. package/dist/cursor/cursor-anthropic-types.js +3 -0
  89. package/dist/cursor/cursor-anthropic-types.js.map +1 -0
  90. package/dist/cursor/cursor-daemon-entry.d.ts.map +1 -1
  91. package/dist/cursor/cursor-daemon-entry.js +53 -24
  92. package/dist/cursor/cursor-daemon-entry.js.map +1 -1
  93. package/dist/cursor/cursor-models.d.ts.map +1 -1
  94. package/dist/cursor/cursor-models.js +36 -2
  95. package/dist/cursor/cursor-models.js.map +1 -1
  96. package/dist/glmt/sse-parser.d.ts +2 -0
  97. package/dist/glmt/sse-parser.d.ts.map +1 -1
  98. package/dist/glmt/sse-parser.js +4 -0
  99. package/dist/glmt/sse-parser.js.map +1 -1
  100. package/dist/management/instance-manager.d.ts.map +1 -1
  101. package/dist/management/instance-manager.js +1 -0
  102. package/dist/management/instance-manager.js.map +1 -1
  103. package/dist/management/shared-manager.d.ts +18 -1
  104. package/dist/management/shared-manager.d.ts.map +1 -1
  105. package/dist/management/shared-manager.js +82 -14
  106. package/dist/management/shared-manager.js.map +1 -1
  107. package/dist/shared/claude-extension-setup.d.ts.map +1 -1
  108. package/dist/shared/claude-extension-setup.js +3 -0
  109. package/dist/shared/claude-extension-setup.js.map +1 -1
  110. package/dist/shared/provider-preset-catalog.d.ts +1 -1
  111. package/dist/shared/provider-preset-catalog.d.ts.map +1 -1
  112. package/dist/shared/provider-preset-catalog.js +32 -15
  113. package/dist/shared/provider-preset-catalog.js.map +1 -1
  114. package/dist/ui/assets/{accounts-CZEg1_PX.js → accounts-v8ElDmpv.js} +1 -1
  115. package/dist/ui/assets/{alert-dialog-DhwS38kc.js → alert-dialog-L5Ct0Tm9.js} +1 -1
  116. package/dist/ui/assets/{api-sWNND4wP.js → api-C5CuNrT6.js} +1 -1
  117. package/dist/ui/assets/{auth-section-nJIpOcnm.js → auth-section-P8GsBk1u.js} +1 -1
  118. package/dist/ui/assets/{backups-section-D3A6hmrU.js → backups-section-gBIJ2rQw.js} +1 -1
  119. package/dist/ui/assets/checkbox-DQ1oAx_4.js +1 -0
  120. package/dist/ui/assets/{claude-extension-BjInaILv.js → claude-extension-CjEyjaGL.js} +1 -1
  121. package/dist/ui/assets/cliproxy-C0dWlSJs.js +3 -0
  122. package/dist/ui/assets/{cliproxy-control-panel-CKO2Sn9B.js → cliproxy-control-panel-CdCrzgLe.js} +1 -1
  123. package/dist/ui/assets/{confirm-dialog-DTKxwrat.js → confirm-dialog-DaydoeD7.js} +1 -1
  124. package/dist/ui/assets/copilot-SA3U22Y9.js +3 -0
  125. package/dist/ui/assets/cursor-BfkF3VwC.js +1 -0
  126. package/dist/ui/assets/{droid-Cl8QsJJL.js → droid-BfSJyZXD.js} +2 -2
  127. package/dist/ui/assets/{globalenv-section-C3dxxoD9.js → globalenv-section-rg8Ctc2R.js} +1 -1
  128. package/dist/ui/assets/{health-BUifaDU7.js → health-Cii2iTlp.js} +1 -1
  129. package/dist/ui/assets/icons-DtwH984l.js +1 -0
  130. package/dist/ui/assets/{index-CPdceT1C.js → index-B4Qc134R.js} +1 -1
  131. package/dist/ui/assets/{index-CYo-E5rU.js → index-CBleAyoZ.js} +1 -1
  132. package/dist/ui/assets/index-ClEn7Y7g.css +1 -0
  133. package/dist/ui/assets/{index-BOsbrhaa.js → index-D1CmdSLO.js} +1 -1
  134. package/dist/ui/assets/{index-xayyyR26.js → index-Gpb2Emvl.js} +1 -1
  135. package/dist/ui/assets/index-og5NMtJP.js +47 -0
  136. package/dist/ui/assets/providers/llama-cpp.svg +5 -0
  137. package/dist/ui/assets/{proxy-status-widget-D94htBPb.js → proxy-status-widget-CZnGc4zY.js} +1 -1
  138. package/dist/ui/assets/{radix-ui-BR1vy4kf.js → radix-ui-Dt3edmE5.js} +8 -8
  139. package/dist/ui/assets/searchable-select-BHhY-dTx.js +1 -0
  140. package/dist/ui/assets/{separator-3fBbTn-V.js → separator-7ggevEK6.js} +1 -1
  141. package/dist/ui/assets/{shared-q_FNNbjD.js → shared-CoiUG_Qa.js} +1 -1
  142. package/dist/ui/assets/{switch-5N8qBdBr.js → switch-3-7lTxFj.js} +1 -1
  143. package/dist/ui/assets/{tanstack-e99Cjjy2.js → tanstack-B8i0evp-.js} +1 -1
  144. package/dist/ui/assets/{updates-CubQ54J0.js → updates-rQ3GVJIq.js} +1 -1
  145. package/dist/ui/icons/novita.svg +9 -0
  146. package/dist/ui/index.html +5 -5
  147. package/dist/utils/fetch-proxy-setup.d.ts.map +1 -1
  148. package/dist/utils/fetch-proxy-setup.js.map +1 -1
  149. package/dist/utils/shell-executor.d.ts.map +1 -1
  150. package/dist/utils/shell-executor.js +12 -0
  151. package/dist/utils/shell-executor.js.map +1 -1
  152. package/dist/web-server/index.d.ts +1 -0
  153. package/dist/web-server/index.d.ts.map +1 -1
  154. package/dist/web-server/index.js +39 -3
  155. package/dist/web-server/index.js.map +1 -1
  156. package/dist/web-server/routes/profile-routes.d.ts +1 -0
  157. package/dist/web-server/routes/profile-routes.d.ts.map +1 -1
  158. package/dist/web-server/routes/profile-routes.js +3 -0
  159. package/dist/web-server/routes/profile-routes.js.map +1 -1
  160. package/dist/web-server/routes/variant-routes.d.ts +1 -0
  161. package/dist/web-server/routes/variant-routes.d.ts.map +1 -1
  162. package/dist/web-server/routes/variant-routes.js +3 -0
  163. package/dist/web-server/routes/variant-routes.js.map +1 -1
  164. package/package.json +2 -1
  165. package/dist/ui/assets/checkbox-CZrxD1iS.js +0 -1
  166. package/dist/ui/assets/cliproxy-BGiSCGkl.js +0 -3
  167. package/dist/ui/assets/copilot-CuRngdBg.js +0 -3
  168. package/dist/ui/assets/cursor-Dxo0uIiU.js +0 -1
  169. package/dist/ui/assets/icons-DrEfTmfX.js +0 -1
  170. package/dist/ui/assets/index-Btf_ow2V.css +0 -1
  171. package/dist/ui/assets/index-Cw9Urr0S.js +0 -47
@@ -0,0 +1,209 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.tryHandleRootCommand = void 0;
27
+ const named_command_router_1 = require("./named-command-router");
28
+ async function printUpdateCommandHelp() {
29
+ console.log('');
30
+ console.log('Usage: ccs update [options]');
31
+ console.log('');
32
+ console.log('Options:');
33
+ console.log(' --force Force reinstall current version');
34
+ console.log(' --beta, --dev Install from dev channel (unstable)');
35
+ console.log(' --help, -h Show this help message');
36
+ console.log('');
37
+ console.log('Examples:');
38
+ console.log(' ccs update Update to latest stable');
39
+ console.log(' ccs update --force Force reinstall');
40
+ console.log(' ccs update --beta Install dev channel');
41
+ console.log('');
42
+ }
43
+ const ROOT_COMMAND_ROUTES = [
44
+ {
45
+ name: 'migrate',
46
+ aliases: ['--migrate'],
47
+ handle: async (args) => {
48
+ const { handleMigrateCommand, printMigrateHelp } = await Promise.resolve().then(() => __importStar(require('./migrate-command')));
49
+ if (args.includes('--help') || args.includes('-h')) {
50
+ printMigrateHelp();
51
+ return;
52
+ }
53
+ await handleMigrateCommand(args);
54
+ },
55
+ },
56
+ {
57
+ name: 'update',
58
+ aliases: ['--update'],
59
+ handle: async (args) => {
60
+ if (args.includes('--help') || args.includes('-h')) {
61
+ await printUpdateCommandHelp();
62
+ return;
63
+ }
64
+ const { handleUpdateCommand } = await Promise.resolve().then(() => __importStar(require('./update-command')));
65
+ await handleUpdateCommand({
66
+ force: args.includes('--force'),
67
+ beta: args.includes('--beta') || args.includes('--dev'),
68
+ });
69
+ },
70
+ },
71
+ {
72
+ name: 'version',
73
+ aliases: ['--version', '-v'],
74
+ handle: async () => {
75
+ const { handleVersionCommand } = await Promise.resolve().then(() => __importStar(require('./version-command')));
76
+ await handleVersionCommand();
77
+ },
78
+ },
79
+ {
80
+ name: 'help',
81
+ aliases: ['--help', '-h'],
82
+ handle: async () => {
83
+ const { handleHelpCommand } = await Promise.resolve().then(() => __importStar(require('./help-command')));
84
+ await handleHelpCommand();
85
+ },
86
+ },
87
+ {
88
+ name: '--install',
89
+ handle: async () => {
90
+ const { handleInstallCommand } = await Promise.resolve().then(() => __importStar(require('./install-command')));
91
+ await handleInstallCommand();
92
+ },
93
+ },
94
+ {
95
+ name: '--uninstall',
96
+ handle: async () => {
97
+ const { handleUninstallCommand } = await Promise.resolve().then(() => __importStar(require('./install-command')));
98
+ await handleUninstallCommand();
99
+ },
100
+ },
101
+ {
102
+ name: '--shell-completion',
103
+ aliases: ['-sc'],
104
+ handle: async (args) => {
105
+ const { handleShellCompletionCommand } = await Promise.resolve().then(() => __importStar(require('./shell-completion-command')));
106
+ await handleShellCompletionCommand(args);
107
+ },
108
+ },
109
+ {
110
+ name: 'doctor',
111
+ aliases: ['--doctor'],
112
+ handle: async (args) => {
113
+ const { handleDoctorCommand } = await Promise.resolve().then(() => __importStar(require('./doctor-command')));
114
+ await handleDoctorCommand(args);
115
+ },
116
+ },
117
+ {
118
+ name: 'sync',
119
+ aliases: ['--sync'],
120
+ handle: async () => {
121
+ const { handleSyncCommand } = await Promise.resolve().then(() => __importStar(require('./sync-command')));
122
+ await handleSyncCommand();
123
+ },
124
+ },
125
+ {
126
+ name: 'cleanup',
127
+ aliases: ['--cleanup'],
128
+ handle: async (args) => {
129
+ const { handleCleanupCommand } = await Promise.resolve().then(() => __importStar(require('./cleanup-command')));
130
+ await handleCleanupCommand(args);
131
+ },
132
+ },
133
+ {
134
+ name: 'auth',
135
+ handle: async (args) => {
136
+ const AuthCommandsModule = await Promise.resolve().then(() => __importStar(require('../auth/auth-commands')));
137
+ const AuthCommands = AuthCommandsModule.default;
138
+ const authCommands = new AuthCommands();
139
+ await authCommands.route(args);
140
+ },
141
+ },
142
+ {
143
+ name: 'api',
144
+ handle: async (args) => {
145
+ const { handleApiCommand } = await Promise.resolve().then(() => __importStar(require('./api-command')));
146
+ await handleApiCommand(args);
147
+ },
148
+ },
149
+ {
150
+ name: 'cliproxy',
151
+ handle: async (args) => {
152
+ const { handleCliproxyCommand } = await Promise.resolve().then(() => __importStar(require('./cliproxy-command')));
153
+ await handleCliproxyCommand(args);
154
+ },
155
+ },
156
+ {
157
+ name: 'config',
158
+ handle: async (args) => {
159
+ const { handleConfigCommand } = await Promise.resolve().then(() => __importStar(require('./config-command')));
160
+ await handleConfigCommand(args);
161
+ },
162
+ },
163
+ {
164
+ name: 'tokens',
165
+ handle: async (args) => {
166
+ const { handleTokensCommand } = await Promise.resolve().then(() => __importStar(require('./tokens-command')));
167
+ process.exit(await handleTokensCommand(args));
168
+ },
169
+ },
170
+ {
171
+ name: 'persist',
172
+ handle: async (args) => {
173
+ const { handlePersistCommand } = await Promise.resolve().then(() => __importStar(require('./persist-command')));
174
+ await handlePersistCommand(args);
175
+ },
176
+ },
177
+ {
178
+ name: 'env',
179
+ handle: async (args) => {
180
+ const { handleEnvCommand } = await Promise.resolve().then(() => __importStar(require('./env-command')));
181
+ await handleEnvCommand(args);
182
+ },
183
+ },
184
+ {
185
+ name: 'setup',
186
+ aliases: ['--setup'],
187
+ handle: async (args) => {
188
+ const { handleSetupCommand } = await Promise.resolve().then(() => __importStar(require('./setup-command')));
189
+ await handleSetupCommand(args);
190
+ },
191
+ },
192
+ {
193
+ name: 'cursor',
194
+ handle: async (args) => {
195
+ const { handleCursorCommand } = await Promise.resolve().then(() => __importStar(require('./cursor-command')));
196
+ process.exit(await handleCursorCommand(args));
197
+ },
198
+ },
199
+ ];
200
+ async function tryHandleRootCommand(args) {
201
+ const route = (0, named_command_router_1.resolveNamedCommand)(args[0], ROOT_COMMAND_ROUTES);
202
+ if (!route) {
203
+ return false;
204
+ }
205
+ await route.handle(args.slice(1));
206
+ return true;
207
+ }
208
+ exports.tryHandleRootCommand = tryHandleRootCommand;
209
+ //# sourceMappingURL=root-command-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"root-command-router.js","sourceRoot":"","sources":["../../src/commands/root-command-router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /// <reference types="node" />
2
+ type ResponseHeaders = Headers | Record<string, string> | Array<[string, string]>;
3
+ export declare function createAnthropicErrorResponse(status: number, type: string, message: string, headers?: ResponseHeaders): Response;
4
+ export declare function createAnthropicProxyResponse(response: Response): Promise<Response>;
5
+ export {};
6
+ //# sourceMappingURL=cursor-anthropic-response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-anthropic-response.d.ts","sourceRoot":"","sources":["../../src/cursor/cursor-anthropic-response.ts"],"names":[],"mappings":";AAOA,KAAK,eAAe,GAAG,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAoClF,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,eAAe,GACxB,QAAQ,CASV;AAmLD,wBAAsB,4BAA4B,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAYxF"}
@@ -0,0 +1,190 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createAnthropicProxyResponse = exports.createAnthropicErrorResponse = void 0;
4
+ const delta_accumulator_1 = require("../glmt/delta-accumulator");
5
+ const glmt_transformer_1 = require("../glmt/glmt-transformer");
6
+ const sse_parser_1 = require("../glmt/sse-parser");
7
+ const JSON_TRANSLATION_ERROR_MESSAGE = 'Failed to translate Cursor JSON response';
8
+ const STREAM_TRANSLATION_ERROR_MESSAGE = 'Failed to translate Cursor SSE response';
9
+ function createAnthropicErrorPayload(type, message) {
10
+ return {
11
+ type: 'error',
12
+ error: {
13
+ type,
14
+ message,
15
+ },
16
+ };
17
+ }
18
+ function formatErrorForLog(error) {
19
+ if (error instanceof Error) {
20
+ return error.message;
21
+ }
22
+ try {
23
+ return JSON.stringify(error);
24
+ }
25
+ catch {
26
+ return String(error);
27
+ }
28
+ }
29
+ function logTranslationError(context, error) {
30
+ console.error(`[cursor-anthropic-response] ${context}: ${formatErrorForLog(error)}`);
31
+ }
32
+ function createAnthropicErrorResponse(status, type, message, headers) {
33
+ const responseHeaders = new Headers(headers);
34
+ responseHeaders.set('Content-Type', 'application/json');
35
+ responseHeaders.delete('Content-Length');
36
+ return new Response(JSON.stringify(createAnthropicErrorPayload(type, message)), {
37
+ status,
38
+ headers: responseHeaders,
39
+ });
40
+ }
41
+ exports.createAnthropicErrorResponse = createAnthropicErrorResponse;
42
+ function formatSseEvent(event, data) {
43
+ return `event: ${event}\ndata: ${JSON.stringify(data)}\n\n`;
44
+ }
45
+ function hasTranslatableChoices(value) {
46
+ if (typeof value !== 'object' || value === null) {
47
+ return false;
48
+ }
49
+ const { choices } = value;
50
+ if (!Array.isArray(choices) || choices.length === 0) {
51
+ return false;
52
+ }
53
+ const firstChoice = choices[0];
54
+ if (typeof firstChoice !== 'object' || firstChoice === null) {
55
+ return false;
56
+ }
57
+ const message = firstChoice.message;
58
+ return typeof message === 'object' && message !== null;
59
+ }
60
+ function isSyntheticTransformationFallback(value) {
61
+ return (typeof value === 'object' &&
62
+ value !== null &&
63
+ typeof value.id === 'string' &&
64
+ value.id.startsWith('msg_error_'));
65
+ }
66
+ async function createAnthropicErrorProxyResponse(response) {
67
+ const headers = new Headers(response.headers);
68
+ headers.delete('Content-Type');
69
+ headers.delete('Content-Length');
70
+ let type = response.status === 401
71
+ ? 'authentication_error'
72
+ : response.status === 429
73
+ ? 'rate_limit_error'
74
+ : response.status >= 400 && response.status < 500
75
+ ? 'invalid_request_error'
76
+ : 'api_error';
77
+ let message = `Cursor request failed with status ${response.status}`;
78
+ try {
79
+ const contentType = (response.headers.get('content-type') || '').toLowerCase();
80
+ if (contentType.includes('application/json')) {
81
+ const payload = (await response.json());
82
+ if (typeof payload?.error?.type === 'string' && payload.error.type.trim().length > 0) {
83
+ type = payload.error.type;
84
+ }
85
+ if (typeof payload?.error?.message === 'string' && payload.error.message.trim().length > 0) {
86
+ message = payload.error.message;
87
+ }
88
+ else if (typeof payload?.message === 'string' && payload.message.trim().length > 0) {
89
+ message = payload.message;
90
+ }
91
+ }
92
+ else {
93
+ const text = (await response.text()).trim();
94
+ if (text.length > 0) {
95
+ message = text;
96
+ }
97
+ }
98
+ }
99
+ catch (error) {
100
+ logTranslationError('Failed to parse Cursor error response', error);
101
+ }
102
+ return createAnthropicErrorResponse(response.status, type, message, headers);
103
+ }
104
+ async function createAnthropicJsonResponse(response) {
105
+ try {
106
+ const openAiResponse = await response.json();
107
+ if (!hasTranslatableChoices(openAiResponse)) {
108
+ return createAnthropicErrorResponse(502, 'api_error', JSON_TRANSLATION_ERROR_MESSAGE);
109
+ }
110
+ const anthropicResponse = new glmt_transformer_1.GlmtTransformer().transformResponse(openAiResponse);
111
+ if (isSyntheticTransformationFallback(anthropicResponse)) {
112
+ logTranslationError('Cursor JSON translation produced synthetic fallback response', anthropicResponse);
113
+ return createAnthropicErrorResponse(502, 'api_error', JSON_TRANSLATION_ERROR_MESSAGE);
114
+ }
115
+ return new Response(JSON.stringify(anthropicResponse), {
116
+ status: response.status,
117
+ headers: { 'Content-Type': 'application/json' },
118
+ });
119
+ }
120
+ catch (error) {
121
+ logTranslationError('Cursor JSON translation failed', error);
122
+ return createAnthropicErrorResponse(502, 'api_error', JSON_TRANSLATION_ERROR_MESSAGE);
123
+ }
124
+ }
125
+ function createAnthropicStreamingResponse(response) {
126
+ const body = response.body;
127
+ if (!body) {
128
+ return createAnthropicErrorResponse(502, 'api_error', 'Cursor stream ended before a response body was available');
129
+ }
130
+ const parser = new sse_parser_1.SSEParser({ throwOnMalformedJson: true });
131
+ const transformer = new glmt_transformer_1.GlmtTransformer();
132
+ const accumulator = new delta_accumulator_1.DeltaAccumulator({});
133
+ const encoder = new TextEncoder();
134
+ const readable = new ReadableStream({
135
+ async start(controller) {
136
+ const reader = body.getReader();
137
+ try {
138
+ while (true) {
139
+ const { done, value } = await reader.read();
140
+ if (done) {
141
+ break;
142
+ }
143
+ if (!value) {
144
+ continue;
145
+ }
146
+ const events = parser.parse(Buffer.from(value));
147
+ events.forEach((event) => {
148
+ const anthropicEvents = transformer.transformDelta(event, accumulator);
149
+ anthropicEvents.forEach((anthropicEvent) => {
150
+ controller.enqueue(encoder.encode(formatSseEvent(anthropicEvent.event, anthropicEvent.data)));
151
+ });
152
+ });
153
+ }
154
+ if (!accumulator.isFinalized() && accumulator.isMessageStarted()) {
155
+ transformer.finalizeDelta(accumulator).forEach((anthropicEvent) => {
156
+ controller.enqueue(encoder.encode(formatSseEvent(anthropicEvent.event, anthropicEvent.data)));
157
+ });
158
+ }
159
+ }
160
+ catch (error) {
161
+ logTranslationError('Cursor SSE translation failed', error);
162
+ controller.enqueue(encoder.encode(formatSseEvent('error', createAnthropicErrorPayload('api_error', STREAM_TRANSLATION_ERROR_MESSAGE))));
163
+ }
164
+ finally {
165
+ reader.releaseLock();
166
+ controller.close();
167
+ }
168
+ },
169
+ });
170
+ return new Response(readable, {
171
+ status: response.status,
172
+ headers: {
173
+ 'Content-Type': 'text/event-stream',
174
+ 'Cache-Control': 'no-cache',
175
+ Connection: 'keep-alive',
176
+ },
177
+ });
178
+ }
179
+ async function createAnthropicProxyResponse(response) {
180
+ if (!response.ok) {
181
+ return createAnthropicErrorProxyResponse(response);
182
+ }
183
+ const contentType = (response.headers.get('content-type') || '').toLowerCase();
184
+ const isEventStream = contentType === 'text/event-stream' || contentType.startsWith('text/event-stream;');
185
+ return isEventStream
186
+ ? createAnthropicStreamingResponse(response)
187
+ : createAnthropicJsonResponse(response);
188
+ }
189
+ exports.createAnthropicProxyResponse = createAnthropicProxyResponse;
190
+ //# sourceMappingURL=cursor-anthropic-response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-anthropic-response.js","sourceRoot":"","sources":["../../src/cursor/cursor-anthropic-response.ts"],"names":[],"mappings":";;;AAAA,iEAA6D;AAC7D,+DAA2D;AAC3D,mDAA+C;AAG/C,MAAM,8BAA8B,GAAG,0CAA0C,CAAC;AAClF,MAAM,gCAAgC,GAAG,yCAAyC,CAAC;AAWnF,SAAS,2BAA2B,CAAC,IAAY,EAAE,OAAe;IAChE,OAAO;QACL,IAAI,EAAE,OAAO;QACb,KAAK,EAAE;YACL,IAAI;YACJ,OAAO;SACR;KACF,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAe,EAAE,KAAc;IAC1D,OAAO,CAAC,KAAK,CAAC,+BAA+B,OAAO,KAAK,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACvF,CAAC;AAED,SAAgB,4BAA4B,CAC1C,MAAc,EACd,IAAY,EACZ,OAAe,EACf,OAAyB;IAEzB,MAAM,eAAe,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C,eAAe,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;IACxD,eAAe,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAEzC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,2BAA2B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE;QAC9E,MAAM;QACN,OAAO,EAAE,eAAe;KACzB,CAAC,CAAC;AACL,CAAC;AAdD,oEAcC;AAED,SAAS,cAAc,CAAC,KAAa,EAAE,IAAa;IAClD,OAAO,UAAU,KAAK,WAAW,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;AAC9D,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAc;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,GAAG,KAAuB,CAAC;IAC5C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QAC5D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAI,WAAqC,CAAC,OAAO,CAAC;IAC/D,OAAO,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,CAAC;AACzD,CAAC;AAED,SAAS,iCAAiC,CAAC,KAAc;IACvD,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,OAAQ,KAA0B,CAAC,EAAE,KAAK,QAAQ;QACjD,KAAwB,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CACtD,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,iCAAiC,CAAC,QAAkB;IACjE,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC9C,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAC/B,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAEjC,IAAI,IAAI,GACN,QAAQ,CAAC,MAAM,KAAK,GAAG;QACrB,CAAC,CAAC,sBAAsB;QACxB,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG;YACvB,CAAC,CAAC,kBAAkB;YACpB,CAAC,CAAC,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG;gBAC/C,CAAC,CAAC,uBAAuB;gBACzB,CAAC,CAAC,WAAW,CAAC;IACtB,IAAI,OAAO,GAAG,qCAAqC,QAAQ,CAAC,MAAM,EAAE,CAAC;IAErE,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/E,IAAI,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC7C,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAGrC,CAAC;YAEF,IAAI,OAAO,OAAO,EAAE,KAAK,EAAE,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrF,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;YAC5B,CAAC;YAED,IAAI,OAAO,OAAO,EAAE,KAAK,EAAE,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3F,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;YAClC,CAAC;iBAAM,IAAI,OAAO,OAAO,EAAE,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrF,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;YAC5B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,mBAAmB,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,4BAA4B,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC/E,CAAC;AAED,KAAK,UAAU,2BAA2B,CAAC,QAAkB;IAC3D,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC7C,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,EAAE,CAAC;YAC5C,OAAO,4BAA4B,CAAC,GAAG,EAAE,WAAW,EAAE,8BAA8B,CAAC,CAAC;QACxF,CAAC;QAED,MAAM,iBAAiB,GAAG,IAAI,kCAAe,EAAE,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAClF,IAAI,iCAAiC,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACzD,mBAAmB,CACjB,8DAA8D,EAC9D,iBAAiB,CAClB,CAAC;YACF,OAAO,4BAA4B,CAAC,GAAG,EAAE,WAAW,EAAE,8BAA8B,CAAC,CAAC;QACxF,CAAC;QAED,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE;YACrD,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;SAChD,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,mBAAmB,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;QAC7D,OAAO,4BAA4B,CAAC,GAAG,EAAE,WAAW,EAAE,8BAA8B,CAAC,CAAC;IACxF,CAAC;AACH,CAAC;AAED,SAAS,gCAAgC,CAAC,QAAkB;IAC1D,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC3B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,4BAA4B,CACjC,GAAG,EACH,WAAW,EACX,0DAA0D,CAC3D,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,sBAAS,CAAC,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,IAAI,kCAAe,EAAE,CAAC;IAC1C,MAAM,WAAW,GAAG,IAAI,oCAAgB,CAAC,EAAE,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAElC,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAa;QAC9C,KAAK,CAAC,KAAK,CAAC,UAAU;YACpB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAEhC,IAAI,CAAC;gBACH,OAAO,IAAI,EAAE,CAAC;oBACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;oBAC5C,IAAI,IAAI,EAAE,CAAC;wBACT,MAAM;oBACR,CAAC;oBACD,IAAI,CAAC,KAAK,EAAE,CAAC;wBACX,SAAS;oBACX,CAAC;oBAED,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;oBAChD,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;wBACvB,MAAM,eAAe,GAAG,WAAW,CAAC,cAAc,CAAC,KAAiB,EAAE,WAAW,CAAC,CAAC;wBACnF,eAAe,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,EAAE;4BACzC,UAAU,CAAC,OAAO,CAChB,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAC1E,CAAC;wBACJ,CAAC,CAAC,CAAC;oBACL,CAAC,CAAC,CAAC;gBACL,CAAC;gBAED,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,IAAI,WAAW,CAAC,gBAAgB,EAAE,EAAE,CAAC;oBACjE,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,EAAE;wBAChE,UAAU,CAAC,OAAO,CAChB,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAC1E,CAAC;oBACJ,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,mBAAmB,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;gBAC5D,UAAU,CAAC,OAAO,CAChB,OAAO,CAAC,MAAM,CACZ,cAAc,CACZ,OAAO,EACP,2BAA2B,CAAC,WAAW,EAAE,gCAAgC,CAAC,CAC3E,CACF,CACF,CAAC;YACJ,CAAC;oBAAS,CAAC;gBACT,MAAM,CAAC,WAAW,EAAE,CAAC;gBACrB,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE;QAC5B,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,OAAO,EAAE;YACP,cAAc,EAAE,mBAAmB;YACnC,eAAe,EAAE,UAAU;YAC3B,UAAU,EAAE,YAAY;SACzB;KACF,CAAC,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,4BAA4B,CAAC,QAAkB;IACnE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,OAAO,iCAAiC,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,WAAW,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/E,MAAM,aAAa,GACjB,WAAW,KAAK,mBAAmB,IAAI,WAAW,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;IAEtF,OAAO,aAAa;QAClB,CAAC,CAAC,gCAAgC,CAAC,QAAQ,CAAC;QAC5C,CAAC,CAAC,2BAA2B,CAAC,QAAQ,CAAC,CAAC;AAC5C,CAAC;AAZD,oEAYC"}
@@ -0,0 +1,11 @@
1
+ import type { CursorTool } from './cursor-protobuf-schema';
2
+ import type { CursorOpenAIMessage } from './cursor-anthropic-types';
3
+ export interface TranslatedAnthropicRequest {
4
+ model?: string;
5
+ stream: boolean;
6
+ reasoning_effort?: string;
7
+ tools?: CursorTool[];
8
+ messages: CursorOpenAIMessage[];
9
+ }
10
+ export declare function translateAnthropicRequest(raw: unknown): TranslatedAnthropicRequest;
11
+ //# sourceMappingURL=cursor-anthropic-translator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-anthropic-translator.d.ts","sourceRoot":"","sources":["../../src/cursor/cursor-anthropic-translator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAGV,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,0BAA0B;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,QAAQ,EAAE,mBAAmB,EAAE,CAAC;CACjC;AA0ED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,OAAO,GAAG,0BAA0B,CAgIlF"}
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.translateAnthropicRequest = void 0;
4
+ const TOOL_RESULT_SERIALIZATION_FALLBACK = '[unserializable content]';
5
+ const TOOL_USE_ARGUMENTS_FALLBACK = '{}';
6
+ function assertObject(value, label) {
7
+ if (typeof value !== 'object' || value === null) {
8
+ throw new Error(`${label} must be an object`);
9
+ }
10
+ return value;
11
+ }
12
+ function safeJsonStringify(value, fallback) {
13
+ try {
14
+ const serialized = JSON.stringify(value);
15
+ return typeof serialized === 'string' ? serialized : fallback;
16
+ }
17
+ catch {
18
+ return fallback;
19
+ }
20
+ }
21
+ function createFallbackToolId(messageIndex, blockIndex) {
22
+ return `toolu_ccs_fallback_${messageIndex}_${blockIndex}`;
23
+ }
24
+ function flattenTextContent(content, label) {
25
+ if (typeof content === 'string') {
26
+ return content;
27
+ }
28
+ if (!Array.isArray(content)) {
29
+ throw new Error(`${label} must be a string or content block array`);
30
+ }
31
+ return content
32
+ .map((block, index) => {
33
+ const parsed = assertObject(block, `${label}[${index}]`);
34
+ if (parsed.type !== 'text') {
35
+ throw new Error(`${label}[${index}].type "${String(parsed.type)}" is not supported`);
36
+ }
37
+ return typeof parsed.text === 'string' ? parsed.text : '';
38
+ })
39
+ .join('\n');
40
+ }
41
+ function toToolResultContent(content, label) {
42
+ if (content === undefined) {
43
+ return '';
44
+ }
45
+ if (typeof content === 'string') {
46
+ return content;
47
+ }
48
+ if (Array.isArray(content)) {
49
+ return flattenTextContent(content, label);
50
+ }
51
+ return safeJsonStringify(content, TOOL_RESULT_SERIALIZATION_FALLBACK);
52
+ }
53
+ function mapThinkingToReasoningEffort(thinking) {
54
+ if (!thinking) {
55
+ return undefined;
56
+ }
57
+ if (thinking.type === 'disabled') {
58
+ return undefined;
59
+ }
60
+ if (thinking.type !== 'enabled') {
61
+ throw new Error('thinking.type must be "enabled" or "disabled"');
62
+ }
63
+ return typeof thinking.budget_tokens === 'number' && thinking.budget_tokens >= 8192
64
+ ? 'high'
65
+ : 'medium';
66
+ }
67
+ function translateAnthropicRequest(raw) {
68
+ const request = assertObject(raw, 'request');
69
+ const translatedMessages = [];
70
+ if (request.system !== undefined) {
71
+ translatedMessages.push({
72
+ role: 'system',
73
+ content: flattenTextContent(request.system, 'system'),
74
+ });
75
+ }
76
+ if (!Array.isArray(request.messages)) {
77
+ throw new Error('messages must be an array');
78
+ }
79
+ request.messages.forEach((message, messageIndex) => {
80
+ const role = message.role;
81
+ if (role !== 'user' && role !== 'assistant') {
82
+ throw new Error(`messages[${messageIndex}].role must be "user" or "assistant"`);
83
+ }
84
+ const content = message.content;
85
+ if (typeof content === 'string') {
86
+ translatedMessages.push({ role, content });
87
+ return;
88
+ }
89
+ if (!Array.isArray(content)) {
90
+ throw new Error(`messages[${messageIndex}].content must be a string or array`);
91
+ }
92
+ const textParts = [];
93
+ const toolCalls = [];
94
+ let sawToolResult = false;
95
+ content.forEach((block, blockIndex) => {
96
+ const parsed = assertObject(block, `messages[${messageIndex}].content[${blockIndex}]`);
97
+ if (parsed.type === 'text') {
98
+ textParts.push(typeof parsed.text === 'string' ? parsed.text : '');
99
+ return;
100
+ }
101
+ if (parsed.type === 'tool_use') {
102
+ if (role !== 'assistant') {
103
+ throw new Error(`messages[${messageIndex}].content[${blockIndex}] tool_use requires assistant role`);
104
+ }
105
+ toolCalls.push({
106
+ id: typeof parsed.id === 'string' && parsed.id.length > 0
107
+ ? parsed.id
108
+ : createFallbackToolId(messageIndex, blockIndex),
109
+ type: 'function',
110
+ function: {
111
+ name: typeof parsed.name === 'string' ? parsed.name : 'tool',
112
+ arguments: safeJsonStringify(parsed.input ?? {}, TOOL_USE_ARGUMENTS_FALLBACK),
113
+ },
114
+ });
115
+ return;
116
+ }
117
+ if (parsed.type === 'tool_result') {
118
+ if (role !== 'user') {
119
+ throw new Error(`messages[${messageIndex}].content[${blockIndex}] tool_result requires user role`);
120
+ }
121
+ if (typeof parsed.tool_use_id !== 'string' || parsed.tool_use_id.trim().length === 0) {
122
+ throw new Error(`messages[${messageIndex}].content[${blockIndex}].tool_use_id must be a non-empty string`);
123
+ }
124
+ sawToolResult = true;
125
+ if (textParts.length > 0) {
126
+ translatedMessages.push({
127
+ role,
128
+ content: textParts.join('\n'),
129
+ });
130
+ textParts.length = 0;
131
+ }
132
+ translatedMessages.push({
133
+ role: 'tool',
134
+ tool_call_id: parsed.tool_use_id,
135
+ content: toToolResultContent(parsed.content, `messages[${messageIndex}].content[${blockIndex}].content`),
136
+ });
137
+ return;
138
+ }
139
+ throw new Error(`messages[${messageIndex}].content[${blockIndex}].type "${String(parsed.type)}" is not supported`);
140
+ });
141
+ if (role === 'assistant') {
142
+ translatedMessages.push({
143
+ role,
144
+ content: textParts.join('\n'),
145
+ tool_calls: toolCalls.length > 0 ? toolCalls : undefined,
146
+ });
147
+ return;
148
+ }
149
+ if (textParts.length > 0 || !sawToolResult) {
150
+ translatedMessages.push({
151
+ role,
152
+ content: textParts.join('\n'),
153
+ });
154
+ }
155
+ });
156
+ return {
157
+ model: typeof request.model === 'string' && request.model.trim().length > 0
158
+ ? request.model
159
+ : undefined,
160
+ stream: request.stream === true,
161
+ reasoning_effort: mapThinkingToReasoningEffort(request.thinking),
162
+ tools: Array.isArray(request.tools) ? request.tools : undefined,
163
+ messages: translatedMessages,
164
+ };
165
+ }
166
+ exports.translateAnthropicRequest = translateAnthropicRequest;
167
+ //# sourceMappingURL=cursor-anthropic-translator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-anthropic-translator.js","sourceRoot":"","sources":["../../src/cursor/cursor-anthropic-translator.ts"],"names":[],"mappings":"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"}