bigpowers 2.42.1 → 2.43.1

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.
Files changed (37) hide show
  1. package/.pi/package.json +2 -2
  2. package/.pi/prompts/extract-design.md +131 -0
  3. package/.pi/skills/extract-design/SKILL.md +133 -0
  4. package/CHANGELOG.md +14 -0
  5. package/CONTRIBUTING.md +119 -0
  6. package/SKILL-INDEX.md +2 -2
  7. package/extract-design/REFERENCE.md +52 -0
  8. package/extract-design/SKILL.md +77 -0
  9. package/extract-design/extract-design.feature +23 -0
  10. package/extract-design/scripts/classify-colors.js +21 -0
  11. package/extract-design/scripts/classify-rounded.js +10 -0
  12. package/extract-design/scripts/classify-spacing.js +14 -0
  13. package/extract-design/scripts/classify-typography.js +9 -0
  14. package/extract-design/scripts/collect-styles.js +149 -0
  15. package/extract-design/scripts/detect-components.js +12 -0
  16. package/extract-design/scripts/extract.js +306 -0
  17. package/extract-design/scripts/generate-prose.js +38 -0
  18. package/extract-design/scripts/lib/browser.js +206 -0
  19. package/extract-design/scripts/lib/constants.js +9 -0
  20. package/extract-design/scripts/lib/logging.js +8 -0
  21. package/extract-design/scripts/lib/retry.js +13 -0
  22. package/extract-design/scripts/lib/state.js +15 -0
  23. package/extract-design/scripts/lib/validator.js +11 -0
  24. package/extract-design/scripts/write-designd.js +16 -0
  25. package/extract-design/tests/fixtures/glassmorphism-dark/expected-tokens.json +1 -0
  26. package/extract-design/tests/fixtures/glassmorphism-dark/prototype.html +7 -0
  27. package/extract-design/tests/fixtures/minimal-no-styles/expected-tokens.json +1 -0
  28. package/extract-design/tests/fixtures/minimal-no-styles/prototype.html +2 -0
  29. package/extract-design/tests/fixtures/swiss-grid/expected-tokens.json +1 -0
  30. package/extract-design/tests/fixtures/swiss-grid/prototype.html +6 -0
  31. package/extract-design/tests/test-extraction.js +315 -0
  32. package/package.json +1 -1
  33. package/scripts/add-model-frontmatter.sh +9 -61
  34. package/scripts/generate-skill-index.sh +21 -81
  35. package/scripts/regenerate-lockfile.sh +6 -1
  36. package/scripts/sync-skills.sh +7 -0
  37. package/skills-lock.json +5 -0
@@ -3,72 +3,20 @@
3
3
  set -euo pipefail
4
4
  REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
5
5
 
6
- declare -A MODELS=(
7
- [using-bigpowers]=sonnet
8
- [orchestrate-project]=sonnet
9
- [survey-context]=haiku
10
- [research-first]=sonnet
11
- [elaborate-spec]=opus
12
- [map-codebase]=sonnet
13
- [model-domain]=sonnet
14
- [define-language]=sonnet
15
- [grill-me]=sonnet
16
- [grill-with-docs]=opus
17
- [deepen-architecture]=sonnet
18
- [design-interface]=opus
19
- [assess-impact]=sonnet
20
- [change-request]=sonnet
21
- [scope-work]=sonnet
22
- [slice-tasks]=sonnet
23
- [define-success]=sonnet
24
- [plan-work]=opus
25
- [plan-refactor]=sonnet
26
- [plan-release]=sonnet
27
- [spike-prototype]=sonnet
28
- [kickoff-branch]=haiku
29
- [guard-git]=haiku
30
- [hook-commits]=haiku
31
- [seed-conventions]=sonnet
32
- [develop-tdd]=sonnet
33
- [enforce-first]=haiku
34
- [delegate-task]=sonnet
35
- [dispatch-agents]=sonnet
36
- [execute-plan]=haiku
37
- [wire-observability]=sonnet
38
- [verify-work]=haiku
39
- [run-evals]=sonnet
40
- [investigate-bug]=sonnet
41
- [diagnose-root]=sonnet
42
- [validate-fix]=haiku
43
- [audit-code]=haiku
44
- [request-review]=opus
45
- [respond-review]=sonnet
46
- [trace-requirement]=haiku
47
- [commit-message]=haiku
48
- [release-branch]=haiku
49
- [inspect-quality]=sonnet
50
- [organize-workspace]=haiku
51
- [stocktake-skills]=sonnet
52
- [evolve-skill]=opus
53
- [terse-mode]=haiku
54
- [craft-skill]=sonnet
55
- [edit-document]=sonnet
56
- [session-state]=haiku
57
- [migrate-spec]=sonnet
58
- [visual-dashboard]=sonnet
59
- [write-document]=sonnet
60
- [setup-environment]=haiku
61
- [reset-baseline]=haiku
62
- [search-skills]=haiku
63
- [compose-workflow]=sonnet
64
- [simulate-agents]=sonnet
65
- )
6
+ # Bash 3.2-compatible model mapping (no declare -A)
7
+ get_model() {
8
+ case "$1" in
9
+ survey-context|verify-work|validate-fix|audit-code|enforce-first|trace-requirement|commit-message|release-branch|kickoff-branch|guard-git|hook-commits|execute-plan|organize-workspace|terse-mode|session-state|search-skills|setup-environment|reset-baseline) echo "haiku" ;;
10
+ elaborate-spec|grill-with-docs|design-interface|plan-work|request-review|evolve-skill) echo "opus" ;;
11
+ *) echo "sonnet" ;;
12
+ esac
13
+ }
66
14
 
67
15
  for skill_dir in "$REPO_ROOT"/*/; do
68
16
  skill_md="$skill_dir/SKILL.md"
69
17
  [[ -f "$skill_md" ]] || continue
70
18
  name=$(basename "$skill_dir")
71
- model="${MODELS[$name]:-sonnet}"
19
+ model=$(get_model "$name")
72
20
  if grep -q '^model:' "$skill_md" 2>/dev/null; then
73
21
  continue
74
22
  fi
@@ -14,85 +14,25 @@ if [[ ! -f "$LOCKFILE" ]]; then
14
14
  fi
15
15
 
16
16
  # Phase categorization — maps each skill to a lifecycle phase
17
- declare -A PHASE_MAP
18
- PHASE_MAP=(
19
- # Discover
20
- [survey-context]="Discover"
21
- [research-first]="Discover"
22
- [search-skills]="Discover"
23
- [using-bigpowers]="Discover"
24
- [map-codebase]="Discover"
25
- [elaborate-spec]="Discover"
26
- [audit-plan]="Discover"
27
- # Elaborate / Design
28
- [model-domain]="Design"
29
- [define-language]="Design"
30
- [grill-me]="Design"
31
- [grill-with-docs]="Design"
32
- [deepen-architecture]="Design"
33
- [design-interface]="Design"
34
- [define-success]="Design"
35
- # Plan
36
- [scope-work]="Plan"
37
- [slice-tasks]="Plan"
38
- [plan-work]="Plan"
39
- [plan-release]="Plan"
40
- [plan-refactor]="Plan"
41
- [assess-impact]="Plan"
42
- [change-request]="Plan"
43
- [run-planning]="Plan"
44
- [seed-conventions]="Plan"
45
- # Build
46
- [develop-tdd]="Build"
47
- [kickoff-branch]="Build"
48
- [execute-plan]="Build"
49
- [build-epic]="Build"
50
- [spike-prototype]="Build"
51
- [craft-skill]="Build"
52
- [quick-fix]="Build"
53
- [setup-environment]="Build"
54
- [wire-observability]="Build"
55
- [wire-ci]="Build"
56
- [publish-package]="Build"
57
- [align-grid]="Build"
58
- [orchestrate-project]="Build"
59
- [guard-git]="Build"
60
- [hook-commits]="Build"
61
- [deploy]="Build"
62
- [smoke-test]="Build"
63
- [validate-contracts]="Build"
64
- # Verify
65
- [verify-work]="Verify"
66
- [validate-fix]="Verify"
67
- [audit-code]="Verify"
68
- [enforce-first]="Verify"
69
- [run-evals]="Verify"
70
- [investigate-bug]="Verify"
71
- [diagnose-root]="Verify"
72
- [fix-bug]="Verify"
73
- [inspect-quality]="Verify"
74
- [request-review]="Verify"
75
- [respond-review]="Verify"
76
- [trace-requirement]="Verify"
77
- # Release
78
- [release-branch]="Release"
79
- [commit-message]="Release"
80
- # Sustain
81
- [session-state]="Sustain"
82
- [edit-document]="Sustain"
83
- [write-document]="Sustain"
84
- [organize-workspace]="Sustain"
85
- [reset-baseline]="Sustain"
86
- [stocktake-skills]="Sustain"
87
- [evolve-skill]="Sustain"
88
- [run-benchmark]="Sustain"
89
- [terse-mode]="Sustain"
90
- [delegate-task]="Sustain"
91
- [dispatch-agents]="Sustain"
92
- [simulate-agents]="Sustain"
93
- [compose-workflow]="Sustain"
94
- [migrate-spec]="Sustain"
95
- )
17
+ # Uses a case statement for bash 3.2 compatibility (macOS default bash lacks declare -A)
18
+ get_phase() {
19
+ case "$1" in
20
+ # Discover
21
+ survey-context|research-first|search-skills|using-bigpowers|map-codebase|elaborate-spec|audit-plan) echo "Discover" ;;
22
+ # Design
23
+ model-domain|define-language|grill-me|grill-with-docs|deepen-architecture|design-interface|define-success) echo "Design" ;;
24
+ # Plan
25
+ scope-work|slice-tasks|plan-work|plan-release|plan-refactor|assess-impact|change-request|run-planning|seed-conventions) echo "Plan" ;;
26
+ # Build
27
+ develop-tdd|kickoff-branch|execute-plan|build-epic|spike-prototype|craft-skill|quick-fix|setup-environment|wire-observability|wire-ci|publish-package|align-grid|orchestrate-project|guard-git|hook-commits|deploy|smoke-test|validate-contracts) echo "Build" ;;
28
+ # Verify
29
+ verify-work|validate-fix|audit-code|enforce-first|run-evals|investigate-bug|diagnose-root|fix-bug|inspect-quality|request-review|respond-review|trace-requirement) echo "Verify" ;;
30
+ # Release
31
+ release-branch|commit-message) echo "Release" ;;
32
+ # Sustain
33
+ session-state|edit-document|write-document|organize-workspace|reset-baseline|stocktake-skills|evolve-skill|run-benchmark|terse-mode|delegate-task|dispatch-agents|simulate-agents|compose-workflow|migrate-spec) echo "Sustain" ;;
34
+ esac
35
+ }
96
36
 
97
37
  # Phase order for display
98
38
  PHASE_ORDER=("Discover" "Design" "Plan" "Build" "Verify" "Release" "Sustain")
@@ -123,7 +63,7 @@ DESC_COL_WIDTH=56
123
63
  for phase in "${PHASE_ORDER[@]}"; do
124
64
  phase_skills=()
125
65
  for name in $(jq -r '.skills | keys[]' "$LOCKFILE" | sort); do
126
- [[ "${PHASE_MAP[$name]:-}" == "$phase" ]] && phase_skills+=("$name")
66
+ [[ "$(get_phase "$name")" == "$phase" ]] && phase_skills+=("$name")
127
67
  done
128
68
  count=${#phase_skills[@]}
129
69
  total=$((total + count))
@@ -144,7 +84,7 @@ DESC_COL_WIDTH=56
144
84
  row=0
145
85
  for phase in "${PHASE_ORDER[@]}"; do
146
86
  for name in $(jq -r '.skills | keys[]' "$LOCKFILE" | sort); do
147
- [[ "${PHASE_MAP[$name]:-}" != "$phase" ]] && continue
87
+ [[ "$(get_phase "$name")" != "$phase" ]] && continue
148
88
  row=$((row + 1))
149
89
  desc=$(jq -r --arg n "$name" '.skills[$n].description // ""' "$LOCKFILE" | head -c 80)
150
90
  echo "| $row | $phase | \`$name\` | $desc | ✅ Active |"
@@ -20,7 +20,12 @@ for skill_dir in "$REPO_ROOT"/*/; do
20
20
  | tr -d '\n' | sed -E 's/[[:space:]]+/ /g')
21
21
 
22
22
  # Compute SHA-256 of full SKILL.md content (first 16 hex chars for compact uniqueness)
23
- sha256=$(sha256sum "$skill_md" | cut -c1-16)
23
+ # Falls back to shasum for macOS where sha256sum is not installed by default
24
+ if command -v sha256sum &>/dev/null; then
25
+ sha256=$(sha256sum "$skill_md" | cut -c1-16)
26
+ else
27
+ sha256=$(shasum -a 256 "$skill_md" | cut -c1-16)
28
+ fi
24
29
 
25
30
  # Relative path from repo root
26
31
  relpath="${skill_dir#$REPO_ROOT/}SKILL.md"
@@ -230,6 +230,13 @@ if [[ -f "$validate_script" ]] && command -v python3 &>/dev/null; then
230
230
  fi
231
231
  fi
232
232
 
233
+ # Regression guard (BUG-2026-07-02T103911): no bash 4+ features in install-chain scripts
234
+ # macOS ships bash 3.2 which lacks declare -A (associative arrays)
235
+ if grep -rn '^declare -A\|^[[:space:]]*declare -A' scripts/sync-skills.sh scripts/generate-skill-index.sh scripts/regenerate-lockfile.sh scripts/build-skill-index.sh 2>/dev/null; then
236
+ echo "sync-skills: FAIL — bash 4+ features detected in install-chain scripts (not macOS-compatible)" >&2
237
+ exit 1
238
+ fi
239
+
233
240
  # Regenerate derived reference tables from live SKILL.md frontmatter
234
241
  # Only in dev context (with .git) — not during consumer npm install where docs/ is excluded
235
242
  if [[ -d "$REPO_ROOT/.git" ]]; then
package/skills-lock.json CHANGED
@@ -116,6 +116,11 @@
116
116
  "sha256": "844f2a3069f75f30",
117
117
  "path": "execute-plan/SKILL.md"
118
118
  },
119
+ "extract-design": {
120
+ "description": "\"Extract a Google DESIGN.md file from an HTML prototype (claude.ai/design or any styled page) using Puppeteer, producing machine-readable tokens and AI-generated prose. Use when the user has an HTML prototype and wants a DESIGN.md to anchor their project's visual identity, or when seed-conventions has just scaffolded a new project.\"",
121
+ "sha256": "70fc3bc315b10b80",
122
+ "path": "extract-design/SKILL.md"
123
+ },
119
124
  "fix-bug": {
120
125
  "description": "Bug fix orchestrator — active_flow fix_bug; reads specs/bugs/BUG-*.md; chains investigate-bug, develop-tdd, validate-fix. Use when user reports a defect.",
121
126
  "sha256": "aa6fe406ba87a648",