canonical_id: "kbdb_ingest" display_name: "KBDB 寫入" category: "data" version: "v1" wasi_target: "preview1" stability: "floating" runtime_compat: - "cf-workers" - "workerd" - "wazero" constraints: max_size_kb: 2048 max_cold_start_ms: 50 no_network_syscall: false no_filesystem_syscall: true io_model: "stdin_stdout_json" input_schema: type: object required: [api_key, text, user_id] properties: api_key: type: string description: KBDB partner key(pk_live_xxx 或 ak_xxx,後者為 arcrun OAuth 取得) text: type: string description: 要寫入的 block 內容 user_id: type: string description: namespace prefix(partner key 必須對應同一 namespace) source: type: string description: 來源標記(例如 km-writer / rss-tech-news / telegram) page_name: type: string description: 頁面名稱(選填) kbdb_url: type: string description: KBDB API base(選填,預設 https://kbdb.finally.click) default: "https://kbdb.finally.click" output_schema: type: object properties: success: type: boolean data: type: object description: KBDB 回傳原始物件(含 blocks_injected 等) error: type: string description: 錯誤訊息(success=false 時) gherkin_tests: - scenario: "缺少 text" given: '{"api_key":"pk_live_x","user_id":"ns_x"}' then_contains: '{"success":false' - scenario: "缺少 api_key" given: '{"text":"x","user_id":"ns_x"}' then_contains: '{"success":false' - scenario: "正確寫入" given: '{"api_key":"pk_live_xxx","text":"hello","user_id":"inkstone_test","source":"smoke"}' then_contains: '{"success":true' tags: [data, storage, kbdb, ingest, primitive] description: "把單一 block 寫入 KBDB(POST /blocks/ingest),硬編碼 skip_llm=true(不觸發 LLM triplet 抽取)。Mira 等定型貼文場景使用,本零件為 P0 必備。" config_example: | ingest_block: # 節點名稱(可自訂) api_key: "{{secret.kbdb_key}}" text: "{{previous_node.output.content}}" user_id: "inkstone_leo" source: "rss-tech-news"