sdd-forge 0.1.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +45 -0
  3. package/package.json +23 -0
  4. package/src/analyzers/analyze-controllers.js +85 -0
  5. package/src/analyzers/analyze-extras.js +944 -0
  6. package/src/analyzers/analyze-models.js +130 -0
  7. package/src/analyzers/analyze-routes.js +50 -0
  8. package/src/analyzers/analyze-shells.js +75 -0
  9. package/src/analyzers/lib/php-array-parser.js +138 -0
  10. package/src/analyzers/scan.js +116 -0
  11. package/src/bin/sdd-forge.js +117 -0
  12. package/src/engine/directive-parser.js +72 -0
  13. package/src/engine/init.js +253 -0
  14. package/src/engine/populate.js +192 -0
  15. package/src/engine/readme.js +174 -0
  16. package/src/engine/renderers.js +150 -0
  17. package/src/engine/resolver.js +568 -0
  18. package/src/engine/tfill.js +617 -0
  19. package/src/flow/flow.js +183 -0
  20. package/src/forge/forge.js +684 -0
  21. package/src/help.js +55 -0
  22. package/src/lib/cli.js +83 -0
  23. package/src/lib/config.js +40 -0
  24. package/src/lib/process.js +32 -0
  25. package/src/projects/add.js +73 -0
  26. package/src/projects/projects.js +91 -0
  27. package/src/projects/setdefault.js +37 -0
  28. package/src/spec/gate.js +101 -0
  29. package/src/spec/spec.js +198 -0
  30. package/src/templates/checks/check-controller-coverage.sh +46 -0
  31. package/src/templates/checks/check-db-coverage.sh +87 -0
  32. package/src/templates/checks/check-node-cli-docs.sh +125 -0
  33. package/src/templates/checks/check-temp-docs.sh +100 -0
  34. package/src/templates/checks/generate-change-log.sh +142 -0
  35. package/src/templates/checks/self-review-temp-docs.sh +18 -0
  36. package/src/templates/locale/ja/messages.json +9 -0
  37. package/src/templates/locale/ja/node-cli/01_overview.md +23 -0
  38. package/src/templates/locale/ja/node-cli/02_cli_commands.md +23 -0
  39. package/src/templates/locale/ja/node-cli/03_configuration.md +23 -0
  40. package/src/templates/locale/ja/node-cli/04_internal_design.md +30 -0
  41. package/src/templates/locale/ja/node-cli/05_development.md +49 -0
  42. package/src/templates/locale/ja/node-cli/README.md +41 -0
  43. package/src/templates/locale/ja/php-mvc/01_architecture.md +23 -0
  44. package/src/templates/locale/ja/php-mvc/02_stack_and_ops.md +45 -0
  45. package/src/templates/locale/ja/php-mvc/03_project_structure.md +46 -0
  46. package/src/templates/locale/ja/php-mvc/04_development.md +69 -0
  47. package/src/templates/locale/ja/php-mvc/05_auth_and_session.md +48 -0
  48. package/src/templates/locale/ja/php-mvc/06_database_architecture.md +23 -0
  49. package/src/templates/locale/ja/php-mvc/07_db_tables.md +31 -0
  50. package/src/templates/locale/ja/php-mvc/08_controller_routes.md +33 -0
  51. package/src/templates/locale/ja/php-mvc/09_business_logic.md +27 -0
  52. package/src/templates/locale/ja/php-mvc/10_batch_and_shell.md +25 -0
  53. package/src/templates/locale/ja/php-mvc/README.md +34 -0
  54. package/src/templates/locale/ja/prompts.json +4 -0
  55. package/src/templates/locale/ja/sections.json +6 -0
  56. package/src/templates/review-checklist.md +48 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Spread Works Ltd.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,45 @@
1
+ # {{PROJECT_NAME}}
2
+
3
+ {{PROJECT_DESCRIPTION}}
4
+
5
+ ## 技術スタック
6
+
7
+ | カテゴリ | 技術 |
8
+ |----------|------|
9
+ | 言語 | Node.js (ES Modules) |
10
+ | 配布 | npm |
11
+ | テスト | — |
12
+
13
+ ## クイックスタート
14
+
15
+ ```bash
16
+ npm install -g {{PACKAGE_NAME}}
17
+ {{PACKAGE_NAME}} help
18
+ ```
19
+
20
+ ## ドキュメント
21
+
22
+ | 章 | 概要 |
23
+ |----|------|
24
+ | [01. ツール概要とアーキテクチャ](docs/01_overview.md) | `sdd-forge` は、PHP-MVC プロジェクト(CakePHP 等)における「仕様と実装の乖離」および「技術ドキュメントの作成・維持コスト」という課題を解決するための Node.js CLI ツールである。ソースコード静的解析(`scan`)・テンプレート駆動のドキュメント生成(`init` / `populate` / `tfill`)・仕様ゲート管理(`spec` / `gate`)・反復改善ループ(`forge`)を単一パッケージに統合し、Spec-Driven Development(SDD)ワークフローをコマンドラインから一貫して実行できる。 |
25
+ | [02. CLI コマンドリファレンス](docs/02_cli_commands.md) | `SCRIPTS` オブジェクトから `scan:all` を含めると 19 コマンド(エントリは 18 だが `scan:all` は別処理)が確認できます。正確な数を数えます。 |
26
+ | [03. 設定とカスタマイズ](docs/03_configuration.md) | sdd-forge の動作は `.sdd-forge/config.json` を中心とした複数の JSON 設定ファイルによって制御され、言語・テンプレートタイプ・AIプロバイダー・タイムアウト・テキスト生成挙動など幅広い項目をカスタマイズできる。プロジェクトごとのテンプレート差し替えは `project-overrides.json`、解析結果の表現上書きは `overrides.json` で行い、関心ごとに設定を分離できる構成になっている。 |
27
+ | [04. 内部設計](docs/04_internal_design.md) | `src/bin/sdd-forge.js` がサブコマンドを各モジュール(`analyzers/`・`engine/`・`spec/`・`forge/`・`flow/`)へディスパッチし、共通ユーティリティ `lib/` を底辺として解析→生成→改善の方向で一方向に依存が流れる設計になっている。PHPソースを `analyzers/` が `analysis.json` へ変換し、`engine/populate` と `engine/tfill` がそのデータをテンプレートと組み合わせて `docs/` へ展開するパイプラインが中心的な処理フローである。 |
28
+ | [05. 開発・テスト・配布](docs/05_development.md) | `npm link` を使ったビルド不要のローカル開発環境、外部依存ゼロの Node.js 実装、および `npm version` と `npm publish` による npm レジストリへのリリースフローを中心に構成された章である。テストフレームワークは現時点では導入されておらず、動作確認はコマンド直接実行による手動テストで行う。 |
29
+
30
+ ## 開発ワークフロー(SDD)
31
+
32
+ 本プロジェクトは Spec-Driven Development(SDD)を採用しています。
33
+
34
+ ```
35
+ 1. sdd-forge spec --title "..." — 仕様ファイル作成
36
+ 2. sdd-forge gate --spec ... — 仕様ゲート(未解決事項がなければ PASS)
37
+ 3. 実装
38
+ 4. sdd-forge forge --prompt "..." — ドキュメント自動更新
39
+ 5. sdd-forge review — ドキュメントレビュー
40
+ ```
41
+
42
+ 詳細は [CLAUDE.md](CLAUDE.md) の「SDDフロー」セクションを参照してください。
43
+
44
+ <!-- MANUAL:START -->
45
+ <!-- MANUAL:END -->
package/package.json ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "sdd-forge",
3
+ "version": "0.1.0-alpha.1",
4
+ "description": "Spec-Driven Development tooling for PHP-MVC documentation generation",
5
+ "type": "module",
6
+ "bin": {
7
+ "sdd-forge": "./src/bin/sdd-forge.js"
8
+ },
9
+ "files": [
10
+ "src/"
11
+ ],
12
+ "engines": {
13
+ "node": ">=18.0.0"
14
+ },
15
+ "keywords": [
16
+ "sdd",
17
+ "documentation",
18
+ "php",
19
+ "cakephp",
20
+ "spec-driven-development"
21
+ ],
22
+ "license": "MIT"
23
+ }
@@ -0,0 +1,85 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * tools/analyzers/analyze-controllers.js
4
+ *
5
+ * app/Controller/*Controller.php を走査し、
6
+ * クラス名・components・uses・アクション一覧を抽出する。
7
+ */
8
+
9
+ import fs from "fs";
10
+ import path from "path";
11
+ import {
12
+ stripBlockComments,
13
+ extractArrayBody,
14
+ extractQuotedStrings,
15
+ } from "./lib/php-array-parser.js";
16
+
17
+ const LIFECYCLE_METHODS = new Set([
18
+ "beforeFilter",
19
+ "afterFilter",
20
+ "beforeRender",
21
+ "beforeRedirect",
22
+ "constructClasses",
23
+ "initialize",
24
+ "startup",
25
+ "shutdownProcess",
26
+ ]);
27
+
28
+ export function analyzeControllers(appDir) {
29
+ const controllerDir = path.join(appDir, "Controller");
30
+ if (!fs.existsSync(controllerDir)) return { controllers: [], summary: {} };
31
+
32
+ const files = fs
33
+ .readdirSync(controllerDir)
34
+ .filter((f) => f.endsWith("Controller.php") && f !== "AppController.php");
35
+
36
+ const controllers = [];
37
+ for (const file of files) {
38
+ const filePath = path.join(controllerDir, file);
39
+ const raw = fs.readFileSync(filePath, "utf8");
40
+ const src = stripBlockComments(raw);
41
+
42
+ const classMatch = src.match(/class\s+(\w+)\s+extends\s+(\w+)/);
43
+ if (!classMatch) continue;
44
+
45
+ const className = classMatch[1];
46
+ const parentClass = classMatch[2];
47
+
48
+ const componentsBody = extractArrayBody(src, "components");
49
+ const components = componentsBody
50
+ ? extractQuotedStrings(componentsBody)
51
+ : [];
52
+
53
+ const usesBody = extractArrayBody(src, "uses");
54
+ const uses = usesBody ? extractQuotedStrings(usesBody) : [];
55
+
56
+ const actions = [];
57
+ const fnRe = /public\s+function\s+(\w+)\s*\(/g;
58
+ let fm;
59
+ while ((fm = fnRe.exec(src)) !== null) {
60
+ const name = fm[1];
61
+ if (!LIFECYCLE_METHODS.has(name) && !name.startsWith("_")) {
62
+ actions.push(name);
63
+ }
64
+ }
65
+
66
+ controllers.push({
67
+ file: path.relative(path.resolve(appDir, ".."), filePath),
68
+ className,
69
+ parentClass,
70
+ components,
71
+ uses,
72
+ actions,
73
+ });
74
+ }
75
+
76
+ controllers.sort((a, b) => a.className.localeCompare(b.className));
77
+
78
+ return {
79
+ controllers,
80
+ summary: {
81
+ total: controllers.length,
82
+ totalActions: controllers.reduce((s, c) => s + c.actions.length, 0),
83
+ },
84
+ };
85
+ }