pi-web-ui 0.64.4 → 0.64.5
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/dsh/dsh-agent-service.js +29 -21
- package/dist/server/dsh/dsh-sessions.js +12 -2
- package/dist/server/files-service.js +51 -28
- package/package.json +1 -1
- package/web/dist/assets/{TerminalPanel-D6-kd9NX.js → TerminalPanel-7xM8bK8t.js} +1 -1
- package/web/dist/assets/{abnfDiagram-VCTEODGH-Ciapjs2h.js → abnfDiagram-VCTEODGH-dzrhTpxN.js} +1 -1
- package/web/dist/assets/{arc-DeXTszP5.js → arc-CvEtLzuM.js} +1 -1
- package/web/dist/assets/{architectureDiagram-5GKGNRK7-CT2YpHJP.js → architectureDiagram-5GKGNRK7-1d4TEc2z.js} +1 -1
- package/web/dist/assets/{blockDiagram-I7D4REHJ-CUbGhz2G.js → blockDiagram-I7D4REHJ-B8HBpC0d.js} +1 -1
- package/web/dist/assets/{c4Diagram-7LVT6UL2-B3tmW0uO.js → c4Diagram-7LVT6UL2-CNGfPB3f.js} +1 -1
- package/web/dist/assets/channel-DXmrQIC_.js +1 -0
- package/web/dist/assets/{chunk-2Q5K7J3B-B5eVe3ZU.js → chunk-2Q5K7J3B-CSVK1bvg.js} +1 -1
- package/web/dist/assets/{chunk-5VM5RSS4-zHW5GxYE.js → chunk-5VM5RSS4-BxIozqQs.js} +1 -1
- package/web/dist/assets/{chunk-F27PBJKO-D9YBCGH8.js → chunk-F27PBJKO-QnkX6p93.js} +1 -1
- package/web/dist/assets/{chunk-IMKFNOWR-DFERzrJy.js → chunk-IMKFNOWR-kBTZpeLx.js} +1 -1
- package/web/dist/assets/{chunk-JWPE2WC7-VCholTr0.js → chunk-JWPE2WC7-CcF10PqG.js} +1 -1
- package/web/dist/assets/{chunk-POPQ4Y6H-DgLTPLwv.js → chunk-POPQ4Y6H-Ch9HWJm9.js} +1 -1
- package/web/dist/assets/{chunk-SVP7TREG-B_43mnQv.js → chunk-SVP7TREG-D-6N0S8z.js} +1 -1
- package/web/dist/assets/{chunk-TICWLB2K-DexHBk9f.js → chunk-TICWLB2K-CSDXk9NS.js} +1 -1
- package/web/dist/assets/{chunk-XXDRQBXY-B4NDVbVt.js → chunk-XXDRQBXY-C7tgRoeO.js} +1 -1
- package/web/dist/assets/classDiagram-ZZMXUADV-sfceoHNh.js +1 -0
- package/web/dist/assets/classDiagram-v2-VYDZK3BY-sfceoHNh.js +1 -0
- package/web/dist/assets/{cose-bilkent-JH36ORCC-D4MfizXL.js → cose-bilkent-JH36ORCC-V45ICdWW.js} +1 -1
- package/web/dist/assets/{cynefin-OW5HDTMX-BoCpr6Nu.js → cynefin-OW5HDTMX-DkjrprMv.js} +1 -1
- package/web/dist/assets/{cynefinDiagram-5FMLGOSQ-wCccvWLd.js → cynefinDiagram-5FMLGOSQ-CSFzGNbH.js} +1 -1
- package/web/dist/assets/{dagre-GXQ25YYZ-hZXj_BO7.js → dagre-GXQ25YYZ-B2tQ52ot.js} +1 -1
- package/web/dist/assets/{diagram-S7CK7UJ4-DgqjaR7A.js → diagram-S7CK7UJ4-CAeTly-S.js} +1 -1
- package/web/dist/assets/{diagram-UQ7AKVKN-D2yHlsqg.js → diagram-UQ7AKVKN-D6_khPwH.js} +1 -1
- package/web/dist/assets/{diagram-VSXAHHWV-B2ppn0d7.js → diagram-VSXAHHWV-DDaGr2Z2.js} +1 -1
- package/web/dist/assets/{diagram-VX7I27RA-DGl4RYFm.js → diagram-VX7I27RA-8nsSxNoG.js} +1 -1
- package/web/dist/assets/{diagram-Z3DM3KII-Bu_MuKt2.js → diagram-Z3DM3KII-CQFF2G65.js} +1 -1
- package/web/dist/assets/{ebnfDiagram-PWID7BFC-B462IWhy.js → ebnfDiagram-PWID7BFC-CmR6-1Mj.js} +1 -1
- package/web/dist/assets/{erDiagram-RLTQ6QDP-4N5KTVz0.js → erDiagram-RLTQ6QDP-CCnQ4eXZ.js} +1 -1
- package/web/dist/assets/{flowDiagram-HODETNUW-D5YGm0jY.js → flowDiagram-HODETNUW-bpunOdNf.js} +1 -1
- package/web/dist/assets/{ganttDiagram-EL5Y4UJY-DtPjqo-N.js → ganttDiagram-EL5Y4UJY-Do5WVm61.js} +1 -1
- package/web/dist/assets/{gitGraphDiagram-WWUBYQGX-DDi56hwo.js → gitGraphDiagram-WWUBYQGX-DRBgLSBf.js} +1 -1
- package/web/dist/assets/{index-Bfi5_bc1.js → index-D2iRpLNi.js} +23 -23
- package/web/dist/assets/{infoDiagram-27XIBGKW-FRX_QzzT.js → infoDiagram-27XIBGKW-9xdIyGW9.js} +1 -1
- package/web/dist/assets/{ishikawaDiagram-5VMMS53U-BYvNCcn0.js → ishikawaDiagram-5VMMS53U-C1HHSxnn.js} +1 -1
- package/web/dist/assets/{journeyDiagram-3NMN7TZE-HbYFhz4W.js → journeyDiagram-3NMN7TZE-BTroj2Jo.js} +1 -1
- package/web/dist/assets/{kanban-definition-UXKFOSKX-BJFVJp0b.js → kanban-definition-UXKFOSKX-ByvuSwPg.js} +1 -1
- package/web/dist/assets/{layout-DJnxm5X9.js → layout-CJG7qpZa.js} +1 -1
- package/web/dist/assets/{linear-M6L-f6ON.js → linear-CIQgXZYV.js} +1 -1
- package/web/dist/assets/{mermaid.core-BPgLSPyb.js → mermaid.core-CkrYNntI.js} +5 -5
- package/web/dist/assets/{mindmap-definition-YA3MSWOX-CT34wBkW.js → mindmap-definition-YA3MSWOX-C2wu2sJd.js} +1 -1
- package/web/dist/assets/{pegDiagram-XKGWAZYB-y7gUs6p-.js → pegDiagram-XKGWAZYB-pyyiTfDO.js} +1 -1
- package/web/dist/assets/{pieDiagram-E7YTZNPT-8Ksrkk_P.js → pieDiagram-E7YTZNPT-BwJv35J9.js} +1 -1
- package/web/dist/assets/{quadrantDiagram-AXDQQJYC-B1JgOvVm.js → quadrantDiagram-AXDQQJYC-1Q0wSsql.js} +1 -1
- package/web/dist/assets/{railroadDiagram-O6MQD6OU-kYgyfD-Z.js → railroadDiagram-O6MQD6OU-DWFZGo9j.js} +1 -1
- package/web/dist/assets/{requirementDiagram-BXWQKSXE-DsU0dCxH.js → requirementDiagram-BXWQKSXE-CNgNvQO7.js} +1 -1
- package/web/dist/assets/{sankeyDiagram-P5KCCOFB-Bn3K22Ux.js → sankeyDiagram-P5KCCOFB-DWmOe-31.js} +1 -1
- package/web/dist/assets/{sequenceDiagram-WJ2MYXX4-Ovxqv6CH.js → sequenceDiagram-WJ2MYXX4-CvFRnceu.js} +1 -1
- package/web/dist/assets/{sizeCapture-INFHLROL-DIkQtrVp.js → sizeCapture-INFHLROL-DNyzv4qr.js} +1 -1
- package/web/dist/assets/{stateDiagram-D77RDMKH-C4ql6zER.js → stateDiagram-D77RDMKH-CUOwyJAj.js} +1 -1
- package/web/dist/assets/stateDiagram-v2-MP3YSRHH-CqyXAKwd.js +1 -0
- package/web/dist/assets/{swimlanes-42K2YHIH-2hpivmJO.js → swimlanes-42K2YHIH-B2tqXq5C.js} +1 -1
- package/web/dist/assets/swimlanesDiagram-VR7AAH4N-DzTxUWmy.js +8 -0
- package/web/dist/assets/{timeline-definition-24CTP7MA-BuH_ON1U.js → timeline-definition-24CTP7MA-BC349pHg.js} +1 -1
- package/web/dist/assets/{vennDiagram-4TSXK5OY-D9E14XfU.js → vennDiagram-4TSXK5OY-Dp_8OJ1R.js} +1 -1
- package/web/dist/assets/{wardleyDiagram-VM6X3IG4-D6h0zd6l.js → wardleyDiagram-VM6X3IG4-aZq6zGi4.js} +1 -1
- package/web/dist/assets/{xychartDiagram-S5SC5T6Z-C7uuvJqC.js → xychartDiagram-S5SC5T6Z-Cyq-4VPK.js} +1 -1
- package/web/dist/index.html +1 -1
- package/web/dist/assets/channel-C-ah19CA.js +0 -1
- package/web/dist/assets/classDiagram-ZZMXUADV-BjgHzd13.js +0 -1
- package/web/dist/assets/classDiagram-v2-VYDZK3BY-BjgHzd13.js +0 -1
- package/web/dist/assets/stateDiagram-v2-MP3YSRHH-CM0zTC3x.js +0 -1
- package/web/dist/assets/swimlanesDiagram-VR7AAH4N-BqO7jiba.js +0 -8
|
@@ -1554,29 +1554,37 @@ export class DshClientSession {
|
|
|
1554
1554
|
await this.pushSessions();
|
|
1555
1555
|
}
|
|
1556
1556
|
async pushSessions() {
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1557
|
+
try {
|
|
1558
|
+
// 目录/会话文件被删除、改名或不可读都不许把异常抛出去:本方法以
|
|
1559
|
+
// fire-and-forget(void …)方式调用,未处理的 rejection 会杀死服务进程
|
|
1560
|
+
// (issue #74 同类)。失败降级为空列表,面板显示“暂无历史”。
|
|
1561
|
+
const files = findSessionFilesForCwd(this.sessionRoot, this.cwd);
|
|
1562
|
+
const summaries = [];
|
|
1563
|
+
for (const file of files) {
|
|
1564
|
+
try {
|
|
1565
|
+
const sessionId = basename(dirname(file));
|
|
1566
|
+
// 审查会话(review-*)是内部工作会话,不进历史列表。
|
|
1567
|
+
if (sessionId.startsWith("review-"))
|
|
1568
|
+
continue;
|
|
1569
|
+
const { events } = readSessionLog(file);
|
|
1570
|
+
summaries.push({
|
|
1571
|
+
path: file,
|
|
1572
|
+
name: sessionId,
|
|
1573
|
+
firstMessage: firstUserText(events),
|
|
1574
|
+
messageCount: events.filter((e) => e.type === "user/message" || e.type === "assistant/message" || e.type === "tool/result").length,
|
|
1575
|
+
modified: statSync(file).mtimeMs,
|
|
1576
|
+
source: "web",
|
|
1577
|
+
});
|
|
1578
|
+
}
|
|
1579
|
+
catch {
|
|
1580
|
+
/* skip unreadable */
|
|
1581
|
+
}
|
|
1577
1582
|
}
|
|
1583
|
+
this.emit({ type: "sessions", sessions: summaries });
|
|
1584
|
+
}
|
|
1585
|
+
catch {
|
|
1586
|
+
this.emit({ type: "sessions", sessions: [] });
|
|
1578
1587
|
}
|
|
1579
|
-
this.emit({ type: "sessions", sessions: summaries });
|
|
1580
1588
|
}
|
|
1581
1589
|
async renameSession(_path, _name) {
|
|
1582
1590
|
this.emit({
|
|
@@ -145,7 +145,17 @@ export function findSessionFiles(root) {
|
|
|
145
145
|
}
|
|
146
146
|
};
|
|
147
147
|
walk(root);
|
|
148
|
-
return out.sort(
|
|
148
|
+
return out.sort(sessionFileNewest);
|
|
149
|
+
}
|
|
150
|
+
/** 排序比较器:文件在扫描与排序之间被删除/改名时 statSync 会抛 ENOENT
|
|
151
|
+
* (issue #74 同类:列表刷新不能因一次正常的删除把服务进程打死)。 */
|
|
152
|
+
function sessionFileNewest(a, b) {
|
|
153
|
+
try {
|
|
154
|
+
return statSync(b).mtimeMs - statSync(a).mtimeMs;
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
return 0;
|
|
158
|
+
}
|
|
149
159
|
}
|
|
150
160
|
/** 一个工作区的会话文件:官方布局(root/--<cwd>--)+ 旧版 per-cwd 布局。 */
|
|
151
161
|
export function findSessionFilesForCwd(sessionRoot, cwd) {
|
|
@@ -153,7 +163,7 @@ export function findSessionFilesForCwd(sessionRoot, cwd) {
|
|
|
153
163
|
const out = [];
|
|
154
164
|
for (const d of dirs)
|
|
155
165
|
out.push(...findSessionFiles(d));
|
|
156
|
-
return out.sort(
|
|
166
|
+
return out.sort(sessionFileNewest);
|
|
157
167
|
}
|
|
158
168
|
/** 第一个用户文本(会话标题素材)。 */
|
|
159
169
|
export function firstUserText(events) {
|
|
@@ -100,8 +100,10 @@ export function workspacePath(root, raw) {
|
|
|
100
100
|
* Read a directory for the file panel. The two platforms intentionally use
|
|
101
101
|
* different strategies — do NOT unify them:
|
|
102
102
|
*
|
|
103
|
-
* darwin/linux (posix):
|
|
104
|
-
*
|
|
103
|
+
* darwin/linux (posix): hide build/dependency noise, small cap; a listing
|
|
104
|
+
* failure (deleted/renamed dir → ENOENT/ENOTDIR, permission → EACCES/EPERM)
|
|
105
|
+
* degrades to an empty listing plus a notice chosen by errorCode — the server
|
|
106
|
+
* must NEVER crash on a vanished directory (issue #74).
|
|
105
107
|
*
|
|
106
108
|
* win32: stability and completeness first, preview second. ACL-protected
|
|
107
109
|
* system dirs (C:\$Recycle.Bin, Program Files internals, OneDrive placeholders)
|
|
@@ -121,11 +123,14 @@ async function readDirForUI(abs, rel) {
|
|
|
121
123
|
dirents = await fs.readdir(abs, { withFileTypes: true });
|
|
122
124
|
}
|
|
123
125
|
catch (err) {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
//
|
|
127
|
-
//
|
|
128
|
-
|
|
126
|
+
// 任何 readdir 失败都降级为“空列表 + notice”,绝不向上抛:listFiles 以
|
|
127
|
+
// fire-and-forget(void …)调用,未处理的 rejection 会成为 unhandled
|
|
128
|
+
// rejection 直接杀掉整个服务进程(issue #74:目录被删除/改名后刷新即崩)。
|
|
129
|
+
// 缺失(ENOENT/ENOTDIR)、权限拒绝(EACCES/EPERM)、系统 ACL 目录全部归此,
|
|
130
|
+
// 文案由 listFiles 按 errorCode 分类:缺失 = 软提示“目录不存在”,
|
|
131
|
+
// 权限/其余 = posix 硬错误 notice / win32 软提示(ACL 系统目录是常态)。
|
|
132
|
+
const e = err;
|
|
133
|
+
return { entries: [], truncated: false, error: e.message, errorCode: e.code };
|
|
129
134
|
}
|
|
130
135
|
const out = [];
|
|
131
136
|
for (const d of dirents) {
|
|
@@ -204,6 +209,35 @@ export class FilesService {
|
|
|
204
209
|
}
|
|
205
210
|
return [{ name: "/", path: "/", type: "dir" }];
|
|
206
211
|
}
|
|
212
|
+
/** 目录列表失败的 notice:缺失路径(ENOENT/ENOTDIR)是删除/改名等正常场景,
|
|
213
|
+
* 软提示“目录不存在”;其余(权限拒绝等)保留原平台语义——win32 软提示
|
|
214
|
+
* (ACL 系统目录常见),posix 硬错误(error 级 notice,取代曾经的 throw)。 */
|
|
215
|
+
emitListError(path, error, code) {
|
|
216
|
+
if (code === "ENOENT") {
|
|
217
|
+
this.host.emit({
|
|
218
|
+
type: "notice",
|
|
219
|
+
level: "warning",
|
|
220
|
+
text: `目录不存在:${path}`,
|
|
221
|
+
textEn: `Directory not found: ${path}`,
|
|
222
|
+
});
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
if (code === "ENOTDIR") {
|
|
226
|
+
this.host.emit({
|
|
227
|
+
type: "notice",
|
|
228
|
+
level: "warning",
|
|
229
|
+
text: `不是目录:${path}`,
|
|
230
|
+
textEn: `Not a directory: ${path}`,
|
|
231
|
+
});
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
this.host.emit({
|
|
235
|
+
type: "notice",
|
|
236
|
+
level: IS_WIN32 ? "warning" : "error",
|
|
237
|
+
text: `目录不可读:${error}`,
|
|
238
|
+
textEn: `Directory is not readable: ${error}`,
|
|
239
|
+
});
|
|
240
|
+
}
|
|
207
241
|
async listFiles(relPath) {
|
|
208
242
|
const { resolve, sep, relative } = await import("node:path");
|
|
209
243
|
const root = resolve(this.host.getCwd());
|
|
@@ -226,7 +260,7 @@ export class FilesService {
|
|
|
226
260
|
if (isAbsoluteWirePath(raw)) {
|
|
227
261
|
const wire = normWirePath(raw);
|
|
228
262
|
const abs = wireToAbs(wire);
|
|
229
|
-
const { entries, truncated, error } = await readDirForUI(abs, wire);
|
|
263
|
+
const { entries, truncated, error, errorCode } = await readDirForUI(abs, wire);
|
|
230
264
|
this.host.emit({
|
|
231
265
|
type: "files",
|
|
232
266
|
path: wire,
|
|
@@ -235,14 +269,8 @@ export class FilesService {
|
|
|
235
269
|
truncated,
|
|
236
270
|
absolute: true,
|
|
237
271
|
});
|
|
238
|
-
if (error)
|
|
239
|
-
this.
|
|
240
|
-
type: "notice",
|
|
241
|
-
level: "warning",
|
|
242
|
-
text: `目录不可读:${error}`,
|
|
243
|
-
textEn: `Directory is not readable: ${error}`,
|
|
244
|
-
});
|
|
245
|
-
}
|
|
272
|
+
if (error)
|
|
273
|
+
this.emitListError(wire, error, errorCode);
|
|
246
274
|
return;
|
|
247
275
|
}
|
|
248
276
|
// ---- 工作区相对视图(原有行为) ----
|
|
@@ -260,19 +288,14 @@ export class FilesService {
|
|
|
260
288
|
// Normalize to forward slashes: the wire protocol and the frontend
|
|
261
289
|
// always use "/", but relative() returns "\\" on Windows.
|
|
262
290
|
const rel = rawRel.split(sep).join("/");
|
|
263
|
-
const { entries, truncated, error } = await readDirForUI(target, rel);
|
|
264
|
-
// Watch the listed directory
|
|
265
|
-
// dir
|
|
266
|
-
this.watchDir(target, rel);
|
|
291
|
+
const { entries, truncated, error, errorCode } = await readDirForUI(target, rel);
|
|
292
|
+
// Watch the listed directory only after a successful read — a missing
|
|
293
|
+
// dir must not create a watcher on a phantom path (issue #74).
|
|
267
294
|
if (error) {
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
level: "warning",
|
|
273
|
-
text: `目录不可读:${error}`,
|
|
274
|
-
textEn: `Directory is not readable: ${error}`,
|
|
275
|
-
});
|
|
295
|
+
this.emitListError(rel === "" ? root : rel, error, errorCode);
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
this.watchDir(target, rel);
|
|
276
299
|
}
|
|
277
300
|
this.host.emit({
|
|
278
301
|
type: "files",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-web-ui",
|
|
3
|
-
"version": "0.64.
|
|
3
|
+
"version": "0.64.5",
|
|
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,4 +1,4 @@
|
|
|
1
|
-
import{a as l,j as n}from"./markdown-BJJLXG-8.js";import{u as O,b as M,T as z,a as W,F as Y,c as H,d as Z,e as q,f as ee,g as ne,h as te,i as se,r as ae}from"./index-
|
|
1
|
+
import{a as l,j as n}from"./markdown-BJJLXG-8.js";import{u as O,b as M,T as z,a as W,F as Y,c as H,d as Z,e as q,f as ee,g as ne,h as te,i as se,r as ae}from"./index-D2iRpLNi.js";import{D as re,o as ie}from"./xterm-D1D2FVe3.js";import"./react-ezqUM1Or.js";function le(t){let c=null;return{clean:t.replace(/\r?\n?\[pi-term-exit:(-?\d+)\]\r?\n?/g,(a,h)=>(c=Number(h),`\r
|
|
2
2
|
`)).replace(/\r?\n?\x1b\[90m\[(?:进程已退出,退出码 |Process exited with code )-?\d+\]\x1b\[0m\r?\n?/g,`\r
|
|
3
3
|
`),exitCode:c}}function ce({conversationId:t,terminalId:c,command:f,cwd:a,title:h,active:u,running:b,exitCode:y,send:j,register:T}){const k=l.useRef(null),N=l.useRef(null),{locale:o}=O(),w=l.useRef(o);w.current=o;const F=f?JSON.stringify(f):"";l.useEffect(()=>{const m=k.current;if(!m)return;const r=new re({theme:M(),fontFamily:'"SF Mono", "JetBrains Mono", ui-monospace, Menlo, Consolas, monospace',fontSize:13,cursorBlink:!0,scrollback:8e3}),g=new ie;r.loadAddon(g),r.open(m),N.current={term:r,fit:g},u&&r.focus();const C=()=>{r.options.theme=M()};window.addEventListener(z,C),r.attachCustomKeyEventHandler(d=>{var A;if(d.type!=="keydown")return!0;const D=(A=d.key)==null?void 0:A.toLowerCase();if((d.ctrlKey||d.metaKey)&&D==="v")return!1;if(d.ctrlKey&&!d.shiftKey&&!d.altKey&&D==="c"&&r.hasSelection()){const E=r.textarea;return E&&(E.value=r.getSelection(),E.select()),!1}return!0});const _=T(t,c,{write:d=>r.write(le(d).clean),dispose:()=>r.dispose()}),$=()=>{try{g.fit(),j({type:"terminal_resize",terminalId:c,conversationId:t,cols:r.cols,rows:r.rows})}catch{}},B=requestAnimationFrame(()=>{try{g.fit()}catch{}j(f?{type:"run_command",terminalId:c,conversationId:t,command:f,cols:r.cols,rows:r.rows}:{type:"terminal_create",terminalId:c,title:h,locale:w.current,conversationId:t,cwd:a,cols:r.cols,rows:r.rows})}),S=r.onData(d=>{j({type:"terminal_input",terminalId:c,conversationId:t,data:d})});let v=null;return typeof ResizeObserver<"u"&&(v=new ResizeObserver(()=>{m.offsetWidth>0&&m.offsetHeight>0&&$()}),v.observe(m)),()=>{cancelAnimationFrame(B),S.dispose(),window.removeEventListener(z,C),v==null||v.disconnect(),_(),r.dispose(),N.current=null}},[t,c,F,j,T]),l.useEffect(()=>{if(!u)return;const m=requestAnimationFrame(()=>{const r=N.current;if(r){try{r.fit.fit(),j({type:"terminal_resize",terminalId:c,conversationId:t,cols:r.term.cols,rows:r.term.rows})}catch{}r.term.focus()}});return()=>cancelAnimationFrame(m)},[u]);const{t:R}=O(),x=l.useRef(void 0);return l.useEffect(()=>{if(b===x.current||(x.current=b,b!==!1))return;const m=N.current;m&&m.term.write(`\r
|
|
4
4
|
\x1B[90m${R("exitBanner",{code:y??""})}\x1B[0m\r
|
package/web/dist/assets/{abnfDiagram-VCTEODGH-Ciapjs2h.js → abnfDiagram-VCTEODGH-dzrhTpxN.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-D-6N0S8z.js";import{p as f}from"./chunk-JWPE2WC7-CcF10PqG.js";import{_ as n,l as o}from"./mermaid.core-CkrYNntI.js";import{M as c,b as d}from"./cynefin-OW5HDTMX-DkjrprMv.js";import"./index-D2iRpLNi.js";import"./markdown-BJJLXG-8.js";import"./react-ezqUM1Or.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-CkrYNntI.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};
|