opencroc 0.6.1 → 1.3.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/LICENSE +21 -21
- package/README.en.md +414 -340
- package/README.ja.md +386 -317
- package/README.md +417 -340
- package/README.zh-CN.md +414 -340
- package/dist/cli/index.js +1405 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/index.d.ts +1188 -3
- package/dist/index.js +4112 -248
- package/dist/index.js.map +1 -1
- package/dist/web/index.html +734 -0
- package/package.json +80 -75
package/README.ja.md
CHANGED
|
@@ -1,317 +1,386 @@
|
|
|
1
|
-
<p align="center">
|
|
2
|
-
<img src="assets/banner.png" alt="OpenCroc バナー" width="820" />
|
|
3
|
-
</p>
|
|
4
|
-
|
|
5
|
-
<h1 align="center">OpenCroc</h1>
|
|
6
|
-
|
|
7
|
-
<p align="center">
|
|
8
|
-
<strong>ソースコードを読み取り、テストを自動生成し、失敗を自己修復する AI ネイティブ E2E テストフレームワーク。</strong>
|
|
9
|
-
</p>
|
|
10
|
-
|
|
11
|
-
<p align="center">
|
|
12
|
-
<a href="https://www.npmjs.com/package/opencroc"><img src="https://img.shields.io/npm/v/opencroc?color=green" alt="npm version" /></a>
|
|
13
|
-
<a href="https://github.com/opencroc/opencroc/actions/workflows/ci.yml"><img src="https://github.com/opencroc/opencroc/actions/workflows/ci.yml/badge.svg?branch=main" alt="CI" /></a>
|
|
14
|
-
<a href="https://github.com/opencroc/opencroc/blob/main/LICENSE"><img src="https://img.shields.io/github/license/opencroc/opencroc" alt="MIT License" /></a>
|
|
15
|
-
<a href="https://opencroc.com"><img src="https://img.shields.io/badge/docs-opencroc.com-blue" alt="Documentation" /></a>
|
|
16
|
-
</p>
|
|
17
|
-
|
|
18
|
-
<p align="center">
|
|
19
|
-
<a href="README.en.md">English</a> | <a href="README.zh-CN.md">简体中文</a> | <a href="README.ja.md">日本語</a>
|
|
20
|
-
</p>
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
## OpenCroc とは
|
|
25
|
-
|
|
26
|
-
OpenCroc は [Playwright](https://playwright.dev) 上に構築された **AI ネイティブ E2E テストフレームワーク** です。手作業で大量のテストスクリプトを書く代わりに、OpenCroc は**バックエンドのソースコード**(モデル、コントローラー、DTO)を解析し、API チェーン、シードデータ、リクエストボディ、アサーションを含む E2E テストスイートを自動生成します。
|
|
27
|
-
|
|
28
|
-
テストが失敗した場合、単なるエラー出力で終わりません。リクエストチェーン全体をたどって**根本原因を特定**し、**修正パッチを生成**し、**再実行で修正を検証**します。
|
|
29
|
-
|
|
30
|
-
### 主な機能
|
|
31
|
-
|
|
32
|
-
| 機能 | 説明 |
|
|
33
|
-
|---|---|
|
|
34
|
-
| **ソースコード認識型テスト生成** | [ts-morph](https://ts-morph.com) で Sequelize/TypeORM モデル、Express/NestJS コントローラー、DTO デコレーターを解析し API 面を把握 |
|
|
35
|
-
| **AI 駆動の設定生成** | LLM がリクエストテンプレート、シードデータ、パラメータマッピングを生成し、3層検証(schema -> semantic -> dry-run)で確認 |
|
|
36
|
-
| **インテリジェントなチェーン計画** | API 依存 DAG を構築し、トポロジカルソートと貪欲最適化でテストチェーンを設計 |
|
|
37
|
-
| **ログ駆動の完了判定** | `networkidle` を超えて、バックエンド実行ログ(`api_exec end`)で完了を検証 |
|
|
38
|
-
| **失敗チェーンの原因追跡** | ネットワークエラー -> 遅延 API -> バックエンドログの順で追跡し根因特定 |
|
|
39
|
-
| **制御された自己修復** | `backup -> AI patch -> dry-run -> apply -> re-run -> verify -> rollback` を安全ゲート付きで実行 |
|
|
40
|
-
| **影響範囲分析** | 外部キー関係を BFS でたどり、影響範囲を可視化し Mermaid 図を生成 |
|
|
41
|
-
|
|
42
|
-
## クイックスタート
|
|
43
|
-
|
|
44
|
-
### 前提条件
|
|
45
|
-
|
|
46
|
-
- Node.js >= 18
|
|
47
|
-
- Express/NestJS + Sequelize/TypeORM を利用するバックエンドプロジェクト
|
|
48
|
-
|
|
49
|
-
### インストール
|
|
50
|
-
|
|
51
|
-
```bash
|
|
52
|
-
npm install opencroc --save-dev
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
### 初期化
|
|
56
|
-
|
|
57
|
-
```bash
|
|
58
|
-
npx opencroc init
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
このコマンドで以下を実行します:
|
|
62
|
-
1. プロジェクト構成をスキャン
|
|
63
|
-
2. ORM とフレームワークを検出
|
|
64
|
-
3. `opencroc.config.ts` を初期生成
|
|
65
|
-
4. サンプルテストを生成
|
|
66
|
-
|
|
67
|
-
### テスト生成
|
|
68
|
-
|
|
69
|
-
```bash
|
|
70
|
-
# 単一モジュールのテスト生成
|
|
71
|
-
npx opencroc generate --module=knowledge-base
|
|
72
|
-
|
|
73
|
-
# 全モジュールのテスト生成
|
|
74
|
-
npx opencroc generate --all
|
|
75
|
-
|
|
76
|
-
# ドライラン(ファイルを書き込まない)
|
|
77
|
-
npx opencroc generate --all --dry-run
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
### テスト実行
|
|
81
|
-
|
|
82
|
-
```bash
|
|
83
|
-
# 生成済みテストをすべて実行
|
|
84
|
-
npx opencroc test
|
|
85
|
-
|
|
86
|
-
# 特定モジュールのみ実行
|
|
87
|
-
npx opencroc test --module=knowledge-base
|
|
88
|
-
|
|
89
|
-
# 自己修復モードで実行
|
|
90
|
-
npx opencroc test --self-heal
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
### AI 設定の検証
|
|
94
|
-
|
|
95
|
-
```bash
|
|
96
|
-
# 生成設定を検証
|
|
97
|
-
npx opencroc validate --all
|
|
98
|
-
|
|
99
|
-
# AI 生成結果とベースラインを比較
|
|
100
|
-
npx opencroc compare --baseline=report-a.json --current=report-b.json
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
-
|
|
205
|
-
-
|
|
206
|
-
-
|
|
207
|
-
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="assets/banner.png" alt="OpenCroc バナー" width="820" />
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">OpenCroc</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<strong>ソースコードを読み取り、テストを自動生成し、失敗を自己修復する AI ネイティブ E2E テストフレームワーク。</strong>
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
<p align="center">
|
|
12
|
+
<a href="https://www.npmjs.com/package/opencroc"><img src="https://img.shields.io/npm/v/opencroc?color=green" alt="npm version" /></a>
|
|
13
|
+
<a href="https://github.com/opencroc/opencroc/actions/workflows/ci.yml"><img src="https://github.com/opencroc/opencroc/actions/workflows/ci.yml/badge.svg?branch=main" alt="CI" /></a>
|
|
14
|
+
<a href="https://github.com/opencroc/opencroc/blob/main/LICENSE"><img src="https://img.shields.io/github/license/opencroc/opencroc" alt="MIT License" /></a>
|
|
15
|
+
<a href="https://opencroc.com"><img src="https://img.shields.io/badge/docs-opencroc.com-blue" alt="Documentation" /></a>
|
|
16
|
+
</p>
|
|
17
|
+
|
|
18
|
+
<p align="center">
|
|
19
|
+
<a href="README.en.md">English</a> | <a href="README.zh-CN.md">简体中文</a> | <a href="README.ja.md">日本語</a>
|
|
20
|
+
</p>
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## OpenCroc とは
|
|
25
|
+
|
|
26
|
+
OpenCroc は [Playwright](https://playwright.dev) 上に構築された **AI ネイティブ E2E テストフレームワーク** です。手作業で大量のテストスクリプトを書く代わりに、OpenCroc は**バックエンドのソースコード**(モデル、コントローラー、DTO)を解析し、API チェーン、シードデータ、リクエストボディ、アサーションを含む E2E テストスイートを自動生成します。
|
|
27
|
+
|
|
28
|
+
テストが失敗した場合、単なるエラー出力で終わりません。リクエストチェーン全体をたどって**根本原因を特定**し、**修正パッチを生成**し、**再実行で修正を検証**します。
|
|
29
|
+
|
|
30
|
+
### 主な機能
|
|
31
|
+
|
|
32
|
+
| 機能 | 説明 |
|
|
33
|
+
|---|---|
|
|
34
|
+
| **ソースコード認識型テスト生成** | [ts-morph](https://ts-morph.com) で Sequelize/TypeORM モデル、Express/NestJS コントローラー、DTO デコレーターを解析し API 面を把握 |
|
|
35
|
+
| **AI 駆動の設定生成** | LLM がリクエストテンプレート、シードデータ、パラメータマッピングを生成し、3層検証(schema -> semantic -> dry-run)で確認 |
|
|
36
|
+
| **インテリジェントなチェーン計画** | API 依存 DAG を構築し、トポロジカルソートと貪欲最適化でテストチェーンを設計 |
|
|
37
|
+
| **ログ駆動の完了判定** | `networkidle` を超えて、バックエンド実行ログ(`api_exec end`)で完了を検証 |
|
|
38
|
+
| **失敗チェーンの原因追跡** | ネットワークエラー -> 遅延 API -> バックエンドログの順で追跡し根因特定 |
|
|
39
|
+
| **制御された自己修復** | `backup -> AI patch -> dry-run -> apply -> re-run -> verify -> rollback` を安全ゲート付きで実行 |
|
|
40
|
+
| **影響範囲分析** | 外部キー関係を BFS でたどり、影響範囲を可視化し Mermaid 図を生成 |
|
|
41
|
+
|
|
42
|
+
## クイックスタート
|
|
43
|
+
|
|
44
|
+
### 前提条件
|
|
45
|
+
|
|
46
|
+
- Node.js >= 18
|
|
47
|
+
- Express/NestJS + Sequelize/TypeORM を利用するバックエンドプロジェクト
|
|
48
|
+
|
|
49
|
+
### インストール
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
npm install opencroc --save-dev
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 初期化
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
npx opencroc init
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
このコマンドで以下を実行します:
|
|
62
|
+
1. プロジェクト構成をスキャン
|
|
63
|
+
2. ORM とフレームワークを検出
|
|
64
|
+
3. `opencroc.config.ts` を初期生成
|
|
65
|
+
4. サンプルテストを生成
|
|
66
|
+
|
|
67
|
+
### テスト生成
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# 単一モジュールのテスト生成
|
|
71
|
+
npx opencroc generate --module=knowledge-base
|
|
72
|
+
|
|
73
|
+
# 全モジュールのテスト生成
|
|
74
|
+
npx opencroc generate --all
|
|
75
|
+
|
|
76
|
+
# ドライラン(ファイルを書き込まない)
|
|
77
|
+
npx opencroc generate --all --dry-run
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### テスト実行
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
# 生成済みテストをすべて実行
|
|
84
|
+
npx opencroc test
|
|
85
|
+
|
|
86
|
+
# 特定モジュールのみ実行
|
|
87
|
+
npx opencroc test --module=knowledge-base
|
|
88
|
+
|
|
89
|
+
# 自己修復モードで実行
|
|
90
|
+
npx opencroc test --self-heal
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### AI 設定の検証
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
# 生成設定を検証
|
|
97
|
+
npx opencroc validate --all
|
|
98
|
+
|
|
99
|
+
# AI 生成結果とベースラインを比較
|
|
100
|
+
npx opencroc compare --baseline=report-a.json --current=report-b.json
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### OpenCroc Studio の起動
|
|
104
|
+
|
|
105
|
+
OpenCroc Studio は**ピクセルアート風ワニオフィス** + リアルタイム**ナレッジグラフ** UI です。ローカル Web サーバーとして起動し、プロジェクト構造・Agent ステータス・テスト結果を可視化します。
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
# Studio を起動(http://localhost:8765 をブラウザで自動オープン)
|
|
109
|
+
npx opencroc serve
|
|
110
|
+
|
|
111
|
+
# カスタムポート
|
|
112
|
+
npx opencroc serve --port 3000
|
|
113
|
+
|
|
114
|
+
# ブラウザ自動オープンを無効化
|
|
115
|
+
npx opencroc serve --no-open
|
|
116
|
+
|
|
117
|
+
# ホスト指定(リモートアクセス用)
|
|
118
|
+
npx opencroc serve --host 0.0.0.0 --port 8765
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Studio の機能:
|
|
122
|
+
- **ナレッジグラフキャンバス** — モデル・コントローラー・API 関係のインタラクティブグラフ(ドラッグ、ズーム、ホバー)
|
|
123
|
+
- **ピクセルワニオフィス** — 6 体の AI Agent(パーサー 🐊、アナライザー 🐊、テスター 🐊、ヒーラー 🐊、プランナー 🐊、レポーター 🐊)、リアルタイムステータスアニメーション付き
|
|
124
|
+
- **リアルタイム WebSocket** — Agent ステータスとグラフ変更を即座にブラウザへ配信
|
|
125
|
+
- **モジュールサイドバー** — 検出されたモジュールと Agent ステータスをひと目で確認
|
|
126
|
+
- **REST API** — `GET /api/project`(グラフデータ)、`GET /api/agents`(Agent ステータス)、`POST /api/project/refresh`(再スキャン)
|
|
127
|
+
|
|
128
|
+
### フルパイプライン(ワンコマンド)
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
# すべてを実行:generate → execute → analyze → heal → report
|
|
132
|
+
npx opencroc run
|
|
133
|
+
|
|
134
|
+
# オプション付き
|
|
135
|
+
npx opencroc run --module=users --self-heal --report html,json
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### CI/CD 統合
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
# GitHub Actions ワークフローを生成
|
|
142
|
+
npx opencroc ci --platform github
|
|
143
|
+
|
|
144
|
+
# GitLab CI パイプラインを生成
|
|
145
|
+
npx opencroc ci --platform gitlab --self-heal
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### Dashboard とレポート
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
# ビジュアル Dashboard を生成
|
|
152
|
+
npx opencroc dashboard
|
|
153
|
+
|
|
154
|
+
# 複数形式のレポートを生成
|
|
155
|
+
npx opencroc report --format html,json,markdown
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## アーキテクチャ
|
|
159
|
+
|
|
160
|
+
```
|
|
161
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
162
|
+
│ OpenCroc Studio (localhost:8765) │
|
|
163
|
+
│ ピクセルワニオフィス + ナレッジグラフ + WebSocket │
|
|
164
|
+
├─────────────────────────────────────────────────────────────┤
|
|
165
|
+
│ CLI / Orchestrator │
|
|
166
|
+
├──────────┬──────────┬──────────┬──────────┬─────────────────┤
|
|
167
|
+
│ Source │ Chain │ Test │ Execution│ Self-Healing │
|
|
168
|
+
│ Parser │ Planner │Generator │ Engine │ Engine │
|
|
169
|
+
│ │ │ │ │ │
|
|
170
|
+
│ ts-morph │ DAG + │ Template │Playwright│ AI Attribution │
|
|
171
|
+
│ Model │ Topo │ + AI │ + Log │ + Controlled │
|
|
172
|
+
│ Controller│ Sort + │ Config │ Driven │ Fix + Verify │
|
|
173
|
+
│ DTO │ Greedy │ Merge │ Assert │ + Rollback │
|
|
174
|
+
├──────────┴──────────┴──────────┴──────────┴─────────────────┤
|
|
175
|
+
│ Observation Bus (Network + Backend Logs) │
|
|
176
|
+
├──────────────────────────────────────────────────────────────┤
|
|
177
|
+
│ Report Engine (HTML / JSON / Markdown) │
|
|
178
|
+
└──────────────────────────────────────────────────────────────┘
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### 6 段階パイプライン
|
|
182
|
+
|
|
183
|
+
```
|
|
184
|
+
Source Scan -> ER Diagram -> API Analysis -> Chain Planning -> Test Generation -> Failure Analysis
|
|
185
|
+
│ │ │ │ │ │
|
|
186
|
+
ts-morph Mermaid Dependency Topological Playwright + Root Cause +
|
|
187
|
+
parsing erDiagram DAG builder + greedy AI body/seed Impact map
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
## 仕組み
|
|
191
|
+
|
|
192
|
+
### 1. ソース解析
|
|
193
|
+
|
|
194
|
+
OpenCroc は [ts-morph](https://ts-morph.com) を使ってバックエンドを静的解析します。
|
|
195
|
+
|
|
196
|
+
- **Models**: Sequelize `Model.init()` / TypeORM `@Entity()` からテーブル名、列型、インデックス、外部キーを抽出
|
|
197
|
+
- **Controllers**: Express `router.get/post/put/delete` からルート、HTTP メソッド、パスパラメータを抽出
|
|
198
|
+
- **DTOs**: `@IsString()`、`@IsNumber()`、`@IsOptional()` からバリデーションルールを抽出
|
|
199
|
+
|
|
200
|
+
### 2. AI 設定生成
|
|
201
|
+
|
|
202
|
+
各モジュールごとに、OpenCroc は LLM(OpenAI / ZhiPu / OpenAI 互換 API)を呼び出して以下を生成します。
|
|
203
|
+
|
|
204
|
+
- **リクエストボディテンプレート**: フィールド精度の高い POST/PUT ペイロード
|
|
205
|
+
- **シードデータ**: 正しい API 順序を持つ `beforeAll` セットアップ
|
|
206
|
+
- **パラメータマッピング**: パスパラメータ別名(`/:id` -> `categoryId`)
|
|
207
|
+
- **ID エイリアス**: 複数リソースチェーンでの ID 衝突防止
|
|
208
|
+
|
|
209
|
+
各設定は **3 層検証** を通過します。
|
|
210
|
+
1. **Schema 検証**: JSON 構造の完全性
|
|
211
|
+
2. **Semantic 検証**: フィールド値がソースメタデータに一致するか
|
|
212
|
+
3. **Dry-run 検証**: TypeScript コンパイル確認
|
|
213
|
+
|
|
214
|
+
失敗した設定は書き込み前に自動修正(最大 3 ラウンド)されます。
|
|
215
|
+
|
|
216
|
+
### 3. ログ駆動の完了判定
|
|
217
|
+
|
|
218
|
+
壊れやすい `networkidle` に依存せず、以下で判定します。
|
|
219
|
+
|
|
220
|
+
```
|
|
221
|
+
Frontend Request -> Backend api_exec start log -> Backend processing -> api_exec end log
|
|
222
|
+
↓
|
|
223
|
+
OpenCroc polls end logs to confirm completion
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
フロントが待機状態でもバックエンドが継続処理中のケースを検出できます。
|
|
227
|
+
|
|
228
|
+
### 4. 自己修復ループ
|
|
229
|
+
|
|
230
|
+
```
|
|
231
|
+
Test Failure
|
|
232
|
+
-> AI Attribution (LLM + heuristic fallback)
|
|
233
|
+
-> Generate Fix Patch
|
|
234
|
+
-> Dry-Run Validation
|
|
235
|
+
-> Apply Patch (with backup)
|
|
236
|
+
-> Re-run Failed Tests
|
|
237
|
+
-> Verify Fix
|
|
238
|
+
-> Commit or Rollback
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
## 実プロジェクト検証
|
|
242
|
+
|
|
243
|
+
OpenCroc は**本番規模の RBAC システム**(マルチテナント企業権限管理)で検証済みです。100+ の Sequelize モデル、75+ の Express コントローラー、モデルファイル内埋め込みアソシエーションを含みます:
|
|
244
|
+
|
|
245
|
+
```
|
|
246
|
+
$ npx tsx examples/rbac-system/smoke-test.ts
|
|
247
|
+
|
|
248
|
+
Modules : 5 (default, aigc, data-platform, integration, workflow)
|
|
249
|
+
ER Diagrams : 5
|
|
250
|
+
[default] 102 tables, 65 relations
|
|
251
|
+
[aigc] 6 tables, 0 relations
|
|
252
|
+
[data-platform] 4 tables, 0 relations
|
|
253
|
+
[integration] 14 tables, 0 relations
|
|
254
|
+
[workflow] 2 tables, 0 relations
|
|
255
|
+
Chain Plans : 5
|
|
256
|
+
[aigc] 78 chains, 150 steps
|
|
257
|
+
Generated Files: 78
|
|
258
|
+
Duration : 1153ms
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
主な結果:
|
|
262
|
+
- フラットモデルレイアウトから **102 テーブル** と **65 の外部キー関係** を正確に抽出
|
|
263
|
+
- 専用の association ファイル不要 — モデルファイル内の**埋め込みアソシエーション**(`.belongsTo()` / `.hasMany()`)を検出
|
|
264
|
+
- 5 モジュールで **78 テストファイル** を約1秒で生成
|
|
265
|
+
- フラット(`models/*.ts`)とネスト(`models/module/*.ts`)の両ディレクトリ構造に対応
|
|
266
|
+
|
|
267
|
+
## 設定例
|
|
268
|
+
|
|
269
|
+
```typescript
|
|
270
|
+
// opencroc.config.ts
|
|
271
|
+
import { defineConfig } from 'opencroc';
|
|
272
|
+
|
|
273
|
+
export default defineConfig({
|
|
274
|
+
// バックエンドソースのパス
|
|
275
|
+
backend: {
|
|
276
|
+
modelsDir: 'src/models',
|
|
277
|
+
controllersDir: 'src/controllers',
|
|
278
|
+
servicesDir: 'src/services',
|
|
279
|
+
},
|
|
280
|
+
|
|
281
|
+
// 対象アプリケーション
|
|
282
|
+
baseUrl: 'http://localhost:3000',
|
|
283
|
+
apiBaseUrl: 'http://localhost:3000/api',
|
|
284
|
+
|
|
285
|
+
// AI 設定
|
|
286
|
+
ai: {
|
|
287
|
+
provider: 'openai', // 'openai' | 'zhipu' | 'custom'
|
|
288
|
+
apiKey: process.env.AI_API_KEY,
|
|
289
|
+
model: 'gpt-4o-mini',
|
|
290
|
+
},
|
|
291
|
+
|
|
292
|
+
// テスト実行
|
|
293
|
+
execution: {
|
|
294
|
+
workers: 4,
|
|
295
|
+
timeout: 30_000,
|
|
296
|
+
retries: 1,
|
|
297
|
+
},
|
|
298
|
+
|
|
299
|
+
// ログ駆動完了判定(バックエンド側の計測が必要)
|
|
300
|
+
logCompletion: {
|
|
301
|
+
enabled: true,
|
|
302
|
+
endpoint: '/internal/test-logs',
|
|
303
|
+
pollIntervalMs: 500,
|
|
304
|
+
timeoutMs: 10_000,
|
|
305
|
+
},
|
|
306
|
+
|
|
307
|
+
// 自己修復
|
|
308
|
+
selfHealing: {
|
|
309
|
+
enabled: false,
|
|
310
|
+
fixScope: 'config-only', // 'config-only' | 'config-and-source'
|
|
311
|
+
maxFixRounds: 3,
|
|
312
|
+
dryRunFirst: true,
|
|
313
|
+
},
|
|
314
|
+
});
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
## 対応技術スタック
|
|
318
|
+
|
|
319
|
+
| レイヤー | 対応済み | 予定 |
|
|
320
|
+
|---|---|---|
|
|
321
|
+
| **ORM** | Sequelize, TypeORM, Prisma, Drizzle | — |
|
|
322
|
+
| **Framework** | Express | NestJS, Fastify, Koa |
|
|
323
|
+
| **Test Runner** | Playwright | — |
|
|
324
|
+
| **LLM** | OpenAI, ZhiPu (GLM), Ollama (local) | Anthropic |
|
|
325
|
+
| **Database** | MySQL, PostgreSQL | SQLite, MongoDB |
|
|
326
|
+
|
|
327
|
+
## 比較
|
|
328
|
+
|
|
329
|
+
| 機能 | OpenCroc | Playwright | Metersphere | auto-playwright |
|
|
330
|
+
|---|---|---|---|---|
|
|
331
|
+
| ソース認識生成 | ✅ | ❌ | ❌ | ❌ |
|
|
332
|
+
| AI 設定生成 + 検証 | ✅ | ❌ | ❌ | ❌ |
|
|
333
|
+
| ログ駆動完了判定 | ✅ | ❌ | ❌ | ❌ |
|
|
334
|
+
| 失敗チェーン帰属分析 | ✅ | ❌ | Partial | ❌ |
|
|
335
|
+
| 自己修復 + ロールバック | ✅ | ❌ | ❌ | ❌ |
|
|
336
|
+
| API 依存 DAG | ✅ | ❌ | ❌ | ❌ |
|
|
337
|
+
| ゼロ設定テスト生成 | ✅ | Codegen only | Manual | NL->action |
|
|
338
|
+
| 影響範囲分析 | ✅ | ❌ | ❌ | ❌ |
|
|
339
|
+
|
|
340
|
+
## Roadmap
|
|
341
|
+
|
|
342
|
+
- [x] 6-stage source-to-test pipeline
|
|
343
|
+
- [x] AI configuration generation with 3-layer validation
|
|
344
|
+
- [x] Controlled self-healing loop
|
|
345
|
+
- [x] Log-driven completion detection
|
|
346
|
+
- [x] Failure chain attribution + impact analysis
|
|
347
|
+
- [x] TypeORM / Prisma adapter
|
|
348
|
+
- [x] Ollama local LLM support
|
|
349
|
+
- [x] Real-world validation (102 tables, 65 relations, 78 generated tests)
|
|
350
|
+
- [x] GitHub Actions / GitLab CI integration
|
|
351
|
+
- [x] VS Code extension scaffold
|
|
352
|
+
- [x] Plugin system
|
|
353
|
+
- [x] HTML / JSON / Markdown report generation
|
|
354
|
+
- [x] NestJS controller parser
|
|
355
|
+
- [x] Visual dashboard (opencroc.com)
|
|
356
|
+
- [x] Drizzle ORM adapter
|
|
357
|
+
- [x] AI Config Suggester + Enhanced DTO-aware Suggester
|
|
358
|
+
- [x] Auto-Fixer (4 strategies: interface-path, DTO field, seed dependency, param mapping)
|
|
359
|
+
- [x] 3-layer config validation (schema → semantic → dry-run)
|
|
360
|
+
- [x] DTO Parser (ts-morph interface + express-validator extraction)
|
|
361
|
+
- [x] Baseline Comparator (Playwright report diff + regression detection)
|
|
362
|
+
- [x] Module config preset loader
|
|
363
|
+
- [x] LLM-enhanced chain planner
|
|
364
|
+
- [x] Runtime infrastructure (Playwright config, auth setup, teardown, network monitor)
|
|
365
|
+
- [x] Full orchestration pipeline
|
|
366
|
+
- [x] Advanced reporters (checklist, workorder, token tracking)
|
|
367
|
+
- [x] OpenCroc Studio — ピクセルワニオフィス + ナレッジグラフ UI(`opencroc serve`)
|
|
368
|
+
|
|
369
|
+
## ドキュメント
|
|
370
|
+
|
|
371
|
+
詳細は **[opencroc.com](https://opencroc.com)** を参照してください。あわせて以下も確認できます。
|
|
372
|
+
|
|
373
|
+
- [Architecture Guide](docs/architecture.md)
|
|
374
|
+
- [Configuration Reference](docs/configuration.md)
|
|
375
|
+
- [Backend Instrumentation Guide](docs/backend-instrumentation.md)
|
|
376
|
+
- [AI Provider Setup](docs/ai-providers.md)
|
|
377
|
+
- [Self-Healing Guide](docs/self-healing.md)
|
|
378
|
+
- [Troubleshooting](docs/troubleshooting.md)
|
|
379
|
+
|
|
380
|
+
## コントリビュート
|
|
381
|
+
|
|
382
|
+
貢献を歓迎します。ガイドラインは [CONTRIBUTING.md](CONTRIBUTING.md) を参照してください。
|
|
383
|
+
|
|
384
|
+
## ライセンス
|
|
385
|
+
|
|
386
|
+
[MIT](LICENSE) © 2026 OpenCroc Contributors
|