@locode2/harness 0.1.0-preview.1

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.
Files changed (162) hide show
  1. package/README.md +27 -0
  2. package/THIRD_PARTY_LICENSES.txt +32769 -0
  3. package/THIRD_PARTY_NOTICES.md +13 -0
  4. package/apps/host/dist/document-parser-worker.js +215 -0
  5. package/apps/host/dist/frontend-runtime-worker.js +1755 -0
  6. package/apps/host/dist/index.js +23380 -0
  7. package/apps/web/dist/assets/LocalMonacoEditor-CXkKwxiP.css +1 -0
  8. package/apps/web/dist/assets/LocalMonacoEditor-WKAHQmzG.js +940 -0
  9. package/apps/web/dist/assets/LogsView-BFFFSFB-.js +1 -0
  10. package/apps/web/dist/assets/PluginsView-DM_ZnENS.js +1 -0
  11. package/apps/web/dist/assets/SettingsView-Cb5Q4ile.js +1 -0
  12. package/apps/web/dist/assets/abap-DLDM7-KI.js +1 -0
  13. package/apps/web/dist/assets/apex-DNDY2TF8.js +1 -0
  14. package/apps/web/dist/assets/azcli-Y6nb8tq_.js +1 -0
  15. package/apps/web/dist/assets/bat-BwHxbl9M.js +1 -0
  16. package/apps/web/dist/assets/bicep-CFznDFnq.js +2 -0
  17. package/apps/web/dist/assets/cameligo-Bf6VGUru.js +1 -0
  18. package/apps/web/dist/assets/clojure-Dnu-v4kV.js +1 -0
  19. package/apps/web/dist/assets/codicon-Brq4_Ui5.ttf +0 -0
  20. package/apps/web/dist/assets/coffee-Bd8akH9Z.js +1 -0
  21. package/apps/web/dist/assets/cpp-BbWJElDN.js +1 -0
  22. package/apps/web/dist/assets/csharp-Co3qMtFm.js +1 -0
  23. package/apps/web/dist/assets/csp-D-4FJmMZ.js +1 -0
  24. package/apps/web/dist/assets/css-DdJfP1eB.js +3 -0
  25. package/apps/web/dist/assets/css.worker-11mhRRLC.js +97 -0
  26. package/apps/web/dist/assets/cssMode-L5f5LAEn.js +1 -0
  27. package/apps/web/dist/assets/cypher-cTPe9QuQ.js +1 -0
  28. package/apps/web/dist/assets/dart-BOtBlQCF.js +1 -0
  29. package/apps/web/dist/assets/dockerfile-BG73LgW2.js +1 -0
  30. package/apps/web/dist/assets/ecl-BEgZUVRK.js +1 -0
  31. package/apps/web/dist/assets/editor.worker-DysRFSaV.js +30 -0
  32. package/apps/web/dist/assets/elixir-BkW5O-1t.js +1 -0
  33. package/apps/web/dist/assets/flow9-BeJ5waoc.js +1 -0
  34. package/apps/web/dist/assets/freemarker2-UOwftS75.js +3 -0
  35. package/apps/web/dist/assets/fsharp-PahG7c26.js +1 -0
  36. package/apps/web/dist/assets/go-acbASCJo.js +1 -0
  37. package/apps/web/dist/assets/graphql-BxJiqAUM.js +1 -0
  38. package/apps/web/dist/assets/handlebars-C_E41ffr.js +1 -0
  39. package/apps/web/dist/assets/hcl-DtV1sZF8.js +1 -0
  40. package/apps/web/dist/assets/html-HsrixH2x.js +1 -0
  41. package/apps/web/dist/assets/html.worker-C8Tw8ncf.js +474 -0
  42. package/apps/web/dist/assets/htmlMode-DipGmEOi.js +1 -0
  43. package/apps/web/dist/assets/index-COUF63cT.js +213 -0
  44. package/apps/web/dist/assets/index-SNSmF2-c.css +1 -0
  45. package/apps/web/dist/assets/ini-Kd9XrMLS.js +1 -0
  46. package/apps/web/dist/assets/java-CXBNlu9o.js +1 -0
  47. package/apps/web/dist/assets/javascript-D36WEqF9.js +1 -0
  48. package/apps/web/dist/assets/json.worker-BzkYZgJ7.js +62 -0
  49. package/apps/web/dist/assets/jsonMode-D9BrIats.js +7 -0
  50. package/apps/web/dist/assets/julia-cl7-CwDS.js +1 -0
  51. package/apps/web/dist/assets/kotlin-s7OhZKlX.js +1 -0
  52. package/apps/web/dist/assets/less-9HpZscsL.js +2 -0
  53. package/apps/web/dist/assets/lexon-OrD6JF1K.js +1 -0
  54. package/apps/web/dist/assets/liquid-DES89Tjc.js +1 -0
  55. package/apps/web/dist/assets/lock-keyhole-jo-FJcGq.js +1 -0
  56. package/apps/web/dist/assets/lspLanguageFeatures-YKkgcn4q.js +4 -0
  57. package/apps/web/dist/assets/lua-Cyyb5UIc.js +1 -0
  58. package/apps/web/dist/assets/m3-B8OfTtLu.js +1 -0
  59. package/apps/web/dist/assets/markdown-BFxVWTOG.js +1 -0
  60. package/apps/web/dist/assets/mdx-D1Bfax8e.js +1 -0
  61. package/apps/web/dist/assets/mips-CiqrrVzr.js +1 -0
  62. package/apps/web/dist/assets/msdax-DmeGPVcC.js +1 -0
  63. package/apps/web/dist/assets/mysql-C_tMU-Nz.js +1 -0
  64. package/apps/web/dist/assets/objective-c-BDtDVThU.js +1 -0
  65. package/apps/web/dist/assets/pascal-vHIfCaH5.js +1 -0
  66. package/apps/web/dist/assets/pascaligo-DtZ0uQbO.js +1 -0
  67. package/apps/web/dist/assets/perl-Ub6l9XKa.js +1 -0
  68. package/apps/web/dist/assets/pgsql-BlNEE0v7.js +1 -0
  69. package/apps/web/dist/assets/php-BBUBE1dy.js +1 -0
  70. package/apps/web/dist/assets/pla-DSh2-awV.js +1 -0
  71. package/apps/web/dist/assets/postiats-CocnycG-.js +1 -0
  72. package/apps/web/dist/assets/powerquery-tScXyioY.js +1 -0
  73. package/apps/web/dist/assets/powershell-COWaemsV.js +1 -0
  74. package/apps/web/dist/assets/protobuf-Brw8urJB.js +2 -0
  75. package/apps/web/dist/assets/pug-8SOpv6rk.js +1 -0
  76. package/apps/web/dist/assets/python-DKhPhY0N.js +1 -0
  77. package/apps/web/dist/assets/qsharp-Bw9ernYp.js +1 -0
  78. package/apps/web/dist/assets/r-j7ic8hl3.js +1 -0
  79. package/apps/web/dist/assets/razor-Cha8qrI6.js +1 -0
  80. package/apps/web/dist/assets/redis-Bu5POkcn.js +1 -0
  81. package/apps/web/dist/assets/redshift-Bs9aos_-.js +1 -0
  82. package/apps/web/dist/assets/restructuredtext-CqXO7rUv.js +1 -0
  83. package/apps/web/dist/assets/ruby-zBfavPgS.js +1 -0
  84. package/apps/web/dist/assets/rust-BzKRNQWT.js +1 -0
  85. package/apps/web/dist/assets/sb-BBc9UKZt.js +1 -0
  86. package/apps/web/dist/assets/scala-D9hQfWCl.js +1 -0
  87. package/apps/web/dist/assets/scheme-BPhDTwHR.js +1 -0
  88. package/apps/web/dist/assets/scss-CBJaRo0y.js +3 -0
  89. package/apps/web/dist/assets/shell-DiJ1NA_G.js +1 -0
  90. package/apps/web/dist/assets/solidity-Db0IVjzk.js +1 -0
  91. package/apps/web/dist/assets/sophia-CnS9iZB_.js +1 -0
  92. package/apps/web/dist/assets/sparql-CJmd_6j2.js +1 -0
  93. package/apps/web/dist/assets/sql-ClhHkBeG.js +1 -0
  94. package/apps/web/dist/assets/st-CHwy0fLd.js +1 -0
  95. package/apps/web/dist/assets/swift-CnmFD0ga.js +1 -0
  96. package/apps/web/dist/assets/systemverilog-Bs9z6M-B.js +1 -0
  97. package/apps/web/dist/assets/tcl-Dm6ycUr_.js +1 -0
  98. package/apps/web/dist/assets/ts.worker-Bupg6llt.js +67722 -0
  99. package/apps/web/dist/assets/tsMode-CEhssXv8.js +11 -0
  100. package/apps/web/dist/assets/twig-Csy3S7wG.js +1 -0
  101. package/apps/web/dist/assets/typescript-DWqmw58R.js +1 -0
  102. package/apps/web/dist/assets/typespec-Btyra-wh.js +1 -0
  103. package/apps/web/dist/assets/vb-Db0cS2oM.js +1 -0
  104. package/apps/web/dist/assets/wgsl-DumH7NcR.js +298 -0
  105. package/apps/web/dist/assets/workers-BmZvNFRq.js +1 -0
  106. package/apps/web/dist/assets/xml-WQTAFV9b.js +1 -0
  107. package/apps/web/dist/assets/yaml-Ke2Lf79d.js +1 -0
  108. package/apps/web/dist/index.html +15 -0
  109. package/bin/launch.mjs +71 -0
  110. package/bin/locode-mini.mjs +12 -0
  111. package/bin/options.mjs +49 -0
  112. package/bin/restore-assets.mjs +40 -0
  113. package/bundled-plugins/fast-frontend/.gitignore +2 -0
  114. package/bundled-plugins/fast-frontend/README.md +29 -0
  115. package/bundled-plugins/fast-frontend/harness.plugin.json +123 -0
  116. package/bundled-plugins/fast-frontend/runtimes/antd-admin/PUBLIC_CONTRACT.md +139 -0
  117. package/bundled-plugins/fast-frontend/runtimes/antd-admin/contracts/app.schema.json +24 -0
  118. package/bundled-plugins/fast-frontend/runtimes/antd-admin/contracts/route.schema.json +52 -0
  119. package/bundled-plugins/fast-frontend/runtimes/antd-admin/examples/app.json +9 -0
  120. package/bundled-plugins/fast-frontend/runtimes/antd-admin/examples/route.json +8 -0
  121. package/bundled-plugins/fast-frontend/runtimes/antd-admin/index.html +17 -0
  122. package/bundled-plugins/fast-frontend/runtimes/antd-admin/package.json +31 -0
  123. package/bundled-plugins/fast-frontend/runtimes/antd-admin/scripts/smoke-build.mjs +40 -0
  124. package/bundled-plugins/fast-frontend/runtimes/antd-admin/src/inspector/index.ts +612 -0
  125. package/bundled-plugins/fast-frontend/runtimes/antd-admin/src/main.tsx +17 -0
  126. package/bundled-plugins/fast-frontend/runtimes/antd-admin/src/sdk/index.ts +1028 -0
  127. package/bundled-plugins/fast-frontend/runtimes/antd-admin/src/shell/RuntimeApp.tsx +380 -0
  128. package/bundled-plugins/fast-frontend/runtimes/antd-admin/src/shell/runtime.css +246 -0
  129. package/bundled-plugins/fast-frontend/runtimes/antd-admin/tsconfig.json +20 -0
  130. package/bundled-plugins/fast-frontend/runtimes/antd-admin/types/runtime.consumer-smoke.ts +70 -0
  131. package/bundled-plugins/fast-frontend/runtimes/antd-admin/types/runtime.d.ts +227 -0
  132. package/bundled-plugins/fast-frontend/templates/antd-admin/.gitignore +9 -0
  133. package/bundled-plugins/fast-frontend/templates/antd-admin/.harness/template.json +10 -0
  134. package/bundled-plugins/fast-frontend/templates/antd-admin/index.html +13 -0
  135. package/bundled-plugins/fast-frontend/templates/antd-admin/package.json +34 -0
  136. package/bundled-plugins/fast-frontend/templates/antd-admin/pnpm-lock.yaml +1451 -0
  137. package/bundled-plugins/fast-frontend/templates/antd-admin/pnpm-workspace.yaml +4 -0
  138. package/bundled-plugins/fast-frontend/templates/antd-admin/public/generated/.gitkeep +1 -0
  139. package/bundled-plugins/fast-frontend/templates/antd-admin/scripts/validate-routes.mjs +153 -0
  140. package/bundled-plugins/fast-frontend/templates/antd-admin/src/app/App.tsx +27 -0
  141. package/bundled-plugins/fast-frontend/templates/antd-admin/src/app/NotFoundPage.tsx +15 -0
  142. package/bundled-plugins/fast-frontend/templates/antd-admin/src/features/.gitkeep +1 -0
  143. package/bundled-plugins/fast-frontend/templates/antd-admin/src/layouts/MainLayout.tsx +77 -0
  144. package/bundled-plugins/fast-frontend/templates/antd-admin/src/main.tsx +14 -0
  145. package/bundled-plugins/fast-frontend/templates/antd-admin/src/mocks/dashboard.ts +48 -0
  146. package/bundled-plugins/fast-frontend/templates/antd-admin/src/pages/dashboard/page.tsx +151 -0
  147. package/bundled-plugins/fast-frontend/templates/antd-admin/src/pages/dashboard/route.ts +9 -0
  148. package/bundled-plugins/fast-frontend/templates/antd-admin/src/routes/definition.ts +21 -0
  149. package/bundled-plugins/fast-frontend/templates/antd-admin/src/routes/menu.tsx +44 -0
  150. package/bundled-plugins/fast-frontend/templates/antd-admin/src/routes/registry.ts +48 -0
  151. package/bundled-plugins/fast-frontend/templates/antd-admin/src/routes/router.tsx +34 -0
  152. package/bundled-plugins/fast-frontend/templates/antd-admin/src/shared/components/business/.gitkeep +1 -0
  153. package/bundled-plugins/fast-frontend/templates/antd-admin/src/shared/components/business/BusinessProviders.tsx +9 -0
  154. package/bundled-plugins/fast-frontend/templates/antd-admin/src/styles/global.css +180 -0
  155. package/bundled-plugins/fast-frontend/templates/antd-admin/src/vite-env.d.ts +1 -0
  156. package/bundled-plugins/fast-frontend/templates/antd-admin/tsconfig.app.json +24 -0
  157. package/bundled-plugins/fast-frontend/templates/antd-admin/tsconfig.json +7 -0
  158. package/bundled-plugins/fast-frontend/templates/antd-admin/tsconfig.node.json +17 -0
  159. package/bundled-plugins/fast-frontend/templates/antd-admin/vite.config.ts +39 -0
  160. package/npm-shrinkwrap.json +9737 -0
  161. package/package.json +80 -0
  162. package/release-integrity.json +168 -0
@@ -0,0 +1 @@
1
+ import{c as i,u as h,r as o,j as e,b as y,B as _,S as g,i as b,I as z,X as L,e as C,h as I,g as j,k as D,a as N,C as $}from"./index-COUF63cT.js";const B=[["path",{d:"M12 17V3",key:"1cwfxf"}],["path",{d:"m6 11 6 6 6-6",key:"12ii2o"}],["path",{d:"M19 21H5",key:"150jfl"}]],R=i("arrow-down-to-line",B);const T=[["path",{d:"M12 20v-9",key:"1qisl0"}],["path",{d:"M14 7a4 4 0 0 1 4 4v3a6 6 0 0 1-12 0v-3a4 4 0 0 1 4-4z",key:"uouzyp"}],["path",{d:"M14.12 3.88 16 2",key:"qol33r"}],["path",{d:"M21 21a4 4 0 0 0-3.81-4",key:"1b0z45"}],["path",{d:"M21 5a4 4 0 0 1-3.55 3.97",key:"5cxbf6"}],["path",{d:"M22 13h-4",key:"1jl80f"}],["path",{d:"M3 21a4 4 0 0 1 3.81-4",key:"1fjd4g"}],["path",{d:"M3 5a4 4 0 0 0 3.55 3.97",key:"1d7oge"}],["path",{d:"M6 13H2",key:"82j7cp"}],["path",{d:"m8 2 1.88 1.88",key:"fmnt4t"}],["path",{d:"M9 7.13V6a3 3 0 1 1 6 0v1.13",key:"1vgav8"}]],q=i("bug",T);const A=[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1",key:"1oajmo"}],["path",{d:"M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1",key:"mpwhp6"}]],E=i("file-json",A);const H=[["path",{d:"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z",key:"sc7q7i"}]],V=i("funnel",H),F={debug:{icon:q,color:"text-[var(--muted-fg)]",tone:"neutral"},info:{icon:D,color:"text-[var(--status-info-fg)]",tone:"info"},warn:{icon:j,color:"text-[var(--status-warning-fg)]",tone:"warning"},error:{icon:j,color:"text-[var(--status-danger-fg)]",tone:"danger"}};function O({log:s,selected:n,onSelect:l}){const r=F[s.level],d=r.icon,c=new Intl.DateTimeFormat("zh-CN",{hour:"2-digit",minute:"2-digit",second:"2-digit",fractionalSecondDigits:3,hour12:!1}).format(new Date(s.timestamp));return e.jsxs("button",{type:"button",onClick:l,className:N("grid w-full grid-cols-[24px_96px_72px_170px_1fr_18px] items-center gap-2 border-b border-[var(--border)] px-3 py-2 text-left transition hover:bg-[var(--hover)]",n&&"bg-[var(--selected)]"),children:[e.jsx(d,{className:N("size-3.5",r.color)}),e.jsx("span",{className:"font-mono type-meta tabular-nums text-[var(--dim-fg)]",children:c}),e.jsx("span",{children:e.jsx(y,{tone:r.tone,children:s.level})}),e.jsx("span",{className:"truncate font-mono type-meta text-[var(--muted-fg)]",children:s.source}),e.jsxs("span",{className:"truncate type-ui text-[var(--subtle-fg)]",children:[s.message,s.isPreview&&e.jsx("span",{className:"ml-2 type-meta text-[var(--status-warning-fg)]",children:"预览"})]}),e.jsx($,{className:"size-3 text-[var(--dim-fg)]"})]})}function J(){const s=h(a=>a.logs),n=h(a=>a.connectionStatus),l=h(a=>a.pushToast),[r,d]=o.useState(""),[c,w]=o.useState("all"),[m,k]=o.useState("all"),[u,f]=o.useState(null),t=s.find(a=>a.id===u),M=o.useMemo(()=>Array.from(new Set(s.map(a=>a.source))).sort(),[s]),x=s.filter(a=>c!=="all"&&a.level!==c||m!=="all"&&a.source!==m?!1:!r||`${a.message} ${a.source} ${a.threadId??""}`.toLowerCase().includes(r.toLowerCase())),S=async()=>{if(n!=="online"){l({title:"无法导出",description:"离线预览日志不是 Host 的真实诊断数据。",tone:"neutral"});return}try{const a=await I.call("log.export",{}),v=URL.createObjectURL(new Blob([a.content],{type:a.mediaType})),p=document.createElement("a");p.href=v,p.download=a.fileName,p.click(),URL.revokeObjectURL(v),l({title:"脱敏日志已导出",description:`${a.fileName} · ${a.entryCount} 条`,tone:"success"})}catch(a){l({title:"导出失败",description:a instanceof Error?a.message:"Host 返回未知错误",tone:"danger"})}};return e.jsxs("div",{className:"flex min-h-0 flex-1 flex-col bg-[var(--workspace)]",children:[e.jsxs("div",{className:"flex h-14 shrink-0 items-center justify-between border-b border-[var(--border)] px-4",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-[14px] font-semibold text-[var(--fg)]",children:"运行日志"}),e.jsx("p",{className:"mt-0.5 type-meta text-[var(--dim-fg)]",children:"结构化诊断事件 · 对话正文不会重复写入"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(y,{tone:n==="online"?"success":"warning",children:n==="online"?"实时追踪":"离线预览"}),e.jsxs(_,{variant:"secondary",onClick:()=>{S()},children:[e.jsx(R,{className:"size-3.5"}),"导出脱敏 JSONL"]})]})]}),e.jsxs("div",{className:"flex h-12 shrink-0 items-center gap-2 border-b border-[var(--border)] px-3",children:[e.jsxs("label",{className:"flex h-8 w-[280px] items-center gap-2 rounded-lg border border-[var(--control-border)] bg-[var(--control)] px-2.5",children:[e.jsx(g,{className:"size-3.5 text-[var(--dim-fg)]"}),e.jsx("input",{value:r,onChange:a=>d(a.target.value),placeholder:"搜索消息、来源或 Thread ID…",className:"min-w-0 flex-1 bg-transparent type-ui outline-none placeholder:text-[var(--dim-fg)]"})]}),e.jsx(b,{ariaLabel:"日志级别",value:c,onValueChange:w,options:[{value:"all",label:"全部级别"},{value:"debug",label:"Debug"},{value:"info",label:"Info"},{value:"warn",label:"Warn"},{value:"error",label:"Error"}],className:"w-[120px]"}),e.jsx(b,{ariaLabel:"日志来源",value:m,onValueChange:k,options:[{value:"all",label:"全部来源"},...M.map(a=>({value:a,label:a}))],className:"w-[180px]"}),e.jsxs("span",{className:"ml-auto flex items-center gap-1 type-meta text-[var(--dim-fg)]",children:[e.jsx(V,{className:"size-3"}),x.length," / ",s.length," 条"]})]}),e.jsxs("div",{className:"flex min-h-0 flex-1",children:[e.jsxs("div",{className:"min-w-0 flex-1 overflow-auto",children:[e.jsxs("div",{className:"sticky top-0 z-10 grid h-8 grid-cols-[24px_96px_72px_170px_1fr_18px] items-center gap-2 border-b border-[var(--border)] bg-[var(--panel-solid)] px-3 type-meta uppercase tracking-wider text-[var(--dim-fg)]",children:[e.jsx("span",{}),e.jsx("span",{children:"时间"}),e.jsx("span",{children:"级别"}),e.jsx("span",{children:"来源"}),e.jsx("span",{children:"消息"}),e.jsx("span",{})]}),x.length?x.map(a=>e.jsx(O,{log:a,selected:u===a.id,onSelect:()=>f(a.id)},a.id)):e.jsxs("div",{className:"flex h-48 flex-col items-center justify-center type-meta text-[var(--dim-fg)]",children:[e.jsx(g,{className:"mb-2 size-5 opacity-50"}),"没有匹配的日志"]})]}),t&&e.jsxs("aside",{className:"w-[340px] shrink-0 overflow-y-auto border-l border-[var(--border)] bg-[var(--panel)] p-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("h2",{className:"type-ui font-semibold text-[var(--fg)]",children:"事件详情"}),e.jsx(z,{label:"关闭详情",onClick:()=>f(null),children:e.jsx(L,{className:"size-3.5"})})]}),e.jsxs("dl",{className:"mt-4 grid grid-cols-[72px_1fr] gap-x-3 gap-y-3 type-meta",children:[e.jsx("dt",{className:"text-[var(--dim-fg)]",children:"Event ID"}),e.jsx("dd",{className:"break-all font-mono text-[var(--subtle-fg)]",children:t.id}),e.jsx("dt",{className:"text-[var(--dim-fg)]",children:"时间"}),e.jsx("dd",{className:"text-[var(--subtle-fg)]",children:new Date(t.timestamp).toLocaleString("zh-CN")}),e.jsx("dt",{className:"text-[var(--dim-fg)]",children:"来源"}),e.jsx("dd",{className:"font-mono text-[var(--subtle-fg)]",children:t.source}),t.threadId&&e.jsxs(e.Fragment,{children:[e.jsx("dt",{className:"text-[var(--dim-fg)]",children:"Thread"}),e.jsx("dd",{className:"break-all font-mono text-[var(--subtle-fg)]",children:t.threadId})]})]}),e.jsxs("div",{className:"mt-5",children:[e.jsx("p",{className:"mb-2 type-meta font-medium uppercase tracking-wider text-[var(--dim-fg)]",children:"Message"}),e.jsx("p",{className:"rounded-lg border border-[var(--border)] bg-[var(--inset)] p-3 type-ui leading-5 text-[var(--subtle-fg)]",children:t.message})]}),e.jsxs("div",{className:"mt-4",children:[e.jsxs("p",{className:"mb-2 flex items-center gap-1.5 type-meta font-medium uppercase tracking-wider text-[var(--dim-fg)]",children:[e.jsx(E,{className:"size-3"}),"Structured data"]}),e.jsx("pre",{className:"max-h-80 overflow-auto rounded-lg border border-[var(--border)] bg-[var(--inset)] p-3 font-mono type-meta leading-5 text-[var(--muted-fg)]",children:JSON.stringify(t.data??{},null,2)})]})]})]}),e.jsxs("div",{className:"flex h-7 shrink-0 items-center gap-4 border-t border-[var(--border)] bg-[var(--panel)] px-3 type-meta text-[var(--dim-fg)]",children:[e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(C,{className:"size-3 text-[var(--status-success-fg)]"}),"敏感值已脱敏"]}),e.jsx("span",{children:"轮转策略 10 × 10 MiB"}),e.jsxs("span",{className:"ml-auto",children:["保留最近 ",s.length," 条"]})]})]})}export{J as LogsView};
@@ -0,0 +1 @@
1
+ import{c as w,u as x,r as i,j as e,B as y,D as A,S as R,a as N,C as D,b as M,d as F,e as O,E as Z,f as T,M as q,g as V,h as P,t as S}from"./index-COUF63cT.js";import{L as W}from"./lock-keyhole-jo-FJcGq.js";const K=[["path",{d:"M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z",key:"lc1i9w"}],["path",{d:"m7 16.5-4.74-2.85",key:"1o9zyk"}],["path",{d:"m7 16.5 5-3",key:"va8pkn"}],["path",{d:"M7 16.5v5.17",key:"jnp8gn"}],["path",{d:"M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z",key:"8zsnat"}],["path",{d:"m17 16.5-5-3",key:"8arw3v"}],["path",{d:"m17 16.5 4.74-2.85",key:"8rfmw"}],["path",{d:"M17 16.5v5.17",key:"k6z78m"}],["path",{d:"M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z",key:"1xygjf"}],["path",{d:"M12 8 7.26 5.15",key:"1vbdud"}],["path",{d:"m12 8 4.74-2.85",key:"3rx089"}],["path",{d:"M12 13.5V8",key:"1io7kd"}]],G=w("boxes",K);const J=[["path",{d:"M4 22h14a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v4",key:"1pf5j1"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M2 15h10",key:"jfw4w8"}],["path",{d:"m9 18 3-3-3-3",key:"112psh"}]],Q=w("file-input",J);const X=[["path",{d:"M12 22v-5",key:"1ega77"}],["path",{d:"M9 8V2",key:"14iosj"}],["path",{d:"M15 8V2",key:"18g5xt"}],["path",{d:"M18 8v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V8Z",key:"osxo6l"}]],$=w("plug",X);const Y=[["path",{d:"M12 2v10",key:"mnfbl"}],["path",{d:"M18.4 6.6a9 9 0 1 1-12.77.04",key:"obofu9"}]],ee=w("power",Y);const se=[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z",key:"1ngwbx"}]],te=w("wrench",se);function L({plugin:a,className:r}){const u=i.useRef(null),n=x(d=>d.theme),[o,E]=i.useState(""),[C,h]=i.useState(!0);return i.useEffect(()=>{const d=u.current,m=a.uiEntryUrl;if(!d||!m||a.state!=="active"){h(!1);return}let l=!1,v;const p=new AbortController;return(async()=>{try{const c=new URL(m,window.location.origin);if(c.origin!==window.location.origin)throw new Error("V0.1 只加载 Host 同源提供的可信 UI 模块");const g=await import(c.href);if(typeof g.mount!="function")throw new Error("插件 UI 模块没有导出 mount(container, context)");const b=await g.mount(d,{pluginId:a.id,theme:n,hostVersion:"0.1.0",signal:p.signal,rpc:{call:async(k,j={},z)=>{if(z?.signal?.aborted||p.signal.aborted)throw new DOMException("Plugin UI request aborted","AbortError");return P.call(k,j)}}});l&&typeof b=="function"?b():v=b}catch(c){l||E(c instanceof Error?c.message:"无法加载插件 UI")}finally{l||h(!1)}})(),()=>{l=!0,p.abort(),v?.(),d.replaceChildren()}},[a.id,a.state,a.uiEntryUrl,n]),o?e.jsxs("div",{className:"flex min-h-32 flex-col items-center justify-center rounded-xl border border-[var(--status-danger-border)] bg-[var(--status-danger-bg)] p-5 text-center",children:[e.jsx(V,{className:"mb-2 size-5 text-[var(--status-danger-fg)]"}),e.jsx("p",{className:"type-ui font-medium text-[var(--status-danger-fg)]",children:"插件界面加载失败"}),e.jsx("p",{className:"mt-1 max-w-md type-meta text-[var(--muted-fg)]",children:o})]}):e.jsxs("div",{className:N("relative min-h-32 rounded-xl border border-[var(--border)] bg-[var(--inset)] p-3",r),children:[C&&e.jsx("div",{className:"absolute inset-0 flex items-center justify-center type-meta text-[var(--muted-fg)]",children:"正在加载插件界面…"}),e.jsx("div",{ref:u})]})}function ne({pluginId:a}){const r=x(n=>n.plugins.find(o=>o.id===a)),u=x(n=>n.setRoute);return!r||r.state!=="active"||!r.trusted?e.jsxs("div",{className:"flex min-h-0 flex-1 flex-col items-center justify-center bg-[var(--workspace)] text-center",children:[e.jsx(V,{className:"mb-3 size-7 text-[var(--status-warning-fg)]"}),e.jsx("h2",{className:"text-[13px] font-medium text-[var(--fg)]",children:"插件面板不可用"}),e.jsx("p",{className:"mt-1 type-meta text-[var(--muted-fg)]",children:"插件已禁用、移除、尚未启动,或 UI 尚未获得可信授权。"}),e.jsx(y,{className:"mt-4",onClick:()=>u("plugins"),children:"前往插件管理"})]}):e.jsxs("section",{className:"flex min-h-0 flex-1 flex-col bg-[var(--workspace)]",children:[e.jsxs("header",{className:"flex h-12 shrink-0 items-center gap-3 border-b border-[var(--border)] px-4",children:[e.jsx("span",{className:"flex size-7 items-center justify-center rounded-lg bg-[var(--status-info-bg)] text-[var(--status-info-fg)]",children:e.jsx($,{className:"size-3.5"})}),e.jsxs("div",{children:[e.jsx("h1",{className:"type-ui font-medium text-[var(--fg)]",children:r.name}),e.jsxs("p",{className:"type-meta text-[var(--dim-fg)]",children:["可信同源插件面板 · ",r.id]})]})]}),e.jsx("div",{className:"min-h-0 flex-1 overflow-auto p-4",children:r.uiEntryUrl?e.jsx(L,{plugin:r,className:"min-h-full border-0 bg-transparent p-0"}):e.jsx("div",{className:"flex h-full items-center justify-center type-meta text-[var(--dim-fg)]",children:"此插件没有 UI 入口"})})]})}function ie(){const a=x(s=>s.plugins),r=x(s=>s.updatePlugin),u=x(s=>s.connectionStatus),n=x(s=>s.pushToast),[o,E]=i.useState(""),[C,h]=i.useState(a[0]?.id??""),[d,m]=i.useState(!1),[l,v]=i.useState(""),[p,I]=i.useState(""),[c,g]=i.useState(!1),[b,k]=i.useState(""),j=u==="online",z=a.filter(s=>`${s.name} ${s.id} ${s.description}`.toLowerCase().includes(o.toLowerCase())),t=a.find(s=>s.id===C)??z[0],_=async s=>{if(!j||s.isPreview){n({title:"插件状态未修改",description:"当前是离线预览,连接 Host 后才可启用或禁用插件。",tone:"neutral"});return}k(s.id);try{const f=await P.call("plugin.setEnabled",{pluginId:s.id,enabled:s.state!=="active"});r(S(f.plugin))}catch(f){n({title:"插件操作失败",description:f instanceof Error?f.message:s.name,tone:"danger"})}finally{k("")}},H=async()=>{if(j)try{if(!l.trim())throw new Error("请输入已构建插件目录的绝对路径");const s=p.split(",").map(B=>B.trim()).filter(Boolean),f=await P.call("plugin.install",{directoryPath:l.trim(),trustUi:c,approvedPermissions:s}),U=S(f.plugin);r(U),h(U.id),m(!1),v(""),I(""),g(!1),n({title:"插件已安装",description:`${U.name} ${U.version}`,tone:"success"})}catch(s){n({title:"安装失败",description:s instanceof Error?s.message:"Host 返回未知错误",tone:"danger"})}};return e.jsxs("div",{className:"flex min-h-0 flex-1 bg-[var(--workspace)]",children:[e.jsxs("section",{className:"flex w-[360px] shrink-0 flex-col border-r border-[var(--border)] bg-[var(--panel)]",children:[e.jsxs("div",{className:"flex h-14 items-center justify-between px-4",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-[14px] font-semibold text-[var(--fg)]",children:"插件"}),e.jsx("p",{className:"mt-0.5 type-meta text-[var(--dim-fg)]",children:"产品能力均通过插件贡献"})]}),e.jsxs(y,{onClick:()=>j?m(!0):n({title:"Host 未连接",description:"无法安装本地插件。",tone:"neutral"}),children:[e.jsx(A,{className:"size-3.5"}),"安装"]})]}),e.jsx("div",{className:"px-3 pb-3",children:e.jsxs("label",{className:"flex h-8 items-center gap-2 rounded-lg border border-[var(--control-border)] bg-[var(--control)] px-2.5",children:[e.jsx(R,{className:"size-3.5 text-[var(--dim-fg)]"}),e.jsx("input",{value:o,onChange:s=>E(s.target.value),placeholder:"搜索已安装插件…",className:"min-w-0 flex-1 bg-transparent type-ui outline-none placeholder:text-[var(--dim-fg)]"})]})}),e.jsx("div",{className:"min-h-0 flex-1 overflow-y-auto px-2 pb-3",children:z.map(s=>e.jsxs("button",{type:"button",onClick:()=>h(s.id),className:N("mb-1 flex w-full items-center gap-3 rounded-xl border border-transparent px-3 py-2.5 text-left transition hover:bg-[var(--hover)]",t?.id===s.id&&"border-[var(--accent)]/15 bg-[var(--selected)]"),children:[e.jsx("span",{className:N("flex size-8 shrink-0 items-center justify-center rounded-lg",s.builtin?"bg-[var(--selected)] text-[var(--accent-soft)]":"bg-[var(--status-info-bg)] text-[var(--status-info-fg)]"),children:e.jsx($,{className:"size-4"})}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsxs("span",{className:"flex items-center gap-1.5",children:[e.jsx("strong",{className:"truncate type-ui font-medium text-[var(--fg)]",children:s.name}),s.isPreview&&e.jsx("span",{className:"type-meta text-[var(--status-warning-fg)]",children:"预览"})]}),e.jsxs("span",{className:"mt-0.5 block truncate type-meta text-[var(--dim-fg)]",children:[s.id," · v",s.version]})]}),e.jsx("span",{className:N("size-2 rounded-full",s.state==="active"?"bg-[var(--status-success-fg)]":s.state==="failed"?"bg-[var(--status-danger-fg)]":"bg-[var(--dim-fg)]")}),e.jsx(D,{className:"size-3 text-[var(--dim-fg)]"})]},s.id))})]}),e.jsx("section",{className:"min-w-0 flex-1 overflow-y-auto p-6",children:t?e.jsxs("div",{className:"mx-auto max-w-[840px]",children:[e.jsxs("div",{className:"flex items-start gap-4",children:[e.jsx("span",{className:N("flex size-12 shrink-0 items-center justify-center rounded-2xl",t.builtin?"bg-[var(--selected)] text-[var(--accent-soft)]":"bg-[var(--status-info-bg)] text-[var(--status-info-fg)]"),children:e.jsx(G,{className:"size-6"})}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("h2",{className:"text-[18px] font-semibold text-[var(--fg)]",children:t.name}),t.builtin&&e.jsx(M,{tone:"accent",children:"内置"}),t.trusted&&e.jsxs(M,{tone:"success",children:[e.jsx(F,{className:"mr-1 size-2.5"}),"可信"]})]}),e.jsxs("p",{className:"mt-1 type-meta text-[var(--dim-fg)]",children:[t.id," · Version ",t.version]}),e.jsx("p",{className:"mt-3 max-w-xl type-ui leading-5 text-[var(--muted-fg)]",children:t.description})]}),e.jsx(y,{variant:t.state==="active"?"secondary":"primary",disabled:b===t.id||t.builtin&&t.state==="active",onClick:()=>{_(t)},children:t.state==="active"?e.jsxs(e.Fragment,{children:[e.jsx(ee,{className:"size-3.5"}),"禁用"]}):e.jsxs(e.Fragment,{children:[e.jsx(O,{className:"size-3.5"}),"启用"]})})]}),e.jsxs("div",{className:"mt-7 grid grid-cols-2 gap-3",children:[e.jsxs("div",{className:"rounded-xl border border-[var(--border)] bg-[var(--card)] p-4",children:[e.jsxs("div",{className:"flex items-center gap-2 type-ui font-medium text-[var(--fg)]",children:[e.jsx(te,{className:"size-3.5 text-[var(--accent-soft)]"}),"贡献点"]}),e.jsx("div",{className:"mt-3 space-y-2",children:t.contributions.length?t.contributions.map(s=>e.jsxs("div",{className:"flex items-center justify-between rounded-lg bg-[var(--inset)] px-2.5 py-2 type-meta",children:[e.jsx("span",{className:"text-[var(--subtle-fg)]",children:s.label}),e.jsxs("code",{className:"text-[var(--dim-fg)]",children:[s.kind," · ",s.id]})]},`${s.kind}:${s.id}`)):e.jsx("p",{className:"type-meta text-[var(--dim-fg)]",children:"没有 UI 或工具贡献"})})]}),e.jsxs("div",{className:"rounded-xl border border-[var(--border)] bg-[var(--card)] p-4",children:[e.jsxs("div",{className:"flex items-center gap-2 type-ui font-medium text-[var(--fg)]",children:[e.jsx(W,{className:"size-3.5 text-[var(--status-warning-fg)]"}),"权限"]}),e.jsx("div",{className:"mt-3 flex flex-wrap gap-1.5",children:t.permissions.length?t.permissions.map(s=>e.jsx(M,{tone:"warning",children:s},s)):e.jsx("span",{className:"type-meta text-[var(--dim-fg)]",children:"无需额外权限"})}),e.jsx("p",{className:"mt-3 type-meta text-[var(--dim-fg)]",children:"权限变化或插件内容哈希变化后,Host 会要求重新确认。"})]})]}),e.jsxs("div",{className:"mt-4 rounded-xl border border-[var(--border)] bg-[var(--card)] p-4",children:[e.jsxs("div",{className:"mb-3 flex items-center gap-2",children:[e.jsx(Z,{className:"size-3.5 text-[var(--status-info-fg)]"}),e.jsx("h3",{className:"type-ui font-medium text-[var(--fg)]",children:"插件界面"}),t.uiEntryUrl&&e.jsx(M,{children:"同源 ESM"})]}),t.uiEntryUrl&&t.trusted?e.jsx(L,{plugin:t}):e.jsxs("div",{className:"flex min-h-28 flex-col items-center justify-center rounded-xl border border-dashed border-[var(--border-strong)] text-center",children:[e.jsx(T,{className:"mb-2 size-5 text-[var(--dim-fg)]"}),e.jsx("p",{className:"type-meta text-[var(--muted-fg)]",children:t.uiEntryUrl?"插件 UI 尚未获得可信授权":"此插件未提供独立 UI 入口"}),e.jsx("p",{className:"mt-1 type-meta text-[var(--dim-fg)]",children:"工具和其他贡献点仍受 Host 权限代理约束"})]})]})]}):e.jsx("div",{className:"flex h-full items-center justify-center type-ui text-[var(--dim-fg)]",children:"没有已安装插件"})}),e.jsxs(q,{open:d,onOpenChange:m,title:"安装可信本地插件",description:"只接受已经构建完成的插件目录。V0.1 不会执行 npm install 或任何安装脚本。",footer:e.jsxs(e.Fragment,{children:[e.jsx(y,{variant:"ghost",onClick:()=>m(!1),children:"取消"}),e.jsxs(y,{onClick:()=>{H()},disabled:!l.trim(),children:[e.jsx(Q,{className:"size-3.5"}),"按所列授权安装"]})]}),children:[e.jsxs("div",{className:"rounded-lg border border-[var(--status-warning-border)] bg-[var(--status-warning-bg)] p-3 type-meta text-[var(--status-warning-fg)]",children:[e.jsx("strong",{className:"font-semibold",children:"可信代码提示:"}),"Host 插件和同源 UI 插件可能获得你批准的能力。Node Permission Model 是纵深防护,不是针对恶意代码的安全边界。"]}),e.jsxs("label",{className:"mt-4 block",children:[e.jsx("span",{className:"mb-1.5 block type-meta text-[var(--muted-fg)]",children:"已构建插件目录的绝对路径"}),e.jsx("input",{value:l,onChange:s=>v(s.target.value),placeholder:"D:\\\\Plugins\\\\workspace-stats",className:"h-9 w-full rounded-lg border border-[var(--control-border)] bg-[var(--control)] px-3 type-ui outline-none focus:border-[var(--accent)]/60"})]}),e.jsxs("label",{className:"mt-3 block",children:[e.jsx("span",{className:"mb-1.5 block type-meta text-[var(--muted-fg)]",children:"明确批准的权限(英文逗号分隔)"}),e.jsx("input",{value:p,onChange:s=>I(s.target.value),placeholder:"filesystem:read:workspace",className:"h-9 w-full rounded-lg border border-[var(--control-border)] bg-[var(--control)] px-3 font-mono type-ui outline-none focus:border-[var(--accent)]/60"}),e.jsx("span",{className:"mt-1 block type-meta text-[var(--dim-fg)]",children:"必须与 Manifest 请求完全匹配;留空表示不批准任何额外权限。"})]}),e.jsxs("label",{className:"mt-3 flex cursor-pointer items-start gap-2.5 rounded-lg border border-[var(--control-border)] bg-[var(--control)] p-3",children:[e.jsx("input",{type:"checkbox",checked:c,onChange:s=>g(s.target.checked),className:"mt-0.5 size-3.5 accent-[var(--accent)]"}),e.jsxs("span",{children:[e.jsx("strong",{className:"block type-ui font-medium text-[var(--subtle-fg)]",children:"信任并加载同源 UI 代码"}),e.jsx("span",{className:"mt-0.5 block type-meta text-[var(--dim-fg)]",children:"只在你审阅并信任插件来源时勾选。未勾选不会为 UI 代码授予信任。"})]})]})]})]})}export{ne as PluginPanelView,L as PluginUiHost,ie as PluginsView};
@@ -0,0 +1 @@
1
+ import{c as A,l as xt,m as Ke,h as G,u as f,n as vt,o as gt,p as Be,j as e,a as L,q as Ve,s as Ge,v as ht,r as h,w as te,b as S,B as D,R as bt,S as ft,L as V,x as yt,y as jt,P as Qe,z as Nt,A as ye,F as kt,G as De,H as Ct,J as wt,K as Je,N as Mt,T as Ee,M as qe,g as _e,O as ke,C as Xe,Q as Le,U as St,V as Ye,W as It,Y as $e,d as Pt,Z as Ot,_ as Tt}from"./index-COUF63cT.js";import{L as Rt}from"./lock-keyhole-jo-FJcGq.js";const zt=[["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M17 20v2",key:"1rnc9c"}],["path",{d:"M17 2v2",key:"11trls"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M2 17h2",key:"7oei6x"}],["path",{d:"M2 7h2",key:"asdhe0"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"M20 17h2",key:"1fpfkl"}],["path",{d:"M20 7h2",key:"1o8tra"}],["path",{d:"M7 20v2",key:"4gnj0m"}],["path",{d:"M7 2v2",key:"1i4yhu"}],["rect",{x:"4",y:"4",width:"16",height:"16",rx:"2",key:"1vbyd7"}],["rect",{x:"8",y:"8",width:"8",height:"8",rx:"1",key:"z9xiuo"}]],Dt=A("cpu",zt);const Et=[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]],qt=A("eye-off",Et);const _t=[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]],Ze=A("eye",_t);const Lt=[["path",{d:"M10.3 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.98a2 2 0 0 1 1.69.9l.66 1.2A2 2 0 0 0 12 6h8a2 2 0 0 1 2 2v3.3",key:"128dxu"}],["path",{d:"m14.305 19.53.923-.382",key:"3m78fa"}],["path",{d:"m15.228 16.852-.923-.383",key:"npixar"}],["path",{d:"m16.852 15.228-.383-.923",key:"5xggr7"}],["path",{d:"m16.852 20.772-.383.924",key:"dpfhf9"}],["path",{d:"m19.148 15.228.383-.923",key:"1reyyz"}],["path",{d:"m19.53 21.696-.382-.924",key:"1goivc"}],["path",{d:"m20.772 16.852.924-.383",key:"htqkph"}],["path",{d:"m20.772 19.148.924.383",key:"9w9pjp"}],["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}]],$t=A("folder-cog",Lt);const Ut=[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]],et=A("key-round",Ut);const Wt=[["path",{d:"M18 5a2 2 0 0 1 2 2v8.526a2 2 0 0 0 .212.897l1.068 2.127a1 1 0 0 1-.9 1.45H3.62a1 1 0 0 1-.9-1.45l1.068-2.127A2 2 0 0 0 4 15.526V7a2 2 0 0 1 2-2z",key:"1pdavp"}],["path",{d:"M20.054 15.987H3.946",key:"14rxg9"}]],At=A("laptop",Wt);const Ht=[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]],Ce=A("save",Ht);const Ft=[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]],Kt=A("server",Ft);const Bt=[["path",{d:"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z",key:"r04s7s"}]],Ue=A("star",Bt);const Vt=[["circle",{cx:"12",cy:"4.5",r:"2.5",key:"r5ysbb"}],["path",{d:"m10.2 6.3-3.9 3.9",key:"1nzqf6"}],["circle",{cx:"4.5",cy:"12",r:"2.5",key:"jydg6v"}],["path",{d:"M7 12h10",key:"b7w52i"}],["circle",{cx:"19.5",cy:"12",r:"2.5",key:"1piiel"}],["path",{d:"m13.8 17.7 3.9-3.9",key:"1wyg1y"}],["circle",{cx:"12",cy:"19.5",r:"2.5",key:"13o1pw"}]],Gt=A("waypoints",Vt);class We{constructor(s,a){this.hostSessionId=s,this.exists=a}hostSessionId;exists;#e=crypto.randomUUID();#t=null;#r=0;#s=new Map;open(s){this.#e=crypto.randomUUID(),this.#t=s}get entityId(){return this.#t}promote(s,a){s.editorCurrent()&&(this.#t=a)}close(){this.#e=crypto.randomUUID(),this.#t=null}begin(s,a,n=!0){const o=Object.freeze({hostSessionId:this.hostSessionId(),entityId:a,editorSessionId:this.#e,requestId:++this.#r}),v=JSON.stringify([o.hostSessionId,a,s]);this.#s.set(v,o.requestId);const i=()=>this.hostSessionId()===o.hostSessionId&&this.#s.get(v)===o.requestId;return{identity:o,entityCurrent:()=>i()&&(!n||this.exists(a)),editorCurrent:()=>i()&&this.#e===o.editorSessionId}}}function ue(t,s){return JSON.stringify({type:t.type,preset:t.preset,baseUrl:t.baseUrl.trim(),apiKey:t.apiKey,environmentVariable:t.environmentVariable??"",authMode:t.authMode,confirmStoredCredential:s})}function Qt(t,s){return{kind:t.type,preset:t.preset,authMode:t.authMode,confirmStoredCredential:s,...t.baseUrl.trim()?{baseUrl:t.baseUrl.trim()}:{},...t.apiKey?{apiKey:t.apiKey}:{},...t.environmentVariable?{environmentVariable:t.environmentVariable}:{}}}function Jt(t){return{streaming:!0,tools:!0,parallelToolCalls:!0,reasoningLevels:t?.reasoningLevels??["off"],nativeCompaction:!1,promptCaching:!1,tokenCounting:!1,inputModalities:t?.inputModalities??["text"]}}function Xt(t){return{streaming:t.capabilities.streaming,tools:t.capabilities.tools,parallelToolCalls:t.capabilities.parallelToolCalls,reasoningEfforts:t.capabilities.reasoningLevels,nativeCompaction:t.capabilities.nativeCompaction,promptCaching:t.capabilities.promptCaching,tokenCounting:t.capabilities.tokenCounting,inputModalities:t.capabilities.inputModalities}}function Yt(t,s,a){const n={};return(!s||t.displayName!==s.displayName)&&(n.name=t.displayName),a?(n.enabled=!0,n.setDefault=!0):(!s||t.enabled!==s.enabled)&&(n.enabled=t.enabled),(!s||t.contextOverride!==s.contextOverride)&&(n.contextOverride=t.contextOverride??null),(!s||t.maxOutputOverride!==s.maxOutputOverride)&&(n.maxOutputOverride=t.maxOutputOverride??null),(!s||(t.imageInputMode??"auto")!==(s.imageInputMode??"auto"))&&(n.imageInputMode=t.imageInputMode??"auto"),s||(n.capabilities=Xt(t)),Object.keys(n).length>0?n:void 0}function je(t,s){const a=Number(t.trim().replaceAll(",","")),n=Number(s.trim().replaceAll(",",""));return!Number.isSafeInteger(a)||a<=0||!Number.isSafeInteger(n)||n<=0?{error:"请从常用值中选择,或输入正整数 Token 数。"}:n>a?{error:"最大输出 Token 不得超过上下文窗口。"}:{contextOverride:a,maxOutputOverride:n}}async function Zt(t,s){const a=s.sessionId();let n=t.profileId,o=!!t.form.id;const v=()=>t.request.entityCurrent()&&s.sessionId()===a&&(!o||s.providers().some(k=>k.id===n));if(!v())return{status:"ignored"};const i=await s.saveConnection({...xt(t.form,t.confirmStoredCredential),id:t.profileId,...t.discoveryId?{discoveryId:t.discoveryId}:{}});if(!v()||t.form.id&&i.profile.id!==t.profileId)return{status:"ignored"};let u=Ke(i.profile);if(n=u.id,s.publishProvider(u),o=!0,t.request.editorCurrent()&&t.connectionSaved(u),t.previewModels)try{const k=await s.listModels(u.id),d=new Map(k.map(y=>[y.id,y]));for(const y of t.previewModels){if(!v())return{status:"ignored"};const l=Yt(y,d.get(y.id),y.id===t.form.model);l&&await s.saveModel({profileId:u.id,modelId:y.id,...l})}if(!v())return{status:"ignored"};const p=await s.listModels(u.id);if(!v())return{status:"ignored"};s.publishModels(u.id,p),u={...u,defaultModelId:t.form.model,model:t.form.model,...t.form.contextWindow!==void 0?{contextWindow:t.form.contextWindow}:{},maxOutputTokens:t.form.maxOutputTokens??u.maxOutputTokens,modelCount:p.length,enabledModelCount:p.filter(y=>y.enabled).length},s.publishProvider(u)}catch(k){return v()?{status:"catalog-pending",profile:u,error:k}:{status:"ignored"}}return{status:"complete",profile:u}}const es={sessionId:()=>f.getState().hostSessionId,providers:()=>f.getState().providers,saveConnection:t=>G.call("provider.save",t),listModels:Be,saveModel:t=>G.call("provider.model.save",t),publishProvider:t=>{const s=f.getState();s.setProviders([...s.providers.filter(a=>a.id!==t.id),t])},publishModels:(t,s)=>f.getState().setProviderModels(t,s)};function ts(t){return Zt(t,es)}async function Ae(t,s){const a=f.getState().hostSessionId,n=()=>{const v=f.getState();return s.entityCurrent()&&v.hostSessionId===a&&v.providers.some(i=>i.id===t.profileId)};if(!n())return"ignored";const o=await G.call("provider.model.save",t);return!n()||o.profile.id!==t.profileId?"ignored":(f.getState().upsertProviderModel(vt(o.model,t.profileId),Ke(o.profile)),"applied")}async function He(t,s,a){if(!a.entityCurrent())return;const n=await(s?gt(t):Be(t));if(a.entityCurrent())return f.getState().setProviderModels(t,n),n}async function ss(t,s){return!s.entityCurrent()||(await G.call("provider.delete",{profileId:t}),!s.entityCurrent())?!1:(f.getState().removeProvider(t),!0)}function B({title:t,description:s,children:a}){return e.jsxs("section",{className:"rounded-xl border border-[var(--border)] bg-[var(--card)]",children:[e.jsxs("header",{className:"border-b border-[var(--border)] px-4 py-3",children:[e.jsx("h3",{className:"type-ui font-medium text-[var(--fg)]",children:t}),s&&e.jsx("p",{className:"mt-1 type-meta text-[var(--dim-fg)]",children:s})]}),e.jsx("div",{className:"p-4",children:a})]})}function _({title:t,description:s,children:a}){return e.jsxs("div",{className:"flex min-h-14 items-center gap-4 border-b border-[var(--border)] py-3 last:border-0",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("p",{className:"type-ui font-medium text-[var(--subtle-fg)]",children:t}),e.jsx("p",{className:"mt-1 type-meta text-[var(--dim-fg)]",children:s})]}),a]})}function pe({checked:t,onChange:s,disabled:a,label:n,title:o}){return e.jsx("button",{type:"button",role:"switch","aria-label":n,"aria-checked":t,title:o,onClick:()=>s(!t),disabled:a,className:L("relative h-5 w-9 shrink-0 rounded-full border transition disabled:cursor-not-allowed disabled:border-[var(--disabled-border)] disabled:bg-[var(--disabled-bg)]",t?"border-[var(--accent)] bg-[var(--accent)]":"border-[var(--control-border)] bg-[var(--control)]"),children:e.jsx("span",{className:L("absolute top-0.5 size-3.5 rounded-full bg-white shadow transition",t?"left-[18px]":"left-0.5",a&&"bg-[var(--disabled-fg)] shadow-none")})})}function rs({form:t,setForm:s,providerPresets:a,showKey:n,setShowKey:o,applyPreset:v}){return e.jsxs(e.Fragment,{children:[!t.id&&a.some(i=>i.id==="deepseek"||i.id==="groq"||i.id==="cerebras"||i.id==="ollama"||i.id==="vllm")&&e.jsx("div",{className:"mb-4 flex gap-1.5",children:a.filter(i=>i.id==="deepseek"||i.id==="groq"||i.id==="cerebras"||i.id==="ollama"||i.id==="vllm").map(i=>e.jsxs("button",{type:"button",onClick:()=>v(i.id),className:"rounded-lg border border-[var(--control-border)] bg-[var(--control)] px-2 py-1.5 type-ui text-[var(--subtle-fg)] hover:bg-[var(--hover)]",children:[i.name," 预设"]},i.id))}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[t.id&&e.jsxs("label",{className:"col-span-2",children:[e.jsx("span",{className:"mb-1.5 block type-meta text-[var(--muted-fg)]",children:"Provider ID"}),e.jsx("input",{"aria-label":"Provider ID",value:t.id,readOnly:!0,className:"h-9 w-full cursor-default rounded-lg border border-[var(--control-border)] bg-[var(--inset)] px-2.5 font-mono type-ui text-[var(--dim-fg)] outline-none"})]}),e.jsxs("label",{children:[e.jsx("span",{className:"mb-1.5 block type-meta text-[var(--muted-fg)]",children:"类型"}),e.jsxs("select",{"aria-label":"Provider 类型",value:t.type,onChange:i=>{const u=i.target.value,k=ht(u),d=a.find(p=>p.id===k);s(p=>{const{environmentVariable:y,...l}=p;return{...l,...d?Ve(d):{type:u,preset:k,model:"",baseUrl:"",authMode:"required"},...!p.id&&d?{name:d.name}:{},type:u}})},className:"h-9 w-full rounded-lg border border-[var(--control-border)] bg-[var(--control)] px-2.5 type-ui outline-none",children:[e.jsx("option",{value:"openai",children:"OpenAI"}),e.jsx("option",{value:"anthropic",children:"Anthropic"}),e.jsx("option",{value:"gemini",children:"Google Gemini"}),e.jsx("option",{value:"openai-compatible",children:"OpenAI-compatible"})]})]}),e.jsxs("label",{children:[e.jsx("span",{className:"mb-1.5 block type-meta text-[var(--muted-fg)]",children:"显示名称"}),e.jsx("input",{"aria-label":"显示名称",value:t.name,onChange:i=>s({...t,name:i.target.value}),className:"h-9 w-full rounded-lg border border-[var(--control-border)] bg-[var(--control)] px-2.5 type-ui outline-none"})]}),e.jsxs("label",{className:"col-span-2",children:[e.jsx("span",{className:"mb-1.5 block type-meta text-[var(--muted-fg)]",children:t.id?"兼容默认模型":"初始模型 ID"}),e.jsx("input",{"aria-label":"模型",value:t.model,onChange:i=>s({...t,model:i.target.value}),placeholder:t.preset==="groq"?"llama-3.3-70b-versatile":t.preset==="cerebras"?"gpt-oss-120b":"gpt-5",className:"h-9 w-full rounded-lg border border-[var(--control-border)] bg-[var(--control)] px-2.5 type-ui outline-none"}),e.jsx("span",{className:"mt-1.5 block type-meta text-[var(--dim-fg)]",children:"该字段用于旧客户端兼容,并始终镜像模型目录中的默认模型。"})]}),e.jsxs("label",{className:"col-span-2",children:[e.jsxs("span",{className:"mb-1.5 block type-meta text-[var(--muted-fg)]",children:["Base URL",t.type!=="openai-compatible"&&"(可选)"]}),e.jsx("input",{"aria-label":"Base URL",value:t.baseUrl,onChange:i=>s(u=>{if(u.id)return{...u,baseUrl:i.target.value};const{environmentVariable:k,...d}=u;return{...d,baseUrl:i.target.value}}),placeholder:t.preset==="groq"?"https://api.groq.com/openai/v1":t.preset==="cerebras"?"https://api.cerebras.ai/v1":t.type==="openai-compatible"?"http://127.0.0.1:11434/v1":"使用 Provider 默认端点",className:"h-9 w-full rounded-lg border border-[var(--control-border)] bg-[var(--control)] px-2.5 type-ui outline-none"})]}),t.preset==="custom"&&e.jsxs("label",{className:"col-span-2",children:[e.jsx("span",{className:"mb-1.5 block type-meta text-[var(--muted-fg)]",children:"鉴权方式"}),e.jsxs("select",{"aria-label":"鉴权方式",value:t.authMode,onChange:i=>s({...t,authMode:i.target.value}),className:"h-9 w-full rounded-lg border border-[var(--control-border)] bg-[var(--control)] px-2.5 type-ui outline-none",children:[e.jsx("option",{value:"required",children:"必须提供密钥"}),e.jsx("option",{value:"optional",children:"密钥可选"}),e.jsx("option",{value:"none",children:"无需密钥"})]})]}),e.jsxs("label",{className:"col-span-2",children:[e.jsxs("span",{className:"mb-1.5 flex items-center justify-between gap-2 type-meta text-[var(--muted-fg)]",children:[e.jsx("span",{children:"API Key"}),t.id&&e.jsxs("span",{children:["当前来源:",Ge(t.keySource,t.authMode).label]})]}),e.jsxs("span",{className:"flex h-9 items-center rounded-lg border border-[var(--control-border)] bg-[var(--control)] px-2.5",children:[e.jsx(et,{className:"mr-2 size-3.5 text-[var(--dim-fg)]"}),e.jsx("input",{"aria-label":"API Key",value:t.apiKey,onChange:i=>s({...t,apiKey:i.target.value}),type:n?"text":"password",autoComplete:"new-password",placeholder:t.id?"留空以保留当前密钥来源":t.authMode==="none"?"此 Provider 无需密钥":t.authMode==="optional"?"API Key 可选":"输入 Provider API Key",className:"min-w-0 flex-1 bg-transparent type-ui outline-none"}),e.jsx("button",{type:"button","aria-label":n?"隐藏 Key":"显示 Key",onClick:()=>o(!n),className:"text-[var(--dim-fg)] hover:text-[var(--fg)]",children:n?e.jsx(qt,{className:"size-3.5"}):e.jsx(Ze,{className:"size-3.5"})})]})]}),e.jsxs("label",{children:[e.jsx("span",{className:"mb-1.5 block type-meta text-[var(--muted-fg)]",children:"图片输入能力"}),e.jsxs("select",{"aria-label":"图片输入能力",value:t.imageInputMode,onChange:i=>s({...t,imageInputMode:i.target.value}),className:"h-9 w-full rounded-lg border border-[var(--control-border)] bg-[var(--control)] px-2.5 type-ui outline-none",children:[e.jsx("option",{value:"auto",children:"按模型自动检测"}),e.jsx("option",{value:"enabled",children:"强制启用"}),e.jsx("option",{value:"disabled",children:"强制关闭"})]})]}),e.jsxs("label",{children:[e.jsx("span",{className:"mb-1.5 block type-meta text-[var(--muted-fg)]",children:"推理续接兼容性"}),e.jsxs("select",{"aria-label":"推理续接兼容性",value:t.reasoningContinuationMode,onChange:i=>s({...t,reasoningContinuationMode:i.target.value}),className:"h-9 w-full rounded-lg border border-[var(--control-border)] bg-[var(--control)] px-2.5 type-ui outline-none",children:[e.jsx("option",{value:"auto",children:"自动识别"}),e.jsx("option",{value:"enabled",children:"始终回传"}),e.jsx("option",{value:"disabled",children:"不回传"})]})]}),e.jsxs("label",{className:"col-span-2 flex items-center justify-between rounded-lg border border-[var(--control-border)] bg-[var(--control)] px-3 py-2",children:[e.jsxs("span",{children:[e.jsx("span",{className:"block type-ui text-[var(--subtle-fg)]",children:"启用 Provider"}),e.jsx("span",{className:"block type-meta text-[var(--dim-fg)]",children:"停用后在设置页末尾显示,不进入聊天选择器。"})]}),e.jsx(pe,{checked:t.enabled,onChange:i=>s({...t,enabled:i}),label:"启用 Provider"})]})]})]})}function as({editorSession:t,form:s,setForm:a,previewModels:n,setPreviewModels:o,currentModels:v,usesDraftCatalog:i,connectionFingerprintDirty:u,editingProvider:k,online:d}){const p=f(x=>x.pushToast),y="draft",[l,j]=h.useState(""),[R,E]=h.useState(!1),[c,I]=h.useState(!1),[P,$]=h.useState({id:"",name:"",contextWindow:"",maxOutputTokens:""}),g=()=>{E(!1),I(!1)},U=x=>{if(!d)return;const m=t.begin("catalog",x.id);I(!1),E(!0),He(x.id,!1,m).catch(N=>{m.editorCurrent()&&p({title:"模型目录加载失败",description:N instanceof Error?N.message:"Host 返回未知错误",tone:"danger"})}).finally(()=>{m.editorCurrent()&&E(!1)})},O=async(x,m)=>i?(o(N=>(N??v).map(C=>C.id===x.id?{...C,...m.name?{displayName:m.name}:{},...m.enabled!==void 0?{enabled:m.enabled}:{},...typeof m.contextOverride=="number"?{contextWindow:m.contextOverride,contextOverride:m.contextOverride,contextSource:"manual"}:{},...typeof m.maxOutputOverride=="number"?{maxOutputTokens:m.maxOutputOverride,maxOutputOverride:m.maxOutputOverride,outputSource:"manual"}:{},...m.imageInputMode!==void 0?{imageInputMode:m.imageInputMode}:{}}:C)),m.setDefault&&a(N=>({...N,model:x.id})),"applied"):Ae({profileId:s.id,modelId:x.id,...m},t.begin("model:"+x.id,s.id));return{resetRequests:g,modelSearch:l,setModelSearch:j,catalogLoading:R,refreshing:c,manualModel:P,setManualModel:$,loadCatalog:U,saveLimits:async(x,m,N)=>{const C=t.begin("view-model:"+x.id,t.entityId??"draft",!1),q=je(m,N);if("error"in q){p({title:"限制无效",description:q.error,tone:"danger"});return}try{const w=x.id===(k?.defaultModelId??s.model);if(await O(x,{...q,...w?{enabled:!0}:{}})!=="applied"||!C.editorCurrent())return;p({title:"模型限制已保存",description:`${x.id} 的人工限制不会被后续刷新覆盖。`,tone:"success"})}catch(w){if(!C.editorCurrent())return;p({title:"模型保存失败",description:w instanceof Error?w.message:"Host 返回未知错误",tone:"danger"})}},toggleModel:async(x,m,N,C)=>{const q=t.begin("view-model:"+x.id,t.entityId??"draft",!1);if(m&&x.availability==="stale"){p({title:"模型已经过期",description:"远端当前未返回此模型,刷新恢复后才能启用。",tone:"neutral"});return}let w;if(m&&!te(x)){const M=je(N,C);if("error"in M){p({title:"先补充模型限制",description:M.error,tone:"neutral"});return}w=M}try{await O(x,{enabled:m,...w})}catch(M){if(!q.editorCurrent())return;p({title:"模型状态保存失败",description:M instanceof Error?M.message:"Host 返回未知错误",tone:"danger"})}},setDefaultModel:async x=>{const m=t.begin("view-model:"+x.id,t.entityId??"draft",!1);if(!te(x)){p({title:"模型仍需配置",description:"默认模型必须具有完整且有效的限制。",tone:"neutral"});return}try{if(await O(x,{enabled:!0,setDefault:!0})!=="applied"||!m.editorCurrent())return;a(C=>({...C,model:x.id}))}catch(N){if(!m.editorCurrent())return;p({title:"默认模型保存失败",description:N instanceof Error?N.message:"Host 返回未知错误",tone:"danger"})}},setModelImageInputMode:async(x,m)=>{const N=t.begin("view-model:"+x.id,t.entityId??"draft",!1);try{if(await O(x,{imageInputMode:m})!=="applied"||!N.editorCurrent())return;p({title:"视觉能力已保存",description:`${x.id} 已设为${m==="auto"?"自动检测":m==="enabled"?"强制支持图片":"强制不支持图片"}。`,tone:"success"})}catch(C){if(!N.editorCurrent())return;p({title:"视觉能力保存失败",description:C instanceof Error?C.message:"Host 返回未知错误",tone:"danger"})}},restoreAutomatic:async x=>{const m=t.begin("view-model:"+x.id,t.entityId??"draft",!1);try{await O(x,{contextOverride:null,maxOutputOverride:null})}catch(N){if(!m.editorCurrent())return;p({title:"无法恢复自动检测",description:N instanceof Error?N.message:"Host 返回未知错误",tone:"danger"})}},refreshCatalog:async()=>{if(!s.id||c)return;const x=t.begin("catalog",s.id);E(!1),I(!0);try{const m=await He(s.id,!0,x);if(!m||!x.editorCurrent())return;o(void 0),p({title:"模型目录已刷新",description:`已合并 ${m.length} 个模型;人工限制保持不变。`,tone:"success"})}catch(m){x.editorCurrent()&&p({title:"模型刷新失败",description:`${m instanceof Error?m.message:"Host 返回未知错误"};旧目录已保留。`,tone:"danger"})}finally{x.editorCurrent()&&(I(!1),E(!1))}},addManualModel:async()=>{const x=t.begin("view-model:"+P.id,t.entityId??"draft",!1),m=P.id.trim(),N=je(P.contextWindow,P.maxOutputTokens);if(!m){p({title:"模型信息不完整",description:"请输入模型 ID。",tone:"danger"});return}if("error"in N){p({title:"模型信息不完整",description:N.error,tone:"danger"});return}const C=N.contextOverride,q=N.maxOutputOverride,w={providerId:s.id??y,id:m,displayName:P.name.trim()||m,enabled:!0,availability:"manual",contextWindow:C,maxOutputTokens:q,contextOverride:C,maxOutputOverride:q,contextSource:"manual",outputSource:"manual",imageInputMode:"auto",capabilities:Jt(k)};try{if(i)o(M=>[...(M??(u?[]:v)).filter(ie=>ie.id!==w.id),w]);else{const M=t.begin("model:"+w.id,s.id);if(await Ae({profileId:s.id,modelId:w.id,name:w.displayName,enabled:!0,contextOverride:C,maxOutputOverride:q},M)!=="applied"||!x.editorCurrent())return}$({id:"",name:"",contextWindow:"",maxOutputTokens:""})}catch(M){if(!x.editorCurrent())return;p({title:"手工模型添加失败",description:M instanceof Error?M.message:"Host 返回未知错误",tone:"danger"})}}}}const tt="provider-context-token-options",st="provider-output-token-options",ns=[8192,16384,32768,65536,128e3,131072,2e5,262144,1e6],is=[2048,4096,8192,16384,32768,65536,128e3],Fe={manual:"人工",endpoint:"端点",builtin:"内置目录",legacy:"旧配置",unknown:"未知"};function me({kind:t,ariaLabel:s,value:a,onChange:n,className:o,autoFocus:v=!1}){return e.jsx("input",{"aria-label":s,list:t==="context"?tt:st,inputMode:"numeric",value:a,onChange:i=>n(i.target.value),placeholder:t==="context"?"选择或输入,如 128000":"选择或输入,如 8192",autoFocus:v,className:L("w-full rounded-lg border border-[var(--control-border)] bg-[var(--control)] type-ui outline-none",o)})}function os({model:t,isDefault:s,isCurrent:a,onEnabledChange:n,onDefault:o,onRestore:v,allowRestore:i,onSaveLimits:u,supportsImages:k,onImageInputModeChange:d}){const[p,y]=h.useState(t.contextWindow?.toString()??""),[l,j]=h.useState(t.maxOutputTokens?.toString()??"");h.useEffect(()=>{y(t.contextWindow?.toString()??"")},[t.contextWindow]),h.useEffect(()=>{j(t.maxOutputTokens?.toString()??"")},[t.maxOutputTokens]);const R=te(t),E=s||a,c=R?Math.max(4096,Math.min(t.maxOutputTokens,Math.floor(t.contextWindow*.25))):void 0,I=R?Math.max(2048,Math.floor(t.contextWindow*.05)):void 0,P=R?Math.max(0,t.contextWindow-c-I):void 0,$=s&&t.enabled?"默认模型始终启用":a&&t.enabled?"当前正在使用的模型不能停用":t.availability==="stale"?"过期模型需刷新恢复后启用":void 0;return e.jsxs("article",{className:L("rounded-xl border p-3",t.availability==="stale"?"border-[var(--status-warning-border)] bg-[var(--status-warning-bg)]":"border-[var(--border)] bg-[var(--card)]"),children:[e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-1.5",children:[e.jsx("h4",{className:"truncate type-ui font-medium text-[var(--fg)]",children:t.displayName}),s&&e.jsxs(S,{tone:"accent",children:[e.jsx(Ue,{className:"mr-1 size-2.5"}),"默认"]}),a&&!s&&e.jsx(S,{tone:"accent",children:"当前"}),k&&e.jsxs(S,{tone:"accent",children:[e.jsx(Ze,{className:"mr-1 size-2.5"}),"可看图"]}),t.availability==="stale"&&e.jsx(S,{tone:"warning",children:"stale"}),!R&&e.jsx(S,{tone:"warning",children:"需配置"}),t.availability==="manual"&&e.jsx(S,{children:"手工"})]}),e.jsx("p",{className:"mt-0.5 truncate font-mono type-meta text-[var(--dim-fg)]",children:t.id})]}),e.jsx(pe,{label:`启用模型 ${t.id}`,checked:t.enabled,disabled:E&&t.enabled||t.availability==="stale"&&!t.enabled,...$?{title:$}:{},onChange:g=>n(g,p,l)})]}),e.jsxs("div",{className:"mt-3 grid grid-cols-1 gap-2 md:grid-cols-[1fr_1fr_auto]",children:[e.jsxs("label",{children:[e.jsxs("span",{className:"mb-1 block type-meta text-[var(--dim-fg)]",children:["上下文 Token · ",Fe[t.contextSource],t.contextOverride!==void 0?"(覆盖)":""]}),e.jsx(me,{kind:"context",ariaLabel:`${t.id} 上下文窗口`,value:p,onChange:y,autoFocus:s&&!R,className:"h-8 px-2"})]}),e.jsxs("label",{children:[e.jsxs("span",{className:"mb-1 block type-meta text-[var(--dim-fg)]",children:["最大输出 · ",Fe[t.outputSource],t.maxOutputOverride!==void 0?"(覆盖)":""]}),e.jsx(me,{kind:"output",ariaLabel:`${t.id} 最大输出`,value:l,onChange:j,className:"h-8 px-2"})]}),e.jsxs(D,{"aria-label":`保存 ${t.id} 限制`,className:"mt-[19px]",onClick:()=>u(p,l),children:[e.jsx(Ce,{className:"size-3"}),"保存限制"]})]}),e.jsxs("div",{className:"mt-2 flex flex-wrap items-center gap-2",children:[e.jsxs("label",{className:"flex items-center gap-2 type-meta text-[var(--dim-fg)]",children:[e.jsx("span",{children:"图片输入"}),e.jsxs("select",{"aria-label":`${t.id} 图片输入能力`,value:t.imageInputMode??"auto",onChange:g=>d(g.target.value),className:"h-7 rounded-lg border border-[var(--control-border)] bg-[var(--control)] px-2 type-meta outline-none",children:[e.jsx("option",{value:"auto",children:"自动检测"}),e.jsx("option",{value:"enabled",children:"强制支持"}),e.jsx("option",{value:"disabled",children:"强制不支持"})]})]}),e.jsx("span",{className:"mr-auto type-meta text-[var(--dim-fg)]",children:P===void 0?"选择或输入两项限制后,可直接打开右上角开关":`可用输入约 ${ae(P)}(已预留输出与安全余量)`}),i&&(t.contextOverride!==void 0||t.maxOutputOverride!==void 0)&&e.jsxs(D,{variant:"ghost",onClick:v,className:"h-7 px-2",children:[e.jsx(bt,{className:"size-3"}),"恢复自动值"]}),!s&&e.jsxs(D,{variant:"ghost",onClick:o,disabled:!R||t.availability==="stale",className:"h-7 px-2",children:[e.jsx(Ue,{className:"size-3"}),"设为默认"]})]})]})}function ae(t){return t>=1e3?`${Math.round(t/1e3)}K`:String(t)}function ls(t){return t?.contextWindow&&t.maxOutputTokens?`${ae(t.contextWindow)} context / ${ae(t.maxOutputTokens)} output`:"限制需配置"}function ds(t){const s=new Date(t);return Number.isNaN(s.getTime())?t:new Intl.DateTimeFormat("zh-CN",{month:"numeric",day:"numeric",hour:"2-digit",minute:"2-digit"}).format(s)}function cs({editor:t,form:s,editingProvider:a,online:n,filteredModels:o,activeProviderId:v,activeModelByProviderId:i}){const{modelSearch:u,setModelSearch:k,catalogLoading:d,refreshing:p,manualModel:y,setManualModel:l,refreshCatalog:j,toggleModel:R,setDefaultModel:E,restoreAutomatic:c,saveLimits:I,setModelImageInputMode:P,addManualModel:$}=t;return e.jsxs("div",{className:"max-h-[min(64vh,650px)] overflow-y-auto pr-1",children:[e.jsxs("div",{className:"mb-3 flex flex-wrap items-center gap-2",children:[e.jsxs("div",{className:"relative min-w-[230px] flex-1",children:[e.jsx(ft,{className:"pointer-events-none absolute left-3 top-2.5 size-3.5 text-[var(--dim-fg)]"}),e.jsx("input",{"aria-label":"搜索 Provider 模型",value:u,onChange:g=>k(g.target.value),placeholder:"搜索名称或模型 ID",className:"h-9 w-full rounded-lg border border-[var(--control-border)] bg-[var(--control)] pl-9 pr-3 type-ui outline-none"})]}),s.id&&e.jsxs(D,{onClick:()=>{j()},disabled:!n||p,children:[p?e.jsx(V,{className:"size-3.5 animate-spin motion-reduce:animate-none"}):e.jsx(yt,{className:"size-3.5"}),"刷新模型"]})]}),e.jsx("p",{className:"mb-3 type-meta text-[var(--dim-fg)]",children:"服务商未返回限制时,请以模型文档为准;输入框可选择常用 Token 值,也可以直接输入精确数值。"}),e.jsx("datalist",{id:tt,children:ns.map(g=>e.jsx("option",{value:g,label:`${ae(g)} Token`},g))}),e.jsx("datalist",{id:st,children:is.map(g=>e.jsx("option",{value:g,label:`${ae(g)} Token`},g))}),d&&e.jsxs("div",{role:"status",className:"flex items-center justify-center gap-2 py-8 type-ui text-[var(--muted-fg)]",children:[e.jsx(V,{className:"size-4 animate-spin motion-reduce:animate-none"}),"正在加载模型目录…"]}),!d&&e.jsx("div",{className:"space-y-2",children:o.map(g=>e.jsx(os,{model:g,isDefault:g.id===(a?.defaultModelId??s.model),isCurrent:s.id&&s.id===v?i[s.id]===g.id:!1,onEnabledChange:(U,O,Q)=>{R(g,U,O,Q)},onDefault:()=>{E(g)},onRestore:()=>{c(g)},allowRestore:!!s.id,onSaveLimits:(U,O)=>{I(g,U,O)},supportsImages:jt(g,a),onImageInputModeChange:U=>{P(g,U)}},g.id))}),!d&&o.length===0&&e.jsx("p",{className:"py-8 text-center type-ui text-[var(--dim-fg)]",children:"没有匹配的模型"}),e.jsxs("section",{className:"mt-4 rounded-xl border border-dashed border-[var(--border-strong)] p-3",children:[e.jsx("h3",{className:"type-ui font-medium text-[var(--fg)]",children:"手动添加模型"}),e.jsx("p",{className:"mt-1 type-meta text-[var(--dim-fg)]",children:"手工模型必须同时填写上下文与最大输出限制。"}),e.jsxs("div",{className:"mt-3 grid grid-cols-2 gap-2 md:grid-cols-5",children:[e.jsx("input",{"aria-label":"手工模型 ID",value:y.id,onChange:g=>l({...y,id:g.target.value}),placeholder:"模型 ID",className:"h-9 rounded-lg border border-[var(--control-border)] bg-[var(--control)] px-2.5 type-ui outline-none md:col-span-2"}),e.jsx("input",{"aria-label":"手工模型名称",value:y.name,onChange:g=>l({...y,name:g.target.value}),placeholder:"显示名称(可选)",className:"h-9 rounded-lg border border-[var(--control-border)] bg-[var(--control)] px-2.5 type-ui outline-none"}),e.jsx(me,{kind:"context",ariaLabel:"手工模型上下文",value:y.contextWindow,onChange:g=>l({...y,contextWindow:g}),className:"h-9 px-2.5"}),e.jsx(me,{kind:"output",ariaLabel:"手工模型最大输出",value:y.maxOutputTokens,onChange:g=>l({...y,maxOutputTokens:g}),className:"h-9 px-2.5"})]}),e.jsxs(D,{className:"mt-2",onClick:()=>{$()},children:[e.jsx(Qe,{className:"size-3.5"}),"添加到目录"]})]})]})}function us(t){const{editorSession:s,form:a,confirmStoredCredential:n,initialFingerprintRef:o,discoveryRequestRef:v,requiresCredentialConfirmation:i,online:u,providerOpen:k,setPreviewModels:d}=t,p="draft",[y,l]=h.useState({status:"idle"});return h.useEffect(()=>{if(!k||!u)return;const j=ue(a,n);if(j===o.current){d(void 0),l({status:"idle"});return}if(d(void 0),a.type==="openai-compatible"&&!a.baseUrl.trim()){l({status:"idle",fingerprint:j});return}if(i&&!n){l({status:"error",fingerprint:j,message:"端点已变化。请重新输入密钥,或明确确认仅本次发现可复用已存凭据。"});return}const R=++v.current,E=s.begin("discovery",s.entityId??a.id??"draft",!!a.id);l({status:"loading",fingerprint:j});const c=window.setTimeout(()=>{Nt({...a.id?{profileId:a.id}:{},draft:Qt(a,n)},a.id??p).then(({models:I,discoveryId:P})=>{R!==v.current||!E.editorCurrent()||!E.entityCurrent()||(d(I),l({status:"ready",fingerprint:j,...P?{discoveryId:P}:{},message:`发现 ${I.length} 个模型;保存 Provider 后才会写入目录。`}))}).catch(I=>{R===v.current&&l({status:"error",fingerprint:j,message:I instanceof Error?I.message:"模型发现失败"})})},500);return()=>{window.clearTimeout(c),v.current+=1}},[n,a.apiKey,a.authMode,a.baseUrl,a.environmentVariable,a.id,a.preset,a.type,u,k,i]),{discoverState:y,setDiscoverState:l}}const ps="draft",ms={openai:Gt,anthropic:Je,gemini:wt,"openai-compatible":Kt};function xs({visible:t}){const[s]=h.useState(()=>new We(()=>f.getState().hostSessionId,r=>f.getState().providers.some(b=>b.id===r))),[a]=h.useState(()=>new We(()=>f.getState().hostSessionId,r=>f.getState().providers.some(b=>b.id===r)));h.useEffect(()=>()=>{s.close(),a.close()},[s,a]);const n=f(r=>r.providers),o=f(r=>r.providerPresets),v=f(r=>r.modelsByProviderId),i=f(r=>r.activeProviderId),u=f(r=>r.activeModelByProviderId);f(r=>r.removeProvider),f(r=>r.setProviderModels);const k=f(r=>r.connectionStatus),d=f(r=>r.pushToast),[p,y]=h.useState(!1),[l,j]=h.useState("connection"),[R,E]=h.useState(!1),[c,I]=h.useState(ye),[P,$]=h.useState(),[g,U]=h.useState(!1),[O,Q]=h.useState(),[xe,se]=h.useState(null),[J,ve]=h.useState(),[X,ne]=h.useState(!1),x=h.useRef(""),m=h.useRef(0),N=h.useRef(!1),C=h.useRef(!1),q=h.useRef(void 0),w=k==="online",M=xe!==null,ie=h.useMemo(()=>kt(n),[n]),rt=h.useMemo(()=>{const r=new Map;for(const b of n)r.set(b.name,(r.get(b.name)??0)+1);return new Set([...r].filter(([,b])=>b>1).map(([b])=>b))},[n]),F=c.id?n.find(r=>r.id===c.id):void 0,oe=!!(P&&((P.baseUrl??"")!==c.baseUrl.trim()||P.type!==c.type||P.preset!==c.preset))&&(P?.keySource==="credential"||P?.keySource==="environment")&&!c.apiKey,{discoverState:z,setDiscoverState:at}=us({editorSession:s,form:c,confirmStoredCredential:g,initialFingerprintRef:x,discoveryRequestRef:m,requiresCredentialConfirmation:oe,online:w,providerOpen:p,setPreviewModels:Q}),ge=ue(c,g),le=ge!==x.current,nt=!le||z.status==="ready"&&z.fingerprint===ge,it=!c.id||le,re=h.useMemo(()=>{const r=O??(c.id?v[c.id]:void 0)??(F?[De(F)]:[]),b=F??{id:c.id??ps,model:c.model,defaultModelId:c.model};return Ct(b,r)},[F,c.id,c.model,v,O]),de=as({editorSession:s,form:c,setForm:I,previewModels:O,setPreviewModels:Q,currentModels:re,usesDraftCatalog:it,connectionFingerprintDirty:le,editingProvider:F,online:w}),{modelSearch:we,setModelSearch:he,setManualModel:Me,loadCatalog:Se}=de,ot=h.useMemo(()=>{const r=we.trim().toLocaleLowerCase("zh-CN");return re.filter(b=>!r||b.displayName.toLocaleLowerCase("zh-CN").includes(r)||b.id.toLocaleLowerCase("zh-CN").includes(r))},[re,we]),Z=O?.find(r=>r.id===c.model),lt=z.status==="error"&&z.fingerprint===ge&&Z?.availability==="manual"&&te(Z),Ie=nt||lt,Pe=O?!!(Z&&te(Z)):c.maxOutputTokens!==void 0,ce=O&&!Pe?Z?`默认模型 ${c.model} 缺少上下文窗口或最大输出限制。请在模型目录补充后保存。`:`初始模型 ${c.model} 不在发现结果中。请在模型目录选择或手动添加默认模型。`:void 0,dt=M||!w||!c.name.trim()||!c.model.trim()||!O&&!Pe||!Ie||z.status==="loading"||c.type==="openai-compatible"&&!c.baseUrl.trim()||oe&&!g,be=(r,b="connection")=>{const T=r?Le(r):ye(o.find(H=>H.id==="openai")??o[0]);q.current=r?.id??crypto.randomUUID(),s.open(q.current),N.current=!1,se(null),de.resetRequests(),I(T),$(r),j(b),E(!1),U(!1),Q(void 0),he(""),at({status:"idle"}),Me({id:"",name:"",contextWindow:"",maxOutputTokens:""}),x.current=ue(T,!1),y(!0),r&&b==="models"&&Se(r)},Oe=()=>{s.close(),N.current=!1,se(null),de.resetRequests(),m.current+=1,y(!1),E(!1),Q(void 0),$(void 0),q.current=void 0,I(ye(o.find(r=>r.id==="openai")??o[0]))},fe=()=>{N.current||Oe()},Te=()=>{a.close(),C.current=!1,ne(!1),ve(void 0)},Re=()=>{C.current||Te()},ze=()=>{j("models"),he(Z?c.model:"")},ct=()=>{j("models"),he(""),Me(r=>({...r,id:r.id||c.model}))},ut=async()=>{if(N.current||!w)return;if(!Ie){d({title:z.status==="error"?"请手动配置默认模型":"请先完成模型发现",description:z.status==="error"?"自动发现失败;请在模型目录手动添加默认模型并填写上下文与最大输出限制。":"连接配置已变化;请等待当前连接的模型发现成功后再保存。",tone:"danger"});return}if(oe&&!g){d({title:"需要确认凭据",description:"连接范围变化后,请重新输入密钥或明确确认复用当前凭据来源。",tone:"danger"});return}const r=!!c.id,b=O?.find(W=>W.id===c.model);if(O&&(!b||!te(b))){ze(),d({title:"先完善默认模型",description:b?"已定位到默认模型。请选择或输入上下文与最大输出 Token,然后保存限制。":"初始模型不在发现结果中,请选择或手动添加默认模型。",tone:"neutral"});return}const T=s.begin("save",c.id??q.current,!!c.id),H=b?{...c,contextWindow:b.contextWindow,maxOutputTokens:b.maxOutputTokens,model:b.id}:c;N.current=!0,se(r?"update":"create");try{const W=!!c.apiKey,Y=await ts({request:T,form:H,profileId:c.id??(q.current??=crypto.randomUUID()),confirmStoredCredential:g,...z.status==="ready"&&z.discoveryId?{discoveryId:z.discoveryId}:{},...O?{previewModels:O}:{},connectionSaved:K=>{s.promote(T,K.id);const ee=Le(K);I(ee),$(K),U(!1),x.current=ue(ee,!1)}});if(Y.status==="ignored"||!T.editorCurrent())return;if(Y.status==="catalog-pending"){d({title:"连接已保存、模型目录待重试",description:`${Y.error instanceof Error?Y.error.message:"模型刷新失败"};旧目录已保留,请在模型目录中重试刷新。`,tone:"danger"});return}Oe(),d({title:r?"Provider 已更新":"Provider 已添加",description:W?"新 API Key 已交给 Host 保存,浏览器没有保留它。":r?"连接配置已更新;已有密钥未被读取。":"连接配置已保存。",tone:"success"})}catch(W){if(!T.editorCurrent())return;d({title:"保存失败",description:W instanceof Error?W.message:"Host 返回未知错误",tone:"danger"})}finally{T.editorCurrent()&&(N.current=!1,se(null))}},pt=async()=>{if(C.current||!J||!w)return;if(n.length<=1){d({title:"至少保留一个 Provider",description:"请先添加其他 Provider,再删除当前配置。",tone:"neutral"});return}const r=J,b=a.begin("delete",r.id);C.current=!0,ne(!0);try{if(!await ss(r.id,b)||!b.editorCurrent())return;Te(),d({title:"Provider 已删除",description:`${r.name} 的连接配置、密钥与模型目录已删除,历史对话仍保留。`,tone:"success"})}catch(T){if(!b.editorCurrent())return;d({title:"删除失败",description:T instanceof Error?T.message:"Host 返回未知错误",tone:"danger"})}finally{b.editorCurrent()&&(C.current=!1,ne(!1))}},mt=r=>{const b=o.find(T=>T.id===r);b&&I(T=>{const{environmentVariable:H,...W}=T;return{...W,...Ve(b)}})};return e.jsxs(e.Fragment,{children:[e.jsx("div",{hidden:!t,children:e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between gap-4",children:[e.jsx("p",{className:"type-meta text-[var(--muted-fg)]",children:"密钥只由 Host 保存;目录刷新由用户操作或连接配置变化触发。"}),e.jsxs(D,{onClick:()=>w?be():d({title:"Host 未连接",description:"无法保存 Provider 配置。",tone:"neutral"}),children:[e.jsx(Qe,{className:"size-3.5"}),"添加 Provider"]})]}),ie.map(r=>{const b=ms[r.type],T=Ge(r.keySource,r.authMode),H=v[r.id]??[De(r)],W=H.find(ee=>ee.id===(r.defaultModelId??r.model))??H[0],Y=rt.has(r.name),K=Y?`${r.name}(${r.id.slice(-6)})`:r.name;return e.jsxs("div",{className:"flex items-center gap-3 rounded-xl border border-[var(--border)] bg-[var(--card)] p-3.5",children:[e.jsx("span",{className:"flex size-9 items-center justify-center rounded-xl bg-[var(--control)] text-[var(--accent-soft)]",children:e.jsx(b,{className:"size-4"})}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("p",{className:"type-ui font-medium text-[var(--fg)]",children:r.name}),Y&&e.jsxs(S,{children:["ID …",r.id.slice(-6)]}),e.jsx(S,{children:r.preset}),e.jsx("span",{"data-key-source":r.keySource,title:T.description,children:e.jsxs(S,{tone:T.tone,children:[e.jsx(et,{className:"mr-1 size-2.5"}),T.label]})}),e.jsx(S,{children:r.enabled?"已启用":"已停用"})]}),e.jsxs("p",{className:"mt-1 truncate type-meta text-[var(--dim-fg)]",children:["默认:",W?.displayName??r.model," · 已启用 ",r.enabledModelCount??H.filter(ee=>ee.enabled).length,"/",r.modelCount??H.length," · ",ls(W)]}),e.jsxs("p",{className:"mt-0.5 truncate type-meta text-[var(--dim-fg)]",children:[r.modelsLastRefreshedAt?`最近刷新 ${ds(r.modelsLastRefreshedAt)}`:"尚未刷新",r.baseUrl?` · ${r.baseUrl}`:""]})]}),e.jsxs("div",{className:"flex shrink-0 gap-1.5",children:[e.jsx(D,{variant:"secondary","aria-label":`管理 ${K} 模型`,onClick:()=>be(r,"models"),children:"模型目录"}),e.jsxs(D,{variant:"secondary","aria-label":`配置 ${K}`,onClick:()=>be(r),children:[e.jsx(Mt,{className:"size-3.5"}),"配置"]}),e.jsxs(D,{"aria-label":`删除 ${K}`,title:n.length<=1?"至少保留一个 Provider":`删除 ${K}`,disabled:!w||n.length<=1,onClick:()=>{a.open(r.id),ve(r)},variant:"secondary",className:"hover:border-[var(--status-danger-border)] hover:bg-[var(--status-danger-bg)] hover:text-[var(--status-danger-fg)]",children:[e.jsx(Ee,{className:"size-3.5"}),"删除"]})]})]},r.id)})]})}),e.jsx(qe,{open:p,onOpenChange:r=>{r||fe()},title:c.id?"编辑模型 Provider":"添加模型 Provider",description:"连接信息与模型目录分别管理;模型限制缺失时不会使用虚构默认值。",contentClassName:"w-[min(900px,calc(100vw-32px))]",closeDisabled:M,footer:l==="models"&&c.id&&!le&&!M?e.jsx(D,{onClick:fe,children:"完成"}):e.jsxs(e.Fragment,{children:[e.jsx(D,{variant:"ghost",onClick:fe,disabled:M,children:"取消"}),e.jsxs(D,{"aria-busy":M,onClick:()=>{ut()},disabled:dt,children:[M?e.jsx(V,{className:"size-3.5 animate-spin motion-reduce:animate-none"}):ce?e.jsx(Xe,{className:"size-3.5"}):e.jsx(Ce,{className:"size-3.5"}),M?xe==="update"?"正在更新 Provider…":"正在保存 Provider…":ce?"配置默认模型":c.id?"更新 Provider":"保存 Provider"]})]}),children:e.jsxs("fieldset",{disabled:M,"aria-busy":M,className:"m-0 min-w-0 border-0 p-0",children:[e.jsxs("div",{className:"mb-4 flex gap-1 rounded-lg bg-[var(--inset)] p-1",role:"tablist","aria-label":"Provider 配置",children:[e.jsx("button",{type:"button",role:"tab","aria-selected":l==="connection",onClick:()=>j("connection"),className:L("flex-1 rounded-md px-3 py-1.5 type-ui",l==="connection"&&"bg-[var(--control)] text-[var(--fg)] shadow-sm"),children:"连接配置"}),e.jsxs("button",{type:"button",role:"tab","aria-selected":l==="models",onClick:()=>{j("models"),F&&Se(F)},className:L("flex-1 rounded-md px-3 py-1.5 type-ui",l==="models"&&"bg-[var(--control)] text-[var(--fg)] shadow-sm"),children:["模型目录",re.length?` (${re.length})`:""]})]}),l==="connection"?e.jsxs("div",{className:"max-h-[min(62vh,620px)] overflow-y-auto pr-1",children:[e.jsx(rs,{form:c,setForm:I,providerPresets:o,showKey:R,setShowKey:E,applyPreset:mt}),oe&&e.jsxs("label",{className:"mt-3 flex gap-2 rounded-lg border border-[var(--status-warning-border)] bg-[var(--status-warning-bg)] p-3 type-ui text-[var(--status-warning-fg)]",children:[e.jsx("input",{type:"checkbox",checked:g,onChange:r=>U(r.target.checked),className:"mt-0.5"}),e.jsxs("span",{children:[e.jsx("strong",{className:"block font-medium",children:"连接范围已变化"}),"重新输入密钥最安全;也可明确确认将当前 Windows 凭据或环境变量用于新的类型、预设与端点。"]})]}),z.status!=="idle"&&e.jsxs("div",{role:"status",className:L("mt-3 flex items-center gap-2 rounded-lg border px-3 py-2 type-ui",z.status==="error"?"border-[var(--status-danger-border)] bg-[var(--status-danger-bg)] text-[var(--status-danger-fg)]":"border-[var(--border)] bg-[var(--control)] text-[var(--muted-fg)]"),children:[z.status==="loading"?e.jsx(V,{className:"size-3.5 animate-spin motion-reduce:animate-none"}):z.status==="error"?e.jsx(_e,{className:"size-3.5 shrink-0"}):e.jsx(ke,{className:"size-3.5 text-[var(--status-success-fg)]"}),e.jsx("span",{className:"min-w-0 flex-1",children:z.status==="loading"?"正在预览模型目录…":z.message}),z.status==="error"&&e.jsx("button",{type:"button",onClick:ct,className:"shrink-0 font-medium text-[var(--accent-soft)] hover:underline",children:"手动添加模型"})]}),ce&&e.jsxs("div",{role:"status",className:"mt-3 flex items-center gap-2 rounded-lg border border-[var(--status-warning-border)] bg-[var(--status-warning-bg)] px-3 py-2 type-ui text-[var(--status-warning-fg)]",children:[e.jsx(_e,{className:"size-3.5 shrink-0"}),e.jsx("span",{className:"min-w-0 flex-1",children:ce}),e.jsx("button",{type:"button",onClick:ze,className:"shrink-0 font-medium text-[var(--accent-soft)] hover:underline",children:"前往模型目录"})]})]}):e.jsx(cs,{editor:de,form:c,editingProvider:F,online:w,filteredModels:ot,activeProviderId:i,activeModelByProviderId:u})]})}),e.jsx(qe,{open:!!J,onOpenChange:r=>{r||Re()},title:"删除 Provider",description:"请确认要永久删除这条连接配置。",closeDisabled:X,footer:e.jsxs(e.Fragment,{children:[e.jsx(D,{variant:"ghost",onClick:Re,disabled:X,children:"取消"}),e.jsxs(D,{variant:"danger","aria-busy":X,onClick:()=>{pt()},disabled:X||!w,children:[X?e.jsx(V,{className:"size-3.5 animate-spin motion-reduce:animate-none"}):e.jsx(Ee,{className:"size-3.5"}),X?"正在删除…":"确认删除"]})]}),children:J&&e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"rounded-xl border border-[var(--status-danger-border)] bg-[var(--status-danger-bg)] p-3",children:[e.jsx("p",{className:"type-ui font-medium text-[var(--fg)]",children:J.name}),e.jsx("code",{className:"mt-1 block break-all type-meta text-[var(--muted-fg)]",children:J.id})]}),e.jsx("p",{className:"type-ui leading-5 text-[var(--muted-fg)]",children:"连接配置、保存的密钥和模型目录会一并删除。历史对话内容仍会保留,但绑定这个 Provider 的旧任务将无法直接重试;可以新建消息并选择其他 Provider。"}),!w&&e.jsx("p",{role:"status",className:"rounded-lg border border-[var(--status-warning-border)] bg-[var(--status-warning-bg)] px-3 py-2 type-ui text-[var(--status-warning-fg)]",children:"Host 未连接,恢复连接后才能删除。"})]})})]})}function vs(){const t=f(l=>l.supportsTurnQueue),s=f(l=>l.connectionStatus==="online"),a=f(l=>l.hostSessionId),n=St(),[o,v]=h.useState(null),u=Ye({queryKey:["scheduler",a,"settings"],queryFn:()=>G.call("scheduler.settings.get",{}),enabled:t&&s,staleTime:3e4,retry:!1}),k=It({mutationFn:async({value:l,expectedRevision:j,requestSession:R})=>{if(f.getState().hostSessionId!==R)throw new Error("Host 连接已更换,请重新读取设置。");return{result:await G.call("scheduler.settings.update",{maxConcurrentApplications:l,expectedRevision:j}),requestSession:R}},onSuccess:({result:l,requestSession:j})=>{f.getState().hostSessionId===j&&(n.setQueryData(["scheduler",j,"settings"],l),v(null),f.getState().pushToast({title:"应用并发设置已保存",description:"正在执行的任务不受影响,新上限适用于后续任务。",tone:"success"}))},onError:(l,j)=>{f.getState().hostSessionId===j.requestSession&&(v(null),u.refetch(),f.getState().pushToast({title:"并发设置未保存",description:l instanceof Error?l.message:"Host 返回未知错误",tone:"danger"}))}});if(h.useEffect(()=>{v(null)},[a]),!t)return null;const d=o??String(u.data?.settings.maxConcurrentApplications??3),p=Number(d),y=d.trim().length>0&&Number.isInteger(p)&&p>=1&&p<=32;return e.jsxs("section",{"aria-label":"应用后台执行",className:"rounded-xl border border-[var(--border)] bg-[var(--card)]",children:[e.jsxs("header",{className:"border-b border-[var(--border)] px-4 py-3",children:[e.jsx("h3",{className:"type-ui font-medium text-[var(--fg)]",children:"应用后台执行"}),e.jsx("p",{className:"mt-1 type-meta text-[var(--dim-fg)]",children:"不同应用可同时执行;同一源码目录的任务按顺序排队。"})]}),e.jsxs("div",{className:"space-y-3 p-4",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("label",{htmlFor:"application-concurrency",className:"min-w-0 flex-1 type-ui text-[var(--subtle-fg)]",children:"同时执行的应用数"}),e.jsx("input",{id:"application-concurrency",type:"number",min:1,max:32,step:1,value:d,onChange:l=>v(l.target.value),disabled:!s||u.isPending||k.isPending,className:"h-9 w-20 rounded-lg border border-[var(--control-border)] bg-[var(--control)] px-2 type-ui outline-none focus:border-[var(--accent)]"}),e.jsxs(D,{disabled:!s||!u.data||!y||k.isPending||p===u.data.settings.maxConcurrentApplications,onClick:()=>{u.data&&k.mutate({value:p,expectedRevision:u.data.settings.revision,requestSession:a})},children:[k.isPending&&e.jsx(V,{className:"size-3.5 animate-spin motion-reduce:animate-none"}),"保存并发设置"]})]}),u.isError&&e.jsxs($e,{tone:"danger",children:["无法读取并发设置。",e.jsx("button",{type:"button",className:"ml-2 underline",onClick:()=>{u.refetch()},children:"重试"})]}),!y&&e.jsx($e,{tone:"warning",children:"请输入 1 到 32 之间的整数。"}),e.jsx("p",{className:"type-meta text-[var(--dim-fg)]",children:"默认 3。调低上限不会取消正在执行的任务;排队期间可在原对话取消。"})]})]})}function gs({visible:t}){const s=f(l=>l.projects),a=f(l=>l.connectionStatus),n=f(l=>l.pushToast),[o,v]=h.useState(""),[i,u]=h.useState(!1),d=Ye({queryKey:["workspace","settings"],queryFn:()=>G.call("workspace.settings.get",{}),enabled:a==="online",staleTime:15e3,retry:1});h.useEffect(()=>{d.data&&v(d.data.settings.rootPath)},[d.data]);const p=s.filter(l=>l.kind==="managed").length,y=async()=>{const l=d.data?.settings;if(!(!l||!o.trim()||i)){u(!0);try{const j=await G.call("workspace.settings.update",{rootPath:o.trim(),expectedRevision:l.revision});v(j.settings.rootPath),await d.refetch(),n({title:"托管工作区已更新",description:j.settings.rootPath,tone:"success"})}catch(j){n({title:"无法更新托管工作区",description:j instanceof Error?j.message:"Host 返回未知错误",tone:"danger"})}finally{u(!1)}}};return e.jsx("div",{hidden:!t,children:e.jsxs("div",{className:"space-y-3",children:[e.jsxs(B,{title:"托管应用根目录",description:"新应用只需要名称,业务源码会创建在该目录的 apps 子目录中。",children:[d.isPending&&e.jsxs("div",{role:"status",className:"flex items-center gap-2 py-4 type-ui text-[var(--muted-fg)]",children:[e.jsx(V,{className:"size-4 animate-spin motion-reduce:animate-none"}),"正在读取工作区设置…"]}),d.isError&&e.jsxs("div",{role:"alert",className:"rounded-lg border border-[var(--status-danger-border)] bg-[var(--status-danger-bg)] p-3 type-ui text-[var(--status-danger-fg)]",children:[d.error instanceof Error?d.error.message:"Host 返回未知错误",e.jsx(D,{variant:"secondary",className:"ml-3",onClick:()=>{d.refetch()},children:"重试"})]}),d.data&&e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx(S,{tone:d.data.settings.state==="ready"?"success":"danger",children:d.data.settings.state==="ready"?"工作区可用":"工作区不可用"}),e.jsxs(S,{children:[p," 个托管应用"]}),d.data.settings.locked&&e.jsx(S,{tone:"warning",children:"已有应用 · 路径已锁定"})]}),d.data.settings.message&&e.jsx("p",{role:"status",className:"rounded-lg border border-[var(--status-danger-border)] bg-[var(--status-danger-bg)] px-3 py-2 type-ui text-[var(--status-danger-fg)]",children:d.data.settings.message}),e.jsxs("label",{className:"block",children:[e.jsx("span",{className:"mb-1.5 block type-ui font-medium text-[var(--subtle-fg)]",children:"工作区绝对路径"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{"aria-label":"托管工作区绝对路径",value:o,readOnly:d.data.settings.locked,onChange:l=>v(l.target.value),className:L("h-9 min-w-0 flex-1 rounded-lg border border-[var(--control-border)] px-3 font-mono type-ui outline-none",d.data.settings.locked?"cursor-default bg-[var(--inset)] text-[var(--dim-fg)]":"bg-[var(--control)] text-[var(--fg)] focus:border-[var(--accent)]/55")}),e.jsxs(D,{onClick:()=>{y()},disabled:d.data.settings.locked||i||!o.trim()||o.trim()===d.data.settings.rootPath,children:[i?e.jsx(V,{className:"size-3.5 animate-spin motion-reduce:animate-none"}):e.jsx(Ce,{className:"size-3.5"}),i?"保存中…":"保存"]})]}),e.jsx("span",{className:"mt-2 block type-meta leading-5 text-[var(--dim-fg)]",children:"只有尚未创建任何托管应用时才能修改。已有根目录丢失后 Host 会明确报错,不会静默创建一个空工作区。"})]})]})]}),e.jsxs(B,{title:"目录边界",description:"Runtime、依赖与构建环境由 Host 管理,不进入每个应用目录。",children:[e.jsx(_,{title:"应用源码",description:"每个应用拥有独立目录和 WorkspaceGrant,模型不能跨应用访问。",children:e.jsx(S,{tone:"success",children:"逐应用隔离"})}),e.jsx(_,{title:"外部代码库",description:"仍可从应用高级菜单打开;原目录不会移动或复制。",children:e.jsx(S,{children:"高级入口"})})]})]})})}const Ne=[{id:"workspace",label:"托管工作区",description:"应用根目录与可用状态",icon:$t},{id:"appearance",label:"外观",description:"主题与工作台布局",icon:At},{id:"providers",label:"模型 Provider",description:"连接、鉴权与模型目录",icon:Dt},{id:"agent",label:"Agent",description:"上下文、工具和压缩",icon:Je},{id:"security",label:"安全",description:"本地连接与审批策略",icon:Pt}];function ys(){const[t,s]=h.useState("providers"),a=f(o=>o.theme),n=f(o=>o.setTheme);return e.jsxs("div",{className:"flex min-h-0 flex-1 bg-[var(--workspace)]",children:[e.jsxs("aside",{className:"w-[250px] shrink-0 border-r border-[var(--border)] bg-[var(--panel)] p-3",children:[e.jsxs("div",{className:"px-2 pb-4 pt-2",children:[e.jsx("h1",{className:"text-[14px] font-semibold text-[var(--fg)]",children:"设置"}),e.jsx("p",{className:"mt-1 type-meta text-[var(--dim-fg)]",children:"Locode Mini · 本地配置"})]}),e.jsx("nav",{className:"space-y-1",children:Ne.map(o=>{const v=o.icon;return e.jsxs("button",{type:"button",onClick:()=>s(o.id),className:L("flex w-full items-center gap-3 rounded-xl px-3 py-2.5 text-left transition hover:bg-[var(--hover)]",t===o.id&&"bg-[var(--selected)]"),children:[e.jsx("span",{className:L("flex size-7 items-center justify-center rounded-lg bg-[var(--control)] text-[var(--muted-fg)]",t===o.id&&"bg-[var(--accent)]/12 text-[var(--accent-soft)]"),children:e.jsx(v,{className:"size-3.5"})}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block type-ui font-medium text-[var(--subtle-fg)]",children:o.label}),e.jsx("span",{className:"mt-0.5 block truncate type-meta text-[var(--dim-fg)]",children:o.description})]}),e.jsx(Xe,{className:"size-3 text-[var(--dim-fg)]"})]},o.id)})})]}),e.jsx("div",{className:"min-w-0 flex-1 overflow-y-auto p-6",children:e.jsxs("div",{className:"mx-auto max-w-[800px]",children:[e.jsxs("div",{className:"mb-5",children:[e.jsx("h2",{className:"text-[17px] font-semibold text-[var(--fg)]",children:Ne.find(o=>o.id===t)?.label}),e.jsx("p",{className:"mt-1 type-meta text-[var(--dim-fg)]",children:Ne.find(o=>o.id===t)?.description})]}),e.jsx(gs,{visible:t==="workspace"}),t==="appearance"&&e.jsxs("div",{className:"space-y-3",children:[e.jsx(B,{title:"界面主题",description:"主题和面板折叠状态只保存在当前浏览器。",children:e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("button",{type:"button",onClick:()=>n("dark"),className:L("rounded-xl border p-3 text-left",a==="dark"?"border-[var(--accent)] bg-[var(--accent)]/[.06]":"border-[var(--border)]"),children:[e.jsxs("div",{className:"mb-3 h-20 rounded-lg border border-slate-700 bg-[#0b0f18] p-2",children:[e.jsx("div",{className:"h-2 w-1/2 rounded bg-slate-700"}),e.jsx("div",{className:"mt-2 h-10 rounded bg-slate-800"})]}),e.jsxs("span",{className:"flex items-center gap-2 type-ui text-[var(--subtle-fg)]",children:[e.jsx(Ot,{className:"size-3.5"}),"深色",a==="dark"&&e.jsx(ke,{className:"ml-auto size-3.5 text-[var(--accent-soft)]"})]})]}),e.jsxs("button",{type:"button",onClick:()=>n("light"),className:L("rounded-xl border p-3 text-left",a==="light"?"border-[var(--accent)] bg-[var(--accent)]/[.06]":"border-[var(--border)]"),children:[e.jsxs("div",{className:"mb-3 h-20 rounded-lg border border-slate-200 bg-white p-2",children:[e.jsx("div",{className:"h-2 w-1/2 rounded bg-slate-200"}),e.jsx("div",{className:"mt-2 h-10 rounded bg-slate-100"})]}),e.jsxs("span",{className:"flex items-center gap-2 type-ui text-[var(--subtle-fg)]",children:[e.jsx(Tt,{className:"size-3.5"}),"浅色",a==="light"&&e.jsx(ke,{className:"ml-auto size-3.5 text-[var(--accent-soft)]"})]})]})]})}),e.jsx(B,{title:"布局",description:"应用与对话栏固定为 224px,文件栏固定为 288px;标题区和顶部工具栏均可折叠或展开,折叠状态会自动保存。",children:e.jsx(_,{title:"Monaco 小地图",description:"只读文件查看器默认关闭小地图。",children:e.jsx(pe,{checked:!1,onChange:()=>{}})})})]}),e.jsx(xs,{visible:t==="providers"}),t==="agent"&&e.jsxs("div",{className:"space-y-3",children:[e.jsx(vs,{}),e.jsxs(B,{title:"上下文管理",description:"预算按 Turn 冻结的具体模型限制计算。",children:[e.jsx(_,{title:"自动压缩",description:"达到模型可用输入预算阈值时,于 Turn 边界生成结构化摘要。",children:e.jsx(pe,{checked:!0,onChange:()=>{}})}),e.jsx(_,{title:"原始历史",description:"压缩只追加新记录,永不覆盖原始会话事件。",children:e.jsx(S,{tone:"success",children:"始终保留"})})]}),e.jsxs(B,{title:"工具执行",children:[e.jsx(_,{title:"工具轮次",description:"不设置固定轮次上限;仅在连续无进展或相同失败重复时停止。",children:e.jsx(S,{tone:"success",children:"无固定上限"})}),e.jsx(_,{title:"只读工具并行度",description:"没有副作用的读取与搜索可以并行运行。",children:e.jsx(S,{children:"4"})})]})]}),t==="security"&&e.jsxs("div",{className:"space-y-3",children:[e.jsxs(B,{title:"本地连接",children:[e.jsx(_,{title:"监听地址",description:"Host 只绑定回环地址,不对局域网开放。",children:e.jsx("code",{className:"rounded bg-[var(--inset)] px-2 py-1 type-meta text-[var(--subtle-fg)]",children:"127.0.0.1"})}),e.jsx(_,{title:"浏览器认证",description:"一次性 URL fragment 换取 HttpOnly、SameSite=Strict Cookie。",children:e.jsxs(S,{tone:"success",children:[e.jsx(Rt,{className:"mr-1 size-2.5"}),"已启用"]})})]}),e.jsxs(B,{title:"默认审批策略",children:[e.jsx(_,{title:"文件写入与移动",description:"始终显示变更预览并要求审批。",children:e.jsx(S,{tone:"warning",children:"每次询问"})}),e.jsx(_,{title:"命令执行",description:"PowerShell、脚本、构建、测试和未知命令都需审批。",children:e.jsx(S,{tone:"warning",children:"每次询问"})}),e.jsx(_,{title:"路径边界",description:"所有文件能力只能通过项目 WorkspaceGrant。",children:e.jsx(S,{tone:"success",children:"强制"})})]})]})]})})]})}export{ys as SettingsView};
@@ -0,0 +1 @@
1
+ const e={comments:{lineComment:"*"},brackets:[["[","]"],["(",")"]]},t={defaultToken:"invalid",ignoreCase:!0,tokenPostfix:".abap",keywords:["abap-source","abbreviated","abstract","accept","accepting","according","activation","actual","add","add-corresponding","adjacent","after","alias","aliases","align","all","allocate","alpha","analysis","analyzer","and","append","appendage","appending","application","archive","area","arithmetic","as","ascending","aspect","assert","assign","assigned","assigning","association","asynchronous","at","attributes","authority","authority-check","avg","back","background","backup","backward","badi","base","before","begin","between","big","binary","bintohex","bit","black","blank","blanks","blob","block","blocks","blue","bound","boundaries","bounds","boxed","break-point","buffer","by","bypassing","byte","byte-order","call","calling","case","cast","casting","catch","center","centered","chain","chain-input","chain-request","change","changing","channels","character","char-to-hex","check","checkbox","ci_","circular","class","class-coding","class-data","class-events","class-methods","class-pool","cleanup","clear","client","clob","clock","close","coalesce","code","coding","col_background","col_group","col_heading","col_key","col_negative","col_normal","col_positive","col_total","collect","color","column","columns","comment","comments","commit","common","communication","comparing","component","components","compression","compute","concat","concat_with_space","concatenate","cond","condense","condition","connect","connection","constants","context","contexts","continue","control","controls","conv","conversion","convert","copies","copy","corresponding","country","cover","cpi","create","creating","critical","currency","currency_conversion","current","cursor","cursor-selection","customer","customer-function","dangerous","data","database","datainfo","dataset","date","dats_add_days","dats_add_months","dats_days_between","dats_is_valid","daylight","dd/mm/yy","dd/mm/yyyy","ddmmyy","deallocate","decimal_shift","decimals","declarations","deep","default","deferred","define","defining","definition","delete","deleting","demand","department","descending","describe","destination","detail","dialog","directory","disconnect","display","display-mode","distinct","divide","divide-corresponding","division","do","dummy","duplicate","duplicates","duration","during","dynamic","dynpro","edit","editor-call","else","elseif","empty","enabled","enabling","encoding","end","endat","endcase","endcatch","endchain","endclass","enddo","endenhancement","end-enhancement-section","endexec","endform","endfunction","endian","endif","ending","endinterface","end-lines","endloop","endmethod","endmodule","end-of-definition","end-of-editing","end-of-file","end-of-page","end-of-selection","endon","endprovide","endselect","end-test-injection","end-test-seam","endtry","endwhile","endwith","engineering","enhancement","enhancement-point","enhancements","enhancement-section","entries","entry","enum","environment","equiv","errormessage","errors","escaping","event","events","exact","except","exception","exceptions","exception-table","exclude","excluding","exec","execute","exists","exit","exit-command","expand","expanding","expiration","explicit","exponent","export","exporting","extend","extended","extension","extract","fail","fetch","field","field-groups","fields","field-symbol","field-symbols","file","filter","filters","filter-table","final","find","first","first-line","fixed-point","fkeq","fkge","flush","font","for","form","format","forward","found","frame","frames","free","friends","from","function","functionality","function-pool","further","gaps","generate","get","giving","gkeq","gkge","global","grant","green","group","groups","handle","handler","harmless","hashed","having","hdb","header","headers","heading","head-lines","help-id","help-request","hextobin","hide","high","hint","hold","hotspot","icon","id","identification","identifier","ids","if","ignore","ignoring","immediately","implementation","implementations","implemented","implicit","import","importing","in","inactive","incl","include","includes","including","increment","index","index-line","infotypes","inheriting","init","initial","initialization","inner","inout","input","insert","instance","instances","instr","intensified","interface","interface-pool","interfaces","internal","intervals","into","inverse","inverted-date","is","iso","job","join","keep","keeping","kernel","key","keys","keywords","kind","language","last","late","layout","leading","leave","left","left-justified","leftplus","leftspace","legacy","length","let","level","levels","like","line","lines","line-count","linefeed","line-selection","line-size","list","listbox","list-processing","little","llang","load","load-of-program","lob","local","locale","locator","logfile","logical","log-point","long","loop","low","lower","lpad","lpi","ltrim","mail","main","major-id","mapping","margin","mark","mask","match","matchcode","max","maximum","medium","members","memory","mesh","message","message-id","messages","messaging","method","methods","min","minimum","minor-id","mm/dd/yy","mm/dd/yyyy","mmddyy","mode","modif","modifier","modify","module","move","move-corresponding","multiply","multiply-corresponding","name","nametab","native","nested","nesting","new","new-line","new-page","new-section","next","no","no-display","no-extension","no-gap","no-gaps","no-grouping","no-heading","no-scrolling","no-sign","no-title","no-topofpage","no-zero","node","nodes","non-unicode","non-unique","not","null","number","object","objects","obligatory","occurrence","occurrences","occurs","of","off","offset","ole","on","only","open","option","optional","options","or","order","other","others","out","outer","output","output-length","overflow","overlay","pack","package","pad","padding","page","pages","parameter","parameters","parameter-table","part","partially","pattern","percentage","perform","performing","person","pf1","pf10","pf11","pf12","pf13","pf14","pf15","pf2","pf3","pf4","pf5","pf6","pf7","pf8","pf9","pf-status","pink","places","pool","pos_high","pos_low","position","pragmas","precompiled","preferred","preserving","primary","print","print-control","priority","private","procedure","process","program","property","protected","provide","public","push","pushbutton","put","queue-only","quickinfo","radiobutton","raise","raising","range","ranges","read","reader","read-only","receive","received","receiver","receiving","red","redefinition","reduce","reduced","ref","reference","refresh","regex","reject","remote","renaming","replace","replacement","replacing","report","request","requested","reserve","reset","resolution","respecting","responsible","result","results","resumable","resume","retry","return","returncode","returning","returns","right","right-justified","rightplus","rightspace","risk","rmc_communication_failure","rmc_invalid_status","rmc_system_failure","role","rollback","rows","rpad","rtrim","run","sap","sap-spool","saving","scale_preserving","scale_preserving_scientific","scan","scientific","scientific_with_leading_zero","scroll","scroll-boundary","scrolling","search","secondary","seconds","section","select","selection","selections","selection-screen","selection-set","selection-sets","selection-table","select-options","send","separate","separated","set","shared","shift","short","shortdump-id","sign_as_postfix","single","size","skip","skipping","smart","some","sort","sortable","sorted","source","specified","split","spool","spots","sql","sqlscript","stable","stamp","standard","starting","start-of-editing","start-of-selection","state","statement","statements","static","statics","statusinfo","step-loop","stop","structure","structures","style","subkey","submatches","submit","subroutine","subscreen","subtract","subtract-corresponding","suffix","sum","summary","summing","supplied","supply","suppress","switch","switchstates","symbol","syncpoints","syntax","syntax-check","syntax-trace","system-call","system-exceptions","system-exit","tab","tabbed","table","tables","tableview","tabstrip","target","task","tasks","test","testing","test-injection","test-seam","text","textpool","then","throw","time","times","timestamp","timezone","tims_is_valid","title","titlebar","title-lines","to","tokenization","tokens","top-lines","top-of-page","trace-file","trace-table","trailing","transaction","transfer","transformation","translate","transporting","trmac","truncate","truncation","try","tstmp_add_seconds","tstmp_current_utctimestamp","tstmp_is_valid","tstmp_seconds_between","type","type-pool","type-pools","types","uline","unassign","under","unicode","union","unique","unit_conversion","unix","unpack","until","unwind","up","update","upper","user","user-command","using","utf-8","valid","value","value-request","values","vary","varying","verification-message","version","via","view","visible","wait","warning","when","whenever","where","while","width","window","windows","with","with-heading","without","with-title","word","work","write","writer","xml","xsd","yellow","yes","yymmdd","zero","zone","abap_system_timezone","abap_user_timezone","access","action","adabas","adjust_numbers","allow_precision_loss","allowed","amdp","applicationuser","as_geo_json","as400","associations","balance","behavior","breakup","bulk","cds","cds_client","check_before_save","child","clients","corr","corr_spearman","cross","cycles","datn_add_days","datn_add_months","datn_days_between","dats_from_datn","dats_tims_to_tstmp","dats_to_datn","db2","db6","ddl","dense_rank","depth","deterministic","discarding","entities","entity","error","failed","finalize","first_value","fltp_to_dec","following","fractional","full","graph","grouping","hierarchy","hierarchy_ancestors","hierarchy_ancestors_aggregate","hierarchy_descendants","hierarchy_descendants_aggregate","hierarchy_siblings","incremental","indicators","lag","last_value","lead","leaves","like_regexpr","link","locale_sap","lock","locks","many","mapped","matched","measures","median","mssqlnt","multiple","nodetype","ntile","nulls","occurrences_regexpr","one","operations","oracle","orphans","over","parent","parents","partition","pcre","period","pfcg_mapping","preceding","privileged","product","projection","rank","redirected","replace_regexpr","reported","response","responses","root","row","row_number","sap_system_date","save","schema","session","sets","shortdump","siblings","spantree","start","stddev","string_agg","subtotal","sybase","tims_from_timn","tims_to_timn","to_blob","to_clob","total","trace-entry","tstmp_to_dats","tstmp_to_dst","tstmp_to_tims","tstmpl_from_utcl","tstmpl_to_utcl","unbounded","utcl_add_seconds","utcl_current","utcl_seconds_between","uuid","var","verbatim"],builtinFunctions:["abs","acos","asin","atan","bit-set","boolc","boolx","ceil","char_off","charlen","cmax","cmin","concat_lines_of","contains","contains_any_not_of","contains_any_of","cos","cosh","count","count_any_not_of","count_any_of","dbmaxlen","distance","escape","exp","find_any_not_of","find_any_of","find_end","floor","frac","from_mixed","ipow","line_exists","line_index","log","log10","matches","nmax","nmin","numofchar","repeat","rescale","reverse","round","segment","shift_left","shift_right","sign","sin","sinh","sqrt","strlen","substring","substring_after","substring_before","substring_from","substring_to","tan","tanh","to_lower","to_mixed","to_upper","trunc","utclong_add","utclong_current","utclong_diff","xsdbool","xstrlen"],typeKeywords:["b","c","d","decfloat16","decfloat34","f","i","int8","n","p","s","string","t","utclong","x","xstring","any","clike","csequence","decfloat","numeric","simple","xsequence","accp","char","clnt","cuky","curr","datn","dats","d16d","d16n","d16r","d34d","d34n","d34r","dec","df16_dec","df16_raw","df34_dec","df34_raw","fltp","geom_ewkb","int1","int2","int4","lang","lchr","lraw","numc","quan","raw","rawstring","sstring","timn","tims","unit","utcl","df16_scl","df34_scl","prec","varc","abap_bool","abap_false","abap_true","abap_undefined","me","screen","space","super","sy","syst","table_line","*sys*"],builtinMethods:["class_constructor","constructor"],derivedTypes:["%CID","%CID_REF","%CONTROL","%DATA","%ELEMENT","%FAIL","%KEY","%MSG","%PARAM","%PID","%PID_ASSOC","%PID_PARENT","%_HINTS"],cdsLanguage:["@AbapAnnotation","@AbapCatalog","@AccessControl","@API","@ClientDependent","@ClientHandling","@CompatibilityContract","@DataAging","@EndUserText","@Environment","@LanguageDependency","@MappingRole","@Metadata","@MetadataExtension","@ObjectModel","@Scope","@Semantics","$EXTENSION","$SELF"],selectors:["->","->*","=>","~","~*"],operators:[" +"," -","/","*","**","div","mod","=","#","@","+=","-=","*=","/=","**=","&&=","?=","&","&&","bit-and","bit-not","bit-or","bit-xor","m","o","z","<"," >","<=",">=","<>","><","=<","=>","bt","byte-ca","byte-cn","byte-co","byte-cs","byte-na","byte-ns","ca","cn","co","cp","cs","eq","ge","gt","le","lt","na","nb","ne","np","ns","*/","*:","--","/*","//"],symbols:/[=><!~?&+\-*\/\^%#@]+/,tokenizer:{root:[[/[a-z_\/$%@]([\w\/$%]|-(?!>))*/,{cases:{"@typeKeywords":"type","@keywords":"keyword","@cdsLanguage":"annotation","@derivedTypes":"type","@builtinFunctions":"type","@builtinMethods":"type","@operators":"key","@default":"identifier"}}],[/<[\w]+>/,"identifier"],[/##[\w|_]+/,"comment"],{include:"@whitespace"},[/[:,.]/,"delimiter"],[/[{}()\[\]]/,"@brackets"],[/@symbols/,{cases:{"@selectors":"tag","@operators":"key","@default":""}}],[/'/,{token:"string",bracket:"@open",next:"@stringquote"}],[/`/,{token:"string",bracket:"@open",next:"@stringping"}],[/\|/,{token:"string",bracket:"@open",next:"@stringtemplate"}],[/\d+/,"number"]],stringtemplate:[[/[^\\\|]+/,"string"],[/\\\|/,"string"],[/\|/,{token:"string",bracket:"@close",next:"@pop"}]],stringping:[[/[^\\`]+/,"string"],[/`/,{token:"string",bracket:"@close",next:"@pop"}]],stringquote:[[/[^\\']+/,"string"],[/'/,{token:"string",bracket:"@close",next:"@pop"}]],whitespace:[[/[ \t\r\n]+/,""],[/^\*.*$/,"comment"],[/\".*$/,"comment"]]}};export{e as conf,t as language};
@@ -0,0 +1 @@
1
+ const n={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"},{open:"<",close:">"}],folding:{markers:{start:new RegExp("^\\s*//\\s*(?:(?:#?region\\b)|(?:<editor-fold\\b))"),end:new RegExp("^\\s*//\\s*(?:(?:#?endregion\\b)|(?:</editor-fold>))")}}},s=["abstract","activate","and","any","array","as","asc","assert","autonomous","begin","bigdecimal","blob","boolean","break","bulk","by","case","cast","catch","char","class","collect","commit","const","continue","convertcurrency","decimal","default","delete","desc","do","double","else","end","enum","exception","exit","export","extends","false","final","finally","float","for","from","future","get","global","goto","group","having","hint","if","implements","import","in","inner","insert","instanceof","int","interface","into","join","last_90_days","last_month","last_n_days","last_week","like","limit","list","long","loop","map","merge","native","new","next_90_days","next_month","next_n_days","next_week","not","null","nulls","number","object","of","on","or","outer","override","package","parallel","pragma","private","protected","public","retrieve","return","returning","rollback","savepoint","search","select","set","short","sort","stat","static","strictfp","super","switch","synchronized","system","testmethod","then","this","this_month","this_week","throw","throws","today","tolabel","tomorrow","transaction","transient","trigger","true","try","type","undelete","update","upsert","using","virtual","void","volatile","webservice","when","where","while","yesterday"],o=e=>e.charAt(0).toUpperCase()+e.substr(1);let t=[];s.forEach(e=>{t.push(e),t.push(e.toUpperCase()),t.push(o(e))});const i={defaultToken:"",tokenPostfix:".apex",keywords:t,operators:["=",">","<","!","~","?",":","==","<=",">=","!=","&&","||","++","--","+","-","*","/","&","|","^","%","<<",">>",">>>","+=","-=","*=","/=","&=","|=","^=","%=","<<=",">>=",">>>="],symbols:/[=><!~?:&|+\-*\/\^%]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,digits:/\d+(_+\d+)*/,octaldigits:/[0-7]+(_+[0-7]+)*/,binarydigits:/[0-1]+(_+[0-1]+)*/,hexdigits:/[[0-9a-fA-F]+(_+[0-9a-fA-F]+)*/,tokenizer:{root:[[/[a-z_$][\w$]*/,{cases:{"@keywords":{token:"keyword.$0"},"@default":"identifier"}}],[/[A-Z][\w\$]*/,{cases:{"@keywords":{token:"keyword.$0"},"@default":"type.identifier"}}],{include:"@whitespace"},[/[{}()\[\]]/,"@brackets"],[/[<>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/@\s*[a-zA-Z_\$][\w\$]*/,"annotation"],[/(@digits)[eE]([\-+]?(@digits))?[fFdD]?/,"number.float"],[/(@digits)\.(@digits)([eE][\-+]?(@digits))?[fFdD]?/,"number.float"],[/(@digits)[fFdD]/,"number.float"],[/(@digits)[lL]?/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/"/,"string",'@string."'],[/'/,"string","@string.'"],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@apexdoc"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],apexdoc:[[/[^\/*]+/,"comment.doc"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],string:[[/[^\\"']+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/["']/,{cases:{"$#==$S2":{token:"string",next:"@pop"},"@default":"string"}}]]}};export{n as conf,i as language};
@@ -0,0 +1 @@
1
+ const e={comments:{lineComment:"#"}},t={defaultToken:"keyword",ignoreCase:!0,tokenPostfix:".azcli",str:/[^#\s]/,tokenizer:{root:[{include:"@comment"},[/\s-+@str*\s*/,{cases:{"@eos":{token:"key.identifier",next:"@popall"},"@default":{token:"key.identifier",next:"@type"}}}],[/^-+@str*\s*/,{cases:{"@eos":{token:"key.identifier",next:"@popall"},"@default":{token:"key.identifier",next:"@type"}}}]],type:[{include:"@comment"},[/-+@str*\s*/,{cases:{"@eos":{token:"key.identifier",next:"@popall"},"@default":"key.identifier"}}],[/@str+\s*/,{cases:{"@eos":{token:"string",next:"@popall"},"@default":"string"}}]],comment:[[/#.*$/,{cases:{"@eos":{token:"comment",next:"@popall"}}}]]}};export{e as conf,t as language};
@@ -0,0 +1 @@
1
+ const e={comments:{lineComment:"REM"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}],surroundingPairs:[{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}],folding:{markers:{start:new RegExp("^\\s*(::\\s*|REM\\s+)#region"),end:new RegExp("^\\s*(::\\s*|REM\\s+)#endregion")}}},s={defaultToken:"",ignoreCase:!0,tokenPostfix:".bat",brackets:[{token:"delimiter.bracket",open:"{",close:"}"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"delimiter.square",open:"[",close:"]"}],keywords:/call|defined|echo|errorlevel|exist|for|goto|if|pause|set|shift|start|title|not|pushd|popd/,symbols:/[=><!~?&|+\-*\/\^;\.,]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[[/^(\s*)(rem(?:\s.*|))$/,["","comment"]],[/(\@?)(@keywords)(?!\w)/,[{token:"keyword"},{token:"keyword.$2"}]],[/[ \t\r\n]+/,""],[/setlocal(?!\w)/,"keyword.tag-setlocal"],[/endlocal(?!\w)/,"keyword.tag-setlocal"],[/[a-zA-Z_]\w*/,""],[/:\w*/,"metatag"],[/%[^%]+%/,"variable"],[/%%[\w]+(?!\w)/,"variable"],[/[{}()\[\]]/,"@brackets"],[/@symbols/,"delimiter"],[/\d*\.\d+([eE][\-+]?\d+)?/,"number.float"],[/0[xX][0-9a-fA-F_]*[0-9a-fA-F]/,"number.hex"],[/\d+/,"number"],[/[;,.]/,"delimiter"],[/"/,"string",'@string."'],[/'/,"string","@string.'"]],string:[[/[^\\"'%]+/,{cases:{"@eos":{token:"string",next:"@popall"},"@default":"string"}}],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/%[\w ]+%/,"variable"],[/%%[\w]+(?!\w)/,"variable"],[/["']/,{cases:{"$#==$S2":{token:"string",next:"@pop"},"@default":"string"}}],[/$/,"string","@popall"]]}};export{e as conf,s as language};
@@ -0,0 +1,2 @@
1
+ const n=e=>`\\b${e}\\b`,t="[_a-zA-Z]",o="[_a-zA-Z0-9]",i=n(`${t}${o}*`),r=["targetScope","resource","module","param","var","output","for","in","if","existing"],s=["true","false","null"],c="[ \\t\\r\\n]",a="[0-9]+",g={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"'",close:"'"},{open:"'''",close:"'''"}],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"'",close:"'",notIn:["string","comment"]},{open:"'''",close:"'''",notIn:["string","comment"]}],autoCloseBefore:`:.,=}])'
2
+ `,indentationRules:{increaseIndentPattern:new RegExp("^((?!\\/\\/).)*(\\{[^}\"'`]*|\\([^)\"'`]*|\\[[^\\]\"'`]*)$"),decreaseIndentPattern:new RegExp("^((?!.*?\\/\\*).*\\*/)?\\s*[\\}\\]].*$")}},l={defaultToken:"",tokenPostfix:".bicep",brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"}],symbols:/[=><!~?:&|+\-*/^%]+/,keywords:r,namedLiterals:s,escapes:"\\\\(u{[0-9A-Fa-f]+}|n|r|t|\\\\|'|\\${)",tokenizer:{root:[{include:"@expression"},{include:"@whitespace"}],stringVerbatim:[{regex:"(|'|'')[^']",action:{token:"string"}},{regex:"'''",action:{token:"string.quote",next:"@pop"}}],stringLiteral:[{regex:"\\${",action:{token:"delimiter.bracket",next:"@bracketCounting"}},{regex:"[^\\\\'$]+",action:{token:"string"}},{regex:"@escapes",action:{token:"string.escape"}},{regex:"\\\\.",action:{token:"string.escape.invalid"}},{regex:"'",action:{token:"string",next:"@pop"}}],bracketCounting:[{regex:"{",action:{token:"delimiter.bracket",next:"@bracketCounting"}},{regex:"}",action:{token:"delimiter.bracket",next:"@pop"}},{include:"expression"}],comment:[{regex:"[^\\*]+",action:{token:"comment"}},{regex:"\\*\\/",action:{token:"comment",next:"@pop"}},{regex:"[\\/*]",action:{token:"comment"}}],whitespace:[{regex:c},{regex:"\\/\\*",action:{token:"comment",next:"@comment"}},{regex:"\\/\\/.*$",action:{token:"comment"}}],expression:[{regex:"'''",action:{token:"string.quote",next:"@stringVerbatim"}},{regex:"'",action:{token:"string.quote",next:"@stringLiteral"}},{regex:a,action:{token:"number"}},{regex:i,action:{cases:{"@keywords":{token:"keyword"},"@namedLiterals":{token:"keyword"},"@default":{token:"identifier"}}}}]}};export{g as conf,l as language};
@@ -0,0 +1 @@
1
+ const e={comments:{lineComment:"//",blockComment:["(*","*)"]},brackets:[["{","}"],["[","]"],["(",")"],["<",">"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:"'",close:"'"},{open:'"',close:'"'},{open:"(*",close:"*)"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:"'",close:"'"},{open:'"',close:'"'},{open:"(*",close:"*)"}]},o={defaultToken:"",tokenPostfix:".cameligo",ignoreCase:!0,brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],keywords:["abs","assert","block","Bytes","case","Crypto","Current","else","failwith","false","for","fun","if","in","let","let%entry","let%init","List","list","Map","map","match","match%nat","mod","not","operation","Operation","of","record","Set","set","sender","skip","source","String","then","to","true","type","with"],typeKeywords:["int","unit","string","tz","nat","bool"],operators:["=",">","<","<=",">=","<>",":",":=","and","mod","or","+","-","*","/","@","&","^","%","->","<-","&&","||"],symbols:/[=><:@\^&|+\-*\/\^%]+/,tokenizer:{root:[[/[a-zA-Z_][\w]*/,{cases:{"@keywords":{token:"keyword.$0"},"@default":"identifier"}}],{include:"@whitespace"},[/[{}()\[\]]/,"@brackets"],[/[<>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/\d*\.\d+([eE][\-+]?\d+)?/,"number.float"],[/\$[0-9a-fA-F]{1,16}/,"number.hex"],[/\d+/,"number"],[/[;,.]/,"delimiter"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/'/,"string","@string"],[/'[^\\']'/,"string"],[/'/,"string.invalid"],[/\#\d+/,"string"]],comment:[[/[^\(\*]+/,"comment"],[/\*\)/,"comment","@pop"],[/\(\*/,"comment"]],string:[[/[^\\']+/,"string"],[/\\./,"string.escape.invalid"],[/'/,{token:"string.quote",bracket:"@close",next:"@pop"}]],whitespace:[[/[ \t\r\n]+/,"white"],[/\(\*/,"comment","@comment"],[/\/\/.*$/,"comment"]]}};export{e as conf,o as language};
@@ -0,0 +1 @@
1
+ const e={comments:{lineComment:";;"},brackets:[["[","]"],["(",")"],["{","}"]],autoClosingPairs:[{open:"[",close:"]"},{open:'"',close:'"'},{open:"(",close:")"},{open:"{",close:"}"}],surroundingPairs:[{open:"[",close:"]"},{open:'"',close:'"'},{open:"(",close:")"},{open:"{",close:"}"}]},t={defaultToken:"",ignoreCase:!0,tokenPostfix:".clj",brackets:[{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"{",close:"}",token:"delimiter.curly"}],constants:["true","false","nil"],numbers:/^(?:[+\-]?\d+(?:(?:N|(?:[eE][+\-]?\d+))|(?:\.?\d*(?:M|(?:[eE][+\-]?\d+))?)|\/\d+|[xX][0-9a-fA-F]+|r[0-9a-zA-Z]+)?(?=[\\\[\]\s"#'(),;@^`{}~]|$))/,characters:/^(?:\\(?:backspace|formfeed|newline|return|space|tab|o[0-7]{3}|u[0-9A-Fa-f]{4}|x[0-9A-Fa-f]{4}|.)?(?=[\\\[\]\s"(),;@^`{}~]|$))/,escapes:/^\\(?:["'\\bfnrt]|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,qualifiedSymbols:/^(?:(?:[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*(?:\.[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*)*\/)?(?:\/|[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*)*(?=[\\\[\]\s"(),;@^`{}~]|$))/,specialForms:[".","catch","def","do","if","monitor-enter","monitor-exit","new","quote","recur","set!","throw","try","var"],coreSymbols:["*","*'","*1","*2","*3","*agent*","*allow-unresolved-vars*","*assert*","*clojure-version*","*command-line-args*","*compile-files*","*compile-path*","*compiler-options*","*data-readers*","*default-data-reader-fn*","*e","*err*","*file*","*flush-on-newline*","*fn-loader*","*in*","*math-context*","*ns*","*out*","*print-dup*","*print-length*","*print-level*","*print-meta*","*print-namespace-maps*","*print-readably*","*read-eval*","*reader-resolver*","*source-path*","*suppress-read*","*unchecked-math*","*use-context-classloader*","*verbose-defrecords*","*warn-on-reflection*","+","+'","-","-'","->","->>","->ArrayChunk","->Eduction","->Vec","->VecNode","->VecSeq","-cache-protocol-fn","-reset-methods","..","/","<","<=","=","==",">",">=","EMPTY-NODE","Inst","StackTraceElement->vec","Throwable->map","accessor","aclone","add-classpath","add-watch","agent","agent-error","agent-errors","aget","alength","alias","all-ns","alter","alter-meta!","alter-var-root","amap","ancestors","and","any?","apply","areduce","array-map","as->","aset","aset-boolean","aset-byte","aset-char","aset-double","aset-float","aset-int","aset-long","aset-short","assert","assoc","assoc!","assoc-in","associative?","atom","await","await-for","await1","bases","bean","bigdec","bigint","biginteger","binding","bit-and","bit-and-not","bit-clear","bit-flip","bit-not","bit-or","bit-set","bit-shift-left","bit-shift-right","bit-test","bit-xor","boolean","boolean-array","boolean?","booleans","bound-fn","bound-fn*","bound?","bounded-count","butlast","byte","byte-array","bytes","bytes?","case","cast","cat","char","char-array","char-escape-string","char-name-string","char?","chars","chunk","chunk-append","chunk-buffer","chunk-cons","chunk-first","chunk-next","chunk-rest","chunked-seq?","class","class?","clear-agent-errors","clojure-version","coll?","comment","commute","comp","comparator","compare","compare-and-set!","compile","complement","completing","concat","cond","cond->","cond->>","condp","conj","conj!","cons","constantly","construct-proxy","contains?","count","counted?","create-ns","create-struct","cycle","dec","dec'","decimal?","declare","dedupe","default-data-readers","definline","definterface","defmacro","defmethod","defmulti","defn","defn-","defonce","defprotocol","defrecord","defstruct","deftype","delay","delay?","deliver","denominator","deref","derive","descendants","destructure","disj","disj!","dissoc","dissoc!","distinct","distinct?","doall","dorun","doseq","dosync","dotimes","doto","double","double-array","double?","doubles","drop","drop-last","drop-while","eduction","empty","empty?","ensure","ensure-reduced","enumeration-seq","error-handler","error-mode","eval","even?","every-pred","every?","ex-data","ex-info","extend","extend-protocol","extend-type","extenders","extends?","false?","ffirst","file-seq","filter","filterv","find","find-keyword","find-ns","find-protocol-impl","find-protocol-method","find-var","first","flatten","float","float-array","float?","floats","flush","fn","fn?","fnext","fnil","for","force","format","frequencies","future","future-call","future-cancel","future-cancelled?","future-done?","future?","gen-class","gen-interface","gensym","get","get-in","get-method","get-proxy-class","get-thread-bindings","get-validator","group-by","halt-when","hash","hash-combine","hash-map","hash-ordered-coll","hash-set","hash-unordered-coll","ident?","identical?","identity","if-let","if-not","if-some","ifn?","import","in-ns","inc","inc'","indexed?","init-proxy","inst-ms","inst-ms*","inst?","instance?","int","int-array","int?","integer?","interleave","intern","interpose","into","into-array","ints","io!","isa?","iterate","iterator-seq","juxt","keep","keep-indexed","key","keys","keyword","keyword?","last","lazy-cat","lazy-seq","let","letfn","line-seq","list","list*","list?","load","load-file","load-reader","load-string","loaded-libs","locking","long","long-array","longs","loop","macroexpand","macroexpand-1","make-array","make-hierarchy","map","map-entry?","map-indexed","map?","mapcat","mapv","max","max-key","memfn","memoize","merge","merge-with","meta","method-sig","methods","min","min-key","mix-collection-hash","mod","munge","name","namespace","namespace-munge","nat-int?","neg-int?","neg?","newline","next","nfirst","nil?","nnext","not","not-any?","not-empty","not-every?","not=","ns","ns-aliases","ns-imports","ns-interns","ns-map","ns-name","ns-publics","ns-refers","ns-resolve","ns-unalias","ns-unmap","nth","nthnext","nthrest","num","number?","numerator","object-array","odd?","or","parents","partial","partition","partition-all","partition-by","pcalls","peek","persistent!","pmap","pop","pop!","pop-thread-bindings","pos-int?","pos?","pr","pr-str","prefer-method","prefers","primitives-classnames","print","print-ctor","print-dup","print-method","print-simple","print-str","printf","println","println-str","prn","prn-str","promise","proxy","proxy-call-with-super","proxy-mappings","proxy-name","proxy-super","push-thread-bindings","pvalues","qualified-ident?","qualified-keyword?","qualified-symbol?","quot","rand","rand-int","rand-nth","random-sample","range","ratio?","rational?","rationalize","re-find","re-groups","re-matcher","re-matches","re-pattern","re-seq","read","read-line","read-string","reader-conditional","reader-conditional?","realized?","record?","reduce","reduce-kv","reduced","reduced?","reductions","ref","ref-history-count","ref-max-history","ref-min-history","ref-set","refer","refer-clojure","reify","release-pending-sends","rem","remove","remove-all-methods","remove-method","remove-ns","remove-watch","repeat","repeatedly","replace","replicate","require","reset!","reset-meta!","reset-vals!","resolve","rest","restart-agent","resultset-seq","reverse","reversible?","rseq","rsubseq","run!","satisfies?","second","select-keys","send","send-off","send-via","seq","seq?","seqable?","seque","sequence","sequential?","set","set-agent-send-executor!","set-agent-send-off-executor!","set-error-handler!","set-error-mode!","set-validator!","set?","short","short-array","shorts","shuffle","shutdown-agents","simple-ident?","simple-keyword?","simple-symbol?","slurp","some","some->","some->>","some-fn","some?","sort","sort-by","sorted-map","sorted-map-by","sorted-set","sorted-set-by","sorted?","special-symbol?","spit","split-at","split-with","str","string?","struct","struct-map","subs","subseq","subvec","supers","swap!","swap-vals!","symbol","symbol?","sync","tagged-literal","tagged-literal?","take","take-last","take-nth","take-while","test","the-ns","thread-bound?","time","to-array","to-array-2d","trampoline","transduce","transient","tree-seq","true?","type","unchecked-add","unchecked-add-int","unchecked-byte","unchecked-char","unchecked-dec","unchecked-dec-int","unchecked-divide-int","unchecked-double","unchecked-float","unchecked-inc","unchecked-inc-int","unchecked-int","unchecked-long","unchecked-multiply","unchecked-multiply-int","unchecked-negate","unchecked-negate-int","unchecked-remainder-int","unchecked-short","unchecked-subtract","unchecked-subtract-int","underive","unquote","unquote-splicing","unreduced","unsigned-bit-shift-right","update","update-in","update-proxy","uri?","use","uuid?","val","vals","var-get","var-set","var?","vary-meta","vec","vector","vector-of","vector?","volatile!","volatile?","vreset!","vswap!","when","when-first","when-let","when-not","when-some","while","with-bindings","with-bindings*","with-in-str","with-loading-context","with-local-vars","with-meta","with-open","with-out-str","with-precision","with-redefs","with-redefs-fn","xml-seq","zero?","zipmap"],tokenizer:{root:[{include:"@whitespace"},[/@numbers/,"number"],[/@characters/,"string"],{include:"@string"},[/[()\[\]{}]/,"@brackets"],[/\/#"(?:\.|(?:")|[^"\n])*"\/g/,"regexp"],[/[#'@^`~]/,"meta"],[/@qualifiedSymbols/,{cases:{"^:.+$":"constant","@specialForms":"keyword","@coreSymbols":"keyword","@constants":"constant","@default":"identifier"}}]],whitespace:[[/[\s,]+/,"white"],[/;.*$/,"comment"],[/\(comment\b/,"comment","@comment"]],comment:[[/\(/,"comment","@push"],[/\)/,"comment","@pop"],[/[^()]/,"comment"]],string:[[/"/,"string","@multiLineString"]],multiLineString:[[/"/,"string","@popall"],[/@escapes/,"string.escape"],[/./,"string"]]}};export{e as conf,t as language};
@@ -0,0 +1 @@
1
+ const e={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\#%\^\&\*\(\)\=\$\-\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{blockComment:["###","###"],lineComment:"#"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{markers:{start:new RegExp("^\\s*#region\\b"),end:new RegExp("^\\s*#endregion\\b")}}},t={defaultToken:"",ignoreCase:!0,tokenPostfix:".coffee",brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"}],regEx:/\/(?!\/\/)(?:[^\/\\]|\\.)*\/[igm]*/,keywords:["and","or","is","isnt","not","on","yes","@","no","off","true","false","null","this","new","delete","typeof","in","instanceof","return","throw","break","continue","debugger","if","else","switch","for","while","do","try","catch","finally","class","extends","super","undefined","then","unless","until","loop","of","by","when"],symbols:/[=><!~?&%|+\-*\/\^\.,\:]+/,escapes:/\\(?:[abfnrtv\\"'$]|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[[/\@[a-zA-Z_]\w*/,"variable.predefined"],[/[a-zA-Z_]\w*/,{cases:{this:"variable.predefined","@keywords":{token:"keyword.$0"},"@default":""}}],[/[ \t\r\n]+/,""],[/###/,"comment","@comment"],[/#.*$/,"comment"],["///",{token:"regexp",next:"@hereregexp"}],[/^(\s*)(@regEx)/,["","regexp"]],[/(\()(\s*)(@regEx)/,["@brackets","","regexp"]],[/(\,)(\s*)(@regEx)/,["delimiter","","regexp"]],[/(\=)(\s*)(@regEx)/,["delimiter","","regexp"]],[/(\:)(\s*)(@regEx)/,["delimiter","","regexp"]],[/(\[)(\s*)(@regEx)/,["@brackets","","regexp"]],[/(\!)(\s*)(@regEx)/,["delimiter","","regexp"]],[/(\&)(\s*)(@regEx)/,["delimiter","","regexp"]],[/(\|)(\s*)(@regEx)/,["delimiter","","regexp"]],[/(\?)(\s*)(@regEx)/,["delimiter","","regexp"]],[/(\{)(\s*)(@regEx)/,["@brackets","","regexp"]],[/(\;)(\s*)(@regEx)/,["","","regexp"]],[/}/,{cases:{"$S2==interpolatedstring":{token:"string",next:"@pop"},"@default":"@brackets"}}],[/[{}()\[\]]/,"@brackets"],[/@symbols/,"delimiter"],[/\d+[eE]([\-+]?\d+)?/,"number.float"],[/\d+\.\d+([eE][\-+]?\d+)?/,"number.float"],[/0[xX][0-9a-fA-F]+/,"number.hex"],[/0[0-7]+(?!\d)/,"number.octal"],[/\d+/,"number"],[/[,.]/,"delimiter"],[/"""/,"string",'@herestring."""'],[/'''/,"string","@herestring.'''"],[/"/,{cases:{"@eos":"string","@default":{token:"string",next:'@string."'}}}],[/'/,{cases:{"@eos":"string","@default":{token:"string",next:"@string.'"}}}]],string:[[/[^"'\#\\]+/,"string"],[/@escapes/,"string.escape"],[/\./,"string.escape.invalid"],[/\./,"string.escape.invalid"],[/#{/,{cases:{'$S2=="':{token:"string",next:"root.interpolatedstring"},"@default":"string"}}],[/["']/,{cases:{"$#==$S2":{token:"string",next:"@pop"},"@default":"string"}}],[/#/,"string"]],herestring:[[/("""|''')/,{cases:{"$1==$S2":{token:"string",next:"@pop"},"@default":"string"}}],[/[^#\\'"]+/,"string"],[/['"]+/,"string"],[/@escapes/,"string.escape"],[/\./,"string.escape.invalid"],[/#{/,{token:"string.quote",next:"root.interpolatedstring"}],[/#/,"string"]],comment:[[/[^#]+/,"comment"],[/###/,"comment","@pop"],[/#/,"comment"]],hereregexp:[[/[^\\\/#]+/,"regexp"],[/\\./,"regexp"],[/#.*$/,"comment"],["///[igm]*",{token:"regexp",next:"@pop"}],[/\//,"regexp"]]}};export{e as conf,t as language};
@@ -0,0 +1 @@
1
+ const e={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"[",close:"]"},{open:"{",close:"}"},{open:"(",close:")"},{open:"'",close:"'",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{markers:{start:new RegExp("^\\s*#pragma\\s+region\\b"),end:new RegExp("^\\s*#pragma\\s+endregion\\b")}}},n={defaultToken:"",tokenPostfix:".cpp",brackets:[{token:"delimiter.curly",open:"{",close:"}"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"delimiter.square",open:"[",close:"]"},{token:"delimiter.angle",open:"<",close:">"}],keywords:["abstract","amp","array","auto","bool","break","case","catch","char","class","const","constexpr","const_cast","continue","cpu","decltype","default","delegate","delete","do","double","dynamic_cast","each","else","enum","event","explicit","export","extern","false","final","finally","float","for","friend","gcnew","generic","goto","if","in","initonly","inline","int","interface","interior_ptr","internal","literal","long","mutable","namespace","new","noexcept","nullptr","__nullptr","operator","override","partial","pascal","pin_ptr","private","property","protected","public","ref","register","reinterpret_cast","restrict","return","safe_cast","sealed","short","signed","sizeof","static","static_assert","static_cast","struct","switch","template","this","thread_local","throw","tile_static","true","try","typedef","typeid","typename","union","unsigned","using","virtual","void","volatile","wchar_t","where","while","_asm","_based","_cdecl","_declspec","_fastcall","_if_exists","_if_not_exists","_inline","_multiple_inheritance","_pascal","_single_inheritance","_stdcall","_virtual_inheritance","_w64","__abstract","__alignof","__asm","__assume","__based","__box","__builtin_alignof","__cdecl","__clrcall","__declspec","__delegate","__event","__except","__fastcall","__finally","__forceinline","__gc","__hook","__identifier","__if_exists","__if_not_exists","__inline","__int128","__int16","__int32","__int64","__int8","__interface","__leave","__m128","__m128d","__m128i","__m256","__m256d","__m256i","__m512","__m512d","__m512i","__m64","__multiple_inheritance","__newslot","__nogc","__noop","__nounwind","__novtordisp","__pascal","__pin","__pragma","__property","__ptr32","__ptr64","__raise","__restrict","__resume","__sealed","__single_inheritance","__stdcall","__super","__thiscall","__try","__try_cast","__typeof","__unaligned","__unhook","__uuidof","__value","__virtual_inheritance","__w64","__wchar_t"],operators:["=",">","<","!","~","?",":","==","<=",">=","!=","&&","||","++","--","+","-","*","/","&","|","^","%","<<",">>","+=","-=","*=","/=","&=","|=","^=","%=","<<=",">>="],symbols:/[=><!~?:&|+\-*\/\^%]+/,escapes:/\\(?:[0abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,integersuffix:/([uU](ll|LL|l|L)|(ll|LL|l|L)?[uU]?)/,floatsuffix:/[fFlL]?/,encoding:/u|u8|U|L/,tokenizer:{root:[[/@encoding?R\"(?:([^ ()\\\t]*))\(/,{token:"string.raw.begin",next:"@raw.$1"}],[/[a-zA-Z_]\w*/,{cases:{"@keywords":{token:"keyword.$0"},"@default":"identifier"}}],[/^\s*#\s*include/,{token:"keyword.directive.include",next:"@include"}],[/^\s*#\s*\w+/,"keyword.directive"],{include:"@whitespace"},[/\[\s*\[/,{token:"annotation",next:"@annotation"}],[/[{}()<>\[\]]/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/\d*\d+[eE]([\-+]?\d+)?(@floatsuffix)/,"number.float"],[/\d*\.\d+([eE][\-+]?\d+)?(@floatsuffix)/,"number.float"],[/0[xX][0-9a-fA-F']*[0-9a-fA-F](@integersuffix)/,"number.hex"],[/0[0-7']*[0-7](@integersuffix)/,"number.octal"],[/0[bB][0-1']*[0-1](@integersuffix)/,"number.binary"],[/\d[\d']*\d(@integersuffix)/,"number"],[/\d(@integersuffix)/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string"],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@doccomment"],[/\/\*/,"comment","@comment"],[/\/\/.*\\$/,"comment","@linecomment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],linecomment:[[/.*[^\\]$/,"comment","@pop"],[/[^]+/,"comment"]],doccomment:[[/[^\/*]+/,"comment.doc"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]],raw:[[/[^)]+/,"string.raw"],[/\)$S2\"/,{token:"string.raw.end",next:"@pop"}],[/\)/,"string.raw"]],annotation:[{include:"@whitespace"},[/using|alignas/,"keyword"],[/[a-zA-Z0-9_]+/,"annotation"],[/[,:]/,"delimiter"],[/[()]/,"@brackets"],[/\]\s*\]/,{token:"annotation",next:"@pop"}]],include:[[/(\s*)(<)([^<>]*)(>)/,["","keyword.directive.include.begin","string.include.identifier",{token:"keyword.directive.include.end",next:"@pop"}]],[/(\s*)(")([^"]*)(")/,["","keyword.directive.include.begin","string.include.identifier",{token:"keyword.directive.include.end",next:"@pop"}]]]}};export{e as conf,n as language};
@@ -0,0 +1 @@
1
+ const e={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\#\$\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"'",close:"'",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string","comment"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:"'",close:"'"},{open:'"',close:'"'}],folding:{markers:{start:new RegExp("^\\s*#region\\b"),end:new RegExp("^\\s*#endregion\\b")}}},t={defaultToken:"",tokenPostfix:".cs",brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],keywords:["extern","alias","using","bool","decimal","sbyte","byte","short","ushort","int","uint","long","ulong","char","float","double","object","dynamic","string","assembly","is","as","ref","out","this","base","new","typeof","void","checked","unchecked","default","delegate","var","const","if","else","switch","case","while","do","for","foreach","in","break","continue","goto","return","throw","try","catch","finally","lock","yield","from","let","where","join","on","equals","into","orderby","ascending","descending","select","group","by","namespace","partial","class","field","event","method","param","public","protected","internal","private","abstract","sealed","static","struct","readonly","volatile","virtual","override","params","get","set","add","remove","operator","true","false","implicit","explicit","interface","enum","null","async","await","fixed","sizeof","stackalloc","unsafe","nameof","when"],namespaceFollows:["namespace","using"],parenFollows:["if","for","while","switch","foreach","using","catch","when"],operators:["=","??","||","&&","|","^","&","==","!=","<=",">=","<<","+","-","*","/","%","!","~","++","--","+=","-=","*=","/=","%=","&=","|=","^=","<<=",">>=",">>","=>"],symbols:/[=><!~?:&|+\-*\/\^%]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[[/\@?[a-zA-Z_]\w*/,{cases:{"@namespaceFollows":{token:"keyword.$0",next:"@namespace"},"@keywords":{token:"keyword.$0",next:"@qualified"},"@default":{token:"identifier",next:"@qualified"}}}],{include:"@whitespace"},[/}/,{cases:{"$S2==interpolatedstring":{token:"string.quote",next:"@pop"},"$S2==litinterpstring":{token:"string.quote",next:"@pop"},"@default":"@brackets"}}],[/[{}()\[\]]/,"@brackets"],[/[<>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/[0-9_]*\.[0-9_]+([eE][\-+]?\d+)?[fFdD]?/,"number.float"],[/0[xX][0-9a-fA-F_]+/,"number.hex"],[/0[bB][01_]+/,"number.hex"],[/[0-9_]+/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,{token:"string.quote",next:"@string"}],[/\$\@"/,{token:"string.quote",next:"@litinterpstring"}],[/\@"/,{token:"string.quote",next:"@litstring"}],[/\$"/,{token:"string.quote",next:"@interpolatedstring"}],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],qualified:[[/[a-zA-Z_][\w]*/,{cases:{"@keywords":{token:"keyword.$0"},"@default":"identifier"}}],[/\./,"delimiter"],["","","@pop"]],namespace:[{include:"@whitespace"},[/[A-Z]\w*/,"namespace"],[/[\.=]/,"delimiter"],["","","@pop"]],comment:[[/[^\/*]+/,"comment"],["\\*/","comment","@pop"],[/[\/*]/,"comment"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,{token:"string.quote",next:"@pop"}]],litstring:[[/[^"]+/,"string"],[/""/,"string.escape"],[/"/,{token:"string.quote",next:"@pop"}]],litinterpstring:[[/[^"{]+/,"string"],[/""/,"string.escape"],[/{{/,"string.escape"],[/}}/,"string.escape"],[/{/,{token:"string.quote",next:"root.litinterpstring"}],[/"/,{token:"string.quote",next:"@pop"}]],interpolatedstring:[[/[^\\"{]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/{{/,"string.escape"],[/}}/,"string.escape"],[/{/,{token:"string.quote",next:"root.interpolatedstring"}],[/"/,{token:"string.quote",next:"@pop"}]],whitespace:[[/^[ \t\v\f]*#((r)|(load))(?=\s)/,"directive.csx"],[/^[ \t\v\f]*#\w.*$/,"namespace.cpp"],[/[ \t\v\f\r\n]+/,""],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]]}};export{e as conf,t as language};
@@ -0,0 +1 @@
1
+ const t={brackets:[],autoClosingPairs:[],surroundingPairs:[]},r={keywords:[],typeKeywords:[],tokenPostfix:".csp",operators:[],symbols:/[=><!~?:&|+\-*\/\^%]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[[/child-src/,"string.quote"],[/connect-src/,"string.quote"],[/default-src/,"string.quote"],[/font-src/,"string.quote"],[/frame-src/,"string.quote"],[/img-src/,"string.quote"],[/manifest-src/,"string.quote"],[/media-src/,"string.quote"],[/object-src/,"string.quote"],[/script-src/,"string.quote"],[/style-src/,"string.quote"],[/worker-src/,"string.quote"],[/base-uri/,"string.quote"],[/plugin-types/,"string.quote"],[/sandbox/,"string.quote"],[/disown-opener/,"string.quote"],[/form-action/,"string.quote"],[/frame-ancestors/,"string.quote"],[/report-uri/,"string.quote"],[/report-to/,"string.quote"],[/upgrade-insecure-requests/,"string.quote"],[/block-all-mixed-content/,"string.quote"],[/require-sri-for/,"string.quote"],[/reflected-xss/,"string.quote"],[/referrer/,"string.quote"],[/policy-uri/,"string.quote"],[/'self'/,"string.quote"],[/'unsafe-inline'/,"string.quote"],[/'unsafe-eval'/,"string.quote"],[/'strict-dynamic'/,"string.quote"],[/'unsafe-hashed-attributes'/,"string.quote"]]}};export{t as conf,r as language};
@@ -0,0 +1,3 @@
1
+ const e={wordPattern:/(#?-?\d*\.\d\w*%?)|((::|[@#.!:])?[\w-?]+%?)|::|[@#.!:]/g,comments:{blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}",notIn:["string","comment"]},{open:"[",close:"]",notIn:["string","comment"]},{open:"(",close:")",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string","comment"]},{open:"'",close:"'",notIn:["string","comment"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{markers:{start:new RegExp("^\\s*\\/\\*\\s*#region\\b\\s*(.*?)\\s*\\*\\/"),end:new RegExp("^\\s*\\/\\*\\s*#endregion\\b.*\\*\\/")}}},t={defaultToken:"",tokenPostfix:".css",ws:`[
2
+ \r\f]*`,identifier:"-?-?([a-zA-Z]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))([\\w\\-]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))*",brackets:[{open:"{",close:"}",token:"delimiter.bracket"},{open:"[",close:"]",token:"delimiter.bracket"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],tokenizer:{root:[{include:"@selector"}],selector:[{include:"@comments"},{include:"@import"},{include:"@strings"},["[@](keyframes|-webkit-keyframes|-moz-keyframes|-o-keyframes)",{token:"keyword",next:"@keyframedeclaration"}],["[@](page|content|font-face|-moz-document)",{token:"keyword"}],["[@](charset|namespace)",{token:"keyword",next:"@declarationbody"}],["(url-prefix)(\\()",["attribute.value",{token:"delimiter.parenthesis",next:"@urldeclaration"}]],["(url)(\\()",["attribute.value",{token:"delimiter.parenthesis",next:"@urldeclaration"}]],{include:"@selectorname"},["[\\*]","tag"],["[>\\+,]","delimiter"],["\\[",{token:"delimiter.bracket",next:"@selectorattribute"}],["{",{token:"delimiter.bracket",next:"@selectorbody"}]],selectorbody:[{include:"@comments"},["[*_]?@identifier@ws:(?=(\\s|\\d|[^{;}]*[;}]))","attribute.name","@rulevalue"],["}",{token:"delimiter.bracket",next:"@pop"}]],selectorname:[["(\\.|#(?=[^{])|%|(@identifier)|:)+","tag"]],selectorattribute:[{include:"@term"},["]",{token:"delimiter.bracket",next:"@pop"}]],term:[{include:"@comments"},["(url-prefix)(\\()",["attribute.value",{token:"delimiter.parenthesis",next:"@urldeclaration"}]],["(url)(\\()",["attribute.value",{token:"delimiter.parenthesis",next:"@urldeclaration"}]],{include:"@functioninvocation"},{include:"@numbers"},{include:"@name"},{include:"@strings"},["([<>=\\+\\-\\*\\/\\^\\|\\~,])","delimiter"],[",","delimiter"]],rulevalue:[{include:"@comments"},{include:"@strings"},{include:"@term"},["!important","keyword"],[";","delimiter","@pop"],["(?=})",{token:"",next:"@pop"}]],warndebug:[["[@](warn|debug)",{token:"keyword",next:"@declarationbody"}]],import:[["[@](import)",{token:"keyword",next:"@declarationbody"}]],urldeclaration:[{include:"@strings"},[`[^)\r
3
+ ]+`,"string"],["\\)",{token:"delimiter.parenthesis",next:"@pop"}]],parenthizedterm:[{include:"@term"},["\\)",{token:"delimiter.parenthesis",next:"@pop"}]],declarationbody:[{include:"@term"},[";","delimiter","@pop"],["(?=})",{token:"",next:"@pop"}]],comments:[["\\/\\*","comment","@comment"],["\\/\\/+.*","comment"]],comment:[["\\*\\/","comment","@pop"],[/[^*/]+/,"comment"],[/./,"comment"]],name:[["@identifier","attribute.value"]],numbers:[["-?(\\d*\\.)?\\d+([eE][\\-+]?\\d+)?",{token:"attribute.value.number",next:"@units"}],["#[0-9a-fA-F_]+(?!\\w)","attribute.value.hex"]],units:[["(em|ex|ch|rem|fr|vmin|vmax|vw|vh|vm|cm|mm|in|px|pt|pc|deg|grad|rad|turn|s|ms|Hz|kHz|%)?","attribute.value.unit","@pop"]],keyframedeclaration:[["@identifier","attribute.value"],["{",{token:"delimiter.bracket",switchTo:"@keyframebody"}]],keyframebody:[{include:"@term"},["{",{token:"delimiter.bracket",next:"@selectorbody"}],["}",{token:"delimiter.bracket",next:"@pop"}]],functioninvocation:[["@identifier\\(",{token:"attribute.value",next:"@functionarguments"}]],functionarguments:[["\\$@identifier@ws:","attribute.name"],["[,]","delimiter"],{include:"@term"},["\\)",{token:"attribute.value",next:"@pop"}]],strings:[['~?"',{token:"string",next:"@stringenddoublequote"}],["~?'",{token:"string",next:"@stringendquote"}]],stringenddoublequote:[["\\\\.","string"],['"',{token:"string",next:"@pop"}],[/[^\\"]+/,"string"],[".","string"]],stringendquote:[["\\\\.","string"],["'",{token:"string",next:"@pop"}],[/[^\\']+/,"string"],[".","string"]]}};export{e as conf,t as language};