@onescience/onecode-web 1.14.50-202609231524 → 1.14.50-202609231732
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/{3Dmol-DXEZvgyx.js → 3Dmol-DJkM0p1o.js} +1 -1
- package/assets/account-system-CO3lkbjk.js +1 -0
- package/assets/{alert-04-D9QRnNFq.js → alert-01-BuE2N-tW.js} +1 -1
- package/assets/{alert-05-CEVbS9oO.js → alert-02-DP7RizfO.js} +1 -1
- package/assets/{alert-01-DsWcbob2.js → alert-04-DaR1stMk.js} +1 -1
- package/assets/{alert-02-DEj38sAR.js → alert-05-C6exoYaZ.js} +1 -1
- package/assets/alert-06-DQca1io0.js +1 -0
- package/assets/alert-07-Df_hwlVA.js +1 -0
- package/assets/alert-08-BuTq1k6u.js +1 -0
- package/assets/alert-10-zGAtszxP.js +1 -0
- package/assets/{bip-bop-03-CeCrcemU.js → bip-bop-03-D1q6S6aY.js} +1 -1
- package/assets/{bip-bop-04-DIxLUbgF.js → bip-bop-04-yhjxS_iO.js} +1 -1
- package/assets/{bip-bop-06-Cnc5GVGi.js → bip-bop-06-BD-MzMMW.js} +1 -1
- package/assets/{bip-bop-08-BrldKFPx.js → bip-bop-08-B9NM0AhN.js} +1 -1
- package/assets/bip-bop-09-SfRKhJQN.js +1 -0
- package/assets/{center-Beqkliva.js → center-CU8D_-NU.js} +1 -1
- package/assets/dialog-fork-Dv2V4xKr.js +1 -0
- package/assets/{dialog-project-upload-m8Ha9h24.js → dialog-project-upload-D8uR7rno.js} +1 -1
- package/assets/{dialog-select-file-CO3DuSyf.js → dialog-select-file-OdIddzBp.js} +1 -1
- package/assets/{dialog-select-model-CW_mRoyU.js → dialog-select-model-BiN9Xoh9.js} +2 -2
- package/assets/{dialog-terminal-unavailable-B2VBH2_m.js → dialog-terminal-unavailable-6d7T7LeX.js} +2 -2
- package/assets/{docs-ETKBE2lc.js → docs-DDyN6R9b.js} +1 -1
- package/assets/{ghostty-web-CN5alEz7.js → ghostty-web-H0l21Av_.js} +1 -1
- package/assets/{index-M0WaSURg.css → index-BxyYyFjA.css} +1 -1
- package/assets/{index-CceAmj5n.js → index-WRGCuJLY.js} +257 -250
- package/assets/{intro-JC827eek.js → intro-n2POs4WF.js} +1 -1
- package/assets/{nope-02-B4I4eYzt.js → nope-02-BsJOvO-O.js} +1 -1
- package/assets/{nope-05-5HIX24lG.js → nope-05-C15ZCoy7.js} +1 -1
- package/assets/{nope-08-B4GN9Wk2.js → nope-08-BHvLNPaS.js} +1 -1
- package/assets/{nope-11-MTcSfKYS.js → nope-11-CM7ZGH-5.js} +1 -1
- package/assets/nope-12-De3TnJvX.js +1 -0
- package/assets/{onescience-CuviILLJ.js → onescience-Curqsv4n.js} +1 -1
- package/assets/resources-DC4AiByd.js +2 -0
- package/assets/{skills-DYdqdcS1.js → skills-Pzidbalt.js} +1 -1
- package/assets/{staplebops-03-BFiVg887.js → staplebops-03-B58nh7qz.js} +1 -1
- package/assets/{staplebops-04-mCuQViVQ.js → staplebops-04-BEhq8VSG.js} +1 -1
- package/assets/{staplebops-06-D5LUpEUt.js → staplebops-06-DeGviVrM.js} +1 -1
- package/assets/{staplebops-07-C4bFbAj1.js → staplebops-07-NMVglnC5.js} +1 -1
- package/assets/{wizard-Cu2z69xN.js → wizard-CMUPVJU4.js} +1 -1
- package/assets/{yup-01-DNE9iBKC.js → yup-01-Ca3CCR0y.js} +1 -1
- package/assets/{yup-03-DNvVnF_M.js → yup-03-DbaNFivJ.js} +1 -1
- package/assets/{yup-04-3W7jgoqO.js → yup-04-CdUIdaLy.js} +1 -1
- package/assets/{yup-05-BWNK0scC.js → yup-05-CYv5RA_q.js} +1 -1
- package/assets/{zh-CeyiMO0Y.js → zh-DFSBLflG.js} +12 -5
- package/assets/{zht-DTzXWbT4.js → zht-Dg5QQHIn.js} +9 -2
- package/index.html +11 -11
- package/package.json +2 -2
- package/assets/account-system-BYTE9t3Y.js +0 -1
- package/assets/alert-06-bfG0uhkO.js +0 -1
- package/assets/alert-07-B8MeP48b.js +0 -1
- package/assets/alert-08-D1wG6oUj.js +0 -1
- package/assets/alert-10-CaxGukAb.js +0 -1
- package/assets/bip-bop-09-BX98rSZU.js +0 -1
- package/assets/dialog-fork-CptqNFic.js +0 -1
- package/assets/nope-12-DhW4giqh.js +0 -1
- package/assets/resources-V0T7-WVr.js +0 -2
|
@@ -1,5 +1,12 @@
|
|
|
1
|
-
const e={"command.category.suggested":"建議","command.category.view":"檢視","command.category.project":"專案","command.category.provider":"提供者","command.category.server":"伺服器","command.category.session":"工作階段","command.category.theme":"主題","command.category.language":"語言","command.category.file":"檔案","command.category.context":"上下文","command.category.terminal":"終端機","command.category.model":"模型","command.category.mcp":"MCP","command.category.agent":"代理程式","command.category.permissions":"權限","command.category.workspace":"工作區","command.category.settings":"設定","theme.scheme.system":"系統","theme.scheme.light":"淺色","theme.scheme.dark":"深色","command.sidebar.toggle":"切換側邊欄","titlebar.sidebar.label":"會話列表","command.project.open":"開啟專案","command.provider.connect":"連接提供者","command.server.switch":"切換伺服器","command.settings.open":"開啟設定","command.session.previous":"上一個工作階段","command.session.next":"下一個工作階段","command.session.previous.unseen":"上一個未讀會話","command.session.next.unseen":"下一個未讀會話","command.session.archive":"封存工作階段","command.palette":"命令面板","command.theme.cycle":"循環主題","command.theme.set":"使用主題: {{theme}}","command.theme.scheme.cycle":"循環配色方案","command.theme.scheme.set":"使用配色方案: {{scheme}}","command.language.cycle":"循環語言","command.language.set":"使用語言: {{language}}","command.session.new":"新增工作階段","command.file.open":"開啟檔案","command.tab.close":"關閉分頁","command.context.addSelection":"將選取內容加入上下文","command.context.addSelection.description":"加入目前檔案中選取的行","command.input.focus":"聚焦輸入框","command.terminal.toggle":"切換終端機","command.fileTree.toggle":"切換檔案樹","command.review.toggle":"切換審查","command.terminal.new":"新增終端機","command.terminal.new.description":"建立新的終端機標籤頁","command.steps.toggle":"切換步驟","command.steps.toggle.description":"顯示或隱藏目前訊息的步驟","command.message.previous":"上一則訊息","command.message.previous.description":"跳到上一則使用者訊息","command.message.next":"下一則訊息","command.message.next.description":"跳到下一則使用者訊息","command.model.choose":"選擇模型","command.model.choose.description":"選擇不同的模型","command.mcp.toggle":"切換 MCP","command.mcp.toggle.description":"切換 MCP","command.agent.cycle":"循環代理程式","command.agent.cycle.description":"切換到下一個代理程式","command.agent.cycle.reverse":"反向循環代理程式","command.agent.cycle.reverse.description":"切換到上一個代理程式","command.model.variant.cycle":"循環思考強度","command.model.variant.cycle.description":"切換到下一個強度等級","command.prompt.mode.shell":"Shell","command.prompt.mode.normal":"Prompt","command.permissions.autoaccept.enable":"自動接受權限","command.permissions.autoaccept.disable":"停止自動接受權限","command.workspace.toggle":"切換工作區","command.workspace.toggle.description":"在側邊欄啟用或停用多個工作區","command.session.undo":"復原","command.session.undo.description":"復原上一則訊息","command.session.redo":"重做","command.session.redo.description":"重做上一則復原的訊息","command.session.compact":"精簡工作階段","command.session.compact.description":"總結工作階段以減少上下文大小","command.session.fork":"從訊息分支","command.session.fork.description":"從先前的訊息建立新工作階段","command.session.share":"分享工作階段","command.session.share.description":"分享此工作階段並將連結複製到剪貼簿","command.session.unshare":"取消分享工作階段","command.session.unshare.description":"停止分享此工作階段","palette.search.placeholder":"搜尋檔案、命令和工作階段","palette.empty":"找不到結果","palette.group.commands":"命令","palette.group.files":"檔案","dialog.provider.search.placeholder":"搜尋提供者","dialog.provider.empty":"找不到提供者","dialog.provider.group.popular":"熱門","dialog.provider.group.other":"其他","dialog.provider.tag.recommended":"推薦","dialog.provider.tag.connected":"已連線","dialog.provider.opencode.note":"精選模型,包含 Claude、GPT、Gemini 等等","dialog.provider.opencode.tagline":"可靠的優化模型","dialog.provider.opencodeGo.tagline":"適合所有人的低成本訂閱","dialog.provider.anthropic.note":"使用 Claude Pro/Max 或 API 金鑰連線","dialog.provider.openai.note":"使用 ChatGPT Pro/Plus 或 API 金鑰連線","dialog.provider.copilot.note":"使用 Copilot 或 API 金鑰連線","dialog.provider.google.note":"Gemini 模型,提供快速且結構化的回應","dialog.provider.openrouter.note":"從單一提供者存取所有支援的模型","dialog.provider.vercel.note":"透過智慧路由統一存取 AI 模型","dialog.model.select.title":"選擇模型","dialog.model.search.placeholder":"搜尋模型","dialog.model.empty":"找不到模型","dialog.model.manage":"管理模型","dialog.model.manage.description":"自訂模型選擇器中顯示的模型。","dialog.model.manage.provider.toggle":"切換所有 {{provider}} 模型","dialog.model.provider.edit":"編輯此提供商","dialog.model.unpaid.freeModels.title":"OpenCode 提供的免費模型","dialog.model.unpaid.addMore.title":"從熱門提供者新增更多模型","dialog.provider.viewAll":"查看更多提供者","provider.connect.title":"連線 {{provider}}","provider.connect.title.anthropicProMax":"使用 Claude Pro/Max 登入","provider.connect.selectMethod":"選擇 {{provider}} 的登入方式。","provider.connect.method.apiKey":"API 金鑰","provider.connect.status.inProgress":"正在授權...","provider.connect.status.waiting":"等待授權...","provider.connect.status.failed":"授權失敗: {{error}}","provider.connect.apiKey.description":"輸入你的 {{provider}} API 金鑰以連線帳戶,並在 OpenCode 中使用 {{provider}} 模型。","provider.connect.apiKey.label":"{{provider}} API 金鑰","provider.connect.apiKey.placeholder":"API 金鑰","provider.connect.apiKey.required":"API 金鑰為必填","provider.connect.opencodeZen.line1":"OpenCode Zen 為你提供一組精選的可靠最佳化模型,用於程式碼代理程式。","provider.connect.opencodeZen.line2":"只需一個 API 金鑰,你就能使用 Claude、GPT、Gemini、GLM 等模型。","provider.connect.opencodeZen.visit.prefix":"造訪 ","provider.connect.opencodeZen.visit.link":"opencode.ai/zen","provider.connect.opencodeZen.visit.suffix":" 取得你的 API 金鑰。","provider.connect.oauth.code.visit.prefix":"造訪 ","provider.connect.oauth.code.visit.link":"此連結","provider.connect.oauth.code.visit.suffix":" 取得授權碼,以連線你的帳戶並在 OpenCode 中使用 {{provider}} 模型。","provider.connect.oauth.code.label":"{{method}} 授權碼","provider.connect.oauth.code.placeholder":"授權碼","provider.connect.oauth.code.required":"授權碼為必填","provider.connect.oauth.code.invalid":"授權碼無效","provider.connect.oauth.auto.visit.prefix":"造訪 ","provider.connect.oauth.auto.visit.link":"此連結","provider.connect.oauth.auto.visit.suffix":" 並輸入以下程式碼,以連線你的帳戶並在 OpenCode 中使用 {{provider}} 模型。","provider.connect.oauth.auto.confirmationCode":"確認碼","provider.connect.toast.connected.title":"{{provider}} 已連線","provider.connect.toast.connected.description":"現在可以使用 {{provider}} 模型了。","provider.custom.title":"自訂提供商","provider.custom.description.prefix":"設定與 OpenAI 相容的提供商。請參閱","provider.custom.description.link":"提供商設定文件","provider.custom.description.suffix":"。","provider.custom.field.providerID.label":"提供商 ID","provider.custom.field.providerID.placeholder":"myprovider","provider.custom.field.providerID.description":"使用小寫字母、數字、連字號或底線","provider.custom.field.name.label":"顯示名稱","provider.custom.field.name.placeholder":"我的 AI 提供商","provider.custom.field.baseURL.label":"基礎 URL","provider.custom.field.baseURL.placeholder":"https://api.myprovider.com/v1","provider.custom.field.apiKey.label":"API 金鑰","provider.custom.field.apiKey.placeholder":"API 金鑰","provider.custom.field.apiKey.description":"選填。若您透過標頭管理驗證,可留空。","provider.custom.models.label":"模型","provider.custom.models.id.label":"ID","provider.custom.models.id.placeholder":"model-id","provider.custom.models.name.label":"名稱","provider.custom.models.name.placeholder":"顯示名稱","provider.custom.models.remove":"移除模型","provider.custom.models.add":"新增模型","provider.custom.headers.label":"標頭(選填)","provider.custom.headers.key.label":"標頭","provider.custom.headers.key.placeholder":"Header-Name","provider.custom.headers.value.label":"值","provider.custom.headers.value.placeholder":"value","provider.custom.headers.remove":"移除標頭","provider.custom.headers.add":"新增標頭","provider.custom.error.providerID.required":"提供商 ID 為必填","provider.custom.error.providerID.format":"請使用小寫字母、數字、連字號或底線","provider.custom.error.providerID.exists":"該提供商 ID 已存在","provider.custom.error.name.required":"顯示名稱為必填","provider.custom.error.baseURL.required":"基礎 URL 為必填","provider.custom.error.baseURL.format":"必須以 http:// 或 https:// 開頭","provider.custom.error.required":"必填","provider.custom.error.duplicate":"重複","provider.custom.error.probe.auth":"API 金鑰認證失敗,未儲存完整金鑰。","provider.custom.error.probe.network":"無法連線基礎 URL,請檢查位址與網路。","provider.custom.error.probe.timeout":"連線逾時,請檢查基礎 URL 與網路。","provider.custom.error.probe.failed":"提供者介面探測失敗。","provider.custom.edit.title":"編輯自訂提供者","provider.custom.field.apiKey.keepPlaceholder":"留空則保持原金鑰","provider.custom.field.apiKey.keepDescription":"選填。留空將保留已設定的 API 金鑰。","provider.custom.field.apiKey.configuredHint":"已設定 API 金鑰,留空將保持不變。重新填寫會覆蓋原金鑰。","provider.custom.toast.updated.title":"{{provider}} 已更新","provider.custom.toast.updated.description":"後續呼叫將使用新的設定。","provider.disconnect.toast.disconnected.title":"{{provider}} 已中斷連線","provider.disconnect.toast.disconnected.description":"{{provider}} 模型已不再可用。","model.tag.free":"免費","model.tag.limited":"限免","model.tag.latest":"最新","model.provider.anthropic":"Anthropic","model.provider.openai":"OpenAI","model.provider.google":"Google","model.provider.xai":"xAI","model.provider.meta":"Meta","model.input.text":"文字","model.input.image":"圖片","model.input.audio":"音訊","model.input.video":"影片","model.input.pdf":"pdf","model.tooltip.allows":"支援: {{inputs}}","model.tooltip.reasoning.allowed":"支援推理","model.tooltip.reasoning.none":"不支援推理","model.tooltip.context":"上下文上限 {{limit}}","common.search.placeholder":"搜尋","common.goBack":"返回","common.goForward":"前進","common.loading":"載入中","common.loading.ellipsis":"...","common.cancel":"取消","common.connect":"連線","common.disconnect":"中斷連線","common.continue":"提交","common.submit":"提交","common.save":"儲存","common.saving":"儲存中...","common.default":"預設","common.attachment":"附件","prompt.placeholder.shell":"輸入 shell 命令... {{example}}","prompt.placeholder.normal":"使用 OneScience {{example}}","prompt.placeholder.simple":"使用 OneScience...","prompt.placeholder.summarizeComments":"摘要評論…","prompt.placeholder.summarizeComment":"摘要這則評論…","prompt.mode.shell":"Shell","prompt.mode.normal":"Prompt","prompt.mode.shell.exit":"按 esc 退出","prompt.example.1":"修復程式碼庫中的一個 TODO","prompt.example.2":"這個專案的技術堆疊是什麼?","prompt.example.3":"修復失敗的測試","prompt.example.4":"解釋驗證是如何運作的","prompt.example.5":"尋找並修復安全漏洞","prompt.example.6":"為使用者服務新增單元測試","prompt.example.7":"重構這個函式,讓它更易讀","prompt.example.8":"這個錯誤是什麼意思?","prompt.example.9":"幫我偵錯這個問題","prompt.example.10":"產生 API 文件","prompt.example.11":"最佳化資料庫查詢","prompt.example.12":"新增輸入驗證","prompt.example.13":"建立一個新的元件用於...","prompt.example.14":"我該如何部署這個專案?","prompt.example.15":"審查我的程式碼並給出最佳實務建議","prompt.example.16":"為這個函式新增錯誤處理","prompt.example.17":"解釋這個正規表示式","prompt.example.18":"把它轉換成 TypeScript","prompt.example.19":"在整個程式碼庫中新增日誌","prompt.example.20":"哪些相依性已經過期?","prompt.example.21":"幫我寫一個遷移腳本","prompt.example.22":"為這個端點實作快取","prompt.example.23":"給這個清單新增分頁","prompt.example.24":"建立一個 CLI 命令用於...","prompt.example.25":"這裡的環境變數是怎麼運作的?","prompt.popover.emptyResults":"沒有符合的結果","prompt.popover.emptyCommands":"沒有符合的命令","prompt.dropzone.label":"將圖片、PDF 或文字檔案拖放到此處","prompt.dropzone.file.label":"拖放以 @提及檔案","prompt.slash.badge.custom":"自訂","prompt.slash.badge.skill":"技能","prompt.slash.badge.mcp":"mcp","prompt.context.active":"作用中","prompt.context.includeActiveFile":"包含作用中檔案","prompt.context.removeActiveFile":"從上下文移除目前檔案","prompt.context.removeFile":"從上下文移除檔案","prompt.context.removeSkill":"從上下文移除技能","prompt.toast.skillUnavailable.description":"目前工作區尚未載入此技能,請確認技能已同步後再傳送。","prompt.action.attachFile":"附加檔案","prompt.attachment.remove":"移除附件","prompt.action.send":"傳送","prompt.action.stop":"停止","prompt.toast.pasteUnsupported.title":"不支援的附件","prompt.toast.pasteUnsupported.description":"此處僅能附加圖片、PDF 或文字檔案。","prompt.toast.modelAgentRequired.title":"請選擇代理程式和模型","prompt.toast.modelAgentRequired.description":"傳送提示前請先選擇代理程式和模型。","prompt.toast.worktreeCreateFailed.title":"建立工作樹失敗","prompt.toast.sessionCreateFailed.title":"建立工作階段失敗","prompt.toast.shellSendFailed.title":"傳送 shell 命令失敗","prompt.toast.commandSendFailed.title":"傳送命令失敗","prompt.toast.promptSendFailed.title":"傳送提示失敗","prompt.toast.promptSendFailed.description":"無法取得工作階段","dialog.mcp.title":"MCP","dialog.mcp.description":"已啟用 {{enabled}} / {{total}}","dialog.mcp.empty":"未設定 MCP","dialog.mcp.addTitle":"新增 MCP 伺服器","dialog.mcp.editTitle":"編輯 MCP 伺服器","dialog.mcp.addButton":"新增 MCP 伺服器","dialog.mcp.form.hint":"按通用方式設定 MCP:本機 stdio(command + env)或遠端 HTTP(url + headers)。寫入目前登入帳號的設定,僅本人可見。遠端專案需重新連線後才會載入新的 MCP。","dialog.mcp.form.name":"名稱","dialog.mcp.form.namePlaceholder":"filesystem","dialog.mcp.form.transport":"連線類型","dialog.mcp.form.transport.local":"本機 (stdio)","dialog.mcp.form.transport.remote":"遠端 (HTTP)","dialog.mcp.form.command":"啟動命令","dialog.mcp.form.commandPlaceholder":"npx -y @modelcontextprotocol/server-filesystem /data","dialog.mcp.form.environment":"環境變數(可選,每行 KEY=VALUE)","dialog.mcp.form.environmentPlaceholder":`API_KEY=...
|
|
2
|
-
REGION=...`,"dialog.mcp.form.url":"伺服器 URL","dialog.mcp.form.urlPlaceholder":"https://api.example.com/mcp","dialog.mcp.form.headers":"請求標頭(可選,每行 KEY=VALUE)","dialog.mcp.form.headersPlaceholder":"Authorization=Bearer ...","dialog.mcp.form.enabled":"儲存後啟用","dialog.mcp.form.enabledDescription":"儲存後立即連線此 MCP 伺服器。","dialog.mcp.error.name":"請填寫伺服器名稱","dialog.mcp.error.command":"請填寫本機啟動命令","dialog.mcp.error.url":"請填寫遠端 URL","dialog.mcp.error.duplicate":"已存在同名 MCP 伺服器","dialog.mcp.error.missingConfig":"無法載入該 MCP 設定進行編輯","dialog.mcp.toast.saved":"全域 MCP 設定已儲存","dialog.mcp.form.oauth":"OAuth","dialog.mcp.form.oauthDescription":"遠端伺服器預設嘗試 OAuth。關閉後寫入 oauth: false。","dialog.mcp.deleteConfirm":"刪除 MCP 伺服器 {{name}}?已連線的工作階段會在下次使用時中斷它。","dialog.mcp.retry":"重試連線","dialog.mcp.card.tools":"工具","dialog.mcp.card.toolsEmpty":"已連線,但這個伺服器沒有暴露工具。","dialog.mcp.card.toolsPending":"
|
|
1
|
+
const e={"command.category.suggested":"建議","command.category.view":"檢視","command.category.project":"專案","command.category.provider":"提供者","command.category.server":"伺服器","command.category.session":"工作階段","command.category.theme":"主題","command.category.language":"語言","command.category.file":"檔案","command.category.context":"上下文","command.category.terminal":"終端機","command.category.model":"模型","command.category.mcp":"MCP","command.category.agent":"代理程式","command.category.permissions":"權限","command.category.workspace":"工作區","command.category.settings":"設定","theme.scheme.system":"系統","theme.scheme.light":"淺色","theme.scheme.dark":"深色","command.sidebar.toggle":"切換側邊欄","titlebar.sidebar.label":"會話列表","command.project.open":"開啟專案","command.provider.connect":"連接提供者","command.server.switch":"切換伺服器","command.settings.open":"開啟設定","command.session.previous":"上一個工作階段","command.session.next":"下一個工作階段","command.session.previous.unseen":"上一個未讀會話","command.session.next.unseen":"下一個未讀會話","command.session.archive":"封存工作階段","command.palette":"命令面板","command.theme.cycle":"循環主題","command.theme.set":"使用主題: {{theme}}","command.theme.scheme.cycle":"循環配色方案","command.theme.scheme.set":"使用配色方案: {{scheme}}","command.language.cycle":"循環語言","command.language.set":"使用語言: {{language}}","command.session.new":"新增工作階段","command.file.open":"開啟檔案","command.tab.close":"關閉分頁","command.context.addSelection":"將選取內容加入上下文","command.context.addSelection.description":"加入目前檔案中選取的行","command.input.focus":"聚焦輸入框","command.terminal.toggle":"切換終端機","command.fileTree.toggle":"切換檔案樹","command.review.toggle":"切換審查","command.terminal.new":"新增終端機","command.terminal.new.description":"建立新的終端機標籤頁","command.steps.toggle":"切換步驟","command.steps.toggle.description":"顯示或隱藏目前訊息的步驟","command.message.previous":"上一則訊息","command.message.previous.description":"跳到上一則使用者訊息","command.message.next":"下一則訊息","command.message.next.description":"跳到下一則使用者訊息","command.model.choose":"選擇模型","command.model.choose.description":"選擇不同的模型","command.mcp.toggle":"切換 MCP","command.mcp.toggle.description":"切換 MCP","command.agent.cycle":"循環代理程式","command.agent.cycle.description":"切換到下一個代理程式","command.agent.cycle.reverse":"反向循環代理程式","command.agent.cycle.reverse.description":"切換到上一個代理程式","command.model.variant.cycle":"循環思考強度","command.model.variant.cycle.description":"切換到下一個強度等級","command.prompt.mode.shell":"Shell","command.prompt.mode.normal":"Prompt","command.permissions.autoaccept.enable":"自動接受權限","command.permissions.autoaccept.disable":"停止自動接受權限","command.workspace.toggle":"切換工作區","command.workspace.toggle.description":"在側邊欄啟用或停用多個工作區","command.session.undo":"復原","command.session.undo.description":"復原上一則訊息","command.session.redo":"重做","command.session.redo.description":"重做上一則復原的訊息","command.session.compact":"精簡工作階段","command.session.compact.description":"總結工作階段以減少上下文大小","command.session.fork":"從訊息分支","command.session.fork.description":"從先前的訊息建立新工作階段","command.session.share":"分享工作階段","command.session.share.description":"分享此工作階段並將連結複製到剪貼簿","command.session.unshare":"取消分享工作階段","command.session.unshare.description":"停止分享此工作階段","palette.search.placeholder":"搜尋檔案、命令和工作階段","palette.empty":"找不到結果","palette.group.commands":"命令","palette.group.files":"檔案","dialog.provider.search.placeholder":"搜尋提供者","dialog.provider.empty":"找不到提供者","dialog.provider.group.popular":"熱門","dialog.provider.group.other":"其他","dialog.provider.tag.recommended":"推薦","dialog.provider.tag.connected":"已連線","dialog.provider.opencode.note":"精選模型,包含 Claude、GPT、Gemini 等等","dialog.provider.opencode.tagline":"可靠的優化模型","dialog.provider.opencodeGo.tagline":"適合所有人的低成本訂閱","dialog.provider.anthropic.note":"使用 Claude Pro/Max 或 API 金鑰連線","dialog.provider.openai.note":"使用 ChatGPT Pro/Plus 或 API 金鑰連線","dialog.provider.copilot.note":"使用 Copilot 或 API 金鑰連線","dialog.provider.google.note":"Gemini 模型,提供快速且結構化的回應","dialog.provider.openrouter.note":"從單一提供者存取所有支援的模型","dialog.provider.vercel.note":"透過智慧路由統一存取 AI 模型","dialog.model.select.title":"選擇模型","dialog.model.search.placeholder":"搜尋模型","dialog.model.empty":"找不到模型","dialog.model.manage":"管理模型","dialog.model.manage.description":"自訂模型選擇器中顯示的模型。","dialog.model.manage.provider.toggle":"切換所有 {{provider}} 模型","dialog.model.provider.edit":"編輯此提供商","dialog.model.unpaid.freeModels.title":"OpenCode 提供的免費模型","dialog.model.unpaid.addMore.title":"從熱門提供者新增更多模型","dialog.provider.viewAll":"查看更多提供者","provider.connect.title":"連線 {{provider}}","provider.connect.title.anthropicProMax":"使用 Claude Pro/Max 登入","provider.connect.selectMethod":"選擇 {{provider}} 的登入方式。","provider.connect.method.apiKey":"API 金鑰","provider.connect.status.inProgress":"正在授權...","provider.connect.status.waiting":"等待授權...","provider.connect.status.failed":"授權失敗: {{error}}","provider.connect.apiKey.description":"輸入你的 {{provider}} API 金鑰以連線帳戶,並在 OpenCode 中使用 {{provider}} 模型。","provider.connect.apiKey.label":"{{provider}} API 金鑰","provider.connect.apiKey.placeholder":"API 金鑰","provider.connect.apiKey.required":"API 金鑰為必填","provider.connect.opencodeZen.line1":"OpenCode Zen 為你提供一組精選的可靠最佳化模型,用於程式碼代理程式。","provider.connect.opencodeZen.line2":"只需一個 API 金鑰,你就能使用 Claude、GPT、Gemini、GLM 等模型。","provider.connect.opencodeZen.visit.prefix":"造訪 ","provider.connect.opencodeZen.visit.link":"opencode.ai/zen","provider.connect.opencodeZen.visit.suffix":" 取得你的 API 金鑰。","provider.connect.oauth.code.visit.prefix":"造訪 ","provider.connect.oauth.code.visit.link":"此連結","provider.connect.oauth.code.visit.suffix":" 取得授權碼,以連線你的帳戶並在 OpenCode 中使用 {{provider}} 模型。","provider.connect.oauth.code.label":"{{method}} 授權碼","provider.connect.oauth.code.placeholder":"授權碼","provider.connect.oauth.code.required":"授權碼為必填","provider.connect.oauth.code.invalid":"授權碼無效","provider.connect.oauth.auto.visit.prefix":"造訪 ","provider.connect.oauth.auto.visit.link":"此連結","provider.connect.oauth.auto.visit.suffix":" 並輸入以下程式碼,以連線你的帳戶並在 OpenCode 中使用 {{provider}} 模型。","provider.connect.oauth.auto.confirmationCode":"確認碼","provider.connect.toast.connected.title":"{{provider}} 已連線","provider.connect.toast.connected.description":"現在可以使用 {{provider}} 模型了。","provider.custom.title":"自訂提供商","provider.custom.description.prefix":"設定與 OpenAI 相容的提供商。請參閱","provider.custom.description.link":"提供商設定文件","provider.custom.description.suffix":"。","provider.custom.field.providerID.label":"提供商 ID","provider.custom.field.providerID.placeholder":"myprovider","provider.custom.field.providerID.description":"使用小寫字母、數字、連字號或底線","provider.custom.field.name.label":"顯示名稱","provider.custom.field.name.placeholder":"我的 AI 提供商","provider.custom.field.baseURL.label":"基礎 URL","provider.custom.field.baseURL.placeholder":"https://api.myprovider.com/v1","provider.custom.field.apiKey.label":"API 金鑰","provider.custom.field.apiKey.placeholder":"API 金鑰","provider.custom.field.apiKey.description":"選填。若您透過標頭管理驗證,可留空。","provider.custom.models.label":"模型","provider.custom.models.id.label":"ID","provider.custom.models.id.placeholder":"model-id","provider.custom.models.name.label":"名稱","provider.custom.models.name.placeholder":"顯示名稱","provider.custom.models.remove":"移除模型","provider.custom.models.add":"新增模型","provider.custom.headers.label":"標頭(選填)","provider.custom.headers.key.label":"標頭","provider.custom.headers.key.placeholder":"Header-Name","provider.custom.headers.value.label":"值","provider.custom.headers.value.placeholder":"value","provider.custom.headers.remove":"移除標頭","provider.custom.headers.add":"新增標頭","provider.custom.error.providerID.required":"提供商 ID 為必填","provider.custom.error.providerID.format":"請使用小寫字母、數字、連字號或底線","provider.custom.error.providerID.exists":"該提供商 ID 已存在","provider.custom.error.name.required":"顯示名稱為必填","provider.custom.error.baseURL.required":"基礎 URL 為必填","provider.custom.error.baseURL.format":"必須以 http:// 或 https:// 開頭","provider.custom.error.required":"必填","provider.custom.error.duplicate":"重複","provider.custom.error.probe.auth":"API 金鑰認證失敗,未儲存完整金鑰。","provider.custom.error.probe.network":"無法連線基礎 URL,請檢查位址與網路。","provider.custom.error.probe.timeout":"連線逾時,請檢查基礎 URL 與網路。","provider.custom.error.probe.failed":"提供者介面探測失敗。","provider.custom.edit.title":"編輯自訂提供者","provider.custom.field.apiKey.keepPlaceholder":"留空則保持原金鑰","provider.custom.field.apiKey.keepDescription":"選填。留空將保留已設定的 API 金鑰。","provider.custom.field.apiKey.configuredHint":"已設定 API 金鑰,留空將保持不變。重新填寫會覆蓋原金鑰。","provider.custom.toast.updated.title":"{{provider}} 已更新","provider.custom.toast.updated.description":"後續呼叫將使用新的設定。","provider.disconnect.toast.disconnected.title":"{{provider}} 已中斷連線","provider.disconnect.toast.disconnected.description":"{{provider}} 模型已不再可用。","provider.disconnect.busy":"中斷中…","provider.delete.busy":"刪除中…","provider.disconnect.toast.pending.title":"正在中斷 {{provider}}…","provider.disconnect.toast.pending.description":"正在清理設定並重新整理服務,請稍候。","provider.delete.toast.pending.title":"正在刪除 {{provider}}…","provider.delete.toast.pending.description":"正在清理設定並重新整理服務,請稍候。","model.tag.free":"免費","model.tag.limited":"限免","model.tag.latest":"最新","model.provider.anthropic":"Anthropic","model.provider.openai":"OpenAI","model.provider.google":"Google","model.provider.xai":"xAI","model.provider.meta":"Meta","model.input.text":"文字","model.input.image":"圖片","model.input.audio":"音訊","model.input.video":"影片","model.input.pdf":"pdf","model.tooltip.allows":"支援: {{inputs}}","model.tooltip.reasoning.allowed":"支援推理","model.tooltip.reasoning.none":"不支援推理","model.tooltip.context":"上下文上限 {{limit}}","common.search.placeholder":"搜尋","common.goBack":"返回","common.goForward":"前進","common.loading":"載入中","common.loading.ellipsis":"...","common.cancel":"取消","common.connect":"連線","common.disconnect":"中斷連線","common.continue":"提交","common.submit":"提交","common.save":"儲存","common.saving":"儲存中...","common.default":"預設","common.attachment":"附件","prompt.placeholder.shell":"輸入 shell 命令... {{example}}","prompt.placeholder.normal":"使用 OneScience {{example}}","prompt.placeholder.simple":"使用 OneScience...","prompt.placeholder.summarizeComments":"摘要評論…","prompt.placeholder.summarizeComment":"摘要這則評論…","prompt.mode.shell":"Shell","prompt.mode.normal":"Prompt","prompt.mode.shell.exit":"按 esc 退出","prompt.example.1":"修復程式碼庫中的一個 TODO","prompt.example.2":"這個專案的技術堆疊是什麼?","prompt.example.3":"修復失敗的測試","prompt.example.4":"解釋驗證是如何運作的","prompt.example.5":"尋找並修復安全漏洞","prompt.example.6":"為使用者服務新增單元測試","prompt.example.7":"重構這個函式,讓它更易讀","prompt.example.8":"這個錯誤是什麼意思?","prompt.example.9":"幫我偵錯這個問題","prompt.example.10":"產生 API 文件","prompt.example.11":"最佳化資料庫查詢","prompt.example.12":"新增輸入驗證","prompt.example.13":"建立一個新的元件用於...","prompt.example.14":"我該如何部署這個專案?","prompt.example.15":"審查我的程式碼並給出最佳實務建議","prompt.example.16":"為這個函式新增錯誤處理","prompt.example.17":"解釋這個正規表示式","prompt.example.18":"把它轉換成 TypeScript","prompt.example.19":"在整個程式碼庫中新增日誌","prompt.example.20":"哪些相依性已經過期?","prompt.example.21":"幫我寫一個遷移腳本","prompt.example.22":"為這個端點實作快取","prompt.example.23":"給這個清單新增分頁","prompt.example.24":"建立一個 CLI 命令用於...","prompt.example.25":"這裡的環境變數是怎麼運作的?","prompt.popover.emptyResults":"沒有符合的結果","prompt.popover.emptyCommands":"沒有符合的命令","prompt.dropzone.label":"將圖片、PDF 或文字檔案拖放到此處","prompt.dropzone.file.label":"拖放以 @提及檔案","prompt.slash.badge.custom":"自訂","prompt.slash.badge.skill":"技能","prompt.slash.badge.mcp":"mcp","prompt.context.active":"作用中","prompt.context.includeActiveFile":"包含作用中檔案","prompt.context.removeActiveFile":"從上下文移除目前檔案","prompt.context.removeFile":"從上下文移除檔案","prompt.context.removeSkill":"從上下文移除技能","prompt.toast.skillUnavailable.description":"目前工作區尚未載入此技能,請確認技能已同步後再傳送。","prompt.action.attachFile":"附加檔案","prompt.attachment.remove":"移除附件","prompt.action.send":"傳送","prompt.action.stop":"停止","prompt.toast.pasteUnsupported.title":"不支援的附件","prompt.toast.pasteUnsupported.description":"此處僅能附加圖片、PDF 或文字檔案。","prompt.toast.modelAgentRequired.title":"請選擇代理程式和模型","prompt.toast.modelAgentRequired.description":"傳送提示前請先選擇代理程式和模型。","prompt.toast.worktreeCreateFailed.title":"建立工作樹失敗","prompt.toast.sessionCreateFailed.title":"建立工作階段失敗","prompt.toast.shellSendFailed.title":"傳送 shell 命令失敗","prompt.toast.commandSendFailed.title":"傳送命令失敗","prompt.toast.promptSendFailed.title":"傳送提示失敗","prompt.toast.promptSendFailed.description":"無法取得工作階段","dialog.mcp.title":"MCP","dialog.mcp.description":"已啟用 {{enabled}} / {{total}}","dialog.mcp.empty":"還沒有 MCP 工具","dialog.mcp.addTitle":"新增 MCP 工具","dialog.mcp.editTitle":"編輯 MCP 伺服器","dialog.mcp.addButton":"新增","dialog.mcp.intro":"請從 MCP Servers 的介紹頁面複製設定 JSON(優先使用 NPX 或 UVX 設定),並貼到輸入框中。","dialog.mcp.form.mode":"表單填寫","dialog.mcp.form.hint":"本機工具填寫啟動命令,遠端工具填寫網址。","dialog.mcp.form.name":"名稱","dialog.mcp.form.namePlaceholder":"filesystem","dialog.mcp.form.transport":"連線類型","dialog.mcp.form.transport.local":"本機 (stdio)","dialog.mcp.form.transport.remote":"遠端 (HTTP)","dialog.mcp.form.command":"啟動命令","dialog.mcp.form.commandPlaceholder":"npx -y @modelcontextprotocol/server-filesystem /data","dialog.mcp.form.environment":"環境變數(可選,每行 KEY=VALUE)","dialog.mcp.form.environmentPlaceholder":`API_KEY=...
|
|
2
|
+
REGION=...`,"dialog.mcp.form.url":"伺服器 URL","dialog.mcp.form.urlPlaceholder":"https://api.example.com/mcp","dialog.mcp.form.headers":"請求標頭(可選,每行 KEY=VALUE)","dialog.mcp.form.headersPlaceholder":"Authorization=Bearer ...","dialog.mcp.form.enabled":"儲存後啟用","dialog.mcp.form.enabledDescription":"儲存後立即連線此 MCP 伺服器。","dialog.mcp.error.name":"請填寫伺服器名稱","dialog.mcp.error.command":"請填寫本機啟動命令","dialog.mcp.error.url":"請填寫遠端 URL","dialog.mcp.error.duplicate":"已存在同名 MCP 伺服器","dialog.mcp.error.missingConfig":"無法載入該 MCP 設定進行編輯","dialog.mcp.toast.saved":"全域 MCP 設定已儲存","dialog.mcp.form.oauth":"OAuth","dialog.mcp.form.oauthDescription":"遠端伺服器預設嘗試 OAuth。關閉後寫入 oauth: false。","dialog.mcp.deleteConfirm":"刪除 MCP 伺服器 {{name}}?已連線的工作階段會在下次使用時中斷它。","dialog.mcp.retry":"重試連線","dialog.mcp.card.tools":"工具","dialog.mcp.card.toolsEmpty":"已連線,但這個伺服器沒有暴露工具。","dialog.mcp.card.toolsPending":"儲存後會連線,並在這裡列出它提供的工具。","dialog.mcp.json.mode":"貼上 JSON","dialog.mcp.json.hint":"請從 MCP Servers 的介紹頁面複製設定 JSON(優先使用 NPX 或 UVX 設定),並貼到輸入框中。","dialog.mcp.json.placeholder":`{
|
|
3
|
+
"mcpServers": {
|
|
4
|
+
"example": {
|
|
5
|
+
"command": "npx",
|
|
6
|
+
"args": ["-y", "my-mcp-command"]
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
}`,"dialog.mcp.json.error.empty":"請先貼上設定","dialog.mcp.json.error.json":"這段內容不是有效的 JSON","dialog.mcp.json.error.invalid":"沒有識別到可用的工具。請確認設定裡有名稱,以及 command 或 url。","dialog.mcp.json.error.invalidNamed":"這些項目無法識別:{{detail}}","dialog.ssh.title":"SSH 設定","dialog.ssh.description":"設定供智能體提交遠端作業使用的 SSH 目標。","dialog.ssh.empty":"未設定 SSH 目標","dialog.ssh.addTitle":"新增 SSH 設定","dialog.ssh.editTitle":"編輯 SSH 設定","dialog.ssh.error.missingConfig":"無法載入該 SSH 設定進行編輯","dialog.ssh.addButton":"新增 SSH 設定","dialog.ssh.import":"一鍵匯入 SSH Config","dialog.ssh.importDescription":"貼上 SSH Config 後自動填入 Host、HostName、連接埠、使用者、密鑰和遠端目錄。","dialog.ssh.importAction":"一鍵匯入","dialog.ssh.importPlaceholder":"貼上 SSH Config,例如 Host、HostName、Port、User、IdentityFile、# RemoteWorkDir","dialog.ssh.name":"設定名稱","dialog.ssh.nameDescription":"在列表中顯示的名稱,用來區分多套 SSH 目標。","dialog.ssh.hostName":"伺服器地址","dialog.ssh.hostNamePlaceholder":"1.2.3.4","dialog.ssh.hostNameDescription":"實際連線的 IP 或域名。例如 1.2.3.4 或 cluster.example.com。","dialog.ssh.username":"登入使用者名稱","dialog.ssh.usernamePlaceholder":"ubuntu","dialog.ssh.usernameDescription":"SSH 登入帳號,例如 ubuntu、root。","dialog.ssh.port":"連接埠","dialog.ssh.remotePath":"遠端工作目錄(選填)","dialog.ssh.remotePathDescription":"智能體登入後進入的目錄。留空則使用 SSH 登入後的預設家目錄。","dialog.ssh.auth":"認證方式","dialog.ssh.auth.key":"密鑰檔案","dialog.ssh.auth.keyDescription":"使用上傳到 OneCode 服務端的私鑰檔。","dialog.ssh.auth.password":"密碼","dialog.ssh.auth.passwordDescription":"以 SSH 登入密碼連線。密碼存在 OneCode 服務端設定中,不會寫入 ~/.ssh/config。","dialog.ssh.password":"SSH 密碼","dialog.ssh.passwordPlaceholder":"your-password","dialog.ssh.passwordHint":"僅用於目前 SSH 目標。叢集允許金鑰登入時建議改用金鑰。","dialog.ssh.passwordRequired":"請填寫 SSH 密碼","dialog.ssh.keyRequired":"請上傳或填寫私鑰檔","dialog.ssh.keyPath":"Identity File","dialog.ssh.keyPathPlaceholder":"伺服器端密鑰路徑,上傳後自動填入","dialog.ssh.identity.upload":"上傳 IdentityFile","dialog.ssh.identity.uploading":"上傳中","dialog.ssh.identity.uploaded":"IdentityFile 已上傳到伺服器","dialog.ssh.identity.ingested":"已從 OneCode 伺服器匯入金鑰","dialog.ssh.identity.uploadFailed":"IdentityFile 上傳失敗","dialog.ssh.identity.missingTitle":"伺服器上找不到金鑰檔","dialog.ssh.identity.missingDescription":"一鍵匯入的 IdentityFile 路徑在目前 OneCode 伺服器上不存在,請先上傳金鑰後再測試。","dialog.ssh.identity.missingEmpty":"未解析到 IdentityFile,請上傳金鑰後再測試。","dialog.ssh.identity.missingLocalPath":"後台無法讀取該 IdentityFile(本機 Windows 路徑在伺服器上不存在)。請點「上傳 IdentityFile」手動選擇後上傳。","dialog.ssh.identity.pickPromptTitle":"金鑰不在 OneCode 所在環境","dialog.ssh.identity.pickPromptDescription":"匯入的 IdentityFile 無法在目前 OneCode 伺服器上讀取。請選擇本機金鑰檔並上傳。","dialog.ssh.identity.pickPromptAction":"選擇金鑰檔","dialog.ssh.identity.pickPromptLater":"稍後","dialog.ssh.identity.missingUnverified":"無法確認伺服器上的金鑰檔是否存在,請先上傳金鑰後再測試。","dialog.ssh.identity.missingInline":"目前金鑰檔在伺服器上不可用,請先上傳 IdentityFile。上傳完成前無法測試。","dialog.ssh.identity.needsUploadTitle":"請上傳金鑰檔","dialog.ssh.identity.needsUploadDescription":"本機已找到匯入的 IdentityFile,請點擊「上傳 IdentityFile」後再測試。","dialog.ssh.identity.needsUploadInline":"本機已找到該金鑰檔,請點擊「上傳 IdentityFile」後再測試。","dialog.ssh.identity.notFoundTitle":"金鑰檔不存在","dialog.ssh.identity.notFoundDescription":"本機找不到匯入的 IdentityFile 路徑,請選擇正確的金鑰檔並上傳。","dialog.ssh.identity.notFoundInline":"本機找不到該金鑰檔,請選擇正確的金鑰並上傳。","dialog.ssh.options":"SSH 選項(每行 KEY=VALUE)","dialog.ssh.status.enabled":"已啟用","dialog.ssh.status.disabled":"已停用","dialog.ssh.required":"請填寫設定名稱、伺服器地址、登入使用者名稱和連接埠","dialog.ssh.portInvalid":"連接埠必須是 1-65535 的整數","dialog.ssh.connectivity.action":"檢測連通性","dialog.ssh.connectivity.running":"檢測中...","dialog.ssh.connectivity.progress":"檢測中...({current}/{total})· {name}","dialog.ssh.connectivity.itemAction":"檢測","dialog.ssh.connectivity.itemRunning":"檢測中","dialog.ssh.test.action":"測試","dialog.ssh.test.running":"測試中","dialog.ssh.test.passed":"SSH 設定可用","dialog.ssh.test.failed":"SSH 設定不可用","dialog.ssh.test.description":"伺服器已成功連接 SSH 目標,並確認遠端工作目錄可存取。","dialog.ssh.test.serverMissing":"目前 opencode server 尚未載入 SSH 測試介面,請重新啟動 server 服務後再試。","dialog.ssh.test.detail.message":"原因","dialog.ssh.test.detail.stderr":"錯誤輸出","dialog.ssh.test.detail.stdout":"標準輸出","dialog.ssh.toast.saved":"SSH 設定已儲存","dialog.ssh.toast.removed":"SSH 設定已刪除","dialog.ssh.usage.ok":"知道了","dialog.ssh.usage.connectedBanner":"以下專案正在連線此設定,請先中斷後再重新命名、停用、刪除或修改主機/使用者/認證:{{projects}}","dialog.ssh.usage.blocked.title":"無法修改 SSH 設定","dialog.ssh.usage.blocked.delete.title":"無法刪除 SSH 設定","dialog.ssh.usage.blocked.delete":"以下專案正在連線 SSH 設定「{{name}}」,請先中斷:{{projects}}","dialog.ssh.usage.blocked.delete.bound":`以下專案仍綁定 SSH 設定「{{name}}」:
|
|
3
10
|
{{projects}}
|
|
4
11
|
請先刪除這些遠端專案後,再刪除此設定。`,"dialog.ssh.usage.blocked.rename":"以下專案正在連線 SSH 設定「{{name}}」,無法重新命名。請先中斷:{{projects}}","dialog.ssh.usage.blocked.identity":"以下專案正在連線 SSH 設定「{{name}}」,無法修改主機、使用者或認證。請先中斷:{{projects}}","dialog.ssh.usage.blocked.disable":"以下專案正在連線 SSH 設定「{{name}}」,無法停用。請先中斷:{{projects}}","dialog.ssh.usage.confirm.delete.title":"刪除 SSH 設定","dialog.ssh.usage.confirm.delete":"刪除「{{name}}」後,以下遠端專案仍保持遠端綁定,但無法連線,直到重新新增同名設定:{{projects}}","dialog.ssh.usage.confirm.delete.empty":"確定刪除 SSH 設定「{{name}}」?","dialog.ssh.usage.confirm.rename":"將把以下專案的綁定從「{{from}}」更新為「{{to}}」:{{projects}}","dialog.ssh.usage.confirm.identity":"儲存後,以下專案下次連線將使用新的主機/使用者/認證;各專案記錄的遠端路徑不變:{{projects}}","dialog.ssh.usage.confirm.disable":"停用後,以下已綁定專案將無法連線,直到重新啟用:{{projects}}","dialog.ssh.usage.confirm.save":"確認儲存 SSH 設定","dialog.lsp.empty":"已從檔案類型自動偵測到 LSPs","dialog.plugins.empty":"在 opencode.json 中設定的外掛程式","mcp.status.connected":"已連線","mcp.status.failed":"失敗","mcp.status.needs_auth":"需要授權","mcp.status.disabled":"已停用","mcp.status.needs_client_registration":"需要註冊用戶端","dialog.fork.empty":"沒有可用於分支的訊息","dialog.directory.search.placeholder":"搜尋資料夾","dialog.directory.empty":"找不到資料夾","dialog.server.title":"後端連線","dialog.server.description":"切換此應用程式連線的 OneCode 後端(進階)。","dialog.server.search.placeholder":"搜尋後端","dialog.server.empty":"暫無後端連線","dialog.server.group.http":"本地/HTTP","dialog.server.group.ssh":"SSH 設定","dialog.server.group.mcp":"MCP 工具","dialog.server.mcp.description":"MCP 是工具連線,作為遠端執行和部署能力提供給會話使用。","dialog.server.mcp.manage":"管理 MCP","dialog.server.ssh.add":"新增 SSH 設定","dialog.server.add.title":"新增後端","dialog.server.add.url":"後端位址 (URL)","dialog.server.add.placeholder":"http://127.0.0.1:4096","dialog.server.add.error":"無法連線到後端","dialog.server.add.checking":"檢查中...","dialog.server.add.button":"新增後端位址","dialog.server.add.name":"名稱(選填)","dialog.server.add.namePlaceholder":"Localhost","dialog.server.add.username":"Basic 使用者名稱(通常留空)","dialog.server.add.password":"存取權杖 / 密碼(選填)","dialog.server.add.usernamePlaceholder":"僅當服務端使用 --username 時填寫","dialog.server.add.passwordPlaceholder":"遠端伺服器可選密碼","dialog.server.add.auth.hint":"日常使用可全部留空。僅在連線需要 HTTP Basic 認證的遠端伺服器時,再填寫「存取權杖 / 密碼」;通常不要填使用者名稱。","dialog.server.edit.title":"編輯後端","dialog.server.default.title":"預設後端","dialog.server.default.description":"應用程式啟動時連線此後端,而不是啟動本地伺服器。需要重新啟動。","dialog.server.default.none":"未選擇後端","dialog.server.default.set":"將目前後端設為預設","dialog.server.default.clear":"清除","dialog.server.action.remove":"移除後端","dialog.server.menu.edit":"編輯","dialog.server.menu.reconnect":"重新連線","dialog.server.menu.default":"設為預設","dialog.server.menu.defaultRemove":"取消預設","dialog.server.menu.delete":"刪除","dialog.server.current":"目前後端","dialog.server.status.default":"預設","dialog.project.edit.title":"編輯專案","dialog.project.edit.name":"名稱","dialog.project.edit.icon":"圖示","dialog.project.edit.icon.alt":"專案圖示","dialog.project.edit.icon.hint":"點擊或拖曳圖片","dialog.project.edit.icon.recommended":"建議:128x128px","dialog.project.edit.color":"顏色","dialog.project.edit.color.select":"選擇{{color}}顏色","dialog.project.edit.worktree.startup":"工作區啟動腳本","dialog.project.edit.worktree.startup.description":"在建立新的工作區 (worktree) 後執行。","dialog.project.edit.worktree.startup.placeholder":"例如 bun install","context.breakdown.title":"上下文拆分","context.breakdown.note":"輸入 token 的大致拆分。「其他」包含工具定義和額外開銷。","context.breakdown.system":"系統","context.breakdown.user":"使用者","context.breakdown.assistant":"助手","context.breakdown.tool":"工具呼叫","context.breakdown.other":"其他","context.systemPrompt.title":"系統提示詞","context.rawMessages.title":"原始訊息","context.stats.session":"工作階段","context.stats.messages":"訊息數","context.stats.provider":"提供者","context.stats.model":"模型","context.stats.limit":"上下文限制","context.stats.totalTokens":"總 token","context.stats.usage":"使用量","context.stats.inputTokens":"輸入 token","context.stats.outputTokens":"輸出 token","context.stats.reasoningTokens":"推理 token","context.stats.cacheTokens":"快取 token(讀/寫)","context.stats.userMessages":"使用者訊息","context.stats.assistantMessages":"助手訊息","context.stats.totalCost":"總成本","context.stats.sessionCreated":"建立時間","context.stats.lastActivity":"最後活動","context.usage.tokens":"Token","context.usage.usage":"使用量","context.usage.cost":"成本","context.usage.clickToView":"點擊查看上下文","context.usage.view":"檢視上下文用量","language.en":"English","language.zh":"简体中文","language.zht":"繁體中文","language.ko":"한국어","language.de":"Deutsch","language.es":"Español","language.fr":"Français","language.da":"Dansk","language.ja":"日本語","language.pl":"Polski","language.ru":"Русский","language.ar":"العربية","language.no":"Norsk","language.br":"Português (Brasil)","language.bs":"Bosanski","language.th":"ไทย","language.tr":"Türkçe","toast.language.title":"語言","toast.language.description":"已切換到 {{language}}","toast.theme.title":"主題已切換","toast.scheme.title":"顏色方案","toast.workspace.enabled.title":"工作區已啟用","toast.workspace.enabled.description":"側邊欄現在顯示多個工作樹","toast.workspace.disabled.title":"工作區已停用","toast.workspace.disabled.description":"側邊欄只顯示主工作樹","toast.permissions.autoaccept.on.title":"正在自動接受權限","toast.permissions.autoaccept.on.description":"權限請求將被自動批准","toast.permissions.autoaccept.off.title":"已停止自動接受權限","toast.permissions.autoaccept.off.description":"權限請求將需要批准","toast.model.none.title":"未選擇模型","toast.model.none.description":"請先連線提供者以總結此工作階段","toast.provider.catalogLoading.title":"正在載入模型目錄","toast.provider.catalogLoading.description":"正在拉取廠商與模型列表,可能需要幾秒…","toast.file.loadFailed.title":"載入檔案失敗","toast.file.listFailed.title":"列出檔案失敗","toast.context.noLineSelection.title":"未選取行","toast.context.noLineSelection.description":"請先在檔案分頁中選取行範圍。","toast.session.share.copyFailed.title":"無法複製連結到剪貼簿","toast.session.share.success.title":"工作階段已分享","toast.session.share.success.description":"分享連結已複製到剪貼簿","toast.session.share.failed.title":"分享工作階段失敗","toast.project.copyPath.failed":"無法複製路徑到剪貼簿","toast.session.share.failed.description":"分享工作階段時發生錯誤","toast.session.unshare.success.title":"已取消分享工作階段","toast.session.unshare.success.description":"工作階段已成功取消分享","toast.session.unshare.failed.title":"取消分享失敗","toast.session.unshare.failed.description":"取消分享工作階段時發生錯誤","toast.session.listFailed.title":"無法載入 {{project}} 的工作階段","toast.update.title":"有可用更新","toast.update.description":"OneCode 有新版本 ({{version}}) 可安裝。","toast.update.action.installRestart":"安裝並重新啟動","toast.update.action.notYet":"稍後","error.page.title":"出了點問題","error.page.description":"載入應用程式時發生錯誤。","error.page.details.label":"錯誤詳情","error.page.action.restart":"重新啟動","error.page.action.report":"回報錯誤","error.page.action.reported":"已回報錯誤","error.page.action.checking":"檢查中...","error.page.action.checkUpdates":"檢查更新","error.page.action.updateTo":"更新到 {{version}}","error.page.report.prefix":"請將此錯誤回報給 OpenCode 團隊","error.page.report.discord":"在 Discord 上","error.page.version":"版本: {{version}}","error.dev.rootNotFound":"找不到根元素。你是不是忘了把它新增到 index.html? 或者 id 屬性拼錯了?","error.globalSync.connectFailed":"無法連線到伺服器。是否有伺服器正在 `{{url}}` 執行?","directory.error.invalidUrl":"URL 中的目錄無效。","error.chain.unknown":"未知錯誤","error.chain.causedBy":"原因:","error.chain.apiError":"API 錯誤","error.chain.status":"狀態: {{status}}","error.chain.retryable":"可重試: {{retryable}}","error.chain.responseBody":`回應內容:
|
|
5
12
|
{{body}}`,"error.chain.didYouMean":"你是不是想輸入: {{suggestions}}","error.chain.modelNotFound":"找不到模型: {{provider}}/{{model}}","error.chain.checkConfig":"請檢查你的設定 (opencode.json) 中的 provider/model 名稱","error.chain.mcpFailed":'MCP 伺服器 "{{name}}" 啟動失敗。注意: OpenCode 暫不支援 MCP 認證。',"error.chain.providerAuthFailed":"提供者認證失敗 ({{provider}}): {{message}}","error.chain.providerInitFailed":'無法初始化提供者 "{{provider}}"。請檢查憑證和設定。',"error.chain.configJsonInvalid":"設定檔 {{path}} 不是有效的 JSON(C)","error.chain.configJsonInvalidWithMessage":"設定檔 {{path}} 不是有效的 JSON(C): {{message}}","error.chain.configDirectoryTypo":'{{path}} 中的目錄 "{{dir}}" 無效。請將目錄重新命名為 "{{suggestion}}" 或移除它。這是一個常見拼寫錯誤。',"error.chain.configFrontmatterError":`無法解析 {{path}} 中的 frontmatter:
|
package/index.html
CHANGED
|
@@ -8,19 +8,19 @@
|
|
|
8
8
|
name="description"
|
|
9
9
|
content="OneScience is an AI for Science workspace for research discovery, agent workflows, and scientific knowledge."
|
|
10
10
|
/>
|
|
11
|
-
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/npm/@onescience/onecode-web@1.14.50-
|
|
12
|
-
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/npm/@onescience/onecode-web@1.14.50-
|
|
13
|
-
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/npm/@onescience/onecode-web@1.14.50-
|
|
14
|
-
<link rel="manifest" href="https://cdn.jsdelivr.net/npm/@onescience/onecode-web@1.14.50-
|
|
15
|
-
<link rel="preload" href="https://cdn.jsdelivr.net/npm/@onescience/onecode-web@1.14.50-
|
|
16
|
-
<link rel="preload" href="https://cdn.jsdelivr.net/npm/@onescience/onecode-web@1.14.50-
|
|
11
|
+
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/npm/@onescience/onecode-web@1.14.50-202609231732/favicon-96x96-v3.png" sizes="96x96" />
|
|
12
|
+
<link rel="shortcut icon" href="https://cdn.jsdelivr.net/npm/@onescience/onecode-web@1.14.50-202609231732/favicon-v3.ico" />
|
|
13
|
+
<link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/npm/@onescience/onecode-web@1.14.50-202609231732/apple-touch-icon-v3.png" />
|
|
14
|
+
<link rel="manifest" href="https://cdn.jsdelivr.net/npm/@onescience/onecode-web@1.14.50-202609231732/site.webmanifest" />
|
|
15
|
+
<link rel="preload" href="https://cdn.jsdelivr.net/npm/@onescience/onecode-web@1.14.50-202609231732/assets/fonts/inter-400.woff2" as="font" type="font/woff2" crossorigin />
|
|
16
|
+
<link rel="preload" href="https://cdn.jsdelivr.net/npm/@onescience/onecode-web@1.14.50-202609231732/assets/fonts/noto-sc-400.woff2" as="font" type="font/woff2" crossorigin />
|
|
17
17
|
<meta name="theme-color" content="#F8F7F7" />
|
|
18
18
|
<meta name="theme-color" content="#131010" media="(prefers-color-scheme: dark)" />
|
|
19
|
-
<meta property="og:image" content="https://cdn.jsdelivr.net/npm/@onescience/onecode-web@1.14.50-
|
|
20
|
-
<meta property="twitter:image" content="https://cdn.jsdelivr.net/npm/@onescience/onecode-web@1.14.50-
|
|
21
|
-
<script id="oc-theme-preload-script" src="https://cdn.jsdelivr.net/npm/@onescience/onecode-web@1.14.50-
|
|
22
|
-
<script type="module" crossorigin src="https://cdn.jsdelivr.net/npm/@onescience/onecode-web@1.14.50-
|
|
23
|
-
<link rel="stylesheet" crossorigin href="https://cdn.jsdelivr.net/npm/@onescience/onecode-web@1.14.50-
|
|
19
|
+
<meta property="og:image" content="https://cdn.jsdelivr.net/npm/@onescience/onecode-web@1.14.50-202609231732/social-share.png" />
|
|
20
|
+
<meta property="twitter:image" content="https://cdn.jsdelivr.net/npm/@onescience/onecode-web@1.14.50-202609231732/social-share.png" />
|
|
21
|
+
<script id="oc-theme-preload-script" src="https://cdn.jsdelivr.net/npm/@onescience/onecode-web@1.14.50-202609231732/oc-theme-preload.js"></script>
|
|
22
|
+
<script type="module" crossorigin src="https://cdn.jsdelivr.net/npm/@onescience/onecode-web@1.14.50-202609231732/assets/index-WRGCuJLY.js"></script>
|
|
23
|
+
<link rel="stylesheet" crossorigin href="https://cdn.jsdelivr.net/npm/@onescience/onecode-web@1.14.50-202609231732/assets/index-BxyYyFjA.css">
|
|
24
24
|
</head>
|
|
25
25
|
<body class="antialiased overscroll-none text-12-regular overflow-hidden">
|
|
26
26
|
<noscript>You need to enable JavaScript to run this app.</noscript>
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@onescience/onecode-web",
|
|
3
|
-
"version": "1.14.50-
|
|
3
|
+
"version": "1.14.50-202609231732",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"description": "OneCode web UI static assets for CDN delivery.",
|
|
8
|
-
"homepage": "https://cdn.jsdelivr.net/npm/@onescience/onecode-web@1.14.50-
|
|
8
|
+
"homepage": "https://cdn.jsdelivr.net/npm/@onescience/onecode-web@1.14.50-202609231732/index.html",
|
|
9
9
|
"jsdelivr": "index.html",
|
|
10
10
|
"files": [
|
|
11
11
|
"**/*"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{b1 as te,P as G,cX as me,C as ge,at as j,ag as Z,i,a as _,c as z,D as B,z as we,t as v,d as ve,A as re,S as q,v as H,b as $,x as D,d1 as _e,u as Ce,c5 as ye,c6 as xe,E as Se,d2 as Pe,j as ke,c7 as fe,d3 as qe,d4 as pe,d5 as Ae,d6 as Te,d7 as Me,d8 as Ee,d9 as De,da as Ue,cp as le,db as He,o as ce,dc as Le}from"./index-CceAmj5n.js";var X=v("<p class=os-auth-error>"),Re=v('<form class=os-auth-form><label><span>账户 / 邮箱</span><input autocomplete=username placeholder=账户名或注册邮箱></label><label><span>密码</span><input autocomplete=current-password type=password placeholder=输入密码></label><button type=submit class="os-button os-button-primary os-auth-submit">'),Ie=v("<div class=os-auth-links><span>还没有账号?</span><a>创建账号</a><span class=os-auth-link-separator aria-hidden=true></span><a>忘记密码?"),Ne=v("<p>"),Fe=v('<div class=os-auth-email-verify><button type=button class="os-button os-button-secondary os-auth-submit"></button><label><span></span><input autocomplete=one-time-code>'),ze=v("<label><span>邀请码</span><input autocomplete=one-time-code placeholder=请输入邀请码><small class=os-auth-hint>当前已开启注册审核,需填写有效邀请码才能注册。"),je=v('<form class=os-auth-form><label><span>账户</span><input autocomplete=username placeholder="例如 researcher01"><small class=os-auth-hint>用作登录标识及个人工作区目录名称。长度 3–32 个字符,须以小写字母开头,仅可包含小写字母、数字、点(.)、下划线(_)与连字符(-)。</small></label><label><span>邮箱</span><input autocomplete=email inputmode=email placeholder=name@example.com><small class=os-auth-hint>用于账号找回与系统通知,亦可作为登录凭证。</small></label><label><span>密码</span><input autocomplete=new-password type=password placeholder="至少 8 位"></label><label><span>确认密码</span><input autocomplete=new-password type=password placeholder=再次输入密码></label><button type=submit class="os-button os-button-primary os-auth-submit">'),Be=v("<div class=os-auth-links><span>已有账号?</span><a>去登录"),Oe=v('<p class=os-auth-hint style="margin:0 0 0.35rem">通过注册邮箱获取验证码后重置密码。若无法收到邮件,请联系管理员。'),ee=v("<p class=os-account-success>"),Ve=v('<form class=os-auth-form><label><span>账号邮箱</span><input autocomplete=email inputmode=email placeholder=name@example.com></label><button type=submit class="os-button os-button-secondary os-auth-submit">'),We=v("<label><span>邮件验证码</span><input autocomplete=one-time-code placeholder=输入邮件中的验证码>"),Ge=v('<form class=os-auth-form><label><span>新密码</span><input autocomplete=new-password type=password placeholder="至少 8 位"></label><label><span>确认新密码</span><input autocomplete=new-password type=password placeholder=再次输入新密码></label><button type=submit class="os-button os-button-primary os-auth-submit">'),Xe=v("<div class=os-auth-links><a>返回登录</a><span class=os-auth-link-separator aria-hidden=true></span><a>创建账号"),Je=v('<p class=os-auth-hint style="margin:0 0 0.35rem">请设置新密码以完成重置。'),Ke=v("<main class=os-account-page><div class=os-account-shell>"),Qe=v("<section class=os-account-loading><strong>正在加载账号信息</strong><span>请稍候"),Ye=v('<section class=os-account-empty-state><strong></strong><span>登录后可以查看账号资料和开发空间。</span><a href="/login?redirect=%2Faccount"class="os-button os-button-primary">去登录'),Ze=v('<header class=os-account-header><div class=os-account-identity><div class=os-account-avatar></div><div><span class=os-account-kicker>账号中心</span><h1></h1><p></p></div></div><div class=os-account-actions><span class=os-account-status></span><a href=/code class="os-button os-button-secondary">进入科研开发</a><button type=button class="os-button os-button-danger">退出登录</button><button type=button class="os-button os-button-danger">'),et=v("<section class=os-account-workspace-hero><div class=os-account-workspace-hero-copy><span class=os-account-kicker>默认项目</span><strong>default</strong><p></p></div><div class=os-account-workspace-hero-meta><code>"),tt=v('<section class=os-account-content-grid><section class=os-account-panel><div class=os-account-panel-head><strong>基本资料</strong><span class=os-account-session-expiry title="这是当前浏览器登录会话的有效期(约 14 天),不是账号本身到期。重新登录即可续期,账号与工作区数据不受影响。">登录会话 <!>失效</span></div><p class=os-account-session-expiry-note>提示:上方倒计时是登录会话有效期,重新登录即可续期;账号与工作区数据不会因此删除。</p><dl class=os-account-field-grid><div><dt>账户</dt><dd></dd></div><div><dt>邮箱</dt><dd></dd></div><div><dt>创建时间</dt><dd></dd></div><div><dt>默认入口</dt><dd>科研开发工作台</dd></div></dl></section><section class=os-account-panel><div class=os-account-panel-head><strong>修改密码</strong><span>本地账号</span></div><form class=os-account-password-form><label><span>当前密码</span><input autocomplete=current-password type=password placeholder=输入当前密码></label><label><span>新密码</span><input autocomplete=new-password type=password placeholder="至少 8 位"></label><label><span>确认新密码</span><input autocomplete=new-password type=password placeholder=再次输入新密码></label><button type=submit class="os-button os-button-danger os-auth-submit">'),rt=v('<div class="flex flex-col gap-4 pl-6 pr-2.5 pb-3"><p class="text-14-regular text-text-strong"></p><div class="flex justify-end gap-2"><button type=button class="os-button os-button-secondary"></button><button type=button class="os-button os-button-danger">'),nt=v("<main class=os-auth-page><section class=os-auth-shell><button type=button class=os-auth-dismiss aria-label=关闭并返回浏览><span aria-hidden=true>×</span></button><section class=os-auth-panel><a class=os-auth-brand href=/></a><div class=os-auth-links><button type=button class=os-auth-link-button>暂不登录,继续浏览");function dt(){const c=te(),d=G(),[C,x]=z(Date.now()),[p,a]=j({name:"",email:"",password:"",confirmPassword:"",submitting:!1,error:""});Z(()=>{const b=window.setInterval(()=>x(Date.now()),250);re(()=>window.clearInterval(b))});const n=B(()=>{const b=p.lockedUntil;return typeof b!="number"?0:Math.max(0,Math.ceil((b-C())/1e3))}),f=B(()=>n()>0);we(()=>{const b=p.lockedUntil;typeof b=="number"&&(b>C()||a({lockedUntil:void 0,error:""}))});const P=async b=>{if(b.preventDefault(),f()){a("error",`尝试次数过多,请在 ${n()} 秒后重试`);return}if(!p.email.trim()||!p.password){a("error","请输入账户/邮箱和密码");return}a({submitting:!0,error:""});try{await fe(await qe({email:p.email.trim(),password:p.password}),c.storage),d(pe(location.search),{replace:!0});return}catch(t){const e=t instanceof Error&&"retryAfterMs"in t?Number(t.retryAfterMs):void 0;a({error:t instanceof Error?t.message:"登录失败,请稍后重试",submitting:!1,lockedUntil:typeof e=="number"&&e>0?Date.now()+e:void 0})}};return _(ne,{mode:"login",get children(){return[(()=>{var b=Re(),t=b.firstChild,e=t.firstChild,o=e.nextSibling,h=t.nextSibling,l=h.firstChild,m=l.nextSibling,s=h.nextSibling;return b.addEventListener("submit",P),o.$$input=r=>a("email",r.currentTarget.value),m.$$input=r=>a("password",r.currentTarget.value),i(b,_(q,{get when(){return p.error||f()},get children(){var r=X();return i(r,(()=>{var g=H(()=>!!f());return()=>g()?`尝试次数过多,请在 ${n()} 秒后重试`:p.error})()),r}}),s),i(s,(()=>{var r=H(()=>!!p.submitting);return()=>r()?"正在登录...":H(()=>!!f())()?`请 ${n()} 秒后重试`:"登录"})()),$(r=>{var g=p.submitting||f(),u=p.submitting||f(),S=p.submitting||f();return g!==r.e&&(o.disabled=r.e=g),u!==r.t&&(m.disabled=r.t=u),S!==r.a&&(s.disabled=r.a=S),r},{e:void 0,t:void 0,a:void 0}),$(()=>o.value=p.email),$(()=>m.value=p.password),b})(),(()=>{var b=Ie(),t=b.firstChild,e=t.nextSibling,o=e.nextSibling,h=o.nextSibling;return $(l=>{var m=`/register${location.search}`,s=`/forgot-password${location.search}`;return m!==l.e&&D(e,"href",l.e=m),s!==l.t&&D(h,"href",l.t=s),l},{e:void 0,t:void 0}),b})()]}})}function mt(){const c=te(),d=G(),[C,x]=z(!1),[p,a]=z(!1),[n,f]=z(!1),[P,b]=z(Date.now()),[t,e]=j({name:"",email:"",password:"",confirmPassword:"",inviteCode:"",emailCode:"",submitting:!1,requestingCode:!1,requestHint:"",cooldownUntil:0,error:""});Z(()=>{_e().then(r=>{x(!!r.inviteRequired),a(!!r.emailVerificationRequired)}).catch(()=>{x(!1),a(!1)});const s=window.setInterval(()=>b(Date.now()),250);re(()=>window.clearInterval(s))});const o=B(()=>Math.max(0,Math.ceil(((t.cooldownUntil??0)-P())/1e3))),h=B(()=>o()>0),l=async()=>{if(t.requestingCode||t.submitting||h())return;const s=de(t.email);if(s){e({error:s,requestHint:""});return}e({requestingCode:!0,error:"",requestHint:""});try{const r=await Ee({email:t.email.trim()}),g=typeof r.retryAfterMs=="number"&&r.retryAfterMs>0?r.retryAfterMs:6e4;if(r.smtpUnreachable){f(!0),e({requestingCode:!1,requestHint:"无法连接邮件服务器,本次注册无需填写验证码。找回密码仍须邮件验证,收不到验证码请联系管理员。",error:"",cooldownUntil:Date.now()+g});return}f(!1),e({requestingCode:!1,requestHint:"验证码已发送,请查收邮箱后填入下方。",error:"",cooldownUntil:Date.now()+g})}catch(r){const g=r instanceof Error&&"retryAfterMs"in r?Number(r.retryAfterMs):void 0;e({requestingCode:!1,error:r instanceof Error?r.message:"发送验证码失败,请稍后重试",requestHint:"",...typeof g=="number"&&g>0?{cooldownUntil:Date.now()+g}:{}})}},m=async s=>{if(s.preventDefault(),!t.name.trim()||!t.email.trim()||!t.password){e("error","请输入账户、邮箱和密码");return}const r=ct(t.name);if(r){e("error",r);return}const g=de(t.email);if(g){e("error",g);return}if(C()&&!(t.inviteCode??"").trim()){e("error","请填写邀请码");return}if(p()&&!n()&&!(t.emailCode??"").trim()){e("error","请填写邮箱验证码");return}if(t.password.length<8){e("error","密码至少需要 8 位");return}if(t.password!==t.confirmPassword){e("error","两次输入的密码不一致");return}e({submitting:!0,error:""});try{await fe(await Me({name:t.name.trim().toLowerCase(),email:t.email.trim(),password:t.password,...t.inviteCode?.trim()?{inviteCode:t.inviteCode.trim()}:{},...p()&&t.emailCode?.trim()?{emailCode:t.emailCode.trim()}:{}}),c.storage),d(pe(location.search),{replace:!0})}catch(u){e("error",u instanceof Error?u.message:"注册失败,请稍后重试"),e("submitting",!1)}};return _(ne,{mode:"register",get children(){return[(()=>{var s=je(),r=s.firstChild,g=r.firstChild,u=g.nextSibling,S=r.nextSibling,k=S.firstChild,T=k.nextSibling,U=S.nextSibling,N=U.firstChild,L=N.nextSibling,R=U.nextSibling,J=R.firstChild,K=J.nextSibling,O=R.nextSibling;return s.addEventListener("submit",m),u.$$input=w=>e("name",w.currentTarget.value),D(u,"spellcheck",!1),T.$$input=w=>{e("email",w.currentTarget.value),f(!1)},i(s,_(q,{get when(){return p()},get children(){var w=Fe(),M=w.firstChild,E=M.nextSibling,F=E.firstChild,I=F.nextSibling;return M.$$click=()=>void l(),i(M,(()=>{var y=H(()=>!!t.requestingCode);return()=>y()?"正在发送...":H(()=>!!h())()?`重新发送 (${o()}s)`:"发送验证码"})()),i(w,_(q,{get when(){return t.requestHint},get children(){var y=Ne();return i(y,()=>t.requestHint),$(()=>Ce(y,n()?"os-auth-hint":"os-account-success")),y}}),E),i(F,()=>n()?"邮箱验证码(可不填)":"邮箱验证码"),I.$$input=y=>e("emailCode",y.currentTarget.value),D(I,"spellcheck",!1),$(y=>{var V=t.requestingCode||t.submitting||h()||!t.email.trim(),Q=n()?"邮件服务器不可达,可留空":"输入邮件中的验证码",W=t.submitting;return V!==y.e&&(M.disabled=y.e=V),Q!==y.t&&D(I,"placeholder",y.t=Q),W!==y.a&&(I.disabled=y.a=W),y},{e:void 0,t:void 0,a:void 0}),$(()=>I.value=t.emailCode??""),w}}),U),i(s,_(q,{get when(){return C()},get children(){var w=ze(),M=w.firstChild,E=M.nextSibling;return E.$$input=F=>e("inviteCode",F.currentTarget.value),D(E,"spellcheck",!1),$(()=>E.value=t.inviteCode??""),w}}),U),L.$$input=w=>e("password",w.currentTarget.value),K.$$input=w=>e("confirmPassword",w.currentTarget.value),i(s,_(q,{get when(){return t.error},get children(){var w=X();return i(w,()=>t.error),w}}),O),i(O,()=>t.submitting?"正在创建...":"创建账号"),$(w=>{var M=t.submitting||t.requestingCode,E=t.submitting;return M!==w.e&&(T.disabled=w.e=M),E!==w.t&&(O.disabled=w.t=E),w},{e:void 0,t:void 0}),$(()=>u.value=t.name),$(()=>T.value=t.email),$(()=>L.value=t.password),$(()=>K.value=t.confirmPassword),s})(),(()=>{var s=Be(),r=s.firstChild,g=r.nextSibling;return $(()=>D(g,"href",`/login${location.search}`)),s})()]}})}function gt(){const c=G(),d=typeof location<"u"?new URLSearchParams(location.search).get("token")?.trim()??"":"",C=!!d,[x,p]=z(Date.now()),[a,n]=j({email:"",token:d,newPassword:"",confirmPassword:"",requesting:!1,submitting:!1,error:"",success:"",requestHint:"",cooldownUntil:0});Z(()=>{const e=window.setInterval(()=>p(Date.now()),250);re(()=>window.clearInterval(e))});const f=B(()=>Math.max(0,Math.ceil((a.cooldownUntil-x())/1e3))),P=B(()=>f()>0),b=async()=>{if(!(a.requesting||a.submitting||P())){if(!a.email.trim()){n({error:"请输入账号邮箱",success:"",requestHint:""});return}n({requesting:!0,error:"",success:"",requestHint:""});try{const e=await De({email:a.email.trim()}),o=typeof e.retryAfterMs=="number"&&e.retryAfterMs>0?e.retryAfterMs:6e4;n({requesting:!1,requestHint:"若该邮箱已注册,验证码将发送至邮箱。请查收后在下方完成重置。",error:"",cooldownUntil:Date.now()+o})}catch(e){const o=e instanceof Error&&"retryAfterMs"in e?Number(e.retryAfterMs):void 0;n({requesting:!1,error:e instanceof Error?e.message:"发送验证码失败,请稍后重试",requestHint:"",...typeof o=="number"&&o>0?{cooldownUntil:Date.now()+o}:{}})}}},t=async e=>{if(e.preventDefault(),!a.token.trim()){n({error:"请输入邮件验证码",success:""});return}if(a.newPassword.length<8){n({error:"新密码至少需要 8 位",success:""});return}if(a.newPassword!==a.confirmPassword){n({error:"两次输入的新密码不一致",success:""});return}n({submitting:!0,error:"",success:""});try{await Ue({token:a.token.trim(),newPassword:a.newPassword}),n({submitting:!1,error:"",success:"密码已重置,请使用新密码登录",newPassword:"",confirmPassword:""});const o=new URLSearchParams(location.search);o.delete("token");const h=o.toString();window.setTimeout(()=>c(`/login${h?`?${h}`:""}`,{replace:!0}),1200)}catch(o){n({submitting:!1,error:o instanceof Error?o.message:"重置密码失败,请稍后重试",success:""})}};return _(ne,{mode:"forgot-password",get children(){return[_(q,{when:!C,get fallback(){return Je()},get children(){return Oe()}}),_(q,{when:!C,get children(){var e=Ve(),o=e.firstChild,h=o.firstChild,l=h.nextSibling,m=o.nextSibling;return e.addEventListener("submit",s=>{s.preventDefault(),b()}),l.$$input=s=>n("email",s.currentTarget.value),i(m,(()=>{var s=H(()=>!!a.requesting);return()=>s()?"正在发送...":H(()=>!!P())()?`重新发送 (${f()}s)`:"获取验证码"})()),i(e,_(q,{get when(){return a.requestHint},get children(){var s=ee();return i(s,()=>a.requestHint),s}}),null),$(s=>{var r=a.requesting||a.submitting,g=a.requesting||a.submitting||P()||!a.email.trim();return r!==s.e&&(l.disabled=s.e=r),g!==s.t&&(m.disabled=s.t=g),s},{e:void 0,t:void 0}),$(()=>l.value=a.email),e}}),(()=>{var e=Ge(),o=e.firstChild,h=o.firstChild,l=h.nextSibling,m=o.nextSibling,s=m.firstChild,r=s.nextSibling,g=m.nextSibling;return e.addEventListener("submit",t),i(e,_(q,{when:!C,get children(){var u=We(),S=u.firstChild,k=S.nextSibling;return k.$$input=T=>n("token",T.currentTarget.value),$(()=>k.disabled=a.submitting),$(()=>k.value=a.token),u}}),o),l.$$input=u=>n("newPassword",u.currentTarget.value),r.$$input=u=>n("confirmPassword",u.currentTarget.value),i(e,_(q,{get when(){return a.error},get children(){var u=X();return i(u,()=>a.error),u}}),g),i(e,_(q,{get when(){return a.success},get children(){var u=ee();return i(u,()=>a.success),u}}),g),i(g,()=>a.submitting?"正在重置...":"重置密码"),$(u=>{var S=a.submitting,k=a.submitting,T=a.submitting;return S!==u.e&&(l.disabled=u.e=S),k!==u.t&&(r.disabled=u.t=k),T!==u.a&&(g.disabled=u.a=T),u},{e:void 0,t:void 0,a:void 0}),$(()=>l.value=a.newPassword),$(()=>r.value=a.confirmPassword),e})(),(()=>{var e=Xe(),o=e.firstChild,h=o.nextSibling,l=h.nextSibling;return $(m=>{var s=`/login${location.search}`,r=`/register${location.search}`;return s!==m.e&&D(o,"href",m.e=s),r!==m.t&&D(l,"href",m.t=r),m},{e:void 0,t:void 0}),e})()]}})}function ft(){const c=te(),d=G(),C=me(),x=ge(),[p,a]=j({loading:!0,error:""}),[n,f]=j({currentPassword:"",newPassword:"",confirmPassword:"",submitting:!1,error:"",success:""});Z(()=>{const o=ye();if(!o){a({loading:!1,error:"当前未登录"});return}xe(o).then(h=>a({session:h,loading:!1,error:""})).catch(h=>a({loading:!1,error:h instanceof Error?h.message:"会话已失效"}))});const P=()=>{if(c.platform==="desktop"){d("/login",{replace:!0});return}location.assign("/login")},b=()=>{le(c.storage).finally(()=>P())},t=async()=>{try{await He(),ce({variant:"success",icon:"circle-check",title:C.t("account.deleteAccount.toast.success")}),await le(c.storage),P()}catch(o){ce({variant:"error",title:C.t("account.deleteAccount.toast.error"),description:o instanceof Error?o.message:"请稍后重试"})}},e=async(o,h)=>{if(o.preventDefault(),!n.currentPassword||!n.newPassword||!n.confirmPassword){f({error:"请输入当前密码和新密码",success:""});return}if(n.newPassword.length<8){f({error:"新密码至少需要 8 位",success:""});return}if(n.currentPassword===n.newPassword){f({error:"新密码不能与当前密码相同",success:""});return}if(n.newPassword!==n.confirmPassword){f({error:"两次输入的新密码不一致",success:""});return}f({submitting:!0,error:"",success:""});try{await Le({accountId:h.account.id,currentPassword:n.currentPassword,newPassword:n.newPassword}),f({currentPassword:"",newPassword:"",confirmPassword:"",submitting:!1,error:"",success:"密码已更新,下次登录请使用新密码"})}catch(l){f({submitting:!1,error:l instanceof Error?l.message:"修改密码失败,请稍后重试",success:""})}};return(()=>{var o=Ke(),h=o.firstChild;return i(h,_(q,{get when(){return!p.loading},get fallback(){return Qe()},get children(){return _(q,{get when(){return p.session},get fallback(){return(()=>{var l=Ye(),m=l.firstChild,s=m.nextSibling;return s.nextSibling,i(m,()=>p.error||"当前未登录"),l})()},children:l=>[(()=>{var m=Ze(),s=m.firstChild,r=s.firstChild,g=r.nextSibling,u=g.firstChild,S=u.nextSibling,k=S.nextSibling,T=s.nextSibling,U=T.firstChild,N=U.nextSibling,L=N.nextSibling,R=L.nextSibling;return i(r,()=>at(l().account.name,l().account.email)),i(S,()=>l().account.name),i(k,()=>l().account.email),i(U,()=>it(l().account.status)),L.$$click=b,R.$$click=()=>x.show(()=>_(st,{onConfirm:t})),i(R,()=>C.t("account.deleteAccount.button")),m})(),(()=>{var m=et(),s=m.firstChild,r=s.firstChild,g=r.nextSibling,u=g.nextSibling,S=s.nextSibling,k=S.firstChild;return i(u,()=>C.t("account.defaultProject.description")),i(k,()=>ue(l())||"未分配"),$(()=>D(k,"title",ue(l()))),m})(),(()=>{var m=tt(),s=m.firstChild,r=s.firstChild,g=r.firstChild,u=g.nextSibling,S=u.firstChild,k=S.nextSibling;k.nextSibling;var T=r.nextSibling,U=T.nextSibling,N=U.firstChild,L=N.firstChild,R=L.nextSibling,J=N.nextSibling,K=J.firstChild,O=K.nextSibling,w=J.nextSibling,M=w.firstChild,E=M.nextSibling,F=s.nextSibling,I=F.firstChild,y=I.nextSibling,V=y.firstChild,Q=V.firstChild,W=Q.nextSibling,se=V.nextSibling,he=se.firstChild,ae=he.nextSibling,ie=se.nextSibling,$e=ie.firstChild,oe=$e.nextSibling,Y=ie.nextSibling;return i(u,()=>lt(l().expiresAt),k),i(R,()=>l().account.name),i(O,()=>l().account.email),i(E,()=>ot(l().account.timeCreated)),y.addEventListener("submit",A=>e(A,l())),W.$$input=A=>f("currentPassword",A.currentTarget.value),ae.$$input=A=>f("newPassword",A.currentTarget.value),oe.$$input=A=>f("confirmPassword",A.currentTarget.value),i(y,_(q,{get when(){return n.error},get children(){var A=X();return i(A,()=>n.error),A}}),Y),i(y,_(q,{get when(){return n.success},get children(){var A=ee();return i(A,()=>n.success),A}}),Y),i(Y,()=>n.submitting?"正在更新...":"更新密码"),$(()=>Y.disabled=n.submitting),$(()=>W.value=n.currentPassword),$(()=>ae.value=n.newPassword),$(()=>oe.value=n.confirmPassword),m})()]})}})),o})()}function st(c){const d=me(),C=ge(),[x,p]=j({submitting:!1,error:""}),a=async()=>{p({submitting:!0,error:""});try{await c.onConfirm(),C.close()}catch(n){p({submitting:!1,error:n instanceof Error?n.message:d.t("account.deleteAccount.toast.error")})}};return _(Se,{get title(){return d.t("account.deleteAccount.title")},fit:!0,transition:!0,get children(){var n=rt(),f=n.firstChild,P=f.nextSibling,b=P.firstChild,t=b.nextSibling;return i(f,()=>d.t("account.deleteAccount.description")),i(n,_(q,{get when(){return x.error},get children(){var e=X();return i(e,()=>x.error),e}}),P),b.$$click=()=>C.close(),i(b,()=>d.t("common.cancel")),t.$$click=a,i(t,(()=>{var e=H(()=>!!x.submitting);return()=>e()?"注销中...":d.t("account.deleteAccount.confirm")})()),$(e=>{var o=x.submitting,h=x.submitting;return o!==e.e&&(b.disabled=e.e=o),h!==e.t&&(t.disabled=e.t=h),e},{e:void 0,t:void 0}),n}})}function ne(c){const d=G(),C=()=>{Ae(),d(Te(location.search),{replace:!0})};return(()=>{var x=nt(),p=x.firstChild,a=p.firstChild,n=a.nextSibling,f=n.firstChild,P=f.nextSibling,b=P.firstChild;return a.$$click=C,i(f,_(Pe,{})),i(n,()=>c.children,P),b.$$click=C,$(()=>D(p,"data-mode",c.mode)),x})()}function at(c,d){return(c.trim()||d.trim()||"OS").slice(0,2).toUpperCase()}function it(c){return c==="active"?"正常":c==="frozen"?"已冻结":c==="limited"?"已限流":c==="pending"?"待激活":c||"未知"}function ue(c){return ke(c)??""}function ot(c){return c?new Intl.DateTimeFormat("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}).format(new Date(be(c))):"未记录"}function lt(c){const d=Math.ceil(Math.max(0,be(c)-Date.now())/36e5);return d<=0?"已":d<24?`${d} 小时后`:`${Math.ceil(d/24)} 天后`}function ct(c){const d=c.trim().toLowerCase();return d?/^[a-z][a-z0-9._-]{2,31}$/.test(d)?d.includes("..")||d.endsWith(".")||d.startsWith(".")?"账户名不能以点开头/结尾,也不能包含连续的点":"":"账户名须为 3–32 位,以小写字母开头,仅含小写字母、数字、点、下划线或连字符":"请填写账户名"}function de(c){const d=c.trim().toLowerCase();return!d||!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(d)||d.length>254?"请填写有效邮箱":""}function be(c){return c<1e10?c*1e3:c}ve(["input","click"]);export{ft as AccountCenterPage,gt as ForgotPasswordPage,dt as LoginPage,mt as RegisterPage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const e="https://cdn.jsdelivr.net/npm/@onescience/onecode-web@1.14.50-202609231524/assets/alert-06-GK5Tqy6u.aac";export{e as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const e="https://cdn.jsdelivr.net/npm/@onescience/onecode-web@1.14.50-202609231524/assets/alert-07-0r0kiLGz.aac";export{e as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const e="https://cdn.jsdelivr.net/npm/@onescience/onecode-web@1.14.50-202609231524/assets/alert-08-CZowNquU.aac";export{e as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const e="https://cdn.jsdelivr.net/npm/@onescience/onecode-web@1.14.50-202609231524/assets/alert-10-Ck5hR7zH.aac";export{e as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const e="https://cdn.jsdelivr.net/npm/@onescience/onecode-web@1.14.50-202609231524/assets/bip-bop-09-CxEgoAHQ.aac";export{e as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{dz as S,O as v,P,dP as k,dQ as _,dR as w,C as F,cX as L,D as $,a as m,ds as C,i as u,E,dS as I,m as T,o as g,dy as b,t as q}from"./index-CceAmj5n.js";var K=q('<div class="w-full flex items-center gap-2"><span class="truncate flex-1 min-w-0 text-left font-normal"></span><span class="text-text-weak shrink-0 font-normal">');function M(i){return i.toLocaleTimeString(void 0,{timeStyle:"short"})}const R=()=>{const i=S(),p=v(),f=P(),c=k(),l=_(),h=w(),x=F(),n=L(),y=$(()=>{const t=i.id;if(!t)return[];const a=c.data.message[t]??[],o=[];for(const s of a){if(s.role!=="user")continue;const e=(c.data.part[s.id]??[]).find(r=>r.type==="text"&&!r.synthetic&&!r.ignored);e&&o.push({id:s.id,text:e.text.replace(/\n/g," ").slice(0,200),time:M(new Date(s.time.created))})}return o.reverse()}),D=t=>{if(!t)return;const a=i.id;if(!a)return;const o=c.data.part[t.id]??[],s=I(o,{directory:l.directory,attachmentName:n.t("common.attachment")}),d=T(l.directory);l.client.session.fork({sessionID:a,messageID:t.id}).then(e=>{if(!e.data){g({title:n.t("common.requestFailed")});return}x.close(),h.set(s,void 0,{dir:d,id:e.data.id}),f(b(p.pathname,d,e.data.id))}).catch(e=>{const r=e instanceof Error?e.message:String(e);g({title:n.t("common.requestFailed"),description:r})})};return m(E,{get title(){return n.t("command.session.fork")},get children(){return m(C,{class:"flex-1 min-h-0 [&_[data-slot=list-scroll]]:flex-1 [&_[data-slot=list-scroll]]:min-h-0",get search(){return{placeholder:n.t("common.search.placeholder"),autofocus:!0}},get emptyMessage(){return n.t("dialog.fork.empty")},key:t=>t.id,items:y,filterKeys:["text"],onSelect:D,children:t=>(()=>{var a=K(),o=a.firstChild,s=o.nextSibling;return u(o,()=>t.text),u(s,()=>t.time),a})()})}})};export{R as DialogFork};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const e="https://cdn.jsdelivr.net/npm/@onescience/onecode-web@1.14.50-202609231524/assets/nope-12-BJR1Ka3c.aac";export{e as default};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{L as Fe,af as Te,bv as De,cX as be,K as Me,c as E,at as qe,D as ie,ag as Ae,i as r,a as c,b as M,x as ce,S as v,F as de,v as B,cY as I,cZ as R,c_ as Ke,t as p,o as J,j as He,k as Oe,c$ as ze,c5 as Qe,d as ve,bi as Re,aH as Be,d0 as Ge}from"./index-CceAmj5n.js";function ue(){return{name:"",transport:"local",command:"",environment:"",url:"",headers:"",oauth:!0,enabled:!0}}function N(a){if(!a||typeof a!="object"||!("type"in a))return!1;const o=a.type;return o==="local"||o==="remote"}function $e(a){const o=[],g=/"([^"]*)"|'([^']*)'|(\S+)/g;let e;for(;e=g.exec(a);)o.push(e[1]??e[2]??e[3]??"");return o.filter(f=>f.length>0)}function _e(a){return a.map(o=>/[\s"]/.test(o)?`"${o.replaceAll('"','\\"')}"`:o).join(" ")}function me(a){const o={};for(const g of a.split(/\r?\n/)){const e=g.trim();if(!e||e.startsWith("#"))continue;const f=e.indexOf("=");if(f<=0)continue;const b=e.slice(0,f).trim();b&&(o[b]=e.slice(f+1).trim())}return Object.keys(o).length>0?o:void 0}function pe(a){return a?Object.entries(a).map(([o,g])=>`${o}=${g}`).join(`
|
|
2
|
-
`):""}function Ve(a,o){return o.type==="local"?{name:a,transport:"local",command:_e(o.command??[]),environment:pe(o.environment),url:"",headers:"",oauth:!0,enabled:o.enabled!==!1}:{name:a,transport:"remote",command:"",environment:"",url:o.url??"",headers:pe(o.headers),oauth:o.oauth!==!1,enabled:o.enabled!==!1}}function We(a,o,g){const e=a.name.trim();if(!e)return"name";if(e!==(g&&g!=="__new__"?g:void 0)&&o?.[e])return"duplicate";if(a.transport==="local")return $e(a.command).length===0?"command":void 0;const b=a.url.trim();if(!b||!/^https?:\/\//i.test(b))return"url"}function Ue(a){const o=a.name.trim(),g=a.enabled;if(a.transport==="local"){const b=me(a.environment),q={type:"local",command:$e(a.command),...b?{environment:b}:{},enabled:g};return{name:o,value:q}}const e=me(a.headers),f={type:"remote",url:a.url.trim(),...e?{headers:e}:{},...a.oauth?{}:{oauth:!1},enabled:g};return{name:o,value:f}}function ge(a){return a.type==="local"?_e(a.command??[]):a.url}var Xe=p('<div class=os-wb-mcp-toolbar><input class=os-wb-mcp-search><button type=button class="os-wb-ssh-action os-wb-ssh-action-primary">'),Ye=p('<p class="text-12-regular text-text-weak leading-snug">'),Ze=p("<div class=os-wb-mcp-grid>"),Ie=p('<div class="os-wb-mcp-panel relative">'),Je=p('<p class="text-12-regular text-text-critical-base">'),Ne=p('<div class=os-wb-ssh-form-shell><button type=button class=os-wb-ssh-form-back>← </button><h3 class="text-14-medium text-text-strong"></h3><p class="text-12-regular text-text-weak leading-snug"></p><div class=os-wb-ssh-form-card><div class="flex flex-col gap-1"><span class="text-12-regular text-text-base"></span></div><p class="text-12-regular text-text-weak"></p></div><div class=os-wb-ssh-form-actions><button type=button class=os-wb-ssh-action></button><button type=button class="os-wb-ssh-action os-wb-ssh-action-primary">'),et=p('<p class="text-12-regular text-text-weak">'),tt=p("<div class=os-wb-mcp-empty>"),rt=p("<p class=os-wb-mcp-card-error>"),nt=p("<div class=os-wb-mcp-tools><span class=os-wb-mcp-tools-label>"),he=p("<p class=os-wb-mcp-tool-empty>"),at=p("<button type=button class=os-wb-ssh-action>"),lt=p("<article class=os-wb-mcp-card><header class=os-wb-mcp-card-head><div class=min-w-0><h3></h3><p></p></div></header><div class=os-wb-mcp-card-meta><span></span></div><footer class=os-wb-mcp-card-actions><button type=button class=os-wb-ssh-action></button><button type=button class=os-wb-ssh-action>"),fe=p("<span>"),ot=p("<div class=os-wb-mcp-tool><strong>"),st=p('<div class="absolute inset-0 z-30 flex items-center justify-center bg-black/40 p-4"><div class="os-wb-ssh-identity-prompt flex w-full max-w-md flex-col gap-3 p-5"role=dialog><h3 class="text-14-medium text-text-strong"></h3><p class="text-12-regular text-text-weak"></p><div class="os-wb-ssh-toolbar pt-1"><button type=button class=os-wb-ssh-action></button><button type=button class="os-wb-ssh-action os-wb-ssh-action-primary">');const ee={connected:"mcp.status.connected",failed:"mcp.status.failed",needs_auth:"mcp.status.needs_auth",needs_client_registration:"mcp.status.needs_client_registration",disabled:"mcp.status.disabled"};function it(){const a=Fe(),o=Te(),g=De(),e=be(),f=Me(),[b,q]=E(""),[P,L]=E(),[A,F]=E(""),[h,w]=E(""),[T,x]=E(),[re,ne]=E({}),[we,ae]=E({}),[$,y]=qe(ue()),z=ie(()=>a.data.config.mcp??{}),le=ie(()=>{const l=b().trim().toLowerCase();return Object.entries(z()).map(([t,n])=>({name:t,config:n})).filter(t=>{if(!l)return!0;const n=N(t.config)?ge(t.config):"";return`${t.name} ${n}`.toLowerCase().includes(l)}).sort((t,n)=>t.name.localeCompare(n.name))});function oe(){const l=He(Oe())?.trim();return l||(a.data.project.find(t=>t.worktree?.trim())?.worktree??"")}function ye(){const l={},t=f.current;t?.http.password&&(l.Authorization=`Basic ${ze({username:t.http.username,password:t.http.password})}`);const n=Qe();return n&&(l["x-platform-auth-token"]=n),l}async function X(){const l=oe();if(!l){ne({}),ae({});return}const n=await o.createClient({directory:l,throwOnError:!1}).mcp.status({directory:l});ne(n.data??{});const d=await fetch(`${o.url}/mcp/catalog?directory=${encodeURIComponent(l)}`,{headers:ye()});if(!d.ok)return;const u=await d.json();ae(u??{})}Ae(()=>{X().catch(()=>{})});async function Y(l){await a.updateConfig({mcp:l}),await g.refetchQueries({predicate:t=>Array.isArray(t.queryKey)&&t.queryKey.includes("mcp")}).catch(()=>{}),await X()}function G(l){J({variant:"error",title:e.t("common.requestFailed"),description:l instanceof Error?l.message:String(l)})}function xe(){y(ue()),F(""),L("__new__")}function Ce(l,t){if(!N(t)){F(e.t("dialog.mcp.error.missingConfig"));return}y(Ve(l,t)),F(""),L(l)}async function Se(){const l=We($,z(),P());if(l){F(e.t(`dialog.mcp.error.${l}`));return}const t=Ue($),n={...z()},d=P();d&&d!=="__new__"&&d!==t.name&&delete n[d],n[t.name]=t.value,w(t.name);try{await Y(n),L(void 0),J({title:e.t("dialog.mcp.toast.saved")})}catch(u){G(u)}finally{w("")}}async function ke(l,t,n){const d={...z(),[l]:{...t,enabled:n}};w(l);try{await Y(d)}catch(u){G(u)}finally{w("")}}async function Pe(l){const t={...z()};delete t[l],w(l);try{await Y(t),x(void 0),J({title:e.t("dialog.mcp.toast.saved")})}catch(n){G(n)}finally{w("")}}async function je(l){const t=oe();if(t){w(l);try{await o.createClient({directory:t,throwOnError:!0}).mcp.connect({name:l,directory:t}),await X()}catch(n){G(n)}finally{w("")}}}const Ee=()=>P()==="__new__"?e.t("dialog.mcp.addTitle"):e.t("dialog.mcp.editTitle");return(()=>{var l=Ie();return r(l,c(v,{get when(){return!P()},get fallback(){return(()=>{var t=Ne(),n=t.firstChild;n.firstChild;var d=n.nextSibling,u=d.nextSibling,_=u.nextSibling,C=_.firstChild,j=C.firstChild,m=C.nextSibling,D=_.nextSibling,K=D.firstChild,H=K.nextSibling;return n.$$click=()=>L(void 0),r(n,()=>e.t("dialog.mcp.title"),null),r(d,Ee),r(u,()=>e.t("dialog.mcp.form.hint")),r(_,c(R,{required:!0,get label(){return e.t("dialog.mcp.form.name")},get placeholder(){return e.t("dialog.mcp.form.namePlaceholder")},get value(){return $.name},get disabled(){return!!h()},get error(){return B(()=>!!(A()&&!$.name.trim()))()?A():void 0},onChange:s=>y("name",s)}),C),r(j,()=>e.t("dialog.mcp.form.transport")),r(C,c(Ke,{options:["local","remote"],get current(){return $.transport},value:s=>s,label:s=>e.t(`dialog.mcp.form.transport.${s}`),onSelect:s=>{(s==="local"||s==="remote")&&y("transport",s)},get disabled(){return!!h()},variant:"secondary",size:"large",class:"justify-between"}),null),r(_,c(v,{get when(){return $.transport==="local"},get fallback(){return[c(R,{required:!0,get label(){return e.t("dialog.mcp.form.url")},get placeholder(){return e.t("dialog.mcp.form.urlPlaceholder")},get value(){return $.url},get disabled(){return!!h()},onChange:s=>y("url",s)}),c(R,{multiline:!0,get label(){return e.t("dialog.mcp.form.headers")},get placeholder(){return e.t("dialog.mcp.form.headersPlaceholder")},get value(){return $.headers},get disabled(){return!!h()},onChange:s=>y("headers",s)}),c(I,{get checked(){return $.oauth},get disabled(){return!!h()},onChange:s=>y("oauth",s),get children(){return e.t("dialog.mcp.form.oauth")}}),(()=>{var s=et();return r(s,()=>e.t("dialog.mcp.form.oauthDescription")),s})()]},get children(){return[c(R,{required:!0,get label(){return e.t("dialog.mcp.form.command")},get placeholder(){return e.t("dialog.mcp.form.commandPlaceholder")},get value(){return $.command},get disabled(){return!!h()},onChange:s=>y("command",s)}),c(R,{multiline:!0,get label(){return e.t("dialog.mcp.form.environment")},get placeholder(){return e.t("dialog.mcp.form.environmentPlaceholder")},get value(){return $.environment},get disabled(){return!!h()},onChange:s=>y("environment",s)})]}}),m),r(_,c(I,{get checked(){return $.enabled},get disabled(){return!!h()},onChange:s=>y("enabled",s),get children(){return e.t("dialog.mcp.form.enabled")}}),m),r(m,()=>e.t("dialog.mcp.form.enabledDescription")),r(_,c(v,{get when(){return A()},get children(){var s=Je();return r(s,A),s}}),null),K.$$click=()=>L(void 0),r(K,()=>e.t("common.cancel")),H.$$click=()=>void Se(),r(H,()=>e.t("common.save")),M(s=>{var O=!!h(),V=!!h();return O!==s.e&&(K.disabled=s.e=O),V!==s.t&&(H.disabled=s.t=V),s},{e:void 0,t:void 0}),t})()},get children(){return[(()=>{var t=Xe(),n=t.firstChild,d=n.nextSibling;return n.$$input=u=>q(u.currentTarget.value),d.$$click=xe,r(d,()=>e.t("dialog.mcp.addButton")),M(()=>ce(n,"placeholder",e.t("common.search.placeholder"))),M(()=>n.value=b()),t})(),(()=>{var t=Ye();return r(t,()=>e.t("dialog.mcp.form.hint")),t})(),c(v,{get when(){return le().length>0},get fallback(){return(()=>{var t=tt();return r(t,()=>e.t("dialog.mcp.empty")),t})()},get children(){var t=Ze();return r(t,c(de,{get each(){return le()},children:n=>{const d=()=>N(n.config)?n.config:void 0,u=()=>re()[n.name]?.status,_=()=>{const m=u();if(m&&m in ee)return ee[m];if(d()?.enabled===!1)return ee.disabled},C=()=>{const m=re()[n.name];if(m&&"error"in m)return m.error},j=()=>we()[n.name]??[];return(()=>{var m=lt(),D=m.firstChild,K=D.firstChild,H=K.firstChild,s=H.nextSibling,O=D.nextSibling,V=O.firstChild,Q=O.nextSibling,W=Q.firstChild,U=W.nextSibling;return r(H,()=>n.name),r(s,(()=>{var i=B(()=>!!d());return()=>i()?ge(d()):e.t("dialog.mcp.error.missingConfig")})()),r(D,c(v,{get when(){return d()},children:i=>c(I,{get checked(){return i().enabled!==!1},get disabled(){return h()===n.name},onChange:S=>void ke(n.name,i(),S)})}),null),r(V,(()=>{var i=B(()=>d()?.type==="remote");return()=>i()?e.t("dialog.mcp.form.transport.remote"):e.t("dialog.mcp.form.transport.local")})()),r(O,c(v,{get when(){return _()},children:i=>(()=>{var S=fe();return r(S,()=>e.t(i())),S})()}),null),r(m,c(v,{get when(){return C()},get children(){var i=rt();return r(i,C),i}}),Q),r(m,c(v,{get when(){return u()==="connected"},get children(){var i=nt(),S=i.firstChild;return r(S,()=>e.t("dialog.mcp.card.tools")),r(i,c(v,{get when(){return j().length>0},get fallback(){return(()=>{var k=he();return r(k,()=>e.t("dialog.mcp.card.toolsEmpty")),k})()},get children(){return c(de,{get each(){return j().slice(0,12)},children:k=>(()=>{var Z=ot(),Le=Z.firstChild;return r(Le,()=>k.name),r(Z,c(v,{get when(){return k.description},get children(){var se=fe();return r(se,()=>k.description),se}}),null),Z})()})}}),null),i}}),Q),r(m,c(v,{get when(){return B(()=>d()?.enabled!==!1&&u()!=="connected")()&&!u()},get children(){var i=he();return r(i,()=>e.t("dialog.mcp.card.toolsPending")),i}}),Q),W.$$click=()=>Ce(n.name,n.config),r(W,()=>e.t("common.edit")),r(Q,c(v,{get when(){return u()==="failed"||u()==="needs_auth"},get children(){var i=at();return i.$$click=()=>void je(n.name),r(i,()=>e.t("dialog.mcp.retry")),M(()=>i.disabled=!!h()),i}}),U),U.$$click=()=>x(n.name),r(U,()=>e.t("common.delete")),M(i=>{var S=!d()||!!h(),k=!!h();return S!==i.e&&(W.disabled=i.e=S),k!==i.t&&(U.disabled=i.t=k),i},{e:void 0,t:void 0}),m})()}})),t}})]}}),null),r(l,c(v,{get when(){return T()},children:t=>(()=>{var n=st(),d=n.firstChild,u=d.firstChild,_=u.nextSibling,C=_.nextSibling,j=C.firstChild,m=j.nextSibling;return n.$$click=()=>x(void 0),d.$$click=D=>D.stopPropagation(),r(u,()=>e.t("common.delete")),r(_,()=>e.t("dialog.mcp.deleteConfirm",{name:t()})),j.$$click=()=>x(void 0),r(j,()=>e.t("common.cancel")),m.$$click=()=>void Pe(t()),r(m,()=>e.t("common.confirm")),n})()}),null),M(()=>ce(l,"data-mode",P()?"form":"list")),l})()}ve(["input","click"]);var ct=p('<div class="os-client-capability-page os-client-resources-page"><header class=os-client-resources-head><div class=os-client-resources-head-copy><h2>资源配置</h2><p>SSH 连接与 MCP 工具。各登录账号的配置彼此隔离。</p></div></header><section class=os-client-capability-selector aria-label=资源配置><div class=os-client-capability-domain-row></div><div class=os-client-capability-current-domain><span>当前配置:</span><strong></strong><small></small></div></section><div class="os-client-capability-page-body os-client-resources-body">'),dt=p("<button type=button>");const te=[{id:"ssh",label:"SSH 连接"},{id:"mcp",label:"MCP 工具"}];function mt(){const a=be(),[o,g]=E("ssh"),e=()=>te.find(f=>f.id===o())??te[0];return(()=>{var f=ct(),b=f.firstChild;b.firstChild;var q=b.nextSibling,P=q.firstChild,L=P.nextSibling,A=L.firstChild,F=A.nextSibling,h=F.nextSibling,w=q.nextSibling;return r(b,c(Be,{get href(){return Re()},class:"os-client-resources-close","aria-label":"关闭资源配置",children:"×"}),null),r(P,()=>te.map(T=>(()=>{var x=dt();return x.$$click=()=>g(T.id),r(x,()=>T.label),M(()=>x.classList.toggle("is-active",o()===T.id)),x})())),r(F,()=>e().label),r(h,(()=>{var T=B(()=>o()==="ssh");return()=>T()?a.t("dialog.ssh.description"):"本地 stdio 或远程 HTTP,仅当前登录账号可见。"})()),r(w,c(v,{get when(){return o()==="ssh"},get fallback(){return c(it,{})},get children(){return c(Ge,{variant:"page"})}})),f})()}ve(["click"]);export{mt as WorkbenchResourcesPage};
|