micro-models-agent 2.29.1 → 2.36.0
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/CHANGELOG.md +204 -2
- package/README.md +15 -0
- package/dist/assets/app.js +1 -1
- package/dist/assets/index.html +56 -16
- package/dist/assets/js/core/store/feed.js +1 -1
- package/dist/assets/js/core/store/index.js +1 -1
- package/dist/assets/js/dom.js +1 -1
- package/dist/assets/js/feed/core.js +1 -1
- package/dist/assets/js/feed/sidebar.js +1 -1
- package/dist/assets/js/feed/stream.js +1 -1
- package/dist/assets/js/feed/turn.js +4 -4
- package/dist/assets/js/footer.js +1 -0
- package/dist/assets/js/loader.js +1 -0
- package/dist/assets/js/md-normalize.js +5 -0
- package/dist/assets/js/session/composer.js +1 -1
- package/dist/assets/js/session/tabs.js +1 -1
- package/dist/assets/js/settings/controls.js +1 -1
- package/dist/assets/js/settings/write.js +1 -1
- package/dist/assets/js/sidebar/core.js +1 -1
- package/dist/assets/js/sidebar/drawer.js +1 -0
- package/dist/assets/js/sidebar/files/chrome.js +1 -0
- package/dist/assets/js/sidebar/files/constants.js +1 -0
- package/dist/assets/js/sidebar/files/crumbs.js +1 -0
- package/dist/assets/js/sidebar/files/history.js +1 -0
- package/dist/assets/js/sidebar/files/keys.js +1 -0
- package/dist/assets/js/sidebar/files/split.js +1 -0
- package/dist/assets/js/sidebar/files/tree.js +1 -0
- package/dist/assets/js/sidebar/files/view.js +1 -0
- package/dist/assets/js/sidebar/files.js +1 -1
- package/dist/assets/js/sidebar/state.js +1 -1
- package/dist/assets/js/sidebar/trace.js +4 -4
- package/dist/assets/js/sidebar.js +1 -1
- package/dist/assets/js/state-sync.js +1 -1
- package/dist/assets/md.js +1 -1
- package/dist/assets/setup.js +2 -2
- package/dist/assets/styles.css +1 -1
- package/dist/i18n/en.json +1 -1
- package/dist/i18n/ru.json +1 -1
- package/dist/main.js +370 -355
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{el as
|
|
2
|
-
`).map(s=>s.trim()).find(s=>s.length>0)||"").slice(0,160):A(e.args)}function
|
|
3
|
-
… [truncated from `+i.textEntry.chars+" chars]"),
|
|
4
|
-
… [truncated from `+e.length+" chars]"}export function renderDetail(e){const t=i.detailGlyph,s=i.detailTitle,n=i.detailBody,
|
|
1
|
+
import{el as l}from"../dom.js";import{api as v}from"../api.js";import{t as a}from"../i18n.js";import{labelOf as B,categoryOf as S,argText as A,formatMs as I}from"../format.js";import{createFace as q,setFaceState as M,toolState as L}from"../loader.js";import{sb as i,paneEl as R,TRACE_CAP as j,MAX_OUTPUT_CHARS as x}from"./state.js";let w=null;export function initTraceFace(){const e=document.querySelector(".trc-face");e&&(w=q("idle","sm"),e.replaceChildren(w))}export function setTraceFace(e){M(w,e)}function P(e,t){switch(e){case"tool_start":case"tool_fail":case"tool":return L(typeof t.name=="string"?t.name:"");case"phase":return t.phase==="composing"?"type":t.phase==="tool"?"run":"think";case"text":return"type";case"question":return"ask";case"plan":return"plan";case"error":case"retract":return"error";case"compaction":return"compact";case"index":return"run";default:return"think"}}function O(e){return e==="composing"?a("web.rail.composing"):e==="tool"?a("web.rail.working"):e==="thinking"?a("web.action.thinking"):String(e||"")}function F(e,t){return e==="tool"||e==="tool_fail"?S(t):e==="phase"?"phase":"meta"}function C(e){switch(e.kind){case"phase":return O(e.phase);case"plan":return a("web.sidebar.trace_plan");case"question":return a("web.sidebar.trace_question");case"text":return a("web.sidebar.trace_text",{count:e.chars||0});case"status":return a("web.sidebar.trace_status");case"log":return a("web.sidebar.trace_log",{level:e.level||""});case"retract":return a("web.sidebar.trace_retract");case"index":return a("web.sidebar.trace_index",{phase:e.phase||""});case"critic":return a("web.sidebar.trace_critic",{status:e.status||""});case"moe":return a("web.sidebar.trace_moe");case"compaction":return a("web.sidebar.trace_compaction");case"probe":return a("web.sidebar.trace_probe");case"usage":return a("web.sidebar.trace_usage");case"audit":return a("web.sidebar.trace_audit");case"claim":return a("web.sidebar.trace_claim",{kind:e.subkind||""});case"output":return a("web.sidebar.trace_output");default:return B(e.name)}}function D(e){if(e.kind==="text"||e.kind==="phase")return"";if(e.kind==="plan"){const t=typeof e.currentIndex=="number"?e.currentIndex:0,s=Array.isArray(e.steps)?e.steps.length:0;return s?a("web.rail.step_of",{cur:Math.min(t+1,s),total:s}):""}return e.kind==="question"?e.text||"":e.text&&typeof e.text=="string"&&e.kind!=="tool"&&e.kind!=="tool_fail"?(e.text.split(`
|
|
2
|
+
`).map(s=>s.trim()).find(s=>s.length>0)||"").slice(0,160):A(e.args)}function _(e){return e.kind==="tool_fail"||e.kind==="error"||e.kind==="claim"||e.kind==="critic"&&e.status==="critical"||e.kind==="log"&&(e.level==="warn"||e.level==="error")}function E(e){const t=["trc",F(e.kind,e.name)];_(e)&&t.push("warn"),i.selected===e.id&&t.push("sel");const s=l("div",t.join(" "));s.dataset.id=String(e.id),s.appendChild(l("span","g",_(e)?"⚠":e.kind==="question"?"?":"◇")),s.appendChild(l("span","lab",C(e)));const n=D(e);return n&&s.appendChild(l("span","args",n)),e.durationMs&&s.appendChild(l("span","t",I(e.durationMs))),s.addEventListener("click",()=>{if(i.selected===e.id){collapseDetail();return}i.listEl&&i.listEl.querySelectorAll(".trc.sel").forEach(c=>c.classList.remove("sel")),i.selected=e.id,s.classList.add("sel"),renderDetail(e)}),s}export function renderList(){const e=i.listEl;if(!e)return;if(e.textContent="",e.dataset.lastTurn="-1",i.nodeById.clear(),i.headerByTurn.clear(),i.selected&&!i.trace.some(s=>s.id===i.selected)&&(i.selected=null),i.trace.length===0){e.appendChild(l("div","trace-turn",a("web.sidebar.trace_empty")));return}let t=-1;for(const s of i.trace){if(s.turn!==t){t=s.turn;const c=l("div","trace-turn",a("web.sidebar.trace_turn",{n:s.turn}));i.headerByTurn.set(s.turn,c),e.appendChild(c)}const n=E(s);i.nodeById.set(s.id,n),e.appendChild(n)}e.dataset.lastTurn=String(t),e.scrollTop=e.scrollHeight}function o(e){for(e.id=++i.seq,e.turn=i.turn,e.ts=Date.now(),i.trace.push(e);i.trace.length>j;){const t=i.trace.shift();if(!t)break;const s=i.nodeById.get(t.id);if(s&&(s.remove(),i.nodeById.delete(t.id)),t.toolCallId!=null&&i.callIndex.delete(t.toolCallId),!i.trace.some(n=>n.turn===t.turn)){const n=i.headerByTurn.get(t.turn);n&&(n.remove(),i.headerByTurn.delete(t.turn))}}return e}function r(e){const t=i.listEl;if(!t)return;const s=t.dataset.lastTurn?Number(t.dataset.lastTurn):-1;if(e.turn!==s){const c=l("div","trace-turn",a("web.sidebar.trace_turn",{n:e.turn}));i.headerByTurn.set(e.turn,c),t.appendChild(c),t.dataset.lastTurn=String(e.turn)}const n=E(e);i.nodeById.set(e.id,n),t.appendChild(n),t.scrollTop=t.scrollHeight}function H(e){const t=i.nodeById.get(e.id),s=E(e);i.nodeById.set(e.id,s),t&&t.parentNode?t.replaceWith(s):i.listEl&&i.listEl.appendChild(s),i.listEl&&(i.listEl.scrollTop=i.listEl.scrollHeight)}function U(e){const t=i.nodeById.get(e.id);t&&(t.textContent="",t.appendChild(l("span","g","✦")),t.appendChild(l("span","lab",C(e))),i.listEl&&(i.listEl.scrollTop=i.listEl.scrollHeight))}export function sidebarSessionChanged(e){(i.el&&i.el.dataset.sid)!==(e||"")&&(i.el&&(i.el.dataset.sid=e||""),i.trace=[],i.callIndex.clear(),i.textEntry=null,i.turn=0,i.seq=0,i.logCursor=new Date().toISOString(),i.logPulling=!1,collapseDetail(),renderList())}export function sidebarSessionId(){return i.el&&i.el.dataset.sid||null}export function setSessionLoading(e){if(!i.el)return;i.el.classList.toggle("sb-loading",!!e);const t=R("session");t&&t.setAttribute("aria-busy",e?"true":"false")}export function sidebarTurnEnd(e){i.turn=typeof e=="number"&&e>i.turn?e:i.turn+1,i.textEntry=null}export function sidebarTraceEvent(e,t){if(t)switch(setTraceFace(P(e,t)),e){case"tool_start":{const s=o({kind:"tool",name:t.name,args:t.args||{},toolCallId:t.toolCallId});t.toolCallId!=null&&i.callIndex.set(t.toolCallId,s),r(s);break}case"tool_end":{const s=t.toolCallId!=null?i.callIndex.get(t.toolCallId):void 0;if(t.toolCallId!=null&&i.callIndex.delete(t.toolCallId),s)s.kind=t.success===!1?"tool_fail":"tool",s.success=t.success!==!1,s.durationMs=t.durationMs,s.output=t.output||"",H(s);else{const n=o({kind:t.success===!1?"tool_fail":"tool",name:t.name,args:t.args||{},toolCallId:t.toolCallId,success:t.success!==!1,durationMs:t.durationMs,output:t.output||""});r(n)}break}case"phase":t.phase!=="done"&&r(o({kind:"phase",phase:t.phase}));break;case"plan":r(o({kind:"plan",steps:Array.isArray(t.steps)?t.steps:[],currentIndex:typeof t.currentIndex=="number"?t.currentIndex:0}));break;case"question":r(o({kind:"question",text:t.question||t.text||""}));break;case"text":{i.textEntry||(i.textEntry=o({kind:"text",text:"",chars:0}),r(i.textEntry));const s=t.chunk||"";i.textEntry.chars+=s.length,i.textEntry.text+=s,i.textEntry.text.length>x&&(i.textEntry.text=i.textEntry.text.slice(0,x)+`
|
|
3
|
+
… [truncated from `+i.textEntry.chars+" chars]"),U(i.textEntry);break}case"error":r(o({kind:"error",message:t.message||t.error||""}));break;case"meta":{if(t.kind!==void 0&&t.kind!=="status")break;const s=t.chunk||"";if(!s.trim())break;r(o({kind:"status",text:s}));break}case"log":{if(t.diagnostic&&t.level==="info")break;const s=t.text||"";if(!s.trim())break;r(o({kind:"log",text:s,level:t.level||"",source:t.source||""}));break}case"retract":r(o({kind:"retract",text:t.reason||""}));break;case"index":{const s=t.stats&&typeof t.stats=="object"?Object.entries(t.stats).map(([n,c])=>n+": "+c).join(", "):"";r(o({kind:"index",phase:t.phase||"",text:s}));break}default:break}}export async function sidebarPullLog(){const e=i.el&&i.el.dataset.sid;if(!(!e||i.logPulling)){i.logPulling=!0;try{let t="/api/sessions/"+encodeURIComponent(e)+"/log?limit=100";i.logCursor&&(t+="&since="+encodeURIComponent(i.logCursor));const s=await v(t);if(!s.ok||!s.data||!Array.isArray(s.data.log))return;for(const n of s.data.log)typeof n.ts=="string"&&(i.logCursor===null||n.ts>i.logCursor)&&(i.logCursor=n.ts),N(n)}catch{}finally{i.logPulling=!1}}}function N(e){if(!(!e||typeof e.type!="string"))switch(e.type){case"critic_check":r(o({kind:"critic",status:"check",text:"",iteration:e.iteration}));break;case"critic_verdict":r(o({kind:"critic",status:e.status||"",text:e.content||"",iteration:e.iteration}));break;case"critic_escalation":r(o({kind:"critic",status:"escalation",text:e.content||"",iteration:e.iteration}));break;case"moe_plan":case"moe_subtask":case"moe_replan":case"moe_verify":{const t=[e.title,e.subtaskId,e.expertTag,e.status].filter(s=>typeof s=="string"&&s).join(" · ");r(o({kind:"moe",subtype:e.type,text:t,iteration:e.iteration}));break}case"compaction":r(o({kind:"compaction",text:e.content||"",iteration:e.iteration}));break;case"context_probe":r(o({kind:"probe",text:e.content||""}));break;case"llm_usage":{const t=typeof e.totalTokens=="number"?e.totalTokens:(e.promptTokens||0)+(e.completionTokens||0),s=[e.model||e.provider,t?t+" tok":""].filter(Boolean).join(" · ");r(o({kind:"usage",text:s,iteration:e.iteration}));break}case"audit":r(o({kind:"audit",text:e.content||"",iteration:e.iteration}));break;case"claim_retry":r(o({kind:"claim",subkind:e.kind||"",text:e.content||"",iteration:e.iteration}));break;case"output":r(o({kind:"output",text:e.content||"",iteration:e.iteration}));break;default:break}}function b(e,t){const s=l("div");return s.appendChild(l("h5","",e)),s.appendChild(t),s}function k(e,t){const s=l("div","kv");s.appendChild(l("span","dim",e));const n=l("b");return n.textContent=t,s.appendChild(n),s}function h(e){const t=l("div","code");return t.textContent=e,t}function G(e){return typeof e!="string"?"":e.length<=x?e:e.slice(0,x)+`
|
|
4
|
+
… [truncated from `+e.length+" chars]"}export function renderDetail(e){const t=i.detailGlyph,s=i.detailTitle,n=i.detailBody,c=i.detailEl;if(!c||!t||!s||!n)return;c.hidden=!1;const m=_(e);t.textContent=m?"⚠":e.kind==="question"?"?":"◇",t.style.color=m?"var(--yellow)":"var(--accent)",s.textContent=C(e),n.textContent="";const d=l("div");d.appendChild(l("h5","",a("web.sidebar.detail_metadata")));const g=e.ts?new Date(e.ts):null;if((e.kind==="tool"||e.kind==="tool_fail")&&(d.appendChild(k(a("web.sidebar.detail_status"),e.success===!1?a("web.sidebar.detail_fail"):a("web.sidebar.detail_ok"))),e.durationMs&&d.appendChild(k(a("web.sidebar.detail_duration"),I(e.durationMs)))),g&&d.appendChild(k(a("web.sidebar.detail_time"),g.toLocaleTimeString())),e.toolCallId&&d.appendChild(k(a("web.sidebar.detail_tool_call"),String(e.toolCallId))),i.el&&i.el.dataset.sid&&d.appendChild(k(a("web.sidebar.detail_session"),i.el.dataset.sid)),d.appendChild(k(a("web.sidebar.detail_turn"),String(e.turn))),typeof e.iteration=="number"&&d.appendChild(k(a("web.sidebar.detail_iteration"),String(e.iteration))),n.appendChild(d),e.kind==="tool"||e.kind==="tool_fail")n.appendChild(b(a("web.sidebar.detail_arguments"),h(JSON.stringify(e.args||{},null,2)))),n.appendChild(b(a("web.sidebar.detail_output"),h(G(e.output))));else if(e.kind==="text")n.appendChild(b(a("web.sidebar.detail_text"),h(e.text||""))),W(e);else if(e.kind==="plan"){const u=l("div");(e.steps||[]).forEach(p=>{const f=p.status==="done"?"✓":p.status==="failed"?"✗":p.status==="in_progress"?"▸":"○",T=p.status==="failed"?"fail":p.status==="in_progress"?"cur":p.status==="done"?"done":"";u.appendChild(l("div",("plan-step "+T).trim(),f+" "+p.text))}),n.appendChild(b(a("web.sidebar.detail_plan"),u))}else if(e.kind==="question")n.appendChild(b(a("web.sidebar.trace_question"),h(e.text||"")));else if(e.kind==="error")n.appendChild(b(a("web.sidebar.detail_error"),h(e.message||"")));else if(e.kind==="status"||e.kind==="log"||e.kind==="retract"||e.kind==="index"||e.kind==="critic"||e.kind==="moe"||e.kind==="compaction"||e.kind==="probe"||e.kind==="usage"||e.kind==="audit"||e.kind==="claim"||e.kind==="output"){const u=e.kind==="moe"&&e.subtype?e.subtype:e.kind==="log"&&e.level?"log · "+e.level:e.kind==="index"&&e.phase?"index · "+e.phase:e.kind==="critic"&&e.status?"critic · "+e.status:e.kind==="claim"&&e.subkind?"claim_retry · "+e.subkind:C(e);n.appendChild(b(u,h(e.text||"")))}}async function W(e){const t=i.el&&i.el.dataset.sid,s=i.detailBody;if(!(!t||!s||i.selected!==e.id))try{const n=await v("/api/sessions/"+encodeURIComponent(t)+"/log?types=assistant,llm_usage&limit=20");if(!n.ok||!n.data||!Array.isArray(n.data.log)||i.selected!==e.id)return;const c=n.data.log,m=c.filter(f=>f.type==="assistant"),d=c.filter(f=>f.type==="llm_usage"),g=m.map(f=>f.iteration).filter(f=>typeof f=="number"),u=d.length>0?d[d.length-1]:null,p=[a("web.sidebar.detail_provenance_count",{n:m.length})+(g.length>0?" · iter "+Math.min(...g)+"–"+Math.max(...g):""),u?[u.model||u.provider,u.totalTokens??(u.promptTokens||0)+(u.completionTokens||0)].filter(Boolean).join(" · "):""].filter(Boolean).join(`
|
|
5
5
|
`);p&&s.appendChild(b(a("web.sidebar.detail_provenance"),h(p)))}catch{}}export function collapseDetail(){i.selected=null,i.detailEl&&(i.detailEl.hidden=!0),i.listEl&&i.listEl.querySelectorAll(".trc.sel").forEach(e=>e.classList.remove("sel"))}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export*from"./sidebar/core.js";export*from"./sidebar/trace.js";export*from"./sidebar/map.js";export*from"./sidebar/lsp.js";export*from"./sidebar/files.js";export*from"./sidebar/plugins.js";
|
|
1
|
+
export*from"./sidebar/core.js";export*from"./sidebar/drawer.js";export*from"./sidebar/trace.js";export*from"./sidebar/map.js";export*from"./sidebar/lsp.js";export*from"./sidebar/files.js";export*from"./sidebar/plugins.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{tabs as o,session as i}from"./store.js";export function applyCounters(
|
|
1
|
+
import{tabs as o,session as i}from"./store.js";export function applyCounters(t){i.busy=!!t.busy,i.runningSessionId=t.runningSessionId||null,i.runningSessionIds=t.runningSessionIds||(i.runningSessionId?[i.runningSessionId]:[]),i.queued=t.queued||{}}export function routeState(t){applyCounters(t);const s=o.activeTabId;if(t.state){const n=typeof t.sessionId=="string"?t.sessionId:s,e=n?o.tabs.find(u=>u.id===n):null;e&&(e.state=t.state)}return!t.sessionId||t.sessionId===s}export function storeSnapshot(t){const s=t&&t.sessionId;if(typeof s!="string")return null;const n=o.tabs.find(e=>e.id===s);return n&&(n.state=t),s}export function shouldHydrateAutoOpen(t,s){if(!s)return!1;const n=(t||[]).find(e=>e.id===s);return!!(n&&typeof n.messageCount=="number"&&n.messageCount>0)}export function mergeUsage(t,s){const n=t?o.tabs.find(u=>u.id===t):null;n&&(n.state=Object.assign({},n.state,s));const e=!t||t===o.activeTabId;return e&&(i.host=Object.assign({},i.host,s)),e}
|
package/dist/assets/md.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import*as i from"./smd.js";const
|
|
1
|
+
import*as i from"./smd.js";import{MdNormalizer as h}from"./js/md-normalize.js";const a='<rect width="14" height="14" x="8" y="8" rx="2" ry="2"/><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"/>',g='<path d="M20 6 9 17l-5-5"/>';function C(t){const e=document.createElementNS("http://www.w3.org/2000/svg","svg");e.setAttribute("viewBox","0 0 24 24"),e.setAttribute("fill","none"),e.setAttribute("stroke","currentColor"),e.setAttribute("stroke-width","2"),e.setAttribute("stroke-linecap","round"),e.setAttribute("stroke-linejoin","round"),e.setAttribute("aria-hidden","true"),e.setAttribute("focusable","false"),e.setAttribute("class","svg-icon");const n=new DOMParser().parseFromString("<svg>"+t+"</svg>","image/svg+xml").documentElement;for(const r of Array.from(n.childNodes))e.appendChild(document.importNode(r,!0));return e}function u(t,e){t.replaceChildren(C(e))}export function copyText(t){const e=String(t??"");return navigator.clipboard&&navigator.clipboard.writeText&&window.isSecureContext?navigator.clipboard.writeText(e).then(()=>!0,()=>p(e)):Promise.resolve(p(e))}function p(t){const e=document.createElement("textarea");e.value=t,e.setAttribute("readonly",""),e.style.position="fixed",e.style.top="-1000px",e.style.opacity="0",document.body.appendChild(e);let o=!1;try{e.select(),o=document.execCommand("copy")}catch{o=!1}return e.remove(),o}function b(t){const e=new DOMParser().parseFromString(t,"text/html");return Array.from(e.body.childNodes).map(o=>document.importNode(o,!0))}export function highlightInto(t,e,o){const n=window.hljs;if(!n||!e)return!1;try{const r=o&&n.getLanguage(o)?n.highlight(e,{language:o,ignoreIllegals:!0}).value:n.highlightAuto(e).value;return t.replaceChildren(...b(r)),t.classList.add("hljs"),!0}catch{return!1}}function w(t,e){if(typeof t!="string"||!t)return null;const o=t.trim();if(e&&/^data:image\/[a-z0-9.+-]+;/i.test(o))return o;try{const n=new URL(o,location.href);if(n.protocol==="http:"||n.protocol==="https:"||n.protocol==="mailto:")return n.href}catch{}return null}function x(t){const e=document.createElement("button");return e.type="button",e.className="cb-copy",e.disabled=!0,e.setAttribute("aria-label",t.copyLabel||"copy"),e.title=t.copyLabel||"copy",u(e,a),e}function m(t,e,o,n){const r=t.title;u(t,e),o&&(t.setAttribute("aria-label",o),t.title=o),t.classList.add("done"),window.setTimeout(()=>{u(t,a),t.setAttribute("aria-label",r),t.title=r,t.classList.remove("done")},n)}function y(t,e,o){t.addEventListener("click",()=>{t.disabled||copyText(e.textContent).then(n=>{n?m(t,g,o.copiedLabel||"copied",1400):m(t,a,o.copyFailedLabel||"copy failed",1800)})})}function E(t,e){if(t.types.push(e),e===i.CODE_BLOCK||e===i.CODE_FENCE){const o=t.nodes[t.index],n=document.createElement("div");n.className="codeblock";const r=document.createElement("div");r.className="cb-head";const s=document.createElement("span");s.className="cb-lang";const c=x(t.opts);r.appendChild(s),r.appendChild(c);const l=document.createElement("pre"),d=document.createElement("code");l.appendChild(d),n.appendChild(r),n.appendChild(l),o.appendChild(n),t.nodes[++t.index]=d,t.code={text:"",lang:"",codeEl:d,langEl:s,btn:c,wrap:n},y(c,d,t.opts);return}i.default_add_token(t,e)}function f(t){const e=t.code;e&&(t.opts.highlight!==!1&&highlightInto(e.codeEl,e.text,e.lang),e.wrap.setAttribute("data-lang",e.lang||""),e.wrap.classList.add("closed"),e.btn.disabled=!1)}function A(t){const e=t.types.pop();(e===i.CODE_BLOCK||e===i.CODE_FENCE)&&(f(t),t.code=null),i.default_end_token(t)}function N(t,e){if(t.code){t.code.text+=e,t.code.codeEl.appendChild(document.createTextNode(e));return}if(t.opts.animate){const o=t.animN||0;t.animN=o+1;const n=document.createElement("span");n.className="tk";const r=o%4*20;r&&(n.style.animationDelay=r+"ms"),n.appendChild(document.createTextNode(e)),t.nodes[t.index].appendChild(n);return}i.default_add_text(t,e)}function v(t,e,o){if(t.code&&e===i.LANG){const n=String(o||"").trim().toLowerCase().split(/\s+/)[0]||"";t.code.lang=n,t.code.langEl.textContent=n,n&&(t.code.codeEl.className="language-"+n);return}if(e===i.HREF||e===i.SRC){const n=t.nodes[t.index],r=w(o,e===i.SRC);r&&n&&(e===i.SRC?(n.setAttribute("src",r),n.setAttribute("alt","")):(n.setAttribute("href",r),n.tagName==="A"&&(n.setAttribute("target","_blank"),n.setAttribute("rel","noopener noreferrer"))));return}i.default_set_attr(t,e,o)}export function mountMarkdown(t,e){const o=e||{},n=document.createElement("div");n.className="md",t.appendChild(n);const r={root:n,nodes:[n],index:0,types:[],code:null,opts:o},s=i.parser({data:r,add_token:E,end_token:A,add_text:N,set_attr:v}),c=new h;return{root:n,write(l){i.parser_write(s,c.push(String(l??"")))},end(){i.parser_write(s,c.flush()),i.parser_end(s),r.code&&(f(r),r.code=null)}}}export function renderMarkdown(t,e,o){const n=mountMarkdown(t,o);return n.write(e),n.end(),n.root}
|
package/dist/assets/setup.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
(()=>{const D=new URLSearchParams(location.search).get("token")||"",b=document.getElementById("setupGate"),L=["language","provider","key","model","context","security","review"],h={locale:"en",dicts:{}};function d(e,n){const s=h.dicts[h.locale]||h.dicts.en||{},r=h.dicts.en||{};let i=s[e];return i===void 0&&(i=r[e]),i===void 0?e:(n&&Object.keys(n).forEach(o=>{i=i.split("{"+o+"}").join(String(n[o]))}),i)}function O(e,n){let s;if(h.locale==="ru"){const o=n%10,p=n%100;o===1&&p!==11?s="one":o>=2&&o<=4&&(p<10||p>=20)?s="few":s="many"}else s=n===1?"one":"many";const r=e+"_"+s,i=d(r,{count:n});return i===r?d(e,{count:n}):i}async function y(e,n={}){const s=Object.assign({},n.headers||{});n.body!==void 0&&(s["content-type"]="application/json"),D&&(s["x-mma-token"]=D);let r;try{r=await fetch(e,{method:n.method||"GET",headers:s,body:n.body!==void 0?JSON.stringify(n.body):void 0})}catch{return{ok:!1,status:0,data:null}}let i=null;try{i=await r.json()}catch{i=null}return{ok:r.ok,status:r.status,data:i}}function a(e,n,s){const r=document.createElement(e);return n&&(r.className=n),s!=null&&(r.textContent=String(s)),r}async function U(){const e=await y("/api/i18n");e.ok&&e.data&&(h.locale=e.data.locale||"en",h.dicts=e.data.dicts||{})}const t={display:null,step:0,answers:{provider:"",apiBase:"",apiKey:"",model:"",contextWindow:32768,maxToolIterations:1e3,locale:"en",securityBashBlock:!1,securityFlagsBlock:!1,securityPathsRestrict:!0,securityDetail:{bash:{},paths:{},flags:{},network:{},advanced:{}}}};let I=!1;async function j(){if(!b||I)return I;const e=await y("/api/setup");if(!e.ok||!e.data||!e.data.required)return!1;t.display=e.data,e.data.defaults&&(t.answers.contextWindow=e.data.defaults.contextWindow||t.answers.contextWindow,t.answers.maxToolIterations=e.data.defaults.maxToolIterations||t.answers.maxToolIterations,e.data.defaults.security&&(t.answers.securityDetail=Object.assign(t.answers.securityDetail,e.data.defaults.security)));const n=(e.data.providers||[])[0];return n&&(t.answers.provider=n.type,n.baseUrl&&(t.answers.apiBase=n.baseUrl)),await U(),t.answers.locale=h.locale||"en",document.body.classList.add("setup-active"),b.hidden=!1,I=!0,m(),!0}function m(){B();const e=a("div","setup-wrap"),n=a("h1","setup-h");n.appendChild(a("span","glyph","◇")),n.appendChild(document.createTextNode(d("web.setup.title"))),e.appendChild(n),e.appendChild(a("p","setup-sub",d("web.setup.subtitle"))),e.appendChild(F()),e.appendChild(M()),e.appendChild(se()),b.innerHTML="",b.appendChild(e)}function F(){const e=a("div","setup-steps");return L.forEach((n,s)=>{s&&e.appendChild(a("span","sep","·"));const r=s===t.step?"s on":s<t.step?"s done":"s";e.appendChild(a("span",r,(s<t.step?"✓ ":"")+d("web.setup.step."+n)))}),e}function C(e){const n=a("div","setup-step");n.appendChild(a("h2","setup-step-title",d("web.setup."+e+".title")));const s=d("web.setup."+e+".hint");return s!=="web.setup."+e+".hint"&&n.appendChild(a("p","setup-hint",s)),n}function E(e,n){const s=a("div","setup-field");return s.appendChild(a("label","setup-label",e)),s.appendChild(n),s}function q(e,n,s){const r=a("input","setup-input");return r.type=n||"text",r.value=String(e||""),s&&(r.placeholder=s),r.addEventListener("input",()=>{g=null}),r}let g=null;function _(){const e=a("div","setup-msg");return g&&(e.className="setup-msg "+g.kind,e.textContent=g.text),e}function u(e,n,s){g={kind:n,text:s};const r=e?e.querySelector(".setup-msg"):null;r&&(r.className="setup-msg "+n,r.textContent=s)}function M(){const e=L[t.step];return e==="language"?A():e==="provider"?G():e==="key"?H():e==="model"?z():e==="context"?Y():e==="security"?J():te()}function A(){const e=C("language");return(t.display?.languages||[]).forEach(n=>{const s=a("button","setup-opt"+(t.answers.locale===n.value?" on":""));s.type="button",s.appendChild(a("span","g",t.answers.locale===n.value?"✓":"◇")),s.appendChild(a("span","t",n.label)),s.addEventListener("click",async()=>{t.answers.locale=n.value;const r=await y("/api/setup/locale",{method:"POST",body:{locale:n.value}});r.ok&&r.data&&r.data.dicts&&(h.dicts=r.data.dicts,h.locale=n.value),m()}),e.appendChild(s)}),e}function G(){const e=C("provider");(t.display?.providers||[]).forEach(i=>{const o=t.answers.provider===i.type,p=a("button","setup-opt"+(o?" on":""));p.type="button",p.appendChild(a("span","g",o?"✓":"◇")),p.appendChild(a("span","t",i.label)),p.addEventListener("click",()=>{t.answers.provider=i.type,t.answers.apiBase=i.baseUrl||"",m()}),e.appendChild(p)});const n=q(t.answers.apiBase,"text","http://localhost:1234/v1");n.addEventListener("input",()=>{t.answers.apiBase=n.value.trim()}),e.appendChild(E(d("web.setup.provider.base_url"),n));const s=a("div","setup-row-inline"),r=a("button","setup-btn",d("web.setup.provider.test"));if(r.type="button",r.addEventListener("click",async()=>{if(!t.answers.apiBase){u(e,"err",d("web.setup.provider.required"));return}r.disabled=!0,u(e,"",d("web.setup.provider.testing"));const i=await y("/api/setup/models",{method:"POST",body:{baseUrl:t.answers.apiBase,apiKey:t.answers.apiKey}});r.disabled=!1;const o=i.ok&&i.data&&i.data.models||[];i.ok&&o.length?u(e,"ok",d("web.setup.provider.test_ok")):u(e,"warn",d("web.setup.provider.test_fail"))}),s.appendChild(r),t.answers.provider==="openai-compat"||t.answers.provider==="lmstudio"){const i=a("button","setup-btn",d("web.setup.provider.scan"));i.type="button";const o=a("div");i.addEventListener("click",async()=>{i.disabled=!0,u(e,"","");const p=await y("/api/setup/scan",{method:"POST"});i.disabled=!1;const c=p.ok&&p.data&&p.data.servers||[];if(!p.ok){u(e,"err",d("web.setup.provider.scan_failed"));return}if(!c.length){u(e,"warn",d("web.setup.provider.scan_none"));return}u(e,"ok",O("web.setup.provider.scan_found",c.length)),o.innerHTML="",c.forEach(w=>{const l=a("button","setup-opt");l.type="button",l.appendChild(a("span","g","↳")),l.appendChild(a("span","t",w.label)),l.appendChild(a("span","d",w.url)),l.addEventListener("click",()=>{t.answers.apiBase=w.url,m()}),o.appendChild(l)})}),s.appendChild(i),e.appendChild(s),e.appendChild(o)}else e.appendChild(s);return e.appendChild(_()),e}function H(){const e=C("key"),n=q(t.answers.apiKey,"password",d("web.setup.key.placeholder"));return n.addEventListener("input",()=>{t.answers.apiKey=n.value}),e.appendChild(E(d("web.setup.key.label"),n)),e.appendChild(_()),e}function z(){const e=C("model"),n=q(t.answers.model,"text","qwen/qwen3.5-9b");n.addEventListener("input",()=>{t.answers.model=n.value.trim()}),e.appendChild(E(d("web.setup.model.name"),n));const s=a("div"),r=a("div","setup-row-inline"),i=a("button","setup-btn",d("web.setup.model.load"));i.type="button";const o=a("button","setup-btn",d("web.setup.model.test"));return o.type="button",i.addEventListener("click",async()=>{i.disabled=!0,u(e,"","");const p=await y("/api/setup/models",{method:"POST",body:{baseUrl:t.answers.apiBase,apiKey:t.answers.apiKey}});i.disabled=!1;const c=p.ok&&p.data&&p.data.models||[];if(!c.length){u(e,"warn",d("web.setup.model.load_none"));return}u(e,"ok",O("web.setup.model.load_found",c.length)),s.innerHTML="",c.slice(0,20).forEach(w=>{const l=a("button","setup-opt"+(t.answers.model===w?" on":""));l.type="button",l.appendChild(a("span","g",t.answers.model===w?"✓":"◇")),l.appendChild(a("span","t",w)),l.addEventListener("click",()=>{t.answers.model=w,n.value=w,m()}),s.appendChild(l)})}),o.addEventListener("click",async()=>{if(!t.answers.model){u(e,"err",d("web.setup.model.required"));return}o.disabled=!0,u(e,"",d("web.setup.model.testing"));const p=await y("/api/setup/test",{method:"POST",body:{baseUrl:t.answers.apiBase,apiKey:t.answers.apiKey,model:t.answers.model}});o.disabled=!1,p.ok&&p.data&&p.data.ok?u(e,"ok",d("web.setup.model.test_ok")):u(e,"warn",d("web.setup.model.test_fail"))}),r.appendChild(i),r.appendChild(o),e.appendChild(r),e.appendChild(s),e.appendChild(_()),e}function Y(){const e=C("context"),n=a("input","setup-input");n.type="number",n.min="1024",n.step="1024",n.value=String(t.answers.contextWindow),n.addEventListener("input",()=>{t.answers.contextWindow=parseInt(n.value,10)||0}),e.appendChild(E(d("web.setup.context.contextWindow"),n));const s=a("button","setup-btn",d("web.setup.context.detect"));s.type="button",s.addEventListener("click",async()=>{if(!t.answers.apiBase||!t.answers.model){u(e,"err",d("web.setup.context.detect_fail"));return}s.disabled=!0,u(e,"",d("web.setup.context.detecting"));const o=await y("/api/setup/context",{method:"POST",body:{baseUrl:t.answers.apiBase,apiKey:t.answers.apiKey,model:t.answers.model,providerType:t.answers.provider}});s.disabled=!1;const p=o.ok&&o.data&&o.data.contextWindow;o.ok&&o.data&&o.data.ok&&typeof p=="number"&&p>0?(t.answers.contextWindow=p,n.value=String(p),u(e,"ok",d("web.setup.context.detect_ok",{count:p}))):u(e,"warn",d("web.setup.context.detect_fail"))});const r=a("div","setup-row-inline");r.appendChild(s),e.appendChild(r);const i=a("input","setup-input");return i.type="number",i.min="1",i.value=String(t.answers.maxToolIterations),i.addEventListener("input",()=>{t.answers.maxToolIterations=parseInt(i.value,10)||0}),e.appendChild(E(d("web.setup.context.maxToolIterations"),i)),e.appendChild(_()),e}function J(){const e=C("security");[["securityPathsRestrict","web.setup.security.paths","web.setup.security.paths_desc","paths"],["securityBashBlock","web.setup.security.bash","web.setup.security.bash_desc","bash"],["securityFlagsBlock","web.setup.security.flags","web.setup.security.flags_desc","flags"]].forEach(([i,o,p,c])=>{const w=a("div","setup-sec-row"),l=a("label","setup-toggle"),f=a("input");f.type="checkbox",f.checked=!!t.answers[i],f.addEventListener("change",()=>{t.answers[i]=f.checked}),l.appendChild(f);const v=a("span","setup-toggle-texts");v.appendChild(a("span","t",d(o)));const k=d(p);k!==p&&v.appendChild(a("span","d",k)),l.appendChild(v),w.appendChild(l),w.appendChild(K(c,d(o))),e.appendChild(w)});const s=a("div","setup-sec-row"),r=a("span","setup-toggle setup-adv-label");return r.appendChild(a("span","t",d("web.setup.security.advanced"))),s.appendChild(r),s.appendChild(K("advanced",d("web.setup.security.advanced"))),e.appendChild(s),e}const V={paths:[["paths.denied","list","web.setup.security.denied"],["paths.allowed","list","web.setup.security.allowed"]],bash:[["bash.blacklist","list","web.setup.security.blacklist"],["bash.whitelist","list","web.setup.security.whitelist"],["bash.logCommands","bool","web.setup.security.log_commands"]],flags:[["flags.dangerousFlags","list","web.setup.security.dangerous_flags"],["flags.dangerousOperators","list","web.setup.security.dangerous_operators"]],advanced:[["network.enabled","bool","web.setup.security.network_enabled"],["network.deniedDomains","list","web.setup.security.denied_domains"],["network.allowedDomains","list","web.setup.security.allowed_domains"],["network.requestTimeout","int","web.setup.security.request_timeout"],["network.maxResponseSize","int","web.setup.security.max_response_size"],["advanced.maxRecursionDepth","int","web.setup.security.max_recursion"],["advanced.maxFileOperations","int","web.setup.security.max_file_ops"],["advanced.maxRequestsPerMinute","int","web.setup.security.rate_rpm"],["advanced.maxParallelTasks","int","web.setup.security.rate_parallel"],["advanced.contentScanEnabled","bool","web.setup.security.content_scan"],["advanced.sessionEncryptionEnabled","bool","web.setup.security.session_encryption"],["advanced.auditNotifierEnabled","bool","web.setup.security.audit_enabled"],["advanced.auditNotifierMinSeverity","enum","web.setup.security.audit_severity"],["advanced.auditNotifierEventTypes","list","web.setup.security.audit_events"],["advanced.auditNotifierMaxRetries","int","web.setup.security.audit_retries"],["advanced.auditNotifierWebhookTimeout","int","web.setup.security.audit_timeout"]]},Q=["low","medium","high","critical"],X={paths:["paths"],bash:["bash"],flags:["flags"],advanced:["network","advanced"]};function T(e,n){return n.split(".").reduce((s,r)=>s?.[r],e)}function S(e,n,s){const r=n.split(".");let i=e;for(let o=0;o<r.length-1;o++)(typeof i[r[o]]!="object"||i[r[o]]===null)&&(i[r[o]]={}),i=i[r[o]];i[r[r.length-1]]=s}function K(e,n){const s=a("button","setup-detail-btn");return s.type="button",s.appendChild(a("span","g","⚙")),s.appendChild(a("span","t",d("web.setup.security.configure"))),s.title=n,s.addEventListener("click",r=>{r.preventDefault(),R(e,n)}),s}let x=null;function R(e,n){const s=a("div","setup-overlay"),r=a("div","setup-modal");r.setAttribute("role","dialog"),r.setAttribute("aria-modal","true");const i=a("div","setup-modal-head"),o=a("span","glyph","⚙");i.appendChild(o),i.appendChild(a("span","setup-modal-title",n));const p=a("button","setup-modal-x","✕");p.type="button",p.addEventListener("click",B),i.appendChild(p),r.appendChild(i);const c=a("div","setup-modal-body");c.appendChild(a("p","setup-hint",d("web.setup.security.popup_hint"))),V[e].forEach(([v,k,P])=>{c.appendChild(Z(v,k,d(P)))}),r.appendChild(c);const w=a("div","setup-modal-foot"),l=a("button","setup-btn link",d("web.setup.security.reset"));l.type="button",l.addEventListener("click",()=>{const v=t.display&&t.display.defaults&&t.display.defaults.security||{};(X[e]||[e]).forEach(k=>{const P=v[k]||{};Object.keys(P).forEach(W=>S(t.answers.securityDetail,k+"."+W,P[W]))}),B(),R(e,n)}),w.appendChild(l),w.appendChild(a("span","spacer"));const f=a("button","setup-btn primary",d("web.setup.security.popup_done"));f.type="button",f.addEventListener("click",B),w.appendChild(f),r.appendChild(w),s.appendChild(r),s.addEventListener("click",v=>{v.target===s&&B()}),x=s,b.appendChild(s)}function Z(e,n,s){const r=a("div","setup-field");if(n==="list"){r.appendChild(a("label","setup-label",s));const i=a("textarea","setup-input setup-textarea"),o=T(t.answers.securityDetail,e);i.value=Array.isArray(o)?o.join(`
|
|
1
|
+
(()=>{const D=new URLSearchParams(location.search).get("token")||"",b=document.getElementById("setupGate"),L=["language","provider","key","model","context","security","review"],h={locale:"en",dicts:{}};function d(e,n){const s=h.dicts[h.locale]||h.dicts.en||{},r=h.dicts.en||{};let i=s[e];return i===void 0&&(i=r[e]),i===void 0?e:(n&&Object.keys(n).forEach(o=>{i=i.split("{"+o+"}").join(String(n[o]))}),i)}function O(e,n){let s;if(h.locale==="ru"){const o=n%10,p=n%100;o===1&&p!==11?s="one":o>=2&&o<=4&&(p<10||p>=20)?s="few":s="many"}else s=n===1?"one":"many";const r=e+"_"+s,i=d(r,{count:n});return i===r?d(e,{count:n}):i}async function y(e,n={}){const s=Object.assign({},n.headers||{});n.body!==void 0&&(s["content-type"]="application/json"),D&&(s["x-mma-token"]=D);let r;try{r=await fetch(e,{method:n.method||"GET",headers:s,body:n.body!==void 0?JSON.stringify(n.body):void 0})}catch{return{ok:!1,status:0,data:null}}let i=null;try{i=await r.json()}catch{i=null}return{ok:r.ok,status:r.status,data:i}}function a(e,n,s){const r=document.createElement(e);return n&&(r.className=n),s!=null&&(r.textContent=String(s)),r}async function U(){const e=await y("/api/i18n");e.ok&&e.data&&(h.locale=e.data.locale||"en",h.dicts=e.data.dicts||{})}const t={display:null,step:0,answers:{provider:"",apiBase:"",apiKey:"",model:"",contextWindow:32768,maxToolIterations:1e3,locale:"en",securityBashBlock:!1,securityFlagsBlock:!1,securityPathsRestrict:!0,securityDetail:{bash:{},paths:{},flags:{},network:{},advanced:{}}}};let I=!1;async function j(){if(!b||I)return I;const e=await y("/api/setup");if(!e.ok||!e.data||!e.data.required)return!1;t.display=e.data,e.data.defaults&&(t.answers.contextWindow=e.data.defaults.contextWindow||t.answers.contextWindow,t.answers.maxToolIterations=e.data.defaults.maxToolIterations||t.answers.maxToolIterations,e.data.defaults.security&&(t.answers.securityDetail=Object.assign(t.answers.securityDetail,e.data.defaults.security)));const n=(e.data.providers||[])[0];return n&&(t.answers.provider=n.type,n.baseUrl&&(t.answers.apiBase=n.baseUrl)),await U(),t.answers.locale=h.locale||"en",document.body.classList.add("setup-active"),b.hidden=!1,I=!0,m(),!0}function m(){B();const e=a("div","setup-wrap"),n=a("h1","setup-h");n.appendChild(a("span","glyph","◇")),n.appendChild(document.createTextNode(d("web.setup.title"))),e.appendChild(n),e.appendChild(a("p","setup-sub",d("web.setup.subtitle"))),e.appendChild(F()),e.appendChild(M()),e.appendChild(se()),b.innerHTML="",b.appendChild(e)}function F(){const e=a("div","setup-steps");return L.forEach((n,s)=>{s&&e.appendChild(a("span","sep","·"));const r=s===t.step?"s on":s<t.step?"s done":"s";e.appendChild(a("span",r,(s<t.step?"✓ ":"")+d("web.setup.step."+n)))}),e}function C(e){const n=a("div","setup-step");n.appendChild(a("h2","setup-step-title",d("web.setup."+e+".title")));const s=d("web.setup."+e+".hint");return s!=="web.setup."+e+".hint"&&n.appendChild(a("p","setup-hint",s)),n}function E(e,n){const s=a("div","setup-field");return s.appendChild(a("label","setup-label",e)),s.appendChild(n),s}function q(e,n,s){const r=a("input","setup-input");return r.type=n||"text",r.value=String(e||""),s&&(r.placeholder=s),r.addEventListener("input",()=>{g=null}),r}let g=null;function _(){const e=a("div","setup-msg");return g&&(e.className="setup-msg "+g.kind,e.textContent=g.text),e}function l(e,n,s){g={kind:n,text:s};const r=e?e.querySelector(".setup-msg"):null;if(r)if(r.className="setup-msg "+n,r.textContent="",n===""&&s){const i=a("span","mdl sm st-think");i.setAttribute("aria-hidden","true"),i.appendChild(a("span","eyes"));const o=i.firstElementChild;o.appendChild(a("i","eye left")),o.appendChild(a("i","eye right")),r.appendChild(i),r.appendChild(document.createTextNode(" "+s))}else r.textContent=s}function M(){const e=L[t.step];return e==="language"?A():e==="provider"?G():e==="key"?H():e==="model"?z():e==="context"?Y():e==="security"?J():te()}function A(){const e=C("language");return(t.display?.languages||[]).forEach(n=>{const s=a("button","setup-opt"+(t.answers.locale===n.value?" on":""));s.type="button",s.appendChild(a("span","g",t.answers.locale===n.value?"✓":"◇")),s.appendChild(a("span","t",n.label)),s.addEventListener("click",async()=>{t.answers.locale=n.value;const r=await y("/api/setup/locale",{method:"POST",body:{locale:n.value}});r.ok&&r.data&&r.data.dicts&&(h.dicts=r.data.dicts,h.locale=n.value),m()}),e.appendChild(s)}),e}function G(){const e=C("provider");(t.display?.providers||[]).forEach(i=>{const o=t.answers.provider===i.type,p=a("button","setup-opt"+(o?" on":""));p.type="button",p.appendChild(a("span","g",o?"✓":"◇")),p.appendChild(a("span","t",i.label)),p.addEventListener("click",()=>{t.answers.provider=i.type,t.answers.apiBase=i.baseUrl||"",m()}),e.appendChild(p)});const n=q(t.answers.apiBase,"text","http://localhost:1234/v1");n.addEventListener("input",()=>{t.answers.apiBase=n.value.trim()}),e.appendChild(E(d("web.setup.provider.base_url"),n));const s=a("div","setup-row-inline"),r=a("button","setup-btn",d("web.setup.provider.test"));if(r.type="button",r.addEventListener("click",async()=>{if(!t.answers.apiBase){l(e,"err",d("web.setup.provider.required"));return}r.disabled=!0,l(e,"",d("web.setup.provider.testing"));const i=await y("/api/setup/models",{method:"POST",body:{baseUrl:t.answers.apiBase,apiKey:t.answers.apiKey}});r.disabled=!1;const o=i.ok&&i.data&&i.data.models||[];i.ok&&o.length?l(e,"ok",d("web.setup.provider.test_ok")):l(e,"warn",d("web.setup.provider.test_fail"))}),s.appendChild(r),t.answers.provider==="openai-compat"||t.answers.provider==="lmstudio"){const i=a("button","setup-btn",d("web.setup.provider.scan"));i.type="button";const o=a("div");i.addEventListener("click",async()=>{i.disabled=!0,l(e,"","");const p=await y("/api/setup/scan",{method:"POST"});i.disabled=!1;const c=p.ok&&p.data&&p.data.servers||[];if(!p.ok){l(e,"err",d("web.setup.provider.scan_failed"));return}if(!c.length){l(e,"warn",d("web.setup.provider.scan_none"));return}l(e,"ok",O("web.setup.provider.scan_found",c.length)),o.innerHTML="",c.forEach(w=>{const u=a("button","setup-opt");u.type="button",u.appendChild(a("span","g","↳")),u.appendChild(a("span","t",w.label)),u.appendChild(a("span","d",w.url)),u.addEventListener("click",()=>{t.answers.apiBase=w.url,m()}),o.appendChild(u)})}),s.appendChild(i),e.appendChild(s),e.appendChild(o)}else e.appendChild(s);return e.appendChild(_()),e}function H(){const e=C("key"),n=q(t.answers.apiKey,"password",d("web.setup.key.placeholder"));return n.addEventListener("input",()=>{t.answers.apiKey=n.value}),e.appendChild(E(d("web.setup.key.label"),n)),e.appendChild(_()),e}function z(){const e=C("model"),n=q(t.answers.model,"text","qwen/qwen3.5-9b");n.addEventListener("input",()=>{t.answers.model=n.value.trim()}),e.appendChild(E(d("web.setup.model.name"),n));const s=a("div"),r=a("div","setup-row-inline"),i=a("button","setup-btn",d("web.setup.model.load"));i.type="button";const o=a("button","setup-btn",d("web.setup.model.test"));return o.type="button",i.addEventListener("click",async()=>{i.disabled=!0,l(e,"","");const p=await y("/api/setup/models",{method:"POST",body:{baseUrl:t.answers.apiBase,apiKey:t.answers.apiKey}});i.disabled=!1;const c=p.ok&&p.data&&p.data.models||[];if(!c.length){l(e,"warn",d("web.setup.model.load_none"));return}l(e,"ok",O("web.setup.model.load_found",c.length)),s.innerHTML="",c.slice(0,20).forEach(w=>{const u=a("button","setup-opt"+(t.answers.model===w?" on":""));u.type="button",u.appendChild(a("span","g",t.answers.model===w?"✓":"◇")),u.appendChild(a("span","t",w)),u.addEventListener("click",()=>{t.answers.model=w,n.value=w,m()}),s.appendChild(u)})}),o.addEventListener("click",async()=>{if(!t.answers.model){l(e,"err",d("web.setup.model.required"));return}o.disabled=!0,l(e,"",d("web.setup.model.testing"));const p=await y("/api/setup/test",{method:"POST",body:{baseUrl:t.answers.apiBase,apiKey:t.answers.apiKey,model:t.answers.model}});o.disabled=!1,p.ok&&p.data&&p.data.ok?l(e,"ok",d("web.setup.model.test_ok")):l(e,"warn",d("web.setup.model.test_fail"))}),r.appendChild(i),r.appendChild(o),e.appendChild(r),e.appendChild(s),e.appendChild(_()),e}function Y(){const e=C("context"),n=a("input","setup-input");n.type="number",n.min="1024",n.step="1024",n.value=String(t.answers.contextWindow),n.addEventListener("input",()=>{t.answers.contextWindow=parseInt(n.value,10)||0}),e.appendChild(E(d("web.setup.context.contextWindow"),n));const s=a("button","setup-btn",d("web.setup.context.detect"));s.type="button",s.addEventListener("click",async()=>{if(!t.answers.apiBase||!t.answers.model){l(e,"err",d("web.setup.context.detect_fail"));return}s.disabled=!0,l(e,"",d("web.setup.context.detecting"));const o=await y("/api/setup/context",{method:"POST",body:{baseUrl:t.answers.apiBase,apiKey:t.answers.apiKey,model:t.answers.model,providerType:t.answers.provider}});s.disabled=!1;const p=o.ok&&o.data&&o.data.contextWindow;o.ok&&o.data&&o.data.ok&&typeof p=="number"&&p>0?(t.answers.contextWindow=p,n.value=String(p),l(e,"ok",d("web.setup.context.detect_ok",{count:p}))):l(e,"warn",d("web.setup.context.detect_fail"))});const r=a("div","setup-row-inline");r.appendChild(s),e.appendChild(r);const i=a("input","setup-input");return i.type="number",i.min="1",i.value=String(t.answers.maxToolIterations),i.addEventListener("input",()=>{t.answers.maxToolIterations=parseInt(i.value,10)||0}),e.appendChild(E(d("web.setup.context.maxToolIterations"),i)),e.appendChild(_()),e}function J(){const e=C("security");[["securityPathsRestrict","web.setup.security.paths","web.setup.security.paths_desc","paths"],["securityBashBlock","web.setup.security.bash","web.setup.security.bash_desc","bash"],["securityFlagsBlock","web.setup.security.flags","web.setup.security.flags_desc","flags"]].forEach(([i,o,p,c])=>{const w=a("div","setup-sec-row"),u=a("label","setup-toggle"),f=a("input");f.type="checkbox",f.checked=!!t.answers[i],f.addEventListener("change",()=>{t.answers[i]=f.checked}),u.appendChild(f);const v=a("span","setup-toggle-texts");v.appendChild(a("span","t",d(o)));const k=d(p);k!==p&&v.appendChild(a("span","d",k)),u.appendChild(v),w.appendChild(u),w.appendChild(K(c,d(o))),e.appendChild(w)});const s=a("div","setup-sec-row"),r=a("span","setup-toggle setup-adv-label");return r.appendChild(a("span","t",d("web.setup.security.advanced"))),s.appendChild(r),s.appendChild(K("advanced",d("web.setup.security.advanced"))),e.appendChild(s),e}const V={paths:[["paths.denied","list","web.setup.security.denied"],["paths.allowed","list","web.setup.security.allowed"]],bash:[["bash.blacklist","list","web.setup.security.blacklist"],["bash.whitelist","list","web.setup.security.whitelist"],["bash.logCommands","bool","web.setup.security.log_commands"]],flags:[["flags.dangerousFlags","list","web.setup.security.dangerous_flags"],["flags.dangerousOperators","list","web.setup.security.dangerous_operators"]],advanced:[["network.enabled","bool","web.setup.security.network_enabled"],["network.deniedDomains","list","web.setup.security.denied_domains"],["network.allowedDomains","list","web.setup.security.allowed_domains"],["network.requestTimeout","int","web.setup.security.request_timeout"],["network.maxResponseSize","int","web.setup.security.max_response_size"],["advanced.maxRecursionDepth","int","web.setup.security.max_recursion"],["advanced.maxFileOperations","int","web.setup.security.max_file_ops"],["advanced.maxRequestsPerMinute","int","web.setup.security.rate_rpm"],["advanced.maxParallelTasks","int","web.setup.security.rate_parallel"],["advanced.contentScanEnabled","bool","web.setup.security.content_scan"],["advanced.sessionEncryptionEnabled","bool","web.setup.security.session_encryption"],["advanced.auditNotifierEnabled","bool","web.setup.security.audit_enabled"],["advanced.auditNotifierMinSeverity","enum","web.setup.security.audit_severity"],["advanced.auditNotifierEventTypes","list","web.setup.security.audit_events"],["advanced.auditNotifierMaxRetries","int","web.setup.security.audit_retries"],["advanced.auditNotifierWebhookTimeout","int","web.setup.security.audit_timeout"]]},Q=["low","medium","high","critical"],X={paths:["paths"],bash:["bash"],flags:["flags"],advanced:["network","advanced"]};function T(e,n){return n.split(".").reduce((s,r)=>s?.[r],e)}function S(e,n,s){const r=n.split(".");let i=e;for(let o=0;o<r.length-1;o++)(typeof i[r[o]]!="object"||i[r[o]]===null)&&(i[r[o]]={}),i=i[r[o]];i[r[r.length-1]]=s}function K(e,n){const s=a("button","setup-detail-btn");return s.type="button",s.appendChild(a("span","g","⚙")),s.appendChild(a("span","t",d("web.setup.security.configure"))),s.title=n,s.addEventListener("click",r=>{r.preventDefault(),N(e,n)}),s}let x=null;function N(e,n){const s=a("div","setup-overlay"),r=a("div","setup-modal");r.setAttribute("role","dialog"),r.setAttribute("aria-modal","true");const i=a("div","setup-modal-head"),o=a("span","glyph","⚙");i.appendChild(o),i.appendChild(a("span","setup-modal-title",n));const p=a("button","setup-modal-x","✕");p.type="button",p.addEventListener("click",B),i.appendChild(p),r.appendChild(i);const c=a("div","setup-modal-body");c.appendChild(a("p","setup-hint",d("web.setup.security.popup_hint"))),V[e].forEach(([v,k,P])=>{c.appendChild(Z(v,k,d(P)))}),r.appendChild(c);const w=a("div","setup-modal-foot"),u=a("button","setup-btn link",d("web.setup.security.reset"));u.type="button",u.addEventListener("click",()=>{const v=t.display&&t.display.defaults&&t.display.defaults.security||{};(X[e]||[e]).forEach(k=>{const P=v[k]||{};Object.keys(P).forEach(W=>S(t.answers.securityDetail,k+"."+W,P[W]))}),B(),N(e,n)}),w.appendChild(u),w.appendChild(a("span","spacer"));const f=a("button","setup-btn primary",d("web.setup.security.popup_done"));f.type="button",f.addEventListener("click",B),w.appendChild(f),r.appendChild(w),s.appendChild(r),s.addEventListener("click",v=>{v.target===s&&B()}),x=s,b.appendChild(s)}function Z(e,n,s){const r=a("div","setup-field");if(n==="list"){r.appendChild(a("label","setup-label",s));const i=a("textarea","setup-input setup-textarea"),o=T(t.answers.securityDetail,e);i.value=Array.isArray(o)?o.join(`
|
|
2
2
|
`):"",i.rows=5,i.spellcheck=!1,i.addEventListener("input",()=>{const p=i.value.split(`
|
|
3
|
-
`).map(c=>c.trim()).filter(Boolean);S(t.answers.securityDetail,e,p)}),r.appendChild(i)}else if(n==="bool"){const i=a("label","setup-toggle"),o=a("input");o.type="checkbox",o.checked=!!T(t.answers.securityDetail,e),o.addEventListener("change",()=>S(t.answers.securityDetail,e,o.checked)),i.appendChild(o),i.appendChild(a("span","t",s)),r.appendChild(i)}else if(n==="int"){r.appendChild(a("label","setup-label",s));const i=a("input","setup-input");i.type="number",i.min="1";const o=T(t.answers.securityDetail,e);i.value=typeof o=="number"?String(o):"",i.addEventListener("input",()=>{const p=parseInt(i.value,10);S(t.answers.securityDetail,e,Number.isFinite(p)&&p>0?p:void 0)}),r.appendChild(i)}else if(n==="enum"){r.appendChild(a("label","setup-label",s));const i=a("select","setup-input"),o=T(t.answers.securityDetail,e);Q.forEach(p=>{const c=a("option",null,d("web.setup.security.severity."+p));c.value=p,o===p&&(c.selected=!0),i.appendChild(c)}),i.addEventListener("change",()=>S(t.answers.securityDetail,e,i.value)),r.appendChild(i)}return r}function B(){x&&x.parentNode&&x.parentNode.removeChild(x),x=null}function $(){const e=[];return t.answers.securityPathsRestrict&&e.push(d("web.setup.security.paths")),t.answers.securityBashBlock&&e.push(d("web.setup.security.bash")),t.answers.securityFlagsBlock&&e.push(d("web.setup.security.flags")),e.length?e.join(", "):d("web.setup.review.security_off")}function ee(){const e=t.answers.apiKey;return e?e.length<=4?"••••":"••••"+e.slice(-4):d("web.setup.review.not_needed")}function te(){const e=C("review"),n=[[d("web.setup.review.provider"),t.answers.provider],[d("web.setup.review.baseUrl"),t.answers.apiBase],[d("web.setup.review.apiKey"),ee()],[d("web.setup.review.model"),t.answers.model],[d("web.setup.review.context"),String(t.answers.contextWindow)],[d("web.setup.review.iterations"),String(t.answers.maxToolIterations)],[d("web.setup.review.locale"),t.answers.locale],[d("web.setup.review.security"),$()]],s=a("div","setup-summary");return n.forEach(([r,i])=>{const o=a("div","r");o.appendChild(a("span","k",r)),o.appendChild(a("span","v",i)),s.appendChild(o)}),e.appendChild(s),e.appendChild(_()),e}function
|
|
3
|
+
`).map(c=>c.trim()).filter(Boolean);S(t.answers.securityDetail,e,p)}),r.appendChild(i)}else if(n==="bool"){const i=a("label","setup-toggle"),o=a("input");o.type="checkbox",o.checked=!!T(t.answers.securityDetail,e),o.addEventListener("change",()=>S(t.answers.securityDetail,e,o.checked)),i.appendChild(o),i.appendChild(a("span","t",s)),r.appendChild(i)}else if(n==="int"){r.appendChild(a("label","setup-label",s));const i=a("input","setup-input");i.type="number",i.min="1";const o=T(t.answers.securityDetail,e);i.value=typeof o=="number"?String(o):"",i.addEventListener("input",()=>{const p=parseInt(i.value,10);S(t.answers.securityDetail,e,Number.isFinite(p)&&p>0?p:void 0)}),r.appendChild(i)}else if(n==="enum"){r.appendChild(a("label","setup-label",s));const i=a("select","setup-input"),o=T(t.answers.securityDetail,e);Q.forEach(p=>{const c=a("option",null,d("web.setup.security.severity."+p));c.value=p,o===p&&(c.selected=!0),i.appendChild(c)}),i.addEventListener("change",()=>S(t.answers.securityDetail,e,i.value)),r.appendChild(i)}return r}function B(){x&&x.parentNode&&x.parentNode.removeChild(x),x=null}function $(){const e=[];return t.answers.securityPathsRestrict&&e.push(d("web.setup.security.paths")),t.answers.securityBashBlock&&e.push(d("web.setup.security.bash")),t.answers.securityFlagsBlock&&e.push(d("web.setup.security.flags")),e.length?e.join(", "):d("web.setup.review.security_off")}function ee(){const e=t.answers.apiKey;return e?e.length<=4?"••••":"••••"+e.slice(-4):d("web.setup.review.not_needed")}function te(){const e=C("review"),n=[[d("web.setup.review.provider"),t.answers.provider],[d("web.setup.review.baseUrl"),t.answers.apiBase],[d("web.setup.review.apiKey"),ee()],[d("web.setup.review.model"),t.answers.model],[d("web.setup.review.context"),String(t.answers.contextWindow)],[d("web.setup.review.iterations"),String(t.answers.maxToolIterations)],[d("web.setup.review.locale"),t.answers.locale],[d("web.setup.review.security"),$()]],s=a("div","setup-summary");return n.forEach(([r,i])=>{const o=a("div","r");o.appendChild(a("span","k",r)),o.appendChild(a("span","v",i)),s.appendChild(o)}),e.appendChild(s),e.appendChild(_()),e}function R(){const e=L[t.step];return e==="provider"&&!t.answers.apiBase?d("web.setup.provider.required"):e==="model"&&!t.answers.model?d("web.setup.model.required"):e==="context"&&(!(t.answers.contextWindow>0)||!(t.answers.maxToolIterations>0))?d("web.setup.context.required"):null}function se(){const e=a("div","setup-actions"),n=a("button","setup-btn",d("web.setup.back"));if(n.type="button",n.disabled=t.step===0,n.addEventListener("click",()=>{t.step!==0&&(g=null,t.step-=1,m())}),e.appendChild(n),e.appendChild(a("span","spacer")),t.step<L.length-1){const s=a("button","setup-btn primary",d("web.setup.next"));s.type="button",s.addEventListener("click",()=>{const r=R();if(r){l(b.querySelector(".setup-step"),"err",r);return}g=null,t.step+=1,m()}),e.appendChild(s)}else{const s=a("button","setup-btn primary",d("web.setup.finish"));s.type="button",s.addEventListener("click",()=>{ne(s)}),e.appendChild(s)}return e}async function ne(e){const n=R();if(n){l(b.querySelector(".setup-step"),"err",n);return}e.disabled=!0,l(b.querySelector(".setup-step"),"",d("web.setup.saving"));const s=await y("/api/setup",{method:"POST",body:{provider:t.answers.provider,apiBase:t.answers.apiBase,apiKey:t.answers.apiKey,model:t.answers.model,contextWindow:t.answers.contextWindow,maxToolIterations:t.answers.maxToolIterations,locale:t.answers.locale,securityBashBlock:t.answers.securityBashBlock,securityFlagsBlock:t.answers.securityFlagsBlock,securityPathsRestrict:t.answers.securityPathsRestrict,securityDetail:t.answers.securityDetail}});if(!s.ok){e.disabled=!1,l(b.querySelector(".setup-step"),"err",d("web.setup.failed"));return}if(s.data&&s.data.warning){l(b.querySelector(".setup-step"),"warn",d("web.setup.saved_warning",{warning:s.data.warning})),setTimeout(()=>location.reload(),1500);return}location.reload()}window.MmaSetup={maybeOpen:j}})();
|