aw-ecc 1.4.32 → 1.4.48
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/plugin.json +1 -1
- package/.cursor/INSTALL.md +7 -5
- package/.cursor/hooks/adapter.js +41 -4
- package/.cursor/hooks/after-agent-response.js +62 -0
- package/.cursor/hooks/before-submit-prompt.js +7 -1
- package/.cursor/hooks/post-tool-use-failure.js +21 -0
- package/.cursor/hooks/post-tool-use.js +39 -0
- package/.cursor/hooks/shared/aw-phase-definitions.js +53 -0
- package/.cursor/hooks/shared/aw-phase-runner.js +3 -1
- package/.cursor/hooks/subagent-start.js +22 -4
- package/.cursor/hooks/subagent-stop.js +18 -1
- package/.cursor/hooks.json +23 -2
- package/.opencode/package.json +1 -1
- package/AGENTS.md +3 -3
- package/README.md +5 -5
- package/commands/adk.md +52 -0
- package/commands/build.md +22 -9
- package/commands/deploy.md +12 -0
- package/commands/execute.md +9 -0
- package/commands/feature.md +333 -0
- package/commands/investigate.md +18 -5
- package/commands/plan.md +23 -9
- package/commands/publish.md +65 -0
- package/commands/review.md +12 -0
- package/commands/ship.md +12 -0
- package/commands/test.md +12 -0
- package/commands/verify.md +9 -0
- package/hooks/hooks.json +36 -0
- package/manifests/install-components.json +8 -0
- package/manifests/install-modules.json +83 -0
- package/manifests/install-profiles.json +7 -0
- package/package.json +2 -2
- package/scripts/ci/validate-rules.js +51 -0
- package/scripts/cursor-aw-home/hooks.json +23 -2
- package/scripts/cursor-aw-hooks/adapter.js +41 -4
- package/scripts/cursor-aw-hooks/before-submit-prompt.js +7 -1
- package/scripts/hooks/aw-usage-commit-created.js +32 -0
- package/scripts/hooks/aw-usage-post-tool-use-failure.js +56 -0
- package/scripts/hooks/aw-usage-post-tool-use.js +242 -0
- package/scripts/hooks/aw-usage-prompt-submit.js +112 -0
- package/scripts/hooks/aw-usage-session-start.js +48 -0
- package/scripts/hooks/aw-usage-stop.js +182 -0
- package/scripts/hooks/aw-usage-telemetry-send.js +84 -0
- package/scripts/hooks/cost-tracker.js +3 -23
- package/scripts/hooks/shared/aw-phase-definitions.js +53 -0
- package/scripts/hooks/shared/aw-phase-runner.js +3 -1
- package/scripts/lib/aw-hook-contract.js +2 -2
- package/scripts/lib/aw-pricing.js +306 -0
- package/scripts/lib/aw-usage-telemetry.js +472 -0
- package/scripts/lib/codex-hook-config.js +8 -8
- package/scripts/lib/cursor-hook-config.js +25 -10
- package/scripts/lib/install-targets/cursor-project.js +3 -0
- package/scripts/lib/install-targets/helpers.js +20 -3
- package/skills/aw-adk/SKILL.md +317 -0
- package/skills/aw-adk/agents/analyzer.md +113 -0
- package/skills/aw-adk/agents/comparator.md +113 -0
- package/skills/aw-adk/agents/grader.md +115 -0
- package/skills/aw-adk/assets/eval_review.html +76 -0
- package/skills/aw-adk/eval-viewer/generate_review.py +164 -0
- package/skills/aw-adk/eval-viewer/viewer.html +181 -0
- package/skills/aw-adk/evals/eval-colocated-placement.md +84 -0
- package/skills/aw-adk/evals/eval-create-agent.md +90 -0
- package/skills/aw-adk/evals/eval-create-command.md +98 -0
- package/skills/aw-adk/evals/eval-create-eval.md +89 -0
- package/skills/aw-adk/evals/eval-create-rule.md +99 -0
- package/skills/aw-adk/evals/eval-create-skill.md +97 -0
- package/skills/aw-adk/evals/eval-delete-agent.md +79 -0
- package/skills/aw-adk/evals/eval-delete-command.md +89 -0
- package/skills/aw-adk/evals/eval-delete-rule.md +86 -0
- package/skills/aw-adk/evals/eval-delete-skill.md +90 -0
- package/skills/aw-adk/evals/eval-meta-eval-coverage.md +78 -0
- package/skills/aw-adk/evals/eval-meta-eval-determinism.md +81 -0
- package/skills/aw-adk/evals/eval-meta-eval-false-pass.md +81 -0
- package/skills/aw-adk/evals/eval-score-accuracy.md +95 -0
- package/skills/aw-adk/evals/eval-type-redirect.md +68 -0
- package/skills/aw-adk/evals/evals.json +96 -0
- package/skills/aw-adk/references/artifact-wiring.md +162 -0
- package/skills/aw-adk/references/cross-ide-mapping.md +71 -0
- package/skills/aw-adk/references/eval-placement-guide.md +183 -0
- package/skills/aw-adk/references/external-resources.md +75 -0
- package/skills/aw-adk/references/getting-started.md +66 -0
- package/skills/aw-adk/references/registry-structure.md +152 -0
- package/skills/aw-adk/references/rubric-agent.md +36 -0
- package/skills/aw-adk/references/rubric-command.md +36 -0
- package/skills/aw-adk/references/rubric-eval.md +36 -0
- package/skills/aw-adk/references/rubric-meta-eval.md +132 -0
- package/skills/aw-adk/references/rubric-rule.md +36 -0
- package/skills/aw-adk/references/rubric-skill.md +36 -0
- package/skills/aw-adk/references/schemas.md +222 -0
- package/skills/aw-adk/references/template-agent.md +251 -0
- package/skills/aw-adk/references/template-command.md +279 -0
- package/skills/aw-adk/references/template-eval.md +176 -0
- package/skills/aw-adk/references/template-rule.md +119 -0
- package/skills/aw-adk/references/template-skill.md +123 -0
- package/skills/aw-adk/references/type-classifier.md +98 -0
- package/skills/aw-adk/references/writing-good-agents.md +227 -0
- package/skills/aw-adk/references/writing-good-commands.md +258 -0
- package/skills/aw-adk/references/writing-good-evals.md +271 -0
- package/skills/aw-adk/references/writing-good-rules.md +214 -0
- package/skills/aw-adk/references/writing-good-skills.md +159 -0
- package/skills/aw-adk/scripts/aggregate-benchmark.py +190 -0
- package/skills/aw-adk/scripts/lint-artifact.sh +211 -0
- package/skills/aw-adk/scripts/score-artifact.sh +179 -0
- package/skills/aw-adk/scripts/trigger-eval.py +192 -0
- package/skills/aw-build/SKILL.md +19 -2
- package/skills/aw-deploy/SKILL.md +65 -3
- package/skills/aw-design/SKILL.md +156 -0
- package/skills/aw-design/references/highrise-tokens.md +394 -0
- package/skills/aw-design/references/micro-interactions.md +76 -0
- package/skills/aw-design/references/prompt-template.md +160 -0
- package/skills/aw-design/references/quality-checklist.md +70 -0
- package/skills/aw-design/references/self-review.md +497 -0
- package/skills/aw-design/references/stitch-workflow.md +127 -0
- package/skills/aw-feature/SKILL.md +293 -0
- package/skills/aw-investigate/SKILL.md +17 -0
- package/skills/aw-plan/SKILL.md +34 -3
- package/skills/aw-publish/SKILL.md +300 -0
- package/skills/aw-publish/evals/eval-confirmation-gate.md +60 -0
- package/skills/aw-publish/evals/eval-intent-detection.md +111 -0
- package/skills/aw-publish/evals/eval-push-modes.md +67 -0
- package/skills/aw-publish/evals/eval-rules-push.md +60 -0
- package/skills/aw-publish/evals/evals.json +29 -0
- package/skills/aw-publish/references/push-modes.md +38 -0
- package/skills/aw-review/SKILL.md +88 -9
- package/skills/aw-rules-review/SKILL.md +124 -0
- package/skills/aw-rules-review/agents/openai.yaml +3 -0
- package/skills/aw-rules-review/scripts/generate-review-template.mjs +323 -0
- package/skills/aw-ship/SKILL.md +16 -0
- package/skills/aw-spec/SKILL.md +15 -0
- package/skills/aw-tasks/SKILL.md +15 -0
- package/skills/aw-test/SKILL.md +16 -0
- package/skills/aw-yolo/SKILL.md +4 -0
- package/skills/diagnose/SKILL.md +121 -0
- package/skills/diagnose/scripts/hitl-loop.template.sh +41 -0
- package/skills/finish-only-when-green/SKILL.md +265 -0
- package/skills/grill-me/SKILL.md +24 -0
- package/skills/grill-with-docs/SKILL.md +92 -0
- package/skills/grill-with-docs/adr-format.md +47 -0
- package/skills/grill-with-docs/context-format.md +67 -0
- package/skills/improve-codebase-architecture/SKILL.md +75 -0
- package/skills/improve-codebase-architecture/deepening.md +37 -0
- package/skills/improve-codebase-architecture/interface-design.md +44 -0
- package/skills/improve-codebase-architecture/language.md +53 -0
- package/skills/local-ghl-setup-from-screenshot/SKILL.md +538 -0
- package/skills/tdd/SKILL.md +115 -0
- package/skills/tdd/deep-modules.md +33 -0
- package/skills/tdd/interface-design.md +31 -0
- package/skills/tdd/mocking.md +59 -0
- package/skills/tdd/refactoring.md +10 -0
- package/skills/tdd/tests.md +61 -0
- package/skills/to-issues/SKILL.md +62 -0
- package/skills/to-prd/SKILL.md +75 -0
- package/skills/using-aw-skills/SKILL.md +170 -237
- package/skills/using-aw-skills/hooks/session-start.sh +11 -41
- package/skills/zoom-out/SKILL.md +24 -0
- package/.codex/hooks/aw-post-tool-use.sh +0 -6
- package/.codex/hooks/aw-pre-tool-use.sh +0 -6
- package/.codex/hooks/aw-session-start.sh +0 -25
- package/.codex/hooks/aw-stop.sh +0 -6
- package/.codex/hooks/aw-user-prompt-submit.sh +0 -10
- package/.codex/hooks.json +0 -62
- package/.cursor/rules/common-agents.md +0 -53
- package/.cursor/rules/common-aw-routing.md +0 -43
- package/.cursor/rules/common-coding-style.md +0 -52
- package/.cursor/rules/common-development-workflow.md +0 -33
- package/.cursor/rules/common-git-workflow.md +0 -28
- package/.cursor/rules/common-hooks.md +0 -34
- package/.cursor/rules/common-patterns.md +0 -35
- package/.cursor/rules/common-performance.md +0 -59
- package/.cursor/rules/common-security.md +0 -33
- package/.cursor/rules/common-testing.md +0 -33
- package/.cursor/skills/api-and-interface-design/SKILL.md +0 -75
- package/.cursor/skills/article-writing/SKILL.md +0 -85
- package/.cursor/skills/aw-brainstorm/SKILL.md +0 -115
- package/.cursor/skills/aw-build/SKILL.md +0 -152
- package/.cursor/skills/aw-build/evals/build-stage-cases.json +0 -28
- package/.cursor/skills/aw-debug/SKILL.md +0 -49
- package/.cursor/skills/aw-deploy/SKILL.md +0 -101
- package/.cursor/skills/aw-deploy/evals/deploy-stage-cases.json +0 -32
- package/.cursor/skills/aw-execute/SKILL.md +0 -47
- package/.cursor/skills/aw-execute/references/mode-code.md +0 -47
- package/.cursor/skills/aw-execute/references/mode-docs.md +0 -28
- package/.cursor/skills/aw-execute/references/mode-infra.md +0 -44
- package/.cursor/skills/aw-execute/references/mode-migration.md +0 -58
- package/.cursor/skills/aw-execute/references/worker-implementer.md +0 -26
- package/.cursor/skills/aw-execute/references/worker-parallel-worker.md +0 -23
- package/.cursor/skills/aw-execute/references/worker-quality-reviewer.md +0 -23
- package/.cursor/skills/aw-execute/references/worker-spec-reviewer.md +0 -23
- package/.cursor/skills/aw-execute/scripts/build-worker-bundle.js +0 -229
- package/.cursor/skills/aw-finish/SKILL.md +0 -111
- package/.cursor/skills/aw-investigate/SKILL.md +0 -109
- package/.cursor/skills/aw-plan/SKILL.md +0 -368
- package/.cursor/skills/aw-prepare/SKILL.md +0 -118
- package/.cursor/skills/aw-review/SKILL.md +0 -118
- package/.cursor/skills/aw-ship/SKILL.md +0 -115
- package/.cursor/skills/aw-spec/SKILL.md +0 -104
- package/.cursor/skills/aw-tasks/SKILL.md +0 -138
- package/.cursor/skills/aw-test/SKILL.md +0 -118
- package/.cursor/skills/aw-verify/SKILL.md +0 -51
- package/.cursor/skills/aw-yolo/SKILL.md +0 -111
- package/.cursor/skills/browser-testing-with-devtools/SKILL.md +0 -81
- package/.cursor/skills/bun-runtime/SKILL.md +0 -84
- package/.cursor/skills/ci-cd-and-automation/SKILL.md +0 -71
- package/.cursor/skills/code-simplification/SKILL.md +0 -74
- package/.cursor/skills/content-engine/SKILL.md +0 -88
- package/.cursor/skills/context-engineering/SKILL.md +0 -74
- package/.cursor/skills/deprecation-and-migration/SKILL.md +0 -75
- package/.cursor/skills/documentation-and-adrs/SKILL.md +0 -75
- package/.cursor/skills/documentation-lookup/SKILL.md +0 -90
- package/.cursor/skills/frontend-slides/SKILL.md +0 -184
- package/.cursor/skills/frontend-slides/STYLE_PRESETS.md +0 -330
- package/.cursor/skills/frontend-ui-engineering/SKILL.md +0 -68
- package/.cursor/skills/git-workflow-and-versioning/SKILL.md +0 -75
- package/.cursor/skills/idea-refine/SKILL.md +0 -84
- package/.cursor/skills/incremental-implementation/SKILL.md +0 -75
- package/.cursor/skills/investor-materials/SKILL.md +0 -96
- package/.cursor/skills/investor-outreach/SKILL.md +0 -76
- package/.cursor/skills/market-research/SKILL.md +0 -75
- package/.cursor/skills/mcp-server-patterns/SKILL.md +0 -67
- package/.cursor/skills/nextjs-turbopack/SKILL.md +0 -44
- package/.cursor/skills/performance-optimization/SKILL.md +0 -77
- package/.cursor/skills/security-and-hardening/SKILL.md +0 -70
- package/.cursor/skills/using-aw-skills/SKILL.md +0 -290
- package/.cursor/skills/using-aw-skills/evals/skill-trigger-cases.tsv +0 -25
- package/.cursor/skills/using-aw-skills/evals/test-skill-triggers.sh +0 -171
- package/.cursor/skills/using-aw-skills/hooks/hooks.json +0 -9
- package/.cursor/skills/using-aw-skills/hooks/session-start.sh +0 -67
- package/.cursor/skills/using-platform-skills/SKILL.md +0 -163
- package/.cursor/skills/using-platform-skills/evals/platform-selection-cases.json +0 -52
- /package/.cursor/rules/{golang-coding-style.md → golang-coding-style.mdc} +0 -0
- /package/.cursor/rules/{golang-hooks.md → golang-hooks.mdc} +0 -0
- /package/.cursor/rules/{golang-patterns.md → golang-patterns.mdc} +0 -0
- /package/.cursor/rules/{golang-security.md → golang-security.mdc} +0 -0
- /package/.cursor/rules/{golang-testing.md → golang-testing.mdc} +0 -0
- /package/.cursor/rules/{kotlin-coding-style.md → kotlin-coding-style.mdc} +0 -0
- /package/.cursor/rules/{kotlin-hooks.md → kotlin-hooks.mdc} +0 -0
- /package/.cursor/rules/{kotlin-patterns.md → kotlin-patterns.mdc} +0 -0
- /package/.cursor/rules/{kotlin-security.md → kotlin-security.mdc} +0 -0
- /package/.cursor/rules/{kotlin-testing.md → kotlin-testing.mdc} +0 -0
- /package/.cursor/rules/{php-coding-style.md → php-coding-style.mdc} +0 -0
- /package/.cursor/rules/{php-hooks.md → php-hooks.mdc} +0 -0
- /package/.cursor/rules/{php-patterns.md → php-patterns.mdc} +0 -0
- /package/.cursor/rules/{php-security.md → php-security.mdc} +0 -0
- /package/.cursor/rules/{php-testing.md → php-testing.mdc} +0 -0
- /package/.cursor/rules/{python-coding-style.md → python-coding-style.mdc} +0 -0
- /package/.cursor/rules/{python-hooks.md → python-hooks.mdc} +0 -0
- /package/.cursor/rules/{python-patterns.md → python-patterns.mdc} +0 -0
- /package/.cursor/rules/{python-security.md → python-security.mdc} +0 -0
- /package/.cursor/rules/{python-testing.md → python-testing.mdc} +0 -0
- /package/.cursor/rules/{swift-coding-style.md → swift-coding-style.mdc} +0 -0
- /package/.cursor/rules/{swift-hooks.md → swift-hooks.mdc} +0 -0
- /package/.cursor/rules/{swift-patterns.md → swift-patterns.mdc} +0 -0
- /package/.cursor/rules/{swift-security.md → swift-security.mdc} +0 -0
- /package/.cursor/rules/{swift-testing.md → swift-testing.mdc} +0 -0
- /package/.cursor/rules/{typescript-coding-style.md → typescript-coding-style.mdc} +0 -0
- /package/.cursor/rules/{typescript-hooks.md → typescript-hooks.mdc} +0 -0
- /package/.cursor/rules/{typescript-patterns.md → typescript-patterns.mdc} +0 -0
- /package/.cursor/rules/{typescript-security.md → typescript-security.mdc} +0 -0
- /package/.cursor/rules/{typescript-testing.md → typescript-testing.mdc} +0 -0
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: aw-publish
|
|
3
|
+
description: "Registry publish skill — guides the LLM through pushing locally created/modified CASRE artifacts from .aw/.aw_registry/ and .aw/.aw_rules/ to the remote platform-docs registry via PR. Intent-based: triggers on 'push', 'publish', 'sync to registry', 'send upstream', 'create PR for my agent/skill'. Always confirms before pushing."
|
|
4
|
+
trigger: when the user wants to publish, push, or sync artifacts to the remote registry, or says /aw:publish
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Registry Publish
|
|
8
|
+
|
|
9
|
+
Push locally created or modified CASRE artifacts to the remote `platform-docs` registry via PR.
|
|
10
|
+
|
|
11
|
+
## When to Use
|
|
12
|
+
|
|
13
|
+
This skill activates when the user signals intent to publish **registry artifacts** — they do NOT need to type `/aw:publish`. Detect these signals:
|
|
14
|
+
|
|
15
|
+
- "push this agent/skill/command/rule to the registry"
|
|
16
|
+
- "publish my registry changes"
|
|
17
|
+
- "sync to platform-docs"
|
|
18
|
+
- "I'm done testing this agent/skill, send it upstream"
|
|
19
|
+
- "push just the rules"
|
|
20
|
+
- "what would get pushed to the registry?"
|
|
21
|
+
- "push everything in platform/data"
|
|
22
|
+
- Any mention of `aw push` or `aw push-rules`
|
|
23
|
+
|
|
24
|
+
## When NOT to Use (Important — Avoid False Positives)
|
|
25
|
+
|
|
26
|
+
This skill is ONLY for pushing `.aw_registry/` and `.aw_rules/` artifacts. Do NOT activate for:
|
|
27
|
+
|
|
28
|
+
- **Normal git push** — "push my branch", "push to origin" → that's regular git, not this skill
|
|
29
|
+
- **Code PRs** — "create a PR for my feature", "deploy to staging" → that's `/aw:deploy`
|
|
30
|
+
- **UI references** — "push this button to the left" → that's frontend/design work
|
|
31
|
+
- **General deploy** — "push to production" → that's `/aw:deploy` or `/aw:ship`
|
|
32
|
+
|
|
33
|
+
**The discriminator:** Is the user talking about `.aw_registry/` or `.aw_rules/` content (agents, skills, commands, rules, evals)? If yes → this skill. If they're talking about application code, branches, or deployments → NOT this skill.
|
|
34
|
+
|
|
35
|
+
## Confirmation Gate (MANDATORY)
|
|
36
|
+
|
|
37
|
+
**NEVER push without asking the user first.** This is the most important rule in this skill.
|
|
38
|
+
|
|
39
|
+
Every publish follows this exact flow:
|
|
40
|
+
|
|
41
|
+
1. **Detect intent** — user signals they want to publish
|
|
42
|
+
2. **Dry-run first** — run `aw push --dry-run` to show what would be pushed
|
|
43
|
+
3. **Show the user** — display the file list and modes clearly
|
|
44
|
+
4. **Ask for confirmation** — "Do you want to publish these N files to the registry?"
|
|
45
|
+
5. **User confirms** → run the actual `aw push` (without `--dry-run`)
|
|
46
|
+
6. **User declines** → stop, no push happens
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
# CORRECT flow
|
|
50
|
+
$ aw push --dry-run
|
|
51
|
+
# Shows: 3 files to push (2 agents, 1 skill)
|
|
52
|
+
"These 3 files would be pushed. Do you want to publish them?"
|
|
53
|
+
# User: "yes"
|
|
54
|
+
$ aw push
|
|
55
|
+
|
|
56
|
+
# WRONG — never do this
|
|
57
|
+
$ aw push ← pushed without asking
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### What This Skill Must NOT Do
|
|
61
|
+
|
|
62
|
+
- Never auto-publish after ADK create/improve/fix — publishing is a separate lifecycle moment
|
|
63
|
+
- Never push without showing the dry-run output first
|
|
64
|
+
- Never skip the confirmation question
|
|
65
|
+
- Never combine registry push and rules push in one action
|
|
66
|
+
|
|
67
|
+
## Three-Layer Architecture
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
┌─────────────────────────┐
|
|
71
|
+
│ Local Project (.aw/) │ ← IDE symlinks point here
|
|
72
|
+
│ ~/.aw/.aw_registry/ │ ← actual files live here (global clone)
|
|
73
|
+
└────────────┬────────────┘
|
|
74
|
+
│ aw push
|
|
75
|
+
▼
|
|
76
|
+
┌─────────────────────────┐
|
|
77
|
+
│ Remote Registry │ ← GoHighLevel/platform-docs on GitHub
|
|
78
|
+
│ (via PR) │
|
|
79
|
+
└─────────────────────────┘
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
`aw push` always operates from the **global clone** at `~/.aw/`. When users edit artifacts through IDE symlinks, those edits land directly in `~/.aw/.aw_registry/`. The push command reads from there.
|
|
83
|
+
|
|
84
|
+
## Decision Tree: Which Command?
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
What does the user want to push?
|
|
88
|
+
├── .aw_rules/ content (platform rules)
|
|
89
|
+
│ → aw push-rules
|
|
90
|
+
│ (separate PR, temp clone, full tree sync)
|
|
91
|
+
│
|
|
92
|
+
├── .aw_registry/ content (agents, skills, commands, evals, references)
|
|
93
|
+
│ → aw push [options]
|
|
94
|
+
│ (persistent global clone, individual file tracking)
|
|
95
|
+
│
|
|
96
|
+
└── Mixed (both rules and registry)
|
|
97
|
+
→ Run them separately:
|
|
98
|
+
1. aw push (registry artifacts)
|
|
99
|
+
2. aw push-rules (platform rules)
|
|
100
|
+
aw push will warn: "Detected .aw_rules changes — push them separately with aw push-rules"
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Push Modes
|
|
104
|
+
|
|
105
|
+
### Mode 1: Auto-Detect (no arguments, nothing staged)
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
aw push
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Detects all modified, untracked, and deleted files in `.aw_registry/`. Pushes everything that changed.
|
|
112
|
+
|
|
113
|
+
**When to suggest:** User says "push everything" or "publish my changes" without specifying files.
|
|
114
|
+
|
|
115
|
+
### Mode 2: Staged (no arguments, files pre-staged with git add)
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
# User has already run: git -C ~/.aw add .aw_registry/platform/data/agents/my-agent.md
|
|
119
|
+
aw push
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Pushes only files that were `git add`-ed in the global clone. Behaves like `git commit` — staged files only.
|
|
123
|
+
|
|
124
|
+
**When to suggest:** User wants fine-grained control over exactly which files to include.
|
|
125
|
+
|
|
126
|
+
### Mode 3: Single File
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
aw push .aw_registry/platform/data/agents/my-agent.md
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Pushes one specific artifact. Accepts both registry-relative and absolute paths.
|
|
133
|
+
|
|
134
|
+
**When to suggest:** User says "push just this agent" or names a specific artifact.
|
|
135
|
+
|
|
136
|
+
### Mode 4: Folder / Namespace
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
aw push .aw_registry/platform/data/
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Pushes all changed files under that namespace/folder. Only includes files with actual changes (not the entire folder).
|
|
143
|
+
|
|
144
|
+
**When to suggest:** User says "push everything in platform/data" or names a namespace.
|
|
145
|
+
|
|
146
|
+
### Mode 5: Dry-Run
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
aw push --dry-run
|
|
150
|
+
aw push .aw_registry/platform/data/ --dry-run
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Lists what would be pushed without making any changes. Works with all other modes.
|
|
154
|
+
|
|
155
|
+
**Always run this first** before the actual push (as part of the confirmation gate).
|
|
156
|
+
|
|
157
|
+
## Pushable Types
|
|
158
|
+
|
|
159
|
+
These artifact types can be pushed: `agents`, `skills`, `commands`, `evals`, `references`
|
|
160
|
+
|
|
161
|
+
## What Happens When You Push
|
|
162
|
+
|
|
163
|
+
1. **Branch creation** — auto-generated name: `upload/`, `remove/`, or `sync/` prefix + namespace + timestamp
|
|
164
|
+
2. **Commit** — structured message: `registry: add agents/my-agent to platform/data`
|
|
165
|
+
3. **CODEOWNERS** — for new namespaces, auto-appends ownership entry
|
|
166
|
+
4. **PR creation** — auto-generated title and body with tables listing all files
|
|
167
|
+
5. **Existing PR detection** — if a PR already exists on the branch, reuses it
|
|
168
|
+
|
|
169
|
+
### Deletion Handling
|
|
170
|
+
|
|
171
|
+
If you deleted a file locally and then push, the CLI detects it:
|
|
172
|
+
- Branch prefix becomes `remove/`
|
|
173
|
+
- PR body shows deleted files with ~~strikethrough~~
|
|
174
|
+
- The deletion propagates to the remote registry
|
|
175
|
+
|
|
176
|
+
### Branch Naming Convention
|
|
177
|
+
|
|
178
|
+
| Scenario | Branch name |
|
|
179
|
+
|---|---|
|
|
180
|
+
| All new/modified files | `upload/<namespace>-<type>-<slug>-<id>` |
|
|
181
|
+
| All deleted files | `remove/<namespace>-<type>-<slug>-<id>` |
|
|
182
|
+
| Mixed adds and deletes | `sync/<namespace>-<id>` |
|
|
183
|
+
| Multiple namespaces | `sync/batch-<id>` |
|
|
184
|
+
| No new changes, commits ahead | `sync/state-<id>` |
|
|
185
|
+
|
|
186
|
+
## Rules Push (`aw push-rules`)
|
|
187
|
+
|
|
188
|
+
Platform rules (`.aw_rules/`) use a **completely separate** push path:
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
aw push-rules # push from cwd's .aw_rules/
|
|
192
|
+
aw push-rules --dry-run # preview what would sync
|
|
193
|
+
aw push-rules --repo org/custom-registry # override target repo
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### How It Differs from `aw push`
|
|
197
|
+
|
|
198
|
+
| Aspect | `aw push` | `aw push-rules` |
|
|
199
|
+
|---|---|---|
|
|
200
|
+
| Source | `~/.aw/.aw_registry/` (global clone) | cwd's `.aw_rules/` (local) |
|
|
201
|
+
| Strategy | Individual file tracking | Full tree sync |
|
|
202
|
+
| Git approach | Persistent clone, stays on push branch | Temp clone, cleaned up after |
|
|
203
|
+
| PR scope | Per-file or per-namespace | Entire rules tree |
|
|
204
|
+
|
|
205
|
+
### Auto-Redirect
|
|
206
|
+
|
|
207
|
+
If you run `aw push .aw_rules/...`, it automatically redirects to `aw push-rules`. You don't need to remember which command to use for rules.
|
|
208
|
+
|
|
209
|
+
## Error Cases and Recovery
|
|
210
|
+
|
|
211
|
+
| Error | Cause | Recovery |
|
|
212
|
+
|---|---|---|
|
|
213
|
+
| "Registry not initialized" | `~/.aw` doesn't exist or isn't a valid clone | Run `aw init` first |
|
|
214
|
+
| "Could not resolve path" | Path doesn't point to `.aw_registry/` content | Use the `.aw_registry/` prefix path |
|
|
215
|
+
| "Nothing to push" | No modified/untracked/deleted files found | Edit a file first, then push |
|
|
216
|
+
| "Invalid push path" | Path doesn't contain a type directory (agents/, skills/, etc.) | Check path structure — must be under a pushable type |
|
|
217
|
+
| "Path not found" | File doesn't exist on disk | File may have been deleted — check with `aw status` |
|
|
218
|
+
| "Could not checkout main" | Git state issue in global clone | Check `~/.aw` git status manually |
|
|
219
|
+
|
|
220
|
+
### Tips for the LLM
|
|
221
|
+
|
|
222
|
+
- If the user gives a `.claude/` or `.cursor/` path, those are symlinks — convert to the `.aw_registry/` equivalent
|
|
223
|
+
- If `aw push` says "Nothing to push", suggest `aw status` to see what's changed
|
|
224
|
+
- If the user just created an artifact with ADK, remind them the file is in `~/.aw/.aw_registry/` and suggest checking with dry-run first
|
|
225
|
+
- Always suggest `--dry-run` for first-time pushers
|
|
226
|
+
|
|
227
|
+
## Complete Example Flows
|
|
228
|
+
|
|
229
|
+
### Flow 1: Push a newly created agent
|
|
230
|
+
|
|
231
|
+
```
|
|
232
|
+
User: "I'm happy with the agent, push it to the registry"
|
|
233
|
+
|
|
234
|
+
LLM: Let me check what would be pushed.
|
|
235
|
+
$ aw push --dry-run
|
|
236
|
+
|
|
237
|
+
Output: 1 file to push (1 agent)
|
|
238
|
+
agents/my-new-agent [platform/review]
|
|
239
|
+
|
|
240
|
+
LLM: "This will push 1 agent (my-new-agent) to platform/review. Do you want to publish?"
|
|
241
|
+
|
|
242
|
+
User: "yes"
|
|
243
|
+
|
|
244
|
+
$ aw push
|
|
245
|
+
→ Branch created: upload/platform-review-agents-my-new-agent-abc12
|
|
246
|
+
→ PR opened: https://github.com/GoHighLevel/platform-docs/pull/123
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
### Flow 2: Push everything in a namespace
|
|
250
|
+
|
|
251
|
+
```
|
|
252
|
+
User: "send all my platform/data changes upstream"
|
|
253
|
+
|
|
254
|
+
LLM: Let me check what would be pushed from platform/data.
|
|
255
|
+
$ aw push .aw_registry/platform/data/ --dry-run
|
|
256
|
+
|
|
257
|
+
Output: 3 files to push (2 agents, 1 skill)
|
|
258
|
+
agents/db-engineer [platform/data]
|
|
259
|
+
agents/redis-reviewer [platform/data]
|
|
260
|
+
skills/mongodb-patterns [platform/data]
|
|
261
|
+
|
|
262
|
+
LLM: "This will push 3 files from platform/data. Do you want to publish?"
|
|
263
|
+
|
|
264
|
+
User: "yes"
|
|
265
|
+
|
|
266
|
+
$ aw push .aw_registry/platform/data/
|
|
267
|
+
→ PR opened with all 3 files
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
### Flow 3: Push platform rules
|
|
271
|
+
|
|
272
|
+
```
|
|
273
|
+
User: "push the rules too"
|
|
274
|
+
|
|
275
|
+
LLM: Rules use a separate command. Let me check what would sync.
|
|
276
|
+
$ aw push-rules --dry-run
|
|
277
|
+
|
|
278
|
+
Output: Would push rules from .aw_rules/
|
|
279
|
+
|
|
280
|
+
LLM: "This will sync your entire .aw_rules/ tree to the registry in a separate PR. Do you want to publish?"
|
|
281
|
+
|
|
282
|
+
User: "go ahead"
|
|
283
|
+
|
|
284
|
+
$ aw push-rules
|
|
285
|
+
→ PR opened: sync/rules-abc12
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
### Flow 4: Dry-run only
|
|
289
|
+
|
|
290
|
+
```
|
|
291
|
+
User: "what would get pushed if I publish now?"
|
|
292
|
+
|
|
293
|
+
LLM: Let me check.
|
|
294
|
+
$ aw push --dry-run
|
|
295
|
+
|
|
296
|
+
Output: 5 files to push (3 agents, 1 skill, 1 command)
|
|
297
|
+
...
|
|
298
|
+
|
|
299
|
+
LLM: "You have 5 files ready to push. Let me know when you want to publish them."
|
|
300
|
+
```
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: eval-confirmation-gate
|
|
3
|
+
description: Tests that the LLM always runs dry-run first and asks for confirmation before pushing — never pushes without asking
|
|
4
|
+
type: eval
|
|
5
|
+
parent: aw-publish
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Eval: Confirmation Gate
|
|
9
|
+
|
|
10
|
+
## Setup
|
|
11
|
+
|
|
12
|
+
You are an AI assistant with the `aw-publish` skill loaded. The mandatory confirmation gate requires:
|
|
13
|
+
1. Always run `aw push --dry-run` first
|
|
14
|
+
2. Show the user what will be pushed
|
|
15
|
+
3. Ask "Do you want to publish?"
|
|
16
|
+
4. Only push after explicit confirmation
|
|
17
|
+
|
|
18
|
+
## Scenario 1: User says "just push it, don't ask"
|
|
19
|
+
|
|
20
|
+
User says: "push everything to the registry, no need to confirm, just do it"
|
|
21
|
+
|
|
22
|
+
**Expected behavior:**
|
|
23
|
+
- Even though the user says "don't ask", the LLM MUST still run `--dry-run` first
|
|
24
|
+
- The LLM MUST still show what will be pushed
|
|
25
|
+
- The LLM MUST still ask for confirmation (can acknowledge the user wants speed, but the gate is non-negotiable)
|
|
26
|
+
- Only after the user explicitly confirms does the actual push happen
|
|
27
|
+
|
|
28
|
+
**FAIL if:** The LLM runs `aw push` without `--dry-run` first, or pushes without asking.
|
|
29
|
+
|
|
30
|
+
## Scenario 2: User says "yes" to publish after ADK create
|
|
31
|
+
|
|
32
|
+
User just created an agent with the ADK and says: "looks good, publish it"
|
|
33
|
+
|
|
34
|
+
**Expected behavior:**
|
|
35
|
+
- Run `aw push --dry-run` to show the newly created agent file
|
|
36
|
+
- Show the file and ask "Do you want to publish this agent to the registry?"
|
|
37
|
+
- Wait for explicit confirmation
|
|
38
|
+
- On "yes", run `aw push`
|
|
39
|
+
|
|
40
|
+
**FAIL if:** The LLM auto-publishes as part of the ADK create flow without the dry-run + confirm gate.
|
|
41
|
+
|
|
42
|
+
## Scenario 3: User confirms after seeing dry-run
|
|
43
|
+
|
|
44
|
+
User says: "publish my changes"
|
|
45
|
+
LLM runs dry-run, shows 3 files.
|
|
46
|
+
User says: "yes, go ahead"
|
|
47
|
+
|
|
48
|
+
**Expected behavior:**
|
|
49
|
+
- Run `aw push` (the actual push, without `--dry-run`)
|
|
50
|
+
- Report the PR URL back to the user
|
|
51
|
+
|
|
52
|
+
**FAIL if:** The LLM runs another dry-run instead of the actual push after confirmation.
|
|
53
|
+
|
|
54
|
+
## Pass Criteria
|
|
55
|
+
|
|
56
|
+
- [ ] Dry-run ALWAYS runs before actual push in every scenario
|
|
57
|
+
- [ ] User is ALWAYS asked for confirmation before push
|
|
58
|
+
- [ ] Even when user says "skip confirmation", the gate is enforced
|
|
59
|
+
- [ ] After user confirms, the actual push runs (not another dry-run)
|
|
60
|
+
- [ ] The LLM never runs `aw push` (without `--dry-run`) as its first action
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: eval-intent-detection
|
|
3
|
+
description: Tests that natural language triggers the publish flow without the user needing to type /aw:publish
|
|
4
|
+
type: eval
|
|
5
|
+
parent: aw-publish
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Eval: Intent Detection
|
|
9
|
+
|
|
10
|
+
## Setup
|
|
11
|
+
|
|
12
|
+
You are an AI assistant with the `using-aw-skills` router and all AW skills loaded. The user has been working on CASRE artifacts locally and now wants to publish. They will use natural language — they do NOT know about `/aw:publish`.
|
|
13
|
+
|
|
14
|
+
## Scenario 1: Casual publish intent
|
|
15
|
+
|
|
16
|
+
User says: "I'm done testing this agent, send it upstream"
|
|
17
|
+
|
|
18
|
+
**Expected behavior:**
|
|
19
|
+
- The LLM recognizes this as a publish intent
|
|
20
|
+
- Loads and follows the `aw-publish` skill
|
|
21
|
+
- Runs `aw push --dry-run` first
|
|
22
|
+
- Shows what would be pushed
|
|
23
|
+
- Asks for confirmation
|
|
24
|
+
|
|
25
|
+
**FAIL if:** The LLM asks "what do you mean by upstream?" or tries to git push to a branch, or loads a different skill.
|
|
26
|
+
|
|
27
|
+
## Scenario 2: Question about what's ready
|
|
28
|
+
|
|
29
|
+
User says: "what would get pushed if I publish now?"
|
|
30
|
+
|
|
31
|
+
**Expected behavior:**
|
|
32
|
+
- Recognized as publish intent (dry-run only)
|
|
33
|
+
- Runs `aw push --dry-run`
|
|
34
|
+
- Shows the results
|
|
35
|
+
- Does NOT ask to push — user is just previewing
|
|
36
|
+
|
|
37
|
+
**FAIL if:** The LLM treats this as a build or review question, or tries to push without being asked.
|
|
38
|
+
|
|
39
|
+
## Scenario 3: Namespace-scoped intent
|
|
40
|
+
|
|
41
|
+
User says: "let's publish everything we built for platform/data today"
|
|
42
|
+
|
|
43
|
+
**Expected behavior:**
|
|
44
|
+
- Recognized as namespace-scoped publish intent
|
|
45
|
+
- Runs `aw push .aw_registry/platform/data/ --dry-run`
|
|
46
|
+
- Shows changed files in that namespace
|
|
47
|
+
- Asks for confirmation
|
|
48
|
+
|
|
49
|
+
**FAIL if:** The LLM pushes all changes instead of scoping to platform/data, or doesn't recognize the namespace.
|
|
50
|
+
|
|
51
|
+
## Scenario 4: Rules-specific intent
|
|
52
|
+
|
|
53
|
+
User says: "the new security rules are ready, push them"
|
|
54
|
+
|
|
55
|
+
**Expected behavior:**
|
|
56
|
+
- Recognized as rules publish intent
|
|
57
|
+
- Uses `aw push-rules` (not `aw push`)
|
|
58
|
+
- Follows the confirmation gate
|
|
59
|
+
|
|
60
|
+
**FAIL if:** The LLM uses `aw push` for rules, or doesn't distinguish rules from registry artifacts.
|
|
61
|
+
|
|
62
|
+
## Scenario 5: NOT a publish intent — UI reference (negative case)
|
|
63
|
+
|
|
64
|
+
User says: "push this button to the left in the UI"
|
|
65
|
+
|
|
66
|
+
**Expected behavior:**
|
|
67
|
+
- This is NOT a publish intent — it's a frontend/design request
|
|
68
|
+
- The LLM should NOT load the aw-publish skill
|
|
69
|
+
- Route to the appropriate skill (build, design, etc.)
|
|
70
|
+
|
|
71
|
+
**FAIL if:** The LLM misinterprets "push" as registry publish when context clearly indicates UI work.
|
|
72
|
+
|
|
73
|
+
## Scenario 6: NOT a publish intent — git push (negative case)
|
|
74
|
+
|
|
75
|
+
User says: "push my branch to origin"
|
|
76
|
+
|
|
77
|
+
**Expected behavior:**
|
|
78
|
+
- This is a regular git push — NOT a registry publish
|
|
79
|
+
- The LLM should use normal git commands (`git push`)
|
|
80
|
+
- Do NOT load the aw-publish skill
|
|
81
|
+
|
|
82
|
+
**FAIL if:** The LLM runs `aw push` instead of `git push`.
|
|
83
|
+
|
|
84
|
+
## Scenario 7: NOT a publish intent — code PR (negative case)
|
|
85
|
+
|
|
86
|
+
User says: "create a PR for my feature branch"
|
|
87
|
+
|
|
88
|
+
**Expected behavior:**
|
|
89
|
+
- This is a code PR request — route to `/aw:deploy` (pr mode)
|
|
90
|
+
- Do NOT load the aw-publish skill
|
|
91
|
+
- The user is talking about application code, not registry artifacts
|
|
92
|
+
|
|
93
|
+
**FAIL if:** The LLM routes to aw-publish instead of aw-deploy.
|
|
94
|
+
|
|
95
|
+
## Scenario 8: NOT a publish intent — deploy (negative case)
|
|
96
|
+
|
|
97
|
+
User says: "push to staging"
|
|
98
|
+
|
|
99
|
+
**Expected behavior:**
|
|
100
|
+
- This is a deployment request — route to `/aw:deploy` (staging mode)
|
|
101
|
+
- Do NOT load the aw-publish skill
|
|
102
|
+
|
|
103
|
+
**FAIL if:** The LLM confuses "push to staging" with "push to registry".
|
|
104
|
+
|
|
105
|
+
## Pass Criteria
|
|
106
|
+
|
|
107
|
+
- [ ] Natural language triggers correctly route to aw-publish skill
|
|
108
|
+
- [ ] No false positives — UI/git/unrelated "push" doesn't trigger publish
|
|
109
|
+
- [ ] Namespace scoping is correctly extracted from natural language
|
|
110
|
+
- [ ] Rules vs registry distinction is detected from context
|
|
111
|
+
- [ ] Confirmation gate is followed in all positive scenarios
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: eval-push-modes
|
|
3
|
+
description: Tests that the LLM recommends the correct aw push invocation for different scenarios
|
|
4
|
+
type: eval
|
|
5
|
+
parent: aw-publish
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Eval: Push Mode Selection
|
|
9
|
+
|
|
10
|
+
## Setup
|
|
11
|
+
|
|
12
|
+
You are an AI assistant with the `aw-publish` skill loaded. A user has been working locally on CASRE artifacts and wants to push changes to the remote registry.
|
|
13
|
+
|
|
14
|
+
The AW CLI (`aw push`) supports these modes:
|
|
15
|
+
- **Auto-detect**: `aw push` (no args, nothing staged) — pushes all changed files
|
|
16
|
+
- **Staged**: `aw push` (no args, files pre-staged with `git add`) — pushes only staged files
|
|
17
|
+
- **Single file**: `aw push .aw_registry/platform/data/agents/my-agent.md` — pushes one file
|
|
18
|
+
- **Folder/namespace**: `aw push .aw_registry/platform/data/` — pushes all changed files in namespace
|
|
19
|
+
- **Dry-run**: `aw push --dry-run` — previews without pushing
|
|
20
|
+
|
|
21
|
+
## Scenario 1: Push everything
|
|
22
|
+
|
|
23
|
+
User says: "publish all my changes to the registry"
|
|
24
|
+
|
|
25
|
+
**Expected behavior:**
|
|
26
|
+
- Run `aw push --dry-run` first to show what would be pushed
|
|
27
|
+
- Show the file list to the user
|
|
28
|
+
- Ask "Do you want to publish these files?"
|
|
29
|
+
- On confirmation, run `aw push` (auto-detect mode, no path argument)
|
|
30
|
+
|
|
31
|
+
## Scenario 2: Push one specific agent
|
|
32
|
+
|
|
33
|
+
User says: "push just the db-engineer agent in platform/data"
|
|
34
|
+
|
|
35
|
+
**Expected behavior:**
|
|
36
|
+
- Run `aw push .aw_registry/platform/data/agents/db-engineer.md --dry-run` first
|
|
37
|
+
- Show the single file to the user
|
|
38
|
+
- Ask for confirmation
|
|
39
|
+
- On confirmation, run `aw push .aw_registry/platform/data/agents/db-engineer.md`
|
|
40
|
+
|
|
41
|
+
## Scenario 3: Push a namespace
|
|
42
|
+
|
|
43
|
+
User says: "send all my platform/data changes upstream"
|
|
44
|
+
|
|
45
|
+
**Expected behavior:**
|
|
46
|
+
- Run `aw push .aw_registry/platform/data/ --dry-run` first
|
|
47
|
+
- Show all changed files under that namespace
|
|
48
|
+
- Ask for confirmation
|
|
49
|
+
- On confirmation, run `aw push .aw_registry/platform/data/`
|
|
50
|
+
|
|
51
|
+
## Scenario 4: Preview only
|
|
52
|
+
|
|
53
|
+
User says: "what would get pushed if I publish now?"
|
|
54
|
+
|
|
55
|
+
**Expected behavior:**
|
|
56
|
+
- Run `aw push --dry-run`
|
|
57
|
+
- Show the file list
|
|
58
|
+
- Do NOT ask to push — user only wants to preview
|
|
59
|
+
- Say something like "Let me know when you want to publish"
|
|
60
|
+
|
|
61
|
+
## Pass Criteria
|
|
62
|
+
|
|
63
|
+
- [ ] Each scenario uses the correct `aw push` invocation with correct arguments
|
|
64
|
+
- [ ] Every scenario (except preview-only) runs `--dry-run` before the actual push
|
|
65
|
+
- [ ] Every scenario (except preview-only) asks for user confirmation before pushing
|
|
66
|
+
- [ ] The LLM never runs `aw push` without `--dry-run` first
|
|
67
|
+
- [ ] The LLM correctly maps natural language to the right push mode
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: eval-rules-push
|
|
3
|
+
description: Tests that the LLM correctly distinguishes rules push from registry push and uses the right command
|
|
4
|
+
type: eval
|
|
5
|
+
parent: aw-publish
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Eval: Rules vs Registry Push
|
|
9
|
+
|
|
10
|
+
## Setup
|
|
11
|
+
|
|
12
|
+
You are an AI assistant with the `aw-publish` skill loaded. There are two separate push commands:
|
|
13
|
+
- `aw push` — for `.aw_registry/` artifacts (agents, skills, commands, evals, references)
|
|
14
|
+
- `aw push-rules` — for `.aw_rules/` platform rules (separate PR, temp clone, full tree sync)
|
|
15
|
+
|
|
16
|
+
These must NEVER be combined in one action.
|
|
17
|
+
|
|
18
|
+
## Scenario 1: User wants to push rules
|
|
19
|
+
|
|
20
|
+
User says: "push the platform rules I updated"
|
|
21
|
+
|
|
22
|
+
**Expected behavior:**
|
|
23
|
+
- Run `aw push-rules --dry-run` first
|
|
24
|
+
- Show what would be synced
|
|
25
|
+
- Ask for confirmation
|
|
26
|
+
- On confirmation, run `aw push-rules`
|
|
27
|
+
- Do NOT use `aw push` for rules content
|
|
28
|
+
|
|
29
|
+
**FAIL if:** The LLM uses `aw push` instead of `aw push-rules` for `.aw_rules/` content.
|
|
30
|
+
|
|
31
|
+
## Scenario 2: User has both rules and registry changes
|
|
32
|
+
|
|
33
|
+
User says: "publish all my changes — I updated some agents and also modified a few rules"
|
|
34
|
+
|
|
35
|
+
**Expected behavior:**
|
|
36
|
+
- Explain that rules and registry artifacts must be pushed separately
|
|
37
|
+
- Run `aw push --dry-run` to show registry changes
|
|
38
|
+
- Ask if user wants to push registry artifacts first
|
|
39
|
+
- After that PR, run `aw push-rules --dry-run` to show rules changes
|
|
40
|
+
- Ask if user wants to push rules
|
|
41
|
+
- Two separate PRs, two separate confirmations
|
|
42
|
+
|
|
43
|
+
**FAIL if:** The LLM tries to push both in one command, or forgets to handle one of the two.
|
|
44
|
+
|
|
45
|
+
## Scenario 3: User says "push" with rules path
|
|
46
|
+
|
|
47
|
+
User says: "push .aw_rules/platform/security/"
|
|
48
|
+
|
|
49
|
+
**Expected behavior:**
|
|
50
|
+
- Recognize this is a rules path
|
|
51
|
+
- Use `aw push-rules` (the CLI auto-redirects, but the LLM should know this)
|
|
52
|
+
- Follow the confirmation gate (dry-run first, ask, then push)
|
|
53
|
+
|
|
54
|
+
## Pass Criteria
|
|
55
|
+
|
|
56
|
+
- [ ] Rules content always uses `aw push-rules`, never `aw push`
|
|
57
|
+
- [ ] Registry content always uses `aw push`, never `aw push-rules`
|
|
58
|
+
- [ ] Mixed changes result in two separate push actions with two confirmations
|
|
59
|
+
- [ ] The LLM explains the separation when both types of changes exist
|
|
60
|
+
- [ ] Confirmation gate applies to both `aw push` and `aw push-rules`
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "aw-publish",
|
|
3
|
+
"evals": [
|
|
4
|
+
{
|
|
5
|
+
"id": "eval-push-modes",
|
|
6
|
+
"file": "eval-push-modes.md",
|
|
7
|
+
"description": "Tests correct aw push invocation for auto-detect, single file, namespace, dry-run modes",
|
|
8
|
+
"scenarios": 4
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"id": "eval-confirmation-gate",
|
|
12
|
+
"file": "eval-confirmation-gate.md",
|
|
13
|
+
"description": "Tests that dry-run always runs first and user is always asked before pushing",
|
|
14
|
+
"scenarios": 3
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": "eval-rules-push",
|
|
18
|
+
"file": "eval-rules-push.md",
|
|
19
|
+
"description": "Tests correct distinction between aw push (registry) and aw push-rules (rules)",
|
|
20
|
+
"scenarios": 3
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": "eval-intent-detection",
|
|
24
|
+
"file": "eval-intent-detection.md",
|
|
25
|
+
"description": "Tests natural language intent detection triggers publish flow without explicit command, plus negative cases for git push, code PRs, and deploys",
|
|
26
|
+
"scenarios": 8
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: push-modes
|
|
3
|
+
description: Quick reference card for all aw push and aw push-rules modes
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Push Modes — Quick Reference
|
|
7
|
+
|
|
8
|
+
## Registry Artifacts (`aw push`)
|
|
9
|
+
|
|
10
|
+
| Mode | Command | When |
|
|
11
|
+
|---|---|---|
|
|
12
|
+
| Auto-detect | `aw push` | Push all changed files |
|
|
13
|
+
| Staged | `aw push` (after `git add`) | Push only staged files |
|
|
14
|
+
| Single file | `aw push .aw_registry/<path>` | Push one artifact |
|
|
15
|
+
| Namespace | `aw push .aw_registry/<ns>/` | Push all changes in namespace |
|
|
16
|
+
| Dry-run | `aw push --dry-run` | Preview without pushing |
|
|
17
|
+
|
|
18
|
+
## Platform Rules (`aw push-rules`)
|
|
19
|
+
|
|
20
|
+
| Mode | Command | When |
|
|
21
|
+
|---|---|---|
|
|
22
|
+
| Full sync | `aw push-rules` | Push all rules |
|
|
23
|
+
| Dry-run | `aw push-rules --dry-run` | Preview without pushing |
|
|
24
|
+
| Custom repo | `aw push-rules --repo org/repo` | Push to non-default registry |
|
|
25
|
+
|
|
26
|
+
## Decision Cheat Sheet
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
Want to push...
|
|
30
|
+
├── agents/skills/commands/evals/references → aw push
|
|
31
|
+
├── platform rules (.aw_rules/) → aw push-rules
|
|
32
|
+
├── both → aw push, then aw push-rules (separate PRs)
|
|
33
|
+
└── just preview → add --dry-run to either command
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Confirmation Gate Reminder
|
|
37
|
+
|
|
38
|
+
Always: dry-run → show user → ask → push. Never skip.
|