@youweichen/pi-web-ui 0.45.2 → 0.46.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/server/agent-service.js +43 -2
- package/dist/server/plugin-updater.js +20 -1
- package/package.json +1 -1
- package/web/dist/assets/{TerminalPanel-DTPa-GPY.js → TerminalPanel-C3kNAJrw.js} +1 -1
- package/web/dist/assets/{abnfDiagram-VCTEODGH-3OBIjZzo.js → abnfDiagram-VCTEODGH-Dkf6Vjk6.js} +1 -1
- package/web/dist/assets/{arc-QnNbtI3G.js → arc-DGaqRXHk.js} +1 -1
- package/web/dist/assets/{architectureDiagram-5GKGNRK7-BRC6l1C0.js → architectureDiagram-5GKGNRK7-CDibpnZt.js} +1 -1
- package/web/dist/assets/{blockDiagram-I7D4REHJ-QtokGhle.js → blockDiagram-I7D4REHJ-iPzBDys9.js} +1 -1
- package/web/dist/assets/{c4Diagram-7LVT6UL2-DrXgUAH_.js → c4Diagram-7LVT6UL2-C7WHEzTt.js} +1 -1
- package/web/dist/assets/channel-DZHqEbOF.js +1 -0
- package/web/dist/assets/{chunk-2Q5K7J3B-C8iJ92Ek.js → chunk-2Q5K7J3B-BxP-WtZQ.js} +1 -1
- package/web/dist/assets/{chunk-5VM5RSS4-C08WMGbd.js → chunk-5VM5RSS4-DsTt0Asa.js} +1 -1
- package/web/dist/assets/{chunk-F27PBJKO-BTyqWEjg.js → chunk-F27PBJKO-DrTxwu2p.js} +1 -1
- package/web/dist/assets/{chunk-IMKFNOWR-BZz8_wBp.js → chunk-IMKFNOWR-Cx4FHpLO.js} +1 -1
- package/web/dist/assets/{chunk-JWPE2WC7-Bp8exp_9.js → chunk-JWPE2WC7-CyENxC_t.js} +1 -1
- package/web/dist/assets/{chunk-POPQ4Y6H-FDNtBgdZ.js → chunk-POPQ4Y6H-D3RxBrgG.js} +1 -1
- package/web/dist/assets/{chunk-SVP7TREG-B4gluy_M.js → chunk-SVP7TREG-WDQg7LbA.js} +1 -1
- package/web/dist/assets/{chunk-TICWLB2K-DpVfoRrb.js → chunk-TICWLB2K-DyeJXMay.js} +1 -1
- package/web/dist/assets/{chunk-XXDRQBXY-DwTeYIe6.js → chunk-XXDRQBXY-BOMbEfh4.js} +1 -1
- package/web/dist/assets/classDiagram-ZZMXUADV-BeicvRPx.js +1 -0
- package/web/dist/assets/classDiagram-v2-VYDZK3BY-BeicvRPx.js +1 -0
- package/web/dist/assets/{cose-bilkent-JH36ORCC-D9QpWzlD.js → cose-bilkent-JH36ORCC-C_qgmlbu.js} +1 -1
- package/web/dist/assets/{cynefin-OW5HDTMX-jCEkLFdf.js → cynefin-OW5HDTMX-Dlp7w0pR.js} +1 -1
- package/web/dist/assets/{cynefinDiagram-5FMLGOSQ-dVBRtFzn.js → cynefinDiagram-5FMLGOSQ-DdpttLWQ.js} +1 -1
- package/web/dist/assets/{dagre-GXQ25YYZ-Ck-JYQBh.js → dagre-GXQ25YYZ-YcPnyGBA.js} +1 -1
- package/web/dist/assets/{diagram-S7CK7UJ4-DDG_bD3X.js → diagram-S7CK7UJ4-DjrmB_V4.js} +1 -1
- package/web/dist/assets/{diagram-UQ7AKVKN-doLowaGS.js → diagram-UQ7AKVKN-02dgB4Gk.js} +1 -1
- package/web/dist/assets/{diagram-VSXAHHWV-Bj5leyj8.js → diagram-VSXAHHWV-KV4AYZKh.js} +1 -1
- package/web/dist/assets/{diagram-VX7I27RA-CjXqoFDD.js → diagram-VX7I27RA-D9BdQRcy.js} +1 -1
- package/web/dist/assets/{diagram-Z3DM3KII-D__qC8Iy.js → diagram-Z3DM3KII-B9WvYs1o.js} +1 -1
- package/web/dist/assets/{ebnfDiagram-PWID7BFC-tBnh13AS.js → ebnfDiagram-PWID7BFC-CFl5CJVC.js} +1 -1
- package/web/dist/assets/{erDiagram-RLTQ6QDP-Cbod1iTi.js → erDiagram-RLTQ6QDP-D2KMUQ1j.js} +1 -1
- package/web/dist/assets/{flowDiagram-HODETNUW-Bq-zlqMG.js → flowDiagram-HODETNUW-B-8YZRoB.js} +1 -1
- package/web/dist/assets/{ganttDiagram-EL5Y4UJY-DFJTndUE.js → ganttDiagram-EL5Y4UJY-DMqqqP-Y.js} +1 -1
- package/web/dist/assets/{gitGraphDiagram-WWUBYQGX-DcEi9nDs.js → gitGraphDiagram-WWUBYQGX-DEW0i_sZ.js} +1 -1
- package/web/dist/assets/index-C6v7dw-m.js +26 -0
- package/web/dist/assets/index-CFqCTH4C.css +10 -0
- package/web/dist/assets/{infoDiagram-27XIBGKW-BZNZJWoJ.js → infoDiagram-27XIBGKW-CXXuNoKy.js} +1 -1
- package/web/dist/assets/{ishikawaDiagram-5VMMS53U-DqnNYeKy.js → ishikawaDiagram-5VMMS53U-DRoKtY9r.js} +1 -1
- package/web/dist/assets/{journeyDiagram-3NMN7TZE-DERTsG8q.js → journeyDiagram-3NMN7TZE-D5t_RX6A.js} +1 -1
- package/web/dist/assets/{kanban-definition-UXKFOSKX-KImwxyl_.js → kanban-definition-UXKFOSKX-k9I2n3q0.js} +1 -1
- package/web/dist/assets/{layout-BH2O4YE8.js → layout-CdenxSWG.js} +1 -1
- package/web/dist/assets/{linear-CmJWcbZf.js → linear-jRHEP8b3.js} +1 -1
- package/web/dist/assets/{mermaid.core-BqE9WdEq.js → mermaid.core-D8R7av1J.js} +5 -5
- package/web/dist/assets/{mindmap-definition-YA3MSWOX-BolJqx9C.js → mindmap-definition-YA3MSWOX-C1nRjN2l.js} +1 -1
- package/web/dist/assets/{pegDiagram-XKGWAZYB-BwDKfPEj.js → pegDiagram-XKGWAZYB-CfSNzf6e.js} +1 -1
- package/web/dist/assets/{pieDiagram-E7YTZNPT-D9giHNCe.js → pieDiagram-E7YTZNPT-D6GTzVYt.js} +1 -1
- package/web/dist/assets/{quadrantDiagram-AXDQQJYC-BtYHmNEC.js → quadrantDiagram-AXDQQJYC-CTtm5bnt.js} +1 -1
- package/web/dist/assets/{railroadDiagram-O6MQD6OU-FEOhYVmW.js → railroadDiagram-O6MQD6OU-nirkzVNV.js} +1 -1
- package/web/dist/assets/{requirementDiagram-BXWQKSXE-zqJeWuXp.js → requirementDiagram-BXWQKSXE-JTuIVEJa.js} +1 -1
- package/web/dist/assets/{sankeyDiagram-P5KCCOFB-BbUWBYdO.js → sankeyDiagram-P5KCCOFB-BDPG9DA8.js} +1 -1
- package/web/dist/assets/{sequenceDiagram-WJ2MYXX4-CkLzAx94.js → sequenceDiagram-WJ2MYXX4-BaCeoEaZ.js} +1 -1
- package/web/dist/assets/{sizeCapture-INFHLROL-Cu_Hov-C.js → sizeCapture-INFHLROL-DW8ydaxg.js} +1 -1
- package/web/dist/assets/{stateDiagram-D77RDMKH-B3r-CwIC.js → stateDiagram-D77RDMKH-D4j3O3k3.js} +1 -1
- package/web/dist/assets/stateDiagram-v2-MP3YSRHH-C6T7Mj3_.js +1 -0
- package/web/dist/assets/{swimlanes-42K2YHIH-YDxAaBu_.js → swimlanes-42K2YHIH-B1XeYn6H.js} +1 -1
- package/web/dist/assets/swimlanesDiagram-VR7AAH4N-DGAy5ch1.js +8 -0
- package/web/dist/assets/{timeline-definition-24CTP7MA-B2Xo7om1.js → timeline-definition-24CTP7MA-F_4tuv7C.js} +1 -1
- package/web/dist/assets/{vennDiagram-4TSXK5OY-Dek7fJMD.js → vennDiagram-4TSXK5OY-C5hjQH9r.js} +1 -1
- package/web/dist/assets/{wardleyDiagram-VM6X3IG4-CmXnKCpv.js → wardleyDiagram-VM6X3IG4-BsVhPwEg.js} +1 -1
- package/web/dist/assets/{xychartDiagram-S5SC5T6Z-CJ9917hr.js → xychartDiagram-S5SC5T6Z-Cmgrgde9.js} +1 -1
- package/web/dist/index.html +2 -2
- package/web/dist/assets/channel-j9anJgKu.js +0 -1
- package/web/dist/assets/classDiagram-ZZMXUADV-BKdhhCr1.js +0 -1
- package/web/dist/assets/classDiagram-v2-VYDZK3BY-BKdhhCr1.js +0 -1
- package/web/dist/assets/index-BeCUh6J7.js +0 -23
- package/web/dist/assets/index-BjqEFNTc.css +0 -10
- package/web/dist/assets/stateDiagram-v2-MP3YSRHH-Bo79NQZb.js +0 -1
- package/web/dist/assets/swimlanesDiagram-VR7AAH4N--G-JueY8.js +0 -8
|
@@ -2171,6 +2171,13 @@ export class ClientSession {
|
|
|
2171
2171
|
cwd: conv.cwd,
|
|
2172
2172
|
messageCount,
|
|
2173
2173
|
isStreaming,
|
|
2174
|
+
// resolve() so it is byte-comparable with the paths
|
|
2175
|
+
// SessionManager.list() reports to the client — the two are
|
|
2176
|
+
// compared as plain strings there, and an unnormalized form
|
|
2177
|
+
// here would make the dedup silently miss.
|
|
2178
|
+
sessionFile: conv.session.sessionFile
|
|
2179
|
+
? resolve(conv.session.sessionFile)
|
|
2180
|
+
: undefined,
|
|
2174
2181
|
});
|
|
2175
2182
|
}
|
|
2176
2183
|
this.emit({
|
|
@@ -2199,8 +2206,14 @@ export class ClientSession {
|
|
|
2199
2206
|
const infos = await SessionManager.list(this.cwd);
|
|
2200
2207
|
const sessions = new Map();
|
|
2201
2208
|
for (const s of infos) {
|
|
2202
|
-
|
|
2203
|
-
|
|
2209
|
+
// Normalized to the same form as ConversationSummary.sessionFile:
|
|
2210
|
+
// the client compares the two as plain strings to hide a running
|
|
2211
|
+
// conversation from this list. resolve() only makes absolute and
|
|
2212
|
+
// collapses ./.. — it does not follow symlinks, so identity is
|
|
2213
|
+
// unchanged for switch/delete/rename, which resolve() anyway.
|
|
2214
|
+
const path = resolve(s.path);
|
|
2215
|
+
sessions.set(path, {
|
|
2216
|
+
path,
|
|
2204
2217
|
name: s.name,
|
|
2205
2218
|
firstMessage: s.firstMessage,
|
|
2206
2219
|
messageCount: s.messageCount,
|
|
@@ -2299,6 +2312,7 @@ export class ClientSession {
|
|
|
2299
2312
|
parent: parent === target ? null : parent,
|
|
2300
2313
|
dirs,
|
|
2301
2314
|
truncated: dirs.length >= MAX,
|
|
2315
|
+
drives: await listWindowsDrives(),
|
|
2302
2316
|
});
|
|
2303
2317
|
}
|
|
2304
2318
|
catch (err) {
|
|
@@ -2869,6 +2883,33 @@ export class ClientSession {
|
|
|
2869
2883
|
}
|
|
2870
2884
|
}
|
|
2871
2885
|
}
|
|
2886
|
+
/**
|
|
2887
|
+
* Windows drive roots that currently exist ("C:\\", "D:\\", …); empty on
|
|
2888
|
+
* POSIX (where "/" already reaches everything).
|
|
2889
|
+
*
|
|
2890
|
+
* Needed because Windows has no unified filesystem root: dirname("C:\\") is
|
|
2891
|
+
* "C:\\", so the picker's walk-up hits a ceiling on the boot drive and can
|
|
2892
|
+
* never reach D:. Probing A–Z with access() avoids shelling out to wmic /
|
|
2893
|
+
* PowerShell (both slow to spawn, and wmic is gone on recent Windows).
|
|
2894
|
+
* Missing/empty drives simply reject, so they drop out.
|
|
2895
|
+
*/
|
|
2896
|
+
async function listWindowsDrives() {
|
|
2897
|
+
if (process.platform !== "win32")
|
|
2898
|
+
return undefined;
|
|
2899
|
+
const fs = await import("node:fs/promises");
|
|
2900
|
+
const letters = Array.from({ length: 26 }, (_, i) => String.fromCharCode(65 + i));
|
|
2901
|
+
const found = await Promise.all(letters.map(async (letter) => {
|
|
2902
|
+
const root = `${letter}:\\`;
|
|
2903
|
+
try {
|
|
2904
|
+
await fs.access(root);
|
|
2905
|
+
return root;
|
|
2906
|
+
}
|
|
2907
|
+
catch {
|
|
2908
|
+
return null;
|
|
2909
|
+
}
|
|
2910
|
+
}));
|
|
2911
|
+
return found.filter((d) => d !== null);
|
|
2912
|
+
}
|
|
2872
2913
|
export class AgentService {
|
|
2873
2914
|
cwd;
|
|
2874
2915
|
/** index.ts 注入:SDK 工具执行事件的插件转发钩子,attach 时拷贝到每个新会话。 */
|
|
@@ -215,8 +215,27 @@ export async function checkPluginUpdates(dataDir, exec = execGit) {
|
|
|
215
215
|
}
|
|
216
216
|
return out;
|
|
217
217
|
}
|
|
218
|
+
/** Last stamp handed out, so the next one is always strictly greater. */
|
|
219
|
+
let lastStampMs = 0;
|
|
220
|
+
/**
|
|
221
|
+
* Backup directory name: `YYYYMMDD-HHMMSSmmm`.
|
|
222
|
+
*
|
|
223
|
+
* Monotonic on purpose. The name is the backup's only identity — two calls
|
|
224
|
+
* landing in the same millisecond produced the same directory, so the second
|
|
225
|
+
* cpSync() merged into the first instead of creating a new backup, silently
|
|
226
|
+
* losing one and leaving pruneBackups() keeping fewer than `keep`. Taking
|
|
227
|
+
* several backups in a row is fast enough that this is not theoretical: eight
|
|
228
|
+
* consecutive calls routinely share a millisecond.
|
|
229
|
+
*
|
|
230
|
+
* Colliding calls are pushed to the next millisecond rather than given a
|
|
231
|
+
* disambiguating suffix, because listBackups() matches names against a strict
|
|
232
|
+
* `\d{8}-\d{9}$` pattern — a suffixed backup would be invisible to it, and
|
|
233
|
+
* therefore never pruned either.
|
|
234
|
+
*/
|
|
218
235
|
function stamp() {
|
|
219
|
-
const
|
|
236
|
+
const now = Math.max(Date.now(), lastStampMs + 1);
|
|
237
|
+
lastStampMs = now;
|
|
238
|
+
const d = new Date(now);
|
|
220
239
|
const p = (x, n = 2) => String(x).padStart(n, "0");
|
|
221
240
|
return `${d.getFullYear()}${p(d.getMonth() + 1)}${p(d.getDate())}-${p(d.getHours())}${p(d.getMinutes())}${p(d.getSeconds())}${p(d.getMilliseconds(), 3)}`;
|
|
222
241
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@youweichen/pi-web-ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.46.1",
|
|
4
4
|
"description": "Web chat interface for the pi coding agent, powered by the pi SDK (@earendil-works/pi-coding-agent) — one-command run, Docker/systemd/launchd deployable",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as d,j as t}from"./markdown-CUPbftfV.js";import{u as H,F as O,a as R,b as P,c as q,d as L,e as G,f as J,g as V,r as W}from"./index-
|
|
1
|
+
import{a as d,j as t}from"./markdown-CUPbftfV.js";import{u as H,F as O,a as R,b as P,c as q,d as L,e as G,f as J,g as V,r as W}from"./index-C6v7dw-m.js";import{D as X,o as Y}from"./xterm-D1D2FVe3.js";import"./react-ZkKJMDQQ.js";const $="pi-web-ui:theme-change";function A(){const s=getComputedStyle(document.documentElement),n=(f,r)=>s.getPropertyValue(f).trim()||r;return{background:n("--term-bg","#1b1f24"),foreground:n("--term-fg","#e6e8ef"),cursor:n("--term-cursor","#3b49df"),cursorAccent:n("--term-cursor-accent","#1b1f24"),selectionBackground:n("--term-selection","rgba(59, 73, 223, 0.35)"),black:n("--term-black","#2a2f37"),red:n("--term-red","#f87171"),green:n("--term-green","#34d399"),yellow:n("--term-yellow","#fbbf24"),blue:n("--term-blue","#60a5fa"),magenta:n("--term-magenta","#c084fc"),cyan:n("--term-cyan","#22d3ee"),white:n("--term-white","#e6e8ef"),brightBlack:n("--term-bright-black","#6b7284"),brightRed:n("--term-bright-red","#f87171"),brightGreen:n("--term-bright-green","#34d399"),brightYellow:n("--term-bright-yellow","#fbbf24"),brightBlue:n("--term-bright-blue","#60a5fa"),brightMagenta:n("--term-bright-magenta","#c084fc"),brightCyan:n("--term-bright-cyan","#22d3ee"),brightWhite:n("--term-bright-white","#ffffff")}}function Q({conversationId:s,terminalId:n,command:f,cwd:r,active:p,send:o,register:j}){const g=d.useRef(null),y=d.useRef(null),N=f?JSON.stringify(f):"";return d.useEffect(()=>{const h=g.current;if(!h)return;const a=new X({theme:A(),fontFamily:'"SF Mono", "JetBrains Mono", ui-monospace, Menlo, Consolas, monospace',fontSize:13,cursorBlink:!0,scrollback:8e3}),l=new Y;a.loadAddon(l),a.open(h),y.current={term:a,fit:l},p&&a.focus();const x=()=>{a.options.theme=A()};window.addEventListener($,x),a.attachCustomKeyEventHandler(m=>{var F;if(m.type!=="keydown")return!0;const E=(F=m.key)==null?void 0:F.toLowerCase();if((m.ctrlKey||m.metaKey)&&E==="v")return!1;if(m.ctrlKey&&!m.shiftKey&&!m.altKey&&E==="c"&&a.hasSelection()){const k=a.textarea;return k&&(k.value=a.getSelection(),k.select()),!1}return!0});const v=j(s,n,{write:m=>a.write(m),dispose:()=>a.dispose()}),C=()=>{try{l.fit(),o({type:"terminal_resize",terminalId:n,conversationId:s,cols:a.cols,rows:a.rows})}catch{}},b=requestAnimationFrame(()=>{try{l.fit()}catch{}o(f?{type:"run_command",terminalId:n,conversationId:s,command:f,cols:a.cols,rows:a.rows}:{type:"terminal_create",terminalId:n,conversationId:s,cwd:r,cols:a.cols,rows:a.rows})}),T=a.onData(m=>{o({type:"terminal_input",terminalId:n,conversationId:s,data:m})});let w=null;return typeof ResizeObserver<"u"&&(w=new ResizeObserver(()=>{h.offsetWidth>0&&h.offsetHeight>0&&C()}),w.observe(h)),()=>{cancelAnimationFrame(b),T.dispose(),window.removeEventListener($,x),w==null||w.disconnect(),v(),a.dispose(),y.current=null}},[s,n,N,o,j]),d.useEffect(()=>{if(!p)return;const h=requestAnimationFrame(()=>{const a=y.current;if(a){try{a.fit.fit(),o({type:"terminal_resize",terminalId:n,conversationId:s,cols:a.term.cols,rows:a.term.rows})}catch{}a.term.focus()}});return()=>cancelAnimationFrame(h)},[p]),t.jsx("div",{ref:g,className:`term-xterm ${p?"":"hidden"}`})}const K={name:"",command:"",cwd:"${pwd}"};function ne({chat:s,send:n,terminal:f}){const r=H(),[p,o]=d.useState(null),[j,g]=d.useState(!1),[y,N]=d.useState(!1),[h,a]=d.useState(null),[l,x]=d.useState(K),[v,C]=d.useState(null),b=d.useRef(null);d.useEffect(()=>{s.terminals.length===0?o(null):s.terminals.some(e=>e.id===p)||o(s.terminals[s.terminals.length-1].id)},[s.terminals,p]),d.useEffect(()=>()=>{b.current&&clearTimeout(b.current)},[]);const T=e=>{var u;if(!s.ready)return;const i=W(),c=s.activeConversationId||((u=s.state)==null?void 0:u.conversationId)||"";f.create({...e,id:i,conversationId:c,cols:e.cols??80,rows:e.rows??24,running:!0,exitCode:null}),o(i),g(!1)},w=()=>{var e;return T({title:r("terminalTitle",{n:s.terminals.length+1}),cwd:((e=s.state)==null?void 0:e.cwd)??""})},m=e=>{var u;const i=e.name||e.command,c=s.terminals.find(_=>_.title===i);if(c){f.restart(c.id),o(c.id),n({type:"run_command",terminalId:c.id,conversationId:c.conversationId,command:e,cols:80,rows:24});return}T({title:i,cwd:((u=s.state)==null?void 0:u.cwd)??"",command:e})},E=e=>{const i=s.terminals.find(c=>c.id===e);if(i&&n({type:"terminal_kill",terminalId:e,conversationId:i.conversationId}),f.close(e),p===e){const c=s.terminals.filter(u=>u.id!==e);o(c.length>0?c[c.length-1].id:null)}},F=()=>{N(!0),a(null),x(K)},k=e=>{const i=s.commands[e];i&&(N(!1),a(e),x({name:i.name,command:i.command,cwd:i.cwd??""}))},D=()=>{N(!1),a(null)},S=()=>{const e=l.name.trim(),i=l.command.trim();if(!e||!i)return;const c=l.cwd.trim(),u={name:e,command:i,cwd:c||void 0},_=y?[...s.commands,u]:h!==null?s.commands.map((z,B)=>B===h?u:z):s.commands;n({type:"save_commands",commands:_}),D()},M=e=>{if(v===e){const i=s.commands.filter((c,u)=>u!==e);n({type:"save_commands",commands:i}),C(null),b.current&&clearTimeout(b.current)}else C(e),b.current&&clearTimeout(b.current),b.current=setTimeout(()=>C(null),2500)},I=y||h!==null;return t.jsxs("div",{className:"terminal-view",children:[t.jsxs("aside",{className:`term-side term-commands ${j?"open":""}`,children:[t.jsxs("div",{className:"panel-header",children:[t.jsx("span",{className:"panel-title",children:r("commands")}),t.jsxs("div",{className:"panel-header-actions",children:[t.jsx("button",{type:"button",className:"panel-refresh",title:r("rerun"),onClick:()=>n({type:"list_commands"}),children:t.jsx(O,{})}),t.jsx("button",{type:"button",className:"panel-new",title:r("newCommand"),onClick:F,children:t.jsx(R,{})})]})]}),t.jsx("div",{className:"panel-body",children:I?t.jsxs("div",{className:"cmd-form",children:[t.jsx("label",{htmlFor:"cmd-name",children:r("name")}),t.jsx("input",{id:"cmd-name",className:"cmd-input",value:l.name,placeholder:r("exampleName"),autoFocus:!0,onChange:e=>x({...l,name:e.target.value})}),t.jsx("label",{htmlFor:"cmd-command",children:r("command")}),t.jsx("input",{id:"cmd-command",className:"cmd-input",value:l.command,placeholder:r("exampleCommand"),onChange:e=>x({...l,command:e.target.value}),onKeyDown:e=>{e.key==="Enter"&&!e.nativeEvent.isComposing&&S()}}),t.jsxs("label",{htmlFor:"cmd-cwd",children:[r("directory")," ",t.jsx("span",{className:"cmd-hint",children:r("cwdHint")})]}),t.jsx("input",{id:"cmd-cwd",className:"cmd-input",value:l.cwd,placeholder:"${pwd}",onChange:e=>x({...l,cwd:e.target.value}),onKeyDown:e=>{e.key==="Enter"&&!e.nativeEvent.isComposing&&S()}}),t.jsxs("div",{className:"cmd-form-actions",children:[t.jsx("button",{type:"button",className:"btn",onClick:D,children:r("cancel")}),t.jsx("button",{type:"button",className:"btn primary",disabled:!l.name.trim()||!l.command.trim(),onClick:S,children:r("save")})]})]}):t.jsxs(t.Fragment,{children:[s.commands.length===0&&t.jsx("div",{className:"panel-empty",children:r("noCommands")}),s.commands.map((e,i)=>t.jsxs("div",{className:"cmd-item",children:[t.jsx("button",{type:"button",className:"cmd-run",title:r("clickToRun"),onClick:()=>m(e),children:t.jsx(P,{})}),t.jsxs("button",{type:"button",className:"cmd-main",title:r("clickToRun"),onClick:()=>m(e),children:[t.jsx("span",{className:"cmd-name",children:e.name}),t.jsx("span",{className:"cmd-command",children:e.command}),e.cwd&&t.jsx("span",{className:"cmd-cwd",children:e.cwd})]}),t.jsx("button",{type:"button",className:"cmd-act",title:r("edit"),onClick:()=>k(i),children:t.jsx(q,{})}),t.jsx("button",{type:"button",className:`cmd-act del ${v===i?"confirm":""}`,title:r("delete"),onClick:()=>M(i),children:v===i?r("confirmQ"):t.jsx(L,{})})]},i))]})}),t.jsxs("div",{className:"term-tabs-block",children:[t.jsxs("div",{className:"panel-header",children:[t.jsx("span",{className:"panel-title",children:r("terminal")}),t.jsx("button",{type:"button",className:"panel-new",title:r("newTerminal"),onClick:w,children:t.jsx(R,{})})]}),t.jsxs("div",{className:"panel-body",children:[s.terminals.length===0&&t.jsx("div",{className:"panel-empty",children:r("noTerminal")}),s.terminals.map(e=>t.jsxs("div",{className:`term-tab ${e.id===p?"active":""}`,children:[t.jsxs("button",{type:"button",className:"term-tab-main",title:`${e.cwd}${e.command?`
|
|
2
2
|
> ${e.command.command}`:""}`,onClick:()=>{o(e.id),g(!1)},children:[t.jsx("span",{className:`term-tab-dot ${e.running?"run":"exit"}`}),t.jsxs("span",{className:"term-tab-title",children:[e.title,!e.running&&t.jsx("span",{className:"term-tab-exit",children:r("exited",{code:e.exitCode===null?"":` ${e.exitCode}`})})]})]}),t.jsx("button",{type:"button",className:"term-tab-close",title:r("closeTerminal"),onClick:()=>E(e.id),children:t.jsx(G,{})})]},e.id))]})]})]}),t.jsxs("div",{className:"term-main",children:[j&&t.jsx("div",{className:"drawer-backdrop",onClick:()=>g(!1)}),t.jsx("button",{type:"button",className:"term-side-toggle",title:r("commands"),onClick:()=>g(e=>!e),children:t.jsx(J,{})}),s.terminals.length===0?t.jsxs("div",{className:"term-empty",children:[t.jsx(V,{className:"term-empty-icon"}),t.jsx("div",{className:"term-empty-title",children:r("builtinTerminal")}),t.jsx("div",{className:"term-empty-sub",children:r("termEmptySub")})]}):s.terminals.map(e=>t.jsx(Q,{conversationId:e.conversationId,terminalId:e.id,command:e.command,cwd:e.cwd,active:e.id===p,send:n,register:f.register},`${e.conversationId}:${e.id}`))]})]})}export{ne as TerminalPanel};
|
package/web/dist/assets/{abnfDiagram-VCTEODGH-3OBIjZzo.js → abnfDiagram-VCTEODGH-Dkf6Vjk6.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{g as p,r as u,d as a}from"./chunk-SVP7TREG-
|
|
1
|
+
import{g as p,r as u,d as a}from"./chunk-SVP7TREG-WDQg7LbA.js";import{p as f}from"./chunk-JWPE2WC7-CyENxC_t.js";import{_ as n,l as o}from"./mermaid.core-D8R7av1J.js";import{M as c,b as d}from"./cynefin-OW5HDTMX-Dlp7w0pR.js";import"./index-C6v7dw-m.js";import"./markdown-CUPbftfV.js";import"./react-ZkKJMDQQ.js";var v=d().RailroadAbnf.parser.LangiumParser,i=n(e=>{const r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),l=t?parseInt(t,10):0,m=s?parseInt(s,10):1/0;return{min:l,max:m}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},I={parser:R,db:a,renderer:u,styles:p};export{I as diagram};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a0 as ln,a1 as an,a2 as y,a3 as tn,a4 as H,a5 as q,a6 as _,a7 as un,a8 as rn,a9 as L,aa as o,ab as B,ac as sn,ad as on,ae as fn}from"./mermaid.core-
|
|
1
|
+
import{a0 as ln,a1 as an,a2 as y,a3 as tn,a4 as H,a5 as q,a6 as _,a7 as un,a8 as rn,a9 as L,aa as o,ab as B,ac as sn,ad as on,ae as fn}from"./mermaid.core-D8R7av1J.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,C,a){var O=I-l,i=D-h,n=C-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function W(l,h,I,D,v,A,C){var a=l-I,O=h-D,i=(C?A:-A)/L(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,F=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*L(fn(0,T*T*R-P*P)),j=(P*g-m*S)/R,z=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=j-F,e=z-t,r=w-F,G=p-t;return x*x+e*e>r*r+G*G&&(j=w,z=p),{cx:j,cy:z,x01:-n,y01:-d,x11:j*(v/T-1),y11:z*(v/T-1)}}function hn(){var l=cn,h=yn,I=B(0),D=null,v=gn,A=dn,C=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-an,c=A.apply(this,arguments)-an,F=un(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(F>tn-y)a.moveTo(s*H(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*H(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=F,S=F,j=C.apply(this,arguments)/2,z=j>y&&(D?+D.apply(this,arguments):L(u*u+s*s)),w=_(un(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if(z>y){var G=sn(z/u*q(j)),M=sn(z/s*q(j));(P-=G*2)>y?(G*=t?1:-1,R+=G,T-=G):(P=0,R=T=(f+c)/2),(S-=M*2)>y?(M*=t?1:-1,m+=M,g-=M):(S=0,m=g=(f+c)/2)}var J=s*H(m),K=s*q(m),N=u*H(T),Q=u*q(T);if(w>y){var U=s*H(g),V=s*q(g),X=u*H(R),Y=u*q(R),E;if(F<rn)if(E=pn(J,K,X,Y,U,V,N,Q)){var Z=J-E[0],$=K-E[1],b=U-E[0],k=V-E[1],nn=1/q(on((Z*b+$*k)/(L(Z*Z+$*$)*L(b*b+k*k)))/2),en=L(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=W(X,Y,J,K,s,x,t),r=W(U,V,N,Q,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(J,K),a.arc(0,0,s,m,g,!t)):a.moveTo(J,K),!(u>y)||!(P>y)?a.lineTo(N,Q):p>y?(e=W(N,Q,U,V,u,-p,t),r=W(J,K,X,Y,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-rn/2;return[H(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:B(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:B(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:B(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:B(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:B(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:B(+n),i):A},i.padAngle=function(n){return arguments.length?(C=typeof n=="function"?n:B(+n),i):C},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};
|