项目文件夹

文件
wehub-resource-sync 426e9eeabd
Voice Workbench / headless workbench (mocked backends) (push) Has been cancelled
Voice Workbench / real acoustic lane (nightly, provisioned only) (push) Has been cancelled
ci / test (push) Has been cancelled
ci / lint-and-format (push) Has been cancelled
ci / build (push) Has been cancelled
ci / dev-startup (push) Has been cancelled
gitleaks / gitleaks (push) Has been cancelled
Markdown Links / Relative Markdown Links (push) Has been cancelled
Quality (Extended) / Homepage Build (PR smoke) (push) Has been cancelled
Quality (Extended) / Comment-only diff guard (push) Has been cancelled
Quality (Extended) / Format + Type Safety Ratchet (push) Has been cancelled
Quality (Extended) / Develop Gate (secret scan + UI determinism) (push) Has been cancelled
Quality (Extended) / Develop Gate (lint) (push) Has been cancelled
Chat shell gestures / Chat shell gesture + parity e2e (push) Has been cancelled
Cloud Gateway Discord / Test (push) Has been cancelled
Benchmark Bridge Tests / benchmark (bunx @biomejs/biome check packages/lifeops-bench/src, benchmark-lint) (push) Has been cancelled
Benchmark Bridge Tests / benchmark (bunx vitest run --config packages/lifeops-bench/vitest.config.ts --root packages/lifeops-bench --passWithNoTests, benchmark-tests) (push) Has been cancelled
Build Agent Image / build-and-push (push) Has been cancelled
Dev Smoke / bun run dev onboarding chat (push) Has been cancelled
Dev Smoke / Vite HMR dependency-level smoke (push) Has been cancelled
Electrobun Submodule Guard / electrobun gitlink is fetchable (push) Has been cancelled
Publish @elizaos/example-code / check_npm (push) Has been cancelled
Publish @elizaos/example-code / publish_npm (push) Has been cancelled
Publish @elizaos/plugin-elizacloud / verify_version (push) Has been cancelled
Publish @elizaos/plugin-elizacloud / publish_npm (push) Has been cancelled
Sandbox Live Smoke / Sandbox live smoke (push) Has been cancelled
Snap Build & Test / Build Snap (amd64) (push) Has been cancelled
Snap Build & Test / Build Snap (arm64) (push) Has been cancelled
Test Packaging / elizaos CLI global-install smoke (node + bun) (push) Has been cancelled
Cloud Gateway Webhook / Test (push) Has been cancelled
Cloud Tests / lint-and-types (push) Has been cancelled
Cloud Tests / unit-tests (push) Has been cancelled
Cloud Tests / integration-tests (push) Has been cancelled
Cloud Tests / e2e-tests (push) Has been cancelled
CodeQL Advanced / Analyze (javascript-typescript) (push) Has been cancelled
Deploy Apps Worker (Product 2) / Determine environment (push) Has been cancelled
Deploy Apps Worker (Product 2) / Deploy apps worker to apps-control host (${{ needs.determine-env.outputs.environment }}) (push) Has been cancelled
Deploy Eliza Provisioning Worker / Determine environment (push) Has been cancelled
Deploy Eliza Provisioning Worker / Deploy worker to Hetzner host (${{ needs.determine-env.outputs.environment }} @ ${{ needs.determine-env.outputs.deployment_sha }}) (push) Has been cancelled
Dev Smoke / Classify changed paths (push) Has been cancelled
supply-chain / sbom (push) Has been cancelled
supply-chain / vulnerability-scan (push) Has been cancelled
Build, Push & Deploy to Phala Cloud / build-and-push (push) Has been cancelled
Test Packaging / Validate Packaging Configs (push) Has been cancelled
Test Packaging / Build & Test PyPI Package (push) Has been cancelled
Test Packaging / PyPI on Python ${{ matrix.python }} (push) Has been cancelled
Test Packaging / Pack & Test JS Tarballs (push) Has been cancelled
UI Fixture E2E / ui-fixture-e2e (push) Has been cancelled
UI Fixture E2E / fixture-e2e (push) Has been cancelled
UI Story Gate / story-gate (push) Has been cancelled
vault-ci / test (macos-latest) (push) Has been cancelled
vault-ci / test (ubuntu-latest) (push) Has been cancelled
vault-ci / test (windows-latest) (push) Has been cancelled
vault-ci / app-core wiring tests (push) Has been cancelled
verify-patches / verify patches/CHECKSUMS.sha256 (push) Has been cancelled
Voice Benchmark Smoke / voice-emotion fixture smoke (push) Has been cancelled
Voice Benchmark Smoke / voiceagentbench fixture smoke (push) Has been cancelled
Voice Benchmark Smoke / voicebench-quality unit smoke (push) Has been cancelled
Voice Benchmark Smoke / voicebench TypeScript unit (no audio) (push) Has been cancelled
Voice Benchmark Smoke / voice bench smoke summary (push) Has been cancelled
Windows CI / windows ([bun run --cwd packages/app-core test bun run --cwd packages/elizaos test bun run --cwd packages/cloud/shared test], app-and-cli) (push) Has been cancelled
Windows CI / windows ([bun run --cwd packages/scenario-runner test bun run --cwd packages/vault test bun run --cwd packages/security test bun run --cwd plugins/plugin-coding-tools test], framework-packages) (push) Has been cancelled
Windows CI / windows ([bun run --cwd plugins/plugin-elizacloud test bun run --cwd plugins/plugin-discord test bun run --cwd plugins/plugin-anthropic test bun run --cwd plugins/plugin-openai test bun run --cwd plugins/plugin-app-control test bun run --cwd plugins/pl… (push) Has been cancelled
Windows CI / windows ([node packages/scripts/run-turbo.mjs run build --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/agent --concurrency=4 node packages/scripts/run-bash-linux-only.mjs scripts/verify-riscv64-buildpaths.sh node packages/scripts/run… (push) Has been cancelled
Windows CI / windows ([node packages/scripts/run-turbo.mjs run typecheck --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/cloud-shared --concurrency=4 bun run --cwd packages/core test bun run --cwd packages/shared test], core-runtime, 75) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:43:05 +08:00

109 行
3.8 KiB
TypeScript

import { type CreateContainerRequest, ElizaCloudClient } from "@elizaos/cloud-sdk";
import { describe, expect, it } from "vitest";
/**
* De-vendor regression guard (Apps / Product 2).
*
* `plugin-elizacloud` used to carry a VENDORED copy of the cloud SDK under
* `src/utils/cloud-sdk/` whose `CreateContainerRequest` was the OLD snake_case
* shape (`project_name`, `environment_vars`, ...). The server's
* `CreateContainerSchema` is camelCase, so a snake_case body had its
* `environmentVars` (and the `ELIZA_APP_ID` riding inside it — the per-app
* monetization attribution key) silently stripped by the zod parse.
*
* The vendored copy is deleted; the plugin now depends on the canonical
* `@elizaos/cloud-sdk` (already a `workspace:*` dependency, already imported by
* `utils/cloud-api.ts` / `utils/sdk-client.ts`). This test pins the plugin's
* resolved SDK to the camelCase contract: if anyone re-vendors or re-points the
* plugin at a stale snake_case SDK, both the compile-time type usage below and
* the wire assertions fail.
*
* Mirrors `packages/cloud/sdk/src/client.test.ts` ("createContainer wire
* contract") but exercises the type/method exactly as the plugin imports them.
*/
type RecordedRequest = {
url: string;
method: string;
body?: unknown;
};
function createClientRecorder(responseBody: Record<string, unknown> = { success: true }) {
const requests: RecordedRequest[] = [];
const fetchImpl = (async (input, init = {}) => {
requests.push({
url: String(input),
method: init.method ?? "GET",
body:
typeof init.body === "string" && init.body.length > 0 ? JSON.parse(init.body) : undefined,
});
return new Response(JSON.stringify(responseBody), {
status: 200,
headers: { "Content-Type": "application/json" },
});
}) as typeof fetch;
return {
requests,
client: new ElizaCloudClient({
baseUrl: "https://cloud.test",
apiKey: "eliza_test_key",
fetchImpl,
}),
};
}
describe("plugin-elizacloud → @elizaos/cloud-sdk createContainer (de-vendored)", () => {
it("serializes a camelCase body so environmentVars.ELIZA_APP_ID survives the wire", async () => {
const { client, requests } = createClientRecorder({ success: true, data: { id: "c_1" } });
// Typed against the canonical CreateContainerRequest the plugin imports.
// This object ONLY compiles while the SDK type is camelCase — a revert to
// the vendored snake_case shape breaks the build right here.
const request: CreateContainerRequest = {
name: "Monetized App",
image: "ghcr.io/elizaos/example-edad:showcase",
projectName: "monetized-app",
port: 3000,
cpu: 256,
memoryMb: 512,
environmentVars: { ELIZA_APP_ID: "app_abc123", PORT: "3000" },
healthCheckPath: "/health",
};
await client.createContainer(request);
expect(requests[0]).toMatchObject({
url: "https://cloud.test/api/v1/containers",
method: "POST",
});
const body = requests[0]?.body as Record<string, unknown>;
expect(body).toMatchObject({
name: "Monetized App",
image: "ghcr.io/elizaos/example-edad:showcase",
projectName: "monetized-app",
port: 3000,
cpu: 256,
memoryMb: 512,
healthCheckPath: "/health",
});
// The whole point of the casing fix: ELIZA_APP_ID rides through
// environmentVars and reaches the wire. The vendored snake_case copy dropped it.
expect((body.environmentVars as Record<string, string>).ELIZA_APP_ID).toBe("app_abc123");
// Regression guard: none of the legacy snake_case keys the server zod
// silently stripped may appear on the wire.
for (const dropped of [
"project_name",
"environment_vars",
"health_check_path",
"memory",
"desired_count",
]) {
expect(body).not.toHaveProperty(dropped);
}
});
});