Files
Arcrun/registry/components/kbdb_get/component.contract.yaml
T
Leo 711af5dbf2 feat(arcrun): kbdb_get 加 type/source/user_id filter
之前只支援 block_id / page_name,撈「source=km-writer-direct 的 note」這類
跨 page 查詢做不到。Wiki UI 7B.3g 跟 mira_feed_watcher 都要用 client-side
filter 繞,違反「邊用 arcrun 邊修」原則。

擴 contract:保留既有 block_id (mode A) + page_name (mode B),新增純 filter
mode C:type / source / user_id 任意組合。同時 page_name + filter 也允許組合。

驗證:source=km-writer-direct&type=note&limit=5 撈到 leo 5 筆未處理河道貼文。

對應 SDD: arcrun.md 三-B 新零件 checklist + tasks.md 7B.3h(mira_feed_watcher
正在組)。
2026-05-14 14:18:43 +08:00

88 lines
2.9 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
canonical_id: "kbdb_get"
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]
properties:
api_key:
type: string
description: KBDB partner keypk_live_xxx 或 ak_xxx
block_id:
type: string
description: 模式 A — 取單一 block by id(指定後其他 filter 都忽略)
page_name:
type: string
description: 模式 B — 按 page_name 查列表(可疊 type / source / user_id filter
type:
type: string
description: filter — block type(如 wiki-page / wiki-paragraph / triplet / note
source:
type: string
description: filter — block source(如 km-writer-direct / ai-canon-wiki
user_id:
type: string
description: filter — block user_id(如 inkstone_mira_tools
limit:
type: integer
description: 列表模式 limit,預設 50
default: 50
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
blocks:
type: array
description: page_name 模式回多個 blockblock_id 模式回 1 個(仍包成陣列方便下游 foreach)
items:
type: object
count:
type: integer
description: blocks.length
error:
type: string
gherkin_tests:
- scenario: "缺 api_key"
given: '{"page_name":"x"}'
then_contains: '{"success":false'
- scenario: "沒給任何查詢條件"
given: '{"api_key":"pk_live_x"}'
then_contains: '{"success":false'
- scenario: "用 type filter 列 wiki-page"
given: '{"api_key":"ak_x","type":"wiki-page"}'
then_contains: 'blocks'
tags: [data, storage, kbdb, get, query, filter, primitive]
description: "從 KBDB 讀 block。三種模式:(A) block_id 取單一;(B) page_name 取列表(可疊 filter);(C) 純 type / source / user_id filter(不需 page_name)。透過 host function http_request 呼叫 KBDB GET /blocks 或 /blocks/:id。Mira wiki_synthesis / feed watcher / 各 source workflow 都走這條。"
config_example: |
read_schema: # 模式 A — 單一 block by id
api_key: "{{api_key}}"
block_id: "26c51776-d07c-4490-9836-95e554d64549"
read_drafts: # 模式 B — page_name 列表
api_key: "{{api_key}}"
page_name: "{{prev.entity_name}}"
limit: 100
list_unprocessed_raws: # 模式 C — 純 filtermira_feed_watcher 用)
api_key: "{{api_key}}"
source: "km-writer-direct"
type: "note"
user_id: "inkstone_mira_post"
limit: 50