mulmoterminal 8.3.0 → 8.5.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 (188) hide show
  1. package/README.md +5 -0
  2. package/blueprints/adopt/hearing.json +14 -2
  3. package/blueprints/adopt/kinds.json +96 -14
  4. package/blueprints/adopt/locales/en.json +66 -0
  5. package/blueprints/adopt/steps.json +2 -1
  6. package/blueprints/ask/locales/en.json +44 -0
  7. package/blueprints/ask/steps.json +2 -1
  8. package/blueprints/cloudflare/locales/en.json +52 -0
  9. package/blueprints/compare/locales/en.json +40 -0
  10. package/blueprints/compare/steps.json +2 -1
  11. package/blueprints/docs/locales/en.json +12 -0
  12. package/blueprints/firebase/locales/en.json +48 -0
  13. package/blueprints/from-collection/locales/en.json +154 -0
  14. package/blueprints/glossary/locales/en.json +36 -0
  15. package/blueprints/glossary/steps.json +2 -1
  16. package/blueprints/internal/locales/en.json +122 -0
  17. package/blueprints/local/checks/dev-proxy.mjs +31 -0
  18. package/blueprints/local/checks/devProxyRules.d.mts +2 -0
  19. package/blueprints/local/checks/devProxyRules.mjs +28 -0
  20. package/blueprints/local/checks/scaffold.sh +1 -0
  21. package/blueprints/local/checks/smoke.sh +3 -1
  22. package/blueprints/local/locales/en.json +48 -0
  23. package/blueprints/local/skills/scaffold/SKILL.md +4 -0
  24. package/blueprints/polish/hearing.json +12 -1
  25. package/blueprints/polish/kinds.json +100 -14
  26. package/blueprints/polish/locales/en.json +115 -0
  27. package/blueprints/polish/steps.json +2 -1
  28. package/blueprints/polish/viewpoints.json +86 -1
  29. package/blueprints/product/locales/en.json +126 -0
  30. package/blueprints/refactor/locales/en.json +53 -0
  31. package/blueprints/refactor/skills/tranche/SKILL.md +11 -0
  32. package/blueprints/repo/locales/en.json +20 -0
  33. package/blueprints/review/locales/en.json +58 -0
  34. package/blueprints/review/steps.json +2 -1
  35. package/blueprints/style/locales/en.json +67 -0
  36. package/blueprints/style/steps.json +4 -2
  37. package/blueprints/summarize/locales/en.json +49 -0
  38. package/blueprints/summarize/steps.json +2 -1
  39. package/blueprints/supabase/locales/en.json +48 -0
  40. package/blueprints/verify/locales/en.json +49 -0
  41. package/blueprints/verify/steps.json +2 -1
  42. package/blueprints/write/locales/en.json +77 -0
  43. package/blueprints/write/steps.json +4 -2
  44. package/common/appActions.ts +2 -0
  45. package/common/blueprint/askChoices.ts +57 -0
  46. package/common/blueprint/hearing.ts +3 -0
  47. package/common/blueprint/packLocale.ts +147 -0
  48. package/common/blueprint/personLanguage.ts +9 -0
  49. package/common/blueprint/plan.ts +3 -0
  50. package/common/blueprint/refusal.ts +5 -2
  51. package/common/blueprint/revisionCheck.ts +5 -0
  52. package/common/blueprint/run.ts +8 -1
  53. package/common/blueprint/specRevisionPrompt.ts +34 -2
  54. package/common/blueprint/state.ts +12 -3
  55. package/common/blueprint/stepPrompt.ts +3 -0
  56. package/common/blueprint/targets.ts +76 -0
  57. package/common/keymap.ts +1 -0
  58. package/common/resolveRelativeSegments.ts +17 -0
  59. package/common/skillsSh.ts +49 -0
  60. package/dist/assets/{abnfDiagram-O67JEVCF-CKlUuyns.js → abnfDiagram-O67JEVCF-DyCC_1de.js} +1 -1
  61. package/dist/assets/architecture-7GRP2DOG-swWiiNTU.js +1 -0
  62. package/dist/assets/{architectureDiagram-NJMV4G6O-Cr60a0xK.js → architectureDiagram-NJMV4G6O-CElWMJBE.js} +1 -1
  63. package/dist/assets/{blockDiagram-BEXU5L5S-B46LCZEF.js → blockDiagram-BEXU5L5S-DlQFWNAZ.js} +1 -1
  64. package/dist/assets/{c4Diagram-YGBWAQC7-T1j5qLhM.js → c4Diagram-YGBWAQC7-CXSZDDoB.js} +1 -1
  65. package/dist/assets/channel-CQxwUcvS.js +1 -0
  66. package/dist/assets/{chunk-3FUC2YCW-BFPbRdvj.js → chunk-3FUC2YCW-D7X8Rwzi.js} +1 -1
  67. package/dist/assets/{chunk-5DYCD2WN-DTwKhTLB.js → chunk-5DYCD2WN-CaUW3mZV.js} +1 -1
  68. package/dist/assets/{chunk-742MDFTN-BlcDxB5j.js → chunk-742MDFTN-6yPbPSMM.js} +1 -1
  69. package/dist/assets/{chunk-7INBJB4K-xunRHb1j.js → chunk-7INBJB4K-DsMF-LP1.js} +1 -1
  70. package/dist/assets/{chunk-7M6MHVWA-DX65iUsh.js → chunk-7M6MHVWA-CypgU6i0.js} +1 -1
  71. package/dist/assets/{chunk-7PRAP22T-0bKDqaeU.js → chunk-7PRAP22T-Dg02FcL4.js} +1 -1
  72. package/dist/assets/{chunk-GTNCS2PH-BN14lNpR.js → chunk-GTNCS2PH-D-ijksGR.js} +1 -1
  73. package/dist/assets/{chunk-GWA4HPMP-BAet7AvE.js → chunk-GWA4HPMP-cdxgZkt9.js} +1 -1
  74. package/dist/assets/{chunk-MBY4JIJT-DByeaoOT.js → chunk-MBY4JIJT-NM9lwnbY.js} +1 -1
  75. package/dist/assets/{chunk-NETBCI7D-DS63BA-9.js → chunk-NETBCI7D-BOB5DgHb.js} +1 -1
  76. package/dist/assets/{chunk-O7XYJQB3-RWvzInqy.js → chunk-O7XYJQB3-CBAglyfH.js} +1 -1
  77. package/dist/assets/{chunk-UA2S7LBM-D5BRkqDP.js → chunk-UA2S7LBM-Sl2yutXV.js} +1 -1
  78. package/dist/assets/{chunk-WEXAMYUT-CWS1aTuv.js → chunk-WEXAMYUT-Bolj8idN.js} +1 -1
  79. package/dist/assets/{chunk-Z7XXMR3K-BmgvUbyV.js → chunk-Z7XXMR3K-D7tNRnxY.js} +1 -1
  80. package/dist/assets/{chunk-ZIGJFQKS-B7uoh93M.js → chunk-ZIGJFQKS-CldXetHK.js} +1 -1
  81. package/dist/assets/{classDiagram-v2-NBCMYWYE-_Zn3IQPd.js → classDiagram-v2-NBCMYWYE-C6RYXAf4.js} +1 -1
  82. package/dist/assets/{cynefin-OW5HDTMX-BhwDPtZE.js → cynefin-OW5HDTMX-Czb--uYb.js} +1 -1
  83. package/dist/assets/{cynefinDiagram-VND7K2PF-DQRFRLyY.js → cynefinDiagram-VND7K2PF-ZJzYvnKK.js} +1 -1
  84. package/dist/assets/{dagre-6A5THRUB-CAyH0RVf.js → dagre-6A5THRUB-BgNOuHtW.js} +1 -1
  85. package/dist/assets/{diagram-22UHCM2B-CDVq4xZt.js → diagram-22UHCM2B-DSoVjxU3.js} +1 -1
  86. package/dist/assets/{diagram-3UASUU5V-71cR4x2a.js → diagram-3UASUU5V-DJRpzLRm.js} +1 -1
  87. package/dist/assets/{diagram-ATOU4E4O-B77AU3Mm.js → diagram-ATOU4E4O-LlgL_dRG.js} +1 -1
  88. package/dist/assets/{diagram-CDSNMT55-BorMYeZ1.js → diagram-CDSNMT55-CRNWS0cS.js} +1 -1
  89. package/dist/assets/{diagram-MLGK6HIB-DkE6ngy6.js → diagram-MLGK6HIB-4UrdpA4l.js} +1 -1
  90. package/dist/assets/{diagram-MPIPVDR6-CgGs4ob9.js → diagram-MPIPVDR6-Da_XaskV.js} +1 -1
  91. package/dist/assets/{dist-CzIpHy0d.js → dist-BLSkJMFh.js} +1 -1
  92. package/dist/assets/{dist-KoB2Fn7k.js → dist-CeCMlFiz.js} +1 -1
  93. package/dist/assets/{dist-BQUQODA8.js → dist-DFwiLw8u.js} +1 -1
  94. package/dist/assets/{dist-wRL2l7Jx.js → dist-NiAgrplo.js} +1 -1
  95. package/dist/assets/{dist-DYLBD_lC.js → dist-SK33V2vr.js} +1 -1
  96. package/dist/assets/{ebnfDiagram-ZINNZB2B-DLAg5XxB.js → ebnfDiagram-ZINNZB2B-DhoYIPQP.js} +1 -1
  97. package/dist/assets/{elk-276RUBZZ-D9nvt0XC.js → elk-276RUBZZ-DwLxf-UK.js} +1 -1
  98. package/dist/assets/{erDiagram-OPXOYQCR-D3WDLlbz.js → erDiagram-OPXOYQCR-BpWKJ3vv.js} +1 -1
  99. package/dist/assets/eventmodeling-NTZA5JFV-ubF7vcc0.js +1 -0
  100. package/dist/assets/flowDiagram-KWPJA3E3-Dj-XZpvf.js +1 -0
  101. package/dist/assets/{ganttDiagram-FUAMR5RP-BGVSRLOl.js → ganttDiagram-FUAMR5RP-CJ3xg9nX.js} +1 -1
  102. package/dist/assets/{gitGraph-4MIJSDKK-CVyREC8W.js → gitGraph-4MIJSDKK-BT7gRD5M.js} +1 -1
  103. package/dist/assets/{gitGraphDiagram-X574FWY7-BSmV1hek.js → gitGraphDiagram-X574FWY7-CIyczVL_.js} +1 -1
  104. package/dist/assets/index-BYo1JFJe.css +1 -0
  105. package/dist/assets/{index-eTV11Zyw.js → index-CSlVGVVi.js} +360 -360
  106. package/dist/assets/{info-A6RAGUB7-Ch23BJyi.js → info-A6RAGUB7-NzW7Bude.js} +1 -1
  107. package/dist/assets/{infoDiagram-VRGFBTTK-Cq8RzFTi.js → infoDiagram-VRGFBTTK-C_r4QhTl.js} +1 -1
  108. package/dist/assets/{ishikawaDiagram-OU5B5YK6-B3Bx_dM4.js → ishikawaDiagram-OU5B5YK6-MXSVQib_.js} +1 -1
  109. package/dist/assets/{journeyDiagram-ZHPQQLJL-3C2yy2Ai.js → journeyDiagram-ZHPQQLJL-DUV5oKcf.js} +1 -1
  110. package/dist/assets/{kanban-definition-PNTS6WVX-X09o9QMI.js → kanban-definition-PNTS6WVX-BoEZram1.js} +1 -1
  111. package/dist/assets/{line-DRK0p1A0.js → line-5ZVBQEXI.js} +1 -1
  112. package/dist/assets/{mermaid-parser.core-jR7u2UoU.js → mermaid-parser.core-Bta0VZsa.js} +3 -3
  113. package/dist/assets/{mermaid.core-BRUnk_mY.js → mermaid.core--AlGb2iN.js} +4 -4
  114. package/dist/assets/{mindmap-definition-NLK3R4M7-BLFj8zux.js → mindmap-definition-NLK3R4M7-BG6CkPNZ.js} +1 -1
  115. package/dist/assets/{packet-AYTQ26CC-DJdWa_92.js → packet-AYTQ26CC-DibVOHBx.js} +1 -1
  116. package/dist/assets/{pegDiagram-GJSIUBJH-DJhNtjB1.js → pegDiagram-GJSIUBJH-BWOJlyOR.js} +1 -1
  117. package/dist/assets/{pie-WAS4IAKB-CZdX7gwc.js → pie-WAS4IAKB-Df0zCUrS.js} +1 -1
  118. package/dist/assets/{pieDiagram-5QR66LMP-6SpfMbRT.js → pieDiagram-5QR66LMP-DwU-nZck.js} +1 -1
  119. package/dist/assets/{quadrantDiagram-O4NWA36T-1j2j6cCS.js → quadrantDiagram-O4NWA36T-CPYruJxn.js} +1 -1
  120. package/dist/assets/{radar-RG4KPBEZ-ByiCNLS6.js → radar-RG4KPBEZ-VBJmKqlV.js} +1 -1
  121. package/dist/assets/{railroad-74A4TZTK-C-JsNW52.js → railroad-74A4TZTK-DJxmOnHl.js} +1 -1
  122. package/dist/assets/railroad-abnf-HS5TGJTU-DkbzrPAP.js +1 -0
  123. package/dist/assets/railroad-ebnf-LZEXJU2U-L6Dn3Ypy.js +1 -0
  124. package/dist/assets/railroad-peg-WCYAUIDC-DA6iP0WF.js +1 -0
  125. package/dist/assets/{railroadDiagram-XR7U4H2S-7dFhcasc.js → railroadDiagram-XR7U4H2S-BmkdSuur.js} +1 -1
  126. package/dist/assets/{requirementDiagram-PLB6GJNP-BAqomR3o.js → requirementDiagram-PLB6GJNP-CuOWgGsU.js} +1 -1
  127. package/dist/assets/{sankeyDiagram-IPEJSGJF-DhkXOhoR.js → sankeyDiagram-IPEJSGJF-BgnWJ7Nj.js} +1 -1
  128. package/dist/assets/{sequenceDiagram-PO4LG4MO-lDBjo1e1.js → sequenceDiagram-PO4LG4MO-C9K06g8F.js} +1 -1
  129. package/dist/assets/{stateDiagram-v2-GCMORJYK-CRo5UhQk.js → stateDiagram-v2-GCMORJYK-PPqHC9YG.js} +1 -1
  130. package/dist/assets/{swimlanes-2SLR337P-7TmzpJwY.js → swimlanes-2SLR337P-By3ULjLZ.js} +1 -1
  131. package/dist/assets/swimlanesDiagram-TC7HE7FX-DGGJRwyM.js +8 -0
  132. package/dist/assets/{timeline-definition-EJHVYXUP-5aLv5D93.js → timeline-definition-EJHVYXUP-LkTIoeaI.js} +1 -1
  133. package/dist/assets/{treeView-Q6P3EWNA-D5CE4D1g.js → treeView-Q6P3EWNA-DNSKHaOO.js} +1 -1
  134. package/dist/assets/{treemap-WGGIJYW6-BMUEZMzm.js → treemap-WGGIJYW6-B1NR7Vzs.js} +1 -1
  135. package/dist/assets/{usecaseDiagram-POWQR4AR-DpHwlMrg.js → usecaseDiagram-POWQR4AR-C1frOYf0.js} +1 -1
  136. package/dist/assets/{vennDiagram-UO4OBE2U-5VroYfor.js → vennDiagram-UO4OBE2U-DJTTZVRm.js} +1 -1
  137. package/dist/assets/{wardley-WFR3VGLG-jMOUNxbQ.js → wardley-WFR3VGLG-t8c8e9Cx.js} +1 -1
  138. package/dist/assets/{wardleyDiagram-VNRHLVJA-DZq6IR2g.js → wardleyDiagram-VNRHLVJA-frSDtX1F.js} +1 -1
  139. package/dist/assets/{xychartDiagram-PMCCYNJV-xtu9TBWy.js → xychartDiagram-PMCCYNJV-DRPhoPZG.js} +1 -1
  140. package/dist/index.html +2 -2
  141. package/docs/guide/en/v8.4.0.md +84 -0
  142. package/docs/guide/en/v8.5.0.md +109 -0
  143. package/docs/guide/ja/v8.4.0.md +81 -0
  144. package/docs/guide/ja/v8.5.0.md +107 -0
  145. package/package.json +8 -6
  146. package/server/agents/cursor-last-turn.ts +1 -1
  147. package/server/backends/html.ts +12 -28
  148. package/server/backends/shapescript.ts +14 -27
  149. package/server/backends/sharedApp/declare.ts +80 -57
  150. package/server/backends/skillsSh.ts +106 -0
  151. package/server/backends/sourceEditorDispatchRoute.ts +38 -0
  152. package/server/blueprint/executor.ts +58 -12
  153. package/server/blueprint/packLocales.ts +85 -0
  154. package/server/blueprint/packs.ts +37 -3
  155. package/server/blueprint/routes.ts +39 -14
  156. package/server/blueprint/wiring.ts +10 -8
  157. package/server/config/agent-entry-routes.ts +4 -24
  158. package/server/config/on-disk-entry.ts +28 -0
  159. package/server/config/theme-entry-routes.ts +3 -8
  160. package/server/config/workspace.ts +15 -9
  161. package/server/files/files-tree-routes.ts +11 -4
  162. package/server/files/mdImageSrc.ts +3 -12
  163. package/server/git/worktree-routes.ts +33 -18
  164. package/server/routes/session-routes.ts +54 -49
  165. package/server/routes/skill-catalog-routes.ts +46 -2
  166. package/server/routes/ws-routes.ts +30 -16
  167. package/server/session/agent-pty-start.ts +44 -0
  168. package/server/session/claude-fullscreen-env.ts +20 -0
  169. package/server/session/claude-fullscreen.ts +38 -0
  170. package/server/session/failed-spawn-claim.ts +14 -0
  171. package/server/session/spawn-claude.ts +14 -25
  172. package/server/session/spawn-codex.ts +16 -16
  173. package/server/session/spawn-copilot.ts +32 -29
  174. package/server/session/spawn-cursor.ts +14 -14
  175. package/server/session/spawn-directory-mcp.ts +6 -13
  176. package/server/session/spawn-muse.ts +5 -10
  177. package/server/session/spawn-with-full-gui-claim.ts +28 -0
  178. package/server/session/transcript-view-cursor.ts +1 -8
  179. package/server/skills/mulmoterminal-keys/SKILL.md +1 -1
  180. package/dist/assets/architecture-7GRP2DOG-CQzNA5AV.js +0 -1
  181. package/dist/assets/channel-C8wFkwL-.js +0 -1
  182. package/dist/assets/eventmodeling-NTZA5JFV-CU2CI2_j.js +0 -1
  183. package/dist/assets/flowDiagram-KWPJA3E3-DYQcChuP.js +0 -1
  184. package/dist/assets/index-C9dQ4nPc.css +0 -1
  185. package/dist/assets/railroad-abnf-HS5TGJTU-Bk0OY70O.js +0 -1
  186. package/dist/assets/railroad-ebnf-LZEXJU2U-BNzqEfH4.js +0 -1
  187. package/dist/assets/railroad-peg-WCYAUIDC-DiFnHh30.js +0 -1
  188. package/dist/assets/swimlanesDiagram-TC7HE7FX-S0DcrBn_.js +0 -8
package/README.md CHANGED
@@ -1758,6 +1758,11 @@ narrow and tall for one record you are discussing — and each position keeps it
1758
1758
  each enabled plugin (skills shown as `plugin:skill`), and the `.claude/skills` of each folder a
1759
1759
  terminal has run in (folders with none are left out). A project skill with the same name as one
1760
1760
  of yours is marked as overriding it. The search (name, description or folder) narrows both lists.
1761
+ Switch to **skills.sh** to search the public directory at [skills.sh](https://skills.sh) for
1762
+ skills you do not have yet and read one before installing it: its `SKILL.md`, every file it would
1763
+ bring, and a warning listing the files that can run code. Nothing is installed from the viewer —
1764
+ it shows the `npx skills add …` line to copy and run yourself. Your search words go to skills.sh
1765
+ only when you press **Search**.
1761
1766
  - **Grid of parallel sessions** — the + Terminal / grid view runs many sessions at once,
1762
1767
  auto-sizing by count across pages. Cell borders signal state at a glance — **working**
1763
1768
  (pulsing blue), **blocked** (amber — needs a permission / answer), **done** (blue —
@@ -27,7 +27,17 @@
27
27
  "プレスリリース・お知らせ",
28
28
  "契約書・利用規約",
29
29
  "規程・社内規則",
30
- "論文"
30
+ "論文",
31
+ "ブログ(エッセイ・読み物)",
32
+ "メール・手紙",
33
+ "判決文",
34
+ "特許明細書",
35
+ "小説・物語",
36
+ "文学のエッセイ・随筆",
37
+ "詩",
38
+ "戯曲・脚本",
39
+ "演説・挨拶の原稿",
40
+ "書き起こし(会見・会議での発言の記録)"
31
41
  ]
32
42
  },
33
43
  {
@@ -36,7 +46,9 @@
36
46
  "why": "作ると、PR を出すたびに chaff が動き、新しい指摘がその行に出る",
37
47
  "kind": "select",
38
48
  "options": ["GitHub の PR に指摘を出すワークフローを作る", "作らない(手元で npx chaffjs を動かす)"],
39
- "needsPath": { "GitHub の PR に指摘を出すワークフローを作る": ".git" }
49
+ "needsPath": {
50
+ "GitHub の PR に指摘を出すワークフローを作る": ".git"
51
+ }
40
52
  }
41
53
  ]
42
54
  }
@@ -1,18 +1,100 @@
1
1
  {
2
2
  "kinds": [
3
- { "option": "手順書・ヘルプ・マニュアル", "genre": "docs/manual" },
4
- { "option": "README・開発者向けの説明", "genre": "technical/readme" },
5
- { "option": "仕様書・設計書", "genre": "technical/spec" },
6
- { "option": "よくある質問", "genre": "docs/faq" },
7
- { "option": "用語集", "genre": "docs/glossary" },
8
- { "option": "技術ブログ", "genre": "blog/tech" },
9
- { "option": "会社のサイトの記事(オウンドメディア)", "genre": "blog/owned-media" },
10
- { "option": "報告書・社内文書", "genre": "business/report" },
11
- { "option": "提案書・企画書", "genre": "business/proposal" },
12
- { "option": "議事録", "genre": "business/meeting-notes" },
13
- { "option": "プレスリリース・お知らせ", "genre": "business/press-release" },
14
- { "option": "契約書・利用規約", "genre": "legal/contract" },
15
- { "option": "規程・社内規則", "genre": "legal/statute" },
16
- { "option": "論文", "genre": "academic/paper" }
3
+ {
4
+ "option": "手順書・ヘルプ・マニュアル",
5
+ "genre": "docs/manual"
6
+ },
7
+ {
8
+ "option": "README・開発者向けの説明",
9
+ "genre": "technical/readme"
10
+ },
11
+ {
12
+ "option": "仕様書・設計書",
13
+ "genre": "technical/spec"
14
+ },
15
+ {
16
+ "option": "よくある質問",
17
+ "genre": "docs/faq"
18
+ },
19
+ {
20
+ "option": "用語集",
21
+ "genre": "docs/glossary"
22
+ },
23
+ {
24
+ "option": "技術ブログ",
25
+ "genre": "blog/tech"
26
+ },
27
+ {
28
+ "option": "会社のサイトの記事(オウンドメディア)",
29
+ "genre": "blog/owned-media"
30
+ },
31
+ {
32
+ "option": "報告書・社内文書",
33
+ "genre": "business/report"
34
+ },
35
+ {
36
+ "option": "提案書・企画書",
37
+ "genre": "business/proposal"
38
+ },
39
+ {
40
+ "option": "議事録",
41
+ "genre": "business/meeting-notes"
42
+ },
43
+ {
44
+ "option": "プレスリリース・お知らせ",
45
+ "genre": "business/press-release"
46
+ },
47
+ {
48
+ "option": "契約書・利用規約",
49
+ "genre": "legal/contract"
50
+ },
51
+ {
52
+ "option": "規程・社内規則",
53
+ "genre": "legal/statute"
54
+ },
55
+ {
56
+ "option": "論文",
57
+ "genre": "academic/paper"
58
+ },
59
+ {
60
+ "option": "ブログ(エッセイ・読み物)",
61
+ "genre": "blog/essay"
62
+ },
63
+ {
64
+ "option": "メール・手紙",
65
+ "genre": "business/email"
66
+ },
67
+ {
68
+ "option": "判決文",
69
+ "genre": "legal/judgment"
70
+ },
71
+ {
72
+ "option": "特許明細書",
73
+ "genre": "legal/patent"
74
+ },
75
+ {
76
+ "option": "小説・物語",
77
+ "genre": "literature/fiction"
78
+ },
79
+ {
80
+ "option": "文学のエッセイ・随筆",
81
+ "genre": "literature/essay"
82
+ },
83
+ {
84
+ "option": "詩",
85
+ "genre": "literature/poetry"
86
+ },
87
+ {
88
+ "option": "戯曲・脚本",
89
+ "genre": "literature/play"
90
+ },
91
+ {
92
+ "option": "演説・挨拶の原稿",
93
+ "genre": "speech/address"
94
+ },
95
+ {
96
+ "option": "書き起こし(会見・会議での発言の記録)",
97
+ "genre": "speech/transcript"
98
+ }
17
99
  ]
18
100
  }
@@ -0,0 +1,66 @@
1
+ {
2
+ "manifest": {
3
+ "title": "Bring chaff into a document folder (shelve today's findings)",
4
+ "description": "Brings chaff into a folder of documents you already have. It places a chaff.yaml that fits the kind of documents, shelves today's findings with chaff baseline, and from then on only new findings appear. If you want, it also makes a workflow that shows findings on the lines of a GitHub PR. The originals do not change."
5
+ },
6
+ "hearing": {
7
+ "places": {
8
+ "label": "The documents for chaff to watch (one folder or file in this folder per line)",
9
+ "why": "Today's findings in these documents are shelved, and from then on only new findings here appear"
10
+ },
11
+ "kind": {
12
+ "label": "What kind of documents are they?",
13
+ "why": "chaff measures them with the yardstick for that kind of document (how long a sentence may be, which checks to run)",
14
+ "options": {
15
+ "手順書・ヘルプ・マニュアル": "Procedure, help or manual",
16
+ "README・開発者向けの説明": "README or explanation for developers",
17
+ "仕様書・設計書": "Specification or design document",
18
+ "よくある質問": "FAQ",
19
+ "用語集": "Glossary",
20
+ "技術ブログ": "Technical blog",
21
+ "会社のサイトの記事(オウンドメディア)": "An article on a company site",
22
+ "報告書・社内文書": "Report or internal document",
23
+ "提案書・企画書": "Proposal",
24
+ "議事録": "Minutes",
25
+ "プレスリリース・お知らせ": "Press release or notice",
26
+ "契約書・利用規約": "Contract or terms of service",
27
+ "規程・社内規則": "Regulation or company rules",
28
+ "論文": "Academic paper",
29
+ "ブログ(エッセイ・読み物)": "Blog (essay, feature)",
30
+ "メール・手紙": "Email or letter",
31
+ "判決文": "Court judgment",
32
+ "特許明細書": "Patent specification",
33
+ "小説・物語": "Novel or story",
34
+ "文学のエッセイ・随筆": "Literary essay",
35
+ "詩": "Poetry",
36
+ "戯曲・脚本": "Play or script",
37
+ "演説・挨拶の原稿": "Speech or address (to be read aloud)",
38
+ "書き起こし(会見・会議での発言の記録)": "Transcript (what was said at a press conference or meeting)"
39
+ }
40
+ },
41
+ "ci": {
42
+ "label": "Show findings on GitHub PRs?",
43
+ "why": "If made, chaff runs every time a PR is opened, and new findings appear on their lines",
44
+ "options": {
45
+ "GitHub の PR に指摘を出すワークフローを作る": "Make a workflow that shows findings on GitHub PRs",
46
+ "作らない(手元で npx chaffjs を動かす)": "Don't make one (run npx chaffjs on your own machine)"
47
+ }
48
+ }
49
+ },
50
+ "steps": {
51
+ "survey": {
52
+ "title": "Measure today's findings",
53
+ "description": "Measures how many findings the documents have now, for the chosen kind, and drafts the settings to put in. Nothing changes yet."
54
+ },
55
+ "apply": {
56
+ "title": "Bring chaff in",
57
+ "description": "Places chaff.yaml, shelves today's findings in .chaff-baseline.json, and, if you want, adds a workflow that shows findings on PRs. Checks by machine that from then on only new findings appear."
58
+ }
59
+ },
60
+ "presets": {
61
+ "help-pages": {
62
+ "title": "Bring chaff into help pages",
63
+ "description": "Measures the sample help pages (login.md and export.md) as \"Procedure, help or manual\", shelves today's findings of sentences that are too long, and from then on only new findings appear. It also makes a workflow that shows findings on GitHub PRs. The originals do not change."
64
+ }
65
+ }
66
+ }
@@ -14,7 +14,8 @@
14
14
  "skill": "skills/apply",
15
15
  "check": "node \"$BLUEPRINT_USECASE/checks/adopt.mjs\" apply && node \"$BLUEPRINT_USECASE/checks/report.mjs\"",
16
16
  "gates": ["review"],
17
- "reads": [".blueprint/adopt.txt"]
17
+ "reads": [".blueprint/adopt.txt"],
18
+ "revises": [".blueprint/adopt.json"]
18
19
  }
19
20
  ]
20
21
  }
@@ -0,0 +1,44 @@
1
+ {
2
+ "manifest": {
3
+ "title": "Ask your documents (with where each answer is written)",
4
+ "description": "Ask a question of a complicated manual, regulation or contract, and the answer shows where in the documents it is written, quoting the original text. Something that is not written is answered \"not written\". chaff cite checks that each quote is in the original. After a person reads the answers, they can be kept in FAQ.md."
5
+ },
6
+ "hearing": {
7
+ "documents": {
8
+ "label": "The documents to ask (one file in this folder per line)",
9
+ "why": "Answers come only from these documents, with where each is written"
10
+ },
11
+ "questions": {
12
+ "label": "Questions (one per line)",
13
+ "why": "One answer for each question"
14
+ },
15
+ "keep": {
16
+ "label": "Keep the answers?",
17
+ "why": "Whether to add the checked answers to FAQ.md in this folder",
18
+ "options": {
19
+ "このフォルダの FAQ.md に書き足す": "Add them to FAQ.md in this folder",
20
+ "残さない(.blueprint の中だけ)": "Don't keep them (only inside .blueprint)"
21
+ }
22
+ }
23
+ },
24
+ "steps": {
25
+ "answer": {
26
+ "title": "Answer from the documents",
27
+ "description": "Answers each question, quoting where in the documents it is written. If it is not written, says so and records what was searched."
28
+ },
29
+ "keep": {
30
+ "title": "Keep the answers",
31
+ "description": "If you chose to keep them, adds the checked answers to FAQ.md."
32
+ }
33
+ },
34
+ "presets": {
35
+ "keihi": {
36
+ "title": "Ask the expense claim guide",
37
+ "description": "Asks the sample guide (keihi.md) 3 questions, and each answer shows where it is written, quoting the original. Something that is not written (the daily allowance for trips abroad) is answered \"not written\"."
38
+ },
39
+ "kyuka": {
40
+ "title": "Ask the leave regulation and guide",
41
+ "description": "Asks the sample leave regulation (kitei.md) and guide (tebiki.md) 3 questions. The deadline for applying differs between the regulation and the guide, so both are quoted to show the mismatch. Half-day leave is answered with a quote from the guide, and summer leave, which neither mentions, is answered \"not written\". The answers are not kept in the folder."
42
+ }
43
+ }
44
+ }
@@ -14,7 +14,8 @@
14
14
  "skill": "skills/keep",
15
15
  "check": "node \"$BLUEPRINT_USECASE/checks/replies.mjs\" keep",
16
16
  "gates": ["review"],
17
- "reads": [".blueprint/replies.md"]
17
+ "reads": [".blueprint/replies.md"],
18
+ "revises": [".blueprint/replies.json"]
18
19
  }
19
20
  ]
20
21
  }
@@ -0,0 +1,52 @@
1
+ {
2
+ "manifest": {
3
+ "title": "Cloudflare (Workers + D1 + Vue)",
4
+ "description": "Runs on Cloudflare: a Worker for the API, D1 (SQLite) for data, and a Vue screen served as static assets from the same Worker. Developed and checked on this computer with wrangler dev, then published with wrangler deploy after approval. A free Cloudflare account is enough to start."
5
+ },
6
+ "steps": {
7
+ "spec": {
8
+ "title": "Write the spec",
9
+ "description": "Fills in the spec templates for the base and the use case from the answers to the questions. Anything not yet decided goes on a list."
10
+ },
11
+ "prerequisites": {
12
+ "title": "Check the tools",
13
+ "description": "Checks Node (22 or later) and yarn. wrangler is installed in the project, so it is not needed here."
14
+ },
15
+ "scaffold": {
16
+ "title": "App skeleton",
17
+ "description": "Creates the Worker API, D1, the Vue screens and the starting point for tests that run on Workers, all in one folder."
18
+ },
19
+ "data": {
20
+ "title": "Data shape",
21
+ "description": "Turns the \"things it handles\" in the spec into D1 tables, and writes migrations and tests."
22
+ },
23
+ "api": {
24
+ "title": "API",
25
+ "description": "Turns the operations in the spec into a Worker API, checks what comes in, and writes tests."
26
+ },
27
+ "ui": {
28
+ "title": "Screens",
29
+ "description": "Builds the screens in the spec with Vue and connects them to the API."
30
+ },
31
+ "auth": {
32
+ "title": "Sign-in",
33
+ "description": "Adds the sign-in method in the spec. Anyone can open the published app, so without sign-in, what may be shown is limited as the spec says."
34
+ },
35
+ "run-check": {
36
+ "title": "Start it and check",
37
+ "description": "Builds it, starts it on this computer with wrangler dev, and checks that the screens and the API respond."
38
+ },
39
+ "security": {
40
+ "title": "Security check",
41
+ "description": "Reads what was built the way an attacker would, following OWASP Top 10:2025, fixes the holes that can be exploited, confirms the fixes with tests, and writes a report. The result is checked by sending the Worker running on this computer requests shaped like real attacks (changes from another site, broken JSON)."
42
+ },
43
+ "deploy": {
44
+ "title": "Publish to Cloudflare",
45
+ "description": "Creates the D1 database, applies the migrations, and publishes with wrangler deploy. Checks that the published URL serves this build."
46
+ },
47
+ "handover": {
48
+ "title": "How to use it, and handover",
49
+ "description": "Writes in the README and the getting-started page the published URL, how to run it on this computer, the steps for the next change, and how to back up the data."
50
+ }
51
+ }
52
+ }
@@ -0,0 +1,40 @@
1
+ {
2
+ "manifest": {
3
+ "title": "Compare versions (a side-by-side table)",
4
+ "description": "Matches the old and new versions of a contract or regulation article by article, and makes a side-by-side table of what changed, what was added and what was removed. Whether an article changed is decided by comparing its text by machine, so saying an unchanged article \"changed\", or the reverse, does not pass. The originals do not change."
5
+ },
6
+ "hearing": {
7
+ "old": {
8
+ "label": "The old version (one file in this folder)",
9
+ "why": "What to compare from. Each article is matched to the new version"
10
+ },
11
+ "new": {
12
+ "label": "The new version (one file in this folder)",
13
+ "why": "What to compare to"
14
+ },
15
+ "focus": {
16
+ "label": "Anything to look at especially",
17
+ "why": "Changes about that point are written first and in more detail"
18
+ }
19
+ },
20
+ "steps": {
21
+ "pair": {
22
+ "title": "Match the articles of the old and new versions",
23
+ "description": "Writes, pair by pair, which article of the old version became which article of the new one, and marks each changed, added or removed. Whether an article changed is checked by comparing its text by machine."
24
+ },
25
+ "report": {
26
+ "title": "Make the side-by-side table",
27
+ "description": "After checking the matching, makes a side-by-side table of the articles that changed, were added and were removed."
28
+ }
29
+ },
30
+ "presets": {
31
+ "itaku-kaitei": {
32
+ "title": "Compare a revised service contract",
33
+ "description": "Matches the old version (kyu.txt) and the revised version (shin.txt) of the sample service contract article by article, and makes a side-by-side table showing that the fee and the number of reports changed, that an article on reporting was added, and that the article on deliverables was removed so the article on the contract period moved up. The originals do not change."
34
+ },
35
+ "ryohi-kaitei": {
36
+ "title": "Compare a revised travel expense regulation",
37
+ "description": "Matches the old version (kyu.txt) and the revised version (shin.txt) of the sample travel expense regulation article by article, and makes a side-by-side table showing that the caps on the daily allowance and lodging went up, that a proviso added the cases where no trip is ordered, that the article on ticket books was removed so the article on settling expenses moved up and its deadline got shorter, and that an article on when the regulation takes effect was added. The originals do not change."
38
+ }
39
+ }
40
+ }
@@ -14,7 +14,8 @@
14
14
  "skill": "skills/report",
15
15
  "check": "node \"$BLUEPRINT_USECASE/checks/report.mjs\"",
16
16
  "gates": ["review"],
17
- "reads": [".blueprint/comparison.txt"]
17
+ "reads": [".blueprint/comparison.txt"],
18
+ "revises": [".blueprint/comparison.json"]
18
19
  }
19
20
  ]
20
21
  }
@@ -0,0 +1,12 @@
1
+ {
2
+ "manifest": {
3
+ "title": "A folder of documents",
4
+ "description": "All you need is one folder that holds your documents. No GitHub or git is needed. chaff checks the writing, run with npx."
5
+ },
6
+ "steps": {
7
+ "workspace": {
8
+ "title": "Check the folder and chaff",
9
+ "description": "Checks that chaff (the writing checker) runs in the document folder, and sets up .blueprint/, where the record of the work is kept."
10
+ }
11
+ }
12
+ }
@@ -0,0 +1,48 @@
1
+ {
2
+ "manifest": {
3
+ "title": "Firebase",
4
+ "description": "Firebase Hosting + Authentication + Firestore + Cloud Functions, with separate dev and production projects."
5
+ },
6
+ "steps": {
7
+ "spec": {
8
+ "title": "Write the spec",
9
+ "description": "Fills in the spec templates for the base and the use case from the answers to the questions. Anything not yet decided goes on a list."
10
+ },
11
+ "prerequisites": {
12
+ "title": "Tools and sign-in",
13
+ "description": "Installs the CLIs and signs in to Firebase and Google Cloud."
14
+ },
15
+ "projects": {
16
+ "title": "Development and production projects",
17
+ "description": "Sets up two Firebase projects and puts them on the pay-as-you-go (Blaze) plan."
18
+ },
19
+ "scaffold": {
20
+ "title": "App skeleton",
21
+ "description": "Creates the screens, Cloud Functions, the emulator settings and the starting point for testing the rules."
22
+ },
23
+ "auth": {
24
+ "title": "Sign-in",
25
+ "description": "Adds sign-in with Google and checks it with the Auth emulator."
26
+ },
27
+ "data-rules": {
28
+ "title": "Data shape and security rules",
29
+ "description": "Creates the collections in the spec and opens them one at a time in firestore.rules. Everything else is refused."
30
+ },
31
+ "deploy-dev": {
32
+ "title": "Publish for development",
33
+ "description": "Publishes the rules, functions and screens to the development project."
34
+ },
35
+ "protect": {
36
+ "title": "App Check and a budget alert",
37
+ "description": "Turns on App Check and sets a budget alert on the production project."
38
+ },
39
+ "security": {
40
+ "title": "Security check",
41
+ "description": "Before publishing to production, reads what was built the way an attacker would, following OWASP Top 10:2025, fixes the holes that can be exploited, confirms the fixes with emulator tests, and writes a report. The fixes are published to development again, to check that the screens still work."
42
+ },
43
+ "deploy-production": {
44
+ "title": "Publish to production",
45
+ "description": "Publishes to production the same build that was checked in development."
46
+ }
47
+ }
48
+ }
@@ -0,0 +1,154 @@
1
+ {
2
+ "manifest": {
3
+ "title": "Turn a collection into an app",
4
+ "description": "Start from a collection in the workspace: its schema, screens and actions are copied into the build's folder and become the spec of an app you own as code, on this computer, on Firebase, on Cloudflare or on Supabase. With its records, they are moved into the new app too. The collection itself is not touched."
5
+ },
6
+ "hearing": {
7
+ "source": {
8
+ "label": "The collection (or shared app) to start from",
9
+ "why": "Its fields, screens and actions (for a shared app, also its members and roles, its sign-up requests and its email declarations) are copied from here into the spec. The original is not changed"
10
+ },
11
+ "copyRecords": {
12
+ "label": "Copy the records (the data inside) too?",
13
+ "why": "If yes, the records it has now, and the images and files they point to, are moved into the new app. Any personal information in them is copied into the new folder too. A shared app's records are read with your sign-in (you need a role that can read all of them). If no, only the shape is copied and you get an empty app"
14
+ },
15
+ "appName": {
16
+ "label": "The app's name (empty: the collection's name)",
17
+ "why": "Shown on the screens and in the instructions"
18
+ },
19
+ "whyApp": {
20
+ "label": "Why make it an app? (What does the collection not do?)",
21
+ "why": "This is how the must-haves are chosen. If you only want to copy what the collection has, say so"
22
+ },
23
+ "audience": {
24
+ "label": "Who will use it?",
25
+ "why": "This decides sign-in and who can see it",
26
+ "options": {
27
+ "自分だけ": "Only me",
28
+ "家族・友人など少人数": "A few people, such as family or friends",
29
+ "社内・チーム": "My company or team",
30
+ "不特定の人(公開)": "Anyone (public)"
31
+ }
32
+ },
33
+ "mustHaves": {
34
+ "label": "Features it must have from the start (empty: everything the collection can do)",
35
+ "why": "At the end, each one is proved to work by a test"
36
+ },
37
+ "later": {
38
+ "label": "Features that can wait",
39
+ "why": "They are left out of the first version"
40
+ },
41
+ "signIn": {
42
+ "label": "How should people sign in?",
43
+ "why": "This decides how it is protected",
44
+ "options": {
45
+ "なし(このパソコンからだけ使う)": "No sign-in (used only from this computer)",
46
+ "共有のパスワード一つ": "One shared password",
47
+ "一人ずつのアカウント": "An account for each person"
48
+ }
49
+ },
50
+ "roles": {
51
+ "label": "Should there be roles? (for example, admin and regular user)",
52
+ "why": "These become the rules for who can do what"
53
+ },
54
+ "dataSensitivity": {
55
+ "label": "The most sensitive information it handles",
56
+ "why": "This decides how it is stored and how strict the backups are",
57
+ "options": {
58
+ "公開してよい情報のみ": "Only information that can be public",
59
+ "身内だけの情報": "Information for close people only",
60
+ "個人情報を含む": "Includes personal information",
61
+ "お金や健康など特に機微な情報": "Especially sensitive information, such as money or health"
62
+ }
63
+ },
64
+ "uiLanguage": {
65
+ "label": "The language of the screens",
66
+ "why": "The language the app is shown in",
67
+ "options": {
68
+ "日本語": "Japanese",
69
+ "English": "English",
70
+ "両方": "Both"
71
+ }
72
+ },
73
+ "design": {
74
+ "label": "Look",
75
+ "why": "\"The same as MulmoTerminal\" builds it with the same parts, colors and icons as the collection's screens you saw in MulmoTerminal. The others are templates that keep those parts' shapes and swap the colors and the roundness of the corners",
76
+ "options": {
77
+ "MulmoTerminal と同じ": "The same as MulmoTerminal",
78
+ "やわらかい(暖かい紙の色・丸い角)": "Soft (warm paper colors, round corners)",
79
+ "くっきり(白と黒・小さな角)": "Crisp (black and white, small corners)",
80
+ "落ち着いた(深い緑・やさしい灰色)": "Calm (deep green, gentle gray)"
81
+ }
82
+ }
83
+ },
84
+ "steps": {
85
+ "import@local": {
86
+ "title": "Move the records",
87
+ "description": "Moves the copied collection's records, and the images and files they point to, into the app's database and data/files/. Running it again gives the same result. A build that copied only the shape does nothing here."
88
+ },
89
+ "import@firebase": {
90
+ "title": "Move the records (emulators)",
91
+ "description": "Builds the way to move the copied collection's records into Firestore, and the images and files they point to into Cloud Storage, and checks it on the emulators. A build that copied only the shape does nothing here."
92
+ },
93
+ "import@cloudflare": {
94
+ "title": "Move the records",
95
+ "description": "Builds the way to move the copied collection's records into D1, and the images and files they point to into R2, and checks it by moving them twice into an empty local setup. A build that copied only the shape does nothing here."
96
+ },
97
+ "import@supabase": {
98
+ "title": "Move the records",
99
+ "description": "Builds the way to move the copied collection's records into Postgres, and the images and files they point to into Storage, and checks it by rebuilding the local database and moving them twice. A build that copied only the shape does nothing here."
100
+ },
101
+ "acceptance@local": {
102
+ "title": "Prove the must-haves by tests",
103
+ "description": "Each must-have in the spec gets a test that shows it working end to end through the API."
104
+ },
105
+ "acceptance@firebase": {
106
+ "title": "Prove the must-haves by tests",
107
+ "description": "Each must-have gets a test against the emulators that walks it end to end as a signed-in user, and is refused for everyone it should be refused for."
108
+ },
109
+ "acceptance@cloudflare": {
110
+ "title": "Prove the must-haves by tests",
111
+ "description": "Each must-have in the spec gets a test that shows it working end to end through the Worker, inside the Workers runtime."
112
+ },
113
+ "acceptance@supabase": {
114
+ "title": "Prove the must-haves by tests",
115
+ "description": "Each must-have in the spec gets a test against the local Supabase stack that walks it end to end as the user the spec names, and is refused for everyone it should be refused for."
116
+ },
117
+ "actions@local": {
118
+ "title": "Make the actions features",
119
+ "description": "Of the original actions and automatic imports, builds the ones the spec decided to \"make a feature\", and writes the steps for the ones \"a person does by hand\" in the README."
120
+ },
121
+ "actions@firebase": {
122
+ "title": "Make the actions features",
123
+ "description": "Of the original actions and automatic imports, builds the ones the spec decided to \"make a feature\" as screen actions, functions and scheduled functions, and writes the steps for the ones \"a person does by hand\" in the README."
124
+ },
125
+ "actions@cloudflare": {
126
+ "title": "Make the actions features",
127
+ "description": "Of the original actions and automatic imports, builds the ones the spec decided to \"make a feature\" as Worker operations and scheduled runs (Cron Triggers), and writes the steps for the ones \"a person does by hand\" in the README."
128
+ },
129
+ "actions@supabase": {
130
+ "title": "Make the actions features",
131
+ "description": "Of the original actions and automatic imports, builds the ones the spec decided to \"make a feature\" as Postgres functions, Edge Functions and scheduled runs, and writes the steps for the ones \"a person does by hand\" in the README."
132
+ },
133
+ "features": {
134
+ "title": "Features and screens",
135
+ "description": "Builds the spec's must-haves as screens and client-side code, and checks on the emulators that they work inside the Firestore rules."
136
+ },
137
+ "design": {
138
+ "title": "Match the look",
139
+ "description": "Makes the screens match the chosen look (the same as MulmoTerminal, or a template). Uses the same parts and classes as MulmoTerminal's collection screens, with Tailwind, and carries the original collection's icon over to the headings. Writes the rules down in DESIGN.md."
140
+ },
141
+ "import-production@firebase": {
142
+ "title": "Move the records to production",
143
+ "description": "With the way checked on the emulators, moves the copied records, images and files into the production Firestore and Cloud Storage, then reads production back and compares it with the original. A build that copied only the shape does nothing here."
144
+ },
145
+ "import-production@cloudflare": {
146
+ "title": "Move the records to production",
147
+ "description": "With the way checked locally, moves the copied records, images and files into the production D1 and R2, then reads them back with wrangler and compares them with the original. A build that copied only the shape does nothing here."
148
+ },
149
+ "import-production@supabase": {
150
+ "title": "Move the records to production",
151
+ "description": "With the way checked locally, moves the copied records, images and files into the production Postgres and Storage, then reads them back with the Supabase CLI and compares them with the original. A build that copied only the shape does nothing here."
152
+ }
153
+ }
154
+ }