@plazmodium/odin 0.3.3-beta → 0.3.4-beta
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/README.md +16 -10
- package/builtin/ODIN.md +1045 -0
- package/builtin/agent-definitions/README.md +170 -0
- package/builtin/agent-definitions/_shared-context.md +377 -0
- package/builtin/agent-definitions/architect.md +627 -0
- package/builtin/agent-definitions/builder.md +716 -0
- package/builtin/agent-definitions/discovery.md +293 -0
- package/builtin/agent-definitions/documenter.md +238 -0
- package/builtin/agent-definitions/guardian.md +1049 -0
- package/builtin/agent-definitions/integrator.md +363 -0
- package/builtin/agent-definitions/planning.md +236 -0
- package/builtin/agent-definitions/product.md +405 -0
- package/builtin/agent-definitions/release.md +430 -0
- package/builtin/agent-definitions/reviewer.md +447 -0
- package/builtin/agent-definitions/watcher.md +402 -0
- package/builtin/skills/api/graphql/SKILL.md +548 -0
- package/builtin/skills/api/grpc/SKILL.md +554 -0
- package/builtin/skills/api/rest-api/SKILL.md +469 -0
- package/builtin/skills/api/trpc/SKILL.md +503 -0
- package/builtin/skills/architecture/clean-architecture/SKILL.md +141 -0
- package/builtin/skills/architecture/domain-driven-design/SKILL.md +129 -0
- package/builtin/skills/architecture/event-driven/SKILL.md +145 -0
- package/builtin/skills/architecture/microservices/SKILL.md +143 -0
- package/builtin/skills/architecture/tla-precheck/SKILL.md +171 -0
- package/builtin/skills/backend/golang-gin/SKILL.md +141 -0
- package/builtin/skills/backend/nodejs-express/SKILL.md +277 -0
- package/builtin/skills/backend/nodejs-fastify/SKILL.md +152 -0
- package/builtin/skills/backend/python-django/SKILL.md +128 -0
- package/builtin/skills/backend/python-fastapi/SKILL.md +140 -0
- package/builtin/skills/database/mongodb/SKILL.md +132 -0
- package/builtin/skills/database/postgresql/SKILL.md +120 -0
- package/builtin/skills/database/prisma-orm/SKILL.md +366 -0
- package/builtin/skills/database/redis/SKILL.md +140 -0
- package/builtin/skills/database/supabase/SKILL.md +416 -0
- package/builtin/skills/devops/aws/SKILL.md +382 -0
- package/builtin/skills/devops/docker/SKILL.md +359 -0
- package/builtin/skills/devops/github-actions/SKILL.md +435 -0
- package/builtin/skills/devops/kubernetes/SKILL.md +459 -0
- package/builtin/skills/devops/terraform/SKILL.md +453 -0
- package/builtin/skills/frontend/alpine-dev/SKILL.md +27 -0
- package/builtin/skills/frontend/angular-dev/SKILL.md +28 -0
- package/builtin/skills/frontend/astro-dev/SKILL.md +28 -0
- package/builtin/skills/frontend/htmx-dev/SKILL.md +28 -0
- package/builtin/skills/frontend/nextjs-dev/SKILL.md +470 -0
- package/builtin/skills/frontend/react-patterns/SKILL.md +166 -0
- package/builtin/skills/frontend/svelte-dev/SKILL.md +28 -0
- package/builtin/skills/frontend/tailwindcss/SKILL.md +131 -0
- package/builtin/skills/frontend/vuejs-dev/SKILL.md +28 -0
- package/builtin/skills/generic-dev/SKILL.md +307 -0
- package/builtin/skills/testing/cypress/SKILL.md +372 -0
- package/builtin/skills/testing/jest/SKILL.md +176 -0
- package/builtin/skills/testing/playwright/SKILL.md +341 -0
- package/builtin/skills/testing/unit-tests-eval-sdd/SKILL.md +73 -0
- package/builtin/skills/testing/unit-tests-sdd/SKILL.md +83 -0
- package/builtin/skills/testing/vitest/SKILL.md +249 -0
- package/dist/adapters/skills/filesystem.d.ts.map +1 -1
- package/dist/adapters/skills/filesystem.js +2 -18
- package/dist/adapters/skills/filesystem.js.map +1 -1
- package/dist/builtin-assets.d.ts +8 -0
- package/dist/builtin-assets.d.ts.map +1 -0
- package/dist/builtin-assets.js +90 -0
- package/dist/builtin-assets.js.map +1 -0
- package/dist/init.js +69 -11
- package/dist/init.js.map +1 -1
- package/dist/schemas.d.ts +1 -1
- package/dist/server.js +1 -1
- package/dist/server.js.map +1 -1
- package/dist/tools/prepare-phase-context.d.ts.map +1 -1
- package/dist/tools/prepare-phase-context.js +5 -0
- package/dist/tools/prepare-phase-context.js.map +1 -1
- package/dist/types.d.ts +3 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +5 -3
|
@@ -0,0 +1,453 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: terraform
|
|
3
|
+
description: Terraform Infrastructure as Code expertise for provisioning and managing cloud resources. Covers HCL syntax, modules, state management, and multi-cloud deployments.
|
|
4
|
+
category: devops
|
|
5
|
+
compatible_with:
|
|
6
|
+
- aws
|
|
7
|
+
- docker
|
|
8
|
+
- kubernetes
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Terraform Infrastructure as Code
|
|
12
|
+
|
|
13
|
+
## Instructions
|
|
14
|
+
|
|
15
|
+
1. **Assess the infrastructure need**: Single resource, module, or complete environment.
|
|
16
|
+
2. **Follow Terraform best practices**:
|
|
17
|
+
- Use modules for reusability
|
|
18
|
+
- Remote state with locking
|
|
19
|
+
- Use workspaces or directories for environments
|
|
20
|
+
- Version pin providers
|
|
21
|
+
3. **Provide complete configurations**: Include variables, outputs, and provider setup.
|
|
22
|
+
4. **Guide on state management**: Remote backends, state locking, import/migration.
|
|
23
|
+
|
|
24
|
+
## Basic Structure
|
|
25
|
+
|
|
26
|
+
```hcl
|
|
27
|
+
# main.tf
|
|
28
|
+
terraform {
|
|
29
|
+
required_version = ">= 1.5.0"
|
|
30
|
+
|
|
31
|
+
required_providers {
|
|
32
|
+
aws = {
|
|
33
|
+
source = "hashicorp/aws"
|
|
34
|
+
version = "~> 5.0"
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
backend "s3" {
|
|
39
|
+
bucket = "my-terraform-state"
|
|
40
|
+
key = "prod/terraform.tfstate"
|
|
41
|
+
region = "us-east-1"
|
|
42
|
+
dynamodb_table = "terraform-locks"
|
|
43
|
+
encrypt = true
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
provider "aws" {
|
|
48
|
+
region = var.aws_region
|
|
49
|
+
|
|
50
|
+
default_tags {
|
|
51
|
+
tags = {
|
|
52
|
+
Environment = var.environment
|
|
53
|
+
ManagedBy = "Terraform"
|
|
54
|
+
Project = var.project_name
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
```hcl
|
|
61
|
+
# variables.tf
|
|
62
|
+
variable "aws_region" {
|
|
63
|
+
description = "AWS region"
|
|
64
|
+
type = string
|
|
65
|
+
default = "us-east-1"
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
variable "environment" {
|
|
69
|
+
description = "Environment name"
|
|
70
|
+
type = string
|
|
71
|
+
validation {
|
|
72
|
+
condition = contains(["dev", "staging", "prod"], var.environment)
|
|
73
|
+
error_message = "Environment must be dev, staging, or prod."
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
variable "project_name" {
|
|
78
|
+
description = "Project name for tagging"
|
|
79
|
+
type = string
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
```hcl
|
|
84
|
+
# outputs.tf
|
|
85
|
+
output "vpc_id" {
|
|
86
|
+
description = "VPC ID"
|
|
87
|
+
value = aws_vpc.main.id
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
output "public_subnets" {
|
|
91
|
+
description = "Public subnet IDs"
|
|
92
|
+
value = aws_subnet.public[*].id
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Common Resources
|
|
97
|
+
|
|
98
|
+
### VPC and Networking
|
|
99
|
+
|
|
100
|
+
```hcl
|
|
101
|
+
resource "aws_vpc" "main" {
|
|
102
|
+
cidr_block = "10.0.0.0/16"
|
|
103
|
+
enable_dns_hostnames = true
|
|
104
|
+
enable_dns_support = true
|
|
105
|
+
|
|
106
|
+
tags = {
|
|
107
|
+
Name = "${var.project_name}-vpc"
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
resource "aws_subnet" "public" {
|
|
112
|
+
count = length(var.availability_zones)
|
|
113
|
+
vpc_id = aws_vpc.main.id
|
|
114
|
+
cidr_block = cidrsubnet(aws_vpc.main.cidr_block, 8, count.index)
|
|
115
|
+
availability_zone = var.availability_zones[count.index]
|
|
116
|
+
map_public_ip_on_launch = true
|
|
117
|
+
|
|
118
|
+
tags = {
|
|
119
|
+
Name = "${var.project_name}-public-${count.index + 1}"
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
resource "aws_internet_gateway" "main" {
|
|
124
|
+
vpc_id = aws_vpc.main.id
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
resource "aws_route_table" "public" {
|
|
128
|
+
vpc_id = aws_vpc.main.id
|
|
129
|
+
|
|
130
|
+
route {
|
|
131
|
+
cidr_block = "0.0.0.0/0"
|
|
132
|
+
gateway_id = aws_internet_gateway.main.id
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### EC2 Instance
|
|
138
|
+
|
|
139
|
+
```hcl
|
|
140
|
+
resource "aws_instance" "app" {
|
|
141
|
+
ami = data.aws_ami.amazon_linux.id
|
|
142
|
+
instance_type = var.instance_type
|
|
143
|
+
subnet_id = aws_subnet.public[0].id
|
|
144
|
+
vpc_security_group_ids = [aws_security_group.app.id]
|
|
145
|
+
key_name = aws_key_pair.deployer.key_name
|
|
146
|
+
|
|
147
|
+
root_block_device {
|
|
148
|
+
volume_size = 20
|
|
149
|
+
volume_type = "gp3"
|
|
150
|
+
encrypted = true
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
user_data = <<-EOF
|
|
154
|
+
#!/bin/bash
|
|
155
|
+
yum update -y
|
|
156
|
+
yum install -y docker
|
|
157
|
+
systemctl start docker
|
|
158
|
+
EOF
|
|
159
|
+
|
|
160
|
+
tags = {
|
|
161
|
+
Name = "${var.project_name}-app"
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
data "aws_ami" "amazon_linux" {
|
|
166
|
+
most_recent = true
|
|
167
|
+
owners = ["amazon"]
|
|
168
|
+
|
|
169
|
+
filter {
|
|
170
|
+
name = "name"
|
|
171
|
+
values = ["al2023-ami-*-x86_64"]
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Security Group
|
|
177
|
+
|
|
178
|
+
```hcl
|
|
179
|
+
resource "aws_security_group" "app" {
|
|
180
|
+
name = "${var.project_name}-app-sg"
|
|
181
|
+
description = "Security group for application"
|
|
182
|
+
vpc_id = aws_vpc.main.id
|
|
183
|
+
|
|
184
|
+
ingress {
|
|
185
|
+
from_port = 443
|
|
186
|
+
to_port = 443
|
|
187
|
+
protocol = "tcp"
|
|
188
|
+
cidr_blocks = ["0.0.0.0/0"]
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
ingress {
|
|
192
|
+
from_port = 80
|
|
193
|
+
to_port = 80
|
|
194
|
+
protocol = "tcp"
|
|
195
|
+
cidr_blocks = ["0.0.0.0/0"]
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
egress {
|
|
199
|
+
from_port = 0
|
|
200
|
+
to_port = 0
|
|
201
|
+
protocol = "-1"
|
|
202
|
+
cidr_blocks = ["0.0.0.0/0"]
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### RDS Database
|
|
208
|
+
|
|
209
|
+
```hcl
|
|
210
|
+
resource "aws_db_instance" "main" {
|
|
211
|
+
identifier = "${var.project_name}-db"
|
|
212
|
+
engine = "postgres"
|
|
213
|
+
engine_version = "16.1"
|
|
214
|
+
instance_class = "db.t3.micro"
|
|
215
|
+
|
|
216
|
+
allocated_storage = 20
|
|
217
|
+
max_allocated_storage = 100
|
|
218
|
+
storage_type = "gp3"
|
|
219
|
+
storage_encrypted = true
|
|
220
|
+
|
|
221
|
+
db_name = var.db_name
|
|
222
|
+
username = var.db_username
|
|
223
|
+
password = var.db_password
|
|
224
|
+
|
|
225
|
+
vpc_security_group_ids = [aws_security_group.db.id]
|
|
226
|
+
db_subnet_group_name = aws_db_subnet_group.main.name
|
|
227
|
+
|
|
228
|
+
backup_retention_period = 7
|
|
229
|
+
backup_window = "03:00-04:00"
|
|
230
|
+
maintenance_window = "Mon:04:00-Mon:05:00"
|
|
231
|
+
|
|
232
|
+
skip_final_snapshot = var.environment != "prod"
|
|
233
|
+
deletion_protection = var.environment == "prod"
|
|
234
|
+
|
|
235
|
+
tags = {
|
|
236
|
+
Name = "${var.project_name}-db"
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### S3 Bucket
|
|
242
|
+
|
|
243
|
+
```hcl
|
|
244
|
+
resource "aws_s3_bucket" "assets" {
|
|
245
|
+
bucket = "${var.project_name}-assets-${var.environment}"
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
resource "aws_s3_bucket_versioning" "assets" {
|
|
249
|
+
bucket = aws_s3_bucket.assets.id
|
|
250
|
+
versioning_configuration {
|
|
251
|
+
status = "Enabled"
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
resource "aws_s3_bucket_server_side_encryption_configuration" "assets" {
|
|
256
|
+
bucket = aws_s3_bucket.assets.id
|
|
257
|
+
rule {
|
|
258
|
+
apply_server_side_encryption_by_default {
|
|
259
|
+
sse_algorithm = "AES256"
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
resource "aws_s3_bucket_public_access_block" "assets" {
|
|
265
|
+
bucket = aws_s3_bucket.assets.id
|
|
266
|
+
block_public_acls = true
|
|
267
|
+
block_public_policy = true
|
|
268
|
+
ignore_public_acls = true
|
|
269
|
+
restrict_public_buckets = true
|
|
270
|
+
}
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
## Modules
|
|
274
|
+
|
|
275
|
+
### Creating a Module
|
|
276
|
+
|
|
277
|
+
```hcl
|
|
278
|
+
# modules/vpc/main.tf
|
|
279
|
+
variable "name" {
|
|
280
|
+
type = string
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
variable "cidr_block" {
|
|
284
|
+
type = string
|
|
285
|
+
default = "10.0.0.0/16"
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
resource "aws_vpc" "this" {
|
|
289
|
+
cidr_block = var.cidr_block
|
|
290
|
+
enable_dns_hostnames = true
|
|
291
|
+
|
|
292
|
+
tags = {
|
|
293
|
+
Name = var.name
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
output "vpc_id" {
|
|
298
|
+
value = aws_vpc.this.id
|
|
299
|
+
}
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
### Using a Module
|
|
303
|
+
|
|
304
|
+
```hcl
|
|
305
|
+
module "vpc" {
|
|
306
|
+
source = "./modules/vpc"
|
|
307
|
+
|
|
308
|
+
name = "my-vpc"
|
|
309
|
+
cidr_block = "10.0.0.0/16"
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
module "vpc_from_registry" {
|
|
313
|
+
source = "terraform-aws-modules/vpc/aws"
|
|
314
|
+
version = "5.0.0"
|
|
315
|
+
|
|
316
|
+
name = "my-vpc"
|
|
317
|
+
cidr = "10.0.0.0/16"
|
|
318
|
+
|
|
319
|
+
azs = ["us-east-1a", "us-east-1b"]
|
|
320
|
+
private_subnets = ["10.0.1.0/24", "10.0.2.0/24"]
|
|
321
|
+
public_subnets = ["10.0.101.0/24", "10.0.102.0/24"]
|
|
322
|
+
|
|
323
|
+
enable_nat_gateway = true
|
|
324
|
+
}
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
## Common Commands
|
|
328
|
+
|
|
329
|
+
```bash
|
|
330
|
+
# Initialize
|
|
331
|
+
terraform init
|
|
332
|
+
terraform init -upgrade # Upgrade providers
|
|
333
|
+
|
|
334
|
+
# Plan
|
|
335
|
+
terraform plan
|
|
336
|
+
terraform plan -out=tfplan # Save plan
|
|
337
|
+
terraform plan -var="environment=prod"
|
|
338
|
+
|
|
339
|
+
# Apply
|
|
340
|
+
terraform apply
|
|
341
|
+
terraform apply tfplan # Apply saved plan
|
|
342
|
+
terraform apply -auto-approve # Skip confirmation
|
|
343
|
+
|
|
344
|
+
# Destroy
|
|
345
|
+
terraform destroy
|
|
346
|
+
terraform destroy -target=aws_instance.app # Specific resource
|
|
347
|
+
|
|
348
|
+
# State management
|
|
349
|
+
terraform state list
|
|
350
|
+
terraform state show aws_instance.app
|
|
351
|
+
terraform state mv aws_instance.old aws_instance.new
|
|
352
|
+
terraform state rm aws_instance.app # Remove from state
|
|
353
|
+
terraform import aws_instance.app i-1234567890abcdef0
|
|
354
|
+
|
|
355
|
+
# Format and validate
|
|
356
|
+
terraform fmt -recursive
|
|
357
|
+
terraform validate
|
|
358
|
+
|
|
359
|
+
# Output
|
|
360
|
+
terraform output
|
|
361
|
+
terraform output vpc_id
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
## Environment Management
|
|
365
|
+
|
|
366
|
+
### Using Workspaces
|
|
367
|
+
|
|
368
|
+
```bash
|
|
369
|
+
terraform workspace new staging
|
|
370
|
+
terraform workspace new production
|
|
371
|
+
terraform workspace select staging
|
|
372
|
+
terraform workspace list
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
```hcl
|
|
376
|
+
# Use workspace in config
|
|
377
|
+
locals {
|
|
378
|
+
environment = terraform.workspace
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
resource "aws_instance" "app" {
|
|
382
|
+
instance_type = terraform.workspace == "production" ? "t3.large" : "t3.micro"
|
|
383
|
+
}
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
### Using Directories (Recommended)
|
|
387
|
+
|
|
388
|
+
```
|
|
389
|
+
infrastructure/
|
|
390
|
+
├── modules/
|
|
391
|
+
│ └── vpc/
|
|
392
|
+
├── environments/
|
|
393
|
+
│ ├── dev/
|
|
394
|
+
│ │ ├── main.tf
|
|
395
|
+
│ │ ├── variables.tf
|
|
396
|
+
│ │ └── terraform.tfvars
|
|
397
|
+
│ ├── staging/
|
|
398
|
+
│ └── prod/
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
## Data Sources
|
|
402
|
+
|
|
403
|
+
```hcl
|
|
404
|
+
# Get existing resources
|
|
405
|
+
data "aws_vpc" "existing" {
|
|
406
|
+
id = "vpc-12345678"
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
data "aws_caller_identity" "current" {}
|
|
410
|
+
|
|
411
|
+
data "aws_region" "current" {}
|
|
412
|
+
|
|
413
|
+
# Use in resources
|
|
414
|
+
resource "aws_subnet" "new" {
|
|
415
|
+
vpc_id = data.aws_vpc.existing.id
|
|
416
|
+
# ...
|
|
417
|
+
}
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
## Best Practices
|
|
421
|
+
|
|
422
|
+
- **Remote state** - Never store state locally for team projects
|
|
423
|
+
- **State locking** - Use DynamoDB for AWS, or built-in for Terraform Cloud
|
|
424
|
+
- **Sensitive variables** - Mark with `sensitive = true`
|
|
425
|
+
- **Module versions** - Pin to specific versions
|
|
426
|
+
- **Provider versions** - Use `~>` for minor version flexibility
|
|
427
|
+
- **Resource naming** - Use consistent naming conventions
|
|
428
|
+
- **Tagging** - Apply tags for cost tracking and management
|
|
429
|
+
- **Small, focused changes** - Don't change everything at once
|
|
430
|
+
|
|
431
|
+
## Sensitive Data
|
|
432
|
+
|
|
433
|
+
```hcl
|
|
434
|
+
variable "db_password" {
|
|
435
|
+
type = string
|
|
436
|
+
sensitive = true
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
# Or use AWS Secrets Manager
|
|
440
|
+
data "aws_secretsmanager_secret_version" "db" {
|
|
441
|
+
secret_id = "prod/db/password"
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
resource "aws_db_instance" "main" {
|
|
445
|
+
password = data.aws_secretsmanager_secret_version.db.secret_string
|
|
446
|
+
}
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
## References
|
|
450
|
+
|
|
451
|
+
- Terraform Documentation: https://developer.hashicorp.com/terraform/docs
|
|
452
|
+
- AWS Provider: https://registry.terraform.io/providers/hashicorp/aws/latest/docs
|
|
453
|
+
- Terraform Registry: https://registry.terraform.io/
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: alpine-dev
|
|
3
|
+
description: Supports Alpine.js development for lightweight, declarative JavaScript interactivity in HTML, covering directives like x-data, x-bind, and x-on. Use for adding sprinkle JS to web pages without frameworks.
|
|
4
|
+
category: frontend
|
|
5
|
+
compatible_with:
|
|
6
|
+
- tailwindcss
|
|
7
|
+
- htmx-dev
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Alpine.js Development Assistance
|
|
11
|
+
|
|
12
|
+
## Instructions
|
|
13
|
+
1. **Assess the need**: Look for state management, event listeners, or DOM manipulations.
|
|
14
|
+
2. **Alpine essentials**: Stress its minimal footprint and jQuery-like simplicity.
|
|
15
|
+
3. **Provide**:
|
|
16
|
+
- Code: Inline HTML with Alpine attributes and expressions.
|
|
17
|
+
- Explanations: Detail magic properties and plugins.
|
|
18
|
+
- Troubleshooting: Fix common syntax errors or scope issues.
|
|
19
|
+
4. **Tools**: Validate with code_execution for JS logic.
|
|
20
|
+
5. **Keep it lightweight**: Offer concise advice and links to Alpine docs.
|
|
21
|
+
|
|
22
|
+
## Best Practices
|
|
23
|
+
- Use x-init for setup.
|
|
24
|
+
- Combine with Tailwind for styling.
|
|
25
|
+
- Avoid overcomplicating; stick to vanilla JS.
|
|
26
|
+
|
|
27
|
+
[Tessl.io tiles no yet available for Alpine.js]
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: angular-dev
|
|
3
|
+
description: Assists with Angular development tasks, such as generating components, services, modules, debugging code, explaining concepts, and applying best practices. Use this skill when the user asks for help with Angular code, architecture, or troubleshooting in TypeScript-based frontend applications.
|
|
4
|
+
category: frontend
|
|
5
|
+
compatible_with:
|
|
6
|
+
- tailwindcss
|
|
7
|
+
- jest
|
|
8
|
+
- cypress
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Angular Development Assistance
|
|
12
|
+
|
|
13
|
+
## Instructions
|
|
14
|
+
1. **Understand the query**: Analyze the user's request, identifying if it's about code generation, explanation, debugging, or optimization.
|
|
15
|
+
2. **Recall Angular fundamentals**: Use knowledge of Angular's core features like components, directives, services, dependency injection, routing, forms, and RxJS observables.
|
|
16
|
+
3. **Provide structured responses**:
|
|
17
|
+
- For code generation: Output complete, working code snippets with imports and explanations.
|
|
18
|
+
- For debugging: Ask for error messages or code samples if needed, then suggest fixes step-by-step.
|
|
19
|
+
- For best practices: Reference Angular style guide, performance tips, and security considerations.
|
|
20
|
+
4. **Use tools if necessary**: If the task involves executing or testing code, consider using code_execution tool for TypeScript/JavaScript validation.
|
|
21
|
+
5. **Keep it conversational**: Explain concepts with analogies, and include links to official Angular docs for further reading.
|
|
22
|
+
|
|
23
|
+
## Best Practices
|
|
24
|
+
- Always use TypeScript for Angular code.
|
|
25
|
+
- Encourage reactive programming with NgRx for state management in complex apps.
|
|
26
|
+
- Highlight common pitfalls like change detection issues or memory leaks.
|
|
27
|
+
|
|
28
|
+
For detailed and up-to-date examples and knowledge on the latest Angular, use Tessl.io respective tile in tessl/npm-angular
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: astro-dev
|
|
3
|
+
description: Assists with Astro development for static sites, including islands architecture, component integration (React, Vue, etc.), and content collections. Use when handling hybrid static/dynamic web projects.
|
|
4
|
+
category: frontend
|
|
5
|
+
compatible_with:
|
|
6
|
+
- tailwindcss
|
|
7
|
+
- react-patterns
|
|
8
|
+
- vuejs-dev
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Astro Development Assistance
|
|
12
|
+
|
|
13
|
+
## Instructions
|
|
14
|
+
1. **Analyze query**: Focus on site building, framework integration, or deployment.
|
|
15
|
+
2. **Key Astro concepts**: Emphasize partial hydration, Markdown support, and multi-framework compatibility.
|
|
16
|
+
3. **Deliver content**:
|
|
17
|
+
- Code snippets: Provide .astro files with frontmatter and islands.
|
|
18
|
+
- Guidance: Explain build processes, routing, and API endpoints.
|
|
19
|
+
- Fixes: Troubleshoot issues like hydration errors or asset handling.
|
|
20
|
+
4. **Tools**: Test code with code_execution for JS parts.
|
|
21
|
+
5. **Be informative**: Include steps and links to Astro docs.
|
|
22
|
+
|
|
23
|
+
## Best Practices
|
|
24
|
+
- Use islands for interactive parts only.
|
|
25
|
+
- Leverage content collections for blogs.
|
|
26
|
+
- Deploy to edge networks for performance.
|
|
27
|
+
|
|
28
|
+
For detailed and up-to-date examples and knowledge on the latest Astro, use Tessl.io respective tile in tessl/npm-astro
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: htmx-dev
|
|
3
|
+
description: Helps with HTMX development, enabling dynamic HTML interactions without heavy JavaScript, including AJAX requests, WebSockets, and extensions. Suitable for enhancing server-rendered apps with client-side behaviors.
|
|
4
|
+
category: frontend
|
|
5
|
+
compatible_with:
|
|
6
|
+
- alpine-dev
|
|
7
|
+
- tailwindcss
|
|
8
|
+
- python-django
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# HTMX Development Assistance
|
|
12
|
+
|
|
13
|
+
## Instructions
|
|
14
|
+
1. **Understand request**: Identify needs like swapping content, polling, or form submissions.
|
|
15
|
+
2. **Core HTMX usage**: Focus on attributes like hx-get, hx-post, hx-swap, and triggers.
|
|
16
|
+
3. **Respond with**:
|
|
17
|
+
- HTML examples: Show server responses and client markup.
|
|
18
|
+
- Integration: Guide on using with backend frameworks like Flask or Express.
|
|
19
|
+
- Debugging: Address issues like failed requests or event handling.
|
|
20
|
+
4. **Tool support**: Use code_execution for testing JS extensions if needed.
|
|
21
|
+
5. **Explain clearly**: Use simple examples and reference HTMX docs.
|
|
22
|
+
|
|
23
|
+
## Best Practices
|
|
24
|
+
- Keep JS minimal; let HTMX handle interactions.
|
|
25
|
+
- Use out-of-band swaps for complex updates.
|
|
26
|
+
- Secure endpoints against CSRF.
|
|
27
|
+
|
|
28
|
+
For detailed and up-to-date knowledge and examples on the latest HTMX, use Tessl.io respective tile in tessl/npm-htmx-org
|