bigpowers 2.72.1 → 2.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/.continue/rules/align-grid.md +0 -0
- package/.continue/rules/assess-impact.md +0 -0
- package/.continue/rules/audit-code.md +0 -0
- package/.continue/rules/audit-plan.md +0 -0
- package/.continue/rules/build-epic.md +0 -0
- package/.continue/rules/change-request.md +0 -0
- package/.continue/rules/commit-message.md +0 -0
- package/.continue/rules/compose-workflow.md +0 -0
- package/.continue/rules/craft-skill.md +0 -0
- package/.continue/rules/deepen-architecture.md +0 -0
- package/.continue/rules/define-language.md +0 -0
- package/.continue/rules/define-success.md +0 -0
- package/.continue/rules/delegate-task.md +0 -0
- package/.continue/rules/deploy.md +0 -0
- package/.continue/rules/design-interface.md +0 -0
- package/.continue/rules/develop-tdd.md +0 -0
- package/.continue/rules/diagnose-root.md +0 -0
- package/.continue/rules/dispatch-agents.md +0 -0
- package/.continue/rules/edit-document.md +0 -0
- package/.continue/rules/elaborate-spec.md +0 -0
- package/.continue/rules/enforce-first.md +0 -0
- package/.continue/rules/evolve-skill.md +0 -0
- package/.continue/rules/execute-plan.md +0 -0
- package/.continue/rules/extract-design.md +0 -0
- package/.continue/rules/fix-bug.md +0 -0
- package/.continue/rules/gate-trace.md +0 -0
- package/.continue/rules/grill-me.md +0 -0
- package/.continue/rules/grill-with-docs.md +0 -0
- package/.continue/rules/guard-git.md +0 -0
- package/.continue/rules/hook-commits.md +0 -0
- package/.continue/rules/inspect-quality.md +0 -0
- package/.continue/rules/investigate-bug.md +0 -0
- package/.continue/rules/kickoff-branch.md +0 -0
- package/.continue/rules/maintain-wiki.md +0 -0
- package/.continue/rules/map-codebase.md +0 -0
- package/.continue/rules/migrate-spec.md +0 -0
- package/.continue/rules/model-domain.md +0 -0
- package/.continue/rules/orchestrate-project.md +0 -0
- package/.continue/rules/organize-workspace.md +0 -0
- package/.continue/rules/plan-refactor.md +0 -0
- package/.continue/rules/plan-release.md +0 -0
- package/.continue/rules/plan-tests.md +0 -0
- package/.continue/rules/plan-work.md +0 -0
- package/.continue/rules/publish-package.md +0 -0
- package/.continue/rules/quick-fix.md +0 -0
- package/.continue/rules/release-branch.md +0 -0
- package/.continue/rules/request-review.md +0 -0
- package/.continue/rules/research-first.md +0 -0
- package/.continue/rules/reset-baseline.md +0 -0
- package/.continue/rules/respond-review.md +0 -0
- package/.continue/rules/run-benchmark.md +0 -0
- package/.continue/rules/run-evals.md +0 -0
- package/.continue/rules/run-planning.md +0 -0
- package/.continue/rules/scope-work.md +0 -0
- package/.continue/rules/search-skills.md +0 -0
- package/.continue/rules/security-review.md +0 -0
- package/.continue/rules/seed-conventions.md +0 -0
- package/.continue/rules/session-state.md +0 -0
- package/.continue/rules/setup-environment.md +0 -0
- package/.continue/rules/simulate-agents.md +0 -0
- package/.continue/rules/slice-tasks.md +0 -0
- package/.continue/rules/smoke-test.md +0 -0
- package/.continue/rules/spike-prototype.md +0 -0
- package/.continue/rules/stocktake-skills.md +0 -0
- package/.continue/rules/survey-context.md +0 -0
- package/.continue/rules/terse-mode.md +0 -0
- package/.continue/rules/trace-requirement.md +0 -0
- package/.continue/rules/using-bigpowers.md +0 -0
- package/.continue/rules/validate-contracts.md +0 -0
- package/.continue/rules/validate-fix.md +0 -0
- package/.continue/rules/verify-work.md +0 -0
- package/.continue/rules/visual-dashboard.md +0 -0
- package/.continue/rules/wire-ci.md +0 -0
- package/.continue/rules/wire-observability.md +0 -0
- package/.continue/rules/write-document.md +0 -0
- package/.kilocode/rules/align-grid.md +0 -0
- package/.kilocode/rules/assess-impact.md +0 -0
- package/.kilocode/rules/audit-code.md +0 -0
- package/.kilocode/rules/audit-plan.md +0 -0
- package/.kilocode/rules/build-epic.md +0 -0
- package/.kilocode/rules/change-request.md +0 -0
- package/.kilocode/rules/commit-message.md +0 -0
- package/.kilocode/rules/compose-workflow.md +0 -0
- package/.kilocode/rules/craft-skill.md +0 -0
- package/.kilocode/rules/deepen-architecture.md +0 -0
- package/.kilocode/rules/define-language.md +0 -0
- package/.kilocode/rules/define-success.md +0 -0
- package/.kilocode/rules/delegate-task.md +0 -0
- package/.kilocode/rules/deploy.md +0 -0
- package/.kilocode/rules/design-interface.md +0 -0
- package/.kilocode/rules/develop-tdd.md +0 -0
- package/.kilocode/rules/diagnose-root.md +0 -0
- package/.kilocode/rules/dispatch-agents.md +0 -0
- package/.kilocode/rules/edit-document.md +0 -0
- package/.kilocode/rules/elaborate-spec.md +0 -0
- package/.kilocode/rules/enforce-first.md +0 -0
- package/.kilocode/rules/evolve-skill.md +0 -0
- package/.kilocode/rules/execute-plan.md +0 -0
- package/.kilocode/rules/extract-design.md +0 -0
- package/.kilocode/rules/fix-bug.md +0 -0
- package/.kilocode/rules/gate-trace.md +0 -0
- package/.kilocode/rules/grill-me.md +0 -0
- package/.kilocode/rules/grill-with-docs.md +0 -0
- package/.kilocode/rules/guard-git.md +0 -0
- package/.kilocode/rules/hook-commits.md +0 -0
- package/.kilocode/rules/inspect-quality.md +0 -0
- package/.kilocode/rules/investigate-bug.md +0 -0
- package/.kilocode/rules/kickoff-branch.md +0 -0
- package/.kilocode/rules/maintain-wiki.md +0 -0
- package/.kilocode/rules/map-codebase.md +0 -0
- package/.kilocode/rules/migrate-spec.md +0 -0
- package/.kilocode/rules/model-domain.md +0 -0
- package/.kilocode/rules/orchestrate-project.md +0 -0
- package/.kilocode/rules/organize-workspace.md +0 -0
- package/.kilocode/rules/plan-refactor.md +0 -0
- package/.kilocode/rules/plan-release.md +0 -0
- package/.kilocode/rules/plan-tests.md +0 -0
- package/.kilocode/rules/plan-work.md +0 -0
- package/.kilocode/rules/publish-package.md +0 -0
- package/.kilocode/rules/quick-fix.md +0 -0
- package/.kilocode/rules/release-branch.md +0 -0
- package/.kilocode/rules/request-review.md +0 -0
- package/.kilocode/rules/research-first.md +0 -0
- package/.kilocode/rules/reset-baseline.md +0 -0
- package/.kilocode/rules/respond-review.md +0 -0
- package/.kilocode/rules/run-benchmark.md +0 -0
- package/.kilocode/rules/run-evals.md +0 -0
- package/.kilocode/rules/run-planning.md +0 -0
- package/.kilocode/rules/scope-work.md +0 -0
- package/.kilocode/rules/search-skills.md +0 -0
- package/.kilocode/rules/security-review.md +0 -0
- package/.kilocode/rules/seed-conventions.md +0 -0
- package/.kilocode/rules/session-state.md +0 -0
- package/.kilocode/rules/setup-environment.md +0 -0
- package/.kilocode/rules/simulate-agents.md +0 -0
- package/.kilocode/rules/slice-tasks.md +0 -0
- package/.kilocode/rules/smoke-test.md +0 -0
- package/.kilocode/rules/spike-prototype.md +0 -0
- package/.kilocode/rules/stocktake-skills.md +0 -0
- package/.kilocode/rules/survey-context.md +0 -0
- package/.kilocode/rules/terse-mode.md +0 -0
- package/.kilocode/rules/trace-requirement.md +0 -0
- package/.kilocode/rules/using-bigpowers.md +0 -0
- package/.kilocode/rules/validate-contracts.md +0 -0
- package/.kilocode/rules/validate-fix.md +0 -0
- package/.kilocode/rules/verify-work.md +0 -0
- package/.kilocode/rules/visual-dashboard.md +0 -0
- package/.kilocode/rules/wire-ci.md +0 -0
- package/.kilocode/rules/wire-observability.md +0 -0
- package/.kilocode/rules/write-document.md +0 -0
- package/.pi/package.json +1 -1
- package/.pi/prompts/seed-conventions.md +46 -8
- package/.pi/prompts/using-bigpowers.md +2 -2
- package/.pi/skills/seed-conventions/SKILL.md +46 -8
- package/.pi/skills/using-bigpowers/SKILL.md +2 -2
- package/CHANGELOG.md +7 -0
- package/package.json +1 -1
- package/scripts/adapters/agy.sh +6 -0
- package/scripts/adapters/aider.sh +7 -0
- package/scripts/adapters/cline.sh +8 -0
- package/scripts/adapters/continue.sh +11 -0
- package/scripts/adapters/cursor.sh +25 -0
- package/scripts/adapters/gemini.sh +36 -0
- package/scripts/adapters/goose.sh +3 -0
- package/scripts/adapters/hermes.sh +10 -0
- package/scripts/adapters/iflow.sh +6 -0
- package/scripts/adapters/kilocode.sh +11 -0
- package/scripts/adapters/omp.sh +10 -0
- package/scripts/adapters/pi.sh +37 -0
- package/scripts/adapters/qwen.sh +6 -0
- package/scripts/adapters/shai.sh +6 -0
- package/scripts/adapters/vibe.sh +6 -0
- package/scripts/adapters/zed.sh +10 -0
- package/scripts/generate-context-bundle.sh +57 -0
- package/scripts/install.sh +21 -0
- package/scripts/lib/context-wire.sh +66 -0
- package/scripts/lib/target-contracts.sh +77 -0
- package/scripts/sync-skills.sh +24 -9
- package/scripts/targets.yaml +202 -0
- package/scripts/test-adapters.sh +80 -0
- package/scripts/validate-targets-yaml.sh +69 -0
- package/scripts/verify-install.sh +76 -3
- package/skills/seed-conventions/REFERENCE.md +40 -5
- package/skills/seed-conventions/SKILL.md +6 -3
- package/skills/using-bigpowers/SKILL.md +2 -2
- package/skills-lock.json +2 -2
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
# story: e37s05
|
|
2
|
+
registry_version: "1"
|
|
3
|
+
generated_by: bigpowers
|
|
4
|
+
|
|
5
|
+
targets:
|
|
6
|
+
- id: cursor
|
|
7
|
+
name: Cursor
|
|
8
|
+
tier: default_on
|
|
9
|
+
skill:
|
|
10
|
+
adapter: cursor
|
|
11
|
+
output: .cursor/rules
|
|
12
|
+
context:
|
|
13
|
+
adapter: cursor
|
|
14
|
+
mode: symlink
|
|
15
|
+
file: CLAUDE.md
|
|
16
|
+
contracts:
|
|
17
|
+
- cursor_rules_nonempty
|
|
18
|
+
- symlink_claude_md
|
|
19
|
+
|
|
20
|
+
- id: gemini
|
|
21
|
+
name: Gemini CLI
|
|
22
|
+
tier: default_on
|
|
23
|
+
skill:
|
|
24
|
+
adapter: gemini
|
|
25
|
+
output: .gemini/extensions/bigpowers
|
|
26
|
+
context:
|
|
27
|
+
adapter: gemini
|
|
28
|
+
mode: symlink
|
|
29
|
+
file: GEMINI.md
|
|
30
|
+
contracts:
|
|
31
|
+
- gemini_ext_exists
|
|
32
|
+
|
|
33
|
+
- id: pi
|
|
34
|
+
name: pi Agent
|
|
35
|
+
tier: default_on
|
|
36
|
+
skill:
|
|
37
|
+
adapter: pi
|
|
38
|
+
output: .pi/skills
|
|
39
|
+
context:
|
|
40
|
+
adapter: pi
|
|
41
|
+
mode: symlink
|
|
42
|
+
file: CLAUDE.md
|
|
43
|
+
contracts:
|
|
44
|
+
- pi_skills_nonempty
|
|
45
|
+
|
|
46
|
+
- id: cline
|
|
47
|
+
name: Cline
|
|
48
|
+
tier: default_on
|
|
49
|
+
skill: null
|
|
50
|
+
context:
|
|
51
|
+
adapter: cline
|
|
52
|
+
mode: native
|
|
53
|
+
contracts:
|
|
54
|
+
- agents_md_exists
|
|
55
|
+
|
|
56
|
+
- id: aider
|
|
57
|
+
name: Aider
|
|
58
|
+
tier: opt_in
|
|
59
|
+
skill: null
|
|
60
|
+
context:
|
|
61
|
+
adapter: aider
|
|
62
|
+
mode: config-bridge
|
|
63
|
+
bridge_file: .aider.conf.yml
|
|
64
|
+
bridge_key: read
|
|
65
|
+
contracts:
|
|
66
|
+
- aider_bridge
|
|
67
|
+
|
|
68
|
+
# Wave A (e37s09) — Goose native AGENTS.md; agy proprietary beta
|
|
69
|
+
- id: goose
|
|
70
|
+
name: Goose (Block OSS)
|
|
71
|
+
tier: default_on
|
|
72
|
+
skill: null
|
|
73
|
+
context:
|
|
74
|
+
adapter: goose
|
|
75
|
+
mode: native
|
|
76
|
+
contracts:
|
|
77
|
+
- agents_md_exists
|
|
78
|
+
|
|
79
|
+
- id: agy
|
|
80
|
+
name: Antigravity agy (proprietary beta)
|
|
81
|
+
tier: opt_in
|
|
82
|
+
skill: null
|
|
83
|
+
context:
|
|
84
|
+
adapter: agy
|
|
85
|
+
mode: symlink
|
|
86
|
+
file: CLAUDE.md
|
|
87
|
+
contracts:
|
|
88
|
+
- symlink_claude_md
|
|
89
|
+
|
|
90
|
+
# Wave B (e37s10) — skills-dir adapters
|
|
91
|
+
- id: zed
|
|
92
|
+
name: Zed
|
|
93
|
+
tier: opt_in
|
|
94
|
+
skill:
|
|
95
|
+
adapter: zed
|
|
96
|
+
output: ~/.config/zed/assistant
|
|
97
|
+
context:
|
|
98
|
+
adapter: zed
|
|
99
|
+
mode: copy
|
|
100
|
+
file: AGENTS.md
|
|
101
|
+
contracts:
|
|
102
|
+
- agents_md_exists
|
|
103
|
+
|
|
104
|
+
- id: omp
|
|
105
|
+
name: Open Multi-Process
|
|
106
|
+
tier: opt_in
|
|
107
|
+
skill:
|
|
108
|
+
adapter: omp
|
|
109
|
+
output: .omp/skills
|
|
110
|
+
context:
|
|
111
|
+
adapter: omp
|
|
112
|
+
mode: symlink
|
|
113
|
+
file: CLAUDE.md
|
|
114
|
+
contracts:
|
|
115
|
+
- symlink_claude_md
|
|
116
|
+
|
|
117
|
+
- id: hermes
|
|
118
|
+
name: Hermes Agent
|
|
119
|
+
tier: opt_in
|
|
120
|
+
skill:
|
|
121
|
+
adapter: hermes
|
|
122
|
+
output: .hermes/skills
|
|
123
|
+
context:
|
|
124
|
+
adapter: hermes
|
|
125
|
+
mode: config-bridge
|
|
126
|
+
bridge_file: .hermes/config.yaml
|
|
127
|
+
bridge_key: instructions
|
|
128
|
+
contracts:
|
|
129
|
+
- agents_md_exists
|
|
130
|
+
|
|
131
|
+
# Wave C (e37s11)
|
|
132
|
+
- id: qwen
|
|
133
|
+
name: Qwen (Alibaba)
|
|
134
|
+
tier: opt_in
|
|
135
|
+
skill: null
|
|
136
|
+
context:
|
|
137
|
+
adapter: qwen
|
|
138
|
+
mode: symlink
|
|
139
|
+
file: QWEN.md
|
|
140
|
+
contracts:
|
|
141
|
+
- agents_md_exists
|
|
142
|
+
|
|
143
|
+
- id: kilocode
|
|
144
|
+
name: Kilocode
|
|
145
|
+
tier: opt_in
|
|
146
|
+
skill:
|
|
147
|
+
adapter: kilocode
|
|
148
|
+
output: .kilocode/rules
|
|
149
|
+
context:
|
|
150
|
+
adapter: kilocode
|
|
151
|
+
mode: copy
|
|
152
|
+
file: AGENTS.md
|
|
153
|
+
contracts:
|
|
154
|
+
- agents_md_exists
|
|
155
|
+
|
|
156
|
+
# Wave D (e37s12)
|
|
157
|
+
- id: continue
|
|
158
|
+
name: Continue
|
|
159
|
+
tier: opt_in
|
|
160
|
+
skill:
|
|
161
|
+
adapter: continue
|
|
162
|
+
output: .continue/rules
|
|
163
|
+
context:
|
|
164
|
+
adapter: continue
|
|
165
|
+
mode: copy
|
|
166
|
+
file: AGENTS.md
|
|
167
|
+
contracts:
|
|
168
|
+
- agents_md_exists
|
|
169
|
+
|
|
170
|
+
# Wave E (e37s13) — optional low-priority
|
|
171
|
+
- id: iflow
|
|
172
|
+
name: iFlow
|
|
173
|
+
tier: optional
|
|
174
|
+
skill: null
|
|
175
|
+
context:
|
|
176
|
+
adapter: iflow
|
|
177
|
+
mode: symlink
|
|
178
|
+
file: AGENTS.md
|
|
179
|
+
contracts:
|
|
180
|
+
- agents_md_exists
|
|
181
|
+
|
|
182
|
+
- id: vibe
|
|
183
|
+
name: Vibe
|
|
184
|
+
tier: optional
|
|
185
|
+
skill: null
|
|
186
|
+
context:
|
|
187
|
+
adapter: vibe
|
|
188
|
+
mode: symlink
|
|
189
|
+
file: AGENTS.md
|
|
190
|
+
contracts:
|
|
191
|
+
- agents_md_exists
|
|
192
|
+
|
|
193
|
+
- id: shai
|
|
194
|
+
name: Shai
|
|
195
|
+
tier: optional
|
|
196
|
+
skill: null
|
|
197
|
+
context:
|
|
198
|
+
adapter: shai
|
|
199
|
+
mode: symlink
|
|
200
|
+
file: AGENTS.md
|
|
201
|
+
contracts:
|
|
202
|
+
- agents_md_exists
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# story: e37s05
|
|
3
|
+
# scenario: SC-e37s05-P1-02
|
|
4
|
+
set -euo pipefail
|
|
5
|
+
|
|
6
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
7
|
+
TARGETS_FILE="$SCRIPT_DIR/targets.yaml"
|
|
8
|
+
DRY_RUN=0
|
|
9
|
+
FILTER=""
|
|
10
|
+
|
|
11
|
+
for arg in "$@"; do
|
|
12
|
+
case "$arg" in
|
|
13
|
+
--dry-run) DRY_RUN=1 ;;
|
|
14
|
+
-*) echo "test-adapters: unknown flag $arg" >&2; exit 2 ;;
|
|
15
|
+
*) FILTER="$arg" ;;
|
|
16
|
+
esac
|
|
17
|
+
done
|
|
18
|
+
|
|
19
|
+
command -v yq >/dev/null || { echo "test-adapters: yq required" >&2; exit 1; }
|
|
20
|
+
bash "$SCRIPT_DIR/validate-targets-yaml.sh" >/dev/null
|
|
21
|
+
|
|
22
|
+
PASS=0
|
|
23
|
+
FAIL=0
|
|
24
|
+
TMPDIR=""
|
|
25
|
+
|
|
26
|
+
cleanup() { [[ -n "$TMPDIR" && -d "$TMPDIR" ]] && rm -rf "$TMPDIR"; }
|
|
27
|
+
trap cleanup EXIT
|
|
28
|
+
|
|
29
|
+
pass() { echo " PASS $1"; PASS=$((PASS + 1)); }
|
|
30
|
+
fail() { echo " FAIL $1"; FAIL=$((FAIL + 1)); }
|
|
31
|
+
|
|
32
|
+
test_adapter() {
|
|
33
|
+
local id="$1"
|
|
34
|
+
local adapter_file="$SCRIPT_DIR/adapters/${id}.sh"
|
|
35
|
+
|
|
36
|
+
if [[ "$DRY_RUN" -eq 1 ]]; then
|
|
37
|
+
echo "would test: $id"
|
|
38
|
+
return 0
|
|
39
|
+
fi
|
|
40
|
+
|
|
41
|
+
[[ -f "$adapter_file" ]] || { fail "$id: adapter missing"; return; }
|
|
42
|
+
pass "$id: exists"
|
|
43
|
+
|
|
44
|
+
# shellcheck source=/dev/null
|
|
45
|
+
source "$adapter_file" 2>/dev/null && pass "$id: sourceable" || { fail "$id: source error"; return; }
|
|
46
|
+
|
|
47
|
+
local has_skill has_context mode
|
|
48
|
+
has_skill=$(yq -r ".targets[] | select(.id==\"$id\") | .skill != null" "$TARGETS_FILE")
|
|
49
|
+
has_context=$(yq -r ".targets[] | select(.id==\"$id\") | .context != null" "$TARGETS_FILE")
|
|
50
|
+
mode=$(yq -r ".targets[] | select(.id==\"$id\") | .context.mode // \"\"" "$TARGETS_FILE")
|
|
51
|
+
|
|
52
|
+
if [[ "$has_skill" == "true" ]]; then
|
|
53
|
+
declare -f render_skill >/dev/null 2>&1 && pass "$id: render_skill defined" || fail "$id: render_skill missing"
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
if [[ "$has_context" == "true" && "$mode" != "native" ]]; then
|
|
57
|
+
declare -f wire_context >/dev/null 2>&1 && pass "$id: wire_context defined" || fail "$id: wire_context missing"
|
|
58
|
+
|
|
59
|
+
TMPDIR=$(mktemp -d)
|
|
60
|
+
cp "$SCRIPT_DIR/../docs/templates/AGENTS.md" "$TMPDIR/AGENTS.md" 2>/dev/null || echo "# test" > "$TMPDIR/AGENTS.md"
|
|
61
|
+
(
|
|
62
|
+
cd "$TMPDIR"
|
|
63
|
+
# shellcheck source=/dev/null
|
|
64
|
+
source "$adapter_file"
|
|
65
|
+
wire_context 2>/dev/null || true
|
|
66
|
+
wire_context 2>/dev/null && pass "$id: idempotent wire_context" || fail "$id: wire_context failed"
|
|
67
|
+
)
|
|
68
|
+
fi
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
if [[ -n "$FILTER" ]]; then
|
|
72
|
+
test_adapter "$FILTER"
|
|
73
|
+
else
|
|
74
|
+
while IFS= read -r adapter; do
|
|
75
|
+
[[ -n "$adapter" ]] && test_adapter "$adapter"
|
|
76
|
+
done < <(yq -r '.targets[] | (.skill.adapter // .context.adapter)' "$TARGETS_FILE" | sort -u)
|
|
77
|
+
fi
|
|
78
|
+
|
|
79
|
+
echo "test-adapters: $PASS passed, $FAIL failed"
|
|
80
|
+
[[ "$FAIL" -eq 0 ]] || exit 1
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# story: e37s05
|
|
3
|
+
# scenario: SC-e37s05-P1-01
|
|
4
|
+
set -euo pipefail
|
|
5
|
+
|
|
6
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
7
|
+
TARGETS_FILE="${1:-$SCRIPT_DIR/targets.yaml}"
|
|
8
|
+
|
|
9
|
+
if ! command -v yq >/dev/null 2>&1; then
|
|
10
|
+
echo "validate-targets-yaml: yq required — brew install yq" >&2
|
|
11
|
+
exit 1
|
|
12
|
+
fi
|
|
13
|
+
|
|
14
|
+
[[ -f "$TARGETS_FILE" ]] || { echo "validate-targets-yaml: missing $TARGETS_FILE" >&2; exit 1; }
|
|
15
|
+
|
|
16
|
+
version=$(yq -r '.registry_version // ""' "$TARGETS_FILE")
|
|
17
|
+
[[ -n "$version" && "$version" != "null" ]] || { echo "validate-targets-yaml: registry_version required" >&2; exit 1; }
|
|
18
|
+
|
|
19
|
+
count=$(yq '.targets | length' "$TARGETS_FILE")
|
|
20
|
+
[[ "$count" -ge 5 ]] || { echo "validate-targets-yaml: need >= 5 targets, got $count" >&2; exit 1; }
|
|
21
|
+
|
|
22
|
+
valid_tiers=" default_on opt_in optional "
|
|
23
|
+
valid_modes=" native symlink copy config-bridge "
|
|
24
|
+
|
|
25
|
+
while IFS= read -r row; do
|
|
26
|
+
id=$(echo "$row" | yq -r '.id // ""')
|
|
27
|
+
name=$(echo "$row" | yq -r '.name // ""')
|
|
28
|
+
tier=$(echo "$row" | yq -r '.tier // ""')
|
|
29
|
+
skill_null=$(echo "$row" | yq -r '.skill == null')
|
|
30
|
+
context_null=$(echo "$row" | yq -r '.context == null')
|
|
31
|
+
|
|
32
|
+
[[ -n "$id" ]] || { echo "validate-targets-yaml: target missing id" >&2; exit 1; }
|
|
33
|
+
[[ -n "$name" ]] || { echo "validate-targets-yaml: $id missing name" >&2; exit 1; }
|
|
34
|
+
[[ "$valid_tiers" == *" $tier "* ]] || { echo "validate-targets-yaml: $id invalid tier: $tier" >&2; exit 1; }
|
|
35
|
+
[[ "$skill_null" == "false" || "$context_null" == "false" ]] || {
|
|
36
|
+
echo "validate-targets-yaml: $id needs skill or context" >&2; exit 1
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
if [[ "$skill_null" == "false" ]]; then
|
|
40
|
+
adapter=$(echo "$row" | yq -r '.skill.adapter // ""')
|
|
41
|
+
[[ -n "$adapter" ]] || { echo "validate-targets-yaml: $id skill.adapter required" >&2; exit 1; }
|
|
42
|
+
adapter_file="$SCRIPT_DIR/adapters/${adapter}.sh"
|
|
43
|
+
[[ -f "$adapter_file" ]] || { echo "validate-targets-yaml: missing adapter $adapter_file" >&2; exit 1; }
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
if [[ "$context_null" == "false" ]]; then
|
|
47
|
+
mode=$(echo "$row" | yq -r '.context.mode // ""')
|
|
48
|
+
adapter=$(echo "$row" | yq -r '.context.adapter // ""')
|
|
49
|
+
[[ "$valid_modes" == *" $mode "* ]] || { echo "validate-targets-yaml: $id invalid context.mode: $mode" >&2; exit 1; }
|
|
50
|
+
[[ -n "$adapter" ]] || { echo "validate-targets-yaml: $id context.adapter required" >&2; exit 1; }
|
|
51
|
+
adapter_file="$SCRIPT_DIR/adapters/${adapter}.sh"
|
|
52
|
+
[[ -f "$adapter_file" ]] || { echo "validate-targets-yaml: missing context adapter $adapter_file" >&2; exit 1; }
|
|
53
|
+
if [[ "$mode" == "symlink" || "$mode" == "copy" ]]; then
|
|
54
|
+
file=$(echo "$row" | yq -r '.context.file // ""')
|
|
55
|
+
[[ -n "$file" ]] || { echo "validate-targets-yaml: $id context.file required for $mode" >&2; exit 1; }
|
|
56
|
+
fi
|
|
57
|
+
if [[ "$mode" == "config-bridge" ]]; then
|
|
58
|
+
bf=$(echo "$row" | yq -r '.context.bridge_file // ""')
|
|
59
|
+
bk=$(echo "$row" | yq -r '.context.bridge_key // ""')
|
|
60
|
+
[[ -n "$bf" && -n "$bk" ]] || { echo "validate-targets-yaml: $id bridge_file/key required" >&2; exit 1; }
|
|
61
|
+
fi
|
|
62
|
+
fi
|
|
63
|
+
done < <(yq -o=json '.targets[]' "$TARGETS_FILE" | jq -c '.')
|
|
64
|
+
|
|
65
|
+
# Unique ids
|
|
66
|
+
dup=$(yq -r '.targets[].id' "$TARGETS_FILE" | sort | uniq -d)
|
|
67
|
+
[[ -z "$dup" ]] || { echo "validate-targets-yaml: duplicate ids: $dup" >&2; exit 1; }
|
|
68
|
+
|
|
69
|
+
echo "validate-targets-yaml: PASS ($count targets)"
|
|
@@ -1,10 +1,54 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
# story: e47s04
|
|
3
|
-
# verify-install.sh — manual assertion harness for install + seed wiring
|
|
2
|
+
# story: e47s04 e37s02 e37s04 e37s08
|
|
3
|
+
# verify-install.sh — manual assertion harness for install + seed wiring + Reach matrix
|
|
4
4
|
set -euo pipefail
|
|
5
5
|
source "$(dirname "${BASH_SOURCE[0]}")/lib/skill-common.sh"
|
|
6
6
|
resolve_repo_root
|
|
7
7
|
|
|
8
|
+
MATRIX_MODE=0
|
|
9
|
+
FULL_MATRIX=0
|
|
10
|
+
for arg in "$@"; do
|
|
11
|
+
case "$arg" in
|
|
12
|
+
--matrix) MATRIX_MODE=1 ;;
|
|
13
|
+
--full) FULL_MATRIX=1 ;;
|
|
14
|
+
esac
|
|
15
|
+
done
|
|
16
|
+
|
|
17
|
+
if [[ "$MATRIX_MODE" -eq 1 ]]; then
|
|
18
|
+
source "$(dirname "${BASH_SOURCE[0]}")/lib/target-contracts.sh"
|
|
19
|
+
command -v yq >/dev/null || { echo "verify-install: yq required for --matrix" >&2; exit 1; }
|
|
20
|
+
cd "$REPO_ROOT"
|
|
21
|
+
PASS=0
|
|
22
|
+
FAIL=0
|
|
23
|
+
while IFS= read -r row; do
|
|
24
|
+
id=$(echo "$row" | yq -r '.id')
|
|
25
|
+
tier=$(echo "$row" | yq -r '.tier')
|
|
26
|
+
[[ "$tier" == "optional" && "$FULL_MATRIX" -eq 0 ]] && continue
|
|
27
|
+
if [[ "$tier" == "opt_in" ]]; then
|
|
28
|
+
echo "${id}: SKIP (opt_in)"
|
|
29
|
+
continue
|
|
30
|
+
fi
|
|
31
|
+
contracts=$(echo "$row" | yq -r '.contracts // [] | .[]' 2>/dev/null || true)
|
|
32
|
+
target_pass=1
|
|
33
|
+
while IFS= read -r contract; do
|
|
34
|
+
[[ -z "$contract" ]] && continue
|
|
35
|
+
result=$(run_contract "$id" "$contract" 2>&1 | head -1)
|
|
36
|
+
echo "$result"
|
|
37
|
+
[[ "$result" == FAIL* ]] && target_pass=0
|
|
38
|
+
done <<< "$contracts"
|
|
39
|
+
if [[ "$target_pass" -eq 1 ]]; then
|
|
40
|
+
echo "${id}: PASS"
|
|
41
|
+
PASS=$((PASS + 1))
|
|
42
|
+
else
|
|
43
|
+
echo "${id}: FAIL"
|
|
44
|
+
FAIL=$((FAIL + 1))
|
|
45
|
+
fi
|
|
46
|
+
done < <(yq -o=json '.targets[]' "$REPO_ROOT/scripts/targets.yaml" | jq -c '.')
|
|
47
|
+
echo "verify-install --matrix: $PASS passed, $FAIL failed"
|
|
48
|
+
[[ "$FAIL" -eq 0 && "$PASS" -gt 0 ]] || exit 1
|
|
49
|
+
exit 0
|
|
50
|
+
fi
|
|
51
|
+
|
|
8
52
|
PASS=0
|
|
9
53
|
FAIL=0
|
|
10
54
|
TMPDIR=""
|
|
@@ -27,16 +71,45 @@ echo "$DRY_OUT" | grep -q 'Gemini CLI →' && pass "install includes Gemini CLI"
|
|
|
27
71
|
echo "$DRY_OUT" | grep -q 'Cursor →' && pass "install includes Cursor" || fail "install missing Cursor"
|
|
28
72
|
|
|
29
73
|
for tool in "Claude Code" "pi"; do
|
|
30
|
-
# Find the skills count in the tool's section (between this tool header and next section)
|
|
31
74
|
section=$(echo "$DRY_OUT" | sed -n "/${tool} →/,/^$/p")
|
|
32
75
|
count=$(echo "$section" | grep -o '[0-9]\+ skills installed' | grep -o '[0-9]\+' || echo "0")
|
|
33
76
|
[[ "$count" -gt 0 ]] && pass "${tool}: $count skills" || fail "${tool}: 0 skills"
|
|
34
77
|
done
|
|
35
78
|
|
|
79
|
+
echo ""
|
|
80
|
+
echo "=== AGENTS.md spine (e37s04) ==="
|
|
81
|
+
[[ -f "$REPO_ROOT/docs/templates/AGENTS.md" ]] && pass "Reach template exists" || fail "Reach template missing"
|
|
82
|
+
grep -q 'Preflight' "$REPO_ROOT/docs/templates/AGENTS.md" && pass "template: Preflight" || fail "template: missing Preflight"
|
|
83
|
+
grep -qi 'cline\|aider\|opencode' "$REPO_ROOT/docs/templates/AGENTS.md" && pass "template: multi-agent preamble" || fail "template: missing OSS targets"
|
|
84
|
+
grep -q '## Test' "$REPO_ROOT/docs/templates/AGENTS.md" && pass "template: Test section" || fail "template: missing Test"
|
|
85
|
+
grep -q '## Lint' "$REPO_ROOT/docs/templates/AGENTS.md" && pass "template: Lint section" || fail "template: missing Lint"
|
|
86
|
+
grep -q '## Build' "$REPO_ROOT/docs/templates/AGENTS.md" && pass "template: Build section" || fail "template: missing Build"
|
|
87
|
+
|
|
88
|
+
echo ""
|
|
89
|
+
echo "=== Cline native AGENTS.md (e37s02) ==="
|
|
90
|
+
[[ -f "$REPO_ROOT/AGENTS.md" || -f "$REPO_ROOT/docs/templates/AGENTS.md" ]] && pass "Cline: AGENTS.md present (native reader)" || fail "Cline: AGENTS.md missing"
|
|
91
|
+
grep -qi 'cline' "$REPO_ROOT/skills/using-bigpowers/SKILL.md" && pass "using-bigpowers: Cline section" || fail "using-bigpowers: missing Cline"
|
|
92
|
+
|
|
93
|
+
echo ""
|
|
94
|
+
echo "=== Aider bridge (e37s03) ==="
|
|
95
|
+
grep -qi 'aider' "$REPO_ROOT/skills/seed-conventions/SKILL.md" && pass "seed-conventions: Aider wiring" || fail "seed-conventions: missing Aider"
|
|
96
|
+
grep -qi 'Aider-AI' "$REPO_ROOT/skills/using-bigpowers/SKILL.md" && pass "using-bigpowers: Aider-AI upstream" || fail "using-bigpowers: missing Aider-AI"
|
|
97
|
+
|
|
98
|
+
echo ""
|
|
99
|
+
echo "=== Optional Codex wave (e37s04) ==="
|
|
100
|
+
if grep -qi 'codex' "$REPO_ROOT/skills/seed-conventions/SKILL.md" 2>/dev/null; then
|
|
101
|
+
grep -qi 'config.toml' "$REPO_ROOT/skills/seed-conventions/REFERENCE.md" && pass "Codex: REFERENCE config.toml" || fail "Codex: missing config.toml"
|
|
102
|
+
echo "$DRY_OUT" | grep -qi 'codex' && pass "Codex: install --dry-run mentions codex" || fail "Codex: install missing codex"
|
|
103
|
+
else
|
|
104
|
+
pass "Codex: wave absent — assertions skipped"
|
|
105
|
+
fi
|
|
106
|
+
|
|
36
107
|
echo ""
|
|
37
108
|
echo "=== seed-conventions local wiring ==="
|
|
38
109
|
grep -qi 'local tool wiring' "$REPO_ROOT/skills/seed-conventions/SKILL.md" && pass "SKILL.md: local tool wiring" || fail "SKILL.md: missing local tool wiring"
|
|
39
110
|
grep -qi 'opencode.json' "$REPO_ROOT/skills/seed-conventions/REFERENCE.md" && pass "REFERENCE.md: opencode.json" || fail "REFERENCE.md: missing opencode.json"
|
|
111
|
+
grep -qi 'AGENTS.md' "$REPO_ROOT/skills/seed-conventions/SKILL.md" && pass "SKILL.md: AGENTS.md spine" || fail "SKILL.md: missing AGENTS.md"
|
|
112
|
+
grep -qi 'symlink' "$REPO_ROOT/skills/seed-conventions/SKILL.md" && pass "SKILL.md: CLAUDE.md symlink" || fail "SKILL.md: missing symlink"
|
|
40
113
|
grep -qi 'cursor/rules' "$REPO_ROOT/skills/seed-conventions/REFERENCE.md" && pass "REFERENCE.md: Cursor symlink" || fail "REFERENCE.md: missing Cursor symlink"
|
|
41
114
|
|
|
42
115
|
OPENCODE_JSON=$(sed -n '/```json/,/```/p' "$REPO_ROOT/skills/seed-conventions/REFERENCE.md" | grep -v '```' || true)
|
|
@@ -1,12 +1,24 @@
|
|
|
1
|
-
# story: e51s02
|
|
1
|
+
# story: e51s02 e37s01 e37s03 e37s14
|
|
2
2
|
# Seed Conventions — Reference Templates
|
|
3
3
|
|
|
4
|
-
##
|
|
4
|
+
## AGENTS.md spine (Reach Template — e37s01)
|
|
5
|
+
|
|
6
|
+
Canonical source: copy from `docs/templates/AGENTS.md` in the bigpowers repo (Reach Template).
|
|
7
|
+
Do not invent structure ad hoc — the template includes multi-agent preamble, Preflight, Test/Lint/Build sections.
|
|
8
|
+
|
|
9
|
+
When local tool wiring is opted in:
|
|
10
|
+
1. Copy Reach Template → project root `AGENTS.md`, fill interview placeholders
|
|
11
|
+
2. `ln -sf AGENTS.md CLAUDE.md` (or content copy on Windows when symlink fails)
|
|
12
|
+
3. Write `opencode.json` with `"instructions": ["AGENTS.md"]`
|
|
13
|
+
|
|
14
|
+
When user **opts out** of local tool wiring, do not emit AGENTS.md spine artifacts.
|
|
15
|
+
|
|
16
|
+
## Agent config template (legacy — prefer AGENTS.md spine)
|
|
5
17
|
|
|
6
18
|
All three files use the same structure — only the header differs:
|
|
7
|
-
- `CLAUDE.md` → `# [Project Name] — Claude Code`
|
|
19
|
+
- `CLAUDE.md` → `# [Project Name] — Claude Code` (or symlink to AGENTS.md)
|
|
8
20
|
- `GEMINI.md` → `# [Project Name] — Gemini CLI`
|
|
9
|
-
- `AGENTS.md` → `# [Project Name] —
|
|
21
|
+
- `AGENTS.md` → `# [Project Name] — AI Agents` (Reach Template header)
|
|
10
22
|
|
|
11
23
|
```markdown
|
|
12
24
|
# [Project Name] — [Agent]
|
|
@@ -55,10 +67,33 @@ Stack: [language, framework, runtime]
|
|
|
55
67
|
```json
|
|
56
68
|
{
|
|
57
69
|
"$schema": "https://opencode.ai/config.json",
|
|
58
|
-
"instructions": [".
|
|
70
|
+
"instructions": ["AGENTS.md"]
|
|
59
71
|
}
|
|
60
72
|
```
|
|
61
73
|
|
|
74
|
+
## Aider — `.aider.conf.yml` bridge (e37s03)
|
|
75
|
+
|
|
76
|
+
When Aider wiring is opted in:
|
|
77
|
+
|
|
78
|
+
```yaml
|
|
79
|
+
read: AGENTS.md
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Upstream: [Aider-AI/aider](https://github.com/Aider-AI/aider) (not paul-gauthier/aider).
|
|
83
|
+
|
|
84
|
+
## Codex CLI — project-local `.codex/config.toml` + AGENTS.md (e37s14)
|
|
85
|
+
|
|
86
|
+
Source: https://developers.openai.com/codex/guides/agents-md
|
|
87
|
+
|
|
88
|
+
Codex is instruction-file-only — no slash skills. When Codex wiring is opted in:
|
|
89
|
+
|
|
90
|
+
```toml
|
|
91
|
+
# .codex/config.toml
|
|
92
|
+
instructions = ["AGENTS.md"]
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Use AGENTS.md header `# [Project Name] — AI Agents` (shared with OpenCode/Cline). Single AGENTS.md serves dual-tool projects.
|
|
96
|
+
|
|
62
97
|
## CONVENTIONS.md
|
|
63
98
|
|
|
64
99
|
Use the standard bigpowers CONVENTIONS.md as the base. Fill in the project-specific defensive code categories from the interview answers.
|
|
@@ -32,13 +32,16 @@ Ask the user these questions (one at a time, wait for each answer):
|
|
|
32
32
|
5. **Conventions** — "Any naming, file organization, or patterns all agents must follow?"
|
|
33
33
|
6. **Never-do list** — "What are the hard stops? Things an agent must never touch?"
|
|
34
34
|
7. **Defensive code categories** — "Which apply? (Rate limit / Retry / Circuit breaker / Timeout / Graceful degradation)"
|
|
35
|
-
8. **Local tool wiring (optional)** — "Wire bigpowers
|
|
35
|
+
8. **Local tool wiring (optional)** — "Wire bigpowers for project-local tools? (Cursor, OpenCode, Cline, Aider, Codex CLI)" If yes, generate AGENTS.md spine artifacts per [REFERENCE.md](REFERENCE.md) §Local tool wiring and §AGENTS.md spine. If no, skip — standard seed output unchanged (no AGENTS.md spine unless opted in).
|
|
36
36
|
|
|
37
37
|
## Generate files
|
|
38
38
|
|
|
39
39
|
After the interview, generate each file using the templates in [REFERENCE.md](REFERENCE.md):
|
|
40
|
-
- `
|
|
41
|
-
- `
|
|
40
|
+
- `AGENTS.md` — from `docs/templates/AGENTS.md` Reach Template (canonical spine source)
|
|
41
|
+
- `CLAUDE.md` — symlink to `AGENTS.md` (copy fallback on Windows when symlink fails)
|
|
42
|
+
- `GEMINI.md` — symlink to `AGENTS.md` when Gemini wiring opted in
|
|
43
|
+
- `opencode.json` — with `"instructions": ["AGENTS.md"]` when OpenCode opted in
|
|
44
|
+
- `.aider.conf.yml` — with `read: AGENTS.md` when Aider opted in
|
|
42
45
|
- `CONVENTIONS.md` — bigpowers standard template + project defensive code categories
|
|
43
46
|
|
|
44
47
|
### `specs/` directory
|
|
@@ -19,9 +19,9 @@ npm install -g bigpowers # global install
|
|
|
19
19
|
bigpowers setup # sync skills + link to your tools
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
-
From source
|
|
22
|
+
From source: `git clone` → `bash scripts/install.sh`. Package: [bigpowers on npm](https://www.npmjs.com/package/bigpowers).
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
**Reach tools:** **Cline** — native AGENTS.md reader (no extension). **Aider** — opt-in `.aider.conf.yml` with `read: AGENTS.md` ([Aider-AI/aider](https://github.com/Aider-AI/aider)). **Codex CLI** — optional `.codex/config.toml` via seed-conventions; global `~/.codex/AGENTS.md` from install.sh.
|
|
25
25
|
|
|
26
26
|
## What bigpowers is
|
|
27
27
|
|
package/skills-lock.json
CHANGED
|
@@ -283,7 +283,7 @@
|
|
|
283
283
|
},
|
|
284
284
|
"seed-conventions": {
|
|
285
285
|
"description": "Generate CLAUDE.md and CONVENTIONS.md for a brand-new project through a brief interview, and create the specs/ directory with evolved bigpowers structure (product/, tech-architecture/, verifications/, epics/archive/). Entry point for greenfield projects. Use when starting a new project from scratch, when user asks to set up AI agent conventions, or when there is no CLAUDE.md yet.",
|
|
286
|
-
"sha256": "
|
|
286
|
+
"sha256": "ebb23bdd3aefa527",
|
|
287
287
|
"path": "skills/seed-conventionsSKILL.md"
|
|
288
288
|
},
|
|
289
289
|
"session-state": {
|
|
@@ -338,7 +338,7 @@
|
|
|
338
338
|
},
|
|
339
339
|
"using-bigpowers": {
|
|
340
340
|
"description": "One-time bootstrap that introduces the bigpowers skills system, the PMBOK lifecycle arc, and tells you which skill to call first for your situation. Use when starting with bigpowers for the first time, when user asks \"where do I start?\", or when the skills system needs to be explained.",
|
|
341
|
-
"sha256": "
|
|
341
|
+
"sha256": "c910fc0ed3482341",
|
|
342
342
|
"path": "skills/using-bigpowersSKILL.md"
|
|
343
343
|
},
|
|
344
344
|
"validate-contracts": {
|