From ba291f83d43850635fb9bbf60da927638477efb3 Mon Sep 17 00:00:00 2001 From: richblack Date: Fri, 31 Jul 2026 15:35:15 +0800 Subject: [PATCH] =?UTF-8?q?t161+t162=EF=BC=88Arcrun@9f777ff=EF=BC=89?= =?UTF-8?q?=EF=BC=9A/health=20=E5=90=90=20bundle=5Fversion=EF=BC=88?= =?UTF-8?q?=E8=A7=A3=E5=81=87=E8=AD=A6=E5=A0=B1=E8=BF=B4=E5=9C=88=EF=BC=89?= =?UTF-8?q?=EF=BC=8Bportal=20session=20=E9=81=8E=E6=9C=9F=E8=AA=AA?= =?UTF-8?q?=E5=8E=9F=E5=9B=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- manifest.json | 6 +++--- tier2/cypher/index.js | 10 ++++++---- tier2/ui/index.js | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/manifest.json b/manifest.json index 8955266..aa2aabb 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "schema": "arcrun-rag-bundles/v1", "built": "2026-07-31", - "source": "Arcrun@341bcb1", + "source": "Arcrun@9f777ff", "core": [ { "name": "arcrun-array-ops", @@ -503,7 +503,7 @@ "tier": 2, "main_file": "tier2/cypher/index.js", "main_module": "index.js", - "sha256": "0761688567af20a0ccaca1ee07258e5500514703ae1b40d74e5bf6575aad452f", + "sha256": "aa65d7fa72ce4684de4f0289694bac0a988406086c09ebceda4098fded7008be", "compat_date": "2025-02-19", "compat_flags": [ "nodejs_compat", @@ -634,7 +634,7 @@ "tier": 2, "main_file": "tier2/ui/index.js", "main_module": "index.js", - "sha256": "2e6ce19476444e30ec4c0cb2a6869dbb9c50db3d0b82e18adf05830a05514cba", + "sha256": "30ea47698513e66df985cd54a0d3235ca226a8300326c70b2b358f31bc81e44d", "compat_date": "2026-07-01", "compat_flags": [], "modules": [], diff --git a/tier2/cypher/index.js b/tier2/cypher/index.js index 24ea982..6b83464 100644 --- a/tier2/cypher/index.js +++ b/tier2/cypher/index.js @@ -9876,10 +9876,12 @@ init_virtual_unenv_global_polyfill_cloudflare_unenv_preset_node_console(); init_performance2(); init_dist(); var healthRouter = new Hono2(); -healthRouter.get( - "/health", - (c) => c.json({ ok: true }) -); +healthRouter.get("/health", (c) => { + const bundleVersion = c.env.ARCRUN_BUNDLE_VERSION; + return c.json( + bundleVersion ? { ok: true, bundle_version: bundleVersion } : { ok: true } + ); +}); healthRouter.get( "/", (c) => c.json({ diff --git a/tier2/ui/index.js b/tier2/ui/index.js index b5ea795..05ca627 100644 --- a/tier2/ui/index.js +++ b/tier2/ui/index.js @@ -1,5 +1,5 @@ // arcrun-rag-ui — 用戶實例的 GUI(console-ui/public 內嵌;t20④d-2 由 build-ui-bundle.mjs 產生,勿手改) -const FILES = {"/console/dashboard/index.html":{"type":"text/html; charset=utf-8","b64":false,"data":"\n\n\n\n\nArcrun 駕駛艙\n\n\n\n\n\n\n
\n
\n
Arcrun 駕駛艙
\n
\n
\n \n
\n
\n
\n
\n
\n
載入中
\n
\n
\n
\n
\n
\n
今日完成
\n
/
\n
\n
\n
\n
收件匣未處理
\n
\n
來自 Telegram
\n
\n
\n
\n
等你的事
\n
載入中…
\n
\n
\n
今日路線
\n
  • 載入中…
\n
本週
\n
    \n
    系統狀況live 健康信號
    \n
    載入中…
    \n
    每 60 秒自動刷新
    \n 進入完整控制台 ›\n
    \n\n\n\n"},"/console/index.html":{"type":"text/html; charset=utf-8","b64":false,"data":"\n\n\n\n\nArcrun Console\n\n\n\n\n\n\n\n\n
    \n
    \n
    \n
    Arcrun
    \n
    私人系統・僅供擁有者進入
    \n
    \n
    \n \n \n \n
    \n
    \n
    這是一個人的智慧總部。
    若你不是擁有者,這裡沒有你要找的東西。
    \n \n \n
    \n
    \n\n\n
    \n
    \n
    \n
    Arcrun
    \n
    首次設定
    \n
    系統偵測到尚未設定擁有者帳號。
    設定一組 Email 與密碼,之後只有你能進入。
    \n
    \n
    \n \n \n \n \n
    \n
    \n \n
    \n
    \n\n\n
    \n
    \n
    Arcrun
    \n \n
    總庫搜尋
    \n
    工作流
    \n \n
    設定
    \n
    ☾ 切深色
    \n
    \n
    \n
    \n\n \n
    \n
    Arcrun 控制台
    \n
    \n
    \n
    \n
    \n
    \n
    載入中
    \n
    \n
    \n
    \n
    \n
    \n
    今日完成
    \n
    /
    \n
    \n
    \n
    \n
    收件匣未處理
    \n
    \n
    來自 Telegram
    \n
    \n
    \n
    \n
    等你的事
    \n
    載入中…
    \n
    \n
    \n
    \n
    \n
    \n 今日路線狀態即時同步\n
    \n
    • 載入中…
    \n
    本週
    \n
      \n
      每 60 秒自動刷新
      \n
      \n
      \n
      \n\n \n
      \n
      總庫搜尋
      \n
      \n
      \n
      \n 藏書地圖\n
      \n
      地圖載入中…
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n\n \n
      \n
      \n \n 知識卡片\n
      \n
      \n
      載入中…
      \n
      \n
      關聯視圖
      \n
      \n
      \n
      \n
      \n
      \n\n \n
      \n
      工作流
      \n \n
      載入中…
      \n
      \n
      零件與 Recipes(框架資源)
      \n
      \n \n \n
      \n
      \n
      \n
      \n\n \n
      \n
      憑證管理
      \n
      \n 🛡 保險箱原則:系統只保存目錄與加密後的值,任何頁面都看不到密文內容。只能整筆替換或刪除。\n
      \n
      \n
      新增憑證
      \n
      \n \n \n \n \n
      \n
      \n
      \n
      載入中…
      \n
      \n\n \n
      \n
      分流台全部待辦・80/15/5
      \n
      \n
      載入中…
      \n
      \n\n \n
      \n
      設定
      \n
      \n
      \n
      \n
      \n
      深色模式
      \n
      預設淺色(紙感)。切換立即生效,選擇記在這台裝置(localStorage)。
      \n
      \n
      \n
      \n
      \n
      \n \n
      語意搜尋
      \n
      狀態偵測中…
      \n
      \n
      \n
      \n
      MCP token 有效期(TTL)
      \n
      讀取中…
      \n
      \n 誠實佔位:此頁還不能改這個值——可調功能=Arcrun#19(設定頁改→存 KBDB→發 token 時讀)。實作前要調整請在部署端 env MCP_TOKEN_TTL(mcp worker)設定。\n
      \n
      \n
      \n
      更換帳號密碼
      \n
      需輸入舊密碼驗證身分
      \n
      \n \n \n \n \n
      \n
      \n
      \n \n
      \n
      系統資訊
      \n
      載入中…
      \n
      \n \n
      \n
      \n\n
      \n
      \n\n\n
      \n \n
      搜尋
      \n
      工作流
      \n \n
      設定
      \n
      \n\n
      \n\n\n\n\n"},"/index.html":{"type":"text/html; charset=utf-8","b64":false,"data":"\n\n\n\nArcrun RAG\n\n\n\n\n\n\n\n

      正在前往搜尋頁… 沒有自動跳轉請點這裡

      \n\n\n"},"/portal/index.html":{"type":"text/html; charset=utf-8","b64":false,"data":"\n\n\n\n\nArcrun Portal\n\n\n\n\n\n\n\n\n
      \n
      \n
      \n
      Arcrun
      \n
      知識入口・Portal
      \n
      \n
      \n \n \n \n
      \n
      \n
      帳號由管理員發放。忘記密碼請聯絡管理員重設。
      \n \n
      \n
      \n\n\n
      \n
      \n
      \n
      Arcrun
      \n
      歡迎!先建立你的帳號
      \n
      \n
      \n \n \n \n \n
      \n \n \n
      \n
      這組帳密就是之後登入知識庫用的,只需要設定這一次。
      \n
      \n
      \n\n\n
      \n
      \n
      Arcrun
      \n
      搜尋
      \n
      總圖
      \n
      上傳
      \n
      工作流
      \n
      管理
      \n
      設定
      \n
      ☾ 切深色
      \n
      \n
      \n
      \n\n \n
      \n
      搜尋
      \n
      \n
      \n \n \n
      \n
      \n \n \n \n
      \n \n
      \n
      AI 問答・答案附出處,可回搜尋驗證
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n\n \n
      \n
      總圖
      \n
      \n
      \n
      \n 點節點可跳到該實體的圖譜搜尋。這張圖由知識庫的三元組即時算出——同一份地圖的文字版\n (給 AI 注入用的總庫目錄)。\n
      \n
      \n
      \n\n \n
      \n
      \n \n 知識卡片\n
      \n
      載入中…
      \n
      \n\n \n
      \n
      上傳Markdown / 純文字
      \n
      \n 上傳的文件會進入知識庫收件管線:約 1 分鐘後可在搜尋頁找到;AI 整理後會以 wiki 卡形式出現。支援 .md / .txt(一律以 .md 收件)。\n
      \n
      \n
      把 .md / .txt 檔案拖放到這裡
      \n
      \n \n \n
      \n
      \n
      \n\n \n
      \n
      工作流唯讀・系統狀態
      \n
      \n 此頁只顯示系統裡的工作流與最近執行狀態,不能觸發執行(觸發屬系統擁有者權限)。\n
      \n
      載入中…
      \n
      \n\n \n
      \n
      設定
      \n
      \n
      \n
      我的帳號
      \n
      載入中…
      \n
      \n
      \n
      \n
      \n
      深色模式
      \n
      預設淺色(紙感)。切換立即生效,選擇記在這台裝置。
      \n
      \n
      \n
      \n
      \n
      \n
      更改密碼
      \n
      需輸入舊密碼驗證身分;新密碼至少 8 碼
      \n
      \n \n \n \n \n
      \n
      \n
      \n \n
      \n \n
      \n 你的知識庫網址(小幫手連線用)\n \n \n
      \n
      同步小幫手
      \n
      把你電腦上的資料夾變成知識庫。換電腦或重裝時可以再下載一次。
      \n
      \n 下載 Mac 版\n
      封測版未簽章,第一次請右鍵→打開。裝好第一次開啟時,貼上這個網址+你的帳號密碼就連上了。
      \n
      \n
      \n \n
      \n
      AI 設定
      \n
      \n \n
      \n
      Gemini API Key
      \n
      聊天問答與文件萃取都用這一把。免費申請,金鑰只存在你自己的知識庫裡。
      \n \n
      \n \n
      \n
      讓知識卡整理得更好(選填)
      \n \n
      \n 讀你文件、整理成知識卡的那個 AI,換成更強的模型。卡片會更抓得到重點、關聯也連得更準,之後搜尋和問答的品質跟著提升。需要你的電腦已安裝 Claude Code。不填就用上面那把 Gemini,一樣能用。\n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n\n \n
      \n
      管理帳號與知識庫授權
      \n\n
      帳號管理
      \n
      \n
      新增同仁帳號
      \n
      建立後會產生一組一次性密碼——只顯示這一次,請當場轉交同仁(同仁可在「設定」自行改密)。
      \n
      \n \n \n \n \n
      \n
      \n
      \n
      \n
      載入中…
      \n\n
      庫目錄管理
      \n
      \n 你的知識庫網址(小幫手連線用)\n \n \n
      \n
      \n \n 裝好同步小幫手並選好要看守的資料夾之後,每個資料夾會自動成為一個「庫」出現在下面——不需要人工新增。下面還是空的,代表小幫手還沒裝好或還沒選資料夾。\n
      \n
      載入中…
      \n
      \n\n
      \n
      \n\n\n
      \n
      搜尋
      \n
      總圖
      \n
      上傳
      \n
      工作流
      \n
      管理
      \n
      設定
      \n
      \n\n
      \n\n\n\n"},"/portal/os-split.test.mjs":{"type":"application/octet-stream","b64":true,"data":"aW1wb3J0IGZzIGZyb20gJ25vZGU6ZnMnOwpjb25zdCBodG1sID0gZnMucmVhZEZpbGVTeW5jKG5ldyBVUkwoJy4vaW5kZXguaHRtbCcsIGltcG9ydC5tZXRhLnVybCkucGF0aG5hbWUsJ3V0ZjgnKTsKLy8g5oq95Ye6IGRhZW1vblBpY2sg55u46Zec5Ye95byP77yI5b6eIERBRU1PTl9CQVNFX0RFRkFVTFQg5YiwIGRhZW1vbkhpbnQg57WQ5bC+77yJCmNvbnN0IHN0YXJ0ID0gaHRtbC5pbmRleE9mKCd2YXIgREFFTU9OX0JBU0VfREVGQVVMVCcpOwpjb25zdCBlbmRNYXJrID0gInJldHVybiAn77yI5bCB5ris54mI5pyq57C956ug77yM56ys5LiA5qyh6KuL5Y+z6Y214oaS5omT6ZaL77yJJztcbiAgfSI7CmNvbnN0IGVuZCA9IGh0bWwuaW5kZXhPZihlbmRNYXJrKSArIGVuZE1hcmsubGVuZ3RoOwppZiAoc3RhcnQgPCAwIHx8IGVuZCA8IHN0YXJ0KSB0aHJvdyBuZXcgRXJyb3IoJ+aKveS4jeWIsOWHveW8j+WNgOWhiicpOwpjb25zdCBzcmMgPSBodG1sLnNsaWNlKHN0YXJ0LCBlbmQpOwoKY29uc3QgY2FzZXMgPSBbCiAgWydXaW5kb3dzJywgJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiBDaHJvbWUvMTIwIFNhZmFyaS81MzcuMzYnXSwKICBbJ01hYycsICAgICAnTW96aWxsYS81LjAgKE1hY2ludG9zaDsgSW50ZWwgTWFjIE9TIFggMTBfMTVfNykgQXBwbGVXZWJLaXQvNjA1LjEuMTUgU2FmYXJpLzYwNS4xLjE1J10sCiAgWydpUGhvbmUnLCAgJ01vemlsbGEvNS4wIChpUGhvbmU7IENQVSBpUGhvbmUgT1MgMTdfMCBsaWtlIE1hYyBPUyBYKSBBcHBsZVdlYktpdC82MDUuMS4xNSBTYWZhcmkvNjA0LjEnXSwKICBbJ0xpbnV4JywgICAnTW96aWxsYS81LjAgKFgxMTsgTGludXggeDg2XzY0KSBBcHBsZVdlYktpdC81MzcuMzYgQ2hyb21lLzEyMCBTYWZhcmkvNTM3LjM2J10sCl07CmxldCBwYXNzPTAsIGZhaWw9MDsKY29uc3QgY2hrPShsLGMsZXh0cmE9JycpPT57IGlmKGMpe2NvbnNvbGUubG9nKCdQQVNTOicsbCk7cGFzcysrO30gZWxzZSB7Y29uc29sZS5sb2coJ0ZBSUw6JyxsLGV4dHJhKTtmYWlsKys7fSB9OwoKZm9yIChjb25zdCBbbmFtZSwgdWFdIG9mIGNhc2VzKSB7CiAgY29uc3QgZm4gPSBuZXcgRnVuY3Rpb24oJ25hdmlnYXRvcicsJ3dpbmRvdycsIHNyYyArICc7IHJldHVybiB7ZGFlbW9uUGljazpkYWVtb25QaWNrLCBkYWVtb25IaW50OmRhZW1vbkhpbnQsIGRhZW1vbkJhc2U6ZGFlbW9uQmFzZX07Jyk7CiAgY29uc3QgYXBpID0gZm4oe3VzZXJBZ2VudDogdWF9LCB7fSk7CiAgY29uc3QgZCA9IGFwaS5kYWVtb25QaWNrKCk7CiAgY29uc3QgbGFiZWwgPSBkLnN1cmUgPyBkLnBpY2subGFiZWwgOiAnKOWFqeWAi+mDvee1piknOwogIGNvbnN0IHVybCAgID0gZC5zdXJlID8gZC5waWNrLnVybCA6IGQubWFjLnVybCArICcgKyAnICsgZC53aW4udXJsOwogIGNvbnNvbGUubG9nKGBcblske25hbWV9XSBzdXJlPSR7ZC5zdXJlfSDihpIgJHtsYWJlbH1gKTsKICBjb25zb2xlLmxvZyhgICB1cmw6ICR7dXJsfWApOwogIGlmIChuYW1lPT09J1dpbmRvd3MnKSB7CiAgICBjaGsoJ1dpbmRvd3Mg57WmIHdpbiB6aXAnLCBkLnN1cmUgJiYgZC5waWNrLnVybC5lbmRzV2l0aCgnQXJjcnVuUkFHLXdpbi11bnNpZ25lZC56aXAnKSwgZC5waWNrJiZkLnBpY2sudXJsKTsKICAgIGNoaygnV2luZG93cyDlj6bkuIDniYjmmK8gTWFjJywgZC5vdGhlciAmJiBkLm90aGVyLnVybC5lbmRzV2l0aCgnbWFjLXVuc2lnbmVkLnppcCcpKTsKICAgIGNoaygnV2luZG93cyDoqbHooZPmj5Ag6JeN6Imy6KaW56qXJywgYXBpLmRhZW1vbkhpbnQoJ3dpbicpLmluY2x1ZGVzKCfku43opoHln7fooYwnKSk7CiAgfQogIGlmIChuYW1lPT09J01hYycpIHsKICAgIGNoaygnTWFjIOe1piBtYWMgemlwJywgZC5zdXJlICYmIGQucGljay51cmwuZW5kc1dpdGgoJ0FyY3J1blJBRy1tYWMtdW5zaWduZWQuemlwJykpOwogICAgY2hrKCdNYWMg5Y+m5LiA54mI5pivIFdpbmRvd3MnLCBkLm90aGVyICYmIGQub3RoZXIudXJsLmVuZHNXaXRoKCd3aW4tdW5zaWduZWQuemlwJykpOwogICAgY2hrKCdNYWMg6Kmx6KGT5o+QIOWPs+mNteaJk+mWiycsIGFwaS5kYWVtb25IaW50KCdtYWMnKS5pbmNsdWRlcygn5Y+z6Y21JykpOwogIH0KICBpZiAobmFtZT09PSdpUGhvbmUnIHx8IG5hbWU9PT0nTGludXgnKSB7CiAgICAvLyBpUGhvbmUg5ZCrICJNYWMgT1MgWCIg5L2G5LiN5piv5qGM5qmfIE1hY++8m0xpbnV4IOWFqeiAheeahumdniDihpIg6YO96Kmy6JC95Zyo44CM5LiN56K65a6a77yd5YWp5YCL6YO957Wm44CNCiAgICBpZiAobmFtZT09PSdMaW51eCcpIGNoaygnTGludXgg5Yik5LiN5Ye65L6G4oaS5YWp5YCL6YO957WmJywgZC5zdXJlPT09ZmFsc2UpOwogICAgaWYgKG5hbWU9PT0naVBob25lJykgY2hrKCdpUGhvbmUg5LiN6Kmy6KKr5Yik5oiQIE1hY++8iOaJi+apn+KGkuWFqeWAi+mDvee1pu+8iScsIGQuc3VyZT09PWZhbHNlLCAnc3VyZT0nK2Quc3VyZSk7CiAgfQp9Ci8vIOiIiiBrZXkg55u45a65CmNvbnN0IGZuMiA9IG5ldyBGdW5jdGlvbignbmF2aWdhdG9yJywnd2luZG93Jywgc3JjICsgJzsgcmV0dXJuIGRhZW1vbkJhc2UoKTsnKTsKY29uc29sZS5sb2coJ1xuW+ebuOWuuV0gZGFlbW9uRG93bmxvYWQg6IiKIGtleSDihpInLCBmbjIoe3VzZXJBZ2VudDonJ30se0FSQ1JVTl9DT05GSUc6e2RhZW1vbkRvd25sb2FkOidodHRwczovL3guZGV2L2QvQXJjcnVuUkFHLW1hYy11bnNpZ25lZC56aXAnfX0pKTsKY2hrKCfoiIoga2V5IOaOqOW+l+WHuuebrumMhCcsIGZuMih7dXNlckFnZW50OicnfSx7QVJDUlVOX0NPTkZJRzp7ZGFlbW9uRG93bmxvYWQ6J2h0dHBzOi8veC5kZXYvZC9BcmNydW5SQUctbWFjLXVuc2lnbmVkLnppcCd9fSk9PT0naHR0cHM6Ly94LmRldi9kLycpOwpjaGsoJ2RhZW1vbkJhc2Ug5pawIGtleSDlhKrlhYgnLCBmbjIoe3VzZXJBZ2VudDonJ30se0FSQ1JVTl9DT05GSUc6e2RhZW1vbkJhc2U6J2h0dHBzOi8veS5kZXYveid9fSk9PT0naHR0cHM6Ly95LmRldi96LycpOwpjb25zb2xlLmxvZyhgXG49PT0gJHtwYXNzfSBwYXNzZWQsICR7ZmFpbH0gZmFpbGVkID09PWApOwpwcm9jZXNzLmV4aXQoZmFpbD8xOjApOwo="},"/portal/safejson.test.mjs":{"type":"application/octet-stream","b64":true,"data":"aW1wb3J0IGZzIGZyb20gJ25vZGU6ZnMnOwpjb25zdCBodG1sID0gZnMucmVhZEZpbGVTeW5jKG5ldyBVUkwoJy4vaW5kZXguaHRtbCcsIGltcG9ydC5tZXRhLnVybCkucGF0aG5hbWUsJ3V0ZjgnKTsKCi8vIOaKveWHuiBzYWZlSnNvbiDoiIcgZnJpZW5kbHlFcnIg5rGC5YC8CmNvbnN0IGdyYWIgPSAobmFtZSkgPT4gewogIGNvbnN0IGkgPSBodG1sLmluZGV4T2YoYGZ1bmN0aW9uICR7bmFtZX0oYCk7CiAgaWYgKGkgPCAwKSB0aHJvdyBuZXcgRXJyb3IoYOaJvuS4jeWIsCAke25hbWV9YCk7CiAgbGV0IGQ9MCwgaj1odG1sLmluZGV4T2YoJ3snLCBpKTsKICBmb3IgKGxldCBrPWo7azxodG1sLmxlbmd0aDtrKyspeyBpZihodG1sW2tdPT09J3snKWQrKzsgaWYoaHRtbFtrXT09PSd9Jyl7ZC0tOyBpZighZCl7IHJldHVybiBodG1sLnNsaWNlKGksaysxKTt9IH0gfQogIHRocm93IG5ldyBFcnJvcign5ous6Jmf5LiN5bmz6KGhJyk7Cn07CmNvbnN0IGZuID0gbmV3IEZ1bmN0aW9uKGdyYWIoJ3NhZmVKc29uJykgKyAnXG4nICsgZ3JhYignZnJpZW5kbHlFcnInKSArICdcbnJldHVybiB7c2FmZUpzb24sIGZyaWVuZGx5RXJyfTsnKSgpOwoKbGV0IHBhc3M9MCwgZmFpbD0wOwpjb25zdCB0PShsLGMsZT0nJyk9PntjPyhjb25zb2xlLmxvZygnUEFTUzonLGwpLHBhc3MrKyk6KGNvbnNvbGUubG9nKCdGQUlMOicsbCxlKSxmYWlsKyspfTsKCi8vIOKRoCBzYWZlSnNvbu+8mumdniBKU09OIOS4jeWPr+aLi+S+i+Wklu+8iOWQjOS6i+aSnuWIsOeahCA0MDQgSFRNTCDpoIHvvIkKY29uc3QgaHRtbDQwNCA9ICc8IURPQ1RZUEUgaHRtbD48aHRtbD48Ym9keT40MDQgTm90IEZvdW5kPC9ib2R5PjwvaHRtbD4nOwphd2FpdCBmbi5zYWZlSnNvbih7IHRleHQ6ICgpID0+IFByb21pc2UucmVzb2x2ZShodG1sNDA0KSB9KQogIC50aGVuKGQgPT4gdCgnNDA0IEhUTUwg4oaSIOWbnuepuueJqeS7tuS4jeaLi+mMrycsIHR5cGVvZiBkID09PSAnb2JqZWN0JyAmJiBkICE9PSBudWxsKSkKICAuY2F0Y2goZSA9PiB0KCc0MDQgSFRNTCDihpIg5LiN6Kmy5ouL6YyvJywgZmFsc2UsIGUubWVzc2FnZSkpOwoKYXdhaXQgZm4uc2FmZUpzb24oeyB0ZXh0OiAoKSA9PiBQcm9taXNlLnJlc29sdmUoJycpIH0pCiAgLnRoZW4oZCA9PiB0KCfnqbrlm57mh4kg4oaSIOWbnuepuueJqeS7ticsIEpTT04uc3RyaW5naWZ5KGQpPT09J3t9JykpCiAgLmNhdGNoKCgpID0+IHQoJ+epuuWbnuaHiSDihpIg5LiN6Kmy5ouL6YyvJywgZmFsc2UpKTsKCmF3YWl0IGZuLnNhZmVKc29uKHsgdGV4dDogKCkgPT4gUHJvbWlzZS5yZXNvbHZlKCd7ImVycm9yIjoi5biz6Jmf5oiW5a+G56K85LiN5bCNIn0nKSB9KQogIC50aGVuKGQgPT4gdCgn5q2j5bi4IEpTT04g5LuN6KaB6Kej5p6Q5b6X5Ye65L6GJywgZC5lcnJvciA9PT0gJ+W4s+iZn+aIluWvhueivOS4jeWwjScpLCApCiAgLmNhdGNoKCgpID0+IHQoJ+ato+W4uCBKU09OIOS4jeipsuaLi+mMrycsIGZhbHNlKSk7CgovLyDikaEgZnJpZW5kbHlFcnLvvJrkuI3lj6/miormioDooZPoqIrmga/lmbTntabkvb/nlKjogIUKY29uc3QgbGVhayA9IGZuLmZyaWVuZGx5RXJyKG5ldyBFcnJvcignVW5leHBlY3RlZCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgYWZ0ZXIgSlNPTiBhdCBwb3NpdGlvbiA0JykpOwp0KCdKU09OIOmMr+iqpCDihpIg5LiN5aSW5rSp5Y6f5paHJywgIS9KU09OfHBvc2l0aW9uL2kudGVzdChsZWFrKSwgYOWvpuW+lzogJHtsZWFrfWApOwp0KCdKU09OIOmMr+iqpCDihpIg6Kqq5Lq66KmxJywgL+S8uuacjeWZqOWbnuaHieeVsOW4uC8udGVzdChsZWFrKSwgYOWvpuW+lzogJHtsZWFrfWApOwoKY29uc3QgbmV0ID0gZm4uZnJpZW5kbHlFcnIobmV3IEVycm9yKCdGYWlsZWQgdG8gZmV0Y2gnKSk7CnQoJ+e2sui3r+mMr+iqpCDihpIg5pei5pyJ6KiK5oGv5L+d55WZJywgL+mAo+e3muS4reaWty8udGVzdChuZXQpLCBg5a+m5b6XOiAke25ldH1gKTsKCmNvbnN0IG91cnMgPSBmbi5mcmllbmRseUVycihuZXcgRXJyb3IoJ+W4s+iZn+aIluWvhueivOS4jeWwjeKAlOKAlOeUqOS9oOWcqOefpeitmOW6q+e2suermeioreWumueahOmCo+e1hCcpKTsKdCgn5oiR5YCR6Ieq5bex55qE5Lit5paH6KiK5oGvIOKGkiDljp/mqKPpoa/npLonLCAv5biz6Jmf5oiW5a+G56K85LiN5bCNLy50ZXN0KG91cnMpLCBg5a+m5b6XOiAke291cnN9YCk7Cgpjb25zdCBzdGFjayA9IGZuLmZyaWVuZGx5RXJyKG5ldyBFcnJvcignVHlwZUVycm9yOiBDYW5ub3QgcmVhZCBwcm9wZXJ0aWVzIG9mIHVuZGVmaW5lZCcpKTsKdCgn6Iux5paH5oqA6KGT6KiK5oGvIOKGkiDmlLbmloLkuI3lpJbmtKknLCAhL1R5cGVFcnJvcnx1bmRlZmluZWQvLnRlc3Qoc3RhY2spLCBg5a+m5b6XOiAke3N0YWNrfWApOwoKY29uc29sZS5sb2coYFxuPT09ICR7cGFzc30gcGFzc2VkLCAke2ZhaWx9IGZhaWxlZCA9PT1gKTsKcHJvY2Vzcy5leGl0KGZhaWw/MTowKTsK"}}; +const FILES = {"/console/dashboard/index.html":{"type":"text/html; charset=utf-8","b64":false,"data":"\n\n\n\n\nArcrun 駕駛艙\n\n\n\n\n\n\n
      \n
      \n
      Arcrun 駕駛艙
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      載入中
      \n
      \n
      \n
      \n
      \n
      \n
      今日完成
      \n
      /
      \n
      \n
      \n
      \n
      收件匣未處理
      \n
      \n
      來自 Telegram
      \n
      \n
      \n
      \n
      等你的事
      \n
      載入中…
      \n
      \n
      \n
      今日路線
      \n
      • 載入中…
      \n
      本週
      \n
        \n
        系統狀況live 健康信號
        \n
        載入中…
        \n
        每 60 秒自動刷新
        \n 進入完整控制台 ›\n
        \n\n\n\n"},"/console/index.html":{"type":"text/html; charset=utf-8","b64":false,"data":"\n\n\n\n\nArcrun Console\n\n\n\n\n\n\n\n\n
        \n
        \n
        \n
        Arcrun
        \n
        私人系統・僅供擁有者進入
        \n
        \n
        \n \n \n \n
        \n
        \n
        這是一個人的智慧總部。
        若你不是擁有者,這裡沒有你要找的東西。
        \n \n \n
        \n
        \n\n\n
        \n
        \n
        \n
        Arcrun
        \n
        首次設定
        \n
        系統偵測到尚未設定擁有者帳號。
        設定一組 Email 與密碼,之後只有你能進入。
        \n
        \n
        \n \n \n \n \n
        \n
        \n \n
        \n
        \n\n\n
        \n
        \n
        Arcrun
        \n \n
        總庫搜尋
        \n
        工作流
        \n \n
        設定
        \n
        ☾ 切深色
        \n
        \n
        \n
        \n\n \n
        \n
        Arcrun 控制台
        \n
        \n
        \n
        \n
        \n
        \n
        載入中
        \n
        \n
        \n
        \n
        \n
        \n
        今日完成
        \n
        /
        \n
        \n
        \n
        \n
        收件匣未處理
        \n
        \n
        來自 Telegram
        \n
        \n
        \n
        \n
        等你的事
        \n
        載入中…
        \n
        \n
        \n
        \n
        \n
        \n 今日路線狀態即時同步\n
        \n
        • 載入中…
        \n
        本週
        \n
          \n
          每 60 秒自動刷新
          \n
          \n
          \n
          \n\n \n
          \n
          總庫搜尋
          \n
          \n
          \n
          \n 藏書地圖\n
          \n
          地圖載入中…
          \n
          \n
          \n
          \n \n \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n\n \n
          \n
          \n \n 知識卡片\n
          \n
          \n
          載入中…
          \n
          \n
          關聯視圖
          \n
          \n
          \n
          \n
          \n
          \n\n \n
          \n
          工作流
          \n \n
          載入中…
          \n
          \n
          零件與 Recipes(框架資源)
          \n
          \n \n \n
          \n
          \n
          \n
          \n\n \n
          \n
          憑證管理
          \n
          \n 🛡 保險箱原則:系統只保存目錄與加密後的值,任何頁面都看不到密文內容。只能整筆替換或刪除。\n
          \n
          \n
          新增憑證
          \n
          \n \n \n \n \n
          \n
          \n
          \n
          載入中…
          \n
          \n\n \n
          \n
          分流台全部待辦・80/15/5
          \n
          \n
          載入中…
          \n
          \n\n \n
          \n
          設定
          \n
          \n
          \n
          \n
          \n
          深色模式
          \n
          預設淺色(紙感)。切換立即生效,選擇記在這台裝置(localStorage)。
          \n
          \n
          \n
          \n
          \n
          \n \n
          語意搜尋
          \n
          狀態偵測中…
          \n
          \n
          \n
          \n
          MCP token 有效期(TTL)
          \n
          讀取中…
          \n
          \n 誠實佔位:此頁還不能改這個值——可調功能=Arcrun#19(設定頁改→存 KBDB→發 token 時讀)。實作前要調整請在部署端 env MCP_TOKEN_TTL(mcp worker)設定。\n
          \n
          \n
          \n
          更換帳號密碼
          \n
          需輸入舊密碼驗證身分
          \n
          \n \n \n \n \n
          \n
          \n
          \n \n
          \n
          系統資訊
          \n
          載入中…
          \n
          \n \n
          \n
          \n\n
          \n
          \n\n\n
          \n \n
          搜尋
          \n
          工作流
          \n \n
          設定
          \n
          \n\n
          \n\n\n\n\n"},"/index.html":{"type":"text/html; charset=utf-8","b64":false,"data":"\n\n\n\nArcrun RAG\n\n\n\n\n\n\n\n

          正在前往搜尋頁… 沒有自動跳轉請點這裡

          \n\n\n"},"/portal/index.html":{"type":"text/html; charset=utf-8","b64":false,"data":"\n\n\n\n\nArcrun Portal\n\n\n\n\n\n\n\n\n
          \n
          \n
          \n
          Arcrun
          \n
          知識入口・Portal
          \n
          \n
          \n \n \n \n
          \n
          \n
          帳號由管理員發放。忘記密碼請聯絡管理員重設。
          \n \n
          \n
          \n\n\n
          \n
          \n
          \n
          Arcrun
          \n
          歡迎!先建立你的帳號
          \n
          \n
          \n \n \n \n \n
          \n \n \n
          \n
          這組帳密就是之後登入知識庫用的,只需要設定這一次。
          \n
          \n
          \n\n\n
          \n
          \n
          Arcrun
          \n
          搜尋
          \n
          總圖
          \n
          上傳
          \n
          工作流
          \n
          管理
          \n
          設定
          \n
          ☾ 切深色
          \n
          \n
          \n
          \n\n \n
          \n
          搜尋
          \n
          \n
          \n \n \n
          \n
          \n \n \n \n
          \n \n
          \n
          AI 問答・答案附出處,可回搜尋驗證
          \n
          \n \n \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n
          \n\n \n
          \n
          總圖
          \n
          \n
          \n
          \n 點節點可跳到該實體的圖譜搜尋。這張圖由知識庫的三元組即時算出——同一份地圖的文字版\n (給 AI 注入用的總庫目錄)。\n
          \n
          \n
          \n\n \n
          \n
          \n \n 知識卡片\n
          \n
          載入中…
          \n
          \n\n \n
          \n
          上傳Markdown / 純文字
          \n
          \n 上傳的文件會進入知識庫收件管線:約 1 分鐘後可在搜尋頁找到;AI 整理後會以 wiki 卡形式出現。支援 .md / .txt(一律以 .md 收件)。\n
          \n
          \n
          把 .md / .txt 檔案拖放到這裡
          \n
          \n \n \n
          \n
          \n
          \n\n \n
          \n
          工作流唯讀・系統狀態
          \n
          \n 此頁只顯示系統裡的工作流與最近執行狀態,不能觸發執行(觸發屬系統擁有者權限)。\n
          \n
          載入中…
          \n
          \n\n \n
          \n
          設定
          \n
          \n
          \n
          我的帳號
          \n
          載入中…
          \n
          \n
          \n
          \n
          \n
          深色模式
          \n
          預設淺色(紙感)。切換立即生效,選擇記在這台裝置。
          \n
          \n
          \n
          \n
          \n
          \n
          更改密碼
          \n
          需輸入舊密碼驗證身分;新密碼至少 8 碼
          \n
          \n \n \n \n \n
          \n
          \n
          \n \n
          \n \n
          \n 你的知識庫網址(小幫手連線用)\n \n \n
          \n
          同步小幫手
          \n
          把你電腦上的資料夾變成知識庫。換電腦或重裝時可以再下載一次。
          \n
          \n 下載 Mac 版\n
          封測版未簽章,第一次請右鍵→打開。裝好第一次開啟時,貼上這個網址+你的帳號密碼就連上了。
          \n
          \n
          \n \n
          \n
          AI 設定
          \n
          \n \n
          \n
          Gemini API Key
          \n
          聊天問答與文件萃取都用這一把。免費申請,金鑰只存在你自己的知識庫裡。
          \n \n
          \n \n
          \n
          讓知識卡整理得更好(選填)
          \n \n
          \n 讀你文件、整理成知識卡的那個 AI,換成更強的模型。卡片會更抓得到重點、關聯也連得更準,之後搜尋和問答的品質跟著提升。需要你的電腦已安裝 Claude Code。不填就用上面那把 Gemini,一樣能用。\n
          \n
          \n
          \n
          \n \n
          \n
          \n
          \n
          \n \n
          \n
          \n\n \n
          \n
          管理帳號與知識庫授權
          \n\n
          帳號管理
          \n
          \n
          新增同仁帳號
          \n
          建立後會產生一組一次性密碼——只顯示這一次,請當場轉交同仁(同仁可在「設定」自行改密)。
          \n
          \n \n \n \n \n
          \n
          \n
          \n
          \n
          載入中…
          \n\n
          庫目錄管理
          \n
          \n 你的知識庫網址(小幫手連線用)\n \n \n
          \n
          \n \n 裝好同步小幫手並選好要看守的資料夾之後,每個資料夾會自動成為一個「庫」出現在下面——不需要人工新增。下面還是空的,代表小幫手還沒裝好或還沒選資料夾。\n
          \n
          載入中…
          \n
          \n\n
          \n
          \n\n\n
          \n
          搜尋
          \n
          總圖
          \n
          上傳
          \n
          工作流
          \n
          管理
          \n
          設定
          \n
          \n\n
          \n\n\n\n"},"/portal/os-split.test.mjs":{"type":"application/octet-stream","b64":true,"data":"aW1wb3J0IGZzIGZyb20gJ25vZGU6ZnMnOwpjb25zdCBodG1sID0gZnMucmVhZEZpbGVTeW5jKG5ldyBVUkwoJy4vaW5kZXguaHRtbCcsIGltcG9ydC5tZXRhLnVybCkucGF0aG5hbWUsJ3V0ZjgnKTsKLy8g5oq95Ye6IGRhZW1vblBpY2sg55u46Zec5Ye95byP77yI5b6eIERBRU1PTl9CQVNFX0RFRkFVTFQg5YiwIGRhZW1vbkhpbnQg57WQ5bC+77yJCmNvbnN0IHN0YXJ0ID0gaHRtbC5pbmRleE9mKCd2YXIgREFFTU9OX0JBU0VfREVGQVVMVCcpOwpjb25zdCBlbmRNYXJrID0gInJldHVybiAn77yI5bCB5ris54mI5pyq57C956ug77yM56ys5LiA5qyh6KuL5Y+z6Y214oaS5omT6ZaL77yJJztcbiAgfSI7CmNvbnN0IGVuZCA9IGh0bWwuaW5kZXhPZihlbmRNYXJrKSArIGVuZE1hcmsubGVuZ3RoOwppZiAoc3RhcnQgPCAwIHx8IGVuZCA8IHN0YXJ0KSB0aHJvdyBuZXcgRXJyb3IoJ+aKveS4jeWIsOWHveW8j+WNgOWhiicpOwpjb25zdCBzcmMgPSBodG1sLnNsaWNlKHN0YXJ0LCBlbmQpOwoKY29uc3QgY2FzZXMgPSBbCiAgWydXaW5kb3dzJywgJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiBDaHJvbWUvMTIwIFNhZmFyaS81MzcuMzYnXSwKICBbJ01hYycsICAgICAnTW96aWxsYS81LjAgKE1hY2ludG9zaDsgSW50ZWwgTWFjIE9TIFggMTBfMTVfNykgQXBwbGVXZWJLaXQvNjA1LjEuMTUgU2FmYXJpLzYwNS4xLjE1J10sCiAgWydpUGhvbmUnLCAgJ01vemlsbGEvNS4wIChpUGhvbmU7IENQVSBpUGhvbmUgT1MgMTdfMCBsaWtlIE1hYyBPUyBYKSBBcHBsZVdlYktpdC82MDUuMS4xNSBTYWZhcmkvNjA0LjEnXSwKICBbJ0xpbnV4JywgICAnTW96aWxsYS81LjAgKFgxMTsgTGludXggeDg2XzY0KSBBcHBsZVdlYktpdC81MzcuMzYgQ2hyb21lLzEyMCBTYWZhcmkvNTM3LjM2J10sCl07CmxldCBwYXNzPTAsIGZhaWw9MDsKY29uc3QgY2hrPShsLGMsZXh0cmE9JycpPT57IGlmKGMpe2NvbnNvbGUubG9nKCdQQVNTOicsbCk7cGFzcysrO30gZWxzZSB7Y29uc29sZS5sb2coJ0ZBSUw6JyxsLGV4dHJhKTtmYWlsKys7fSB9OwoKZm9yIChjb25zdCBbbmFtZSwgdWFdIG9mIGNhc2VzKSB7CiAgY29uc3QgZm4gPSBuZXcgRnVuY3Rpb24oJ25hdmlnYXRvcicsJ3dpbmRvdycsIHNyYyArICc7IHJldHVybiB7ZGFlbW9uUGljazpkYWVtb25QaWNrLCBkYWVtb25IaW50OmRhZW1vbkhpbnQsIGRhZW1vbkJhc2U6ZGFlbW9uQmFzZX07Jyk7CiAgY29uc3QgYXBpID0gZm4oe3VzZXJBZ2VudDogdWF9LCB7fSk7CiAgY29uc3QgZCA9IGFwaS5kYWVtb25QaWNrKCk7CiAgY29uc3QgbGFiZWwgPSBkLnN1cmUgPyBkLnBpY2subGFiZWwgOiAnKOWFqeWAi+mDvee1piknOwogIGNvbnN0IHVybCAgID0gZC5zdXJlID8gZC5waWNrLnVybCA6IGQubWFjLnVybCArICcgKyAnICsgZC53aW4udXJsOwogIGNvbnNvbGUubG9nKGBcblske25hbWV9XSBzdXJlPSR7ZC5zdXJlfSDihpIgJHtsYWJlbH1gKTsKICBjb25zb2xlLmxvZyhgICB1cmw6ICR7dXJsfWApOwogIGlmIChuYW1lPT09J1dpbmRvd3MnKSB7CiAgICBjaGsoJ1dpbmRvd3Mg57WmIHdpbiB6aXAnLCBkLnN1cmUgJiYgZC5waWNrLnVybC5lbmRzV2l0aCgnQXJjcnVuUkFHLXdpbi11bnNpZ25lZC56aXAnKSwgZC5waWNrJiZkLnBpY2sudXJsKTsKICAgIGNoaygnV2luZG93cyDlj6bkuIDniYjmmK8gTWFjJywgZC5vdGhlciAmJiBkLm90aGVyLnVybC5lbmRzV2l0aCgnbWFjLXVuc2lnbmVkLnppcCcpKTsKICAgIGNoaygnV2luZG93cyDoqbHooZPmj5Ag6JeN6Imy6KaW56qXJywgYXBpLmRhZW1vbkhpbnQoJ3dpbicpLmluY2x1ZGVzKCfku43opoHln7fooYwnKSk7CiAgfQogIGlmIChuYW1lPT09J01hYycpIHsKICAgIGNoaygnTWFjIOe1piBtYWMgemlwJywgZC5zdXJlICYmIGQucGljay51cmwuZW5kc1dpdGgoJ0FyY3J1blJBRy1tYWMtdW5zaWduZWQuemlwJykpOwogICAgY2hrKCdNYWMg5Y+m5LiA54mI5pivIFdpbmRvd3MnLCBkLm90aGVyICYmIGQub3RoZXIudXJsLmVuZHNXaXRoKCd3aW4tdW5zaWduZWQuemlwJykpOwogICAgY2hrKCdNYWMg6Kmx6KGT5o+QIOWPs+mNteaJk+mWiycsIGFwaS5kYWVtb25IaW50KCdtYWMnKS5pbmNsdWRlcygn5Y+z6Y21JykpOwogIH0KICBpZiAobmFtZT09PSdpUGhvbmUnIHx8IG5hbWU9PT0nTGludXgnKSB7CiAgICAvLyBpUGhvbmUg5ZCrICJNYWMgT1MgWCIg5L2G5LiN5piv5qGM5qmfIE1hY++8m0xpbnV4IOWFqeiAheeahumdniDihpIg6YO96Kmy6JC95Zyo44CM5LiN56K65a6a77yd5YWp5YCL6YO957Wm44CNCiAgICBpZiAobmFtZT09PSdMaW51eCcpIGNoaygnTGludXgg5Yik5LiN5Ye65L6G4oaS5YWp5YCL6YO957WmJywgZC5zdXJlPT09ZmFsc2UpOwogICAgaWYgKG5hbWU9PT0naVBob25lJykgY2hrKCdpUGhvbmUg5LiN6Kmy6KKr5Yik5oiQIE1hY++8iOaJi+apn+KGkuWFqeWAi+mDvee1pu+8iScsIGQuc3VyZT09PWZhbHNlLCAnc3VyZT0nK2Quc3VyZSk7CiAgfQp9Ci8vIOiIiiBrZXkg55u45a65CmNvbnN0IGZuMiA9IG5ldyBGdW5jdGlvbignbmF2aWdhdG9yJywnd2luZG93Jywgc3JjICsgJzsgcmV0dXJuIGRhZW1vbkJhc2UoKTsnKTsKY29uc29sZS5sb2coJ1xuW+ebuOWuuV0gZGFlbW9uRG93bmxvYWQg6IiKIGtleSDihpInLCBmbjIoe3VzZXJBZ2VudDonJ30se0FSQ1JVTl9DT05GSUc6e2RhZW1vbkRvd25sb2FkOidodHRwczovL3guZGV2L2QvQXJjcnVuUkFHLW1hYy11bnNpZ25lZC56aXAnfX0pKTsKY2hrKCfoiIoga2V5IOaOqOW+l+WHuuebrumMhCcsIGZuMih7dXNlckFnZW50OicnfSx7QVJDUlVOX0NPTkZJRzp7ZGFlbW9uRG93bmxvYWQ6J2h0dHBzOi8veC5kZXYvZC9BcmNydW5SQUctbWFjLXVuc2lnbmVkLnppcCd9fSk9PT0naHR0cHM6Ly94LmRldi9kLycpOwpjaGsoJ2RhZW1vbkJhc2Ug5pawIGtleSDlhKrlhYgnLCBmbjIoe3VzZXJBZ2VudDonJ30se0FSQ1JVTl9DT05GSUc6e2RhZW1vbkJhc2U6J2h0dHBzOi8veS5kZXYveid9fSk9PT0naHR0cHM6Ly95LmRldi96LycpOwpjb25zb2xlLmxvZyhgXG49PT0gJHtwYXNzfSBwYXNzZWQsICR7ZmFpbH0gZmFpbGVkID09PWApOwpwcm9jZXNzLmV4aXQoZmFpbD8xOjApOwo="},"/portal/safejson.test.mjs":{"type":"application/octet-stream","b64":true,"data":"aW1wb3J0IGZzIGZyb20gJ25vZGU6ZnMnOwpjb25zdCBodG1sID0gZnMucmVhZEZpbGVTeW5jKG5ldyBVUkwoJy4vaW5kZXguaHRtbCcsIGltcG9ydC5tZXRhLnVybCkucGF0aG5hbWUsJ3V0ZjgnKTsKCi8vIOaKveWHuiBzYWZlSnNvbiDoiIcgZnJpZW5kbHlFcnIg5rGC5YC8CmNvbnN0IGdyYWIgPSAobmFtZSkgPT4gewogIGNvbnN0IGkgPSBodG1sLmluZGV4T2YoYGZ1bmN0aW9uICR7bmFtZX0oYCk7CiAgaWYgKGkgPCAwKSB0aHJvdyBuZXcgRXJyb3IoYOaJvuS4jeWIsCAke25hbWV9YCk7CiAgbGV0IGQ9MCwgaj1odG1sLmluZGV4T2YoJ3snLCBpKTsKICBmb3IgKGxldCBrPWo7azxodG1sLmxlbmd0aDtrKyspeyBpZihodG1sW2tdPT09J3snKWQrKzsgaWYoaHRtbFtrXT09PSd9Jyl7ZC0tOyBpZighZCl7IHJldHVybiBodG1sLnNsaWNlKGksaysxKTt9IH0gfQogIHRocm93IG5ldyBFcnJvcign5ous6Jmf5LiN5bmz6KGhJyk7Cn07CmNvbnN0IGZuID0gbmV3IEZ1bmN0aW9uKGdyYWIoJ3NhZmVKc29uJykgKyAnXG4nICsgZ3JhYignZnJpZW5kbHlFcnInKSArICdcbnJldHVybiB7c2FmZUpzb24sIGZyaWVuZGx5RXJyfTsnKSgpOwoKbGV0IHBhc3M9MCwgZmFpbD0wOwpjb25zdCB0PShsLGMsZT0nJyk9PntjPyhjb25zb2xlLmxvZygnUEFTUzonLGwpLHBhc3MrKyk6KGNvbnNvbGUubG9nKCdGQUlMOicsbCxlKSxmYWlsKyspfTsKCi8vIOKRoCBzYWZlSnNvbu+8mumdniBKU09OIOS4jeWPr+aLi+S+i+Wklu+8iOWQjOS6i+aSnuWIsOeahCA0MDQgSFRNTCDpoIHvvIkKY29uc3QgaHRtbDQwNCA9ICc8IURPQ1RZUEUgaHRtbD48aHRtbD48Ym9keT40MDQgTm90IEZvdW5kPC9ib2R5PjwvaHRtbD4nOwphd2FpdCBmbi5zYWZlSnNvbih7IHRleHQ6ICgpID0+IFByb21pc2UucmVzb2x2ZShodG1sNDA0KSB9KQogIC50aGVuKGQgPT4gdCgnNDA0IEhUTUwg4oaSIOWbnuepuueJqeS7tuS4jeaLi+mMrycsIHR5cGVvZiBkID09PSAnb2JqZWN0JyAmJiBkICE9PSBudWxsKSkKICAuY2F0Y2goZSA9PiB0KCc0MDQgSFRNTCDihpIg5LiN6Kmy5ouL6YyvJywgZmFsc2UsIGUubWVzc2FnZSkpOwoKYXdhaXQgZm4uc2FmZUpzb24oeyB0ZXh0OiAoKSA9PiBQcm9taXNlLnJlc29sdmUoJycpIH0pCiAgLnRoZW4oZCA9PiB0KCfnqbrlm57mh4kg4oaSIOWbnuepuueJqeS7ticsIEpTT04uc3RyaW5naWZ5KGQpPT09J3t9JykpCiAgLmNhdGNoKCgpID0+IHQoJ+epuuWbnuaHiSDihpIg5LiN6Kmy5ouL6YyvJywgZmFsc2UpKTsKCmF3YWl0IGZuLnNhZmVKc29uKHsgdGV4dDogKCkgPT4gUHJvbWlzZS5yZXNvbHZlKCd7ImVycm9yIjoi5biz6Jmf5oiW5a+G56K85LiN5bCNIn0nKSB9KQogIC50aGVuKGQgPT4gdCgn5q2j5bi4IEpTT04g5LuN6KaB6Kej5p6Q5b6X5Ye65L6GJywgZC5lcnJvciA9PT0gJ+W4s+iZn+aIluWvhueivOS4jeWwjScpLCApCiAgLmNhdGNoKCgpID0+IHQoJ+ato+W4uCBKU09OIOS4jeipsuaLi+mMrycsIGZhbHNlKSk7CgovLyDikaEgZnJpZW5kbHlFcnLvvJrkuI3lj6/miormioDooZPoqIrmga/lmbTntabkvb/nlKjogIUKY29uc3QgbGVhayA9IGZuLmZyaWVuZGx5RXJyKG5ldyBFcnJvcignVW5leHBlY3RlZCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgYWZ0ZXIgSlNPTiBhdCBwb3NpdGlvbiA0JykpOwp0KCdKU09OIOmMr+iqpCDihpIg5LiN5aSW5rSp5Y6f5paHJywgIS9KU09OfHBvc2l0aW9uL2kudGVzdChsZWFrKSwgYOWvpuW+lzogJHtsZWFrfWApOwp0KCdKU09OIOmMr+iqpCDihpIg6Kqq5Lq66KmxJywgL+S8uuacjeWZqOWbnuaHieeVsOW4uC8udGVzdChsZWFrKSwgYOWvpuW+lzogJHtsZWFrfWApOwoKY29uc3QgbmV0ID0gZm4uZnJpZW5kbHlFcnIobmV3IEVycm9yKCdGYWlsZWQgdG8gZmV0Y2gnKSk7CnQoJ+e2sui3r+mMr+iqpCDihpIg5pei5pyJ6KiK5oGv5L+d55WZJywgL+mAo+e3muS4reaWty8udGVzdChuZXQpLCBg5a+m5b6XOiAke25ldH1gKTsKCmNvbnN0IG91cnMgPSBmbi5mcmllbmRseUVycihuZXcgRXJyb3IoJ+W4s+iZn+aIluWvhueivOS4jeWwjeKAlOKAlOeUqOS9oOWcqOefpeitmOW6q+e2suermeioreWumueahOmCo+e1hCcpKTsKdCgn5oiR5YCR6Ieq5bex55qE5Lit5paH6KiK5oGvIOKGkiDljp/mqKPpoa/npLonLCAv5biz6Jmf5oiW5a+G56K85LiN5bCNLy50ZXN0KG91cnMpLCBg5a+m5b6XOiAke291cnN9YCk7Cgpjb25zdCBzdGFjayA9IGZuLmZyaWVuZGx5RXJyKG5ldyBFcnJvcignVHlwZUVycm9yOiBDYW5ub3QgcmVhZCBwcm9wZXJ0aWVzIG9mIHVuZGVmaW5lZCcpKTsKdCgn6Iux5paH5oqA6KGT6KiK5oGvIOKGkiDmlLbmloLkuI3lpJbmtKknLCAhL1R5cGVFcnJvcnx1bmRlZmluZWQvLnRlc3Qoc3RhY2spLCBg5a+m5b6XOiAke3N0YWNrfWApOwoKY29uc29sZS5sb2coYFxuPT09ICR7cGFzc30gcGFzc2VkLCAke2ZhaWx9IGZhaWxlZCA9PT1gKTsKcHJvY2Vzcy5leGl0KGZhaWw/MTowKTsK"}}; function b64ToBytes(b64) { const bin = atob(b64); const a = new Uint8Array(bin.length); for (let i = 0; i < bin.length; i++) a[i] = bin.charCodeAt(i); return a; } export default { async fetch(request, env) {