@hileeon/mcc 0.1.7 → 0.1.9

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 (86) hide show
  1. package/README.md +226 -127
  2. package/dist/accounts/store.d.ts +1 -0
  3. package/dist/accounts/store.d.ts.map +1 -1
  4. package/dist/accounts/store.js.map +1 -1
  5. package/dist/commands/launch.d.ts +9 -0
  6. package/dist/commands/launch.d.ts.map +1 -0
  7. package/dist/commands/launch.js +158 -0
  8. package/dist/commands/launch.js.map +1 -0
  9. package/dist/commands/mcp.d.ts +9 -0
  10. package/dist/commands/mcp.d.ts.map +1 -0
  11. package/dist/commands/mcp.js +112 -0
  12. package/dist/commands/mcp.js.map +1 -0
  13. package/dist/commands/profile.d.ts +8 -0
  14. package/dist/commands/profile.d.ts.map +1 -0
  15. package/dist/commands/profile.js +125 -0
  16. package/dist/commands/profile.js.map +1 -0
  17. package/dist/core/model-router.d.ts.map +1 -1
  18. package/dist/core/model-router.js +5 -2
  19. package/dist/core/model-router.js.map +1 -1
  20. package/dist/{dashboard-server.d.ts → dashboard/server.d.ts} +1 -1
  21. package/dist/dashboard/server.d.ts.map +1 -0
  22. package/dist/{dashboard-server.js → dashboard/server.js} +169 -51
  23. package/dist/dashboard/server.js.map +1 -0
  24. package/dist/mcc.d.ts +4 -2
  25. package/dist/mcc.d.ts.map +1 -1
  26. package/dist/mcc.js +121 -408
  27. package/dist/mcc.js.map +1 -1
  28. package/dist/mcp/mcp-config.d.ts +17 -1
  29. package/dist/mcp/mcp-config.d.ts.map +1 -1
  30. package/dist/mcp/mcp-config.js +50 -17
  31. package/dist/mcp/mcp-config.js.map +1 -1
  32. package/dist/proxy/proxy-daemon.d.ts.map +1 -1
  33. package/dist/proxy/proxy-daemon.js +17 -2
  34. package/dist/proxy/proxy-daemon.js.map +1 -1
  35. package/dist/proxy/proxy-entry.js +5 -3
  36. package/dist/proxy/proxy-entry.js.map +1 -1
  37. package/dist/proxy/proxy-server.d.ts.map +1 -1
  38. package/dist/proxy/proxy-server.js +32 -6
  39. package/dist/proxy/proxy-server.js.map +1 -1
  40. package/dist/shared/config.d.ts +15 -0
  41. package/dist/shared/config.d.ts.map +1 -0
  42. package/dist/shared/config.js +79 -0
  43. package/dist/shared/config.js.map +1 -0
  44. package/dist/shared/logger.d.ts +23 -18
  45. package/dist/shared/logger.d.ts.map +1 -1
  46. package/dist/shared/logger.js +17 -178
  47. package/dist/shared/logger.js.map +1 -1
  48. package/dist/shared/provider-preset-catalog.d.ts +6 -2
  49. package/dist/shared/provider-preset-catalog.d.ts.map +1 -1
  50. package/dist/shared/provider-preset-catalog.js +47 -26
  51. package/dist/shared/provider-preset-catalog.js.map +1 -1
  52. package/dist/ui/assets/index-ClqmrjNk.js +40 -0
  53. package/dist/ui/assets/index-CwMwQ-Z4.css +1 -0
  54. package/dist/ui/index.html +21 -13
  55. package/dist/update.d.ts +31 -0
  56. package/dist/update.d.ts.map +1 -0
  57. package/dist/update.js +196 -0
  58. package/dist/update.js.map +1 -0
  59. package/lib/mcp/mcc-image-analysis-server.cjs +454 -454
  60. package/lib/mcp/mcc-websearch-server.cjs +339 -339
  61. package/lib/mcp-hooks/image-analysis-runtime.cjs +510 -510
  62. package/lib/mcp-hooks/image-analyzer-transformer.cjs +526 -526
  63. package/lib/mcp-hooks/websearch-transformer.cjs +1597 -1421
  64. package/lib/proxy/config/config-loader-facade.js +24 -24
  65. package/lib/proxy/glmt/delta-accumulator.js +362 -362
  66. package/lib/proxy/glmt/glmt-transformer.js +203 -203
  67. package/lib/proxy/glmt/index.js +40 -40
  68. package/lib/proxy/glmt/locale-enforcer.js +68 -68
  69. package/lib/proxy/glmt/pipeline/content-transformer.js +161 -161
  70. package/lib/proxy/glmt/pipeline/index.js +19 -19
  71. package/lib/proxy/glmt/pipeline/request-transformer.js +115 -115
  72. package/lib/proxy/glmt/pipeline/response-builder.js +204 -204
  73. package/lib/proxy/glmt/pipeline/stream-parser.js +233 -233
  74. package/lib/proxy/glmt/pipeline/tool-call-handler.js +77 -77
  75. package/lib/proxy/glmt/pipeline/types.js +5 -5
  76. package/lib/proxy/glmt/reasoning-enforcer.js +150 -150
  77. package/lib/proxy/glmt/sse-parser.js +101 -101
  78. package/lib/proxy/services/logging.js +13 -13
  79. package/lib/proxy/transformers/request-transformer.js +471 -451
  80. package/lib/proxy/transformers/sse-stream-transformer.js +198 -198
  81. package/lib/shared/logger.cjs +156 -138
  82. package/package.json +58 -41
  83. package/dist/dashboard-server.d.ts.map +0 -1
  84. package/dist/dashboard-server.js.map +0 -1
  85. package/dist/ui/assets/index-B16lhKZ6.js +0 -40
  86. package/dist/ui/assets/index-jEfiB6-h.css +0 -1
@@ -1,205 +1,205 @@
1
- "use strict";
2
- /**
3
- * ResponseBuilder - Create SSE events for Anthropic streaming format
4
- *
5
- * Responsibilities:
6
- * - Create message_start, message_delta, message_stop events
7
- * - Create content_block_start, content_block_delta, content_block_stop events
8
- * - Generate thinking signatures
9
- * - Map stop reasons between formats
10
- */
11
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
- if (k2 === undefined) k2 = k;
13
- var desc = Object.getOwnPropertyDescriptor(m, k);
14
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
- desc = { enumerable: true, get: function() { return m[k]; } };
16
- }
17
- Object.defineProperty(o, k2, desc);
18
- }) : (function(o, m, k, k2) {
19
- if (k2 === undefined) k2 = k;
20
- o[k2] = m[k];
21
- }));
22
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
- Object.defineProperty(o, "default", { enumerable: true, value: v });
24
- }) : function(o, v) {
25
- o["default"] = v;
26
- });
27
- var __importStar = (this && this.__importStar) || function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- Object.defineProperty(exports, "__esModule", { value: true });
35
- exports.ResponseBuilder = void 0;
36
- const crypto = __importStar(require("crypto"));
37
- class ResponseBuilder {
38
- constructor(verbose = false) {
39
- this.verbose = verbose;
40
- }
41
- /**
42
- * Create message_start event
43
- */
44
- createMessageStartEvent(accumulator) {
45
- return {
46
- event: 'message_start',
47
- data: {
48
- type: 'message_start',
49
- message: {
50
- id: accumulator.getMessageId(),
51
- type: 'message',
52
- role: accumulator.getRole(),
53
- content: [],
54
- model: accumulator.getModel() || 'glm-5',
55
- stop_reason: null,
56
- usage: {
57
- input_tokens: accumulator.getInputTokens(),
58
- output_tokens: 0,
59
- },
60
- },
61
- },
62
- };
63
- }
64
- /**
65
- * Create content_block_start event
66
- */
67
- createContentBlockStartEvent(block) {
68
- return {
69
- event: 'content_block_start',
70
- data: {
71
- type: 'content_block_start',
72
- index: block.index,
73
- content_block: {
74
- type: block.type,
75
- [block.type]: '',
76
- },
77
- },
78
- };
79
- }
80
- /**
81
- * Create thinking_delta event
82
- */
83
- createThinkingDeltaEvent(block, delta) {
84
- return {
85
- event: 'content_block_delta',
86
- data: {
87
- type: 'content_block_delta',
88
- index: block.index,
89
- delta: {
90
- type: 'thinking_delta',
91
- thinking: delta,
92
- },
93
- },
94
- };
95
- }
96
- /**
97
- * Create text_delta event
98
- */
99
- createTextDeltaEvent(block, delta) {
100
- return {
101
- event: 'content_block_delta',
102
- data: {
103
- type: 'content_block_delta',
104
- index: block.index,
105
- delta: {
106
- type: 'text_delta',
107
- text: delta,
108
- },
109
- },
110
- };
111
- }
112
- /**
113
- * Create thinking signature delta event
114
- */
115
- createSignatureDeltaEvent(block) {
116
- // FIX: Guard against empty content (signature timing race)
117
- if (!block.content || block.content.length === 0) {
118
- if (this.verbose) {
119
- console.error(`[ResponseBuilder] WARNING: Skipping signature for empty thinking block ${block.index}`);
120
- console.error(`This indicates a race condition - signature requested before content accumulated`);
121
- }
122
- return null;
123
- }
124
- const signature = this.generateThinkingSignature(block.content);
125
- if (this.verbose) {
126
- console.error(`[ResponseBuilder] Generating signature for block ${block.index}: ${block.content.length} chars`);
127
- }
128
- return {
129
- event: 'content_block_delta',
130
- data: {
131
- type: 'content_block_delta',
132
- index: block.index,
133
- delta: {
134
- type: 'thinking_signature_delta',
135
- signature: signature,
136
- },
137
- },
138
- };
139
- }
140
- /**
141
- * Create content_block_stop event
142
- */
143
- createContentBlockStopEvent(block) {
144
- return {
145
- event: 'content_block_stop',
146
- data: {
147
- type: 'content_block_stop',
148
- index: block.index,
149
- },
150
- };
151
- }
152
- /**
153
- * Generate finalization events (message_delta + message_stop)
154
- */
155
- createFinalizationEvents(accumulator, stopReason) {
156
- return [
157
- {
158
- event: 'message_delta',
159
- data: {
160
- type: 'message_delta',
161
- delta: {
162
- stop_reason: stopReason,
163
- },
164
- usage: {
165
- input_tokens: accumulator.getInputTokens(),
166
- output_tokens: accumulator.getOutputTokens(),
167
- },
168
- },
169
- },
170
- {
171
- event: 'message_stop',
172
- data: {
173
- type: 'message_stop',
174
- },
175
- },
176
- ];
177
- }
178
- /**
179
- * Generate thinking signature for Claude Code UI
180
- */
181
- generateThinkingSignature(thinking) {
182
- // Generate signature hash
183
- const hash = crypto.createHash('sha256').update(thinking).digest('hex').substring(0, 16);
184
- return {
185
- type: 'thinking_signature',
186
- hash: hash,
187
- length: thinking.length,
188
- timestamp: Date.now(),
189
- };
190
- }
191
- /**
192
- * Map OpenAI stop reason to Anthropic stop reason
193
- */
194
- mapStopReason(openaiReason) {
195
- const mapping = {
196
- stop: 'end_turn',
197
- length: 'max_tokens',
198
- tool_calls: 'tool_use',
199
- content_filter: 'stop_sequence',
200
- };
201
- return mapping[openaiReason] || 'end_turn';
202
- }
203
- }
204
- exports.ResponseBuilder = ResponseBuilder;
1
+ "use strict";
2
+ /**
3
+ * ResponseBuilder - Create SSE events for Anthropic streaming format
4
+ *
5
+ * Responsibilities:
6
+ * - Create message_start, message_delta, message_stop events
7
+ * - Create content_block_start, content_block_delta, content_block_stop events
8
+ * - Generate thinking signatures
9
+ * - Map stop reasons between formats
10
+ */
11
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ var desc = Object.getOwnPropertyDescriptor(m, k);
14
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
+ desc = { enumerable: true, get: function() { return m[k]; } };
16
+ }
17
+ Object.defineProperty(o, k2, desc);
18
+ }) : (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ o[k2] = m[k];
21
+ }));
22
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
24
+ }) : function(o, v) {
25
+ o["default"] = v;
26
+ });
27
+ var __importStar = (this && this.__importStar) || function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.ResponseBuilder = void 0;
36
+ const crypto = __importStar(require("crypto"));
37
+ class ResponseBuilder {
38
+ constructor(verbose = false) {
39
+ this.verbose = verbose;
40
+ }
41
+ /**
42
+ * Create message_start event
43
+ */
44
+ createMessageStartEvent(accumulator) {
45
+ return {
46
+ event: 'message_start',
47
+ data: {
48
+ type: 'message_start',
49
+ message: {
50
+ id: accumulator.getMessageId(),
51
+ type: 'message',
52
+ role: accumulator.getRole(),
53
+ content: [],
54
+ model: accumulator.getModel() || 'glm-5',
55
+ stop_reason: null,
56
+ usage: {
57
+ input_tokens: accumulator.getInputTokens(),
58
+ output_tokens: 0,
59
+ },
60
+ },
61
+ },
62
+ };
63
+ }
64
+ /**
65
+ * Create content_block_start event
66
+ */
67
+ createContentBlockStartEvent(block) {
68
+ return {
69
+ event: 'content_block_start',
70
+ data: {
71
+ type: 'content_block_start',
72
+ index: block.index,
73
+ content_block: {
74
+ type: block.type,
75
+ [block.type]: '',
76
+ },
77
+ },
78
+ };
79
+ }
80
+ /**
81
+ * Create thinking_delta event
82
+ */
83
+ createThinkingDeltaEvent(block, delta) {
84
+ return {
85
+ event: 'content_block_delta',
86
+ data: {
87
+ type: 'content_block_delta',
88
+ index: block.index,
89
+ delta: {
90
+ type: 'thinking_delta',
91
+ thinking: delta,
92
+ },
93
+ },
94
+ };
95
+ }
96
+ /**
97
+ * Create text_delta event
98
+ */
99
+ createTextDeltaEvent(block, delta) {
100
+ return {
101
+ event: 'content_block_delta',
102
+ data: {
103
+ type: 'content_block_delta',
104
+ index: block.index,
105
+ delta: {
106
+ type: 'text_delta',
107
+ text: delta,
108
+ },
109
+ },
110
+ };
111
+ }
112
+ /**
113
+ * Create thinking signature delta event
114
+ */
115
+ createSignatureDeltaEvent(block) {
116
+ // FIX: Guard against empty content (signature timing race)
117
+ if (!block.content || block.content.length === 0) {
118
+ if (this.verbose) {
119
+ console.error(`[ResponseBuilder] WARNING: Skipping signature for empty thinking block ${block.index}`);
120
+ console.error(`This indicates a race condition - signature requested before content accumulated`);
121
+ }
122
+ return null;
123
+ }
124
+ const signature = this.generateThinkingSignature(block.content);
125
+ if (this.verbose) {
126
+ console.error(`[ResponseBuilder] Generating signature for block ${block.index}: ${block.content.length} chars`);
127
+ }
128
+ return {
129
+ event: 'content_block_delta',
130
+ data: {
131
+ type: 'content_block_delta',
132
+ index: block.index,
133
+ delta: {
134
+ type: 'thinking_signature_delta',
135
+ signature: signature,
136
+ },
137
+ },
138
+ };
139
+ }
140
+ /**
141
+ * Create content_block_stop event
142
+ */
143
+ createContentBlockStopEvent(block) {
144
+ return {
145
+ event: 'content_block_stop',
146
+ data: {
147
+ type: 'content_block_stop',
148
+ index: block.index,
149
+ },
150
+ };
151
+ }
152
+ /**
153
+ * Generate finalization events (message_delta + message_stop)
154
+ */
155
+ createFinalizationEvents(accumulator, stopReason) {
156
+ return [
157
+ {
158
+ event: 'message_delta',
159
+ data: {
160
+ type: 'message_delta',
161
+ delta: {
162
+ stop_reason: stopReason,
163
+ },
164
+ usage: {
165
+ input_tokens: accumulator.getInputTokens(),
166
+ output_tokens: accumulator.getOutputTokens(),
167
+ },
168
+ },
169
+ },
170
+ {
171
+ event: 'message_stop',
172
+ data: {
173
+ type: 'message_stop',
174
+ },
175
+ },
176
+ ];
177
+ }
178
+ /**
179
+ * Generate thinking signature for Claude Code UI
180
+ */
181
+ generateThinkingSignature(thinking) {
182
+ // Generate signature hash
183
+ const hash = crypto.createHash('sha256').update(thinking).digest('hex').substring(0, 16);
184
+ return {
185
+ type: 'thinking_signature',
186
+ hash: hash,
187
+ length: thinking.length,
188
+ timestamp: Date.now(),
189
+ };
190
+ }
191
+ /**
192
+ * Map OpenAI stop reason to Anthropic stop reason
193
+ */
194
+ mapStopReason(openaiReason) {
195
+ const mapping = {
196
+ stop: 'end_turn',
197
+ length: 'max_tokens',
198
+ tool_calls: 'tool_use',
199
+ content_filter: 'stop_sequence',
200
+ };
201
+ return mapping[openaiReason] || 'end_turn';
202
+ }
203
+ }
204
+ exports.ResponseBuilder = ResponseBuilder;
205
205
  //# sourceMappingURL=response-builder.js.map