chore(builds): 重編 tier2 成品——把 #108 放進執行檔(出貨路徑 A 的第 0 步)

原始碼修好不等於使用者拿得到:`.worker-builds/` 是安裝器與 `acr update`
實際部署的那份執行檔。本次一併重編,repo_dirty=false、repo_head=b223a698。

  arcrun-cypher-executor  sha256=e0026a23792f  source=b223a698 ← #108
  arcrun-kbdb             sha256=9c6d41895d78  source=f87d0e92(未變)
  arcrun-http-request     sha256=9a9dcb71879a  source=1e85dfb4(未變)
  arcrun-code             sha256=285a7406ec69  source=621cb8d9(未變)
  arcrun-mcp              sha256=3ebc0d441bc0  source=10d150ac(未變)

其餘四顆的 js 位元組有變是 esbuild 版本/相依重裝造成的重編,source commit 未動。
本次起這條路徑多一道閘:編成品前先跑租戶來源檢查,違規直接「建置中止」
(見同 PR 的 scripts/build-worker-artifacts.mjs)——實跑輸出貼在 PR。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
uncle6me-web
2026-08-13 00:16:55 +08:00
parent b223a69884
commit cac874601f
6 changed files with 223 additions and 146 deletions
+15 -19
View File
@@ -1,12 +1,7 @@
var __defProp = Object.defineProperty; var __defProp = Object.defineProperty;
var __getOwnPropNames = Object.getOwnPropertyNames; var __getOwnPropNames = Object.getOwnPropertyNames;
var __esm = (fn, res, err2) => function __init() { var __esm = (fn, res) => function __init() {
if (err2) throw err2[0]; return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
try {
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
} catch (e) {
throw err2 = [e], e;
}
}; };
var __export = (target, all) => { var __export = (target, all) => {
for (var name in all) for (var name in all)
@@ -107,7 +102,7 @@ function applyBaseRuntimeOptions(runtime, options) {
function applyModuleEvalRuntimeOptions(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); 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, 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, UnstableSymbol, DefaultIntrinsics, QuickJSIterator, ContextMemory, QuickJSContext, QuickJSRuntime, QuickJSEmscriptenModuleCallbacks, QuickJSModuleCallbacks, QuickJSWASMModule;
var init_chunk_JTKJZQYV = __esm({ var init_chunk_JTKJZQYV = __esm({
"registry/components/code/node_modules/quickjs-emscripten-core/dist/chunk-JTKJZQYV.mjs"() { "registry/components/code/node_modules/quickjs-emscripten-core/dist/chunk-JTKJZQYV.mjs"() {
init_dist(); init_dist();
@@ -195,7 +190,7 @@ var init_chunk_JTKJZQYV = __esm({
return this.dispose(); return this.dispose();
} }
}; };
SymbolDispose = Symbol.dispose ?? /* @__PURE__ */ Symbol.for("Symbol.dispose"); SymbolDispose = Symbol.dispose ?? Symbol.for("Symbol.dispose");
prototypeAsAny = UsingDisposable.prototype; prototypeAsAny = UsingDisposable.prototype;
prototypeAsAny[SymbolDispose] || (prototypeAsAny[SymbolDispose] = function() { prototypeAsAny[SymbolDispose] || (prototypeAsAny[SymbolDispose] = function() {
return this.dispose(); return this.dispose();
@@ -414,6 +409,7 @@ Lifetime used`) : new QuickJSUseAfterFree("Lifetime not alive");
return this.module._free(ptr), str; 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 }); 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 { QuickJSIterator = class extends UsingDisposable {
constructor(handle, context) { constructor(handle, context) {
@@ -777,7 +773,7 @@ ${cause.stack}Host: ${hostStack}`), Object.assign(exception, rest), exception;
} }
return result.value; return result.value;
} }
[/* @__PURE__ */ Symbol.for("nodejs.util.inspect.custom")]() { [Symbol.for("nodejs.util.inspect.custom")]() {
return this.alive ? `${this.constructor.name} { ctx: ${this.ctx.value} rt: ${this.rt.value} }` : `${this.constructor.name} { disposed }`; return this.alive ? `${this.constructor.name} { ctx: ${this.ctx.value} rt: ${this.rt.value} }` : `${this.constructor.name} { disposed }`;
} }
getFunction(fn_id) { getFunction(fn_id) {
@@ -913,7 +909,7 @@ ${cause.stack}Host: ${hostStack}`), Object.assign(exception, rest), exception;
debugLog(...msg) { debugLog(...msg) {
this._debugMode && console.log("quickjs-emscripten:", ...msg); this._debugMode && console.log("quickjs-emscripten:", ...msg);
} }
[/* @__PURE__ */ Symbol.for("nodejs.util.inspect.custom")]() { [Symbol.for("nodejs.util.inspect.custom")]() {
return this.alive ? `${this.constructor.name} { rt: ${this.rt.value} }` : `${this.constructor.name} { disposed }`; return this.alive ? `${this.constructor.name} { rt: ${this.rt.value} }` : `${this.constructor.name} { disposed }`;
} }
getSystemContext() { getSystemContext() {
@@ -1343,10 +1339,10 @@ async function QuickJSRaw(moduleArg = {}) {
x ? (0 === h && (h = ra()), g[m] = x(e[m])) : g[m] = e[m]; x ? (0 === h && (h = ra()), g[m] = x(e[m])) : g[m] = e[m];
} }
b = a(...g); b = a(...g);
return b = (function(k) { return b = function(k) {
0 !== h && sa(h); 0 !== h && sa(h);
return "string" === d ? R(k) : "boolean" === d ? !!k : k; 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 }); c.wasmMemory ? r = c.wasmMemory : r = new WebAssembly.Memory({ initial: (c.INITIAL_MEMORY || 16777216) / 65536, maximum: 32768 });
K(); K();
@@ -1468,7 +1464,7 @@ async function QuickJSRaw(moduleArg = {}) {
}, t: function(a, d) { }, t: function(a, d) {
c.callbacks.freeHostRef(void 0, a, d); c.callbacks.freeHostRef(void 0, a, d);
} }, Z; } }, Z;
Z = await (async function() { Z = await async function() {
function a(b) { function a(b) {
b = Z = b.exports; b = Z = b.exports;
c._malloc = b.v; c._malloc = b.v;
@@ -1555,7 +1551,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; 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); return a((await ea(d)).instance);
})(); }();
(function() { (function() {
function a() { function a() {
c.calledRun = true; c.calledRun = true;
@@ -3038,7 +3034,7 @@ var Hono = class _Hono {
var emptyParam = []; var emptyParam = [];
function match(method, path) { function match(method, path) {
const matchers = this.buildAllMatchers(); const matchers = this.buildAllMatchers();
const match2 = ((method2, path2) => { const match2 = (method2, path2) => {
const matcher = matchers[method2] || matchers[METHOD_NAME_ALL]; const matcher = matchers[method2] || matchers[METHOD_NAME_ALL];
const staticMatch = matcher[2][path2]; const staticMatch = matcher[2][path2];
if (staticMatch) { if (staticMatch) {
@@ -3050,7 +3046,7 @@ function match(method, path) {
} }
const index = match3.indexOf("", 1); const index = match3.indexOf("", 1);
return [matcher[1][index], match3]; return [matcher[1][index], match3];
}); };
this.match = match2; this.match = match2;
return match2(method, path); return match2(method, path);
} }
@@ -4012,7 +4008,7 @@ app.post("/", async (c) => {
); );
} }
}); });
var index_default = app; var code_default = app;
export { export {
index_default as default code_default as default
}; };
+153 -69
View File
@@ -1,12 +1,7 @@
var __defProp = Object.defineProperty; var __defProp = Object.defineProperty;
var __getOwnPropNames = Object.getOwnPropertyNames; var __getOwnPropNames = Object.getOwnPropertyNames;
var __esm = (fn, res, err) => function __init() { var __esm = (fn, res) => function __init() {
if (err) throw err[0]; return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
try {
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
} catch (e) {
throw err = [e], e;
}
}; };
var __export = (target, all) => { var __export = (target, all) => {
for (var name in all) for (var name in all)
@@ -1506,7 +1501,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 // cypher-executor/node_modules/.pnpm/hono@4.12.10/node_modules/hono/dist/router/reg-exp-router/matcher.js
function match(method, path) { function match(method, path) {
const matchers = this.buildAllMatchers(); const matchers = this.buildAllMatchers();
const match2 = ((method2, path2) => { const match2 = (method2, path2) => {
const matcher = matchers[method2] || matchers[METHOD_NAME_ALL]; const matcher = matchers[method2] || matchers[METHOD_NAME_ALL];
const staticMatch = matcher[2][path2]; const staticMatch = matcher[2][path2];
if (staticMatch) { if (staticMatch) {
@@ -1518,7 +1513,7 @@ function match(method, path) {
} }
const index = match3.indexOf("", 1); const index = match3.indexOf("", 1);
return [matcher[1][index], match3]; return [matcher[1][index], match3];
}); };
this.match = match2; this.match = match2;
return match2(method, path); return match2(method, path);
} }
@@ -7438,7 +7433,7 @@ var init_lib = __esm({
...processCreateParams(params) ...processCreateParams(params)
}); });
}; };
BRAND = /* @__PURE__ */ Symbol("zod_brand"); BRAND = Symbol("zod_brand");
ZodBranded = class extends ZodType { ZodBranded = class extends ZodType {
_parse(input) { _parse(input) {
const { ctx } = this._processInputParams(input); const { ctx } = this._processInputParams(input);
@@ -7612,14 +7607,14 @@ var init_lib = __esm({
onumber = () => numberType().optional(); onumber = () => numberType().optional();
oboolean = () => booleanType().optional(); oboolean = () => booleanType().optional();
coerce = { coerce = {
string: ((arg) => ZodString.create({ ...arg, coerce: true })), string: (arg) => ZodString.create({ ...arg, coerce: true }),
number: ((arg) => ZodNumber.create({ ...arg, coerce: true })), number: (arg) => ZodNumber.create({ ...arg, coerce: true }),
boolean: ((arg) => ZodBoolean.create({ boolean: (arg) => ZodBoolean.create({
...arg, ...arg,
coerce: true coerce: true
})), }),
bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })), bigint: (arg) => ZodBigInt.create({ ...arg, coerce: true }),
date: ((arg) => ZodDate.create({ ...arg, coerce: true })) date: (arg) => ZodDate.create({ ...arg, coerce: true })
}; };
NEVER = INVALID; NEVER = INVALID;
z = /* @__PURE__ */ Object.freeze({ z = /* @__PURE__ */ Object.freeze({
@@ -7840,7 +7835,6 @@ var init_recipe_loader = __esm({
super(message); super(message);
this.recipe = recipe; this.recipe = recipe;
} }
recipe;
}; };
} }
}); });
@@ -8847,7 +8841,7 @@ function recordRecipeStats(env, recipeKeys, ok, at, ctx) {
) )
).then(() => void 0); ).then(() => void 0);
if (ctx?.waitUntil) ctx.waitUntil(promise); if (ctx?.waitUntil) ctx.waitUntil(promise);
else void promise; else ;
} }
function generateToken() { function generateToken() {
const tokenBytes = crypto.getRandomValues(new Uint8Array(16)); const tokenBytes = crypto.getRandomValues(new Uint8Array(16));
@@ -8889,7 +8883,7 @@ async function executeWebhookGraph(env, graph, triggerContext, token, apiKey, ct
result.trace result.trace
); );
if (ctx?.waitUntil) ctx.waitUntil(statsPromise); if (ctx?.waitUntil) ctx.waitUntil(statsPromise);
else void statsPromise; else ;
} }
return { success: true, data: result.data, duration_ms }; return { success: true, data: result.data, duration_ms };
} catch (err) { } catch (err) {
@@ -8913,7 +8907,7 @@ async function executeWebhookGraph(env, graph, triggerContext, token, apiKey, ct
err.trace err.trace
); );
if (ctx?.waitUntil) ctx.waitUntil(statsPromise); if (ctx?.waitUntil) ctx.waitUntil(statsPromise);
else void statsPromise; else ;
} }
if (err instanceof ExecutionError) { if (err instanceof ExecutionError) {
const traceFormatted = err.trace.map((s) => ({ const traceFormatted = err.trace.map((s) => ({
@@ -9380,7 +9374,6 @@ function extractTarget(input) {
return typeof raw2 === "string" ? raw2 : JSON.stringify(raw2); return typeof raw2 === "string" ? raw2 : JSON.stringify(raw2);
} }
async function writeExecutionVerdict(env, workflowId, nodes, verdict, durationMs, message, input, apiKey) { async function writeExecutionVerdict(env, workflowId, nodes, verdict, durationMs, message, input, apiKey) {
void nodes;
try { try {
const { base, headers } = kbdbBase(env); const { base, headers } = kbdbBase(env);
await fetch(`${base}/execution-log/record`, { await fetch(`${base}/execution-log/record`, {
@@ -12557,6 +12550,45 @@ init_kbdb_proxy();
// cypher-executor/src/routes/console-auth.ts // cypher-executor/src/routes/console-auth.ts
init_dist(); init_dist();
// cypher-executor/src/lib/tenant.ts
var TenantUnresolvedError = class extends Error {
constructor(message) {
super(message);
this.name = "TenantUnresolvedError";
}
};
function knowledgeOwner(env) {
const injected = (env.ARCRUN_NAMESPACE ?? "").trim();
if (injected) return injected;
const legacy = (env.CONSOLE_TENANT ?? "").trim();
if (legacy) return legacy;
throw new TenantUnresolvedError(
"\u9019\u500B\u90E8\u7F72\u6C92\u6709\u77E5\u8B58\u547D\u540D\u7A7A\u9593\uFF08ARCRUN_NAMESPACE / CONSOLE_TENANT \u90FD\u6C92\u8A2D\uFF09\u2014\u2014\u4E0D\u77E5\u9053\u8981\u53BB\u54EA\u4E00\u683C\u627E\u8CC7\u6599\u3002\u8ACB\u8DD1 `acr update` \u8B93\u5B83\u5F9E\u4F60\u7684 ~/.arcrun/config.yaml \u6CE8\u5165\u3002"
);
}
function tenantFromApiKey(apiKey) {
const key = (apiKey ?? "").trim();
if (!key) throw new TenantUnresolvedError("\u7F3A\u5C11 X-Arcrun-API-Key\uFF0C\u7121\u6CD5\u6C7A\u5B9A\u67E5\u8A62\u7BC4\u570D");
return key;
}
function accountTenant(env) {
return env.CONSOLE_TENANT || "leo";
}
function ownerQuery(tenant2) {
return `owner_id=${encodeURIComponent(tenant2)}`;
}
function ownerField(tenant2) {
return tenant2;
}
function censusQueryAllTenants() {
return "owner_id=";
}
function isOwnedBy(value, tenant2) {
return typeof value === "string" && value === tenant2;
}
// cypher-executor/src/routes/console-auth.ts
var consoleAuthRouter = new Hono2(); var consoleAuthRouter = new Hono2();
var CREDS_KEY = "console:credentials"; var CREDS_KEY = "console:credentials";
var SESSION_PREFIX = "console_sess:"; var SESSION_PREFIX = "console_sess:";
@@ -12583,7 +12615,7 @@ async function hashPassword(password, salt) {
return h; return h;
} }
function tenantOf(c) { function tenantOf(c) {
return c.env.CONSOLE_TENANT || "leo"; return knowledgeOwner(c.env);
} }
async function loadCredentials(env) { async function loadCredentials(env) {
let fromStore = readAuthStore(env).console; let fromStore = readAuthStore(env).console;
@@ -12854,10 +12886,10 @@ var DEFAULT_SESSION_TTL = 604800;
var USER_TEMPLATE = "portal_user"; var USER_TEMPLATE = "portal_user";
var LIBRARY_TEMPLATE = "portal_library"; var LIBRARY_TEMPLATE = "portal_library";
function portalTenant(env) { function portalTenant(env) {
return env.CONSOLE_TENANT || "leo"; return accountTenant(env);
} }
function portalNamespace(env) { function portalNamespace(env) {
return `${portalTenant(env)}::portal`; return `${accountTenant(env)}::portal`;
} }
function sessionTtl(env) { function sessionTtl(env) {
const n = Number.parseInt(env.PORTAL_SESSION_TTL ?? "", 10); const n = Number.parseInt(env.PORTAL_SESSION_TTL ?? "", 10);
@@ -12886,6 +12918,9 @@ async function run(c, fn) {
if (e instanceof AuthStoreWriteError) { if (e instanceof AuthStoreWriteError) {
return c.json({ error: `\u8A8D\u8B49\u5132\u5B58\u5BEB\u5165\u5931\u6557\uFF1A${e.message}`, code: "auth_store_not_writable" }, 502); return c.json({ error: `\u8A8D\u8B49\u5132\u5B58\u5BEB\u5165\u5931\u6557\uFF1A${e.message}`, code: "auth_store_not_writable" }, 502);
} }
if (e instanceof TenantUnresolvedError) {
return c.json({ error: e.message, code: "tenant_unresolved" }, 500);
}
if (e instanceof KbdbError) return c.json({ error: `KBDB \u4E0D\u53EF\u9054\u6216\u56DE\u932F\uFF1A${e.message}` }, 502); if (e instanceof KbdbError) return c.json({ error: `KBDB \u4E0D\u53EF\u9054\u6216\u56DE\u932F\uFF1A${e.message}` }, 502);
throw e; throw e;
} }
@@ -13768,10 +13803,9 @@ portalRouter.post(
return c.json({ error: "email \u6216\u5BC6\u78BC\u932F\u8AA4" }, 401); return c.json({ error: "email \u6216\u5BC6\u78BC\u932F\u8AA4" }, 401);
} }
await clearLoginFail(c.env, email); await clearLoginFail(c.env, email);
const tenant2 = portalTenant(c.env);
const daemonCfg = { const daemonCfg = {
cypher_url: new URL(c.req.url).origin, cypher_url: new URL(c.req.url).origin,
namespace: tenant2, namespace: knowledgeOwner(c.env),
library: "kb", library: "kb",
email, email,
instance_name: String(rec.values.display_name ?? "") instance_name: String(rec.values.display_name ?? "")
@@ -13787,7 +13821,7 @@ portalRouter.post(
const body = await c.req.json().catch(() => null); const body = await c.req.json().catch(() => null);
const key = String(body?.key ?? "").trim(); const key = String(body?.key ?? "").trim();
if (!key) return c.json({ error: "\u8ACB\u8CBC\u4E0A\u4F60\u7684 Google AI \u91D1\u9470" }, 400); if (!key) return c.json({ error: "\u8ACB\u8CBC\u4E0A\u4F60\u7684 Google AI \u91D1\u9470" }, 400);
const tenant2 = portalTenant(c.env); const tenant2 = knowledgeOwner(c.env);
const kvKey2 = `${tenant2}:wf:rag_chat`; const kvKey2 = `${tenant2}:wf:rag_chat`;
const raw2 = await c.env.WEBHOOKS.get(kvKey2, "text"); const raw2 = await c.env.WEBHOOKS.get(kvKey2, "text");
if (!raw2) return c.json({ error: "\u9019\u500B\u5BE6\u4F8B\u6C92\u6709\u5B89\u88DD AI \u554F\u7B54\u5DE5\u4F5C\u6D41" }, 404); if (!raw2) return c.json({ error: "\u9019\u500B\u5BE6\u4F8B\u6C92\u6709\u5B89\u88DD AI \u554F\u7B54\u5DE5\u4F5C\u6D41" }, 404);
@@ -13839,8 +13873,8 @@ portalRouter.get(
}); });
const known = new Set(out.map((l) => l.name)); const known = new Set(out.map((l) => l.name));
try { try {
const tenant2 = portalTenant(c.env); const tenant2 = knowledgeOwner(c.env);
const ownerParam = `owner_id=${encodeURIComponent(tenant2)}`; const ownerParam = ownerQuery(tenant2);
const [autoRes, cardRes, tripletRes] = await Promise.all([ const [autoRes, cardRes, tripletRes] = await Promise.all([
kbdbFetch(c.env, `/entries/libraries?${ownerParam}`).catch(() => null), kbdbFetch(c.env, `/entries/libraries?${ownerParam}`).catch(() => null),
kbdbFetch(c.env, `/entries/library-stats?${ownerParam}`).catch(() => null), kbdbFetch(c.env, `/entries/library-stats?${ownerParam}`).catch(() => null),
@@ -13989,8 +14023,8 @@ portalRouter.get(
(c) => run(c, async () => { (c) => run(c, async () => {
const auth = await requirePortalAdmin(c); const auth = await requirePortalAdmin(c);
if (!auth.ok) return auth.res; if (!auth.ok) return auth.res;
const ownerId = portalTenant(c.env); const ownerId = knowledgeOwner(c.env);
const res = await kbdbFetch(c.env, `/execution-log/retention?owner_id=${encodeURIComponent(ownerId)}`); const res = await kbdbFetch(c.env, `/execution-log/retention?${ownerQuery(ownerId)}`);
if (!res.ok) throw new KbdbError(`GET /execution-log/retention \u2192 ${res.status}`); if (!res.ok) throw new KbdbError(`GET /execution-log/retention \u2192 ${res.status}`);
const data = await res.json(); const data = await res.json();
return c.json({ success: true, retention_days: data.retention_days ?? null, default_days: data.default_days ?? 90 }); return c.json({ success: true, retention_days: data.retention_days ?? null, default_days: data.default_days ?? 90 });
@@ -14006,10 +14040,10 @@ portalRouter.put(
if (days !== null && days !== void 0 && (typeof days !== "number" || !Number.isFinite(days) || days <= 0)) { if (days !== null && days !== void 0 && (typeof days !== "number" || !Number.isFinite(days) || days <= 0)) {
return c.json({ error: "retention_days \u5FC5\u9808\u662F\u6B63\u6574\u6578\uFF0C\u6216 null\uFF08\u4EE3\u8868\u4E0D\u522A\u9664\uFF09" }, 400); return c.json({ error: "retention_days \u5FC5\u9808\u662F\u6B63\u6574\u6578\uFF0C\u6216 null\uFF08\u4EE3\u8868\u4E0D\u522A\u9664\uFF09" }, 400);
} }
const ownerId = portalTenant(c.env); const ownerId = knowledgeOwner(c.env);
const res = await kbdbFetch(c.env, "/execution-log/retention", { const res = await kbdbFetch(c.env, "/execution-log/retention", {
method: "PUT", method: "PUT",
body: JSON.stringify({ owner_id: ownerId, retention_days: days === void 0 ? null : days }) body: JSON.stringify({ owner_id: ownerField(ownerId), retention_days: days === void 0 ? null : days })
}); });
if (!res.ok) throw new KbdbError(`PUT /execution-log/retention \u2192 ${res.status}`); if (!res.ok) throw new KbdbError(`PUT /execution-log/retention \u2192 ${res.status}`);
const data = await res.json(); const data = await res.json();
@@ -14026,10 +14060,10 @@ portalRouter.delete(
const confirm = String(body?.confirm ?? "").trim(); const confirm = String(body?.confirm ?? "").trim();
if (!confirm) return c.json({ error: 'body \u9808\u5E36 { confirm: "<\u5EAB\u540D>" } \u624D\u57F7\u884C\uFF08\u79FB\u9664\u6703\u5F71\u97FF\u8CC7\u6599\u53EF\u641C\u6027\uFF09' }, 400); if (!confirm) return c.json({ error: 'body \u9808\u5E36 { confirm: "<\u5EAB\u540D>" } \u624D\u57F7\u884C\uFF08\u79FB\u9664\u6703\u5F71\u97FF\u8CC7\u6599\u53EF\u641C\u6027\uFF09' }, 400);
if (confirm !== name) return c.json({ error: `confirm \u503C\u300C${confirm}\u300D\u8207\u5EAB\u540D\u300C${name}\u300D\u4E0D\u7B26` }, 400); if (confirm !== name) return c.json({ error: `confirm \u503C\u300C${confirm}\u300D\u8207\u5EAB\u540D\u300C${name}\u300D\u4E0D\u7B26` }, 400);
const ownerId = portalTenant(c.env); const ownerId = knowledgeOwner(c.env);
const res = await kbdbFetch(c.env, "/entries/deprecate-by-library", { const res = await kbdbFetch(c.env, "/entries/deprecate-by-library", {
method: "PATCH", method: "PATCH",
body: JSON.stringify({ owner_id: ownerId, library: name }) body: JSON.stringify({ owner_id: ownerField(ownerId), library: name })
}); });
if (!res.ok) throw new KbdbError(`PATCH /entries/deprecate-by-library \u2192 ${res.status}`); if (!res.ok) throw new KbdbError(`PATCH /entries/deprecate-by-library \u2192 ${res.status}`);
const data = await res.json(); const data = await res.json();
@@ -14085,8 +14119,8 @@ async function buildDiagnostics(env, tenant2) {
let embedding = { checked: false }; let embedding = { checked: false };
try { try {
const [statusRes, selftestRes] = await Promise.all([ const [statusRes, selftestRes] = await Promise.all([
kbdbFetch(env, `/embed/backfill/status?${new URLSearchParams({ owner_id: tenant2 }).toString()}`), kbdbFetch(env, `/embed/backfill/status?${ownerQuery(tenant2)}`),
kbdbFetch(env, `/embed/selftest?${new URLSearchParams({ owner_id: tenant2 }).toString()}`) kbdbFetch(env, `/embed/selftest?${ownerQuery(tenant2)}`)
]); ]);
const statusBody = await statusRes.json().catch(() => null); const statusBody = await statusRes.json().catch(() => null);
const selftestBody = await selftestRes.json().catch(() => null); const selftestBody = await selftestRes.json().catch(() => null);
@@ -14108,7 +14142,7 @@ async function buildDiagnostics(env, tenant2) {
} }
let library_count = 0; let library_count = 0;
let triplet_count = 0; let triplet_count = 0;
const ownerParam = new URLSearchParams({ owner_id: tenant2 }).toString(); const ownerParam = ownerQuery(tenant2);
try { try {
const [registeredLibs, autoRes, tripletRes] = await Promise.all([ const [registeredLibs, autoRes, tripletRes] = await Promise.all([
listRecordsByTemplate(env, LIBRARY_TEMPLATE).catch(() => []), listRecordsByTemplate(env, LIBRARY_TEMPLATE).catch(() => []),
@@ -14132,7 +14166,7 @@ async function buildDiagnostics(env, tenant2) {
let library_scope_check = { ran: false }; let library_scope_check = { ran: false };
if (library_count === 0 && triplet_count === 0) { if (library_count === 0 && triplet_count === 0) {
try { try {
const probeRes = await kbdbFetch(env, `/entries?${new URLSearchParams({ owner_id: tenant2, limit: "1" }).toString()}`); const probeRes = await kbdbFetch(env, `/entries?${new URLSearchParams({ owner_id: ownerField(tenant2), limit: "1" }).toString()}`);
const probeBody = await probeRes.json().catch(() => null); const probeBody = await probeRes.json().catch(() => null);
const total = probeBody?.total ?? 0; const total = probeBody?.total ?? 0;
library_scope_check = { library_scope_check = {
@@ -14155,7 +14189,7 @@ portalRouter.get(
(c) => run(c, async () => { (c) => run(c, async () => {
const apiKey = (c.req.header("X-Arcrun-API-Key") ?? "").trim(); const apiKey = (c.req.header("X-Arcrun-API-Key") ?? "").trim();
if (!apiKey) return c.json({ error: "\u7F3A\u5C11 X-Arcrun-API-Key header" }, 401); if (!apiKey) return c.json({ error: "\u7F3A\u5C11 X-Arcrun-API-Key header" }, 401);
const core = await buildDiagnostics(c.env, apiKey); const core = await buildDiagnostics(c.env, tenantFromApiKey(apiKey));
return c.json({ return c.json({
generated_at: (/* @__PURE__ */ new Date()).toISOString(), generated_at: (/* @__PURE__ */ new Date()).toISOString(),
instance_url: new URL(c.req.url).origin, instance_url: new URL(c.req.url).origin,
@@ -14710,7 +14744,7 @@ async function cachedGiteaSprint(env, nowMs, waitUntil, fetcher = fetchGiteaSpri
return { ...fresh, cache: "miss" }; return { ...fresh, cache: "miss" };
} }
consoleDashboardRouter.get("/console/dashboard-data", async (c) => { consoleDashboardRouter.get("/console/dashboard-data", async (c) => {
const tenant2 = c.env.CONSOLE_TENANT || "leo"; const tenant2 = knowledgeOwner(c.env);
const now2 = Date.now(); const now2 = Date.now();
const { base: kbdbUrl, headers: kbdbHeaders } = kbdbBase(c.env); const { base: kbdbUrl, headers: kbdbHeaders } = kbdbBase(c.env);
const graphUrl = graphBase(c.env); const graphUrl = graphBase(c.env);
@@ -14862,7 +14896,7 @@ consoleDashboardRouter.get("/console/dashboard-data", async (c) => {
}); });
}); });
consoleDashboardRouter.get("/console/kb-scale-data", async (c) => { consoleDashboardRouter.get("/console/kb-scale-data", async (c) => {
const tenant2 = c.env.CONSOLE_TENANT || "leo"; const tenant2 = knowledgeOwner(c.env);
const { base, headers } = kbdbBase(c.env); const { base, headers } = kbdbBase(c.env);
const now2 = Date.now(); const now2 = Date.now();
const [wikiCards, tripletTotal, embedStatus] = await Promise.all([ const [wikiCards, tripletTotal, embedStatus] = await Promise.all([
@@ -14897,7 +14931,7 @@ consoleDashboardRouter.get("/console/settings-data", (c) => {
consoleDashboardRouter.get("/console/triage-data", async (c) => { consoleDashboardRouter.get("/console/triage-data", async (c) => {
const ok = await validateConsoleSession(c.env, c.req.header("authorization")); const ok = await validateConsoleSession(c.env, c.req.header("authorization"));
if (!ok) return c.json({ error: "\u9700\u8981\u767B\u5165\uFF08console session\uFF09" }, 401); if (!ok) return c.json({ error: "\u9700\u8981\u767B\u5165\uFF08console session\uFF09" }, 401);
const tenant2 = c.env.CONSOLE_TENANT || "leo"; const tenant2 = knowledgeOwner(c.env);
const [todoEntries, inboxEntries] = await Promise.all([ const [todoEntries, inboxEntries] = await Promise.all([
fetchEntries(c.env, tenant2, "todo", 500), fetchEntries(c.env, tenant2, "todo", 500),
fetchEntries(c.env, tenant2, "inbox", 200) fetchEntries(c.env, tenant2, "inbox", 200)
@@ -14912,7 +14946,7 @@ consoleDashboardRouter.post("/console/triage-check", async (c) => {
const entryId = typeof body?.entry_id === "string" ? body.entry_id.trim() : ""; const entryId = typeof body?.entry_id === "string" ? body.entry_id.trim() : "";
if (!entryId) return c.json({ error: "entry_id \u5FC5\u586B" }, 400); if (!entryId) return c.json({ error: "entry_id \u5FC5\u586B" }, 400);
const action = body?.action === "restore" ? "restore" : "check"; const action = body?.action === "restore" ? "restore" : "check";
const tenant2 = c.env.CONSOLE_TENANT || "leo"; const tenant2 = knowledgeOwner(c.env);
const { base, headers } = kbdbBase(c.env); const { base, headers } = kbdbBase(c.env);
const got = await fetchJson( const got = await fetchJson(
`${base}/entries/${encodeURIComponent(entryId)}`, `${base}/entries/${encodeURIComponent(entryId)}`,
@@ -14940,7 +14974,7 @@ init_kbdb_proxy();
init_webhook_handlers(); init_webhook_handlers();
var portalDataRouter = new Hono2(); var portalDataRouter = new Hono2();
async function getTenantWorkflowGraph(env, name) { async function getTenantWorkflowGraph(env, name) {
const raw2 = await env.WEBHOOKS.get(`${portalTenant(env)}:wf:${name}`, "text"); const raw2 = await env.WEBHOOKS.get(`${knowledgeOwner(env)}:wf:${name}`, "text");
if (!raw2) return null; if (!raw2) return null;
try { try {
const rec = JSON.parse(raw2); const rec = JSON.parse(raw2);
@@ -15033,7 +15067,7 @@ function findBestNodeMatch(searchTerm, nodeNames) {
} }
async function tripletCount(env, owner) { async function tripletCount(env, owner) {
try { try {
const res = await kbdbFetch(env, `/records/triplet-stats?owner_id=${encodeURIComponent(owner)}`); const res = await kbdbFetch(env, `/records/triplet-stats?${owner === null ? censusQueryAllTenants() : ownerQuery(owner)}`);
if (!res.ok) return null; if (!res.ok) return null;
const body = await res.json().catch(() => null); const body = await res.json().catch(() => null);
if (!body || !Array.isArray(body.stats)) return null; if (!body || !Array.isArray(body.stats)) return null;
@@ -15050,11 +15084,11 @@ async function tripletCount(env, owner) {
async function tripletCensus(env, tenant2) { async function tripletCensus(env, tenant2) {
const owned = await tripletCount(env, tenant2); const owned = await tripletCount(env, tenant2);
if (owned !== 0) return { owned, any: null }; if (owned !== 0) return { owned, any: null };
return { owned, any: await tripletCount(env, "") }; return { owned, any: await tripletCount(env, null) };
} }
async function fuzzyFindNode(env, tenant2, searchTerm) { async function fuzzyFindNode(env, tenant2, searchTerm) {
try { try {
const res = await kbdbFetch(env, `/records/by-template/triplet?owner_id=${encodeURIComponent(tenant2)}`); const res = await kbdbFetch(env, `/records/by-template/triplet?${ownerQuery(tenant2)}`);
if (!res.ok) return null; if (!res.ok) return null;
const body = await res.json().catch(() => null); const body = await res.json().catch(() => null);
if (!body || !Array.isArray(body.records)) return null; if (!body || !Array.isArray(body.records)) return null;
@@ -15082,7 +15116,7 @@ portalDataRouter.get(
if (libraries.length === 0) { if (libraries.length === 0) {
return c.json({ success: true, entries: [], count: 0, mode: "keyword", note: "\u6B64\u5E33\u865F\u5C1A\u672A\u88AB\u6388\u6B0A\u4EFB\u4F55\u77E5\u8B58\u5EAB\uFF0C\u8ACB\u806F\u7D61\u7BA1\u7406\u54E1\u3002" }); return c.json({ success: true, entries: [], count: 0, mode: "keyword", note: "\u6B64\u5E33\u865F\u5C1A\u672A\u88AB\u6388\u6B0A\u4EFB\u4F55\u77E5\u8B58\u5EAB\uFF0C\u8ACB\u806F\u7D61\u7BA1\u7406\u54E1\u3002" });
} }
const params = new URLSearchParams({ q, owner_id: portalTenant(c.env) }); const params = new URLSearchParams({ q, owner_id: ownerField(knowledgeOwner(c.env)) });
if (!libraries.includes("*")) params.set("library", libraries.join(",")); if (!libraries.includes("*")) params.set("library", libraries.join(","));
if (c.req.query("mode") === "semantic") { if (c.req.query("mode") === "semantic") {
params.set("mode", "semantic"); params.set("mode", "semantic");
@@ -15118,7 +15152,7 @@ portalDataRouter.get(
const body = await res.json(); const body = await res.json();
const entry = body.entry; const entry = body.entry;
if (!entry) return notFound(c); if (!entry) return notFound(c);
if ((entry.owner_id ?? "") !== portalTenant(c.env)) return notFound(c); if (!isOwnedBy(entry.owner_id, knowledgeOwner(c.env))) return notFound(c);
if (!canReadLibrary(libraries, entryLibrary(entry))) return notFound(c); if (!canReadLibrary(libraries, entryLibrary(entry))) return notFound(c);
return c.json({ success: true, entry }); return c.json({ success: true, entry });
}) })
@@ -15133,7 +15167,7 @@ portalDataRouter.get(
return c.json({ error: "\u7121\u77E5\u8B58\u5716\u8B5C\u6AA2\u8996\u6B0A\u9650" }, 403); return c.json({ error: "\u7121\u77E5\u8B58\u5716\u8B5C\u6AA2\u8996\u6B0A\u9650" }, 403);
} }
const nodeName = normalizeCjkQuery(c.req.param("name")); const nodeName = normalizeCjkQuery(c.req.param("name"));
const tenant2 = portalTenant(c.env); const tenant2 = knowledgeOwner(c.env);
const wfGraph = await getTenantWorkflowGraph(c.env, "graph_neighbors"); const wfGraph = await getTenantWorkflowGraph(c.env, "graph_neighbors");
if (wfGraph) { if (wfGraph) {
const depthRaw = c.req.query("depth") ?? ""; const depthRaw = c.req.query("depth") ?? "";
@@ -15187,9 +15221,9 @@ portalDataRouter.get(
if (!await hasGraphAccess(c.env, libraries)) { if (!await hasGraphAccess(c.env, libraries)) {
return c.json({ error: "\u7121\u77E5\u8B58\u5716\u8B5C\u6AA2\u8996\u6B0A\u9650" }, 403); return c.json({ error: "\u7121\u77E5\u8B58\u5716\u8B5C\u6AA2\u8996\u6B0A\u9650" }, 403);
} }
const tenant2 = portalTenant(c.env); const tenant2 = knowledgeOwner(c.env);
const [res, census] = await Promise.all([ const [res, census] = await Promise.all([
kbdbFetch(c.env, `/records/by-template/triplet?owner_id=${encodeURIComponent(tenant2)}&limit=500`), kbdbFetch(c.env, `/records/by-template/triplet?${ownerQuery(tenant2)}&limit=500`),
tripletCensus(c.env, tenant2) tripletCensus(c.env, tenant2)
]); ]);
const tripletsTotal = census.owned; const tripletsTotal = census.owned;
@@ -15260,7 +15294,7 @@ portalDataRouter.get(
wfGraph, wfGraph,
{ question }, { question },
"rag_chat", "rag_chat",
portalTenant(c.env), knowledgeOwner(c.env),
c.executionCtx c.executionCtx
); );
if (!result.success) { if (!result.success) {
@@ -15336,7 +15370,7 @@ portalDataRouter.get(
if (!workflowsVisible(c.env, auth.user.values.role ?? "user")) { if (!workflowsVisible(c.env, auth.user.values.role ?? "user")) {
return c.json({ error: "\u9700\u8981 admin \u6B0A\u9650" }, 403); return c.json({ error: "\u9700\u8981 admin \u6B0A\u9650" }, 403);
} }
const tenant2 = portalTenant(c.env); const tenant2 = knowledgeOwner(c.env);
const prefix = `${tenant2}:wf:`; const prefix = `${tenant2}:wf:`;
const list = await c.env.WEBHOOKS.list({ prefix }); const list = await c.env.WEBHOOKS.list({ prefix });
const workflows = await Promise.all( const workflows = await Promise.all(
@@ -15358,7 +15392,7 @@ portalDataRouter.get(
let last_execution = null; let last_execution = null;
const execRes = await kbdbFetch( const execRes = await kbdbFetch(
c.env, c.env,
`/execution-log/latest?${new URLSearchParams({ workflow_id: name, owner_id: tenant2 }).toString()}` `/execution-log/latest?${new URLSearchParams({ workflow_id: name, owner_id: ownerField(tenant2) }).toString()}`
); );
const execBody = await execRes.json().catch(() => null); const execBody = await execRes.json().catch(() => null);
if (execRes.ok && execBody?.success && execBody.execution) { if (execRes.ok && execBody?.success && execBody.execution) {
@@ -15375,7 +15409,7 @@ function recordLibrary(values) {
return typeof lib === "string" && lib.trim() ? lib.trim() : null; return typeof lib === "string" && lib.trim() ? lib.trim() : null;
} }
function canReadRecord(rec, tenant2, libraries) { function canReadRecord(rec, tenant2, libraries) {
if ((rec.owner_id ?? "") !== tenant2) return false; if (!isOwnedBy(rec.owner_id, tenant2)) return false;
const lib = recordLibrary(rec.values); const lib = recordLibrary(rec.values);
return lib === null || canReadLibrary(libraries, lib); return lib === null || canReadLibrary(libraries, lib);
} }
@@ -15386,9 +15420,17 @@ portalDataRouter.get(
if (!auth.ok) return auth.res; if (!auth.ok) return auth.res;
const libraries = parseLibraries(auth.user.values.libraries); const libraries = parseLibraries(auth.user.values.libraries);
if (libraries.length === 0) { if (libraries.length === 0) {
return c.json({ success: true, libraries: [], count: 0, note: "\u6B64\u5E33\u865F\u5C1A\u672A\u88AB\u6388\u6B0A\u4EFB\u4F55\u77E5\u8B58\u5EAB\uFF0C\u8ACB\u806F\u7D61\u7BA1\u7406\u54E1\u3002" }); return c.json({
success: true,
libraries: [],
count: 0,
empty_confirmed: true,
empty_reason: "no_library_grant",
note: "\u6B64\u5E33\u865F\u5C1A\u672A\u88AB\u6388\u6B0A\u4EFB\u4F55\u77E5\u8B58\u5EAB\uFF0C\u8ACB\u806F\u7D61\u7BA1\u7406\u54E1\u3002"
});
} }
const res = await kbdbFetch(c.env, `/map?owner_id=${encodeURIComponent(portalTenant(c.env))}`); const tenant2 = knowledgeOwner(c.env);
const res = await kbdbFetch(c.env, `/map?${ownerQuery(tenant2)}`);
if (!res.ok) { if (!res.ok) {
return new Response(res.body, { status: res.status, headers: { "Content-Type": "application/json" } }); return new Response(res.body, { status: res.status, headers: { "Content-Type": "application/json" } });
} }
@@ -15399,7 +15441,49 @@ portalDataRouter.get(
const allowed = body.libraries.filter( const allowed = body.libraries.filter(
(l) => typeof l?.library === "string" && canReadLibrary(libraries, l.library) (l) => typeof l?.library === "string" && canReadLibrary(libraries, l.library)
); );
return c.json({ success: true, libraries: allowed, count: allowed.length }); if (allowed.length > 0) {
return c.json({ success: true, libraries: allowed, count: allowed.length, empty_confirmed: false, empty_reason: null });
}
if (body.libraries.length > 0) {
return c.json({
success: true,
libraries: [],
count: 0,
empty_confirmed: true,
empty_reason: "filtered_out",
note: "\u9019\u500B\u5E33\u865F\u76EE\u524D\u6C92\u6709\u4EFB\u4F55\u77E5\u8B58\u5EAB\u7684\u6AA2\u8996\u6B0A\u9650\uFF0C\u8ACB\u806F\u7D61\u7BA1\u7406\u54E1\u958B\u901A\u3002"
});
}
const census = await tripletCensus(c.env, tenant2);
if (census.owned === null || census.owned === 0 && census.any === null) {
return c.json({
success: true,
libraries: [],
count: 0,
empty_confirmed: false,
empty_reason: "unreadable",
note: "\u8B80\u4E0D\u5230\u77E5\u8B58\u5EAB\u7684\u7D71\u8A08\uFF0C\u7121\u6CD5\u78BA\u8A8D\u5EAB\u88E1\u6709\u6C92\u6709\u6771\u897F\u2014\u2014\u9019\u4E0D\u662F\u300C\u9084\u6C92\u6709\u77E5\u8B58\u300D\uFF0C\u662F\u9019\u6B21\u8B80\u53D6\u5931\u6557\u3002\u8ACB\u7A0D\u5F8C\u91CD\u6574\u6216\u901A\u77E5\u7BA1\u7406\u54E1\u3002"
});
}
if (census.owned === 0 && (census.any ?? 0) > 0) {
return c.json({
success: true,
libraries: [],
count: 0,
empty_confirmed: false,
empty_reason: "scope_mismatch",
instance_triplet_count: census.any,
note: `\u8B80\u4E0D\u5230\u4F60\u9019\u500B\u5E33\u865F\u7BC4\u570D\u5167\u7684\u85CF\u66F8\u2014\u2014\u4F46\u9019\u53F0\u5BE6\u4F8B\u88E1\u6709 ${census.any} \u689D\u77E5\u8B58\u95DC\u806F\u3002\u9019\u4E0D\u662F\u300C\u9084\u6C92\u6709\u77E5\u8B58\u300D\uFF0C\u4E0D\u7528\u53BB\u91CD\u65B0\u4E0A\u50B3\uFF1B\u6BD4\u8F03\u50CF\u77E5\u8B58\u7684\u6B78\u5C6C\u547D\u540D\u7A7A\u9593\u5C0D\u4E0D\u4E0A\u3002\u8ACB\u901A\u77E5\u7BA1\u7406\u54E1\u8DD1\u4E00\u6B21 \`acr update\`\uFF08\u6703\u628A\u4F60\u5B89\u88DD\u6642\u7684\u547D\u540D\u7A7A\u9593\u540C\u6B65\u7D66\u96F2\u7AEF\uFF09\uFF0C\u6216\u6AA2\u67E5 ARCRUN_NAMESPACE \u8A2D\u5B9A\u3002`
});
}
return c.json({
success: true,
libraries: [],
count: 0,
empty_confirmed: true,
empty_reason: "confirmed_empty",
note: "\u77E5\u8B58\u5EAB\u9084\u6C92\u6709\u4EFB\u4F55\u5167\u5BB9\u2014\u2014\u4E0A\u50B3\u6587\u4EF6\u5F8C\u5C31\u6703\u51FA\u73FE\u5728\u9019\u88E1\u3002"
});
}) })
); );
portalDataRouter.get( portalDataRouter.get(
@@ -15412,7 +15496,7 @@ portalDataRouter.get(
if (!canReadLibrary(libraries, library)) return notFound(c); if (!canReadLibrary(libraries, library)) return notFound(c);
const res = await kbdbFetch( const res = await kbdbFetch(
c.env, c.env,
`/map/${encodeURIComponent(library)}?owner_id=${encodeURIComponent(portalTenant(c.env))}` `/map/${encodeURIComponent(library)}?${ownerQuery(knowledgeOwner(c.env))}`
); );
if (res.status === 404) return notFound(c); if (res.status === 404) return notFound(c);
if (!res.ok) return c.json({ error: `KBDB \u56DE\u932F\uFF08HTTP ${res.status}\uFF09` }, 502); if (!res.ok) return c.json({ error: `KBDB \u56DE\u932F\uFF08HTTP ${res.status}\uFF09` }, 502);
@@ -15445,7 +15529,7 @@ portalDataRouter.post(
name: body.name, name: body.name,
slots: body.slots, slots: body.slots,
description: typeof body.description === "string" ? body.description : void 0, description: typeof body.description === "string" ? body.description : void 0,
created_by: portalTenant(c.env) created_by: knowledgeOwner(c.env)
}) })
}); });
return new Response(res.body, { status: res.status, headers: { "Content-Type": "application/json" } }); return new Response(res.body, { status: res.status, headers: { "Content-Type": "application/json" } });
@@ -15458,10 +15542,10 @@ portalDataRouter.get(
if (!auth.ok) return auth.res; if (!auth.ok) return auth.res;
const libraries = parseLibraries(auth.user.values.libraries); const libraries = parseLibraries(auth.user.values.libraries);
if (libraries.length === 0) return c.json({ success: true, records: [], count: 0 }); if (libraries.length === 0) return c.json({ success: true, records: [], count: 0 });
const tenant2 = portalTenant(c.env); const tenant2 = knowledgeOwner(c.env);
const res = await kbdbFetch( const res = await kbdbFetch(
c.env, c.env,
`/records/by-template/${encodeURIComponent(c.req.param("template"))}?owner_id=${encodeURIComponent(tenant2)}` `/records/by-template/${encodeURIComponent(c.req.param("template"))}?${ownerQuery(tenant2)}`
); );
if (!res.ok) return c.json({ error: `KBDB \u56DE\u932F\uFF08HTTP ${res.status}\uFF09` }, 502); if (!res.ok) return c.json({ error: `KBDB \u56DE\u932F\uFF08HTTP ${res.status}\uFF09` }, 502);
const body = await res.json().catch(() => null); const body = await res.json().catch(() => null);
@@ -15485,7 +15569,7 @@ portalDataRouter.get(
const body = await res.json().catch(() => null); const body = await res.json().catch(() => null);
const record = body?.record; const record = body?.record;
if (!record) return notFound(c); if (!record) return notFound(c);
if (!canReadRecord(record, portalTenant(c.env), libraries)) return notFound(c); if (!canReadRecord(record, knowledgeOwner(c.env), libraries)) return notFound(c);
return c.json({ success: true, record }); return c.json({ success: true, record });
}) })
); );
@@ -15510,7 +15594,7 @@ portalDataRouter.post(
const res = await kbdbFetch(c.env, "/records", { const res = await kbdbFetch(c.env, "/records", {
method: "POST", method: "POST",
headers: { "Content-Type": "application/json" }, headers: { "Content-Type": "application/json" },
body: JSON.stringify({ template: body.template, values, owner_id: portalTenant(c.env) }) body: JSON.stringify({ template: body.template, values, owner_id: ownerField(knowledgeOwner(c.env)) })
}); });
return new Response(res.body, { status: res.status, headers: { "Content-Type": "application/json" } }); return new Response(res.body, { status: res.status, headers: { "Content-Type": "application/json" } });
}) })
@@ -15520,7 +15604,7 @@ portalDataRouter.get(
(c) => run(c, async () => { (c) => run(c, async () => {
const auth = await requirePortalUser(c); const auth = await requirePortalUser(c);
if (!auth.ok) return auth.res; if (!auth.ok) return auth.res;
const tenant2 = portalTenant(c.env); const tenant2 = knowledgeOwner(c.env);
const core = await buildDiagnostics(c.env, tenant2); const core = await buildDiagnostics(c.env, tenant2);
return c.json({ return c.json({
generated_at: (/* @__PURE__ */ new Date()).toISOString(), generated_at: (/* @__PURE__ */ new Date()).toISOString(),
@@ -15570,10 +15654,10 @@ app.route("/", consoleAuthRouter);
app.route("/", consoleDashboardRouter); app.route("/", consoleDashboardRouter);
app.route("/", portalRouter); app.route("/", portalRouter);
app.route("/", portalDataRouter); app.route("/", portalDataRouter);
var index_default = { var src_default = {
fetch: app.fetch, fetch: app.fetch,
scheduled: handleScheduled scheduled: handleScheduled
}; };
export { export {
index_default as default src_default as default
}; };
@@ -1427,7 +1427,7 @@ var Hono = class _Hono {
var emptyParam = []; var emptyParam = [];
function match(method, path) { function match(method, path) {
const matchers = this.buildAllMatchers(); const matchers = this.buildAllMatchers();
const match2 = ((method2, path2) => { const match2 = (method2, path2) => {
const matcher = matchers[method2] || matchers[METHOD_NAME_ALL]; const matcher = matchers[method2] || matchers[METHOD_NAME_ALL];
const staticMatch = matcher[2][path2]; const staticMatch = matcher[2][path2];
if (staticMatch) { if (staticMatch) {
@@ -1439,7 +1439,7 @@ function match(method, path) {
} }
const index = match3.indexOf("", 1); const index = match3.indexOf("", 1);
return [matcher[1][index], match3]; return [matcher[1][index], match3];
}); };
this.match = match2; this.match = match2;
return match2(method, path); return match2(method, path);
} }
@@ -2522,7 +2522,7 @@ app.post("/", async (c) => {
); );
} }
}); });
var index_default = app; var src_default = app;
async function runWasm(input) { async function runWasm(input) {
const hostFunctions = { const hostFunctions = {
http_request: async (url, method, headersJson, body) => { http_request: async (url, method, headersJson, body) => {
@@ -2568,5 +2568,5 @@ async function runWasm(input) {
return JSON.parse(stdout); return JSON.parse(stdout);
} }
export { export {
index_default as default src_default as default
}; };
+4 -4
View File
@@ -1444,7 +1444,7 @@ var Hono = class _Hono {
var emptyParam = []; var emptyParam = [];
function match(method, path) { function match(method, path) {
const matchers = this.buildAllMatchers(); const matchers = this.buildAllMatchers();
const match2 = ((method2, path2) => { const match2 = (method2, path2) => {
const matcher = matchers[method2] || matchers[METHOD_NAME_ALL]; const matcher = matchers[method2] || matchers[METHOD_NAME_ALL];
const staticMatch = matcher[2][path2]; const staticMatch = matcher[2][path2];
if (staticMatch) { if (staticMatch) {
@@ -1456,7 +1456,7 @@ function match(method, path) {
} }
const index = match3.indexOf("", 1); const index = match3.indexOf("", 1);
return [matcher[1][index], match3]; return [matcher[1][index], match3];
}); };
this.match = match2; this.match = match2;
return match2(method, path); return match2(method, path);
} }
@@ -4157,7 +4157,7 @@ app.route("/recipe-stats", recipeStatRoutes);
app.route("/execution-log", executionLogRoutes); app.route("/execution-log", executionLogRoutes);
app.route("/embed", embedRoutes); app.route("/embed", embedRoutes);
app.route("/map", mapRoutes); app.route("/map", mapRoutes);
var index_default = app; var src_default = app;
export { export {
index_default as default src_default as default
}; };
+34 -37
View File
@@ -5,11 +5,7 @@ var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf; var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty; var __hasOwnProp = Object.prototype.hasOwnProperty;
var __commonJS = (cb, mod) => function __require() { var __commonJS = (cb, mod) => function __require() {
try { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
} catch (e) {
throw mod = 0, e;
}
}; };
var __export = (target, all) => { var __export = (target, all) => {
for (var name in all) for (var name in all)
@@ -8227,7 +8223,7 @@ var Hono = class _Hono {
var emptyParam = []; var emptyParam = [];
function match(method, path) { function match(method, path) {
const matchers = this.buildAllMatchers(); const matchers = this.buildAllMatchers();
const match2 = ((method2, path2) => { const match2 = (method2, path2) => {
const matcher = matchers[method2] || matchers[METHOD_NAME_ALL]; const matcher = matchers[method2] || matchers[METHOD_NAME_ALL];
const staticMatch = matcher[2][path2]; const staticMatch = matcher[2][path2];
if (staticMatch) { if (staticMatch) {
@@ -8239,7 +8235,7 @@ function match(method, path) {
} }
const index = match3.indexOf("", 1); const index = match3.indexOf("", 1);
return [matcher[1][index], match3]; return [matcher[1][index], match3];
}); };
this.match = match2; this.match = match2;
return match2(method, path); return match2(method, path);
} }
@@ -12963,7 +12959,7 @@ ZodNaN.create = (params) => {
...processCreateParams(params) ...processCreateParams(params)
}); });
}; };
var BRAND = /* @__PURE__ */ Symbol("zod_brand"); var BRAND = Symbol("zod_brand");
var ZodBranded = class extends ZodType { var ZodBranded = class extends ZodType {
_parse(input) { _parse(input) {
const { ctx } = this._processInputParams(input); const { ctx } = this._processInputParams(input);
@@ -13165,14 +13161,14 @@ var ostring = () => stringType().optional();
var onumber = () => numberType().optional(); var onumber = () => numberType().optional();
var oboolean = () => booleanType().optional(); var oboolean = () => booleanType().optional();
var coerce = { var coerce = {
string: ((arg) => ZodString.create({ ...arg, coerce: true })), string: (arg) => ZodString.create({ ...arg, coerce: true }),
number: ((arg) => ZodNumber.create({ ...arg, coerce: true })), number: (arg) => ZodNumber.create({ ...arg, coerce: true }),
boolean: ((arg) => ZodBoolean.create({ boolean: (arg) => ZodBoolean.create({
...arg, ...arg,
coerce: true coerce: true
})), }),
bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })), bigint: (arg) => ZodBigInt.create({ ...arg, coerce: true }),
date: ((arg) => ZodDate.create({ ...arg, coerce: true })) date: (arg) => ZodDate.create({ ...arg, coerce: true })
}; };
var NEVER = INVALID; var NEVER = INVALID;
@@ -13223,6 +13219,7 @@ function $constructor(name, initializer3, params) {
Object.defineProperty(_, "name", { value: name }); Object.defineProperty(_, "name", { value: name });
return _; return _;
} }
var $brand = Symbol("zod_brand");
var $ZodAsyncError = class extends Error { var $ZodAsyncError = class extends Error {
constructor() { constructor() {
super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`); super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);
@@ -15726,6 +15723,8 @@ function en_default2() {
} }
// mcp/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/registries.js // 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 { var $ZodRegistry = class {
constructor() { constructor() {
this._map = /* @__PURE__ */ new Map(); this._map = /* @__PURE__ */ new Map();
@@ -17003,10 +17002,10 @@ var ZodMiniType = /* @__PURE__ */ $constructor("ZodMiniType", (inst, def) => {
}; };
inst.clone = (_def, params) => clone(inst, _def, params); inst.clone = (_def, params) => clone(inst, _def, params);
inst.brand = () => inst; inst.brand = () => inst;
inst.register = ((reg, meta) => { inst.register = (reg, meta) => {
reg.add(inst, meta); reg.add(inst, meta);
return inst; return inst;
}); };
}); });
var ZodMiniObject = /* @__PURE__ */ $constructor("ZodMiniObject", (inst, def) => { var ZodMiniObject = /* @__PURE__ */ $constructor("ZodMiniObject", (inst, def) => {
$ZodObject.init(inst, def); $ZodObject.init(inst, def);
@@ -17269,10 +17268,10 @@ var ZodType2 = /* @__PURE__ */ $constructor("ZodType", (inst, def) => {
}; };
inst.clone = (def2, params) => clone(inst, def2, params); inst.clone = (def2, params) => clone(inst, def2, params);
inst.brand = () => inst; inst.brand = () => inst;
inst.register = ((reg, meta) => { inst.register = (reg, meta) => {
reg.add(inst, meta); reg.add(inst, meta);
return inst; return inst;
}); };
inst.parse = (data, params) => parse2(inst, data, params, { callee: inst.parse }); inst.parse = (data, params) => parse2(inst, data, params, { callee: inst.parse });
inst.safeParse = (data, params) => safeParse3(inst, data, params); inst.safeParse = (data, params) => safeParse3(inst, data, params);
inst.parseAsync = async (data, params) => parseAsync2(inst, data, params, { callee: inst.parseAsync }); inst.parseAsync = async (data, params) => parseAsync2(inst, data, params, { callee: inst.parseAsync });
@@ -19244,13 +19243,11 @@ function assertCompleteRequestPrompt(request) {
if (request.params.ref.type !== "ref/prompt") { if (request.params.ref.type !== "ref/prompt") {
throw new TypeError(`Expected CompleteRequestPrompt, but got ${request.params.ref.type}`); throw new TypeError(`Expected CompleteRequestPrompt, but got ${request.params.ref.type}`);
} }
void request;
} }
function assertCompleteRequestResourceTemplate(request) { function assertCompleteRequestResourceTemplate(request) {
if (request.params.ref.type !== "ref/resource") { if (request.params.ref.type !== "ref/resource") {
throw new TypeError(`Expected CompleteRequestResourceTemplate, but got ${request.params.ref.type}`); throw new TypeError(`Expected CompleteRequestResourceTemplate, but got ${request.params.ref.type}`);
} }
void request;
} }
var CompleteResultSchema = ResultSchema.extend({ var CompleteResultSchema = ResultSchema.extend({
completion: looseObject({ completion: looseObject({
@@ -19403,7 +19400,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 // 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 = /* @__PURE__ */ Symbol("Let zodToJsonSchema decide on which parser to use"); var ignoreOverride = Symbol("Let zodToJsonSchema decide on which parser to use");
var defaultOptions = { var defaultOptions = {
name: void 0, name: void 0,
$refStrategy: "root", $refStrategy: "root",
@@ -22379,7 +22376,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 // 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 = /* @__PURE__ */ Symbol.for("mcp.completable"); var COMPLETABLE_SYMBOL = Symbol.for("mcp.completable");
function isCompletable(schema4) { function isCompletable(schema4) {
return !!schema4 && typeof schema4 === "object" && COMPLETABLE_SYMBOL in schema4; return !!schema4 && typeof schema4 === "object" && COMPLETABLE_SYMBOL in schema4;
} }
@@ -24694,13 +24691,13 @@ function registerAllIntrospectionTools(server, env) {
} }
// mcp/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/identity.js // mcp/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/identity.js
var ALIAS = /* @__PURE__ */ Symbol.for("yaml.alias"); var ALIAS = Symbol.for("yaml.alias");
var DOC = /* @__PURE__ */ Symbol.for("yaml.document"); var DOC = Symbol.for("yaml.document");
var MAP = /* @__PURE__ */ Symbol.for("yaml.map"); var MAP = Symbol.for("yaml.map");
var PAIR = /* @__PURE__ */ Symbol.for("yaml.pair"); var PAIR = Symbol.for("yaml.pair");
var SCALAR = /* @__PURE__ */ Symbol.for("yaml.scalar"); var SCALAR = Symbol.for("yaml.scalar");
var SEQ = /* @__PURE__ */ Symbol.for("yaml.seq"); var SEQ = Symbol.for("yaml.seq");
var NODE_TYPE = /* @__PURE__ */ Symbol.for("yaml.node.type"); var NODE_TYPE = Symbol.for("yaml.node.type");
var isAlias = (node) => !!node && typeof node === "object" && node[NODE_TYPE] === ALIAS; var isAlias = (node) => !!node && typeof node === "object" && node[NODE_TYPE] === ALIAS;
var isDocument = (node) => !!node && typeof node === "object" && node[NODE_TYPE] === DOC; var isDocument = (node) => !!node && typeof node === "object" && node[NODE_TYPE] === DOC;
var isMap = (node) => !!node && typeof node === "object" && node[NODE_TYPE] === MAP; var isMap = (node) => !!node && typeof node === "object" && node[NODE_TYPE] === MAP;
@@ -24730,9 +24727,9 @@ function isNode(node) {
var hasAnchor = (node) => (isScalar(node) || isCollection(node)) && !!node.anchor; var hasAnchor = (node) => (isScalar(node) || isCollection(node)) && !!node.anchor;
// mcp/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/visit.js // mcp/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/visit.js
var BREAK = /* @__PURE__ */ Symbol("break visit"); var BREAK = Symbol("break visit");
var SKIP = /* @__PURE__ */ Symbol("skip children"); var SKIP = Symbol("skip children");
var REMOVE = /* @__PURE__ */ Symbol("remove node"); var REMOVE = Symbol("remove node");
function visit(node, visitor) { function visit(node, visitor) {
const visitor_ = initVisitor(visitor); const visitor_ = initVisitor(visitor);
if (isDocument(node)) { if (isDocument(node)) {
@@ -29325,9 +29322,9 @@ ${end.comment}` : end.comment;
}; };
// mcp/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/parse/cst-visit.js // mcp/node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/parse/cst-visit.js
var BREAK2 = /* @__PURE__ */ Symbol("break visit"); var BREAK2 = Symbol("break visit");
var SKIP2 = /* @__PURE__ */ Symbol("skip children"); var SKIP2 = Symbol("skip children");
var REMOVE2 = /* @__PURE__ */ Symbol("remove item"); var REMOVE2 = Symbol("remove item");
function visit2(cst, visitor) { function visit2(cst, visitor) {
if ("type" in cst && cst.type === "document") if ("type" in cst && cst.type === "document")
cst = { start: cst.start, value: cst.value }; cst = { start: cst.start, value: cst.value };
@@ -33599,7 +33596,7 @@ app.post("/", partnerAuthMiddleware, async (c) => {
const identity = resolveKnowledgeIdentity(c.get("auth_path"), c.get("portal")); const identity = resolveKnowledgeIdentity(c.get("auth_path"), c.get("portal"));
return handleMcpRequest(c.req.raw, c.env, orgNamespace, partnerToken, identity); return handleMcpRequest(c.req.raw, c.env, orgNamespace, partnerToken, identity);
}); });
var index_default = _app; var src_default = _app;
export { export {
index_default as default src_default as default
}; };
+13 -13
View File
@@ -1,18 +1,18 @@
{ {
"schema": 1, "schema": 1,
"built_for": "arcrun-tier2-worker-artifacts", "built_for": "arcrun-tier2-worker-artifacts",
"generated_at": "2026-08-12T14:22:56.880Z", "generated_at": "2026-08-12T16:16:33.433Z",
"repo_head": "21293568d550ab7ef50cec2020165d8bf4376104", "repo_head": "b223a698844be289c1b01f99eb34a8e2ac85bb74",
"repo_dirty": false, "repo_dirty": false,
"workers": [ "workers": [
{ {
"name": "arcrun-cypher-executor", "name": "arcrun-cypher-executor",
"source_dir": "cypher-executor", "source_dir": "cypher-executor",
"source_commit": "53b05c6d3d4a5a02661880dd5565fa9feb743bb6", "source_commit": "b223a698844be289c1b01f99eb34a8e2ac85bb74",
"main_module": "worker.mjs", "main_module": "worker.mjs",
"main_file": "arcrun-cypher-executor/worker.mjs", "main_file": "arcrun-cypher-executor/worker.mjs",
"js_bytes": 584721, "js_bytes": 588397,
"content_sha256": "b7c810d7654c05d197abe9a37acce2ed5f77e1af09595d5b4316b69166edf11a", "content_sha256": "e0026a23792f8b6b02e35c91081604b9a761c608a2cae0e6ee8ab0f34a484501",
"modules": [], "modules": [],
"compat_date": "2025-02-19", "compat_date": "2025-02-19",
"compat_flags": [ "compat_flags": [
@@ -61,8 +61,8 @@
"source_commit": "f87d0e92f49690253e7c89c5badc82a08eb5d21b", "source_commit": "f87d0e92f49690253e7c89c5badc82a08eb5d21b",
"main_module": "worker.mjs", "main_module": "worker.mjs",
"main_file": "arcrun-kbdb/worker.mjs", "main_file": "arcrun-kbdb/worker.mjs",
"js_bytes": 149797, "js_bytes": 149791,
"content_sha256": "8b23853cbc88aee0ca15ef20ca46e92bd8e75064cd311af2847f4d51811960b1", "content_sha256": "9c6d41895d78cbf3048fb539690591c86071b7d6ebf7fb0b8b51607c6b1f8ee9",
"modules": [], "modules": [],
"compat_date": "2025-02-19", "compat_date": "2025-02-19",
"compat_flags": [ "compat_flags": [
@@ -90,8 +90,8 @@
"source_commit": "1e85dfb49b0e8d81c0854781d93ee4e6a300c7b3", "source_commit": "1e85dfb49b0e8d81c0854781d93ee4e6a300c7b3",
"main_module": "worker.mjs", "main_module": "worker.mjs",
"main_file": "arcrun-http-request/worker.mjs", "main_file": "arcrun-http-request/worker.mjs",
"js_bytes": 80079, "js_bytes": 80073,
"content_sha256": "cdd97364f277587cbade69e09bb40812c68f26a1e8bc9aa632c65b1b962b0b85", "content_sha256": "9a9dcb71879a7bdfd9fec1bd94eb9742e12cb63733d822ce63eeb1be30008d15",
"modules": [ "modules": [
{ {
"name": "component.wasm", "name": "component.wasm",
@@ -122,8 +122,8 @@
"source_commit": "621cb8d948d61be6202063fd02effb3f538437fe", "source_commit": "621cb8d948d61be6202063fd02effb3f538437fe",
"main_module": "worker.mjs", "main_module": "worker.mjs",
"main_file": "arcrun-code/worker.mjs", "main_file": "arcrun-code/worker.mjs",
"js_bytes": 153758, "js_bytes": 153671,
"content_sha256": "751634a3fc9a99cc2da662026818d754c48f031d10bff3b3be2d3a8ee2311bd6", "content_sha256": "285a7406ec694ae47dccfaf48517f712c74d207a1689dffa15c39f1555b45be5",
"modules": [ "modules": [
{ {
"name": "quickjs.wasm", "name": "quickjs.wasm",
@@ -151,8 +151,8 @@
"source_commit": "10d150ac2b4385af95a457f3c411430c4a146cf9", "source_commit": "10d150ac2b4385af95a457f3c411430c4a146cf9",
"main_module": "worker.mjs", "main_module": "worker.mjs",
"main_file": "arcrun-mcp/worker.mjs", "main_file": "arcrun-mcp/worker.mjs",
"js_bytes": 1179487, "js_bytes": 1179229,
"content_sha256": "1cd4c4d079d72bf7cba7c490ba6a88476f70b3ea51af7e5c93f9a184ae3c0ce6", "content_sha256": "3ebc0d441bc04ae56a1205507da701f93bed9efa9b1e53c1777c04cbef5bdb67",
"modules": [], "modules": [],
"compat_date": "2024-11-27", "compat_date": "2024-11-27",
"compat_flags": [ "compat_flags": [