mulmoterminal 4.5.0 → 4.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -2
- package/bin/mulmoterminal.js +40 -1
- package/dist/assets/{abnfDiagram-VRR7QNED-WSmThe6b-DPaEh_gN.js → abnfDiagram-VRR7QNED-WSmThe6b-BmcQe1XL.js} +1 -1
- package/dist/assets/architecture-TIHT7OUA-Cqhmai3f-BSJQ3ILE.js +1 -0
- package/dist/assets/{architectureDiagram-ZJ3FMSHR-Tj3i7Oow-CUD1E04p.js → architectureDiagram-ZJ3FMSHR-Tj3i7Oow-bjkL7mcs.js} +1 -1
- package/dist/assets/{blockDiagram-677ZJIJ3-c-hNYBhI-oMocpv9s.js → blockDiagram-677ZJIJ3-c-hNYBhI-BRXCKJUM.js} +1 -1
- package/dist/assets/{c4Diagram-LMCZKHZV-WIGVajf5-DCS5Kt2M.js → c4Diagram-LMCZKHZV-WIGVajf5-C5Xls6HX.js} +1 -1
- package/dist/assets/channel-OqG5cGJi-B30xONXZ.js +1 -0
- package/dist/assets/{chunk-32BRIVSS-CtSq3QOR-D6jNTV1x.js → chunk-32BRIVSS-CtSq3QOR-DK6LIJGr.js} +1 -1
- package/dist/assets/{chunk-52WLFC77-2Up0T-6t-qOt9ZLFS.js → chunk-52WLFC77-2Up0T-6t-CJBQ51RT.js} +1 -1
- package/dist/assets/{chunk-C7G6YPKG-ivengO-7-7utsyMTv.js → chunk-C7G6YPKG-ivengO-7-B2kbM724.js} +1 -1
- package/dist/assets/{chunk-EX3LRPZG-BHoWQ6W8-6OAUxLJG.js → chunk-EX3LRPZG-BHoWQ6W8-37sgnHAN.js} +1 -1
- package/dist/assets/{chunk-FWX5IMBZ-PvRXPghr-CoUoZ066.js → chunk-FWX5IMBZ-PvRXPghr-DaUpqKtt.js} +2 -2
- package/dist/assets/{chunk-HOUHSVGY-A3_zwY4q-Z32157__.js → chunk-HOUHSVGY-A3_zwY4q-1bJ7y7Qe.js} +1 -1
- package/dist/assets/{chunk-ICXQ74PX-vzZqgurQ-4S5Kaqhr.js → chunk-ICXQ74PX-vzZqgurQ-ZHEqoby-.js} +1 -1
- package/dist/assets/{chunk-MOJQB5TN-CorQ_Pl1-BFdYgLZH.js → chunk-MOJQB5TN-CorQ_Pl1-D5leNmku.js} +1 -1
- package/dist/assets/{chunk-OGEWGWER-BVhfs7WG-EE3Qh8NO.js → chunk-OGEWGWER-BVhfs7WG-XChTqtZ9.js} +1 -1
- package/dist/assets/{chunk-PUDLZKDR-CJo7KQJ3-D1PA0tz9.js → chunk-PUDLZKDR-CJo7KQJ3-Cmsgx92D.js} +1 -1
- package/dist/assets/{chunk-Q4XR5HBZ-DLkq8ZGO-ySWBhGnM.js → chunk-Q4XR5HBZ-DLkq8ZGO-Ba0ecFh2.js} +1 -1
- package/dist/assets/{chunk-V7JOEXUC-DqefuUOb-DhSm2NyP.js → chunk-V7JOEXUC-DqefuUOb-BivTQjZV.js} +1 -1
- package/dist/assets/{chunk-VAUOI2AC-BKx35BBi-B60QprFR.js → chunk-VAUOI2AC-BKx35BBi-Dbs6oO5R.js} +1 -1
- package/dist/assets/{chunk-VR4S4FIN-DpJgr4Ur-aiw-751p.js → chunk-VR4S4FIN-DpJgr4Ur-CUM4Z2vw.js} +1 -1
- package/dist/assets/{chunk-WYO6CB5R-nS6zX9ct-DWK9p9qg.js → chunk-WYO6CB5R-nS6zX9ct-DRBBjGWu.js} +1 -1
- package/dist/assets/{chunk-ZGVPDNZ5-DNtiHxpJ-cQBGQXJU.js → chunk-ZGVPDNZ5-DNtiHxpJ-5cVd7QTd.js} +1 -1
- package/dist/assets/classDiagram-OUVF2IWQ-C6h0nbT3-CEdJ3UMI.js +1 -0
- package/dist/assets/classDiagram-v2-EOCWNBFH-CzsXJ_wA-CEdJ3UMI.js +1 -0
- package/dist/assets/cynefin-VYW2F7L2-DvSvuXnG-BW6kx41X.js +1 -0
- package/dist/assets/{cynefinDiagram-TSTJHNR4-969y1qZK-76_lFdlS.js → cynefinDiagram-TSTJHNR4-969y1qZK-CCqzAXh-.js} +1 -1
- package/dist/assets/{dagre-VKFMJZFB-CZfgAZFk-BIp6P02L.js → dagre-VKFMJZFB-CZfgAZFk-DPH_d74f.js} +1 -1
- package/dist/assets/{diagram-FQU43EPY-CSdnleGM-Cfb5V0UI.js → diagram-FQU43EPY-CSdnleGM-spKSc9IW.js} +1 -1
- package/dist/assets/{diagram-G47NLZAW-DKYe-Mwx-DqsHnBaF.js → diagram-G47NLZAW-DKYe-Mwx-DybtCNR4.js} +1 -1
- package/dist/assets/{diagram-NH7WQ7WH-DMasKpwa-CNiFWceN.js → diagram-NH7WQ7WH-DMasKpwa-BCH0qp05.js} +1 -1
- package/dist/assets/{diagram-OA4YK3LP-CSyc0BDR-OiAwSIjr.js → diagram-OA4YK3LP-CSyc0BDR-T46FP-Fw.js} +1 -1
- package/dist/assets/{diagram-WEI45ONY-CcJW2fNK-TQf1z8cW.js → diagram-WEI45ONY-CcJW2fNK-D35VJLC8.js} +1 -1
- package/dist/assets/{dist-9wGqhibT.js → dist-BKvAGUnN.js} +1 -1
- package/dist/assets/{dist-BR8nhjbg.js → dist-BwYGyrSJ.js} +1 -1
- package/dist/assets/{dist-BezNTABu.js → dist-CpGs_bug.js} +1 -1
- package/dist/assets/{dist-RBakV0o4.js → dist-Dmmh5zR9.js} +1 -1
- package/dist/assets/{ebnfDiagram-CCIWWBDH-CeBUH2N0-B8mwuH_Q.js → ebnfDiagram-CCIWWBDH-CeBUH2N0-m1eORe2D.js} +1 -1
- package/dist/assets/{erDiagram-Q63AITRT-1OOp34oV-4zV7QoN3.js → erDiagram-Q63AITRT-1OOp34oV-BgXJIPds.js} +1 -1
- package/dist/assets/eventmodeling-45OFAUF4-jdctDg0T-DiTH6TbJ.js +1 -0
- package/dist/assets/flowDiagram-23GEKE2U-DK0InIny-4Udt9YCi.js +1 -0
- package/dist/assets/{ganttDiagram-NO4QXBWP-DQT88dUZ-DmKfWKVt.js → ganttDiagram-NO4QXBWP-DQT88dUZ-DZpddx9o.js} +1 -1
- package/dist/assets/gitGraph-TEB2WS4Q-C4cKwl5j-D1JyoAdx.js +1 -0
- package/dist/assets/{gitGraphDiagram-IHSO6WYX-CeZGS4qi-CPiO74HP.js → gitGraphDiagram-IHSO6WYX-CeZGS4qi-Do2IRAV_.js} +1 -1
- package/dist/assets/index-B-HvyXSL.css +1 -0
- package/dist/assets/{index-B7qYhdzG.js → index-cTxEHcQq.js} +190 -190
- package/dist/assets/info-DKCQHKI2-DPUCBYWS-D6AOsp-i.js +1 -0
- package/dist/assets/{infoDiagram-FWYZ7A6U-BDt8lBTy-BJdFxf7J.js → infoDiagram-FWYZ7A6U-BDt8lBTy-C6oCIj1p.js} +1 -1
- package/dist/assets/{ishikawaDiagram-FXEZZL3T-DOHYs_AA-DN4-dfNt.js → ishikawaDiagram-FXEZZL3T-DOHYs_AA-BaNL3U7o.js} +1 -1
- package/dist/assets/{journeyDiagram-5HDEW3XC-B33IW9yy-D46iXC-G.js → journeyDiagram-5HDEW3XC-B33IW9yy-B34QvuAn.js} +1 -1
- package/dist/assets/{kanban-definition-HUTT4EX6-Bkdm46eX-DaJbuRjn.js → kanban-definition-HUTT4EX6-Bkdm46eX-DTFDSi-q.js} +1 -1
- package/dist/assets/{lib-BD8LgZAH.js → lib-B_JkwnLc.js} +1 -1
- package/dist/assets/{line-Dy_Qlcgo-DWmsY6xO.js → line-Dy_Qlcgo-BvVwixna.js} +1 -1
- package/dist/assets/{marp-CwNmXt5E.js → marp-CJ77SRyX.js} +1 -1
- package/dist/assets/{mermaid-parser.core-C1baW7NG-Bt8E3kO2.js → mermaid-parser.core-C1baW7NG-Dj6SGVcg.js} +2 -2
- package/dist/assets/{mermaid.core-C09q4TmN-CdpmD79K.js → mermaid.core-C09q4TmN-CQr7RToO.js} +3 -3
- package/dist/assets/{mindmap-definition-LN4V7U3C-bfYIhPQ0-C4RQ97Ls.js → mindmap-definition-LN4V7U3C-bfYIhPQ0-NMXPL0-o.js} +1 -1
- package/dist/assets/packet-7NZHBO7P-CC7His0F-BKbhzjd3.js +1 -0
- package/dist/assets/{pegDiagram-2B236MQR-CZQOKUMC-BGzTvU6v.js → pegDiagram-2B236MQR-CZQOKUMC-Bt2XR6XH.js} +1 -1
- package/dist/assets/pie-RZYD4A2V-CCrcq2sL-Cfoiz5iJ.js +1 -0
- package/dist/assets/{pieDiagram-ENE6RG2P-DiVKPdHE-XKldq1E5.js → pieDiagram-ENE6RG2P-DiVKPdHE-omZF6wmG.js} +1 -1
- package/dist/assets/{quadrantDiagram-ABIIQ3AL-CbPY3kXI-C5r0a9Sf.js → quadrantDiagram-ABIIQ3AL-CbPY3kXI-Ht-Z8Sgk.js} +1 -1
- package/dist/assets/radar-I7S5WNFK-C5TUrpHf-jAv7AZpj.js +1 -0
- package/dist/assets/railroad-3IZDKUUU-CGuuFEd8-CFDyeEw0.js +1 -0
- package/dist/assets/railroad-abnf-AHOZXSZD-DuoCSFZY-fEpM8K-S.js +1 -0
- package/dist/assets/railroad-ebnf-EBAXGLYW-ig-DG9e_-Cx72Vzdn.js +1 -0
- package/dist/assets/railroad-peg-LSFZ7HO6-BkBgpyvu-CKKHVc4W.js +1 -0
- package/dist/assets/{railroadDiagram-RFXS5EU6-CFRaQzr0-YImSnBwl.js → railroadDiagram-RFXS5EU6-CFRaQzr0-Kv59_1Cv.js} +1 -1
- package/dist/assets/{requirementDiagram-TGXJPOKE-BiIDduje-CLDWdQ6G.js → requirementDiagram-TGXJPOKE-BiIDduje-BsRM6WGB.js} +1 -1
- package/dist/assets/{sankeyDiagram-HTMAVEWB-DcK87A5Y-CzQDWlB1.js → sankeyDiagram-HTMAVEWB-DcK87A5Y-CguIeyOy.js} +1 -1
- package/dist/assets/{sequenceDiagram-DBY2YBRQ-DgEQYcvc-Cql9GjHP.js → sequenceDiagram-DBY2YBRQ-DgEQYcvc-BnGAucBY.js} +1 -1
- package/dist/assets/{stateDiagram-2N3HPSRC-Bg7EXtW2-CN3bsM_d.js → stateDiagram-2N3HPSRC-Bg7EXtW2-CRiZWlcc.js} +1 -1
- package/dist/assets/stateDiagram-v2-6OUMAXLB-BjhArXP_-AXmUyvh8.js +1 -0
- package/dist/assets/{swimlanes-5IMT3BWC-CKORDKr0-cK0-DqfM.js → swimlanes-5IMT3BWC-CKORDKr0-xywRB2SF.js} +1 -1
- package/dist/assets/swimlanesDiagram-G3AALYLV-CyvIfl1o-Bwyhyqg5.js +8 -0
- package/dist/assets/{timeline-definition-FHXFAJF6-BM3Iky2r-C6aXUCxm.js → timeline-definition-FHXFAJF6-BM3Iky2r-BI3SQ-2t.js} +1 -1
- package/dist/assets/treeView-QDETBFTQ-CqfT0I1z-BeSX09kM.js +1 -0
- package/dist/assets/treemap-6X3UGDF4-CiJkiGWo-CnEhaOCI.js +1 -0
- package/dist/assets/{vennDiagram-L72KCM5P-VNmAhEFP-T681nWRy.js → vennDiagram-L72KCM5P-VNmAhEFP-gQY1yv0O.js} +1 -1
- package/dist/assets/wardley-OPB4EBWU-D1tuVHAV-D845peIK.js +1 -0
- package/dist/assets/{wardleyDiagram-EHGQE667-BkHQpyFm-D-AfB-NA.js → wardleyDiagram-EHGQE667-BkHQpyFm-DWf6AbGr.js} +1 -1
- package/dist/assets/{xychartDiagram-FW5EYKEG-Yz-8aLqK-CNzoNtQE.js → xychartDiagram-FW5EYKEG-Yz-8aLqK-Bmt5kHk3.js} +1 -1
- package/dist/index.html +2 -2
- package/package.json +1 -1
- package/server/config/app-config.ts +39 -1
- package/server/config/dir-icon-detect.ts +7 -2
- package/server/files/open-dir.ts +53 -15
- package/server/files/pick-file.ts +186 -31
- package/server/files/ps-quote.ts +7 -0
- package/server/files/win-folder-dialog.ts +25 -4
- package/server/files/wsl.ts +49 -0
- package/server/skills/mulmoterminal-model/SKILL.md +15 -3
- package/dist/assets/architecture-TIHT7OUA-Cqhmai3f-DCOr0rgu.js +0 -1
- package/dist/assets/channel-OqG5cGJi-3dRrNd2x.js +0 -1
- package/dist/assets/classDiagram-OUVF2IWQ-C6h0nbT3-he2Qx8Zy.js +0 -1
- package/dist/assets/classDiagram-v2-EOCWNBFH-CzsXJ_wA-he2Qx8Zy.js +0 -1
- package/dist/assets/cynefin-VYW2F7L2-DvSvuXnG-BM05JO9d.js +0 -1
- package/dist/assets/eventmodeling-45OFAUF4-jdctDg0T-D7yLQEKX.js +0 -1
- package/dist/assets/flowDiagram-23GEKE2U-DK0InIny-XdeCwjZj.js +0 -1
- package/dist/assets/gitGraph-TEB2WS4Q-C4cKwl5j-CNGA-Dxh.js +0 -1
- package/dist/assets/index-DnimPwKc.css +0 -1
- package/dist/assets/info-DKCQHKI2-DPUCBYWS-DggNvHPl.js +0 -1
- package/dist/assets/packet-7NZHBO7P-CC7His0F-DIVJjy2R.js +0 -1
- package/dist/assets/pie-RZYD4A2V-CCrcq2sL-DbntX_Y9.js +0 -1
- package/dist/assets/radar-I7S5WNFK-C5TUrpHf-BjpTp9D5.js +0 -1
- package/dist/assets/railroad-3IZDKUUU-CGuuFEd8-BgrykldZ.js +0 -1
- package/dist/assets/railroad-abnf-AHOZXSZD-DuoCSFZY-4ECSfnJj.js +0 -1
- package/dist/assets/railroad-ebnf-EBAXGLYW-ig-DG9e_-DIGuLSDA.js +0 -1
- package/dist/assets/railroad-peg-LSFZ7HO6-BkBgpyvu-WBfEJm_q.js +0 -1
- package/dist/assets/stateDiagram-v2-6OUMAXLB-BjhArXP_-PWEWNNBX.js +0 -1
- package/dist/assets/swimlanesDiagram-G3AALYLV-CyvIfl1o-DRhfZv9k.js +0 -8
- package/dist/assets/treeView-QDETBFTQ-CqfT0I1z-C1kvz6Pn.js +0 -1
- package/dist/assets/treemap-6X3UGDF4-CiJkiGWo-CWCrFJlO.js +0 -1
- package/dist/assets/wardley-OPB4EBWU-D1tuVHAV-B-2c3CsH.js +0 -1
package/README.md
CHANGED
|
@@ -227,6 +227,7 @@ Needs **Node ≥ 22.9**, plus these CLIs on your `PATH`:
|
|
|
227
227
|
| Optional | `codex` | [Codex sessions](#agents-claude--codex) in a cell, alongside Claude | `npm i -g @openai/codex` |
|
|
228
228
|
| Optional | `ffmpeg` | video rendering from the [mulmo-script panel](#wiki-collections--the-gui-panel) (its plugin ships enabled) | `brew install ffmpeg` · `sudo apt install ffmpeg` · `sudo dnf install ffmpeg` |
|
|
229
229
|
| Optional | `ollama` | [`claude-ollama`](https://receptron.github.io/mulmoterminal/guide/en/claude-ollama.html) — Claude Code against a fully local model | [ollama.com/download](https://ollama.com/download) |
|
|
230
|
+
| Linux only | a file dialog | the **Choose a folder / Insert a file path** buttons, which open an OS dialog on the machine the server runs on. macOS and Windows have one built in; **WSL** uses the Windows one over interop and needs nothing installed. A Linux desktop needs one of these — without any, the buttons say so and you type the path instead (#1447) | `sudo apt install zenity` · `sudo dnf install zenity` · `kdialog`, `qarma` and `yad` also work |
|
|
230
231
|
|
|
231
232
|
The server starts without any of the non-required rows; you just lose that row's feature,
|
|
232
233
|
and the header/panel for it says so. `git` and `gh` are marked required because losing them
|
|
@@ -1541,7 +1542,7 @@ same-origin-guarded.
|
|
|
1541
1542
|
| `POST /api/transcribe`(`/model`…) | Voice-input transcription (Whisper, macOS). |
|
|
1542
1543
|
| `POST /api/translation` | Runtime UI-string translation. |
|
|
1543
1544
|
| `GET /api/remote-host/status` · `POST /api/remote-host/{connect,disconnect}` | Companion phone-client link. Each response carries the command channel's `health` (`online` / `reconnecting` / `offline`, plus the last listener error), so the toolbar shows a dropped channel instead of the last state it happened to fetch. |
|
|
1544
|
-
| `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). |
|
|
1545
|
+
| `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). Both run on the SERVER's machine, and both answer **500 with a reason** when it has nothing to open a dialog with, rather than a silent nothing (#1447). The picker tries every dialog the host might have: macOS `osascript`, Windows PowerShell, **WSL** the Windows dialog over interop (`powershell.exe` + `wslpath`), Linux `zenity` → `kdialog` → `qarma` → `yad`. A user cancel is a 200 with `paths: []`. |
|
|
1545
1546
|
| `POST /api/session/:id/drop` | A dropped file whose path the browser withheld. **Raw bytes**, not JSON, under the file's own content type (base64 in JSON would cap real files near 18 MB, and a dropped `.json` would be parsed as a document); the original name rides percent-encoded in `x-drop-filename` and is used for its **suffix only**. Answers `{ path }` — absolute, inside the private per-session directory the session was granted at launch. 110 MiB cap; 404 for a session this server isn't running. |
|
|
1546
1547
|
|
|
1547
1548
|
The phone itself uses **none** of these routes — it reaches the host over Firestore command
|
|
@@ -1857,7 +1858,8 @@ server/
|
|
|
1857
1858
|
git/ git, GitHub (gh) and GitLab (glab) + worktrees: git-status.ts, gitRemote.ts,
|
|
1858
1859
|
gh.ts, prs.ts, issues.ts, pr-for-branch.ts, worktrees.ts, worktree-*.ts
|
|
1859
1860
|
files/ files-browse.ts (contained tree read/write), pick-file.ts,
|
|
1860
|
-
open-dir.ts,
|
|
1861
|
+
open-dir.ts, wsl.ts (interop detection + wslpath),
|
|
1862
|
+
scripts.ts (Run-menu script.json loader)
|
|
1861
1863
|
infra/ process/transport/misc: tmux.ts, tmux-routes.ts,
|
|
1862
1864
|
pubsub.ts (socket.io /ws/pubsub), spa-fallback.ts, host-tools.ts,
|
|
1863
1865
|
plugins-registry.ts, web-push.ts, install-bundled-skills.ts, accounting-tool.ts
|
package/bin/mulmoterminal.js
CHANGED
|
@@ -9,6 +9,7 @@ import { execSync, spawn } from "node:child_process";
|
|
|
9
9
|
import { existsSync, statSync } from "node:fs";
|
|
10
10
|
import { createRequire } from "node:module";
|
|
11
11
|
import { createServer } from "node:net";
|
|
12
|
+
import { release } from "node:os";
|
|
12
13
|
import { dirname, join, resolve } from "node:path";
|
|
13
14
|
import { createInterface } from "node:readline";
|
|
14
15
|
import { fileURLToPath } from "node:url";
|
|
@@ -106,6 +107,40 @@ const PATH_TOOLS = [
|
|
|
106
107
|
{ cmd: "ollama", versionArg: "--version", required: false, why: "a fully local model via claude-ollama", hint: "https://ollama.com/download" },
|
|
107
108
|
];
|
|
108
109
|
|
|
110
|
+
// The variables WSL exports into a login shell, then the kernel that names itself
|
|
111
|
+
// (`…-microsoft-standard-WSL2`, `…-Microsoft` on WSL1) for the processes those variables never
|
|
112
|
+
// reach. Mirrors `isWsl()` in server/files/wsl.ts, which this file cannot import: bin runs as
|
|
113
|
+
// plain JS, the server runs through tsx. Keep the two in step.
|
|
114
|
+
function isWslHost() {
|
|
115
|
+
if (process.platform !== "linux") return false;
|
|
116
|
+
return Boolean(process.env.WSL_DISTRO_NAME || process.env.WSL_INTEROP) || /microsoft/i.test(release());
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// The file dialog is the one requirement that differs per host, so it is checked per host rather
|
|
120
|
+
// than listed above: macOS and Windows have one built in and can't be missing it. WSL reaches the
|
|
121
|
+
// Windows dialog over interop, and a Linux desktop has whichever toolkit it was installed with —
|
|
122
|
+
// zenity's absence there is what makes the picker look broken (#1447).
|
|
123
|
+
function fileDialogTool() {
|
|
124
|
+
if (process.platform === "darwin" || process.platform === "win32") return null;
|
|
125
|
+
const why = "the file / folder picker";
|
|
126
|
+
if (isWslHost()) {
|
|
127
|
+
return {
|
|
128
|
+
cmd: "powershell.exe",
|
|
129
|
+
versionArg: "-NoProfile -Command exit",
|
|
130
|
+
required: false,
|
|
131
|
+
why: `${why}, using the Windows dialog`,
|
|
132
|
+
hint: "enable WSL interop (wsl.conf), or: sudo apt install zenity",
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
return {
|
|
136
|
+
cmd: "zenity",
|
|
137
|
+
versionArg: "--version",
|
|
138
|
+
required: false,
|
|
139
|
+
why: `${why} (kdialog / qarma / yad also work)`,
|
|
140
|
+
hint: "sudo apt install zenity · sudo dnf install zenity",
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
|
|
109
144
|
function toolCheckLine({ cmd, versionArg, required, why, hint }) {
|
|
110
145
|
if (hasCommand(cmd, versionArg)) return ` ✓ ${cmd} — ${why}`;
|
|
111
146
|
const head = required ? ` ✗ ${cmd} — not found, needed for ${why}` : ` ○ ${cmd} — optional (${why})`;
|
|
@@ -139,7 +174,7 @@ async function runInit(initArgs) {
|
|
|
139
174
|
console.log(" → npm install -g @anthropic-ai/claude-code (then run `claude` and log in)");
|
|
140
175
|
}
|
|
141
176
|
|
|
142
|
-
PATH_TOOLS.forEach((tool) => console.log(toolCheckLine(tool)));
|
|
177
|
+
[...PATH_TOOLS, fileDialogTool()].filter(Boolean).forEach((tool) => console.log(toolCheckLine(tool)));
|
|
143
178
|
|
|
144
179
|
// Config half: derive working-dir presets from Claude history + write config.json.
|
|
145
180
|
console.log("");
|
|
@@ -188,9 +223,13 @@ function runGoogle(googleArgs) {
|
|
|
188
223
|
});
|
|
189
224
|
}
|
|
190
225
|
|
|
226
|
+
// WSL has no Linux browser to open (and often no `xdg-open` either), so the URL goes to the
|
|
227
|
+
// Windows shell — `start` through cmd.exe, which is what opens the user's real browser. It exits
|
|
228
|
+
// 0, unlike `explorer.exe`, so a failure here still means a failure.
|
|
191
229
|
function pickOpenCommand() {
|
|
192
230
|
if (process.platform === "darwin") return "open";
|
|
193
231
|
if (process.platform === "win32") return "start";
|
|
232
|
+
if (isWslHost()) return 'cmd.exe /c start ""';
|
|
194
233
|
return "xdg-open";
|
|
195
234
|
}
|
|
196
235
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./chunk-Y2CYZVJY-Bdt8pFDJ-DsF7k-Jl.js";import{f as t}from"./src-CvsWqFln-Tc7ZSrRz.js";import{_ as n,g as r}from"./mermaid-parser.core-C1baW7NG-
|
|
1
|
+
import{n as e}from"./chunk-Y2CYZVJY-Bdt8pFDJ-DsF7k-Jl.js";import{f as t}from"./src-CvsWqFln-Tc7ZSrRz.js";import{_ as n,g as r}from"./mermaid-parser.core-C1baW7NG-Dj6SGVcg.js";import"./chunk-WYO6CB5R-nS6zX9ct-DRBBjGWu.js";import"./chunk-VAUOI2AC-BKx35BBi-Dbs6oO5R.js";import{n as i,r as a,t as o}from"./chunk-MOJQB5TN-CorQ_Pl1-D5leNmku.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-C1baW7NG-Dj6SGVcg.js";export{e as createArchitectureServices};
|