cli-jaw 1.5.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ko.md +2 -2
- package/README.md +21 -2
- package/README.zh-CN.md +2 -2
- package/dist/bin/cli-jaw.js +5 -1
- package/dist/bin/cli-jaw.js.map +1 -1
- package/dist/bin/commands/dispatch.js +50 -0
- package/dist/bin/commands/dispatch.js.map +1 -0
- package/dist/lib/mcp-sync.js +1 -1
- package/dist/lib/mcp-sync.js.map +1 -1
- package/dist/lib/upload.js +14 -1
- package/dist/lib/upload.js.map +1 -1
- package/dist/server.js +53 -40
- package/dist/server.js.map +1 -1
- package/dist/src/agent/events.js +72 -13
- package/dist/src/agent/events.js.map +1 -1
- package/dist/src/agent/spawn.js +65 -24
- package/dist/src/agent/spawn.js.map +1 -1
- package/dist/src/cli/commands.js +6 -6
- package/dist/src/cli/commands.js.map +1 -1
- package/dist/src/cli/handlers.js +11 -9
- package/dist/src/cli/handlers.js.map +1 -1
- package/dist/src/cli/registry.js +7 -1
- package/dist/src/cli/registry.js.map +1 -1
- package/dist/src/core/config.js +15 -8
- package/dist/src/core/config.js.map +1 -1
- package/dist/src/core/db.js +18 -3
- package/dist/src/core/db.js.map +1 -1
- package/dist/src/core/employees.js +34 -0
- package/dist/src/core/employees.js.map +1 -0
- package/dist/src/discord/bot.js +72 -9
- package/dist/src/discord/bot.js.map +1 -1
- package/dist/src/discord/commands.js +12 -8
- package/dist/src/discord/commands.js.map +1 -1
- package/dist/src/orchestrator/distribute.js +41 -24
- package/dist/src/orchestrator/distribute.js.map +1 -1
- package/dist/src/orchestrator/gateway.js +3 -1
- package/dist/src/orchestrator/gateway.js.map +1 -1
- package/dist/src/orchestrator/pipeline.js +93 -27
- package/dist/src/orchestrator/pipeline.js.map +1 -1
- package/dist/src/orchestrator/research.js +5 -5
- package/dist/src/orchestrator/research.js.map +1 -1
- package/dist/src/orchestrator/scope.js +55 -0
- package/dist/src/orchestrator/scope.js.map +1 -0
- package/dist/src/orchestrator/state-machine.js +23 -21
- package/dist/src/orchestrator/state-machine.js.map +1 -1
- package/dist/src/orchestrator/worker-registry.js +9 -2
- package/dist/src/orchestrator/worker-registry.js.map +1 -1
- package/dist/src/prompt/builder.js +78 -37
- package/dist/src/prompt/builder.js.map +1 -1
- package/dist/src/prompt/templates/a1-system.md +40 -0
- package/dist/src/prompt/templates/employee.md +10 -1
- package/dist/src/prompt/templates/orchestration.md +17 -1
- package/dist/src/telegram/bot.js +7 -1
- package/dist/src/telegram/bot.js.map +1 -1
- package/package.json +4 -2
- package/public/assets/fonts/GeistVF.woff2 +0 -0
- package/public/assets/fonts/JetBrainsMono-Variable.woff2 +0 -0
- package/public/assets/providers/claude-color.svg +1 -0
- package/public/assets/providers/claude.svg +1 -0
- package/public/assets/providers/copilot-color.svg +1 -0
- package/public/assets/providers/copilot.svg +1 -0
- package/public/assets/providers/discord.svg +1 -0
- package/public/assets/providers/gemini-color.svg +1 -0
- package/public/assets/providers/gemini.svg +1 -0
- package/public/assets/providers/openai.svg +1 -0
- package/public/assets/providers/opencode.svg +1 -0
- package/public/assets/providers/telegram.svg +1 -0
- package/public/css/chat.css +79 -51
- package/public/css/diagram.css +348 -0
- package/public/css/layout.css +33 -10
- package/public/css/markdown.css +64 -18
- package/public/css/modals.css +3 -3
- package/public/css/orc-state.css +9 -9
- package/public/css/sidebar.css +37 -3
- package/public/css/tool-ui.css +46 -11
- package/public/css/variables.css +63 -63
- package/public/dist/assets/api-Bbmmo0o1.js +1 -0
- package/public/dist/assets/architecture-YZFGNWBL-BxiHqtOH.js +1 -0
- package/public/dist/assets/architectureDiagram-Q4EWVU46-CJTGDw5p.js +1 -0
- package/public/dist/assets/blockDiagram-DXYQGD6D-Btl5Y-Er.js +1 -0
- package/public/dist/assets/c4Diagram-AHTNJAMY-sDfjW4ZF.js +1 -0
- package/public/dist/assets/classDiagram-6PBFFD2Q-ByCgggL2.js +1 -0
- package/public/dist/assets/classDiagram-v2-HSJHXN6E-t1amaXkU.js +1 -0
- package/public/dist/assets/constants-C8_0OtK2.js +1 -0
- package/public/dist/assets/cose-bilkent-S5V4N54A-eOSFGdaE.js +1 -0
- package/public/dist/assets/dagre-KV5264BT-OCB5j8Q6.js +1 -0
- package/public/dist/assets/diagram-5BDNPKRD-C-4fgK5P.js +1 -0
- package/public/dist/assets/diagram-G4DWMVQ6-C6vmHKDV.js +1 -0
- package/public/dist/assets/diagram-MMDJMWI5-BMCo_wmt.js +1 -0
- package/public/dist/assets/diagram-TYMM5635-DaCLdttJ.js +1 -0
- package/public/dist/assets/employees-D5n7mX5v.js +39 -0
- package/public/dist/assets/erDiagram-SMLLAGMA-BiTRdm5s.js +1 -0
- package/public/dist/assets/flowDiagram-DWJPFMVM-sv6jVi0d.js +1 -0
- package/public/dist/assets/ganttDiagram-T4ZO3ILL-jCP3OW23.js +1 -0
- package/public/dist/assets/gitGraph-7Q5UKJZL-BIeKLxpm.js +1 -0
- package/public/dist/assets/gitGraphDiagram-UUTBAWPF-CokylnbW.js +1 -0
- package/public/dist/assets/index-Br2UdKlR.css +1 -0
- package/public/dist/assets/index-CmAU0d96.js +49 -0
- package/public/dist/assets/info-OMHHGYJF-CIEl5dWF.js +1 -0
- package/public/dist/assets/infoDiagram-42DDH7IO-BBnK1Bh2.js +1 -0
- package/public/dist/assets/ishikawaDiagram-UXIWVN3A-qXIz0VhS.js +1 -0
- package/public/dist/assets/journeyDiagram-VCZTEJTY-BdrOLof3.js +1 -0
- package/public/dist/assets/kanban-definition-6JOO6SKY-CcX7CE04.js +1 -0
- package/public/dist/assets/mermaid.core-BoxIvw7E.js +1 -0
- package/public/dist/assets/mindmap-definition-QFDTVHPH-CdXARskX.js +1 -0
- package/public/dist/assets/packet-4T2RLAQJ-Bz4ZwYZ3.js +1 -0
- package/public/dist/assets/pie-ZZUOXDRM-AtGL3wZ2.js +1 -0
- package/public/dist/assets/pieDiagram-DEJITSTG-B5SOq9Yr.js +1 -0
- package/public/dist/assets/quadrantDiagram-34T5L4WZ-D0uNWgpI.js +1 -0
- package/public/dist/assets/radar-PYXPWWZC-AbJSfeqB.js +1 -0
- package/public/dist/assets/render-C8N0rp4L.js +25 -0
- package/public/dist/assets/requirementDiagram-MS252O5E-62td6IQ-.js +1 -0
- package/public/dist/assets/sankeyDiagram-XADWPNL6-Crg_02iC.js +1 -0
- package/public/dist/assets/sequenceDiagram-FGHM5R23-fbCocZHj.js +1 -0
- package/public/dist/assets/settings-BJR-IGM5.js +41 -0
- package/public/dist/assets/settings-Dm6OnPmY.js +1 -0
- package/public/dist/assets/skills-D6jv9AIs.js +1 -0
- package/public/dist/assets/skills-uywskdFh.js +12 -0
- package/public/dist/assets/slash-commands-CCDonT40.js +1 -0
- package/public/dist/assets/{slash-commands-DMsE88bu.js → slash-commands-DWvL-VDU.js} +1 -1
- package/public/dist/assets/stateDiagram-FHFEXIEX-Gy3DhXxQ.js +1 -0
- package/public/dist/assets/stateDiagram-v2-QKLJ7IA2-DJc-FW9O.js +1 -0
- package/public/dist/assets/timeline-definition-GMOUNBTQ-B3cA9DgY.js +1 -0
- package/public/dist/assets/treeView-SZITEDCU-Cn58DIbB.js +1 -0
- package/public/dist/assets/treemap-W4RFUUIX-DPcYjDzH.js +1 -0
- package/public/dist/assets/ui-C1daR00l.js +1 -0
- package/public/dist/assets/ui-D-oFkXed.js +131 -0
- package/public/dist/assets/vendor-icons-1Ec7ZWcT.js +1 -0
- package/public/dist/assets/{vendor-mermaid-COidH9HB.js → vendor-mermaid-lvHqQdfg.js} +4 -4
- package/public/dist/assets/vennDiagram-DHZGUBPP-DkBfxilo.js +1 -0
- package/public/dist/assets/wardley-RL74JXVD-6Dg0PJ4H.js +1 -0
- package/public/dist/assets/wardleyDiagram-NUSXRM2D-Dsntl_vy.js +1 -0
- package/public/dist/assets/ws-Dnn8HG8B.js +2 -0
- package/public/dist/assets/xychartDiagram-5P7HB3ND-B_McB5GE.js +1 -0
- package/public/dist/index.html +63 -55
- package/public/index.html +62 -53
- package/public/js/constants.ts +8 -2
- package/public/js/diagram/iframe-renderer.ts +559 -0
- package/public/js/diagram/types.ts +129 -0
- package/public/js/diagram/widget-validator.ts +82 -0
- package/public/js/features/chat.ts +24 -12
- package/public/js/features/employees.ts +3 -2
- package/public/js/features/heartbeat.ts +4 -3
- package/public/js/features/memory.ts +4 -3
- package/public/js/features/process-block.ts +12 -11
- package/public/js/features/settings-cli-status.ts +10 -7
- package/public/js/features/settings-core.ts +13 -3
- package/public/js/features/settings-discord.ts +9 -0
- package/public/js/features/settings-mcp.ts +8 -7
- package/public/js/features/settings-stt.ts +4 -4
- package/public/js/features/settings-templates.ts +10 -8
- package/public/js/features/settings-types.ts +1 -1
- package/public/js/features/settings.ts +1 -1
- package/public/js/features/sidebar.ts +4 -2
- package/public/js/features/skills.ts +4 -3
- package/public/js/features/theme.ts +4 -0
- package/public/js/features/tool-ui.ts +6 -5
- package/public/js/features/voice-recorder.ts +2 -1
- package/public/js/icons.ts +257 -0
- package/public/js/main.ts +9 -3
- package/public/js/provider-icons.ts +88 -0
- package/public/js/render.ts +493 -30
- package/public/js/streaming-render.ts +3 -3
- package/public/js/ui.ts +38 -18
- package/public/js/ws.ts +17 -10
- package/public/locales/en.json +89 -88
- package/public/locales/ko.json +89 -88
- package/scripts/release-preview.sh +1 -1
- package/public/dist/assets/api-BlPw3bUI.js +0 -1
- package/public/dist/assets/architecture-YZFGNWBL-BkS7SZQi.js +0 -1
- package/public/dist/assets/architectureDiagram-Q4EWVU46-Dl3iBKeR.js +0 -1
- package/public/dist/assets/blockDiagram-DXYQGD6D-DPr4D17p.js +0 -1
- package/public/dist/assets/c4Diagram-AHTNJAMY-CfoxJtDk.js +0 -1
- package/public/dist/assets/classDiagram-6PBFFD2Q-BOAdHnnB.js +0 -1
- package/public/dist/assets/classDiagram-v2-HSJHXN6E-B2QCJXWC.js +0 -1
- package/public/dist/assets/constants-DshMUJbo.js +0 -1
- package/public/dist/assets/cose-bilkent-S5V4N54A-CA14jk7w.js +0 -1
- package/public/dist/assets/dagre-KV5264BT-BVwNaSwC.js +0 -1
- package/public/dist/assets/diagram-5BDNPKRD-CHqIAvdc.js +0 -1
- package/public/dist/assets/diagram-G4DWMVQ6-DxvsCvTP.js +0 -1
- package/public/dist/assets/diagram-MMDJMWI5-DqOPO7dl.js +0 -1
- package/public/dist/assets/diagram-TYMM5635-C9xMWPQn.js +0 -1
- package/public/dist/assets/employees-CFRlsbHm.js +0 -39
- package/public/dist/assets/erDiagram-SMLLAGMA-BTmpfRkm.js +0 -1
- package/public/dist/assets/flowDiagram-DWJPFMVM-DZBSQAKA.js +0 -1
- package/public/dist/assets/ganttDiagram-T4ZO3ILL-TAEMCRbT.js +0 -1
- package/public/dist/assets/gitGraph-7Q5UKJZL-bbxndRNA.js +0 -1
- package/public/dist/assets/gitGraphDiagram-UUTBAWPF-CBxtx0MB.js +0 -1
- package/public/dist/assets/index-1Gg-6jeC.css +0 -1
- package/public/dist/assets/index-CQHqXjrK.js +0 -49
- package/public/dist/assets/info-OMHHGYJF-DRXq_Ywr.js +0 -1
- package/public/dist/assets/infoDiagram-42DDH7IO-C7FFwX4m.js +0 -1
- package/public/dist/assets/ishikawaDiagram-UXIWVN3A-DEZJE79j.js +0 -1
- package/public/dist/assets/journeyDiagram-VCZTEJTY-ZHLiY6GV.js +0 -1
- package/public/dist/assets/kanban-definition-6JOO6SKY-NP7pY7ML.js +0 -1
- package/public/dist/assets/mermaid.core-CHuluSlD.js +0 -1
- package/public/dist/assets/mindmap-definition-QFDTVHPH-Bd1OgfN_.js +0 -1
- package/public/dist/assets/packet-4T2RLAQJ-CGu8ST97.js +0 -1
- package/public/dist/assets/pie-ZZUOXDRM-CDG65mhS.js +0 -1
- package/public/dist/assets/pieDiagram-DEJITSTG-BbMBHLDM.js +0 -1
- package/public/dist/assets/quadrantDiagram-34T5L4WZ-CDCDgI1e.js +0 -1
- package/public/dist/assets/radar-PYXPWWZC-1gS-6ylu.js +0 -1
- package/public/dist/assets/render-YHvL5VM_.js +0 -6
- package/public/dist/assets/requirementDiagram-MS252O5E-DkmvOtYz.js +0 -1
- package/public/dist/assets/sankeyDiagram-XADWPNL6-GNcXIYsL.js +0 -1
- package/public/dist/assets/sequenceDiagram-FGHM5R23-BFrw2n6x.js +0 -1
- package/public/dist/assets/settings-BQF_u5px.js +0 -37
- package/public/dist/assets/settings-C5Q9IPjJ.js +0 -1
- package/public/dist/assets/skills-9Pd2rOw-.js +0 -1
- package/public/dist/assets/skills-BI7sQAdk.js +0 -12
- package/public/dist/assets/slash-commands-FMpJzlDB.js +0 -1
- package/public/dist/assets/stateDiagram-FHFEXIEX-BLgKnllT.js +0 -1
- package/public/dist/assets/stateDiagram-v2-QKLJ7IA2-CbzuWsSa.js +0 -1
- package/public/dist/assets/timeline-definition-GMOUNBTQ-CcZTJ3gL.js +0 -1
- package/public/dist/assets/treeView-SZITEDCU-BDqBsaH1.js +0 -1
- package/public/dist/assets/treemap-W4RFUUIX-BaWHA3Di.js +0 -1
- package/public/dist/assets/ui-BukgLHuh.js +0 -29
- package/public/dist/assets/ui-Bvz1JfTE.js +0 -1
- package/public/dist/assets/vennDiagram-DHZGUBPP-BWV_j1bh.js +0 -1
- package/public/dist/assets/wardley-RL74JXVD-C7gKA3d7.js +0 -1
- package/public/dist/assets/wardleyDiagram-NUSXRM2D-BUoq_wug.js +0 -1
- package/public/dist/assets/ws-S_AZgx7L.js +0 -2
- package/public/dist/assets/xychartDiagram-5P7HB3ND-PvT5Ec82.js +0 -1
- /package/public/dist/assets/{api-B8XKQ4OT.js → api-Ci-lgwRp.js} +0 -0
- /package/public/dist/assets/{locale-BjoAcbis.js → locale-DIXc-_34.js} +0 -0
|
@@ -0,0 +1,2 @@
|
|
|
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-O6NVkWcL.js";import{Z as t}from"./vendor-mermaid-lvHqQdfg.js";import{a as n,p as r,t as i,u as a}from"./render-C8N0rp4L.js";import{a as o,d as s,f as c,g as l,i as u,m as d,n as f,r as p,t as m}from"./ui-D-oFkXed.js";var h=[`P`,`A`,`B`,`C`],g=null;function _(e,t,n){let r=h.indexOf(n);if(r<0)return;let i=e.getBoundingClientRect(),a=t.offsetWidth||36,o=document.getElementById(`dot-${n}`);if(!o)return;let s=h[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 v={},y=``;function b(e){for(let e of Object.keys(v))delete v[e];for(let t of e)t.state===`running`&&t.phase&&(v[t.agentId]={phase:t.phase,phaseLabel:t.phaseLabel||``})}function x(t,n){let r=new Set([`IDLE`,`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:``,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(()=>{g&&o.classList.contains(`running`)&&_(a,o,g)}).observe(a);let e=0;window.addEventListener(`resize`,()=>{cancelAnimationFrame(e),e=requestAnimationFrame(()=>{g&&o.classList.contains(`running`)&&_(a,o,g)})})}if(r===`IDLE`)a.classList.remove(`visible`,`shimmer-out`),o.classList.remove(`running`),g=null;else if(r===`D`){h.forEach(e=>{let t=document.getElementById(`dot-${e}`);t&&(t.className=`pabc-dot done`,t.setAttribute(`data-phase`,e))});for(let e=0;e<4;e++){let t=document.getElementById(`pabc-conn-${e}`);t&&(t.className=`pabc-connector done`)}o.classList.remove(`running`),g=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=h.indexOf(r);h.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<4;t++){let n=document.getElementById(`pabc-conn-${t}`);n&&(n.className=`pabc-connector ${t<e?`done`:``}`)}g=r,requestAnimationFrame(()=>_(a,o,r))}s&&n&&(s.textContent=n)}}function S(){let h=`ws://${location.host}`;e.ws=new WebSocket(`${h}?lang=${a()}`),e.ws.onmessage=e=>{let a;try{a=JSON.parse(e.data)}catch{console.warn(`[ws] malformed message:`,e.data);return}if(!a||typeof a!=`object`||typeof a.type!=`string`){console.warn(`[ws] invalid message shape:`,a);return}if(a.type===`agent_status`)a.running===void 0?s(a.status||`idle`):s(a.running?`running`:`idle`),a.agentId&&a.phase&&(v[a.agentId]={phase:a.phase,phaseLabel:a.phaseLabel||``},t(()=>import(`./employees-D5n7mX5v.js`).then(e=>e.loadEmployees()),__vite__mapDeps([0])));else if(a.type===`queue_update`)d(a.pending||0);else if(a.type===`worklog_created`)f(`${n.clipboard} Worklog: ${i(a.path||``)}`);else if(a.type===`round_start`){let e=a.agentPhases||a.subtasks||[],t=e.map(e=>i(e.agent||e.name||``)).join(`, `);f(r(`ws.roundStart`,{round:a.round||0,count:e.length,names:t}))}else if(a.type===`round_done`)a.action===`complete`?f(r(`ws.roundDone`,{round:a.round||0})):a.action===`next`?f(r(`ws.roundNext`,{round:a.round||0})):f(r(`ws.roundRetry`,{round:a.round||0}));else if(a.type===`agent_tool`){let e=a.toolType===`thinking`?`thinking`:a.toolType===`search`?`search`:`tool`;c({id:`step-${Date.now()}-${Math.random().toString(36).slice(2,6)}`,type:e,icon:a.icon||n.tool,label:a.label||``,detail:a.detail||``,stepRef:a.stepRef||``,status:a.status||`running`,startTime:Date.now()})}else if(a.type===`agent_output`)p(a.text||``);else if(a.type===`agent_retry`)f(r(`ws.retry`,{cli:i(a.cli||``),delay:a.delay||10}),`tool-activity`);else if(a.type===`agent_fallback`)f(r(`ws.fallback`,{from:i(a.from||``),to:i(a.to||``)}),`tool-activity`);else if(a.type===`agent_smoke`)f(`${n.warning} ${i(a.cli||`agent`)}: smoke response detected — auto-continuing`,`tool-activity`);else if(a.type===`agent_done`)o(a.text||``,a.toolLog);else if(a.type===`orchestrate_done`)o(a.text||``);else if(a.type===`clear`){u(),l().clear();let e=document.getElementById(`chatMessages`);e&&(e.innerHTML=``)}else if(a.type===`session_reset`)f(`${n.refresh} Session reset — history preserved`,`tool-activity`);else if(a.type===`agent_added`||a.type===`agent_updated`||a.type===`agent_deleted`)t(()=>import(`./employees-D5n7mX5v.js`).then(e=>e.loadEmployees()),__vite__mapDeps([0]));else if(a.type===`orc_state`){if(a.scope&&y&&a.scope!==y)return;x(typeof a.state==`string`?a.state:`IDLE`,a.title)}else a.type===`new_message`&&(a.source===`telegram`||a.source===`discord`)&&m(a.role===`assistant`?`agent`:a.role||`user`,a.content||``,a.cli)},e.ws.onopen=()=>{console.log(`[ws] connected`),t(()=>import(`./ui-C1daR00l.js`).then(e=>{e.cleanupToolActivity(),e.loadMessages(),e.setStatus(`idle`)}),__vite__mapDeps([0])),fetch(`/api/orchestrate/snapshot`).then(e=>e.json()).then(e=>{y=String(e.orc.scope||``),x(e.orc.state),b(e.workers),d(e.runtime.queuePending),s(e.runtime.busy?`running`:`idle`),t(()=>import(`./employees-D5n7mX5v.js`).then(e=>{typeof e.renderEmployees==`function`&&e.renderEmployees()}),__vite__mapDeps([0]))}).catch(()=>{})},e.ws.onclose=()=>{console.log(`[ws] disconnected, reconnecting in 2s...`),t(()=>import(`./ui-C1daR00l.js`).then(e=>e.cleanupToolActivity()),__vite__mapDeps([0])),s(`idle`),f(`${n.exec} 연결 끊김 — 재연결 중...`,`tool-activity`),setTimeout(S,2e3)}}function C(e){return v[e]||null}export{C as n,S as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e}from"./vendor-mermaid-lvHqQdfg.js";export{e as diagram};
|
package/public/dist/index.html
CHANGED
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
<meta charset="UTF-8">
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
|
|
7
7
|
<meta name="theme-color" content="#22d3ee">
|
|
8
|
-
<meta name="
|
|
8
|
+
<meta name="mobile-web-app-capable" content="yes">
|
|
9
9
|
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
|
|
10
|
+
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🦈</text></svg>">
|
|
10
11
|
<link rel="manifest" href="/dist/assets/manifest-Bw-LRm-c.json">
|
|
11
12
|
<link rel="apple-touch-icon" href="/dist/assets/icon-192-CwXPIYF5.png">
|
|
12
13
|
<title>CLI-JAW</title>
|
|
@@ -16,9 +17,9 @@
|
|
|
16
17
|
href="https://fonts.googleapis.com/css2?family=Chakra+Petch:wght@400;500;600;700&family=Outfit:wght@400;500;600;700&display=swap"
|
|
17
18
|
rel="stylesheet">
|
|
18
19
|
<!-- Vite handles module bundling in dev (HMR) and production (build) -->
|
|
19
|
-
<script type="module" crossorigin src="/dist/assets/index-
|
|
20
|
+
<script type="module" crossorigin src="/dist/assets/index-CmAU0d96.js"></script>
|
|
20
21
|
<link rel="stylesheet" crossorigin href="/dist/assets/vendor-render-Bjnw0wQ6.css">
|
|
21
|
-
<link rel="stylesheet" crossorigin href="/dist/assets/index-
|
|
22
|
+
<link rel="stylesheet" crossorigin href="/dist/assets/index-Br2UdKlR.css">
|
|
22
23
|
</head>
|
|
23
24
|
|
|
24
25
|
<body>
|
|
@@ -35,7 +36,7 @@
|
|
|
35
36
|
|
|
36
37
|
<div>
|
|
37
38
|
<div class="section-title" data-i18n="sidebar.memory">메모리</div>
|
|
38
|
-
<button class="sidebar-hb-btn" id="memorySidebarBtn" aria-label="Open memory panel"
|
|
39
|
+
<button class="sidebar-hb-btn" id="memorySidebarBtn" aria-label="Open memory panel"><span data-icon="brain"></span> Memory (0)</button>
|
|
39
40
|
</div>
|
|
40
41
|
|
|
41
42
|
<div>
|
|
@@ -78,15 +79,15 @@
|
|
|
78
79
|
<button class="sidebar-hb-btn btn-action-sm w-auto" id="appNameSave">✓</button>
|
|
79
80
|
</div>
|
|
80
81
|
<button class="sidebar-hb-btn" id="btnClearChat">/clear</button>
|
|
81
|
-
<button class="sidebar-hb-btn" id="hbSidebarBtn"
|
|
82
|
-
<button class="sidebar-hb-btn" data-action="openTemplates"
|
|
83
|
-
<button class="sidebar-hb-btn" id="langToggle" title="한국어 ⇄ English"
|
|
82
|
+
<button class="sidebar-hb-btn" id="hbSidebarBtn"><span data-icon="heartPulse"></span> Heartbeat (0)</button>
|
|
83
|
+
<button class="sidebar-hb-btn" data-action="openTemplates"><span data-icon="plan"></span> 프롬프트 템플릿</button>
|
|
84
|
+
<button class="sidebar-hb-btn" id="langToggle" title="한국어 ⇄ English"><span data-icon="web"></span> 한국어</button>
|
|
84
85
|
</div>
|
|
85
86
|
</nav>
|
|
86
87
|
|
|
87
88
|
<!-- Chat Area -->
|
|
88
89
|
<div class="chat-area">
|
|
89
|
-
<div class="drag-overlay" id="dragOverlay" data-i18n="drag.drop"
|
|
90
|
+
<div class="drag-overlay" id="dragOverlay" data-i18n="drag.drop"><span data-icon="paperclip"></span> 파일을 여기에 드랍하세요</div>
|
|
90
91
|
<div class="chat-header">
|
|
91
92
|
<span>CLI-JAW ● <span id="headerCli">claude</span></span>
|
|
92
93
|
<button class="theme-switch" id="toggleTheme" title="Toggle Theme" aria-label="Toggle dark/light mode">
|
|
@@ -122,7 +123,7 @@
|
|
|
122
123
|
</div>
|
|
123
124
|
<div class="file-preview" id="filePreview">
|
|
124
125
|
<div class="file-preview-header">
|
|
125
|
-
<span class="file-preview-title"
|
|
126
|
+
<span class="file-preview-title"><span data-icon="paperclip"></span> Files</span>
|
|
126
127
|
<button class="file-preview-clear" id="filePreviewClear">✕ Clear all</button>
|
|
127
128
|
</div>
|
|
128
129
|
<div class="file-preview-list" id="filePreviewList"></div>
|
|
@@ -130,15 +131,15 @@
|
|
|
130
131
|
<div class="chat-input-area">
|
|
131
132
|
<div id="cmdDropdown" class="cmd-dropdown" role="listbox" data-i18n-aria="aria.cmdList" aria-label="커맨드 목록"
|
|
132
133
|
style="display:none"></div>
|
|
133
|
-
<button class="btn-attach" data-i18n-title="btn.attach" title="파일 첨부"
|
|
134
|
+
<button class="btn-attach" data-i18n-title="btn.attach" title="파일 첨부"><span data-icon="paperclip"></span></button>
|
|
134
135
|
<input type="file" id="fileInput" hidden multiple>
|
|
135
|
-
<button class="btn-voice" id="btnVoice" data-i18n-title="voice.start" title="음성 녹음"
|
|
136
|
+
<button class="btn-voice" id="btnVoice" data-i18n-title="voice.start" title="음성 녹음"><span data-icon="mic"></span></button>
|
|
136
137
|
<span class="voice-timer" id="voiceTimer" style="display:none">00:00</span>
|
|
137
138
|
<button class="btn-voice-cancel" id="btnVoiceCancel" style="display:none" title="취소">✕</button>
|
|
138
139
|
<textarea class="chat-input" id="chatInput" rows="1" data-i18n-placeholder="input.placeholder"
|
|
139
140
|
placeholder="메시지 입력..." aria-label="Chat message input" aria-haspopup="listbox" aria-expanded="false"
|
|
140
141
|
aria-controls="cmdDropdown" aria-autocomplete="list" aria-activedescendant=""></textarea>
|
|
141
|
-
<button class="btn-send" id="btnSend" aria-label="Send message"
|
|
142
|
+
<button class="btn-send" id="btnSend" aria-label="Send message"><span data-icon="send"></span></button>
|
|
142
143
|
</div>
|
|
143
144
|
</div>
|
|
144
145
|
|
|
@@ -184,7 +185,7 @@
|
|
|
184
185
|
<div>
|
|
185
186
|
<label data-i18n="label.permissions">권한</label>
|
|
186
187
|
<div class="perm-toggle">
|
|
187
|
-
<span class="perm-btn active perm-auto"
|
|
188
|
+
<span class="perm-btn active perm-auto" ><span data-icon="exec"></span> Auto</span>
|
|
188
189
|
</div>
|
|
189
190
|
</div>
|
|
190
191
|
|
|
@@ -209,16 +210,16 @@
|
|
|
209
210
|
<div id="tabSkills" class="tab-content" role="tabpanel" aria-labelledby="tabBtnSkills">
|
|
210
211
|
<div class="flex gap-2 flex-wrap">
|
|
211
212
|
<button class="skill-filter active" data-filter="all" data-i18n="skill.filter.all">전체</button>
|
|
212
|
-
<button class="skill-filter" data-filter="installed" data-i18n="skill.filter.installed"
|
|
213
|
-
<button class="skill-filter" data-filter="productivity" data-i18n="skill.filter.productivity"
|
|
213
|
+
<button class="skill-filter" data-filter="installed" data-i18n="skill.filter.installed"><span data-icon="compacting"></span> 설치됨</button>
|
|
214
|
+
<button class="skill-filter" data-filter="productivity" data-i18n="skill.filter.productivity"><span data-icon="plan"></span>
|
|
214
215
|
생산성</button>
|
|
215
|
-
<button class="skill-filter" data-filter="communication" data-i18n="skill.filter.communication"
|
|
216
|
+
<button class="skill-filter" data-filter="communication" data-i18n="skill.filter.communication"><span data-icon="link"></span>
|
|
216
217
|
커뮤</button>
|
|
217
|
-
<button class="skill-filter" data-filter="devtools" data-i18n="skill.filter.devtools"
|
|
218
|
-
<button class="skill-filter" data-filter="ai-media" data-i18n="skill.filter.ai"
|
|
219
|
-
<button class="skill-filter" data-filter="utility" data-i18n="skill.filter.utility"
|
|
220
|
-
<button class="skill-filter" data-filter="smarthome" data-i18n="skill.filter.smarthome"
|
|
221
|
-
<button class="skill-filter" data-filter="other" data-i18n="skill.filter.other"
|
|
218
|
+
<button class="skill-filter" data-filter="devtools" data-i18n="skill.filter.devtools"><span data-icon="tool"></span> 개발</button>
|
|
219
|
+
<button class="skill-filter" data-filter="ai-media" data-i18n="skill.filter.ai"><span data-icon="robot"></span> AI</button>
|
|
220
|
+
<button class="skill-filter" data-filter="utility" data-i18n="skill.filter.utility"><span data-icon="web"></span> 유틸</button>
|
|
221
|
+
<button class="skill-filter" data-filter="smarthome" data-i18n="skill.filter.smarthome"><span data-icon="house"></span> 홈</button>
|
|
222
|
+
<button class="skill-filter" data-filter="other" data-i18n="skill.filter.other"><span data-icon="folder"></span> 기타</button>
|
|
222
223
|
</div>
|
|
223
224
|
<div class="text-xs text-dim" id="skillsCount" data-i18n="loading">로딩 중...</div>
|
|
224
225
|
<div id="skillsList"></div>
|
|
@@ -227,11 +228,11 @@
|
|
|
227
228
|
<!-- Settings Tab -->
|
|
228
229
|
<div id="tabSettings" class="tab-content" role="tabpanel" aria-labelledby="tabBtnSettings">
|
|
229
230
|
<button class="btn-clear btn-action-block" data-action="openPrompt"
|
|
230
|
-
data-i18n="btn.editPrompt"
|
|
231
|
+
data-i18n="btn.editPrompt"><span data-icon="pencil"></span>
|
|
231
232
|
시스템 프롬프트 편집</button>
|
|
232
233
|
<!-- Active Channel Toggle -->
|
|
233
234
|
<div class="settings-group">
|
|
234
|
-
<h4
|
|
235
|
+
<h4><span data-icon="radio"></span> Active Channel</h4>
|
|
235
236
|
<div class="settings-row">
|
|
236
237
|
<label>Runtime</label>
|
|
237
238
|
<div>
|
|
@@ -243,7 +244,7 @@
|
|
|
243
244
|
|
|
244
245
|
<!-- Telegram Bot -->
|
|
245
246
|
<div id="channelTelegramSettings" class="settings-group">
|
|
246
|
-
<h4
|
|
247
|
+
<h4><span data-provider="telegram"></span> Telegram</h4>
|
|
247
248
|
<div class="settings-row">
|
|
248
249
|
<label data-i18n="label.enabled">활성화</label>
|
|
249
250
|
<div>
|
|
@@ -271,7 +272,7 @@
|
|
|
271
272
|
|
|
272
273
|
<!-- Discord Bot -->
|
|
273
274
|
<div id="channelDiscordSettings" class="settings-group" style="display:none">
|
|
274
|
-
<h4
|
|
275
|
+
<h4><span data-provider="discord"></span> Discord</h4>
|
|
275
276
|
<div class="settings-row">
|
|
276
277
|
<label data-i18n="label.enabled">활성화</label>
|
|
277
278
|
<div>
|
|
@@ -291,6 +292,13 @@
|
|
|
291
292
|
<label>Channel IDs</label>
|
|
292
293
|
<input type="text" id="dcChannelIds" placeholder="콤마 구분 (비워두면 전체 허용)" class="input-sm">
|
|
293
294
|
</div>
|
|
295
|
+
<div class="settings-row sub-row">
|
|
296
|
+
<label data-i18n="label.mentionOnly">Mention Only</label>
|
|
297
|
+
<div>
|
|
298
|
+
<button id="dcMentionOff" class="perm-btn active" data-i18n="btn.off">끔</button>
|
|
299
|
+
<button id="dcMentionOn" class="perm-btn" data-i18n="btn.on">켬</button>
|
|
300
|
+
</div>
|
|
301
|
+
</div>
|
|
294
302
|
<div class="settings-row sub-row">
|
|
295
303
|
<label data-i18n="label.forwardAll">자동 전송</label>
|
|
296
304
|
<div>
|
|
@@ -309,7 +317,7 @@
|
|
|
309
317
|
|
|
310
318
|
<!-- Per-CLI Models -->
|
|
311
319
|
<div class="settings-group">
|
|
312
|
-
<h4
|
|
320
|
+
<h4><span data-provider="claude"></span> Claude</h4>
|
|
313
321
|
<div class="settings-row">
|
|
314
322
|
<label>Model</label>
|
|
315
323
|
<select id="modelClaude"></select>
|
|
@@ -325,7 +333,7 @@
|
|
|
325
333
|
</select>
|
|
326
334
|
</div>
|
|
327
335
|
<div class="settings-row sub-row">
|
|
328
|
-
<label
|
|
336
|
+
<label><span data-icon="brain"></span> 1M Context</label>
|
|
329
337
|
<div>
|
|
330
338
|
<button id="claude1mOff" class="perm-btn active">Off</button>
|
|
331
339
|
<button id="claude1mOn" class="perm-btn">On</button>
|
|
@@ -334,7 +342,7 @@
|
|
|
334
342
|
</div>
|
|
335
343
|
|
|
336
344
|
<div class="settings-group">
|
|
337
|
-
<h4
|
|
345
|
+
<h4><span data-provider="codex"></span> Codex</h4>
|
|
338
346
|
<div class="settings-row">
|
|
339
347
|
<label>Model</label>
|
|
340
348
|
<select id="modelCodex"></select>
|
|
@@ -351,14 +359,14 @@
|
|
|
351
359
|
</select>
|
|
352
360
|
</div>
|
|
353
361
|
<div class="settings-row sub-row">
|
|
354
|
-
<label
|
|
362
|
+
<label><span data-icon="exec"></span> Fast Mode</label>
|
|
355
363
|
<div>
|
|
356
364
|
<button id="codexFastOff" class="perm-btn active" data-i18n="btn.off">끔</button>
|
|
357
365
|
<button id="codexFastOn" class="perm-btn" data-i18n="btn.on">켬</button>
|
|
358
366
|
</div>
|
|
359
367
|
</div>
|
|
360
368
|
<div class="settings-row sub-row">
|
|
361
|
-
<label
|
|
369
|
+
<label><span data-icon="brain"></span> 1M Context</label>
|
|
362
370
|
<div>
|
|
363
371
|
<button id="codexCtxOff" class="perm-btn active">Off</button>
|
|
364
372
|
<button id="codexCtxOn" class="perm-btn">On</button>
|
|
@@ -379,7 +387,7 @@
|
|
|
379
387
|
</div>
|
|
380
388
|
|
|
381
389
|
<div class="settings-group">
|
|
382
|
-
<h4
|
|
390
|
+
<h4><span data-provider="gemini"></span> Gemini</h4>
|
|
383
391
|
<div class="settings-row">
|
|
384
392
|
<label>Model</label>
|
|
385
393
|
<select id="modelGemini"></select>
|
|
@@ -389,7 +397,7 @@
|
|
|
389
397
|
</div>
|
|
390
398
|
|
|
391
399
|
<div class="settings-group">
|
|
392
|
-
<h4
|
|
400
|
+
<h4><span data-provider="opencode"></span> OpenCode</h4>
|
|
393
401
|
<div class="settings-row">
|
|
394
402
|
<label>Model</label>
|
|
395
403
|
<select id="modelOpencode"></select>
|
|
@@ -409,7 +417,7 @@
|
|
|
409
417
|
</div>
|
|
410
418
|
|
|
411
419
|
<div class="settings-group">
|
|
412
|
-
<h4
|
|
420
|
+
<h4><span data-provider="copilot"></span> Copilot</h4>
|
|
413
421
|
<div class="settings-row">
|
|
414
422
|
<label>Model</label>
|
|
415
423
|
<select id="modelCopilot"></select>
|
|
@@ -426,7 +434,7 @@
|
|
|
426
434
|
|
|
427
435
|
<!-- Fallback Order -->
|
|
428
436
|
<div class="settings-group">
|
|
429
|
-
<h4
|
|
437
|
+
<h4><span data-icon="exec"></span> Fallback</h4>
|
|
430
438
|
<p class="text-xs text-dim fallback-desc" data-i18n="fallback.desc">CLI 실패 시 자동
|
|
431
439
|
재시도 순서</p>
|
|
432
440
|
<div id="fallbackOrderList"></div>
|
|
@@ -434,20 +442,20 @@
|
|
|
434
442
|
|
|
435
443
|
<!-- MCP Servers -->
|
|
436
444
|
<div class="settings-group">
|
|
437
|
-
<h4
|
|
445
|
+
<h4><span data-icon="link"></span> MCP Servers</h4>
|
|
438
446
|
<div id="mcpServerList" class="text-status py-1">
|
|
439
447
|
Loading...
|
|
440
448
|
</div>
|
|
441
449
|
<button class="btn-clear btn-action-block"
|
|
442
|
-
data-action="syncMcp"
|
|
450
|
+
data-action="syncMcp"><span data-icon="refresh"></span> Sync to all CLIs</button>
|
|
443
451
|
<button class="btn-clear btn-action-block"
|
|
444
|
-
data-action="installMcp"
|
|
452
|
+
data-action="installMcp"><span data-icon="compacting"></span> Install Globally (npm i -g)</button>
|
|
445
453
|
<div id="mcpSyncResult" class="text-xs text-dim py-1" style="display:none"></div>
|
|
446
454
|
</div>
|
|
447
455
|
|
|
448
456
|
<!-- STT Settings -->
|
|
449
457
|
<div class="settings-group">
|
|
450
|
-
<h4 data-i18n="stt.title"
|
|
458
|
+
<h4 data-i18n="stt.title"><span data-icon="mic"></span> 음성 인식 (STT)</h4>
|
|
451
459
|
<div class="settings-row">
|
|
452
460
|
<label data-i18n="stt.engine">엔진</label>
|
|
453
461
|
<select id="sttEngine">
|
|
@@ -469,7 +477,7 @@
|
|
|
469
477
|
<option value="gemini-2.5-flash-lite">gemini-2.5-flash-lite (fast)</option>
|
|
470
478
|
<option value="gemini-2.5-flash">gemini-2.5-flash (balanced)</option>
|
|
471
479
|
<option value="gemini-2.5-pro">gemini-2.5-pro (accurate)</option>
|
|
472
|
-
<option value="__custom__"
|
|
480
|
+
<option value="__custom__">직접 입력...</option>
|
|
473
481
|
</select>
|
|
474
482
|
<input type="text" id="sttGeminiModelCustom" placeholder="모델명 입력"
|
|
475
483
|
class="mt-1" style="display:none" />
|
|
@@ -498,7 +506,7 @@
|
|
|
498
506
|
<input type="text" id="sttWhisperModel" placeholder="mlx-community/..." class="input-sm">
|
|
499
507
|
</div>
|
|
500
508
|
<small class="text-shortcut-hint" data-i18n="stt.shortcutHint">
|
|
501
|
-
|
|
509
|
+
Ctrl+Shift+Space (⌘+Shift+Space on Mac)</small>
|
|
502
510
|
</div>
|
|
503
511
|
|
|
504
512
|
|
|
@@ -526,7 +534,7 @@
|
|
|
526
534
|
<div class="modal-overlay" id="heartbeatModal" role="dialog" aria-modal="true" aria-label="Heartbeat jobs">
|
|
527
535
|
<div class="modal-box modal-scrollable" >
|
|
528
536
|
<div class="modal-header">
|
|
529
|
-
<span data-i18n="modal.heartbeatTitle"
|
|
537
|
+
<span data-icon="heartPulse"></span> <span data-i18n="modal.heartbeatTitle">하트비트 작업</span>
|
|
530
538
|
<button data-action="closeHeartbeat"
|
|
531
539
|
class="btn-modal-close" aria-label="Close">✕</button>
|
|
532
540
|
</div>
|
|
@@ -541,19 +549,19 @@
|
|
|
541
549
|
<div class="modal-overlay" id="memoryModal" role="dialog" aria-modal="true" aria-label="Memory files">
|
|
542
550
|
<div class="modal-box modal-scrollable" >
|
|
543
551
|
<div class="modal-header">
|
|
544
|
-
<span data-i18n="modal.memoryTitle"
|
|
552
|
+
<span data-i18n="modal.memoryTitle"><span data-icon="brain"></span> 메모리</span>
|
|
545
553
|
<button data-action="closeMemory"
|
|
546
554
|
class="btn-modal-close" aria-label="Close">✕</button>
|
|
547
555
|
</div>
|
|
548
556
|
<div class="tab-strip" role="tablist">
|
|
549
557
|
<button class="mem-tab active mem-tab-btn" id="memTabBtnSettings" role="tab" aria-selected="true" aria-controls="memTabSettings"
|
|
550
|
-
|
|
558
|
+
><span data-icon="settings"></span>
|
|
551
559
|
Settings</button>
|
|
552
560
|
<button class="mem-tab mem-tab-btn" id="memTabBtnAdvOps" role="tab" aria-selected="false" aria-controls="memTabAdvOps"
|
|
553
|
-
|
|
561
|
+
><span data-icon="chart"></span>
|
|
554
562
|
Status</button>
|
|
555
563
|
<button class="mem-tab mem-tab-btn" id="memTabBtnFiles" role="tab" aria-selected="false" aria-controls="memTabFiles"
|
|
556
|
-
|
|
564
|
+
><span data-icon="folder"></span>
|
|
557
565
|
Files</button>
|
|
558
566
|
</div>
|
|
559
567
|
<div id="advStatusBanner" class="adv-status-banner" style="display:none"></div>
|
|
@@ -612,7 +620,7 @@
|
|
|
612
620
|
</div>
|
|
613
621
|
<div
|
|
614
622
|
class="info-box">
|
|
615
|
-
|
|
623
|
+
<span data-icon="lightbulb"></span> Counter: <span id="memCounter">0</span> / <span id="memThreshold">10</span> responses until next
|
|
616
624
|
flush
|
|
617
625
|
</div>
|
|
618
626
|
</div>
|
|
@@ -640,10 +648,10 @@
|
|
|
640
648
|
</div>
|
|
641
649
|
</div>
|
|
642
650
|
<div class="flex gap-2 flex-wrap mt-3">
|
|
643
|
-
<button class="btn-clear" id="advBootstrapBtn"
|
|
644
|
-
<button class="btn-clear" id="advReindexBtn"
|
|
645
|
-
<button class="btn-clear" id="advReimportBtn"
|
|
646
|
-
<button class="btn-clear" id="advOpenCorruptedBtn"
|
|
651
|
+
<button class="btn-clear" id="advBootstrapBtn"><span data-icon="settings"></span> Bootstrap</button>
|
|
652
|
+
<button class="btn-clear" id="advReindexBtn"><span data-icon="refresh"></span> Reindex</button>
|
|
653
|
+
<button class="btn-clear" id="advReimportBtn"><span data-icon="save"></span> Re-import Legacy</button>
|
|
654
|
+
<button class="btn-clear" id="advOpenCorruptedBtn"><span data-icon="folder"></span> Open Corrupted Folder</button>
|
|
647
655
|
</div>
|
|
648
656
|
</div>
|
|
649
657
|
<div id="memTabFiles" class="p-3" style="display:none" role="tabpanel" aria-labelledby="memTabBtnFiles">
|
|
@@ -662,14 +670,14 @@
|
|
|
662
670
|
<!-- Mobile Navigation -->
|
|
663
671
|
<div class="mobile-nav">
|
|
664
672
|
<button id="mobileMenuLeft" aria-label="Open menu">☰ Menu</button>
|
|
665
|
-
<button id="mobileMenuRight" aria-label="Open settings"
|
|
673
|
+
<button id="mobileMenuRight" aria-label="Open settings"><span data-icon="settings"></span> Settings</button>
|
|
666
674
|
</div>
|
|
667
675
|
|
|
668
676
|
<!-- Template Editor Modal (Node Map + Editor 2-view) -->
|
|
669
677
|
<div class="modal-overlay" id="templateModal" role="dialog" aria-modal="true" aria-label="Prompt templates">
|
|
670
678
|
<div class="modal-box modal-template" >
|
|
671
679
|
<div class="modal-header">
|
|
672
|
-
<span id="templateModalTitle"
|
|
680
|
+
<span id="templateModalTitle"><span data-icon="plan"></span> 프롬프트 구조</span>
|
|
673
681
|
<button data-action="closeTemplate"
|
|
674
682
|
class="btn-modal-close" aria-label="Close">✕</button>
|
|
675
683
|
</div>
|
|
@@ -677,7 +685,7 @@
|
|
|
677
685
|
<div id="templateTreeView" class="template-tree-area">
|
|
678
686
|
<div id="templateTree"></div>
|
|
679
687
|
<div class="template-hint">
|
|
680
|
-
|
|
688
|
+
<span data-icon="lock"></span> 클릭하면 프롬프트 내용 확인 · <span data-icon="warning"></span> 개발자 모드에서 편집
|
|
681
689
|
</div>
|
|
682
690
|
</div>
|
|
683
691
|
<!-- View 2: Editor (hidden by default) -->
|
|
@@ -689,14 +697,14 @@
|
|
|
689
697
|
뒤로</button>
|
|
690
698
|
<span id="templateEditorLabel" class="flex-1 text-sm text-dim"></span>
|
|
691
699
|
<button id="templateDevToggle"
|
|
692
|
-
class="btn-dev-toggle"
|
|
700
|
+
class="btn-dev-toggle"><span data-icon="tool"></span>
|
|
693
701
|
개발자 모드</button>
|
|
694
702
|
</div>
|
|
695
703
|
<textarea class="modal-textarea template-textarea" id="templateEditor" readonly
|
|
696
704
|
></textarea>
|
|
697
705
|
<div class="modal-footer">
|
|
698
706
|
<span id="templateVars" class="text-xs text-dim mr-auto"></span>
|
|
699
|
-
<button class="btn-save" data-action="saveTemplate" style="display:none" id="templateSaveBtn"
|
|
707
|
+
<button class="btn-save" data-action="saveTemplate" style="display:none" id="templateSaveBtn"><span data-icon="save"></span>
|
|
700
708
|
저장</button>
|
|
701
709
|
</div>
|
|
702
710
|
</div>
|