foundruu 0.8.0 → 0.10.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
@@ -160,7 +162,7 @@ jobs:
160
162
  runs-on: ubuntu-latest
161
163
  steps:
162
164
  - uses: actions/checkout@v4
163
- - uses: Ruu5LP/foundruu@v0.8.0 # リリースタグに固定(移動タグ v0 でも可)
165
+ - uses: Ruu5LP/foundruu@v0.10.0 # リリースタグに固定(移動タグ v0 でも可)
164
166
  with:
165
167
  fail-on: error # error / warning / never
166
168
  deep: "true" # --deep のスコア診断も実行
@@ -168,7 +170,7 @@ jobs:
168
170
 
169
171
  結果はジョブサマリに表形式で出力されます。依存ごとバンドル済みのため、実行時に
170
172
  npm install や TypeScript ビルドは走りません(`node` で即実行)。`@main` ではなく
171
- リリースタグ(`@v0.8.0` など)への固定を推奨します。
173
+ リリースタグ(`@v0.10.0` など)への固定を推奨します。
172
174
 
173
175
  ## VSCode Extension
174
176
 
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":";;;AACA,yCAAoC;AACpC,0CAA0C;AAC1C,kDAAsD;AACtD,8CAAqD;AACrD,8CAA8C;AAC9C,gDAAgE;AAChE,0CAA2C;AAC3C,0CAAoC;AACpC,oDAAiD;AACjD,4CAA6C;AAC7C,4CAAyC;AAEzC,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,sCAAsC,CAAC;KACnD,OAAO,CAAC,IAAA,mBAAU,GAAE,CAAC,CAAC;AAEzB,MAAM,IAAI,GAAG,KAAK,EAAE,EAA8B,EAAiB,EAAE;IACnE,IAAI,CAAC;QACH,MAAM,EAAE,EAAE,CAAC;IACb,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,+BAA+B;QAC/B,IAAK,GAAa,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YAC9C,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC;YACvB,OAAO;QACT,CAAC;QACD,YAAG,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;QAClC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC,CAAC;AAEF,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,qDAAqD,CAAC;KAClE,MAAM,CAAC,qBAAqB,EAAE,0BAA0B,CAAC;KACzD,MAAM,CAAC,mBAAmB,EAAE,yBAAyB,CAAC;KACtD,MAAM,CAAC,0BAA0B,EAAE,WAAW,CAAC;KAC/C,MAAM,CAAC,uBAAuB,EAAE,2CAA2C,CAAC;KAC5E,MAAM,CAAC,WAAW,EAAE,wBAAwB,CAAC;KAC7C,MAAM,CACL,KAAK,EAAE,IAMN,EAAE,EAAE;IACH,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,IAAA,cAAO,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;AACjD,CAAC,CACF,CAAC;AAEJ,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,iCAAiC,CAAC,CAAC;AAC5F,QAAQ;KACL,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,gDAAgD,CAAC;KAC7D,MAAM,CAAC,GAAG,EAAE;IACX,IAAI,CAAC,GAAG,EAAE,CAAC,IAAA,0BAAe,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAC7C,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,6CAA6C,CAAC;KAC1D,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC;KAC/B,MAAM,CAAC,QAAQ,EAAE,sCAAsC,CAAC;KACxD,MAAM,CAAC,eAAe,EAAE,gBAAgB,EAAE,MAAM,CAAC;KACjD,MAAM,CAAC,gBAAgB,EAAE,uCAAuC,CAAC;KACjE,MAAM,CAAC,KAAK,EAAE,IAAyE,EAAE,EAAE;IAC1F,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,IAAA,yBAAgB,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;AAC1D,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CACV,4DAA4D,CAC7D;KACA,MAAM,CAAC,aAAa,EAAE,oBAAoB,CAAC;KAC3C,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;KAClC,MAAM,CAAC,SAAS,EAAE,6BAA6B,CAAC;KAChD,MAAM,CACL,mBAAmB,EACnB,qEAAqE,CACtE;KACA,MAAM,CAAC,KAAK,EAAE,IAA2E,EAAE,EAAE;IAC5F,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,IAAA,kBAAS,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,uDAAuD,CAAC;KACpE,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAC3D,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC;AAEL,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;AACzE,OAAO;KACJ,OAAO,CAAC,cAAc,CAAC;KACvB,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;IAC7B,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,IAAA,sBAAY,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;AACtD,CAAC,CAAC,CAAC;AACL,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,gBAAgB,CAAC;KAC7B,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,IAAA,sBAAY,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC;AAEL,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAC;AAClF,KAAK;KACF,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,iCAAiC,CAAC;KAC9C,MAAM,CAAC,aAAa,EAAE,aAAa,EAAE,SAAS,CAAC;KAC/C,MAAM,CAAC,qBAAqB,EAAE,6CAA6C,CAAC;KAC5E,MAAM,CAAC,kBAAkB,EAAE,6CAA6C,CAAC;KACzE,MAAM,CAAC,KAAK,EAAE,IAAuD,EAAE,EAAE;IACxE,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAC7D,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;AACtD,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,gDAAgD,CAAC;KAC7D,MAAM,CAAC,aAAa,EAAE,aAAa,EAAE,SAAS,CAAC;KAC/C,MAAM,CAAC,cAAc,EAAE,kCAAkC,CAAC;KAC1D,MAAM,CAAC,KAAK,EAAE,IAAoC,EAAE,EAAE;IACrD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;IACjE,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;AACtD,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,oBAAoB,CAAC;KACjC,MAAM,CAAC,GAAG,EAAE;IACX,KAAK,MAAM,CAAC,IAAI,qBAAS,EAAE,CAAC;QAC1B,YAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACtF,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,iCAAiC;AACjC,MAAM,aAAa,GAAG,IAAA,qBAAW,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE;IAC/C,OAAO;IACP,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,eAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IAC7C,GAAG,EAAH,YAAG;CACJ,CAAC,CAAC;AAEH,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,sBAAsB,CAAC;KACnC,MAAM,CAAC,GAAG,EAAE;IACX,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,YAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC9B,YAAG,CAAC,IAAI,CACN,yEAAyE,CAC1E,CAAC;QACF,OAAO;IACT,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;QAC9B,YAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -43,6 +43,7 @@ function trendSvg(history) {
43
43
  ${dots}
44
44
  </svg>`;
45
45
  }
46
+ const esc = (s) => s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
46
47
  function renderDashboard(history) {
47
48
  const latest = history[history.length - 1];
48
49
  const color = (s) => (s >= 80 ? "#22a06b" : s >= 50 ? "#b38600" : "#c9372c");
@@ -59,9 +60,31 @@ function renderDashboard(history) {
59
60
  ? ` (▼${-delta})`
60
61
  : " (±0)"
61
62
  : "";
62
- return `<tr><td>${s.label}</td><td style="color:${color(s.score)};font-weight:bold">${s.score}点${deltaLabel}</td><td>${s.docPath ?? "(なし)"}</td></tr>`;
63
+ const scoreCell = s.docPath !== undefined
64
+ ? `<span style="color:${color(s.score)};font-weight:bold">${s.score}点${deltaLabel}</span>`
65
+ : `<span class="meta">未計測</span>`;
66
+ return `<tr><td>${s.label}</td><td>${scoreCell}</td><td>${s.docPath ?? "(なし)"}</td></tr>`;
63
67
  })
64
68
  .join("");
69
+ // 計測できたカテゴリが1つも無ければ総合スコアは「未計測」表示にする(0点の誤解を避ける)
70
+ const hasMeasured = latest.report.scores.some((s) => s.docPath !== undefined);
71
+ const overallColor = hasMeasured ? color(latest.report.overall) : "#666";
72
+ const overallText = hasMeasured ? `総合スコア: ${latest.report.overall}点` : "総合スコア: 未計測";
73
+ // 改善アクション: 各カテゴリの未達項目(label → improvement)を、スコアの低い順に並べる。
74
+ // 「何をすればスコアが上がるか」を具体的に示す。
75
+ const actionable = [...latest.report.scores]
76
+ .filter((s) => s.failed.length > 0)
77
+ .sort((a, b) => a.score - b.score);
78
+ const actionsHtml = actionable.length
79
+ ? actionable
80
+ .map((s) => `<h3>${esc(s.label)} <span class="meta">(${s.score}点${s.docPath ? ` / ${esc(s.docPath)}` : ""})</span></h3>\n` +
81
+ `<ul>` +
82
+ s.failed
83
+ .map((f) => `<li><strong>${esc(f.label)}</strong> — ${esc(f.improvement)}</li>`)
84
+ .join("") +
85
+ `</ul>`)
86
+ .join("\n")
87
+ : `<p>改善アクションはありません 🎉</p>`;
65
88
  return `<!doctype html>
66
89
  <html lang="ja">
67
90
  <head>
@@ -72,14 +95,16 @@ function renderDashboard(history) {
72
95
  table { border-collapse: collapse; width: 100%; }
73
96
  th, td { border: 1px solid #ddd; padding: .5rem .75rem; text-align: left; }
74
97
  th { background: #f5f5f5; }
75
- .overall { font-size: 2.5rem; font-weight: bold; color: ${color(latest.report.overall)}; }
76
- .meta { color: #666; }
98
+ .overall { font-size: 2.5rem; font-weight: bold; color: ${overallColor}; }
99
+ .meta { color: #666; font-weight: normal; }
100
+ h3 { margin: 1.2rem 0 .3rem; }
101
+ ul { line-height: 1.7; margin-top: .2rem; }
77
102
  </style>
78
103
  </head>
79
104
  <body>
80
105
  <h1>FoundRuu Dashboard</h1>
81
106
  <p class="meta">レポート ${history.length}件 / 最新: ${latest.timestamp}</p>
82
- <p class="overall">総合スコア: ${latest.report.overall}点</p>
107
+ <p class="overall">${overallText}</p>
83
108
  <h2>スコア推移</h2>
84
109
  ${trendSvg(history)}
85
110
  <h2>最新のカテゴリ別スコア</h2>
@@ -87,6 +112,8 @@ ${trendSvg(history)}
87
112
  <tr><th>カテゴリ</th><th>スコア(前回比)</th><th>ドキュメント</th></tr>
88
113
  ${categoryRows}
89
114
  </table>
115
+ <h2>改善アクション(最新レポート)</h2>
116
+ ${actionsHtml}
90
117
  </body>
91
118
  </html>
92
119
  `;
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/commands/dashboard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/commands/dashboard.ts"],"names":[],"mappings":";;;;;AAWA,kCAUC;AAiCD,0CAiFC;AAED,oCAaC;AAtJD,4CAAoB;AACpB,gDAAwB;AAExB,2CAAqC;AAOrC,4DAA4D;AAC5D,SAAgB,WAAW,CAAC,GAAW;IACrC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,OAAO,YAAE;SACN,WAAW,CAAC,GAAG,CAAC;SAChB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iCAAiC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACxD,IAAI,EAAE;SACN,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;QACzE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAe;KAC7E,CAAC,CAAC,CAAC;AACR,CAAC;AAED,SAAS,QAAQ,CAAC,OAAuB;IACvC,MAAM,CAAC,GAAG,GAAG,CAAC;IACd,MAAM,CAAC,GAAG,GAAG,CAAC;IACd,MAAM,GAAG,GAAG,EAAE,CAAC;IACf,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IACzB,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACjF,MAAM,CAAC,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IACrE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjF,MAAM,IAAI,GAAG,OAAO;SACjB,GAAG,CACF,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACP,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,oBAAoB,CACvI;SACA,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,MAAM,SAAS,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;SAC/B,GAAG,CACF,CAAC,CAAC,EAAE,EAAE,CACJ,aAAa,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,sBAAsB;QAChF,kBAAkB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,gCAAgC,CAAC,SAAS,CACvE;SACA,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,OAAO,qBAAqB,CAAC,IAAI,CAAC;IAChC,SAAS;sBACS,MAAM;IACxB,IAAI;OACD,CAAC;AACR,CAAC;AAED,MAAM,GAAG,GAAG,CAAC,CAAS,EAAU,EAAE,CAChC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAEvE,SAAgB,eAAe,CAAC,OAAuB;IACrD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACrF,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM;SACtC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,IAAI,GACR,OAAO,CAAC,MAAM,GAAG,CAAC;YAChB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,CAAC;YAClF,CAAC,CAAC,SAAS,CAAC;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAM,UAAU,GAAG,IAAI;YACrB,CAAC,CAAC,KAAK,GAAG,CAAC;gBACT,CAAC,CAAC,MAAM,KAAK,GAAG;gBAChB,CAAC,CAAC,KAAK,GAAG,CAAC;oBACT,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG;oBACjB,CAAC,CAAC,OAAO;YACb,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,SAAS,GACb,CAAC,CAAC,OAAO,KAAK,SAAS;YACrB,CAAC,CAAC,sBAAsB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,KAAK,IAAI,UAAU,SAAS;YAC1F,CAAC,CAAC,+BAA+B,CAAC;QACtC,OAAO,WAAW,CAAC,CAAC,KAAK,YAAY,SAAS,YAAY,CAAC,CAAC,OAAO,IAAI,MAAM,YAAY,CAAC;IAC5F,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,+CAA+C;IAC/C,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC;IAC9E,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACzE,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,UAAU,MAAM,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC;IAEpF,yDAAyD;IACzD,0BAA0B;IAC1B,MAAM,UAAU,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;SACzC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;SAClC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM;QACnC,CAAC,CAAC,UAAU;aACP,GAAG,CACF,CAAC,CAAC,EAAE,EAAE,CACJ,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,iBAAiB;YAC9G,MAAM;YACN,CAAC,CAAC,MAAM;iBACL,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC;iBAC/E,IAAI,CAAC,EAAE,CAAC;YACX,OAAO,CACV;aACA,IAAI,CAAC,IAAI,CAAC;QACf,CAAC,CAAC,yBAAyB,CAAC;IAE9B,OAAO;;;;;;;;;;4DAUmD,YAAY;;;;;;;;uBAQjD,OAAO,CAAC,MAAM,WAAW,MAAM,CAAC,SAAS;qBAC3C,WAAW;;EAE9B,QAAQ,CAAC,OAAO,CAAC;;;;IAIf,YAAY;;;EAGd,WAAW;;;CAGZ,CAAC;AACF,CAAC;AAED,SAAgB,YAAY,CAAC,GAAW,EAAE,OAAuC;IAC/E,MAAM,GAAG,GAAG,cAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,SAAS,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,YAAG,CAAC,IAAI,CACN,GAAG,cAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,GAAG,yDAAyD,OAAO,CAAC,GAAG,IAAI,SAAS,aAAa,CAChI,CAAC;QACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IACD,MAAM,GAAG,GAAG,cAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC;IAC3E,YAAE,CAAC,aAAa,CAAC,GAAG,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;IAChD,YAAG,CAAC,OAAO,CAAC,mBAAmB,GAAG,QAAQ,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;AAChE,CAAC"}
@@ -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;
@@ -26,21 +26,48 @@ function runDeep(cwd, options) {
26
26
  logger_1.log.info(picocolors_1.default.bold("FoundRuu Doctor --deep — AI開発プロセス品質診断\n"));
27
27
  logger_1.log.info(`差分(${report.since} 基準): ${report.diff.files}ファイル +${report.diff.insertions} -${report.diff.deletions}\n`);
28
28
  for (const s of report.scores) {
29
- const color = scoreColor(s.score);
30
- const bar = "█".repeat(Math.round(s.score / 10)).padEnd(10, "░");
31
- logger_1.log.info(`${color(bar)} ${String(s.score).padStart(3)} ${s.label}${s.docPath ? picocolors_1.default.dim(`(${s.docPath})`) : ""}`);
29
+ if (s.docPath === undefined) {
30
+ // 該当ドキュメントが無い = 未計測(0点ではない)
31
+ logger_1.log.info(`${picocolors_1.default.dim("░".repeat(10))} ${picocolors_1.default.dim("未計測")} ${s.label}`);
32
+ }
33
+ else {
34
+ const color = scoreColor(s.score);
35
+ const bar = "█".repeat(Math.round(s.score / 10)).padEnd(10, "░");
36
+ logger_1.log.info(`${color(bar)} ${String(s.score).padStart(3)}点 ${s.label}${picocolors_1.default.dim(`(${s.docPath})`)}`);
37
+ }
32
38
  for (const f of s.failed) {
33
39
  logger_1.log.info(picocolors_1.default.dim(` - ${f.label} → ${f.improvement}`));
34
40
  }
35
41
  }
36
42
  logger_1.log.info("");
37
- logger_1.log.info(`総合スコア: ${scoreColor(report.overall)(picocolors_1.default.bold(`${report.overall}点`))}`);
43
+ if (report.scores.some((s) => s.docPath !== undefined)) {
44
+ logger_1.log.info(`総合スコア: ${scoreColor(report.overall)(picocolors_1.default.bold(`${report.overall}点`))}`);
45
+ }
46
+ else {
47
+ logger_1.log.info(picocolors_1.default.dim("総合スコア: 未計測(要件/設計/テスト/AI指示のドキュメントが見つかりません)"));
48
+ logger_1.log.info(picocolors_1.default.dim(" docs/ に requirements.md / design.md / test.md 等を用意すると計測されます。"));
49
+ }
38
50
  }
39
51
  function runDoctorCommand(cwd, options) {
40
52
  if (options.deep) {
41
53
  runDeep(cwd, options);
42
54
  return;
43
55
  }
56
+ if (options.fix) {
57
+ const { fixed, unfixable } = (0, runner_1.runDoctorFix)(cwd);
58
+ if (fixed.length === 0) {
59
+ logger_1.log.info("自動修復できる項目はありませんでした。");
60
+ }
61
+ else {
62
+ for (const f of fixed)
63
+ logger_1.log.success(f.message);
64
+ }
65
+ for (const u of unfixable) {
66
+ logger_1.log.warn(`手動対応が必要: ${u.label} → ${u.hint}`);
67
+ }
68
+ logger_1.log.info("");
69
+ // 修復後の状態を続けて診断表示する(下の通常フローへ)
70
+ }
44
71
  const report = (0, runner_1.runDoctor)(cwd);
45
72
  if (options.json) {
46
73
  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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"}
@@ -253,7 +253,13 @@ function runDeepDoctor(cwd, since) {
253
253
  failed,
254
254
  };
255
255
  });
256
- const overall = Math.round(scores.reduce((sum, s) => sum + s.score, 0) / scores.length);
256
+ // 該当ドキュメントが存在しないカテゴリ(docPath なし)は「未計測」とし、総合スコアに算入しない。
257
+ // 「ドキュメントの有無」は基本の doctor が見る領域で、--deep は「ある文書の中身の質」を測るため、
258
+ // 文書が無いことを 0 点として二重に減点しない(well-documented でも 0 点になる問題の対策)。
259
+ const measured = scores.filter((s) => s.docPath !== undefined);
260
+ const overall = measured.length
261
+ ? Math.round(measured.reduce((sum, s) => sum + s.score, 0) / measured.length)
262
+ : 0;
257
263
  return { since, diff, scores, overall };
258
264
  }
259
265
  //# sourceMappingURL=deep.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deep.js","sourceRoot":"","sources":["../../src/doctor/deep.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deep.js","sourceRoot":"","sources":["../../src/doctor/deep.ts"],"names":[],"mappings":"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"}
@@ -23,17 +23,19 @@ function writeFile(file, content) {
23
23
  return file;
24
24
  }
25
25
  function renderMarkdown(report) {
26
+ const hasMeasured = report.scores.some((s) => s.docPath !== undefined);
27
+ const scoreText = (s) => s.docPath !== undefined ? `${s.score}点` : "未計測";
26
28
  const lines = [
27
29
  "# FoundRuu Deep Report",
28
30
  "",
29
31
  `- 生成日時: ${new Date().toISOString()}`,
30
32
  `- 比較基準: \`${report.since}\``,
31
33
  `- 差分: ${report.diff.files}ファイル +${report.diff.insertions} -${report.diff.deletions}`,
32
- `- **総合スコア: ${report.overall}点**`,
34
+ `- **総合スコア: ${hasMeasured ? `${report.overall}点` : "未計測"}**`,
33
35
  "",
34
36
  "| カテゴリ | スコア | ドキュメント |",
35
37
  "|---|---|---|",
36
- ...report.scores.map((s) => `| ${s.label} | ${s.score} | ${s.docPath ?? "(なし)"} |`),
38
+ ...report.scores.map((s) => `| ${s.label} | ${scoreText(s)} | ${s.docPath ?? "(なし)"} |`),
37
39
  "",
38
40
  ];
39
41
  for (const s of report.scores) {
@@ -49,14 +51,20 @@ function renderMarkdown(report) {
49
51
  }
50
52
  function renderHtml(report) {
51
53
  const color = (score) => (score >= 80 ? "#22a06b" : score >= 50 ? "#b38600" : "#c9372c");
54
+ const hasMeasured = report.scores.some((s) => s.docPath !== undefined);
52
55
  const rows = report.scores
53
- .map((s) => `
56
+ .map((s) => {
57
+ const scoreCell = s.docPath !== undefined
58
+ ? `<td style="color:${color(s.score)};font-weight:bold">${s.score}点</td>`
59
+ : `<td style="color:#666">未計測</td>`;
60
+ return `
54
61
  <tr>
55
62
  <td>${escapeHtml(s.label)}</td>
56
- <td style="color:${color(s.score)};font-weight:bold">${s.score}点</td>
63
+ ${scoreCell}
57
64
  <td>${escapeHtml(s.docPath ?? "(なし)")}</td>
58
65
  <td><ul>${s.failed.map((f) => `<li><b>${escapeHtml(f.label)}</b> — ${escapeHtml(f.improvement)}</li>`).join("")}</ul></td>
59
- </tr>`)
66
+ </tr>`;
67
+ })
60
68
  .join("");
61
69
  return `<!doctype html>
62
70
  <html lang="ja">
@@ -68,13 +76,13 @@ function renderHtml(report) {
68
76
  table { border-collapse: collapse; width: 100%; }
69
77
  th, td { border: 1px solid #ddd; padding: .5rem .75rem; text-align: left; vertical-align: top; }
70
78
  th { background: #f5f5f5; }
71
- .overall { font-size: 2rem; font-weight: bold; color: ${color(report.overall)}; }
79
+ .overall { font-size: 2rem; font-weight: bold; color: ${hasMeasured ? color(report.overall) : "#666"}; }
72
80
  </style>
73
81
  </head>
74
82
  <body>
75
83
  <h1>FoundRuu Deep Report</h1>
76
84
  <p>比較基準: <code>${escapeHtml(report.since)}</code> / 差分: ${report.diff.files}ファイル +${report.diff.insertions} -${report.diff.deletions}</p>
77
- <p class="overall">総合スコア: ${report.overall}点</p>
85
+ <p class="overall">総合スコア: ${hasMeasured ? `${report.overall}点` : "未計測"}</p>
78
86
  <table>
79
87
  <tr><th>カテゴリ</th><th>スコア</th><th>ドキュメント</th><th>改善案</th></tr>
80
88
  ${rows}
@@ -1 +1 @@
1
- {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/doctor/report.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/doctor/report.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.8.0",
3
+ "version": "0.10.0",
4
4
  "description": "FoundRuu CLI - AI開発を標準化するためのプラットフォームCLI",
5
5
  "license": "MIT",
6
6
  "type": "commonjs",