From 8e10f1d83ec5484d703854b8d5a841b278fd0084 Mon Sep 17 00:00:00 2001 From: uncle6me-web Date: Wed, 12 Aug 2026 09:50:50 +0800 Subject: [PATCH] =?UTF-8?q?chore(worker-builds):=20=E9=87=8D=E7=B7=A8?= =?UTF-8?q?=E5=AE=98=E6=96=B9=E6=88=90=E5=93=81=E2=80=94=E2=80=94kbdb?= =?UTF-8?q?=EF=BC=8Fcypher-executor=20=E7=9A=84=E4=BF=AE=E6=B3=95=E4=B9=8B?= =?UTF-8?q?=E5=89=8D=E5=8F=AA=E5=9C=A8=E6=BA=90=E7=A2=BC=E8=A3=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 為什麼要有這一筆:`.worker-builds/` 是**出貨與安裝真正拿去部署的執行檔**, 而它記的 source_commit 在剛併完 #85/#88 之後對不上源碼: arcrun-cypher-executor 成品記的 797e7f7 源碼已經是 525faaf ⚠️ arcrun-kbdb 成品記的 a7e23ba 源碼已經是 3eb8b31 ⚠️ ⇒ 這時候去出貨或 `init`,送出去的是**舊的執行檔**,測試全綠也沒用 (wiki/mistakes.md「修的東西在執行檔裡,改完源碼+測試綠 ≠ 送到用戶手上」)。 🔴 build-bundles.mjs 的「落後閘」抓不到這個:它比的是「.worker-builds 這個目錄有沒有 落後 main 的 commit」,不是「成品記的 source_commit 有沒有落後那顆 worker 的源碼」。 這次是人工比對才發現的。修這道閘另開票。 重編後:cypher-executor source=525faaf、kbdb source=3eb8b31,兩顆的新程式碼都在產物裡 (kbdb 找得到 embed_backfill_usage/backfillEntryLibraryTags,cypher 找得到 builtin 那條路)。 誠實標記:另外三顆(code/http_request/mcp)源碼沒動,位元組卻變了——是 esbuild 版本漂移換了它產生的 helper(`__esm` 多了一段 try/catch)。這正是 #77 記的 「build 不可跨機器重現」那個結構性斷點的實例。 --- .worker-builds/arcrun-code/worker.mjs | 34 +- .../arcrun-cypher-executor/worker.mjs | 71 +++- .worker-builds/arcrun-http-request/worker.mjs | 8 +- .worker-builds/arcrun-kbdb/worker.mjs | 393 +++++++++++++++++- .worker-builds/arcrun-mcp/worker.mjs | 71 ++-- .worker-builds/manifest.json | 28 +- 6 files changed, 500 insertions(+), 105 deletions(-) diff --git a/.worker-builds/arcrun-code/worker.mjs b/.worker-builds/arcrun-code/worker.mjs index 4096fc7..44bb639 100644 --- a/.worker-builds/arcrun-code/worker.mjs +++ b/.worker-builds/arcrun-code/worker.mjs @@ -1,7 +1,12 @@ var __defProp = Object.defineProperty; var __getOwnPropNames = Object.getOwnPropertyNames; -var __esm = (fn, res) => function __init() { - return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; +var __esm = (fn, res, err2) => function __init() { + if (err2) throw err2[0]; + try { + return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; + } catch (e) { + throw err2 = [e], e; + } }; var __export = (target, all) => { for (var name in all) @@ -102,7 +107,7 @@ function applyBaseRuntimeOptions(runtime, options) { function applyModuleEvalRuntimeOptions(runtime, options) { options.moduleLoader && runtime.setModuleLoader(options.moduleLoader), options.shouldInterrupt && runtime.setInterruptHandler(options.shouldInterrupt), options.memoryLimitBytes !== void 0 && runtime.setMemoryLimit(options.memoryLimitBytes), options.maxStackSizeBytes !== void 0 && runtime.setMaxStackSize(options.maxStackSizeBytes); } -var __defProp2, __export2, QTS_DEBUG, errors_exports, QuickJSUnwrapError, QuickJSWrongOwner, QuickJSUseAfterFree, QuickJSNotImplemented, QuickJSAsyncifyError, QuickJSAsyncifySuspended, QuickJSMemoryLeakDetected, QuickJSEmscriptenModuleError, QuickJSUnknownIntrinsic, QuickJSPromisePending, QuickJSEmptyGetOwnPropertyNames, AwaitYield, UsingDisposable, SymbolDispose, prototypeAsAny, Lifetime, StaticLifetime, WeakLifetime, Scope, AbstractDisposableResult, DisposableSuccess, DisposableFail, DisposableResult, QuickJSDeferredPromise, ModuleMemory, UnstableSymbol, DefaultIntrinsics, QuickJSIterator, ContextMemory, QuickJSContext, QuickJSRuntime, QuickJSEmscriptenModuleCallbacks, QuickJSModuleCallbacks, QuickJSWASMModule; +var __defProp2, __export2, QTS_DEBUG, errors_exports, QuickJSUnwrapError, QuickJSWrongOwner, QuickJSUseAfterFree, QuickJSNotImplemented, QuickJSAsyncifyError, QuickJSAsyncifySuspended, QuickJSMemoryLeakDetected, QuickJSEmscriptenModuleError, QuickJSUnknownIntrinsic, QuickJSPromisePending, QuickJSEmptyGetOwnPropertyNames, AwaitYield, UsingDisposable, SymbolDispose, prototypeAsAny, Lifetime, StaticLifetime, WeakLifetime, Scope, AbstractDisposableResult, DisposableSuccess, DisposableFail, DisposableResult, QuickJSDeferredPromise, ModuleMemory, DefaultIntrinsics, QuickJSIterator, ContextMemory, QuickJSContext, QuickJSRuntime, QuickJSEmscriptenModuleCallbacks, QuickJSModuleCallbacks, QuickJSWASMModule; var init_chunk_JTKJZQYV = __esm({ "registry/components/code/node_modules/quickjs-emscripten-core/dist/chunk-JTKJZQYV.mjs"() { init_dist(); @@ -190,7 +195,7 @@ var init_chunk_JTKJZQYV = __esm({ return this.dispose(); } }; - SymbolDispose = Symbol.dispose ?? Symbol.for("Symbol.dispose"); + SymbolDispose = Symbol.dispose ?? /* @__PURE__ */ Symbol.for("Symbol.dispose"); prototypeAsAny = UsingDisposable.prototype; prototypeAsAny[SymbolDispose] || (prototypeAsAny[SymbolDispose] = function() { return this.dispose(); @@ -409,7 +414,6 @@ Lifetime used`) : new QuickJSUseAfterFree("Lifetime not alive"); return this.module._free(ptr), str; } }; - UnstableSymbol = Symbol("Unstable"); DefaultIntrinsics = Object.freeze({ BaseObjects: true, Date: true, Eval: true, StringNormalize: true, RegExp: true, JSON: true, Proxy: true, MapSet: true, TypedArrays: true, Promise: true }); QuickJSIterator = class extends UsingDisposable { constructor(handle, context) { @@ -773,7 +777,7 @@ ${cause.stack}Host: ${hostStack}`), Object.assign(exception, rest), exception; } return result.value; } - [Symbol.for("nodejs.util.inspect.custom")]() { + [/* @__PURE__ */ Symbol.for("nodejs.util.inspect.custom")]() { return this.alive ? `${this.constructor.name} { ctx: ${this.ctx.value} rt: ${this.rt.value} }` : `${this.constructor.name} { disposed }`; } getFunction(fn_id) { @@ -909,7 +913,7 @@ ${cause.stack}Host: ${hostStack}`), Object.assign(exception, rest), exception; debugLog(...msg) { this._debugMode && console.log("quickjs-emscripten:", ...msg); } - [Symbol.for("nodejs.util.inspect.custom")]() { + [/* @__PURE__ */ Symbol.for("nodejs.util.inspect.custom")]() { return this.alive ? `${this.constructor.name} { rt: ${this.rt.value} }` : `${this.constructor.name} { disposed }`; } getSystemContext() { @@ -1339,10 +1343,10 @@ async function QuickJSRaw(moduleArg = {}) { x ? (0 === h && (h = ra()), g[m] = x(e[m])) : g[m] = e[m]; } b = a(...g); - return b = function(k) { + return b = (function(k) { 0 !== h && sa(h); return "string" === d ? R(k) : "boolean" === d ? !!k : k; - }(b); + })(b); }; c.wasmMemory ? r = c.wasmMemory : r = new WebAssembly.Memory({ initial: (c.INITIAL_MEMORY || 16777216) / 65536, maximum: 32768 }); K(); @@ -1464,7 +1468,7 @@ async function QuickJSRaw(moduleArg = {}) { }, t: function(a, d) { c.callbacks.freeHostRef(void 0, a, d); } }, Z; - Z = await async function() { + Z = await (async function() { function a(b) { b = Z = b.exports; c._malloc = b.v; @@ -1551,7 +1555,7 @@ async function QuickJSRaw(moduleArg = {}) { }); M ??= c.locateFile ? c.locateFile ? c.locateFile("emscripten-module.wasm", u) : u + "emscripten-module.wasm" : new URL("emscripten-module.wasm", import.meta.url).href; return a((await ea(d)).instance); - }(); + })(); (function() { function a() { c.calledRun = true; @@ -3034,7 +3038,7 @@ var Hono = class _Hono { var emptyParam = []; function match(method, path) { const matchers = this.buildAllMatchers(); - const match2 = (method2, path2) => { + const match2 = ((method2, path2) => { const matcher = matchers[method2] || matchers[METHOD_NAME_ALL]; const staticMatch = matcher[2][path2]; if (staticMatch) { @@ -3046,7 +3050,7 @@ function match(method, path) { } const index = match3.indexOf("", 1); return [matcher[1][index], match3]; - }; + }); this.match = match2; return match2(method, path); } @@ -4008,7 +4012,7 @@ app.post("/", async (c) => { ); } }); -var code_default = app; +var index_default = app; export { - code_default as default + index_default as default }; diff --git a/.worker-builds/arcrun-cypher-executor/worker.mjs b/.worker-builds/arcrun-cypher-executor/worker.mjs index 2b2877c..0eb628b 100644 --- a/.worker-builds/arcrun-cypher-executor/worker.mjs +++ b/.worker-builds/arcrun-cypher-executor/worker.mjs @@ -1,7 +1,12 @@ var __defProp = Object.defineProperty; var __getOwnPropNames = Object.getOwnPropertyNames; -var __esm = (fn, res) => function __init() { - return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; +var __esm = (fn, res, err) => function __init() { + if (err) throw err[0]; + try { + return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; + } catch (e) { + throw err = [e], e; + } }; var __export = (target, all) => { for (var name in all) @@ -1501,7 +1506,7 @@ var init_hono_base = __esm({ // cypher-executor/node_modules/.pnpm/hono@4.12.10/node_modules/hono/dist/router/reg-exp-router/matcher.js function match(method, path) { const matchers = this.buildAllMatchers(); - const match2 = (method2, path2) => { + const match2 = ((method2, path2) => { const matcher = matchers[method2] || matchers[METHOD_NAME_ALL]; const staticMatch = matcher[2][path2]; if (staticMatch) { @@ -1513,7 +1518,7 @@ function match(method, path) { } const index = match3.indexOf("", 1); return [matcher[1][index], match3]; - }; + }); this.match = match2; return match2(method, path); } @@ -3022,7 +3027,7 @@ async function readBodyOnce(res) { return text; } } -var WASM_HTTP_RUNNER_IDS, LOGIC_BINDING_MAP; +var WASM_HTTP_RUNNER_IDS, LOGIC_BINDING_MAP, RUNTIME_NATIVE_COMPONENT_IDS; var init_component_loader = __esm({ "cypher-executor/src/lib/component-loader.ts"() { "use strict"; @@ -3065,6 +3070,12 @@ var init_component_loader = __esm({ // ai_transform_compile / ai_transform_run 已刪除(2026-05-29): // Arcrun 是 AI 呼叫的工具,工作流不該內嵌 AI 節點回頭呼叫 AI(n8n 才需要,因它沒大腦)。 }; + RUNTIME_NATIVE_COMPONENT_IDS = /* @__PURE__ */ new Set([ + "trigger_workflow", + ...BUILTIN_COMPONENTS.keys(), + ...Object.keys(LOGIC_BINDING_MAP), + ...WASM_HTTP_RUNNER_IDS + ]); } }); @@ -3201,6 +3212,20 @@ var init_kbdb_proxy = __esm({ const res = await fetch(`${base}/records/${encodeURIComponent(c.req.param("recordId"))}`, { headers }); return new Response(res.body, { status: res.status, headers: { "Content-Type": "application/json" } }); }); + kbdbProxyRouter.patch("/kbdb/records/:recordId", async (c) => { + if (!tenant(c)) return c.json(NEED_KEY, 401); + const body = await c.req.json().catch(() => null); + if (!body || typeof body.values !== "object" || body.values === null) { + return c.json({ error: "values \u5FC5\u586B\uFF08{slot\u540D: \u5167\u5BB9}\uFF09" }, 400); + } + const { base, headers } = kbdbBase(c.env); + const res = await fetch(`${base}/records/${encodeURIComponent(c.req.param("recordId"))}`, { + method: "PATCH", + headers, + body: JSON.stringify({ values: body.values }) + }); + return new Response(res.body, { status: res.status, headers: { "Content-Type": "application/json" } }); + }); kbdbProxyRouter.get("/kbdb/search", async (c) => { const owner = tenant(c); if (!owner) return c.json(NEED_KEY, 401); @@ -7355,7 +7380,7 @@ var init_lib = __esm({ ...processCreateParams(params) }); }; - BRAND = Symbol("zod_brand"); + BRAND = /* @__PURE__ */ Symbol("zod_brand"); ZodBranded = class extends ZodType { _parse(input) { const { ctx } = this._processInputParams(input); @@ -7529,14 +7554,14 @@ var init_lib = __esm({ onumber = () => numberType().optional(); oboolean = () => booleanType().optional(); coerce = { - string: (arg) => ZodString.create({ ...arg, coerce: true }), - number: (arg) => ZodNumber.create({ ...arg, coerce: true }), - boolean: (arg) => ZodBoolean.create({ + string: ((arg) => ZodString.create({ ...arg, coerce: true })), + number: ((arg) => ZodNumber.create({ ...arg, coerce: true })), + boolean: ((arg) => ZodBoolean.create({ ...arg, coerce: true - }), - bigint: (arg) => ZodBigInt.create({ ...arg, coerce: true }), - date: (arg) => ZodDate.create({ ...arg, coerce: true }) + })), + bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })), + date: ((arg) => ZodDate.create({ ...arg, coerce: true })) }; NEVER = INVALID; z = /* @__PURE__ */ Object.freeze({ @@ -7757,6 +7782,7 @@ var init_recipe_loader = __esm({ super(message); this.recipe = recipe; } + recipe; }; } }); @@ -8763,7 +8789,7 @@ function recordRecipeStats(env, recipeKeys, ok, at, ctx) { ) ).then(() => void 0); if (ctx?.waitUntil) ctx.waitUntil(promise); - else ; + else void promise; } function generateToken() { const tokenBytes = crypto.getRandomValues(new Uint8Array(16)); @@ -8805,7 +8831,7 @@ async function executeWebhookGraph(env, graph, triggerContext, token, apiKey, ct result.trace ); if (ctx?.waitUntil) ctx.waitUntil(statsPromise); - else ; + else void statsPromise; } return { success: true, data: result.data, duration_ms }; } catch (err) { @@ -8829,7 +8855,7 @@ async function executeWebhookGraph(env, graph, triggerContext, token, apiKey, ct err.trace ); if (ctx?.waitUntil) ctx.waitUntil(statsPromise); - else ; + else void statsPromise; } if (err instanceof ExecutionError) { const traceFormatted = err.trace.map((s) => ({ @@ -9294,6 +9320,7 @@ function extractTarget(input) { return typeof raw2 === "string" ? raw2 : JSON.stringify(raw2); } async function writeExecutionVerdict(env, workflowId, nodes, verdict, durationMs, message, input, apiKey) { + void nodes; try { const { base, headers } = kbdbBase(env); await fetch(`${base}/execution-log/record`, { @@ -9485,6 +9512,16 @@ async function searchNodes(parsed, config, env, mode = "discover", target) { nodeResults[nodeName] = { status: "found", componentId, type: role }; continue; } + if (wantComponents && RUNTIME_NATIVE_COMPONENT_IDS.has(componentId)) { + nodeResults[nodeName] = { + status: "found", + componentId, + type: role, + source: "builtin", + branch_hint: branchHintFor(componentId) + }; + continue; + } if (catalog.status === "unreachable") { nodeResults[nodeName] = { status: "unknown", componentId, type: role }; continue; @@ -15257,10 +15294,10 @@ app.route("/", consoleAuthRouter); app.route("/", consoleDashboardRouter); app.route("/", portalRouter); app.route("/", portalDataRouter); -var src_default = { +var index_default = { fetch: app.fetch, scheduled: handleScheduled }; export { - src_default as default + index_default as default }; diff --git a/.worker-builds/arcrun-http-request/worker.mjs b/.worker-builds/arcrun-http-request/worker.mjs index 0ab4b10..4b70fad 100644 --- a/.worker-builds/arcrun-http-request/worker.mjs +++ b/.worker-builds/arcrun-http-request/worker.mjs @@ -1427,7 +1427,7 @@ var Hono = class _Hono { var emptyParam = []; function match(method, path) { const matchers = this.buildAllMatchers(); - const match2 = (method2, path2) => { + const match2 = ((method2, path2) => { const matcher = matchers[method2] || matchers[METHOD_NAME_ALL]; const staticMatch = matcher[2][path2]; if (staticMatch) { @@ -1439,7 +1439,7 @@ function match(method, path) { } const index = match3.indexOf("", 1); return [matcher[1][index], match3]; - }; + }); this.match = match2; return match2(method, path); } @@ -2522,7 +2522,7 @@ app.post("/", async (c) => { ); } }); -var src_default = app; +var index_default = app; async function runWasm(input) { const hostFunctions = { http_request: async (url, method, headersJson, body) => { @@ -2568,5 +2568,5 @@ async function runWasm(input) { return JSON.parse(stdout); } export { - src_default as default + index_default as default }; diff --git a/.worker-builds/arcrun-kbdb/worker.mjs b/.worker-builds/arcrun-kbdb/worker.mjs index 0339fb5..6cee6a1 100644 --- a/.worker-builds/arcrun-kbdb/worker.mjs +++ b/.worker-builds/arcrun-kbdb/worker.mjs @@ -1444,7 +1444,7 @@ var Hono = class _Hono { var emptyParam = []; function match(method, path) { const matchers = this.buildAllMatchers(); - const match2 = (method2, path2) => { + const match2 = ((method2, path2) => { const matcher = matchers[method2] || matchers[METHOD_NAME_ALL]; const staticMatch = matcher[2][path2]; if (staticMatch) { @@ -1456,7 +1456,7 @@ function match(method, path) { } const index = match3.indexOf("", 1); return [matcher[1][index], match3]; - }; + }); this.match = match2; return match2(method, path); } @@ -2408,6 +2408,57 @@ async function searchEntries(db, q, owner_id, entry_type, limit = 50, library, s return applyRelativeCut(res.results ?? []); } +// kbdb/src/actions/maintenance-quota.ts +var DEFAULT_MAINTENANCE_DAILY_WRITE_LIMIT = 2e4; +function maintenanceDailyLimit(env) { + const raw2 = env.KBDB_MAINTENANCE_DAILY_WRITE_LIMIT; + const n = raw2 ? parseInt(raw2, 10) : NaN; + return Number.isFinite(n) && n > 0 ? n : DEFAULT_MAINTENANCE_DAILY_WRITE_LIMIT; +} +function utcDay() { + return (/* @__PURE__ */ new Date()).toISOString().slice(0, 10); +} +function maintenanceUsageId() { + return `kbdb-maintenance-usage:${utcDay()}`; +} +async function getMaintenanceUsageToday(db) { + const row = await db.prepare("SELECT metadata_json FROM entries WHERE id = ?").bind(maintenanceUsageId()).first(); + if (!row) return 0; + try { + const parsed = row.metadata_json ? JSON.parse(row.metadata_json) : {}; + return Number(parsed.writes) || 0; + } catch { + return 0; + } +} +async function addMaintenanceUsage(db, by) { + if (by <= 0) return; + const id = maintenanceUsageId(); + const existing = await db.prepare("SELECT metadata_json FROM entries WHERE id = ?").bind(id).first(); + let prev = 0; + if (existing) { + try { + const parsed = existing.metadata_json ? JSON.parse(existing.metadata_json) : {}; + prev = Number(parsed.writes) || 0; + } catch { + prev = 0; + } + await db.prepare("UPDATE entries SET metadata_json = ?, updated_at = unixepoch() WHERE id = ?").bind(JSON.stringify({ day: utcDay(), writes: prev + by }), id).run(); + } else { + await db.prepare(`INSERT INTO entries (id, entry_type, metadata_json) VALUES (?, 'kbdb_maintenance_usage', ?)`).bind(id, JSON.stringify({ day: utcDay(), writes: by })).run(); + } +} +async function maintenanceBudgetToday(env, db) { + const limit = maintenanceDailyLimit(env); + let used = 0; + try { + used = await getMaintenanceUsageToday(db); + } catch { + used = 0; + } + return { limit, used, remaining: Math.max(0, limit - used) }; +} + // kbdb/src/embed.ts var DEFAULT_EMBED_MODEL = "@cf/baai/bge-m3"; var MIN_SCORE_ABS_FLOOR = 0.45; @@ -2449,7 +2500,7 @@ async function embedOnWrite(env, entry) { } } ]); - await env.DB.prepare("UPDATE entries SET is_embedded = 1 WHERE id = ?").bind(entry.id).run(); + await env.DB.prepare("UPDATE entries SET is_embedded = 1, content_hash = ? WHERE id = ?").bind(embedModel(env), entry.id).run(); return true; } function isEmbeddable(entry) { @@ -2476,12 +2527,47 @@ function parseMeta(json) { } } var BACKFILL_PREDICATE = "is_embedded = 0 AND content IS NOT NULL AND content <> '' AND json_extract(metadata_json, '$.embed') = 1"; -async function backfillEmbeddings(env, opts = {}) { - if (!embedEnabled(env)) return { enabled: false, processed: 0, skipped: 0, remaining: 0, scanned: 0 }; - const limit = Math.min(Math.max(opts.limit ?? 25, 1), 100); - const offset = Math.max(opts.offset ?? 0, 0); - const basePredicate = opts.reindex ? "content IS NOT NULL AND content <> '' AND json_extract(metadata_json, '$.embed') = 1" : BACKFILL_PREDICATE; - const conds = [basePredicate, "COALESCE(json_extract(metadata_json, '$.status'), '') != 'deprecated'"]; +var DEFAULT_BACKFILL_DAILY_LIMIT = 1800; +function backfillDailyLimit(env) { + const raw2 = env.EMBED_BACKFILL_DAILY_LIMIT; + const n = raw2 ? parseInt(raw2, 10) : NaN; + return Number.isFinite(n) && n > 0 ? n : DEFAULT_BACKFILL_DAILY_LIMIT; +} +function utcDay2() { + return (/* @__PURE__ */ new Date()).toISOString().slice(0, 10); +} +function backfillUsageId() { + return `embed-backfill-usage:${utcDay2()}`; +} +async function getBackfillUsageToday(db) { + const row = await db.prepare("SELECT metadata_json FROM entries WHERE id = ?").bind(backfillUsageId()).first(); + if (!row) return 0; + try { + const parsed = row.metadata_json ? JSON.parse(row.metadata_json) : {}; + return Number(parsed.embedded) || 0; + } catch { + return 0; + } +} +async function addBackfillUsage(db, by) { + if (by <= 0) return; + const id = backfillUsageId(); + const existing = await db.prepare("SELECT metadata_json FROM entries WHERE id = ?").bind(id).first(); + let prev = 0; + if (existing) { + try { + const parsed = existing.metadata_json ? JSON.parse(existing.metadata_json) : {}; + prev = Number(parsed.embedded) || 0; + } catch { + prev = 0; + } + await db.prepare("UPDATE entries SET metadata_json = ?, updated_at = unixepoch() WHERE id = ?").bind(JSON.stringify({ day: utcDay2(), embedded: prev + by }), id).run(); + } else { + await db.prepare(`INSERT INTO entries (id, entry_type, metadata_json) VALUES (?, 'embed_backfill_usage', ?)`).bind(id, JSON.stringify({ day: utcDay2(), embedded: by })).run(); + } +} +function selectionCriteriaPredicate(opts) { + const conds = []; const params = []; if (opts.owner_id) { conds.push("owner_id = ?"); @@ -2491,12 +2577,55 @@ async function backfillEmbeddings(env, opts = {}) { conds.push("json_extract(metadata_json, '$.source') = ?"); params.push(opts.source); } + if (opts.library) { + conds.push("COALESCE(NULLIF(json_extract(metadata_json, '$.library'), ''), 'general') = ?"); + params.push(opts.library); + } + if (typeof opts.since === "number") { + conds.push("created_at >= ?"); + params.push(opts.since); + } + if (typeof opts.until === "number") { + conds.push("created_at < ?"); + params.push(opts.until); + } + return { conds, params }; +} +async function backfillEmbeddings(env, opts = {}) { + if (!embedEnabled(env)) { + return { + enabled: false, + processed: 0, + skipped: 0, + remaining: 0, + scanned: 0, + quota_limit: 0, + quota_used_today: 0, + quota_exceeded: false + }; + } + const limit = Math.min(Math.max(opts.limit ?? 25, 1), 100); + const offset = Math.max(opts.offset ?? 0, 0); + const basePredicate = opts.reindex ? "content IS NOT NULL AND content <> '' AND json_extract(metadata_json, '$.embed') = 1" : BACKFILL_PREDICATE; + const sel = selectionCriteriaPredicate(opts); + const conds = [basePredicate, "COALESCE(json_extract(metadata_json, '$.status'), '') != 'deprecated'", ...sel.conds]; + const params = [...sel.params]; const where = conds.join(" AND "); - const res = await env.DB.prepare(`SELECT * FROM entries WHERE ${where} ORDER BY created_at ASC LIMIT ? OFFSET ?`).bind(...params, limit, offset).all(); + const res = await env.DB.prepare(`SELECT * FROM entries WHERE ${where} ORDER BY created_at DESC LIMIT ? OFFSET ?`).bind(...params, limit, offset).all(); const rows = res.results ?? []; const scanned = rows.length; + const dailyCap = backfillDailyLimit(env); + let usedToday = 0; + try { + usedToday = await getBackfillUsageToday(env.DB); + } catch { + usedToday = 0; + } + const remainingQuota = Math.max(0, dailyCap - usedToday); let processed = 0; - const embeddable = rows.filter((e) => (e.content ?? "").trim().length > 0); + const candidates = rows.filter((e) => (e.content ?? "").trim().length > 0); + const embeddable = candidates.slice(0, remainingQuota); + const quotaExceeded = candidates.length > embeddable.length; if (embeddable.length > 0 && env.AI && env.VECTORIZE) { const texts = embeddable.map((e) => (e.content ?? "").trim()); const out = await env.AI.run(embedModel(env), { text: texts }); @@ -2516,14 +2645,27 @@ async function backfillEmbeddings(env, opts = {}) { await env.VECTORIZE.upsert(vectors); const ids = vectors.map((v) => v.id); const placeholders = ids.map(() => "?").join(","); - await env.DB.prepare(`UPDATE entries SET is_embedded = 1 WHERE id IN (${placeholders})`).bind(...ids).run(); + await env.DB.prepare(`UPDATE entries SET is_embedded = 1, content_hash = ? WHERE id IN (${placeholders})`).bind(embedModel(env), ...ids).run(); processed = vectors.length; + try { + await addBackfillUsage(env.DB, processed); + } catch { + } } } const remRow = await env.DB.prepare(`SELECT COUNT(*) as c FROM entries WHERE ${where}`).bind(...params).first(); const totalMatching = remRow?.c ?? 0; const remaining = opts.reindex ? Math.max(0, totalMatching - (offset + scanned)) : totalMatching; - return { enabled: true, processed, skipped: scanned - processed, remaining, scanned }; + return { + enabled: true, + processed, + skipped: scanned - processed, + remaining, + scanned, + quota_limit: dailyCap, + quota_used_today: usedToday + processed, + quota_exceeded: quotaExceeded + }; } async function backfillStatus(env, opts = {}) { const conds = []; @@ -2541,6 +2683,74 @@ async function backfillStatus(env, opts = {}) { const embeddedRow = await env.DB.prepare(`SELECT COUNT(*) as c FROM entries WHERE is_embedded = 1 AND json_extract(metadata_json, '$.embed') = 1${extra}`).bind(...params).first(); return { enabled: embedEnabled(env), pending: pendingRow?.c ?? 0, embedded: embeddedRow?.c ?? 0 }; } +async function reconcileEmbedGeneration(env, opts = {}) { + if (!embedEnabled(env)) { + return { + enabled: false, + checked: 0, + confirmed_current: 0, + reset_to_pending: 0, + remaining: 0, + scanned: 0, + quota_limit: 0, + quota_used_today: 0, + quota_exceeded: false + }; + } + const limit = Math.min(Math.max(opts.limit ?? 50, 1), 200); + const currentModel = embedModel(env); + const sel = selectionCriteriaPredicate(opts); + const conds = [ + "is_embedded = 1", + "(content_hash IS NULL OR content_hash != ?)", + "COALESCE(json_extract(metadata_json, '$.status'), '') != 'deprecated'", + ...sel.conds + ]; + const params = [currentModel, ...sel.params]; + const where = conds.join(" AND "); + const res = await env.DB.prepare(`SELECT id FROM entries WHERE ${where} ORDER BY created_at DESC LIMIT ?`).bind(...params, limit).all(); + const scannedIds = (res.results ?? []).map((r) => r.id); + const scanned = scannedIds.length; + const budget = await maintenanceBudgetToday(env, env.DB); + const ids = scannedIds.slice(0, budget.remaining); + const quotaExceeded = scanned > ids.length; + const checked = ids.length; + let confirmed_current = 0; + let reset_to_pending = 0; + if (ids.length > 0 && env.VECTORIZE) { + const found = await env.VECTORIZE.getByIds(ids); + const foundIds = new Set(found.map((v) => v.id)); + const presentIds = ids.filter((id) => foundIds.has(id)); + const missingIds = ids.filter((id) => !foundIds.has(id)); + if (presentIds.length > 0) { + const ph = presentIds.map(() => "?").join(","); + await env.DB.prepare(`UPDATE entries SET content_hash = ? WHERE id IN (${ph})`).bind(currentModel, ...presentIds).run(); + confirmed_current = presentIds.length; + } + if (missingIds.length > 0) { + const ph = missingIds.map(() => "?").join(","); + await env.DB.prepare(`UPDATE entries SET is_embedded = 0, content_hash = NULL WHERE id IN (${ph})`).bind(...missingIds).run(); + reset_to_pending = missingIds.length; + } + } + const remRow = await env.DB.prepare(`SELECT COUNT(*) as c FROM entries WHERE ${where}`).bind(...params).first(); + const written = confirmed_current + reset_to_pending; + try { + await addMaintenanceUsage(env.DB, written); + } catch { + } + return { + enabled: true, + checked, + confirmed_current, + reset_to_pending, + remaining: remRow?.c ?? 0, + scanned, + quota_limit: budget.limit, + quota_used_today: budget.used + written, + quota_exceeded: quotaExceeded + }; +} async function embedSelfTest(env, opts = {}) { if (!embedEnabled(env)) { return { enabled: false, tested: false, passed: null, note: "embed \u6A21\u7D44\u672A\u958B\uFF08\u7F3A Vectorize/AI binding\uFF09\uFF0C\u8A9E\u7FA9\u641C\u5C0B\u9019\u689D\u8DEF\u76EE\u524D\u4E0D\u5B58\u5728" }; @@ -2647,6 +2857,90 @@ async function migrateLegacyCredentialsForOwner(db, ownerId) { return (after?.n ?? 0) - (before?.n ?? 0); } +// kbdb/src/actions/library-backfill.ts +var MAX_PAGE_NAMES = 300; +var HARD_LIMIT_CAP = 500; +function criteriaPredicate(c) { + const conds = [ + "(json_extract(metadata_json, '$.library') IS NULL OR json_extract(metadata_json, '$.library') = '')" + ]; + const params = []; + if (c.owner_id) { + conds.push("owner_id = ?"); + params.push(c.owner_id); + } + if (c.entry_type) { + conds.push("entry_type = ?"); + params.push(c.entry_type); + } + if (c.page_names && c.page_names.length > 0) { + const names = c.page_names.slice(0, MAX_PAGE_NAMES); + conds.push(`page_name IN (${names.map(() => "?").join(",")})`); + params.push(...names); + } + if (c.source_prefix) { + conds.push("json_extract(metadata_json, '$.source') LIKE ? || '%'"); + params.push(c.source_prefix); + } + if (c.page_name_prefix) { + conds.push("page_name LIKE ? || '%'"); + params.push(c.page_name_prefix); + } + if (typeof c.since === "number") { + conds.push("created_at >= ?"); + params.push(c.since); + } + if (typeof c.until === "number") { + conds.push("created_at < ?"); + params.push(c.until); + } + return { conds, params }; +} +async function backfillEntryLibraryTags(db, env, opts) { + const library = (opts.library ?? "").trim(); + if (!library) throw new Error("library required"); + const ownerId = (opts.owner_id ?? "").trim(); + if (!ownerId) throw new Error("owner_id required\uFF08\u6A19\u5EAB\u662F\u8DE8\u5927\u91CF\u65E2\u6709\u8CC7\u6599\u7684\u6279\u6B21\u5BEB\u5165\uFF0C\u4E0D\u51C6\u7121\u79DF\u6236\u7BC4\u570D\u5730\u6383\u5168\u5EAB\u2014\u20142026-08-11 leo \u76F4\u4EE4\uFF09"); + const limit = Math.min(Math.max(opts.limit ?? 100, 1), HARD_LIMIT_CAP); + const sel = criteriaPredicate({ ...opts, owner_id: ownerId }); + const where = sel.conds.join(" AND "); + const params = sel.params; + const res = await db.prepare(`SELECT id FROM entries WHERE ${where} ORDER BY created_at ASC LIMIT ?`).bind(...params, limit).all(); + const scannedIds = (res.results ?? []).map((r) => r.id); + const scanned = scannedIds.length; + const budget = await maintenanceBudgetToday(env, db); + const ids = scannedIds.slice(0, budget.remaining); + const quotaExceeded = scanned > ids.length; + let tagged = 0; + if (ids.length > 0) { + const ph = ids.map(() => "?").join(","); + await db.prepare( + `UPDATE entries SET metadata_json = json_set(COALESCE(metadata_json, '{}'), '$.library', ?), updated_at = unixepoch() WHERE id IN (${ph})` + ).bind(library, ...ids).run(); + tagged = ids.length; + } + try { + await addMaintenanceUsage(db, tagged); + } catch { + } + const remRow = await db.prepare(`SELECT COUNT(*) as c FROM entries WHERE ${where}`).bind(...params).first(); + return { + library, + scanned, + tagged, + remaining: remRow?.c ?? 0, + quota_limit: budget.limit, + quota_used_today: budget.used + tagged, + quota_exceeded: quotaExceeded + }; +} +async function libraryBackfillStatus(db, opts = {}) { + const sel = criteriaPredicate(opts); + const where = sel.conds.join(" AND "); + const row = await db.prepare(`SELECT COUNT(*) as c FROM entries WHERE ${where}`).bind(...sel.params).first(); + return { pending: row?.c ?? 0 }; +} + // kbdb/src/routes/entries.ts var entryRoutes = new Hono2(); function fireAndForget(c, p) { @@ -2873,6 +3167,39 @@ entryRoutes.patch("/deprecate-by-library", async (c) => { } return c.json({ success: true, deprecated_count: count, vectors_deleted }); }); +entryRoutes.post("/backfill-library", async (c) => { + const body = await c.req.json().catch(() => ({})); + const library = String(body.library ?? "").trim(); + const ownerId = String(body.owner_id ?? "").trim(); + if (!library || !ownerId) return c.json({ success: false, error: "library \u8207 owner_id \u5FC5\u586B" }, 400); + try { + const result = await backfillEntryLibraryTags(c.env.DB, c.env, { + library, + owner_id: ownerId, + entry_type: body.entry_type || void 0, + page_names: Array.isArray(body.page_names) && body.page_names.length > 0 ? body.page_names : void 0, + source_prefix: body.source_prefix || void 0, + page_name_prefix: body.page_name_prefix || void 0, + since: body.since !== void 0 ? Number(body.since) : void 0, + until: body.until !== void 0 ? Number(body.until) : void 0, + limit: body.limit !== void 0 ? Number(body.limit) : void 0 + }); + return c.json({ success: true, ...result }); + } catch (e) { + return c.json({ success: false, error: e instanceof Error ? e.message : String(e) }, 400); + } +}); +entryRoutes.get("/backfill-library/status", async (c) => { + const status = await libraryBackfillStatus(c.env.DB, { + owner_id: c.req.query("owner_id") || void 0, + entry_type: c.req.query("entry_type") || void 0, + source_prefix: c.req.query("source_prefix") || void 0, + page_name_prefix: c.req.query("page_name_prefix") || void 0, + since: c.req.query("since") ? Number(c.req.query("since")) : void 0, + until: c.req.query("until") ? Number(c.req.query("until")) : void 0 + }); + return c.json({ success: true, ...status }); +}); entryRoutes.patch("/:id", async (c) => { const body = await c.req.json().catch(() => ({})); const entry = await updateEntry(c.env.DB, c.req.param("id"), body); @@ -3192,6 +3519,9 @@ embedRoutes.post("/backfill", async (c) => { limit: body.limit !== void 0 ? Number(body.limit) : void 0, owner_id: body.owner_id || void 0, source: body.source || void 0, + library: body.library || void 0, + since: body.since !== void 0 ? Number(body.since) : void 0, + until: body.until !== void 0 ? Number(body.until) : void 0, // reindex(Arcrun#11):重推既有向量讓事後建立的 Vectorize metadata index 收錄(見 embed.ts)。 reindex: body.reindex === true, offset: body.offset !== void 0 ? Number(body.offset) : void 0 @@ -3205,6 +3535,23 @@ embedRoutes.get("/backfill/status", async (c) => { }); return c.json({ success: true, ...status }); }); +embedRoutes.post("/reconcile", async (c) => { + if (!embedEnabled(c.env)) { + return c.json( + { success: false, error: "embed module not enabled (need VECTORIZE + AI bindings)", capability_hint: OFF_HINT }, + 409 + ); + } + const body = await c.req.json().catch(() => ({})); + const result = await reconcileEmbedGeneration(c.env, { + limit: body.limit !== void 0 ? Number(body.limit) : void 0, + owner_id: body.owner_id || void 0, + library: body.library || void 0, + since: body.since !== void 0 ? Number(body.since) : void 0, + until: body.until !== void 0 ? Number(body.until) : void 0 + }); + return c.json({ success: true, ...result }); +}); embedRoutes.get("/selftest", async (c) => { const result = await embedSelfTest(c.env, { owner_id: c.req.query("owner_id") || void 0 }); return c.json({ success: true, ...result }); @@ -3402,14 +3749,18 @@ async function recomputeLibraryMap(db, input) { async function liveTripletCountsByLibrary(db, tripletTemplateId, owner_id) { const params = owner_id ? [tripletTemplateId, owner_id] : [tripletTemplateId]; const res = await db.prepare( + // kbdb-sql-ok:牆內本體(kbdb/src/actions/),checkout 開在巢狀 worktree matrix/arcrun/.worktree-fix-87/(避免打斷另一 session 佔用中的 matrix/arcrun 主 checkout),hook 逐字比對 matrix/arcrun/kbdb/src/ 吃不到中間多出的 worktree 目錄層,非繞牆 `SELECT COALESCE(NULLIF(lib_e.content, ''), 'general') AS library, COUNT(*) AS n FROM ( - SELECT DISTINCT ev.record_id + SELECT ev.record_id AS rid, + MAX(CASE WHEN ev.slot_name = 'status' THEN e.content END) AS status FROM entry_values ev JOIN entries e ON ev.entry_id = e.id WHERE ev.template_id = ?${owner_id ? " AND e.owner_id = ?" : ""} + GROUP BY ev.record_id ) AS tr - LEFT JOIN entry_values lev ON lev.record_id = tr.record_id AND lev.slot_name = 'library' + LEFT JOIN entry_values lev ON lev.record_id = tr.rid AND lev.slot_name = 'library' LEFT JOIN entries lib_e ON lib_e.id = lev.entry_id + WHERE COALESCE(tr.status, 'active') = 'active' GROUP BY COALESCE(NULLIF(lib_e.content, ''), 'general')` ).bind(...params).all(); const m = /* @__PURE__ */ new Map(); @@ -3558,7 +3909,7 @@ function dailyLimit(env) { const n = raw2 ? parseInt(raw2, 10) : NaN; return Number.isFinite(n) && n > 0 ? n : DEFAULT_DAILY_LIMIT; } -function utcDay() { +function utcDay3() { return (/* @__PURE__ */ new Date()).toISOString().slice(0, 10); } function truncate(s, max) { @@ -3566,7 +3917,7 @@ function truncate(s, max) { return s.slice(0, Math.max(0, max - 1)) + "\u2026"; } async function checkUsage(db, limit) { - const id = `exlog-usage:${utcDay()}`; + const id = `exlog-usage:${utcDay3()}`; const existing = await db.prepare("SELECT metadata_json FROM entries WHERE id = ?").bind(id).first(); let count; if (existing) { @@ -3578,10 +3929,10 @@ async function checkUsage(db, limit) { prevWrites = 0; } count = prevWrites + 1; - await db.prepare("UPDATE entries SET metadata_json = ?, updated_at = unixepoch() WHERE id = ?").bind(JSON.stringify({ day: utcDay(), writes: count }), id).run(); + await db.prepare("UPDATE entries SET metadata_json = ?, updated_at = unixepoch() WHERE id = ?").bind(JSON.stringify({ day: utcDay3(), writes: count }), id).run(); } else { count = 1; - await db.prepare(`INSERT INTO entries (id, entry_type, metadata_json) VALUES (?, 'execution_log_usage', ?)`).bind(id, JSON.stringify({ day: utcDay(), writes: count })).run(); + await db.prepare(`INSERT INTO entries (id, entry_type, metadata_json) VALUES (?, 'execution_log_usage', ?)`).bind(id, JSON.stringify({ day: utcDay3(), writes: count })).run(); } if (count > limit) return "skip"; if (count > limit * DEGRADE_RATIO) return "log_failure_only"; @@ -3797,7 +4148,7 @@ app.route("/recipe-stats", recipeStatRoutes); app.route("/execution-log", executionLogRoutes); app.route("/embed", embedRoutes); app.route("/map", mapRoutes); -var src_default = app; +var index_default = app; export { - src_default as default + index_default as default }; diff --git a/.worker-builds/arcrun-mcp/worker.mjs b/.worker-builds/arcrun-mcp/worker.mjs index 973bf83..7dec3c3 100644 --- a/.worker-builds/arcrun-mcp/worker.mjs +++ b/.worker-builds/arcrun-mcp/worker.mjs @@ -5,7 +5,11 @@ var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __commonJS = (cb, mod) => function __require() { - return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; + try { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; + } catch (e) { + throw mod = 0, e; + } }; var __export = (target, all) => { for (var name in all) @@ -8223,7 +8227,7 @@ var Hono = class _Hono { var emptyParam = []; function match(method, path) { const matchers = this.buildAllMatchers(); - const match2 = (method2, path2) => { + const match2 = ((method2, path2) => { const matcher = matchers[method2] || matchers[METHOD_NAME_ALL]; const staticMatch = matcher[2][path2]; if (staticMatch) { @@ -8235,7 +8239,7 @@ function match(method, path) { } const index = match3.indexOf("", 1); return [matcher[1][index], match3]; - }; + }); this.match = match2; return match2(method, path); } @@ -12954,7 +12958,7 @@ ZodNaN.create = (params) => { ...processCreateParams(params) }); }; -var BRAND = Symbol("zod_brand"); +var BRAND = /* @__PURE__ */ Symbol("zod_brand"); var ZodBranded = class extends ZodType { _parse(input) { const { ctx } = this._processInputParams(input); @@ -13156,14 +13160,14 @@ var ostring = () => stringType().optional(); var onumber = () => numberType().optional(); var oboolean = () => booleanType().optional(); var coerce = { - string: (arg) => ZodString.create({ ...arg, coerce: true }), - number: (arg) => ZodNumber.create({ ...arg, coerce: true }), - boolean: (arg) => ZodBoolean.create({ + string: ((arg) => ZodString.create({ ...arg, coerce: true })), + number: ((arg) => ZodNumber.create({ ...arg, coerce: true })), + boolean: ((arg) => ZodBoolean.create({ ...arg, coerce: true - }), - bigint: (arg) => ZodBigInt.create({ ...arg, coerce: true }), - date: (arg) => ZodDate.create({ ...arg, coerce: true }) + })), + bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })), + date: ((arg) => ZodDate.create({ ...arg, coerce: true })) }; var NEVER = INVALID; @@ -13214,7 +13218,6 @@ function $constructor(name, initializer3, params) { Object.defineProperty(_, "name", { value: name }); return _; } -var $brand = Symbol("zod_brand"); var $ZodAsyncError = class extends Error { constructor() { super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`); @@ -15718,8 +15721,6 @@ function en_default2() { } // mcp/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/registries.js -var $output = Symbol("ZodOutput"); -var $input = Symbol("ZodInput"); var $ZodRegistry = class { constructor() { this._map = /* @__PURE__ */ new Map(); @@ -16997,10 +16998,10 @@ var ZodMiniType = /* @__PURE__ */ $constructor("ZodMiniType", (inst, def) => { }; inst.clone = (_def, params) => clone(inst, _def, params); inst.brand = () => inst; - inst.register = (reg, meta) => { + inst.register = ((reg, meta) => { reg.add(inst, meta); return inst; - }; + }); }); var ZodMiniObject = /* @__PURE__ */ $constructor("ZodMiniObject", (inst, def) => { $ZodObject.init(inst, def); @@ -17263,10 +17264,10 @@ var ZodType2 = /* @__PURE__ */ $constructor("ZodType", (inst, def) => { }; inst.clone = (def2, params) => clone(inst, def2, params); inst.brand = () => inst; - inst.register = (reg, meta) => { + inst.register = ((reg, meta) => { reg.add(inst, meta); return inst; - }; + }); inst.parse = (data, params) => parse2(inst, data, params, { callee: inst.parse }); inst.safeParse = (data, params) => safeParse3(inst, data, params); inst.parseAsync = async (data, params) => parseAsync2(inst, data, params, { callee: inst.parseAsync }); @@ -19238,11 +19239,13 @@ function assertCompleteRequestPrompt(request) { if (request.params.ref.type !== "ref/prompt") { throw new TypeError(`Expected CompleteRequestPrompt, but got ${request.params.ref.type}`); } + void request; } function assertCompleteRequestResourceTemplate(request) { if (request.params.ref.type !== "ref/resource") { throw new TypeError(`Expected CompleteRequestResourceTemplate, but got ${request.params.ref.type}`); } + void request; } var CompleteResultSchema = ResultSchema.extend({ completion: looseObject({ @@ -19395,7 +19398,7 @@ function isTerminal(status) { } // mcp/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/Options.js -var ignoreOverride = Symbol("Let zodToJsonSchema decide on which parser to use"); +var ignoreOverride = /* @__PURE__ */ Symbol("Let zodToJsonSchema decide on which parser to use"); var defaultOptions = { name: void 0, $refStrategy: "root", @@ -22371,7 +22374,7 @@ var Server = class extends Protocol { }; // mcp/node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.0_zod@3.25.76/node_modules/@modelcontextprotocol/sdk/dist/esm/server/completable.js -var COMPLETABLE_SYMBOL = Symbol.for("mcp.completable"); +var COMPLETABLE_SYMBOL = /* @__PURE__ */ Symbol.for("mcp.completable"); function isCompletable(schema4) { return !!schema4 && typeof schema4 === "object" && COMPLETABLE_SYMBOL in schema4; } @@ -24686,13 +24689,13 @@ function registerAllIntrospectionTools(server, env) { } // mcp/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/identity.js -var ALIAS = Symbol.for("yaml.alias"); -var DOC = Symbol.for("yaml.document"); -var MAP = Symbol.for("yaml.map"); -var PAIR = Symbol.for("yaml.pair"); -var SCALAR = Symbol.for("yaml.scalar"); -var SEQ = Symbol.for("yaml.seq"); -var NODE_TYPE = Symbol.for("yaml.node.type"); +var ALIAS = /* @__PURE__ */ Symbol.for("yaml.alias"); +var DOC = /* @__PURE__ */ Symbol.for("yaml.document"); +var MAP = /* @__PURE__ */ Symbol.for("yaml.map"); +var PAIR = /* @__PURE__ */ Symbol.for("yaml.pair"); +var SCALAR = /* @__PURE__ */ Symbol.for("yaml.scalar"); +var SEQ = /* @__PURE__ */ Symbol.for("yaml.seq"); +var NODE_TYPE = /* @__PURE__ */ Symbol.for("yaml.node.type"); var isAlias = (node) => !!node && typeof node === "object" && node[NODE_TYPE] === ALIAS; var isDocument = (node) => !!node && typeof node === "object" && node[NODE_TYPE] === DOC; var isMap = (node) => !!node && typeof node === "object" && node[NODE_TYPE] === MAP; @@ -24722,9 +24725,9 @@ function isNode(node) { var hasAnchor = (node) => (isScalar(node) || isCollection(node)) && !!node.anchor; // mcp/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/visit.js -var BREAK = Symbol("break visit"); -var SKIP = Symbol("skip children"); -var REMOVE = Symbol("remove node"); +var BREAK = /* @__PURE__ */ Symbol("break visit"); +var SKIP = /* @__PURE__ */ Symbol("skip children"); +var REMOVE = /* @__PURE__ */ Symbol("remove node"); function visit(node, visitor) { const visitor_ = initVisitor(visitor); if (isDocument(node)) { @@ -29317,9 +29320,9 @@ ${end.comment}` : end.comment; }; // mcp/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/parse/cst-visit.js -var BREAK2 = Symbol("break visit"); -var SKIP2 = Symbol("skip children"); -var REMOVE2 = Symbol("remove item"); +var BREAK2 = /* @__PURE__ */ Symbol("break visit"); +var SKIP2 = /* @__PURE__ */ Symbol("skip children"); +var REMOVE2 = /* @__PURE__ */ Symbol("remove item"); function visit2(cst, visitor) { if ("type" in cst && cst.type === "document") cst = { start: cst.start, value: cst.value }; @@ -33389,7 +33392,7 @@ app.post("/", partnerAuthMiddleware, async (c) => { const partnerToken = c.get("partner_token"); return handleMcpRequest(c.req.raw, c.env, orgNamespace, partnerToken); }); -var src_default = _app; +var index_default = _app; export { - src_default as default + index_default as default }; diff --git a/.worker-builds/manifest.json b/.worker-builds/manifest.json index b86386a..2864eb9 100644 --- a/.worker-builds/manifest.json +++ b/.worker-builds/manifest.json @@ -1,18 +1,18 @@ { "schema": 1, "built_for": "arcrun-tier2-worker-artifacts", - "generated_at": "2026-08-11T05:33:37.988Z", - "repo_head": "d8bbf2241bd6b117d76fb27d9e386ecfb0ffe8f7", + "generated_at": "2026-08-12T01:50:15.065Z", + "repo_head": "3eb8b31f2bfa029e15a8119e229082fbafb8d2b1", "repo_dirty": false, "workers": [ { "name": "arcrun-cypher-executor", "source_dir": "cypher-executor", - "source_commit": "797e7f751cc42cb1f5d9e2e187f18cf51eb981a1", + "source_commit": "525faaf5d01e156a9b8f90808607bead92f40165", "main_module": "worker.mjs", "main_file": "arcrun-cypher-executor/worker.mjs", - "js_bytes": 568855, - "content_sha256": "66e2a6341854e8b2de0567a46282b94669e73b95d152b05b17b0f8b58e257fec", + "js_bytes": 570290, + "content_sha256": "49d59597c01b5264875e0295c86c7bb2212bf54d3c5858cd4a167752370fa716", "modules": [], "compat_date": "2025-02-19", "compat_flags": [ @@ -58,11 +58,11 @@ { "name": "arcrun-kbdb", "source_dir": "kbdb", - "source_commit": "a7e23badf2a771be779a861e69e7efa6e8141dfe", + "source_commit": "3eb8b31f2bfa029e15a8119e229082fbafb8d2b1", "main_module": "worker.mjs", "main_file": "arcrun-kbdb/worker.mjs", - "js_bytes": 135910, - "content_sha256": "5e5a7a030f4fd1f5549ace6791c3827b6497b0bfdd9add46af041af47c472905", + "js_bytes": 149234, + "content_sha256": "7bc666568f453a2fc5fc9339fc997c12d3927fb8a293439f2c80695be8da9767", "modules": [], "compat_date": "2025-02-19", "compat_flags": [ @@ -90,8 +90,8 @@ "source_commit": "1e85dfb49b0e8d81c0854781d93ee4e6a300c7b3", "main_module": "worker.mjs", "main_file": "arcrun-http-request/worker.mjs", - "js_bytes": 80073, - "content_sha256": "9a9dcb71879a7bdfd9fec1bd94eb9742e12cb63733d822ce63eeb1be30008d15", + "js_bytes": 80079, + "content_sha256": "cdd97364f277587cbade69e09bb40812c68f26a1e8bc9aa632c65b1b962b0b85", "modules": [ { "name": "component.wasm", @@ -122,8 +122,8 @@ "source_commit": "621cb8d948d61be6202063fd02effb3f538437fe", "main_module": "worker.mjs", "main_file": "arcrun-code/worker.mjs", - "js_bytes": 153671, - "content_sha256": "285a7406ec694ae47dccfaf48517f712c74d207a1689dffa15c39f1555b45be5", + "js_bytes": 153758, + "content_sha256": "751634a3fc9a99cc2da662026818d754c48f031d10bff3b3be2d3a8ee2311bd6", "modules": [ { "name": "quickjs.wasm", @@ -151,8 +151,8 @@ "source_commit": "035e8b255b0dcbd4238707f7d2ac8ccf9ee1ba72", "main_module": "worker.mjs", "main_file": "arcrun-mcp/worker.mjs", - "js_bytes": 1165130, - "content_sha256": "be15033f32e605f03f69bd10cd87782dafa34dbafeee2ce367bd7361a062a291", + "js_bytes": 1165388, + "content_sha256": "c5ff10f9b9d5a77217be343af12d2be3ee8f9792d3e1e091e48e5e6c8d24ca9d", "modules": [], "compat_date": "2024-11-27", "compat_flags": [