mulmoterminal 0.9.3 → 1.1.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 (127) hide show
  1. package/README.md +83 -0
  2. package/dist/assets/{abnfDiagram-VRR7QNED-6nNByj6v-DtVCunM4.js → abnfDiagram-VRR7QNED-6nNByj6v-DGtwdUf8.js} +1 -1
  3. package/dist/assets/architecture-TIHT7OUA-CYMWc3UT-DZ-Znbwf.js +1 -0
  4. package/dist/assets/{architectureDiagram-ZJ3FMSHR-Bgnyaj_i-BlvfAzkT.js → architectureDiagram-ZJ3FMSHR-Bgnyaj_i-DGIWwfAV.js} +1 -1
  5. package/dist/assets/{blockDiagram-677ZJIJ3-DQ35o5E4-DV5mC34o.js → blockDiagram-677ZJIJ3-DQ35o5E4-27RPR53D.js} +1 -1
  6. package/dist/assets/{c4Diagram-LMCZKHZV-ClWZeiWo-gfTIn5Lw.js → c4Diagram-LMCZKHZV-ClWZeiWo-CqXuDI4P.js} +1 -1
  7. package/dist/assets/channel-Di5rtkx0-DQLsM284.js +1 -0
  8. package/dist/assets/{chunk-32BRIVSS-CCt9wtYd-DpyNEnwu.js → chunk-32BRIVSS-CCt9wtYd-CGaPp4LL.js} +1 -1
  9. package/dist/assets/{chunk-52WLFC77-FbBbR4uI-CcEzfpDT.js → chunk-52WLFC77-FbBbR4uI-UAwhz_M9.js} +1 -1
  10. package/dist/assets/{chunk-C7G6YPKG-C87hlS9c-LvEVJ1IQ.js → chunk-C7G6YPKG-C87hlS9c-DedqefeW.js} +1 -1
  11. package/dist/assets/{chunk-EX3LRPZG-BqGqMXLN-BmIsXusx.js → chunk-EX3LRPZG-BqGqMXLN-Bb1Mz7iv.js} +1 -1
  12. package/dist/assets/{chunk-FWX5IMBZ-BkbSAAuW-DQH0V6p8.js → chunk-FWX5IMBZ-BkbSAAuW-C2rOKQ0W.js} +2 -2
  13. package/dist/assets/{chunk-HOUHSVGY-Cxu0eDlh-CEUtBKYW.js → chunk-HOUHSVGY-Cxu0eDlh-Di1lybq-.js} +1 -1
  14. package/dist/assets/{chunk-ICXQ74PX-hiraF_Xj-DQR2BrrB.js → chunk-ICXQ74PX-hiraF_Xj-CDR-rXNa.js} +1 -1
  15. package/dist/assets/{chunk-MOJQB5TN-CqxshQHA-Czit54cz.js → chunk-MOJQB5TN-CqxshQHA--ID4cJe7.js} +1 -1
  16. package/dist/assets/{chunk-OGEWGWER-CjCr7ceX-Dmr6jo33.js → chunk-OGEWGWER-CjCr7ceX-D4uLoRem.js} +1 -1
  17. package/dist/assets/{chunk-PUDLZKDR-Dx6M-vz1-C8-lXFhC.js → chunk-PUDLZKDR-Dx6M-vz1-CAsrnK3r.js} +1 -1
  18. package/dist/assets/{chunk-Q4XR5HBZ-CZd-9lTB-fUkYcZLq.js → chunk-Q4XR5HBZ-CZd-9lTB-BJpdeIug.js} +1 -1
  19. package/dist/assets/{chunk-V7JOEXUC-rI0xlC_O-BVaZytO-.js → chunk-V7JOEXUC-rI0xlC_O-f1PG3F-p.js} +1 -1
  20. package/dist/assets/{chunk-VAUOI2AC-DrcykVNK-yJ-tlNfF.js → chunk-VAUOI2AC-DrcykVNK-Dj0ZfRKp.js} +1 -1
  21. package/dist/assets/{chunk-VR4S4FIN-O6iF8Yvf-CVzjJQ5n.js → chunk-VR4S4FIN-O6iF8Yvf-BUapiHE2.js} +1 -1
  22. package/dist/assets/{chunk-WYO6CB5R-B83L_z6I-TrxMG8rr.js → chunk-WYO6CB5R-B83L_z6I-DOF2nExc.js} +1 -1
  23. package/dist/assets/{chunk-ZGVPDNZ5-BpFv9JSP-BQhaQx6J.js → chunk-ZGVPDNZ5-BpFv9JSP-DYPeNPBm.js} +1 -1
  24. package/dist/assets/classDiagram-OUVF2IWQ-BgAZMSbT-DkPZzR8t.js +1 -0
  25. package/dist/assets/classDiagram-v2-EOCWNBFH-DxHTyui1-DkPZzR8t.js +1 -0
  26. package/dist/assets/cynefin-VYW2F7L2-DqA3n9nY-BYm2Z0OV.js +1 -0
  27. package/dist/assets/{cynefinDiagram-TSTJHNR4-x0-0sQ15-9Tm1QSku.js → cynefinDiagram-TSTJHNR4-x0-0sQ15-BLbtiLIJ.js} +1 -1
  28. package/dist/assets/{dagre-VKFMJZFB-CQdfl-bx-Dwg9OMoG.js → dagre-VKFMJZFB-CQdfl-bx-DZX-S9Hf.js} +1 -1
  29. package/dist/assets/{diagram-FQU43EPY-BOSB6VUb-DnnqZnYR.js → diagram-FQU43EPY-BOSB6VUb-DYrk9-JY.js} +1 -1
  30. package/dist/assets/{diagram-G47NLZAW-DLXrcXsN-f983VIfA.js → diagram-G47NLZAW-DLXrcXsN-DMUMSDYC.js} +1 -1
  31. package/dist/assets/{diagram-NH7WQ7WH-BMQp1rkF-BiLjP0he.js → diagram-NH7WQ7WH-BMQp1rkF-DZu3Xn7Y.js} +1 -1
  32. package/dist/assets/{diagram-OA4YK3LP-D1wQ0vUj-DGc7Jn0K.js → diagram-OA4YK3LP-D1wQ0vUj-Ctkx0KEb.js} +1 -1
  33. package/dist/assets/{diagram-WEI45ONY-RR0DpF8R-tDIw9Yke.js → diagram-WEI45ONY-RR0DpF8R-sQWvPoC1.js} +1 -1
  34. package/dist/assets/{ebnfDiagram-CCIWWBDH-M123uVJ8-CQ3Je5fz.js → ebnfDiagram-CCIWWBDH-M123uVJ8-edZCdQvS.js} +1 -1
  35. package/dist/assets/{erDiagram-Q63AITRT-BWx_-PXG-CezHcRTF.js → erDiagram-Q63AITRT-BWx_-PXG-CfR7msPF.js} +1 -1
  36. package/dist/assets/eventmodeling-45OFAUF4-_BVSjAXf-BkWd65jm.js +1 -0
  37. package/dist/assets/flowDiagram-23GEKE2U-BeOc_anm-S4lNiAx3.js +1 -0
  38. package/dist/assets/{ganttDiagram-NO4QXBWP-BOoJ1eTw-Clcd2QEr.js → ganttDiagram-NO4QXBWP-BOoJ1eTw-B73WAEs4.js} +1 -1
  39. package/dist/assets/gitGraph-TEB2WS4Q-CH12KLTN-TRRwXHmK.js +1 -0
  40. package/dist/assets/{gitGraphDiagram-IHSO6WYX-B2CJhk_G-B2Hd148X.js → gitGraphDiagram-IHSO6WYX-B2CJhk_G-D2IbZUGe.js} +1 -1
  41. package/dist/assets/index-SBAFcRMP.css +1 -0
  42. package/dist/assets/{index-BnjRaP6A.js → index-YA9xgtak.js} +128 -128
  43. package/dist/assets/info-DKCQHKI2-Cbw3mbiK-D8Wk2Q2C.js +1 -0
  44. package/dist/assets/{infoDiagram-FWYZ7A6U-Mp1X3pBP-734PnMyt.js → infoDiagram-FWYZ7A6U-Mp1X3pBP-C20vVR0c.js} +1 -1
  45. package/dist/assets/{ishikawaDiagram-FXEZZL3T-BNG7tkJu-Cch0pp0L.js → ishikawaDiagram-FXEZZL3T-BNG7tkJu-Dtf3IBKS.js} +1 -1
  46. package/dist/assets/{journeyDiagram-5HDEW3XC-Dbp_hY9X-Hgxk3xz1.js → journeyDiagram-5HDEW3XC-Dbp_hY9X-Z7iGrqwh.js} +1 -1
  47. package/dist/assets/{kanban-definition-HUTT4EX6-DSTc5u3q-Dj2ygtwy.js → kanban-definition-HUTT4EX6-DSTc5u3q-js-QvcYr.js} +1 -1
  48. package/dist/assets/{line-B1wBwzrY-BfNBRxmq.js → line-B1wBwzrY-yLbpFjgh.js} +1 -1
  49. package/dist/assets/{marp-CBSoH1Vt.js → marp-8yMkefyS.js} +1 -1
  50. package/dist/assets/{mermaid-parser.core-DC7NPJ_M-Cfp31QX2.js → mermaid-parser.core-DC7NPJ_M-IqvgPv4-.js} +2 -2
  51. package/dist/assets/{mermaid.core-DZM3Ha-E-s4una8R5.js → mermaid.core-DZM3Ha-E-964Ly4Uk.js} +3 -3
  52. package/dist/assets/{mindmap-definition-LN4V7U3C-DYtgcMsY-DBtBWMe3.js → mindmap-definition-LN4V7U3C-DYtgcMsY-DzFenrqW.js} +1 -1
  53. package/dist/assets/packet-7NZHBO7P-lwb58iYx-BUFe98QC.js +1 -0
  54. package/dist/assets/{pegDiagram-2B236MQR-C43eIpKM-CGl0Mxne.js → pegDiagram-2B236MQR-C43eIpKM-CPxm1zaJ.js} +1 -1
  55. package/dist/assets/pie-RZYD4A2V-B1UWb4Gu-CW09MPfM.js +1 -0
  56. package/dist/assets/{pieDiagram-ENE6RG2P-BkTqgJyR-D2B2wsUi.js → pieDiagram-ENE6RG2P-BkTqgJyR-SuQOUJv7.js} +1 -1
  57. package/dist/assets/{quadrantDiagram-ABIIQ3AL-Bm1Zjm45-OakSJ-Xf.js → quadrantDiagram-ABIIQ3AL-Bm1Zjm45-CxN3pVD1.js} +1 -1
  58. package/dist/assets/radar-I7S5WNFK-7CKcb_l--DXFUvOtM.js +1 -0
  59. package/dist/assets/railroad-3IZDKUUU-gCySKdnW-BU8WcG97.js +1 -0
  60. package/dist/assets/railroad-abnf-AHOZXSZD-BophH4r--Bsm5mLm7.js +1 -0
  61. package/dist/assets/railroad-ebnf-EBAXGLYW-AZNjl_Zu-BpVcU0NO.js +1 -0
  62. package/dist/assets/railroad-peg-LSFZ7HO6-BSiEEyeb-Da2qBADq.js +1 -0
  63. package/dist/assets/{railroadDiagram-RFXS5EU6-BkfbdeAs-BcsE6Ggi.js → railroadDiagram-RFXS5EU6-BkfbdeAs-x3RjQYe5.js} +1 -1
  64. package/dist/assets/{requirementDiagram-TGXJPOKE-CrGTTjYg-tOFWf7Wj.js → requirementDiagram-TGXJPOKE-CrGTTjYg-CZVJXiB0.js} +1 -1
  65. package/dist/assets/{sankeyDiagram-HTMAVEWB-rWXPf03Z-CynV8Q_B.js → sankeyDiagram-HTMAVEWB-rWXPf03Z-DhdvF4v5.js} +1 -1
  66. package/dist/assets/{sequenceDiagram-DBY2YBRQ-nkJYWO2m-CLgDqxDM.js → sequenceDiagram-DBY2YBRQ-nkJYWO2m-Dvi_zljF.js} +1 -1
  67. package/dist/assets/{stateDiagram-2N3HPSRC-T4-clK8b-DbWlwbcm.js → stateDiagram-2N3HPSRC-T4-clK8b-nnUFeTnz.js} +1 -1
  68. package/dist/assets/stateDiagram-v2-6OUMAXLB-DIp7nhRd-BviIi3HE.js +1 -0
  69. package/dist/assets/{swimlanes-5IMT3BWC-HmQNEntu-CULdZ2Ss.js → swimlanes-5IMT3BWC-HmQNEntu-CnEGBQ_x.js} +1 -1
  70. package/dist/assets/swimlanesDiagram-G3AALYLV-BeoZhwg7-gz62UWNS.js +8 -0
  71. package/dist/assets/{timeline-definition-FHXFAJF6-CNc9jSTP-DmFMY1Mv.js → timeline-definition-FHXFAJF6-CNc9jSTP-DzXY5BW4.js} +1 -1
  72. package/dist/assets/treeView-QDETBFTQ-nIQcG1h9-DfpLaR6K.js +1 -0
  73. package/dist/assets/treemap-6X3UGDF4-BnsvC8yL-76EFh-rZ.js +1 -0
  74. package/dist/assets/{vennDiagram-L72KCM5P-Dr3pTJ_0-BmBHfE4y.js → vennDiagram-L72KCM5P-Dr3pTJ_0-Cz_J7qhF.js} +1 -1
  75. package/dist/assets/wardley-OPB4EBWU-8Odxkx6V-D573z6BH.js +1 -0
  76. package/dist/assets/{wardleyDiagram-EHGQE667-DSFc7ZZa-DWvD9JbG.js → wardleyDiagram-EHGQE667-DSFc7ZZa-dN8C2khV.js} +1 -1
  77. package/dist/assets/{xychartDiagram-FW5EYKEG-BP0Nn4Pp-D2cjwNtU.js → xychartDiagram-FW5EYKEG-BP0Nn4Pp-BhdsqgjF.js} +1 -1
  78. package/dist/index.html +2 -2
  79. package/package.json +2 -1
  80. package/server/activity-hook.spec.ts +16 -1
  81. package/server/activity-hook.ts +9 -0
  82. package/server/app-config.spec.ts +40 -1
  83. package/server/app-config.ts +27 -0
  84. package/server/backends/remoteHost/skills.spec.ts +80 -1
  85. package/server/backends/remoteHost/skills.ts +78 -25
  86. package/server/backends/worklog.spec.ts +49 -0
  87. package/server/backends/worklog.ts +75 -0
  88. package/server/codex-skills.ts +4 -1
  89. package/server/config-routes.ts +8 -0
  90. package/server/config-schema.spec.ts +9 -1
  91. package/server/config-schema.ts +15 -0
  92. package/server/dir-config.spec.ts +15 -0
  93. package/server/dir-config.ts +15 -1
  94. package/server/file-cache.spec.ts +48 -0
  95. package/server/file-cache.ts +44 -0
  96. package/server/index.ts +113 -26
  97. package/server/skills/mulmoterminal-config/SKILL.md +12 -0
  98. package/server/tmux-routes.spec.ts +120 -0
  99. package/server/tmux-routes.ts +46 -0
  100. package/server/tmux.spec.ts +17 -1
  101. package/server/tmux.ts +13 -0
  102. package/server/transcript.spec.ts +45 -0
  103. package/server/transcript.ts +30 -19
  104. package/server/web-push.spec.ts +6 -28
  105. package/server/web-push.ts +6 -54
  106. package/dist/assets/architecture-TIHT7OUA-CYMWc3UT-DwTylFBi.js +0 -1
  107. package/dist/assets/channel-Di5rtkx0-DkEgk-pd.js +0 -1
  108. package/dist/assets/classDiagram-OUVF2IWQ-BgAZMSbT-B8VyQdV-.js +0 -1
  109. package/dist/assets/classDiagram-v2-EOCWNBFH-DxHTyui1-B8VyQdV-.js +0 -1
  110. package/dist/assets/cynefin-VYW2F7L2-DqA3n9nY-BaTsKKi0.js +0 -1
  111. package/dist/assets/eventmodeling-45OFAUF4-_BVSjAXf-CyWTugzn.js +0 -1
  112. package/dist/assets/flowDiagram-23GEKE2U-BeOc_anm-CdmnRPZw.js +0 -1
  113. package/dist/assets/gitGraph-TEB2WS4Q-CH12KLTN-C_bw49Ma.js +0 -1
  114. package/dist/assets/index-8xyJ3JLz.css +0 -1
  115. package/dist/assets/info-DKCQHKI2-Cbw3mbiK-KtkQGqzk.js +0 -1
  116. package/dist/assets/packet-7NZHBO7P-lwb58iYx-DwSDPzqY.js +0 -1
  117. package/dist/assets/pie-RZYD4A2V-B1UWb4Gu-CiB48qnn.js +0 -1
  118. package/dist/assets/radar-I7S5WNFK-7CKcb_l--6l7KPMn8.js +0 -1
  119. package/dist/assets/railroad-3IZDKUUU-gCySKdnW-8ClzQSfW.js +0 -1
  120. package/dist/assets/railroad-abnf-AHOZXSZD-BophH4r--C0FLZOzv.js +0 -1
  121. package/dist/assets/railroad-ebnf-EBAXGLYW-AZNjl_Zu-DGtEHnA9.js +0 -1
  122. package/dist/assets/railroad-peg-LSFZ7HO6-BSiEEyeb-CreTgxNy.js +0 -1
  123. package/dist/assets/stateDiagram-v2-6OUMAXLB-DIp7nhRd-DgqIU_8B.js +0 -1
  124. package/dist/assets/swimlanesDiagram-G3AALYLV-BeoZhwg7-Zht4hkxA.js +0 -8
  125. package/dist/assets/treeView-QDETBFTQ-nIQcG1h9-CxgFefwU.js +0 -1
  126. package/dist/assets/treemap-6X3UGDF4-BnsvC8yL-CyDDLqfk.js +0 -1
  127. package/dist/assets/wardley-OPB4EBWU-8Odxkx6V-DtA9dAOH.js +0 -1
package/README.md CHANGED
@@ -71,6 +71,7 @@ server, and opens the browser. For local development from a clone, see
71
71
  - [Configuration](#configuration)
72
72
  - [Running](#running)
73
73
  - [Scripts (Run menu)](#scripts-run-menu)
74
+ - [Skills (Skill menu)](#skills-skill-menu)
74
75
  - [Files view (browse & edit)](#files-view-browse--edit)
75
76
  - [Git worktrees & pull requests](#git-worktrees--pull-requests)
76
77
  - [Cost & token usage](#cost--token-usage)
@@ -303,6 +304,8 @@ The Settings modal (⚙) persists per-user UI choices to `~/.mulmoterminal/confi
303
304
  | `buttons` | Header action buttons — see [Header buttons](#header-buttons). Omit to keep the defaults; set to replace them. |
304
305
  | `chips` | Header info chips. Omit to keep the default set; `[]` hides all built-ins. |
305
306
  | `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). |
307
+ | `worklogEnabled` | `true` to run the built-in **dev worklog** batch (see below). Off by default (each run spawns an LLM session, so it costs tokens). |
308
+ | `worklogIntervalHours` | Worklog cadence in hours (default `6`, clamped to `1`–`168`). |
306
309
 
307
310
  #### Header buttons
308
311
 
@@ -334,6 +337,29 @@ Cloud Function; MulmoTerminal only makes the call, and only while the **RemoteHo
334
337
  channel is connected (its Google sign-in supplies the notification auth). With RemoteHost
335
338
  disconnected, or with no device registered, the toggle is a no-op.
336
339
 
340
+ **Dev worklog (cross-clone).** Set `worklogEnabled: true` in
341
+ `~/.mulmoterminal/config.json` (and **restart** — the scheduler reads its tasks at boot)
342
+ to register a built-in scheduled task. Every `worklogIntervalHours` (default 6) it spawns
343
+ a Claude session that reviews the work you did across **all your saved working dirs**
344
+ (`cwdPresets`) since it last ran, and writes it up as a short manager-style report.
345
+ Multiple clones/worktrees of the same repo (e.g. `myapp`, `myapp2`) are **merged into one
346
+ per-repository section**, each covering what problem was addressed, what got solved, what's
347
+ still in progress, and — mined from the transcripts — decisions that were only *discussed
348
+ and not built*. The window is **since the last run** (tracked in
349
+ `config/scheduler/worklog-state.json`), not a fixed 6 h, so a missed/slept run doesn't drop
350
+ work. It reads and reconciles progress against `vision.md` / `milestones.md` (creating
351
+ empty ones if absent) so a long-running goal isn't forgotten.
352
+
353
+ Output lands in the wiki: one **weekly page** per ISO week
354
+ (`data/wiki/pages/dev-log-YYYY-www.md` — filenames are lowercase, or the wiki can't open
355
+ them), each tagged `worklog`. To browse them, open the **作業ログ 一覧** hub page
356
+ (`worklog`), which links every week, or click the **`#worklog`** tag in the wiki index.
357
+
358
+ Off by default because each run costs tokens — watch the cost readout and tune the cadence.
359
+ Run it on a single "hub" instance; running it in several instances sharing one workspace
360
+ double-fires it. The batch treats everything it reads (transcripts, git, wiki) as untrusted
361
+ data and only writes the worklog / hub / `vision` / `milestones` pages.
362
+
337
363
  ### Per-directory settings (`<project>/.mulmoterminal.json`)
338
364
 
339
365
  Drop a `.mulmoterminal.json` in a project directory to give terminals opened **in
@@ -470,6 +496,39 @@ the last 32 KB of output. See
470
496
 
471
497
  ---
472
498
 
499
+ ## Skills (Skill menu)
500
+
501
+ Next to the **▶ Run ▾** dropdown, every running terminal's header has a **⚡ Skill ▾**
502
+ dropdown — in both the single view and each grid cell, and **only when the open
503
+ project has skills** (nothing discovered, no button). It lists the
504
+ [Claude skills](https://docs.claude.com/en/docs/claude-code/skills) discoverable for
505
+ that terminal's directory — both **project scope** (`<dir>/.claude/skills`) and **user
506
+ scope** (`~/.claude/skills`), the same skills Claude sees — and, on pick, **runs the
507
+ skill in that session**: it types the skill's invocation into the terminal and submits
508
+ it (for Claude, its `/<slug>` command; for Codex, which has no slash command, a plain
509
+ `Use the "<slug>" skill.` instruction). Unlike **▶ Run** — which launches a
510
+ `script.json` shell command in a spare cell — a skill runs **in the session you
511
+ picked it from**, continuing that conversation.
512
+
513
+ **Ordering:** working-dir (project) skills come **first**, then user-scope ones,
514
+ alphabetical within each group; a project skill of the same slug shadows the user one.
515
+
516
+ **Filtering:** add a `skills` array to the directory's
517
+ [`.mulmoterminal.json`](#per-directory-settings-projectmulmoterminaljson) to narrow the menu —
518
+ an allowlist of slugs that also sets the order (only those show, in that order). Omit
519
+ it to show everything.
520
+
521
+ ```jsonc
522
+ // <dir>/.mulmoterminal.json
523
+ { "skills": ["review-diff", "commit-msg"] }
524
+ ```
525
+
526
+ Each menu item shows the skill's id, with its `SKILL.md` `description` as the hover
527
+ tooltip. A directory (or workspace) without any `.claude/skills` simply shows no
528
+ button. Skills are discovered read-only; the menu never creates or edits them.
529
+
530
+ ---
531
+
473
532
  ## Files view (browse & edit)
474
533
 
475
534
  A terminal header can carry a **📁 Files** button — add it as a [header button](#header-buttons)
@@ -658,6 +717,30 @@ position the client sends back to `/ws/run`).
658
717
  A missing or invalid `script.json` is **not** an error — it yields an empty
659
718
  `scripts` array.
660
719
 
720
+ ### HTTP: `GET /api/skills`
721
+
722
+ The Claude skills discoverable for a terminal's chosen directory (`?cwd=<dir>`,
723
+ falling back to `CLAUDE_CWD`) — project scope (`<cwd>/.claude/skills`) plus user scope
724
+ (`~/.claude/skills`), deduped by slug (project shadows user), **working-dir skills
725
+ first**; see [Skills (Skill menu)](#skills-skill-menu). A `skills` allowlist in that
726
+ directory's `.mulmoterminal.json` narrows and reorders the result; absent → all. The
727
+ resolved `cwd` is echoed back. Each entry carries its `slug` (the skill invoked as
728
+ `/<slug>`) and the `SKILL.md` `description` (the menu tooltip).
729
+
730
+ ```jsonc
731
+ // GET /api/skills?cwd=/Users/me/proj
732
+ {
733
+ "cwd": "/Users/me/proj",
734
+ "skills": [
735
+ { "slug": "commit", "description": "Write a commit message" },
736
+ { "slug": "review", "description": "Review the current diff" }
737
+ ]
738
+ }
739
+ ```
740
+
741
+ A directory without any discoverable skills is **not** an error — it yields an empty
742
+ `skills` array.
743
+
661
744
  ### HTTP: `POST /api/command/summarize`
662
745
 
663
746
  Runs `claude -p` **headless** over a command cell's captured terminal output and
@@ -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-Cfp31QX2.js";import"./chunk-WYO6CB5R-B83L_z6I-TrxMG8rr.js";import"./chunk-VAUOI2AC-DrcykVNK-yJ-tlNfF.js";import{n as i,r as a,t as o}from"./chunk-MOJQB5TN-CqxshQHA-Czit54cz.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-IqvgPv4-.js";import"./chunk-WYO6CB5R-B83L_z6I-DOF2nExc.js";import"./chunk-VAUOI2AC-DrcykVNK-Dj0ZfRKp.js";import{n as i,r as a,t as o}from"./chunk-MOJQB5TN-CqxshQHA--ID4cJe7.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-IqvgPv4-.js";export{e as createArchitectureServices};