feat(arcrun): mira wiki page with tag filter + accumulated WIP

- landing/app/mira/wiki: tag=mira-wiki list now shows all wiki paragraphs
  (depends on KBDB tag filter exposed in matrix/kbdb commit, separate repo)
- landing: app/mira hub + feed split + various WIP from prior sessions
- registry/components: claude_api / kbdb_create_block / kbdb_get / km_writer /
  platform_crypto / auth_oauth2 contracts + main.go (accumulated)
- .component-builds: pkg-lock updates + index.ts adjustments (WIP)
- .agents/specs/arcrun/frontend-redesign: design notes
- docs/test_credentials, docs/user_requirements/arcrun-landing-page: WIP docs
- cypher-executor: auth-dispatcher / wasi-shim adjustments (WIP)

Includes accumulated work from prior sessions plus the wiki UI tag-filter
update that surfaces the AI-generated wiki paragraphs at /mira/wiki.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-07 16:52:01 +08:00
parent e8fca33f80
commit 519423cb0d
127 changed files with 23909 additions and 264 deletions
+6 -19
View File
@@ -3,12 +3,8 @@
*
* POST / → JSON input → WASM (WASI preview1 stdin/stdout) → JSON output
*
* 方案 A:import cypher-executor/src/lib/wasi-shim.ts 的 `createWasiShim`
* 提供單一 `http_request` host function(fetch → 回 response body 原文)
* 這個 Worker 不需要 crypto / kv_get(無 credential 解密職責)。
*
* Credential 注入路徑:cypher-executor auth-dispatcher 會先 POST 到對應 auth primitive Worker,
* 把 auth headers 合進本 Worker 的 input(例:`_auth_headers`)。
* host function: http_requestfetch → 回 response body 原文)
* 此 Worker 不做 credential 注入,只提供通用 HTTP 能力
*/
import componentWasm from '../component.wasm' assert { type: 'webassembly' };
@@ -57,7 +53,7 @@ async function runWasm(input: unknown): Promise<unknown> {
}
}
} catch {
// 忽略 header parse 錯誤
// ignore header parse errors
}
}
const init: RequestInit = { method, headers };
@@ -65,7 +61,6 @@ async function runWasm(input: unknown): Promise<unknown> {
init.body = body;
}
const res = await fetch(url, init);
// WASM 端直接 json.Unmarshal 回傳內容,這裡回 response body 原文
return await res.text();
},
};
@@ -77,19 +72,11 @@ async function runWasm(input: unknown): Promise<unknown> {
shim.imports,
);
shim.setMemory(instance.exports.memory as WebAssembly.Memory);
const start = (instance.exports._start ?? instance.exports.main) as () => void;
if (typeof start !== 'function') {
throw new Error('WASM missing _start or main export');
}
try {
start();
} catch (e) {
if (!(e instanceof Error && e.message === 'wasm exit: 0')) throw e;
}
await shim.run(instance);
const stdout = shim.getStdout().trim();
const stderr = shim.getStderr().trim();
if (stderr) console.error('[http_request wasm stderr]', stderr);
if (!stdout) throw new Error('WASM component produced no output');
return JSON.parse(stdout);
}