Standards for authoring SDD plugin agents — frontmatter, self-containment, skill references, and no-user-interaction rules.
中文简介正在准备中。当前显示原文说明。
Scaffolds Helm charts for SDD components, driven by component settings.
中文简介正在准备中。当前显示原文说明。
查看安装方法安装前可以查看交给 AI 代理的指令内容。
Scaffolds Helm charts for deploying SDD components to Kubernetes. Charts are generated based on component settings from sdd/sdd-settings.yaml.
Use the following skills for reference:
techpack-settings — Authoritative source for helm component settings schema (deploys, deploy_type, deploy_modes, ingress, assets)Use when creating Helm chart components. Creates Helm charts that integrate with the SDD config system.
Helm charts are scaffolded based on their settings in sdd/sdd-settings.yaml. Delegate to the techpack-settings skill for the complete helm settings schema and defaults — it returns deploys (server reference), deploy_type, deploy_modes (array of mode strings), ingress (boolean), and assets (static file configuration).
// Pseudocode for settings-driven template selection
const scaffoldHelmChart = async (helmComponent: HelmComponent): Promise<void> => {
const { settings } = helmComponent;
// Always include base templates
await copyTemplate('_helpers.tpl');
await copyTemplate('configmap.yaml');
if (settings.deploy_type === 'server') {
// Server-specific templates
await copyTemplate('servicemonitor.yaml'); // All servers get metrics
const deployModes = settings.deploy_modes ?? [serverSettings.server_type];
if (deployModes.length > 1) {
// Multiple modes = separate deployments per mode
if (deployModes.includes('api')) await copyTemplate('deployment-api.yaml');
if (deployModes.includes('worker')) await copyTemplate('deployment-worker.yaml');
if (deployModes.includes('cron')) await copyTemplate('cronjob.yaml');
} else if (deployModes[0] === 'cron') {
await copyTemplate('cronjob.yaml');
} else {
await copyTemplate('deployment.yaml');
}
// Service only if deploying api mode and server provides contracts
if (deployModes.includes('api') && serverSettings.provides_contracts.length > 0) {
await copyTemplate('service.yaml');
}
} else {
// Webapp templates
await copyTemplate('deployment.yaml');
await copyTemplate('service.yaml');
}
// Ingress from helm settings
if (settings.ingress) {
await copyTemplate('ingress.yaml');
}
};
Helm charts live at components/helm_charts/<name>/:
| Component Name | Directory |
|---|---|
main-server-api | components/helm_charts/main-server-api/ |
admin-dashboard | components/helm_charts/admin-dashboard/ |
umbrella | components/helm_charts/umbrella/ |
components/helm_charts/<name>/
├── Chart.yaml # Chart metadata
├── values.yaml # Default values
└── templates/
├── _helpers.tpl # Template helpers (always)
├── configmap.yaml # Config mount (always)
├── servicemonitor.yaml # Metrics integration (always)
├── deployment.yaml # Single-mode deployment
├── deployment-api.yaml # Hybrid: API mode deployment
├── deployment-worker.yaml # Hybrid: Worker mode deployment
├── cronjob.yaml # Cron mode
├── service.yaml # When provides_contracts (conditional)
└── ingress.yaml # When ingress: true (conditional)
components/helm_charts/<name>/
├── Chart.yaml
├── values.yaml
└── templates/
├── _helpers.tpl
├── deployment.yaml # nginx with config injection
├── service.yaml
├── configmap.yaml # App config + nginx config
└── ingress.yaml # When ingress: true (conditional)
components/helm_charts/umbrella/
├── Chart.yaml # Lists all charts as dependencies
└── values.yaml # Enable/disable individual charts
| Variable | Description |
|---|---|
{{CHART_NAME}} | Helm chart name |
{{CHART_DESCRIPTION}} | Helm chart description |
{{DEPLOYS_COMPONENT}} | Name of component this chart deploys |
{{APP_VERSION}} | Application version |
{{PROJECT_NAME}} | Project name |
{{IS_HYBRID}} | True if deploying multiple modes |
{{DEPLOY_MODES}} | List of modes being deployed |
{{HAS_SERVICE}} | True if server provides contracts |
{{HAS_INGRESS}} | True if ingress enabled |
Templates are organized by deployment target:
skills/components/helm/helm-scaffolding/
├── templates/ # Legacy (single deployment)
├── templates-server/ # Server charts
│ ├── Chart.yaml
│ ├── values.yaml
│ └── templates/
│ ├── _helpers.tpl
│ ├── deployment.yaml
│ ├── deployment-api.yaml
│ ├── deployment-worker.yaml
│ ├── cronjob.yaml
│ ├── service.yaml
│ ├── ingress.yaml
│ ├── servicemonitor.yaml
│ └── configmap.yaml
├── templates-webapp/ # Webapp charts
│ ├── Chart.yaml
│ ├── values.yaml
│ └── templates/
│ ├── _helpers.tpl
│ ├── deployment.yaml
│ ├── service.yaml
│ ├── ingress.yaml
│ └── configmap.yaml
└── templates-umbrella/ # Umbrella chart
├── Chart.yaml
└── values.yaml
Config is mounted as a file at /app/config/config.yaml. The application reads config using the SDD_CONFIG_PATH environment variable:
# templates/configmap.yaml
data:
config.yaml: |
{{- toYaml .Values.config | nindent 4 }}
The ConfigMap is mounted in deployments and SDD_CONFIG_PATH is set automatically.
Deployment workflow:
# Generate merged config
<plugin-root>/fullstack-typescript/system/system-run.sh config generate --env production --component main-server \
--output production-config.yaml
# Deploy with config
helm install my-release ./components/helm_charts/main-server-api \
-f values-production.yaml \
--set-file config=production-config.yaml
Config is injected into HTML at deploy time via init container:
export const startApp = (config: AppConfig) => { ... }startApp(__SDD_CONFIG__)__SDD_CONFIG__ with JSON from ConfigMapAll server charts include:
Cluster-level observability (Victoria Metrics, Victoria Logs) is set up separately (see task #47).
To scaffold a Helm chart, build a spec with context flags derived from helm + server settings and invoke the engine:
<plugin-root>/fullstack-typescript/system/system-run.sh scaffolding apply --spec spec.json
| Variable | Source |
|---|---|
PROJECT_NAME | From sdd-settings.yaml project name |
CHART_NAME | Helm component name |
CHART_DESCRIPTION | "Helm chart for <chart-name>" |
DEPLOYS_COMPONENT | Name of the component this chart deploys |
IS_HYBRID | "true" or "false" |
HAS_SERVICE | "true" or "false" |
HAS_INGRESS | "true" or "false" |
| Flag | Derived From |
|---|---|
deploy_type | settings.deploy_type ("server" or "webapp") |
is_hybrid | deploy_modes.length > 1 |
is_cron_only | deploy_modes === ["cron"] |
has_api_mode | deploy_modes.includes("api") |
has_worker_mode | deploy_modes.includes("worker") |
has_cron_mode | deploy_modes.includes("cron") |
needs_service | has_api_mode && provides_contracts.length > 0 |
has_ingress | settings.ingress === true |
See the full Helm chart spec example in the task description. Each template file is a separate template_file operation with appropriate when conditions based on the pre-computed context flags.
{
"target_dir": "<project-root>",
"base_dir": "<plugin-root>/skills",
"variables": { "CHART_NAME": "<chart-name>", "..." : "..." },
"context": {
"is_hybrid": false,
"is_cron_only": false,
"has_api_mode": true,
"needs_service": true,
"has_ingress": true
},
"operations": [
{ "type": "template_file", "source": "components/helm/helm-scaffolding/templates-server/Chart.yaml", "dest": "components/helm_charts/<chart-name>/Chart.yaml" },
{ "type": "template_file", "source": "components/helm/helm-scaffolding/templates-server/values.yaml", "dest": "components/helm_charts/<chart-name>/values.yaml" },
{ "type": "template_file", "source": "components/helm/helm-scaffolding/templates-server/templates/_helpers.tpl", "dest": "components/helm_charts/<chart-name>/templates/_helpers.tpl" },
{ "type": "template_file", "source": "components/helm/helm-scaffolding/templates-server/templates/configmap.yaml", "dest": "components/helm_charts/<chart-name>/templates/configmap.yaml" },
{ "type": "template_file", "source": "components/helm/helm-scaffolding/templates-server/templates/servicemonitor.yaml", "dest": "components/helm_charts/<chart-name>/templates/servicemonitor.yaml" },
{ "type": "template_file", "source": "components/helm/helm-scaffolding/templates-server/templates/deployment.yaml", "dest": "components/helm_charts/<chart-name>/templates/deployment.yaml", "when": [{ "key": "is_hybrid", "equals": false }, { "key": "is_cron_only", "equals": false }] },
{ "type": "template_file", "source": "components/helm/helm-scaffolding/templates-server/templates/service.yaml", "dest": "components/helm_charts/<chart-name>/templates/service.yaml", "when": { "key": "needs_service", "equals": true } },
{ "type": "template_file", "source": "components/helm/helm-scaffolding/templates-server/templates/ingress.yaml", "dest": "components/helm_charts/<chart-name>/templates/ingress.yaml", "when": { "key": "has_ingress", "equals": true } },
{ "type": "package_json_scripts", "scripts": { "<chart-name>:lint": "helm lint components/helm_charts/<chart-name>" } }
]
}
Schema: schemas/input.schema.json
Accepts chart name, deploy target, deployment type, and optional settings for modes, ingress, and webapp assets.
Schema: schemas/output.schema.json
Returns the scaffolding engine result: created files, directories, and scripts; skipped paths; errors; and a human-readable summary.
helm-standards — Generated Helm charts must follow these standards. Defines values.yaml structure, template patterns, settings-driven configuration, and release naming conventions.还没有评价。欢迎分享你的使用感受。
无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。
还没有评论。来写第一条吧。
Standards for authoring SDD plugin agents — frontmatter, self-containment, skill references, and no-user-interaction rules.
中文简介正在准备中。当前显示原文说明。
Scaffolds Node.js/TypeScript backend components with CMDO architecture, driven by component settings.
中文简介正在准备中。当前显示原文说明。
CMDO architecture standards for Node.js/TypeScript backends with strict layer separation.
中文简介正在准备中。当前显示原文说明。
Intent-to-command mappings for fullstack-typescript tech pack features.
中文简介正在准备中。当前显示原文说明。
Create change specification and implementation plan with dynamic phase generation. Supports feature, bugfix, refactor, and epic types.
中文简介正在准备中。当前显示原文说明。
Orchestrates the full change lifecycle — routes actions to phase-specific sub-files.
中文简介正在准备中。当前显示原文说明。