lism-cli 0.7.0 → 0.9.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.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # lism-cli
2
2
 
3
- [Lism CSS](https://lism-css.com) / [Lism UI](https://lism-css.com/ui) のための CLI ツール。`lism` コマンドで新規プロジェクト生成・UI コンポーネント追加・AI スキル配置を行います。
3
+ [Lism CSS](https://lism-css.com) / [Lism UI](https://lism-css.com/ui) のためのCLIツール。`lism-cli` コマンドで新規プロジェクト生成・UIコンポーネント追加・AIスキル配置を行います。
4
4
 
5
5
  ## 前提条件
6
6
 
@@ -9,9 +9,11 @@
9
9
  ## コマンド体系
10
10
 
11
11
  ```
12
- lism create [targetDir] [--template <name|category>] # templates から新規プロジェクト
13
- lism ui { init | add <names...> | list } # Lism UI コンポーネントの追加
14
- lism skill { add | check | update } # AI エージェント向け SKILL.md 配置
12
+ lism-cli create [targetDir] [--template <name|category>] [--lang <ja|en>] # templates から新規プロジェクト
13
+ lism-cli init [--ui-framework <react|astro>] [--ui-dir <path>] # lism.config ファイルの新規生成
14
+ lism-cli ui { add <names...> | list } # Lism UI コンポーネントの追加
15
+ lism-cli skill { add [skill] | check | update } # AI エージェント向け SKILL.md 配置
16
+ lism-cli mockup # 画面モックアップ作成の案内
15
17
  ```
16
18
 
17
19
  ## 使い方
@@ -34,9 +36,28 @@ pnpm dlx lism-cli create --template blog-astro-minimal --lang en ./my-blog
34
36
 
35
37
  同じ動作は `pnpm create lism` / `npm create lism@latest` でも呼び出せます(`create-lism` パッケージ経由)。挙動は両者で共通です。
36
38
 
37
- `--lang <ja|en>` は CLI の表示言語に加えて、**生成されるテンプレート本体の言語**にも反映されます。`--lang` を指定しない場合は、対話端末(TTY)ではほかのどの選択よりも先に言語選択プロンプトが表示され、選んだ言語で以降の表示とテンプレート生成が確定します(非対話環境・CI 等では `en` にフォールバック)。対応言語版を持つテンプレート(`blog-astro-minimal` / `blog-astro-personal` / `blog-astro-techlog` / `lp-astro-corporate` / `lp-astro-interior`)では、指定言語のサイト文言・サンプルコンテンツで生成されます。言語版が無いテンプレートは、指定言語に関わらず既存(ベース)の内容で生成されます。
39
+ `--lang <ja|en>` は CLIの表示言語に加えて、**生成されるテンプレート本体の言語**にも反映されます。`--lang` を指定しない場合は、対話端末(TTY)ではほかのどの選択よりも先に言語選択プロンプトが表示され、選んだ言語で以降の表示とテンプレート生成が確定します(非対話環境・CI等では `en` にフォールバック)。対応言語版を持つテンプレート(`blog-astro-minimal` / `blog-astro-personal` / `blog-astro-techlog` / `lp-astro-corporate` / `lp-astro-interior`)では、指定言語のサイト文言・サンプルコンテンツで生成されます。言語版が無いテンプレートは、指定言語に関わらず既存(ベース)の内容で生成されます。
38
40
 
39
- ### UI コンポーネントの追加
41
+ ### lism.config の生成
42
+
43
+ 既存プロジェクトに Lism CSS を後付けする場合など、設定ファイルのひな形が必要なときは `init` を使います。
44
+
45
+ ```bash
46
+ pnpm dlx lism-cli init
47
+ ```
48
+
49
+ core 設定(`tokens` / `props` 等、コメントアウトされたひな形)を持つ `lism.config.js` を新規作成します。対話の中で「Lism UI のコンポーネントも使いますか?」と確認され(デフォルト: No)、Yes と答えた場合のみ `ui` セクション(`framework` / `dir`)も併せて生成されます。
50
+
51
+ `ui` セクションの値はオプションで先渡しできます。指定されなかった質問だけが対話で行われます。
52
+
53
+ - `--ui-framework <react|astro>`: framework の選択をスキップし、UI 利用の確認のみ行います(この場合のデフォルトは Yes)
54
+ - `--ui-dir <path>`: UI コンポーネントの出力先。指定すると UI 利用の意思とみなし、確認を省略して framework の選択のみ行います
55
+
56
+ 非対話環境(CI 等)では質問を出せないため、`--ui-framework` があれば `ui` セクション込みで生成し、無ければ `ui` セクション無しで生成します(`--ui-dir` のみの指定はエラーになります)。
57
+
58
+ 既に `lism.config.{ts,mjs,js}` がある場合は何も変更しません(`ui` セクションの後付けは、後述の `ui add` 実行時に表示されるスニペットを貼り付けてください)。
59
+
60
+ ### UIコンポーネントの追加
40
61
 
41
62
  ```bash
42
63
  # 単一 / 複数
@@ -53,27 +74,39 @@ pnpm dlx lism-cli ui list
53
74
  pnpm dlx lism-cli ui add accordion --ref dev
54
75
  ```
55
76
 
56
- コンポーネントは [`packages/lism-ui/src/components`](https://github.com/lism-css/lism-css/tree/main/packages/lism-ui/src/components) から [giget](https://github.com/unjs/giget) 経由で直接取得されます。`lism-ui` を更新するだけで CLI 側も自動で追従します。
77
+ コンポーネントは [`packages/lism-ui/src/components`](https://github.com/lism-css/lism-css/tree/main/packages/lism-ui/src/components) から [giget](https://github.com/unjs/giget) 経由で直接取得されるため、既存コンポーネントの実装を更新するだけでCLI側も自動で追従します。ただし、コンポーネントを追加・削除した場合は `lism-ui` 側で `registry-index.json` を再生成(ビルド時の `gen:registry`)してcommitする必要があります(`ui list` / `ui add --all` が参照するカタログのため)。
57
78
 
58
- 初回実行時に `lism.config.js` が無い場合は対話式セットアップが走り、`cli` セクションを書き込みます。
79
+ `ui` セクションの設定が見つからない状態で `ui add` を実行すると、対話式セットアップが走ります。
59
80
 
60
81
  ```
61
82
  ? フレームワークを選択してください: React
62
- ? コンポーネントの出力先ディレクトリ: src/components/ui
63
- ? helper の出力先ディレクトリ: src/components/ui/_helper
64
- ✔ lism.config.js を作成しました。
65
83
  ```
66
84
 
67
- `ui init` で設定の生成のみ行うこともできます。既存の `lism.config.js` には `cli` セクションのみ追記されます。
85
+ 出力先ディレクトリは既定値(`src/components/ui`)が使われます。変更したい場合は `--ui-dir` フラグで指定してください。
86
+
87
+ `ui add` は入力した値をその回の実行に使うだけで設定ファイルは書き換えず、最後に `lism.config.*` へ貼り付けるための `ui` セクションのスニペットを案内します(CSSカスタマイズ用に先に作られた設定を壊さないため)。
88
+
89
+ 設定をファイルとして残すには、`lism.config.*` が無い場合は `lism-cli init`(前述)で `ui` セクション込みの設定ファイルを生成し、既にある場合は上記スニペットを貼り付けてください。
68
90
 
69
91
  ### AI エージェント向けスキルの配置
70
92
 
71
- `SKILL.md` を各種 AI ツールの所定ディレクトリへ展開します。
93
+ 同梱スキル(`SKILL.md` ほか一式)を各種AIツールの所定ディレクトリへ展開します。
94
+
95
+ 同梱スキルは以下の3つです:
96
+
97
+ | スキル | 説明 |
98
+ |--------|------|
99
+ | `lism-css-guide` | Lism CSSでUI・ページを実装・修正する時に使う実装ガイド |
100
+ | `lism-css-refactor` | 既存の Lism CSSコードを、見た目や挙動を変えずにLismらしい書き方へ整理するリファクタガイド |
101
+ | `lism-mockup-guide` | `@lism-css/mockup`で画面モックアップを組む時のワークフローとデータ契約のガイド(`lism-css-guide`併用前提) |
72
102
 
73
103
  ```bash
74
104
  # 対話モード(使用中のツールを自動検出)
75
105
  pnpm dlx lism-cli skill add
76
106
 
107
+ # スキル名を指定して個別に導入
108
+ pnpm dlx lism-cli skill add lism-css-refactor
109
+
77
110
  # ツールを明示指定
78
111
  pnpm dlx lism-cli skill add --claude --cursor
79
112
 
@@ -87,46 +120,69 @@ pnpm dlx lism-cli skill check
87
120
  pnpm dlx lism-cli skill update --claude
88
121
  ```
89
122
 
90
- 配置先の対応表:
123
+ `skill add` は引数なしで実行すると同梱スキルすべてを一括導入し、`skill add <skill>` でスキル名を指定すると、そのスキルだけを配置します。`check` / `update` はスキル引数を取らず、常に同梱スキル全体が対象です。
124
+
125
+ 配置先の対応表(`<skill>` にはスキル名が入ります):
91
126
 
92
127
  | ツール | 配置先 |
93
128
  |--------|--------|
94
- | `--claude` | `.claude/skills/lism-css-guide` |
95
- | `--codex` | `.agents/skills/lism-css-guide` |
96
- | `--cursor` | `.cursor/skills/lism-css-guide` |
97
- | `--windsurf` | `.windsurf/skills/lism-css-guide` |
98
- | `--cline` | `.cline/skills/lism-css-guide` |
99
- | `--copilot` | `.github/skills/lism-css-guide` |
100
- | `--gemini` | `.gemini/skills/lism-css-guide` |
101
- | `--junie` | `.junie/skills/lism-css-guide` |
129
+ | `--claude` | `.claude/skills/<skill>` |
130
+ | `--codex` | `.agents/skills/<skill>` |
131
+ | `--cursor` | `.cursor/skills/<skill>` |
132
+ | `--windsurf` | `.windsurf/skills/<skill>` |
133
+ | `--cline` | `.cline/skills/<skill>` |
134
+ | `--copilot` | `.github/skills/<skill>` |
135
+ | `--gemini` | `.gemini/skills/<skill>` |
136
+ | `--junie` | `.junie/skills/<skill>` |
137
+
138
+ ### 画面モックアップの案内
139
+
140
+ `lism-cli mockup` は、画面モックアップを作成するCLI [`@lism-css/mockup`](https://www.npmjs.com/package/@lism-css/mockup) の使い方を表示するだけのコマンドです。`lism-cli` 自体はモックアップ機能を持ちません。
141
+
142
+ ```bash
143
+ pnpm dlx lism-cli mockup
144
+ ```
145
+
146
+ モックアップの作成・検証・プレビューは `@lism-css/mockup` を直接実行してください。
147
+
148
+ ```bash
149
+ npx @lism-css/mockup init [dir] # ひな形+契約説明書の生成
150
+ npx @lism-css/mockup check [dir] # 非対話の検証
151
+ npx @lism-css/mockup dev [dir] # devサーバー起動(ブラウザ確認用)
152
+ ```
153
+
154
+ AIエージェントにモックアップを作らせる場合は、`lism-mockup-guide` スキル(前述の `skill add`)も併せて導入してください。
102
155
 
103
156
  ## lism.config.js
104
157
 
105
- `ui init` / `ui add` が生成・読み込む設定ファイル。CSS の設定(`tokens` 等)と CLI 設定を同居できます。
158
+ `ui add` が読み込む設定ファイル(新規作成するのは `init`)。CSSの設定(`tokens` 等)とUI設定を同居できます。
106
159
 
107
160
  ```js
108
161
  export default {
109
- cli: {
162
+ ui: {
110
163
  framework: 'react', // 'react' | 'astro'
111
- componentsDir: 'src/components/ui',
112
- helperDir: 'src/components/ui/_helper',
164
+ dir: 'src/components/ui',
113
165
  },
114
166
  };
115
167
  ```
116
168
 
117
- `lism.config.mjs` も同様に読み込まれます。旧 `lism-ui.json` は廃止予定(互換ロードのみ。起動時に deprecation 警告)。
169
+ helper の配置先は個別に設定できず、常に `{dir}/_helper` に固定されます。旧キー `ui.componentsDir` `ui.dir` が無い場合のみ後方互換として読み込まれます。
170
+
171
+ 設定ファイルは `lism.config.ts` / `lism.config.mjs` / `lism.config.js` に対応しており、この順で探索して最初に見つかったものを読み込みます。`lism-css` 本体の設定読込(`@lism-css/plugin` / `lism-css build`)も同じ探索順です。
118
172
 
119
- > **Note:** TypeScript の `lism.config.ts` は現在未対応です。`lism-css` 本体の設定読込(`@lism-css/plugin` / `lism-css build`)も `.ts` を読み込まない設計のため、設定ファイルは `.js` / `.mjs` で記述してください。
173
+ `cli` セクション名も後方互換のため読み込めますが、deprecation警告が出るので `ui` へのリネームを推奨します。
120
174
 
121
175
  ## パッケージが見つからないエラーが出る場合
122
176
 
123
- npm / pnpm の Safe Supply Chain 機能により、公開から間もないパッケージがブロックされる場合があります。
177
+ npm / pnpmには、公開から間もないバージョンのインストールを一定期間ブロックする仕組みがあります(npmの`min-release-age`設定、pnpmの`minimumReleaseAge`設定)。公開直後の`lism-cli`を実行すると、このガードによりパッケージが見つからないエラーになる場合があります。次のように一時的に無効化して実行できます。
124
178
 
125
179
  ```bash
126
- npm exec --safe-chain-skip-minimum-package-age lism-cli create
127
- pnpm --safe-chain-skip-minimum-package-age dlx lism-cli create
180
+ npm exec --min-release-age 0 lism-cli create
181
+ pnpm dlx --config.minimumReleaseAge=0 lism-cli create
128
182
  ```
129
183
 
184
+ Aikido Securityのsafe-chainなど、サードパーティのサプライチェーン保護ツールを導入している場合は、そのツール側の設定(例: `SAFE_CHAIN_MINIMUM_PACKAGE_AGE_HOURS=0`)も確認してください。
185
+
130
186
  ## License
131
187
 
132
188
  MIT
@@ -1,5 +1,29 @@
1
1
  // <define:__LISM_PACKAGE_VERSIONS__>
2
- var define_LISM_PACKAGE_VERSIONS_default = { "lism-css": "0.23.0", "@lism-css/ui": "0.23.0", "@lism-css/plugin": "0.3.0" };
2
+ var define_LISM_PACKAGE_VERSIONS_default = { "lism-css": "0.26.0", "@lism-css/ui": "0.26.0", "@lism-css/plugin": "0.4.2" };
3
+
4
+ // src/logger.ts
5
+ import pc from "picocolors";
6
+ var logger = {
7
+ info(msg) {
8
+ console.log(pc.cyan(msg));
9
+ },
10
+ success(msg) {
11
+ console.log(pc.green(msg));
12
+ },
13
+ warn(msg) {
14
+ console.log(pc.yellow(`WARN: ${msg}`));
15
+ },
16
+ error(msg) {
17
+ console.error(pc.red(`ERROR: ${msg}`));
18
+ },
19
+ log(msg) {
20
+ console.log(msg);
21
+ },
22
+ heading(msg) {
23
+ console.log(pc.bold(pc.cyan(`
24
+ \u25B8 ${msg}`)));
25
+ }
26
+ };
3
27
 
4
28
  // src/i18n.ts
5
29
  import { execFileSync } from "child_process";
@@ -34,31 +58,24 @@ var messages = {
34
58
  ja: "\u65E2\u5B58\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u5F37\u5236\u4E0A\u66F8\u304D",
35
59
  en: "Overwrite existing directory"
36
60
  },
61
+ // init
62
+ "cli.init.description": {
63
+ ja: "lism.config \u30D5\u30A1\u30A4\u30EB\u3092\u65B0\u898F\u751F\u6210\u3059\u308B",
64
+ en: "Generate a new lism.config file"
65
+ },
66
+ "cli.init.opt.uiFramework": {
67
+ ja: "UI \u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u30D5\u30EC\u30FC\u30E0\u30EF\u30FC\u30AF\uFF08ui.framework\uFF09",
68
+ en: "Framework for UI components (ui.framework)"
69
+ },
70
+ "cli.init.opt.uiDir": {
71
+ ja: "UI \u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u51FA\u529B\u5148\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\uFF08ui.dir\uFF09",
72
+ en: "Output directory for UI components (ui.dir)"
73
+ },
37
74
  // ui
38
75
  "cli.ui.description": {
39
76
  ja: "Lism UI \u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u8FFD\u52A0\u30FB\u7BA1\u7406",
40
77
  en: "Manage Lism UI components"
41
78
  },
42
- "cli.ui.init.description": {
43
- ja: "lism.config.js \u306E cli \u30BB\u30AF\u30B7\u30E7\u30F3\u3092\u751F\u6210\u3059\u308B",
44
- en: "Generate the cli section of lism.config.js"
45
- },
46
- "cli.ui.init.opt.framework": {
47
- ja: "\u30D5\u30EC\u30FC\u30E0\u30EF\u30FC\u30AF",
48
- en: "Framework"
49
- },
50
- "cli.ui.init.opt.componentsDir": {
51
- ja: "\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u51FA\u529B\u5148\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA",
52
- en: "Output directory for components"
53
- },
54
- "cli.ui.init.opt.helperDir": {
55
- ja: "helper \u306E\u51FA\u529B\u5148\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA",
56
- en: "Output directory for helpers"
57
- },
58
- "cli.ui.init.opt.force": {
59
- ja: "\u65E2\u5B58\u306E cli \u30BB\u30AF\u30B7\u30E7\u30F3\u3092\u4E0A\u66F8\u304D",
60
- en: "Overwrite the existing cli section"
61
- },
62
79
  "cli.ui.add.description": {
63
80
  ja: "\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u3092\u8FFD\u52A0\u3059\u308B",
64
81
  en: "Add components"
@@ -83,6 +100,11 @@ var messages = {
83
100
  ja: "\u53D6\u5F97\u5143\u306E Git ref\uFF08\u30D6\u30E9\u30F3\u30C1 / \u30BF\u30B0 / \u30B3\u30DF\u30C3\u30C8\uFF09",
84
101
  en: "Git ref to fetch from (branch / tag / commit)"
85
102
  },
103
+ // mockup
104
+ "cli.mockup.description": {
105
+ ja: "\u753B\u9762\u30E2\u30C3\u30AF\u30A2\u30C3\u30D7\u306E\u6848\u5185\u3092\u8868\u793A\u3059\u308B\uFF08\u5B9F\u4F53\u306F @lism-css/mockup\uFF09",
106
+ en: "Show guidance for mockups (provided by @lism-css/mockup)"
107
+ },
86
108
  // skill
87
109
  "cli.skill.description": {
88
110
  ja: "AI \u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u5411\u3051\u30B9\u30AD\u30EB\uFF08SKILL.md\uFF09\u306E\u914D\u7F6E\u3068\u7BA1\u7406",
@@ -92,6 +114,10 @@ var messages = {
92
114
  ja: "\u30B9\u30AD\u30EB\u3092\u914D\u7F6E\u3059\u308B",
93
115
  en: "Deploy skills"
94
116
  },
117
+ "cli.skill.add.arg.skill": {
118
+ ja: "\u914D\u7F6E\u3059\u308B\u30B9\u30AD\u30EB\u540D\uFF08\u7701\u7565\u6642\u306F\u5168\u30B9\u30AD\u30EB\uFF09",
119
+ en: "Skill name to deploy (all skills if omitted)"
120
+ },
95
121
  "cli.skill.add.opt.overwrite": {
96
122
  ja: "\u78BA\u8A8D\u306A\u3057\u3067\u4E0A\u66F8\u304D",
97
123
  en: "Overwrite without confirmation"
@@ -212,17 +238,40 @@ var messages = {
212
238
  en: "Failed to rewrite package.json: {reason}"
213
239
  },
214
240
  // ---------------------------------------------------------------------------
241
+ // init
242
+ // ---------------------------------------------------------------------------
243
+ "init.alreadyExists": {
244
+ ja: "{filename} \u306F\u65E2\u306B\u5B58\u5728\u3059\u308B\u305F\u3081\u3001\u4F55\u3082\u5909\u66F4\u3057\u307E\u305B\u3093\u3067\u3057\u305F\u3002",
245
+ en: "{filename} already exists; nothing was changed."
246
+ },
247
+ "init.promptUseUi": {
248
+ ja: "Lism UI \u306E\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u3082\u4F7F\u3044\u307E\u3059\u304B\uFF1F\uFF08ui \u30BB\u30AF\u30B7\u30E7\u30F3\u3092\u8FFD\u52A0\u3057\u307E\u3059\uFF09",
249
+ en: "Will you also use Lism UI components? (adds a ui section)"
250
+ },
251
+ "init.created": {
252
+ ja: "{path} \u3092\u4F5C\u6210\u3057\u307E\u3057\u305F\u3002",
253
+ en: "Created {path}."
254
+ },
255
+ "init.uiFrameworkRequired": {
256
+ ja: "\u975E\u5BFE\u8A71\u74B0\u5883\u3067\u306F --ui-dir \u5358\u72EC\u3067 ui \u30BB\u30AF\u30B7\u30E7\u30F3\u3092\u751F\u6210\u3067\u304D\u307E\u305B\u3093\u3002--ui-framework \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
257
+ en: "Cannot generate the ui section from --ui-dir alone in a non-interactive environment. Specify --ui-framework."
258
+ },
259
+ // ---------------------------------------------------------------------------
215
260
  // ui
216
261
  // ---------------------------------------------------------------------------
217
- // ui 共通(add / list で共有)
262
+ // ui 共通(add / init で共有)
263
+ "ui.promptFramework": {
264
+ ja: "\u30D5\u30EC\u30FC\u30E0\u30EF\u30FC\u30AF\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044:",
265
+ en: "Select a framework:"
266
+ },
218
267
  "ui.catalogFailed": {
219
268
  ja: "\u30AB\u30BF\u30ED\u30B0\u306E\u53D6\u5F97\u306B\u5931\u6557\u3057\u307E\u3057\u305F{refInfo}: {reason}",
220
269
  en: "Failed to fetch catalog{refInfo}: {reason}"
221
270
  },
222
271
  // ui add
223
272
  "ui.add.noConfig": {
224
- ja: "lism.config.js \u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3092\u958B\u59CB\u3057\u307E\u3059...\n",
225
- en: "lism.config.js not found. Starting setup...\n"
273
+ ja: "ui \u30BB\u30AF\u30B7\u30E7\u30F3\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002\u3044\u304F\u3064\u304B\u8CEA\u554F\u3057\u307E\u3059\u3002",
274
+ en: "No ui section found. A few questions to get you started."
226
275
  },
227
276
  "ui.add.addingAll": {
228
277
  ja: "\u5168 {count} \u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u3092\u8FFD\u52A0\u3057\u307E\u3059...",
@@ -288,46 +337,9 @@ var messages = {
288
337
  ja: " \u30B9\u30AD\u30C3\u30D7: {path}",
289
338
  en: " Skipped: {path}"
290
339
  },
291
- // ui init
292
- "ui.init.promptFramework": {
293
- ja: "\u30D5\u30EC\u30FC\u30E0\u30EF\u30FC\u30AF\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044:",
294
- en: "Select a framework:"
295
- },
296
- "ui.init.promptComponentsDir": {
297
- ja: "\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8\u306E\u51FA\u529B\u5148\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA:",
298
- en: "Output directory for components:"
299
- },
300
- "ui.init.promptHelperDir": {
301
- ja: "helper \u306E\u51FA\u529B\u5148\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA:",
302
- en: "Output directory for helpers:"
303
- },
304
- "ui.init.patchedUpdate": {
305
- ja: "{path} \u306B cli \u30BB\u30AF\u30B7\u30E7\u30F3\u3092\u66F4\u65B0\u3057\u307E\u3057\u305F\u3002",
306
- en: "Updated the cli section in {path}."
307
- },
308
- "ui.init.patchedAdd": {
309
- ja: "{path} \u306B cli \u30BB\u30AF\u30B7\u30E7\u30F3\u3092\u8FFD\u8A18\u3057\u307E\u3057\u305F\u3002",
310
- en: "Added the cli section to {path}."
311
- },
312
- "ui.init.notPatched": {
313
- ja: "{path} \u306B\u65E2\u306B cli \u30BB\u30AF\u30B7\u30E7\u30F3\u304C\u542B\u307E\u308C\u3066\u3044\u308B\u304B\u3001export default \u304C\u691C\u51FA\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u624B\u52D5\u3067\u8FFD\u8A18\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
314
- en: "Either {path} already contains a cli section or no export default was detected. Please add it manually."
315
- },
316
- "ui.init.created": {
317
- ja: "{path} \u3092\u4F5C\u6210\u3057\u307E\u3057\u305F\u3002",
318
- en: "Created {path}."
319
- },
320
- "ui.init.legacyDetected": {
321
- ja: "{filename} \u3092\u691C\u51FA\u3057\u307E\u3057\u305F\u3002lism.config.js \u3078\u79FB\u884C\u3057\u307E\u3059\u3002\u53E4\u3044\u30D5\u30A1\u30A4\u30EB\u306F\u5F8C\u3067\u524A\u9664\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
322
- en: "Detected {filename}. Migrating to lism.config.js. Please remove the old file afterwards."
323
- },
324
- "ui.init.alreadyExists": {
325
- ja: "{filename} \u306B\u306F\u65E2\u306B cli \u30BB\u30AF\u30B7\u30E7\u30F3\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u4E0A\u66F8\u304D\u3059\u308B\u306B\u306F --force \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
326
- en: "{filename} already has a cli section. Use --force to overwrite."
327
- },
328
- "ui.init.willOverwrite": {
329
- ja: "{filename} \u306E\u65E2\u5B58\u306E cli \u30BB\u30AF\u30B7\u30E7\u30F3\u3092\u4E0A\u66F8\u304D\u3057\u307E\u3059\u3002",
330
- en: "Overwriting the existing cli section in {filename}."
340
+ "ui.add.snippetGuide": {
341
+ ja: "\u6B21\u56DE\u304B\u3089\u540C\u3058\u8CEA\u554F\u3092\u3055\u308C\u306A\u3044\u305F\u3081\u306B\u3001{filename} \u306E export default \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u5185\u306B\u4EE5\u4E0B\u3092\u8CBC\u308A\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044:\n\n{snippet}\n",
342
+ en: "To avoid being asked these questions again, paste the following inside the exported config object in {filename}:\n\n{snippet}\n"
331
343
  },
332
344
  // ui list
333
345
  "ui.list.fetching": {
@@ -343,6 +355,13 @@ var messages = {
343
355
  en: "Total: {count} components"
344
356
  },
345
357
  // ---------------------------------------------------------------------------
358
+ // mockup
359
+ // ---------------------------------------------------------------------------
360
+ "mockup.guide": {
361
+ ja: "\u753B\u9762\u30E2\u30C3\u30AF\u30A2\u30C3\u30D7\u6A5F\u80FD\u306F\u5225\u30D1\u30C3\u30B1\u30FC\u30B8 @lism-css/mockup \u304C\u63D0\u4F9B\u3057\u307E\u3059\u3002\n\n npx @lism-css/mockup init [dir] \u2026 \u3072\u306A\u5F62\uFF0B\u5951\u7D04\u8AAC\u660E\u66F8\u306E\u751F\u6210\n npx @lism-css/mockup dev [dir] \u2026 dev\u30B5\u30FC\u30D0\u30FC\u8D77\u52D5\uFF08\u30D6\u30E9\u30A6\u30B6\u78BA\u8A8D\u7528\uFF09\n npx @lism-css/mockup check [dir] \u2026 \u975E\u5BFE\u8A71\u306E\u691C\u8A3C\n\n\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u6E08\u307F\u306E\u74B0\u5883\u3067\u306F bin \u306E lism-mockup \u3067\u3082\u5B9F\u884C\u3067\u304D\u307E\u3059\u3002",
362
+ en: "Mockup features are provided by a separate package, @lism-css/mockup.\n\n npx @lism-css/mockup init [dir] ... Generate scaffolding and a contract document\n npx @lism-css/mockup dev [dir] ... Start the dev server (for browser preview)\n npx @lism-css/mockup check [dir] ... Run non-interactive checks\n\nIf installed, you can also run it via the lism-mockup bin."
363
+ },
364
+ // ---------------------------------------------------------------------------
346
365
  // skill
347
366
  // ---------------------------------------------------------------------------
348
367
  // skill add
@@ -359,8 +378,12 @@ var messages = {
359
378
  en: "No target tools were selected."
360
379
  },
361
380
  "skill.add.fetching": {
362
- ja: "\u30B9\u30AD\u30EB\u3092\u53D6\u5F97\u4E2D\uFF08ref: {ref}\uFF09...",
363
- en: "Fetching skills (ref: {ref})..."
381
+ ja: "\u30B9\u30AD\u30EB {skill} \u3092\u53D6\u5F97\u4E2D\uFF08ref: {ref}\uFF09...",
382
+ en: "Fetching skill {skill} (ref: {ref})..."
383
+ },
384
+ "skill.unknownSkill": {
385
+ ja: '\u30B9\u30AD\u30EB "{name}" \u306F\u5B58\u5728\u3057\u307E\u305B\u3093\u3002\u5229\u7528\u53EF\u80FD: {list}',
386
+ en: 'Unknown skill "{name}". Available: {list}'
364
387
  },
365
388
  "skill.add.skippedSame": {
366
389
  ja: " \u30B9\u30AD\u30C3\u30D7\uFF08\u5DEE\u5206\u306A\u3057\uFF09: {label}",
@@ -400,8 +423,8 @@ var messages = {
400
423
  en: "No installed skills found. Run `{invoke} skill add` to deploy them."
401
424
  },
402
425
  "skill.check.fetching": {
403
- ja: "\u30EA\u30E2\u30FC\u30C8\u30B9\u30AD\u30EB\u3092\u53D6\u5F97\u4E2D\uFF08ref: {ref}\uFF09...",
404
- en: "Fetching remote skills (ref: {ref})..."
426
+ ja: "\u30EA\u30E2\u30FC\u30C8\u30B9\u30AD\u30EB {skill} \u3092\u53D6\u5F97\u4E2D\uFF08ref: {ref}\uFF09...",
427
+ en: "Fetching remote skill {skill} (ref: {ref})..."
405
428
  },
406
429
  "skill.check.upToDate": {
407
430
  ja: " \u2713 {label} (\u6700\u65B0)",
@@ -412,8 +435,8 @@ var messages = {
412
435
  en: "All skills are up to date."
413
436
  },
414
437
  "skill.check.outdated": {
415
- ja: "{count} \u4EF6\u306E\u30C4\u30FC\u30EB\u306B\u5DEE\u5206\u304C\u3042\u308A\u307E\u3059\u3002`{invoke} skill update` \u3067\u6700\u65B0\u306B\u66F4\u65B0\u3067\u304D\u307E\u3059\u3002",
416
- en: "{count} tools have changes. Run `{invoke} skill update` to update them."
438
+ ja: "{count} \u4EF6\u306E\u914D\u7F6E\u306B\u5DEE\u5206\u304C\u3042\u308A\u307E\u3059\u3002`{invoke} skill update` \u3067\u6700\u65B0\u306B\u66F4\u65B0\u3067\u304D\u307E\u3059\u3002",
439
+ en: "{count} deployment(s) differ from the remote. Run `{invoke} skill update` to update them."
417
440
  },
418
441
  "skill.check.diffModified": {
419
442
  ja: "\u5909\u66F4 {count}",
@@ -430,34 +453,26 @@ var messages = {
430
453
  // ---------------------------------------------------------------------------
431
454
  // config
432
455
  // ---------------------------------------------------------------------------
433
- "config.legacyWarning": {
434
- ja: '[deprecated] {filename} \u306F\u5EC3\u6B62\u4E88\u5B9A\u3067\u3059\u3002"{invoke} ui init" \u3067 lism.config.js \u3078\u79FB\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002',
435
- en: '[deprecated] {filename} is deprecated. Run "{invoke} ui init" to migrate to lism.config.js.'
436
- },
437
- "config.notFound": {
438
- ja: "lism.config.js / lism.config.mjs / lism-ui.json \u306E\u3044\u305A\u308C\u3082\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002",
439
- en: "None of lism.config.js / lism.config.mjs / lism-ui.json were found."
440
- },
441
- "config.cliSectionMissing": {
442
- ja: "{filename} \u304B\u3089 CLI \u8A2D\u5B9A\uFF08cli \u30AD\u30FC\uFF09\u3092\u8AAD\u307F\u8FBC\u3081\u307E\u305B\u3093\u3067\u3057\u305F\u3002",
443
- en: "Failed to read the CLI config (cli key) from {filename}."
444
- },
445
456
  "config.invalidFramework": {
446
- ja: 'cli.framework \u306F "react" \u307E\u305F\u306F "astro" \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002',
447
- en: 'cli.framework must be "react" or "astro".'
457
+ ja: 'ui.framework \u306F "react" \u307E\u305F\u306F "astro" \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002',
458
+ en: 'ui.framework must be "react" or "astro".'
448
459
  },
449
- "config.invalidComponentsDir": {
450
- ja: "cli.componentsDir \u306F\u6587\u5B57\u5217\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
451
- en: "cli.componentsDir must be a string."
460
+ "config.invalidDir": {
461
+ ja: "ui.dir \u306F\u6587\u5B57\u5217\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
462
+ en: "ui.dir must be a string."
452
463
  },
453
- "config.invalidHelperDir": {
454
- ja: "cli.helperDir \u306F\u6587\u5B57\u5217\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
455
- en: "cli.helperDir must be a string."
464
+ "config.cliKeyDeprecated": {
465
+ ja: '[deprecated] {filename} \u306E "cli:" \u30AD\u30FC\u306F "ui:" \u3078\u306E\u5909\u66F4\u304C\u63A8\u5968\u3055\u308C\u3066\u3044\u307E\u3059\u3002',
466
+ en: '[deprecated] The "cli:" key in {filename} is recommended to be renamed to "ui:".'
456
467
  },
457
468
  "config.loadFailed": {
458
469
  ja: "{path} \u3092\u8AAD\u307F\u8FBC\u3081\u307E\u305B\u3093\u3067\u3057\u305F\uFF08\u69CB\u6587\u30A8\u30E9\u30FC\u7B49\uFF09\u3002\u4FEE\u6B63\u3057\u3066\u304B\u3089\u518D\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044: {reason}",
459
470
  en: "Failed to load {path} (syntax error, etc). Please fix it and retry: {reason}"
460
471
  },
472
+ "config.freshConfigExists": {
473
+ ja: "{path} \u306F\u65E2\u306B\u5B58\u5728\u3059\u308B\u305F\u3081\u65B0\u898F\u4F5C\u6210\u3067\u304D\u307E\u305B\u3093\u3002",
474
+ en: "Cannot create {path} because it already exists."
475
+ },
461
476
  // ---------------------------------------------------------------------------
462
477
  // common
463
478
  // ---------------------------------------------------------------------------
@@ -543,36 +558,12 @@ import path from "path";
543
558
  import { downloadTemplate } from "giget";
544
559
  import { select, input, confirm } from "@inquirer/prompts";
545
560
 
546
- // src/logger.ts
547
- import pc from "picocolors";
548
- var logger = {
549
- info(msg) {
550
- console.log(pc.cyan(msg));
551
- },
552
- success(msg) {
553
- console.log(pc.green(msg));
554
- },
555
- warn(msg) {
556
- console.log(pc.yellow(`WARN: ${msg}`));
557
- },
558
- error(msg) {
559
- console.error(pc.red(`ERROR: ${msg}`));
560
- },
561
- log(msg) {
562
- console.log(msg);
563
- },
564
- heading(msg) {
565
- console.log(pc.bold(pc.cyan(`
566
- \u25B8 ${msg}`)));
567
- }
568
- };
569
-
570
561
  // src/version.ts
571
- var LISM_CSS_VERSION = "0.23.0" ? "0.23.0" : "unknown";
562
+ var LISM_CSS_VERSION = "0.26.0" ? "0.26.0" : "unknown";
572
563
  var LISM_PACKAGE_VERSIONS = typeof define_LISM_PACKAGE_VERSIONS_default !== "undefined" && define_LISM_PACKAGE_VERSIONS_default ? define_LISM_PACKAGE_VERSIONS_default : {
573
564
  "lism-css": LISM_CSS_VERSION
574
565
  };
575
- var CLI_VERSION = "0.7.0" ? "0.7.0" : "unknown";
566
+ var CLI_VERSION = "0.9.0" ? "0.9.0" : "unknown";
576
567
 
577
568
  // src/constants.ts
578
569
  var SOURCE_REPO = "lism-css/lism-css";
@@ -584,7 +575,8 @@ var DEFAULT_TEMPLATES_REF = "main";
584
575
  var UI_COMPONENTS_PATH = "packages/lism-ui/src/components";
585
576
  var UI_HELPER_PATH = "packages/lism-ui/src/helper";
586
577
  var UI_REGISTRY_INDEX_PATH = "packages/lism-ui/registry-index.json";
587
- var SKILL_SOURCE_PATH = "skills/lism-css-guide";
578
+ var SKILL_SOURCE_BASE = "skills";
579
+ var SKILL_NAMES = ["lism-css-guide", "lism-css-refactor", "lism-mockup-guide"];
588
580
  var TEMPLATES_PATH = "templates";
589
581
 
590
582
  // ../../templates/manifest.ts
@@ -1173,7 +1165,8 @@ export {
1173
1165
  UI_COMPONENTS_PATH,
1174
1166
  UI_HELPER_PATH,
1175
1167
  UI_REGISTRY_INDEX_PATH,
1176
- SKILL_SOURCE_PATH,
1168
+ SKILL_SOURCE_BASE,
1169
+ SKILL_NAMES,
1177
1170
  CLI_VERSION,
1178
1171
  runCreate,
1179
1172
  createCommand