polyforge-cli 0.1.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.
Files changed (114) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +65 -0
  3. package/dist/commands/create.js +46 -0
  4. package/dist/commands/doctor.js +136 -0
  5. package/dist/commands/list.js +32 -0
  6. package/dist/core/git.js +25 -0
  7. package/dist/core/installer.js +64 -0
  8. package/dist/core/prompts.js +147 -0
  9. package/dist/core/renderer.js +175 -0
  10. package/dist/core/validator.js +86 -0
  11. package/dist/index.js +47 -0
  12. package/dist/templates/backend/go-gin/apps/api/Makefile +10 -0
  13. package/dist/templates/backend/go-gin/apps/api/cmd/server/main.go +29 -0
  14. package/dist/templates/backend/go-gin/apps/api/go.mod +5 -0
  15. package/dist/templates/backend/go-gin/apps/api/internal/config/config.go +22 -0
  16. package/dist/templates/backend/go-gin/apps/api/internal/handler/health.go +27 -0
  17. package/dist/templates/backend/go-gin/apps/api/internal/handler/helpers.go +8 -0
  18. package/dist/templates/backend/go-gin/apps/api/internal/handler/ping.go +15 -0
  19. package/dist/templates/backend/go-gin/apps/api/internal/middleware/logger.go +18 -0
  20. package/dist/templates/backend/go-gin/apps/api/internal/middleware/recovery.go +23 -0
  21. package/dist/templates/backend/go-gin/apps/api/internal/middleware/trace.go +28 -0
  22. package/dist/templates/backend/go-gin/apps/api/internal/repository/ping.go +11 -0
  23. package/dist/templates/backend/go-gin/apps/api/internal/service/ping.go +17 -0
  24. package/dist/templates/backend/go-gin/apps/api/pkg/response/response.go +35 -0
  25. package/dist/templates/backend/go-gin/apps/api/pkg/response/response_test.go +21 -0
  26. package/dist/templates/backend/springboot/apps/api/pom.xml +44 -0
  27. package/dist/templates/backend/springboot/apps/api/src/main/java/com/scaffold/api/Application.java +11 -0
  28. package/dist/templates/backend/springboot/apps/api/src/main/java/com/scaffold/api/common/ApiResponse.java +19 -0
  29. package/dist/templates/backend/springboot/apps/api/src/main/java/com/scaffold/api/common/GlobalExceptionHandler.java +22 -0
  30. package/dist/templates/backend/springboot/apps/api/src/main/java/com/scaffold/api/common/TraceIdHolder.java +19 -0
  31. package/dist/templates/backend/springboot/apps/api/src/main/java/com/scaffold/api/config/TraceIdFilter.java +38 -0
  32. package/dist/templates/backend/springboot/apps/api/src/main/java/com/scaffold/api/controller/HealthController.java +17 -0
  33. package/dist/templates/backend/springboot/apps/api/src/main/java/com/scaffold/api/controller/PingController.java +23 -0
  34. package/dist/templates/backend/springboot/apps/api/src/main/java/com/scaffold/api/repository/PingRepository.java +10 -0
  35. package/dist/templates/backend/springboot/apps/api/src/main/java/com/scaffold/api/service/PingService.java +17 -0
  36. package/dist/templates/backend/springboot/apps/api/src/main/resources/application-dev.yml +2 -0
  37. package/dist/templates/backend/springboot/apps/api/src/main/resources/application-prod.yml +2 -0
  38. package/dist/templates/backend/springboot/apps/api/src/main/resources/application-test.yml +2 -0
  39. package/dist/templates/backend/springboot/apps/api/src/main/resources/application.yml +8 -0
  40. package/dist/templates/backend/springboot/apps/api/src/test/java/com/scaffold/api/ApplicationTests.java +12 -0
  41. package/dist/templates/base/.env.example +5 -0
  42. package/dist/templates/base/docs/ARCHITECTURE.md +9 -0
  43. package/dist/templates/base/infra/scripts/build.sh +39 -0
  44. package/dist/templates/base/infra/scripts/check.sh +58 -0
  45. package/dist/templates/base/infra/scripts/dev.sh +32 -0
  46. package/dist/templates/base/infra/scripts/test.sh +41 -0
  47. package/dist/templates/base/package.json +11 -0
  48. package/dist/templates/data/mongodb/infra/data/mongodb/README.md +4 -0
  49. package/dist/templates/data/mysql/infra/data/mysql/README.md +4 -0
  50. package/dist/templates/data/mysql/infra/data/mysql/schema.sql +5 -0
  51. package/dist/templates/data/postgresql/infra/data/postgresql/README.md +4 -0
  52. package/dist/templates/data/postgresql/infra/data/postgresql/schema.sql +5 -0
  53. package/dist/templates/data/redis/infra/data/redis/README.md +4 -0
  54. package/dist/templates/data/sqlite/infra/data/sqlite/README.md +4 -0
  55. package/dist/templates/frontend/react/apps/web/.env.example +4 -0
  56. package/dist/templates/frontend/react/apps/web/index.html +12 -0
  57. package/dist/templates/frontend/react/apps/web/package.json +23 -0
  58. package/dist/templates/frontend/react/apps/web/src/App.test.tsx +7 -0
  59. package/dist/templates/frontend/react/apps/web/src/App.tsx +59 -0
  60. package/dist/templates/frontend/react/apps/web/src/api/client.ts +20 -0
  61. package/dist/templates/frontend/react/apps/web/src/api/request.ts +104 -0
  62. package/dist/templates/frontend/react/apps/web/src/api/services/api.ts +15 -0
  63. package/dist/templates/frontend/react/apps/web/src/api/services/bff.ts +11 -0
  64. package/dist/templates/frontend/react/apps/web/src/main.tsx +9 -0
  65. package/dist/templates/frontend/react/apps/web/tsconfig.json +12 -0
  66. package/dist/templates/frontend/react/apps/web/vite.config.ts +22 -0
  67. package/dist/templates/frontend/vue/apps/web/.env.example +4 -0
  68. package/dist/templates/frontend/vue/apps/web/index.html +12 -0
  69. package/dist/templates/frontend/vue/apps/web/package.json +20 -0
  70. package/dist/templates/frontend/vue/apps/web/src/App.test.ts +7 -0
  71. package/dist/templates/frontend/vue/apps/web/src/App.vue +59 -0
  72. package/dist/templates/frontend/vue/apps/web/src/api/client.ts +20 -0
  73. package/dist/templates/frontend/vue/apps/web/src/api/request.ts +104 -0
  74. package/dist/templates/frontend/vue/apps/web/src/api/services/api.ts +15 -0
  75. package/dist/templates/frontend/vue/apps/web/src/api/services/bff.ts +11 -0
  76. package/dist/templates/frontend/vue/apps/web/src/env.d.ts +3 -0
  77. package/dist/templates/frontend/vue/apps/web/src/main.ts +4 -0
  78. package/dist/templates/frontend/vue/apps/web/tsconfig.json +11 -0
  79. package/dist/templates/frontend/vue/apps/web/vite.config.ts +22 -0
  80. package/dist/templates/modules/auth-center/apps/auth-center/.env.example +3 -0
  81. package/dist/templates/modules/auth-center/apps/auth-center/README.md +5 -0
  82. package/dist/templates/modules/auth-center/apps/auth-center/package.json +14 -0
  83. package/dist/templates/modules/auth-center/apps/auth-center/server.js +21 -0
  84. package/dist/templates/modules/cache-redis/infra/cache/README.md +5 -0
  85. package/dist/templates/modules/cache-redis/infra/cache/policies.md +5 -0
  86. package/dist/templates/modules/gateway-bff/apps/gateway-bff/README.md +5 -0
  87. package/dist/templates/modules/gateway-bff/apps/gateway-bff/package.json +13 -0
  88. package/dist/templates/modules/gateway-bff/apps/gateway-bff/server.js +17 -0
  89. package/dist/templates/modules/grpc-service/apps/grpc-service/README.md +5 -0
  90. package/dist/templates/modules/grpc-service/contracts/proto/greeter.proto +17 -0
  91. package/dist/templates/modules/grpc-service/infra/scripts/gen-proto.sh +9 -0
  92. package/dist/templates/modules/mq/infra/mq/README.md +5 -0
  93. package/dist/templates/modules/mq/infra/mq/kafka-topics.md +5 -0
  94. package/dist/templates/modules/mq/infra/mq/nats-subjects.md +4 -0
  95. package/dist/templates/modules/mq/infra/mq/rabbitmq-exchanges.md +5 -0
  96. package/dist/templates/modules/observability/infra/observability/README.md +5 -0
  97. package/dist/templates/modules/observability/infra/observability/grafana/README.md +3 -0
  98. package/dist/templates/modules/observability/infra/observability/otel-collector.yaml +15 -0
  99. package/dist/templates/modules/observability/infra/observability/prometheus/prometheus.yml +7 -0
  100. package/dist/templates/modules/python-ai/apps/python-ai/README.md +5 -0
  101. package/dist/templates/modules/python-ai/apps/python-ai/app/main.py +27 -0
  102. package/dist/templates/modules/python-ai/apps/python-ai/requirements.txt +2 -0
  103. package/dist/templates/modules/python-ai/apps/python-ai/scripts/batch_infer.py +6 -0
  104. package/dist/templates/modules/python-worker/apps/worker-python/README.md +5 -0
  105. package/dist/templates/modules/python-worker/apps/worker-python/requirements.txt +1 -0
  106. package/dist/templates/modules/python-worker/apps/worker-python/tasks/sample_task.py +6 -0
  107. package/dist/templates/modules/python-worker/apps/worker-python/tests/test_worker.py +13 -0
  108. package/dist/templates/modules/python-worker/apps/worker-python/worker.py +10 -0
  109. package/dist/templates/modules/worker-go/apps/worker-go/README.md +5 -0
  110. package/dist/templates/modules/worker-go/apps/worker-go/cmd/worker/main.go +16 -0
  111. package/dist/templates/modules/worker-go/apps/worker-go/go.mod +3 -0
  112. package/dist/templates/modules/worker-go/apps/worker-go/internal/tasks/heartbeat.go +7 -0
  113. package/dist/types/config.js +18 -0
  114. package/package.json +52 -0
@@ -0,0 +1,5 @@
1
+ # Observability Module
2
+
3
+ - Purpose: unified logs, metrics, trace for hybrid-language services
4
+ - Stack placeholder: OpenTelemetry + Prometheus + Grafana
5
+ - Trace convention: propagate `X-Trace-Id`
@@ -0,0 +1,3 @@
1
+ # Grafana Placeholder
2
+
3
+ Import dashboards and connect Prometheus datasource.
@@ -0,0 +1,15 @@
1
+ receivers:
2
+ otlp:
3
+ protocols:
4
+ grpc:
5
+ http:
6
+
7
+ exporters:
8
+ logging:
9
+ loglevel: info
10
+
11
+ service:
12
+ pipelines:
13
+ traces:
14
+ receivers: [otlp]
15
+ exporters: [logging]
@@ -0,0 +1,7 @@
1
+ global:
2
+ scrape_interval: 15s
3
+
4
+ scrape_configs:
5
+ - job_name: api
6
+ static_configs:
7
+ - targets: ["api:8080"]
@@ -0,0 +1,5 @@
1
+ # Python AI Module
2
+
3
+ - Purpose: isolate AI/data processing from main backend
4
+ - Default capabilities: inference API + model loading placeholder + batch script
5
+ - Integration: backend calls via HTTP/gRPC with traceId propagation
@@ -0,0 +1,27 @@
1
+ from fastapi import FastAPI, Header
2
+ from typing import Optional
3
+ from datetime import datetime, timezone
4
+
5
+ app = FastAPI()
6
+
7
+
8
+ @app.get("/health")
9
+ def health(trace_id: Optional[str] = Header(default=None, alias="X-Trace-Id")):
10
+ return {
11
+ "code": 0,
12
+ "message": "success",
13
+ "data": {"status": "ok", "model": "placeholder"},
14
+ "traceId": trace_id or "python-ai-trace",
15
+ "timestamp": datetime.now(timezone.utc).isoformat(),
16
+ }
17
+
18
+
19
+ @app.post("/infer")
20
+ def infer(payload: dict, trace_id: Optional[str] = Header(default=None, alias="X-Trace-Id")):
21
+ return {
22
+ "code": 0,
23
+ "message": "success",
24
+ "data": {"result": "placeholder", "input": payload},
25
+ "traceId": trace_id or "python-ai-trace",
26
+ "timestamp": datetime.now(timezone.utc).isoformat(),
27
+ }
@@ -0,0 +1,2 @@
1
+ fastapi==0.115.0
2
+ uvicorn==0.30.6
@@ -0,0 +1,6 @@
1
+ def run_batch() -> None:
2
+ print("batch inference placeholder")
3
+
4
+
5
+ if __name__ == "__main__":
6
+ run_batch()
@@ -0,0 +1,5 @@
1
+ # Python Worker
2
+
3
+ - Entry: `python worker.py`
4
+ - Integration placeholder: HTTP or message queue
5
+ - Keep traceId propagation in payload/header
@@ -0,0 +1,6 @@
1
+ def run_sample_task(payload: dict) -> dict:
2
+ return {
3
+ "status": "ok",
4
+ "traceId": payload.get("traceId", "generated-trace-id"),
5
+ "data": payload,
6
+ }
@@ -0,0 +1,13 @@
1
+ import unittest
2
+
3
+ from tasks.sample_task import run_sample_task
4
+
5
+
6
+ class WorkerTestCase(unittest.TestCase):
7
+ def test_sample_task(self) -> None:
8
+ output = run_sample_task({"x": 1})
9
+ self.assertEqual(output["status"], "ok")
10
+
11
+
12
+ if __name__ == "__main__":
13
+ unittest.main()
@@ -0,0 +1,10 @@
1
+ from tasks.sample_task import run_sample_task
2
+
3
+
4
+ def main() -> None:
5
+ result = run_sample_task({"input": "demo"})
6
+ print(f"worker result: {result}")
7
+
8
+
9
+ if __name__ == "__main__":
10
+ main()
@@ -0,0 +1,5 @@
1
+ # Worker Go
2
+
3
+ - Purpose: async jobs / batch processing
4
+ - Default capability: task registration placeholder, retry placeholder, dead-letter placeholder
5
+ - Suggested integration: MQ or task table in DB
@@ -0,0 +1,16 @@
1
+ package main
2
+
3
+ import (
4
+ "log"
5
+ "time"
6
+
7
+ "{{PROJECT_NAME}}/apps/worker-go/internal/tasks"
8
+ )
9
+
10
+ func main() {
11
+ log.Println("worker-go started")
12
+ for {
13
+ tasks.RunHeartbeatTask()
14
+ time.Sleep(10 * time.Second)
15
+ }
16
+ }
@@ -0,0 +1,3 @@
1
+ module {{PROJECT_NAME}}/apps/worker-go
2
+
3
+ go 1.22
@@ -0,0 +1,7 @@
1
+ package tasks
2
+
3
+ import "log"
4
+
5
+ func RunHeartbeatTask() {
6
+ log.Println("worker-go heartbeat task executed")
7
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PACKAGE_MANAGERS = exports.DATA_MODULES = exports.EXTRA_MODULES = exports.BACKENDS = exports.FRONTENDS = void 0;
4
+ exports.FRONTENDS = ["react", "vue", "none"];
5
+ exports.BACKENDS = ["go-gin", "springboot"];
6
+ exports.EXTRA_MODULES = [
7
+ "python-worker",
8
+ "worker-go",
9
+ "gateway-bff",
10
+ "python-ai",
11
+ "grpc-service",
12
+ "mq",
13
+ "cache-redis",
14
+ "observability",
15
+ "auth-center",
16
+ ];
17
+ exports.DATA_MODULES = ["mysql", "postgresql", "redis", "sqlite", "mongodb", "none"];
18
+ exports.PACKAGE_MANAGERS = ["pnpm", "npm", "yarn"];
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "polyforge-cli",
3
+ "version": "0.1.0",
4
+ "description": "PolyForge hybrid full-stack scaffold CLI for go-gin and springboot",
5
+ "main": "dist/index.js",
6
+ "files": [
7
+ "dist",
8
+ "README.md",
9
+ "LICENSE"
10
+ ],
11
+ "bin": {
12
+ "scaffold": "dist/index.js"
13
+ },
14
+ "publishConfig": {
15
+ "access": "public"
16
+ },
17
+ "scripts": {
18
+ "clean": "rm -rf dist",
19
+ "build": "tsc -p tsconfig.json && rm -rf dist/templates && cp -R src/templates dist/templates",
20
+ "dev": "tsx src/index.ts",
21
+ "test": "vitest run --config vitest.config.ts",
22
+ "test:watch": "vitest",
23
+ "lint": "tsc -p tsconfig.json --noEmit",
24
+ "smoke:e2e": "node scripts/smoke-e2e.mjs",
25
+ "prepack": "npm run build",
26
+ "prepublishOnly": "npm run lint && npm run test && npm run build"
27
+ },
28
+ "keywords": [
29
+ "scaffold",
30
+ "cli",
31
+ "go",
32
+ "springboot"
33
+ ],
34
+ "author": "",
35
+ "license": "MIT",
36
+ "engines": {
37
+ "node": ">=18"
38
+ },
39
+ "dependencies": {
40
+ "commander": "^14.0.1",
41
+ "fs-extra": "^11.3.2",
42
+ "prompts": "^2.4.2"
43
+ },
44
+ "devDependencies": {
45
+ "@types/fs-extra": "^11.0.4",
46
+ "@types/node": "^24.3.0",
47
+ "@types/prompts": "^2.4.9",
48
+ "tsx": "^4.20.5",
49
+ "typescript": "^5.9.2",
50
+ "vitest": "^3.2.4"
51
+ }
52
+ }