From d04e34ea3530f7f78a4f9d750cec8e7830b0f0a6 Mon Sep 17 00:00:00 2001 From: richblack Date: Sat, 16 May 2026 15:33:35 +0800 Subject: [PATCH] feat(cypher-executor): implicit telemetry (LI SDD M1.2) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 對應 .agents/specs/llm-interface/ Milestone 1.2。 新增 lib/telemetry.ts: - hashApiKey(): SHA-256 截 16 hex 字元(不可逆,可聚合) - recordTelemetry(): fetch fire-and-forget 寫 KBDB type=agent-telemetry block - 設計:不阻擋主流程,錯誤 console.warn 不 throw - 用 ctx.waitUntil 確保即使主 request 已回,背景仍會跑完 寫入點 3 處: 1. routes/webhooks-named.ts POST /webhooks/named (deploy) → deploy_success 2. routes/webhooks-named.ts POST /webhooks/named/:name/trigger → executeWebhookGraph 帶 ctx + userAgent,內部記 run_success / run_fail 3. routes/validate.ts POST /validate → validation_error (含 schema_failed / edge_node_missing) executeWebhookGraph 簽名擴張:可選 ctx + userAgent,舊 caller (scheduled / trigger_workflow / anonymous webhook) 不傳也 OK(telemetry 仍寫但無 ctx 加持)。 paused (workflow 因 claude_api 等等 callback resume) 算 run_success, 不污染 fail metric。 types.ts: 加 PLATFORM_API_KEY env (可選) + re-export ExecutionContext 不違反「業務邏輯走 WASM」鐵律:telemetry 是 orchestrator 觀測自身的能力, 跟 trigger_workflow / scheduled() 同類。 Co-Authored-By: Claude Opus 4.7 --- cypher-executor/src/.swarm/attestation.db | 0 cypher-executor/src/.swarm/memory.db | Bin 0 -> 4096 bytes cypher-executor/src/.swarm/memory.db-shm | Bin 0 -> 32768 bytes cypher-executor/src/.swarm/memory.db-wal | Bin 0 -> 535632 bytes .../src/actions/webhook-handlers.ts | 25 +++- cypher-executor/src/lib/telemetry.ts | 121 ++++++++++++++++++ cypher-executor/src/routes/validate.ts | 17 +++ cypher-executor/src/routes/webhooks-named.ts | 20 ++- cypher-executor/src/ruvector.db | Bin 0 -> 1589248 bytes cypher-executor/src/types.ts | 8 ++ 10 files changed, 189 insertions(+), 2 deletions(-) create mode 100644 cypher-executor/src/.swarm/attestation.db create mode 100644 cypher-executor/src/.swarm/memory.db create mode 100644 cypher-executor/src/.swarm/memory.db-shm create mode 100644 cypher-executor/src/.swarm/memory.db-wal create mode 100644 cypher-executor/src/lib/telemetry.ts create mode 100644 cypher-executor/src/ruvector.db diff --git a/cypher-executor/src/.swarm/attestation.db b/cypher-executor/src/.swarm/attestation.db new file mode 100644 index 0000000..e69de29 diff --git a/cypher-executor/src/.swarm/memory.db b/cypher-executor/src/.swarm/memory.db new file mode 100644 index 0000000000000000000000000000000000000000..db7a7459cf0d014b0dc2333abb5541c58c2d6ed1 GIT binary patch literal 4096 zcmWFz^vNtqRY=P(%1ta$FlG>7U}9o$P*7lCU|@t|AVoG{WYBBV;st3JAlr;ljiVtj n8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O6ovo*g{}s{ literal 0 HcmV?d00001 diff --git a/cypher-executor/src/.swarm/memory.db-shm b/cypher-executor/src/.swarm/memory.db-shm new file mode 100644 index 0000000000000000000000000000000000000000..f59cf254fe95eee7bcf1f5ec9dbd0f1998e68c9c GIT binary patch literal 32768 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 literal 0 HcmV?d00001 diff --git a/cypher-executor/src/actions/webhook-handlers.ts b/cypher-executor/src/actions/webhook-handlers.ts index e91a127..b4d8809 100644 --- a/cypher-executor/src/actions/webhook-handlers.ts +++ b/cypher-executor/src/actions/webhook-handlers.ts @@ -1,8 +1,9 @@ -import type { Bindings, ExecutionGraph } from '../types'; +import type { Bindings, ExecutionGraph, ExecutionContext } from '../types'; import { ExecutionError } from '../types'; import { GraphExecutor } from '../graph-executor'; import { graphSchema } from '../lib/schemas'; import { createComponentLoader } from '../lib/component-loader'; +import { recordTelemetry } from '../lib/telemetry'; type WebhookRecord = { graph: Record; @@ -29,6 +30,8 @@ export async function executeWebhookGraph( triggerContext: Record, token: string, apiKey?: string, + ctx?: ExecutionContext, // 可選 — 用 waitUntil 把 telemetry 推到背景 + userAgent?: string, // MCP / SDK client 帶過來 ): Promise<{ success: boolean; data?: unknown; error?: string; trace?: unknown; duration_ms: number }> { const parsed = graphSchema.safeParse(graph); if (!parsed.success) { @@ -46,10 +49,30 @@ export async function executeWebhookGraph( env.EXEC_CONTEXT, ); const duration_ms = Date.now() - start; + + // Implicit telemetry:成功 run(含 paused 也算「成功啟動」由 trigger_workflow 那層分類) + recordTelemetry(env, apiKey, { + event_type: 'run_success', + workflow_name: token, + duration_ms, + agent_user_agent: userAgent, + }, ctx); + return { success: true, data: result.data, duration_ms }; } catch (err) { const duration_ms = Date.now() - start; const errMsg = err instanceof Error ? err.message : String(err); + const isPaused = /workflow paused/i.test(errMsg); + + // Implicit telemetry:paused 算 run_success;真錯才 run_fail + recordTelemetry(env, apiKey, { + event_type: isPaused ? 'run_success' : 'run_fail', + workflow_name: token, + error_code: isPaused ? 'paused_awaiting_resume' : 'execution_error', + duration_ms, + agent_user_agent: userAgent, + }, ctx); + if (err instanceof ExecutionError) { const traceFormatted = err.trace.map(s => ({ node: s.nodeId, diff --git a/cypher-executor/src/lib/telemetry.ts b/cypher-executor/src/lib/telemetry.ts new file mode 100644 index 0000000..13b7e64 --- /dev/null +++ b/cypher-executor/src/lib/telemetry.ts @@ -0,0 +1,121 @@ +/** + * Implicit telemetry — 對應 SDD .agents/specs/llm-interface/ M1.2 + * + * 每次 deploy / run / validate 失敗,cypher-executor 自動寫 KBDB block + * type=agent-telemetry,含 event_type / workflow_name / error_code / + * duration_ms / api_key_hash / agent_user_agent。 + * + * 隱私:api_key SHA-256 截 16 字元(不可逆,可聚合),workflow 內容不 log。 + * + * 設計:不阻擋主流程,fetch fire-and-forget;錯誤只 console.warn 不 throw。 + * + * 注意:本 module 屬 orchestrator 自身能力(觀測自己),不違反「業務邏輯走 WASM」鐵律。 + * 跟 trigger_workflow / scheduled() 同類,是 cypher-executor 自我管理的一部分。 + */ + +import type { Bindings, ExecutionContext } from '../types'; + +export type TelemetryEvent = + | 'deploy_success' + | 'deploy_fail' + | 'run_success' + | 'run_fail' + | 'validation_error' + | 'mcp_tool_call'; + +export interface TelemetryRecord { + event_type: TelemetryEvent; + workflow_name?: string; + component_id?: string; + error_code?: string; + duration_ms: number; + api_key_hash: string; + agent_user_agent?: string; +} + +/** + * api_key → SHA-256 hex 截前 16 字元 + * 不可逆,可用來聚合(同一用戶不同 event 統計),不會洩漏原 key + */ +export async function hashApiKey(apiKey: string): Promise { + if (!apiKey) return 'anon'; + const encoder = new TextEncoder(); + const data = encoder.encode(apiKey); + const hashBuffer = await crypto.subtle.digest('SHA-256', data); + const hashArray = Array.from(new Uint8Array(hashBuffer)); + return hashArray + .slice(0, 8) // 8 bytes = 16 hex chars + .map(b => b.toString(16).padStart(2, '0')) + .join(''); +} + +/** + * KBDB upsert URL(內部走 workers.dev 避同 zone 自循環) + * 對應 .claude/rules/03-component-architecture.md + */ +function kbdbCreateBlockUrl(env: Bindings): string { + const subdomain = env.WORKER_SUBDOMAIN || 'uncle6-me'; + return `https://arcrun-kbdb-create-block.${subdomain}.workers.dev`; +} + +/** + * 寫一筆 telemetry block 到 KBDB。fire-and-forget。 + * + * 寫不進去也不擋主流程 —— 平台自己的觀測絕不能讓 user-facing 流程失敗。 + * + * 用 ctx.waitUntil 確保即使主 request 已回,背景仍會跑完。 + */ +export function recordTelemetry( + env: Bindings, + apiKey: string | undefined, + record: Omit, + ctx?: ExecutionContext, +): void { + const promise = (async () => { + try { + const api_key_hash = await hashApiKey(apiKey ?? ''); + // platform telemetry 用一個系統 ak(讀 env.PLATFORM_API_KEY),所有 telemetry + // 都聚集在 platform user_id 下,避免污染用戶自己的 KBDB namespace + const platformKey = env.PLATFORM_API_KEY || apiKey || ''; + if (!platformKey) { + // 沒 platform key + 沒用戶 key → 無處可寫,skip + console.warn('[telemetry] no api_key, skipping'); + return; + } + + const body = { + api_key: platformKey, + type: 'agent-telemetry', + source: 'cypher-executor', + user_id: 'platform_telemetry', + content: JSON.stringify(record), + metadata_json: JSON.stringify({ ...record, api_key_hash }), + tags_json: JSON.stringify([ + 'agent-telemetry', + `event:${record.event_type}`, + ]), + }; + + const res = await fetch(kbdbCreateBlockUrl(env), { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(body), + }); + + if (!res.ok) { + console.warn( + '[telemetry] write failed', + res.status, + await res.text().catch(() => 'no body'), + ); + } + } catch (e) { + console.warn('[telemetry] exception', e); + } + })(); + + if (ctx?.waitUntil) { + ctx.waitUntil(promise); + } + // 沒 ctx.waitUntil 的情況(直接從 host function call)也讓 promise 自己跑,可能被 cancel 也接受 +} diff --git a/cypher-executor/src/routes/validate.ts b/cypher-executor/src/routes/validate.ts index 8456340..752b2c6 100644 --- a/cypher-executor/src/routes/validate.ts +++ b/cypher-executor/src/routes/validate.ts @@ -1,14 +1,25 @@ import { Hono } from 'hono'; import type { Bindings } from '../types'; import { graphSchema } from '../lib/schemas'; +import { recordTelemetry } from '../lib/telemetry'; export const validateRouter = new Hono<{ Bindings: Bindings }>(); // POST /validate — 驗證圖定義(不執行) validateRouter.post('/validate', async (c) => { + const start = Date.now(); + const apiKey = c.req.header('X-Arcrun-API-Key'); + const userAgent = c.req.header('User-Agent') ?? undefined; + const body = await c.req.json(); const parsed = graphSchema.safeParse(body); if (!parsed.success) { + recordTelemetry(c.env, apiKey, { + event_type: 'validation_error', + error_code: 'schema_failed', + duration_ms: Date.now() - start, + agent_user_agent: userAgent, + }, c.executionCtx); return c.json({ valid: false, errors: parsed.error.issues }, 400); } @@ -16,6 +27,12 @@ validateRouter.post('/validate', async (c) => { const invalidEdges = parsed.data.edges.filter(e => !nodeIds.has(e.from) || !nodeIds.has(e.to)); if (invalidEdges.length > 0) { + recordTelemetry(c.env, apiKey, { + event_type: 'validation_error', + error_code: 'edge_node_missing', + duration_ms: Date.now() - start, + agent_user_agent: userAgent, + }, c.executionCtx); return c.json({ valid: false, errors: invalidEdges.map(e => `邊 ${e.from} → ${e.to} 指向不存在的節點`), diff --git a/cypher-executor/src/routes/webhooks-named.ts b/cypher-executor/src/routes/webhooks-named.ts index e949999..c66776b 100644 --- a/cypher-executor/src/routes/webhooks-named.ts +++ b/cypher-executor/src/routes/webhooks-named.ts @@ -27,6 +27,7 @@ import { executeWebhookGraph } from '../actions/webhook-handlers'; import { writeExecutionVerdict } from '../actions/execution-logger'; import type { GraphNode } from '../types'; import { extractCronExpr } from '../lib/cron-match'; +import { recordTelemetry } from '../lib/telemetry'; export const webhooksNamedRouter = new Hono<{ Bindings: Bindings }>(); @@ -85,6 +86,7 @@ webhooksNamedRouter.post('/webhooks/named', async (c) => { cron_expr: cronExpr ?? undefined, }; + const start = Date.now(); await c.env.WEBHOOKS.put(kvKey(apiKey, name), JSON.stringify(record)); // 維護 cron index:有 cron_expr 就寫 / 沒有就刪除(避免 push 改 yaml 拿掉 cron 後殘留) @@ -94,6 +96,14 @@ webhooksNamedRouter.post('/webhooks/named', async (c) => { await c.env.WEBHOOKS.delete(cronIndexKey(apiKey, name)); } + // Implicit telemetry (LI M1.2) + recordTelemetry(c.env, apiKey, { + event_type: 'deploy_success', + workflow_name: name, + duration_ms: Date.now() - start, + agent_user_agent: c.req.header('User-Agent') ?? undefined, + }, c.executionCtx); + const baseUrl = new URL(c.req.url).origin; return c.json({ name, @@ -133,7 +143,15 @@ webhooksNamedRouter.post('/webhooks/named/:name/trigger', async (c) => { // 無 body 時使用空 context } - const result = await executeWebhookGraph(c.env, record.graph, triggerContext, name, apiKey); + const result = await executeWebhookGraph( + c.env, + record.graph, + triggerContext, + name, + apiKey, + c.executionCtx, + c.req.header('User-Agent') ?? undefined, + ); const graph = record.graph as { id?: string; nodes?: unknown[] }; const workflowId = graph.id ?? name; diff --git a/cypher-executor/src/ruvector.db b/cypher-executor/src/ruvector.db new file mode 100644 index 0000000000000000000000000000000000000000..cbf321b9e37e562d25c787c71b237feae84e4328 GIT binary patch literal 1589248 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