canonical_id: "claude_api"
display_name: "Claude AI 對話"
category: "ai"
version: "v2"
wasi_target: "preview1"
stability: "floating"
runtime_compat:
  - "cf-workers"
  - "workerd"
  - "wazero"
constraints:
  max_size_kb: 2048
  max_cold_start_ms: 80
  no_network_syscall: false
  no_filesystem_syscall: true
  io_model: "stdin_stdout_json"
input_schema:
  type: object
  required: [mira_token, prompt]
  properties:
    mira_token:
      type: string
      description: Mira daemon Bearer token（Hetzner cloud-cto Mira daemon 的 MIRA_TOKEN）
    prompt:
      type: string
      description: 要送給 Mira 的訊息（已內建 Mira 副駕 persona，不需重複設角色）
    mira_url:
      type: string
      description: Mira daemon URL，預設 https://mira.uncle6.me
      default: "https://mira.uncle6.me"
    timeout_ms:
      type: integer
      description: Daemon 協商模式 timeout，預設 25000ms（協商上限）
      default: 25000
output_schema:
  type: object
  properties:
    success:
      type: boolean
    data:
      type: object
      description: 同步完成時的回應
      properties:
        text: { type: string, description: Mira 的回覆文字 }
        task_id: { type: string }
        model: { type: string, description: 「實際 routing 用的模型（haiku / sonnet）」 }
    pending:
      type: boolean
      description: 「true 時表示 daemon 切到非同步模式，task 還在跑，需 polling」
    task_id:
      type: string
      description: pending=true 時用此 id polling
    poll_url:
      type: string
      description: GET 此 URL 查詢任務進度 / 結果
    error:
      type: string
gherkin_tests:
  - scenario: "缺 mira_token"
    given: '{"prompt":"hi"}'
    then_contains: '{"success":false'
  - scenario: "簡短對話 25s 內回完"
    given: '{"mira_token":"...","prompt":"1+1=?"}'
    then_contains: 'success'
tags: [ai, llm, claude, mira, primitive]
description: "呼叫 Mira daemon (Hetzner cloud-cto) 進行 AI 對話。Daemon 內部用 Claude Agent SDK，內建 Mira 副駕 persona，可長執行任務。所有 mira-app 的 AI workflow（自動回覆、wiki 合成、新聞註解）都用此零件。"
config_example: |
  ai_reply:
    mira_token: "{{secret.mira_token}}"
    prompt: |
      用戶 leo 在 mira 河道發了這則貼文：
      「{{trigger.post_content}}」

      請以副駕 AI 的身份留言回應，簡短繁中，務實。
    timeout_ms: 25000
