@vyuhlabs/dxkit 2.4.8 → 2.5.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.
- package/CHANGELOG.md +312 -0
- package/README.md +360 -439
- package/dist/analyzers/security/aggregator.d.ts.map +1 -1
- package/dist/analyzers/security/aggregator.js +4 -46
- package/dist/analyzers/security/aggregator.js.map +1 -1
- package/dist/analyzers/tools/fingerprint.d.ts +91 -26
- package/dist/analyzers/tools/fingerprint.d.ts.map +1 -1
- package/dist/analyzers/tools/fingerprint.js +111 -22
- package/dist/analyzers/tools/fingerprint.js.map +1 -1
- package/dist/analyzers/tools/generic.d.ts.map +1 -1
- package/dist/analyzers/tools/generic.js +6 -1
- package/dist/analyzers/tools/generic.js.map +1 -1
- package/dist/analyzers/tools/gitleaks.d.ts +24 -1
- package/dist/analyzers/tools/gitleaks.d.ts.map +1 -1
- package/dist/analyzers/tools/gitleaks.js +20 -11
- package/dist/analyzers/tools/gitleaks.js.map +1 -1
- package/dist/analyzers/tools/graphify.d.ts.map +1 -1
- package/dist/analyzers/tools/graphify.js +9 -5
- package/dist/analyzers/tools/graphify.js.map +1 -1
- package/dist/analyzers/tools/tool-registry.d.ts +19 -1
- package/dist/analyzers/tools/tool-registry.d.ts.map +1 -1
- package/dist/analyzers/tools/tool-registry.js +25 -0
- package/dist/analyzers/tools/tool-registry.js.map +1 -1
- package/dist/analyzers/types.d.ts +6 -4
- package/dist/analyzers/types.d.ts.map +1 -1
- package/dist/baseline/baseline-file.d.ts +104 -0
- package/dist/baseline/baseline-file.d.ts.map +1 -0
- package/dist/baseline/baseline-file.js +110 -0
- package/dist/baseline/baseline-file.js.map +1 -0
- package/dist/baseline/check-renderers.d.ts +108 -0
- package/dist/baseline/check-renderers.d.ts.map +1 -0
- package/dist/baseline/check-renderers.js +379 -0
- package/dist/baseline/check-renderers.js.map +1 -0
- package/dist/baseline/check.d.ts +127 -0
- package/dist/baseline/check.d.ts.map +1 -0
- package/dist/baseline/check.js +462 -0
- package/dist/baseline/check.js.map +1 -0
- package/dist/baseline/content-hash.d.ts +83 -0
- package/dist/baseline/content-hash.d.ts.map +1 -0
- package/dist/baseline/content-hash.js +131 -0
- package/dist/baseline/content-hash.js.map +1 -0
- package/dist/baseline/create.d.ts +96 -0
- package/dist/baseline/create.d.ts.map +1 -0
- package/dist/baseline/create.js +339 -0
- package/dist/baseline/create.js.map +1 -0
- package/dist/baseline/entry-to-located.d.ts +35 -0
- package/dist/baseline/entry-to-located.d.ts.map +1 -0
- package/dist/baseline/entry-to-located.js +72 -0
- package/dist/baseline/entry-to-located.js.map +1 -0
- package/dist/baseline/finding-identity.d.ts +47 -0
- package/dist/baseline/finding-identity.d.ts.map +1 -0
- package/dist/baseline/finding-identity.js +292 -0
- package/dist/baseline/finding-identity.js.map +1 -0
- package/dist/baseline/git-aware-match.d.ts +146 -0
- package/dist/baseline/git-aware-match.d.ts.map +1 -0
- package/dist/baseline/git-aware-match.js +439 -0
- package/dist/baseline/git-aware-match.js.map +1 -0
- package/dist/baseline/policy.d.ts +171 -0
- package/dist/baseline/policy.d.ts.map +1 -0
- package/dist/baseline/policy.js +206 -0
- package/dist/baseline/policy.js.map +1 -0
- package/dist/baseline/producers/health.d.ts +30 -0
- package/dist/baseline/producers/health.d.ts.map +1 -0
- package/dist/baseline/producers/health.js +42 -0
- package/dist/baseline/producers/health.js.map +1 -0
- package/dist/baseline/producers/index.d.ts +164 -0
- package/dist/baseline/producers/index.d.ts.map +1 -0
- package/dist/baseline/producers/index.js +200 -0
- package/dist/baseline/producers/index.js.map +1 -0
- package/dist/baseline/producers/licenses.d.ts +23 -0
- package/dist/baseline/producers/licenses.d.ts.map +1 -0
- package/dist/baseline/producers/licenses.js +46 -0
- package/dist/baseline/producers/licenses.js.map +1 -0
- package/dist/baseline/producers/quality.d.ts +39 -0
- package/dist/baseline/producers/quality.d.ts.map +1 -0
- package/dist/baseline/producers/quality.js +84 -0
- package/dist/baseline/producers/quality.js.map +1 -0
- package/dist/baseline/producers/secret-hmac.d.ts +45 -0
- package/dist/baseline/producers/secret-hmac.d.ts.map +1 -0
- package/dist/baseline/producers/secret-hmac.js +70 -0
- package/dist/baseline/producers/secret-hmac.js.map +1 -0
- package/dist/baseline/producers/security.d.ts +59 -0
- package/dist/baseline/producers/security.d.ts.map +1 -0
- package/dist/baseline/producers/security.js +135 -0
- package/dist/baseline/producers/security.js.map +1 -0
- package/dist/baseline/producers/tests.d.ts +36 -0
- package/dist/baseline/producers/tests.d.ts.map +1 -0
- package/dist/baseline/producers/tests.js +69 -0
- package/dist/baseline/producers/tests.js.map +1 -0
- package/dist/baseline/salt.d.ts +45 -0
- package/dist/baseline/salt.d.ts.map +1 -0
- package/dist/baseline/salt.js +113 -0
- package/dist/baseline/salt.js.map +1 -0
- package/dist/baseline/show.d.ts +79 -0
- package/dist/baseline/show.d.ts.map +1 -0
- package/dist/baseline/show.js +233 -0
- package/dist/baseline/show.js.map +1 -0
- package/dist/baseline/types.d.ts +482 -0
- package/dist/baseline/types.d.ts.map +1 -0
- package/dist/baseline/types.js +53 -0
- package/dist/baseline/types.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +398 -82
- package/dist/cli.js.map +1 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +0 -4
- package/dist/constants.js.map +1 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +39 -35
- package/dist/doctor.js.map +1 -1
- package/dist/fail-on.d.ts +84 -0
- package/dist/fail-on.d.ts.map +1 -0
- package/dist/fail-on.js +128 -0
- package/dist/fail-on.js.map +1 -0
- package/dist/generator.d.ts +1 -1
- package/dist/generator.d.ts.map +1 -1
- package/dist/generator.js +81 -274
- package/dist/generator.js.map +1 -1
- package/dist/hooks-cli.d.ts +20 -0
- package/dist/hooks-cli.d.ts.map +1 -0
- package/dist/hooks-cli.js +145 -0
- package/dist/hooks-cli.js.map +1 -0
- package/dist/languages/csharp.d.ts.map +1 -1
- package/dist/languages/csharp.js +4 -9
- package/dist/languages/csharp.js.map +1 -1
- package/dist/languages/go.d.ts.map +1 -1
- package/dist/languages/go.js +3 -14
- package/dist/languages/go.js.map +1 -1
- package/dist/languages/index.d.ts +19 -1
- package/dist/languages/index.d.ts.map +1 -1
- package/dist/languages/index.js +32 -0
- package/dist/languages/index.js.map +1 -1
- package/dist/languages/java.d.ts.map +1 -1
- package/dist/languages/java.js +4 -6
- package/dist/languages/java.js.map +1 -1
- package/dist/languages/kotlin.d.ts.map +1 -1
- package/dist/languages/kotlin.js +9 -11
- package/dist/languages/kotlin.js.map +1 -1
- package/dist/languages/python.d.ts.map +1 -1
- package/dist/languages/python.js +4 -15
- package/dist/languages/python.js.map +1 -1
- package/dist/languages/ruby.d.ts.map +1 -1
- package/dist/languages/ruby.js +4 -6
- package/dist/languages/ruby.js.map +1 -1
- package/dist/languages/rust.d.ts.map +1 -1
- package/dist/languages/rust.js +4 -4
- package/dist/languages/rust.js.map +1 -1
- package/dist/languages/types.d.ts +29 -28
- package/dist/languages/types.d.ts.map +1 -1
- package/dist/languages/typescript.d.ts.map +1 -1
- package/dist/languages/typescript.js +31 -4
- package/dist/languages/typescript.js.map +1 -1
- package/dist/lib.d.ts +2 -3
- package/dist/lib.d.ts.map +1 -1
- package/dist/lib.js +3 -6
- package/dist/lib.js.map +1 -1
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +0 -10
- package/dist/prompts.js.map +1 -1
- package/dist/report-schema.d.ts +42 -0
- package/dist/report-schema.d.ts.map +1 -0
- package/dist/report-schema.js +54 -0
- package/dist/report-schema.js.map +1 -0
- package/dist/ship-installers.d.ts +112 -0
- package/dist/ship-installers.d.ts.map +1 -0
- package/dist/ship-installers.js +530 -0
- package/dist/ship-installers.js.map +1 -0
- package/dist/tools-cli.d.ts.map +1 -1
- package/dist/tools-cli.js +45 -9
- package/dist/tools-cli.js.map +1 -1
- package/dist/types.d.ts +0 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/update.d.ts.map +1 -1
- package/dist/update.js +0 -4
- package/dist/update.js.map +1 -1
- package/package.json +17 -11
- package/templates/.claude/skills/dxkit-action/SKILL.md +150 -0
- package/templates/.claude/skills/dxkit-config/SKILL.md +124 -0
- package/templates/.claude/skills/dxkit-hooks/SKILL.md +109 -0
- package/templates/.claude/skills/dxkit-init/SKILL.md +93 -0
- package/templates/.claude/skills/dxkit-learn/SKILL.md +84 -0
- package/templates/.claude/skills/dxkit-reports/SKILL.md +111 -0
- package/templates/.devcontainer/devcontainer.json +55 -0
- package/templates/.devcontainer/install-agent-clis.sh +42 -0
- package/templates/.devcontainer/post-create.sh +81 -0
- package/templates/.githooks/pre-commit +55 -0
- package/templates/.githooks/pre-push +63 -0
- package/templates/.github/workflows/dxkit-baseline-refresh.yml +78 -0
- package/templates/.github/workflows/dxkit-guardrails.yml +98 -0
- package/templates/AGENTS.md.template +137 -0
- package/templates/CLAUDE.md.template +16 -245
- package/dist/codebase-scanner.d.ts +0 -36
- package/dist/codebase-scanner.d.ts.map +0 -1
- package/dist/codebase-scanner.js +0 -688
- package/dist/codebase-scanner.js.map +0 -1
- package/dist/project-yaml.d.ts +0 -13
- package/dist/project-yaml.d.ts.map +0 -1
- package/dist/project-yaml.js +0 -188
- package/dist/project-yaml.js.map +0 -1
- package/templates/.ai/README.md +0 -117
- package/templates/.ai/prompts/execution-prompt.md +0 -9
- package/templates/.ai/prompts/planning-prompt.md +0 -18
- package/templates/.ai/prompts/session-end-template.md +0 -182
- package/templates/.ai/prompts/session-end.md +0 -132
- package/templates/.ai/prompts/session-start.md +0 -109
- package/templates/.ai/prompts/step-by-step.md +0 -113
- package/templates/.ai/sessions/.gitkeep +0 -0
- package/templates/.claude/agents/doc-writer.md +0 -107
- package/templates/.claude/agents/knowledge-bot.md +0 -64
- package/templates/.claude/agents/onboarding.md +0 -61
- package/templates/.claude/agents/quality-reviewer.md +0 -85
- package/templates/.claude/agents-available/code-reviewer.md +0 -29
- package/templates/.claude/agents-available/codebase-explorer.md +0 -100
- package/templates/.claude/agents-available/dashboard-builder.md +0 -433
- package/templates/.claude/agents-available/debugger.md +0 -29
- package/templates/.claude/agents-available/dependency-mapper.md +0 -80
- package/templates/.claude/agents-available/dev-report.md +0 -108
- package/templates/.claude/agents-available/doc-writer.md +0 -107
- package/templates/.claude/agents-available/feature-builder.md +0 -163
- package/templates/.claude/agents-available/feature-planner.md +0 -185
- package/templates/.claude/agents-available/health-auditor.md +0 -95
- package/templates/.claude/agents-available/hooks-configurator.md +0 -211
- package/templates/.claude/agents-available/knowledge-bot.md +0 -62
- package/templates/.claude/agents-available/plan-executor.md +0 -133
- package/templates/.claude/agents-available/strategic-planner.md +0 -141
- package/templates/.claude/agents-available/test-gap-finder.md +0 -67
- package/templates/.claude/agents-available/test-writer.md +0 -34
- package/templates/.claude/agents-available/vulnerability-scanner.md +0 -173
- package/templates/.claude/commands/ask.md +0 -7
- package/templates/.claude/commands/build-feature.md +0 -26
- package/templates/.claude/commands/build.md.template +0 -30
- package/templates/.claude/commands/check.md.template +0 -43
- package/templates/.claude/commands/dashboard.md +0 -28
- package/templates/.claude/commands/deps.md +0 -15
- package/templates/.claude/commands/dev-report.md +0 -50
- package/templates/.claude/commands/docs.md +0 -21
- package/templates/.claude/commands/doctor.md +0 -21
- package/templates/.claude/commands/enable-agent.md +0 -12
- package/templates/.claude/commands/execute-plan.md +0 -25
- package/templates/.claude/commands/explore-codebase.md +0 -12
- package/templates/.claude/commands/export-pdf.md +0 -30
- package/templates/.claude/commands/feature.md +0 -25
- package/templates/.claude/commands/fix-issue.md +0 -12
- package/templates/.claude/commands/fix.md.template +0 -32
- package/templates/.claude/commands/health.md +0 -58
- package/templates/.claude/commands/help.md +0 -36
- package/templates/.claude/commands/learn.md +0 -48
- package/templates/.claude/commands/onboarding.md +0 -21
- package/templates/.claude/commands/plan.md +0 -20
- package/templates/.claude/commands/quality.md.template +0 -65
- package/templates/.claude/commands/session-end.md +0 -40
- package/templates/.claude/commands/session-start.md +0 -30
- package/templates/.claude/commands/setup-hooks.md +0 -18
- package/templates/.claude/commands/setup-pr-review.md +0 -72
- package/templates/.claude/commands/stealth-mode.md +0 -17
- package/templates/.claude/commands/test-gaps.md +0 -49
- package/templates/.claude/commands/test.md.template +0 -40
- package/templates/.claude/commands/vulnerabilities.md +0 -49
- package/templates/.claude/skills/build/SKILL.md.template +0 -98
- package/templates/.claude/skills/deploy/SKILL.md.template +0 -131
- package/templates/.claude/skills/deploy/references/gotchas.md +0 -5
- package/templates/.claude/skills/doctor/SKILL.md +0 -54
- package/templates/.claude/skills/gcloud/SKILL.md +0 -66
- package/templates/.claude/skills/gcloud/references/gotchas.md +0 -5
- package/templates/.claude/skills/learned/SKILL.md +0 -55
- package/templates/.claude/skills/learned/references/conventions.md +0 -11
- package/templates/.claude/skills/learned/references/deny-recommendations.md +0 -18
- package/templates/.claude/skills/learned/references/gotchas.md +0 -11
- package/templates/.claude/skills/pulumi/SKILL.md +0 -73
- package/templates/.claude/skills/quality/SKILL.md.template +0 -108
- package/templates/.claude/skills/quality/references/gotchas.md +0 -5
- package/templates/.claude/skills/review/SKILL.md.template +0 -73
- package/templates/.claude/skills/scaffold/SKILL.md.template +0 -123
- package/templates/.claude/skills/secrets/SKILL.md +0 -52
- package/templates/.claude/skills/session/SKILL.md +0 -43
- package/templates/.claude/skills/test/SKILL.md.template +0 -122
- package/templates/.claude/skills/test/references/gotchas.md +0 -5
- package/templates/.devcontainer/Dockerfile.dev.template +0 -89
- package/templates/.devcontainer/devcontainer.json.template +0 -184
- package/templates/.devcontainer/docker-compose.yml.template +0 -105
- package/templates/.devcontainer/init-scripts/01-init.sql.template +0 -12
- package/templates/.devcontainer/post-create.sh.template +0 -298
- package/templates/.github/workflows/ci.yml.template +0 -399
- package/templates/.github/workflows/quality.yml.template +0 -376
- package/templates/.pre-commit-config.yaml.template +0 -106
- package/templates/.project/config/edit_config.py +0 -275
- package/templates/.project/config/project_config.py +0 -894
- package/templates/.project/scripts/codegen/generate-all.sh +0 -20
- package/templates/.project/scripts/codegen/validate-all.sh +0 -17
- package/templates/.project/scripts/docs/generate-all.sh +0 -30
- package/templates/.project/scripts/docs/serve.sh +0 -20
- package/templates/.project/scripts/quality/fix-all.sh +0 -138
- package/templates/.project/scripts/quality/lint-go.sh +0 -34
- package/templates/.project/scripts/quality/lint-python.sh +0 -54
- package/templates/.project/scripts/quality/run-all.sh +0 -497
- package/templates/.project/scripts/session/commit.sh +0 -70
- package/templates/.project/scripts/session/create-pr.sh +0 -165
- package/templates/.project/scripts/session/end.sh +0 -207
- package/templates/.project/scripts/session/start.sh +0 -233
- package/templates/.project/scripts/setup/doctor.sh +0 -404
- package/templates/.project/scripts/setup/interactive-setup.sh +0 -585
- package/templates/.project/scripts/sync/sync-template.sh +0 -328
- package/templates/.project/scripts/test/run-all.sh +0 -179
- package/templates/.project/scripts/test/run-quick.sh +0 -25
- package/templates/Makefile +0 -514
- package/templates/config/versions.yaml +0 -57
- package/templates/configs/go/.golangci.yml.template +0 -172
- package/templates/configs/go/go.mod.template +0 -15
- package/templates/configs/java/README.md +0 -6
- package/templates/configs/kotlin/README.md +0 -6
- package/templates/configs/node/package.json.template +0 -67
- package/templates/configs/node/tsconfig.json.template +0 -53
- package/templates/configs/python/pyproject.toml.template +0 -92
- package/templates/configs/python/pytest.ini.template +0 -64
- package/templates/configs/python/ruff.toml.template +0 -79
- package/templates/configs/ruby/README.md +0 -6
- package/templates/configs/rust/Cargo.toml.template +0 -51
- package/templates/configs/shared/.editorconfig +0 -67
- package/templates/scripts/validate-templates.sh +0 -449
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# {{PROJECT_NAME}}
|
|
2
|
+
|
|
3
|
+
{{PROJECT_DESCRIPTION}}
|
|
4
|
+
|
|
5
|
+
## How to use this file
|
|
6
|
+
|
|
7
|
+
`AGENTS.md` is the open-standard project-context file read by AI coding agents (Claude Code, Codex, Cursor, Aider, …). It describes what this project is, how to run common commands, and the safety rules that apply.
|
|
8
|
+
|
|
9
|
+
For agent-specific config, see the editor-specific files alongside this one — `CLAUDE.md` (Claude Code), `.cursor/rules` (Cursor), etc. — which point back here for shared context.
|
|
10
|
+
|
|
11
|
+
## What dxkit does in this repo
|
|
12
|
+
|
|
13
|
+
This repo is managed by [`@vyuhlabs/dxkit`](https://github.com/vyuh-labs/dxkit). dxkit measures code health across 6 dimensions, captures a per-finding baseline, and gates PRs on net-new regressions.
|
|
14
|
+
|
|
15
|
+
Six skills are installed under `.claude/skills/` (Claude Code auto-discovers via skill frontmatter):
|
|
16
|
+
|
|
17
|
+
- **dxkit-learn** — explains dxkit concepts (baselines, dimensions, scanners)
|
|
18
|
+
- **dxkit-init** — interactive setup walkthrough
|
|
19
|
+
- **dxkit-config** — edit `.dxkit-ignore`, `.vyuh-dxkit.json`, policy
|
|
20
|
+
- **dxkit-hooks** — install / troubleshoot git hooks
|
|
21
|
+
- **dxkit-reports** — run analyzers, explain output, dashboard
|
|
22
|
+
- **dxkit-action** — prioritize + fix + verify + re-baseline
|
|
23
|
+
|
|
24
|
+
Reach for the relevant skill when working in this repo. They wrap the `vyuh-dxkit` CLI with workflow guidance.
|
|
25
|
+
|
|
26
|
+
{{#IF_PYTHON}}
|
|
27
|
+
## Python {{PYTHON_VERSION}}
|
|
28
|
+
|
|
29
|
+
- **Tests**: `pytest`
|
|
30
|
+
- **Lint/format**: `ruff check .` / `ruff format .`
|
|
31
|
+
- **Type check**: `mypy src/`
|
|
32
|
+
- **Package config**: `pyproject.toml`
|
|
33
|
+
{{/IF_PYTHON}}
|
|
34
|
+
|
|
35
|
+
{{#IF_GO}}
|
|
36
|
+
## Go {{GO_VERSION}}
|
|
37
|
+
|
|
38
|
+
- **Tests**: `go test ./...`
|
|
39
|
+
- **Lint**: `golangci-lint run`
|
|
40
|
+
- **Format**: `gofmt -w .` / `goimports -w .`
|
|
41
|
+
- **Module**: `go.mod`
|
|
42
|
+
{{/IF_GO}}
|
|
43
|
+
|
|
44
|
+
{{#IF_NODE}}
|
|
45
|
+
## Node.js {{NODE_VERSION}}
|
|
46
|
+
|
|
47
|
+
- **Tests**: `npm test`
|
|
48
|
+
- **Build**: `npm run build`
|
|
49
|
+
- **Lint/format**: `npx eslint .` / `npx prettier --write .`
|
|
50
|
+
- **Package config**: `package.json`, `tsconfig.json`
|
|
51
|
+
{{/IF_NODE}}
|
|
52
|
+
|
|
53
|
+
{{#IF_NEXTJS}}
|
|
54
|
+
## Next.js
|
|
55
|
+
|
|
56
|
+
- **Directory**: `frontend/`
|
|
57
|
+
- **Dev server**: `cd frontend && npm run dev`
|
|
58
|
+
- **Build**: `cd frontend && npm run build`
|
|
59
|
+
- **Lint**: `cd frontend && npm run lint`
|
|
60
|
+
{{/IF_NEXTJS}}
|
|
61
|
+
|
|
62
|
+
{{#IF_RUST}}
|
|
63
|
+
## Rust {{RUST_VERSION}}
|
|
64
|
+
|
|
65
|
+
- **Tests**: `cargo test`
|
|
66
|
+
- **Build**: `cargo build` / `cargo build --release`
|
|
67
|
+
- **Lint**: `cargo clippy`
|
|
68
|
+
- **Format**: `cargo fmt`
|
|
69
|
+
- **Package**: `Cargo.toml`
|
|
70
|
+
{{/IF_RUST}}
|
|
71
|
+
|
|
72
|
+
{{#IF_CSHARP}}
|
|
73
|
+
## C# {{CSHARP_VERSION}}
|
|
74
|
+
|
|
75
|
+
- **Tests**: `dotnet test`
|
|
76
|
+
- **Build**: `dotnet build` / `dotnet publish -c Release`
|
|
77
|
+
- **Format**: `dotnet format`
|
|
78
|
+
- **Solution**: `*.sln`, projects under `*.csproj`
|
|
79
|
+
{{/IF_CSHARP}}
|
|
80
|
+
|
|
81
|
+
{{#IF_KOTLIN}}
|
|
82
|
+
## Kotlin {{KOTLIN_VERSION}}
|
|
83
|
+
|
|
84
|
+
- **Tests**: `./gradlew test`
|
|
85
|
+
- **Build**: `./gradlew build`
|
|
86
|
+
- **Lint**: `detekt`
|
|
87
|
+
- **Package**: `build.gradle.kts` / `settings.gradle.kts`
|
|
88
|
+
{{/IF_KOTLIN}}
|
|
89
|
+
|
|
90
|
+
{{#IF_JAVA}}
|
|
91
|
+
## Java {{JAVA_VERSION}}
|
|
92
|
+
|
|
93
|
+
- **Tests**: `mvn test` / `./gradlew test`
|
|
94
|
+
- **Build**: `mvn package` / `./gradlew build`
|
|
95
|
+
- **Lint**: `pmd`
|
|
96
|
+
- **Package**: `pom.xml` / `build.gradle`
|
|
97
|
+
{{/IF_JAVA}}
|
|
98
|
+
|
|
99
|
+
{{#IF_RUBY}}
|
|
100
|
+
## Ruby {{RUBY_VERSION}}
|
|
101
|
+
|
|
102
|
+
- **Tests**: `bundle exec rspec` / `bundle exec rails test`
|
|
103
|
+
- **Lint**: `bundle exec rubocop`
|
|
104
|
+
- **Coverage**: SimpleCov (loaded from `spec_helper.rb`)
|
|
105
|
+
- **Package**: `Gemfile`
|
|
106
|
+
{{/IF_RUBY}}
|
|
107
|
+
|
|
108
|
+
## dxkit commands
|
|
109
|
+
|
|
110
|
+
| Purpose | Command |
|
|
111
|
+
|---|---|
|
|
112
|
+
| Overall health (6 dimensions) | `npx vyuh-dxkit health` |
|
|
113
|
+
| Deep security scan | `npx vyuh-dxkit vulnerabilities` |
|
|
114
|
+
| Test coverage gaps | `npx vyuh-dxkit test-gaps` |
|
|
115
|
+
| Code quality + slop | `npx vyuh-dxkit quality` |
|
|
116
|
+
| Bill of materials | `npx vyuh-dxkit bom` |
|
|
117
|
+
| Dashboard (HTML) | `npx vyuh-dxkit dashboard` |
|
|
118
|
+
| Guardrail check (baseline diff) | `npx vyuh-dxkit guardrail check` |
|
|
119
|
+
| Doctor (verify setup) | `npx vyuh-dxkit doctor` |
|
|
120
|
+
|
|
121
|
+
The pre-push hook runs `guardrail check` automatically — blocks net-new regressions before they leave your machine.
|
|
122
|
+
|
|
123
|
+
## Security rules — never violate
|
|
124
|
+
|
|
125
|
+
1. **Never output, log, or commit secrets** — no API keys, tokens, passwords, or credentials in code, commits, or files Claude writes
|
|
126
|
+
2. **Never read `.env` directly** — to confirm a variable exists, grep for the variable name only
|
|
127
|
+
3. **Never pass secrets as CLI arguments** — they appear in process lists and shell history
|
|
128
|
+
4. **Never include secrets in build args or Dockerfiles**
|
|
129
|
+
5. **Sensitive files are gitignored**: `.env`, `.env.*`, `.env.secrets`, `.claude/settings.local.json`
|
|
130
|
+
6. **Before committing**: verify no secrets in staged files (`git diff --cached`)
|
|
131
|
+
|
|
132
|
+
## Conventions
|
|
133
|
+
|
|
134
|
+
- Run `npx vyuh-dxkit health` before opening a PR
|
|
135
|
+
- For changes to risky areas (auth, payments, data mutations), write tests first
|
|
136
|
+
- Capture surprising behaviors as comments in `.dxkit-ignore` or the relevant skill file
|
|
137
|
+
- Pre-push hook will block net-new regressions — fix them in the same PR or accept-as-baseline with a commit message explaining why
|
|
@@ -1,255 +1,26 @@
|
|
|
1
|
-
# {{PROJECT_NAME}}
|
|
1
|
+
# {{PROJECT_NAME}} — Claude Code config
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Project context lives in [`AGENTS.md`](./AGENTS.md) (open-standard, read by every coding agent). This file is Claude-Code-specific config that points at it.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Whenever Claude Code starts a session in this repo, it reads BOTH files: this one (Claude-specific shortcuts) and `AGENTS.md` (project prose).
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
- Configuration driven by `.project.yaml` (single source of truth)
|
|
9
|
-
- Quality checks, testing, and formatting enforced via `make check`
|
|
7
|
+
## dxkit skills
|
|
10
8
|
|
|
11
|
-
|
|
9
|
+
Six dxkit-specific skills are installed under `.claude/skills/`. Claude Code auto-discovers them via their frontmatter `description` fields:
|
|
12
10
|
|
|
13
|
-
|
|
14
|
-
- `
|
|
15
|
-
- `
|
|
16
|
-
- `
|
|
17
|
-
- `
|
|
11
|
+
- `dxkit-learn` — explain what dxkit does, what scores mean, what scanners run
|
|
12
|
+
- `dxkit-init` — walk through `vyuh-dxkit init` flag choices
|
|
13
|
+
- `dxkit-config` — edit `.dxkit-ignore` / `.vyuh-dxkit.json` / policy
|
|
14
|
+
- `dxkit-hooks` — install / troubleshoot git hooks
|
|
15
|
+
- `dxkit-reports` — run analyzers + read output
|
|
16
|
+
- `dxkit-action` — prioritize + fix + verify + re-baseline
|
|
18
17
|
|
|
19
|
-
|
|
20
|
-
- `make quality` - Run all quality checks (report: tmp/reports/quality-report.md)
|
|
21
|
-
- `make quality-fix` - Auto-fix issues
|
|
22
|
-
- `make lint` - Lint all code
|
|
23
|
-
- `make format` - Format all code
|
|
24
|
-
- `make fix` - Fix all auto-fixable issues (quality-fix + format)
|
|
25
|
-
- `make check` - Full pre-commit check (validate + quality + test)
|
|
18
|
+
When the user asks about dxkit concepts or wants to run an analyzer, reach for the matching skill before improvising.
|
|
26
19
|
|
|
27
|
-
|
|
28
|
-
- `make test` - Run all tests (report: tmp/reports/test-report.md)
|
|
29
|
-
- `make test-unit` - Fast unit tests only
|
|
30
|
-
- `make test-coverage` - Detailed coverage report
|
|
31
|
-
- Coverage threshold: {{COVERAGE_THRESHOLD}}%
|
|
20
|
+
## Per-language rules
|
|
32
21
|
|
|
33
|
-
|
|
34
|
-
- `make build` - Build all services
|
|
35
|
-
- `make clean` - Remove build artifacts
|
|
36
|
-
- `make dev` - Start all services (docker-compose up)
|
|
37
|
-
- `make stop` - Stop all services
|
|
22
|
+
`.claude/rules/<lang>.md` files carry per-language conventions for any active language pack. They're loaded automatically.
|
|
38
23
|
|
|
39
|
-
|
|
40
|
-
- `make session-start` - Start AI-assisted development session
|
|
41
|
-
- `make session-end` - End session and create checkpoint
|
|
42
|
-
- `make session-commit` - Commit with quality checks
|
|
43
|
-
- `make session-push` - Push to remote
|
|
44
|
-
- `make session-pr` - Create PR with auto-generated content
|
|
24
|
+
## Security rules + per-language commands
|
|
45
25
|
|
|
46
|
-
|
|
47
|
-
### Secrets Management
|
|
48
|
-
- `make secrets-pull` - Pull secrets from Infisical to .env
|
|
49
|
-
- `make secrets-show` - Show Infisical configuration (no secrets displayed)
|
|
50
|
-
{{/IF_INFISICAL}}
|
|
51
|
-
|
|
52
|
-
### Configuration
|
|
53
|
-
- `make lang-list` - Show enabled languages
|
|
54
|
-
- `make lang-add LANG=<name>` - Enable a language
|
|
55
|
-
- `make lang-remove LANG=<name>` - Disable a language
|
|
56
|
-
- `make sync` - Sync .project.yaml to language config files
|
|
57
|
-
|
|
58
|
-
### Code Generation
|
|
59
|
-
- `make generate` - Generate all code
|
|
60
|
-
- `make validate` - Validate generated code is up-to-date
|
|
61
|
-
|
|
62
|
-
{{#IF_PYTHON}}
|
|
63
|
-
## Python {{PYTHON_VERSION}}
|
|
64
|
-
|
|
65
|
-
- **Source:** `src/` or `services/python/`
|
|
66
|
-
- **Linter/Formatter:** ruff (config: `ruff.toml`, `pyproject.toml`)
|
|
67
|
-
- **Type checker:** mypy
|
|
68
|
-
- **Tests:** pytest (config: `pytest.ini`)
|
|
69
|
-
- **Package config:** `pyproject.toml`
|
|
70
|
-
- Run quality: `.project/scripts/quality/lint-python.sh`
|
|
71
|
-
{{/IF_PYTHON}}
|
|
72
|
-
|
|
73
|
-
{{#IF_GO}}
|
|
74
|
-
## Go {{GO_VERSION}}
|
|
75
|
-
|
|
76
|
-
- **Source:** `services/go/`
|
|
77
|
-
- **Linter:** golangci-lint (config: `.golangci.yml`)
|
|
78
|
-
- **Formatter:** gofmt + goimports
|
|
79
|
-
- **Tests:** `go test ./...`
|
|
80
|
-
- **Module:** `go.mod`
|
|
81
|
-
- Run quality: `.project/scripts/quality/lint-go.sh`
|
|
82
|
-
{{/IF_GO}}
|
|
83
|
-
|
|
84
|
-
{{#IF_NODE}}
|
|
85
|
-
## Node.js {{NODE_VERSION}}
|
|
86
|
-
|
|
87
|
-
- **Package:** `package.json`, `tsconfig.json`
|
|
88
|
-
- **Linter:** ESLint
|
|
89
|
-
- **Formatter:** Prettier
|
|
90
|
-
- **Tests:** npm test
|
|
91
|
-
{{/IF_NODE}}
|
|
92
|
-
|
|
93
|
-
{{#IF_NEXTJS}}
|
|
94
|
-
## Next.js
|
|
95
|
-
|
|
96
|
-
- **Directory:** `frontend/`
|
|
97
|
-
- **Stack:** App Router + TypeScript + Tailwind CSS
|
|
98
|
-
- **Build:** `cd frontend && npm run build`
|
|
99
|
-
- **Lint:** `cd frontend && npm run lint`
|
|
100
|
-
{{/IF_NEXTJS}}
|
|
101
|
-
|
|
102
|
-
{{#IF_RUST}}
|
|
103
|
-
## Rust {{RUST_VERSION}}
|
|
104
|
-
|
|
105
|
-
- **Package:** `Cargo.toml`
|
|
106
|
-
- **Linter:** clippy
|
|
107
|
-
- **Formatter:** rustfmt
|
|
108
|
-
- **Tests:** `cargo test`
|
|
109
|
-
{{/IF_RUST}}
|
|
110
|
-
|
|
111
|
-
{{#IF_CSHARP}}
|
|
112
|
-
## C# {{CSHARP_VERSION}}
|
|
113
|
-
|
|
114
|
-
- **Source:** `src/` or `services/csharp/`
|
|
115
|
-
- **Solution:** `*.sln`
|
|
116
|
-
- **Project:** `*.csproj`
|
|
117
|
-
- **Linter/Analyzer:** Roslyn Analyzers, StyleCop Analyzers
|
|
118
|
-
- **Formatter:** `dotnet format`
|
|
119
|
-
- **Tests:** `dotnet test` (xUnit)
|
|
120
|
-
{{/IF_CSHARP}}
|
|
121
|
-
|
|
122
|
-
{{#IF_GCLOUD}}
|
|
123
|
-
## Google Cloud
|
|
124
|
-
|
|
125
|
-
- **Auth:** `gcloud auth login` (interactive setup via `make setup`)
|
|
126
|
-
- **Project:** Set in `.env` as `GOOGLE_CLOUD_PROJECT`
|
|
127
|
-
- **SDK:** Installed via devcontainer post-create script
|
|
128
|
-
{{/IF_GCLOUD}}
|
|
129
|
-
|
|
130
|
-
{{#IF_PULUMI}}
|
|
131
|
-
## Pulumi
|
|
132
|
-
|
|
133
|
-
- **Auth:** `pulumi login`
|
|
134
|
-
- **Workflow:** Always `pulumi preview` before `pulumi up`
|
|
135
|
-
- **Secrets:** Use `pulumi config set --secret` for sensitive values
|
|
136
|
-
{{/IF_PULUMI}}
|
|
137
|
-
|
|
138
|
-
## Claude Code Integration
|
|
139
|
-
|
|
140
|
-
### Skills (`.claude/skills/`)
|
|
141
|
-
Domain-specific context loaded on demand. Check skill descriptions before starting work.
|
|
142
|
-
- `.claude/skills/learned/references/gotchas.md` - Known project gotchas
|
|
143
|
-
- `.claude/skills/learned/references/conventions.md` - Team conventions
|
|
144
|
-
|
|
145
|
-
### Commands (`.claude/commands/`)
|
|
146
|
-
Slash commands for common workflows. Run `/help` to list all with descriptions.
|
|
147
|
-
- `/session-start` - Start dev session
|
|
148
|
-
- `/session-end` - End session with checkpoint
|
|
149
|
-
- `/ask <question>` - Ask about the codebase
|
|
150
|
-
- `/explore-codebase` - Deep architecture exploration
|
|
151
|
-
- `/onboarding` - Generate first-day developer guide
|
|
152
|
-
- `/enable-agent <name>` - Activate a dormant agent
|
|
153
|
-
- `/help` - List all commands and agents
|
|
154
|
-
- `/quality` - Run quality checks (language-aware)
|
|
155
|
-
- `/setup-hooks` - Install git pre-commit/pre-push hooks
|
|
156
|
-
- `/learn` - Capture a gotcha, convention, or thing to avoid
|
|
157
|
-
- `/test` - Run tests
|
|
158
|
-
- `/setup-pr-review` - Set up automated PR review with Claude Code
|
|
159
|
-
- `/test-gaps` - Find critical untested code paths
|
|
160
|
-
- `/deps` - Map dependencies ("what breaks if I change X?")
|
|
161
|
-
- `/health` - Comprehensive codebase health audit
|
|
162
|
-
- `/vulnerabilities` - Scan dependencies and code for security issues
|
|
163
|
-
- `/dev-report` - Developer activity and code quality report
|
|
164
|
-
- `/docs` - Audit, write, or improve documentation
|
|
165
|
-
- `/plan` - Generate improvement plans with KPIs from reports (fix loop)
|
|
166
|
-
- `/execute-plan` - Execute a plan task by task with session management
|
|
167
|
-
- `/feature` - Design and plan a new feature
|
|
168
|
-
- `/build-feature` - Build a feature from a plan with tests
|
|
169
|
-
- `/dashboard` - Generate HTML dashboard from all reports
|
|
170
|
-
- `/stealth-mode` - Gitignore DXKit files + install smart scoped git hooks
|
|
171
|
-
- `/export-pdf` - Convert markdown reports to PDF
|
|
172
|
-
- `/fix-issue <number>` - Investigate and fix a GitHub issue
|
|
173
|
-
|
|
174
|
-
### Rules (`.claude/rules/`)
|
|
175
|
-
Language-specific conventions that activate automatically when editing matching files.
|
|
176
|
-
|
|
177
|
-
### Agents
|
|
178
|
-
**Active** (`.claude/agents/`) — auto-triggered when your question matches:
|
|
179
|
-
- `knowledge-bot` — Answers codebase questions with file:line references (sonnet, read-only)
|
|
180
|
-
- `onboarding` — Interactive onboarding buddy for new developers (sonnet, read-only)
|
|
181
|
-
- `quality-reviewer` — Reviews changed code for issues before committing (sonnet)
|
|
182
|
-
- `doc-writer` — Audits docs, identifies gaps, writes/improves documentation (sonnet)
|
|
183
|
-
|
|
184
|
-
**Dormant** (`.claude/agents-available/`) — activate with `/enable-agent <name>`:
|
|
185
|
-
- `codebase-explorer` — Deep architecture analysis, generates codebase skill (sonnet, read-only)
|
|
186
|
-
- `code-reviewer` — Read-only PR review and security audit (sonnet, no write access)
|
|
187
|
-
- `test-writer` — Writes tests for existing code (sonnet)
|
|
188
|
-
- `test-gap-finder` — Identifies critical untested code paths (sonnet, read-only)
|
|
189
|
-
- `dependency-mapper` — Maps import chains and blast radius (sonnet, read-only)
|
|
190
|
-
- `health-auditor` — Comprehensive codebase health audit (sonnet, read-only)
|
|
191
|
-
- `vulnerability-scanner` — Dependency and code vulnerability analysis (sonnet)
|
|
192
|
-
- `dev-report` — Developer activity, quality patterns, security attribution (sonnet)
|
|
193
|
-
- `dashboard-builder` — Generates HTML dashboard from all reports (sonnet)
|
|
194
|
-
- `strategic-planner` — Analyzes reports, proposes KPIs, generates improvement plans (sonnet)
|
|
195
|
-
- `plan-executor` — Executes plans task by task with session checkpoints (sonnet)
|
|
196
|
-
- `feature-planner` — Designs new features, generates implementation plans (sonnet)
|
|
197
|
-
- `feature-builder` — Implements features from plans with tests and conventions (sonnet)
|
|
198
|
-
- `hooks-configurator` — Configures scoped git hooks from DXKit commands (sonnet)
|
|
199
|
-
- `doc-writer` — Audits docs, identifies gaps, writes/improves documentation (sonnet)
|
|
200
|
-
- `debugger` — Traces root causes systematically (sonnet, no file edits)
|
|
201
|
-
|
|
202
|
-
## AI-Assisted Development Workflow
|
|
203
|
-
|
|
204
|
-
```
|
|
205
|
-
# 1. Start a session
|
|
206
|
-
/session-start
|
|
207
|
-
|
|
208
|
-
# 2. Create a feature branch
|
|
209
|
-
git checkout -b feature/your-feature
|
|
210
|
-
|
|
211
|
-
# 3. Ask questions as you go
|
|
212
|
-
/ask How does the auth middleware work?
|
|
213
|
-
|
|
214
|
-
# 4. Develop — Claude has full project context via skills
|
|
215
|
-
|
|
216
|
-
# 5. Run checks before committing
|
|
217
|
-
/quality
|
|
218
|
-
/test
|
|
219
|
-
|
|
220
|
-
# 6. Commit and push
|
|
221
|
-
git add -A && git commit -m "feat: your feature"
|
|
222
|
-
git push -u origin feature/your-feature
|
|
223
|
-
|
|
224
|
-
# 7. End session (creates checkpoint + evolves skills)
|
|
225
|
-
/session-end
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
## Security
|
|
229
|
-
|
|
230
|
-
**Critical rules — never violate these:**
|
|
231
|
-
|
|
232
|
-
1. **Never output, log, or commit secrets** — no API keys, tokens, passwords, or credentials in code, commits, checkpoints, or skill files
|
|
233
|
-
2. **Never read `.env` directly** — use `make secrets-show` (which masks values) to check configuration
|
|
234
|
-
3. **Never pass secrets as CLI arguments** — they appear in process lists and shell history
|
|
235
|
-
4. **Never include secrets in build args or Dockerfiles**
|
|
236
|
-
5. **Sensitive files are gitignored:** `.env`, `.env.*`, `.env.secrets`, `.claude/settings.local.json`
|
|
237
|
-
6. **Before committing:** verify no secrets in staged files (`git diff --cached`)
|
|
238
|
-
{{#IF_INFISICAL}}
|
|
239
|
-
7. **Infisical tokens:** never output `INFISICAL_TOKEN` values; use `make secrets-show` to verify config
|
|
240
|
-
{{/IF_INFISICAL}}
|
|
241
|
-
{{#IF_GCLOUD}}
|
|
242
|
-
8. **GCP credentials:** never output `gcloud auth print-access-token` or service account JSON keys
|
|
243
|
-
{{/IF_GCLOUD}}
|
|
244
|
-
|
|
245
|
-
## Conventions
|
|
246
|
-
|
|
247
|
-
- Run quality checks before committing (`/quality` or `make quality`)
|
|
248
|
-
- Use `/session-start` to begin work, `/session-end` to checkpoint
|
|
249
|
-
- All code changes should pass quality + test checks
|
|
250
|
-
{{#IF_PRECOMMIT}}
|
|
251
|
-
- Pre-commit hooks run automatically on `git commit`
|
|
252
|
-
{{/IF_PRECOMMIT}}
|
|
253
|
-
- Keep session checkpoints in `.ai/sessions/<developer>/<date>/`
|
|
254
|
-
- Skills evolve over time — gotchas and conventions are captured during `/session-end`
|
|
255
|
-
- Check `/help` for all available commands and agents
|
|
26
|
+
See [`AGENTS.md`](./AGENTS.md). All shared project context lives there so other agents (Codex / Cursor / Aider) get the same instructions Claude does.
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
export interface CodebaseAnalysis {
|
|
2
|
-
entryPoints: {
|
|
3
|
-
file: string;
|
|
4
|
-
type: string;
|
|
5
|
-
}[];
|
|
6
|
-
directories: {
|
|
7
|
-
path: string;
|
|
8
|
-
purpose: string;
|
|
9
|
-
}[];
|
|
10
|
-
testPatterns: {
|
|
11
|
-
framework: string;
|
|
12
|
-
location: string;
|
|
13
|
-
pattern: string;
|
|
14
|
-
}[];
|
|
15
|
-
apiEndpoints: {
|
|
16
|
-
method: string;
|
|
17
|
-
path: string;
|
|
18
|
-
file: string;
|
|
19
|
-
}[];
|
|
20
|
-
configFiles: {
|
|
21
|
-
file: string;
|
|
22
|
-
purpose: string;
|
|
23
|
-
}[];
|
|
24
|
-
conventions: {
|
|
25
|
-
pattern: string;
|
|
26
|
-
description: string;
|
|
27
|
-
}[];
|
|
28
|
-
fileCount: number;
|
|
29
|
-
testFileCount: number;
|
|
30
|
-
sourceFileCount: number;
|
|
31
|
-
languageBreakdown: Record<string, number>;
|
|
32
|
-
}
|
|
33
|
-
export declare function scanCodebase(cwd: string): CodebaseAnalysis;
|
|
34
|
-
export declare function renderCodebaseSkill(analysis: CodebaseAnalysis): string;
|
|
35
|
-
export declare function renderArchitectureRef(analysis: CodebaseAnalysis): string;
|
|
36
|
-
//# sourceMappingURL=codebase-scanner.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codebase-scanner.d.ts","sourceRoot":"","sources":["../src/codebase-scanner.ts"],"names":[],"mappings":"AAoDA,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC9C,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACjD,YAAY,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACzE,YAAY,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/D,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACjD,WAAW,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AA6eD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAmD1D;AAID,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,CAgGtE;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,CAmDxE"}
|