@stacksjs/defaults 0.72.102 → 0.73.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/ai/AGENTS.md +25 -4
- package/ai/README.md +26 -4
- package/ai/skills/stacks-actions/SKILL.md +1 -1
- package/ai/skills/stacks-ai/SKILL.md +1 -1
- package/ai/skills/stacks-alias/SKILL.md +1 -1
- package/ai/skills/stacks-analytics/SKILL.md +1 -1
- package/ai/skills/stacks-api/SKILL.md +1 -1
- package/ai/skills/stacks-arrays/SKILL.md +1 -1
- package/ai/skills/stacks-auto-imports/SKILL.md +1 -1
- package/ai/skills/stacks-browse/SKILL.md +1 -1
- package/ai/skills/stacks-browser/SKILL.md +1 -1
- package/ai/skills/stacks-buddy/SKILL.md +1 -1
- package/ai/skills/stacks-build/SKILL.md +79 -5
- package/ai/skills/stacks-cache/SKILL.md +1 -1
- package/ai/skills/stacks-calendar/SKILL.md +1 -1
- package/ai/skills/stacks-chat/SKILL.md +1 -1
- package/ai/skills/stacks-cli/SKILL.md +1 -1
- package/ai/skills/stacks-cloud/SKILL.md +1 -1
- package/ai/skills/stacks-cms/SKILL.md +1 -1
- package/ai/skills/stacks-codebase-design/DEEPENING.md +79 -0
- package/ai/skills/stacks-codebase-design/DESIGN-IT-TWICE.md +72 -0
- package/ai/skills/stacks-codebase-design/SKILL.md +180 -0
- package/ai/skills/stacks-collections/SKILL.md +1 -1
- package/ai/skills/stacks-commerce/SKILL.md +141 -35
- package/ai/skills/stacks-composables/SKILL.md +1 -1
- package/ai/skills/stacks-config/SKILL.md +1 -1
- package/ai/skills/stacks-configuration/SKILL.md +1 -1
- package/ai/skills/stacks-cron/SKILL.md +1 -1
- package/ai/skills/stacks-crosswind/SKILL.md +1 -1
- package/ai/skills/stacks-database/SKILL.md +1 -1
- package/ai/skills/stacks-datetime/SKILL.md +1 -1
- package/ai/skills/stacks-dependencies/SKILL.md +1 -1
- package/ai/skills/stacks-deploy/SKILL.md +1 -1
- package/ai/skills/stacks-desktop/SKILL.md +1 -1
- package/ai/skills/stacks-development/SKILL.md +1 -1
- package/ai/skills/stacks-dns/SKILL.md +1 -1
- package/ai/skills/stacks-docs/SKILL.md +1 -1
- package/ai/skills/stacks-domain-modeling/FORMATS.md +123 -0
- package/ai/skills/stacks-domain-modeling/SKILL.md +109 -0
- package/ai/skills/stacks-enums/SKILL.md +1 -1
- package/ai/skills/stacks-error-handling/SKILL.md +1 -1
- package/ai/skills/stacks-events/SKILL.md +1 -1
- package/ai/skills/stacks-faker/SKILL.md +1 -1
- package/ai/skills/stacks-flow/PHASE-BOUNDARIES.md +91 -0
- package/ai/skills/stacks-flow/SKILL.md +117 -0
- package/ai/skills/stacks-git/SKILL.md +37 -9
- package/ai/skills/stacks-grilling/SKILL.md +85 -0
- package/ai/skills/stacks-guard/SKILL.md +86 -11
- package/ai/skills/stacks-guard/scripts/block-destructive.sh +67 -0
- package/ai/skills/stacks-handoff/SKILL.md +70 -0
- package/ai/skills/stacks-health/SKILL.md +1 -1
- package/ai/skills/stacks-http/SKILL.md +1 -1
- package/ai/skills/stacks-i18n/SKILL.md +1 -1
- package/ai/skills/stacks-investigate/SKILL.md +234 -106
- package/ai/skills/stacks-investigate/scripts/hitl-loop.template.sh +47 -0
- package/ai/skills/stacks-jobs/SKILL.md +1 -1
- package/ai/skills/stacks-listeners/SKILL.md +1 -1
- package/ai/skills/stacks-logging/SKILL.md +1 -1
- package/ai/skills/stacks-mail/SKILL.md +1 -1
- package/ai/skills/stacks-middleware/SKILL.md +1 -1
- package/ai/skills/stacks-migrations/SKILL.md +1 -1
- package/ai/skills/stacks-models/SKILL.md +1 -1
- package/ai/skills/stacks-new-feature/SKILL.md +65 -5
- package/ai/skills/stacks-notifications/SKILL.md +1 -1
- package/ai/skills/stacks-objects/SKILL.md +1 -1
- package/ai/skills/stacks-office-hours/SKILL.md +16 -2
- package/ai/skills/stacks-orm/SKILL.md +1 -1
- package/ai/skills/stacks-path/SKILL.md +1 -1
- package/ai/skills/stacks-payments/SKILL.md +35 -1
- package/ai/skills/stacks-plan-review/SKILL.md +27 -6
- package/ai/skills/stacks-plugins/SKILL.md +1 -1
- package/ai/skills/stacks-prototype/LOGIC.md +103 -0
- package/ai/skills/stacks-prototype/SKILL.md +66 -0
- package/ai/skills/stacks-prototype/UI.md +112 -0
- package/ai/skills/stacks-push/SKILL.md +1 -1
- package/ai/skills/stacks-query-builder/SKILL.md +1 -1
- package/ai/skills/stacks-queue/SKILL.md +1 -1
- package/ai/skills/stacks-realtime/SKILL.md +1 -1
- package/ai/skills/stacks-registry/SKILL.md +1 -1
- package/ai/skills/stacks-repl/SKILL.md +1 -1
- package/ai/skills/stacks-retro/SKILL.md +121 -75
- package/ai/skills/stacks-review/SKILL.md +182 -74
- package/ai/skills/stacks-router/SKILL.md +1 -1
- package/ai/skills/stacks-routes/SKILL.md +1 -1
- package/ai/skills/stacks-scaffolding/SKILL.md +1 -1
- package/ai/skills/stacks-scheduler/SKILL.md +1 -1
- package/ai/skills/stacks-search-engine/SKILL.md +1 -1
- package/ai/skills/stacks-security/SKILL.md +1 -1
- package/ai/skills/stacks-security-audit/SKILL.md +1 -1
- package/ai/skills/stacks-server/SKILL.md +1 -1
- package/ai/skills/stacks-shell/SKILL.md +1 -1
- package/ai/skills/stacks-slug/SKILL.md +1 -1
- package/ai/skills/stacks-sms/SKILL.md +1 -1
- package/ai/skills/stacks-socials/SKILL.md +1 -1
- package/ai/skills/stacks-storage/SKILL.md +1 -1
- package/ai/skills/stacks-strings/SKILL.md +1 -1
- package/ai/skills/stacks-stx/SKILL.md +1 -1
- package/ai/skills/stacks-tdd/EXAMPLES.md +136 -0
- package/ai/skills/stacks-tdd/SKILL.md +125 -0
- package/ai/skills/stacks-testing/SKILL.md +13 -3
- package/ai/skills/stacks-tunnel/SKILL.md +1 -1
- package/ai/skills/stacks-types/SKILL.md +1 -1
- package/ai/skills/stacks-ui/SKILL.md +1 -1
- package/ai/skills/stacks-utils/SKILL.md +1 -1
- package/ai/skills/stacks-validation/SKILL.md +1 -1
- package/ai/skills/stacks-whois/SKILL.md +1 -1
- package/ai/skills/stacks-wizard/SKILL.md +127 -0
- package/ai/skills/stacks-wizard/scripts/template.sh +208 -0
- package/ai/skills/stacks-writing-for-agents/MECHANICS.md +125 -0
- package/ai/skills/stacks-writing-for-agents/SKILL.md +218 -0
- package/app/Actions/Auth/GenerateTwoFactorSecretAction.ts +12 -2
- package/app/Actions/Commerce/Shipping/{DriverDestroyAction.ts → CourierDestroyAction.ts} +6 -6
- package/app/Actions/Commerce/Shipping/{DriverIndexAction.ts → CourierIndexAction.ts} +3 -3
- package/app/Actions/Commerce/Shipping/CourierPingStoreAction.ts +61 -0
- package/app/Actions/Commerce/Shipping/{DriverShowAction.ts → CourierShowAction.ts} +5 -5
- package/app/Actions/Commerce/Shipping/{DriverStoreAction.ts → CourierStoreAction.ts} +4 -4
- package/app/Actions/Commerce/Shipping/{DriverUpdateAction.ts → CourierUpdateAction.ts} +6 -6
- package/app/Actions/Commerce/Shipping/DeliveryRouteStartAction.ts +38 -0
- package/app/Actions/Commerce/Shipping/DeliveryStopCompleteAction.ts +40 -0
- package/app/Actions/Commerce/Shipping/DeliveryStopFailAction.ts +44 -0
- package/app/Actions/Commerce/Shipping/DeliveryStopStartAction.ts +39 -0
- package/app/Actions/Commerce/Shipping/courier-session.ts +75 -0
- package/app/Actions/Commerce/commerce-action.test.ts +5 -5
- package/app/Actions/Dashboard/Commerce/CommerceDeliveryAction.ts +5 -5
- package/app/Actions/Dashboard/Commerce/CourierIndexAction.ts +24 -0
- package/app/Actions/Dashboard/Commerce/DeliveryRouteIndexAction.ts +7 -7
- package/app/Actions/Dashboard/Commerce/commerce-delivery.test.ts +11 -11
- package/app/Actions/Dashboard/Commerce/commerce-delivery.ts +29 -29
- package/app/Actions/Dashboard/Commerce/{driver-records.test.ts → courier-records.test.ts} +9 -9
- package/app/Actions/Dashboard/Commerce/{driver-records.ts → courier-records.ts} +14 -14
- package/app/Actions/Dashboard/Commerce/delivery-route-records.test.ts +13 -13
- package/app/Actions/Dashboard/Commerce/delivery-route-records.ts +25 -25
- package/app/Models/User.ts +1 -1
- package/app/Models/commerce/{Driver.ts → Courier.ts} +7 -7
- package/app/Models/commerce/{DriverPing.ts → CourierPing.ts} +7 -7
- package/app/Models/commerce/DeliveryRoute.ts +6 -6
- package/app/Models/commerce/DeliveryStop.ts +31 -8
- package/bootstrap.ts +7 -0
- package/functions/commerce/shippings/couriers.ts +19 -0
- package/ide/vscode/package.json +1 -1
- package/package.json +4 -3
- package/resources/components/Dashboard/Commerce/Delivery/{DriverDeleteDialog.stx → CourierDeleteDialog.stx} +5 -5
- package/resources/components/Dashboard/Commerce/Delivery/{DriverDialog.stx → CourierDialog.stx} +10 -10
- package/resources/components/Dashboard/Commerce/Delivery/{DriversDashboard.stx → CouriersDashboard.stx} +43 -43
- package/resources/components/Dashboard/Commerce/Delivery/{DriversTable.stx → CouriersTable.stx} +21 -21
- package/resources/components/Dashboard/Commerce/Delivery/DeliveryOverviewDashboard.stx +18 -18
- package/resources/components/Dashboard/Commerce/Delivery/DeliveryRouteDeleteDialog.stx +2 -2
- package/resources/components/Dashboard/Commerce/Delivery/DeliveryRouteDialog.stx +22 -22
- package/resources/components/Dashboard/Commerce/Delivery/DeliveryRoutesDashboard.stx +24 -24
- package/resources/components/Dashboard/Commerce/Delivery/DeliveryRoutesTable.stx +8 -8
- package/resources/components/Dashboard/Commerce/Delivery/TabNavigation.stx +1 -1
- package/resources/functions/dashboard/data.ts +1 -1
- package/resources/functions/dashboard/sidebar.ts +2 -2
- package/routes/dashboard-api.ts +6 -6
- package/routes/dashboard.ts +7 -7
- package/routes/delivery.ts +24 -0
- package/types/defaults.ts +3 -3
- package/views/dashboard/.discovered-models.json +18 -18
- package/views/dashboard/AUDIT.md +1 -1
- package/views/dashboard/commerce/delivery/{drivers.stx → couriers.stx} +2 -2
- package/views/dashboard/composables/useChart.ts +16 -2
- package/views/dashboard/layouts/default.stx +1 -1
- package/app/Actions/Dashboard/Commerce/DriverIndexAction.ts +0 -24
- package/functions/commerce/shippings/drivers.ts +0 -19
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: stacks-guard
|
|
3
|
-
description: Use for safety rails
|
|
3
|
+
description: Use for safety rails in a Stacks project - detecting destructive commands (rm -rf, DROP TABLE, force-push, git reset --hard, migrate:fresh against production), installing a PreToolUse hook that blocks them before they run, freeze mode for focused debugging, and a pre-commit safety scan. Invoke with /stacks-guard.
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: Bun >= 1.3.0, TypeScript
|
|
6
6
|
allowed-tools: Read Edit Write Bash Grep Glob
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
# /stacks-guard
|
|
9
|
+
# /stacks-guard - Safety Rails
|
|
10
10
|
|
|
11
11
|
Prevent destructive actions and enforce focus during debugging sessions.
|
|
12
12
|
|
|
13
13
|
## Destructive Command Detection
|
|
14
14
|
|
|
15
|
-
### 🔴 CRITICAL
|
|
15
|
+
### 🔴 CRITICAL - Block and require confirmation
|
|
16
16
|
|
|
17
17
|
| Pattern | Risk |
|
|
18
18
|
|---------|------|
|
|
@@ -32,7 +32,7 @@ Risk: [what will be destroyed]
|
|
|
32
32
|
Reversible: [yes/no]
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
### 🟡 WARNING
|
|
35
|
+
### 🟡 WARNING - Warn but allow
|
|
36
36
|
|
|
37
37
|
| Pattern | Risk |
|
|
38
38
|
|---------|------|
|
|
@@ -44,11 +44,11 @@ Reversible: [yes/no]
|
|
|
44
44
|
| Modifying `config/services.ts` | Contains API keys |
|
|
45
45
|
| Modifying `storage/framework/core/*/src/index.ts` | Public package API |
|
|
46
46
|
|
|
47
|
-
### 🟢 INFORMATIONAL
|
|
47
|
+
### 🟢 INFORMATIONAL - Note but don't block
|
|
48
48
|
|
|
49
49
|
| Pattern | Note |
|
|
50
50
|
|---------|------|
|
|
51
|
-
| `git rebase` | History rewrite
|
|
51
|
+
| `git rebase` | History rewrite - ensure not shared |
|
|
52
52
|
| `bun update` (major versions) | May introduce breaking changes |
|
|
53
53
|
| Modifying CI/CD config | Affects deployment pipeline |
|
|
54
54
|
| Changing auth/permissions code | Security-sensitive |
|
|
@@ -85,14 +85,89 @@ Before commits, scan for:
|
|
|
85
85
|
|
|
86
86
|
## Stacks-Specific Guards
|
|
87
87
|
|
|
88
|
-
- **Don't edit `storage/framework/types/*.d.ts`**
|
|
88
|
+
- **Don't edit `storage/framework/types/*.d.ts`** - these are auto-generated
|
|
89
89
|
- **Don't edit `storage/framework/defaults/app/Models/`** without also generating migrations
|
|
90
|
-
- **Don't modify `config/services.ts` in commits**
|
|
91
|
-
- **Check `storage/framework/core/*/package.json` versions**
|
|
90
|
+
- **Don't modify `config/services.ts` in commits** - contains API keys
|
|
91
|
+
- **Check `storage/framework/core/*/package.json` versions** - workspace packages should stay in sync
|
|
92
|
+
|
|
93
|
+
## Make it enforcing
|
|
94
|
+
|
|
95
|
+
Everything above is advisory: it works only while the agent is paying attention.
|
|
96
|
+
A **PreToolUse hook** turns it into enforcement, because the harness runs it on
|
|
97
|
+
every Bash call before the command executes.
|
|
98
|
+
|
|
99
|
+
[scripts/block-destructive.sh](scripts/block-destructive.sh) is the hook. It
|
|
100
|
+
reads the tool call on stdin, exits 2 with a message on stderr when the command
|
|
101
|
+
matches a blocked pattern, and exits 0 otherwise. It blocks two lists: commands
|
|
102
|
+
that are unrecoverable anywhere (`rm -rf /` or `~` or `.`, force-push,
|
|
103
|
+
`reset --hard`, `clean -f`, `branch -D`, `DROP TABLE`, `TRUNCATE TABLE`), and
|
|
104
|
+
commands that are routine locally but destructive against production
|
|
105
|
+
(`migrate:fresh`, `seed --fresh`, `cloud:remove`, `cloud:cleanup`, gated on the
|
|
106
|
+
command naming a production env).
|
|
107
|
+
|
|
108
|
+
Deliberately not blocked: a plain `git push`, `rm -rf node_modules`,
|
|
109
|
+
`buddy migrate:fresh` locally. A guard that fires on regenerable things gets
|
|
110
|
+
turned off, and a guard that is off protects nothing.
|
|
111
|
+
|
|
112
|
+
Credit: adapted from Matt Pocock's `git-guardrails-claude-code` skill (MIT),
|
|
113
|
+
<https://github.com/mattpocock/skills>.
|
|
114
|
+
|
|
115
|
+
### Install
|
|
116
|
+
|
|
117
|
+
1. **Ask the scope.** This project (`.claude/settings.json`) or every project
|
|
118
|
+
(`~/.claude/settings.json`)?
|
|
119
|
+
2. **Copy the script** to `.claude/hooks/block-destructive.sh` or
|
|
120
|
+
`~/.claude/hooks/block-destructive.sh`, and `chmod +x` it.
|
|
121
|
+
3. **Register it.** Merge into the existing `hooks.PreToolUse` array rather than
|
|
122
|
+
overwriting the file:
|
|
123
|
+
|
|
124
|
+
```json
|
|
125
|
+
{
|
|
126
|
+
"hooks": {
|
|
127
|
+
"PreToolUse": [
|
|
128
|
+
{
|
|
129
|
+
"matcher": "Bash",
|
|
130
|
+
"hooks": [
|
|
131
|
+
{
|
|
132
|
+
"type": "command",
|
|
133
|
+
"command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/block-destructive.sh"
|
|
134
|
+
}
|
|
135
|
+
]
|
|
136
|
+
}
|
|
137
|
+
]
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
For the global install, the command is `~/.claude/hooks/block-destructive.sh`.
|
|
143
|
+
4. **Tune the lists.** Ask the user what to add or remove. A repo that never
|
|
144
|
+
deploys does not need the production list. A repo with a protected `main` may
|
|
145
|
+
want a plain `git push` blocked too.
|
|
146
|
+
5. **Verify.** Each of these should print a BLOCKED line and exit 2:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
echo '{"tool_input":{"command":"git push --force origin main"}}' | .claude/hooks/block-destructive.sh
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
And each of these should exit 0 silently:
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
echo '{"tool_input":{"command":"rm -rf node_modules"}}' | .claude/hooks/block-destructive.sh
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
`.claude/` is gitignored in a Stacks project, so a project-scope install is
|
|
159
|
+
per-developer. To make it a team rule, commit the script under `scripts/` and
|
|
160
|
+
have `buddy setup:ai` users point their hook at that path.
|
|
92
161
|
|
|
93
162
|
## Rules
|
|
94
163
|
|
|
95
164
|
- **Never silently allow destructive commands.**
|
|
96
|
-
- **Don't be annoying.** `rm file.txt` doesn't need a warning. `rm -rf node_modules` is fine
|
|
165
|
+
- **Don't be annoying.** `rm file.txt` doesn't need a warning. `rm -rf node_modules` is fine - it's regenerable.
|
|
97
166
|
- **Respect user intent.** After warning once, if confirmed, proceed.
|
|
98
|
-
- **Context matters.** Force-push to personal branch
|
|
167
|
+
- **Context matters.** Force-push to a personal branch is not force-push to main.
|
|
168
|
+
|
|
169
|
+
## Downstream
|
|
170
|
+
|
|
171
|
+
> Guard installed? `/stacks-retro` is where a near-miss becomes a permanent
|
|
172
|
+
> check, and `/stacks-wizard` is for the production steps a human should be
|
|
173
|
+
> doing by hand anyway.
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#
|
|
3
|
+
# Claude Code PreToolUse hook: block destructive commands before they run.
|
|
4
|
+
#
|
|
5
|
+
# Reads the tool call on stdin, exits 2 with a message on stderr when the
|
|
6
|
+
# command matches a blocked pattern, and exits 0 otherwise.
|
|
7
|
+
#
|
|
8
|
+
# Adapted from Matt Pocock's `git-guardrails-claude-code` skill (MIT),
|
|
9
|
+
# https://github.com/mattpocock/skills
|
|
10
|
+
#
|
|
11
|
+
# Install: see the stacks-guard skill. Customise the two pattern lists below;
|
|
12
|
+
# they are a starting point, not a policy.
|
|
13
|
+
|
|
14
|
+
set -uo pipefail
|
|
15
|
+
|
|
16
|
+
INPUT=$(cat)
|
|
17
|
+
|
|
18
|
+
if command -v jq >/dev/null 2>&1; then
|
|
19
|
+
COMMAND=$(printf '%s' "$INPUT" | jq -r '.tool_input.command // empty')
|
|
20
|
+
else
|
|
21
|
+
# No jq: fall back to the raw payload. Coarser, but it still matches.
|
|
22
|
+
COMMAND="$INPUT"
|
|
23
|
+
fi
|
|
24
|
+
|
|
25
|
+
[[ -z "$COMMAND" ]] && exit 0
|
|
26
|
+
|
|
27
|
+
# Unrecoverable. These destroy work or data that no command brings back.
|
|
28
|
+
BLOCKED=(
|
|
29
|
+
'rm[[:space:]]+-[a-zA-Z]*[rR][a-zA-Z]*f?[[:space:]]+(/|~|\.)([[:space:]]|$)'
|
|
30
|
+
'git[[:space:]]+push[[:space:]].*--force'
|
|
31
|
+
'git[[:space:]]+push[[:space:]].*-f([[:space:]]|$)'
|
|
32
|
+
'git[[:space:]]+reset[[:space:]]+--hard'
|
|
33
|
+
'git[[:space:]]+clean[[:space:]]+-[a-zA-Z]*f'
|
|
34
|
+
'git[[:space:]]+branch[[:space:]]+-D'
|
|
35
|
+
'git[[:space:]]+checkout[[:space:]]+--[[:space:]]+\.'
|
|
36
|
+
'git[[:space:]]+restore[[:space:]]+\.'
|
|
37
|
+
'DROP[[:space:]]+(TABLE|DATABASE|SCHEMA)'
|
|
38
|
+
'TRUNCATE[[:space:]]+TABLE'
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
# Destructive only against production. Same commands are routine locally.
|
|
42
|
+
PROD_BLOCKED=(
|
|
43
|
+
'(buddy|bud|stacks)[[:space:]]+migrate:fresh'
|
|
44
|
+
'(buddy|bud|stacks)[[:space:]]+seed[[:space:]].*--fresh'
|
|
45
|
+
'(buddy|bud|stacks)[[:space:]]+cloud:remove'
|
|
46
|
+
'(buddy|bud|stacks)[[:space:]]+cloud:cleanup'
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
for pattern in "${BLOCKED[@]}"; do
|
|
50
|
+
if printf '%s' "$COMMAND" | grep -qE "$pattern"; then
|
|
51
|
+
printf 'BLOCKED: this command matches the destructive pattern /%s/ and the user has not authorised it. Ask them to run it themselves, or propose a reversible alternative.\n' "$pattern" >&2
|
|
52
|
+
exit 2
|
|
53
|
+
fi
|
|
54
|
+
done
|
|
55
|
+
|
|
56
|
+
# A command is production-facing when it says so, or when it is reading a
|
|
57
|
+
# production env file.
|
|
58
|
+
if printf '%s' "$COMMAND" | grep -qE '(APP_ENV=production|NODE_ENV=production|--env[= ]production|\.env\.production)'; then
|
|
59
|
+
for pattern in "${PROD_BLOCKED[@]}"; do
|
|
60
|
+
if printf '%s' "$COMMAND" | grep -qE "$pattern"; then
|
|
61
|
+
printf 'BLOCKED: this command matches /%s/ against production. It drops or removes live infrastructure. Ask the user to run it themselves.\n' "$pattern" >&2
|
|
62
|
+
exit 2
|
|
63
|
+
fi
|
|
64
|
+
done
|
|
65
|
+
fi
|
|
66
|
+
|
|
67
|
+
exit 0
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: stacks-handoff
|
|
3
|
+
description: Compact the current conversation into a portable handoff document for another agent or session to pick up.
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
argument-hint: "What will the next session be used for?"
|
|
6
|
+
license: MIT
|
|
7
|
+
compatibility: Bun >= 1.3.0, TypeScript
|
|
8
|
+
allowed-tools: Read Edit Write Bash Grep Glob
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Handoff
|
|
12
|
+
|
|
13
|
+
Write a handoff document summarising the current conversation so a fresh agent
|
|
14
|
+
can continue the work. Save it to the OS temp directory, not the workspace: a
|
|
15
|
+
handoff is scaffolding for one hop, and a stray `HANDOFF.md` in the repo is
|
|
16
|
+
sediment.
|
|
17
|
+
|
|
18
|
+
If the user passed an argument, treat it as a description of what the next
|
|
19
|
+
session will focus on and tailor the document to that.
|
|
20
|
+
|
|
21
|
+
Credit: adapted from Matt Pocock's `handoff` skill (MIT),
|
|
22
|
+
<https://github.com/mattpocock/skills>.
|
|
23
|
+
|
|
24
|
+
## What goes in
|
|
25
|
+
|
|
26
|
+
- **The goal**, in one paragraph. What the next session is trying to achieve.
|
|
27
|
+
- **Where things stand.** What is done, what is in flight, what is untouched.
|
|
28
|
+
- **The decisions already made, and why.** This is the part a summary of the
|
|
29
|
+
diff cannot recover, so it is the part worth the most words.
|
|
30
|
+
- **What is known to be broken or unverified.** Name the command that would
|
|
31
|
+
prove it either way.
|
|
32
|
+
- **Suggested skills.** Name which `stacks-*` skills the next agent should call
|
|
33
|
+
the Skill tool for. A handoff that does not point at `stacks-orm` before a
|
|
34
|
+
model change is handing over a landmine.
|
|
35
|
+
- **Open questions** the next session has to resolve, or take back to the user.
|
|
36
|
+
|
|
37
|
+
## What stays out
|
|
38
|
+
|
|
39
|
+
Do not duplicate content already captured elsewhere. Reference it by path,
|
|
40
|
+
branch, URL or commit instead:
|
|
41
|
+
|
|
42
|
+
- Committed code and its diff.
|
|
43
|
+
- A spec, plan or ADR already written to disk.
|
|
44
|
+
- An issue or PR on the tracker.
|
|
45
|
+
- Anything a `stacks-*` skill already documents. Point at the skill.
|
|
46
|
+
|
|
47
|
+
## Redact before you write
|
|
48
|
+
|
|
49
|
+
The document leaves this session, so treat it as publishable. Write
|
|
50
|
+
`<REDACTED>` in place of:
|
|
51
|
+
|
|
52
|
+
- Anything from `.env`, `.env.production` or `config/services.ts`.
|
|
53
|
+
- `APP_KEY`, AWS keys, `HCLOUD_TOKEN`, registrar and DNS API tokens, database
|
|
54
|
+
URLs with credentials in them.
|
|
55
|
+
- Personal data pulled out of a database during the session.
|
|
56
|
+
|
|
57
|
+
Reference the variable name and where it lives, never the value.
|
|
58
|
+
|
|
59
|
+
## Finish
|
|
60
|
+
|
|
61
|
+
Tell the user the absolute path, and say in one line what the next session
|
|
62
|
+
should do first.
|
|
63
|
+
|
|
64
|
+
## Before you hand off at all
|
|
65
|
+
|
|
66
|
+
A handoff is narrow. It buys **portability**, and you only need it when
|
|
67
|
+
something is actually travelling: a different agent, a different directory or
|
|
68
|
+
repo, a colleague, or a side task forked mid-phase. If none of those apply, the
|
|
69
|
+
cheaper moves are to continue, to clear, or to compact. `stacks-flow` has the
|
|
70
|
+
ordered tree.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: stacks-health
|
|
3
|
-
description: Use when implementing health checks in a Stacks application
|
|
3
|
+
description: Use when implementing health checks in a Stacks application - service monitoring, health endpoints, or diagnostic checks. Covers @stacksjs/health (currently WIP - Oh Dear integration planned).
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: Bun >= 1.3.0, TypeScript
|
|
6
6
|
allowed-tools: Read Edit Write Bash Grep Glob
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: stacks-http
|
|
3
|
-
description: Use when working with HTTP utilities in a Stacks application
|
|
3
|
+
description: Use when working with HTTP utilities in a Stacks application - HTTP status codes, making outbound HTTP requests via HttxClient, reactive fetch composables (useFetch/createFetch), or HTTP-related helpers. Covers @stacksjs/http, @stacksjs/httx, and the fetch composables in @stacksjs/composables.
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: Bun >= 1.3.0, TypeScript
|
|
6
6
|
allowed-tools: Read Edit Write Bash Grep Glob
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: stacks-i18n
|
|
3
|
-
description: Use when working with internationalization in a Stacks application
|
|
3
|
+
description: Use when working with internationalization in a Stacks application - translations, locale management, pluralization, date/number/currency formatting, or loading translation files. Covers @stacksjs/i18n with translator, formatter, loader, and pluralization modules.
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: Bun >= 1.3.0, TypeScript
|
|
6
6
|
allowed-tools: Read Edit Write Bash Grep Glob
|