specweave 0.3.13 → 0.4.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/CLAUDE.md +506 -17
- package/README.md +100 -58
- package/bin/install-all.sh +9 -2
- package/bin/install-hooks.sh +57 -0
- package/bin/specweave.js +16 -0
- package/dist/adapters/adapter-base.d.ts +21 -0
- package/dist/adapters/adapter-base.d.ts.map +1 -1
- package/dist/adapters/adapter-base.js +28 -0
- package/dist/adapters/adapter-base.js.map +1 -1
- package/dist/adapters/adapter-interface.d.ts +41 -0
- package/dist/adapters/adapter-interface.d.ts.map +1 -1
- package/dist/adapters/claude/adapter.d.ts +36 -0
- package/dist/adapters/claude/adapter.d.ts.map +1 -1
- package/dist/adapters/claude/adapter.js +135 -0
- package/dist/adapters/claude/adapter.js.map +1 -1
- package/dist/adapters/copilot/adapter.d.ts +25 -0
- package/dist/adapters/copilot/adapter.d.ts.map +1 -1
- package/dist/adapters/copilot/adapter.js +112 -0
- package/dist/adapters/copilot/adapter.js.map +1 -1
- package/dist/adapters/cursor/adapter.d.ts +36 -0
- package/dist/adapters/cursor/adapter.d.ts.map +1 -1
- package/dist/adapters/cursor/adapter.js +140 -0
- package/dist/adapters/cursor/adapter.js.map +1 -1
- package/dist/adapters/generic/adapter.d.ts +25 -0
- package/dist/adapters/generic/adapter.d.ts.map +1 -1
- package/dist/adapters/generic/adapter.js +111 -0
- package/dist/adapters/generic/adapter.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +103 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/plugin.d.ts +37 -0
- package/dist/cli/commands/plugin.d.ts.map +1 -0
- package/dist/cli/commands/plugin.js +296 -0
- package/dist/cli/commands/plugin.js.map +1 -0
- package/dist/core/agent-model-manager.d.ts +52 -0
- package/dist/core/agent-model-manager.d.ts.map +1 -0
- package/dist/core/agent-model-manager.js +120 -0
- package/dist/core/agent-model-manager.js.map +1 -0
- package/dist/core/cost-tracker.d.ts +108 -0
- package/dist/core/cost-tracker.d.ts.map +1 -0
- package/dist/core/cost-tracker.js +281 -0
- package/dist/core/cost-tracker.js.map +1 -0
- package/dist/core/model-selector.d.ts +57 -0
- package/dist/core/model-selector.d.ts.map +1 -0
- package/dist/core/model-selector.js +115 -0
- package/dist/core/model-selector.js.map +1 -0
- package/dist/core/phase-detector.d.ts +62 -0
- package/dist/core/phase-detector.d.ts.map +1 -0
- package/dist/core/phase-detector.js +229 -0
- package/dist/core/phase-detector.js.map +1 -0
- package/dist/core/plugin-detector.d.ts +96 -0
- package/dist/core/plugin-detector.d.ts.map +1 -0
- package/dist/core/plugin-detector.js +349 -0
- package/dist/core/plugin-detector.js.map +1 -0
- package/dist/core/plugin-loader.d.ts +111 -0
- package/dist/core/plugin-loader.d.ts.map +1 -0
- package/dist/core/plugin-loader.js +319 -0
- package/dist/core/plugin-loader.js.map +1 -0
- package/dist/core/plugin-manager.d.ts +144 -0
- package/dist/core/plugin-manager.d.ts.map +1 -0
- package/dist/core/plugin-manager.js +393 -0
- package/dist/core/plugin-manager.js.map +1 -0
- package/dist/core/schemas/plugin-manifest.schema.json +253 -0
- package/dist/core/types/plugin.d.ts +252 -0
- package/dist/core/types/plugin.d.ts.map +1 -0
- package/dist/core/types/plugin.js +48 -0
- package/dist/core/types/plugin.js.map +1 -0
- package/dist/integrations/jira/jira-mapper.d.ts +2 -2
- package/dist/integrations/jira/jira-mapper.js +2 -2
- package/dist/types/cost-tracking.d.ts +43 -0
- package/dist/types/cost-tracking.d.ts.map +1 -0
- package/dist/types/cost-tracking.js +8 -0
- package/dist/types/cost-tracking.js.map +1 -0
- package/dist/types/model-selection.d.ts +53 -0
- package/dist/types/model-selection.d.ts.map +1 -0
- package/dist/types/model-selection.js +12 -0
- package/dist/types/model-selection.js.map +1 -0
- package/dist/utils/cost-reporter.d.ts +58 -0
- package/dist/utils/cost-reporter.d.ts.map +1 -0
- package/dist/utils/cost-reporter.js +224 -0
- package/dist/utils/cost-reporter.js.map +1 -0
- package/dist/utils/pricing-constants.d.ts +70 -0
- package/dist/utils/pricing-constants.d.ts.map +1 -0
- package/dist/utils/pricing-constants.js +71 -0
- package/dist/utils/pricing-constants.js.map +1 -0
- package/package.json +13 -9
- package/src/adapters/adapter-base.ts +33 -0
- package/src/adapters/adapter-interface.ts +46 -0
- package/src/adapters/claude/adapter.ts +164 -0
- package/src/adapters/copilot/adapter.ts +138 -0
- package/src/adapters/cursor/adapter.ts +170 -0
- package/src/adapters/generic/adapter.ts +137 -0
- package/src/agents/architect/AGENT.md +3 -0
- package/src/agents/code-reviewer.md +156 -0
- package/src/agents/data-scientist/AGENT.md +181 -0
- package/src/agents/database-optimizer/AGENT.md +147 -0
- package/src/agents/devops/AGENT.md +3 -0
- package/src/agents/diagrams-architect/AGENT.md +3 -0
- package/src/agents/docs-writer/AGENT.md +3 -0
- package/src/agents/kubernetes-architect/AGENT.md +142 -0
- package/src/agents/ml-engineer/AGENT.md +150 -0
- package/src/agents/mlops-engineer/AGENT.md +201 -0
- package/src/agents/network-engineer/AGENT.md +149 -0
- package/src/agents/observability-engineer/AGENT.md +213 -0
- package/src/agents/payment-integration/AGENT.md +35 -0
- package/src/agents/performance/AGENT.md +3 -0
- package/src/agents/performance-engineer/AGENT.md +153 -0
- package/src/agents/pm/AGENT.md +3 -0
- package/src/agents/qa-lead/AGENT.md +3 -0
- package/src/agents/security/AGENT.md +3 -0
- package/src/agents/sre/AGENT.md +3 -0
- package/src/agents/tdd-orchestrator/AGENT.md +169 -0
- package/src/agents/tech-lead/AGENT.md +3 -0
- package/src/commands/specweave.costs.md +261 -0
- package/src/commands/specweave.increment.md +48 -4
- package/src/commands/specweave.ml-pipeline.md +292 -0
- package/src/commands/specweave.monitor-setup.md +501 -0
- package/src/commands/specweave.slo-implement.md +1055 -0
- package/src/commands/specweave.sync-github.md +1 -1
- package/src/commands/specweave.tdd-cycle.md +199 -0
- package/src/commands/specweave.tdd-green.md +842 -0
- package/src/commands/specweave.tdd-red.md +135 -0
- package/src/commands/specweave.tdd-refactor.md +165 -0
- package/src/hooks/post-increment-plugin-detect.sh +142 -0
- package/src/hooks/post-task-completion.sh +53 -11
- package/src/hooks/pre-task-plugin-detect.sh +96 -0
- package/src/skills/SKILLS-INDEX.md +18 -10
- package/src/skills/billing-automation/SKILL.md +559 -0
- package/src/skills/distributed-tracing/SKILL.md +438 -0
- package/src/skills/e2e-playwright/README.md +1 -1
- package/src/skills/e2e-playwright/package.json +1 -1
- package/src/skills/gitops-workflow/SKILL.md +285 -0
- package/src/skills/gitops-workflow/references/argocd-setup.md +134 -0
- package/src/skills/gitops-workflow/references/sync-policies.md +131 -0
- package/src/skills/grafana-dashboards/SKILL.md +369 -0
- package/src/skills/helm-chart-scaffolding/SKILL.md +544 -0
- package/src/skills/helm-chart-scaffolding/assets/Chart.yaml.template +42 -0
- package/src/skills/helm-chart-scaffolding/assets/values.yaml.template +185 -0
- package/src/skills/helm-chart-scaffolding/references/chart-structure.md +500 -0
- package/src/skills/helm-chart-scaffolding/scripts/validate-chart.sh +244 -0
- package/src/skills/k8s-manifest-generator/SKILL.md +511 -0
- package/src/skills/k8s-manifest-generator/assets/configmap-template.yaml +296 -0
- package/src/skills/k8s-manifest-generator/assets/deployment-template.yaml +203 -0
- package/src/skills/k8s-manifest-generator/assets/service-template.yaml +171 -0
- package/src/skills/k8s-manifest-generator/references/deployment-spec.md +753 -0
- package/src/skills/k8s-manifest-generator/references/service-spec.md +724 -0
- package/src/skills/k8s-security-policies/SKILL.md +334 -0
- package/src/skills/k8s-security-policies/assets/network-policy-template.yaml +177 -0
- package/src/skills/k8s-security-policies/references/rbac-patterns.md +187 -0
- package/src/skills/ml-pipeline-workflow/SKILL.md +245 -0
- package/src/skills/paypal-integration/SKILL.md +467 -0
- package/src/skills/pci-compliance/SKILL.md +466 -0
- package/src/skills/prometheus-configuration/SKILL.md +392 -0
- package/src/skills/slo-implementation/SKILL.md +329 -0
- package/src/skills/stripe-integration/SKILL.md +442 -0
- package/src/skills/tdd-workflow/SKILL.md +378 -0
- package/src/templates/README.md.template +1 -1
- package/src/skills/bmad-method-expert/SKILL.md +0 -626
- package/src/skills/bmad-method-expert/scripts/analyze-project.js +0 -318
- package/src/skills/bmad-method-expert/scripts/check-setup.js +0 -208
- package/src/skills/bmad-method-expert/scripts/generate-template.js +0 -1149
- package/src/skills/bmad-method-expert/scripts/validate-documents.js +0 -340
- package/src/skills/context-optimizer/SKILL.md +0 -588
- package/src/skills/figma-designer/SKILL.md +0 -149
- package/src/skills/figma-implementer/SKILL.md +0 -148
- package/src/skills/figma-mcp-connector/SKILL.md +0 -136
- package/src/skills/figma-to-code/SKILL.md +0 -128
- package/src/skills/spec-kit-expert/SKILL.md +0 -1010
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
set -e
|
|
3
|
+
|
|
4
|
+
CHART_DIR="${1:-.}"
|
|
5
|
+
RELEASE_NAME="test-release"
|
|
6
|
+
|
|
7
|
+
echo "═══════════════════════════════════════════════════════"
|
|
8
|
+
echo " Helm Chart Validation"
|
|
9
|
+
echo "═══════════════════════════════════════════════════════"
|
|
10
|
+
echo ""
|
|
11
|
+
|
|
12
|
+
# Colors
|
|
13
|
+
GREEN='\033[0;32m'
|
|
14
|
+
YELLOW='\033[1;33m'
|
|
15
|
+
RED='\033[0;31m'
|
|
16
|
+
NC='\033[0m' # No Color
|
|
17
|
+
|
|
18
|
+
success() {
|
|
19
|
+
echo -e "${GREEN}✓${NC} $1"
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
warning() {
|
|
23
|
+
echo -e "${YELLOW}⚠${NC} $1"
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
error() {
|
|
27
|
+
echo -e "${RED}✗${NC} $1"
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
# Check if Helm is installed
|
|
31
|
+
if ! command -v helm &> /dev/null; then
|
|
32
|
+
error "Helm is not installed"
|
|
33
|
+
exit 1
|
|
34
|
+
fi
|
|
35
|
+
|
|
36
|
+
echo "📦 Chart directory: $CHART_DIR"
|
|
37
|
+
echo ""
|
|
38
|
+
|
|
39
|
+
# 1. Check chart structure
|
|
40
|
+
echo "1️⃣ Checking chart structure..."
|
|
41
|
+
if [ ! -f "$CHART_DIR/Chart.yaml" ]; then
|
|
42
|
+
error "Chart.yaml not found"
|
|
43
|
+
exit 1
|
|
44
|
+
fi
|
|
45
|
+
success "Chart.yaml exists"
|
|
46
|
+
|
|
47
|
+
if [ ! -f "$CHART_DIR/values.yaml" ]; then
|
|
48
|
+
error "values.yaml not found"
|
|
49
|
+
exit 1
|
|
50
|
+
fi
|
|
51
|
+
success "values.yaml exists"
|
|
52
|
+
|
|
53
|
+
if [ ! -d "$CHART_DIR/templates" ]; then
|
|
54
|
+
error "templates/ directory not found"
|
|
55
|
+
exit 1
|
|
56
|
+
fi
|
|
57
|
+
success "templates/ directory exists"
|
|
58
|
+
echo ""
|
|
59
|
+
|
|
60
|
+
# 2. Lint the chart
|
|
61
|
+
echo "2️⃣ Linting chart..."
|
|
62
|
+
if helm lint "$CHART_DIR"; then
|
|
63
|
+
success "Chart passed lint"
|
|
64
|
+
else
|
|
65
|
+
error "Chart failed lint"
|
|
66
|
+
exit 1
|
|
67
|
+
fi
|
|
68
|
+
echo ""
|
|
69
|
+
|
|
70
|
+
# 3. Check Chart.yaml
|
|
71
|
+
echo "3️⃣ Validating Chart.yaml..."
|
|
72
|
+
CHART_NAME=$(grep "^name:" "$CHART_DIR/Chart.yaml" | awk '{print $2}')
|
|
73
|
+
CHART_VERSION=$(grep "^version:" "$CHART_DIR/Chart.yaml" | awk '{print $2}')
|
|
74
|
+
APP_VERSION=$(grep "^appVersion:" "$CHART_DIR/Chart.yaml" | awk '{print $2}' | tr -d '"')
|
|
75
|
+
|
|
76
|
+
if [ -z "$CHART_NAME" ]; then
|
|
77
|
+
error "Chart name not found"
|
|
78
|
+
exit 1
|
|
79
|
+
fi
|
|
80
|
+
success "Chart name: $CHART_NAME"
|
|
81
|
+
|
|
82
|
+
if [ -z "$CHART_VERSION" ]; then
|
|
83
|
+
error "Chart version not found"
|
|
84
|
+
exit 1
|
|
85
|
+
fi
|
|
86
|
+
success "Chart version: $CHART_VERSION"
|
|
87
|
+
|
|
88
|
+
if [ -z "$APP_VERSION" ]; then
|
|
89
|
+
warning "App version not specified"
|
|
90
|
+
else
|
|
91
|
+
success "App version: $APP_VERSION"
|
|
92
|
+
fi
|
|
93
|
+
echo ""
|
|
94
|
+
|
|
95
|
+
# 4. Test template rendering
|
|
96
|
+
echo "4️⃣ Testing template rendering..."
|
|
97
|
+
if helm template "$RELEASE_NAME" "$CHART_DIR" > /dev/null 2>&1; then
|
|
98
|
+
success "Templates rendered successfully"
|
|
99
|
+
else
|
|
100
|
+
error "Template rendering failed"
|
|
101
|
+
helm template "$RELEASE_NAME" "$CHART_DIR"
|
|
102
|
+
exit 1
|
|
103
|
+
fi
|
|
104
|
+
echo ""
|
|
105
|
+
|
|
106
|
+
# 5. Dry-run installation
|
|
107
|
+
echo "5️⃣ Testing dry-run installation..."
|
|
108
|
+
if helm install "$RELEASE_NAME" "$CHART_DIR" --dry-run --debug > /dev/null 2>&1; then
|
|
109
|
+
success "Dry-run installation successful"
|
|
110
|
+
else
|
|
111
|
+
error "Dry-run installation failed"
|
|
112
|
+
exit 1
|
|
113
|
+
fi
|
|
114
|
+
echo ""
|
|
115
|
+
|
|
116
|
+
# 6. Check for required Kubernetes resources
|
|
117
|
+
echo "6️⃣ Checking generated resources..."
|
|
118
|
+
MANIFESTS=$(helm template "$RELEASE_NAME" "$CHART_DIR")
|
|
119
|
+
|
|
120
|
+
if echo "$MANIFESTS" | grep -q "kind: Deployment"; then
|
|
121
|
+
success "Deployment found"
|
|
122
|
+
else
|
|
123
|
+
warning "No Deployment found"
|
|
124
|
+
fi
|
|
125
|
+
|
|
126
|
+
if echo "$MANIFESTS" | grep -q "kind: Service"; then
|
|
127
|
+
success "Service found"
|
|
128
|
+
else
|
|
129
|
+
warning "No Service found"
|
|
130
|
+
fi
|
|
131
|
+
|
|
132
|
+
if echo "$MANIFESTS" | grep -q "kind: ServiceAccount"; then
|
|
133
|
+
success "ServiceAccount found"
|
|
134
|
+
else
|
|
135
|
+
warning "No ServiceAccount found"
|
|
136
|
+
fi
|
|
137
|
+
echo ""
|
|
138
|
+
|
|
139
|
+
# 7. Check for security best practices
|
|
140
|
+
echo "7️⃣ Checking security best practices..."
|
|
141
|
+
if echo "$MANIFESTS" | grep -q "runAsNonRoot: true"; then
|
|
142
|
+
success "Running as non-root user"
|
|
143
|
+
else
|
|
144
|
+
warning "Not explicitly running as non-root"
|
|
145
|
+
fi
|
|
146
|
+
|
|
147
|
+
if echo "$MANIFESTS" | grep -q "readOnlyRootFilesystem: true"; then
|
|
148
|
+
success "Using read-only root filesystem"
|
|
149
|
+
else
|
|
150
|
+
warning "Not using read-only root filesystem"
|
|
151
|
+
fi
|
|
152
|
+
|
|
153
|
+
if echo "$MANIFESTS" | grep -q "allowPrivilegeEscalation: false"; then
|
|
154
|
+
success "Privilege escalation disabled"
|
|
155
|
+
else
|
|
156
|
+
warning "Privilege escalation not explicitly disabled"
|
|
157
|
+
fi
|
|
158
|
+
echo ""
|
|
159
|
+
|
|
160
|
+
# 8. Check for resource limits
|
|
161
|
+
echo "8️⃣ Checking resource configuration..."
|
|
162
|
+
if echo "$MANIFESTS" | grep -q "resources:"; then
|
|
163
|
+
if echo "$MANIFESTS" | grep -q "limits:"; then
|
|
164
|
+
success "Resource limits defined"
|
|
165
|
+
else
|
|
166
|
+
warning "No resource limits defined"
|
|
167
|
+
fi
|
|
168
|
+
if echo "$MANIFESTS" | grep -q "requests:"; then
|
|
169
|
+
success "Resource requests defined"
|
|
170
|
+
else
|
|
171
|
+
warning "No resource requests defined"
|
|
172
|
+
fi
|
|
173
|
+
else
|
|
174
|
+
warning "No resources defined"
|
|
175
|
+
fi
|
|
176
|
+
echo ""
|
|
177
|
+
|
|
178
|
+
# 9. Check for health probes
|
|
179
|
+
echo "9️⃣ Checking health probes..."
|
|
180
|
+
if echo "$MANIFESTS" | grep -q "livenessProbe:"; then
|
|
181
|
+
success "Liveness probe configured"
|
|
182
|
+
else
|
|
183
|
+
warning "No liveness probe found"
|
|
184
|
+
fi
|
|
185
|
+
|
|
186
|
+
if echo "$MANIFESTS" | grep -q "readinessProbe:"; then
|
|
187
|
+
success "Readiness probe configured"
|
|
188
|
+
else
|
|
189
|
+
warning "No readiness probe found"
|
|
190
|
+
fi
|
|
191
|
+
echo ""
|
|
192
|
+
|
|
193
|
+
# 10. Check dependencies
|
|
194
|
+
if [ -f "$CHART_DIR/Chart.yaml" ] && grep -q "^dependencies:" "$CHART_DIR/Chart.yaml"; then
|
|
195
|
+
echo "🔟 Checking dependencies..."
|
|
196
|
+
if helm dependency list "$CHART_DIR" > /dev/null 2>&1; then
|
|
197
|
+
success "Dependencies valid"
|
|
198
|
+
|
|
199
|
+
if [ -f "$CHART_DIR/Chart.lock" ]; then
|
|
200
|
+
success "Chart.lock file present"
|
|
201
|
+
else
|
|
202
|
+
warning "Chart.lock file missing (run 'helm dependency update')"
|
|
203
|
+
fi
|
|
204
|
+
else
|
|
205
|
+
error "Dependencies check failed"
|
|
206
|
+
fi
|
|
207
|
+
echo ""
|
|
208
|
+
fi
|
|
209
|
+
|
|
210
|
+
# 11. Check for values schema
|
|
211
|
+
if [ -f "$CHART_DIR/values.schema.json" ]; then
|
|
212
|
+
echo "1️⃣1️⃣ Validating values schema..."
|
|
213
|
+
success "values.schema.json present"
|
|
214
|
+
|
|
215
|
+
# Validate schema if jq is available
|
|
216
|
+
if command -v jq &> /dev/null; then
|
|
217
|
+
if jq empty "$CHART_DIR/values.schema.json" 2>/dev/null; then
|
|
218
|
+
success "values.schema.json is valid JSON"
|
|
219
|
+
else
|
|
220
|
+
error "values.schema.json contains invalid JSON"
|
|
221
|
+
exit 1
|
|
222
|
+
fi
|
|
223
|
+
fi
|
|
224
|
+
echo ""
|
|
225
|
+
fi
|
|
226
|
+
|
|
227
|
+
# Summary
|
|
228
|
+
echo "═══════════════════════════════════════════════════════"
|
|
229
|
+
echo " Validation Complete!"
|
|
230
|
+
echo "═══════════════════════════════════════════════════════"
|
|
231
|
+
echo ""
|
|
232
|
+
echo "Chart: $CHART_NAME"
|
|
233
|
+
echo "Version: $CHART_VERSION"
|
|
234
|
+
if [ -n "$APP_VERSION" ]; then
|
|
235
|
+
echo "App Version: $APP_VERSION"
|
|
236
|
+
fi
|
|
237
|
+
echo ""
|
|
238
|
+
success "All validations passed!"
|
|
239
|
+
echo ""
|
|
240
|
+
echo "Next steps:"
|
|
241
|
+
echo " • helm package $CHART_DIR"
|
|
242
|
+
echo " • helm install my-release $CHART_DIR"
|
|
243
|
+
echo " • helm test my-release"
|
|
244
|
+
echo ""
|