specweave 0.23.16 → 0.24.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/.claude-plugin/marketplace.json +93 -38
- package/CLAUDE.md +159 -11
- package/dist/plugins/specweave-github/lib/github-spec-content-sync.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/github-spec-content-sync.js +57 -0
- package/dist/plugins/specweave-github/lib/github-spec-content-sync.js.map +1 -1
- package/dist/src/cli/commands/sync-spec-content.js +3 -0
- package/dist/src/cli/commands/sync-spec-content.js.map +1 -1
- package/dist/src/cli/helpers/ado-area-path-mapper.d.ts +89 -0
- package/dist/src/cli/helpers/ado-area-path-mapper.d.ts.map +1 -0
- package/dist/src/cli/helpers/ado-area-path-mapper.js +213 -0
- package/dist/src/cli/helpers/ado-area-path-mapper.js.map +1 -0
- package/dist/src/cli/helpers/issue-tracker/ado-auto-discover.d.ts +29 -0
- package/dist/src/cli/helpers/issue-tracker/ado-auto-discover.d.ts.map +1 -0
- package/dist/src/cli/helpers/issue-tracker/ado-auto-discover.js +109 -0
- package/dist/src/cli/helpers/issue-tracker/ado-auto-discover.js.map +1 -0
- package/dist/src/cli/helpers/issue-tracker/ado.d.ts +1 -0
- package/dist/src/cli/helpers/issue-tracker/ado.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/ado.js +2 -0
- package/dist/src/cli/helpers/issue-tracker/ado.js.map +1 -1
- package/dist/src/cli/helpers/smart-filter.d.ts +83 -0
- package/dist/src/cli/helpers/smart-filter.d.ts.map +1 -0
- package/dist/src/cli/helpers/smart-filter.js +265 -0
- package/dist/src/cli/helpers/smart-filter.js.map +1 -0
- package/dist/src/core/progress/progress-tracker.d.ts +4 -1
- package/dist/src/core/progress/progress-tracker.d.ts.map +1 -1
- package/dist/src/core/progress/progress-tracker.js +33 -4
- package/dist/src/core/progress/progress-tracker.js.map +1 -1
- package/dist/src/core/qa/quality-gate-decider.d.ts +1 -1
- package/dist/src/core/qa/quality-gate-decider.js +2 -2
- package/dist/src/core/qa/quality-gate-decider.js.map +1 -1
- package/dist/src/core/qa/risk-calculator.d.ts +2 -2
- package/dist/src/core/qa/risk-calculator.js +2 -2
- package/dist/src/core/spec-content-sync.d.ts +1 -1
- package/dist/src/core/spec-content-sync.d.ts.map +1 -1
- package/dist/src/core/validators/ac-presence-validator.d.ts +56 -0
- package/dist/src/core/validators/ac-presence-validator.d.ts.map +1 -0
- package/dist/src/core/validators/ac-presence-validator.js +149 -0
- package/dist/src/core/validators/ac-presence-validator.js.map +1 -0
- package/dist/src/integrations/ado/ado-dependency-loader.d.ts +1 -1
- package/dist/src/integrations/ado/ado-dependency-loader.d.ts.map +1 -1
- package/dist/src/integrations/ado/ado-dependency-loader.js +39 -7
- package/dist/src/integrations/ado/ado-dependency-loader.js.map +1 -1
- package/dist/src/integrations/ado/area-path-mapper.d.ts +137 -0
- package/dist/src/integrations/ado/area-path-mapper.d.ts.map +1 -0
- package/dist/src/integrations/ado/area-path-mapper.js +267 -0
- package/dist/src/integrations/ado/area-path-mapper.js.map +1 -0
- package/dist/src/integrations/jira/filter-processor.d.ts +126 -0
- package/dist/src/integrations/jira/filter-processor.d.ts.map +1 -0
- package/dist/src/integrations/jira/filter-processor.js +207 -0
- package/dist/src/integrations/jira/filter-processor.js.map +1 -0
- package/dist/src/integrations/jira/jira-client.d.ts +13 -0
- package/dist/src/integrations/jira/jira-client.d.ts.map +1 -1
- package/dist/src/integrations/jira/jira-client.js +33 -0
- package/dist/src/integrations/jira/jira-client.js.map +1 -1
- package/dist/src/utils/ac-embedder.d.ts +63 -0
- package/dist/src/utils/ac-embedder.d.ts.map +1 -0
- package/dist/src/utils/ac-embedder.js +217 -0
- package/dist/src/utils/ac-embedder.js.map +1 -0
- package/dist/src/utils/env-manager.d.ts +86 -0
- package/dist/src/utils/env-manager.d.ts.map +1 -0
- package/dist/src/utils/env-manager.js +188 -0
- package/dist/src/utils/env-manager.js.map +1 -0
- package/package.json +1 -1
- package/plugins/specweave/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave/agents/AGENTS-INDEX.md +1 -1
- package/plugins/specweave/agents/increment-quality-judge-v2/AGENT.md +9 -9
- package/plugins/specweave/commands/specweave-do.md +37 -0
- package/plugins/specweave/commands/specweave-done.md +159 -0
- package/plugins/specweave/commands/specweave-embed-acs.md +446 -0
- package/plugins/specweave/commands/specweave-next.md +148 -3
- package/plugins/specweave/commands/specweave-qa.md +2 -2
- package/plugins/specweave/hooks/lib/migrate-increment-work.sh +1 -1
- package/plugins/specweave/hooks/lib/migrate-increment-work.sh.bak +245 -0
- package/plugins/specweave/hooks/lib/sync-spec-content.sh +2 -2
- package/plugins/specweave/hooks/lib/sync-spec-content.sh.bak +149 -0
- package/plugins/specweave/hooks/lib/update-status-line.sh +34 -4
- package/plugins/specweave/hooks/lib/validate-spec-status.sh +1 -1
- package/plugins/specweave/hooks/lib/validate-spec-status.sh.bak +163 -0
- package/plugins/specweave/hooks/post-first-increment.sh +1 -1
- package/plugins/specweave/hooks/post-first-increment.sh.bak +61 -0
- package/plugins/specweave/hooks/post-spec-update.sh +1 -1
- package/plugins/specweave/hooks/post-spec-update.sh.bak +158 -0
- package/plugins/specweave/hooks/post-user-story-complete.sh +1 -1
- package/plugins/specweave/hooks/post-user-story-complete.sh.bak +179 -0
- package/plugins/specweave/hooks/pre-command-deduplication.sh +1 -1
- package/plugins/specweave/hooks/pre-command-deduplication.sh.bak +83 -0
- package/plugins/specweave/hooks/pre-increment-start.sh +168 -0
- package/plugins/specweave/hooks/user-prompt-submit.sh +1 -1
- package/plugins/specweave/hooks/user-prompt-submit.sh.bak +386 -0
- package/plugins/specweave/skills/SKILLS-INDEX.md +1 -1
- package/plugins/specweave/skills/specweave-framework/SKILL.md +1 -1
- package/plugins/specweave-ado/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-ado/agents/ado-manager/AGENT.md +23 -0
- package/plugins/specweave-ado/agents/ado-multi-project-mapper/AGENT.md +23 -0
- package/plugins/specweave-ado/agents/ado-sync-judge/AGENT.md +23 -0
- package/plugins/specweave-ado/commands/specweave-ado-import-projects.md +331 -0
- package/plugins/specweave-alternatives/.claude-plugin/plugin.json +10 -0
- package/plugins/specweave-alternatives/commands/alternatives-analyze.md +336 -0
- package/plugins/specweave-alternatives/skills/architecture-alternatives/SKILL.md +651 -0
- package/plugins/specweave-alternatives/skills/bmad-method/SKILL.md +420 -0
- package/plugins/specweave-alternatives/skills/spec-kit-expert/SKILL.md +487 -0
- package/plugins/specweave-backend/agents/database-optimizer/AGENT.md +23 -0
- package/plugins/specweave-backend/commands/api-scaffold.md +80 -0
- package/plugins/specweave-backend/commands/crud-generate.md +109 -0
- package/plugins/specweave-backend/commands/migration-generate.md +139 -0
- package/plugins/specweave-confluent/agents/confluent-architect/AGENT.md +23 -0
- package/plugins/specweave-confluent/commands/connector-deploy.md +154 -0
- package/plugins/specweave-confluent/commands/ksqldb-query.md +179 -0
- package/plugins/specweave-confluent/commands/schema-register.md +123 -0
- package/plugins/specweave-core/.claude-plugin/plugin.json +21 -0
- package/plugins/specweave-core/commands/architecture-review.md +288 -0
- package/plugins/specweave-core/commands/code-review.md +213 -0
- package/plugins/specweave-core/commands/refactor-plan.md +249 -0
- package/plugins/specweave-core/skills/code-quality/SKILL.md +157 -0
- package/plugins/specweave-core/skills/design-patterns/SKILL.md +244 -0
- package/plugins/specweave-core/skills/software-architecture/SKILL.md +83 -0
- package/plugins/specweave-cost-optimizer/.claude-plugin/plugin.json +22 -0
- package/plugins/specweave-cost-optimizer/commands/cost-analyze.md +360 -0
- package/plugins/specweave-cost-optimizer/commands/cost-optimize.md +480 -0
- package/plugins/specweave-cost-optimizer/skills/aws-cost-expert/SKILL.md +416 -0
- package/plugins/specweave-cost-optimizer/skills/cloud-pricing/SKILL.md +325 -0
- package/plugins/specweave-cost-optimizer/skills/cost-optimization/SKILL.md +337 -0
- package/plugins/specweave-diagrams/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-diagrams/agents/diagrams-architect/AGENT.md +23 -0
- package/plugins/specweave-diagrams/commands/diagrams-generate.md +168 -0
- package/plugins/specweave-docs/.claude-plugin/plugin.json +10 -0
- package/plugins/specweave-docs/commands/docs-generate.md +441 -0
- package/plugins/specweave-docs/commands/docs-init.md +334 -0
- package/plugins/specweave-docs/skills/docusaurus/SKILL.md +581 -0
- package/plugins/specweave-docs/skills/spec-driven-brainstorming/SKILL.md +689 -0
- package/plugins/specweave-docs/skills/technical-writing/SKILL.md +1039 -0
- package/plugins/specweave-docs-preview/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-figma/.claude-plugin/plugin.json +23 -0
- package/plugins/specweave-figma/commands/figma-import.md +690 -0
- package/plugins/specweave-figma/commands/figma-to-react.md +834 -0
- package/plugins/specweave-figma/commands/figma-tokens.md +815 -0
- package/plugins/specweave-frontend/.claude-plugin/plugin.json +21 -0
- package/plugins/specweave-frontend/agents/frontend-architect/AGENT.md +387 -0
- package/plugins/specweave-frontend/agents/frontend-architect/README.md +385 -0
- package/plugins/specweave-frontend/agents/frontend-architect/examples.md +590 -0
- package/plugins/specweave-frontend/agents/frontend-architect/templates/component-template.tsx +152 -0
- package/plugins/specweave-frontend/agents/frontend-architect/templates/hook-template.ts +311 -0
- package/plugins/specweave-frontend/agents/frontend-architect/templates/page-template.tsx +228 -0
- package/plugins/specweave-frontend/commands/component-generate.md +510 -0
- package/plugins/specweave-frontend/commands/design-system-init.md +494 -0
- package/plugins/specweave-frontend/commands/frontend-scaffold.md +207 -0
- package/plugins/specweave-frontend/commands/nextjs-setup.md +396 -0
- package/plugins/specweave-frontend/skills/design-system-architect/SKILL.md +278 -0
- package/plugins/specweave-frontend/skills/frontend/SKILL.md +420 -0
- package/plugins/specweave-frontend/skills/nextjs/SKILL.md +546 -0
- package/plugins/specweave-github/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-github/agents/github-manager/AGENT.md +23 -0
- package/plugins/specweave-github/agents/github-task-splitter/AGENT.md +25 -0
- package/plugins/specweave-github/agents/user-story-updater/AGENT.md +25 -0
- package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +194 -0
- package/plugins/specweave-github/lib/github-spec-content-sync.js +49 -0
- package/plugins/specweave-github/lib/github-spec-content-sync.ts +67 -0
- package/plugins/specweave-infrastructure/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-infrastructure/agents/devops/AGENT.md +26 -0
- package/plugins/specweave-infrastructure/agents/network-engineer/AGENT.md +26 -0
- package/plugins/specweave-infrastructure/agents/observability-engineer/AGENT.md +26 -0
- package/plugins/specweave-infrastructure/agents/performance-engineer/AGENT.md +26 -0
- package/plugins/specweave-infrastructure/agents/sre/AGENT.md +26 -0
- package/plugins/specweave-jira/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-jira/agents/jira-manager/AGENT.md +26 -0
- package/plugins/specweave-jira/commands/import-projects.js +183 -0
- package/plugins/specweave-jira/commands/import-projects.md +97 -0
- package/plugins/specweave-jira/commands/import-projects.ts +288 -0
- package/plugins/specweave-jira/commands/specweave-jira-import-projects.md +298 -0
- package/plugins/specweave-kafka/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-kafka/agents/kafka-architect/AGENT.md +26 -0
- package/plugins/specweave-kafka/agents/kafka-devops/AGENT.md +26 -0
- package/plugins/specweave-kafka/agents/kafka-observability/AGENT.md +26 -0
- package/plugins/specweave-kafka-streams/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-kubernetes/agents/kubernetes-architect/AGENT.md +26 -0
- package/plugins/specweave-kubernetes/commands/cluster-setup.md +262 -0
- package/plugins/specweave-kubernetes/commands/deployment-generate.md +242 -0
- package/plugins/specweave-kubernetes/commands/helm-scaffold.md +333 -0
- package/plugins/specweave-ml/.claude-plugin/plugin.json +3 -3
- package/plugins/specweave-ml/agents/data-scientist/AGENT.md +26 -0
- package/plugins/specweave-ml/agents/ml-engineer/AGENT.md +26 -0
- package/plugins/specweave-ml/agents/mlops-engineer/AGENT.md +26 -0
- package/plugins/specweave-mobile/agents/mobile-architect/AGENT.md +26 -0
- package/plugins/specweave-mobile/commands/app-scaffold.md +233 -0
- package/plugins/specweave-mobile/commands/build-config.md +256 -0
- package/plugins/specweave-mobile/commands/screen-generate.md +289 -0
- package/plugins/specweave-n8n/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-payments/agents/payment-integration/AGENT.md +26 -0
- package/plugins/specweave-plugin-dev/.claude-plugin/plugin.json +20 -0
- package/plugins/specweave-plugin-dev/commands/plugin-create.md +333 -0
- package/plugins/specweave-plugin-dev/commands/plugin-publish.md +339 -0
- package/plugins/specweave-plugin-dev/commands/plugin-test.md +293 -0
- package/plugins/specweave-plugin-dev/skills/claude-sdk/SKILL.md +162 -0
- package/plugins/specweave-plugin-dev/skills/marketplace-publishing/SKILL.md +263 -0
- package/plugins/specweave-plugin-dev/skills/plugin-development/SKILL.md +316 -0
- package/plugins/specweave-release/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-release/agents/release-manager/AGENT.md +27 -0
- package/plugins/specweave-release/commands/specweave-release-npm.md +110 -0
- package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +168 -0
- package/plugins/specweave-testing/.claude-plugin/plugin.json +21 -0
- package/plugins/specweave-testing/agents/qa-engineer/AGENT.md +797 -0
- package/plugins/specweave-testing/agents/qa-engineer/README.md +443 -0
- package/plugins/specweave-testing/agents/qa-engineer/templates/playwright-e2e-test.ts +470 -0
- package/plugins/specweave-testing/agents/qa-engineer/templates/test-data-factory.ts +507 -0
- package/plugins/specweave-testing/agents/qa-engineer/templates/vitest-unit-test.ts +400 -0
- package/plugins/specweave-testing/agents/qa-engineer/test-strategies.md +726 -0
- package/plugins/specweave-testing/commands/e2e-setup.md +1081 -0
- package/plugins/specweave-testing/commands/test-coverage.md +979 -0
- package/plugins/specweave-testing/commands/test-generate.md +1156 -0
- package/plugins/specweave-testing/commands/test-init.md +409 -0
- package/plugins/specweave-testing/skills/e2e-playwright/SKILL.md +769 -0
- package/plugins/specweave-testing/skills/tdd-expert/SKILL.md +934 -0
- package/plugins/specweave-testing/skills/unit-testing-expert/SKILL.md +1011 -0
- package/plugins/specweave-tooling/.claude-plugin/plugin.json +22 -0
- package/plugins/specweave-tooling/commands/specweave-tooling-skill-create.md +691 -0
- package/plugins/specweave-tooling/commands/specweave-tooling-skill-package.md +751 -0
- package/plugins/specweave-tooling/commands/specweave-tooling-skill-validate.md +858 -0
- package/plugins/specweave-ui/.claude-plugin/plugin.json +10 -0
- package/plugins/specweave-ui/commands/ui-automate.md +199 -0
- package/plugins/specweave-ui/commands/ui-inspect.md +70 -0
- package/plugins/specweave-ui/skills/browser-automation/SKILL.md +314 -0
- package/plugins/specweave-ui/skills/ui-testing/SKILL.md +716 -0
- package/plugins/specweave-ui/skills/visual-regression/SKILL.md +728 -0
- package/plugins/specweave/commands/check-hooks.md +0 -257
- package/plugins/specweave/commands/specweave-archive-increments.md +0 -82
- package/plugins/specweave/skills/plugin-expert/SKILL.md +0 -340
- /package/plugins/specweave/{agents/code-reviewer.md → skills/code-reviewer/SKILL.md} +0 -0
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
# Helm Chart Scaffolding
|
|
2
|
+
|
|
3
|
+
Generate production-ready Helm charts with best practices.
|
|
4
|
+
|
|
5
|
+
## Task
|
|
6
|
+
|
|
7
|
+
You are a Helm expert. Generate complete Helm chart structure for applications.
|
|
8
|
+
|
|
9
|
+
### Steps:
|
|
10
|
+
|
|
11
|
+
1. **Ask for Information**:
|
|
12
|
+
- Chart name
|
|
13
|
+
- Application type (web app, API, worker, etc.)
|
|
14
|
+
- Dependencies (databases, caches, etc.)
|
|
15
|
+
|
|
16
|
+
2. **Generate Chart Structure**:
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
my-app/
|
|
20
|
+
├── Chart.yaml
|
|
21
|
+
├── values.yaml
|
|
22
|
+
├── values-dev.yaml
|
|
23
|
+
├── values-staging.yaml
|
|
24
|
+
├── values-prod.yaml
|
|
25
|
+
├── templates/
|
|
26
|
+
│ ├── NOTES.txt
|
|
27
|
+
│ ├── _helpers.tpl
|
|
28
|
+
│ ├── deployment.yaml
|
|
29
|
+
│ ├── service.yaml
|
|
30
|
+
│ ├── ingress.yaml
|
|
31
|
+
│ ├── configmap.yaml
|
|
32
|
+
│ ├── secret.yaml
|
|
33
|
+
│ ├── hpa.yaml
|
|
34
|
+
│ ├── serviceaccount.yaml
|
|
35
|
+
│ ├── networkpolicy.yaml
|
|
36
|
+
│ └── tests/
|
|
37
|
+
│ └── test-connection.yaml
|
|
38
|
+
├── charts/ # Subcharts
|
|
39
|
+
└── .helmignore
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
3. **Generate Chart.yaml**:
|
|
43
|
+
|
|
44
|
+
```yaml
|
|
45
|
+
apiVersion: v2
|
|
46
|
+
name: my-app
|
|
47
|
+
description: A Helm chart for my-app
|
|
48
|
+
type: application
|
|
49
|
+
version: 1.0.0 # Chart version
|
|
50
|
+
appVersion: "1.0.0" # Application version
|
|
51
|
+
|
|
52
|
+
keywords:
|
|
53
|
+
- application
|
|
54
|
+
- api
|
|
55
|
+
|
|
56
|
+
home: https://github.com/myorg/my-app
|
|
57
|
+
sources:
|
|
58
|
+
- https://github.com/myorg/my-app
|
|
59
|
+
|
|
60
|
+
maintainers:
|
|
61
|
+
- name: Your Name
|
|
62
|
+
email: you@example.com
|
|
63
|
+
url: https://example.com
|
|
64
|
+
|
|
65
|
+
dependencies:
|
|
66
|
+
- name: postgresql
|
|
67
|
+
version: "12.x.x"
|
|
68
|
+
repository: https://charts.bitnami.com/bitnami
|
|
69
|
+
condition: postgresql.enabled
|
|
70
|
+
- name: redis
|
|
71
|
+
version: "17.x.x"
|
|
72
|
+
repository: https://charts.bitnami.com/bitnami
|
|
73
|
+
condition: redis.enabled
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
4. **Generate values.yaml**:
|
|
77
|
+
|
|
78
|
+
```yaml
|
|
79
|
+
# Default values for my-app
|
|
80
|
+
# This is a YAML-formatted file
|
|
81
|
+
|
|
82
|
+
replicaCount: 3
|
|
83
|
+
|
|
84
|
+
image:
|
|
85
|
+
repository: myapp
|
|
86
|
+
pullPolicy: IfNotPresent
|
|
87
|
+
tag: "" # Overrides appVersion
|
|
88
|
+
|
|
89
|
+
imagePullSecrets: []
|
|
90
|
+
|
|
91
|
+
nameOverride: ""
|
|
92
|
+
fullnameOverride: ""
|
|
93
|
+
|
|
94
|
+
serviceAccount:
|
|
95
|
+
create: true
|
|
96
|
+
annotations: {}
|
|
97
|
+
name: ""
|
|
98
|
+
|
|
99
|
+
podAnnotations:
|
|
100
|
+
prometheus.io/scrape: "true"
|
|
101
|
+
prometheus.io/port: "8080"
|
|
102
|
+
|
|
103
|
+
podSecurityContext:
|
|
104
|
+
runAsNonRoot: true
|
|
105
|
+
runAsUser: 1000
|
|
106
|
+
fsGroup: 2000
|
|
107
|
+
|
|
108
|
+
securityContext:
|
|
109
|
+
capabilities:
|
|
110
|
+
drop:
|
|
111
|
+
- ALL
|
|
112
|
+
readOnlyRootFilesystem: true
|
|
113
|
+
allowPrivilegeEscalation: false
|
|
114
|
+
|
|
115
|
+
service:
|
|
116
|
+
type: ClusterIP
|
|
117
|
+
port: 80
|
|
118
|
+
targetPort: 8080
|
|
119
|
+
|
|
120
|
+
ingress:
|
|
121
|
+
enabled: true
|
|
122
|
+
className: "nginx"
|
|
123
|
+
annotations:
|
|
124
|
+
cert-manager.io/cluster-issuer: "letsencrypt-prod"
|
|
125
|
+
hosts:
|
|
126
|
+
- host: myapp.example.com
|
|
127
|
+
paths:
|
|
128
|
+
- path: /
|
|
129
|
+
pathType: Prefix
|
|
130
|
+
tls:
|
|
131
|
+
- secretName: myapp-tls
|
|
132
|
+
hosts:
|
|
133
|
+
- myapp.example.com
|
|
134
|
+
|
|
135
|
+
resources:
|
|
136
|
+
limits:
|
|
137
|
+
cpu: 500m
|
|
138
|
+
memory: 512Mi
|
|
139
|
+
requests:
|
|
140
|
+
cpu: 250m
|
|
141
|
+
memory: 256Mi
|
|
142
|
+
|
|
143
|
+
autoscaling:
|
|
144
|
+
enabled: true
|
|
145
|
+
minReplicas: 3
|
|
146
|
+
maxReplicas: 10
|
|
147
|
+
targetCPUUtilizationPercentage: 70
|
|
148
|
+
targetMemoryUtilizationPercentage: 80
|
|
149
|
+
|
|
150
|
+
nodeSelector: {}
|
|
151
|
+
|
|
152
|
+
tolerations: []
|
|
153
|
+
|
|
154
|
+
affinity:
|
|
155
|
+
podAntiAffinity:
|
|
156
|
+
preferredDuringSchedulingIgnoredDuringExecution:
|
|
157
|
+
- weight: 100
|
|
158
|
+
podAffinityTerm:
|
|
159
|
+
labelSelector:
|
|
160
|
+
matchExpressions:
|
|
161
|
+
- key: app.kubernetes.io/name
|
|
162
|
+
operator: In
|
|
163
|
+
values:
|
|
164
|
+
- my-app
|
|
165
|
+
topologyKey: kubernetes.io/hostname
|
|
166
|
+
|
|
167
|
+
# Application-specific configs
|
|
168
|
+
config:
|
|
169
|
+
logLevel: info
|
|
170
|
+
nodeEnv: production
|
|
171
|
+
|
|
172
|
+
# Dependencies
|
|
173
|
+
postgresql:
|
|
174
|
+
enabled: true
|
|
175
|
+
auth:
|
|
176
|
+
database: myapp
|
|
177
|
+
username: myapp
|
|
178
|
+
primary:
|
|
179
|
+
persistence:
|
|
180
|
+
enabled: true
|
|
181
|
+
size: 10Gi
|
|
182
|
+
|
|
183
|
+
redis:
|
|
184
|
+
enabled: true
|
|
185
|
+
architecture: standalone
|
|
186
|
+
auth:
|
|
187
|
+
enabled: true
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
5. **Generate deployment.yaml (templated)**:
|
|
191
|
+
|
|
192
|
+
```yaml
|
|
193
|
+
apiVersion: apps/v1
|
|
194
|
+
kind: Deployment
|
|
195
|
+
metadata:
|
|
196
|
+
name: {{ include "my-app.fullname" . }}
|
|
197
|
+
labels:
|
|
198
|
+
{{- include "my-app.labels" . | nindent 4 }}
|
|
199
|
+
spec:
|
|
200
|
+
{{- if not .Values.autoscaling.enabled }}
|
|
201
|
+
replicas: {{ .Values.replicaCount }}
|
|
202
|
+
{{- end }}
|
|
203
|
+
selector:
|
|
204
|
+
matchLabels:
|
|
205
|
+
{{- include "my-app.selectorLabels" . | nindent 6 }}
|
|
206
|
+
template:
|
|
207
|
+
metadata:
|
|
208
|
+
annotations:
|
|
209
|
+
checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
|
|
210
|
+
{{- with .Values.podAnnotations }}
|
|
211
|
+
{{- toYaml . | nindent 8 }}
|
|
212
|
+
{{- end }}
|
|
213
|
+
labels:
|
|
214
|
+
{{- include "my-app.selectorLabels" . | nindent 8 }}
|
|
215
|
+
spec:
|
|
216
|
+
{{- with .Values.imagePullSecrets }}
|
|
217
|
+
imagePullSecrets:
|
|
218
|
+
{{- toYaml . | nindent 8 }}
|
|
219
|
+
{{- end }}
|
|
220
|
+
serviceAccountName: {{ include "my-app.serviceAccountName" . }}
|
|
221
|
+
securityContext:
|
|
222
|
+
{{- toYaml .Values.podSecurityContext | nindent 8 }}
|
|
223
|
+
containers:
|
|
224
|
+
- name: {{ .Chart.Name }}
|
|
225
|
+
securityContext:
|
|
226
|
+
{{- toYaml .Values.securityContext | nindent 12 }}
|
|
227
|
+
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
|
|
228
|
+
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
|
229
|
+
ports:
|
|
230
|
+
- name: http
|
|
231
|
+
containerPort: {{ .Values.service.targetPort }}
|
|
232
|
+
protocol: TCP
|
|
233
|
+
livenessProbe:
|
|
234
|
+
httpGet:
|
|
235
|
+
path: /health
|
|
236
|
+
port: http
|
|
237
|
+
readinessProbe:
|
|
238
|
+
httpGet:
|
|
239
|
+
path: /ready
|
|
240
|
+
port: http
|
|
241
|
+
resources:
|
|
242
|
+
{{- toYaml .Values.resources | nindent 12 }}
|
|
243
|
+
env:
|
|
244
|
+
- name: NODE_ENV
|
|
245
|
+
value: {{ .Values.config.nodeEnv }}
|
|
246
|
+
- name: LOG_LEVEL
|
|
247
|
+
value: {{ .Values.config.logLevel }}
|
|
248
|
+
{{- if .Values.postgresql.enabled }}
|
|
249
|
+
- name: DB_HOST
|
|
250
|
+
value: {{ include "my-app.fullname" . }}-postgresql
|
|
251
|
+
- name: DB_PASSWORD
|
|
252
|
+
valueFrom:
|
|
253
|
+
secretKeyRef:
|
|
254
|
+
name: {{ include "my-app.fullname" . }}-postgresql
|
|
255
|
+
key: password
|
|
256
|
+
{{- end }}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
6. **Generate _helpers.tpl**:
|
|
260
|
+
|
|
261
|
+
```yaml
|
|
262
|
+
{{/*
|
|
263
|
+
Expand the name of the chart.
|
|
264
|
+
*/}}
|
|
265
|
+
{{- define "my-app.name" -}}
|
|
266
|
+
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
|
|
267
|
+
{{- end }}
|
|
268
|
+
|
|
269
|
+
{{/*
|
|
270
|
+
Create a default fully qualified app name.
|
|
271
|
+
*/}}
|
|
272
|
+
{{- define "my-app.fullname" -}}
|
|
273
|
+
{{- if .Values.fullnameOverride }}
|
|
274
|
+
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
|
|
275
|
+
{{- else }}
|
|
276
|
+
{{- $name := default .Chart.Name .Values.nameOverride }}
|
|
277
|
+
{{- if contains $name .Release.Name }}
|
|
278
|
+
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
|
|
279
|
+
{{- else }}
|
|
280
|
+
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
|
|
281
|
+
{{- end }}
|
|
282
|
+
{{- end }}
|
|
283
|
+
{{- end }}
|
|
284
|
+
|
|
285
|
+
{{/*
|
|
286
|
+
Common labels
|
|
287
|
+
*/}}
|
|
288
|
+
{{- define "my-app.labels" -}}
|
|
289
|
+
helm.sh/chart: {{ include "my-app.chart" . }}
|
|
290
|
+
{{ include "my-app.selectorLabels" . }}
|
|
291
|
+
{{- if .Chart.AppVersion }}
|
|
292
|
+
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
|
293
|
+
{{- end }}
|
|
294
|
+
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
|
295
|
+
{{- end }}
|
|
296
|
+
|
|
297
|
+
{{/*
|
|
298
|
+
Selector labels
|
|
299
|
+
*/}}
|
|
300
|
+
{{- define "my-app.selectorLabels" -}}
|
|
301
|
+
app.kubernetes.io/name: {{ include "my-app.name" . }}
|
|
302
|
+
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
303
|
+
{{- end }}
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
### Deployment Commands:
|
|
307
|
+
|
|
308
|
+
```bash
|
|
309
|
+
# Install chart
|
|
310
|
+
helm install my-app ./my-app -f values-dev.yaml
|
|
311
|
+
|
|
312
|
+
# Upgrade
|
|
313
|
+
helm upgrade my-app ./my-app -f values-prod.yaml
|
|
314
|
+
|
|
315
|
+
# Template (dry-run)
|
|
316
|
+
helm template my-app ./my-app -f values-prod.yaml
|
|
317
|
+
|
|
318
|
+
# Lint
|
|
319
|
+
helm lint ./my-app
|
|
320
|
+
|
|
321
|
+
# Package
|
|
322
|
+
helm package ./my-app
|
|
323
|
+
|
|
324
|
+
# Test
|
|
325
|
+
helm test my-app
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
### Example Usage:
|
|
329
|
+
|
|
330
|
+
```
|
|
331
|
+
User: "Create Helm chart for Node.js API with PostgreSQL"
|
|
332
|
+
Result: Complete Helm chart with all templates and values files
|
|
333
|
+
```
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "specweave-ml",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.24.0",
|
|
4
4
|
"description": "Complete ML/AI workflow integration for SpecWeave - from experiment tracking to production deployment. Includes 13 comprehensive skills covering the full ML lifecycle: pipeline orchestration, experiment tracking, model evaluation, explainability, deployment, feature engineering, AutoML, computer vision, NLP, time series forecasting, anomaly detection, data visualization, and model registry.",
|
|
5
5
|
"author": {
|
|
6
|
-
"name": "
|
|
7
|
-
"email": "
|
|
6
|
+
"name": "Anton Abyzov",
|
|
7
|
+
"email": "anton.abyzov@gmail.com",
|
|
8
8
|
"url": "https://spec-weave.com"
|
|
9
9
|
},
|
|
10
10
|
"homepage": "https://spec-weave.com",
|
|
@@ -9,6 +9,32 @@ fallback_behavior: strict
|
|
|
9
9
|
|
|
10
10
|
You are a data scientist specializing in advanced analytics, machine learning, statistical modeling, and data-driven business insights.
|
|
11
11
|
|
|
12
|
+
## 🚀 How to Invoke This Agent
|
|
13
|
+
|
|
14
|
+
**Subagent Type**: `specweave-ml:data-scientist:data-scientist`
|
|
15
|
+
|
|
16
|
+
**Usage Example**:
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
Task({
|
|
20
|
+
subagent_type: "specweave-ml:data-scientist:data-scientist",
|
|
21
|
+
prompt: "Analyze customer churn patterns and build predictive model to identify at-risk customers",
|
|
22
|
+
model: "haiku" // optional: haiku, sonnet, opus
|
|
23
|
+
});
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**Naming Convention**: `{plugin}:{directory}:{yaml-name-or-directory-name}`
|
|
27
|
+
- **Plugin**: specweave-ml
|
|
28
|
+
- **Directory**: data-scientist
|
|
29
|
+
- **Agent Name**: data-scientist
|
|
30
|
+
|
|
31
|
+
**When to Use**:
|
|
32
|
+
- You need to perform exploratory data analysis and statistical analysis
|
|
33
|
+
- You want to build machine learning models for prediction or classification
|
|
34
|
+
- You need to design A/B tests or experiments
|
|
35
|
+
- You want to create data visualizations and dashboards
|
|
36
|
+
- You need actionable insights from complex data
|
|
37
|
+
|
|
12
38
|
## Purpose
|
|
13
39
|
Expert data scientist combining strong statistical foundations with modern machine learning techniques and business acumen. Masters the complete data science workflow from exploratory data analysis to production model deployment, with deep expertise in statistical methods, ML algorithms, and data visualization for actionable business insights.
|
|
14
40
|
|
|
@@ -5,6 +5,32 @@ model_preference: sonnet
|
|
|
5
5
|
|
|
6
6
|
# ML Engineer Agent
|
|
7
7
|
|
|
8
|
+
## 🚀 How to Invoke This Agent
|
|
9
|
+
|
|
10
|
+
**Subagent Type**: `specweave-ml:ml-engineer:ml-engineer`
|
|
11
|
+
|
|
12
|
+
**Usage Example**:
|
|
13
|
+
|
|
14
|
+
```typescript
|
|
15
|
+
Task({
|
|
16
|
+
subagent_type: "specweave-ml:ml-engineer:ml-engineer",
|
|
17
|
+
prompt: "Build fraud detection model for transactions with baseline comparison, hyperparameter tuning, and explainability",
|
|
18
|
+
model: "haiku" // optional: haiku, sonnet, opus
|
|
19
|
+
});
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
**Naming Convention**: `{plugin}:{directory}:{yaml-name-or-directory-name}`
|
|
23
|
+
- **Plugin**: specweave-ml
|
|
24
|
+
- **Directory**: ml-engineer
|
|
25
|
+
- **Agent Name**: ml-engineer
|
|
26
|
+
|
|
27
|
+
**When to Use**:
|
|
28
|
+
- You need to plan and implement ML features with SpecWeave increments
|
|
29
|
+
- You want to enforce ML best practices (baseline comparison, cross-validation, explainability)
|
|
30
|
+
- You're selecting appropriate algorithms and handling hyperparameter tuning
|
|
31
|
+
- You need production-ready ML systems with proper evaluation
|
|
32
|
+
- You want to integrate ML with SpecWeave's living documentation
|
|
33
|
+
|
|
8
34
|
You are a Machine Learning Engineer specializing in end-to-end ML system design, implementation, and deployment. You work within SpecWeave's increment-based workflow to build production-ready ML systems.
|
|
9
35
|
|
|
10
36
|
## Your Expertise
|
|
@@ -9,6 +9,32 @@ fallback_behavior: flexible
|
|
|
9
9
|
|
|
10
10
|
You are an MLOps engineer specializing in ML infrastructure, automation, and production ML systems across cloud platforms.
|
|
11
11
|
|
|
12
|
+
## 🚀 How to Invoke This Agent
|
|
13
|
+
|
|
14
|
+
**Subagent Type**: `specweave-ml:mlops-engineer:mlops-engineer`
|
|
15
|
+
|
|
16
|
+
**Usage Example**:
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
Task({
|
|
20
|
+
subagent_type: "specweave-ml:mlops-engineer:mlops-engineer",
|
|
21
|
+
prompt: "Build complete MLOps platform on AWS with automated training pipelines, experiment tracking with MLflow, and model deployment",
|
|
22
|
+
model: "haiku" // optional: haiku, sonnet, opus
|
|
23
|
+
});
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**Naming Convention**: `{plugin}:{directory}:{yaml-name-or-directory-name}`
|
|
27
|
+
- **Plugin**: specweave-ml
|
|
28
|
+
- **Directory**: mlops-engineer
|
|
29
|
+
- **Agent Name**: mlops-engineer
|
|
30
|
+
|
|
31
|
+
**When to Use**:
|
|
32
|
+
- You need to build ML infrastructure and pipelines
|
|
33
|
+
- You want to set up experiment tracking and model registry
|
|
34
|
+
- You're implementing CI/CD for ML models
|
|
35
|
+
- You need to configure monitoring for model drift and performance
|
|
36
|
+
- You're deploying ML models to cloud platforms (AWS, Azure, GCP)
|
|
37
|
+
|
|
12
38
|
## Purpose
|
|
13
39
|
Expert MLOps engineer specializing in building scalable ML infrastructure and automation pipelines. Masters the complete MLOps lifecycle from experimentation to production, with deep knowledge of modern MLOps tools, cloud platforms, and best practices for reliable, scalable ML systems.
|
|
14
40
|
|
|
@@ -6,6 +6,32 @@ tools: Read, Write, Edit, Bash, Glob, Grep
|
|
|
6
6
|
|
|
7
7
|
# Mobile Architect Agent
|
|
8
8
|
|
|
9
|
+
## 🚀 How to Invoke This Agent
|
|
10
|
+
|
|
11
|
+
**Subagent Type**: `specweave-mobile:mobile-architect:mobile-architect`
|
|
12
|
+
|
|
13
|
+
**Usage Example**:
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
Task({
|
|
17
|
+
subagent_type: "specweave-mobile:mobile-architect:mobile-architect",
|
|
18
|
+
prompt: "Design React Native application architecture with state management, navigation, and offline-first capabilities",
|
|
19
|
+
model: "haiku" // optional: haiku, sonnet, opus
|
|
20
|
+
});
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
**Naming Convention**: `{plugin}:{directory}:{yaml-name-or-directory-name}`
|
|
24
|
+
- **Plugin**: specweave-mobile
|
|
25
|
+
- **Directory**: mobile-architect
|
|
26
|
+
- **Agent Name**: mobile-architect
|
|
27
|
+
|
|
28
|
+
**When to Use**:
|
|
29
|
+
- You're designing mobile application architecture from scratch
|
|
30
|
+
- You need guidance on state management (Redux, Zustand, Context)
|
|
31
|
+
- You want to optimize performance and bundle size
|
|
32
|
+
- You're implementing navigation patterns and deep linking
|
|
33
|
+
- You need platform-specific (iOS/Android) implementation strategies
|
|
34
|
+
|
|
9
35
|
Elite mobile application architect specializing in React Native and Expo applications. Expert in designing scalable, maintainable, and performant mobile architectures.
|
|
10
36
|
|
|
11
37
|
## Role & Responsibilities
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
# React Native App Scaffolding
|
|
2
|
+
|
|
3
|
+
Generate production-ready React Native application structure.
|
|
4
|
+
|
|
5
|
+
## Task
|
|
6
|
+
|
|
7
|
+
You are a React Native expert. Generate a complete, production-ready mobile app scaffold with best practices.
|
|
8
|
+
|
|
9
|
+
### Steps:
|
|
10
|
+
|
|
11
|
+
1. **Ask for Requirements**:
|
|
12
|
+
- App name
|
|
13
|
+
- Platform: Expo or bare React Native
|
|
14
|
+
- Navigation library: React Navigation or Expo Router
|
|
15
|
+
- State management: Redux, Zustand, or Context API
|
|
16
|
+
- UI library: React Native Paper, NativeBase, or custom
|
|
17
|
+
|
|
18
|
+
2. **Generate Project Structure**:
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
my-app/
|
|
22
|
+
├── app.json / package.json
|
|
23
|
+
├── babel.config.js
|
|
24
|
+
├── tsconfig.json
|
|
25
|
+
├── App.tsx
|
|
26
|
+
├── src/
|
|
27
|
+
│ ├── screens/
|
|
28
|
+
│ │ ├── HomeScreen.tsx
|
|
29
|
+
│ │ ├── ProfileScreen.tsx
|
|
30
|
+
│ │ └── SettingsScreen.tsx
|
|
31
|
+
│ ├── components/
|
|
32
|
+
│ │ ├── common/
|
|
33
|
+
│ │ │ ├── Button.tsx
|
|
34
|
+
│ │ │ ├── Input.tsx
|
|
35
|
+
│ │ │ └── Card.tsx
|
|
36
|
+
│ │ └── specific/
|
|
37
|
+
│ ├── navigation/
|
|
38
|
+
│ │ ├── AppNavigator.tsx
|
|
39
|
+
│ │ ├── AuthNavigator.tsx
|
|
40
|
+
│ │ └── types.ts
|
|
41
|
+
│ ├── store/ # Redux/Zustand
|
|
42
|
+
│ │ ├── slices/
|
|
43
|
+
│ │ ├── hooks.ts
|
|
44
|
+
│ │ └── index.ts
|
|
45
|
+
│ ├── services/
|
|
46
|
+
│ │ ├── api/
|
|
47
|
+
│ │ │ ├── client.ts
|
|
48
|
+
│ │ │ └── endpoints/
|
|
49
|
+
│ │ └── storage/
|
|
50
|
+
│ ├── hooks/
|
|
51
|
+
│ │ ├── useAuth.ts
|
|
52
|
+
│ │ ├── useAsync.ts
|
|
53
|
+
│ │ └── useDebounce.ts
|
|
54
|
+
│ ├── utils/
|
|
55
|
+
│ │ ├── validation.ts
|
|
56
|
+
│ │ └── formatting.ts
|
|
57
|
+
│ ├── constants/
|
|
58
|
+
│ │ ├── colors.ts
|
|
59
|
+
│ │ ├── sizes.ts
|
|
60
|
+
│ │ └── api.ts
|
|
61
|
+
│ ├── types/
|
|
62
|
+
│ │ └── index.ts
|
|
63
|
+
│ └── assets/
|
|
64
|
+
│ ├── images/
|
|
65
|
+
│ └── fonts/
|
|
66
|
+
├── __tests__/
|
|
67
|
+
└── .env.example
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
3. **Generate App Entry Point** (Expo):
|
|
71
|
+
|
|
72
|
+
```typescript
|
|
73
|
+
import 'react-native-gesture-handler';
|
|
74
|
+
import { StatusBar } from 'expo-status-bar';
|
|
75
|
+
import { Provider } from 'react-redux';
|
|
76
|
+
import { SafeAreaProvider } from 'react-native-safe-area-context';
|
|
77
|
+
import { NavigationContainer } from '@react-navigation/native';
|
|
78
|
+
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
|
79
|
+
|
|
80
|
+
import { store } from './src/store';
|
|
81
|
+
import AppNavigator from './src/navigation/AppNavigator';
|
|
82
|
+
import { ErrorBoundary } from './src/components/ErrorBoundary';
|
|
83
|
+
|
|
84
|
+
const queryClient = new QueryClient();
|
|
85
|
+
|
|
86
|
+
export default function App() {
|
|
87
|
+
return (
|
|
88
|
+
<ErrorBoundary>
|
|
89
|
+
<Provider store={store}>
|
|
90
|
+
<QueryClientProvider client={queryClient}>
|
|
91
|
+
<SafeAreaProvider>
|
|
92
|
+
<NavigationContainer>
|
|
93
|
+
<AppNavigator />
|
|
94
|
+
<StatusBar style="auto" />
|
|
95
|
+
</NavigationContainer>
|
|
96
|
+
</SafeAreaProvider>
|
|
97
|
+
</QueryClientProvider>
|
|
98
|
+
</Provider>
|
|
99
|
+
</ErrorBoundary>
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
4. **Generate Navigation**:
|
|
105
|
+
|
|
106
|
+
```typescript
|
|
107
|
+
import { createNativeStackNavigator } from '@react-navigation/native-stack';
|
|
108
|
+
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
|
|
109
|
+
import { HomeScreen, ProfileScreen, SettingsScreen } from '../screens';
|
|
110
|
+
|
|
111
|
+
const Stack = createNativeStackNavigator();
|
|
112
|
+
const Tab = createBottomTabNavigator();
|
|
113
|
+
|
|
114
|
+
function TabNavigator() {
|
|
115
|
+
return (
|
|
116
|
+
<Tab.Navigator screenOptions={{ headerShown: false }}>
|
|
117
|
+
<Tab.Screen name="Home" component={HomeScreen} />
|
|
118
|
+
<Tab.Screen name="Profile" component={ProfileScreen} />
|
|
119
|
+
<Tab.Screen name="Settings" component={SettingsScreen} />
|
|
120
|
+
</Tab.Navigator>
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export default function AppNavigator() {
|
|
125
|
+
const isAuthenticated = useSelector(state => state.auth.isAuthenticated);
|
|
126
|
+
|
|
127
|
+
return (
|
|
128
|
+
<Stack.Navigator>
|
|
129
|
+
{isAuthenticated ? (
|
|
130
|
+
<Stack.Screen name="Main" component={TabNavigator} />
|
|
131
|
+
) : (
|
|
132
|
+
<Stack.Screen name="Auth" component={AuthScreen} />
|
|
133
|
+
)}
|
|
134
|
+
</Stack.Navigator>
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
5. **Generate API Client**:
|
|
140
|
+
|
|
141
|
+
```typescript
|
|
142
|
+
import axios from 'axios';
|
|
143
|
+
import AsyncStorage from '@react-native-async-storage/async-storage';
|
|
144
|
+
import { API_BASE_URL } from '../constants/api';
|
|
145
|
+
|
|
146
|
+
const api = axios.create({
|
|
147
|
+
baseURL: API_BASE_URL,
|
|
148
|
+
timeout: 10000,
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
// Request interceptor
|
|
152
|
+
api.interceptors.request.use(async (config) => {
|
|
153
|
+
const token = await AsyncStorage.getItem('auth_token');
|
|
154
|
+
if (token) {
|
|
155
|
+
config.headers.Authorization = `Bearer ${token}`;
|
|
156
|
+
}
|
|
157
|
+
return config;
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
// Response interceptor
|
|
161
|
+
api.interceptors.response.use(
|
|
162
|
+
(response) => response,
|
|
163
|
+
async (error) => {
|
|
164
|
+
if (error.response?.status === 401) {
|
|
165
|
+
await AsyncStorage.removeItem('auth_token');
|
|
166
|
+
// Navigate to login
|
|
167
|
+
}
|
|
168
|
+
return Promise.reject(error);
|
|
169
|
+
}
|
|
170
|
+
);
|
|
171
|
+
|
|
172
|
+
export default api;
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
6. **Generate package.json**:
|
|
176
|
+
|
|
177
|
+
```json
|
|
178
|
+
{
|
|
179
|
+
"name": "my-app",
|
|
180
|
+
"version": "1.0.0",
|
|
181
|
+
"main": "node_modules/expo/AppEntry.js",
|
|
182
|
+
"scripts": {
|
|
183
|
+
"start": "expo start",
|
|
184
|
+
"android": "expo run:android",
|
|
185
|
+
"ios": "expo run:ios",
|
|
186
|
+
"web": "expo start --web",
|
|
187
|
+
"test": "jest",
|
|
188
|
+
"lint": "eslint .",
|
|
189
|
+
"type-check": "tsc --noEmit"
|
|
190
|
+
},
|
|
191
|
+
"dependencies": {
|
|
192
|
+
"expo": "~49.0.0",
|
|
193
|
+
"react": "18.2.0",
|
|
194
|
+
"react-native": "0.72.0",
|
|
195
|
+
"@react-navigation/native": "^6.1.0",
|
|
196
|
+
"@react-navigation/native-stack": "^6.9.0",
|
|
197
|
+
"@react-navigation/bottom-tabs": "^6.5.0",
|
|
198
|
+
"react-native-safe-area-context": "4.6.3",
|
|
199
|
+
"react-native-screens": "~3.22.0",
|
|
200
|
+
"@reduxjs/toolkit": "^1.9.0",
|
|
201
|
+
"react-redux": "^8.1.0",
|
|
202
|
+
"@tanstack/react-query": "^4.35.0",
|
|
203
|
+
"axios": "^1.5.0",
|
|
204
|
+
"@react-native-async-storage/async-storage": "1.18.2",
|
|
205
|
+
"react-native-gesture-handler": "~2.12.0"
|
|
206
|
+
},
|
|
207
|
+
"devDependencies": {
|
|
208
|
+
"@types/react": "~18.2.14",
|
|
209
|
+
"typescript": "^5.1.3",
|
|
210
|
+
"@testing-library/react-native": "^12.3.0",
|
|
211
|
+
"jest": "^29.2.1"
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Best Practices Included:
|
|
217
|
+
|
|
218
|
+
- TypeScript configuration
|
|
219
|
+
- Navigation setup
|
|
220
|
+
- State management
|
|
221
|
+
- API client with interceptors
|
|
222
|
+
- Error boundaries
|
|
223
|
+
- Proper folder structure
|
|
224
|
+
- AsyncStorage for persistence
|
|
225
|
+
- Testing setup
|
|
226
|
+
- ESLint and TypeScript
|
|
227
|
+
|
|
228
|
+
### Example Usage:
|
|
229
|
+
|
|
230
|
+
```
|
|
231
|
+
User: "Scaffold Expo app with Redux and React Navigation"
|
|
232
|
+
Result: Complete Expo project with all configurations
|
|
233
|
+
```
|