stitch-sdk-bug-bash

使用真實API金鑰找出Stitch SDK中的錯誤,涵蓋標準功能邊界與棘手情況。

npx skills add https://github.com/google-labs-code/stitch-sdk --skill stitch-sdk-bug-bash

Stitch SDK Bug Bash

This skill provides a framework and instructions for finding bugs in the Stitch SDK using a real API key. It guides you through exploring standard functional edge cases and tricky situations beyond the golden path.


The Mindset: Adversarial Exploration

When using this skill, do not just verify that the SDK works. Try to break it!

  • Pass invalid or boundary parameters.
  • Attempt operations on deleted or stale handles.
  • Simulate unexpected API responses if possible or find edge cases where projection might fail.

Surface Areas to Cover

1. Root & Initialization (Stitch)

  • Zero Config: Verify the singleton works without explicit config if STITCH_API_KEY is present.
  • Invalid Config: Pass an empty API key or invalid base URL to StitchToolClient and verify that the first call fails with a clear authentication or connection error, not a generic noise error.

2. Project Lifecycle (Project)

  • Handle Creation: Verify that stitch.project('invalid-id') does not throw (lazy instantiation) but the first call on it fails safely.
  • Factory vs API: Verify that creating a project handle via the factory doesn't trigger API calls, but methods like project.listScreens() do.

3. Screen Lifecycle (Screen)

  • The Handover: Verify that properties from Project.generate() are correctly populated on the returned Screen instances without a second fetch.
  • Null Safety in Projections: Test tools or scenarios that return empty arrays or missing optional fields. Verify that the SDK handle handles them as undefined or empty arrays rather than crashing on null property access!

4. Design System (DesignSystem)

  • Application: Create a design system, and apply it to a list of screens. Verify that if the list is empty or invalid, the SDK fails cleanly!
  • Handles: Verify that project.designSystem('ds-id') correctly receives the projectId and injects it into calls like ds.apply(...).

Tricky Situations Matrix (Standard Functional Edges)

ScenarioWhat to tryExpected Behavior
Stale HandlesCreate a screen, delete the project, then try to edit the screen handle.Clean API error indicating resource not found, wrapped in StitchError.
Empty PromptsCall project.generate('') or with only whitespace.Safe rejection or clear API error, no crash in codegen.
Projections on nullForce an API call that returns a response without the expected projection field (if you can simulate or find such a tool fallback case).The SDK should use optional chaining (e.g., raw?.prop) and return undefined rather than throwing TypeError: cannot read property of undefined.
Massive arraysPass hundreds of screen IDs to ds.apply().Check if it hits payload limits gracefully or fails with a clear message.

Diagnostic Hygiene

  • Always wrap your test calls in try/catch.
  • Log the error and inspect error.code or error.name to see if it's a StitchError or a generic raw error.
  • If an execution throws a raw TypeError or "cannot read property of undefined", that is a HIGH PRIORITY BUG in the SDK's projection logic!

Test Template: The Full Workflow Bash

Use this template to run a quick end-to-end bash session.

import { stitch } from "@google/stitch-sdk";

async function bash() {
  const apiKey = process.env.STITCH_API_KEY;
  if (!apiKey) throw new Error("STITCH_API_KEY is required");

  console.log("🚀 Starting Bug Bash...");

  let project;
  try {
    // 1. Create a fresh project
    project = await stitch.createProject({
      displayName: `Bug Bash ${new Date().toISOString()}`,
    });
    console.log(`✓ Created Project: ${project.id}`);

    // 2. Try to break generate with empty prompt
    try {
      await project.generate({ prompt: "" });
      console.log("✗ BUG: Generate with empty prompt should have failed!");
    } catch (e) {
      console.log("✓ Generate with empty prompt failed safely as expected.");
    }

    // 3. Create a design system
    const ds = await project.createDesignSystem({
      name: "Bash Style",
      variables: { primaryColor: "#ff0000" },
    });
    console.log(`✓ Created Design System: ${ds.id}`);

    // 4. List screens (should be empty)
    const screens = await project.listScreens();
    console.log(`✓ Listed screens: found ${screens.length}`);

    // 5. Apply design system to empty list
    try {
      await ds.apply({ selectedScreenIds: [] });
      console.log("✓ Applied design system to empty list (handled).");
    } catch (e) {
      console.log("✗ Did applying to empty list fail? Inspect error.");
    }
  } catch (error) {
    console.error("💥 Bash failed with error:", error);
  } finally {
    // 6. Cleanup
    if (project) {
      console.log(`🧹 Cleaning up project ${project.id}...`);
      // Assuming we have a deleteProject binding or we just leave it if not available
      // await project.delete();
    }
  }
}

bash();

來自 google-labs-code 的更多技能

typed-service-contracts
google-labs-code
使用「Spec and Handler」模式建構穩健、型別安全的 TypeScript 服務之架構標準。適用於建置 CLI、函式庫或複雜…
stitch::code-to-design
google-labs-code
將前端程式碼(Vite、React 等)轉換為 Stitch Design,透過鏈式提取靜態 HTML、設計系統及檔案上傳。**務必**使用此…
react-vite-dashboard
google-labs-code
將Stitch設計轉換為生產級React + Vite儀表板,搭配TanStack Query、來自DESIGN.md的可存取token,以及Web3就緒模式(ethers/viem)。
stitch::extract-design-md
google-labs-code
從前端原始碼中直接提取全面的設計系統(DESIGN.md)——支援 React、Vue、Svelte、Angular、純 HTML/CSS 或任何網頁框架。
remotion
google-labs-code
使用 Remotion 從 Stitch 應用程式設計中建立專業的逐步解說影片,包含流暢的轉場與文字疊加。從 Stitch 專案中擷取畫面,並將其編排成 Remotion 影片組合,支援縮放效果、淡入淡出轉場及情境文字疊加。支援模組化元件架構,包含 ScreenSlide 與 WalkthroughComposition 元件,以及互動式熱點與旁白整合等進階功能。產生畫面清單、下載...
ink
google-labs-code
用於 json-render 的 Ink 終端渲染器,可將 JSON 規格轉換為互動式終端 UI。適用於使用 @json-render/ink 從…構建終端 UI 時。
tdd-red-green-refactor
google-labs-code
此技能實作了一個結構化框架,用於AI輔助程式設計,確保每一行程式碼都可驗證、具型別且有意義。
automate-github-issues
google-labs-code
使用並行的 Jules 編碼代理設置自動化的 GitHub 問題分類與解決。