@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.
- package/README.md +229 -127
- package/dist/accounts/store.d.ts +12 -0
- package/dist/accounts/store.d.ts.map +1 -1
- package/dist/accounts/store.js.map +1 -1
- package/dist/commands/launch.d.ts +9 -0
- package/dist/commands/launch.d.ts.map +1 -0
- package/dist/commands/launch.js +162 -0
- package/dist/commands/launch.js.map +1 -0
- package/dist/commands/mcp.d.ts +9 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +112 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/profile-test.d.ts +17 -0
- package/dist/commands/profile-test.d.ts.map +1 -0
- package/dist/commands/profile-test.js +188 -0
- package/dist/commands/profile-test.js.map +1 -0
- package/dist/commands/profile.d.ts +8 -0
- package/dist/commands/profile.d.ts.map +1 -0
- package/dist/commands/profile.js +125 -0
- package/dist/commands/profile.js.map +1 -0
- package/dist/core/model-router.d.ts.map +1 -1
- package/dist/core/model-router.js +36 -3
- package/dist/core/model-router.js.map +1 -1
- package/dist/{dashboard-server.d.ts → dashboard/server.d.ts} +1 -1
- package/dist/dashboard/server.d.ts.map +1 -0
- package/dist/{dashboard-server.js → dashboard/server.js} +254 -48
- package/dist/dashboard/server.js.map +1 -0
- package/dist/mcc.d.ts +4 -2
- package/dist/mcc.d.ts.map +1 -1
- package/dist/mcc.js +127 -408
- package/dist/mcc.js.map +1 -1
- package/dist/mcp/installer.d.ts.map +1 -1
- package/dist/mcp/installer.js +5 -2
- package/dist/mcp/installer.js.map +1 -1
- package/dist/mcp/mcp-config.d.ts +33 -3
- package/dist/mcp/mcp-config.d.ts.map +1 -1
- package/dist/mcp/mcp-config.js +81 -29
- package/dist/mcp/mcp-config.js.map +1 -1
- package/dist/proxy/proxy-daemon.d.ts +1 -1
- package/dist/proxy/proxy-daemon.d.ts.map +1 -1
- package/dist/proxy/proxy-daemon.js +27 -7
- package/dist/proxy/proxy-daemon.js.map +1 -1
- package/dist/proxy/proxy-entry.js +11 -4
- package/dist/proxy/proxy-entry.js.map +1 -1
- package/dist/proxy/proxy-paths.d.ts +1 -0
- package/dist/proxy/proxy-paths.d.ts.map +1 -1
- package/dist/proxy/proxy-paths.js.map +1 -1
- package/dist/proxy/proxy-server.d.ts +1 -0
- package/dist/proxy/proxy-server.d.ts.map +1 -1
- package/dist/proxy/proxy-server.js +114 -6
- package/dist/proxy/proxy-server.js.map +1 -1
- package/dist/shared/config.d.ts +15 -0
- package/dist/shared/config.d.ts.map +1 -0
- package/dist/shared/config.js +79 -0
- package/dist/shared/config.js.map +1 -0
- package/dist/shared/logger.d.ts +23 -18
- package/dist/shared/logger.d.ts.map +1 -1
- package/dist/shared/logger.js +17 -178
- package/dist/shared/logger.js.map +1 -1
- package/dist/shared/provider-preset-catalog.d.ts +8 -2
- package/dist/shared/provider-preset-catalog.d.ts.map +1 -1
- package/dist/shared/provider-preset-catalog.js +61 -31
- package/dist/shared/provider-preset-catalog.js.map +1 -1
- package/dist/shared/test-image.d.ts +15 -0
- package/dist/shared/test-image.d.ts.map +1 -0
- package/dist/shared/test-image.js +89 -0
- package/dist/shared/test-image.js.map +1 -0
- package/dist/ui/assets/index-7kowlJw9.js +40 -0
- package/dist/ui/assets/index-DnC-lskL.css +1 -0
- package/dist/ui/index.html +21 -13
- package/dist/update.d.ts +31 -0
- package/dist/update.d.ts.map +1 -0
- package/dist/update.js +196 -0
- package/dist/update.js.map +1 -0
- package/lib/mcp/mcc-image-analysis-server.cjs +454 -454
- package/lib/mcp/mcc-websearch-server.cjs +339 -339
- package/lib/mcp-hooks/image-analysis-runtime.cjs +563 -510
- package/lib/mcp-hooks/image-analyzer-transformer.cjs +526 -526
- package/lib/mcp-hooks/websearch-transformer.cjs +1597 -1421
- package/lib/proxy/config/config-loader-facade.js +24 -24
- package/lib/proxy/glmt/delta-accumulator.js +362 -362
- package/lib/proxy/glmt/glmt-transformer.js +203 -203
- package/lib/proxy/glmt/index.js +40 -40
- package/lib/proxy/glmt/locale-enforcer.js +68 -68
- package/lib/proxy/glmt/pipeline/content-transformer.js +161 -161
- package/lib/proxy/glmt/pipeline/index.js +19 -19
- package/lib/proxy/glmt/pipeline/request-transformer.js +115 -115
- package/lib/proxy/glmt/pipeline/response-builder.js +204 -204
- package/lib/proxy/glmt/pipeline/stream-parser.js +233 -233
- package/lib/proxy/glmt/pipeline/tool-call-handler.js +77 -77
- package/lib/proxy/glmt/pipeline/types.js +5 -5
- package/lib/proxy/glmt/reasoning-enforcer.js +150 -150
- package/lib/proxy/glmt/sse-parser.js +101 -101
- package/lib/proxy/services/logging.js +13 -13
- package/lib/proxy/transformers/request-transformer.js +471 -471
- package/lib/proxy/transformers/sse-stream-transformer.js +198 -198
- package/lib/shared/logger.cjs +160 -138
- package/package.json +58 -41
- package/dist/dashboard-server.d.ts.map +0 -1
- package/dist/dashboard-server.js.map +0 -1
- package/dist/ui/assets/index-B16lhKZ6.js +0 -40
- package/dist/ui/assets/index-jEfiB6-h.css +0 -1
|
@@ -22,6 +22,7 @@ exports.PROVIDER_PRESET_IDS = [
|
|
|
22
22
|
'mm',
|
|
23
23
|
'deepseek',
|
|
24
24
|
'qwen',
|
|
25
|
+
'xiaomi-mimo',
|
|
25
26
|
'ollama-cloud',
|
|
26
27
|
'novita',
|
|
27
28
|
'bigmodel',
|
|
@@ -37,6 +38,8 @@ exports.PROVIDER_PRESET_ALIASES = Object.freeze({
|
|
|
37
38
|
alibaba: 'alibaba-coding-plan',
|
|
38
39
|
acp: 'alibaba-coding-plan',
|
|
39
40
|
hf: 'huggingface',
|
|
41
|
+
xiaomi: 'xiaomi-mimo',
|
|
42
|
+
mimo: 'xiaomi-mimo',
|
|
40
43
|
});
|
|
41
44
|
const RAW_PROVIDER_PRESET_DEFINITIONS = [
|
|
42
45
|
{
|
|
@@ -52,7 +55,6 @@ const RAW_PROVIDER_PRESET_DEFINITIONS = [
|
|
|
52
55
|
requiresApiKey: true,
|
|
53
56
|
badge: '349+ models',
|
|
54
57
|
featured: true,
|
|
55
|
-
icon: '/icons/openrouter.svg',
|
|
56
58
|
},
|
|
57
59
|
{
|
|
58
60
|
id: 'alibaba-coding-plan',
|
|
@@ -67,7 +69,6 @@ const RAW_PROVIDER_PRESET_DEFINITIONS = [
|
|
|
67
69
|
requiresApiKey: true,
|
|
68
70
|
badge: 'Coding Plan',
|
|
69
71
|
featured: true,
|
|
70
|
-
icon: '/assets/providers/alibabacloud-color.svg',
|
|
71
72
|
},
|
|
72
73
|
{
|
|
73
74
|
id: 'ollama',
|
|
@@ -82,7 +83,6 @@ const RAW_PROVIDER_PRESET_DEFINITIONS = [
|
|
|
82
83
|
requiresApiKey: false,
|
|
83
84
|
badge: 'Local',
|
|
84
85
|
featured: true,
|
|
85
|
-
icon: '/icons/ollama.svg',
|
|
86
86
|
},
|
|
87
87
|
{
|
|
88
88
|
id: 'llamacpp',
|
|
@@ -97,7 +97,6 @@ const RAW_PROVIDER_PRESET_DEFINITIONS = [
|
|
|
97
97
|
requiresApiKey: false,
|
|
98
98
|
badge: 'Local',
|
|
99
99
|
featured: true,
|
|
100
|
-
icon: '/assets/providers/llama-cpp.svg',
|
|
101
100
|
},
|
|
102
101
|
{
|
|
103
102
|
id: 'anthropic',
|
|
@@ -112,7 +111,6 @@ const RAW_PROVIDER_PRESET_DEFINITIONS = [
|
|
|
112
111
|
requiresApiKey: true,
|
|
113
112
|
badge: 'Direct',
|
|
114
113
|
featured: true,
|
|
115
|
-
icon: '/assets/providers/claude.svg',
|
|
116
114
|
},
|
|
117
115
|
{
|
|
118
116
|
id: 'huggingface',
|
|
@@ -134,28 +132,34 @@ const RAW_PROVIDER_PRESET_DEFINITIONS = [
|
|
|
134
132
|
description: 'Direct Z.AI Anthropic-compatible API profile',
|
|
135
133
|
baseUrl: 'https://api.z.ai/api/anthropic',
|
|
136
134
|
defaultProfileName: 'glm',
|
|
137
|
-
defaultModel: 'glm-5',
|
|
135
|
+
defaultModel: 'glm-5.2',
|
|
136
|
+
opusModel: 'glm-5.2',
|
|
137
|
+
sonnetModel: 'glm-5.2',
|
|
138
|
+
haikuModel: 'glm-5.2',
|
|
139
|
+
reasoningEffort: 'max',
|
|
138
140
|
apiKeyPlaceholder: 'ghp_...',
|
|
139
141
|
apiKeyHint: 'Get your API key from Z.AI',
|
|
140
142
|
category: 'alternative',
|
|
141
143
|
requiresApiKey: true,
|
|
142
144
|
badge: 'Z.AI',
|
|
143
|
-
icon: '/icons/zai.svg',
|
|
144
145
|
},
|
|
145
146
|
{
|
|
146
147
|
id: 'km',
|
|
147
148
|
name: 'Kimi',
|
|
148
|
-
description: 'Moonshot AI -
|
|
149
|
+
description: 'Moonshot AI - K2.7 Code (thinking always on)',
|
|
149
150
|
baseUrl: 'https://api.kimi.com/coding/',
|
|
150
151
|
defaultProfileName: 'km',
|
|
151
|
-
defaultModel: 'kimi-k2-
|
|
152
|
+
defaultModel: 'kimi-k2.7-code',
|
|
153
|
+
opusModel: 'kimi-k2.7-code',
|
|
154
|
+
sonnetModel: 'kimi-k2.7-code',
|
|
155
|
+
haikuModel: 'kimi-k2.7-code',
|
|
156
|
+
reasoningEffort: 'high',
|
|
152
157
|
apiKeyPlaceholder: 'sk-...',
|
|
153
158
|
apiKeyHint: 'Get your API key from Moonshot AI',
|
|
154
159
|
category: 'alternative',
|
|
155
160
|
requiresApiKey: true,
|
|
156
161
|
alwaysThinkingEnabled: true,
|
|
157
162
|
badge: 'Reasoning',
|
|
158
|
-
icon: '/icons/kimi.svg',
|
|
159
163
|
},
|
|
160
164
|
{
|
|
161
165
|
id: 'foundry',
|
|
@@ -169,49 +173,74 @@ const RAW_PROVIDER_PRESET_DEFINITIONS = [
|
|
|
169
173
|
category: 'alternative',
|
|
170
174
|
requiresApiKey: true,
|
|
171
175
|
badge: 'Azure',
|
|
172
|
-
icon: '/icons/azure.svg',
|
|
173
176
|
},
|
|
174
177
|
{
|
|
175
178
|
id: 'mm',
|
|
176
|
-
name: '
|
|
177
|
-
description: 'M2.1/M2.1-lightning/M2
|
|
178
|
-
baseUrl: 'https://api.
|
|
179
|
+
name: 'MiniMax',
|
|
180
|
+
description: 'M2.1/M2.1-lightning/M2 — multilingual coding (1M context)',
|
|
181
|
+
baseUrl: 'https://api.minimaxi.com/anthropic',
|
|
179
182
|
defaultProfileName: 'mm',
|
|
180
183
|
defaultModel: 'MiniMax-M2.1',
|
|
184
|
+
opusModel: 'MiniMax-M2.1',
|
|
185
|
+
sonnetModel: 'MiniMax-M2.1',
|
|
186
|
+
haikuModel: 'MiniMax-M2.1-lightning',
|
|
181
187
|
apiKeyPlaceholder: 'YOUR_MINIMAX_API_KEY_HERE',
|
|
182
|
-
apiKeyHint: 'Get your API key at platform.
|
|
188
|
+
apiKeyHint: 'Get your API key at platform.minimaxi.com (国内域名)',
|
|
183
189
|
category: 'alternative',
|
|
184
190
|
requiresApiKey: true,
|
|
185
191
|
badge: '1M context',
|
|
186
|
-
icon: '/icons/minimax.svg',
|
|
187
192
|
},
|
|
188
193
|
{
|
|
189
194
|
id: 'deepseek',
|
|
190
195
|
name: 'DeepSeek',
|
|
191
|
-
description: '
|
|
196
|
+
description: 'V4-Pro / V4-Flash — multimodal (text + vision), 1M context',
|
|
192
197
|
baseUrl: 'https://api.deepseek.com/anthropic',
|
|
193
198
|
defaultProfileName: 'deepseek',
|
|
194
|
-
defaultModel: 'deepseek-
|
|
199
|
+
defaultModel: 'deepseek-v4-pro',
|
|
200
|
+
opusModel: 'deepseek-v4-pro',
|
|
201
|
+
sonnetModel: 'deepseek-v4-pro',
|
|
202
|
+
haikuModel: 'deepseek-v4-pro',
|
|
203
|
+
reasoningEffort: 'max',
|
|
195
204
|
apiKeyPlaceholder: 'sk-...',
|
|
196
205
|
apiKeyHint: 'Get your API key at platform.deepseek.com',
|
|
197
206
|
category: 'alternative',
|
|
198
207
|
requiresApiKey: true,
|
|
199
|
-
badge: '
|
|
200
|
-
icon: '/icons/deepseek.svg',
|
|
208
|
+
badge: 'Vision',
|
|
201
209
|
},
|
|
202
210
|
{
|
|
203
211
|
id: 'qwen',
|
|
204
|
-
name: 'Qwen',
|
|
205
|
-
description: '
|
|
206
|
-
baseUrl: 'https://dashscope
|
|
207
|
-
defaultProfileName: 'qwen
|
|
208
|
-
defaultModel: 'qwen3-
|
|
212
|
+
name: 'Qwen (DashScope 通义)',
|
|
213
|
+
description: '阿里云 DashScope OpenAI 兼容,旗舰思考模型 qwen3-max',
|
|
214
|
+
baseUrl: 'https://dashscope.aliyuncs.com/compatible-mode/v1',
|
|
215
|
+
defaultProfileName: 'qwen',
|
|
216
|
+
defaultModel: 'qwen3-max-2026-01-23',
|
|
217
|
+
opusModel: 'qwen3-max-2026-01-23',
|
|
218
|
+
sonnetModel: 'qwen3-max-2026-01-23',
|
|
219
|
+
haikuModel: 'qwen3-max-2026-01-23',
|
|
220
|
+
reasoningEffort: 'max',
|
|
209
221
|
apiKeyPlaceholder: 'sk-...',
|
|
210
|
-
apiKeyHint: '
|
|
222
|
+
apiKeyHint: '阿里云 Model Studio 控制台获取 DashScope API Key',
|
|
211
223
|
category: 'alternative',
|
|
212
224
|
requiresApiKey: true,
|
|
225
|
+
proxyChatCompletionsPath: '/chat/completions',
|
|
213
226
|
badge: 'Alibaba',
|
|
214
|
-
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
id: 'xiaomi-mimo',
|
|
230
|
+
name: '小米 MiMo',
|
|
231
|
+
description: 'MiMo V2.5-Pro(旗舰,1M 上下文,思考默认开启),Anthropic 兼容',
|
|
232
|
+
baseUrl: 'https://api.xiaomimimo.com/anthropic',
|
|
233
|
+
defaultProfileName: 'xiaomi',
|
|
234
|
+
defaultModel: 'mimo-v2.5-pro',
|
|
235
|
+
opusModel: 'mimo-v2.5-pro',
|
|
236
|
+
sonnetModel: 'mimo-v2.5-pro',
|
|
237
|
+
haikuModel: 'mimo-v2.5-pro',
|
|
238
|
+
reasoningEffort: 'high',
|
|
239
|
+
apiKeyPlaceholder: 'YOUR_XIAOMI_MIMO_API_KEY',
|
|
240
|
+
apiKeyHint: 'platform.xiaomimimo.com 控制台获取',
|
|
241
|
+
category: 'alternative',
|
|
242
|
+
requiresApiKey: true,
|
|
243
|
+
badge: 'MiMo V2.5',
|
|
215
244
|
},
|
|
216
245
|
{
|
|
217
246
|
id: 'ollama-cloud',
|
|
@@ -225,7 +254,6 @@ const RAW_PROVIDER_PRESET_DEFINITIONS = [
|
|
|
225
254
|
category: 'alternative',
|
|
226
255
|
requiresApiKey: true,
|
|
227
256
|
badge: 'Cloud',
|
|
228
|
-
icon: '/icons/ollama.svg',
|
|
229
257
|
},
|
|
230
258
|
{
|
|
231
259
|
id: 'novita',
|
|
@@ -239,7 +267,6 @@ const RAW_PROVIDER_PRESET_DEFINITIONS = [
|
|
|
239
267
|
category: 'alternative',
|
|
240
268
|
requiresApiKey: true,
|
|
241
269
|
badge: 'Anthropic-compatible',
|
|
242
|
-
icon: '/icons/novita.svg',
|
|
243
270
|
},
|
|
244
271
|
{
|
|
245
272
|
id: 'bigmodel',
|
|
@@ -247,14 +274,17 @@ const RAW_PROVIDER_PRESET_DEFINITIONS = [
|
|
|
247
274
|
description: '智谱 AI - GLM 系列模型 (OpenAI 兼容 API)',
|
|
248
275
|
baseUrl: 'https://open.bigmodel.cn/api/paas/v4',
|
|
249
276
|
defaultProfileName: 'bigmodel',
|
|
250
|
-
defaultModel: 'glm-5',
|
|
277
|
+
defaultModel: 'glm-5.2',
|
|
278
|
+
opusModel: 'glm-5.2',
|
|
279
|
+
sonnetModel: 'glm-5.2',
|
|
280
|
+
haikuModel: 'glm-5.2',
|
|
281
|
+
reasoningEffort: 'max',
|
|
251
282
|
apiKeyPlaceholder: 'YOUR_BIGMODEL_API_KEY',
|
|
252
283
|
apiKeyHint: 'Get your API key at bigmodel.cn',
|
|
253
284
|
category: 'alternative',
|
|
254
285
|
requiresApiKey: true,
|
|
255
286
|
proxyChatCompletionsPath: '/chat/completions',
|
|
256
287
|
badge: '智谱AI',
|
|
257
|
-
icon: '/icons/bigmodel.svg',
|
|
258
288
|
},
|
|
259
289
|
];
|
|
260
290
|
function clonePresetDefinition(preset) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-preset-catalog.js","sourceRoot":"","sources":["../../src/shared/provider-preset-catalog.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;
|
|
1
|
+
{"version":3,"file":"provider-preset-catalog.js","sourceRoot":"","sources":["../../src/shared/provider-preset-catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic vision probe image.
|
|
3
|
+
*
|
|
4
|
+
* Generates a 240×240 PNG split into four solid quadrants
|
|
5
|
+
* (top-left red / top-right green / bottom-left blue / bottom-right yellow)
|
|
6
|
+
* with a pure-Node encoder — no native deps. A model that can truly *see*
|
|
7
|
+
* the image names all four colors in order; a text-only model cannot.
|
|
8
|
+
*/
|
|
9
|
+
export declare const EXPECTED_COLORS: readonly ["red", "green", "blue", "yellow"];
|
|
10
|
+
export declare const VISION_PROBE_PROMPT: string;
|
|
11
|
+
/** Build the probe PNG and return it base64-encoded (no data: prefix). */
|
|
12
|
+
export declare function makeVisionProbeBase64(): string;
|
|
13
|
+
/** True if the model's reply mentions all four expected colors. */
|
|
14
|
+
export declare function passesVisionProbe(reply: string): boolean;
|
|
15
|
+
//# sourceMappingURL=test-image.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-image.d.ts","sourceRoot":"","sources":["../../src/shared/test-image.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,eAAO,MAAM,eAAe,6CAA8C,CAAC;AAE3E,eAAO,MAAM,mBAAmB,QAEmD,CAAC;AA2BpF,0EAA0E;AAC1E,wBAAgB,qBAAqB,IAAI,MAAM,CAqC9C;AAED,mEAAmE;AACnE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAGxD"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Deterministic vision probe image.
|
|
4
|
+
*
|
|
5
|
+
* Generates a 240×240 PNG split into four solid quadrants
|
|
6
|
+
* (top-left red / top-right green / bottom-left blue / bottom-right yellow)
|
|
7
|
+
* with a pure-Node encoder — no native deps. A model that can truly *see*
|
|
8
|
+
* the image names all four colors in order; a text-only model cannot.
|
|
9
|
+
*/
|
|
10
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
11
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.VISION_PROBE_PROMPT = exports.EXPECTED_COLORS = void 0;
|
|
15
|
+
exports.makeVisionProbeBase64 = makeVisionProbeBase64;
|
|
16
|
+
exports.passesVisionProbe = passesVisionProbe;
|
|
17
|
+
const zlib_1 = __importDefault(require("zlib"));
|
|
18
|
+
exports.EXPECTED_COLORS = ['red', 'green', 'blue', 'yellow'];
|
|
19
|
+
exports.VISION_PROBE_PROMPT = 'This image is split into 4 equal quadrants. Name the dominant color of each in order: ' +
|
|
20
|
+
'top-left, top-right, bottom-left, bottom-right. Answer with just 4 color words.';
|
|
21
|
+
const CRC_TABLE = (() => {
|
|
22
|
+
const t = new Uint32Array(256);
|
|
23
|
+
for (let n = 0; n < 256; n++) {
|
|
24
|
+
let c = n;
|
|
25
|
+
for (let k = 0; k < 8; k++)
|
|
26
|
+
c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;
|
|
27
|
+
t[n] = c >>> 0;
|
|
28
|
+
}
|
|
29
|
+
return t;
|
|
30
|
+
})();
|
|
31
|
+
function crc32(buf) {
|
|
32
|
+
let c = 0xffffffff;
|
|
33
|
+
for (const b of buf)
|
|
34
|
+
c = CRC_TABLE[(c ^ b) & 0xff] ^ (c >>> 8);
|
|
35
|
+
return (c ^ 0xffffffff) >>> 0;
|
|
36
|
+
}
|
|
37
|
+
function chunk(type, data) {
|
|
38
|
+
const len = Buffer.alloc(4);
|
|
39
|
+
len.writeUInt32BE(data.length);
|
|
40
|
+
const td = Buffer.concat([Buffer.from(type, 'ascii'), data]);
|
|
41
|
+
const crc = Buffer.alloc(4);
|
|
42
|
+
crc.writeUInt32BE(crc32(td));
|
|
43
|
+
return Buffer.concat([len, td, crc]);
|
|
44
|
+
}
|
|
45
|
+
/** Build the probe PNG and return it base64-encoded (no data: prefix). */
|
|
46
|
+
function makeVisionProbeBase64() {
|
|
47
|
+
const W = 240;
|
|
48
|
+
const H = 240;
|
|
49
|
+
const pixel = (x, y) => {
|
|
50
|
+
const top = y < H / 2;
|
|
51
|
+
const left = x < W / 2;
|
|
52
|
+
if (top && left)
|
|
53
|
+
return [220, 30, 30]; // red
|
|
54
|
+
if (top && !left)
|
|
55
|
+
return [30, 170, 40]; // green
|
|
56
|
+
if (!top && left)
|
|
57
|
+
return [40, 80, 220]; // blue
|
|
58
|
+
return [240, 210, 30]; // yellow
|
|
59
|
+
};
|
|
60
|
+
const raw = Buffer.alloc(H * (1 + W * 3));
|
|
61
|
+
let p = 0;
|
|
62
|
+
for (let y = 0; y < H; y++) {
|
|
63
|
+
raw[p++] = 0; // filter: none
|
|
64
|
+
for (let x = 0; x < W; x++) {
|
|
65
|
+
const [r, g, b] = pixel(x, y);
|
|
66
|
+
raw[p++] = r;
|
|
67
|
+
raw[p++] = g;
|
|
68
|
+
raw[p++] = b;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
const ihdr = Buffer.alloc(13);
|
|
72
|
+
ihdr.writeUInt32BE(W, 0);
|
|
73
|
+
ihdr.writeUInt32BE(H, 4);
|
|
74
|
+
ihdr[8] = 8; // bit depth
|
|
75
|
+
ihdr[9] = 2; // color type: truecolor RGB
|
|
76
|
+
const png = Buffer.concat([
|
|
77
|
+
Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]),
|
|
78
|
+
chunk('IHDR', ihdr),
|
|
79
|
+
chunk('IDAT', zlib_1.default.deflateSync(raw, { level: 9 })),
|
|
80
|
+
chunk('IEND', Buffer.alloc(0)),
|
|
81
|
+
]);
|
|
82
|
+
return png.toString('base64');
|
|
83
|
+
}
|
|
84
|
+
/** True if the model's reply mentions all four expected colors. */
|
|
85
|
+
function passesVisionProbe(reply) {
|
|
86
|
+
const low = reply.toLowerCase();
|
|
87
|
+
return exports.EXPECTED_COLORS.every((c) => low.includes(c));
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=test-image.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-image.js","sourceRoot":"","sources":["../../src/shared/test-image.ts"],"names":[],"mappings":"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"}
|