Skip to content

Commit 3a9a60e

Browse files
authored
Merge branch 'main' into fix/telegram-preview-placeholder-95004
2 parents d2687ea + 7b44157 commit 3a9a60e

183 files changed

Lines changed: 6055 additions & 1874 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/ci-build-artifacts-testbox.yml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,24 +214,49 @@ jobs:
214214
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
215215
ANTHROPIC_API_KEY_OLD: ${{ secrets.ANTHROPIC_API_KEY_OLD }}
216216
ANTHROPIC_API_TOKEN: ${{ secrets.ANTHROPIC_API_TOKEN }}
217+
BYTEPLUS_API_KEY: ${{ secrets.BYTEPLUS_API_KEY }}
217218
CEREBRAS_API_KEY: ${{ secrets.CEREBRAS_API_KEY }}
218219
DEEPINFRA_API_KEY: ${{ secrets.DEEPINFRA_API_KEY }}
220+
DASHSCOPE_API_KEY: ${{ secrets.DASHSCOPE_API_KEY }}
221+
FACTORY_API_KEY: ${{ secrets.FACTORY_API_KEY }}
219222
FIREWORKS_API_KEY: ${{ secrets.FIREWORKS_API_KEY }}
220223
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
221224
GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }}
222225
GROQ_API_KEY: ${{ secrets.GROQ_API_KEY }}
223226
KIMI_API_KEY: ${{ secrets.KIMI_API_KEY }}
224227
MINIMAX_API_KEY: ${{ secrets.MINIMAX_API_KEY }}
228+
MODELSTUDIO_API_KEY: ${{ secrets.MODELSTUDIO_API_KEY }}
225229
MISTRAL_API_KEY: ${{ secrets.MISTRAL_API_KEY }}
226230
MOONSHOT_API_KEY: ${{ secrets.MOONSHOT_API_KEY }}
231+
OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }}
232+
OPENCODE_ZEN_API_KEY: ${{ secrets.OPENCODE_ZEN_API_KEY }}
233+
OPENCLAW_LIVE_BROWSER_CDP_URL: ${{ secrets.OPENCLAW_LIVE_BROWSER_CDP_URL }}
234+
OPENCLAW_LIVE_SETUP_TOKEN: ${{ secrets.OPENCLAW_LIVE_SETUP_TOKEN }}
235+
OPENCLAW_LIVE_SETUP_TOKEN_MODEL: ${{ secrets.OPENCLAW_LIVE_SETUP_TOKEN_MODEL }}
236+
OPENCLAW_LIVE_SETUP_TOKEN_PROFILE: ${{ secrets.OPENCLAW_LIVE_SETUP_TOKEN_PROFILE }}
237+
OPENCLAW_LIVE_SETUP_TOKEN_VALUE: ${{ secrets.OPENCLAW_LIVE_SETUP_TOKEN_VALUE }}
227238
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
228239
OPENAI_BASE_URL: ${{ secrets.OPENAI_BASE_URL }}
229240
OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
230241
QWEN_API_KEY: ${{ secrets.QWEN_API_KEY }}
242+
FAL_KEY: ${{ secrets.FAL_KEY }}
243+
RUNWAY_API_KEY: ${{ secrets.RUNWAY_API_KEY }}
244+
DEEPGRAM_API_KEY: ${{ secrets.DEEPGRAM_API_KEY }}
231245
TOGETHER_API_KEY: ${{ secrets.TOGETHER_API_KEY }}
246+
VYDRA_API_KEY: ${{ secrets.VYDRA_API_KEY }}
232247
XAI_API_KEY: ${{ secrets.XAI_API_KEY }}
233248
ZAI_API_KEY: ${{ secrets.ZAI_API_KEY }}
234249
Z_AI_API_KEY: ${{ secrets.Z_AI_API_KEY }}
250+
BYTEPLUS_ACCESS_KEY_ID: ${{ secrets.BYTEPLUS_ACCESS_KEY_ID }}
251+
BYTEPLUS_SECRET_ACCESS_KEY: ${{ secrets.BYTEPLUS_SECRET_ACCESS_KEY }}
252+
CLAUDE_CODE_OAUTH_TOKEN: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
253+
OPENCLAW_CODEX_AUTH_JSON: ${{ secrets.OPENCLAW_CODEX_AUTH_JSON }}
254+
OPENCLAW_CODEX_CONFIG_TOML: ${{ secrets.OPENCLAW_CODEX_CONFIG_TOML }}
255+
OPENCLAW_CLAUDE_JSON: ${{ secrets.OPENCLAW_CLAUDE_JSON }}
256+
OPENCLAW_CLAUDE_CREDENTIALS_JSON: ${{ secrets.OPENCLAW_CLAUDE_CREDENTIALS_JSON }}
257+
OPENCLAW_CLAUDE_SETTINGS_JSON: ${{ secrets.OPENCLAW_CLAUDE_SETTINGS_JSON }}
258+
OPENCLAW_CLAUDE_SETTINGS_LOCAL_JSON: ${{ secrets.OPENCLAW_CLAUDE_SETTINGS_LOCAL_JSON }}
259+
OPENCLAW_GEMINI_SETTINGS_JSON: ${{ secrets.OPENCLAW_GEMINI_SETTINGS_JSON }}
235260
run: bash scripts/ci-hydrate-testbox-env.sh
236261

237262
- name: Run Testbox

.github/workflows/ci-check-arm-testbox.yml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,25 +132,49 @@ jobs:
132132
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
133133
ANTHROPIC_API_KEY_OLD: ${{ secrets.ANTHROPIC_API_KEY_OLD }}
134134
ANTHROPIC_API_TOKEN: ${{ secrets.ANTHROPIC_API_TOKEN }}
135+
BYTEPLUS_API_KEY: ${{ secrets.BYTEPLUS_API_KEY }}
135136
CEREBRAS_API_KEY: ${{ secrets.CEREBRAS_API_KEY }}
136137
DEEPINFRA_API_KEY: ${{ secrets.DEEPINFRA_API_KEY }}
138+
DASHSCOPE_API_KEY: ${{ secrets.DASHSCOPE_API_KEY }}
137139
FACTORY_API_KEY: ${{ secrets.FACTORY_API_KEY }}
138140
FIREWORKS_API_KEY: ${{ secrets.FIREWORKS_API_KEY }}
139141
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
140142
GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }}
141143
GROQ_API_KEY: ${{ secrets.GROQ_API_KEY }}
142144
KIMI_API_KEY: ${{ secrets.KIMI_API_KEY }}
143145
MINIMAX_API_KEY: ${{ secrets.MINIMAX_API_KEY }}
146+
MODELSTUDIO_API_KEY: ${{ secrets.MODELSTUDIO_API_KEY }}
144147
MISTRAL_API_KEY: ${{ secrets.MISTRAL_API_KEY }}
145148
MOONSHOT_API_KEY: ${{ secrets.MOONSHOT_API_KEY }}
149+
OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }}
150+
OPENCODE_ZEN_API_KEY: ${{ secrets.OPENCODE_ZEN_API_KEY }}
151+
OPENCLAW_LIVE_BROWSER_CDP_URL: ${{ secrets.OPENCLAW_LIVE_BROWSER_CDP_URL }}
152+
OPENCLAW_LIVE_SETUP_TOKEN: ${{ secrets.OPENCLAW_LIVE_SETUP_TOKEN }}
153+
OPENCLAW_LIVE_SETUP_TOKEN_MODEL: ${{ secrets.OPENCLAW_LIVE_SETUP_TOKEN_MODEL }}
154+
OPENCLAW_LIVE_SETUP_TOKEN_PROFILE: ${{ secrets.OPENCLAW_LIVE_SETUP_TOKEN_PROFILE }}
155+
OPENCLAW_LIVE_SETUP_TOKEN_VALUE: ${{ secrets.OPENCLAW_LIVE_SETUP_TOKEN_VALUE }}
146156
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
147157
OPENAI_BASE_URL: ${{ secrets.OPENAI_BASE_URL }}
148158
OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
149159
QWEN_API_KEY: ${{ secrets.QWEN_API_KEY }}
160+
FAL_KEY: ${{ secrets.FAL_KEY }}
161+
RUNWAY_API_KEY: ${{ secrets.RUNWAY_API_KEY }}
162+
DEEPGRAM_API_KEY: ${{ secrets.DEEPGRAM_API_KEY }}
150163
TOGETHER_API_KEY: ${{ secrets.TOGETHER_API_KEY }}
164+
VYDRA_API_KEY: ${{ secrets.VYDRA_API_KEY }}
151165
XAI_API_KEY: ${{ secrets.XAI_API_KEY }}
152166
ZAI_API_KEY: ${{ secrets.ZAI_API_KEY }}
153167
Z_AI_API_KEY: ${{ secrets.Z_AI_API_KEY }}
168+
BYTEPLUS_ACCESS_KEY_ID: ${{ secrets.BYTEPLUS_ACCESS_KEY_ID }}
169+
BYTEPLUS_SECRET_ACCESS_KEY: ${{ secrets.BYTEPLUS_SECRET_ACCESS_KEY }}
170+
CLAUDE_CODE_OAUTH_TOKEN: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
171+
OPENCLAW_CODEX_AUTH_JSON: ${{ secrets.OPENCLAW_CODEX_AUTH_JSON }}
172+
OPENCLAW_CODEX_CONFIG_TOML: ${{ secrets.OPENCLAW_CODEX_CONFIG_TOML }}
173+
OPENCLAW_CLAUDE_JSON: ${{ secrets.OPENCLAW_CLAUDE_JSON }}
174+
OPENCLAW_CLAUDE_CREDENTIALS_JSON: ${{ secrets.OPENCLAW_CLAUDE_CREDENTIALS_JSON }}
175+
OPENCLAW_CLAUDE_SETTINGS_JSON: ${{ secrets.OPENCLAW_CLAUDE_SETTINGS_JSON }}
176+
OPENCLAW_CLAUDE_SETTINGS_LOCAL_JSON: ${{ secrets.OPENCLAW_CLAUDE_SETTINGS_LOCAL_JSON }}
177+
OPENCLAW_GEMINI_SETTINGS_JSON: ${{ secrets.OPENCLAW_GEMINI_SETTINGS_JSON }}
154178
run: bash scripts/ci-hydrate-testbox-env.sh
155179

156180
- name: Run Testbox

.github/workflows/ci-check-testbox.yml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,25 +121,49 @@ jobs:
121121
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
122122
ANTHROPIC_API_KEY_OLD: ${{ secrets.ANTHROPIC_API_KEY_OLD }}
123123
ANTHROPIC_API_TOKEN: ${{ secrets.ANTHROPIC_API_TOKEN }}
124+
BYTEPLUS_API_KEY: ${{ secrets.BYTEPLUS_API_KEY }}
124125
CEREBRAS_API_KEY: ${{ secrets.CEREBRAS_API_KEY }}
125126
DEEPINFRA_API_KEY: ${{ secrets.DEEPINFRA_API_KEY }}
127+
DASHSCOPE_API_KEY: ${{ secrets.DASHSCOPE_API_KEY }}
126128
FACTORY_API_KEY: ${{ secrets.FACTORY_API_KEY }}
127129
FIREWORKS_API_KEY: ${{ secrets.FIREWORKS_API_KEY }}
128130
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
129131
GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }}
130132
GROQ_API_KEY: ${{ secrets.GROQ_API_KEY }}
131133
KIMI_API_KEY: ${{ secrets.KIMI_API_KEY }}
132134
MINIMAX_API_KEY: ${{ secrets.MINIMAX_API_KEY }}
135+
MODELSTUDIO_API_KEY: ${{ secrets.MODELSTUDIO_API_KEY }}
133136
MISTRAL_API_KEY: ${{ secrets.MISTRAL_API_KEY }}
134137
MOONSHOT_API_KEY: ${{ secrets.MOONSHOT_API_KEY }}
138+
OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }}
139+
OPENCODE_ZEN_API_KEY: ${{ secrets.OPENCODE_ZEN_API_KEY }}
140+
OPENCLAW_LIVE_BROWSER_CDP_URL: ${{ secrets.OPENCLAW_LIVE_BROWSER_CDP_URL }}
141+
OPENCLAW_LIVE_SETUP_TOKEN: ${{ secrets.OPENCLAW_LIVE_SETUP_TOKEN }}
142+
OPENCLAW_LIVE_SETUP_TOKEN_MODEL: ${{ secrets.OPENCLAW_LIVE_SETUP_TOKEN_MODEL }}
143+
OPENCLAW_LIVE_SETUP_TOKEN_PROFILE: ${{ secrets.OPENCLAW_LIVE_SETUP_TOKEN_PROFILE }}
144+
OPENCLAW_LIVE_SETUP_TOKEN_VALUE: ${{ secrets.OPENCLAW_LIVE_SETUP_TOKEN_VALUE }}
135145
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
136146
OPENAI_BASE_URL: ${{ secrets.OPENAI_BASE_URL }}
137147
OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
138148
QWEN_API_KEY: ${{ secrets.QWEN_API_KEY }}
149+
FAL_KEY: ${{ secrets.FAL_KEY }}
150+
RUNWAY_API_KEY: ${{ secrets.RUNWAY_API_KEY }}
151+
DEEPGRAM_API_KEY: ${{ secrets.DEEPGRAM_API_KEY }}
139152
TOGETHER_API_KEY: ${{ secrets.TOGETHER_API_KEY }}
153+
VYDRA_API_KEY: ${{ secrets.VYDRA_API_KEY }}
140154
XAI_API_KEY: ${{ secrets.XAI_API_KEY }}
141155
ZAI_API_KEY: ${{ secrets.ZAI_API_KEY }}
142156
Z_AI_API_KEY: ${{ secrets.Z_AI_API_KEY }}
157+
BYTEPLUS_ACCESS_KEY_ID: ${{ secrets.BYTEPLUS_ACCESS_KEY_ID }}
158+
BYTEPLUS_SECRET_ACCESS_KEY: ${{ secrets.BYTEPLUS_SECRET_ACCESS_KEY }}
159+
CLAUDE_CODE_OAUTH_TOKEN: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
160+
OPENCLAW_CODEX_AUTH_JSON: ${{ secrets.OPENCLAW_CODEX_AUTH_JSON }}
161+
OPENCLAW_CODEX_CONFIG_TOML: ${{ secrets.OPENCLAW_CODEX_CONFIG_TOML }}
162+
OPENCLAW_CLAUDE_JSON: ${{ secrets.OPENCLAW_CLAUDE_JSON }}
163+
OPENCLAW_CLAUDE_CREDENTIALS_JSON: ${{ secrets.OPENCLAW_CLAUDE_CREDENTIALS_JSON }}
164+
OPENCLAW_CLAUDE_SETTINGS_JSON: ${{ secrets.OPENCLAW_CLAUDE_SETTINGS_JSON }}
165+
OPENCLAW_CLAUDE_SETTINGS_LOCAL_JSON: ${{ secrets.OPENCLAW_CLAUDE_SETTINGS_LOCAL_JSON }}
166+
OPENCLAW_GEMINI_SETTINGS_JSON: ${{ secrets.OPENCLAW_GEMINI_SETTINGS_JSON }}
143167
run: bash scripts/ci-hydrate-testbox-env.sh
144168

145169
- name: Run Testbox

.github/workflows/crabbox-hydrate.yml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -663,25 +663,49 @@ jobs:
663663
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
664664
ANTHROPIC_API_KEY_OLD: ${{ secrets.ANTHROPIC_API_KEY_OLD }}
665665
ANTHROPIC_API_TOKEN: ${{ secrets.ANTHROPIC_API_TOKEN }}
666+
BYTEPLUS_API_KEY: ${{ secrets.BYTEPLUS_API_KEY }}
666667
CEREBRAS_API_KEY: ${{ secrets.CEREBRAS_API_KEY }}
667668
DEEPINFRA_API_KEY: ${{ secrets.DEEPINFRA_API_KEY }}
669+
DASHSCOPE_API_KEY: ${{ secrets.DASHSCOPE_API_KEY }}
668670
FACTORY_API_KEY: ${{ secrets.FACTORY_API_KEY }}
669671
FIREWORKS_API_KEY: ${{ secrets.FIREWORKS_API_KEY }}
670672
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
671673
GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }}
672674
GROQ_API_KEY: ${{ secrets.GROQ_API_KEY }}
673675
KIMI_API_KEY: ${{ secrets.KIMI_API_KEY }}
674676
MINIMAX_API_KEY: ${{ secrets.MINIMAX_API_KEY }}
677+
MODELSTUDIO_API_KEY: ${{ secrets.MODELSTUDIO_API_KEY }}
675678
MISTRAL_API_KEY: ${{ secrets.MISTRAL_API_KEY }}
676679
MOONSHOT_API_KEY: ${{ secrets.MOONSHOT_API_KEY }}
680+
OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }}
681+
OPENCODE_ZEN_API_KEY: ${{ secrets.OPENCODE_ZEN_API_KEY }}
682+
OPENCLAW_LIVE_BROWSER_CDP_URL: ${{ secrets.OPENCLAW_LIVE_BROWSER_CDP_URL }}
683+
OPENCLAW_LIVE_SETUP_TOKEN: ${{ secrets.OPENCLAW_LIVE_SETUP_TOKEN }}
684+
OPENCLAW_LIVE_SETUP_TOKEN_MODEL: ${{ secrets.OPENCLAW_LIVE_SETUP_TOKEN_MODEL }}
685+
OPENCLAW_LIVE_SETUP_TOKEN_PROFILE: ${{ secrets.OPENCLAW_LIVE_SETUP_TOKEN_PROFILE }}
686+
OPENCLAW_LIVE_SETUP_TOKEN_VALUE: ${{ secrets.OPENCLAW_LIVE_SETUP_TOKEN_VALUE }}
677687
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
678688
OPENAI_BASE_URL: ${{ secrets.OPENAI_BASE_URL }}
679689
OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
680690
QWEN_API_KEY: ${{ secrets.QWEN_API_KEY }}
691+
FAL_KEY: ${{ secrets.FAL_KEY }}
692+
RUNWAY_API_KEY: ${{ secrets.RUNWAY_API_KEY }}
693+
DEEPGRAM_API_KEY: ${{ secrets.DEEPGRAM_API_KEY }}
681694
TOGETHER_API_KEY: ${{ secrets.TOGETHER_API_KEY }}
695+
VYDRA_API_KEY: ${{ secrets.VYDRA_API_KEY }}
682696
XAI_API_KEY: ${{ secrets.XAI_API_KEY }}
683697
ZAI_API_KEY: ${{ secrets.ZAI_API_KEY }}
684698
Z_AI_API_KEY: ${{ secrets.Z_AI_API_KEY }}
699+
BYTEPLUS_ACCESS_KEY_ID: ${{ secrets.BYTEPLUS_ACCESS_KEY_ID }}
700+
BYTEPLUS_SECRET_ACCESS_KEY: ${{ secrets.BYTEPLUS_SECRET_ACCESS_KEY }}
701+
CLAUDE_CODE_OAUTH_TOKEN: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
702+
OPENCLAW_CODEX_AUTH_JSON: ${{ secrets.OPENCLAW_CODEX_AUTH_JSON }}
703+
OPENCLAW_CODEX_CONFIG_TOML: ${{ secrets.OPENCLAW_CODEX_CONFIG_TOML }}
704+
OPENCLAW_CLAUDE_JSON: ${{ secrets.OPENCLAW_CLAUDE_JSON }}
705+
OPENCLAW_CLAUDE_CREDENTIALS_JSON: ${{ secrets.OPENCLAW_CLAUDE_CREDENTIALS_JSON }}
706+
OPENCLAW_CLAUDE_SETTINGS_JSON: ${{ secrets.OPENCLAW_CLAUDE_SETTINGS_JSON }}
707+
OPENCLAW_CLAUDE_SETTINGS_LOCAL_JSON: ${{ secrets.OPENCLAW_CLAUDE_SETTINGS_LOCAL_JSON }}
708+
OPENCLAW_GEMINI_SETTINGS_JSON: ${{ secrets.OPENCLAW_GEMINI_SETTINGS_JSON }}
685709
run: bash scripts/ci-hydrate-testbox-env.sh
686710

687711
- name: Mark Crabbox ready

.github/workflows/windows-blacksmith-testbox.yml

Lines changed: 47 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,10 @@ jobs:
5757
echo "could not read required Blacksmith metadata" >&2
5858
exit 1
5959
fi
60+
if ! jq -e 'type == "number"' <<<"$installation_model_id" >/dev/null; then
61+
echo "invalid Blacksmith installation model id: ${installation_model_id}" >&2
62+
exit 1
63+
fi
6064
6165
if [ -n "${BLACKSMITH_HOSTNAME:-}" ]; then
6266
runner_host="$BLACKSMITH_HOSTNAME"
@@ -65,21 +69,32 @@ jobs:
6569
fi
6670
runner_ssh_port="${BLACKSMITH_SSH_PORT:-22}"
6771
72+
hydrating_body="$RUNNER_TEMP/testbox-hydrating.json"
6873
hydrating_response="$RUNNER_TEMP/testbox-hydrating.response"
74+
jq -n \
75+
--arg testbox_id "$TESTBOX_ID" \
76+
--argjson installation_model_id "$installation_model_id" \
77+
--arg status "hydrating" \
78+
--arg ip_address "$runner_host" \
79+
--arg ssh_port "$runner_ssh_port" \
80+
--arg working_directory "$GITHUB_WORKSPACE" \
81+
--arg adopted_run_id "$GITHUB_RUN_ID" \
82+
'{
83+
testbox_id: $testbox_id,
84+
installation_model_id: $installation_model_id,
85+
status: $status,
86+
ip_address: $ip_address,
87+
ssh_port: $ssh_port,
88+
working_directory: $working_directory,
89+
adopted_run_id: $adopted_run_id,
90+
metadata: {}
91+
}' > "$hydrating_body"
92+
6993
hydrating_http_code="$(curl -sS -L --post302 --post303 -o "$hydrating_response" -w '%{http_code}' \
7094
-X POST "${api_url}/api/testbox/phone-home" \
7195
-H "Content-Type: application/json" \
7296
-H "Authorization: Bearer ${auth_token}" \
73-
-d "{
74-
\"testbox_id\": \"${TESTBOX_ID}\",
75-
\"installation_model_id\": ${installation_model_id},
76-
\"status\": \"hydrating\",
77-
\"ip_address\": \"${runner_host}\",
78-
\"ssh_port\": \"${runner_ssh_port}\",
79-
\"working_directory\": \"${GITHUB_WORKSPACE}\",
80-
\"adopted_run_id\": \"${GITHUB_RUN_ID}\",
81-
\"metadata\": {}
82-
}" || true)"
97+
--data-binary @"$hydrating_body" || true)"
8398
8499
echo "phone_home_hydrating_http=${hydrating_http_code}"
85100
if [[ ! "$hydrating_http_code" =~ ^2 ]]; then
@@ -152,20 +167,30 @@ jobs:
152167
runner_ssh_port="$(cat "$state/runner_ssh_port")"
153168
working_directory="$(cat "$state/working_directory")"
154169
adopted_run_id="$(cat "$state/adopted_run_id")"
170+
if ! jq -e 'type == "number"' <<<"$installation_model_id" >/dev/null; then
171+
echo "invalid Blacksmith installation model id: ${installation_model_id}" >&2
172+
exit 1
173+
fi
155174
156175
ready_body="$RUNNER_TEMP/testbox-ready.json"
157-
cat > "$ready_body" <<JSON
158-
{
159-
"testbox_id": "${testbox_id}",
160-
"installation_model_id": ${installation_model_id},
161-
"status": "ready",
162-
"ip_address": "${runner_host}",
163-
"ssh_port": "${runner_ssh_port}",
164-
"working_directory": "${working_directory}",
165-
"adopted_run_id": "${adopted_run_id}",
166-
"metadata": {}
167-
}
168-
JSON
176+
jq -n \
177+
--arg testbox_id "$testbox_id" \
178+
--argjson installation_model_id "$installation_model_id" \
179+
--arg status "ready" \
180+
--arg ip_address "$runner_host" \
181+
--arg ssh_port "$runner_ssh_port" \
182+
--arg working_directory "$working_directory" \
183+
--arg adopted_run_id "$adopted_run_id" \
184+
'{
185+
testbox_id: $testbox_id,
186+
installation_model_id: $installation_model_id,
187+
status: $status,
188+
ip_address: $ip_address,
189+
ssh_port: $ssh_port,
190+
working_directory: $working_directory,
191+
adopted_run_id: $adopted_run_id,
192+
metadata: {}
193+
}' > "$ready_body"
169194
170195
http_code="$(curl -sS -L --post302 --post303 -o "$RUNNER_TEMP/testbox-ready.response" -w '%{http_code}' \
171196
-X POST "${api_url}/api/testbox/phone-home" \

config/knip.config.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,10 +128,6 @@ const config = {
128128
"**/*.test-utils.ts",
129129
"test/helpers/live-image-probe.ts",
130130
"src/secrets/credential-matrix.ts",
131-
"src/agents/claude-cli-runner.ts",
132-
"src/agents/agent-auth-json.ts",
133-
"src/agents/tool-policy.conformance.ts",
134-
"src/auto-reply/reply/audio-tags.ts",
135131
"src/gateway/live-tool-probe-utils.ts",
136132
"src/gateway/server.auth.shared.ts",
137133
"src/shared/text/assistant-visible-text.ts",

extensions/minimax/model-definitions.test.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,18 @@ import {
1111
MINIMAX_M27_API_COST,
1212
MINIMAX_M25_API_COST,
1313
MINIMAX_M25_API_HIGHSPEED_COST,
14-
MINIMAX_M3_CONTEXT_WINDOW,
1514
} from "./model-definitions.js";
15+
import { MINIMAX_TEXT_MODEL_CATALOG } from "./provider-models.js";
16+
17+
const MINIMAX_M3_CATALOG_CONTEXT_WINDOW = MINIMAX_TEXT_MODEL_CATALOG["MiniMax-M3"].contextWindow;
1618

1719
describe("minimax model definitions", () => {
1820
it("uses M3 as default hosted model", () => {
1921
expect(MINIMAX_HOSTED_MODEL_ID).toBe("MiniMax-M3");
2022
});
2123

2224
it("uses the current upstream MiniMax context, token, and pricing defaults", () => {
23-
expect(MINIMAX_M3_CONTEXT_WINDOW).toBe(1_000_000);
25+
expect(MINIMAX_M3_CATALOG_CONTEXT_WINDOW).toBe(1_000_000);
2426
expect(DEFAULT_MINIMAX_CONTEXT_WINDOW).toBe(204800);
2527
expect(DEFAULT_MINIMAX_MAX_TOKENS).toBe(131072);
2628
expect(MINIMAX_API_COST).toEqual({
@@ -35,11 +37,11 @@ describe("minimax model definitions", () => {
3537
const model = buildMinimaxModelDefinition({
3638
id: "MiniMax-M3",
3739
cost: MINIMAX_API_COST,
38-
contextWindow: MINIMAX_M3_CONTEXT_WINDOW,
40+
contextWindow: MINIMAX_M3_CATALOG_CONTEXT_WINDOW,
3941
maxTokens: DEFAULT_MINIMAX_MAX_TOKENS,
4042
});
4143
expect(model).toEqual({
42-
contextWindow: MINIMAX_M3_CONTEXT_WINDOW,
44+
contextWindow: MINIMAX_M3_CATALOG_CONTEXT_WINDOW,
4345
cost: MINIMAX_API_COST,
4446
id: "MiniMax-M3",
4547
input: ["text", "image"],
@@ -70,7 +72,7 @@ describe("minimax model definitions", () => {
7072
it("builds API model definition with standard cost for M3", () => {
7173
const model = buildMinimaxApiModelDefinition("MiniMax-M3");
7274
expect(model.cost).toEqual(MINIMAX_API_COST);
73-
expect(model.contextWindow).toBe(MINIMAX_M3_CONTEXT_WINDOW);
75+
expect(model.contextWindow).toBe(MINIMAX_M3_CATALOG_CONTEXT_WINDOW);
7476
expect(model.maxTokens).toBe(DEFAULT_MINIMAX_MAX_TOKENS);
7577
expect(model.input).toEqual(["text", "image"]);
7678
});

extensions/minimax/model-definitions.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ export const MINIMAX_CN_API_BASE_URL = "https://api.minimaxi.com/anthropic";
88
export const MINIMAX_HOSTED_MODEL_ID = MINIMAX_DEFAULT_MODEL_ID;
99
export const MINIMAX_HOSTED_MODEL_REF = `minimax/${MINIMAX_HOSTED_MODEL_ID}`;
1010
export const DEFAULT_MINIMAX_CONTEXT_WINDOW = 204800;
11-
export const MINIMAX_M3_CONTEXT_WINDOW = 1_000_000;
1211
export const DEFAULT_MINIMAX_MAX_TOKENS = 131072;
1312

1413
export const MINIMAX_API_COST = {

0 commit comments

Comments
 (0)