@vyuhlabs/dxkit 2.4.8 → 2.5.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/CHANGELOG.md +235 -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/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 +360 -81
- package/dist/cli.js.map +1 -1
- package/dist/codebase-scanner.d.ts.map +1 -1
- package/dist/codebase-scanner.js +0 -1
- package/dist/codebase-scanner.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 +22 -25
- 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.map +1 -1
- package/dist/generator.js +2 -141
- package/dist/generator.js.map +1 -1
- package/dist/languages/csharp.d.ts.map +1 -1
- package/dist/languages/csharp.js +0 -9
- package/dist/languages/csharp.js.map +1 -1
- package/dist/languages/go.d.ts.map +1 -1
- package/dist/languages/go.js +0 -15
- package/dist/languages/go.js.map +1 -1
- package/dist/languages/index.d.ts +1 -1
- package/dist/languages/index.d.ts.map +1 -1
- package/dist/languages/index.js.map +1 -1
- package/dist/languages/java.d.ts.map +1 -1
- package/dist/languages/java.js +0 -6
- package/dist/languages/java.js.map +1 -1
- package/dist/languages/kotlin.d.ts.map +1 -1
- package/dist/languages/kotlin.js +0 -11
- package/dist/languages/kotlin.js.map +1 -1
- package/dist/languages/python.d.ts.map +1 -1
- package/dist/languages/python.js +0 -15
- package/dist/languages/python.js.map +1 -1
- package/dist/languages/ruby.d.ts.map +1 -1
- package/dist/languages/ruby.js +0 -6
- package/dist/languages/ruby.js.map +1 -1
- package/dist/languages/rust.d.ts.map +1 -1
- package/dist/languages/rust.js +0 -4
- package/dist/languages/rust.js.map +1 -1
- package/dist/languages/types.d.ts +2 -28
- package/dist/languages/types.d.ts.map +1 -1
- package/dist/languages/typescript.d.ts.map +1 -1
- package/dist/languages/typescript.js +26 -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 +106 -0
- package/dist/ship-installers.d.ts.map +1 -0
- package/dist/ship-installers.js +415 -0
- package/dist/ship-installers.js.map +1 -0
- 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/agents/onboarding.md +5 -4
- package/templates/.claude/agents-available/codebase-explorer.md +1 -1
- package/templates/.claude/agents-available/debugger.md +2 -2
- package/templates/.claude/agents-available/health-auditor.md +2 -2
- package/templates/.claude/commands/doctor.md +20 -12
- package/templates/.claude/skills/build/SKILL.md.template +22 -30
- package/templates/.claude/skills/deploy/SKILL.md.template +5 -25
- package/templates/.claude/skills/doctor/SKILL.md +24 -47
- package/templates/.claude/skills/gcloud/SKILL.md +5 -5
- package/templates/.claude/skills/learned/SKILL.md +1 -1
- package/templates/.claude/skills/pulumi/SKILL.md +2 -2
- package/templates/.claude/skills/quality/SKILL.md.template +4 -23
- package/templates/.claude/skills/review/SKILL.md.template +4 -3
- package/templates/.claude/skills/scaffold/SKILL.md.template +5 -15
- package/templates/.claude/skills/secrets/SKILL.md +20 -21
- package/templates/.claude/skills/session/SKILL.md +20 -31
- package/templates/.claude/skills/test/SKILL.md.template +1 -7
- package/templates/.devcontainer/devcontainer.json +81 -0
- package/templates/.devcontainer/install-agent-clis.sh +42 -0
- package/templates/.devcontainer/post-create.sh +67 -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/CLAUDE.md.template +62 -196
- 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/commands/setup-pr-review.md +0 -72
- 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
|
@@ -1,275 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""
|
|
3
|
-
Interactive Project Configuration Editor
|
|
4
|
-
=========================================
|
|
5
|
-
|
|
6
|
-
Provides an interactive menu to edit .project.yaml settings.
|
|
7
|
-
|
|
8
|
-
USAGE
|
|
9
|
-
-----
|
|
10
|
-
python3 edit_config.py # Interactive menu
|
|
11
|
-
python3 edit_config.py --quick # Quick toggle menu (languages only)
|
|
12
|
-
"""
|
|
13
|
-
|
|
14
|
-
from __future__ import annotations
|
|
15
|
-
|
|
16
|
-
import os
|
|
17
|
-
import sys
|
|
18
|
-
from importlib.util import find_spec
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
# Check if yaml is available
|
|
22
|
-
HAS_YAML = find_spec("yaml") is not None
|
|
23
|
-
|
|
24
|
-
CONFIG_FILE = ".project.yaml"
|
|
25
|
-
|
|
26
|
-
# ANSI colors
|
|
27
|
-
CYAN = "\033[36m"
|
|
28
|
-
GREEN = "\033[32m"
|
|
29
|
-
RED = "\033[31m"
|
|
30
|
-
YELLOW = "\033[33m"
|
|
31
|
-
DIM = "\033[2m"
|
|
32
|
-
BOLD = "\033[1m"
|
|
33
|
-
RESET = "\033[0m"
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
def load_config() -> dict:
|
|
37
|
-
"""Load configuration from YAML file."""
|
|
38
|
-
from project_config import load_config as _load
|
|
39
|
-
return _load()
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
def save_config(config: dict) -> None:
|
|
43
|
-
"""Save configuration to YAML file."""
|
|
44
|
-
from project_config import save_config as _save
|
|
45
|
-
_save(config)
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
def clear_screen():
|
|
49
|
-
"""Clear terminal screen."""
|
|
50
|
-
os.system('clear' if os.name == 'posix' else 'cls')
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
def prompt(message: str, default: str = "") -> str:
|
|
54
|
-
"""Prompt for input with optional default."""
|
|
55
|
-
if default:
|
|
56
|
-
result = input(f"{message} [{default}]: ").strip()
|
|
57
|
-
return result if result else default
|
|
58
|
-
return input(f"{message}: ").strip()
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
def prompt_bool(message: str, default: bool = True) -> bool:
|
|
62
|
-
"""Prompt for yes/no."""
|
|
63
|
-
default_str = "Y/n" if default else "y/N"
|
|
64
|
-
result = input(f"{message} [{default_str}]: ").strip().lower()
|
|
65
|
-
if not result:
|
|
66
|
-
return default
|
|
67
|
-
return result in ("y", "yes", "true", "1")
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
def prompt_int(message: str, default: int, min_val: int = 0, max_val: int = 100) -> int:
|
|
71
|
-
"""Prompt for integer."""
|
|
72
|
-
while True:
|
|
73
|
-
result = input(f"{message} [{default}]: ").strip()
|
|
74
|
-
if not result:
|
|
75
|
-
return default
|
|
76
|
-
try:
|
|
77
|
-
val = int(result)
|
|
78
|
-
if min_val <= val <= max_val:
|
|
79
|
-
return val
|
|
80
|
-
print(f"{RED}Value must be between {min_val} and {max_val}{RESET}")
|
|
81
|
-
except ValueError:
|
|
82
|
-
print(f"{RED}Please enter a number{RESET}")
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
def prompt_choice(message: str, options: list[str], default: int = 0) -> int:
|
|
86
|
-
"""Prompt for choice from list."""
|
|
87
|
-
print(f"\n{message}")
|
|
88
|
-
for i, opt in enumerate(options):
|
|
89
|
-
marker = f"{GREEN}>{RESET}" if i == default else " "
|
|
90
|
-
print(f" {marker} {i + 1}. {opt}")
|
|
91
|
-
|
|
92
|
-
while True:
|
|
93
|
-
result = input(f"Choice [1-{len(options)}]: ").strip()
|
|
94
|
-
if not result:
|
|
95
|
-
return default
|
|
96
|
-
try:
|
|
97
|
-
idx = int(result) - 1
|
|
98
|
-
if 0 <= idx < len(options):
|
|
99
|
-
return idx
|
|
100
|
-
print(f"{RED}Please enter 1-{len(options)}{RESET}")
|
|
101
|
-
except ValueError:
|
|
102
|
-
print(f"{RED}Please enter a number{RESET}")
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
def edit_language(config: dict, lang_key: str, lang_name: str) -> None:
|
|
106
|
-
"""Edit settings for a specific language."""
|
|
107
|
-
lang = config["languages"].get(lang_key, {})
|
|
108
|
-
quality = lang.get("quality", {})
|
|
109
|
-
|
|
110
|
-
clear_screen()
|
|
111
|
-
print(f"\n{BOLD}{CYAN}═══ {lang_name} Configuration ═══{RESET}\n")
|
|
112
|
-
|
|
113
|
-
# Enable/disable
|
|
114
|
-
enabled = prompt_bool(
|
|
115
|
-
f"Enable {lang_name}",
|
|
116
|
-
lang.get("enabled", False)
|
|
117
|
-
)
|
|
118
|
-
lang["enabled"] = enabled
|
|
119
|
-
|
|
120
|
-
if enabled:
|
|
121
|
-
# Version
|
|
122
|
-
lang["version"] = prompt(
|
|
123
|
-
f"{lang_name} version",
|
|
124
|
-
lang.get("version", "")
|
|
125
|
-
)
|
|
126
|
-
|
|
127
|
-
print(f"\n{BOLD}Quality settings:{RESET}")
|
|
128
|
-
|
|
129
|
-
# Coverage
|
|
130
|
-
quality["coverage"] = prompt_int(
|
|
131
|
-
" Coverage threshold (%)",
|
|
132
|
-
quality.get("coverage", 80)
|
|
133
|
-
)
|
|
134
|
-
|
|
135
|
-
# Lint
|
|
136
|
-
quality["lint"] = prompt_bool(
|
|
137
|
-
" Enable linting",
|
|
138
|
-
quality.get("lint", True)
|
|
139
|
-
)
|
|
140
|
-
|
|
141
|
-
# Typecheck (not all languages)
|
|
142
|
-
if lang_key in ("python", "node"):
|
|
143
|
-
quality["typecheck"] = prompt_bool(
|
|
144
|
-
" Enable type checking",
|
|
145
|
-
quality.get("typecheck", True)
|
|
146
|
-
)
|
|
147
|
-
|
|
148
|
-
# Format
|
|
149
|
-
quality["format"] = prompt_bool(
|
|
150
|
-
" Enable formatting",
|
|
151
|
-
quality.get("format", True)
|
|
152
|
-
)
|
|
153
|
-
|
|
154
|
-
lang["quality"] = quality
|
|
155
|
-
|
|
156
|
-
config["languages"][lang_key] = lang
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
def edit_infrastructure(config: dict) -> None:
|
|
160
|
-
"""Edit infrastructure settings."""
|
|
161
|
-
infra = config.get("infrastructure", {})
|
|
162
|
-
|
|
163
|
-
clear_screen()
|
|
164
|
-
print(f"\n{BOLD}{CYAN}═══ Infrastructure Configuration ═══{RESET}\n")
|
|
165
|
-
|
|
166
|
-
# PostgreSQL
|
|
167
|
-
pg = infra.get("postgres", {})
|
|
168
|
-
pg["enabled"] = prompt_bool("Enable PostgreSQL", pg.get("enabled", False))
|
|
169
|
-
if pg["enabled"]:
|
|
170
|
-
pg["version"] = prompt("PostgreSQL version", pg.get("version", "16"))
|
|
171
|
-
infra["postgres"] = pg
|
|
172
|
-
|
|
173
|
-
# Redis
|
|
174
|
-
redis = infra.get("redis", {})
|
|
175
|
-
redis["enabled"] = prompt_bool("Enable Redis", redis.get("enabled", False))
|
|
176
|
-
if redis["enabled"]:
|
|
177
|
-
redis["version"] = prompt("Redis version", redis.get("version", "7"))
|
|
178
|
-
infra["redis"] = redis
|
|
179
|
-
|
|
180
|
-
config["infrastructure"] = infra
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
def main_menu(config: dict) -> bool:
|
|
184
|
-
"""Main configuration menu. Returns True to continue, False to exit."""
|
|
185
|
-
clear_screen()
|
|
186
|
-
|
|
187
|
-
project_name = config.get("project", {}).get("name", "unknown")
|
|
188
|
-
languages = config.get("languages", {})
|
|
189
|
-
|
|
190
|
-
print(f"\n{BOLD}{CYAN}═══ Project Configuration: {project_name} ═══{RESET}\n")
|
|
191
|
-
print(f"Config file: {CONFIG_FILE}\n")
|
|
192
|
-
|
|
193
|
-
# Show current state summary
|
|
194
|
-
print(f"{BOLD}Current settings:{RESET}")
|
|
195
|
-
for lang_key, lang_name in [("python", "Python"), ("go", "Go"), ("node", "Node.js"), ("rust", "Rust")]:
|
|
196
|
-
lang = languages.get(lang_key, {})
|
|
197
|
-
if lang.get("enabled"):
|
|
198
|
-
cov = lang.get("quality", {}).get("coverage", 0)
|
|
199
|
-
print(f" {GREEN}✓{RESET} {lang_name} {lang.get('version', '')} (cov: {cov}%)")
|
|
200
|
-
else:
|
|
201
|
-
print(f" {DIM}✗ {lang_name}{RESET}")
|
|
202
|
-
|
|
203
|
-
precommit = config.get("precommit", False)
|
|
204
|
-
print(f"\n Pre-commit: {GREEN}enabled{RESET}" if precommit else f"\n Pre-commit: {DIM}disabled{RESET}")
|
|
205
|
-
|
|
206
|
-
print(f"\n{BOLD}Menu:{RESET}")
|
|
207
|
-
print(f" 1. Edit {CYAN}Python{RESET} settings")
|
|
208
|
-
print(f" 2. Edit {CYAN}Go{RESET} settings")
|
|
209
|
-
print(f" 3. Edit {CYAN}Node.js{RESET} settings")
|
|
210
|
-
print(f" 4. Edit {CYAN}Rust{RESET} settings")
|
|
211
|
-
print(f" 5. Edit {CYAN}Infrastructure{RESET} (Postgres, Redis)")
|
|
212
|
-
print(f" 6. Toggle {CYAN}Pre-commit{RESET} hooks")
|
|
213
|
-
print(f" 7. Edit {CYAN}Project{RESET} name/description")
|
|
214
|
-
print()
|
|
215
|
-
print(f" {GREEN}s{RESET}. Save and exit")
|
|
216
|
-
print(f" {RED}q{RESET}. Quit without saving")
|
|
217
|
-
|
|
218
|
-
choice = input("\nChoice: ").strip().lower()
|
|
219
|
-
|
|
220
|
-
if choice == "1":
|
|
221
|
-
edit_language(config, "python", "Python")
|
|
222
|
-
elif choice == "2":
|
|
223
|
-
edit_language(config, "go", "Go")
|
|
224
|
-
elif choice == "3":
|
|
225
|
-
edit_language(config, "node", "Node.js")
|
|
226
|
-
elif choice == "4":
|
|
227
|
-
edit_language(config, "rust", "Rust")
|
|
228
|
-
elif choice == "5":
|
|
229
|
-
edit_infrastructure(config)
|
|
230
|
-
elif choice == "6":
|
|
231
|
-
config["precommit"] = not config.get("precommit", False)
|
|
232
|
-
status = "enabled" if config["precommit"] else "disabled"
|
|
233
|
-
print(f"\n{GREEN}Pre-commit hooks {status}{RESET}")
|
|
234
|
-
input("Press Enter to continue...")
|
|
235
|
-
elif choice == "7":
|
|
236
|
-
clear_screen()
|
|
237
|
-
print(f"\n{BOLD}{CYAN}═══ Project Settings ═══{RESET}\n")
|
|
238
|
-
project = config.get("project", {})
|
|
239
|
-
project["name"] = prompt("Project name", project.get("name", "my-project"))
|
|
240
|
-
project["description"] = prompt("Project description", project.get("description", ""))
|
|
241
|
-
config["project"] = project
|
|
242
|
-
elif choice == "s":
|
|
243
|
-
save_config(config)
|
|
244
|
-
print(f"\n{GREEN}Configuration saved to {CONFIG_FILE}{RESET}")
|
|
245
|
-
return False
|
|
246
|
-
elif choice == "q":
|
|
247
|
-
print(f"\n{YELLOW}Changes discarded{RESET}")
|
|
248
|
-
return False
|
|
249
|
-
|
|
250
|
-
return True
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
def main() -> int:
|
|
254
|
-
"""CLI entry point."""
|
|
255
|
-
if not HAS_YAML:
|
|
256
|
-
print(f"{RED}Error: PyYAML is required for config editing{RESET}")
|
|
257
|
-
print("Install with: pip install pyyaml")
|
|
258
|
-
return 1
|
|
259
|
-
|
|
260
|
-
# Check if running in a terminal
|
|
261
|
-
if not sys.stdin.isatty():
|
|
262
|
-
print(f"{RED}Error: Interactive mode requires a terminal{RESET}")
|
|
263
|
-
return 1
|
|
264
|
-
|
|
265
|
-
config = load_config()
|
|
266
|
-
|
|
267
|
-
# Main loop
|
|
268
|
-
while main_menu(config):
|
|
269
|
-
pass
|
|
270
|
-
|
|
271
|
-
return 0
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
if __name__ == "__main__":
|
|
275
|
-
sys.exit(main())
|