@hileeon/mcc 0.1.8 → 0.2.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 (102) hide show
  1. package/README.md +229 -127
  2. package/dist/accounts/store.d.ts +12 -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 +162 -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-test.d.ts +17 -0
  14. package/dist/commands/profile-test.d.ts.map +1 -0
  15. package/dist/commands/profile-test.js +188 -0
  16. package/dist/commands/profile-test.js.map +1 -0
  17. package/dist/commands/profile.d.ts +8 -0
  18. package/dist/commands/profile.d.ts.map +1 -0
  19. package/dist/commands/profile.js +125 -0
  20. package/dist/commands/profile.js.map +1 -0
  21. package/dist/core/model-router.d.ts.map +1 -1
  22. package/dist/core/model-router.js +36 -3
  23. package/dist/core/model-router.js.map +1 -1
  24. package/dist/{dashboard-server.d.ts → dashboard/server.d.ts} +1 -1
  25. package/dist/dashboard/server.d.ts.map +1 -0
  26. package/dist/{dashboard-server.js → dashboard/server.js} +254 -48
  27. package/dist/dashboard/server.js.map +1 -0
  28. package/dist/mcc.d.ts +4 -2
  29. package/dist/mcc.d.ts.map +1 -1
  30. package/dist/mcc.js +127 -408
  31. package/dist/mcc.js.map +1 -1
  32. package/dist/mcp/installer.d.ts.map +1 -1
  33. package/dist/mcp/installer.js +5 -2
  34. package/dist/mcp/installer.js.map +1 -1
  35. package/dist/mcp/mcp-config.d.ts +33 -3
  36. package/dist/mcp/mcp-config.d.ts.map +1 -1
  37. package/dist/mcp/mcp-config.js +81 -29
  38. package/dist/mcp/mcp-config.js.map +1 -1
  39. package/dist/proxy/proxy-daemon.d.ts +1 -1
  40. package/dist/proxy/proxy-daemon.d.ts.map +1 -1
  41. package/dist/proxy/proxy-daemon.js +27 -7
  42. package/dist/proxy/proxy-daemon.js.map +1 -1
  43. package/dist/proxy/proxy-entry.js +11 -4
  44. package/dist/proxy/proxy-entry.js.map +1 -1
  45. package/dist/proxy/proxy-paths.d.ts +1 -0
  46. package/dist/proxy/proxy-paths.d.ts.map +1 -1
  47. package/dist/proxy/proxy-paths.js.map +1 -1
  48. package/dist/proxy/proxy-server.d.ts +1 -0
  49. package/dist/proxy/proxy-server.d.ts.map +1 -1
  50. package/dist/proxy/proxy-server.js +114 -6
  51. package/dist/proxy/proxy-server.js.map +1 -1
  52. package/dist/shared/config.d.ts +15 -0
  53. package/dist/shared/config.d.ts.map +1 -0
  54. package/dist/shared/config.js +79 -0
  55. package/dist/shared/config.js.map +1 -0
  56. package/dist/shared/logger.d.ts +23 -18
  57. package/dist/shared/logger.d.ts.map +1 -1
  58. package/dist/shared/logger.js +17 -178
  59. package/dist/shared/logger.js.map +1 -1
  60. package/dist/shared/provider-preset-catalog.d.ts +8 -2
  61. package/dist/shared/provider-preset-catalog.d.ts.map +1 -1
  62. package/dist/shared/provider-preset-catalog.js +61 -31
  63. package/dist/shared/provider-preset-catalog.js.map +1 -1
  64. package/dist/shared/test-image.d.ts +15 -0
  65. package/dist/shared/test-image.d.ts.map +1 -0
  66. package/dist/shared/test-image.js +89 -0
  67. package/dist/shared/test-image.js.map +1 -0
  68. package/dist/ui/assets/index-7kowlJw9.js +40 -0
  69. package/dist/ui/assets/index-DnC-lskL.css +1 -0
  70. package/dist/ui/index.html +21 -13
  71. package/dist/update.d.ts +31 -0
  72. package/dist/update.d.ts.map +1 -0
  73. package/dist/update.js +196 -0
  74. package/dist/update.js.map +1 -0
  75. package/lib/mcp/mcc-image-analysis-server.cjs +454 -454
  76. package/lib/mcp/mcc-websearch-server.cjs +339 -339
  77. package/lib/mcp-hooks/image-analysis-runtime.cjs +563 -510
  78. package/lib/mcp-hooks/image-analyzer-transformer.cjs +526 -526
  79. package/lib/mcp-hooks/websearch-transformer.cjs +1597 -1421
  80. package/lib/proxy/config/config-loader-facade.js +24 -24
  81. package/lib/proxy/glmt/delta-accumulator.js +362 -362
  82. package/lib/proxy/glmt/glmt-transformer.js +203 -203
  83. package/lib/proxy/glmt/index.js +40 -40
  84. package/lib/proxy/glmt/locale-enforcer.js +68 -68
  85. package/lib/proxy/glmt/pipeline/content-transformer.js +161 -161
  86. package/lib/proxy/glmt/pipeline/index.js +19 -19
  87. package/lib/proxy/glmt/pipeline/request-transformer.js +115 -115
  88. package/lib/proxy/glmt/pipeline/response-builder.js +204 -204
  89. package/lib/proxy/glmt/pipeline/stream-parser.js +233 -233
  90. package/lib/proxy/glmt/pipeline/tool-call-handler.js +77 -77
  91. package/lib/proxy/glmt/pipeline/types.js +5 -5
  92. package/lib/proxy/glmt/reasoning-enforcer.js +150 -150
  93. package/lib/proxy/glmt/sse-parser.js +101 -101
  94. package/lib/proxy/services/logging.js +13 -13
  95. package/lib/proxy/transformers/request-transformer.js +471 -471
  96. package/lib/proxy/transformers/sse-stream-transformer.js +198 -198
  97. package/lib/shared/logger.cjs +160 -138
  98. package/package.json +58 -41
  99. package/dist/dashboard-server.d.ts.map +0 -1
  100. package/dist/dashboard-server.js.map +0 -1
  101. package/dist/ui/assets/index-B16lhKZ6.js +0 -40
  102. 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