mulmoterminal 0.9.0 → 0.9.2

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 (127) hide show
  1. package/README.md +32 -3
  2. package/dist/assets/{abnfDiagram-VRR7QNED-6nNByj6v-CcrZYOgs.js → abnfDiagram-VRR7QNED-6nNByj6v-DnZUtZE3.js} +1 -1
  3. package/dist/assets/architecture-TIHT7OUA-CYMWc3UT-BN5RgXX3.js +1 -0
  4. package/dist/assets/{architectureDiagram-ZJ3FMSHR-Bgnyaj_i-CUuVwmX4.js → architectureDiagram-ZJ3FMSHR-Bgnyaj_i-EZjYGuvi.js} +1 -1
  5. package/dist/assets/{blockDiagram-677ZJIJ3-DQ35o5E4-CvxU8aZe.js → blockDiagram-677ZJIJ3-DQ35o5E4-vpbNruHX.js} +1 -1
  6. package/dist/assets/{c4Diagram-LMCZKHZV-ClWZeiWo-D8f1kYY_.js → c4Diagram-LMCZKHZV-ClWZeiWo-Cog5Hl_r.js} +1 -1
  7. package/dist/assets/channel-Di5rtkx0-BA5r_-gi.js +1 -0
  8. package/dist/assets/{chunk-32BRIVSS-CCt9wtYd-Db_FZIf1.js → chunk-32BRIVSS-CCt9wtYd-CEiTeQ7J.js} +1 -1
  9. package/dist/assets/{chunk-52WLFC77-FbBbR4uI-7n2yHJ2K.js → chunk-52WLFC77-FbBbR4uI-CmugCE4h.js} +1 -1
  10. package/dist/assets/{chunk-C7G6YPKG-C87hlS9c-DpkxPQKG.js → chunk-C7G6YPKG-C87hlS9c-CtvU2fCF.js} +1 -1
  11. package/dist/assets/{chunk-EX3LRPZG-BqGqMXLN-BgqbD-Ak.js → chunk-EX3LRPZG-BqGqMXLN-C_OOtIBE.js} +1 -1
  12. package/dist/assets/{chunk-FWX5IMBZ-BkbSAAuW-BmYnGiYn.js → chunk-FWX5IMBZ-BkbSAAuW-R28aYggR.js} +2 -2
  13. package/dist/assets/{chunk-HOUHSVGY-Cxu0eDlh-TqsiFF7j.js → chunk-HOUHSVGY-Cxu0eDlh-BjSXe8X7.js} +1 -1
  14. package/dist/assets/{chunk-ICXQ74PX-hiraF_Xj-Cx0hIueU.js → chunk-ICXQ74PX-hiraF_Xj-CJDQKrcK.js} +1 -1
  15. package/dist/assets/{chunk-MOJQB5TN-CqxshQHA-pSbnAJ7U.js → chunk-MOJQB5TN-CqxshQHA-BOKLvtWS.js} +1 -1
  16. package/dist/assets/{chunk-OGEWGWER-CjCr7ceX-C2qBJ2Pg.js → chunk-OGEWGWER-CjCr7ceX-BzeB3har.js} +1 -1
  17. package/dist/assets/{chunk-PUDLZKDR-Dx6M-vz1-DvP2VeJc.js → chunk-PUDLZKDR-Dx6M-vz1-lzCqtXyf.js} +1 -1
  18. package/dist/assets/{chunk-Q4XR5HBZ-CZd-9lTB-B9gNYRb9.js → chunk-Q4XR5HBZ-CZd-9lTB-BNpWmgXE.js} +1 -1
  19. package/dist/assets/{chunk-V7JOEXUC-rI0xlC_O-W1oR2e7R.js → chunk-V7JOEXUC-rI0xlC_O-B9pTDj9u.js} +1 -1
  20. package/dist/assets/{chunk-VAUOI2AC-DrcykVNK-UQ8qJq-D.js → chunk-VAUOI2AC-DrcykVNK-CZQTkFkc.js} +1 -1
  21. package/dist/assets/{chunk-VR4S4FIN-O6iF8Yvf-BEZ-hkFq.js → chunk-VR4S4FIN-O6iF8Yvf-D4HuYSu1.js} +1 -1
  22. package/dist/assets/{chunk-WYO6CB5R-B83L_z6I-zjc6vart.js → chunk-WYO6CB5R-B83L_z6I-jyLEICM4.js} +1 -1
  23. package/dist/assets/{chunk-ZGVPDNZ5-BpFv9JSP-WgpTVFz9.js → chunk-ZGVPDNZ5-BpFv9JSP-KRpVzR1u.js} +1 -1
  24. package/dist/assets/classDiagram-OUVF2IWQ-BgAZMSbT-DWhW_ES9.js +1 -0
  25. package/dist/assets/classDiagram-v2-EOCWNBFH-DxHTyui1-DWhW_ES9.js +1 -0
  26. package/dist/assets/cynefin-VYW2F7L2-DqA3n9nY-nANzH9IV.js +1 -0
  27. package/dist/assets/{cynefinDiagram-TSTJHNR4-x0-0sQ15-D6l6qqRO.js → cynefinDiagram-TSTJHNR4-x0-0sQ15-DoPfg5jQ.js} +1 -1
  28. package/dist/assets/{dagre-VKFMJZFB-CQdfl-bx-BVKoii9B.js → dagre-VKFMJZFB-CQdfl-bx-D54ZCaVu.js} +1 -1
  29. package/dist/assets/{diagram-FQU43EPY-BOSB6VUb-OjDjlvVc.js → diagram-FQU43EPY-BOSB6VUb-CxiTFvd1.js} +1 -1
  30. package/dist/assets/{diagram-G47NLZAW-DLXrcXsN-TSzEtHdz.js → diagram-G47NLZAW-DLXrcXsN-VOfQzFEk.js} +1 -1
  31. package/dist/assets/{diagram-NH7WQ7WH-BMQp1rkF-6YpHLSkw.js → diagram-NH7WQ7WH-BMQp1rkF-BGSg0HaS.js} +1 -1
  32. package/dist/assets/{diagram-OA4YK3LP-D1wQ0vUj-D080UfcD.js → diagram-OA4YK3LP-D1wQ0vUj-B7GYlHCp.js} +1 -1
  33. package/dist/assets/{diagram-WEI45ONY-RR0DpF8R-DAhnbGro.js → diagram-WEI45ONY-RR0DpF8R-93NLnf0k.js} +1 -1
  34. package/dist/assets/{ebnfDiagram-CCIWWBDH-M123uVJ8-CgYjblvQ.js → ebnfDiagram-CCIWWBDH-M123uVJ8-CXl38Kef.js} +1 -1
  35. package/dist/assets/{erDiagram-Q63AITRT-BWx_-PXG-B-9YiTfM.js → erDiagram-Q63AITRT-BWx_-PXG-DqWtdM6O.js} +1 -1
  36. package/dist/assets/eventmodeling-45OFAUF4-_BVSjAXf-Br9PZCm1.js +1 -0
  37. package/dist/assets/flowDiagram-23GEKE2U-BeOc_anm-ClQvhiea.js +1 -0
  38. package/dist/assets/{ganttDiagram-NO4QXBWP-BOoJ1eTw-DpUm7W4G.js → ganttDiagram-NO4QXBWP-BOoJ1eTw-ThhuTyj5.js} +1 -1
  39. package/dist/assets/gitGraph-TEB2WS4Q-CH12KLTN-0Gr-ifNH.js +1 -0
  40. package/dist/assets/{gitGraphDiagram-IHSO6WYX-B2CJhk_G-CXhq2YaR.js → gitGraphDiagram-IHSO6WYX-B2CJhk_G-DKO6DoJ2.js} +1 -1
  41. package/dist/assets/{index-BVNLkhp4.css → index-Cx-x1P5E.css} +1 -1
  42. package/dist/assets/{index-83utxopd.js → index-Dg6RU8V5.js} +136 -136
  43. package/dist/assets/info-DKCQHKI2-Cbw3mbiK-BIv29fvf.js +1 -0
  44. package/dist/assets/{infoDiagram-FWYZ7A6U-Mp1X3pBP-BH6ylmwo.js → infoDiagram-FWYZ7A6U-Mp1X3pBP-BpLqQ7Yz.js} +1 -1
  45. package/dist/assets/{ishikawaDiagram-FXEZZL3T-BNG7tkJu-DKlrUTwv.js → ishikawaDiagram-FXEZZL3T-BNG7tkJu-D76erfcP.js} +1 -1
  46. package/dist/assets/{journeyDiagram-5HDEW3XC-Dbp_hY9X-B0zuSRxn.js → journeyDiagram-5HDEW3XC-Dbp_hY9X-BtWgcPwA.js} +1 -1
  47. package/dist/assets/{kanban-definition-HUTT4EX6-DSTc5u3q-B2UMHQ_t.js → kanban-definition-HUTT4EX6-DSTc5u3q-DpY0J3ph.js} +1 -1
  48. package/dist/assets/{line-B1wBwzrY-NlyrzQ8H.js → line-B1wBwzrY-6XZN3L00.js} +1 -1
  49. package/dist/assets/{marp-Ak2po4xM.js → marp-BYVfOe6c.js} +1 -1
  50. package/dist/assets/{mermaid-parser.core-DC7NPJ_M-uogn_ZQO.js → mermaid-parser.core-DC7NPJ_M-BH7fQ3Po.js} +2 -2
  51. package/dist/assets/{mermaid.core-DZM3Ha-E-CTwQuxp4.js → mermaid.core-DZM3Ha-E-TR9Vi9Ov.js} +3 -3
  52. package/dist/assets/{mindmap-definition-LN4V7U3C-DYtgcMsY-CF8BKsai.js → mindmap-definition-LN4V7U3C-DYtgcMsY-TIlBXoFG.js} +1 -1
  53. package/dist/assets/packet-7NZHBO7P-lwb58iYx-BebcYw8w.js +1 -0
  54. package/dist/assets/{pegDiagram-2B236MQR-C43eIpKM-Byur3AI9.js → pegDiagram-2B236MQR-C43eIpKM-CnEZRhUI.js} +1 -1
  55. package/dist/assets/pie-RZYD4A2V-B1UWb4Gu-B_SGI-uO.js +1 -0
  56. package/dist/assets/{pieDiagram-ENE6RG2P-BkTqgJyR-LmzmCqEK.js → pieDiagram-ENE6RG2P-BkTqgJyR-BqUsLDgi.js} +1 -1
  57. package/dist/assets/{quadrantDiagram-ABIIQ3AL-Bm1Zjm45-CvxrZG72.js → quadrantDiagram-ABIIQ3AL-Bm1Zjm45-DQZ1durk.js} +1 -1
  58. package/dist/assets/radar-I7S5WNFK-7CKcb_l--DFH9UZNV.js +1 -0
  59. package/dist/assets/railroad-3IZDKUUU-gCySKdnW-CKlKT7uA.js +1 -0
  60. package/dist/assets/railroad-abnf-AHOZXSZD-BophH4r--7l_WNWp1.js +1 -0
  61. package/dist/assets/railroad-ebnf-EBAXGLYW-AZNjl_Zu-BXrzi8tN.js +1 -0
  62. package/dist/assets/railroad-peg-LSFZ7HO6-BSiEEyeb-DZ4tcd4w.js +1 -0
  63. package/dist/assets/{railroadDiagram-RFXS5EU6-BkfbdeAs-Dmaz7qwx.js → railroadDiagram-RFXS5EU6-BkfbdeAs-Bf1uhi2v.js} +1 -1
  64. package/dist/assets/{requirementDiagram-TGXJPOKE-CrGTTjYg-DLd9Qy31.js → requirementDiagram-TGXJPOKE-CrGTTjYg-XcIuERzI.js} +1 -1
  65. package/dist/assets/{sankeyDiagram-HTMAVEWB-rWXPf03Z-DuYt79nd.js → sankeyDiagram-HTMAVEWB-rWXPf03Z-dKgzPRLR.js} +1 -1
  66. package/dist/assets/{sequenceDiagram-DBY2YBRQ-nkJYWO2m-CN2BTBIe.js → sequenceDiagram-DBY2YBRQ-nkJYWO2m-DHaqvhhz.js} +1 -1
  67. package/dist/assets/{stateDiagram-2N3HPSRC-T4-clK8b-CQkZXPtf.js → stateDiagram-2N3HPSRC-T4-clK8b-DNp0WIDn.js} +1 -1
  68. package/dist/assets/stateDiagram-v2-6OUMAXLB-DIp7nhRd-HMXZTvKB.js +1 -0
  69. package/dist/assets/{swimlanes-5IMT3BWC-HmQNEntu-BxSqfUwA.js → swimlanes-5IMT3BWC-HmQNEntu-BByO9ZMv.js} +1 -1
  70. package/dist/assets/swimlanesDiagram-G3AALYLV-BeoZhwg7-D7OkQPFt.js +8 -0
  71. package/dist/assets/{timeline-definition-FHXFAJF6-CNc9jSTP-XW10LDWA.js → timeline-definition-FHXFAJF6-CNc9jSTP-wIaLuUX2.js} +1 -1
  72. package/dist/assets/treeView-QDETBFTQ-nIQcG1h9-CTH2-cre.js +1 -0
  73. package/dist/assets/treemap-6X3UGDF4-BnsvC8yL-CRFOndYi.js +1 -0
  74. package/dist/assets/{vennDiagram-L72KCM5P-Dr3pTJ_0-BV8NVuqb.js → vennDiagram-L72KCM5P-Dr3pTJ_0-t6p5Ve3a.js} +1 -1
  75. package/dist/assets/wardley-OPB4EBWU-8Odxkx6V-CmqxCQpR.js +1 -0
  76. package/dist/assets/{wardleyDiagram-EHGQE667-DSFc7ZZa-CPdAgmn_.js → wardleyDiagram-EHGQE667-DSFc7ZZa-DZx0BteZ.js} +1 -1
  77. package/dist/assets/{xychartDiagram-FW5EYKEG-BP0Nn4Pp-CJCoz2E2.js → xychartDiagram-FW5EYKEG-BP0Nn4Pp-CkOJjlbN.js} +1 -1
  78. package/dist/index.html +2 -2
  79. package/package.json +1 -1
  80. package/server/activity-hook.spec.ts +37 -0
  81. package/server/activity-hook.ts +28 -0
  82. package/server/activity-state.spec.ts +55 -0
  83. package/server/activity-state.ts +46 -0
  84. package/server/app-config.spec.ts +71 -3
  85. package/server/app-config.ts +39 -2
  86. package/server/config-routes.ts +25 -18
  87. package/server/config-schema.ts +13 -1
  88. package/server/dir-config.spec.ts +2 -2
  89. package/server/dir-config.ts +3 -2
  90. package/server/header-config.spec.ts +45 -6
  91. package/server/header-config.ts +29 -7
  92. package/server/header-context.ts +1 -0
  93. package/server/header-resolve.spec.ts +48 -1
  94. package/server/header-resolve.ts +18 -3
  95. package/server/header-title.spec.ts +26 -0
  96. package/server/header-title.ts +17 -0
  97. package/server/index.ts +221 -42
  98. package/server/pick-file.spec.ts +19 -0
  99. package/server/pick-file.ts +46 -38
  100. package/server/pr-for-branch.spec.ts +50 -0
  101. package/server/pr-for-branch.ts +58 -0
  102. package/server/skills/mulmoterminal-config/SKILL.md +10 -2
  103. package/server/transcript.spec.ts +43 -0
  104. package/server/transcript.ts +16 -0
  105. package/server/web-push.spec.ts +37 -0
  106. package/server/web-push.ts +57 -0
  107. package/dist/assets/architecture-TIHT7OUA-CYMWc3UT-QInGApkV.js +0 -1
  108. package/dist/assets/channel-Di5rtkx0-DHqL817r.js +0 -1
  109. package/dist/assets/classDiagram-OUVF2IWQ-BgAZMSbT-VLjGJAJO.js +0 -1
  110. package/dist/assets/classDiagram-v2-EOCWNBFH-DxHTyui1-VLjGJAJO.js +0 -1
  111. package/dist/assets/cynefin-VYW2F7L2-DqA3n9nY-DeDS-5by.js +0 -1
  112. package/dist/assets/eventmodeling-45OFAUF4-_BVSjAXf-CF7wgGuX.js +0 -1
  113. package/dist/assets/flowDiagram-23GEKE2U-BeOc_anm-CfWH0Tbu.js +0 -1
  114. package/dist/assets/gitGraph-TEB2WS4Q-CH12KLTN-C2PnVeMX.js +0 -1
  115. package/dist/assets/info-DKCQHKI2-Cbw3mbiK-CLk5uJ5t.js +0 -1
  116. package/dist/assets/packet-7NZHBO7P-lwb58iYx-3tUu63Qj.js +0 -1
  117. package/dist/assets/pie-RZYD4A2V-B1UWb4Gu-DiT3qAWP.js +0 -1
  118. package/dist/assets/radar-I7S5WNFK-7CKcb_l--C_JwXiDu.js +0 -1
  119. package/dist/assets/railroad-3IZDKUUU-gCySKdnW-C30t7Eqd.js +0 -1
  120. package/dist/assets/railroad-abnf-AHOZXSZD-BophH4r--CGjr3zMY.js +0 -1
  121. package/dist/assets/railroad-ebnf-EBAXGLYW-AZNjl_Zu-BLsfAiEh.js +0 -1
  122. package/dist/assets/railroad-peg-LSFZ7HO6-BSiEEyeb-DpWrKO8r.js +0 -1
  123. package/dist/assets/stateDiagram-v2-6OUMAXLB-DIp7nhRd-TfY_5w1P.js +0 -1
  124. package/dist/assets/swimlanesDiagram-G3AALYLV-BeoZhwg7-BXdsLx4g.js +0 -8
  125. package/dist/assets/treeView-QDETBFTQ-nIQcG1h9-BbYxhc6_.js +0 -1
  126. package/dist/assets/treemap-6X3UGDF4-BnsvC8yL-C4IdHouD.js +0 -1
  127. package/dist/assets/wardley-OPB4EBWU-8Odxkx6V-BlJFib5h.js +0 -1
package/README.md CHANGED
@@ -300,6 +300,24 @@ The Settings modal (⚙) persists per-user UI choices to `~/.mulmoterminal/confi
300
300
  | `prRepos` | `owner/repo` entries whose open PRs/issues the cross-repo **PRs & Issues** view aggregates (via your `gh` login). |
301
301
  | `launchers` | `{ label, command }` entries offered in a grid cell's launcher besides Claude — a plain shell, `codex`, any interactive command. |
302
302
  | `userMcpServers` | `{ id, url }` HTTP MCP servers merged into the **single-view** Claude session's `--mcp-config` (a `localhost` URL is reached over `host.docker.internal` in the Docker sandbox). Takes effect on the next session. |
303
+ | `buttons` | Header action buttons — see [Header buttons](#header-buttons). Omit to keep the defaults; set to replace them. |
304
+ | `chips` | Header info chips. Omit to keep the default set; `[]` hides all built-ins. |
305
+ | `pushEnabled` | `true` to send a **Web Push** to your registered devices when a background task finishes. Off by default; only sends while the **RemoteHost** channel is connected (see below). |
306
+
307
+ #### Header buttons
308
+
309
+ Each terminal header shows configurable **action buttons**. Omitting `buttons` (globally or per-dir)
310
+ keeps the built-in defaults — a **file-path picker** (📎) and an **OS file-manager reveal** (📂).
311
+ Setting `buttons` (at either level) **replaces** the defaults with your list, so you can drop, reorder,
312
+ or swap them — e.g. add the in-app **📁 file explorer** with `"open": { "files": "${dir}" }`.
313
+ A button has an `id`, `label`, and a `run` of `"shell"` (run a command), `"input"` (send text to the
314
+ agent), or `"open"`. An `open` button targets one of `url` / `reveal` (OS file manager) / `files`
315
+ (in-app explorer) / `view` (a built-in overlay) / `terminal` (a dir → a new cell running `$SHELL`,
316
+ opened next to the current one) / `pr: true` (open the current branch's PR — the button is hidden when
317
+ there's no open PR) / `pickFile: true` (OS file dialog → insert the path).
318
+ `${dir}`, `${branch}`, `${repo}`, … substitute live context, and `when` (e.g. `"isGitRepo"`) gates
319
+ visibility. The `/mulmoterminal-config` skill writes a valid config interactively; per-dir buttons
320
+ merge over the global ones by `id`.
303
321
 
304
322
  **Attention sound.** The default chime is generated with the Web Audio API — **no
305
323
  audio file is bundled**, so the npm package stays light and has no media-licensing
@@ -308,6 +326,14 @@ chime) or in the config file; the server streams that file at `GET /api/sound` a
308
326
  the client decodes it (falling back to the chime if it's missing or not audio). It's
309
327
  your own local file referenced by absolute path — nothing is added to the package.
310
328
 
329
+ **Web Push on task finish.** Enable `pushEnabled` in Settings to have the server send a
330
+ push (title = the project dir, body = the last prompt) to your registered devices each
331
+ time a **background** task finishes — the same signal as the attention chime, but for the
332
+ panes you're not watching. Delivery is handled by the separate `mulmoserver` `sendPush`
333
+ Cloud Function; MulmoTerminal only makes the call, and only while the **RemoteHost**
334
+ channel is connected (its Google sign-in supplies the notification auth). With RemoteHost
335
+ disconnected, or with no device registered, the toggle is a no-op.
336
+
311
337
  ### Per-directory settings (`<project>/.mulmoterminal.json`)
312
338
 
313
339
  Drop a `.mulmoterminal.json` in a project directory to give terminals opened **in
@@ -381,7 +407,9 @@ In dev, open the Vite URL; its proxy forwards `/ws`, `/ws/pubsub`, and `/api` to
381
407
 
382
408
  ## Scripts (Run menu)
383
409
 
384
- An empty grid cell's launcher (the directory picker) offers a **run a script** row
410
+ An empty grid cell's launcher sets the **Working directory** by typing, by a preset
411
+ chip, or with the **📁 folder button** (a native OS folder dialog). It also offers a
412
+ **run a script** row
385
413
  that launches project scripts (a dev server, tests, a build, …) **in that cell, in
386
414
  the directory the cell is pointed at** — so a whole workflow lives in one window
387
415
  alongside the Claude sessions. Scripts are **per-directory**: the cell reads the
@@ -444,7 +472,8 @@ the last 32 KB of output. See
444
472
 
445
473
  ## Files view (browse & edit)
446
474
 
447
- Every terminal header has a **📁 Files** button that opens a full-screen file explorer
475
+ A terminal header can carry a **📁 Files** button add it as a [header button](#header-buttons)
476
+ (`"open": { "files": "${dir}" }`) — that opens a full-screen file explorer
448
477
  rooted at **that terminal's project directory** — so after Claude says "wrote `foo.md`"
449
478
  you can jump straight there to read or edit it. The left pane is a lazy-loaded directory
450
479
  tree; clicking a file opens it in a **CodeMirror** editor (Markdown / JS-TS / JSON
@@ -737,7 +766,7 @@ same-origin-guarded.
737
766
  | `POST /api/transcribe`(`/model`…) | Voice-input transcription (Whisper, macOS). |
738
767
  | `POST /api/translation` | Runtime UI-string translation. |
739
768
  | `GET /api/remote-host/status` · `POST /api/remote-host/{connect,disconnect}` | Companion phone-client link. |
740
- | `POST /api/open-dir` · `POST /api/pick-file` | Reveal a dir in Finder/Explorer; OS file-picker → path. |
769
+ | `POST /api/open-dir` · `POST /api/pick-file` | Reveal a dir in Finder/Explorer; OS file-picker → path (`{ directory: true }` opens the folder picker — used by the launcher's Working-directory 📁 button). |
741
770
 
742
771
  ### WebSocket: `/ws` (terminal)
743
772
 
@@ -1 +1 @@
1
- import{n as e}from"./chunk-Y2CYZVJY-Bdt8pFDJ-DsF7k-Jl.js";import{f as t}from"./src-Brzfja-q-ch1VcTiG.js";import{_ as n,g as r}from"./mermaid-parser.core-DC7NPJ_M-uogn_ZQO.js";import"./chunk-WYO6CB5R-B83L_z6I-zjc6vart.js";import"./chunk-VAUOI2AC-DrcykVNK-UQ8qJq-D.js";import{n as i,r as a,t as o}from"./chunk-MOJQB5TN-CqxshQHA-pSbnAJ7U.js";import{t as s}from"./chunk-JWPE2WC7-BQ3zXr2k-DSd3Ct95.js";var c=r().RailroadAbnf.parser.LangiumParser,l=e(e=>{let t=e.alternatives.map(u);return t.length===1?t[0]:{type:`choice`,alternatives:t}},`transformAlternation`),u=e(e=>{let t=e.elements.map(f);return t.length===1?t[0]:{type:`sequence`,elements:t}},`transformConcatenation`),d=e(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=e(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=e(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=e(e=>({name:e.name,definition:l(e.definition)}),`transformRule`),h=e(e=>{s(e,a),e.title&&a.setTitle(e.title),e.rules.map(e=>a.addRule(m(e)))},`populateDb`),g={parser:{parse:e(e=>{a.clear(),t.debug(`[ABNF Parser] Starting Langium parse`);let r=c.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new n(r);let i=r.value;t.debug(`[ABNF Parser] Parsed rules:`,i.rules.length),h(i),t.debug(`[ABNF Parser] Parse complete`)},`parse`),parser:{yy:a}},db:a,renderer:o,styles:i};export{g as diagram};
1
+ import{n as e}from"./chunk-Y2CYZVJY-Bdt8pFDJ-DsF7k-Jl.js";import{f as t}from"./src-Brzfja-q-ch1VcTiG.js";import{_ as n,g as r}from"./mermaid-parser.core-DC7NPJ_M-BH7fQ3Po.js";import"./chunk-WYO6CB5R-B83L_z6I-jyLEICM4.js";import"./chunk-VAUOI2AC-DrcykVNK-CZQTkFkc.js";import{n as i,r as a,t as o}from"./chunk-MOJQB5TN-CqxshQHA-BOKLvtWS.js";import{t as s}from"./chunk-JWPE2WC7-BQ3zXr2k-DSd3Ct95.js";var c=r().RailroadAbnf.parser.LangiumParser,l=e(e=>{let t=e.alternatives.map(u);return t.length===1?t[0]:{type:`choice`,alternatives:t}},`transformAlternation`),u=e(e=>{let t=e.elements.map(f);return t.length===1?t[0]:{type:`sequence`,elements:t}},`transformConcatenation`),d=e(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=e(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=e(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=e(e=>({name:e.name,definition:l(e.definition)}),`transformRule`),h=e(e=>{s(e,a),e.title&&a.setTitle(e.title),e.rules.map(e=>a.addRule(m(e)))},`populateDb`),g={parser:{parse:e(e=>{a.clear(),t.debug(`[ABNF Parser] Starting Langium parse`);let r=c.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new n(r);let i=r.value;t.debug(`[ABNF Parser] Parsed rules:`,i.rules.length),h(i),t.debug(`[ABNF Parser] Parse complete`)},`parse`),parser:{yy:a}},db:a,renderer:o,styles:i};export{g as diagram};
@@ -0,0 +1 @@
1
+ import{f as e}from"./mermaid-parser.core-DC7NPJ_M-BH7fQ3Po.js";export{e as createArchitectureServices};