foundruu 0.7.1 → 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
@@ -20,20 +20,20 @@ npm install && npm run build && npm link
20
20
 
21
21
  ## コマンド
22
22
 
23
- | コマンド | 説明 |
24
- | --------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
25
- | `foundruu init [--template <id>] [--features <list>]` | テンプレート + Workflow + Rules + Doctor設定を一括導入 |
26
- | `foundruu workflow install` | Workflow / Prompt / Rules(`.ai/`)のみを既存リポジトリへ導入 |
27
- | `foundruu doctor [--json]` | リポジトリがAI開発可能な状態か診断(fail ありで exit 1) |
28
- | `foundruu doctor --deep [--since <ref>] [--report <dir>]` | AI開発プロセス品質をスコア診断(md/html/json レポート出力可) |
29
- | `foundruu update [--force] [--diff] [--only <paths...>]` | Workflow / Prompt / Rules を最新へ更新(パス指定・差分確認可) |
30
- | `foundruu session start <name>` / `session list` | AI開発セッションの作成 / 一覧 |
31
- | `foundruu templates` | 利用可能なテンプレート一覧 |
32
- | `foundruu plugins` | 読み込まれているプラグイン一覧 |
33
- | `foundruu mcp` | MCP サーバーを起動(AIエージェント連携) |
34
- | `foundruu dashboard [--dir <dir>] [--out <file>]` | deep レポート履歴からスコア推移ダッシュボード(HTML)を生成(既定: `reports/index.html`) |
35
- | `foundruu cloud push` | 最新の deep レポートを [foundruu-cloud](https://github.com/Ruu5LP/foundruu-cloud) へ送信 |
36
- | `foundruu --help` / `--version` | ヘルプ / バージョン |
23
+ | コマンド | 説明 |
24
+ | --------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
25
+ | `foundruu init [--template <id>] [--features <list>]` | テンプレート + Workflow + Rules + Doctor設定を一括導入 |
26
+ | `foundruu workflow install` | Workflow / Prompt / Rules(`.ai/`)のみを既存リポジトリへ導入 |
27
+ | `foundruu doctor [--json] [--fix]` | リポジトリがAI開発可能な状態か診断(`--fix` README/LICENSE/.gitignore/.env.example を自動生成) |
28
+ | `foundruu doctor --deep [--since <ref>] [--report <dir>]` | AI開発プロセス品質をスコア診断(md/html/json レポート出力可) |
29
+ | `foundruu update [--force] [--diff] [--only <paths...>]` | Workflow / Prompt / Rules を最新へ更新(パス指定・差分確認可) |
30
+ | `foundruu session start <name>` / `list` / `show` / `end` / `current` | AI開発セッションの作成 / 一覧 / 状態表示 / 完了 / 現在のセッション |
31
+ | `foundruu templates` | 利用可能なテンプレート一覧 |
32
+ | `foundruu plugins` | 読み込まれているプラグイン一覧 |
33
+ | `foundruu mcp` | MCP サーバーを起動(AIエージェント連携) |
34
+ | `foundruu dashboard [--dir <dir>] [--out <file>]` | deep レポート履歴からスコア推移ダッシュボード(HTML)を生成(既定: `reports/index.html`) |
35
+ | `foundruu cloud push` | 最新の deep レポートを [foundruu-cloud](https://github.com/Ruu5LP/foundruu-cloud) へ送信 |
36
+ | `foundruu --help` / `--version` | ヘルプ / バージョン |
37
37
 
38
38
  ## 利用フロー
39
39
 
@@ -76,6 +76,8 @@ Docker / GitHub Actions / AI Rules / Workflow / Prompt / foundruu.json
76
76
  チェックは [src/doctor/checks.ts](src/doctor/checks.ts) に宣言的に定義されており、1エントリ追加するだけで拡張できます。
77
77
  `--json` 出力と exit code により GitHub Actions からも利用できます。
78
78
 
79
+ `foundruu doctor --fix` は、欠けている README / LICENSE / .gitignore / .env.example を最小構成で自動生成してから再診断します(既存ファイルは上書きしません)。
80
+
79
81
  プロジェクトルートの `.foundruurc` でカスタマイズできます:
80
82
 
81
83
  ```json
@@ -127,6 +129,7 @@ module.exports = {
127
129
  ### 公式プラグイン
128
130
 
129
131
  - [foundruu-plugin-security](plugins/foundruu-plugin-security/) — SECURITY.md / .env の gitignore / 依存更新自動化のチェックを追加(`npm i -D foundruu-plugin-security`)。自作プラグインの参考実装でもあります
132
+ - [foundruu-plugin-node](plugins/foundruu-plugin-node/) — Node バージョン固定 / ロックファイル / node_modules の gitignore のチェックを追加(`npm i -D foundruu-plugin-node`)
130
133
 
131
134
  ## ダッシュボード
132
135
 
@@ -159,7 +162,7 @@ jobs:
159
162
  runs-on: ubuntu-latest
160
163
  steps:
161
164
  - uses: actions/checkout@v4
162
- - uses: Ruu5LP/foundruu@v0.7.1 # リリースタグに固定(移動タグ v0 でも可)
165
+ - uses: Ruu5LP/foundruu@v0.9.0 # リリースタグに固定(移動タグ v0 でも可)
163
166
  with:
164
167
  fail-on: error # error / warning / never
165
168
  deep: "true" # --deep のスコア診断も実行
@@ -167,7 +170,7 @@ jobs:
167
170
 
168
171
  結果はジョブサマリに表形式で出力されます。依存ごとバンドル済みのため、実行時に
169
172
  npm install や TypeScript ビルドは走りません(`node` で即実行)。`@main` ではなく
170
- リリースタグ(`@v0.7.1` など)への固定を推奨します。
173
+ リリースタグ(`@v0.9.0` など)への固定を推奨します。
171
174
 
172
175
  ## VSCode Extension
173
176
 
@@ -195,6 +198,7 @@ lint / format:check / typecheck / test:coverage / build は CI([.github/workfl
195
198
  - [docs/roadmap.md](docs/roadmap.md) — MVP以降のロードマップ
196
199
  - [docs/PLUGIN_DEV.md](docs/PLUGIN_DEV.md) — プラグイン開発ガイド
197
200
  - [docs/cloud.md](docs/cloud.md) — Cloud(レポート集約)の設計
201
+ - [CHANGELOG.md](CHANGELOG.md) — 変更履歴
198
202
 
199
203
  ## ライセンス
200
204
 
package/dist/cli.js CHANGED
@@ -53,6 +53,7 @@ program
53
53
  .command("doctor")
54
54
  .description("リポジトリがAI開発可能な状態か診断する(.foundruurc でカスタマイズ可能)")
55
55
  .option("--json", "JSON形式で出力する")
56
+ .option("--fix", "修復可能な項目(README / LICENSE / .gitignore / .env.example)を自動生成する")
56
57
  .option("--deep", "docs/ と git 差分から AI開発プロセスの品質をスコア診断する")
57
58
  .option("--since <ref>", "--deep の差分比較基準", "main")
58
59
  .option("--report <dir>", "--deep のレポート(md/html/json)を書き出すディレクトリ")
@@ -89,6 +90,24 @@ session
89
90
  .action(async () => {
90
91
  await wrap(() => (0, session_1.listSessions)(process.cwd()));
91
92
  });
93
+ session
94
+ .command("show [name]")
95
+ .description("セッションの状態とファイルを表示する(name 省略で現在のセッション)")
96
+ .action(async (name) => {
97
+ await wrap(() => (0, session_1.showSession)(process.cwd(), name));
98
+ });
99
+ session
100
+ .command("end [name]")
101
+ .description("セッションを完了として記録する(name 省略で現在のセッション)")
102
+ .action(async (name) => {
103
+ await wrap(() => (0, session_1.endSession)(process.cwd(), name));
104
+ });
105
+ session
106
+ .command("current")
107
+ .description("現在のセッションを表示する")
108
+ .action(async () => {
109
+ await wrap(() => (0, session_1.currentSession)(process.cwd()));
110
+ });
92
111
  const cloud = program.command("cloud").description("FoundRuu Cloud(レポート集約)と連携する");
93
112
  cloud
94
113
  .command("push")
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -4,5 +4,7 @@ export interface DoctorOptions {
4
4
  since?: string;
5
5
  /** --deep レポート(md/html/json)の出力先ディレクトリ */
6
6
  report?: string;
7
+ /** 修復可能な項目を自動生成してから診断する */
8
+ fix?: boolean;
7
9
  }
8
10
  export declare function runDoctorCommand(cwd: string, options: DoctorOptions): void;
@@ -41,6 +41,21 @@ function runDoctorCommand(cwd, options) {
41
41
  runDeep(cwd, options);
42
42
  return;
43
43
  }
44
+ if (options.fix) {
45
+ const { fixed, unfixable } = (0, runner_1.runDoctorFix)(cwd);
46
+ if (fixed.length === 0) {
47
+ logger_1.log.info("自動修復できる項目はありませんでした。");
48
+ }
49
+ else {
50
+ for (const f of fixed)
51
+ logger_1.log.success(f.message);
52
+ }
53
+ for (const u of unfixable) {
54
+ logger_1.log.warn(`手動対応が必要: ${u.label} → ${u.hint}`);
55
+ }
56
+ logger_1.log.info("");
57
+ // 修復後の状態を続けて診断表示する(下の通常フローへ)
58
+ }
44
59
  const report = (0, runner_1.runDoctor)(cwd);
45
60
  if (options.json) {
46
61
  console.log(JSON.stringify(report, null, 2));
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,12 @@
5
5
  /** .ai を持つリポジトリルートを特定する(git toplevel 優先、なければ上方向へ探索) */
6
6
  export declare function findAiRoot(cwd: string): string | null;
7
7
  export declare function startSession(cwd: string, name: string): void;
8
- /** 既存セッション名の一覧を返す(MCP からも利用) */
8
+ /** セッションを完了として記録する。name 省略時は現在のセッション */
9
+ export declare function endSession(cwd: string, name?: string): void;
10
+ /** セッションの状態と作業ファイルを表示する。name 省略時は現在のセッション */
11
+ export declare function showSession(cwd: string, name?: string): void;
12
+ /** 現在のセッションを表示する */
13
+ export declare function currentSession(cwd: string): void;
14
+ /** 既存セッション名の一覧を返す(MCP からも利用)。.current / .status 等は除外 */
9
15
  export declare function sessionNames(cwd: string): string[];
10
16
  export declare function listSessions(cwd: string): void;
@@ -5,6 +5,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.findAiRoot = findAiRoot;
7
7
  exports.startSession = startSession;
8
+ exports.endSession = endSession;
9
+ exports.showSession = showSession;
10
+ exports.currentSession = currentSession;
8
11
  exports.sessionNames = sessionNames;
9
12
  exports.listSessions = listSessions;
10
13
  const child_process_1 = require("child_process");
@@ -44,6 +47,51 @@ function requireAiRoot(cwd) {
44
47
  }
45
48
  return root;
46
49
  }
50
+ const sessionsRoot = (root) => path_1.default.join(root, ".ai", "sessions");
51
+ const currentFile = (root) => path_1.default.join(sessionsRoot(root), ".current");
52
+ const statusFile = (root, name) => path_1.default.join(sessionsRoot(root), ".status", `${name}.json`);
53
+ function readCurrent(root) {
54
+ const file = currentFile(root);
55
+ if (!fs_1.default.existsSync(file))
56
+ return null;
57
+ return fs_1.default.readFileSync(file, "utf8").trim() || null;
58
+ }
59
+ function setCurrent(root, name) {
60
+ fs_1.default.mkdirSync(sessionsRoot(root), { recursive: true });
61
+ fs_1.default.writeFileSync(currentFile(root), `${name}\n`);
62
+ }
63
+ function clearCurrent(root) {
64
+ const file = currentFile(root);
65
+ if (fs_1.default.existsSync(file))
66
+ fs_1.default.rmSync(file);
67
+ }
68
+ function readStatus(root, name) {
69
+ const file = statusFile(root, name);
70
+ if (!fs_1.default.existsSync(file))
71
+ return null;
72
+ try {
73
+ return JSON.parse(fs_1.default.readFileSync(file, "utf8"));
74
+ }
75
+ catch {
76
+ return null;
77
+ }
78
+ }
79
+ function writeStatus(root, name, status) {
80
+ fs_1.default.mkdirSync(path_1.default.dirname(statusFile(root, name)), { recursive: true });
81
+ fs_1.default.writeFileSync(statusFile(root, name), JSON.stringify(status, null, 2) + "\n");
82
+ }
83
+ const sessionDir = (root, name) => path_1.default.join(sessionsRoot(root), name);
84
+ /** name 省略時は現在のセッションを使う。どちらも無ければエラー */
85
+ function resolveSession(root, name, action) {
86
+ const target = name ?? readCurrent(root);
87
+ if (!target) {
88
+ throw new Error(`${action}するセッションを指定してください(現在のセッションがありません)。`);
89
+ }
90
+ if (!fs_1.default.existsSync(sessionDir(root, target))) {
91
+ throw new Error(`セッションが見つかりません: ${target}`);
92
+ }
93
+ return target;
94
+ }
47
95
  function startSession(cwd, name) {
48
96
  if (!/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(name)) {
49
97
  throw new Error(`セッション名が不正です(英数字で始まり / や空白を含まないこと): ${name}`);
@@ -62,7 +110,9 @@ function startSession(cwd, name) {
62
110
  for (const file of files) {
63
111
  fs_1.default.copyFileSync(path_1.default.join(templateDir, file), path_1.default.join(dest, file));
64
112
  }
65
- logger_1.log.success(`セッションを作成しました: .ai/sessions/${name}`);
113
+ writeStatus(root, name, { startedAt: new Date().toISOString() });
114
+ setCurrent(root, name);
115
+ logger_1.log.success(`セッションを作成しました: .ai/sessions/${name}(現在のセッション)`);
66
116
  logger_1.log.info("");
67
117
  logger_1.log.info("作成ファイル:");
68
118
  for (const file of files.sort()) {
@@ -74,7 +124,55 @@ function startSession(cwd, name) {
74
124
  logger_1.log.info(" 2. AI に .ai/prompts/session-workflow.md と requirements.md を渡す");
75
125
  logger_1.log.info(" 3. AI が「進める / 質問する」を判断します");
76
126
  }
77
- /** 既存セッション名の一覧を返す(MCP からも利用) */
127
+ /** セッションを完了として記録する。name 省略時は現在のセッション */
128
+ function endSession(cwd, name) {
129
+ const root = requireAiRoot(cwd);
130
+ const target = resolveSession(root, name, "終了");
131
+ const status = readStatus(root, target) ?? { startedAt: new Date().toISOString() };
132
+ if (status.endedAt) {
133
+ logger_1.log.info(`セッション ${target} は既に終了しています(${status.endedAt})。`);
134
+ return;
135
+ }
136
+ status.endedAt = new Date().toISOString();
137
+ writeStatus(root, target, status);
138
+ if (readCurrent(root) === target)
139
+ clearCurrent(root);
140
+ logger_1.log.success(`セッションを終了しました: ${target}`);
141
+ }
142
+ /** セッションの状態と作業ファイルを表示する。name 省略時は現在のセッション */
143
+ function showSession(cwd, name) {
144
+ const root = requireAiRoot(cwd);
145
+ const target = resolveSession(root, name, "表示");
146
+ const status = readStatus(root, target);
147
+ const state = status?.endedAt ? "完了" : "進行中";
148
+ const current = readCurrent(root) === target ? "(現在のセッション)" : "";
149
+ logger_1.log.info(`セッション: ${target}(${state})${current}`);
150
+ if (status?.startedAt)
151
+ logger_1.log.info(` 開始: ${status.startedAt}`);
152
+ if (status?.endedAt)
153
+ logger_1.log.info(` 終了: ${status.endedAt}`);
154
+ logger_1.log.info(" ファイル:");
155
+ const files = fs_1.default
156
+ .readdirSync(sessionDir(root, target))
157
+ .filter((f) => f.endsWith(".md"))
158
+ .sort();
159
+ for (const file of files) {
160
+ const empty = fs_1.default.readFileSync(path_1.default.join(sessionDir(root, target), file), "utf8").trim() === "";
161
+ logger_1.log.info(` - ${file}${empty ? "(未記入)" : ""}`);
162
+ }
163
+ }
164
+ /** 現在のセッションを表示する */
165
+ function currentSession(cwd) {
166
+ const root = requireAiRoot(cwd);
167
+ const current = readCurrent(root);
168
+ if (!current) {
169
+ logger_1.log.info("現在のセッションはありません。");
170
+ logger_1.log.info(" 作成: foundruu session start <session-name>");
171
+ return;
172
+ }
173
+ logger_1.log.info(`現在のセッション: ${current}`);
174
+ }
175
+ /** 既存セッション名の一覧を返す(MCP からも利用)。.current / .status 等は除外 */
78
176
  function sessionNames(cwd) {
79
177
  const root = requireAiRoot(cwd);
80
178
  const sessionsDir = path_1.default.join(root, ".ai", "sessions");
@@ -82,7 +180,7 @@ function sessionNames(cwd) {
82
180
  return [];
83
181
  return fs_1.default
84
182
  .readdirSync(sessionsDir, { withFileTypes: true })
85
- .filter((e) => e.isDirectory())
183
+ .filter((e) => e.isDirectory() && !e.name.startsWith("."))
86
184
  .map((e) => e.name)
87
185
  .sort();
88
186
  }
@@ -93,9 +191,15 @@ function listSessions(cwd) {
93
191
  logger_1.log.info(" 作成: foundruu session start <session-name>");
94
192
  return;
95
193
  }
194
+ const root = requireAiRoot(cwd);
195
+ const current = readCurrent(root);
96
196
  logger_1.log.info("セッション一覧 (.ai/sessions/):");
97
197
  for (const name of sessions) {
98
- logger_1.log.info(` - ${name}`);
198
+ const state = readStatus(root, name)?.endedAt ? "完了" : "進行中";
199
+ const marker = name === current ? " *" : "";
200
+ logger_1.log.info(` - ${name}(${state})${marker}`);
99
201
  }
202
+ if (current)
203
+ logger_1.log.info("\n * = 現在のセッション");
100
204
  }
101
205
  //# sourceMappingURL=session.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { DoctorCheck } from "./types";
2
2
  /**
3
3
  * 診断ルール定義。チェックの追加はこの配列に1エントリ足すだけでよい。
4
+ * `fix` を持つチェックは `doctor --fix` で自動生成できる(既存は上書きしない)。
4
5
  */
5
6
  export declare const checks: DoctorCheck[];
@@ -1,8 +1,53 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.checks = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ /** package.json の name か、無ければディレクトリ名をプロジェクト名として使う */
10
+ function projectName(cwd) {
11
+ try {
12
+ const pkg = JSON.parse(fs_1.default.readFileSync(path_1.default.join(cwd, "package.json"), "utf8"));
13
+ if (pkg.name)
14
+ return pkg.name;
15
+ }
16
+ catch {
17
+ /* package.json が無い/壊れている場合はディレクトリ名にフォールバック */
18
+ }
19
+ return path_1.default.basename(cwd);
20
+ }
21
+ /** cwd/rel にファイルを作成し、実施メッセージを返す(fix は欠如時のみ呼ばれる) */
22
+ function create(cwd, rel, content) {
23
+ fs_1.default.writeFileSync(path_1.default.join(cwd, rel), content);
24
+ return `${rel} を作成しました`;
25
+ }
26
+ const MIT_LICENSE = (year) => `MIT License
27
+
28
+ Copyright (c) ${year} <COPYRIGHT HOLDER>
29
+
30
+ Permission is hereby granted, free of charge, to any person obtaining a copy
31
+ of this software and associated documentation files (the "Software"), to deal
32
+ in the Software without restriction, including without limitation the rights
33
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
34
+ copies of the Software, and to permit persons to whom the Software is
35
+ furnished to do so, subject to the following conditions:
36
+
37
+ The above copyright notice and this permission notice shall be included in all
38
+ copies or substantial portions of the Software.
39
+
40
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
41
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
42
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
43
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
44
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
45
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
46
+ SOFTWARE.
47
+ `;
4
48
  /**
5
49
  * 診断ルール定義。チェックの追加はこの配列に1エントリ足すだけでよい。
50
+ * `fix` を持つチェックは `doctor --fix` で自動生成できる(既存は上書きしない)。
6
51
  */
7
52
  exports.checks = [
8
53
  {
@@ -12,6 +57,7 @@ exports.checks = [
12
57
  severity: "error",
13
58
  hint: "README.md を作成し、プロジェクトの目的・セットアップ手順を書いてください",
14
59
  check: (ctx) => ctx.existsAny(["README.md", "README"]),
60
+ fix: (ctx) => create(ctx.cwd, "README.md", `# ${projectName(ctx.cwd)}\n\n> TODO: プロジェクトの目的とセットアップ手順を記述してください。\n`),
15
61
  },
16
62
  {
17
63
  id: "license",
@@ -20,6 +66,7 @@ exports.checks = [
20
66
  severity: "warn",
21
67
  hint: "LICENSE ファイルを追加してください",
22
68
  check: (ctx) => ctx.existsAny(["LICENSE", "LICENSE.md", "LICENSE.txt"]),
69
+ fix: (ctx) => create(ctx.cwd, "LICENSE", MIT_LICENSE(new Date().getFullYear())),
23
70
  },
24
71
  {
25
72
  id: "gitignore",
@@ -28,6 +75,7 @@ exports.checks = [
28
75
  severity: "error",
29
76
  hint: ".gitignore を作成してください(foundruu init で導入できます)",
30
77
  check: (ctx) => ctx.exists(".gitignore"),
78
+ fix: (ctx) => create(ctx.cwd, ".gitignore", "node_modules/\ndist/\n.env\n*.log\n"),
31
79
  },
32
80
  {
33
81
  id: "env-example",
@@ -36,6 +84,7 @@ exports.checks = [
36
84
  severity: "warn",
37
85
  hint: ".env.example を作成し、必要な環境変数の一覧を共有してください",
38
86
  check: (ctx) => ctx.existsAny([".env.example", ".env.sample"]),
87
+ fix: (ctx) => create(ctx.cwd, ".env.example", "# 必要な環境変数のキーと説明のみを記載してください(値は書かない)\n# 例:\n# DATABASE_URL=\n"),
39
88
  },
40
89
  {
41
90
  id: "package-manifest",
@@ -1 +1 @@
1
- {"version":3,"file":"checks.js","sourceRoot":"","sources":["../../src/doctor/checks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"checks.js","sourceRoot":"","sources":["../../src/doctor/checks.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,8 @@
1
- import { DoctorCheck, DoctorContext, DoctorReport } from "./types";
1
+ import { DoctorCheck, DoctorContext, DoctorReport, FixReport } from "./types";
2
2
  export declare function createContext(cwd: string): DoctorContext;
3
3
  export declare function runDoctor(cwd: string, checkList?: DoctorCheck[]): DoctorReport;
4
+ /**
5
+ * 失敗しているチェックのうち fix を持つものを自動生成する(--fix)。
6
+ * .foundruurc で無効化されたチェックは対象外(applyRc が除外する)。
7
+ */
8
+ export declare function runDoctorFix(cwd: string, checkList?: DoctorCheck[]): FixReport;
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.createContext = createContext;
7
7
  exports.runDoctor = runDoctor;
8
+ exports.runDoctorFix = runDoctorFix;
8
9
  const fs_1 = __importDefault(require("fs"));
9
10
  const path_1 = __importDefault(require("path"));
10
11
  const checks_1 = require("./checks");
@@ -36,4 +37,25 @@ function runDoctor(cwd, checkList = checks_1.checks) {
36
37
  const failed = results.filter((r) => r.status === "fail").length;
37
38
  return { results, passed, warned, failed, ok: failed === 0 };
38
39
  }
40
+ /**
41
+ * 失敗しているチェックのうち fix を持つものを自動生成する(--fix)。
42
+ * .foundruurc で無効化されたチェックは対象外(applyRc が除外する)。
43
+ */
44
+ function runDoctorFix(cwd, checkList = checks_1.checks) {
45
+ const ctx = createContext(cwd);
46
+ const effective = (0, rc_1.applyRc)(checkList, (0, rc_1.readRc)(cwd));
47
+ const fixed = [];
48
+ const unfixable = [];
49
+ for (const c of effective) {
50
+ if (c.check(ctx))
51
+ continue; // pass しているものは触らない
52
+ if (c.fix) {
53
+ fixed.push({ label: c.label, message: c.fix(ctx) });
54
+ }
55
+ else {
56
+ unfixable.push({ label: c.label, hint: c.hint });
57
+ }
58
+ }
59
+ return { fixed, unfixable };
60
+ }
39
61
  //# sourceMappingURL=runner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/doctor/runner.ts"],"names":[],"mappings":";;;;;AAMA,sCAOC;AAED,8BAmBC;AAlCD,4CAAoB;AACpB,gDAAwB;AACxB,qCAAmD;AACnD,6BAAuC;AAGvC,SAAgB,aAAa,CAAC,GAAW;IACvC,MAAM,MAAM,GAAG,CAAC,GAAW,EAAW,EAAE,CAAC,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC5E,OAAO;QACL,GAAG;QACH,MAAM;QACN,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;KACvC,CAAC;AACJ,CAAC;AAED,SAAgB,SAAS,CAAC,GAAW,EAAE,YAA2B,eAAa;IAC7E,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,SAAS,GAAG,IAAA,YAAO,EAAC,SAAS,EAAE,IAAA,WAAM,EAAC,GAAG,CAAC,CAAC,CAAC;IAClD,MAAM,OAAO,GAAkB,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACjD,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxB,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QACtE,OAAO;YACL,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,MAAM;YACN,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;SAChC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IACjE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IACjE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IACjE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,CAAC,EAAE,CAAC;AAC/D,CAAC"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/doctor/runner.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,24 @@ export interface DoctorCheck {
15
15
  /** 見つからなかったときの修正ガイド */
16
16
  hint: string;
17
17
  check(ctx: DoctorContext): boolean;
18
+ /**
19
+ * `doctor --fix` 時に、欠けているものを最小構成で自動生成する。
20
+ * check が false(=欠如)のときだけ呼ばれるため既存ファイルは上書きしない。
21
+ * 返り値は実施内容の説明。未定義のチェックは --fix 対象外(hint に沿って手動対応)。
22
+ */
23
+ fix?(ctx: DoctorContext): string;
24
+ }
25
+ export interface FixReport {
26
+ /** 自動生成できた項目 */
27
+ fixed: {
28
+ label: string;
29
+ message: string;
30
+ }[];
31
+ /** fix を持たず手動対応が必要な失敗項目 */
32
+ unfixable: {
33
+ label: string;
34
+ hint: string;
35
+ }[];
18
36
  }
19
37
  export interface CheckResult {
20
38
  id: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "foundruu",
3
- "version": "0.7.1",
3
+ "version": "0.9.0",
4
4
  "description": "FoundRuu CLI - AI開発を標準化するためのプラットフォームCLI",
5
5
  "license": "MIT",
6
6
  "type": "commonjs",