get-shit-pretty 0.5.0 → 0.5.2

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 (68) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/README.md +1 -1
  3. package/bin/install.js +38 -19
  4. package/gsp/agents/gsp-accessibility-auditor.md +1 -4
  5. package/gsp/agents/gsp-ascii-artist.md +1 -1
  6. package/gsp/agents/gsp-brand-auditor.md +0 -2
  7. package/gsp/agents/gsp-brand-strategist.md +0 -2
  8. package/gsp/agents/gsp-brand-syncer.md +125 -0
  9. package/gsp/agents/gsp-builder.md +11 -14
  10. package/gsp/agents/gsp-campaign-director.md +0 -20
  11. package/gsp/agents/gsp-critic.md +15 -18
  12. package/gsp/agents/gsp-designer.md +6 -6
  13. package/gsp/agents/gsp-identity-designer.md +0 -4
  14. package/gsp/agents/{gsp-system-architect.md → gsp-pattern-architect.md} +5 -67
  15. package/gsp/agents/gsp-project-researcher.md +0 -21
  16. package/gsp/agents/gsp-researcher.md +0 -2
  17. package/gsp/agents/gsp-reviewer.md +4 -14
  18. package/gsp/agents/gsp-scoper.md +1 -22
  19. package/gsp/hooks/hooks.json +11 -0
  20. package/gsp/prompts/01-design-system-architect.md +0 -46
  21. package/gsp/prompts/02-brand-identity-creator.md +1 -14
  22. package/gsp/prompts/03-ui-ux-pattern-master.md +1 -21
  23. package/gsp/prompts/04-marketing-asset-factory.md +1 -14
  24. package/gsp/prompts/05-implementation-spec-expert.md +0 -27
  25. package/gsp/prompts/06-design-critique-partner.md +1 -17
  26. package/gsp/prompts/07-design-trend-synthesizer.md +2 -29
  27. package/gsp/prompts/08-accessibility-auditor.md +4 -19
  28. package/gsp/prompts/09-design-to-code-translator.md +21 -20
  29. package/gsp/prompts/10-project-scoper.md +2 -36
  30. package/gsp/prompts/11-deliverable-reviewer.md +1 -50
  31. package/gsp/prompts/12-project-researcher.md +0 -39
  32. package/gsp/references/anti-patterns.md +173 -0
  33. package/gsp/references/block-patterns.md +135 -0
  34. package/gsp/references/chunk-format.md +31 -0
  35. package/gsp/references/phase-transitions.md +78 -33
  36. package/gsp/references/style-preset-schema.md +63 -0
  37. package/gsp/references/visual-effects.md +475 -0
  38. package/gsp/references/visual-taste.md +120 -0
  39. package/gsp/skills/gsp-accessibility/SKILL.md +1 -1
  40. package/gsp/skills/gsp-brand-audit/SKILL.md +1 -3
  41. package/gsp/skills/gsp-brand-identity/SKILL.md +1 -4
  42. package/gsp/skills/gsp-brand-patterns/SKILL.md +30 -50
  43. package/gsp/skills/gsp-brand-research/SKILL.md +7 -4
  44. package/gsp/skills/gsp-brand-strategy/SKILL.md +1 -4
  45. package/gsp/skills/gsp-brand-sync/SKILL.md +101 -0
  46. package/gsp/skills/gsp-design-system/SKILL.md +1 -1
  47. package/gsp/skills/gsp-doctor/SKILL.md +7 -7
  48. package/gsp/skills/gsp-help/SKILL.md +2 -1
  49. package/gsp/skills/gsp-launch/SKILL.md +2 -3
  50. package/gsp/skills/gsp-project-brief/SKILL.md +7 -22
  51. package/gsp/skills/gsp-project-build/SKILL.md +108 -26
  52. package/gsp/skills/gsp-project-critique/SKILL.md +5 -33
  53. package/gsp/skills/gsp-project-design/SKILL.md +25 -26
  54. package/gsp/skills/gsp-project-research/SKILL.md +8 -17
  55. package/gsp/skills/gsp-project-review/SKILL.md +6 -37
  56. package/gsp/skills/gsp-start/SKILL.md +29 -12
  57. package/gsp/skills/gsp-style/SKILL.md +20 -223
  58. package/gsp/skills/gsp-typescale/SKILL.md +23 -319
  59. package/gsp/skills/gsp-update/SKILL.md +18 -10
  60. package/gsp/templates/branding/brief.md +13 -1
  61. package/gsp/templates/branding/roadmap.md +2 -2
  62. package/gsp/templates/branding/state.md +1 -1
  63. package/gsp/templates/phases/brief.md +1 -1
  64. package/gsp/templates/phases/{system.md → patterns.md} +3 -3
  65. package/gsp/templates/phases/review.md +1 -1
  66. package/package.json +1 -1
  67. package/scripts/gsp-context-recovery.sh +71 -0
  68. package/scripts/gsp-statusline.js +5 -1
@@ -11,12 +11,17 @@ Check for GSP updates, show what's new, and run the update if the user confirms.
11
11
 
12
12
  ## Step 1 — Detect installation
13
13
 
14
- Check for a `VERSION` file to determine install type:
14
+ Check for a `VERSION` file to determine install type. The runtime directory varies by tool:
15
+ - Claude Code: `.claude/` (local) or `~/.claude/` (global)
16
+ - OpenCode: `.opencode/` (local) or `~/.config/opencode/` (global)
17
+ - Gemini: `.gemini/` (local) or `~/.gemini/` (global)
18
+ - Codex: `.codex/` (local) or `~/.codex/` (global)
15
19
 
16
- 1. **Local install**: `.claude/get-shit-pretty/VERSION` relative to the current working directory
17
- 2. **Global install**: `~/.claude/get-shit-pretty/VERSION`
20
+ Look for the VERSION file in both local and global locations. Check two paths per location (current layout first, legacy fallback):
21
+ 1. `{runtime-dir}/VERSION` (v0.5.0+)
22
+ 2. `{runtime-dir}/get-shit-pretty/VERSION` (legacy v0.4.x)
18
23
 
19
- If neither exists, tell the user GSP doesn't appear to be installed and suggest running:
24
+ If neither exists in either location, tell the user GSP doesn't appear to be installed and suggest running:
20
25
  ```
21
26
  npx get-shit-pretty
22
27
  ```
@@ -50,7 +55,7 @@ Update available: v{installed} → v{latest}
50
55
 
51
56
  Fetch the changelog to show what changed:
52
57
  ```bash
53
- curl -sf https://raw.githubusercontent.com/jubs-cloud/get-shit-pretty/main/CHANGELOG.md
58
+ curl -sf https://raw.githubusercontent.com/jubscodes/get-shit-pretty/main/CHANGELOG.md
54
59
  ```
55
60
 
56
61
  If the fetch succeeds, extract and display the section for the latest version. If it fails, skip — changelog display is optional.
@@ -80,16 +85,19 @@ Based on the detected install type from Step 1:
80
85
 
81
86
  Show the output to the user.
82
87
 
88
+ ## Step 7.5 — Run migrations
89
+
90
+ Scan `.design/branding/` for brand directories. For each brand, if `{brand}/system/` exists but `{brand}/patterns/` does not, rename via `mv` and log the migration. This handles the v0.5.0 → v0.5.1 rename.
91
+
83
92
  ## Step 8 — Clear update cache
84
93
 
85
- Remove the update cache so the statusline reflects the new state:
94
+ Remove the update cache so the statusline reflects the new state. Clear cache from the same directory where VERSION was found in Step 1:
86
95
  ```bash
87
- rm -f ~/.claude/get-shit-pretty/.update-cache.json
96
+ rm -f {version-dir}/.update-cache.json
88
97
  ```
89
-
90
- Also check for a local cache:
98
+ Also clean the legacy path if it exists:
91
99
  ```bash
92
- rm -f .claude/get-shit-pretty/.update-cache.json
100
+ rm -f {runtime-dir}/get-shit-pretty/.update-cache.json
93
101
  ```
94
102
 
95
103
  ## Step 9 — Remind to restart
@@ -54,9 +54,21 @@
54
54
  - **Trust signals:** {trust / distrust triggers}
55
55
 
56
56
  ## Brand Essence
57
+
58
+ ### Promise
59
+ - **Core promise:** {whenever someone interacts with this brand, they should feel X}
60
+ - **Functional promise:** {what it delivers — saves time, reduces complexity, etc.}
61
+ - **Emotional promise:** {what it makes them feel — confident, seen, ahead, safe, etc.}
62
+
63
+ ### Point of View
64
+ - **Category disagreement:** {what this brand disagrees with in the status quo}
65
+ - **Underestimated truth:** {what truth does this brand hold that others ignore?}
66
+ - **Manifesto line:** {if the brand could defend one idea, what would it be?}
67
+
68
+ ### Personality
57
69
  - **Personality:** {3 words — e.g. precise, inventive, grounded}
58
70
  - **Personality reference:** {brand comparison — "like Stripe meets Notion"}
59
- - **Emotional outcome:** {how should someone feel after interacting with this brand?}
71
+ - **Not us:** {2 words that are definitely not this brand — e.g. corporate, cute}
60
72
  - **Never be:** {what the brand should never feel like — e.g. corporate, cold, try-hard}
61
73
  - **Tone:** {default communication tone}
62
74
 
@@ -38,5 +38,5 @@
38
38
  **Status:** pending
39
39
  **Command:** `/gsp:brand-patterns`
40
40
  **Input:** Identity + Strategy + BRIEF.md
41
- **Output:** `system/` (foundations, components, tokens.json) + `preview.html`
42
- **Goal:** Build design system, generate brand preview, transition to project diamond.
41
+ **Output:** `patterns/` (foundations, components, tokens.json) + `guidelines.html`
42
+ **Goal:** Build design system, generate brand guidelines, transition to project diamond.
@@ -16,7 +16,7 @@
16
16
  | 1 | Discover | pending | — | — |
17
17
  | 2 | Strategy | pending | — | — |
18
18
  | 3 | Identity | pending | — | — |
19
- | 4 | System | pending | — | — |
19
+ | 4 | Patterns | pending | — | — |
20
20
 
21
21
  ## Status Values
22
22
  <!-- pending | in-progress | complete | needs-revision | skipped -->
@@ -37,7 +37,7 @@ Each chunk follows the format in `references/chunk-format.md`. Below is the stru
37
37
  - **Component adaptations:** brand components that need project-specific variants
38
38
  - **Platform considerations:** platform-specific adjustments (mobile, desktop, etc.)
39
39
  - **Implementation target mapping:** design components → target primitives (shadcn, rn-reusables, existing, code)
40
- - Links to brand system components: `{BRAND_PATH}/system/components/{name}.md`
40
+ - Links to brand system components: `{BRAND_PATH}/patterns/components/{name}.md`
41
41
 
42
42
  ### install-manifest.md
43
43
  - Install commands for all needed components
@@ -7,7 +7,7 @@
7
7
 
8
8
  ---
9
9
 
10
- > This phase produces foundation chunks in `system/foundations/`, component chunks in `system/components/`, plus `principles.md`, `tokens.json`, and `INDEX.md`.
10
+ > This phase produces foundation chunks in `patterns/foundations/`, component chunks in `patterns/components/`, plus `principles.md`, `tokens.json`, and `INDEX.md`.
11
11
 
12
12
  ## Inputs
13
13
  - identity/color-system.md → foundations/color-system.md
@@ -20,7 +20,7 @@
20
20
 
21
21
  ## Chunk Mapping
22
22
 
23
- ### Foundations (`system/foundations/`)
23
+ ### Foundations (`patterns/foundations/`)
24
24
 
25
25
  | Chunk File | Content |
26
26
  |-----------|---------|
@@ -31,7 +31,7 @@
31
31
  | `foundations/elevation.md` | 5 shadow levels with use cases and values |
32
32
  | `foundations/border-radius.md` | Token scale (none, sm, md, lg, xl, full) |
33
33
 
34
- ### Components (`system/components/`)
34
+ ### Components (`patterns/components/`)
35
35
 
36
36
  Component output is library-aware:
37
37
 
@@ -37,4 +37,4 @@ Each chunk follows the format in `references/chunk-format.md`. Below is the stru
37
37
  - **Minor:** polish items, minor inconsistencies
38
38
  - Links to design chunks: `../design/screen-{NN}-{name}.md`
39
39
  - Links to actual codebase files: `{path/to/file}:{line}`
40
- - Links to brand system: `{BRAND_PATH}/system/components/{name}.md`
40
+ - Links to brand system: `{BRAND_PATH}/patterns/components/{name}.md`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "get-shit-pretty",
3
- "version": "0.5.0",
3
+ "version": "0.5.2",
4
4
  "description": "Design engineering system for AI coding agents. Brand identity + design projects, from strategy to code.",
5
5
  "bin": {
6
6
  "get-shit-pretty": "bin/install.js"
@@ -0,0 +1,71 @@
1
+ #!/usr/bin/env bash
2
+ # GSP Context Recovery — re-inject active project/brand state after context compaction
3
+ # Called by SessionStart hook (compact matcher) in gsp/hooks/hooks.json
4
+ # Output target: 15-25 lines max to minimize context consumption
5
+
6
+ DESIGN_DIR=".design"
7
+
8
+ # Silent exit if no .design/ directory
9
+ [[ -d "$DESIGN_DIR" ]] || exit 0
10
+
11
+ OUTPUT=""
12
+
13
+ # Extract phase names by status from a STATE.md phase table
14
+ # Table format: | # | Phase | Status | Started | Completed |
15
+ # Usage: extract_phases <file> <status>
16
+ extract_phases() {
17
+ awk -F'|' -v status="$2" '{
18
+ gsub(/^[ \t]+|[ \t]+$/, "", $4)
19
+ if ($4 == status) {
20
+ gsub(/^[ \t]+|[ \t]+$/, "", $3)
21
+ printf "%s, ", $3
22
+ }
23
+ }' "$1" 2>/dev/null | sed 's/, $//'
24
+ }
25
+
26
+ # Collect brand state
27
+ brand_count=0
28
+ for state in "$DESIGN_DIR"/branding/*/STATE.md; do
29
+ [[ -f "$state" ]] || continue
30
+ brand_dir=$(basename "$(dirname "$state")")
31
+ [[ "$brand_dir" == "_"* ]] && continue
32
+ brand_count=$((brand_count + 1))
33
+ [[ $brand_count -gt 2 ]] && continue
34
+ phase=$(grep -m1 '^\*\*Current Phase:\*\*' "$state" | sed 's/.*Current Phase:\*\*[[:space:]]*//')
35
+ pretty=$(grep -m1 '^\*\*Prettiness Level:\*\*' "$state" | sed 's/.*Prettiness Level:\*\*[[:space:]]*//')
36
+ completed=$(extract_phases "$state" "complete")
37
+ current=$(extract_phases "$state" "in-progress")
38
+ OUTPUT+="Brand: $brand_dir | Phase: $phase | $pretty"$'\n'
39
+ [[ -n "$completed" ]] && OUTPUT+=" completed: $completed"$'\n'
40
+ [[ -n "$current" ]] && OUTPUT+=" current: $current"$'\n'
41
+ done
42
+ [[ $brand_count -gt 2 ]] && OUTPUT+=" (+$((brand_count - 2)) more brands)"$'\n'
43
+
44
+ # Collect project state
45
+ proj_count=0
46
+ for state in "$DESIGN_DIR"/projects/*/STATE.md; do
47
+ [[ -f "$state" ]] || continue
48
+ proj_dir=$(basename "$(dirname "$state")")
49
+ proj_count=$((proj_count + 1))
50
+ [[ $proj_count -gt 2 ]] && continue
51
+ brand_ref=$(grep -m1 '^brand:' "$DESIGN_DIR/projects/$proj_dir/brand.ref" 2>/dev/null | sed 's/^brand:[[:space:]]*//')
52
+ phase=$(grep -m1 '^\*\*Current Phase:\*\*' "$state" | sed 's/.*Current Phase:\*\*[[:space:]]*//')
53
+ pretty=$(grep -m1 '^\*\*Prettiness Level:\*\*' "$state" | sed 's/.*Prettiness Level:\*\*[[:space:]]*//')
54
+ completed=$(extract_phases "$state" "complete")
55
+ current=$(extract_phases "$state" "in-progress")
56
+ brand_info=""
57
+ [[ -n "$brand_ref" ]] && brand_info=" | Brand: $brand_ref"
58
+ OUTPUT+="Project: $proj_dir$brand_info | Phase: $phase | $pretty"$'\n'
59
+ [[ -n "$completed" ]] && OUTPUT+=" completed: $completed"$'\n'
60
+ [[ -n "$current" ]] && OUTPUT+=" current: $current"$'\n'
61
+ done
62
+ [[ $proj_count -gt 2 ]] && OUTPUT+=" (+$((proj_count - 2)) more projects)"$'\n'
63
+
64
+ # Silent exit if nothing found
65
+ [[ -z "$OUTPUT" ]] && exit 0
66
+
67
+ echo "GSP Context Recovery"
68
+ echo "────────────────────"
69
+ printf "%s" "$OUTPUT"
70
+ echo "────────────────────"
71
+ echo "Resume: /gsp:start to pick up where you left off"
@@ -109,7 +109,11 @@ process.stdin.on('end', () => {
109
109
  // ── Update check ──
110
110
  let updateTag = '';
111
111
  try {
112
- const gspDir = path.join(homeDir, '.claude', 'get-shit-pretty');
112
+ const runtimeDir = path.join(homeDir, '.claude');
113
+ const legacyDir = path.join(runtimeDir, 'get-shit-pretty');
114
+ const gspDir = fs.existsSync(path.join(runtimeDir, 'VERSION')) ? runtimeDir
115
+ : fs.existsSync(path.join(legacyDir, 'VERSION')) ? legacyDir : null;
116
+ if (!gspDir) throw new Error('no VERSION');
113
117
  const versionFile = path.join(gspDir, 'VERSION');
114
118
  const cacheFile = path.join(gspDir, '.update-cache.json');
115
119