@celestea/studio 2.7.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.
- package/LICENSE +21 -0
- package/dist/app.d.ts +111 -0
- package/dist/app.js +219 -0
- package/dist/auth/api-token.d.ts +76 -0
- package/dist/auth/api-token.js +172 -0
- package/dist/auth/htpasswd.d.ts +22 -0
- package/dist/auth/htpasswd.js +61 -0
- package/dist/auth/index.d.ts +14 -0
- package/dist/auth/index.js +14 -0
- package/dist/auth/page.d.ts +19 -0
- package/dist/auth/page.js +73 -0
- package/dist/auth/rate-limit.d.ts +27 -0
- package/dist/auth/rate-limit.js +47 -0
- package/dist/auth/token.d.ts +49 -0
- package/dist/auth/token.js +112 -0
- package/dist/config.d.ts +78 -0
- package/dist/config.js +72 -0
- package/dist/deployment.d.ts +92 -0
- package/dist/deployment.js +154 -0
- package/dist/fake-runtime-adapter.d.ts +37 -0
- package/dist/fake-runtime-adapter.js +276 -0
- package/dist/handlers/auth.d.ts +24 -0
- package/dist/handlers/auth.js +155 -0
- package/dist/handlers/common.d.ts +76 -0
- package/dist/handlers/common.js +127 -0
- package/dist/handlers/config-shape.d.ts +76 -0
- package/dist/handlers/config-shape.js +227 -0
- package/dist/handlers/config.d.ts +26 -0
- package/dist/handlers/config.js +161 -0
- package/dist/handlers/context-shape.d.ts +33 -0
- package/dist/handlers/context-shape.js +59 -0
- package/dist/handlers/dialog.d.ts +22 -0
- package/dist/handlers/dialog.js +292 -0
- package/dist/handlers/exec.d.ts +22 -0
- package/dist/handlers/exec.js +131 -0
- package/dist/handlers/fs-read.d.ts +63 -0
- package/dist/handlers/fs-read.js +159 -0
- package/dist/handlers/fs.d.ts +57 -0
- package/dist/handlers/fs.js +153 -0
- package/dist/handlers/grants-shape.d.ts +45 -0
- package/dist/handlers/grants-shape.js +130 -0
- package/dist/handlers/grants.d.ts +21 -0
- package/dist/handlers/grants.js +267 -0
- package/dist/handlers/health.d.ts +37 -0
- package/dist/handlers/health.js +139 -0
- package/dist/handlers/index.d.ts +40 -0
- package/dist/handlers/index.js +85 -0
- package/dist/handlers/permissions.d.ts +9 -0
- package/dist/handlers/permissions.js +183 -0
- package/dist/handlers/plugins.d.ts +18 -0
- package/dist/handlers/plugins.js +23 -0
- package/dist/handlers/prompts.d.ts +12 -0
- package/dist/handlers/prompts.js +120 -0
- package/dist/handlers/providers.d.ts +12 -0
- package/dist/handlers/providers.js +178 -0
- package/dist/handlers/questions.d.ts +23 -0
- package/dist/handlers/questions.js +115 -0
- package/dist/handlers/session-model.d.ts +38 -0
- package/dist/handlers/session-model.js +105 -0
- package/dist/handlers/session-move.d.ts +22 -0
- package/dist/handlers/session-move.js +188 -0
- package/dist/handlers/session-tools.d.ts +19 -0
- package/dist/handlers/session-tools.js +75 -0
- package/dist/handlers/sessions.d.ts +32 -0
- package/dist/handlers/sessions.js +242 -0
- package/dist/handlers/usage.d.ts +26 -0
- package/dist/handlers/usage.js +77 -0
- package/dist/handlers/worker.d.ts +12 -0
- package/dist/handlers/worker.js +82 -0
- package/dist/handlers/workspaces.d.ts +12 -0
- package/dist/handlers/workspaces.js +88 -0
- package/dist/harness.test-util.d.ts +101 -0
- package/dist/harness.test-util.js +176 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.js +33 -0
- package/dist/main.d.ts +13 -0
- package/dist/main.js +35 -0
- package/dist/plugins.d.ts +105 -0
- package/dist/plugins.js +97 -0
- package/dist/question-registry.d.ts +124 -0
- package/dist/question-registry.js +212 -0
- package/dist/question-rows.d.ts +32 -0
- package/dist/question-rows.js +43 -0
- package/dist/replay/compare.d.ts +47 -0
- package/dist/replay/compare.js +89 -0
- package/dist/replay/e2e-replay.d.ts +46 -0
- package/dist/replay/e2e-replay.js +91 -0
- package/dist/replay/expect-compact.d.ts +31 -0
- package/dist/replay/expect-compact.js +92 -0
- package/dist/replay/fixtures.d.ts +52 -0
- package/dist/replay/fixtures.js +53 -0
- package/dist/replay/host.d.ts +32 -0
- package/dist/replay/host.js +62 -0
- package/dist/replay/index.d.ts +16 -0
- package/dist/replay/index.js +16 -0
- package/dist/replay/probes.d.ts +55 -0
- package/dist/replay/probes.js +225 -0
- package/dist/replay/report.d.ts +13 -0
- package/dist/replay/report.js +103 -0
- package/dist/replay/session-e2e.d.ts +44 -0
- package/dist/replay/session-e2e.js +91 -0
- package/dist/routes.d.ts +47 -0
- package/dist/routes.js +59 -0
- package/dist/runtime/attachments-llm.d.ts +13 -0
- package/dist/runtime/attachments-llm.js +37 -0
- package/dist/runtime/boot-recovery.d.ts +32 -0
- package/dist/runtime/boot-recovery.js +71 -0
- package/dist/runtime/context-snapshot.d.ts +59 -0
- package/dist/runtime/context-snapshot.js +113 -0
- package/dist/runtime/engine-grants.d.ts +121 -0
- package/dist/runtime/engine-grants.js +338 -0
- package/dist/runtime/engine-permissions.d.ts +29 -0
- package/dist/runtime/engine-permissions.js +92 -0
- package/dist/runtime/engine-plugins.d.ts +189 -0
- package/dist/runtime/engine-plugins.js +292 -0
- package/dist/runtime/engine-profile.d.ts +28 -0
- package/dist/runtime/engine-profile.js +88 -0
- package/dist/runtime/engine-session.d.ts +9 -0
- package/dist/runtime/engine-session.js +9 -0
- package/dist/runtime/fallback-contract.d.ts +32 -0
- package/dist/runtime/fallback-contract.js +10 -0
- package/dist/runtime/fallback-host.d.ts +134 -0
- package/dist/runtime/fallback-host.js +299 -0
- package/dist/runtime/host-autowake.d.ts +79 -0
- package/dist/runtime/host-autowake.js +86 -0
- package/dist/runtime/image-downgrade.d.ts +49 -0
- package/dist/runtime/image-downgrade.js +90 -0
- package/dist/runtime/inbox-message.d.ts +11 -0
- package/dist/runtime/inbox-message.js +20 -0
- package/dist/runtime/index.d.ts +17 -0
- package/dist/runtime/index.js +17 -0
- package/dist/runtime/ledger-view.d.ts +40 -0
- package/dist/runtime/ledger-view.js +56 -0
- package/dist/runtime/llm-assembly.d.ts +66 -0
- package/dist/runtime/llm-assembly.js +114 -0
- package/dist/runtime/offline-llm.d.ts +71 -0
- package/dist/runtime/offline-llm.js +132 -0
- package/dist/runtime/provider-target.d.ts +10 -0
- package/dist/runtime/provider-target.js +10 -0
- package/dist/runtime/question-host.d.ts +33 -0
- package/dist/runtime/question-host.js +41 -0
- package/dist/runtime/question-view.d.ts +48 -0
- package/dist/runtime/question-view.js +76 -0
- package/dist/runtime/real-runtime-adapter.d.ts +95 -0
- package/dist/runtime/real-runtime-adapter.js +553 -0
- package/dist/runtime/recovery-audit.d.ts +81 -0
- package/dist/runtime/recovery-audit.js +95 -0
- package/dist/runtime/recovery-view.d.ts +36 -0
- package/dist/runtime/recovery-view.js +63 -0
- package/dist/runtime/session-compose.d.ts +235 -0
- package/dist/runtime/session-compose.js +350 -0
- package/dist/runtime/session-grants.d.ts +36 -0
- package/dist/runtime/session-grants.js +69 -0
- package/dist/runtime/session-lifecycle.d.ts +40 -0
- package/dist/runtime/session-lifecycle.js +86 -0
- package/dist/runtime/session-publisher.d.ts +40 -0
- package/dist/runtime/session-publisher.js +48 -0
- package/dist/runtime/session-release.d.ts +53 -0
- package/dist/runtime/session-release.js +80 -0
- package/dist/runtime/test-util.d.ts +78 -0
- package/dist/runtime/test-util.js +162 -0
- package/dist/runtime/watchdog-view.d.ts +33 -0
- package/dist/runtime/watchdog-view.js +45 -0
- package/dist/runtime/worker-bridge.d.ts +76 -0
- package/dist/runtime/worker-bridge.js +156 -0
- package/dist/runtime/worker-live.d.ts +22 -0
- package/dist/runtime/worker-live.js +25 -0
- package/dist/runtime/worker-recovery.d.ts +35 -0
- package/dist/runtime/worker-recovery.js +64 -0
- package/dist/runtime/worker-table.d.ts +58 -0
- package/dist/runtime/worker-table.js +70 -0
- package/dist/runtime-adapter.d.ts +421 -0
- package/dist/runtime-adapter.js +76 -0
- package/dist/serial-queue.d.ts +16 -0
- package/dist/serial-queue.js +22 -0
- package/dist/server.d.ts +44 -0
- package/dist/server.js +119 -0
- package/dist/settings.d.ts +23 -0
- package/dist/settings.js +31 -0
- package/dist/sse.d.ts +67 -0
- package/dist/sse.js +186 -0
- package/dist/static.d.ts +20 -0
- package/dist/static.js +120 -0
- package/dist/store/builtin-sections.d.ts +52 -0
- package/dist/store/builtin-sections.js +118 -0
- package/dist/store/celestea-home.d.ts +12 -0
- package/dist/store/celestea-home.js +11 -0
- package/dist/store/fs-json.d.ts +51 -0
- package/dist/store/fs-json.js +119 -0
- package/dist/store/grants-audit.d.ts +84 -0
- package/dist/store/grants-audit.js +109 -0
- package/dist/store/grants-service.d.ts +44 -0
- package/dist/store/grants-service.js +41 -0
- package/dist/store/grants-tokens.d.ts +62 -0
- package/dist/store/grants-tokens.js +105 -0
- package/dist/store/grants.d.ts +113 -0
- package/dist/store/grants.js +238 -0
- package/dist/store/index.d.ts +36 -0
- package/dist/store/index.js +36 -0
- package/dist/store/mode.d.ts +35 -0
- package/dist/store/mode.js +41 -0
- package/dist/store/permissions.d.ts +61 -0
- package/dist/store/permissions.js +139 -0
- package/dist/store/prompts-compose.d.ts +56 -0
- package/dist/store/prompts-compose.js +62 -0
- package/dist/store/prompts-template.d.ts +26 -0
- package/dist/store/prompts-template.js +99 -0
- package/dist/store/prompts.d.ts +142 -0
- package/dist/store/prompts.js +273 -0
- package/dist/store/provider-probe.d.ts +81 -0
- package/dist/store/provider-probe.js +154 -0
- package/dist/store/providers.d.ts +97 -0
- package/dist/store/providers.js +219 -0
- package/dist/store/result.d.ts +29 -0
- package/dist/store/result.js +30 -0
- package/dist/store/session-id.d.ts +119 -0
- package/dist/store/session-id.js +220 -0
- package/dist/store/session-meta.d.ts +41 -0
- package/dist/store/session-meta.js +66 -0
- package/dist/store/session-ops.d.ts +109 -0
- package/dist/store/session-ops.js +264 -0
- package/dist/store/session-tools.d.ts +42 -0
- package/dist/store/session-tools.js +69 -0
- package/dist/store/sessions.d.ts +162 -0
- package/dist/store/sessions.js +307 -0
- package/dist/store/validate.d.ts +13 -0
- package/dist/store/validate.js +38 -0
- package/dist/store/workspaces.d.ts +67 -0
- package/dist/store/workspaces.js +228 -0
- package/dist/user-questions.d.ts +58 -0
- package/dist/user-questions.js +157 -0
- package/dist/version.d.ts +14 -0
- package/dist/version.js +52 -0
- package/package.json +38 -0
- package/webdist/assets/index-Bngs7gUm.js +98 -0
- package/webdist/assets/index-Bu6ci_rN.css +1 -0
- package/webdist/assets/katex-CCbS2qAY.js +257 -0
- package/webdist/assets/mhchem-CnUN8HwY.js +1 -0
- package/webdist/build-meta.json +7 -0
- package/webdist/index.html +261 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import e from"./katex-CCbS2qAY.js";e.__defineMacro(`\\ce`,function(e){return t(e.consumeArgs(1)[0],`ce`)}),e.__defineMacro(`\\pu`,function(e){return t(e.consumeArgs(1)[0],`pu`)}),e.__defineMacro(`\\tripledash`,`{\\vphantom{-}\\raisebox{2.56mu}{$\\mkern2mu\\tiny\\text{-}\\mkern1mu\\text{-}\\mkern1mu\\text{-}\\mkern2mu$}}`);var t=function(e,t){for(var i=``,a=e.length&&e[e.length-1].loc.start,o=e.length-1;o>=0;o--)e[o].loc.start>a&&(i+=` `,a=e[o].loc.start),i+=e[o].text,a+=e[o].text.length;return r.go(n.go(i,t))},n={go:function(e,t){if(!e)return[];t===void 0&&(t=`ce`);var r=`0`,i={};i.parenthesisLevel=0,e=e.replace(/\n/g,` `),e=e.replace(/[\u2212\u2013\u2014\u2010]/g,`-`),e=e.replace(/[\u2026]/g,`...`);for(var a,o=10,s=[];;){a===e?o--:(o=10,a=e);var c=n.stateMachines[t],l=c.transitions[r]||c.transitions[`*`];iterateTransitions:for(var u=0;u<l.length;u++){var d=n.patterns.match_(l[u].pattern,e);if(d){for(var f=l[u].task,p=0;p<f.action_.length;p++){var m;if(c.actions[f.action_[p].type_])m=c.actions[f.action_[p].type_](i,d.match_,f.action_[p].option);else if(n.actions[f.action_[p].type_])m=n.actions[f.action_[p].type_](i,d.match_,f.action_[p].option);else throw[`MhchemBugA`,`mhchem bug A. Please report. (`+f.action_[p].type_+`)`];n.concatArray(s,m)}if(r=f.nextState||r,e.length>0){if(f.revisit||(e=d.remainder),!f.toContinue)break iterateTransitions}else return s}}if(o<=0)throw[`MhchemBugU`,`mhchem bug U. Please report.`]}},concatArray:function(e,t){if(t){if(Array.isArray(t))for(var n=0;n<t.length;n++)e.push(t[n]);else e.push(t)}},patterns:{patterns:{empty:/^$/,else:/^./,else2:/^./,space:/^\s/,"space A":/^\s(?=[A-Z\\$])/,space$:/^\s$/,"a-z":/^[a-z]/,x:/^x/,x$:/^x$/,i$:/^i$/,letters:/^(?:[a-zA-Z\u03B1-\u03C9\u0391-\u03A9?@]|(?:\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))))+/,"\\greek":/^\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))/,"one lowercase latin letter $":/^(?:([a-z])(?:$|[^a-zA-Z]))$/,"$one lowercase latin letter$ $":/^\$(?:([a-z])(?:$|[^a-zA-Z]))\$$/,"one lowercase greek letter $":/^(?:\$?[\u03B1-\u03C9]\$?|\$?\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega)\s*\$?)(?:\s+|\{\}|(?![a-zA-Z]))$/,digits:/^[0-9]+/,"-9.,9":/^[+\-]?(?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))/,"-9.,9 no missing 0":/^[+\-]?[0-9]+(?:[.,][0-9]+)?/,"(-)(9.,9)(e)(99)":function(e){var t=e.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))?(\((?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))\))?(?:([eE]|\s*(\*|x|\\times|\u00D7)\s*10\^)([+\-]?[0-9]+|\{[+\-]?[0-9]+\}))?/);return t&&t[0]?{match_:t.splice(1),remainder:e.substr(t[0].length)}:null},"(-)(9)^(-9)":function(e){var t=e.match(/^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+)?)\^([+\-]?[0-9]+|\{[+\-]?[0-9]+\})/);return t&&t[0]?{match_:t.splice(1),remainder:e.substr(t[0].length)}:null},"state of aggregation $":function(e){var t=n.patterns.findObserveGroups(e,``,/^\([a-z]{1,3}(?=[\),])/,`)`,``);if(t&&t.remainder.match(/^($|[\s,;\)\]\}])/))return t;var r=e.match(/^(?:\((?:\\ca\s?)?\$[amothc]\$\))/);return r?{match_:r[0],remainder:e.substr(r[0].length)}:null},"_{(state of aggregation)}$":/^_\{(\([a-z]{1,3}\))\}/,"{[(":/^(?:\\\{|\[|\()/,")]}":/^(?:\)|\]|\\\})/,", ":/^[,;]\s*/,",":/^[,;]/,".":/^[.]/,". ":/^([.\u22C5\u00B7\u2022])\s*/,"...":/^\.\.\.(?=$|[^.])/,"* ":/^([*])\s*/,"^{(...)}":function(e){return n.patterns.findObserveGroups(e,`^{`,``,``,`}`)},"^($...$)":function(e){return n.patterns.findObserveGroups(e,`^`,`$`,`$`,``)},"^a":/^\^([0-9]+|[^\\_])/,"^\\x{}{}":function(e){return n.patterns.findObserveGroups(e,`^`,/^\\[a-zA-Z]+\{/,`}`,``,``,`{`,`}`,``,!0)},"^\\x{}":function(e){return n.patterns.findObserveGroups(e,`^`,/^\\[a-zA-Z]+\{/,`}`,``)},"^\\x":/^\^(\\[a-zA-Z]+)\s*/,"^(-1)":/^\^(-?\d+)/,"'":/^'/,"_{(...)}":function(e){return n.patterns.findObserveGroups(e,`_{`,``,``,`}`)},"_($...$)":function(e){return n.patterns.findObserveGroups(e,`_`,`$`,`$`,``)},_9:/^_([+\-]?[0-9]+|[^\\])/,"_\\x{}{}":function(e){return n.patterns.findObserveGroups(e,`_`,/^\\[a-zA-Z]+\{/,`}`,``,``,`{`,`}`,``,!0)},"_\\x{}":function(e){return n.patterns.findObserveGroups(e,`_`,/^\\[a-zA-Z]+\{/,`}`,``)},"_\\x":/^_(\\[a-zA-Z]+)\s*/,"^_":/^(?:\^(?=_)|\_(?=\^)|[\^_]$)/,"{}":/^\{\}/,"{...}":function(e){return n.patterns.findObserveGroups(e,``,`{`,`}`,``)},"{(...)}":function(e){return n.patterns.findObserveGroups(e,`{`,``,``,`}`)},"$...$":function(e){return n.patterns.findObserveGroups(e,``,`$`,`$`,``)},"${(...)}$":function(e){return n.patterns.findObserveGroups(e,"${",``,``,`}$`)},"$(...)$":function(e){return n.patterns.findObserveGroups(e,`$`,``,``,`$`)},"=<>":/^[=<>]/,"#":/^[#\u2261]/,"+":/^\+/,"-$":/^-(?=[\s_},;\]/]|$|\([a-z]+\))/,"-9":/^-(?=[0-9])/,"- orbital overlap":/^-(?=(?:[spd]|sp)(?:$|[\s,;\)\]\}]))/,"-":/^-/,"pm-operator":/^(?:\\pm|\$\\pm\$|\+-|\+\/-)/,operator:/^(?:\+|(?:[\-=<>]|<<|>>|\\approx|\$\\approx\$)(?=\s|$|-?[0-9]))/,arrowUpDown:/^(?:v|\(v\)|\^|\(\^\))(?=$|[\s,;\)\]\}])/,"\\bond{(...)}":function(e){return n.patterns.findObserveGroups(e,`\\bond{`,``,``,`}`)},"->":/^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\u2192\u27F6\u21CC])/,CMT:/^[CMT](?=\[)/,"[(...)]":function(e){return n.patterns.findObserveGroups(e,`[`,``,``,`]`)},"1st-level escape":/^(&|\\\\|\\hline)\s*/,"\\,":/^(?:\\[,\ ;:])/,"\\x{}{}":function(e){return n.patterns.findObserveGroups(e,``,/^\\[a-zA-Z]+\{/,`}`,``,``,`{`,`}`,``,!0)},"\\x{}":function(e){return n.patterns.findObserveGroups(e,``,/^\\[a-zA-Z]+\{/,`}`,``)},"\\ca":/^\\ca(?:\s+|(?![a-zA-Z]))/,"\\x":/^(?:\\[a-zA-Z]+\s*|\\[_&{}%])/,orbital:/^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/,others:/^[\/~|]/,"\\frac{(...)}":function(e){return n.patterns.findObserveGroups(e,`\\frac{`,``,``,`}`,`{`,``,``,`}`)},"\\overset{(...)}":function(e){return n.patterns.findObserveGroups(e,`\\overset{`,``,``,`}`,`{`,``,``,`}`)},"\\underset{(...)}":function(e){return n.patterns.findObserveGroups(e,`\\underset{`,``,``,`}`,`{`,``,``,`}`)},"\\underbrace{(...)}":function(e){return n.patterns.findObserveGroups(e,`\\underbrace{`,``,``,`}_`,`{`,``,``,`}`)},"\\color{(...)}0":function(e){return n.patterns.findObserveGroups(e,`\\color{`,``,``,`}`)},"\\color{(...)}{(...)}1":function(e){return n.patterns.findObserveGroups(e,`\\color{`,``,``,`}`,`{`,``,``,`}`)},"\\color(...){(...)}2":function(e){return n.patterns.findObserveGroups(e,`\\color`,`\\`,``,/^(?=\{)/,`{`,``,``,`}`)},"\\ce{(...)}":function(e){return n.patterns.findObserveGroups(e,`\\ce{`,``,``,`}`)},oxidation$:/^(?:[+-][IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,"d-oxidation$":/^(?:[+-]?\s?[IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,"roman numeral":/^[IVX]+/,"1/2$":/^[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+(?:\$[a-z]\$|[a-z])?$/,amount:function(e){var t=e.match(/^(?:(?:(?:\([+\-]?[0-9]+\/[0-9]+\)|[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+|[+\-]?[0-9]+[.,][0-9]+|[+\-]?\.[0-9]+|[+\-]?[0-9]+)(?:[a-z](?=\s*[A-Z]))?)|[+\-]?[a-z](?=\s*[A-Z])|\+(?!\s))/);if(t)return{match_:t[0],remainder:e.substr(t[0].length)};var r=n.patterns.findObserveGroups(e,``,`$`,`$`,``);return r&&(t=r.match_.match(/^\$(?:\(?[+\-]?(?:[0-9]*[a-z]?[+\-])?[0-9]*[a-z](?:[+\-][0-9]*[a-z]?)?\)?|\+|-)\$$/),t)?{match_:t[0],remainder:e.substr(t[0].length)}:null},amount2:function(e){return this.amount(e)},"(KV letters),":/^(?:[A-Z][a-z]{0,2}|i)(?=,)/,formula$:function(e){if(e.match(/^\([a-z]+\)$/))return null;var t=e.match(/^(?:[a-z]|(?:[0-9\ \+\-\,\.\(\)]+[a-z])+[0-9\ \+\-\,\.\(\)]*|(?:[a-z][0-9\ \+\-\,\.\(\)]+)+[a-z]?)$/);return t?{match_:t[0],remainder:e.substr(t[0].length)}:null},uprightEntities:/^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/,"/":/^\s*(\/)\s*/,"//":/^\s*(\/\/)\s*/,"*":/^\s*[*.]\s*/},findObserveGroups:function(e,t,n,r,i,a,o,s,c,l){var u=function(e,t){if(typeof t==`string`)return e.indexOf(t)===0?t:null;var n=e.match(t);return n?n[0]:null},d=function(e,t,n){for(var r=0;t<e.length;){var i=e.charAt(t),a=u(e.substr(t),n);if(a!==null&&r===0)return{endMatchBegin:t,endMatchEnd:t+a.length};if(i===`{`)r++;else if(i===`}`){if(r===0)throw[`ExtraCloseMissingOpen`,`Extra close brace or missing open brace`];r--}t++}return null},f=u(e,t);if(f===null||(e=e.substr(f.length),f=u(e,n),f===null))return null;var p=d(e,f.length,r||i);if(p===null)return null;var m=e.substring(0,r?p.endMatchEnd:p.endMatchBegin);if(a||o){var h=this.findObserveGroups(e.substr(p.endMatchEnd),a,o,s,c);if(h===null)return null;var g=[m,h.match_];return{match_:l?g.join(``):g,remainder:h.remainder}}return{match_:m,remainder:e.substr(p.endMatchEnd)}},match_:function(e,t){var r=n.patterns.patterns[e];if(r===void 0)throw[`MhchemBugP`,`mhchem bug P. Please report. (`+e+`)`];if(typeof r==`function`)return n.patterns.patterns[e](t);var i=t.match(r);return i?{match_:i[2]?[i[1],i[2]]:i[1]?i[1]:i[0],remainder:t.substr(i[0].length)}:null}},actions:{"a=":function(e,t){e.a=(e.a||``)+t},"b=":function(e,t){e.b=(e.b||``)+t},"p=":function(e,t){e.p=(e.p||``)+t},"o=":function(e,t){e.o=(e.o||``)+t},"q=":function(e,t){e.q=(e.q||``)+t},"d=":function(e,t){e.d=(e.d||``)+t},"rm=":function(e,t){e.rm=(e.rm||``)+t},"text=":function(e,t){e.text_=(e.text_||``)+t},insert:function(e,t,n){return{type_:n}},"insert+p1":function(e,t,n){return{type_:n,p1:t}},"insert+p1+p2":function(e,t,n){return{type_:n,p1:t[0],p2:t[1]}},copy:function(e,t){return t},rm:function(e,t){return{type_:`rm`,p1:t||``}},text:function(e,t){return n.go(t,`text`)},"{text}":function(e,t){var r=[`{`];return n.concatArray(r,n.go(t,`text`)),r.push(`}`),r},"tex-math":function(e,t){return n.go(t,`tex-math`)},"tex-math tight":function(e,t){return n.go(t,`tex-math tight`)},bond:function(e,t,n){return{type_:`bond`,kind_:n||t}},"color0-output":function(e,t){return{type_:`color0`,color:t[0]}},ce:function(e,t){return n.go(t)},"1/2":function(e,t){var n=[];t.match(/^[+\-]/)&&(n.push(t.substr(0,1)),t=t.substr(1));var r=t.match(/^([0-9]+|\$[a-z]\$|[a-z])\/([0-9]+)(\$[a-z]\$|[a-z])?$/);return r[1]=r[1].replace(/\$/g,``),n.push({type_:`frac`,p1:r[1],p2:r[2]}),r[3]&&(r[3]=r[3].replace(/\$/g,``),n.push({type_:`tex-math`,p1:r[3]})),n},"9,9":function(e,t){return n.go(t,`9,9`)}},createTransitions:function(e){var t,n,r,i,a={};for(t in e)for(n in e[t])for(r=n.split(`|`),e[t][n].stateArray=r,i=0;i<r.length;i++)a[r[i]]=[];for(t in e)for(n in e[t])for(r=e[t][n].stateArray||[],i=0;i<r.length;i++){var o=e[t][n];if(o.action_){o.action_=[].concat(o.action_);for(var s=0;s<o.action_.length;s++)typeof o.action_[s]==`string`&&(o.action_[s]={type_:o.action_[s]})}else o.action_=[];for(var c=t.split(`|`),l=0;l<c.length;l++)if(r[i]===`*`)for(var u in a)a[u].push({pattern:c[l],task:o});else a[r[i]].push({pattern:c[l],task:o})}return a},stateMachines:{}};n.stateMachines={ce:{transitions:n.createTransitions({empty:{"*":{action_:`output`}},else:{"0|1|2":{action_:`beginsWithBond=false`,revisit:!0,toContinue:!0}},oxidation$:{0:{action_:`oxidation-output`}},CMT:{r:{action_:`rdt=`,nextState:`rt`},rd:{action_:`rqt=`,nextState:`rdt`}},arrowUpDown:{"0|1|2|as":{action_:[`sb=false`,`output`,`operator`],nextState:`1`}},uprightEntities:{"0|1|2":{action_:[`o=`,`output`],nextState:`1`}},orbital:{"0|1|2|3":{action_:`o=`,nextState:`o`}},"->":{"0|1|2|3":{action_:`r=`,nextState:`r`},"a|as":{action_:[`output`,`r=`],nextState:`r`},"*":{action_:[`output`,`r=`],nextState:`r`}},"+":{o:{action_:`d= kv`,nextState:`d`},"d|D":{action_:`d=`,nextState:`d`},q:{action_:`d=`,nextState:`qd`},"qd|qD":{action_:`d=`,nextState:`qd`},dq:{action_:[`output`,`d=`],nextState:`d`},3:{action_:[`sb=false`,`output`,`operator`],nextState:`0`}},amount:{"0|2":{action_:`a=`,nextState:`a`}},"pm-operator":{"0|1|2|a|as":{action_:[`sb=false`,`output`,{type_:`operator`,option:`\\pm`}],nextState:`0`}},operator:{"0|1|2|a|as":{action_:[`sb=false`,`output`,`operator`],nextState:`0`}},"-$":{"o|q":{action_:[`charge or bond`,`output`],nextState:`qd`},d:{action_:`d=`,nextState:`d`},D:{action_:[`output`,{type_:`bond`,option:`-`}],nextState:`3`},q:{action_:`d=`,nextState:`qd`},qd:{action_:`d=`,nextState:`qd`},"qD|dq":{action_:[`output`,{type_:`bond`,option:`-`}],nextState:`3`}},"-9":{"3|o":{action_:[`output`,{type_:`insert`,option:`hyphen`}],nextState:`3`}},"- orbital overlap":{o:{action_:[`output`,{type_:`insert`,option:`hyphen`}],nextState:`2`},d:{action_:[`output`,{type_:`insert`,option:`hyphen`}],nextState:`2`}},"-":{"0|1|2":{action_:[{type_:`output`,option:1},`beginsWithBond=true`,{type_:`bond`,option:`-`}],nextState:`3`},3:{action_:{type_:`bond`,option:`-`}},a:{action_:[`output`,{type_:`insert`,option:`hyphen`}],nextState:`2`},as:{action_:[{type_:`output`,option:2},{type_:`bond`,option:`-`}],nextState:`3`},b:{action_:`b=`},o:{action_:{type_:`- after o/d`,option:!1},nextState:`2`},q:{action_:{type_:`- after o/d`,option:!1},nextState:`2`},"d|qd|dq":{action_:{type_:`- after o/d`,option:!0},nextState:`2`},"D|qD|p":{action_:[`output`,{type_:`bond`,option:`-`}],nextState:`3`}},amount2:{"1|3":{action_:`a=`,nextState:`a`}},letters:{"0|1|2|3|a|as|b|p|bp|o":{action_:`o=`,nextState:`o`},"q|dq":{action_:[`output`,`o=`],nextState:`o`},"d|D|qd|qD":{action_:`o after d`,nextState:`o`}},digits:{o:{action_:`q=`,nextState:`q`},"d|D":{action_:`q=`,nextState:`dq`},q:{action_:[`output`,`o=`],nextState:`o`},a:{action_:`o=`,nextState:`o`}},"space A":{"b|p|bp":{}},space:{a:{nextState:`as`},0:{action_:`sb=false`},"1|2":{action_:`sb=true`},"r|rt|rd|rdt|rdq":{action_:`output`,nextState:`0`},"*":{action_:[`output`,`sb=true`],nextState:`1`}},"1st-level escape":{"1|2":{action_:[`output`,{type_:`insert+p1`,option:`1st-level escape`}]},"*":{action_:[`output`,{type_:`insert+p1`,option:`1st-level escape`}],nextState:`0`}},"[(...)]":{"r|rt":{action_:`rd=`,nextState:`rd`},"rd|rdt":{action_:`rq=`,nextState:`rdq`}},"...":{"o|d|D|dq|qd|qD":{action_:[`output`,{type_:`bond`,option:`...`}],nextState:`3`},"*":{action_:[{type_:`output`,option:1},{type_:`insert`,option:`ellipsis`}],nextState:`1`}},". |* ":{"*":{action_:[`output`,{type_:`insert`,option:`addition compound`}],nextState:`1`}},"state of aggregation $":{"*":{action_:[`output`,`state of aggregation`],nextState:`1`}},"{[(":{"a|as|o":{action_:[`o=`,`output`,`parenthesisLevel++`],nextState:`2`},"0|1|2|3":{action_:[`o=`,`output`,`parenthesisLevel++`],nextState:`2`},"*":{action_:[`output`,`o=`,`output`,`parenthesisLevel++`],nextState:`2`}},")]}":{"0|1|2|3|b|p|bp|o":{action_:[`o=`,`parenthesisLevel--`],nextState:`o`},"a|as|d|D|q|qd|qD|dq":{action_:[`output`,`o=`,`parenthesisLevel--`],nextState:`o`}},", ":{"*":{action_:[`output`,`comma`],nextState:`0`}},"^_":{"*":{}},"^{(...)}|^($...$)":{"0|1|2|as":{action_:`b=`,nextState:`b`},p:{action_:`b=`,nextState:`bp`},"3|o":{action_:`d= kv`,nextState:`D`},q:{action_:`d=`,nextState:`qD`},"d|D|qd|qD|dq":{action_:[`output`,`d=`],nextState:`D`}},"^a|^\\x{}{}|^\\x{}|^\\x|'":{"0|1|2|as":{action_:`b=`,nextState:`b`},p:{action_:`b=`,nextState:`bp`},"3|o":{action_:`d= kv`,nextState:`d`},q:{action_:`d=`,nextState:`qd`},"d|qd|D|qD":{action_:`d=`},dq:{action_:[`output`,`d=`],nextState:`d`}},"_{(state of aggregation)}$":{"d|D|q|qd|qD|dq":{action_:[`output`,`q=`],nextState:`q`}},"_{(...)}|_($...$)|_9|_\\x{}{}|_\\x{}|_\\x":{"0|1|2|as":{action_:`p=`,nextState:`p`},b:{action_:`p=`,nextState:`bp`},"3|o":{action_:`q=`,nextState:`q`},"d|D":{action_:`q=`,nextState:`dq`},"q|qd|qD|dq":{action_:[`output`,`q=`],nextState:`q`}},"=<>":{"0|1|2|3|a|as|o|q|d|D|qd|qD|dq":{action_:[{type_:`output`,option:2},`bond`],nextState:`3`}},"#":{"0|1|2|3|a|as|o":{action_:[{type_:`output`,option:2},{type_:`bond`,option:`#`}],nextState:`3`}},"{}":{"*":{action_:{type_:`output`,option:1},nextState:`1`}},"{...}":{"0|1|2|3|a|as|b|p|bp":{action_:`o=`,nextState:`o`},"o|d|D|q|qd|qD|dq":{action_:[`output`,`o=`],nextState:`o`}},"$...$":{a:{action_:`a=`},"0|1|2|3|as|b|p|bp|o":{action_:`o=`,nextState:`o`},"as|o":{action_:`o=`},"q|d|D|qd|qD|dq":{action_:[`output`,`o=`],nextState:`o`}},"\\bond{(...)}":{"*":{action_:[{type_:`output`,option:2},`bond`],nextState:`3`}},"\\frac{(...)}":{"*":{action_:[{type_:`output`,option:1},`frac-output`],nextState:`3`}},"\\overset{(...)}":{"*":{action_:[{type_:`output`,option:2},`overset-output`],nextState:`3`}},"\\underset{(...)}":{"*":{action_:[{type_:`output`,option:2},`underset-output`],nextState:`3`}},"\\underbrace{(...)}":{"*":{action_:[{type_:`output`,option:2},`underbrace-output`],nextState:`3`}},"\\color{(...)}{(...)}1|\\color(...){(...)}2":{"*":{action_:[{type_:`output`,option:2},`color-output`],nextState:`3`}},"\\color{(...)}0":{"*":{action_:[{type_:`output`,option:2},`color0-output`]}},"\\ce{(...)}":{"*":{action_:[{type_:`output`,option:2},`ce`],nextState:`3`}},"\\,":{"*":{action_:[{type_:`output`,option:1},`copy`],nextState:`1`}},"\\x{}{}|\\x{}|\\x":{"0|1|2|3|a|as|b|p|bp|o|c0":{action_:[`o=`,`output`],nextState:`3`},"*":{action_:[`output`,`o=`,`output`],nextState:`3`}},others:{"*":{action_:[{type_:`output`,option:1},`copy`],nextState:`3`}},else2:{a:{action_:`a to o`,nextState:`o`,revisit:!0},as:{action_:[`output`,`sb=true`],nextState:`1`,revisit:!0},"r|rt|rd|rdt|rdq":{action_:[`output`],nextState:`0`,revisit:!0},"*":{action_:[`output`,`copy`],nextState:`3`}}}),actions:{"o after d":function(e,t){var r;if((e.d||``).match(/^[0-9]+$/)){var i=e.d;e.d=void 0,r=this.output(e),e.b=i}else r=this.output(e);return n.actions[`o=`](e,t),r},"d= kv":function(e,t){e.d=t,e.dType=`kv`},"charge or bond":function(e,t){if(e.beginsWithBond){var r=[];return n.concatArray(r,this.output(e)),n.concatArray(r,n.actions.bond(e,t,`-`)),r}e.d=t},"- after o/d":function(e,t,r){var i=n.patterns.match_(`orbital`,e.o||``),a=n.patterns.match_(`one lowercase greek letter $`,e.o||``),o=n.patterns.match_(`one lowercase latin letter $`,e.o||``),s=n.patterns.match_(`$one lowercase latin letter$ $`,e.o||``),c=t===`-`&&(i&&i.remainder===``||a||o||s);c&&!e.a&&!e.b&&!e.p&&!e.d&&!e.q&&!i&&o&&(e.o=`$`+e.o+`$`);var l=[];return c?(n.concatArray(l,this.output(e)),l.push({type_:`hyphen`})):(i=n.patterns.match_(`digits`,e.d||``),r&&i&&i.remainder===``?(n.concatArray(l,n.actions[`d=`](e,t)),n.concatArray(l,this.output(e))):(n.concatArray(l,this.output(e)),n.concatArray(l,n.actions.bond(e,t,`-`)))),l},"a to o":function(e){e.o=e.a,e.a=void 0},"sb=true":function(e){e.sb=!0},"sb=false":function(e){e.sb=!1},"beginsWithBond=true":function(e){e.beginsWithBond=!0},"beginsWithBond=false":function(e){e.beginsWithBond=!1},"parenthesisLevel++":function(e){e.parenthesisLevel++},"parenthesisLevel--":function(e){e.parenthesisLevel--},"state of aggregation":function(e,t){return{type_:`state of aggregation`,p1:n.go(t,`o`)}},comma:function(e,t){var n=t.replace(/\s*$/,``);return n!==t&&e.parenthesisLevel===0?{type_:`comma enumeration L`,p1:n}:{type_:`comma enumeration M`,p1:n}},output:function(e,t,r){var i;if(!e.r)i=[],!e.a&&!e.b&&!e.p&&!e.o&&!e.q&&!e.d&&!r||(e.sb&&i.push({type_:`entitySkip`}),!e.o&&!e.q&&!e.d&&!e.b&&!e.p&&r!==2?(e.o=e.a,e.a=void 0):!e.o&&!e.q&&!e.d&&(e.b||e.p)?(e.o=e.a,e.d=e.b,e.q=e.p,e.a=e.b=e.p=void 0):e.o&&e.dType===`kv`&&n.patterns.match_(`d-oxidation$`,e.d||``)?e.dType=`oxidation`:e.o&&e.dType===`kv`&&!e.q&&(e.dType=void 0),i.push({type_:`chemfive`,a:n.go(e.a,`a`),b:n.go(e.b,`bd`),p:n.go(e.p,`pq`),o:n.go(e.o,`o`),q:n.go(e.q,`pq`),d:n.go(e.d,e.dType===`oxidation`?`oxidation`:`bd`),dType:e.dType}));else{var a=e.rdt===`M`?n.go(e.rd,`tex-math`):e.rdt===`T`?[{type_:`text`,p1:e.rd||``}]:n.go(e.rd),o=e.rqt===`M`?n.go(e.rq,`tex-math`):e.rqt===`T`?[{type_:`text`,p1:e.rq||``}]:n.go(e.rq);i={type_:`arrow`,r:e.r,rd:a,rq:o}}for(var s in e)s!==`parenthesisLevel`&&s!==`beginsWithBond`&&delete e[s];return i},"oxidation-output":function(e,t){var r=[`{`];return n.concatArray(r,n.go(t,`oxidation`)),r.push(`}`),r},"frac-output":function(e,t){return{type_:`frac-ce`,p1:n.go(t[0]),p2:n.go(t[1])}},"overset-output":function(e,t){return{type_:`overset`,p1:n.go(t[0]),p2:n.go(t[1])}},"underset-output":function(e,t){return{type_:`underset`,p1:n.go(t[0]),p2:n.go(t[1])}},"underbrace-output":function(e,t){return{type_:`underbrace`,p1:n.go(t[0]),p2:n.go(t[1])}},"color-output":function(e,t){return{type_:`color`,color1:t[0],color2:n.go(t[1])}},"r=":function(e,t){e.r=t},"rdt=":function(e,t){e.rdt=t},"rd=":function(e,t){e.rd=t},"rqt=":function(e,t){e.rqt=t},"rq=":function(e,t){e.rq=t},operator:function(e,t,n){return{type_:`operator`,kind_:n||t}}}},a:{transitions:n.createTransitions({empty:{"*":{}},"1/2$":{0:{action_:`1/2`}},else:{0:{nextState:`1`,revisit:!0}},"$(...)$":{"*":{action_:`tex-math tight`,nextState:`1`}},",":{"*":{action_:{type_:`insert`,option:`commaDecimal`}}},else2:{"*":{action_:`copy`}}}),actions:{}},o:{transitions:n.createTransitions({empty:{"*":{}},"1/2$":{0:{action_:`1/2`}},else:{0:{nextState:`1`,revisit:!0}},letters:{"*":{action_:`rm`}},"\\ca":{"*":{action_:{type_:`insert`,option:`circa`}}},"\\x{}{}|\\x{}|\\x":{"*":{action_:`copy`}},"${(...)}$|$(...)$":{"*":{action_:`tex-math`}},"{(...)}":{"*":{action_:`{text}`}},else2:{"*":{action_:`copy`}}}),actions:{}},text:{transitions:n.createTransitions({empty:{"*":{action_:`output`}},"{...}":{"*":{action_:`text=`}},"${(...)}$|$(...)$":{"*":{action_:`tex-math`}},"\\greek":{"*":{action_:[`output`,`rm`]}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:[`output`,`copy`]}},else:{"*":{action_:`text=`}}}),actions:{output:function(e){if(e.text_){var t={type_:`text`,p1:e.text_};for(var n in e)delete e[n];return t}}}},pq:{transitions:n.createTransitions({empty:{"*":{}},"state of aggregation $":{"*":{action_:`state of aggregation`}},i$:{0:{nextState:`!f`,revisit:!0}},"(KV letters),":{0:{action_:`rm`,nextState:`0`}},formula$:{0:{nextState:`f`,revisit:!0}},"1/2$":{0:{action_:`1/2`}},else:{0:{nextState:`!f`,revisit:!0}},"${(...)}$|$(...)$":{"*":{action_:`tex-math`}},"{(...)}":{"*":{action_:`text`}},"a-z":{f:{action_:`tex-math`}},letters:{"*":{action_:`rm`}},"-9.,9":{"*":{action_:`9,9`}},",":{"*":{action_:{type_:`insert+p1`,option:`comma enumeration S`}}},"\\color{(...)}{(...)}1|\\color(...){(...)}2":{"*":{action_:`color-output`}},"\\color{(...)}0":{"*":{action_:`color0-output`}},"\\ce{(...)}":{"*":{action_:`ce`}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:`copy`}},else2:{"*":{action_:`copy`}}}),actions:{"state of aggregation":function(e,t){return{type_:`state of aggregation subscript`,p1:n.go(t,`o`)}},"color-output":function(e,t){return{type_:`color`,color1:t[0],color2:n.go(t[1],`pq`)}}}},bd:{transitions:n.createTransitions({empty:{"*":{}},x$:{0:{nextState:`!f`,revisit:!0}},formula$:{0:{nextState:`f`,revisit:!0}},else:{0:{nextState:`!f`,revisit:!0}},"-9.,9 no missing 0":{"*":{action_:`9,9`}},".":{"*":{action_:{type_:`insert`,option:`electron dot`}}},"a-z":{f:{action_:`tex-math`}},x:{"*":{action_:{type_:`insert`,option:`KV x`}}},letters:{"*":{action_:`rm`}},"'":{"*":{action_:{type_:`insert`,option:`prime`}}},"${(...)}$|$(...)$":{"*":{action_:`tex-math`}},"{(...)}":{"*":{action_:`text`}},"\\color{(...)}{(...)}1|\\color(...){(...)}2":{"*":{action_:`color-output`}},"\\color{(...)}0":{"*":{action_:`color0-output`}},"\\ce{(...)}":{"*":{action_:`ce`}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:`copy`}},else2:{"*":{action_:`copy`}}}),actions:{"color-output":function(e,t){return{type_:`color`,color1:t[0],color2:n.go(t[1],`bd`)}}}},oxidation:{transitions:n.createTransitions({empty:{"*":{}},"roman numeral":{"*":{action_:`roman-numeral`}},"${(...)}$|$(...)$":{"*":{action_:`tex-math`}},else:{"*":{action_:`copy`}}}),actions:{"roman-numeral":function(e,t){return{type_:`roman numeral`,p1:t||``}}}},"tex-math":{transitions:n.createTransitions({empty:{"*":{action_:`output`}},"\\ce{(...)}":{"*":{action_:[`output`,`ce`]}},"{...}|\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:`o=`}},else:{"*":{action_:`o=`}}}),actions:{output:function(e){if(e.o){var t={type_:`tex-math`,p1:e.o};for(var n in e)delete e[n];return t}}}},"tex-math tight":{transitions:n.createTransitions({empty:{"*":{action_:`output`}},"\\ce{(...)}":{"*":{action_:[`output`,`ce`]}},"{...}|\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:`o=`}},"-|+":{"*":{action_:`tight operator`}},else:{"*":{action_:`o=`}}}),actions:{"tight operator":function(e,t){e.o=(e.o||``)+`{`+t+`}`},output:function(e){if(e.o){var t={type_:`tex-math`,p1:e.o};for(var n in e)delete e[n];return t}}}},"9,9":{transitions:n.createTransitions({empty:{"*":{}},",":{"*":{action_:`comma`}},else:{"*":{action_:`copy`}}}),actions:{comma:function(){return{type_:`commaDecimal`}}}},pu:{transitions:n.createTransitions({empty:{"*":{action_:`output`}},space$:{"*":{action_:[`output`,`space`]}},"{[(|)]}":{"0|a":{action_:`copy`}},"(-)(9)^(-9)":{0:{action_:`number^`,nextState:`a`}},"(-)(9.,9)(e)(99)":{0:{action_:`enumber`,nextState:`a`}},space:{"0|a":{}},"pm-operator":{"0|a":{action_:{type_:`operator`,option:`\\pm`},nextState:`0`}},operator:{"0|a":{action_:`copy`,nextState:`0`}},"//":{d:{action_:`o=`,nextState:`/`}},"/":{d:{action_:`o=`,nextState:`/`}},"{...}|else":{"0|d":{action_:`d=`,nextState:`d`},a:{action_:[`space`,`d=`],nextState:`d`},"/|q":{action_:`q=`,nextState:`q`}}}),actions:{enumber:function(e,t){var r=[];return t[0]===`+-`||t[0]===`+/-`?r.push(`\\pm `):t[0]&&r.push(t[0]),t[1]&&(n.concatArray(r,n.go(t[1],`pu-9,9`)),t[2]&&(t[2].match(/[,.]/)?n.concatArray(r,n.go(t[2],`pu-9,9`)):r.push(t[2])),t[3]=t[4]||t[3],t[3]&&(t[3]=t[3].trim(),t[3]===`e`||t[3].substr(0,1)===`*`?r.push({type_:`cdot`}):r.push({type_:`times`}))),t[3]&&r.push(`10^{`+t[5]+`}`),r},"number^":function(e,t){var r=[];return t[0]===`+-`||t[0]===`+/-`?r.push(`\\pm `):t[0]&&r.push(t[0]),n.concatArray(r,n.go(t[1],`pu-9,9`)),r.push(`^{`+t[2]+`}`),r},operator:function(e,t,n){return{type_:`operator`,kind_:n||t}},space:function(){return{type_:`pu-space-1`}},output:function(e){var t,r=n.patterns.match_(`{(...)}`,e.d||``);r&&r.remainder===``&&(e.d=r.match_);var i=n.patterns.match_(`{(...)}`,e.q||``);if(i&&i.remainder===``&&(e.q=i.match_),e.d&&(e.d=e.d.replace(/\u00B0C|\^oC|\^{o}C/g,`{}^{\\circ}C`),e.d=e.d.replace(/\u00B0F|\^oF|\^{o}F/g,`{}^{\\circ}F`)),e.q){e.q=e.q.replace(/\u00B0C|\^oC|\^{o}C/g,`{}^{\\circ}C`),e.q=e.q.replace(/\u00B0F|\^oF|\^{o}F/g,`{}^{\\circ}F`);var a={d:n.go(e.d,`pu`),q:n.go(e.q,`pu`)};e.o===`//`?t={type_:`pu-frac`,p1:a.d,p2:a.q}:(t=a.d,a.d.length>1||a.q.length>1?t.push({type_:` / `}):t.push({type_:`/`}),n.concatArray(t,a.q))}else t=n.go(e.d,`pu-2`);for(var o in e)delete e[o];return t}}},"pu-2":{transitions:n.createTransitions({empty:{"*":{action_:`output`}},"*":{"*":{action_:[`output`,`cdot`],nextState:`0`}},"\\x":{"*":{action_:`rm=`}},space:{"*":{action_:[`output`,`space`],nextState:`0`}},"^{(...)}|^(-1)":{1:{action_:`^(-1)`}},"-9.,9":{0:{action_:`rm=`,nextState:`0`},1:{action_:`^(-1)`,nextState:`0`}},"{...}|else":{"*":{action_:`rm=`,nextState:`1`}}}),actions:{cdot:function(){return{type_:`tight cdot`}},"^(-1)":function(e,t){e.rm+=`^{`+t+`}`},space:function(){return{type_:`pu-space-2`}},output:function(e){var t=[];if(e.rm){var r=n.patterns.match_(`{(...)}`,e.rm||``);t=r&&r.remainder===``?n.go(r.match_,`pu`):{type_:`rm`,p1:e.rm}}for(var i in e)delete e[i];return t}}},"pu-9,9":{transitions:n.createTransitions({empty:{0:{action_:`output-0`},o:{action_:`output-o`}},",":{0:{action_:[`output-0`,`comma`],nextState:`o`}},".":{0:{action_:[`output-0`,`copy`],nextState:`o`}},else:{"*":{action_:`text=`}}}),actions:{comma:function(){return{type_:`commaDecimal`}},"output-0":function(e){var t=[];if(e.text_=e.text_||``,e.text_.length>4){var n=e.text_.length%3;n===0&&(n=3);for(var r=e.text_.length-3;r>0;r-=3)t.push(e.text_.substr(r,3)),t.push({type_:`1000 separator`});t.push(e.text_.substr(0,n)),t.reverse()}else t.push(e.text_);for(var i in e)delete e[i];return t},"output-o":function(e){var t=[];if(e.text_=e.text_||``,e.text_.length>4){for(var n=e.text_.length-3,r=0;r<n;r+=3)t.push(e.text_.substr(r,3)),t.push({type_:`1000 separator`});t.push(e.text_.substr(r))}else t.push(e.text_);for(var i in e)delete e[i];return t}}}};var r={go:function(e,t){if(!e)return``;for(var n=``,i=!1,a=0;a<e.length;a++){var o=e[a];typeof o==`string`?n+=o:(n+=r._go2(o),o.type_===`1st-level escape`&&(i=!0))}return!t&&!i&&n&&(n=`{`+n+`}`),n},_goInner:function(e){return e&&r.go(e,!0)},_go2:function(e){var t;switch(e.type_){case`chemfive`:t=``;var n={a:r._goInner(e.a),b:r._goInner(e.b),p:r._goInner(e.p),o:r._goInner(e.o),q:r._goInner(e.q),d:r._goInner(e.d)};n.a&&(n.a.match(/^[+\-]/)&&(n.a=`{`+n.a+`}`),t+=n.a+`\\,`),(n.b||n.p)&&(t+=`{\\vphantom{X}}`,t+=`^{\\hphantom{`+(n.b||``)+`}}_{\\hphantom{`+(n.p||``)+`}}`,t+=`{\\vphantom{X}}`,t+=`^{\\smash[t]{\\vphantom{2}}\\mathllap{`+(n.b||``)+`}}`,t+=`_{\\vphantom{2}\\mathllap{\\smash[t]{`+(n.p||``)+`}}}`),n.o&&(n.o.match(/^[+\-]/)&&(n.o=`{`+n.o+`}`),t+=n.o),e.dType===`kv`?((n.d||n.q)&&(t+=`{\\vphantom{X}}`),n.d&&(t+=`^{`+n.d+`}`),n.q&&(t+=`_{\\smash[t]{`+n.q+`}}`)):e.dType===`oxidation`?(n.d&&(t+=`{\\vphantom{X}}`,t+=`^{`+n.d+`}`),n.q&&(t+=`{\\vphantom{X}}`,t+=`_{\\smash[t]{`+n.q+`}}`)):(n.q&&(t+=`{\\vphantom{X}}`,t+=`_{\\smash[t]{`+n.q+`}}`),n.d&&(t+=`{\\vphantom{X}}`,t+=`^{`+n.d+`}`));break;case`rm`:t=`\\mathrm{`+e.p1+`}`;break;case`text`:e.p1.match(/[\^_]/)?(e.p1=e.p1.replace(` `,`~`).replace(`-`,`\\text{-}`),t=`\\mathrm{`+e.p1+`}`):t=`\\text{`+e.p1+`}`;break;case`roman numeral`:t=`\\mathrm{`+e.p1+`}`;break;case`state of aggregation`:t=`\\mskip2mu `+r._goInner(e.p1);break;case`state of aggregation subscript`:t=`\\mskip1mu `+r._goInner(e.p1);break;case`bond`:if(t=r._getBond(e.kind_),!t)throw[`MhchemErrorBond`,`mhchem Error. Unknown bond type (`+e.kind_+`)`];break;case`frac`:var i=`\\frac{`+e.p1+`}{`+e.p2+`}`;t=`\\mathchoice{\\textstyle`+i+`}{`+i+`}{`+i+`}{`+i+`}`;break;case`pu-frac`:var a=`\\frac{`+r._goInner(e.p1)+`}{`+r._goInner(e.p2)+`}`;t=`\\mathchoice{\\textstyle`+a+`}{`+a+`}{`+a+`}{`+a+`}`;break;case`tex-math`:t=e.p1+` `;break;case`frac-ce`:t=`\\frac{`+r._goInner(e.p1)+`}{`+r._goInner(e.p2)+`}`;break;case`overset`:t=`\\overset{`+r._goInner(e.p1)+`}{`+r._goInner(e.p2)+`}`;break;case`underset`:t=`\\underset{`+r._goInner(e.p1)+`}{`+r._goInner(e.p2)+`}`;break;case`underbrace`:t=`\\underbrace{`+r._goInner(e.p1)+`}_{`+r._goInner(e.p2)+`}`;break;case`color`:t=`{\\color{`+e.color1+`}{`+r._goInner(e.color2)+`}}`;break;case`color0`:t=`\\color{`+e.color+`}`;break;case`arrow`:var o={rd:r._goInner(e.rd),rq:r._goInner(e.rq)},s=`\\x`+r._getArrow(e.r);o.rq&&(s+=`[{`+o.rq+`}]`),o.rd?s+=`{`+o.rd+`}`:s+=`{}`,t=s;break;case`operator`:t=r._getOperator(e.kind_);break;case`1st-level escape`:t=e.p1+` `;break;case`space`:t=` `;break;case`entitySkip`:t=`~`;break;case`pu-space-1`:t=`~`;break;case`pu-space-2`:t=`\\mkern3mu `;break;case`1000 separator`:t=`\\mkern2mu `;break;case`commaDecimal`:t=`{,}`;break;case`comma enumeration L`:t=`{`+e.p1+`}\\mkern6mu `;break;case`comma enumeration M`:t=`{`+e.p1+`}\\mkern3mu `;break;case`comma enumeration S`:t=`{`+e.p1+`}\\mkern1mu `;break;case`hyphen`:t=`\\text{-}`;break;case`addition compound`:t=`\\,{\\cdot}\\,`;break;case`electron dot`:t=`\\mkern1mu \\bullet\\mkern1mu `;break;case`KV x`:t=`{\\times}`;break;case`prime`:t=`\\prime `;break;case`cdot`:t=`\\cdot `;break;case`tight cdot`:t=`\\mkern1mu{\\cdot}\\mkern1mu `;break;case`times`:t=`\\times `;break;case`circa`:t=`{\\sim}`;break;case`^`:t=`uparrow`;break;case`v`:t=`downarrow`;break;case`ellipsis`:t=`\\ldots `;break;case`/`:t=`/`;break;case` / `:t=`\\,/\\,`;break;default:throw[`MhchemBugT`,`mhchem bug T. Please report.`]}return t},_getArrow:function(e){switch(e){case`->`:return`rightarrow`;case`→`:return`rightarrow`;case`⟶`:return`rightarrow`;case`<-`:return`leftarrow`;case`<->`:return`leftrightarrow`;case`<-->`:return`rightleftarrows`;case`<=>`:return`rightleftharpoons`;case`⇌`:return`rightleftharpoons`;case`<=>>`:return`rightequilibrium`;case`<<=>`:return`leftequilibrium`;default:throw[`MhchemBugT`,`mhchem bug T. Please report.`]}},_getBond:function(e){switch(e){case`-`:return`{-}`;case`1`:return`{-}`;case`=`:return`{=}`;case`2`:return`{=}`;case`#`:return`{\\equiv}`;case`3`:return`{\\equiv}`;case`~`:return`{\\tripledash}`;case`~-`:return`{\\mathrlap{\\raisebox{-.1em}{$-$}}\\raisebox{.1em}{$\\tripledash$}}`;case`~=`:return`{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}`;case`~--`:return`{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$\\tripledash$}}-}`;case`-~-`:return`{\\mathrlap{\\raisebox{-.2em}{$-$}}\\mathrlap{\\raisebox{.2em}{$-$}}\\tripledash}`;case`...`:return`{{\\cdot}{\\cdot}{\\cdot}}`;case`....`:return`{{\\cdot}{\\cdot}{\\cdot}{\\cdot}}`;case`->`:return`{\\rightarrow}`;case`<-`:return`{\\leftarrow}`;case`<`:return`{<}`;case`>`:return`{>}`;default:throw[`MhchemBugT`,`mhchem bug T. Please report.`]}},_getOperator:function(e){switch(e){case`+`:return` {}+{} `;case`-`:return` {}-{} `;case`=`:return` {}={} `;case`<`:return` {}<{} `;case`>`:return` {}>{} `;case`<<`:return` {}\\ll{} `;case`>>`:return` {}\\gg{} `;case`\\pm`:return` {}\\pm{} `;case`\\approx`:return` {}\\approx{} `;case`$\\approx$`:return` {}\\approx{} `;case`v`:return` \\downarrow{} `;case`(v)`:return` \\downarrow{} `;case`^`:return` \\uparrow{} `;case`(^)`:return` \\uparrow{} `;default:throw[`MhchemBugT`,`mhchem bug T. Please report.`]}}};
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="zh-CN" data-theme="mono">
|
|
3
|
+
<head>
|
|
4
|
+
<script>window.__CELESTEA_BUILD__ = {"version":"2.7.1","commits":0,"sha":"ac7ab07","dirty":false,"buildTime":"2026-09-19T06:07:36.962Z"};</script>
|
|
5
|
+
|
|
6
|
+
<meta charset="utf-8" />
|
|
7
|
+
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
|
8
|
+
<title>Celestea Studio</title>
|
|
9
|
+
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Crect width='16' height='16' rx='3' fill='%230d0f12'/%3E%3Crect x='5' y='5' width='6' height='6' rx='1.2' fill='none' stroke='%237f93b0' stroke-width='1.4'/%3E%3C/svg%3E" />
|
|
10
|
+
<script type="module" crossorigin src="/assets/index-Bngs7gUm.js"></script>
|
|
11
|
+
<link rel="stylesheet" crossorigin href="/assets/index-Bu6ci_rN.css">
|
|
12
|
+
</head>
|
|
13
|
+
<body>
|
|
14
|
+
<div id="app">
|
|
15
|
+
|
|
16
|
+
<!-- ===================== 顶栏 ===================== -->
|
|
17
|
+
<header id="topbar">
|
|
18
|
+
<div class="topbar-left">
|
|
19
|
+
<span class="logo" aria-hidden="true"><span></span></span>
|
|
20
|
+
<span class="brand">Celestea Studio</span>
|
|
21
|
+
<span class="brand-tag" id="brandVersion" data-i18n-title="shell.topbar.versionTitle">Studio v…</span>
|
|
22
|
+
</div>
|
|
23
|
+
<div class="topbar-right">
|
|
24
|
+
<button id="btnWorkbench" class="btn btn-quiet btn-workbench" data-i18n-title="shell.topbar.workbenchTitle" data-i18n-aria-label="shell.topbar.workbenchAria">
|
|
25
|
+
<svg viewBox="0 0 16 16" width="14" height="14" aria-hidden="true" focusable="false"><rect x="1.5" y="2.5" width="13" height="11" rx="1.5" fill="none" stroke="currentColor" stroke-width="1.3"></rect><path d="M6.5 2.5v11" fill="none" stroke="currentColor" stroke-width="1.3"></path><path d="M8.5 5.5h4M8.5 8h4" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round"></path></svg>
|
|
26
|
+
</button>
|
|
27
|
+
<button id="btnTheme" class="btn btn-quiet btn-theme" title="主题(黑白 · 唯一主题)">黑白</button>
|
|
28
|
+
<button id="btnSidebar" class="btn btn-quiet" title="收起/展开左侧面板">收起</button>
|
|
29
|
+
<button id="btnConfig" class="btn btn-quiet" data-i18n="shell.topbar.config" data-i18n-title="shell.topbar.configTitle">配置</button>
|
|
30
|
+
</div>
|
|
31
|
+
</header>
|
|
32
|
+
|
|
33
|
+
<!-- ===================== 主体 ===================== -->
|
|
34
|
+
<div id="layout">
|
|
35
|
+
|
|
36
|
+
<!-- ---------- 左侧面板 ---------- -->
|
|
37
|
+
<aside id="sidebar">
|
|
38
|
+
|
|
39
|
+
<section class="side-sec" id="sec-sessions">
|
|
40
|
+
<header class="side-sec-head">
|
|
41
|
+
<h3>工作区 · 会话</h3>
|
|
42
|
+
<span class="sec-note" id="sessionCount">…</span>
|
|
43
|
+
</header>
|
|
44
|
+
<div class="side-body" id="sessionTree"></div>
|
|
45
|
+
</section>
|
|
46
|
+
|
|
47
|
+
<section class="side-sec side-sec-foot">
|
|
48
|
+
<div class="side-note" id="sideFoot">—</div>
|
|
49
|
+
</section>
|
|
50
|
+
</aside>
|
|
51
|
+
|
|
52
|
+
<!-- ---------- 侧栏/主区分隔条(可拖动调宽 · 双击复位) ---------- -->
|
|
53
|
+
<div id="sidebarResizer" class="sidebar-resizer" role="separator" aria-orientation="vertical" title="拖动调整侧栏宽度 · 双击复位"></div>
|
|
54
|
+
|
|
55
|
+
<!-- W765:移动端会话抽屉的遮罩(点它关闭抽屉;桌面端恒为 .hidden,不参与布局) -->
|
|
56
|
+
<div id="sidebarScrim" class="sidebar-scrim hidden" aria-hidden="true"></div>
|
|
57
|
+
|
|
58
|
+
<!-- ---------- 主区 ---------- -->
|
|
59
|
+
<main id="main">
|
|
60
|
+
<!-- W514:多会话视图宿主——每个会话一个 .sess-pane 容器(hidden 切换,零重渲染) -->
|
|
61
|
+
<div id="messages" tabindex="-1"></div>
|
|
62
|
+
|
|
63
|
+
<!-- W867(W871 修正):.chat-shell = **底部那一条 composer** 的圆角外框 ——
|
|
64
|
+
statusline / #statusbar / #inputbar 是一体的发送栏(同一表面色 + 发丝线 +
|
|
65
|
+
--r-shell 圆角)。#messages 在本层**之外**:保持屏幕边缘、保持唯一滚动容器
|
|
66
|
+
.sess-pane 的几何逐像素不变(W867 曾把消息区一起框住)。
|
|
67
|
+
本层不设 overflow:hidden —— 三个 .sl-popup 都从 statusline 向上弹出
|
|
68
|
+
(bottom: calc(100% - 2px)),裁剪会切掉面板;圆角改由首/末子元素各自带
|
|
69
|
+
(子元素自带不透明的 --composer-bg,不带角会盖住外框的圆角)。 -->
|
|
70
|
+
<section class="chat-shell">
|
|
71
|
+
<!-- ---------- statusline(模型 / 上下文环 / 吞吐,发送栏正上方) ---------- -->
|
|
72
|
+
<div id="statusline" class="statusline" title="上下文占用 · 模型 · 思考强度 · 吞吐 · 缓存命中">
|
|
73
|
+
<div class="sl-row sl-row-main">
|
|
74
|
+
<span class="sl-ring" id="slRing" role="button" tabindex="0" aria-haspopup="dialog" title="上下文占用">
|
|
75
|
+
<svg viewBox="0 0 14 14" width="14" height="14" aria-hidden="true">
|
|
76
|
+
<circle class="sl-ring-track" cx="7" cy="7" r="5.5" transform="rotate(-90 7 7)"></circle>
|
|
77
|
+
<circle class="sl-ring-prog" cx="7" cy="7" r="5.5" transform="rotate(-90 7 7)"></circle>
|
|
78
|
+
</svg>
|
|
79
|
+
</span>
|
|
80
|
+
<span class="sl-ctx" id="slCtx">—/—</span>
|
|
81
|
+
<span class="sl-sep">·</span>
|
|
82
|
+
<button class="sl-model" id="slModel" title="当前模型(点击快速切换)">—</button>
|
|
83
|
+
<span class="sl-sep">·</span>
|
|
84
|
+
<button class="sl-effort" id="slEffort" title="思考强度(点击快速切换)">—</button>
|
|
85
|
+
<span class="sl-sep">·</span>
|
|
86
|
+
<!-- W788:会话工作方式(只读徽标「标准」/「执行」;点击弹层切换)。
|
|
87
|
+
显隐真源 = statusline/mode.ts —— 快照里没有 mode(老服务)时保持 .hidden。 -->
|
|
88
|
+
<button class="sl-mode hidden" id="slMode" type="button" title="工作方式(点击切换)"></button>
|
|
89
|
+
<!-- W847:右端集群(权限盾牌 / 车道切换 / 停止 / 提示)包进 .sl-end。
|
|
90
|
+
flex:0 0 auto + margin-left:auto 取代原 .sl-spacer:集群恒贴右缘,
|
|
91
|
+
行超宽时由 .sl-row-main 的 overflow 先裁左边的用量/模型信息,
|
|
92
|
+
取消键永不被挤出屏幕。 -->
|
|
93
|
+
<div class="sl-end">
|
|
94
|
+
<!-- W858:会话权限**档位**徽标(基线 preset;与右邻的 W701 盾牌是两回事:
|
|
95
|
+
盾牌管临时能力放宽,徽标管会话档位)。显隐真源 = statusline/permission.ts
|
|
96
|
+
—— 无活动会话或该部署没有档位端点时保持 .hidden(不置灰报错)。 -->
|
|
97
|
+
<button id="slPerm" class="sl-perm hidden" type="button" title="会话权限档位" aria-label="会话权限档位">
|
|
98
|
+
<svg class="sl-perm-icon" viewBox="0 0 16 16" width="10" height="10" aria-hidden="true"><path d="M5.4 7.2V5.5a2.6 2.6 0 0 1 5.2 0v1.7" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round"></path><rect x="3.6" y="7.2" width="8.8" height="6.2" rx="1.5" fill="none" stroke="currentColor" stroke-width="1.3"></rect></svg>
|
|
99
|
+
<span class="sl-perm-badge" id="slPermBadge"></span>
|
|
100
|
+
</button>
|
|
101
|
+
<!-- W701:本会话权限盾牌(三态:未授予 / 已授予 / 即将失效)。
|
|
102
|
+
显隐真源 = ui/grants.ts —— 能力位未就绪时保持 .hidden(入口隐藏,不置灰报错)。 -->
|
|
103
|
+
<button id="slGrant" class="sl-grant hidden" type="button" title="本会话权限:默认(仅工作区,无网络)" aria-label="本会话权限">
|
|
104
|
+
<svg viewBox="0 0 16 16" width="11" height="11" aria-hidden="true"><path d="M8 1.6 13.2 3.4v4.2c0 3.1-2.1 5.6-5.2 6.8-3.1-1.2-5.2-3.7-5.2-6.8V3.4z"></path></svg>
|
|
105
|
+
<span class="sl-grant-badge" id="slGrantBadge"></span>
|
|
106
|
+
<span class="sl-grant-dot" aria-hidden="true"></span>
|
|
107
|
+
</button>
|
|
108
|
+
<!-- W846:运行态的提交车道切换(插话/排队)从输入栏移到本行右端,与停止键同组。
|
|
109
|
+
显隐真源仍是 ui/inputbar.setInputMode。W847:≤640 只留内联箭头图标
|
|
110
|
+
(文字视觉隐藏、无障碍名保留),不占整块宽度,不为它牺牲取消键。 -->
|
|
111
|
+
<button id="btnMode" class="sl-mode-btn hidden" type="button" title="提交车道:插话 / 排队">
|
|
112
|
+
<svg class="sl-mode-icon" viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><path d="M2.5 5.5h10M10 3l2.5 2.5L10 8M13.5 10.5h-10M6 8l-2.5 2.5L6 13" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"></path></svg>
|
|
113
|
+
<span class="sl-mode-label">插话</span>
|
|
114
|
+
</button>
|
|
115
|
+
<!-- W302:运行中显示的正方形停止按钮(取消当前轮次;显隐真源 = ui/inputbar.setBusy) -->
|
|
116
|
+
<button id="slStop" class="sl-stop hidden" type="button" title="停止本轮生成" aria-label="停止本轮生成">
|
|
117
|
+
<svg viewBox="0 0 12 12" width="10" height="10" aria-hidden="true"><rect x="1.5" y="1.5" width="9" height="9" rx="1" fill="currentColor"></rect></svg>
|
|
118
|
+
</button>
|
|
119
|
+
<button id="slGoal" class="sl-goal hidden" type="button" title="当前目标" aria-label="当前目标">
|
|
120
|
+
<span class="sl-goal-badge" id="slGoalBadge"></span>
|
|
121
|
+
</button>
|
|
122
|
+
<span class="sl-hint" id="slHint"></span>
|
|
123
|
+
</div>
|
|
124
|
+
</div>
|
|
125
|
+
<div class="sl-row sl-row-sub">
|
|
126
|
+
<!-- W514 聚焦会话条(会话名 / worker 标记 / 运行态 / 其它运行中会话入口)。
|
|
127
|
+
W790:并入本行 —— 不再独占 #messages 上方的一行;行高由 .sl-row 的
|
|
128
|
+
min-height 决定,条内每个元素 ≤15px,因此并入不新增 statusline 行高。 -->
|
|
129
|
+
<div id="sessionBar" class="session-bar" title="当前聚焦会话 · 可切换其它运行中的会话"></div>
|
|
130
|
+
<span class="sl-sep">·</span>
|
|
131
|
+
<span class="sl-tps" id="slTps">— tok/s</span>
|
|
132
|
+
<span class="sl-sep">·</span>
|
|
133
|
+
<span class="sl-cache" id="slCache" title="缓存命中:最近一次请求">缓存 —</span>
|
|
134
|
+
<span class="sl-sep">·</span>
|
|
135
|
+
<span class="sl-steps" id="slSteps">— 步</span>
|
|
136
|
+
</div>
|
|
137
|
+
</div>
|
|
138
|
+
|
|
139
|
+
<footer id="statusbar">
|
|
140
|
+
<div class="sb-left">
|
|
141
|
+
<span class="dot" id="statusDot"></span>
|
|
142
|
+
<span id="statusText">连接中…</span>
|
|
143
|
+
</div>
|
|
144
|
+
<div class="sb-right">
|
|
145
|
+
<span id="statusTurn">第 — 轮</span>
|
|
146
|
+
<span class="sb-sep">·</span>
|
|
147
|
+
<span id="statusTime">00:00</span>
|
|
148
|
+
</div>
|
|
149
|
+
</footer>
|
|
150
|
+
|
|
151
|
+
<div id="inputbar">
|
|
152
|
+
<!-- W847:.input-box 承担原 #input 的 flex 槽位;图片入口 #btnAttach 由 JS 注入
|
|
153
|
+
到框内(绝对定位、内联回形针 SVG),出流 ⇒ 不改变本行宽度。 -->
|
|
154
|
+
<!-- W867(追加):附件收纳展示夹 —— 由 ui/inputbar.ts 注入到 .input-box 内,
|
|
155
|
+
**绝对定位浮在输入框上方**(出流)⇒ 展开/收起都不改变 #input 宽度。 -->
|
|
156
|
+
<div class="input-box">
|
|
157
|
+
<textarea id="input" rows="2" placeholder="输入消息,Enter 发送,Shift+Enter 换行" spellcheck="false"></textarea>
|
|
158
|
+
</div>
|
|
159
|
+
<!-- W846:运行态不再向输入栏追加按钮 —— 车道切换(#btnMode)已移到 statusline,
|
|
160
|
+
取消由 statusline 的 #slStop 单点承担(两者本就共用 chat.ts requestCancel)。
|
|
161
|
+
W847:.input-side 恒为 [发送],#input 宽度逐像素不变。 -->
|
|
162
|
+
<div class="input-side">
|
|
163
|
+
<button id="btnSend" class="btn btn-accent">发送</button>
|
|
164
|
+
</div>
|
|
165
|
+
</div>
|
|
166
|
+
</section>
|
|
167
|
+
</main>
|
|
168
|
+
</div>
|
|
169
|
+
</div>
|
|
170
|
+
|
|
171
|
+
<!-- ===================== 通用设置页(左导航 + 右内容) ===================== -->
|
|
172
|
+
<div id="settingsPage" class="settings-page hidden" role="dialog" aria-modal="true" aria-labelledby="settingsTitle">
|
|
173
|
+
<div class="settings-shell">
|
|
174
|
+
<header class="settings-head">
|
|
175
|
+
<h3 id="settingsTitle">通用设置</h3>
|
|
176
|
+
<div class="settings-actions">
|
|
177
|
+
<button class="btn-mini" id="btnSettingsReload" title="重新载入当前页内容">重新载入</button>
|
|
178
|
+
<button class="btn-mini" id="btnSettingsClose">关闭</button>
|
|
179
|
+
</div>
|
|
180
|
+
</header>
|
|
181
|
+
<div class="settings-layout">
|
|
182
|
+
<nav class="settings-nav" aria-label="设置导航">
|
|
183
|
+
<!-- i18n:文案由 i18n/settings.ts 的 applyI18n 按 data-i18n 填充(不写死中文) -->
|
|
184
|
+
<button class="settings-nav-item" type="button" data-page="general" data-i18n="settings.general.title"></button>
|
|
185
|
+
<button class="settings-nav-item active" type="button" data-page="config">通用配置</button>
|
|
186
|
+
<button class="settings-nav-item" type="button" data-page="tools">工具</button>
|
|
187
|
+
<button class="settings-nav-item" type="button" data-page="archive">归档会话</button>
|
|
188
|
+
<button class="settings-nav-item" type="button" data-page="providers">模型提供商</button>
|
|
189
|
+
<button class="settings-nav-item" type="button" data-page="prompts">提示词</button>
|
|
190
|
+
<button class="settings-nav-item" type="button" data-page="permissions">权限预设</button>
|
|
191
|
+
<button class="settings-nav-item" type="button" data-page="plugins">插件</button>
|
|
192
|
+
</nav>
|
|
193
|
+
<div class="settings-content">
|
|
194
|
+
<section class="settings-pane" data-pane="general">
|
|
195
|
+
<header class="settings-pane-head">
|
|
196
|
+
<h4 data-i18n="settings.general.title"></h4>
|
|
197
|
+
<span class="settings-sec-note" data-i18n="settings.general.note"></span>
|
|
198
|
+
</header>
|
|
199
|
+
<div class="settings-pane-body" id="settingsGeneral"></div>
|
|
200
|
+
</section>
|
|
201
|
+
<section class="settings-pane active" data-pane="config">
|
|
202
|
+
<header class="settings-pane-head">
|
|
203
|
+
<h4>运行配置</h4>
|
|
204
|
+
<span class="settings-sec-note">保存后下一轮生效</span>
|
|
205
|
+
</header>
|
|
206
|
+
<div class="settings-pane-body" id="settingsConfig"></div>
|
|
207
|
+
<div class="cfg-hintline" id="settingsHint"></div>
|
|
208
|
+
</section>
|
|
209
|
+
<section class="settings-pane" data-pane="tools">
|
|
210
|
+
<header class="settings-pane-head">
|
|
211
|
+
<h4>工具列表</h4>
|
|
212
|
+
<span class="sec-note" id="toolsCount">…</span>
|
|
213
|
+
</header>
|
|
214
|
+
<div class="settings-pane-body" id="settingsTools"></div>
|
|
215
|
+
</section>
|
|
216
|
+
<section class="settings-pane" data-pane="archive">
|
|
217
|
+
<header class="settings-pane-head">
|
|
218
|
+
<h4>归档会话管理</h4>
|
|
219
|
+
<span class="sec-note" id="settingsArchiveCount">…</span>
|
|
220
|
+
</header>
|
|
221
|
+
<div class="settings-pane-body" id="settingsArchive"></div>
|
|
222
|
+
<div class="cfg-hintline" id="settingsArchiveHint"></div>
|
|
223
|
+
</section>
|
|
224
|
+
<section class="settings-pane" data-pane="providers">
|
|
225
|
+
<header class="settings-pane-head">
|
|
226
|
+
<h4>模型提供商</h4>
|
|
227
|
+
<button class="btn-mini" id="btnAddProvider" type="button">添加提供商</button>
|
|
228
|
+
</header>
|
|
229
|
+
<div class="settings-pane-body" id="settingsProviders"></div>
|
|
230
|
+
</section>
|
|
231
|
+
<section class="settings-pane" data-pane="prompts">
|
|
232
|
+
<header class="settings-pane-head">
|
|
233
|
+
<h4>提示词</h4>
|
|
234
|
+
<button class="btn-mini" id="btnNewPrompt" type="button">新建提示词</button>
|
|
235
|
+
</header>
|
|
236
|
+
<div class="settings-pane-body">
|
|
237
|
+
<div id="promptsWrap"></div>
|
|
238
|
+
<div id="settingsPrompts"></div>
|
|
239
|
+
</div>
|
|
240
|
+
</section>
|
|
241
|
+
<section class="settings-pane" data-pane="permissions">
|
|
242
|
+
<header class="settings-pane-head">
|
|
243
|
+
<h4>权限预设</h4>
|
|
244
|
+
<span class="settings-sec-note">默认 Full Access;可自组合预设,运行时封顶会收窄</span>
|
|
245
|
+
</header>
|
|
246
|
+
<div class="settings-pane-body" id="settingsPermissions"></div>
|
|
247
|
+
</section>
|
|
248
|
+
<section class="settings-pane" data-pane="plugins">
|
|
249
|
+
<header class="settings-pane-head">
|
|
250
|
+
<h4>插件</h4>
|
|
251
|
+
<span class="settings-sec-note">客户端插件即时生效;服务端插件只读</span>
|
|
252
|
+
</header>
|
|
253
|
+
<div class="settings-pane-body" id="settingsPlugins"></div>
|
|
254
|
+
</section>
|
|
255
|
+
</div>
|
|
256
|
+
</div>
|
|
257
|
+
</div>
|
|
258
|
+
</div>
|
|
259
|
+
|
|
260
|
+
</body>
|
|
261
|
+
</html>
|