mulmoterminal 10.2.0 → 10.3.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.
Files changed (106) hide show
  1. package/common/paneCommand.ts +129 -0
  2. package/common/toolGroups.ts +6 -0
  3. package/dist/assets/{abnfDiagram-YUKMZFIV-BLo_jbqk.js → abnfDiagram-YUKMZFIV-DffHwWXp.js} +1 -1
  4. package/dist/assets/{architecture-WOLXFQ4H-CitXFwaU.js → architecture-WOLXFQ4H-B4GNOIk_.js} +1 -1
  5. package/dist/assets/{architectureDiagram-47P4ROYG-CTiU0L8I.js → architectureDiagram-47P4ROYG-D5vY2SMy.js} +1 -1
  6. package/dist/assets/{blockDiagram-E7TT5TSB-DPOLqnSd.js → blockDiagram-E7TT5TSB-gxkA84ZF.js} +1 -1
  7. package/dist/assets/{c4Diagram-CRA5TL53-B2uhQcqO.js → c4Diagram-CRA5TL53-CngEYX2_.js} +1 -1
  8. package/dist/assets/channel-BowpOqgq.js +1 -0
  9. package/dist/assets/{chunk-2BW5OAIV-HYy1TSDZ.js → chunk-2BW5OAIV-C1ADF1k7.js} +1 -1
  10. package/dist/assets/{chunk-3YJQHVM4-2FWL2i9B.js → chunk-3YJQHVM4-pLkgFhom.js} +1 -1
  11. package/dist/assets/{chunk-4EA7E6EY-B0dQNo6E.js → chunk-4EA7E6EY-BlFEFaYB.js} +1 -1
  12. package/dist/assets/{chunk-7TKQ45FW-COor9uDV.js → chunk-7TKQ45FW-DyUQ789M.js} +1 -1
  13. package/dist/assets/{chunk-AW2ZBBNX-DIs3KeLW.js → chunk-AW2ZBBNX-CwSnub2W.js} +1 -1
  14. package/dist/assets/{chunk-DBDB3WZW-DtSRoc4o.js → chunk-DBDB3WZW-DS205Qyg.js} +1 -1
  15. package/dist/assets/{chunk-E2ZNV5FY-CBoQ9fs4.js → chunk-E2ZNV5FY-DJUXHUkG.js} +1 -1
  16. package/dist/assets/{chunk-EU5HNXII-BlCDeKZG.js → chunk-EU5HNXII-BySfkmDB.js} +1 -1
  17. package/dist/assets/{chunk-FVRAUYC3-BDLlW3vl.js → chunk-FVRAUYC3-D1mJl1-O.js} +1 -1
  18. package/dist/assets/{chunk-HJ2JQQFS-B8ykUZhA.js → chunk-HJ2JQQFS-Digks1Bq.js} +1 -1
  19. package/dist/assets/{chunk-HTAEGDNF-BPhQ1C1x.js → chunk-HTAEGDNF-DxtDWkfP.js} +1 -1
  20. package/dist/assets/{chunk-KQW6MTUR-CLRfL1bf.js → chunk-KQW6MTUR-CrWUVuyL.js} +1 -1
  21. package/dist/assets/{chunk-NTY3LDVX-BFkSjjxK.js → chunk-NTY3LDVX-Qm6Ijcog.js} +1 -1
  22. package/dist/assets/{chunk-VPRB5NB3-CXYGMeOM.js → chunk-VPRB5NB3-B5_AFVkH.js} +1 -1
  23. package/dist/assets/{chunk-XC4XBNZT-Byw579t4.js → chunk-XC4XBNZT-CdDLMW5_.js} +1 -1
  24. package/dist/assets/{classDiagram-v2-K4WV4PDN-zoU2t7la.js → classDiagram-v2-K4WV4PDN-D_gx4H4g.js} +1 -1
  25. package/dist/assets/{cynefin-EF2NZ3EQ-CyrXl0Fz.js → cynefin-EF2NZ3EQ-DLm7x61k.js} +1 -1
  26. package/dist/assets/{cynefinDiagram-3GCD6N5R-CfcsFrp6.js → cynefinDiagram-3GCD6N5R-D3u23291.js} +1 -1
  27. package/dist/assets/{dagre-W4DXFKR2-NBReXOVw.js → dagre-W4DXFKR2-D6yfe3LF.js} +1 -1
  28. package/dist/assets/{diagram-2UJZ2QOL-BgMifG7Q.js → diagram-2UJZ2QOL-giOHpm1j.js} +1 -1
  29. package/dist/assets/{diagram-OVF4WLC6-DcI-rZYV.js → diagram-OVF4WLC6-JD_yzXTT.js} +1 -1
  30. package/dist/assets/{diagram-PFPMY2P6-B-26tjmc.js → diagram-PFPMY2P6-cGOmpWqw.js} +1 -1
  31. package/dist/assets/{diagram-UMYRVEAY-BYv_ail_.js → diagram-UMYRVEAY-C5pZm3XT.js} +1 -1
  32. package/dist/assets/{diagram-YEKJPTXX-71i5dNeM.js → diagram-YEKJPTXX-De9PYt7f.js} +1 -1
  33. package/dist/assets/{diagram-ZIFT7M5P-4DEPIVtV.js → diagram-ZIFT7M5P-B8oLndAa.js} +1 -1
  34. package/dist/assets/{dist-fafQjTJ2.js → dist-BcMqPpIE.js} +1 -1
  35. package/dist/assets/{dist-xhJs5-0I.js → dist-BzGF_zMB.js} +1 -1
  36. package/dist/assets/{dist-Da8WX486.js → dist-CFNmLHs1.js} +1 -1
  37. package/dist/assets/{dist-DbZ3NyHC.js → dist-CcMtOolI.js} +1 -1
  38. package/dist/assets/{dist-CNTNvFkP.js → dist-jOn8Bz45.js} +1 -1
  39. package/dist/assets/{ebnfDiagram-VR2GEFS7-BfE5dI6k.js → ebnfDiagram-VR2GEFS7-jt9VmuSq.js} +1 -1
  40. package/dist/assets/{elk-IJKZMXRS-B8_TkOfM.js → elk-IJKZMXRS-BaUCO2zC.js} +1 -1
  41. package/dist/assets/{erDiagram-O2IAPWRE-h_5N_5IG.js → erDiagram-O2IAPWRE-TWu5X3SA.js} +1 -1
  42. package/dist/assets/{eventmodeling-K75KTNOO-CYrGcXL5.js → eventmodeling-K75KTNOO-PtE5pg6R.js} +1 -1
  43. package/dist/assets/flowDiagram-OXPTDLAJ-DoaMFg6K.js +1 -0
  44. package/dist/assets/{ganttDiagram-R7TSEDQI-BqxTDE7-.js → ganttDiagram-R7TSEDQI-C0vjJUP2.js} +1 -1
  45. package/dist/assets/{gitGraph-VSP46ZUC-DcywjgyS.js → gitGraph-VSP46ZUC-DUnn2Ks0.js} +1 -1
  46. package/dist/assets/{gitGraphDiagram-XJZIOB7I-DJHmwAbE.js → gitGraphDiagram-XJZIOB7I-BV7GpNmB.js} +1 -1
  47. package/dist/assets/{index-BTgwdd2C.js → index-DwFxX9SA.js} +347 -347
  48. package/dist/assets/index-_LUAJpb4.css +1 -0
  49. package/dist/assets/{info-OHQRW6UA-C5TOh8H0.js → info-OHQRW6UA-DOdKJhVi.js} +1 -1
  50. package/dist/assets/{infoDiagram-5W2HQ5XZ-FObDemX1.js → infoDiagram-5W2HQ5XZ-KL8E_FFh.js} +1 -1
  51. package/dist/assets/{ishikawaDiagram-K3B6WC7H-CYoOH74_.js → ishikawaDiagram-K3B6WC7H-v9e_wL9Y.js} +1 -1
  52. package/dist/assets/{journeyDiagram-COXZFDF6-RykegTB3.js → journeyDiagram-COXZFDF6-V-bO2NO7.js} +1 -1
  53. package/dist/assets/{kanban-definition-P3RFRI5V-TPRodBaA.js → kanban-definition-P3RFRI5V-C1VMYlN0.js} +1 -1
  54. package/dist/assets/{line-D1gajW-3.js → line-C0diT23N.js} +1 -1
  55. package/dist/assets/{manifold-hLOR5oHW.js → manifold-CgYBP_Jl.js} +1 -1
  56. package/dist/assets/{mermaid-parser.core-00CFNrfU.js → mermaid-parser.core-CB6lGdQz.js} +3 -3
  57. package/dist/assets/{mermaid.core--EH9D6An.js → mermaid.core-BKXyfrGA.js} +4 -4
  58. package/dist/assets/{mindmap-definition-LZFPQGKD-C_uaVQZY.js → mindmap-definition-LZFPQGKD-CwWeSOpr.js} +1 -1
  59. package/dist/assets/{packet-JDAUHWVQ-CBKdX_5i.js → packet-JDAUHWVQ-3j2l_722.js} +1 -1
  60. package/dist/assets/{pegDiagram-BGZESJAR-CLjemVyS.js → pegDiagram-BGZESJAR-CpUIaMK9.js} +1 -1
  61. package/dist/assets/{pie-XZMESJXO-Dpz7fzRO.js → pie-XZMESJXO-CJWMFiuF.js} +1 -1
  62. package/dist/assets/{pieDiagram-CAPJLFHJ-_oIt_58Q.js → pieDiagram-CAPJLFHJ-C4Fp7dPt.js} +1 -1
  63. package/dist/assets/{quadrantDiagram-GDMTTRAM-fvwP8Z95.js → quadrantDiagram-GDMTTRAM-C0ShPbme.js} +1 -1
  64. package/dist/assets/{radar-ABXABTNO-B_B724ml.js → radar-ABXABTNO-DFP6iY8x.js} +1 -1
  65. package/dist/assets/{railroad-I3PHUGI6-V7akPMj4.js → railroad-I3PHUGI6-DR6mwjNv.js} +1 -1
  66. package/dist/assets/{railroad-abnf-LNEFI6M7-5cc4YWfm.js → railroad-abnf-LNEFI6M7-CO1T6T9c.js} +1 -1
  67. package/dist/assets/{railroad-ebnf-DWYD2UWJ-D8iyUSSG.js → railroad-ebnf-DWYD2UWJ-Cpp3Whnh.js} +1 -1
  68. package/dist/assets/{railroad-peg-JR7BVNR7-Kqp8-7m5.js → railroad-peg-JR7BVNR7-SC6qrWHg.js} +1 -1
  69. package/dist/assets/{railroadDiagram-SM67HX2B-BoK2RpRF.js → railroadDiagram-SM67HX2B-D8arUcue.js} +1 -1
  70. package/dist/assets/{requirementDiagram-X7JNWC4A-C0vttroj.js → requirementDiagram-X7JNWC4A-BfuROELZ.js} +1 -1
  71. package/dist/assets/{sankeyDiagram-UM26HJRW-VxfvrQi2.js → sankeyDiagram-UM26HJRW-Dx7qQKP3.js} +1 -1
  72. package/dist/assets/{sequenceDiagram-ZO4K6R2Y-hn5lQacg.js → sequenceDiagram-ZO4K6R2Y-BBZ2GElY.js} +1 -1
  73. package/dist/assets/{stateDiagram-v2-TBUQTH76-DK5mLVtf.js → stateDiagram-v2-TBUQTH76-Co9QstCS.js} +1 -1
  74. package/dist/assets/{swimlanes-N4OXWK64-B5wbMvGM.js → swimlanes-N4OXWK64-1fO2a_5p.js} +1 -1
  75. package/dist/assets/swimlanesDiagram-K3J5GTZL-rJdkLNc6.js +8 -0
  76. package/dist/assets/{timeline-definition-YOQAKGHF-DftghouQ.js → timeline-definition-YOQAKGHF-CbNX3ELR.js} +1 -1
  77. package/dist/assets/{treeView-D4JQ5SDB-CkudDqwC.js → treeView-D4JQ5SDB-a_Q9p0kF.js} +1 -1
  78. package/dist/assets/{treemap-SAJKECNS-CGgy4P2D.js → treemap-SAJKECNS-CygMipNi.js} +1 -1
  79. package/dist/assets/{usecaseDiagram-VIAY4XPW-9B-NzT7v.js → usecaseDiagram-VIAY4XPW-Cy66QR1P.js} +1 -1
  80. package/dist/assets/{vennDiagram-BLWOH2XV-BIL4JGdr.js → vennDiagram-BLWOH2XV-E5qHjzJo.js} +1 -1
  81. package/dist/assets/{wardley-7MLQ67FV-DsCHFAhQ.js → wardley-7MLQ67FV-D9omOW8l.js} +1 -1
  82. package/dist/assets/{wardleyDiagram-YMQ3BMBF-BDbGCwqe.js → wardleyDiagram-YMQ3BMBF-D7chXcuf.js} +1 -1
  83. package/dist/assets/{xychartDiagram-TAQBALBS-CoZnOtfC.js → xychartDiagram-TAQBALBS-BBAhbweQ.js} +1 -1
  84. package/dist/index.html +2 -2
  85. package/docs/ChangeLog.md +11 -0
  86. package/docs/facts.json +1 -1
  87. package/docs/guide/en/feature-list.md +3 -1
  88. package/docs/guide/en/features.md +2 -0
  89. package/docs/guide/en/index.md +2 -2
  90. package/docs/guide/en/pane-tools.md +133 -0
  91. package/docs/guide/en/v10.3.0.md +59 -0
  92. package/docs/guide/ja/feature-list.md +3 -1
  93. package/docs/guide/ja/features.md +2 -0
  94. package/docs/guide/ja/index.md +2 -2
  95. package/docs/guide/ja/pane-tools.md +123 -0
  96. package/docs/guide/ja/v10.3.0.md +56 -0
  97. package/package.json +1 -1
  98. package/server/files/pathContainment.ts +1 -1
  99. package/server/infra/tools/host-tools.ts +3 -0
  100. package/server/infra/tools/pane-tools.ts +60 -0
  101. package/server/routes/app-routes.ts +4 -0
  102. package/server/routes/pane-tool-routes.ts +95 -0
  103. package/dist/assets/channel-D21ZcLiU.js +0 -1
  104. package/dist/assets/flowDiagram-OXPTDLAJ-DABnvFE9.js +0 -1
  105. package/dist/assets/index-D_9yZ1TZ.css +0 -1
  106. package/dist/assets/swimlanesDiagram-K3J5GTZL-CKlOYKZP.js +0 -8
@@ -0,0 +1,129 @@
1
+ // Commands an agent sends to its own cell's right pane (#3022): show a file, or put a checklist in
2
+ // front of the human. Both sides decide from these — the server parses the tool arguments and
3
+ // publishes, the grid listens and acts — so the channel, the shapes and the text typed back live here.
4
+ import { isRecord } from "./isRecord.js";
5
+
6
+ export const PANE_COMMAND_CHANNEL = "pane-command";
7
+
8
+ export const PANE_VIEWS = ["editor", "preview", "canvas", "split"] as const;
9
+ export type PaneView = (typeof PANE_VIEWS)[number];
10
+ const isPaneView = (value: unknown): value is PaneView => PANE_VIEWS.some((view) => view === value);
11
+
12
+ /** Where a file is shown: relative to the cell's directory, which the server checked it is inside. */
13
+ export interface PaneTarget {
14
+ path: string;
15
+ view: PaneView;
16
+ /** 1-based; a line puts the file on its editor, at that line. */
17
+ line?: number;
18
+ }
19
+
20
+ export interface PaneShow extends PaneTarget {
21
+ kind: "show";
22
+ sessionId: string;
23
+ /** The directory `path` is relative to, so the browser can refuse a pane rooted somewhere else. */
24
+ cwd: string;
25
+ }
26
+
27
+ export interface CheckItem {
28
+ label: string;
29
+ /** What to open for this item, when it has a file. */
30
+ target?: PaneTarget;
31
+ }
32
+
33
+ export interface PaneCheck {
34
+ kind: "check";
35
+ sessionId: string;
36
+ cwd: string;
37
+ id: string;
38
+ title: string;
39
+ items: CheckItem[];
40
+ }
41
+
42
+ export type PaneCommand = PaneShow | PaneCheck;
43
+
44
+ /** The most items one check carries: past this it is not a check a person works through. */
45
+ export const MAX_CHECK_ITEMS = 20;
46
+ const MAX_TEXT = 300;
47
+
48
+ const text = (value: unknown): string | null => (typeof value === "string" && value.trim() !== "" ? value.trim().slice(0, MAX_TEXT) : null);
49
+ const lineOf = (value: unknown): number | undefined => (typeof value === "number" && Number.isInteger(value) && value > 0 ? value : undefined);
50
+
51
+ /** A tool's file argument: `path` and an optional `view` (default `editor`) and `line`. The path is
52
+ * NOT contained here — that needs the filesystem, and is the server's job. */
53
+ export function parseTarget(raw: unknown): PaneTarget | null {
54
+ if (!isRecord(raw)) return null;
55
+ const path = text(raw.path);
56
+ if (!path) return null;
57
+ const view = raw.view === undefined ? "editor" : raw.view;
58
+ if (!isPaneView(view)) return null;
59
+ const line = lineOf(raw.line);
60
+ return line === undefined ? { path, view } : { path, view, line };
61
+ }
62
+
63
+ export interface CheckRequest {
64
+ title: string;
65
+ items: { label: string; target?: PaneTarget }[];
66
+ }
67
+
68
+ type CheckItemRequest = CheckRequest["items"][number];
69
+
70
+ /** One item, or the sentence saying what is wrong with it. */
71
+ function parseCheckItem(item: unknown): CheckItemRequest | string {
72
+ const label = isRecord(item) ? text(item.label) : null;
73
+ if (!label || !isRecord(item)) return "Every requestCheck item needs a non-empty label.";
74
+ if (item.path === undefined) return { label };
75
+ const target = parseTarget(item);
76
+ return target ? { label, target } : `Item "${label}": path must be a non-empty string and view one of ${PANE_VIEWS.join(", ")}.`;
77
+ }
78
+
79
+ /** `requestCheck`'s arguments, or the sentence saying what is wrong with them. */
80
+ export function parseCheckRequest(raw: unknown): CheckRequest | string {
81
+ if (!isRecord(raw)) return "requestCheck takes { title, items }.";
82
+ if (!Array.isArray(raw.items) || raw.items.length === 0) return "requestCheck needs at least one item.";
83
+ if (raw.items.length > MAX_CHECK_ITEMS) return `requestCheck takes at most ${MAX_CHECK_ITEMS} items.`;
84
+ const parsed = raw.items.map(parseCheckItem);
85
+ const problem = parsed.find((item): item is string => typeof item === "string");
86
+ if (problem !== undefined) return problem;
87
+ return { title: text(raw.title) ?? "Check", items: parsed.filter((item): item is CheckItemRequest => typeof item !== "string") };
88
+ }
89
+
90
+ const isTarget = (value: unknown): value is PaneTarget =>
91
+ isRecord(value) && typeof value.path === "string" && isPaneView(value.view) && (value.line === undefined || lineOf(value.line) !== undefined);
92
+ const isCheckItem = (value: unknown): value is CheckItem =>
93
+ isRecord(value) && typeof value.label === "string" && (value.target === undefined || isTarget(value.target));
94
+
95
+ /** A command off the channel, which carries JSON nothing has checked. */
96
+ export function isPaneCommand(value: unknown): value is PaneCommand {
97
+ if (!isRecord(value) || typeof value.sessionId !== "string" || typeof value.cwd !== "string") return false;
98
+ if (value.kind === "show") return isTarget(value);
99
+ return (
100
+ value.kind === "check" && typeof value.id === "string" && typeof value.title === "string" && Array.isArray(value.items) && value.items.every(isCheckItem)
101
+ );
102
+ }
103
+
104
+ export interface CheckAnswer {
105
+ ok: boolean;
106
+ note: string;
107
+ }
108
+
109
+ /** What is typed into the terminal when the human has answered every item, read by the agent as the
110
+ * user's next message. ONE line: a newline typed into a TUI is Enter, and would send it half-written;
111
+ * and no control bytes, since an ESC sequence typed into the PTY is a keystroke, not text. */
112
+ const oneLine = (value: string): string =>
113
+ value
114
+ .replace(/[\p{Cc}\p{Cf}]/gu, " ")
115
+ .replace(/\s+/g, " ")
116
+ .trim();
117
+
118
+ export function checkSummary(check: Pick<PaneCheck, "title" | "items">, answers: readonly CheckAnswer[]): string {
119
+ const lines = check.items.map((item, index) => {
120
+ const answer = answers[index];
121
+ const verdict = answer?.ok ? "OK" : "NG";
122
+ const note = answer && oneLine(answer.note) ? ` — ${oneLine(answer.note)}` : "";
123
+ return `${index + 1}. ${verdict}: ${oneLine(item.label)}${note}`;
124
+ });
125
+ const failed = answers.filter((answer) => !answer.ok).length;
126
+ const tally = failed === 0 ? "all OK" : `${failed} NG`;
127
+ const head = `Check results for "${oneLine(check.title)}" (${tally}):`;
128
+ return [head, ...lines].join(" ");
129
+ }
@@ -99,6 +99,10 @@ const GROUP_BY_TOOL = new Map<string, ToolGroup>([
99
99
  ["exportShapeScriptUsdz", "render"],
100
100
  // And the printable STL beside it: the same model handed out as a file a slicer takes.
101
101
  ["exportShapeScriptStl", "render"],
102
+ // The cell's own right pane (#3022): show a file, or a checklist for the human. Render because
103
+ // they only put something in front of the user — what they send back is typed by the user's Send.
104
+ ["showInPane", "render"],
105
+ ["requestCheck", "render"],
102
106
 
103
107
  // presentCollection RENDERS, but it renders collection data and only makes sense next to
104
108
  // manageCollection — a cell offered the view without the store gets a tool it cannot fill.
@@ -245,6 +249,8 @@ export const AUTO_ALLOWED_TOOLS: readonly string[] = [
245
249
  "renderShapeScript",
246
250
  "exportShapeScriptUsdz",
247
251
  "exportShapeScriptStl",
252
+ "showInPane",
253
+ "requestCheck",
248
254
  ];
249
255
 
250
256
  /** Tools that must keep the agent's permission prompt on EVERY claude session, including the
@@ -1 +1 @@
1
- import{m as e,t}from"./mermaid-parser.core-00CFNrfU.js";import{n}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import{m as r}from"./src-JH1jZ6Eh.js";import"./chunk-VPRB5NB3-CXYGMeOM.js";import{n as i,r as a,t as o}from"./chunk-AW2ZBBNX-DIs3KeLW.js";import{t as s}from"./chunk-JWPE2WC7-DVXcaiue.js";import"./mermaid.core--EH9D6An.js";var c=e().RailroadAbnf.parser.LangiumParser,l=n(e=>{let t=e.alternatives.map(u);return t.length===1?t[0]:{type:`choice`,alternatives:t}},`transformAlternation`),u=n(e=>{let t=e.elements.map(f);return t.length===1?t[0]:{type:`sequence`,elements:t}},`transformConcatenation`),d=n(e=>{if(e.includes(`*`)){let[t,n]=e.split(`*`);return{min:t?parseInt(t,10):0,max:n?parseInt(n,10):1/0}}let t=parseInt(e,10);return{min:t,max:t}},`parseRepeat`),f=n(e=>{let t=p(e.primary);if(!e.repeat)return t;let{min:n,max:r}=d(e.repeat);return n===0&&r===1?{type:`optional`,element:t}:{type:`repetition`,element:t,min:n,max:r}},`transformElement`),p=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 l(e.element);case`AbnfOptionalGroup`:return{type:`optional`,element:l(e.element)};default:throw Error(`Unsupported ABNF primary node: ${e.$type}`)}},`transformPrimary`),m=n(e=>({name:e.name,definition:l(e.definition)}),`transformRule`),h=n(e=>{s(e,o),e.title&&o.setTitle(e.title),e.rules.map(e=>o.addRule(m(e)))},`populateDb`),g={parser:{parse:n(e=>{o.clear(),r.debug(`[ABNF Parser] Starting Langium parse`);let n=c.parse(e);if(n.lexerErrors.length>0||n.parserErrors.length>0)throw new t(n);let i=n.value;r.debug(`[ABNF Parser] Parsed rules:`,i.rules.length),h(i),r.debug(`[ABNF Parser] Parse complete`)},`parse`),parser:{yy:o}},db:o,renderer:a,styles:i};export{g as diagram};
1
+ import{m as e,t}from"./mermaid-parser.core-CB6lGdQz.js";import{n}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import{m as r}from"./src-JH1jZ6Eh.js";import"./chunk-VPRB5NB3-B5_AFVkH.js";import{n as i,r as a,t as o}from"./chunk-AW2ZBBNX-CwSnub2W.js";import{t as s}from"./chunk-JWPE2WC7-DVXcaiue.js";import"./mermaid.core-BKXyfrGA.js";var c=e().RailroadAbnf.parser.LangiumParser,l=n(e=>{let t=e.alternatives.map(u);return t.length===1?t[0]:{type:`choice`,alternatives:t}},`transformAlternation`),u=n(e=>{let t=e.elements.map(f);return t.length===1?t[0]:{type:`sequence`,elements:t}},`transformConcatenation`),d=n(e=>{if(e.includes(`*`)){let[t,n]=e.split(`*`);return{min:t?parseInt(t,10):0,max:n?parseInt(n,10):1/0}}let t=parseInt(e,10);return{min:t,max:t}},`parseRepeat`),f=n(e=>{let t=p(e.primary);if(!e.repeat)return t;let{min:n,max:r}=d(e.repeat);return n===0&&r===1?{type:`optional`,element:t}:{type:`repetition`,element:t,min:n,max:r}},`transformElement`),p=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 l(e.element);case`AbnfOptionalGroup`:return{type:`optional`,element:l(e.element)};default:throw Error(`Unsupported ABNF primary node: ${e.$type}`)}},`transformPrimary`),m=n(e=>({name:e.name,definition:l(e.definition)}),`transformRule`),h=n(e=>{s(e,o),e.title&&o.setTitle(e.title),e.rules.map(e=>o.addRule(m(e)))},`populateDb`),g={parser:{parse:n(e=>{o.clear(),r.debug(`[ABNF Parser] Starting Langium parse`);let n=c.parse(e);if(n.lexerErrors.length>0||n.parserErrors.length>0)throw new t(n);let i=n.value;r.debug(`[ABNF Parser] Parsed rules:`,i.rules.length),h(i),r.debug(`[ABNF Parser] Parse complete`)},`parse`),parser:{yy:o}},db:o,renderer:a,styles:i};export{g as diagram};
@@ -1 +1 @@
1
- import"./chunk-NGNAAXSQ-C2Wy9Xmz.js";export{M as createArchitectureServices}from"./mermaid-parser.core-00CFNrfU.js";
1
+ import"./chunk-NGNAAXSQ-C2Wy9Xmz.js";export{M as createArchitectureServices}from"./mermaid-parser.core-CB6lGdQz.js";