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.
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +1 -1
- package/bin/install.js +38 -19
- package/gsp/agents/gsp-accessibility-auditor.md +1 -4
- package/gsp/agents/gsp-ascii-artist.md +1 -1
- package/gsp/agents/gsp-brand-auditor.md +0 -2
- package/gsp/agents/gsp-brand-strategist.md +0 -2
- package/gsp/agents/gsp-brand-syncer.md +125 -0
- package/gsp/agents/gsp-builder.md +11 -14
- package/gsp/agents/gsp-campaign-director.md +0 -20
- package/gsp/agents/gsp-critic.md +15 -18
- package/gsp/agents/gsp-designer.md +6 -6
- package/gsp/agents/gsp-identity-designer.md +0 -4
- package/gsp/agents/{gsp-system-architect.md → gsp-pattern-architect.md} +5 -67
- package/gsp/agents/gsp-project-researcher.md +0 -21
- package/gsp/agents/gsp-researcher.md +0 -2
- package/gsp/agents/gsp-reviewer.md +4 -14
- package/gsp/agents/gsp-scoper.md +1 -22
- package/gsp/hooks/hooks.json +11 -0
- package/gsp/prompts/01-design-system-architect.md +0 -46
- package/gsp/prompts/02-brand-identity-creator.md +1 -14
- package/gsp/prompts/03-ui-ux-pattern-master.md +1 -21
- package/gsp/prompts/04-marketing-asset-factory.md +1 -14
- package/gsp/prompts/05-implementation-spec-expert.md +0 -27
- package/gsp/prompts/06-design-critique-partner.md +1 -17
- package/gsp/prompts/07-design-trend-synthesizer.md +2 -29
- package/gsp/prompts/08-accessibility-auditor.md +4 -19
- package/gsp/prompts/09-design-to-code-translator.md +21 -20
- package/gsp/prompts/10-project-scoper.md +2 -36
- package/gsp/prompts/11-deliverable-reviewer.md +1 -50
- package/gsp/prompts/12-project-researcher.md +0 -39
- package/gsp/references/anti-patterns.md +173 -0
- package/gsp/references/block-patterns.md +135 -0
- package/gsp/references/chunk-format.md +31 -0
- package/gsp/references/phase-transitions.md +78 -33
- package/gsp/references/style-preset-schema.md +63 -0
- package/gsp/references/visual-effects.md +475 -0
- package/gsp/references/visual-taste.md +120 -0
- package/gsp/skills/gsp-accessibility/SKILL.md +1 -1
- package/gsp/skills/gsp-brand-audit/SKILL.md +1 -3
- package/gsp/skills/gsp-brand-identity/SKILL.md +1 -4
- package/gsp/skills/gsp-brand-patterns/SKILL.md +30 -50
- package/gsp/skills/gsp-brand-research/SKILL.md +7 -4
- package/gsp/skills/gsp-brand-strategy/SKILL.md +1 -4
- package/gsp/skills/gsp-brand-sync/SKILL.md +101 -0
- package/gsp/skills/gsp-design-system/SKILL.md +1 -1
- package/gsp/skills/gsp-doctor/SKILL.md +7 -7
- package/gsp/skills/gsp-help/SKILL.md +2 -1
- package/gsp/skills/gsp-launch/SKILL.md +2 -3
- package/gsp/skills/gsp-project-brief/SKILL.md +7 -22
- package/gsp/skills/gsp-project-build/SKILL.md +108 -26
- package/gsp/skills/gsp-project-critique/SKILL.md +5 -33
- package/gsp/skills/gsp-project-design/SKILL.md +25 -26
- package/gsp/skills/gsp-project-research/SKILL.md +8 -17
- package/gsp/skills/gsp-project-review/SKILL.md +6 -37
- package/gsp/skills/gsp-start/SKILL.md +29 -12
- package/gsp/skills/gsp-style/SKILL.md +20 -223
- package/gsp/skills/gsp-typescale/SKILL.md +23 -319
- package/gsp/skills/gsp-update/SKILL.md +18 -10
- package/gsp/templates/branding/brief.md +13 -1
- package/gsp/templates/branding/roadmap.md +2 -2
- package/gsp/templates/branding/state.md +1 -1
- package/gsp/templates/phases/brief.md +1 -1
- package/gsp/templates/phases/{system.md → patterns.md} +3 -3
- package/gsp/templates/phases/review.md +1 -1
- package/package.json +1 -1
- package/scripts/gsp-context-recovery.sh +71 -0
- 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
|
-
|
|
17
|
-
|
|
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/
|
|
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
|
|
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
|
|
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
|
-
- **
|
|
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:** `
|
|
42
|
-
**Goal:** Build design system, generate brand
|
|
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 |
|
|
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}/
|
|
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 `
|
|
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 (`
|
|
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 (`
|
|
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}/
|
|
40
|
+
- Links to brand system: `{BRAND_PATH}/patterns/components/{name}.md`
|
package/package.json
CHANGED
|
@@ -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
|
|
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
|
|