@ripla/godd-mcp 0.1.2-beta-20260312091403
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 +412 -0
- package/dist/godd.cjs +465 -0
- package/dist/godd.js +34845 -0
- package/dist/index.js +224 -0
- package/notes-api/.env.example +29 -0
- package/notes-api/README.md +65 -0
- package/notes-api/alembic/README +1 -0
- package/notes-api/alembic/env.py +62 -0
- package/notes-api/alembic/script.py.mako +28 -0
- package/notes-api/alembic/versions/001_initial_notes_tables.py +71 -0
- package/notes-api/alembic.ini +149 -0
- package/notes-api/app/__init__.py +1 -0
- package/notes-api/app/config.py +90 -0
- package/notes-api/app/database.py +31 -0
- package/notes-api/app/main.py +55 -0
- package/notes-api/app/models/__init__.py +17 -0
- package/notes-api/app/models/audit.py +38 -0
- package/notes-api/app/models/base.py +38 -0
- package/notes-api/app/models/session.py +32 -0
- package/notes-api/app/models/setting.py +16 -0
- package/notes-api/app/models/user.py +38 -0
- package/notes-api/app/routers/__init__.py +1 -0
- package/notes-api/app/routers/auth.py +205 -0
- package/notes-api/app/routers/files.py +76 -0
- package/notes-api/app/routers/pr.py +92 -0
- package/notes-api/app/routers/settings.py +44 -0
- package/notes-api/app/routers/tree.py +22 -0
- package/notes-api/app/routers/users.py +145 -0
- package/notes-api/app/schemas/__init__.py +1 -0
- package/notes-api/app/schemas/auth.py +45 -0
- package/notes-api/app/schemas/user.py +41 -0
- package/notes-api/app/security.py +94 -0
- package/notes-api/app/services/__init__.py +1 -0
- package/notes-api/app/services/audit.py +25 -0
- package/notes-api/app/services/business_date.py +38 -0
- package/notes-api/app/services/github.py +140 -0
- package/notes-api/app/services/github_pr.py +120 -0
- package/notes-api/app/services/pr_chain.py +225 -0
- package/notes-api/app/startup.py +66 -0
- package/notes-api/docker/Dockerfile +14 -0
- package/notes-api/docker/Dockerfile.test +14 -0
- package/notes-api/pyproject.toml +53 -0
- package/notes-api/tests/conftest.py +21 -0
- package/notes-api/tests/test_business_date.py +32 -0
- package/notes-api/tests/test_health.py +11 -0
- package/notes-api/uv.lock +1012 -0
- package/notes-app/README.md +30 -0
- package/notes-app/docker/Dockerfile.prod +12 -0
- package/notes-app/docker/Dockerfile.test +12 -0
- package/notes-app/eslint.config.js +23 -0
- package/notes-app/index.html +12 -0
- package/notes-app/nginx.conf +23 -0
- package/notes-app/package.json +37 -0
- package/notes-app/pnpm-lock.yaml +3124 -0
- package/notes-app/src/App.tsx +13 -0
- package/notes-app/src/main.tsx +13 -0
- package/notes-app/src/pages/LoginPage.test.tsx +15 -0
- package/notes-app/src/pages/LoginPage.tsx +10 -0
- package/notes-app/src/pages/MainPage.tsx +14 -0
- package/notes-app/src/styles/globals.css +1 -0
- package/notes-app/src/vite-env.d.ts +1 -0
- package/notes-app/tsconfig.json +24 -0
- package/notes-app/tsconfig.node.json +10 -0
- package/notes-app/vite.config.js +21 -0
- package/notes-app/vite.config.ts +22 -0
- package/notes-app/vitest.config.ts +16 -0
- package/package.json +58 -0
- package/stacks/django-vue.yaml +33 -0
- package/stacks/fastapi-react.yaml +160 -0
- package/stacks/flutter-firebase.yaml +58 -0
- package/stacks/nextjs-prisma.yaml +33 -0
- package/stacks/schema.json +144 -0
- package/templates/agents/architect.hbs +183 -0
- package/templates/agents/auto-documenter.hbs +36 -0
- package/templates/agents/backend-developer.hbs +175 -0
- package/templates/agents/code-reviewer.hbs +29 -0
- package/templates/agents/database-developer.hbs +52 -0
- package/templates/agents/debug-specialist.hbs +39 -0
- package/templates/agents/environment-setup.hbs +41 -0
- package/templates/agents/frontend-developer.hbs +45 -0
- package/templates/agents/integration-qa.hbs +26 -0
- package/templates/agents/performance-qa.hbs +24 -0
- package/templates/agents/pr-writer.hbs +53 -0
- package/templates/agents/quality-lead.hbs +26 -0
- package/templates/agents/requirements-analyst.hbs +26 -0
- package/templates/agents/security-analyst.hbs +21 -0
- package/templates/agents/security-reviewer.hbs +20 -0
- package/templates/agents/ssot-updater.hbs +45 -0
- package/templates/agents/technical-writer.hbs +28 -0
- package/templates/agents/unit-test-engineer.hbs +19 -0
- package/templates/agents/user-clone.hbs +43 -0
- package/templates/github-actions/aws/deploy-notes.yml.hbs +118 -0
- package/templates/github-actions/azure/deploy-notes.yml.hbs +78 -0
- package/templates/github-actions/gcp/deploy-notes.yml.hbs +76 -0
- package/templates/github-actions/vercel-railway/deploy-notes.yml.hbs +49 -0
- package/templates/mindsets/agent-stdio.hbs +51 -0
- package/templates/mindsets/dart.hbs +39 -0
- package/templates/mindsets/ddd-clean-architecture.hbs +52 -0
- package/templates/mindsets/electron.hbs +41 -0
- package/templates/mindsets/fastapi.hbs +40 -0
- package/templates/mindsets/flutter.hbs +56 -0
- package/templates/mindsets/kotlin.hbs +46 -0
- package/templates/mindsets/postgresql.hbs +39 -0
- package/templates/mindsets/python.hbs +39 -0
- package/templates/mindsets/react.hbs +51 -0
- package/templates/mindsets/swift.hbs +46 -0
- package/templates/mindsets/terraform.hbs +53 -0
- package/templates/mindsets/typescript.hbs +34 -0
- package/templates/mindsets/vite.hbs +37 -0
- package/templates/notes-compose.yml +79 -0
- package/templates/partials/cogito-geo.hbs +84 -0
- package/templates/partials/cogito-godd.hbs +22 -0
- package/templates/partials/cogito-grammar.hbs +105 -0
- package/templates/partials/cogito-particle.hbs +76 -0
- package/templates/partials/cogito-root-ai.hbs +79 -0
- package/templates/partials/cogito-root-arch.hbs +75 -0
- package/templates/partials/cogito-root-core.hbs +75 -0
- package/templates/partials/cogito-root-daily.hbs +58 -0
- package/templates/partials/cogito-root-dev.hbs +71 -0
- package/templates/partials/cogito-root-devops.hbs +71 -0
- package/templates/partials/cogito-root-framework.hbs +80 -0
- package/templates/partials/cogito-root-lang.hbs +74 -0
- package/templates/partials/godd-core.hbs +50 -0
- package/templates/partials/project-context.hbs +52 -0
- package/templates/partials/ssot-header.hbs +40 -0
- package/templates/partials/ssot-rules.hbs +30 -0
- package/templates/prompts/adr.hbs +39 -0
- package/templates/prompts/agent-dev-workflow.hbs +34 -0
- package/templates/prompts/analyze-report.hbs +36 -0
- package/templates/prompts/auto-documentation.hbs +37 -0
- package/templates/prompts/check.hbs +52 -0
- package/templates/prompts/commit.hbs +96 -0
- package/templates/prompts/dev.hbs +127 -0
- package/templates/prompts/docs-init.hbs +95 -0
- package/templates/prompts/docs-update.hbs +51 -0
- package/templates/prompts/git-workflow.hbs +125 -0
- package/templates/prompts/impact-analysis.hbs +43 -0
- package/templates/prompts/install.hbs +40 -0
- package/templates/prompts/new-branch.hbs +61 -0
- package/templates/prompts/notes-deploy.hbs +72 -0
- package/templates/prompts/pr-analyze.hbs +44 -0
- package/templates/prompts/pr-create.hbs +125 -0
- package/templates/prompts/push-execute.hbs +83 -0
- package/templates/prompts/push.hbs +24 -0
- package/templates/prompts/release-notes.hbs +38 -0
- package/templates/prompts/requirements-to-business-flow.hbs +29 -0
- package/templates/prompts/requirements-to-tickets.hbs +26 -0
- package/templates/prompts/review.hbs +126 -0
- package/templates/prompts/setup.hbs +247 -0
- package/templates/prompts/spec.hbs +35 -0
- package/templates/prompts/specification-to-tickets.hbs +24 -0
- package/templates/prompts/submit.hbs +143 -0
- package/templates/prompts/sync.hbs +63 -0
- package/templates/prompts/test-plan.hbs +56 -0
- package/templates/terraform/aws/alb.tf.hbs +58 -0
- package/templates/terraform/aws/backend.tf.hbs +10 -0
- package/templates/terraform/aws/cloudfront.tf.hbs +96 -0
- package/templates/terraform/aws/ecr.tf.hbs +30 -0
- package/templates/terraform/aws/ecs.tf.hbs +136 -0
- package/templates/terraform/aws/iam.tf.hbs +88 -0
- package/templates/terraform/aws/local.tf.hbs +34 -0
- package/templates/terraform/aws/output.tf.hbs +49 -0
- package/templates/terraform/aws/provider.tf.hbs +26 -0
- package/templates/terraform/aws/rds.tf.hbs +38 -0
- package/templates/terraform/aws/s3.tf.hbs +34 -0
- package/templates/terraform/aws/secrets.tf.hbs +38 -0
- package/templates/terraform/aws/security_groups.tf.hbs +72 -0
- package/templates/terraform/aws/vpc.tf.hbs +63 -0
- package/templates/terraform/azure/backend.tf.hbs +8 -0
- package/templates/terraform/azure/iam.tf.hbs +36 -0
- package/templates/terraform/azure/main.tf.hbs +199 -0
- package/templates/terraform/azure/output.tf.hbs +19 -0
- package/templates/terraform/azure/provider.tf.hbs +19 -0
- package/templates/terraform/gcp/backend.tf.hbs +6 -0
- package/templates/terraform/gcp/iam.tf.hbs +47 -0
- package/templates/terraform/gcp/main.tf.hbs +171 -0
- package/templates/terraform/gcp/output.tf.hbs +15 -0
- package/templates/terraform/gcp/provider.tf.hbs +19 -0
- package/templates/terraform/vercel-railway/main.tf.hbs +64 -0
- package/templates/terraform/vercel-railway/output.tf.hbs +11 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Routes, Route, Navigate } from "react-router-dom";
|
|
2
|
+
import LoginPage from "./pages/LoginPage";
|
|
3
|
+
import MainPage from "./pages/MainPage";
|
|
4
|
+
|
|
5
|
+
export default function App() {
|
|
6
|
+
return (
|
|
7
|
+
<Routes>
|
|
8
|
+
<Route path="/login" element={<LoginPage />} />
|
|
9
|
+
<Route path="/" element={<MainPage />} />
|
|
10
|
+
<Route path="*" element={<Navigate to="/" replace />} />
|
|
11
|
+
</Routes>
|
|
12
|
+
);
|
|
13
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { StrictMode } from "react";
|
|
2
|
+
import { createRoot } from "react-dom/client";
|
|
3
|
+
import { BrowserRouter } from "react-router-dom";
|
|
4
|
+
import App from "./App";
|
|
5
|
+
import "./styles/globals.css";
|
|
6
|
+
|
|
7
|
+
createRoot(document.getElementById("root")!).render(
|
|
8
|
+
<StrictMode>
|
|
9
|
+
<BrowserRouter>
|
|
10
|
+
<App />
|
|
11
|
+
</BrowserRouter>
|
|
12
|
+
</StrictMode>
|
|
13
|
+
);
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { render, screen } from "@testing-library/react";
|
|
3
|
+
import { MemoryRouter } from "react-router-dom";
|
|
4
|
+
import LoginPage from "./LoginPage";
|
|
5
|
+
|
|
6
|
+
describe("LoginPage", () => {
|
|
7
|
+
it("renders title", () => {
|
|
8
|
+
render(
|
|
9
|
+
<MemoryRouter>
|
|
10
|
+
<LoginPage />
|
|
11
|
+
</MemoryRouter>
|
|
12
|
+
);
|
|
13
|
+
expect(screen.getByText("ripla Notes")).toBeTruthy();
|
|
14
|
+
});
|
|
15
|
+
});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export default function LoginPage() {
|
|
2
|
+
return (
|
|
3
|
+
<div className="min-h-screen flex items-center justify-center bg-gray-100">
|
|
4
|
+
<div className="bg-white p-8 rounded-lg shadow-md w-96">
|
|
5
|
+
<h1 className="text-2xl font-bold mb-6">ripla Notes</h1>
|
|
6
|
+
<p className="text-gray-600">ログインページ(実装予定)</p>
|
|
7
|
+
</div>
|
|
8
|
+
</div>
|
|
9
|
+
);
|
|
10
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export default function MainPage() {
|
|
2
|
+
return (
|
|
3
|
+
<div className="min-h-screen flex">
|
|
4
|
+
<aside className="w-64 bg-gray-800 text-white p-4">
|
|
5
|
+
<h2 className="font-bold mb-4">ファイルツリー</h2>
|
|
6
|
+
<p className="text-sm text-gray-400">(実装予定)</p>
|
|
7
|
+
</aside>
|
|
8
|
+
<main className="flex-1 p-6 bg-gray-50">
|
|
9
|
+
<h1 className="text-xl font-bold mb-4">エディタ</h1>
|
|
10
|
+
<p className="text-gray-600">Tiptap / Univer / drawio 統合予定</p>
|
|
11
|
+
</main>
|
|
12
|
+
</div>
|
|
13
|
+
);
|
|
14
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@import "tailwindcss";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/// <reference types="vite/client" />
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2020",
|
|
4
|
+
"useDefineForClassFields": true,
|
|
5
|
+
"lib": ["ES2020", "DOM", "DOM.Iterable"],
|
|
6
|
+
"module": "ESNext",
|
|
7
|
+
"skipLibCheck": true,
|
|
8
|
+
"moduleResolution": "bundler",
|
|
9
|
+
"allowImportingTsExtensions": true,
|
|
10
|
+
"isolatedModules": true,
|
|
11
|
+
"moduleDetection": "force",
|
|
12
|
+
"noEmit": true,
|
|
13
|
+
"jsx": "react-jsx",
|
|
14
|
+
"strict": true,
|
|
15
|
+
"noUnusedLocals": true,
|
|
16
|
+
"noUnusedParameters": true,
|
|
17
|
+
"noFallthroughCasesInSwitch": true,
|
|
18
|
+
"baseUrl": ".",
|
|
19
|
+
"paths": {
|
|
20
|
+
"@/*": ["./src/*"]
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"include": ["src"]
|
|
24
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { defineConfig } from "vite";
|
|
2
|
+
import react from "@vitejs/plugin-react";
|
|
3
|
+
import tailwindcss from "@tailwindcss/vite";
|
|
4
|
+
import path from "path";
|
|
5
|
+
export default defineConfig({
|
|
6
|
+
plugins: [react(), tailwindcss()],
|
|
7
|
+
resolve: {
|
|
8
|
+
alias: {
|
|
9
|
+
"@": path.resolve(__dirname, "./src"),
|
|
10
|
+
},
|
|
11
|
+
},
|
|
12
|
+
server: {
|
|
13
|
+
port: 5175,
|
|
14
|
+
proxy: {
|
|
15
|
+
"/api": {
|
|
16
|
+
target: "http://localhost:3100",
|
|
17
|
+
changeOrigin: true,
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { defineConfig } from "vite";
|
|
2
|
+
import react from "@vitejs/plugin-react";
|
|
3
|
+
import tailwindcss from "@tailwindcss/vite";
|
|
4
|
+
import path from "path";
|
|
5
|
+
|
|
6
|
+
export default defineConfig({
|
|
7
|
+
plugins: [react(), tailwindcss()],
|
|
8
|
+
resolve: {
|
|
9
|
+
alias: {
|
|
10
|
+
"@": path.resolve(__dirname, "./src"),
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
server: {
|
|
14
|
+
port: 5175,
|
|
15
|
+
proxy: {
|
|
16
|
+
"/api": {
|
|
17
|
+
target: "http://localhost:3100",
|
|
18
|
+
changeOrigin: true,
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { defineConfig } from "vitest/config";
|
|
2
|
+
import react from "@vitejs/plugin-react";
|
|
3
|
+
import path from "path";
|
|
4
|
+
|
|
5
|
+
export default defineConfig({
|
|
6
|
+
plugins: [react()],
|
|
7
|
+
test: {
|
|
8
|
+
environment: "jsdom",
|
|
9
|
+
globals: true,
|
|
10
|
+
},
|
|
11
|
+
resolve: {
|
|
12
|
+
alias: {
|
|
13
|
+
"@": path.resolve(__dirname, "./src"),
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
});
|
package/package.json
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ripla/godd-mcp",
|
|
3
|
+
"version": "0.1.2-beta-20260312091403",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "GoDD (Governance-orchestrated Driven Development) MCP Server - Encrypted prompt distribution via Model Context Protocol",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"godd": "dist/godd.js",
|
|
9
|
+
"godd-admin": "dist/admin.js"
|
|
10
|
+
},
|
|
11
|
+
"publishConfig": {
|
|
12
|
+
"access": "public",
|
|
13
|
+
"registry": "https://registry.npmjs.org/"
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist/",
|
|
17
|
+
"templates/",
|
|
18
|
+
"stacks/",
|
|
19
|
+
"notes-api/",
|
|
20
|
+
"notes-app/",
|
|
21
|
+
"README.md"
|
|
22
|
+
],
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
25
|
+
"handlebars": "^4.7.8",
|
|
26
|
+
"js-yaml": "^4.1.0",
|
|
27
|
+
"zod": "^3.24.2"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@types/js-yaml": "^4.0.9",
|
|
31
|
+
"@types/node": "^22.13.4",
|
|
32
|
+
"@yao-pkg/pkg": "^6.13.1",
|
|
33
|
+
"esbuild": "^0.25.0",
|
|
34
|
+
"tsx": "^4.19.2",
|
|
35
|
+
"typescript": "^5.7.3",
|
|
36
|
+
"vitest": "^4.0.18"
|
|
37
|
+
},
|
|
38
|
+
"engines": {
|
|
39
|
+
"node": ">=20.0.0"
|
|
40
|
+
},
|
|
41
|
+
"scripts": {
|
|
42
|
+
"build": "node esbuild.config.js",
|
|
43
|
+
"build:admin": "node esbuild.admin.config.js",
|
|
44
|
+
"dev": "tsx src/index.ts",
|
|
45
|
+
"dev:admin": "tsx src/admin/cli.ts",
|
|
46
|
+
"typecheck": "tsc --noEmit",
|
|
47
|
+
"test": "vitest run",
|
|
48
|
+
"test:watch": "vitest",
|
|
49
|
+
"encrypt": "tsx src/admin/encrypt.ts",
|
|
50
|
+
"keygen": "tsx src/admin/keygen.ts",
|
|
51
|
+
"build:customer": "tsx src/admin/build-customer.ts",
|
|
52
|
+
"godd": "tsx src/cli/godd.ts",
|
|
53
|
+
"godd:init": "tsx src/cli/godd.ts init",
|
|
54
|
+
"godd:install": "tsx src/cli/godd.ts install",
|
|
55
|
+
"build:dist": "node esbuild.config.js && node scripts/build-dist.js",
|
|
56
|
+
"build:dist:current": "node esbuild.config.js && node scripts/build-dist.js --current"
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
name: "Django + Vue"
|
|
2
|
+
description: "Django (Python) バックエンド + Vue.js (TypeScript) フロントエンド構成"
|
|
3
|
+
|
|
4
|
+
stacks:
|
|
5
|
+
- id: frontend
|
|
6
|
+
label: "フロント(Vue.js + TypeScript)"
|
|
7
|
+
name: "Vue.js + TypeScript"
|
|
8
|
+
mindset_template: "react-vite-ts"
|
|
9
|
+
- id: backend
|
|
10
|
+
label: "バックエンド(Django + Postgres)"
|
|
11
|
+
name: "Django + Postgres"
|
|
12
|
+
mindset_template: "fastapi-postgres-ddd"
|
|
13
|
+
|
|
14
|
+
frontend:
|
|
15
|
+
name: "Vue.js + TypeScript"
|
|
16
|
+
root_dir: "frontend"
|
|
17
|
+
build_command: "pnpm -C frontend build"
|
|
18
|
+
package_manager: "pnpm"
|
|
19
|
+
mindset_template: "react-vite-ts"
|
|
20
|
+
|
|
21
|
+
backend:
|
|
22
|
+
name: "Django + Postgres"
|
|
23
|
+
root_dir: "backend"
|
|
24
|
+
architecture: "Django MVT + Service Layer"
|
|
25
|
+
dependency_direction: "Models → Services → Views → URLs"
|
|
26
|
+
package_manager: "pip"
|
|
27
|
+
mindset_template: "fastapi-postgres-ddd"
|
|
28
|
+
|
|
29
|
+
quality_gate:
|
|
30
|
+
frontend: "docker compose run --rm --profile test frontend-test"
|
|
31
|
+
backend: "docker compose run --rm --profile test backend-test"
|
|
32
|
+
preflight_command: "pnpm preflight"
|
|
33
|
+
summary: "Docker 完全環境: lint/typecheck/django check/pytest/build (all in containers)"
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
name: "FastAPI + React"
|
|
2
|
+
description: "FastAPI (Python/DDD) バックエンド + React (Vite/TypeScript) フロントエンド構成"
|
|
3
|
+
|
|
4
|
+
stacks:
|
|
5
|
+
- id: frontend
|
|
6
|
+
label: "フロント(React + TypeScript)"
|
|
7
|
+
name: "React + Vite + TypeScript"
|
|
8
|
+
mindset_template: "react-vite-ts"
|
|
9
|
+
- id: backend
|
|
10
|
+
label: "バックエンド(FastAPI + Postgres + DDD)"
|
|
11
|
+
name: "FastAPI + Postgres + DDD"
|
|
12
|
+
mindset_template: "fastapi-postgres-ddd"
|
|
13
|
+
|
|
14
|
+
frontend:
|
|
15
|
+
name: "React + Vite + TypeScript"
|
|
16
|
+
root_dir: "frontend"
|
|
17
|
+
build_command: "pnpm -C frontend build"
|
|
18
|
+
package_manager: "pnpm"
|
|
19
|
+
mindset_template: "react-vite-ts"
|
|
20
|
+
|
|
21
|
+
backend:
|
|
22
|
+
name: "FastAPI + Postgres + DDD"
|
|
23
|
+
root_dir: "backend"
|
|
24
|
+
architecture: "DDD / Clean Architecture"
|
|
25
|
+
dependency_direction: "Domain → Usecase → Infrastructure → Presentation"
|
|
26
|
+
package_manager: "uv"
|
|
27
|
+
mindset_template: "fastapi-postgres-ddd"
|
|
28
|
+
|
|
29
|
+
quality_gate:
|
|
30
|
+
frontend: "docker compose run --rm --profile test frontend-test"
|
|
31
|
+
backend: "docker compose run --rm --profile test backend-test"
|
|
32
|
+
preflight_command: "pnpm preflight"
|
|
33
|
+
summary: "Docker 完全環境: lint/typecheck/build/ruff/pytest (all in containers)"
|
|
34
|
+
|
|
35
|
+
tools:
|
|
36
|
+
# --- Frontend ---
|
|
37
|
+
- id: "orval"
|
|
38
|
+
label: "Orval"
|
|
39
|
+
category: "frontend"
|
|
40
|
+
description: "OpenAPI クライアントコード自動生成"
|
|
41
|
+
url: "https://github.com/orval-labs/orval"
|
|
42
|
+
guidance: "バックエンド API スキーマ変更時は `pnpm orval` で型安全なクライアントを再生成する"
|
|
43
|
+
- id: "tanstack-query"
|
|
44
|
+
label: "TanStack Query"
|
|
45
|
+
category: "frontend"
|
|
46
|
+
description: "非同期データフェッチング/キャッシュ管理"
|
|
47
|
+
url: "https://github.com/TanStack/query"
|
|
48
|
+
guidance: "サーバー状態は useState ではなく useQuery/useMutation で管理する。staleTime/gcTime を適切に設定する"
|
|
49
|
+
- id: "vite"
|
|
50
|
+
label: "Vite"
|
|
51
|
+
category: "frontend"
|
|
52
|
+
description: "高速フロントエンドビルドツール"
|
|
53
|
+
url: "https://vitejs.dev/"
|
|
54
|
+
guidance: "HMR を活かすためバレルエクスポートを避ける。環境変数は VITE_ プレフィクス必須"
|
|
55
|
+
- id: "storybook"
|
|
56
|
+
label: "Storybook"
|
|
57
|
+
category: "frontend"
|
|
58
|
+
description: "UIコンポーネント開発/カタログツール"
|
|
59
|
+
url: "https://storybook.js.org/"
|
|
60
|
+
guidance: "新規UIコンポーネント作成時は Story を同時に追加する"
|
|
61
|
+
# --- Backend ---
|
|
62
|
+
- id: "sqlmodel"
|
|
63
|
+
label: "SQLModel"
|
|
64
|
+
category: "backend"
|
|
65
|
+
description: "SQLAlchemy + Pydantic ベースの Python ORM"
|
|
66
|
+
url: "https://sqlmodel.tiangolo.com/"
|
|
67
|
+
guidance: "テーブルモデルは table=True、API スキーマは table=False で分離する"
|
|
68
|
+
- id: "alembic"
|
|
69
|
+
label: "Alembic"
|
|
70
|
+
category: "backend"
|
|
71
|
+
description: "SQLAlchemy ベースの DB マイグレーションツール"
|
|
72
|
+
url: "https://alembic.sqlalchemy.org/"
|
|
73
|
+
guidance: "モデル変更後は `alembic revision --autogenerate` → レビュー → `alembic upgrade head`"
|
|
74
|
+
- id: "fastapi-users"
|
|
75
|
+
label: "FastAPI Users"
|
|
76
|
+
category: "backend"
|
|
77
|
+
description: "FastAPI 向け認証/ユーザー管理ライブラリ"
|
|
78
|
+
url: "https://fastapi-users.github.io/fastapi-users/"
|
|
79
|
+
guidance: "認証ロジックはカスタム実装せず fastapi-users の Strategy/Transport を利用する"
|
|
80
|
+
# --- DevTools ---
|
|
81
|
+
- id: "ruff"
|
|
82
|
+
label: "Ruff"
|
|
83
|
+
category: "devtool"
|
|
84
|
+
description: "超高速 Python Linter / Formatter(Rust製)"
|
|
85
|
+
url: "https://docs.astral.sh/ruff/"
|
|
86
|
+
guidance: "保存時に `ruff check --fix` と `ruff format` を自動実行する"
|
|
87
|
+
- id: "uv"
|
|
88
|
+
label: "uv"
|
|
89
|
+
category: "devtool"
|
|
90
|
+
description: "高速 Python パッケージマネージャ(Rust製)"
|
|
91
|
+
url: "https://docs.astral.sh/uv/"
|
|
92
|
+
guidance: "依存追加は `uv add`、ロック更新は `uv lock`、実行は `uv run`"
|
|
93
|
+
- id: "biome"
|
|
94
|
+
label: "Biome"
|
|
95
|
+
category: "devtool"
|
|
96
|
+
description: "高速 Linter / Formatter(Rust製)"
|
|
97
|
+
url: "https://biomejs.dev/"
|
|
98
|
+
guidance: "ESLint/Prettier の代替。biome.json で一括設定する"
|
|
99
|
+
# --- Testing ---
|
|
100
|
+
- id: "pytest"
|
|
101
|
+
label: "Pytest"
|
|
102
|
+
category: "testing"
|
|
103
|
+
description: "Python テストフレームワーク"
|
|
104
|
+
url: "https://docs.pytest.org/"
|
|
105
|
+
guidance: "conftest.py で fixture を共有。マーカーで slow/integration を分離する"
|
|
106
|
+
- id: "httpx"
|
|
107
|
+
label: "HTTPX"
|
|
108
|
+
category: "testing"
|
|
109
|
+
description: "Python 非同期 HTTP クライアント(テスト用)"
|
|
110
|
+
url: "https://www.python-httpx.org/"
|
|
111
|
+
guidance: "FastAPI テストでは httpx.AsyncClient + app をマウントして使う"
|
|
112
|
+
- id: "playwright"
|
|
113
|
+
label: "Playwright"
|
|
114
|
+
category: "testing"
|
|
115
|
+
description: "クロスブラウザ E2E テストフレームワーク"
|
|
116
|
+
url: "https://playwright.dev/"
|
|
117
|
+
guidance: "Page Object Model パターンで E2E テストを構造化する"
|
|
118
|
+
# --- Infrastructure ---
|
|
119
|
+
- id: "docker-compose"
|
|
120
|
+
label: "Docker Compose"
|
|
121
|
+
category: "infra"
|
|
122
|
+
description: "マルチコンテナオーケストレーション"
|
|
123
|
+
url: "https://docs.docker.com/compose/"
|
|
124
|
+
guidance: "開発環境は `docker compose up -d`。サービス間依存は depends_on + healthcheck で制御する"
|
|
125
|
+
- id: "caddy"
|
|
126
|
+
label: "Caddy"
|
|
127
|
+
category: "infra"
|
|
128
|
+
description: "自動 HTTPS 対応リバースプロキシ"
|
|
129
|
+
url: "https://caddyserver.com/"
|
|
130
|
+
guidance: "Caddyfile で reverse_proxy を設定。自動 HTTPS が不要なローカルでは http:// を明示する"
|
|
131
|
+
- id: "traefik"
|
|
132
|
+
label: "Traefik"
|
|
133
|
+
category: "infra"
|
|
134
|
+
description: "クラウドネイティブ リバースプロキシ / ロードバランサ"
|
|
135
|
+
url: "https://traefik.io/"
|
|
136
|
+
guidance: "Docker labels でルーティング設定。entryPoints/routers/services の3層構造を理解する"
|
|
137
|
+
# --- Monitoring ---
|
|
138
|
+
- id: "sentry"
|
|
139
|
+
label: "Sentry"
|
|
140
|
+
category: "monitoring"
|
|
141
|
+
description: "エラー追跡 / パフォーマンス監視"
|
|
142
|
+
url: "https://sentry.io/"
|
|
143
|
+
guidance: "フロント/バックエンド両方で init する。環境別DSNを .env で管理し、PII はフィルタリングする"
|
|
144
|
+
|
|
145
|
+
vendor:
|
|
146
|
+
- name: "browser-use"
|
|
147
|
+
description: "Python AI ブラウザエージェント — Webブラウザを自動操作"
|
|
148
|
+
runtime: "python"
|
|
149
|
+
setup_hint: "uv sync && uv run browser-use install"
|
|
150
|
+
enabled: true
|
|
151
|
+
- name: "android-use"
|
|
152
|
+
description: "Python Android AI エージェント — Android端末をADBで自動操作"
|
|
153
|
+
runtime: "python"
|
|
154
|
+
setup_hint: "python -m venv .venv && pip install -r requirements.txt"
|
|
155
|
+
enabled: true
|
|
156
|
+
- name: "react-grab"
|
|
157
|
+
description: "Node.js React コンテキストコピーツール — Reactコンポーネントツリーを抽出"
|
|
158
|
+
runtime: "node"
|
|
159
|
+
setup_hint: "pnpm install && pnpm build"
|
|
160
|
+
enabled: true
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
name: "Flutter + Firebase"
|
|
2
|
+
description: "Flutter (Dart) モバイル/Web アプリ + Firebase (BaaS) バックエンド構成"
|
|
3
|
+
|
|
4
|
+
stacks:
|
|
5
|
+
- id: mobile
|
|
6
|
+
label: "モバイル/Web(Flutter + Dart)"
|
|
7
|
+
name: "Flutter + Dart"
|
|
8
|
+
mindset_template: "flutter-dart"
|
|
9
|
+
- id: backend
|
|
10
|
+
label: "バックエンド(Firebase BaaS)"
|
|
11
|
+
name: "Firebase"
|
|
12
|
+
mindset_template: "firebase"
|
|
13
|
+
|
|
14
|
+
frontend:
|
|
15
|
+
name: "Flutter + Dart"
|
|
16
|
+
root_dir: "."
|
|
17
|
+
build_command: "flutter build"
|
|
18
|
+
package_manager: "pub"
|
|
19
|
+
mindset_template: "flutter-dart"
|
|
20
|
+
|
|
21
|
+
quality_gate:
|
|
22
|
+
frontend: "flutter analyze && flutter test"
|
|
23
|
+
preflight_command: "flutter doctor"
|
|
24
|
+
summary: "Flutter analyze + test"
|
|
25
|
+
|
|
26
|
+
tools:
|
|
27
|
+
- id: "flutter"
|
|
28
|
+
label: "Flutter"
|
|
29
|
+
category: "frontend"
|
|
30
|
+
description: "クロスプラットフォーム UI フレームワーク(Dart)"
|
|
31
|
+
url: "https://flutter.dev/"
|
|
32
|
+
guidance: "flutter create でプロジェクト生成。flutter run -d <device> でデバッグ起動"
|
|
33
|
+
- id: "dart"
|
|
34
|
+
label: "Dart"
|
|
35
|
+
category: "frontend"
|
|
36
|
+
description: "Flutter の基盤言語。null安全・AOTコンパイル対応"
|
|
37
|
+
url: "https://dart.dev/"
|
|
38
|
+
guidance: "dart analyze で静的解析。dart fix --apply で自動修正"
|
|
39
|
+
- id: "firebase-cli"
|
|
40
|
+
label: "Firebase CLI"
|
|
41
|
+
category: "infra"
|
|
42
|
+
description: "Firebase プロジェクト管理・デプロイツール"
|
|
43
|
+
url: "https://firebase.google.com/docs/cli"
|
|
44
|
+
guidance: "firebase init で初期化。firebase deploy でデプロイ"
|
|
45
|
+
- id: "riverpod"
|
|
46
|
+
label: "Riverpod"
|
|
47
|
+
category: "frontend"
|
|
48
|
+
description: "Flutter 状態管理ライブラリ(型安全・テスタブル)"
|
|
49
|
+
url: "https://riverpod.dev/"
|
|
50
|
+
guidance: "Provider はグローバル定数として定義。ref.watch / ref.read を使い分ける"
|
|
51
|
+
- id: "freezed"
|
|
52
|
+
label: "Freezed"
|
|
53
|
+
category: "frontend"
|
|
54
|
+
description: "Dart イミュータブルデータクラス / Union 型コード生成"
|
|
55
|
+
url: "https://pub.dev/packages/freezed"
|
|
56
|
+
guidance: "build_runner と併用。@freezed アノテーションでイミュータブルモデルを生成"
|
|
57
|
+
|
|
58
|
+
vendor: []
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
name: "Next.js + Prisma"
|
|
2
|
+
description: "Next.js (TypeScript/App Router) フロントエンド + Prisma (Node.js) バックエンド構成"
|
|
3
|
+
|
|
4
|
+
stacks:
|
|
5
|
+
- id: frontend
|
|
6
|
+
label: "フロント(Next.js + TypeScript)"
|
|
7
|
+
name: "Next.js + TypeScript"
|
|
8
|
+
mindset_template: "react-vite-ts"
|
|
9
|
+
- id: backend
|
|
10
|
+
label: "バックエンド(Prisma + Node.js)"
|
|
11
|
+
name: "Prisma + Node.js"
|
|
12
|
+
mindset_template: "fastapi-postgres-ddd"
|
|
13
|
+
|
|
14
|
+
frontend:
|
|
15
|
+
name: "Next.js + TypeScript"
|
|
16
|
+
root_dir: "src"
|
|
17
|
+
build_command: "pnpm build"
|
|
18
|
+
package_manager: "pnpm"
|
|
19
|
+
mindset_template: "react-vite-ts"
|
|
20
|
+
|
|
21
|
+
backend:
|
|
22
|
+
name: "Prisma + Node.js"
|
|
23
|
+
root_dir: "src"
|
|
24
|
+
architecture: "Clean Architecture"
|
|
25
|
+
dependency_direction: "Domain → Application → Infrastructure → Presentation"
|
|
26
|
+
package_manager: "pnpm"
|
|
27
|
+
mindset_template: "fastapi-postgres-ddd"
|
|
28
|
+
|
|
29
|
+
quality_gate:
|
|
30
|
+
frontend: "docker compose run --rm --profile test frontend-test"
|
|
31
|
+
backend: "docker compose run --rm --profile test backend-test"
|
|
32
|
+
preflight_command: "pnpm preflight"
|
|
33
|
+
summary: "Docker 完全環境: lint/typecheck/prisma/test/build (all in containers)"
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"title": "GoDD Stack Profile",
|
|
4
|
+
"description": "テックスタックプロファイル定義。テンプレートの変数に値をバインドする。",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["name", "stacks"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"name": {
|
|
9
|
+
"type": "string",
|
|
10
|
+
"description": "スタックプロファイルの表示名"
|
|
11
|
+
},
|
|
12
|
+
"description": {
|
|
13
|
+
"type": "string",
|
|
14
|
+
"description": "スタックプロファイルの説明"
|
|
15
|
+
},
|
|
16
|
+
"stacks": {
|
|
17
|
+
"type": "array",
|
|
18
|
+
"description": "このプロファイルに含まれるテックスタック一覧",
|
|
19
|
+
"items": {
|
|
20
|
+
"type": "object",
|
|
21
|
+
"required": ["id", "label", "name"],
|
|
22
|
+
"properties": {
|
|
23
|
+
"id": {
|
|
24
|
+
"type": "string",
|
|
25
|
+
"description": "スタックの内部識別子(例: frontend, backend)"
|
|
26
|
+
},
|
|
27
|
+
"label": {
|
|
28
|
+
"type": "string",
|
|
29
|
+
"description": "表示用ラベル"
|
|
30
|
+
},
|
|
31
|
+
"name": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"description": "技術名"
|
|
34
|
+
},
|
|
35
|
+
"mindset_template": {
|
|
36
|
+
"type": "string",
|
|
37
|
+
"description": "使用するmindsetテンプレートファイル名"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"frontend": {
|
|
43
|
+
"type": "object",
|
|
44
|
+
"description": "フロントエンド固有の設定",
|
|
45
|
+
"properties": {
|
|
46
|
+
"name": { "type": "string" },
|
|
47
|
+
"root_dir": { "type": "string", "default": "frontend" },
|
|
48
|
+
"build_command": { "type": "string" },
|
|
49
|
+
"package_manager": { "type": "string", "default": "pnpm" },
|
|
50
|
+
"mindset_template": { "type": "string" }
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"backend": {
|
|
54
|
+
"type": "object",
|
|
55
|
+
"description": "バックエンド固有の設定",
|
|
56
|
+
"properties": {
|
|
57
|
+
"name": { "type": "string" },
|
|
58
|
+
"root_dir": { "type": "string", "default": "backend" },
|
|
59
|
+
"architecture": { "type": "string" },
|
|
60
|
+
"dependency_direction": { "type": "string" },
|
|
61
|
+
"package_manager": { "type": "string" },
|
|
62
|
+
"mindset_template": { "type": "string" }
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
"quality_gate": {
|
|
66
|
+
"type": "object",
|
|
67
|
+
"description": "品質ゲートコマンド",
|
|
68
|
+
"properties": {
|
|
69
|
+
"frontend": { "type": "string" },
|
|
70
|
+
"backend": { "type": "string" },
|
|
71
|
+
"preflight_command": { "type": "string", "default": "pnpm preflight" },
|
|
72
|
+
"summary": { "type": "string" }
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
"tools": {
|
|
76
|
+
"type": "array",
|
|
77
|
+
"description": "エコシステムツール定義(ガイダンス付き)",
|
|
78
|
+
"items": {
|
|
79
|
+
"type": "object",
|
|
80
|
+
"required": ["id", "label", "category", "description"],
|
|
81
|
+
"properties": {
|
|
82
|
+
"id": {
|
|
83
|
+
"type": "string",
|
|
84
|
+
"description": "ツール識別子(例: orval, ruff, playwright)"
|
|
85
|
+
},
|
|
86
|
+
"label": {
|
|
87
|
+
"type": "string",
|
|
88
|
+
"description": "表示名"
|
|
89
|
+
},
|
|
90
|
+
"category": {
|
|
91
|
+
"type": "string",
|
|
92
|
+
"enum": ["frontend", "backend", "testing", "infra", "devtool", "monitoring"],
|
|
93
|
+
"description": "カテゴリ"
|
|
94
|
+
},
|
|
95
|
+
"description": {
|
|
96
|
+
"type": "string",
|
|
97
|
+
"description": "ツールの説明"
|
|
98
|
+
},
|
|
99
|
+
"url": {
|
|
100
|
+
"type": "string",
|
|
101
|
+
"description": "ドキュメントURL"
|
|
102
|
+
},
|
|
103
|
+
"guidance": {
|
|
104
|
+
"type": "string",
|
|
105
|
+
"description": "プロンプトに注入される利用ガイダンス"
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
"vendor": {
|
|
111
|
+
"type": "array",
|
|
112
|
+
"description": "Vendor/OSSサブモジュール定義",
|
|
113
|
+
"items": {
|
|
114
|
+
"type": "object",
|
|
115
|
+
"required": ["name", "description"],
|
|
116
|
+
"properties": {
|
|
117
|
+
"name": {
|
|
118
|
+
"type": "string",
|
|
119
|
+
"description": "vendor ディレクトリ名(例: browser-use)"
|
|
120
|
+
},
|
|
121
|
+
"description": {
|
|
122
|
+
"type": "string",
|
|
123
|
+
"description": "ツールの説明"
|
|
124
|
+
},
|
|
125
|
+
"runtime": {
|
|
126
|
+
"type": "string",
|
|
127
|
+
"enum": ["python", "node", "unknown"],
|
|
128
|
+
"default": "unknown",
|
|
129
|
+
"description": "ランタイム環境"
|
|
130
|
+
},
|
|
131
|
+
"setup_hint": {
|
|
132
|
+
"type": "string",
|
|
133
|
+
"description": "セットアップコマンド"
|
|
134
|
+
},
|
|
135
|
+
"enabled": {
|
|
136
|
+
"type": "boolean",
|
|
137
|
+
"default": true,
|
|
138
|
+
"description": "有効/無効制御"
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|