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.
Files changed (67) hide show
  1. package/dist/server/dsh/dsh-agent-service.js +29 -21
  2. package/dist/server/dsh/dsh-sessions.js +12 -2
  3. package/dist/server/files-service.js +51 -28
  4. package/package.json +1 -1
  5. package/web/dist/assets/{TerminalPanel-D6-kd9NX.js → TerminalPanel-7xM8bK8t.js} +1 -1
  6. package/web/dist/assets/{abnfDiagram-VCTEODGH-Ciapjs2h.js → abnfDiagram-VCTEODGH-dzrhTpxN.js} +1 -1
  7. package/web/dist/assets/{arc-DeXTszP5.js → arc-CvEtLzuM.js} +1 -1
  8. package/web/dist/assets/{architectureDiagram-5GKGNRK7-CT2YpHJP.js → architectureDiagram-5GKGNRK7-1d4TEc2z.js} +1 -1
  9. package/web/dist/assets/{blockDiagram-I7D4REHJ-CUbGhz2G.js → blockDiagram-I7D4REHJ-B8HBpC0d.js} +1 -1
  10. package/web/dist/assets/{c4Diagram-7LVT6UL2-B3tmW0uO.js → c4Diagram-7LVT6UL2-CNGfPB3f.js} +1 -1
  11. package/web/dist/assets/channel-DXmrQIC_.js +1 -0
  12. package/web/dist/assets/{chunk-2Q5K7J3B-B5eVe3ZU.js → chunk-2Q5K7J3B-CSVK1bvg.js} +1 -1
  13. package/web/dist/assets/{chunk-5VM5RSS4-zHW5GxYE.js → chunk-5VM5RSS4-BxIozqQs.js} +1 -1
  14. package/web/dist/assets/{chunk-F27PBJKO-D9YBCGH8.js → chunk-F27PBJKO-QnkX6p93.js} +1 -1
  15. package/web/dist/assets/{chunk-IMKFNOWR-DFERzrJy.js → chunk-IMKFNOWR-kBTZpeLx.js} +1 -1
  16. package/web/dist/assets/{chunk-JWPE2WC7-VCholTr0.js → chunk-JWPE2WC7-CcF10PqG.js} +1 -1
  17. package/web/dist/assets/{chunk-POPQ4Y6H-DgLTPLwv.js → chunk-POPQ4Y6H-Ch9HWJm9.js} +1 -1
  18. package/web/dist/assets/{chunk-SVP7TREG-B_43mnQv.js → chunk-SVP7TREG-D-6N0S8z.js} +1 -1
  19. package/web/dist/assets/{chunk-TICWLB2K-DexHBk9f.js → chunk-TICWLB2K-CSDXk9NS.js} +1 -1
  20. package/web/dist/assets/{chunk-XXDRQBXY-B4NDVbVt.js → chunk-XXDRQBXY-C7tgRoeO.js} +1 -1
  21. package/web/dist/assets/classDiagram-ZZMXUADV-sfceoHNh.js +1 -0
  22. package/web/dist/assets/classDiagram-v2-VYDZK3BY-sfceoHNh.js +1 -0
  23. package/web/dist/assets/{cose-bilkent-JH36ORCC-D4MfizXL.js → cose-bilkent-JH36ORCC-V45ICdWW.js} +1 -1
  24. package/web/dist/assets/{cynefin-OW5HDTMX-BoCpr6Nu.js → cynefin-OW5HDTMX-DkjrprMv.js} +1 -1
  25. package/web/dist/assets/{cynefinDiagram-5FMLGOSQ-wCccvWLd.js → cynefinDiagram-5FMLGOSQ-CSFzGNbH.js} +1 -1
  26. package/web/dist/assets/{dagre-GXQ25YYZ-hZXj_BO7.js → dagre-GXQ25YYZ-B2tQ52ot.js} +1 -1
  27. package/web/dist/assets/{diagram-S7CK7UJ4-DgqjaR7A.js → diagram-S7CK7UJ4-CAeTly-S.js} +1 -1
  28. package/web/dist/assets/{diagram-UQ7AKVKN-D2yHlsqg.js → diagram-UQ7AKVKN-D6_khPwH.js} +1 -1
  29. package/web/dist/assets/{diagram-VSXAHHWV-B2ppn0d7.js → diagram-VSXAHHWV-DDaGr2Z2.js} +1 -1
  30. package/web/dist/assets/{diagram-VX7I27RA-DGl4RYFm.js → diagram-VX7I27RA-8nsSxNoG.js} +1 -1
  31. package/web/dist/assets/{diagram-Z3DM3KII-Bu_MuKt2.js → diagram-Z3DM3KII-CQFF2G65.js} +1 -1
  32. package/web/dist/assets/{ebnfDiagram-PWID7BFC-B462IWhy.js → ebnfDiagram-PWID7BFC-CmR6-1Mj.js} +1 -1
  33. package/web/dist/assets/{erDiagram-RLTQ6QDP-4N5KTVz0.js → erDiagram-RLTQ6QDP-CCnQ4eXZ.js} +1 -1
  34. package/web/dist/assets/{flowDiagram-HODETNUW-D5YGm0jY.js → flowDiagram-HODETNUW-bpunOdNf.js} +1 -1
  35. package/web/dist/assets/{ganttDiagram-EL5Y4UJY-DtPjqo-N.js → ganttDiagram-EL5Y4UJY-Do5WVm61.js} +1 -1
  36. package/web/dist/assets/{gitGraphDiagram-WWUBYQGX-DDi56hwo.js → gitGraphDiagram-WWUBYQGX-DRBgLSBf.js} +1 -1
  37. package/web/dist/assets/{index-Bfi5_bc1.js → index-D2iRpLNi.js} +23 -23
  38. package/web/dist/assets/{infoDiagram-27XIBGKW-FRX_QzzT.js → infoDiagram-27XIBGKW-9xdIyGW9.js} +1 -1
  39. package/web/dist/assets/{ishikawaDiagram-5VMMS53U-BYvNCcn0.js → ishikawaDiagram-5VMMS53U-C1HHSxnn.js} +1 -1
  40. package/web/dist/assets/{journeyDiagram-3NMN7TZE-HbYFhz4W.js → journeyDiagram-3NMN7TZE-BTroj2Jo.js} +1 -1
  41. package/web/dist/assets/{kanban-definition-UXKFOSKX-BJFVJp0b.js → kanban-definition-UXKFOSKX-ByvuSwPg.js} +1 -1
  42. package/web/dist/assets/{layout-DJnxm5X9.js → layout-CJG7qpZa.js} +1 -1
  43. package/web/dist/assets/{linear-M6L-f6ON.js → linear-CIQgXZYV.js} +1 -1
  44. package/web/dist/assets/{mermaid.core-BPgLSPyb.js → mermaid.core-CkrYNntI.js} +5 -5
  45. package/web/dist/assets/{mindmap-definition-YA3MSWOX-CT34wBkW.js → mindmap-definition-YA3MSWOX-C2wu2sJd.js} +1 -1
  46. package/web/dist/assets/{pegDiagram-XKGWAZYB-y7gUs6p-.js → pegDiagram-XKGWAZYB-pyyiTfDO.js} +1 -1
  47. package/web/dist/assets/{pieDiagram-E7YTZNPT-8Ksrkk_P.js → pieDiagram-E7YTZNPT-BwJv35J9.js} +1 -1
  48. package/web/dist/assets/{quadrantDiagram-AXDQQJYC-B1JgOvVm.js → quadrantDiagram-AXDQQJYC-1Q0wSsql.js} +1 -1
  49. package/web/dist/assets/{railroadDiagram-O6MQD6OU-kYgyfD-Z.js → railroadDiagram-O6MQD6OU-DWFZGo9j.js} +1 -1
  50. package/web/dist/assets/{requirementDiagram-BXWQKSXE-DsU0dCxH.js → requirementDiagram-BXWQKSXE-CNgNvQO7.js} +1 -1
  51. package/web/dist/assets/{sankeyDiagram-P5KCCOFB-Bn3K22Ux.js → sankeyDiagram-P5KCCOFB-DWmOe-31.js} +1 -1
  52. package/web/dist/assets/{sequenceDiagram-WJ2MYXX4-Ovxqv6CH.js → sequenceDiagram-WJ2MYXX4-CvFRnceu.js} +1 -1
  53. package/web/dist/assets/{sizeCapture-INFHLROL-DIkQtrVp.js → sizeCapture-INFHLROL-DNyzv4qr.js} +1 -1
  54. package/web/dist/assets/{stateDiagram-D77RDMKH-C4ql6zER.js → stateDiagram-D77RDMKH-CUOwyJAj.js} +1 -1
  55. package/web/dist/assets/stateDiagram-v2-MP3YSRHH-CqyXAKwd.js +1 -0
  56. package/web/dist/assets/{swimlanes-42K2YHIH-2hpivmJO.js → swimlanes-42K2YHIH-B2tqXq5C.js} +1 -1
  57. package/web/dist/assets/swimlanesDiagram-VR7AAH4N-DzTxUWmy.js +8 -0
  58. package/web/dist/assets/{timeline-definition-24CTP7MA-BuH_ON1U.js → timeline-definition-24CTP7MA-BC349pHg.js} +1 -1
  59. package/web/dist/assets/{vennDiagram-4TSXK5OY-D9E14XfU.js → vennDiagram-4TSXK5OY-Dp_8OJ1R.js} +1 -1
  60. package/web/dist/assets/{wardleyDiagram-VM6X3IG4-D6h0zd6l.js → wardleyDiagram-VM6X3IG4-aZq6zGi4.js} +1 -1
  61. package/web/dist/assets/{xychartDiagram-S5SC5T6Z-C7uuvJqC.js → xychartDiagram-S5SC5T6Z-Cyq-4VPK.js} +1 -1
  62. package/web/dist/index.html +1 -1
  63. package/web/dist/assets/channel-C-ah19CA.js +0 -1
  64. package/web/dist/assets/classDiagram-ZZMXUADV-BjgHzd13.js +0 -1
  65. package/web/dist/assets/classDiagram-v2-VYDZK3BY-BjgHzd13.js +0 -1
  66. package/web/dist/assets/stateDiagram-v2-MP3YSRHH-CM0zTC3x.js +0 -1
  67. 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
- const files = findSessionFilesForCwd(this.sessionRoot, this.cwd);
1558
- const summaries = [];
1559
- for (const file of files) {
1560
- try {
1561
- const sessionId = basename(dirname(file));
1562
- // 审查会话(review-*)是内部工作会话,不进历史列表。
1563
- if (sessionId.startsWith("review-"))
1564
- continue;
1565
- const { events } = readSessionLog(file);
1566
- summaries.push({
1567
- path: file,
1568
- name: sessionId,
1569
- firstMessage: firstUserText(events),
1570
- messageCount: events.filter((e) => e.type === "user/message" || e.type === "assistant/message" || e.type === "tool/result").length,
1571
- modified: statSync(file).mtimeMs,
1572
- source: "web",
1573
- });
1574
- }
1575
- catch {
1576
- /* skip unreadable */
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((a, b) => statSync(b).mtimeMs - statSync(a).mtimeMs);
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((a, b) => statSync(b).mtimeMs - statSync(a).mtimeMs);
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): original behavior — hide build/dependency noise,
104
- * small cap, hard error notice when the directory itself is unreadable.
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
- if (!IS_WIN32)
125
- throw err;
126
- // Windows ACL-protected/system dirs throw EPERM/EACCES on open —
127
- // degrade to an empty listing; listFiles turns this into a warning.
128
- return { entries: [], truncated: false, error: err.message };
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.host.emit({
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 (only after a successful read — a missing
265
- // dir throws above and must not create a watcher on a phantom path).
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
- // Windows-only: unreadable system dirs degrade to an empty list
269
- // with a warning instead of a hard error — the panel stays usable.
270
- this.host.emit({
271
- type: "notice",
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.4",
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-Bfi5_bc1.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
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
@@ -1 +1 @@
1
- import{g as p,r as u,d as a}from"./chunk-SVP7TREG-B_43mnQv.js";import{p as f}from"./chunk-JWPE2WC7-VCholTr0.js";import{_ as n,l as o}from"./mermaid.core-BPgLSPyb.js";import{M as c,b as d}from"./cynefin-OW5HDTMX-BoCpr6Nu.js";import"./index-Bfi5_bc1.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
+ 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-BPgLSPyb.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};
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};