cli-jaw 2.1.2 â 2.1.3
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/README.md +6 -5
- package/dist/bin/cli-jaw.js +14 -2
- package/dist/bin/cli-jaw.js.map +1 -1
- package/dist/bin/commands/chat-search.js +71 -0
- package/dist/bin/commands/chat-search.js.map +1 -0
- package/dist/bin/commands/goal.js +48 -3
- package/dist/bin/commands/goal.js.map +1 -1
- package/dist/bin/commands/history.js +61 -0
- package/dist/bin/commands/history.js.map +1 -0
- package/dist/bin/commands/lock.js +104 -0
- package/dist/bin/commands/lock.js.map +1 -0
- package/dist/bin/commands/memory.js +23 -2
- package/dist/bin/commands/memory.js.map +1 -1
- package/dist/bin/commands/project.js +4 -1
- package/dist/bin/commands/project.js.map +1 -1
- package/dist/bin/commands/tui/simple-mode.js +0 -1
- package/dist/bin/commands/tui/simple-mode.js.map +1 -1
- package/dist/lib/upload.js +7 -0
- package/dist/lib/upload.js.map +1 -1
- package/dist/server.js +127 -19
- package/dist/server.js.map +1 -1
- package/dist/src/agent/agy-runtime.js +1 -0
- package/dist/src/agent/agy-runtime.js.map +1 -1
- package/dist/src/agent/agy-transcript-watcher.js +78 -0
- package/dist/src/agent/agy-transcript-watcher.js.map +1 -0
- package/dist/src/agent/agy-transcript.js +158 -0
- package/dist/src/agent/agy-transcript.js.map +1 -0
- package/dist/src/agent/args.js +18 -4
- package/dist/src/agent/args.js.map +1 -1
- package/dist/src/agent/codex-app-client.js +1 -1
- package/dist/src/agent/codex-app-client.js.map +1 -1
- package/dist/src/agent/cursor-runtime.js +1 -0
- package/dist/src/agent/cursor-runtime.js.map +1 -1
- package/dist/src/agent/kiro-runtime.js +11 -3
- package/dist/src/agent/kiro-runtime.js.map +1 -1
- package/dist/src/agent/lifecycle-handler.js +18 -11
- package/dist/src/agent/lifecycle-handler.js.map +1 -1
- package/dist/src/agent/memory-flush-controller.js +2 -1
- package/dist/src/agent/memory-flush-controller.js.map +1 -1
- package/dist/src/agent/session-persistence.js +2 -2
- package/dist/src/agent/session-persistence.js.map +1 -1
- package/dist/src/agent/spawn/queue.js +1 -1
- package/dist/src/agent/spawn/queue.js.map +1 -1
- package/dist/src/agent/spawn-env.js +1 -1
- package/dist/src/agent/spawn-env.js.map +1 -1
- package/dist/src/agent/spawn.js +76 -48
- package/dist/src/agent/spawn.js.map +1 -1
- package/dist/src/agent/watchdog.js +1 -1
- package/dist/src/agent/watchdog.js.map +1 -1
- package/dist/src/browser/actions.js +0 -8
- package/dist/src/browser/actions.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/browser-escalation.js +5 -29
- package/dist/src/browser/adaptive-fetch/browser-escalation.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/browser-runtime.js +5 -14
- package/dist/src/browser/adaptive-fetch/browser-runtime.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/browser-session.js +14 -28
- package/dist/src/browser/adaptive-fetch/browser-session.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/challenge-detector.js +4 -26
- package/dist/src/browser/adaptive-fetch/challenge-detector.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/content-scorer.js +5 -29
- package/dist/src/browser/adaptive-fetch/content-scorer.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/endpoint-resolvers.js +0 -64
- package/dist/src/browser/adaptive-fetch/endpoint-resolvers.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/fetcher.js +4 -19
- package/dist/src/browser/adaptive-fetch/fetcher.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/human-loop.js +0 -26
- package/dist/src/browser/adaptive-fetch/human-loop.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/index.js +74 -145
- package/dist/src/browser/adaptive-fetch/index.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/metadata.js +1 -41
- package/dist/src/browser/adaptive-fetch/metadata.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/output.js +1 -18
- package/dist/src/browser/adaptive-fetch/output.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/reader-adapters.js +43 -75
- package/dist/src/browser/adaptive-fetch/reader-adapters.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/safety.js +5 -48
- package/dist/src/browser/adaptive-fetch/safety.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/third-party-readers.js +0 -11
- package/dist/src/browser/adaptive-fetch/third-party-readers.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/trace.js +3 -18
- package/dist/src/browser/adaptive-fetch/trace.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/transforms.js +0 -23
- package/dist/src/browser/adaptive-fetch/transforms.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/types.js +3 -0
- package/dist/src/browser/adaptive-fetch/types.js.map +1 -0
- package/dist/src/browser/adaptive-fetch/validators.js +0 -17
- package/dist/src/browser/adaptive-fetch/validators.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/waf-profiles.js +0 -10
- package/dist/src/browser/adaptive-fetch/waf-profiles.js.map +1 -1
- package/dist/src/browser/connection.js +1 -1
- package/dist/src/browser/connection.js.map +1 -1
- package/dist/src/browser/web-ai/chatgpt-response.js +0 -1
- package/dist/src/browser/web-ai/chatgpt-response.js.map +1 -1
- package/dist/src/browser/web-ai/chatgpt.js +0 -33
- package/dist/src/browser/web-ai/chatgpt.js.map +1 -1
- package/dist/src/browser/web-ai/diagnostics.js +0 -16
- package/dist/src/browser/web-ai/diagnostics.js.map +1 -1
- package/dist/src/browser/web-ai/doctor.js.map +1 -1
- package/dist/src/browser/web-ai/errors.js +1 -1
- package/dist/src/browser/web-ai/errors.js.map +1 -1
- package/dist/src/cli/command-context.js.map +1 -1
- package/dist/src/cli/commands.js +13 -2
- package/dist/src/cli/commands.js.map +1 -1
- package/dist/src/cli/compact.js +2 -1
- package/dist/src/cli/compact.js.map +1 -1
- package/dist/src/cli/handlers/session-handlers.js +34 -0
- package/dist/src/cli/handlers/session-handlers.js.map +1 -0
- package/dist/src/cli/handlers-project.js.map +1 -1
- package/dist/src/cli/handlers-workflows.js +76 -13
- package/dist/src/cli/handlers-workflows.js.map +1 -1
- package/dist/src/cli/handlers.js +37 -36
- package/dist/src/cli/handlers.js.map +1 -1
- package/dist/src/cli/registry.js +7 -7
- package/dist/src/cli/registry.js.map +1 -1
- package/dist/src/core/chat-sessions.js +63 -0
- package/dist/src/core/chat-sessions.js.map +1 -0
- package/dist/src/core/compact.js +43 -11
- package/dist/src/core/compact.js.map +1 -1
- package/dist/src/core/config.js +9 -1
- package/dist/src/core/config.js.map +1 -1
- package/dist/src/core/db.js +48 -15
- package/dist/src/core/db.js.map +1 -1
- package/dist/src/core/main-session.js +3 -2
- package/dist/src/core/main-session.js.map +1 -1
- package/dist/src/goal/heartbeat.js +88 -5
- package/dist/src/goal/heartbeat.js.map +1 -1
- package/dist/src/goal/store.js +38 -3
- package/dist/src/goal/store.js.map +1 -1
- package/dist/src/manager/lifecycle-store.js.map +1 -1
- package/dist/src/manager/lifecycle.js +45 -1
- package/dist/src/manager/lifecycle.js.map +1 -1
- package/dist/src/manager/preview-link-policy.js +11 -4
- package/dist/src/manager/preview-link-policy.js.map +1 -1
- package/dist/src/manager/server.js +25 -9
- package/dist/src/manager/server.js.map +1 -1
- package/dist/src/manager/shutdown.js +8 -3
- package/dist/src/manager/shutdown.js.map +1 -1
- package/dist/src/memory/indexing.js +49 -1
- package/dist/src/memory/indexing.js.map +1 -1
- package/dist/src/memory/runtime.js +2 -1
- package/dist/src/memory/runtime.js.map +1 -1
- package/dist/src/messaging/send.js +66 -7
- package/dist/src/messaging/send.js.map +1 -1
- package/dist/src/orchestrator/distribute.js +2 -2
- package/dist/src/orchestrator/gateway.js +4 -4
- package/dist/src/orchestrator/gateway.js.map +1 -1
- package/dist/src/orchestrator/pipeline.js +2 -1
- package/dist/src/orchestrator/pipeline.js.map +1 -1
- package/dist/src/orchestrator/sanitize.js +57 -7
- package/dist/src/orchestrator/sanitize.js.map +1 -1
- package/dist/src/orchestrator/state-machine.js +15 -8
- package/dist/src/orchestrator/state-machine.js.map +1 -1
- package/dist/src/prompt/builder.js +171 -86
- package/dist/src/prompt/builder.js.map +1 -1
- package/dist/src/prompt/templates/a1-system.md +94 -66
- package/dist/src/prompt/templates/employee.md +41 -59
- package/dist/src/prompt/templates/skills.md +6 -0
- package/dist/src/routes/browser.js +3 -3
- package/dist/src/routes/browser.js.map +1 -1
- package/dist/src/routes/goal.js +38 -2
- package/dist/src/routes/goal.js.map +1 -1
- package/dist/src/routes/messaging.js +8 -3
- package/dist/src/routes/messaging.js.map +1 -1
- package/dist/src/routes/orchestrate.js +3 -2
- package/dist/src/routes/orchestrate.js.map +1 -1
- package/dist/src/routes/quota-agy-reverse.js +6 -0
- package/dist/src/routes/quota-agy-reverse.js.map +1 -1
- package/dist/src/routes/quota.js +68 -6
- package/dist/src/routes/quota.js.map +1 -1
- package/dist/src/routes/settings.js +6 -6
- package/dist/src/routes/settings.js.map +1 -1
- package/dist/src/security/path-guards.js +0 -3
- package/dist/src/security/path-guards.js.map +1 -1
- package/dist/src/workflows/scope-sandbox.js +17 -5
- package/dist/src/workflows/scope-sandbox.js.map +1 -1
- package/package.json +1 -1
- package/public/css/chat.css +27 -0
- package/public/css/orc-state.css +10 -6
- package/public/css/variables.css +4 -0
- package/public/dist/assets/{Agent-DkH7eoHd.js â Agent-DBKNQ6tp.js} +1 -1
- package/public/dist/assets/{FolderPanel-DSkanaGN.js â FolderPanel-DT0fU8f2.js} +1 -1
- package/public/dist/assets/{Heartbeat-C3JS6gkF.js â Heartbeat-fsuLzY9c.js} +1 -1
- package/public/dist/assets/{Memory-C-EQubN2.js â Memory-CRR8kotI.js} +1 -1
- package/public/dist/assets/{ModelProvider-BD2KrypI.js â ModelProvider-DQgISbKw.js} +1 -1
- package/public/dist/assets/agent-meta-C4mauPL5.js +1 -0
- package/public/dist/assets/app-0OQhPpTG.css +1 -0
- package/public/dist/assets/app-CSqIyg9A.js +55 -0
- package/public/dist/assets/constants-BHMkzpN_.js +1 -0
- package/public/dist/assets/{employees-_A-p_bZg.js â employees-CZdWHH-r.js} +1 -1
- package/public/dist/assets/manager-CGTQ5EIm.js +12 -0
- package/public/dist/assets/manager-UBunDqMH.css +1 -0
- package/public/dist/assets/{memory-D9AUn8fG.js â memory-B3QSmj_e.js} +1 -1
- package/public/dist/assets/memory-DOBqiuPc.js +1 -0
- package/public/dist/assets/render-J11oxfnl.js +28 -0
- package/public/dist/assets/settings-BV_2Bh0_.js +1 -0
- package/public/dist/assets/settings-m_cim0ov.js +151 -0
- package/public/dist/assets/sidebar-ZBXdBgF7.js +49 -0
- package/public/dist/assets/{skills-BDVLIrVT.js â skills-CjaBmIPV.js} +1 -1
- package/public/dist/assets/skills-Xm3fl1zr.js +1 -0
- package/public/dist/assets/{slash-commands-C5da3q1p.js â slash-commands-71jc07Wf.js} +1 -1
- package/public/dist/assets/slash-commands-BO6ssnAz.js +1 -0
- package/public/dist/assets/{trace-drawer-5kqBzFMk.js â trace-drawer-Czvf2P2o.js} +1 -1
- package/public/dist/assets/ui-CverZJnd.js +1 -0
- package/public/dist/assets/ui-qKxy-4p9.js +142 -0
- package/public/dist/index.html +2 -2
- package/public/dist/manager/index.html +2 -2
- package/public/js/constants.ts +4 -4
- package/public/js/features/chat-messages.ts +13 -2
- package/public/js/features/chat.ts +86 -44
- package/public/js/features/media-lightbox.ts +40 -0
- package/public/js/features/pending-queue.ts +20 -2
- package/public/js/features/settings-cli-status-render.ts +2 -4
- package/public/js/features/settings-cli-status.ts +6 -2
- package/public/js/features/settings-types.ts +1 -0
- package/public/js/features/ui-status.ts +5 -1
- package/public/js/main.ts +2 -0
- package/public/js/render/markdown.ts +16 -0
- package/public/js/ui.ts +8 -4
- package/public/js/ws.ts +27 -16
- package/public/locales/en.json +1 -0
- package/public/locales/ja.json +1 -0
- package/public/locales/ko.json +1 -0
- package/public/locales/zh.json +1 -0
- package/public/manager/src/InstancePreview.tsx +21 -1
- package/public/manager/src/SidebarRailRouter.tsx +32 -4
- package/public/manager/src/components/InstanceRow.tsx +0 -1
- package/public/manager/src/components/WorkbenchHeader.tsx +17 -7
- package/public/manager/src/folder-panel/FolderPanel.tsx +13 -2
- package/public/manager/src/hooks/useElectronDroppedPaths.ts +89 -0
- package/public/manager/src/manager-components.css +34 -0
- package/public/manager/src/manager-polish.css +10 -0
- package/public/manager/src/panels/desktop-bridge.ts +11 -0
- package/public/manager/src/settings/pages/components/agent/agent-meta.ts +4 -4
- package/scripts/smoke/agy-transcript-tail-smoke.mjs +89 -0
- package/public/dist/assets/agent-meta-B1098B_a.js +0 -1
- package/public/dist/assets/app-ByHYOMZE.js +0 -48
- package/public/dist/assets/app-CYdhP6Vh.css +0 -1
- package/public/dist/assets/constants-s2UJodER.js +0 -1
- package/public/dist/assets/manager-B2qEQRxN.css +0 -1
- package/public/dist/assets/manager-CR9BA-wO.js +0 -12
- package/public/dist/assets/memory-D1RKYvyu.js +0 -1
- package/public/dist/assets/render-DFBujF8n.js +0 -28
- package/public/dist/assets/settings-B4ZkeaU-.js +0 -1
- package/public/dist/assets/settings-D9jTceN0.js +0 -151
- package/public/dist/assets/sidebar-DPPRNiTc.js +0 -48
- package/public/dist/assets/skills-8nHJkv-r.js +0 -1
- package/public/dist/assets/slash-commands-RJWO8wJZ.js +0 -1
- package/public/dist/assets/ui-Crnp79bG.js +0 -142
- package/public/dist/assets/ui-HtSKByR3.js +0 -1
- /package/public/dist/assets/{locale-DT1WRaeJ.js â locale-BHMJIzyw.js} +0 -0
- /package/public/dist/assets/{provider-icons-CVVK5xUP.js â provider-icons-Crv6yvlG.js} +0 -0
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import{t as e}from"./state-D04-chBy.js";import{i as t,n,r}from"./api-tVoG39dL.js";import{C as i,_ as a,a as o,f as s}from"./render-J11oxfnl.js";import{n as c,r as l}from"./locale-BHMJIzyw.js";import{a as u,i as d,n as f,o as p,t as m}from"./constants-BHMkzpN_.js";import{n as h,r as g}from"./provider-icons-Crv6yvlG.js";function ee(e){let n=document.getElementById(`sttEngine`),r=document.getElementById(`sttGeminiKey`),i=document.getElementById(`sttGeminiModel`),a=document.getElementById(`sttGeminiModelCustom`),o=document.getElementById(`sttWhisperModel`),s=document.getElementById(`sttOpenaiBaseUrl`),c=document.getElementById(`sttOpenaiKey`),l=document.getElementById(`sttOpenaiModel`),u=document.getElementById(`sttVertexJson`);if(n&&(n.value=e.engine||`auto`),r&&(r.placeholder=e.geminiKeySet?_(e.geminiKeyLast4):`AIza...`),i){let t=e.geminiModel||`gemini-2.5-flash-lite`;Array.from(i.options).some(e=>e.value===t)?i.value=t:(i.value=`__custom__`,a&&(a.value=t,a.style.display=``))}o&&(o.value=e.whisperModel||`mlx-community/whisper-large-v3-turbo`),s&&(s.value=e.openaiBaseUrl||``),c&&(c.placeholder=e.openaiKeySet?_(e.openaiKeyLast4):`sk-...`),l&&(l.value=e.openaiModel||``),u&&(u.value=e.vertexConfig||``);function d(){let e=n?.value||`auto`,t=e===`auto`||e===`gemini`,r=e===`openai`,i=e===`vertex`,a=e===`auto`||e===`whisper`;document.querySelectorAll(`.stt-gemini`).forEach(e=>e.style.display=t?``:`none`),document.querySelectorAll(`.stt-openai`).forEach(e=>e.style.display=r?``:`none`),document.querySelectorAll(`.stt-vertex`).forEach(e=>e.style.display=i?``:`none`),document.querySelectorAll(`.stt-whisper`).forEach(e=>e.style.display=a?``:`none`)}d();async function f(){let e={stt:{engine:n?.value||`auto`,geminiModel:(i?.value===`__custom__`?a?.value:i?.value)||`gemini-2.5-flash-lite`,whisperModel:o?.value||``,openaiBaseUrl:s?.value||``,openaiModel:l?.value||``,vertexConfig:u?.value||``}};r?.value&&(e.stt.geminiApiKey=r.value),c?.value&&(e.stt.openaiApiKey=c.value),console.log(`[stt] saving:`,{engine:e.stt.engine,hasGeminiKey:!!e.stt.geminiApiKey,hasOpenaiKey:!!e.stt.openaiApiKey});try{if(await t(`/api/settings`,`PUT`,e),r?.value){let e=r.value.slice(-4);r.value=``,r.placeholder=_(e)}if(c?.value){let e=c.value.slice(-4);c.value=``,c.placeholder=_(e)}}catch(e){console.error(`[stt] save failed:`,e)}}n?.addEventListener(`change`,()=>{d(),f()}),i?.addEventListener(`change`,()=>{a&&(a.style.display=i.value===`__custom__`?``:`none`),i.value!==`__custom__`&&f()}),a?.addEventListener(`blur`,f),r?.addEventListener(`blur`,()=>{r.value&&f()}),c?.addEventListener(`blur`,()=>{c.value&&f()}),s?.addEventListener(`blur`,f),l?.addEventListener(`blur`,f),o?.addEventListener(`blur`,f),u?.addEventListener(`blur`,f)}function _(e){return i(`stt.key.savedPlaceholder`,{last4:e||``})}async function te(){let e=document.getElementById(`tgToken`)?.value.trim()||``,n=document.getElementById(`tgChatIds`)?.value.trim()||``;await t(`/api/settings`,`PUT`,{telegram:{token:e,allowedChatIds:n?n.split(`,`).map(e=>parseInt(e.trim(),10)).filter(e=>!isNaN(e)):[]}})}async function ne(e){document.getElementById(`tgOn`)?.classList.toggle(`active`,e),document.getElementById(`tgOff`)?.classList.toggle(`active`,!e),await t(`/api/settings`,`PUT`,{telegram:{enabled:e}})}async function re(e){document.getElementById(`tgForwardOn`)?.classList.toggle(`active`,e),document.getElementById(`tgForwardOff`)?.classList.toggle(`active`,!e),await t(`/api/settings`,`PUT`,{telegram:{forwardAll:e}})}async function ie(e){document.getElementById(`tgMentionOn`)?.classList.toggle(`active`,e),document.getElementById(`tgMentionOff`)?.classList.toggle(`active`,!e),await t(`/api/settings`,`PUT`,{telegram:{mentionOnly:e}})}function ae(e){if(!e.telegram)return;let t=e.telegram;document.getElementById(`tgOn`)?.classList.toggle(`active`,!!t.enabled),document.getElementById(`tgOff`)?.classList.toggle(`active`,!t.enabled);let n=document.getElementById(`tgToken`);t.token&&n&&(n.value=t.token);let r=document.getElementById(`tgChatIds`);t.allowedChatIds?.length&&r&&(r.value=t.allowedChatIds.join(`, `));let i=t.forwardAll!==!1;document.getElementById(`tgForwardOn`)?.classList.toggle(`active`,i),document.getElementById(`tgForwardOff`)?.classList.toggle(`active`,!i);let a=t.mentionOnly!==!1;document.getElementById(`tgMentionOn`)?.classList.toggle(`active`,a),document.getElementById(`tgMentionOff`)?.classList.toggle(`active`,!a)}async function oe(){let e=document.getElementById(`dcToken`)?.value.trim()||``,n=document.getElementById(`dcGuildId`)?.value.trim()||``,r=document.getElementById(`dcChannelIds`)?.value.trim()||``;await t(`/api/settings`,`PUT`,{discord:{token:e,guildId:n,channelIds:r?r.split(`,`).map(e=>e.trim()).filter(Boolean):[]}})}async function se(e){document.getElementById(`dcOn`)?.classList.toggle(`active`,e),document.getElementById(`dcOff`)?.classList.toggle(`active`,!e),await t(`/api/settings`,`PUT`,{discord:{enabled:e}})}async function ce(e){document.getElementById(`dcForwardOn`)?.classList.toggle(`active`,e),document.getElementById(`dcForwardOff`)?.classList.toggle(`active`,!e),await t(`/api/settings`,`PUT`,{discord:{forwardAll:e}})}async function le(e){document.getElementById(`dcAllowBotsOn`)?.classList.toggle(`active`,e),document.getElementById(`dcAllowBotsOff`)?.classList.toggle(`active`,!e),await t(`/api/settings`,`PUT`,{discord:{allowBots:e}})}async function ue(e){document.getElementById(`dcMentionOn`)?.classList.toggle(`active`,e),document.getElementById(`dcMentionOff`)?.classList.toggle(`active`,!e),await t(`/api/settings`,`PUT`,{discord:{mentionOnly:e}})}function de(e){if(!e.discord)return;let t=e.discord;document.getElementById(`dcOn`)?.classList.toggle(`active`,!!t.enabled),document.getElementById(`dcOff`)?.classList.toggle(`active`,!t.enabled);let n=document.getElementById(`dcToken`);t.token&&n&&(n.value=t.token);let r=document.getElementById(`dcGuildId`);t.guildId&&r&&(r.value=t.guildId);let i=document.getElementById(`dcChannelIds`);t.channelIds?.length&&i&&(i.value=t.channelIds.join(`, `));let a=t.forwardAll!==!1;document.getElementById(`dcForwardOn`)?.classList.toggle(`active`,a),document.getElementById(`dcForwardOff`)?.classList.toggle(`active`,!a);let o=!!t.allowBots;document.getElementById(`dcAllowBotsOn`)?.classList.toggle(`active`,o),document.getElementById(`dcAllowBotsOff`)?.classList.toggle(`active`,!o);let s=!!t.mentionOnly;document.getElementById(`dcMentionOn`)?.classList.toggle(`active`,s),document.getElementById(`dcMentionOff`)?.classList.toggle(`active`,!s)}function fe(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.configured==`boolean`&&typeof t.activeInbound==`boolean`&&typeof t.sendCapable==`boolean`}function pe(e){if(!e||typeof e!=`object`)return null;let t=e.channels;if(!t||typeof t!=`object`)return null;let n=t;return n.activeInbound!==`telegram`&&n.activeInbound!==`discord`||!fe(n.telegram)||!fe(n.discord)?null:{activeInbound:n.activeInbound,telegram:n.telegram,discord:n.discord}}function me(e){let t=[];return t.push(e.configured?i(`settings.channel.configured`):i(`settings.channel.notConfigured`)),e.sendCapable&&t.push(i(`settings.channel.sendCapable`)),e.activeInbound&&t.push(i(`settings.channel.activeInbound`)),t}function he(e,t,n){let r=me(t).map(e=>`<span class="transport-status-chip">${a(e)}</span>`).join(``),o=n&&t.configured&&t.sendCapable&&!t.activeInbound?`<p class="transport-status-hint">${a(i(`settings.channel.sendOnlyHint`))}</p>`:``;return`
|
|
2
|
+
<div class="transport-status-block">
|
|
3
|
+
<div class="transport-status-label">${a(e)}</div>
|
|
4
|
+
<div class="transport-status-chips">${r}</div>
|
|
5
|
+
${o}
|
|
6
|
+
</div>`}function ge(e,t){e.innerHTML=`
|
|
7
|
+
<h4 class="section-title-row">
|
|
8
|
+
<span><span data-icon="radio"></span> ${a(i(`settings.channel.statusTitle`))}</span>
|
|
9
|
+
</h4>
|
|
10
|
+
${he(`Telegram`,t.telegram,!0)}
|
|
11
|
+
${he(`Discord`,t.discord,!0)}
|
|
12
|
+
`}async function _e(){let e=document.getElementById(`channelTransportStatus`);if(e)try{let n=pe(await t(`/api/health`,`GET`,null));if(!n){e.innerHTML=``,e.style.display=`none`;return}ge(e,n),e.style.display=``}catch{e.innerHTML=``,e.style.display=`none`}}async function ve(e){document.getElementById(`chTelegram`)?.classList.toggle(`active`,e===`telegram`),document.getElementById(`chDiscord`)?.classList.toggle(`active`,e===`discord`),document.getElementById(`channelTelegramSettings`)?.style.setProperty(`display`,e===`telegram`?``:`none`),document.getElementById(`channelDiscordSettings`)?.style.setProperty(`display`,e===`discord`?``:`none`),await t(`/api/settings`,`PUT`,{channel:e}),await _e()}function ye(e){let t=e.channel||`telegram`;document.getElementById(`chTelegram`)?.classList.toggle(`active`,t===`telegram`),document.getElementById(`chDiscord`)?.classList.toggle(`active`,t===`discord`),document.getElementById(`channelTelegramSettings`)?.style.setProperty(`display`,t===`telegram`?``:`none`),document.getElementById(`channelDiscordSettings`)?.style.setProperty(`display`,t===`discord`?``:`none`),_e()}function be(e){let t=document.getElementById(`fallbackOrderList`);if(!t)return;let n=Object.keys(e.perCli||{}),r=e.fallbackOrder||[],o=Math.min(n.length-1,3),s=``;for(let e=0;e<o;e++){let t=r[e]||``,o=n.map(e=>`<option value="${a(e)}" ${e===t?`selected`:``}>${a(u(e)?.label||g(e))}</option>`).join(``);s+=`
|
|
13
|
+
<div class="settings-row sub-row">
|
|
14
|
+
<label style="min-width:60px">Fallback ${e+1}</label>
|
|
15
|
+
<select id="fallback${e}"
|
|
16
|
+
style="font-size:11px;padding:4px;background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:4px;flex:1">
|
|
17
|
+
<option value="">${i(`settings.none`)}</option>
|
|
18
|
+
${o}
|
|
19
|
+
</select>
|
|
20
|
+
</div>`}t.innerHTML=s}async function xe(){await t(`/api/settings`,`PUT`,{fallbackOrder:[...document.querySelectorAll(`#fallbackOrderList select`)].map(e=>e.value).filter(Boolean)})}function Se(e){if(e.url)return`remote`;if(!e.command)return null;let t=e.command;return t===`npx`||t.endsWith(`/npx`)?`npx`:t===`uvx`||t===`uv`||t.endsWith(`/uvx`)?`uvx`:t===`docker`||t.endsWith(`/docker`)?`docker`:null}function Ce(e){return Object.values(e).filter(e=>e.command===`npx`||e.command===`uv`||e.command===`uvx`).length}var v=null;async function y(){try{let e=await n(`/api/mcp`);if(!e)return;v=e;let t=document.getElementById(`mcpServerList`);if(!t)return;let r=Object.entries(e.servers||{});if(!r.length){t.textContent=i(`mcp.noServers`),we(0);return}t.innerHTML=r.map(([e,t])=>{let n=Se(t),r=t.url||[t.command,...(t.args||[]).slice(0,2)].filter(Boolean).map(e=>a(e)).join(` `),i=n?` <span style="opacity:.5;font-size:0.85em">[${a(n)}]</span>`:``;return`<div style="padding:2px 0">âĸ <b>${a(e)}</b> <span style="opacity:.6">${r}</span>${i}</div>`}).join(``),we(Ce(e.servers))}catch{}}function we(e){let t=document.getElementById(`installBundleLabel`);t&&(t.textContent=`Install bundle (${e})`);let n=t?.closest(`button`);n&&(n.disabled=e===0)}async function Te(){let e=document.getElementById(`mcpSyncResult`);if(e){e.style.display=`block`,e.textContent=i(`mcp.syncing`);try{let n=await t(`/api/mcp/sync`,`POST`,{});if(!n){e.innerHTML=`${s.error} sync failed`;return}let r=n.results||{};e.innerHTML=Object.entries(r).map(([e,t])=>`${t?s.check:s.skip} ${a(e)}`).join(` `)}catch(t){e.innerHTML=`${s.error} ${a(t.message)}`}}}async function Ee(){let e=document.getElementById(`mcpSyncResult`);if(e){e.style.display=`block`,e.textContent=i(`mcp.installing`);try{let n=await t(`/api/mcp/install`,`POST`,{});if(!n){e.innerHTML=`${s.error} install failed`;return}e.innerHTML=Object.entries(n.results||{}).map(([e,t])=>`${t.status===`installed`?s.check:t.status===`skip`?s.skip:s.error} <b>${a(e)}</b>: ${a(t.status)}${t.bin?` ${s.arrowRight} `+a(t.bin):``}`).join(`<br>`),y()}catch(t){e.innerHTML=`${s.error} ${a(t.message)}`}}}var b=null,x=null,S=null,C=null,w=null,T=null,E=`local`,D=!1,De=[];function Oe(){if(b)return;b=document.createElement(`div`),b.id=`mcpModal`,b.className=`modal-overlay mcp-modal-overlay`,b.setAttribute(`role`,`presentation`),b.setAttribute(`aria-hidden`,`true`),b.addEventListener(`click`,e=>{e.target===b&&M()});let e=document.createElement(`div`);e.className=`modal-box mcp-modal-box`,e.setAttribute(`role`,`dialog`),e.setAttribute(`aria-modal`,`true`),e.setAttribute(`aria-label`,`MCP Server Management`),e.addEventListener(`click`,e=>e.stopPropagation());let t=document.createElement(`div`);t.className=`modal-header`;let n=document.createElement(`span`);n.textContent=`MCP Server Management`;let r=document.createElement(`button`);r.type=`button`,r.className=`help-trigger`,r.textContent=`?`,r.setAttribute(`aria-label`,`MCP help`),r.addEventListener(`click`,()=>Le());let i=document.createElement(`button`);i.type=`button`,i.className=`btn-modal-close`,i.setAttribute(`aria-label`,`Close`),i.textContent=`x`,i.addEventListener(`click`,()=>M());let a=document.createElement(`div`);a.style.cssText=`display:flex;align-items:center;gap:6px`,a.append(n,r),t.append(a,i),x=document.createElement(`div`),x.style.cssText=`padding:16px;overflow-y:auto;flex:1`;let o=document.createElement(`div`);o.style.cssText=`display:flex;gap:4px;margin-bottom:12px`;let s=O(`Active Servers`,!0),c=O(`Add New`,!1),l=O(`Browse`,!1);De=[s,c,l],s.addEventListener(`click`,()=>k(`active`)),c.addEventListener(`click`,()=>k(`add`)),l.addEventListener(`click`,()=>k(`browse`)),o.append(s,c,l),S=document.createElement(`div`),T=document.createElement(`div`),T.style.display=`none`,T.innerHTML=`<p style="opacity:.5">Loading registry...</p>`,C=document.createElement(`div`),C.style.display=`none`,C.innerHTML=ke(),C.querySelectorAll(`[data-mcp-subtab]`).forEach(e=>{e.addEventListener(`click`,()=>{E=e.dataset.mcpSubtab,Ae()})}),w=C.querySelector(`#mcpAddError`);let u=C.querySelector(`[data-action="mcpAddAndSync"]`);u&&u.addEventListener(`click`,()=>void Ie());let d=C.querySelector(`[data-action="closeMcpModal"]`);d&&d.addEventListener(`click`,()=>M()),x.append(o,S,T,C);let f=document.createElement(`div`);f.className=`modal-footer`;let p=document.createElement(`button`);p.type=`button`,p.className=`btn-save`,p.textContent=`Close`,p.addEventListener(`click`,()=>M()),f.append(p),e.append(t,x,f),b.append(e),document.body.append(b)}function O(e,t){let n=document.createElement(`button`);return n.type=`button`,n.className=`btn-clear btn-tab${t?` is-active`:``}`,n.textContent=e,n}function ke(){return`
|
|
21
|
+
<div style="display:flex;gap:4px;margin-bottom:8px">
|
|
22
|
+
<button type="button" class="btn-clear btn-tab is-active" data-mcp-subtab="local">Local</button>
|
|
23
|
+
<button type="button" class="btn-clear btn-tab" data-mcp-subtab="remote">Remote</button>
|
|
24
|
+
</div>
|
|
25
|
+
<div id="mcpAddLocal">
|
|
26
|
+
<div class="settings-row"><label>Name</label><input type="text" id="mcpAddName" placeholder="my-server"></div>
|
|
27
|
+
<div class="settings-row"><label>Command</label><input type="text" id="mcpAddCommand" placeholder="npx"></div>
|
|
28
|
+
<div class="settings-row"><label>Args (comma separated)</label><input type="text" id="mcpAddArgs" placeholder="-y, @upstash/context7-mcp"></div>
|
|
29
|
+
<div class="settings-row"><label>Env (KEY=value per line)</label><textarea id="mcpAddEnv" rows="2" placeholder="API_KEY=xxx"></textarea></div>
|
|
30
|
+
</div>
|
|
31
|
+
<div id="mcpAddRemote" style="display:none">
|
|
32
|
+
<div class="settings-row"><label>Name</label><input type="text" id="mcpAddRemoteName" placeholder="my-api"></div>
|
|
33
|
+
<div class="settings-row"><label>URL</label><input type="text" id="mcpAddUrl" placeholder="https://mcp.example.com/sse"></div>
|
|
34
|
+
<div class="settings-row"><label>Headers (KEY=value per line)</label><textarea id="mcpAddHeaders" rows="2"></textarea></div>
|
|
35
|
+
</div>
|
|
36
|
+
<div id="mcpAddError" class="text-error text-xs py-1" style="display:none"></div>
|
|
37
|
+
<div style="display:flex;gap:8px;margin-top:12px;justify-content:flex-end">
|
|
38
|
+
<button type="button" class="btn-clear" data-action="closeMcpModal">Cancel</button>
|
|
39
|
+
<button type="button" class="btn-clear btn-save" data-action="mcpAddAndSync">Add & Sync</button>
|
|
40
|
+
</div>`}function k(e){S&&(S.style.display=e===`active`?``:`none`),C&&(C.style.display=e===`add`?``:`none`),T&&(T.style.display=e===`browse`?``:`none`),De.forEach((t,n)=>{let r=[`active`,`add`,`browse`][n];t.classList.toggle(`is-active`,r===e)}),e===`active`&&je(),e===`add`&&Ne(),e===`browse`&&Re()}function Ae(){let e=C?.querySelector(`#mcpAddLocal`),t=C?.querySelector(`#mcpAddRemote`);e&&(e.style.display=E===`local`?``:`none`),t&&(t.style.display=E===`remote`?``:`none`),C?.querySelectorAll(`[data-mcp-subtab]`).forEach(e=>{e.classList.toggle(`is-active`,e.dataset.mcpSubtab===E)})}function je(){if(!S||!v)return;let e=Object.entries(v.servers||{});if(!e.length){S.innerHTML=`<p style="opacity:.5">No active MCP servers.</p>`;return}S.innerHTML=e.map(([e,t])=>{let n=Se(t),r=n?`<span class="mcp-active-tag">[${a(n)}]</span>`:``,i=t.command?a(t.command)+(t.args?.length?` `+t.args.map(e=>a(e)).join(` `):``):``,o=t.url?a(t.url):``,s=t.env?Object.keys(t.env):[],c=t.headers?Object.keys(t.headers):[],l=``;return o&&(l+=`<div class="mcp-active-detail">URL: ${o}</div>`),i&&(l+=`<div class="mcp-active-detail">Command: ${i}</div>`),s.length&&(l+=`<div class="mcp-active-detail">Env: ${s.map(e=>a(e)).join(`, `)}</div>`),c.length&&(l+=`<div class="mcp-active-detail">Headers: ${c.map(e=>a(e)).join(`, `)}</div>`),`<div class="mcp-active-row">
|
|
41
|
+
<div style="flex:1">
|
|
42
|
+
<div style="display:flex;align-items:center;gap:6px">
|
|
43
|
+
<span class="mcp-active-name">${a(e)}</span>
|
|
44
|
+
${r}
|
|
45
|
+
</div>
|
|
46
|
+
${l}
|
|
47
|
+
</div>
|
|
48
|
+
<button type="button" class="btn-clear mcp-active-remove" data-mcp-remove="${a(e)}">Remove</button>
|
|
49
|
+
</div>`}).join(``),S.querySelectorAll(`[data-mcp-remove]`).forEach(e=>{e.addEventListener(`click`,()=>{let t=e.dataset.mcpRemove;t&&Me(t)})})}async function Me(e){if(!v)return;let n={...v.servers};delete n[e];try{await t(`/api/mcp`,`PUT`,{...v,servers:n}),await t(`/api/mcp/sync`,`POST`,{}),await y(),je()}catch(e){A(e.message)}}function Ne(){for(let e of[`mcpAddName`,`mcpAddCommand`,`mcpAddArgs`,`mcpAddEnv`,`mcpAddRemoteName`,`mcpAddUrl`,`mcpAddHeaders`]){let t=(C??document).querySelector(`#${e}`);t&&(t.value=``)}Pe()}function A(e){w&&(w.style.display=`block`,w.textContent=e)}function Pe(){w&&(w.style.display=`none`)}function Fe(e){let t={};for(let n of e.split(/\r?\n/)){let e=n.trim();if(!e||e.startsWith(`#`))continue;let r=e.indexOf(`=`);r!==-1&&(t[e.slice(0,r).trim()]=e.slice(r+1))}return t}function j(e){return(C??document).querySelector(`#${e}`)?.value?.trim()??``}async function Ie(){if(!v)return;let e=E===`remote`,n,r;if(e){n=j(`mcpAddRemoteName`);let e=j(`mcpAddUrl`),t=j(`mcpAddHeaders`);if(!n){A(`Name is required.`);return}if(!e){A(`URL is required.`);return}r={url:e};let i=Fe(t);Object.keys(i).length>0&&(r.headers=i)}else{n=j(`mcpAddName`);let e=j(`mcpAddCommand`),t=j(`mcpAddArgs`),i=j(`mcpAddEnv`);if(!n){A(`Name is required.`);return}if(!e){A(`Command is required.`);return}r={command:e};let a=t.split(/,|\n/).map(e=>e.trim()).filter(Boolean);a.length>0&&(r.args=a);let o=Fe(i);Object.keys(o).length>0&&(r.env=o)}if(v.servers[n]){A(`Server "${n}" already exists.`);return}try{await t(`/api/mcp`,`PUT`,{...v,servers:{...v.servers,[n]:r}}),await t(`/api/mcp/sync`,`POST`,{}),await y(),M()}catch(e){A(e.message)}}function Le(){let e=document.getElementById(`mcpHelpOverlay`);if(e){e.remove();return}let t=document.createElement(`div`);t.id=`mcpHelpOverlay`,t.className=`mcp-help-overlay`,t.addEventListener(`click`,e=>{e.target===t&&t.remove()});let n=document.createElement(`div`);n.className=`mcp-help-inner`,n.innerHTML=`
|
|
50
|
+
<h4>MCP Server</h4>
|
|
51
|
+
<p>MCP (Model Context Protocol) adds capabilities to AI agents â like installing apps on a phone.</p>
|
|
52
|
+
|
|
53
|
+
<h4>Local Server</h4>
|
|
54
|
+
<p>Runs on your machine. Provide a command and args.</p>
|
|
55
|
+
<pre>Name: context7
|
|
56
|
+
Command: npx
|
|
57
|
+
Args: -y, @upstash/context7-mcp</pre>
|
|
58
|
+
|
|
59
|
+
<h4>Remote Server</h4>
|
|
60
|
+
<p>Connects to an external URL (SSE or Streamable HTTP).</p>
|
|
61
|
+
<pre>Name: my-api
|
|
62
|
+
URL: https://mcp.example.com/sse</pre>
|
|
63
|
+
|
|
64
|
+
<h4>Server Types</h4>
|
|
65
|
+
<p><code>[npx]</code> Node.js package (npx -y ...)<br>
|
|
66
|
+
<code>[uvx]</code> Python package (uvx ...)<br>
|
|
67
|
+
<code>[docker]</code> Docker container<br>
|
|
68
|
+
<code>[remote]</code> External URL</p>
|
|
69
|
+
|
|
70
|
+
<h4>After Adding</h4>
|
|
71
|
+
<p>The server is automatically synced to all installed CLIs (Claude, Codex, Gemini, Cursor, Copilot, OpenCode).</p>
|
|
72
|
+
<p><code>Install bundle</code> converts npx/uvx servers to global binaries for faster startup.</p>
|
|
73
|
+
|
|
74
|
+
<div style="text-align:right;margin-top:12px">
|
|
75
|
+
<button type="button" class="btn-save" id="mcpHelpClose">OK</button>
|
|
76
|
+
</div>
|
|
77
|
+
`,t.append(n),document.body.append(t),n.querySelector(`#mcpHelpClose`)?.addEventListener(`click`,()=>t.remove())}async function Re(){if(T){T.innerHTML=`<p style="opacity:.5">Loading registry...</p>`,v||await y();try{let e=await n(`/api/mcp/registry`);if(!e?.entries?.length&&!e?.builtins?.length){T.innerHTML=`<p style="opacity:.5">No MCP servers in registry.</p>`;return}let t=v?Object.keys(v.servers):[],r=``;r+=e.entries.map(e=>{let n=t.includes(e.id),r=e.tags?.slice(0,3).map(e=>`<span style="background:var(--border);padding:1px 4px;border-radius:3px;font-size:10px">${a(e)}</span>`).join(` `)||``;return`<div style="padding:10px 0;border-bottom:1px solid var(--border)">
|
|
78
|
+
<div style="display:flex;align-items:center;gap:8px">
|
|
79
|
+
<b>${a(e.name)}</b>
|
|
80
|
+
<span style="opacity:.5;font-size:0.85em">[${a(e.type)}]</span>
|
|
81
|
+
<span style="opacity:.4;font-size:0.85em">${a(e.category)}</span>
|
|
82
|
+
${n?`<span style="color:var(--success);font-size:11px">Installed</span>`:`<button type="button" class="btn-clear text-xs" style="color:var(--accent)" data-registry-install="${a(e.id)}">+ Install</button>`}
|
|
83
|
+
</div>
|
|
84
|
+
<p style="margin:4px 0 4px 0;font-size:12px;opacity:.75">${a(e.description)}</p>
|
|
85
|
+
<div style="display:flex;gap:4px;align-items:center">
|
|
86
|
+
${r}
|
|
87
|
+
${e.url?`<a href="${a(e.url)}" target="_blank" rel="noopener noreferrer" style="font-size:10px;opacity:.5;margin-left:auto">source</a>`:``}
|
|
88
|
+
</div>
|
|
89
|
+
</div>`}).join(``),e.builtins?.length&&(r+=`<div style="margin-top:16px;padding-top:12px;border-top:2px solid var(--border)">
|
|
90
|
+
<h4 style="font-size:12px;opacity:.6;margin:0 0 8px">Harness Built-ins (omo / omx)</h4>
|
|
91
|
+
<p style="font-size:11px;opacity:.4;margin:0 0 8px">Not installable via registry â built into harness runtimes. Listed for reference.</p>`,r+=e.builtins.map(e=>{let t=e.standalone_config&&Object.keys(e.standalone_config).length>0;return`<div style="padding:6px 0;border-bottom:1px solid var(--border)">
|
|
92
|
+
<div style="display:flex;align-items:center;gap:6px">
|
|
93
|
+
<b style="font-size:12px">${a(e.name)}</b>
|
|
94
|
+
<span style="opacity:.4;font-size:0.8em">${a(e.harness)}</span>
|
|
95
|
+
${t?`<button type="button" class="btn-clear text-xs" style="color:var(--accent)" data-builtin-install="${a(e.id)}">+ Install standalone</button>`:``}
|
|
96
|
+
</div>
|
|
97
|
+
<p style="margin:2px 0;font-size:11px;opacity:.65">${a(e.description)}</p>
|
|
98
|
+
</div>`}).join(``),r+=`</div>`),T.innerHTML=r,T.querySelectorAll(`[data-registry-install]`).forEach(t=>{t.addEventListener(`click`,()=>{let n=t.dataset.registryInstall,r=e.entries.find(e=>e.id===n);r&&ze(r,t)})}),T.querySelectorAll(`[data-builtin-install]`).forEach(t=>{t.addEventListener(`click`,()=>{let n=t.dataset.builtinInstall,r=e.builtins?.find(e=>e.id===n);r?.standalone_config&&ze({id:r.id,name:r.name,description:r.description,category:`harness`,type:`remote`,config:r.standalone_config,tags:[],url:r.source},t)})})}catch(e){T.innerHTML=`<p style="color:var(--color-error)">${a(e.message)}</p>`}}}async function ze(e,n){if(v){n.disabled=!0,n.textContent=`Installing...`;try{let r=e.config;await t(`/api/mcp`,`PUT`,{...v,servers:{...v.servers,[e.id]:r}}),await t(`/api/mcp/sync`,`POST`,{}),await y(),n.textContent=`Installed`,n.style.color=`var(--success)`}catch(e){n.textContent=`Error`,n.disabled=!1,console.error(`[mcp-registry] install failed:`,e.message)}}}function Be(){Oe(),b?.classList.add(`open`),b?.setAttribute(`aria-hidden`,`false`),D=!0,k(`active`)}function M(){D&&(b?.classList.remove(`open`),b?.setAttribute(`aria-hidden`,`true`),D=!1,Ne(),document.getElementById(`mcpHelpOverlay`)?.remove())}function Ve(){document.addEventListener(`keydown`,e=>{if(document.getElementById(`mcpHelpOverlay`)&&e.key===`Escape`){e.preventDefault(),document.getElementById(`mcpHelpOverlay`)?.remove();return}D&&e.key===`Escape`&&(e.preventDefault(),e.stopImmediatePropagation(),M())},!0)}var N=null;function He(e){let t=document.getElementById(`headerCli`);if(!t)return;let n=h(e),r=P(e);t.innerHTML=n?`${n} ${a(r)}`:a(r)}function P(e){return u(e)?.label||g(e)||e}function Ue(e){let t=e.finally(()=>{N===t&&(N=null)});return N=t,t}async function We(){let e=N;e&&await e}function Ge(e){return e.split(/[^a-zA-Z0-9]+/).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(``)}function F(e){return document.getElementById(`model`+Ge(e))}function Ke(e){return document.getElementById(`customModel`+Ge(e))}function qe(e){return document.getElementById(`effort`+Ge(e))}function I(e,t,{includeCustom:n=!1,includeDefault:r=!1,selected:o=``}={}){if(!e)return;let s=r?`<option value="default">default</option>`:``,c=n?`<option value="__custom__">${i(`model.customOption`)}</option>`:``;e.innerHTML=s+(t||[]).map(e=>`<option value="${a(e)}">${a(e)}</option>`).join(``)+c,o&&Array.from(e.options).some(e=>e.value===o)&&(e.value=o)}function L(e,t){if(!e||!t||Array.from(e.options).some(e=>e.value===t))return;let n=document.createElement(`option`);n.value=t,n.textContent=t;let r=e.querySelector(`option[value="__custom__"]`);r?e.insertBefore(n,r):e.appendChild(n)}function Je(e=null){let t=d(),n=document.getElementById(`selCli`);if(n){let r=e?.cli||n.value||t[0]||`claude`,o=e=>f.includes(e),s=!o(r)&&t.includes(r),c=n.dataset.expanded===`1`,l=t.filter(o),d=t.filter(e=>!o(e)),p=l.length===0||s||c,m=l.map(e=>{let t=u(e)?.label||e;return`<option value="${a(e)}">${a(t)}</option>`}).join(``);d.length>0&&(p?(m+=`<option disabled>ââââââ</option>`,m+=d.map(e=>{let t=u(e)?.label||e;return`<option value="${a(e)}">${a(t)}</option>`}).join(``)):m+=`<option value="__show_more__">${i(`cli.showMore`)}</option>`),n.innerHTML=m,Array.from(n.options).some(e=>e.value===r)&&(n.value=r)}let r=document.getElementById(`flushCli`);if(r){let n=e?.memory?.cli||r.value||``;r.innerHTML=`<option value="">(active CLI)</option>`+t.map(e=>`<option value="${a(e)}">${a(P(e))}</option>`).join(``),Array.from(r.options).some(e=>e.value===n)&&(r.value=n)}}function R(e,t){return(t||``).trim()}function Ye(e=null){for(let t of d()){let n=u(t),r=t===`ai-e`?B():``,i=F(t);if(i)if(n?.modelNote)i.innerHTML=`<option value="">${a(n.modelNote)}</option>`,i.title=n.modelNote,i.disabled=!0;else{let a=R(t,e?.perCli?.[t]?.model||i.value||``);I(i,t===`ai-e`?n?.modelsByProvider?.[r]||m[t]||[]:m[t]||[],{includeCustom:!0,selected:a}),a&&!Array.from(i.options).some(e=>e.value===a)&&(L(i,a),i.value=a),i.disabled=!1}let o=qe(t);if(o){let i=t===`ai-e`&&r?n?.effortsByProvider?.[r]||[]:null,s=[``].concat(i||n?.efforts||[]),c=e?.perCli?.[t]?.effort||o.value||``,l=[...new Set(s)],u=l.length===1&&!l[0]&&n?.effortNote?n.effortNote:`â none`;o.innerHTML=l.map(e=>e?`<option value="${a(e)}">${a(e)}</option>`:`<option value="">${a(u)}</option>`).join(``),n?.effortNote&&(o.title=n.effortNote),o.disabled=l.length===1&&!l[0]&&!!n?.effortNote,Array.from(o.options).some(e=>e.value===c)&&(o.value=c)}}}function z(e,t=``){let n=document.getElementById(`selEffort`);if(!n)return;let r=u(e),i=B(),o=e===`ai-e`&&i?r?.effortsByProvider?.[i]||[]:null;if(r?.effortNote){n.innerHTML=`<option value="">${a(r.effortNote)}</option>`,n.title=r.effortNote,n.disabled=!0;return}let s=[``].concat(o||r?.efforts||[]);n.innerHTML=[...new Set(s)].map(e=>e?`<option value="${a(e)}">${a(e)}</option>`:`<option value="">â none</option>`).join(``),n.disabled=!1,n.title=``,Array.from(n.options).some(e=>e.value===t)&&(n.value=t)}function Xe(e,t,n){return e?(e.innerHTML=n.map(e=>`<option value="${a(e)}">${a(g(e)||e)}</option>`).join(``),Array.from(e.options).some(e=>e.value===t)?e.value=t:e.options.length>0&&(e.value=e.options[0]?.value||t),e.value||t):t}function B(){let e=document.getElementById(`selAiEProvider`),t=document.getElementById(`providerAiE`);return e?.value||t?.value||u(`ai-e`)?.defaultProvider||`claude`}function Ze(){return document.getElementById(`providerAiE`)?.value||B()}function Qe(e,t){let n=document.getElementById(`aiEProviderWrap`),r=document.getElementById(`selAiEProvider`),i=document.getElementById(`providerAiE`),a=u(`ai-e`);if(!a?.providers?.length)return`claude`;let o=Xe(r,e?.perCli?.[`ai-e`]?.provider||i?.value||r?.value||a.defaultProvider||`claude`,a.providers);return Xe(i,o,a.providers),n&&(n.style.display=t===`ai-e`?``:`none`),o}async function $e(){await p();let e=await n(`/api/settings`);if(!e)return;c(e.locale??``),Je(e),Qe(e,e.cli||``),Ye(e);let t=document.getElementById(`selCli`);t&&Array.from(t.options).some(t=>t.value===e.cli)&&(t.value=e.cli,t.dataset.prev=e.cli);let r=document.getElementById(`inpCwd`);r&&(r.textContent=e.workingDir);let i=document.getElementById(`headerCli`);if(i){let t=h(e.cli),n=P(e.cli);i.innerHTML=t?`${t} ${a(n)}`:a(n)}if(et(e.permissions,!1),e.perCli)for(let[t,n]of Object.entries(e.perCli)){let e=F(t),r=qe(t);if(e&&n.model){let r=R(t,n.model);L(e,r),e.value=r}if(r&&(r.value=n.effort||``),t===`codex`&&n.fastMode!==void 0&&(document.getElementById(`codexFastOn`)?.classList.toggle(`active`,n.fastMode),document.getElementById(`codexFastOff`)?.classList.toggle(`active`,!n.fastMode)),t===`codex`){let e=!!n.contextWindow;document.getElementById(`codexCtxOn`)?.classList.toggle(`active`,e),document.getElementById(`codexCtxOff`)?.classList.toggle(`active`,!e);let t=document.getElementById(`codexCtxValues`);t&&(t.style.display=e?``:`none`);let r=document.getElementById(`codexCtxWindow`),i=document.getElementById(`codexCtxCompact`);r&&n.contextWindowSize&&(r.value=String(n.contextWindowSize)),i&&n.contextCompactLimit&&(i.value=String(n.contextCompactLimit))}if(t===`claude`){let e=!!(n.model&&String(n.model).endsWith(`[1m]`));document.getElementById(`claude1mOn`)?.classList.toggle(`active`,e),document.getElementById(`claude1mOff`)?.classList.toggle(`active`,!e)}}U(!1);let o=e.activeOverrides?.[e.cli]||{},s=e.perCli?.[e.cli]||{},l=o.model||s.model,u=o.effort||s.effort||``,d=document.getElementById(`selModel`);if(l&&d){let t=R(e.cli,l);t&&!Array.from(d.options).some(e=>e.value===t)&&L(d,t),d.value=t}z(e.cli,u),ae(e),de(e),ye(e),be(e),y(),ee(e.stt||{})}async function V(){let e=document.getElementById(`selCli`)?.value||`claude`,n={cli:e};return e===`ai-e`&&(n.perCli={"ai-e":{provider:B()}}),Ue((async()=>{let r=await t(`/api/settings`,`PUT`,n);if(!r){await $e();return}let i=r.cli||e,a=document.getElementById(`selCli`);a&&Array.from(a.options).some(e=>e.value===i)&&(a.value=i,a.dataset.prev=i),He(i),o([`instances`],`active-cli-changed`)})())}function et(e,t=!0){t&&r(`/api/settings`,`PUT`,{permissions:`auto`})}function tt(e){let t=F(e);return t?t.value===`__custom__`?Ke(e)?.value?.trim()||t.options[0]?.value||`default`:t.value:`default`}function nt(e,t){let n=Ke(e);n&&(t.value===`__custom__`?(n.style.display=`block`,n.focus()):(n.style.display=`none`,e===`claude`&&rt(t.value),H()))}function rt(e){let t=!!(e&&e.endsWith(`[1m]`));document.getElementById(`claude1mOn`)?.classList.toggle(`active`,t),document.getElementById(`claude1mOff`)?.classList.toggle(`active`,!t)}function it(e,t){let n=t.value.trim();if(!n)return;let r=F(e);r&&(L(r,n),r.value=n,t.style.display=`none`,e===`claude`&&rt(n),H())}function at(){let e=Ze(),t=document.getElementById(`selAiEProvider`);t&&Array.from(t.options).some(t=>t.value===e)&&(t.value=e),Ye(null),(document.getElementById(`selCli`)?.value||``)===`ai-e`&&U(!1),H()}async function H(){let e={};for(let t of d()){if(!F(t))continue;let n=qe(t),r={model:tt(t),effort:n?n.value:``};if(t===`ai-e`&&(r.provider=Ze()),t===`codex`){r.fastMode=document.getElementById(`codexFastOn`)?.classList.contains(`active`)??!1,r.contextWindow=document.getElementById(`codexCtxOn`)?.classList.contains(`active`)??!1;let e=document.getElementById(`codexCtxWindow`),t=document.getElementById(`codexCtxCompact`);r.contextWindowSize=parseInt(e?.value||`1000000`,10),r.contextCompactLimit=parseInt(t?.value||`900000`,10)}e[t]=r}await t(`/api/settings`,`PUT`,{perCli:e})}function U(e=!0){let t=document.getElementById(`selCli`);if(!t)return;if(t.value===`__show_more__`){let e=t.dataset.prev||d()[0]||`claude`;t.dataset.expanded=`1`,Je(null),Array.from(t.options).some(t=>t.value===e)&&(t.value=e);try{t.showPicker()}catch{}return}t.dataset.prev=t.value;let r=t.value||`claude`,o=Qe(null,r),s=u(r),c=r===`ai-e`?s?.modelsByProvider?.[o]||m[r]||[]:m[r]||[],l=document.getElementById(`selModel`);s?.modelNote&&l?(l.innerHTML=`<option value="">${a(s.modelNote)}</option>`,l.title=s.modelNote,l.disabled=!0):(I(l,c,{includeCustom:!0,includeDefault:!0}),l&&(l.disabled=!1,l.title=``)),He(r),z(r);let f=document.getElementById(`selModelCustom`);f&&f.remove();let p=document.createElement(`input`);if(p.type=`text`,p.id=`selModelCustom`,p.className=`custom-model-input`,p.placeholder=i(`model.placeholder`),p.style.display=`none`,p.onchange=function(){let e=this.value.trim();!e||!l||(L(l,e),l.value=e,this.style.display=`none`,ot())},!l){e&&V();return}l.parentElement?.appendChild(p),l.onchange=function(){this.value===`__custom__`?(p.style.display=`block`,p.focus()):(p.style.display=`none`,ot())},n(`/api/settings`).then(e=>{if(!e)return;let t=e.activeOverrides?.[r]||{},n=e.perCli?.[r]||{},i=t.model||n.model,a=t.effort||n.effort||``;if(i&&l){if(r===`ai-e`&&(e.perCli?.[`ai-e`]?.provider||`claude`)!==B()){z(r,a);return}let t=R(r,i);L(l,t),l.value=t}z(r,a)}),e&&V()}async function ot(){let e=document.getElementById(`selCli`)?.value||`claude`,n=document.getElementById(`selModel`)?.value||`default`;n===`__custom__`&&(n=document.getElementById(`selModelCustom`)?.value?.trim()||`default`);let r=document.getElementById(`selEffort`),i={};i[e]={model:n},r&&!r.disabled&&(i[e].effort=r.value||``);let a={activeOverrides:i};e===`ai-e`&&(a.perCli={"ai-e":{provider:B()}}),await t(`/api/settings`,`PUT`,a)&&o([`instances`],`active-cli-changed`)}function st(){let e=m[document.getElementById(`flushCli`)?.value||document.getElementById(`selCli`)?.value||`claude`]||[];I(document.getElementById(`flushModel`),e,{includeDefault:!0}),ut(),lt()}async function ct(){let e=await n(`/api/memory-files`);if(!e)return;let t=document.getElementById(`flushCli`),r=document.getElementById(`flushModel`);t&&e.cli&&(t.value=e.cli),I(r,m[e.cli||document.getElementById(`selCli`)?.value||`claude`]||[],{includeDefault:!0}),r&&e.model&&(L(r,e.model),r.value=e.model),ut()}async function lt(){await t(`/api/memory-files/settings`,`PUT`,{cli:document.getElementById(`flushCli`)?.value||``,model:document.getElementById(`flushModel`)?.value||``})}function ut(){let e=document.getElementById(`flushAgentBadge`);if(!e)return;let t=document.getElementById(`flushCli`)?.value||``,n=document.getElementById(`flushModel`)?.value||``,r=t||document.getElementById(`selCli`)?.value||``,i=[];r&&i.push(t?P(r):`${P(r)}*`),n&&n!==`default`&&i.push(n),e.textContent=i.length?`(${i.join(` / `)})`:``}var dt=new Set([`ai-e`,`codex-app`]),ft={claude:`Currently subscribed, by June with credit`},pt={cursor:{title:`Enable quota bars (dashboard session)`,commands:[`cursor-agent login`,`export CURSOR_SESSION_TOKEN="<WorkosCursorSessionToken from cursor.com DevTools>"`,`echo "$CURSOR_SESSION_TOKEN" > ~/.cli-jaw/quota/cursor-session-token && chmod 600 ~/.cli-jaw/quota/cursor-session-token`]},agy:{title:`Enable Gem / Cla quota bars`,commands:[`npx antigravity-usage login`,`npx antigravity-usage --json`]},grok:{title:`Grok login`,commands:[`progrok login`]},opencode:{title:`OpenCode auth + optional plan quota plugin`,commands:[`opencode auth login`,`opencode plugin add @slkiser/opencode-quota`,`npx @slkiser/opencode-quota show`],note:`Built-in opencode stats shows session tokens/cost, not subscription limits. opencode-go/* models use the same CLI.`}};function mt(e,t){return e===`gemini`?t===`Pro`||t===`P`?`P`:t===`Flash`||t===`F`?`F`:t:e===`copilot`&&(t===`Premium`||t===`Prem`||t.includes(`plus monthly subscriber quota`))?`30d`:t.replace(`-hour`,`h`).replace(`-day`,`d`).replace(` Sonnet`,``).replace(` Opus`,``)}function ht(e,t){if(t.delegatedProvider)return`Delegates quota/status to ${t.delegatedProvider}`;let n=t.quotaSource?.match(/^not-exposed-by-(.*?)-cli$/);return n?`Quota not exposed by ${n[1].toUpperCase()} CLI`:t.quotaSource?t.quotaSource:e===`opencode`?`Auth/status only`:`Usage data not exposed by this CLI`}function gt(e){return e.toLowerCase().replace(/^cursor\s+/i,``).trim()}var _t=new Set([`auth/status only`,`google cloud code`,`runtime-checked`]),vt=new Set([`cursor`,`antigravity.google`,`antigravity`,`max`,`copilot`,`gemini`]);function yt(e,t){let n=t.account;if(!n)return[];let r=[];n.email&&r.push(n.email);let i=new Set(r.map(gt));for(let e of[n.plan,n.tier]){if(!e)continue;let t=gt(e);if(!(!t||_t.has(t))&&!vt.has(t)&&!i.has(t)){i.add(t),r.push(e);break}}return r}function bt(e,t,n=[]){let r=pt[e],i=[...n,...r?r.commands:[],...r?.note?[r.note]:[]].filter(Boolean);return i.length?`<button type="button" class="help-trigger" style="margin-left:4px" data-cli-help="${a(i.join(`
|
|
99
|
+
`))}" aria-label="Setup help">?</button>`:``}function xt(e,t){let n=pt[e],r=t.sessionUsage,i=[];r?.primaryModelId&&i.push(`Model: ${r.primaryModelId}`),r?.contextTokensUsed&&r?.contextWindowTokens?i.push(`Session context: ${Math.round(r.contextTokensUsed).toLocaleString()} / ${Math.round(r.contextWindowTokens).toLocaleString()} tokens`):r?.turnCount&&i.push(`Session turns: ${Math.round(r.turnCount).toLocaleString()}`);let o=bt(e,t,i);if(n){let e=n.commands.map(e=>`
|
|
100
|
+
<div style="margin-top:3px"><code style="font-size:10px;background:var(--border);padding:1px 4px;border-radius:2px;word-break:break-all">${a(e)}</code></div>
|
|
101
|
+
`).join(``);return`
|
|
102
|
+
<div style="font-size:10px;color:var(--text-dim);margin:4px 0 0 16px;padding:5px 7px;background:var(--surface);border:1px solid var(--border);border-radius:5px">
|
|
103
|
+
<div style="color:var(--text);font-weight:600">${a(n.title)}${o}</div>
|
|
104
|
+
${e}
|
|
105
|
+
${n.note?`<div style="margin-top:4px;opacity:0.75">${a(n.note)}</div>`:``}
|
|
106
|
+
</div>
|
|
107
|
+
`}return`
|
|
108
|
+
<div style="font-size:10px;color:var(--text-dim);margin:4px 0 0 16px;padding:5px 7px;background:var(--surface);border:1px solid var(--border);border-radius:5px">
|
|
109
|
+
<div style="color:var(--text);font-weight:600">${a(t.displayTier||g(e))}${o}</div>
|
|
110
|
+
<div style="margin-top:2px">${a(ht(e,t))}</div>
|
|
111
|
+
</div>
|
|
112
|
+
`}var St=new Set([0,600,1800]),W=0,Ct=2e3,wt=4e3,G=null,Tt=!1,K=0,q=null,J=null,Et=`cliStatusCollapsed`;function Y(){try{return window.parent!==window}catch{return!0}}function Dt(){try{return localStorage.getItem(Et)===`true`}catch{return!1}}function Ot(e){try{localStorage.setItem(Et,e?`true`:`false`)}catch{}}function kt(e){return`${String(e.getHours()).padStart(2,`0`)}:${String(e.getMinutes()).padStart(2,`0`)}:${String(e.getSeconds()).padStart(2,`0`)}`}function At(){J!=null&&(window.clearTimeout(J),J=null)}function jt(e,t=``){At();let n=document.getElementById(`cliStatusRefreshBtn`),r=document.getElementById(`cliStatusRefreshState`),i=n?.querySelector(`.cli-refresh-label`);n&&(n.classList.remove(`is-refreshing`,`is-success`,`is-error`),n.disabled=e===`refreshing`,e===`idle`?n.removeAttribute(`aria-busy`):n.setAttribute(`aria-busy`,e===`refreshing`?`true`:`false`),e===`refreshing`&&n.classList.add(`is-refreshing`),e===`success`&&n.classList.add(`is-success`),e===`error`&&n.classList.add(`is-error`)),i&&(i.textContent=e===`refreshing`?`Refreshing...`:`Refresh`),r&&(r.textContent=t,r.dataset.state=e)}function Mt(e,t){jt(e,t),J=window.setTimeout(()=>{jt(`idle`)},wt)}var X=!Dt();function Nt(){return X}function Pt(){X=!0;let e=document.getElementById(`cliStatusList`),t=document.getElementById(`cliStatusHeader`);e&&(e.style.display=`block`),t&&t.classList.add(`expanded`),Ot(!1),Z(!0)}function Ft(){let e=document.getElementById(`cliStatusHeader`),t=document.getElementById(`cliStatusList`);!e||!t||(X?(t.style.display=`block`,e.classList.add(`expanded`)):t.style.display=`none`,e.addEventListener(`click`,()=>{X=!X,t.style.display=X?`block`:`none`,e.classList.toggle(`expanded`,X),Ot(!X),X&&Z(!0)}))}function It(){let e=Number(localStorage.getItem(`cliStatusInterval`)||W);return St.has(e)?e:W}function Lt(e=It()){let t=document.getElementById(`cliStatusInterval`);if(!t)return;let n=String(e);t.value=Array.from(t.options).some(e=>e.value===n)?n:String(W)}function Rt(){G!=null&&(window.clearInterval(G),G=null);let e=It();Lt(e),!(e<=0)&&(G=window.setInterval(()=>{document.hidden||!X||!Y()&&!document.hasFocus()||Z(!0)},e*1e3))}function zt(){Tt||!Y()||(Tt=!0,window.addEventListener(`message`,e=>{let t=e.data;t?.type!==`jaw-preview-visibility`||t.visible!==!0||X&&Z(!1)}))}function Bt(e){let t=Number(e),n=St.has(t)?t:W;localStorage.setItem(`cliStatusInterval`,String(n)),Lt(n),Rt()}function Vt(t,r,i){Y()&&(async()=>{if(await new Promise(e=>window.setTimeout(e,600)),t!==K)return;let i=await n(`/api/quota`);t!==K||!i||(e.cliStatusCache={cliStatus:r,quota:i},e.cliStatusTs=Date.now(),Q({cliStatus:r,quota:i}))})()}async function Ht(t,r,i){let a=await n(`/api/quota`);if(t!==K)return!1;let o=a??i??null;return e.cliStatusCache={cliStatus:r,quota:o},a&&(e.cliStatusTs=Date.now()),Q({cliStatus:r,quota:o}),a||Vt(t,r,i),!!a}function Ut(e,t,n,r){let i=()=>{Ht(t,n,r).catch(()=>{})};if(e)return Ht(t,n,r);window.setTimeout(i,Ct)}async function Z(t=!1){if(X){if(t&&jt(`refreshing`,`Refreshing quota...`),q)if(t)await q.catch(()=>{});else return;q=(async()=>{let r=++K,i=document.getElementById(`cliStatusList`);try{let a=It();if(!t&&e.cliStatusCache&&a>0&&Date.now()-e.cliStatusTs<a*1e3){Q({cliStatus:e.cliStatusCache?.cliStatus,quota:e.cliStatusCache?.quota});return}let o=e.cliStatusCache?.quota;i&&!o&&(i.innerHTML=`<div style="color:var(--text-dim);font-size:11px">Loading...</div>`);let s=await n(`/api/cli-status`);if(r!==K)return;if(!s||typeof s!=`object`){i&&(i.innerHTML=`<div style="color:var(--text-dim);font-size:11px">Failed to load CLI status</div>`),t&&Mt(`error`,`Refresh failed`);return}Q({cliStatus:s,quota:o??null});let c=await Ut(t,r,s,o);t&&r===K&&Mt(`success`,`${c?`Updated`:`Checked`} ${kt(new Date)}`)}catch{i&&(i.innerHTML=`<div style="color:var(--text-dim);font-size:11px">Failed to load CLI status</div>`),t&&Mt(`error`,`Refresh failed`)}})().finally(()=>{q=null}),await q}}function Q(e){let{cliStatus:t,quota:r}=e,o=document.getElementById(`cliStatusList`),c={agy:{install:`curl -fsSL https://antigravity.google/cli/install.sh | bash`,auth:`agy runtime auth, antigravity-usage login, or ~/.gemini oauth for quota`},"ai-e":{install:`Install AI-E helper`,auth:`delegates to selected AI-E provider`},claude:{install:`npm i -g @anthropic-ai/claude-code`,auth:`claude auth`},"claude-e":{install:`Install claude-e helper`,auth:`claude auth`},codex:{install:`npm i -g @openai/codex`,auth:`codex login`},"codex-app":{install:`npm i -g @openai/codex`,auth:`codex login`},cursor:{install:`curl https://cursor.com/install -fsS | bash`,auth:`cursor-agent login, CURSOR_API_KEY, or CURSOR_SESSION_TOKEN for quota`},"kiro-code":{install:`Install Kiro CLI from https://kiro.dev/docs/cli`,auth:`kiro-cli login`},gemini:{install:`npm i -g @google/gemini-cli`,auth:`gemini (${i(`cli.gemini.auth`)})`},grok:{install:`curl -fsSL https://x.ai/cli/install.sh | bash`,auth:`grok login --oauth`},opencode:{install:`npm i -g opencode-ai`,auth:`opencode auth`},copilot:{install:`npm i -g copilot`,auth:i(`cli.copilot.authHint`)}},l=``;if(!t||typeof t!=`object`){o&&(o.innerHTML=`<div style="color:var(--text-dim);font-size:11px">Failed to load CLI status</div>`);return}for(let[e,n]of Object.entries(t)){let t=r?.[e],o;o=n.available?!t||t.error?`ok`:t.authenticated===!1?`warn`:`ok`:`missing`;let u=``,d=t?.quotaCapable===!1&&t.authenticated!==!1&&n.available&&!ft[e]&&!dt.has(e);if(t?.account&&!d){let n=yt(e,t);n.length&&(u=`<div style="font-size:10px;color:var(--text-dim);margin:2px 0 4px 16px">${a(n.join(` ¡ `))}</div>`)}let f=``;if(!n.available||o===`warn`){let t=c[e];if(t){let e=!n.available,r=i(e?`cli.authRequired`:`cli.notAuthenticated`),o=e?`var(--error)`:`var(--warning)`;f=`
|
|
113
|
+
<div style="font-size:10px;margin:4px 0 2px 16px;padding:6px 8px;background:var(--surface);border-radius:4px;border-left:2px solid ${o}">
|
|
114
|
+
<div style="color:${o};margin-bottom:3px">${r}</div>
|
|
115
|
+
${e?`<div style="color:var(--text-dim)"><code style="font-size:10px;background:var(--border);padding:1px 4px;border-radius:2px">${a(t.install)}</code></div>`:``}
|
|
116
|
+
<div style="color:var(--text-dim)${e?`;margin-top:2px`:``}"><code style="font-size:10px;background:var(--border);padding:1px 4px;border-radius:2px">${a(t.auth)}</code></div>
|
|
117
|
+
</div>
|
|
118
|
+
`}}let p=``,m=ft[e];if(!dt.has(e)){if(m&&n.available)p=`
|
|
119
|
+
<div style="font-size:10px;color:var(--text-dim);margin:4px 0 0 16px;padding:5px 7px;background:var(--surface);border:1px solid var(--border);border-radius:5px">
|
|
120
|
+
${a(m)}
|
|
121
|
+
</div>
|
|
122
|
+
`;else if(d)p=xt(e,t);else if(t?.windows?.length)p=t.windows.map(t=>{let n=Math.round(t.percent),r=n>80?`var(--error)`:n>50?`var(--warning)`:`var(--info)`,i=mt(e,t.label),o=``;if(t.resetsAt){let e=new Date(typeof t.resetsAt==`number`?t.resetsAt*1e3:t.resetsAt),n=new Date;o=e.toDateString()===n.toDateString()?`${e.getHours()}:${String(e.getMinutes()).padStart(2,`0`)}`:`${e.getMonth()+1}/${e.getDate()}`}return`
|
|
123
|
+
<div style="display:flex;align-items:center;gap:4px;margin-left:16px;font-size:10px;color:var(--text-dim)">
|
|
124
|
+
<span style="min-width:18px;max-width:48px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis">${a(i)}</span>
|
|
125
|
+
<div style="flex:1;height:4px;background:var(--border);border-radius:2px;overflow:hidden">
|
|
126
|
+
<div style="width:${n}%;height:100%;background:${r};border-radius:2px"></div>
|
|
127
|
+
</div>
|
|
128
|
+
<span style="width:24px;text-align:right">${n}%</span>
|
|
129
|
+
${o?`<span style="width:30px;text-align:right;opacity:0.6">${o}</span>`:``}
|
|
130
|
+
</div>
|
|
131
|
+
`}).join(``);else if(t?.error&&n.available){let e=t.reason===`rate_limited`?`Rate limited â retry in a moment`:`Usage data unavailable`;p=`<div style="font-size:10px;color:var(--text-dim);margin:2px 0 0 16px;opacity:0.7">${s.warning} ${e}</div>`}}let ee=t?.quotaCapable&&pt[e]?bt(e,t):``,_=t?.billing?.usedUsd!=null&&t?.billing?.limitUsd?`<span style="margin-left:auto;font-size:10px;color:var(--text-dim);white-space:nowrap">$${t.billing.usedUsd.toFixed(1)}/$${t.billing.limitUsd}</span>`:``;l+=`
|
|
132
|
+
<div class="settings-group" style="margin-bottom:6px;padding:8px 10px">
|
|
133
|
+
<div class="cli-status-row" style="display:flex;align-items:center">
|
|
134
|
+
<span class="cli-dot ${o}"></span>
|
|
135
|
+
<span class="cli-provider-icon" aria-hidden="true">${h(e)||``}</span>
|
|
136
|
+
<span class="cli-name" style="font-weight:600">${a(g(e))}${ee}</span>${e===`copilot`?`<button id="copilotKeychainBtn" style="font-size:9px;margin-left:6px;padding:1px 5px;background:var(--border);color:var(--text-dim);border:1px solid var(--text-dim);border-radius:3px;cursor:pointer;vertical-align:middle;line-height:1" title="${i(`copilot.keychainHint`)}">${s.key}</button>`:``}${_}
|
|
137
|
+
</div>
|
|
138
|
+
${u}
|
|
139
|
+
${f}
|
|
140
|
+
${p}
|
|
141
|
+
</div>
|
|
142
|
+
`}o&&(o.innerHTML=l);let u=Object.entries(t);!u.some(([e,t])=>{if(!t.available)return!1;let n=r?.[e];return!n||n.authenticated!==!1})&&u.length>0&&o&&o.insertAdjacentHTML(`afterbegin`,`<div style="padding:8px 10px;margin-bottom:8px;background:var(--warning-dim);border:1px solid var(--warning);border-radius:6px;font-size:11px;color:var(--warning)">
|
|
143
|
+
${s.warning} ${i(`cli.noReadyCli`)}
|
|
144
|
+
</div>`);let d=document.getElementById(`copilotKeychainBtn`);d&&d.addEventListener(`click`,async()=>{let e=d;e.disabled=!0,e.innerHTML=s.hourglass;try{let t=await n(`/api/copilot/refresh`,{method:`POST`});e.innerHTML=t?.ok?s.check:s.error,t?.ok&&await Z(!0)}catch{e.innerHTML=s.error}setTimeout(()=>{e.innerHTML=s.key,e.disabled=!1},2e3)}),o&&o.querySelectorAll(`[data-cli-help]`).forEach(e=>{e.addEventListener(`click`,t=>{t.stopPropagation(),Wt(e.getAttribute(`data-cli-help`)||``)})})}function Wt(e){let t=document.getElementById(`cliHelpOverlay`);t&&t.remove();let n=document.createElement(`div`);n.id=`cliHelpOverlay`,n.className=`mcp-help-overlay`,n.addEventListener(`click`,e=>{e.target===n&&n.remove()});let r=document.createElement(`div`);r.className=`mcp-help-inner`,r.innerHTML=`
|
|
145
|
+
<h4>CLI Setup</h4>
|
|
146
|
+
${e.split(`
|
|
147
|
+
`).filter(Boolean).map(e=>`<p><code>${e.replace(/&/g,`&`).replace(/</g,`<`)}</code></p>`).join(``)}
|
|
148
|
+
<div style="text-align:right;margin-top:12px">
|
|
149
|
+
<button type="button" class="btn-save" id="cliHelpClose">OK</button>
|
|
150
|
+
</div>
|
|
151
|
+
`,n.append(r),document.body.append(n),r.querySelector(`#cliHelpClose`)?.addEventListener(`click`,()=>n.remove()),document.addEventListener(`keydown`,function e(t){t.key===`Escape`&&(n.remove(),document.removeEventListener(`keydown`,e,!0))},!0)}function Gt(){n(`/api/prompt`).then(e=>{if(!e)return;let t=document.getElementById(`modalPromptEditor`);t&&(t.value=e.content||``),document.getElementById(`promptModal`)?.classList.add(`open`)})}function Kt(e){e&&e.target!==e.currentTarget||document.getElementById(`promptModal`)?.classList.remove(`open`)}async function qt(){await t(`/api/prompt`,`PUT`,{content:document.getElementById(`modalPromptEditor`)?.value||``}),document.getElementById(`promptModal`)?.classList.remove(`open`)}var Jt=[],$=!1;async function Yt(){let e=await n(`/api/prompt-templates`);e&&(Jt=e.templates,$=!1,Xt(e.tree),en(`tree`),document.getElementById(`templateModal`)?.classList.add(`open`))}function Xt(e){let t=document.getElementById(`templateTree`);if(t){t.innerHTML=``;for(let n of e){let e=document.createElement(`div`);e.style.cssText=`background:var(--bg);border:1px solid var(--accent);border-radius:6px;padding:8px 10px;margin:8px 0 4px;font-size:12px;color:var(--accent);font-weight:600`,e.textContent=`${n.emoji} ${n.label}`,t.appendChild(e);for(let e of n.children){let n=Jt.find(t=>t.id===e);if(!n)continue;let r=document.createElement(`div`);r.style.cssText=`background:var(--bg);border:1px solid var(--border);border-radius:6px;padding:6px 10px;margin:2px 0 2px 24px;font-size:12px;cursor:pointer;transition:border-color .15s`,r.innerHTML=`${s.file} ${a(n.filename)}`,r.addEventListener(`mouseenter`,()=>{r.style.borderColor=`var(--accent2)`}),r.addEventListener(`mouseleave`,()=>{r.style.borderColor=`var(--border)`}),r.addEventListener(`click`,()=>{Zt(n)}),t.appendChild(r)}}}}function Zt(e){let t=document.getElementById(`templateEditor`);t.value=e.content,t.dataset.templateId=e.id,t.readOnly=!0,$=!1;let n=document.getElementById(`templateEditorLabel`);n&&(n.innerHTML=`${s.file} ${a(e.filename)}`);let r=e.content.match(/\{\{[A-Z_]+\}\}/g),i=document.getElementById(`templateVars`);i&&(i.textContent=r?`vars: ${[...new Set(r)].join(`, `)}`:`no variables`);let o=document.getElementById(`templateSaveBtn`);o&&(o.style.display=`none`);let c=document.getElementById(`templateDevToggle`);c&&(c.style.color=`var(--text-dim)`,c.style.borderColor=`var(--border)`,c.innerHTML=`${s.tool} ${l(`devMode`)}`);let u=document.getElementById(`templateModalTitle`);u&&(u.innerHTML=`${s.file} ${a(e.filename)}`),en(`editor`)}function Qt(){if(!$&&!confirm(l(`promptEditWarning`)))return;$=!$;let e=document.getElementById(`templateEditor`);e.readOnly=!$;let t=document.getElementById(`templateSaveBtn`);t&&(t.style.display=$?``:`none`);let n=document.getElementById(`templateDevToggle`);n&&(n.style.color=$?`var(--stop-btn)`:`var(--text-dim)`,n.style.borderColor=$?`var(--stop-btn)`:`var(--border)`,n.innerHTML=$?`${s.lockOpen} ${l(`devModeOn`)}`:`${s.tool} ${l(`devMode`)}`)}async function $t(){let e=document.getElementById(`templateEditor`),n=e.dataset.templateId;if(!n)return;await t(`/api/prompt-templates/${n}`,`PUT`,{content:e.value});let r=document.getElementById(`templateEditorLabel`);r&&(r.innerHTML=`${s.check} ${l(`savedAndReloaded`)}`,setTimeout(()=>{r.innerHTML=`${s.file} ${a(n)}.md`},2e3));let i=Jt.find(e=>e.id===n);i&&(i.content=e.value)}function en(e){let t=document.getElementById(`templateTreeView`),n=document.getElementById(`templateEditorView`);t&&(t.style.display=e===`tree`?``:`none`),n&&(n.style.display=e===`editor`?`flex`:`none`);let r=document.getElementById(`templateModalTitle`);r&&e===`tree`&&(r.innerHTML=`${s.plan} ${l(`promptStructure`)}`)}function tn(){en(`tree`)}function nn(e){e&&e.target!==e.currentTarget||document.getElementById(`templateModal`)?.classList.remove(`open`)}export{Ve as A,le as B,st as C,et as D,H as E,be as F,ne as G,ue as H,xe as I,ie as K,ve as L,y as M,Be as N,V as O,Te as P,oe as R,U as S,ot as T,te as U,ce as V,re as W,it as _,qt as a,ct as b,Qt as c,Ft as d,Nt as f,Bt as g,Rt as h,Yt as i,Ee as j,We as k,Pt as l,Z as m,nn as n,$t as o,Y as p,ee as q,Gt as r,tn as s,Kt as t,zt as u,tt as v,at as w,$e as x,nt as y,se as z};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vendor-render-Bjnw0wQ6.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{t as e}from"./state-D04-chBy.js";import{i as t,t as n}from"./api-tVoG39dL.js";import{t as r}from"./preload-helper-DuH3-WbD.js";import{C as i,_ as a,b as o,d as s,f as c,n as l}from"./render-J11oxfnl.js";import{A as ee,D as te,_ as ne,a as u,d as re,g as d,i as ie,k as ae,l as f,n as oe,r as se,s as ce,t as le,u as ue,v as de,y as p}from"./ui-qKxy-4p9.js";var fe=3e3,m=new Map,h=[],g=(e,t)=>`${e}:${t}`;function _(e=[]){let t=document.getElementById(`pendingQueue`);if(t){if(h=e.slice(),!e.length){y(new Set),t.classList.remove(`visible`),t.innerHTML=``;return}t.classList.add(`visible`),t.innerHTML=`
|
|
3
|
+
<div class="pending-queue-header">
|
|
4
|
+
<span class="pending-queue-title">${c.hourglass} <span data-i18n="queue.pendingTitle">${a(i(`queue.pendingTitle`))}</span> <span class="pending-queue-count">${e.length}</span></span>
|
|
5
|
+
</div>
|
|
6
|
+
<div class="pending-queue-list">
|
|
7
|
+
${e.map(pe).join(``)}
|
|
8
|
+
</div>
|
|
9
|
+
`,y(new Set(e.map(e=>e.id))),ge()}}function pe(e){let t=(e.prompt||``).replace(/\s+/g,` `).trim(),n=t.length>140?t.slice(0,140)+`âĻ`:t,r=e.source?`<span class="pending-row-source">${a(e.source)}</span>`:``,o=a(i(`queue.copy`)),s=a(i(`queue.steer`)),l=a(i(`queue.delete`));return`<div class="pending-row" data-pending-id="${a(e.id)}" title="${a(t)}">
|
|
10
|
+
<span class="pending-row-text">${a(n)}</span>
|
|
11
|
+
${r}
|
|
12
|
+
<button class="pending-row-btn pending-row-copy" data-pending-action="copy" title="${o}" aria-label="${o}"><span class="pending-btn-content">${c.copy}</span></button>
|
|
13
|
+
<button class="pending-row-btn pending-row-steer" data-pending-action="steer" data-i18n-title="queue.steer" title="${s}" aria-label="${s}"><span class="pending-arm-fill" aria-hidden="true"></span><span class="pending-btn-content"><span class="pending-steer-arrow" aria-hidden="true">âŗ</span><span class="pending-steer-label">${s}</span></span></button>
|
|
14
|
+
<button class="pending-row-btn pending-row-delete" data-pending-action="delete" data-i18n-title="queue.delete" title="${l}" aria-label="${l}"><span class="pending-arm-fill" aria-hidden="true"></span><span class="pending-btn-content">${c.trash}</span></button>
|
|
15
|
+
</div>`}function v(e,t){let n=document.querySelector(`.pending-row[data-pending-id="${CSS.escape(e)}"]`);return n?n.querySelector(`[data-pending-action="${t}"]`):null}function me(e,t){let n=v(e,t);if(!n)return;n.classList.add(`armed`),n.setAttribute(`title`,i(`queue.cancelArm`));let r=n.querySelector(`.pending-arm-fill`);r&&(r.style.animation=`none`,r.offsetWidth,r.style.animation=``)}function he(e,t){let n=v(e,t);n&&(n.classList.remove(`armed`),n.setAttribute(`title`,i(t===`steer`?`queue.steer`:`queue.delete`)))}function ge(){for(let e of m.values()){let t=v(e.id,e.action);t&&(t.classList.add(`armed`),t.setAttribute(`title`,i(`queue.cancelArm`)))}}function y(e){for(let[t,n]of m)e.has(n.id)||(clearTimeout(n.timerId),m.delete(t))}function _e(e,n){let r=g(e,n),i=setTimeout(()=>ye(e,n),fe);m.set(r,{id:e,action:n,timerId:i}),me(e,n),n===`steer`&&t(`/api/orchestrate/queue/${encodeURIComponent(e)}/hold`,`POST`,{}).catch(()=>{})}function ve(e,n){let r=g(e,n),i=m.get(r);i&&(clearTimeout(i.timerId),m.delete(r),he(e,n),n===`steer`&&t(`/api/orchestrate/queue/${encodeURIComponent(e)}/hold`,`DELETE`,{}).catch(()=>{}))}async function ye(e,n){m.delete(g(e,n));let r=n===`steer`?`/api/orchestrate/queue/${encodeURIComponent(e)}/steer`:`/api/orchestrate/queue/${encodeURIComponent(e)}`,i=n===`steer`?`POST`:`DELETE`;if(n===`steer`&&d(`running`),await t(r,i,{})==null){h=h.filter(t=>t.id!==e),_(h),n===`steer`&&H(`steer-fire-miss`).catch(()=>{});return}h=h.filter(t=>t.id!==e),_(h)}function be(e,t){if(m.has(g(e,t))){ve(e,t);return}_e(e,t)}function xe(){let e=document.getElementById(`pendingQueue`);e&&e.addEventListener(`click`,async e=>{let t=e.target?.closest(`[data-pending-action]`);if(!t)return;let n=t.closest(`.pending-row`)?.dataset.pendingId;if(!n)return;let r=t.dataset.pendingAction;if(r===`copy`){let e=h.find(e=>e.id===n);if(e?.prompt&&(await s(e.prompt)).ok){let e=t.querySelector(`.pending-btn-content`);e&&(e.innerHTML=c.checkSimple,setTimeout(()=>{e.innerHTML=c.copy},600))}return}be(n,r===`steer`?`steer`:`delete`)})}var Se=800,b=64,Ce=`CLI-JAW`,x=!1,S=0,C=Ce,w=null,T=``,E=!1,D=0;function O(){return navigator}function we(){return document.visibilityState!==`visible`||!document.hasFocus()}function Te(e){return e-D<Se}function k(){if(w)return w;let e=document.querySelector(`link[rel~="icon"]`);if(e)return w=e,T=e.href||e.getAttribute(`href`)||``,e;let t=document.createElement(`link`);return t.rel=`icon`,document.head.appendChild(t),w=t,E=!0,t}function Ee(e){let t=document.createElement(`canvas`);t.width=b,t.height=b;let n=t.getContext(`2d`);return n?(n.clearRect(0,0,b,b),n.font=`44px "Apple Color Emoji", "Segoe UI Emoji", sans-serif`,n.textAlign=`center`,n.textBaseline=`middle`,n.fillText(`đĻ`,28,36),n.beginPath(),n.arc(50,15,e>1?12:9,0,Math.PI*2),n.fillStyle=`#ff335f`,n.fill(),n.lineWidth=4,n.strokeStyle=`#ffffff`,n.stroke(),e>1&&(n.fillStyle=`#ffffff`,n.font=`bold 15px sans-serif`,n.textAlign=`center`,n.textBaseline=`middle`,n.fillText(String(Math.min(e,9)),50,16)),t.toDataURL(`image/png`)):T}async function De(e){let t=O();if(typeof t.setAppBadge==`function`)try{await t.setAppBadge(e)}catch{}}async function Oe(){let e=O();if(typeof e.clearAppBadge==`function`)try{await e.clearAppBadge()}catch{}}function ke(){document.title=`(${S}) ${C}`;let e=k();e&&(e.href=Ee(S)),De(S)}function Ae(){document.title=C}function je(){if(w){if(E){w.remove(),w=null,E=!1;return}w.href=T}}function Me(){x||(x=!0,C=document.title||Ce,k(),document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`&&j()}),window.addEventListener(`focus`,()=>j()))}function A(){if(!x||!we())return;let e=Date.now();Te(e)||(D=e,S+=1,ke())}function j(){!x||S===0||(S=0,D=0,Ae(),je(),Oe())}function Ne(e,t){return!e||!t?!0:e===`all`||e===t}var M=new Map;function Pe(e){let t=M.get(e.workflowId)??-1;return e.sequenceId>t}function Fe(e){M.set(e.workflowId,e.sequenceId)}function Ie(e){let t=M.get(e.workflowId)??-1;return t===-1?!1:e.sequenceId>t+1}function Le(e){if(!Pe(e))return{applied:!1,gapDetected:!1};let t=Ie(e);return Fe(e),e.kind===`goal`&&Re(e),{applied:!0,gapDetected:t}}function Re(t){e.activeGoal&&t.status===`done`&&t.kind===`goal`&&(e.activeGoal=null)}var N=[`I`,`P`,`A`,`B`,`C`],P=null;function F(e,t,n){let r=N.indexOf(n);if(r<0)return;let i=e.getBoundingClientRect(),a=t.offsetWidth||36,o=document.getElementById(`dot-${n}`);if(!o)return;let s=N[r+1],c=s?document.getElementById(`dot-${s}`):null;if(c){let e=o.getBoundingClientRect(),n=c.getBoundingClientRect(),r=(e.right+n.left)/2;t.style.left=r-i.left-a/2+`px`}else{let e=o.getBoundingClientRect();t.style.left=e.left-i.left+e.width/2-a/2+`px`}}var I={},L=``,R=0,z=null,B=0,V=!1,ze=0,Be=750,Ve=750;async function He(e={}){let t=await(await fetch(`${n}/api/orchestrate/snapshot`)).json();L=String(t.orc.scope||``),$e(t.orc.state),qe(t.orc.ctx||null),Ke(t.heartbeat||{pending:0,deferredPending:0}),Ge(t.workers),ne(t.runtime.queuePending),oe(t.queued||[]),_(t.queued||[]),e.hydrateRun&&ce(t.activeRun),Qe(),t.runtime.busy?d(`running`):f()||d(`idle`),r(()=>import(`./employees-CZdWHH-r.js`).then(e=>{typeof e.renderEmployees==`function`&&e.renderEmployees()}),__vite__mapDeps([0]))}function H(e=`manual`,t={}){let n=Date.now();return t.hydrateRun?He(t):z||(n-B<Be?Promise.resolve():(B=n,z=He(t).catch(t=>{throw console.warn(`[ws] orchestrate snapshot sync failed (${e})`,t),t}).finally(()=>{z=null}),z))}function Ue(e){ae(e),H(e,{hydrateRun:!0}).finally(()=>{te(e)}).catch(()=>{})}function U(e){let t=Date.now();e!==`discard`&&t-ze<Ve||(ze=t,Ue(e))}function We(){V||(V=!0,window.addEventListener(`focus`,()=>{U(`focus`)}),window.addEventListener(`pageshow`,e=>{e.persisted&&U(`pageshow`)}),document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`&&U(`visibilitychange`)}),document.addEventListener(`resume`,()=>{U(`resume`)}),`wasDiscarded`in document&&document.wasDiscarded&&U(`discard`),window.addEventListener(`message`,e=>{e.data?.type===`jaw-preview-visibility`&&e.data.visible&&U(`iframe-visible`)}))}function Ge(e){for(let e of Object.keys(I))delete I[e];for(let t of e)t.state===`running`&&t.phase&&(I[t.agentId]={phase:t.phase,phaseLabel:t.phaseLabel||``})}function Ke(t){let n={pending:Number(t?.pending||0),deferredPending:Number(t?.deferredPending||0),...t?.reason?{reason:t.reason}:{},...t?.policy?{policy:t.policy}:{},...t?.jobId?{jobId:t.jobId}:{},...t?.jobName?{jobName:t.jobName}:{}};e.heartbeatRuntime=n;let r=document.getElementById(`pabcHeartbeatStatus`);if(r)if(n.reason===`pabcd_active`&&n.deferredPending>0){let e=n.jobName?`: ${n.jobName}`:``;r.textContent=`heartbeat deferred (${n.deferredPending})${e}`,r.hidden=!1}else r.textContent=``,r.hidden=!0}function qe(t){e.orcTaskAnchor=String(t?.taskAnchor||``).trim(),e.orcResolvedSelection=t?.resolvedSelection||null;let n=document.getElementById(`pabcTaskAnchor`);n&&(e.orcTaskAnchor?(n.textContent=`anchor: ${e.orcResolvedSelection?.index?`${e.orcResolvedSelection.index}. `:``}${e.orcTaskAnchor}`,n.hidden=!1):(n.textContent=``,n.hidden=!0),Xe(t?.interview||null))}var W=(()=>{try{return localStorage.getItem(`jaw:interviewCollapsed`)===`1`}catch{return!1}})();function Je(e){W=e;try{localStorage.setItem(`jaw:interviewCollapsed`,e?`1`:`0`)}catch{}let t=document.getElementById(`interviewPanel`);if(!t)return;t.classList.toggle(`collapsed`,e);let n=t.querySelector(`.iv-toggle`);n&&n.setAttribute(`aria-expanded`,String(!e))}function Ye(e){let t=e=>{switch(e){case`max`:return 1;case`xhigh`:return .8;case`high`:return .6;case`medium`:return .4;default:return .2}},n=e=>{switch(e){case`max`:return`#2196f3`;case`xhigh`:return`#4caf50`;case`high`:return`#8bc34a`;case`medium`:return`#ff9800`;default:return`#f44336`}},r=[t(e.goal),t(e.constraint),t(e.success),t(e.ontology)],i=1-r.reduce((e,t)=>e+t,0)/r.length,a=Object.values(e).every(e=>e===`max`)||i<=.2?`đĸ Ready`:i<=.4?`đĄ Almost`:`đ´ Needs work`,o=(e,r)=>{let i=t(r);return`<div style="display:flex;align-items:center;gap:6px;font-size:12px">
|
|
16
|
+
<span style="width:70px;color:var(--text-secondary)">${e}</span>
|
|
17
|
+
<div style="flex:1;height:5px;background:var(--bg-tertiary);border-radius:3px">
|
|
18
|
+
<div style="width:${i*100}%;height:100%;background:${n(r)};border-radius:3px;transition:width .3s"></div>
|
|
19
|
+
</div>
|
|
20
|
+
<span style="width:60px;text-align:right;font-weight:600;font-size:11px">${i.toFixed(1)} ${r.toUpperCase()}</span>
|
|
21
|
+
</div>`};return`<div style="display:flex;flex-direction:column;gap:3px;margin:6px 0">
|
|
22
|
+
<div style="display:flex;justify-content:space-between;font-size:11px;margin-bottom:2px">
|
|
23
|
+
<span style="color:var(--text-secondary)">Ambiguity: ${i.toFixed(2)}</span>
|
|
24
|
+
<span>${a}</span>
|
|
25
|
+
</div>
|
|
26
|
+
${o(`Goal`,e.goal)}
|
|
27
|
+
${o(`Constraint`,e.constraint)}
|
|
28
|
+
${o(`Success`,e.success)}
|
|
29
|
+
${o(`Ontology`,e.ontology)}
|
|
30
|
+
</div>`}function Xe(e){let t=document.getElementById(`interviewPanel`);if(!t)return;if(!e||!e.known.length&&!e.unknown.length){t.hidden=!0;return}t.hidden=!1,t.classList.toggle(`collapsed`,W);let n=e=>{switch(e){case`user_statement`:return`đĸ`;case`repo_fact`:return`đĩ`;case`inference`:return`đĄ`;case`assumption`:return`đ `;case`default`:return`âĒ`;default:return`¡`}},r=e.known.map(e=>{if(typeof e==`string`)return`<li class="iv-known">¡ ${a(e)}</li>`;let t=e,r=n(t.source),i=t.dimension?` <span class="iv-dim">[${t.dimension}]</span>`:``;return`<li class="iv-known">${r} ${a(t.fact)}${i}</li>`}).join(``),i=e.unknown.map(e=>`<li class="iv-unknown">â ${a(typeof e==`string`?e:JSON.stringify(e))}</li>`).join(``);t.innerHTML=`
|
|
31
|
+
<button type="button" class="iv-toggle" aria-expanded="${!W}" aria-controls="interviewBody" title="ė¸í°ëˇ° í¸ëėģ¤ ė 기/íŧėšę¸°">
|
|
32
|
+
<span class="iv-chevron" aria-hidden="true">â¸</span>
|
|
33
|
+
<span class="iv-summary">Interview ¡ <span class="iv-known-count">Known ${e.known.length}</span> ¡ <span class="iv-unknown-count">Unknown ${e.unknown.length}</span>${e.known.filter(e=>typeof e==`object`&&e&&`source`in e&&e.source===`assumption`).length>0?` ¡ <span class="iv-assumption-count">â ī¸ ${e.known.filter(e=>typeof e==`object`&&e&&`source`in e&&e.source===`assumption`).length} assumptions</span>`:``} ¡ Round ${e.round}</span>
|
|
34
|
+
</button>
|
|
35
|
+
<div class="iv-body" id="interviewBody">
|
|
36
|
+
${e.assessment?`<div class="iv-section iv-section-ambiguity">${Ye(e.assessment)}</div>`:``}
|
|
37
|
+
<div class="iv-section iv-section-known"><strong>Known (${e.known.length})</strong><ul>${r}</ul></div>
|
|
38
|
+
<div class="iv-section iv-section-unknown"><strong>Unknown (${e.unknown.length})</strong><ul>${i}</ul></div>
|
|
39
|
+
</div>
|
|
40
|
+
`,t.dataset.toggleBound||(t.dataset.toggleBound=`1`,t.addEventListener(`click`,e=>{e.target.closest(`.iv-toggle`)&&Je(!W)}))}function Ze(e,t){let n=document.getElementById(`budgetPanel`);if(!n)return;if(!e||t!==`B`){n.hidden=!0;return}n.hidden=!1;let r=(e,t,n)=>{let r=n>0?Math.min(t/n*100,100):0;return`<div style="display:flex;align-items:center;gap:6px;font-size:12px">
|
|
41
|
+
<span style="width:70px;color:var(--text-secondary)">${e}</span>
|
|
42
|
+
<div style="flex:1;height:5px;background:var(--bg-tertiary);border-radius:3px">
|
|
43
|
+
<div style="width:${r}%;height:100%;background:${r>=100?`#f44336`:r>=66?`#ff9800`:`#4caf50`};border-radius:3px"></div>
|
|
44
|
+
</div>
|
|
45
|
+
<span style="width:30px;text-align:right;font-size:11px">${t}/${n}</span>
|
|
46
|
+
</div>`};n.innerHTML=`<div style="font-size:11px;font-weight:600;margin-bottom:4px;color:var(--text-secondary)">Build Budget</div>
|
|
47
|
+
${r(`Workers`,e.spent.workerDispatches,e.maxWorkerDispatches)}
|
|
48
|
+
${r(`Self-heal`,e.spent.selfHealRetries,e.maxSelfHealRetries)}
|
|
49
|
+
${r(`Verify`,e.spent.verificationRounds,e.maxVerificationRounds)}`}async function Qe(){try{let t=await fetch(`${n}/api/goal`);if(!t.ok)return;let r=await t.json();r.goal?e.activeGoal={id:r.goal.id,objective:r.goal.objective,status:r.goal.status,createdAt:r.goal.createdAt,updatedAt:r.goal.updatedAt,lastCheckpointSummary:r.goal.lastCheckpoint?.summary,nextAction:r.goal.lastCheckpoint?.nextAction}:e.activeGoal=null,G()}catch{}}function G(){let t=document.getElementById(`goalCockpit`);if(!t)return;let n=e.activeGoal;if(!n||n.status===`complete`||n.status===`cancelled`){t.hidden=!0,t.innerHTML=``;return}t.hidden=!1,t.replaceChildren();let r=n.status===`paused`?`paused`:n.status===`blocked`?`blocked`:`active`,i=document.createElement(`span`);i.className=`goal-objective`,i.title=n.objective,i.textContent=n.objective;let a=document.createElement(`span`);if(a.className=`goal-status goal-status--${r}`,a.textContent=n.status,t.append(i,a),n.nextAction){let e=document.createElement(`span`);e.className=`goal-next`,e.textContent=n.nextAction,t.append(e)}}function $e(t,n){let r=new Set([`IDLE`,`I`,`P`,`A`,`B`,`C`,`D`]).has(t)?t:`IDLE`;if(e.orcState=r,r===`IDLE`||r===`D`)document.body.removeAttribute(`data-orc-state`),document.body.style.removeProperty(`--orc-glow`);else{document.body.setAttribute(`data-orc-state`,r);let e=`--orc-glow-${r}`,t=getComputedStyle(document.documentElement).getPropertyValue(e).trim();document.body.style.setProperty(`--orc-glow`,t)}document.body.classList.add(`orc-pulse`),setTimeout(()=>document.body.classList.remove(`orc-pulse`),700);let i=document.getElementById(`orcStateBadge`);i&&(i.textContent={IDLE:``,I:`INTERVIEW`,P:`PLAN`,A:`AUDIT`,B:`BUILD`,C:`CHECK`,D:`DONE`}[r],i.style.display=r===`IDLE`?`none`:`inline-block`);let a=document.getElementById(`pabcRoadmap`),o=document.getElementById(`sharkRunner`),s=document.getElementById(`pabcBrand`);if(a&&o){if(!a.dataset.resizeObserved){a.dataset.resizeObserved=`1`,new ResizeObserver(()=>{P&&o.classList.contains(`running`)&&F(a,o,P)}).observe(a);let e=0;window.addEventListener(`resize`,()=>{cancelAnimationFrame(e),e=requestAnimationFrame(()=>{P&&o.classList.contains(`running`)&&F(a,o,P)})})}if(r===`IDLE`)a.classList.remove(`visible`,`shimmer-out`),o.classList.remove(`running`),P=null;else if(r===`D`){N.forEach(e=>{let t=document.getElementById(`dot-${e}`);t&&(t.className=`pabc-dot done`,t.setAttribute(`data-phase`,e))});for(let e=0;e<N.length;e++){let t=document.getElementById(`pabc-conn-${e}`);t&&(t.className=`pabc-connector done`)}o.classList.remove(`running`),P=null,a.classList.add(`shimmer-out`),setTimeout(()=>a.classList.remove(`visible`,`shimmer-out`),1e3)}else{a.classList.remove(`shimmer-out`),a.classList.add(`visible`),o.classList.add(`running`);let e=N.indexOf(r);N.forEach((t,n)=>{let r=document.getElementById(`dot-${t}`);r&&(r.className=`pabc-dot ${n<e?`done`:n===e?`active`:`future`}`,r.setAttribute(`data-phase`,t))});for(let t=0;t<N.length;t++){let n=document.getElementById(`pabc-conn-${t}`);n&&(n.className=`pabc-connector ${t<e?`done`:``}`)}P=r,requestAnimationFrame(()=>F(a,o,r))}s&&n&&(s.textContent=n)}}function et(){We();let t=`ws://${location.host}`;e.ws=new WebSocket(`${t}${n}/?lang=${o()}`),e.ws.onmessage=t=>{let n;try{n=JSON.parse(t.data)}catch{console.warn(`[ws] malformed message:`,t.data);return}if(!n||typeof n!=`object`||typeof n.type!=`string`){console.warn(`[ws] invalid message shape:`,n);return}if(n.type===`agent_status`){if(!n.running&&f())return;n.running&&f()&&ie(),n.running===void 0?d(n.status||`idle`):d(n.running?`running`:`idle`),n.agentId&&n.phase&&(I[n.agentId]={phase:n.phase,phaseLabel:n.phaseLabel||``},r(()=>import(`./employees-CZdWHH-r.js`).then(e=>e.loadEmployees()),__vite__mapDeps([0])))}else if(n.type===`queue_update`)ne(n.pending||0),Array.isArray(n.queued)&&_(n.queued),H(`queue_update`).catch(()=>{});else if(n.type===`worklog_created`)p(`${c.clipboard} Worklog: ${a(n.path||``)}`);else if(n.type===`round_start`){let e=n.agentPhases||n.subtasks||[],t=e.map(e=>a(e.agent||e.name||``)).join(`, `);p(i(`ws.roundStart`,{round:n.round||0,count:e.length,names:t}))}else if(n.type===`round_done`)n.action===`complete`?p(i(`ws.roundDone`,{round:n.round||0})):n.action===`next`?p(i(`ws.roundNext`,{round:n.round||0})):p(i(`ws.roundRetry`,{round:n.round||0}));else if(n.type===`agent_tool`){if(f())return;let e=n.toolType===`thinking`?`thinking`:n.toolType===`search`?`search`:n.toolType===`subagent`?`subagent`:`tool`;re({id:`step-${Date.now()}-${Math.random().toString(36).slice(2,6)}`,type:e,icon:n.icon||c.tool,rawIcon:n.rawIcon||n.icon||``,label:n.label||``,isEmployee:n.isEmployee===!0,detail:n.detail||``,stepRef:n.stepRef||``,traceRunId:n.traceRunId||``,traceSeq:n.traceSeq,detailAvailable:n.detailAvailable,detailBytes:n.detailBytes,rawRetentionStatus:n.rawRetentionStatus,status:n.status||`running`,startTime:Date.now()})}else if(n.type===`agent_output`||n.type===`agent_chunk`){if(f())return;le(n.text||``)}else if(n.type===`agent_retry`){let e=Number(n.delay??0),t=n.reason,r=a(String(t||`429`));p(i(e>0?`ws.retry`:`ws.retryNow`,{cli:a(n.cli||``),reason:r,delay:e}),`tool-activity`)}else if(n.type===`agent_fallback`)p(i(`ws.fallback`,{from:a(n.from||``),to:a(n.to||``)}),`tool-activity`);else if(n.type===`agent_smoke`)p(`${c.warning} ${a(n.cli||`agent`)}: smoke response detected â auto-continuing`,`tool-activity`);else if(n.type===`goal_done`)e.activeGoal=null,G(),p(`đ¯ Goal completed${n.source===`ai_output`?` (detected from AI output)`:``}`,`tool-activity`);else if(n.type===`goal_cancel`)e.activeGoal=null,G(),p(`đ¯ Goal cancelled`,`tool-activity`);else if(n.type===`schedule_wakeup`)p(`â° Wakeup scheduled in ${n.delaySeconds}s â ${a(String(n.reason||``))}`,`tool-activity`);else if(n.type===`goal_continuation_limit`)p(`â ī¸ Goal continuation limit reached (${n.attempts} attempts)`,`tool-activity`);else if(n.type===`goal_continuation`)p(`đ¯ Active goal â auto-continuing`,`tool-activity`);else if(n.type===`workflow_event`){let e=n.event;e&&Le(e)}else if(n.type===`agent_done`)n.steered||f()||(u(n.text||``,n.toolLog),A());else if(n.type===`orchestrate_done`)u(n.text||``),A();else if(n.type===`clear`){l(),se(),ee().clear();let e=document.getElementById(`chatMessages`);e&&(e.innerHTML=``),r(()=>import(`./idb-cache-5H89a4l8.js`).then(e=>e.clearCache()),[]).catch(()=>{})}else if(n.type===`session_reset`)p(`${c.refresh} Session reset â history preserved`,`tool-activity`);else if(n.type===`agent_added`||n.type===`agent_updated`||n.type===`agent_deleted`)r(()=>import(`./employees-CZdWHH-r.js`).then(e=>e.loadEmployees()),__vite__mapDeps([0]));else if(n.type===`heartbeat_pending`){let e={pending:n.pending||0,deferredPending:n.deferredPending||0};n.reason!==void 0&&(e.reason=n.reason),n.policy!==void 0&&(e.policy=n.policy),n.jobId!==void 0&&(e.jobId=n.jobId),n.jobName!==void 0&&(e.jobName=n.jobName),Ke(e)}else if(n.type===`orc_state`){if(!Ne(n.scope,L))return;$e(typeof n.state==`string`?n.state:`IDLE`,n.title),qe({taskAnchor:n.taskAnchor||null,resolvedSelection:n.resolvedSelection||null,interview:n.interview||null}),Ze(n.buildBudget||null,typeof n.state==`string`?n.state:`IDLE`)}else n.type===`memory_status`?r(()=>import(`./memory-DOBqiuPc.js`).then(e=>e.refreshMemorySidebar()),__vite__mapDeps([0])):n.type===`steer_started`?(ue(),u(``),d(`steering`)):n.type===`new_message`&&(n.source===`telegram`||n.source===`discord`||n.fromQueue===!0)?de(n.role===`assistant`?`agent`:n.role||`user`,n.content||``,n.cli):n.type===`system_notice`?p(`âšī¸ ${a(n.text||``)}`,`tool-activity`):n.type===`worker_stalled`?p(`â ī¸ Worker stalled: ${a(n.employeeName||n.agentId||``)}`,`tool-activity`):n.type===`worker_disconnected`?p(`đ Worker disconnected: ${a(n.agentId||``)} (exit ${a(String(n.exitCode??`?`))})`,`tool-activity`):n.type===`worker_timeout`?p(`âąī¸ Worker timed out: ${a(n.employeeName||n.agentId||``)}`,`tool-activity`):n.type===`alert_escalation`?p(a(n.message||``),`tool-activity`):n.type===`schedule_wakeup_failed`?p(`â ī¸ Wakeup failed â ${a(String(n.reason||``))}: ${a(n.error||``)}`,`tool-activity`):n.type===`goal_continuation_failed`?p(`â ī¸ Goal continuation failed: ${a(n.error||``)}`,`tool-activity`):n.type===`settings_change`?H(`settings_change`).catch(()=>{}):(n.type===`session_switched`||n.type===`session_created`)&&window.location.reload()},e.ws.onopen=()=>{console.log(`[ws] connected`);let e=Date.now()-R<1e4;r(()=>import(`./ui-CverZJnd.js`).then(async t=>{if(t.cleanupToolActivity(),!e)try{await t.loadMessages(),R=Date.now()}catch(e){console.error(`[ws] loadMessages failed`,e)}H(`reconnect`,{hydrateRun:!0}).catch(()=>{}).finally(()=>t.reconcileChatBottomAfterRestore(`reconnect`))}),__vite__mapDeps([0]))},e.ws.onclose=()=>{console.log(`[ws] disconnected, reconnecting in 2s...`),r(()=>import(`./ui-CverZJnd.js`).then(e=>e.cleanupToolActivity()),__vite__mapDeps([0])),d(`idle`),p(`${c.exec} ${i(`ws.disconnected`)}`,`tool-activity`),setTimeout(et,2e3)}}function tt(e){return I[e]||null}var K=`sidebarState`,q=900,nt=768;function J(){return window.innerWidth<=nt}function Y(){document.body.classList.remove(`left-expanded`,`right-expanded`)}function rt(e){let t=`${e}-expanded`,n=e===`left`?`right-expanded`:`left-expanded`,r=!document.body.classList.contains(t);document.body.classList.remove(n),document.body.classList.toggle(t,r)}function it(){let e={};try{e=JSON.parse(localStorage.getItem(K)||`{}`)}catch{}e.left&&document.body.classList.add(`left-collapsed`),e.right&&document.body.classList.add(`right-collapsed`);let t=J();document.getElementById(`toggleLeft`)?.addEventListener(`click`,at),document.getElementById(`toggleRight`)?.addEventListener(`click`,ot),window.addEventListener(`resize`,()=>{let e=J();if(window.innerWidth>q){Y();let e={};try{e=JSON.parse(localStorage.getItem(K)||`{}`)}catch{}document.body.classList.toggle(`left-collapsed`,!!e.left),document.body.classList.toggle(`right-collapsed`,!!e.right)}else document.body.classList.remove(`left-collapsed`,`right-collapsed`),e!==t&&Y();t=e,Q()}),window.innerWidth<=q&&(document.body.classList.remove(`left-collapsed`,`right-collapsed`),J()&&Y()),Q()}function X(){return window.innerWidth<=q}function at(){X()?rt(`left`):document.body.classList.toggle(`left-collapsed`),$(),Q()}function ot(){X()?rt(`right`):document.body.classList.toggle(`right-collapsed`),Z()&&document.getElementById(`tabAgents`)?.classList.contains(`active`)&&r(()=>import(`./employees-CZdWHH-r.js`).then(e=>e.loadEmployees(!0)),__vite__mapDeps([0])),$(),Q()}function st(){return X()?document.body.classList.contains(`left-expanded`):!document.body.classList.contains(`left-collapsed`)}function Z(){return X()?document.body.classList.contains(`right-expanded`):!document.body.classList.contains(`right-collapsed`)}function Q(){let e=document.getElementById(`toggleLeft`),t=document.getElementById(`toggleRight`);e&&(e.innerHTML=st()?c.chevronLeft:c.chevronRight),t&&(t.innerHTML=Z()?c.chevronRight:c.chevronLeft)}function $(){localStorage.setItem(K,JSON.stringify({left:document.body.classList.contains(`left-collapsed`),right:document.body.classList.contains(`right-collapsed`)}))}export{et as a,j as c,ot as i,Me as l,Z as n,tt as o,at as r,H as s,it as t,xe as u};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{t as e}from"./state-D04-chBy.js";import{i as t}from"./api-tVoG39dL.js";import{C as n,_ as r,f as i,p as a,y as o}from"./render-
|
|
1
|
+
import{t as e}from"./state-D04-chBy.js";import{i as t}from"./api-tVoG39dL.js";import{C as n,_ as r,f as i,p as a,y as o}from"./render-J11oxfnl.js";var s=[`productivity`,`communication`,`devtools`,`ai-media`,`utility`,`smarthome`,`automation`];function c(e,t){return t?[e.id,e.name,e.description,e.category,e.requires?.env?.join(` `),e.requires?.bins?.join(` `),e.install].filter(Boolean).join(` `).toLowerCase().includes(t):!0}async function l(){try{e.allSkills=await(await o(`/api/skills`)).json(),u()}catch{let e=document.getElementById(`skillsList`);e&&(e.innerHTML=`<div style="color:var(--text-dim);font-size:11px">${n(`skill.loadFail`)}</div>`)}}function u(){let t=document.getElementById(`skillsList`),o=document.getElementById(`skillsCount`);if(!t||!o)return;let l=e.allSkills,u=l;e.currentSkillFilter===`installed`?u=l.filter(e=>e.enabled):e.currentSkillFilter===`other`?u=l.filter(e=>!s.includes(e.category||``)):e.currentSkillFilter!==`all`&&(u=l.filter(t=>t.category===e.currentSkillFilter));let d=e.currentSkillSearch.trim().toLowerCase();u=u.filter(e=>c(e,d));let f=l.filter(e=>e.enabled).length;if(o.textContent=d?n(`skill.countFiltered`,{shown:u.length,active:f,total:l.length}):n(`skill.count`,{active:f,total:l.length}),!u.length){t.innerHTML=`<div class="skill-empty">${r(n(`skill.search.empty`))}</div>`;return}t.innerHTML=u.map(e=>{let t=[];return e.requires?.env&&t.push(`${i.key} `+e.requires.env.map(e=>r(e)).join(`, `)),e.requires?.bins&&t.push(`${i.settings} `+e.requires.bins.map(e=>r(e)).join(`, `)),e.install&&t.push(r(e.install)),`
|
|
2
2
|
<div class="skill-card ${e.enabled?`enabled`:``}">
|
|
3
3
|
<div class="skill-card-header">
|
|
4
4
|
<span class="skill-emoji">${e.emoji?a(e.emoji):i.tool}</span>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e}from"./skills-CjaBmIPV.js";export{e as loadSkills};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./api-tVoG39dL.js";import{C as t,_ as n}from"./render-
|
|
1
|
+
import{n as e}from"./api-tVoG39dL.js";import{C as t,_ as n}from"./render-J11oxfnl.js";import{t as r}from"./locale-BHMJIzyw.js";var i=[],a=[],o=-1,s=!1,c=null;function l(e){let t=String(e||``).slice(1).trim().split(/\s+/)[0]||``;return t.includes(`/`)||t.includes(`\\`)}var u=()=>document.getElementById(`cmdDropdown`),d=()=>document.getElementById(`chatInput`);function f(e){let t=String(e||``).toLowerCase();return i.filter(e=>`/${e.name}`.startsWith(t))}function p(e){let t=e.workflow?.workflowArgs||[];return t.length?t.map(e=>e.required?`<${e.name}>`:`[${e.name}]`).join(` `):e.args||``}function m(e){let t=e.workflow;return t?`<span class="cmd-meta">
|
|
2
2
|
<span class="cmd-chip">${n(t.phase)}</span>
|
|
3
3
|
<span class="cmd-chip cmd-risk-${n(t.risk)}">${n(t.risk)}</span>
|
|
4
4
|
<span class="cmd-chip">${n(t.output)}</span>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e}from"./slash-commands-71jc07Wf.js";export{e as loadCommands};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./api-tVoG39dL.js";import{_ as t}from"./render-
|
|
1
|
+
import{n as e}from"./api-tVoG39dL.js";import{_ as t}from"./render-J11oxfnl.js";import{r as n}from"./provider-icons-Crv6yvlG.js";var r=80,i=``,a=0,o=0,s=!1;function c(e){return e.eventType||e.event_type||`event`}function l(){let e=document.getElementById(`traceDrawerOverlay`);return e||(e=document.createElement(`div`),e.id=`traceDrawerOverlay`,e.className=`trace-drawer-overlay`,e.innerHTML=`<aside class="trace-drawer" role="dialog" aria-modal="true" aria-labelledby="traceDrawerTitle">
|
|
2
2
|
<header class="trace-drawer-header">
|
|
3
3
|
<div><p class="trace-drawer-kicker">Raw trace</p><h2 id="traceDrawerTitle">Trace</h2></div>
|
|
4
4
|
<button class="trace-drawer-close" type="button" aria-label="Close trace drawer">Ã</button>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{D as e,_ as t,m as n,r}from"./ui-qKxy-4p9.js";export{r as cleanupToolActivity,n as loadMessages,e as reconcileChatBottomAfterRestore,t as updateQueueBadge};
|