@harness-engineering/cli 1.13.1 → 1.14.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/dist/agents/skills/claude-code/harness-brainstorming/SKILL.md +39 -0
- package/dist/agents/skills/claude-code/harness-code-review/SKILL.md +44 -0
- package/dist/agents/skills/claude-code/harness-execution/SKILL.md +44 -0
- package/dist/agents/skills/claude-code/harness-planning/SKILL.md +39 -0
- package/dist/agents/skills/claude-code/harness-release-readiness/SKILL.md +3 -3
- package/dist/agents/skills/claude-code/harness-verification/SKILL.md +35 -0
- package/dist/agents/skills/claude-code/initialize-harness-project/SKILL.md +11 -3
- package/dist/agents/skills/gemini-cli/harness-brainstorming/SKILL.md +39 -0
- package/dist/agents/skills/gemini-cli/harness-code-review/SKILL.md +44 -0
- package/dist/agents/skills/gemini-cli/harness-execution/SKILL.md +44 -0
- package/dist/agents/skills/gemini-cli/harness-planning/SKILL.md +39 -0
- package/dist/agents/skills/gemini-cli/harness-release-readiness/SKILL.md +3 -3
- package/dist/agents/skills/gemini-cli/harness-verification/SKILL.md +35 -0
- package/dist/agents/skills/gemini-cli/initialize-harness-project/SKILL.md +11 -3
- package/dist/agents-md-YTYQDA3P.js +8 -0
- package/dist/{architecture-2R5Z4ZAF.js → architecture-JQZYM4US.js} +4 -4
- package/dist/bin/harness-mcp.js +14 -14
- package/dist/bin/harness.js +24 -24
- package/dist/{check-phase-gate-2OFZ7OWW.js → check-phase-gate-L3RADYWO.js} +4 -4
- package/dist/{chunk-QY4T6YAZ.js → chunk-3C2MLBPJ.js} +4 -4
- package/dist/{chunk-UAX4I5ZE.js → chunk-6KTUUFRN.js} +2 -2
- package/dist/{chunk-ND6PNADU.js → chunk-7IP4JIFL.js} +9 -9
- package/dist/{chunk-C2ERUR3L.js → chunk-7MJAPE3Z.js} +165 -49
- package/dist/{chunk-PQ5YK4AY.js → chunk-ABQHQ6I5.js} +1583 -1169
- package/dist/{chunk-QPEH2QPG.js → chunk-DBSOCI3G.js} +53 -54
- package/dist/{chunk-MHBMTPW7.js → chunk-ERS5EVUZ.js} +9 -0
- package/dist/{chunk-JSTQ3AWB.js → chunk-FIAPHX37.js} +1 -1
- package/dist/{chunk-IMFVFNJE.js → chunk-FTMXDOR6.js} +1 -1
- package/dist/{chunk-72GHBOL2.js → chunk-GZKSBLQL.js} +1 -1
- package/dist/{chunk-K6XAPGML.js → chunk-H7Y5CKTM.js} +1 -1
- package/dist/{chunk-4ZMOCPYO.js → chunk-NLVUVUGD.js} +1 -1
- package/dist/{chunk-Z77YQRQT.js → chunk-O5OJVPL6.js} +16 -5
- package/dist/{chunk-NKDM3FMH.js → chunk-OD3S2NHN.js} +1 -1
- package/dist/{chunk-65FRIL4D.js → chunk-OSXBPAMK.js} +1 -1
- package/dist/{chunk-DZS7CJKL.js → chunk-OXLLOSSR.js} +45 -47
- package/dist/{chunk-TS3XWPW5.js → chunk-RCWZBSK5.js} +1 -1
- package/dist/{chunk-NOPU4RZ4.js → chunk-S2FXOWOR.js} +3 -3
- package/dist/{chunk-VUCPTQ6G.js → chunk-SD3SQOZ2.js} +1 -1
- package/dist/{chunk-IM32EEDM.js → chunk-TPOTOBR7.js} +9 -9
- package/dist/{chunk-SSKDAOX5.js → chunk-XKECDXJS.js} +436 -340
- package/dist/{chunk-TKJZKICB.js → chunk-YPYGXRDR.js} +7 -7
- package/dist/{chunk-Q6AB7W5Z.js → chunk-YQ6KC6TE.js} +1 -1
- package/dist/{chunk-NERR4TAO.js → chunk-YZD2MRNQ.js} +972 -747
- package/dist/ci-workflow-EQZFVX3P.js +8 -0
- package/dist/{dist-HXHWB7SV.js → dist-B26DFXMP.js} +571 -478
- package/dist/{dist-L7LAAQAS.js → dist-DZ63LLUD.js} +1 -1
- package/dist/{dist-2B363XUH.js → dist-HWXF2C3R.js} +18 -2
- package/dist/{dist-D4RYGUZE.js → dist-USY2C5JL.js} +3 -1
- package/dist/{docs-FZOPM4GK.js → docs-7ECGYMAV.js} +4 -4
- package/dist/engine-EG4EH4IX.js +8 -0
- package/dist/{entropy-LVHJMFGH.js → entropy-5USWKLVS.js} +3 -3
- package/dist/{feedback-IHLVLMRD.js → feedback-UTBXZZHF.js} +1 -1
- package/dist/{generate-agent-definitions-64S3CLEZ.js → generate-agent-definitions-3PM5EU7V.js} +4 -4
- package/dist/{graph-loader-GJZ4FN4Y.js → graph-loader-2M2HXDQI.js} +1 -1
- package/dist/index.d.ts +148 -9
- package/dist/index.js +24 -24
- package/dist/loader-ZPALXIVR.js +10 -0
- package/dist/{mcp-JQUI7BVZ.js → mcp-362EZHF4.js} +14 -14
- package/dist/{performance-ZTVSUANN.js → performance-OQAFMJUD.js} +3 -3
- package/dist/{review-pipeline-76JHKGSV.js → review-pipeline-C4GCFVGP.js} +1 -1
- package/dist/runtime-7YLVK453.js +9 -0
- package/dist/{security-FWQZF2IZ.js → security-PZOX7AQS.js} +1 -1
- package/dist/templates/axum/Cargo.toml.hbs +8 -0
- package/dist/templates/axum/src/main.rs +12 -0
- package/dist/templates/axum/template.json +16 -0
- package/dist/templates/django/manage.py.hbs +19 -0
- package/dist/templates/django/requirements.txt.hbs +1 -0
- package/dist/templates/django/src/settings.py.hbs +44 -0
- package/dist/templates/django/src/urls.py +6 -0
- package/dist/templates/django/src/wsgi.py.hbs +9 -0
- package/dist/templates/django/template.json +21 -0
- package/dist/templates/express/package.json.hbs +15 -0
- package/dist/templates/express/src/app.ts +12 -0
- package/dist/templates/express/src/lib/.gitkeep +0 -0
- package/dist/templates/express/template.json +16 -0
- package/dist/templates/fastapi/requirements.txt.hbs +2 -0
- package/dist/templates/fastapi/src/main.py +8 -0
- package/dist/templates/fastapi/template.json +20 -0
- package/dist/templates/gin/go.mod.hbs +5 -0
- package/dist/templates/gin/main.go +15 -0
- package/dist/templates/gin/template.json +19 -0
- package/dist/templates/go-base/.golangci.yml +16 -0
- package/dist/templates/go-base/AGENTS.md.hbs +35 -0
- package/dist/templates/go-base/go.mod.hbs +3 -0
- package/dist/templates/go-base/harness.config.json.hbs +17 -0
- package/dist/templates/go-base/main.go +7 -0
- package/dist/templates/go-base/template.json +14 -0
- package/dist/templates/java-base/AGENTS.md.hbs +35 -0
- package/dist/templates/java-base/checkstyle.xml +20 -0
- package/dist/templates/java-base/harness.config.json.hbs +16 -0
- package/dist/templates/java-base/pom.xml.hbs +39 -0
- package/dist/templates/java-base/src/main/java/App.java.hbs +5 -0
- package/dist/templates/java-base/template.json +13 -0
- package/dist/templates/nestjs/nest-cli.json +5 -0
- package/dist/templates/nestjs/package.json.hbs +18 -0
- package/dist/templates/nestjs/src/app.module.ts +8 -0
- package/dist/templates/nestjs/src/lib/.gitkeep +0 -0
- package/dist/templates/nestjs/src/main.ts +11 -0
- package/dist/templates/nestjs/template.json +16 -0
- package/dist/templates/nextjs/template.json +15 -1
- package/dist/templates/python-base/.python-version +1 -0
- package/dist/templates/python-base/AGENTS.md.hbs +32 -0
- package/dist/templates/python-base/harness.config.json.hbs +16 -0
- package/dist/templates/python-base/pyproject.toml.hbs +18 -0
- package/dist/templates/python-base/ruff.toml +5 -0
- package/dist/templates/python-base/src/__init__.py +0 -0
- package/dist/templates/python-base/template.json +13 -0
- package/dist/templates/react-vite/index.html +12 -0
- package/dist/templates/react-vite/package.json.hbs +18 -0
- package/dist/templates/react-vite/src/App.tsx +7 -0
- package/dist/templates/react-vite/src/lib/.gitkeep +0 -0
- package/dist/templates/react-vite/src/main.tsx +9 -0
- package/dist/templates/react-vite/template.json +19 -0
- package/dist/templates/react-vite/vite.config.ts +6 -0
- package/dist/templates/rust-base/AGENTS.md.hbs +35 -0
- package/dist/templates/rust-base/Cargo.toml.hbs +6 -0
- package/dist/templates/rust-base/clippy.toml +2 -0
- package/dist/templates/rust-base/harness.config.json.hbs +17 -0
- package/dist/templates/rust-base/src/main.rs +3 -0
- package/dist/templates/rust-base/template.json +14 -0
- package/dist/templates/spring-boot/pom.xml.hbs +50 -0
- package/dist/templates/spring-boot/src/main/java/Application.java.hbs +19 -0
- package/dist/templates/spring-boot/template.json +15 -0
- package/dist/templates/vue/index.html +12 -0
- package/dist/templates/vue/package.json.hbs +16 -0
- package/dist/templates/vue/src/App.vue +7 -0
- package/dist/templates/vue/src/lib/.gitkeep +0 -0
- package/dist/templates/vue/src/main.ts +4 -0
- package/dist/templates/vue/template.json +19 -0
- package/dist/templates/vue/vite.config.ts +6 -0
- package/dist/{validate-GCHZJIL7.js → validate-FD3Z6VJD.js} +4 -4
- package/dist/validate-cross-check-WNJM6H2D.js +8 -0
- package/package.json +5 -5
- package/dist/agents-md-XU3BHE22.js +0 -8
- package/dist/ci-workflow-EHV65NQB.js +0 -8
- package/dist/engine-OL4T6NZS.js +0 -8
- package/dist/loader-DPYFB6R6.js +0 -10
- package/dist/runtime-X7U6SC7K.js +0 -9
- package/dist/validate-cross-check-STFHYMAZ.js +0 -8
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
use axum::{routing::get, Router};
|
|
2
|
+
|
|
3
|
+
async fn root() -> &'static str {
|
|
4
|
+
"Hello, world!"
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
#[tokio::main]
|
|
8
|
+
async fn main() {
|
|
9
|
+
let app = Router::new().route("/", get(root));
|
|
10
|
+
let listener = tokio::net::TcpListener::bind("127.0.0.1:3000").await.unwrap();
|
|
11
|
+
axum::serve(listener, app).await.unwrap();
|
|
12
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "axum",
|
|
3
|
+
"description": "Axum web framework scaffold",
|
|
4
|
+
"version": 1,
|
|
5
|
+
"language": "rust",
|
|
6
|
+
"framework": "axum",
|
|
7
|
+
"extends": "rust-base",
|
|
8
|
+
"tooling": {
|
|
9
|
+
"packageManager": "cargo",
|
|
10
|
+
"linter": "clippy",
|
|
11
|
+
"formatter": "rustfmt",
|
|
12
|
+
"buildTool": "cargo",
|
|
13
|
+
"testRunner": "cargo test"
|
|
14
|
+
},
|
|
15
|
+
"detect": [{ "file": "Cargo.toml", "contains": "axum" }]
|
|
16
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
"""Django's command-line utility for administrative tasks."""
|
|
3
|
+
import os
|
|
4
|
+
import sys
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def main():
|
|
8
|
+
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{projectName}}.settings")
|
|
9
|
+
try:
|
|
10
|
+
from django.core.management import execute_from_command_line
|
|
11
|
+
except ImportError as exc:
|
|
12
|
+
raise ImportError(
|
|
13
|
+
"Couldn't import Django. Are you sure it's installed?"
|
|
14
|
+
) from exc
|
|
15
|
+
execute_from_command_line(sys.argv)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
if __name__ == "__main__":
|
|
19
|
+
main()
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
django>=4.2
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"""Django settings for {{projectName}} project."""
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
BASE_DIR = Path(__file__).resolve().parent.parent
|
|
7
|
+
|
|
8
|
+
SECRET_KEY = os.environ.get("DJANGO_SECRET_KEY", "dev-only-insecure-key-change-in-production")
|
|
9
|
+
|
|
10
|
+
DEBUG = True
|
|
11
|
+
|
|
12
|
+
ALLOWED_HOSTS = []
|
|
13
|
+
|
|
14
|
+
INSTALLED_APPS = [
|
|
15
|
+
"django.contrib.admin",
|
|
16
|
+
"django.contrib.auth",
|
|
17
|
+
"django.contrib.contenttypes",
|
|
18
|
+
"django.contrib.sessions",
|
|
19
|
+
"django.contrib.messages",
|
|
20
|
+
"django.contrib.staticfiles",
|
|
21
|
+
]
|
|
22
|
+
|
|
23
|
+
MIDDLEWARE = [
|
|
24
|
+
"django.middleware.security.SecurityMiddleware",
|
|
25
|
+
"django.contrib.sessions.middleware.SessionMiddleware",
|
|
26
|
+
"django.middleware.common.CommonMiddleware",
|
|
27
|
+
"django.middleware.csrf.CsrfViewMiddleware",
|
|
28
|
+
"django.contrib.auth.middleware.AuthenticationMiddleware",
|
|
29
|
+
"django.contrib.messages.middleware.MessageMiddleware",
|
|
30
|
+
"django.middleware.clickjacking.XFrameOptionsMiddleware",
|
|
31
|
+
]
|
|
32
|
+
|
|
33
|
+
ROOT_URLCONF = "{{projectName}}.urls"
|
|
34
|
+
|
|
35
|
+
WSGI_APPLICATION = "{{projectName}}.wsgi.application"
|
|
36
|
+
|
|
37
|
+
DATABASES = {
|
|
38
|
+
"default": {
|
|
39
|
+
"ENGINE": "django.db.backends.sqlite3",
|
|
40
|
+
"NAME": BASE_DIR / "db.sqlite3",
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "django",
|
|
3
|
+
"description": "Django web framework scaffold",
|
|
4
|
+
"version": 1,
|
|
5
|
+
"language": "python",
|
|
6
|
+
"framework": "django",
|
|
7
|
+
"extends": "python-base",
|
|
8
|
+
"tooling": {
|
|
9
|
+
"packageManager": "pip",
|
|
10
|
+
"linter": "ruff",
|
|
11
|
+
"formatter": "ruff",
|
|
12
|
+
"buildTool": "setuptools",
|
|
13
|
+
"testRunner": "pytest",
|
|
14
|
+
"lockFile": "requirements.txt"
|
|
15
|
+
},
|
|
16
|
+
"detect": [
|
|
17
|
+
{ "file": "requirements.txt", "contains": "django" },
|
|
18
|
+
{ "file": "pyproject.toml", "contains": "django" },
|
|
19
|
+
{ "file": "manage.py", "contains": "django" }
|
|
20
|
+
]
|
|
21
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "{{projectName}}",
|
|
3
|
+
"scripts": {
|
|
4
|
+
"dev": "tsx watch src/app.ts",
|
|
5
|
+
"build": "tsc",
|
|
6
|
+
"start": "node dist/app.js"
|
|
7
|
+
},
|
|
8
|
+
"dependencies": {
|
|
9
|
+
"express": "^4.0.0"
|
|
10
|
+
},
|
|
11
|
+
"devDependencies": {
|
|
12
|
+
"@types/express": "^4.0.0",
|
|
13
|
+
"tsx": "^4.0.0"
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
|
|
3
|
+
const app = express();
|
|
4
|
+
const port = process.env.PORT || 3000;
|
|
5
|
+
|
|
6
|
+
app.get('/', (_req, res) => {
|
|
7
|
+
res.json({ message: 'Welcome to your Harness Engineering project' });
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
app.listen(port, () => {
|
|
11
|
+
console.log(`Server running on port ${port}`);
|
|
12
|
+
});
|
|
File without changes
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "express",
|
|
3
|
+
"description": "Express.js framework overlay",
|
|
4
|
+
"framework": "express",
|
|
5
|
+
"version": 1,
|
|
6
|
+
"language": "typescript",
|
|
7
|
+
"tooling": {
|
|
8
|
+
"packageManager": "npm",
|
|
9
|
+
"linter": "eslint",
|
|
10
|
+
"formatter": "prettier",
|
|
11
|
+
"buildTool": "tsc",
|
|
12
|
+
"testRunner": "vitest",
|
|
13
|
+
"lockFile": "package-lock.json"
|
|
14
|
+
},
|
|
15
|
+
"detect": [{ "file": "package.json", "contains": "express" }]
|
|
16
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "fastapi",
|
|
3
|
+
"description": "FastAPI web framework scaffold",
|
|
4
|
+
"version": 1,
|
|
5
|
+
"language": "python",
|
|
6
|
+
"framework": "fastapi",
|
|
7
|
+
"extends": "python-base",
|
|
8
|
+
"tooling": {
|
|
9
|
+
"packageManager": "pip",
|
|
10
|
+
"linter": "ruff",
|
|
11
|
+
"formatter": "ruff",
|
|
12
|
+
"buildTool": "setuptools",
|
|
13
|
+
"testRunner": "pytest",
|
|
14
|
+
"lockFile": "requirements.txt"
|
|
15
|
+
},
|
|
16
|
+
"detect": [
|
|
17
|
+
{ "file": "requirements.txt", "contains": "fastapi" },
|
|
18
|
+
{ "file": "pyproject.toml", "contains": "fastapi" }
|
|
19
|
+
]
|
|
20
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "gin",
|
|
3
|
+
"description": "Gin web framework scaffold",
|
|
4
|
+
"version": 1,
|
|
5
|
+
"language": "go",
|
|
6
|
+
"framework": "gin",
|
|
7
|
+
"extends": "go-base",
|
|
8
|
+
"tooling": {
|
|
9
|
+
"packageManager": "go",
|
|
10
|
+
"linter": "golangci-lint",
|
|
11
|
+
"formatter": "gofmt",
|
|
12
|
+
"buildTool": "go",
|
|
13
|
+
"testRunner": "go test"
|
|
14
|
+
},
|
|
15
|
+
"detect": [
|
|
16
|
+
{ "file": "go.mod", "contains": "gin-gonic" },
|
|
17
|
+
{ "file": "go.sum", "contains": "gin-gonic" }
|
|
18
|
+
]
|
|
19
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# {{projectName}} Knowledge Map
|
|
2
|
+
|
|
3
|
+
## About This Project
|
|
4
|
+
|
|
5
|
+
{{projectName}} -- A Go project managed with Harness Engineering practices.
|
|
6
|
+
|
|
7
|
+
## Language & Tooling
|
|
8
|
+
|
|
9
|
+
- **Language:** Go
|
|
10
|
+
- **Module:** {{goModulePath}}
|
|
11
|
+
- **Linter:** golangci-lint
|
|
12
|
+
- **Formatter:** gofmt
|
|
13
|
+
- **Test runner:** go test
|
|
14
|
+
|
|
15
|
+
## Directory Structure
|
|
16
|
+
|
|
17
|
+
- `main.go` -- Application entry point
|
|
18
|
+
- `go.mod` -- Module definition and dependencies
|
|
19
|
+
- `internal/` -- Private application packages (by convention)
|
|
20
|
+
- `pkg/` -- Public library packages (by convention)
|
|
21
|
+
|
|
22
|
+
## Conventions
|
|
23
|
+
|
|
24
|
+
- Follow Effective Go guidelines
|
|
25
|
+
- Use `gofmt` for formatting (enforced by golangci-lint)
|
|
26
|
+
- Tests live alongside source files as `_test.go` suffix
|
|
27
|
+
- Error handling: always check returned errors, never discard
|
|
28
|
+
- Package names are lowercase, single-word, no underscores
|
|
29
|
+
|
|
30
|
+
## Harness Skills
|
|
31
|
+
|
|
32
|
+
- Use `harness-brainstorming` for design exploration
|
|
33
|
+
- Use `harness-planning` to break features into atomic tasks
|
|
34
|
+
- Use `harness-execution` to implement tasks with TDD
|
|
35
|
+
- Refer to `harness.config.json` for project tooling configuration
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"name": "{{projectName}}",
|
|
4
|
+
"agentsMapPath": "./AGENTS.md",
|
|
5
|
+
"docsDir": "./docs",
|
|
6
|
+
"template": {
|
|
7
|
+
"language": "go",
|
|
8
|
+
"version": 1
|
|
9
|
+
},
|
|
10
|
+
"tooling": {
|
|
11
|
+
"packageManager": "go",
|
|
12
|
+
"linter": "golangci-lint",
|
|
13
|
+
"formatter": "gofmt",
|
|
14
|
+
"buildTool": "go",
|
|
15
|
+
"testRunner": "go test"
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "go-base",
|
|
3
|
+
"description": "Go language base scaffold with golangci-lint",
|
|
4
|
+
"version": 1,
|
|
5
|
+
"language": "go",
|
|
6
|
+
"tooling": {
|
|
7
|
+
"packageManager": "go",
|
|
8
|
+
"linter": "golangci-lint",
|
|
9
|
+
"formatter": "gofmt",
|
|
10
|
+
"buildTool": "go",
|
|
11
|
+
"testRunner": "go test"
|
|
12
|
+
},
|
|
13
|
+
"mergeStrategy": { "json": "deep-merge", "files": "overlay-wins" }
|
|
14
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# {{projectName}} Knowledge Map
|
|
2
|
+
|
|
3
|
+
## About This Project
|
|
4
|
+
|
|
5
|
+
{{projectName}} -- A Java project managed with Harness Engineering practices.
|
|
6
|
+
|
|
7
|
+
## Language & Tooling
|
|
8
|
+
|
|
9
|
+
- **Language:** Java 17
|
|
10
|
+
- **Build tool:** Maven
|
|
11
|
+
- **Linter:** Checkstyle
|
|
12
|
+
- **Test runner:** JUnit 5
|
|
13
|
+
- **Group ID:** {{javaGroupId}}
|
|
14
|
+
|
|
15
|
+
## Directory Structure
|
|
16
|
+
|
|
17
|
+
- `src/main/java/` -- Application source code
|
|
18
|
+
- `src/test/java/` -- Test files (JUnit 5)
|
|
19
|
+
- `pom.xml` -- Maven project configuration
|
|
20
|
+
- `checkstyle.xml` -- Code style rules
|
|
21
|
+
|
|
22
|
+
## Conventions
|
|
23
|
+
|
|
24
|
+
- Follow Google Java Style Guide (Checkstyle enforced)
|
|
25
|
+
- Use Java 17 language features
|
|
26
|
+
- Tests live in `src/test/java/` mirroring `src/main/java/` structure
|
|
27
|
+
- Use JUnit 5 assertions and lifecycle annotations
|
|
28
|
+
- Prefer dependency injection over static methods
|
|
29
|
+
|
|
30
|
+
## Harness Skills
|
|
31
|
+
|
|
32
|
+
- Use `harness-brainstorming` for design exploration
|
|
33
|
+
- Use `harness-planning` to break features into atomic tasks
|
|
34
|
+
- Use `harness-execution` to implement tasks with TDD
|
|
35
|
+
- Refer to `harness.config.json` for project tooling configuration
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<?xml version="1.0"?>
|
|
2
|
+
<!DOCTYPE module PUBLIC
|
|
3
|
+
"-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
|
|
4
|
+
"https://checkstyle.org/dtds/configuration_1_3.dtd">
|
|
5
|
+
<module name="Checker">
|
|
6
|
+
<property name="charset" value="UTF-8"/>
|
|
7
|
+
<module name="TreeWalker">
|
|
8
|
+
<module name="WhitespaceAround"/>
|
|
9
|
+
<module name="NeedBraces"/>
|
|
10
|
+
<module name="LeftCurly"/>
|
|
11
|
+
<module name="RightCurly"/>
|
|
12
|
+
<module name="EmptyBlock"/>
|
|
13
|
+
<module name="AvoidStarImport"/>
|
|
14
|
+
<module name="UnusedImports"/>
|
|
15
|
+
</module>
|
|
16
|
+
<module name="FileLength">
|
|
17
|
+
<property name="max" value="500"/>
|
|
18
|
+
</module>
|
|
19
|
+
<module name="NewlineAtEndOfFile"/>
|
|
20
|
+
</module>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"name": "{{projectName}}",
|
|
4
|
+
"agentsMapPath": "./AGENTS.md",
|
|
5
|
+
"docsDir": "./docs",
|
|
6
|
+
"template": {
|
|
7
|
+
"language": "java",
|
|
8
|
+
"version": 1
|
|
9
|
+
},
|
|
10
|
+
"tooling": {
|
|
11
|
+
"packageManager": "maven",
|
|
12
|
+
"linter": "checkstyle",
|
|
13
|
+
"buildTool": "maven",
|
|
14
|
+
"testRunner": "junit"
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
|
3
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
4
|
+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
5
|
+
<modelVersion>4.0.0</modelVersion>
|
|
6
|
+
|
|
7
|
+
<groupId>{{javaGroupId}}</groupId>
|
|
8
|
+
<artifactId>{{projectName}}</artifactId>
|
|
9
|
+
<version>0.1.0</version>
|
|
10
|
+
<packaging>jar</packaging>
|
|
11
|
+
|
|
12
|
+
<properties>
|
|
13
|
+
<maven.compiler.source>17</maven.compiler.source>
|
|
14
|
+
<maven.compiler.target>17</maven.compiler.target>
|
|
15
|
+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
16
|
+
</properties>
|
|
17
|
+
|
|
18
|
+
<dependencies>
|
|
19
|
+
<dependency>
|
|
20
|
+
<groupId>org.junit.jupiter</groupId>
|
|
21
|
+
<artifactId>junit-jupiter</artifactId>
|
|
22
|
+
<version>5.10.0</version>
|
|
23
|
+
<scope>test</scope>
|
|
24
|
+
</dependency>
|
|
25
|
+
</dependencies>
|
|
26
|
+
|
|
27
|
+
<build>
|
|
28
|
+
<plugins>
|
|
29
|
+
<plugin>
|
|
30
|
+
<groupId>org.apache.maven.plugins</groupId>
|
|
31
|
+
<artifactId>maven-checkstyle-plugin</artifactId>
|
|
32
|
+
<version>3.3.0</version>
|
|
33
|
+
<configuration>
|
|
34
|
+
<configLocation>checkstyle.xml</configLocation>
|
|
35
|
+
</configuration>
|
|
36
|
+
</plugin>
|
|
37
|
+
</plugins>
|
|
38
|
+
</build>
|
|
39
|
+
</project>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "java-base",
|
|
3
|
+
"description": "Java language base scaffold with Checkstyle and Maven",
|
|
4
|
+
"version": 1,
|
|
5
|
+
"language": "java",
|
|
6
|
+
"tooling": {
|
|
7
|
+
"packageManager": "maven",
|
|
8
|
+
"linter": "checkstyle",
|
|
9
|
+
"buildTool": "maven",
|
|
10
|
+
"testRunner": "junit"
|
|
11
|
+
},
|
|
12
|
+
"mergeStrategy": { "json": "deep-merge", "files": "overlay-wins" }
|
|
13
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "{{projectName}}",
|
|
3
|
+
"scripts": {
|
|
4
|
+
"dev": "nest start --watch",
|
|
5
|
+
"build": "nest build",
|
|
6
|
+
"start": "node dist/main.js"
|
|
7
|
+
},
|
|
8
|
+
"dependencies": {
|
|
9
|
+
"@nestjs/common": "^10.0.0",
|
|
10
|
+
"@nestjs/core": "^10.0.0",
|
|
11
|
+
"@nestjs/platform-express": "^10.0.0",
|
|
12
|
+
"reflect-metadata": "^0.2.0",
|
|
13
|
+
"rxjs": "^7.0.0"
|
|
14
|
+
},
|
|
15
|
+
"devDependencies": {
|
|
16
|
+
"@nestjs/cli": "^10.0.0"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { NestFactory } from '@nestjs/core';
|
|
2
|
+
import { AppModule } from './app.module';
|
|
3
|
+
|
|
4
|
+
async function bootstrap() {
|
|
5
|
+
const app = await NestFactory.create(AppModule);
|
|
6
|
+
const port = process.env.PORT || 3000;
|
|
7
|
+
await app.listen(port);
|
|
8
|
+
console.log(`Application running on port ${port}`);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
bootstrap();
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "nestjs",
|
|
3
|
+
"description": "NestJS framework overlay",
|
|
4
|
+
"framework": "nestjs",
|
|
5
|
+
"version": 1,
|
|
6
|
+
"language": "typescript",
|
|
7
|
+
"tooling": {
|
|
8
|
+
"packageManager": "npm",
|
|
9
|
+
"linter": "eslint",
|
|
10
|
+
"formatter": "prettier",
|
|
11
|
+
"buildTool": "nest",
|
|
12
|
+
"testRunner": "jest",
|
|
13
|
+
"lockFile": "package-lock.json"
|
|
14
|
+
},
|
|
15
|
+
"detect": [{ "file": "package.json", "contains": "@nestjs/core" }, { "file": "nest-cli.json" }]
|
|
16
|
+
}
|
|
@@ -2,5 +2,19 @@
|
|
|
2
2
|
"name": "nextjs",
|
|
3
3
|
"description": "Next.js framework overlay",
|
|
4
4
|
"framework": "nextjs",
|
|
5
|
-
"
|
|
5
|
+
"language": "typescript",
|
|
6
|
+
"version": 1,
|
|
7
|
+
"mergeStrategy": { "json": "deep-merge", "files": "overlay-wins" },
|
|
8
|
+
"tooling": {
|
|
9
|
+
"packageManager": "npm",
|
|
10
|
+
"linter": "eslint",
|
|
11
|
+
"formatter": "prettier",
|
|
12
|
+
"buildTool": "next",
|
|
13
|
+
"testRunner": "vitest"
|
|
14
|
+
},
|
|
15
|
+
"detect": [
|
|
16
|
+
{ "file": "next.config.mjs", "contains": "" },
|
|
17
|
+
{ "file": "next.config.js", "contains": "" },
|
|
18
|
+
{ "file": "package.json", "contains": "next" }
|
|
19
|
+
]
|
|
6
20
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.10
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# {{projectName}} Knowledge Map
|
|
2
|
+
|
|
3
|
+
## About This Project
|
|
4
|
+
|
|
5
|
+
{{projectName}} -- A Python project managed with Harness Engineering practices.
|
|
6
|
+
|
|
7
|
+
## Language & Tooling
|
|
8
|
+
|
|
9
|
+
- **Language:** Python (>={{pythonMinVersion}})
|
|
10
|
+
- **Linter/Formatter:** Ruff
|
|
11
|
+
- **Test runner:** pytest
|
|
12
|
+
- **Package manager:** pip
|
|
13
|
+
|
|
14
|
+
## Directory Structure
|
|
15
|
+
|
|
16
|
+
- `src/` -- Application source code
|
|
17
|
+
- `tests/` -- Test files (pytest)
|
|
18
|
+
- `pyproject.toml` -- Project metadata and dependencies
|
|
19
|
+
|
|
20
|
+
## Conventions
|
|
21
|
+
|
|
22
|
+
- Follow PEP 8 style (enforced by Ruff)
|
|
23
|
+
- Use type hints for function signatures
|
|
24
|
+
- Tests live in `tests/` and mirror `src/` structure
|
|
25
|
+
- Import sorting managed by Ruff (isort rules)
|
|
26
|
+
|
|
27
|
+
## Harness Skills
|
|
28
|
+
|
|
29
|
+
- Use `harness-brainstorming` for design exploration
|
|
30
|
+
- Use `harness-planning` to break features into atomic tasks
|
|
31
|
+
- Use `harness-execution` to implement tasks with TDD
|
|
32
|
+
- Refer to `harness.config.json` for project tooling configuration
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"name": "{{projectName}}",
|
|
4
|
+
"agentsMapPath": "./AGENTS.md",
|
|
5
|
+
"docsDir": "./docs",
|
|
6
|
+
"template": {
|
|
7
|
+
"language": "python",
|
|
8
|
+
"version": 1
|
|
9
|
+
},
|
|
10
|
+
"tooling": {
|
|
11
|
+
"packageManager": "pip",
|
|
12
|
+
"linter": "ruff",
|
|
13
|
+
"formatter": "ruff",
|
|
14
|
+
"testRunner": "pytest"
|
|
15
|
+
}
|
|
16
|
+
}
|