panopticon-cli 0.4.32 → 0.5.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/README.md +96 -210
- package/dist/{agents-BDFHF4T3.js → agents-E43Y3HNU.js} +10 -7
- package/dist/chunk-7SN4L4PH.js +150 -0
- package/dist/chunk-7SN4L4PH.js.map +1 -0
- package/dist/{chunk-2NIAOCIC.js → chunk-AAFQANKW.js} +358 -97
- package/dist/chunk-AAFQANKW.js.map +1 -0
- package/dist/chunk-AQXETQHW.js +113 -0
- package/dist/chunk-AQXETQHW.js.map +1 -0
- package/dist/chunk-B3PF6JPQ.js +212 -0
- package/dist/chunk-B3PF6JPQ.js.map +1 -0
- package/dist/chunk-CFCUOV3Q.js +669 -0
- package/dist/chunk-CFCUOV3Q.js.map +1 -0
- package/dist/chunk-CWELWPWQ.js +32 -0
- package/dist/chunk-CWELWPWQ.js.map +1 -0
- package/dist/chunk-DI7ABPNQ.js +352 -0
- package/dist/chunk-DI7ABPNQ.js.map +1 -0
- package/dist/{chunk-VU4FLXV5.js → chunk-FQ66DECN.js} +31 -4
- package/dist/chunk-FQ66DECN.js.map +1 -0
- package/dist/{chunk-VIWUCJ4V.js → chunk-FTCPTHIJ.js} +57 -432
- package/dist/chunk-FTCPTHIJ.js.map +1 -0
- package/dist/{review-status-GWQYY77L.js → chunk-GFP3PIPB.js} +14 -7
- package/dist/chunk-GFP3PIPB.js.map +1 -0
- package/dist/chunk-GR6ZZMCX.js +816 -0
- package/dist/chunk-GR6ZZMCX.js.map +1 -0
- package/dist/chunk-HJSM6E6U.js +1038 -0
- package/dist/chunk-HJSM6E6U.js.map +1 -0
- package/dist/{chunk-XP2DXWYP.js → chunk-HZT2AOPN.js} +164 -39
- package/dist/chunk-HZT2AOPN.js.map +1 -0
- package/dist/chunk-JQBV3Q2W.js +29 -0
- package/dist/chunk-JQBV3Q2W.js.map +1 -0
- package/dist/{chunk-BWGFN44T.js → chunk-JT4O4YVM.js} +28 -16
- package/dist/chunk-JT4O4YVM.js.map +1 -0
- package/dist/chunk-NTO3EDB3.js +600 -0
- package/dist/chunk-NTO3EDB3.js.map +1 -0
- package/dist/{chunk-JY7R7V4G.js → chunk-OMNXYPXC.js} +2 -2
- package/dist/chunk-OMNXYPXC.js.map +1 -0
- package/dist/chunk-PELXV435.js +215 -0
- package/dist/chunk-PELXV435.js.map +1 -0
- package/dist/chunk-PPRFKTVC.js +154 -0
- package/dist/chunk-PPRFKTVC.js.map +1 -0
- package/dist/chunk-WQG2TYCB.js +677 -0
- package/dist/chunk-WQG2TYCB.js.map +1 -0
- package/dist/{chunk-HCTJFIJJ.js → chunk-YLPSQAM2.js} +2 -2
- package/dist/{chunk-HCTJFIJJ.js.map → chunk-YLPSQAM2.js.map} +1 -1
- package/dist/{chunk-6HXKTOD7.js → chunk-ZTFNYOC7.js} +53 -38
- package/dist/chunk-ZTFNYOC7.js.map +1 -0
- package/dist/cli/index.js +5103 -3165
- package/dist/cli/index.js.map +1 -1
- package/dist/{config-BOAMSKTF.js → config-4CJNUE3O.js} +7 -3
- package/dist/dashboard/prompts/merge-agent.md +217 -0
- package/dist/dashboard/prompts/review-agent.md +409 -0
- package/dist/dashboard/prompts/sync-main.md +84 -0
- package/dist/dashboard/prompts/test-agent.md +283 -0
- package/dist/dashboard/prompts/work-agent.md +249 -0
- package/dist/dashboard/public/assets/index-BxpjweAL.css +32 -0
- package/dist/dashboard/public/assets/index-DQHkwvvJ.js +743 -0
- package/dist/dashboard/public/index.html +2 -2
- package/dist/dashboard/server.js +17619 -4044
- package/dist/{dns-L3L2BB27.js → dns-7BDJSD3E.js} +4 -2
- package/dist/{feedback-writer-AAKF5BTK.js → feedback-writer-LVZ5TFYZ.js} +8 -4
- package/dist/feedback-writer-LVZ5TFYZ.js.map +1 -0
- package/dist/hume-WMAUBBV2.js +13 -0
- package/dist/index.d.ts +162 -40
- package/dist/index.js +67 -23
- package/dist/index.js.map +1 -1
- package/dist/{projects-VXRUCMLM.js → projects-JEIVIYC6.js} +3 -3
- package/dist/rally-RKFSWC7E.js +10 -0
- package/dist/{remote-agents-Z3R2A5BN.js → remote-agents-TFSMW7GN.js} +2 -2
- package/dist/{remote-workspace-2G6V2KNP.js → remote-workspace-AHVHQEES.js} +8 -8
- package/dist/review-status-EPFG4XM7.js +19 -0
- package/dist/shadow-state-5MDP6YXH.js +30 -0
- package/dist/shadow-state-5MDP6YXH.js.map +1 -0
- package/dist/{specialist-context-N32QBNNQ.js → specialist-context-ZC6A4M3I.js} +8 -7
- package/dist/{specialist-context-N32QBNNQ.js.map → specialist-context-ZC6A4M3I.js.map} +1 -1
- package/dist/{specialist-logs-GF3YV4KL.js → specialist-logs-KLGJCEUL.js} +7 -6
- package/dist/specialist-logs-KLGJCEUL.js.map +1 -0
- package/dist/{specialists-JBIW6MP4.js → specialists-O4HWDJL5.js} +7 -6
- package/dist/specialists-O4HWDJL5.js.map +1 -0
- package/dist/tldr-daemon-T3THOUGT.js +21 -0
- package/dist/tldr-daemon-T3THOUGT.js.map +1 -0
- package/dist/traefik-QN7R5I6V.js +19 -0
- package/dist/traefik-QN7R5I6V.js.map +1 -0
- package/dist/tunnel-W2GZBLEV.js +13 -0
- package/dist/tunnel-W2GZBLEV.js.map +1 -0
- package/dist/workspace-manager-IE4JL2JP.js +22 -0
- package/dist/workspace-manager-IE4JL2JP.js.map +1 -0
- package/package.json +2 -2
- package/scripts/heartbeat-hook +37 -10
- package/scripts/patches/llm-tldr-tsx-support.py +109 -0
- package/scripts/pre-tool-hook +26 -15
- package/scripts/record-cost-event.js +177 -43
- package/scripts/record-cost-event.ts +87 -3
- package/scripts/statusline.sh +169 -0
- package/scripts/stop-hook +21 -11
- package/scripts/tldr-post-edit +72 -0
- package/scripts/tldr-read-enforcer +275 -0
- package/scripts/work-agent-stop-hook +137 -0
- package/skills/check-merged/SKILL.md +143 -0
- package/skills/crash-investigation/SKILL.md +301 -0
- package/skills/github-cli/SKILL.md +185 -0
- package/skills/myn-standards/SKILL.md +351 -0
- package/skills/pan-reopen/SKILL.md +65 -0
- package/skills/pan-sync-main/SKILL.md +87 -0
- package/skills/pan-tldr/SKILL.md +149 -0
- package/skills/react-best-practices/SKILL.md +125 -0
- package/skills/spec-readiness/REPORT-TEMPLATE.md +158 -0
- package/skills/spec-readiness/SCORING-REFERENCE.md +369 -0
- package/skills/spec-readiness/SKILL.md +400 -0
- package/skills/spec-readiness-setup/SKILL.md +361 -0
- package/skills/workspace-status/SKILL.md +56 -0
- package/skills/write-spec/SKILL.md +138 -0
- package/templates/traefik/dynamic/panopticon.yml.template +0 -5
- package/templates/traefik/traefik.yml +0 -8
- package/dist/chunk-2NIAOCIC.js.map +0 -1
- package/dist/chunk-3XAB4IXF.js +0 -51
- package/dist/chunk-3XAB4IXF.js.map +0 -1
- package/dist/chunk-6HXKTOD7.js.map +0 -1
- package/dist/chunk-BBCUK6N2.js +0 -241
- package/dist/chunk-BBCUK6N2.js.map +0 -1
- package/dist/chunk-BWGFN44T.js.map +0 -1
- package/dist/chunk-ELK6Q7QI.js +0 -545
- package/dist/chunk-ELK6Q7QI.js.map +0 -1
- package/dist/chunk-JY7R7V4G.js.map +0 -1
- package/dist/chunk-LYSBSZYV.js +0 -1523
- package/dist/chunk-LYSBSZYV.js.map +0 -1
- package/dist/chunk-VIWUCJ4V.js.map +0 -1
- package/dist/chunk-VU4FLXV5.js.map +0 -1
- package/dist/chunk-XP2DXWYP.js.map +0 -1
- package/dist/dashboard/public/assets/index-C7X6LP5Z.css +0 -32
- package/dist/dashboard/public/assets/index-ClYqpcAJ.js +0 -645
- package/dist/feedback-writer-AAKF5BTK.js.map +0 -1
- package/dist/review-status-GWQYY77L.js.map +0 -1
- package/dist/traefik-CUJM6K5Z.js +0 -12
- /package/dist/{agents-BDFHF4T3.js.map → agents-E43Y3HNU.js.map} +0 -0
- /package/dist/{config-BOAMSKTF.js.map → config-4CJNUE3O.js.map} +0 -0
- /package/dist/{dns-L3L2BB27.js.map → dns-7BDJSD3E.js.map} +0 -0
- /package/dist/{projects-VXRUCMLM.js.map → hume-WMAUBBV2.js.map} +0 -0
- /package/dist/{remote-agents-Z3R2A5BN.js.map → projects-JEIVIYC6.js.map} +0 -0
- /package/dist/{specialist-logs-GF3YV4KL.js.map → rally-RKFSWC7E.js.map} +0 -0
- /package/dist/{specialists-JBIW6MP4.js.map → remote-agents-TFSMW7GN.js.map} +0 -0
- /package/dist/{remote-workspace-2G6V2KNP.js.map → remote-workspace-AHVHQEES.js.map} +0 -0
- /package/dist/{traefik-CUJM6K5Z.js.map → review-status-EPFG4XM7.js.map} +0 -0
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: myn-standards
|
|
3
|
+
description: >
|
|
4
|
+
Mind Your Now coding standards, design system, and component patterns.
|
|
5
|
+
Auto-applied when writing or reviewing MYN code.
|
|
6
|
+
triggers:
|
|
7
|
+
- myn component
|
|
8
|
+
- mind your now
|
|
9
|
+
- myn styling
|
|
10
|
+
- myn design
|
|
11
|
+
- myn frontend
|
|
12
|
+
- myn ui
|
|
13
|
+
- notification toast
|
|
14
|
+
- task card
|
|
15
|
+
- briefing
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# Mind Your Now Design System & Coding Standards
|
|
19
|
+
|
|
20
|
+
## Brand Identity
|
|
21
|
+
|
|
22
|
+
### Brand Colors
|
|
23
|
+
|
|
24
|
+
| Name | Hex | Tailwind Token | Usage |
|
|
25
|
+
|------|-----|----------------|-------|
|
|
26
|
+
| All-Knowing Blu | `#00AEEF` | `brand-blue` | Primary brand, links, CTAs |
|
|
27
|
+
| Yours Truly Blu | `#80D7F7` | `brand-blue-light` | Hover states, light accents |
|
|
28
|
+
| Golden Hour Yellow | `#FFC60B` | `brand-yellow` | Accent, highlights, "now" in wordmark |
|
|
29
|
+
| Midnight Blue | `#0C4064` | `brand-dark` | Headings on light backgrounds |
|
|
30
|
+
|
|
31
|
+
### Brand Wordmark
|
|
32
|
+
|
|
33
|
+
```tsx
|
|
34
|
+
<h1>
|
|
35
|
+
<span className="text-blue-800">mind</span>
|
|
36
|
+
<span className="font-thin text-blue-200">your</span>
|
|
37
|
+
<span className="text-yellow-500">now</span>
|
|
38
|
+
</h1>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Logo
|
|
42
|
+
|
|
43
|
+
- Asset: `/images/logo-no-text.png` (sun-burst motif)
|
|
44
|
+
- Always paired with the wordmark on splash/auth screens
|
|
45
|
+
|
|
46
|
+
## Color System
|
|
47
|
+
|
|
48
|
+
### Semantic Colors
|
|
49
|
+
|
|
50
|
+
| Token | Light | Dark | Usage |
|
|
51
|
+
|-------|-------|------|-------|
|
|
52
|
+
| `semantic-success` | `#22C55E` | `#4ADE80` | Completed, positive |
|
|
53
|
+
| `semantic-warning` | `#F59E0B` | `#FBBF24` | Attention needed |
|
|
54
|
+
| `semantic-error` | `#EF4444` | `#F87171` | Errors, overdue |
|
|
55
|
+
| `semantic-info` | `#3B82F6` | `#60A5FA` | Informational |
|
|
56
|
+
|
|
57
|
+
### Priority Colors
|
|
58
|
+
|
|
59
|
+
| Priority | Hex | Token |
|
|
60
|
+
|----------|-----|-------|
|
|
61
|
+
| Critical | `#EF4444` | `priority-critical` |
|
|
62
|
+
| High | `#F97316` | `priority-high` |
|
|
63
|
+
| Medium | `#EAB308` | `priority-medium` |
|
|
64
|
+
| Low | `#22C55E` | `priority-low` |
|
|
65
|
+
| None | `#6B7280` | `priority-none` |
|
|
66
|
+
|
|
67
|
+
### MYN Task Type Colors (Methodology)
|
|
68
|
+
|
|
69
|
+
| Type | Hex | Token |
|
|
70
|
+
|------|-----|-------|
|
|
71
|
+
| Parking Lot | `#F04F23` | `taskType-parkinglot` |
|
|
72
|
+
| Over the Horizon | `#F9913B` | `taskType-overthehorizon` |
|
|
73
|
+
| Critical Now | `#0C803D` | `taskType-critical` |
|
|
74
|
+
| Opportunity Now | `#107CC4` | `taskType-opportunitynow` |
|
|
75
|
+
| Tomorrow | `#854EB1` | `taskType-tomorrow` |
|
|
76
|
+
|
|
77
|
+
### Shadcn/UI Semantic Tokens (CSS Variables)
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
--background Page background (white / slate-950)
|
|
81
|
+
--foreground Primary text (slate-950 / slate-50)
|
|
82
|
+
--card Card backgrounds (white / slate-900)
|
|
83
|
+
--muted Muted backgrounds (slate-100 / slate-800)
|
|
84
|
+
--muted-foreground Secondary text (slate-500 / slate-400)
|
|
85
|
+
--border Borders (slate-200 / slate-700)
|
|
86
|
+
--primary Primary actions (blue-600 / blue-500)
|
|
87
|
+
--destructive Destructive actions (red-600 / red-500)
|
|
88
|
+
--ring Focus rings (blue-500 / blue-400)
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### App Background
|
|
92
|
+
|
|
93
|
+
- Light: `#eff6ff` (blue-50)
|
|
94
|
+
- Dark: `#0f172a` (slate-900)
|
|
95
|
+
- Surfaces: `#1e293b` dark, `#334155` elevated dark
|
|
96
|
+
|
|
97
|
+
## Typography
|
|
98
|
+
|
|
99
|
+
### Font Stack
|
|
100
|
+
|
|
101
|
+
- **Primary**: Inter (all UI text)
|
|
102
|
+
- **Monospace**: SF Mono, Monaco, Cascadia Code
|
|
103
|
+
- **Accessibility**: Tiresias Infofont, OpenDyslexic3 (user-selectable)
|
|
104
|
+
- All legacy font aliases (Roboto, Lato, Montserrat, SF Pro) map to Inter
|
|
105
|
+
|
|
106
|
+
### Type Scale
|
|
107
|
+
|
|
108
|
+
| Token | Size | Weight | Letter Spacing | Usage |
|
|
109
|
+
|-------|------|--------|----------------|-------|
|
|
110
|
+
| `display` | 2.441rem (39px) | 700 | -0.02em | Hero headlines |
|
|
111
|
+
| `h1` | 1.953rem (31px) | 700 | -0.01em | Page titles |
|
|
112
|
+
| `h2` | 1.563rem (25px) | 600 | -0.01em | Section headers |
|
|
113
|
+
| `h3` | 1.25rem (20px) | 600 | -- | Card headers |
|
|
114
|
+
| `body-lg` | 1.125rem (18px) | 400 | -- | Large body text |
|
|
115
|
+
| `body` | 1rem (16px) | 400 | -- | Default body text |
|
|
116
|
+
| `body-sm` | 0.875rem (14px) | 400 | -- | Compact text, task titles |
|
|
117
|
+
| `caption` | 0.75rem (12px) | 400 | -- | Labels, hints |
|
|
118
|
+
| `overline` | 0.625rem (10px) | 600 | 0.1em | Category labels |
|
|
119
|
+
|
|
120
|
+
### Text Colors
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
text-foreground Primary text
|
|
124
|
+
text-muted-foreground Secondary text, labels, icons
|
|
125
|
+
text-primary Links, emphasis
|
|
126
|
+
text-destructive Errors
|
|
127
|
+
text-card-foreground Text on cards
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Spacing & Layout
|
|
131
|
+
|
|
132
|
+
### Spacing Scale
|
|
133
|
+
|
|
134
|
+
Standard Tailwind 4px base: `1`=4px, `2`=8px, `3`=12px, `4`=16px, `6`=24px, `8`=32px
|
|
135
|
+
|
|
136
|
+
### Common Patterns
|
|
137
|
+
|
|
138
|
+
```tsx
|
|
139
|
+
// Page container
|
|
140
|
+
<div className="max-w-[1320px] mx-auto pt-4 px-3 sm:px-4 lg:px-6">
|
|
141
|
+
|
|
142
|
+
// Two-column grid (sidebar visible at xl)
|
|
143
|
+
<div className="grid gap-7 xl:grid-cols-[minmax(0,820px)_420px]">
|
|
144
|
+
|
|
145
|
+
// Card padding
|
|
146
|
+
p-3 // Compact
|
|
147
|
+
p-4 // Standard
|
|
148
|
+
p-5 // Spacious
|
|
149
|
+
|
|
150
|
+
// Section gaps
|
|
151
|
+
mt-3 // Between compact sections
|
|
152
|
+
mt-4 // Between standard sections
|
|
153
|
+
gap-2 // Icon + text
|
|
154
|
+
gap-3 // Form elements
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### Breakpoints
|
|
158
|
+
|
|
159
|
+
| Token | Width | Usage |
|
|
160
|
+
|-------|-------|-------|
|
|
161
|
+
| `xxs` | 350px | Small phones |
|
|
162
|
+
| `sm` | 640px | Small tablets |
|
|
163
|
+
| `md` | 768px | Tablets |
|
|
164
|
+
| `lg` | 1024px | Small desktops |
|
|
165
|
+
| `xl` | 1280px | Desktop (sidebar visible) |
|
|
166
|
+
|
|
167
|
+
## Border & Shadow
|
|
168
|
+
|
|
169
|
+
### Border Radius
|
|
170
|
+
|
|
171
|
+
```
|
|
172
|
+
rounded-md (6px) Buttons, inputs, small cards
|
|
173
|
+
rounded-lg (8px) Cards, panels
|
|
174
|
+
rounded-xl (12px) Large cards, modals
|
|
175
|
+
rounded-full Pills, avatars
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Shadows
|
|
179
|
+
|
|
180
|
+
```
|
|
181
|
+
shadow-sm Sidebar cards, secondary
|
|
182
|
+
shadow-md Main cards, primary content
|
|
183
|
+
shadow-lg Dropdowns, modals
|
|
184
|
+
shadow-xl Popovers, overlays
|
|
185
|
+
shadow-2xl Dialogs
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### Opacity Modifiers
|
|
189
|
+
|
|
190
|
+
```tsx
|
|
191
|
+
bg-muted/40 // Very subtle containers
|
|
192
|
+
border-border/50 // Container borders (default)
|
|
193
|
+
border-border/60 // Button/input borders
|
|
194
|
+
ring-ring/40 // Focus state ring
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
## Component Patterns
|
|
198
|
+
|
|
199
|
+
### Buttons
|
|
200
|
+
|
|
201
|
+
| Size | Height | Padding | Icon | Usage |
|
|
202
|
+
|------|--------|---------|------|-------|
|
|
203
|
+
| xs | `h-7` | `px-2` | `h-3.5 w-3.5` | Inline actions |
|
|
204
|
+
| sm | `h-8` | `px-3` | `h-4 w-4` | Secondary actions |
|
|
205
|
+
| md | `h-9` | `px-3` | `h-4 w-4` | Icon buttons |
|
|
206
|
+
| lg | `h-10` | `px-4` | `h-5 w-5` | Primary actions |
|
|
207
|
+
|
|
208
|
+
```tsx
|
|
209
|
+
// Primary
|
|
210
|
+
"h-10 px-4 rounded-md bg-primary text-primary-foreground hover:opacity-90"
|
|
211
|
+
|
|
212
|
+
// Secondary
|
|
213
|
+
"h-10 px-4 rounded-md border border-border/60 bg-card hover:bg-muted"
|
|
214
|
+
|
|
215
|
+
// Ghost
|
|
216
|
+
"h-9 px-3 rounded-md hover:bg-muted"
|
|
217
|
+
|
|
218
|
+
// Icon
|
|
219
|
+
"h-9 w-9 rounded-md hover:bg-muted text-muted-foreground"
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
### Cards
|
|
223
|
+
|
|
224
|
+
```tsx
|
|
225
|
+
// Main card (primary, higher elevation)
|
|
226
|
+
<Card className="bg-card text-card-foreground rounded-lg shadow-md">
|
|
227
|
+
|
|
228
|
+
// Sidebar card (secondary, lower)
|
|
229
|
+
<Card className="bg-card text-card-foreground rounded-lg shadow-sm">
|
|
230
|
+
|
|
231
|
+
// Subtle container
|
|
232
|
+
<div className="rounded-md border border-border/50 bg-muted/40 px-3 py-2">
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### Frosted Glass (Auth/Splash Screens)
|
|
236
|
+
|
|
237
|
+
```tsx
|
|
238
|
+
// Blue gradient background
|
|
239
|
+
style={{ background: 'linear-gradient(to bottom, rgb(56, 189, 248), rgb(37, 99, 235))' }}
|
|
240
|
+
|
|
241
|
+
// Frosted glass card
|
|
242
|
+
<Card className="bg-white/90 backdrop-blur-sm border-blue-200 hover:shadow-lg transition-all duration-300">
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
### Toast Notifications
|
|
246
|
+
|
|
247
|
+
Current implementation uses Radix UI `@radix-ui/react-toast` with CVA variants:
|
|
248
|
+
|
|
249
|
+
```tsx
|
|
250
|
+
// Variants: default, destructive, success, error, warning, info
|
|
251
|
+
// Base style:
|
|
252
|
+
"rounded-lg border-2 p-5 pr-7 shadow-xl backdrop-blur-sm"
|
|
253
|
+
|
|
254
|
+
// Each variant has light/dark mode colors:
|
|
255
|
+
// success: border-green-300 bg-green-50/95 text-green-900
|
|
256
|
+
// error: border-red-300 bg-red-50/95 text-red-900
|
|
257
|
+
// warning: border-amber-300 bg-amber-50/95 text-amber-900
|
|
258
|
+
// info: border-blue-300 bg-blue-50/95 text-blue-900
|
|
259
|
+
|
|
260
|
+
// Viewport: bottom-right on desktop, top on mobile
|
|
261
|
+
// Max width: 420px
|
|
262
|
+
// Animations: slide-in-from-top (mobile), slide-in-from-bottom (desktop)
|
|
263
|
+
// Hover: shadow-2xl + translate-y-0.5 lift
|
|
264
|
+
// Icons: Lucide (CheckCircle2, AlertCircle, AlertTriangle, Info) in rounded-full bg
|
|
265
|
+
// Close: absolute top-right, visible on hover
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
### Form Controls
|
|
269
|
+
|
|
270
|
+
```tsx
|
|
271
|
+
// Input
|
|
272
|
+
"h-10 rounded-md border border-border/60 bg-card px-3 text-sm focus:ring-2 focus:ring-ring/40"
|
|
273
|
+
|
|
274
|
+
// Textarea
|
|
275
|
+
"rounded-md border border-border/60 bg-card p-3 text-sm min-h-[80px] focus:ring-2 focus:ring-ring/40"
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
## Animation System
|
|
279
|
+
|
|
280
|
+
### Tailwind Keyframes
|
|
281
|
+
|
|
282
|
+
| Name | Duration | Usage |
|
|
283
|
+
|------|----------|-------|
|
|
284
|
+
| `wiggle` | 1s infinite | Playful attention |
|
|
285
|
+
| `fade-in` | 0.5s ease-out | Element entrance (translateY 10px) |
|
|
286
|
+
| `spin-slow` | 3s linear infinite | Loading states |
|
|
287
|
+
| `pulse-subtle` | 2s infinite | Gentle pulse (opacity 1→0.9) |
|
|
288
|
+
| `shimmer` | 2s linear infinite | Loading skeleton |
|
|
289
|
+
| `bounce-once` | 1s ease | Single bounce |
|
|
290
|
+
|
|
291
|
+
### Framer Motion (Auth/Splash)
|
|
292
|
+
|
|
293
|
+
```tsx
|
|
294
|
+
// Container: stagger children by 0.1s
|
|
295
|
+
const containerVariants = {
|
|
296
|
+
hidden: { opacity: 0 },
|
|
297
|
+
visible: { opacity: 1, transition: { staggerChildren: 0.1 } },
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
// Items: spring up from 20px below
|
|
301
|
+
const itemVariants = {
|
|
302
|
+
hidden: { y: 20, opacity: 0 },
|
|
303
|
+
visible: { y: 0, opacity: 1, transition: { type: 'spring', stiffness: 50 } },
|
|
304
|
+
}
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
### Task Completion
|
|
308
|
+
|
|
309
|
+
- Wavy green SVG strikethrough line + text fade
|
|
310
|
+
- 2s animation duration
|
|
311
|
+
- Do NOT modify sort logic in `sortTasksAndEvents.js`
|
|
312
|
+
|
|
313
|
+
## Design Principles
|
|
314
|
+
|
|
315
|
+
1. **Neutral Over Saturated** -- Use muted backgrounds, subtle borders. No saturated gradients for secondary elements.
|
|
316
|
+
2. **Elevation Hierarchy** -- Primary content gets `shadow-md`, secondary gets `shadow-sm`.
|
|
317
|
+
3. **Progressive Disclosure** -- Hide secondary actions until hover/focus.
|
|
318
|
+
4. **Density Over Chrome** -- Tight padding, compact buttons, reduce visual noise.
|
|
319
|
+
|
|
320
|
+
## Tech Stack
|
|
321
|
+
|
|
322
|
+
- **Framework**: React 19, Vite 7, TypeScript
|
|
323
|
+
- **State**: Jotai (client) + TanStack Query (server)
|
|
324
|
+
- **UI**: shadcn/ui (new-york style) + Material-UI (legacy, migrating away)
|
|
325
|
+
- **Styling**: Tailwind CSS with custom design tokens
|
|
326
|
+
- **Icons**: Lucide (primary), FontAwesome (legacy, GettingStarted only)
|
|
327
|
+
- **Animation**: Framer Motion (auth flows), Tailwind keyframes (in-app)
|
|
328
|
+
- **Mobile**: Capacitor for iOS/Android
|
|
329
|
+
- **Dark Mode**: `class` strategy via Tailwind `darkMode: 'class'`
|
|
330
|
+
|
|
331
|
+
## File Structure
|
|
332
|
+
|
|
333
|
+
```
|
|
334
|
+
src/
|
|
335
|
+
styles/
|
|
336
|
+
design-tokens.css CSS custom properties (brand, semantic, priority, task type)
|
|
337
|
+
notification-animations.css Toast animation keyframes
|
|
338
|
+
globals.css shadcn/ui CSS variables
|
|
339
|
+
components/
|
|
340
|
+
ui/ shadcn/ui base components (toast, card, button, etc.)
|
|
341
|
+
auth/ Auth flows (GettingStarted, EmailForm)
|
|
342
|
+
notifications/ NotificationItem, notification panels
|
|
343
|
+
lib/
|
|
344
|
+
utils.ts cn() helper (clsx + tailwind-merge)
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
## Key Files
|
|
348
|
+
|
|
349
|
+
- `tailwind.config.js` -- All design tokens, type scale, colors, animations
|
|
350
|
+
- `src/styles/design-tokens.css` -- CSS custom properties with dark mode overrides
|
|
351
|
+
- `docs/technical/frontend/UI-DESIGN-SYSTEM.md` -- Full design system documentation
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pan-reopen
|
|
3
|
+
description: Reopen a completed issue for re-work. Resets specialist states, removes from queues, and prepares workspace for a new implementation cycle.
|
|
4
|
+
triggers:
|
|
5
|
+
- reopen issue
|
|
6
|
+
- reopen PAN-
|
|
7
|
+
- issue needs re-work
|
|
8
|
+
- re-open this issue
|
|
9
|
+
- reset specialist status
|
|
10
|
+
- reopen for rework
|
|
11
|
+
- issue was closed but needs work
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Reopen Issue for Re-Work
|
|
15
|
+
|
|
16
|
+
Use this skill when an issue needs to be re-worked after being marked done, when review feedback requires significant new work, or when a merged fix turns out to be incomplete.
|
|
17
|
+
|
|
18
|
+
## What Reopen Does
|
|
19
|
+
|
|
20
|
+
1. **Moves tracker status** to "In Progress" (not Backlog — agent resumes with existing plan)
|
|
21
|
+
2. **Resets specialist states** — review/test/merge status → pending
|
|
22
|
+
3. **Removes queue items** — clears any stale entries from specialist queues
|
|
23
|
+
4. **Updates STATE.md** — appends a "Reopened" section with context
|
|
24
|
+
5. **Fetches tracker comments** — injects latest feedback into STATE.md
|
|
25
|
+
|
|
26
|
+
## When to Use
|
|
27
|
+
|
|
28
|
+
- Issue was marked Done but follow-up work is needed
|
|
29
|
+
- Review passed but post-merge testing found regressions
|
|
30
|
+
- User requested changes after review
|
|
31
|
+
- Agent fast-pathed to done on restart (STATE.md said "complete")
|
|
32
|
+
|
|
33
|
+
## How to Reopen
|
|
34
|
+
|
|
35
|
+
### Via CLI (recommended for agents/supervisors)
|
|
36
|
+
```bash
|
|
37
|
+
pan work reopen PAN-123
|
|
38
|
+
# With explicit reason:
|
|
39
|
+
pan work reopen PAN-123 --reason "Post-merge regression in auth flow"
|
|
40
|
+
# Skip confirmation prompt:
|
|
41
|
+
pan work reopen PAN-123 --force
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Via Dashboard API
|
|
45
|
+
```bash
|
|
46
|
+
curl -X POST http://localhost:3011/api/issues/PAN-123/reopen \
|
|
47
|
+
-H "Content-Type: application/json" \
|
|
48
|
+
-d '{"reason": "Post-merge regression found"}'
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Via Dashboard UI
|
|
52
|
+
Click the **Reopen** button in the WorkspacePanel (visible when review/test has passed or issue is merged).
|
|
53
|
+
|
|
54
|
+
## After Reopening
|
|
55
|
+
|
|
56
|
+
1. The issue is now "In Progress" in the tracker
|
|
57
|
+
2. Specialist states are all `pending`
|
|
58
|
+
3. STATE.md has a new "Reopened" section with context and tracker comments
|
|
59
|
+
4. Start the agent normally: `pan work PAN-123`
|
|
60
|
+
|
|
61
|
+
The agent will read STATE.md, see the "Reopened" section, and resume work based on the tracker context rather than fast-pathing to done.
|
|
62
|
+
|
|
63
|
+
## Do NOT Use `pan work done` Until Re-Work Is Complete
|
|
64
|
+
|
|
65
|
+
After reopening, the agent must complete the requested changes, pass tests, and go through review again before signaling `pan work done`.
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pan-sync-main
|
|
3
|
+
description: Sync latest main into a workspace's feature branch via git merge. Use when a hotfix has been merged to main and active workspaces need to pick up the changes.
|
|
4
|
+
triggers:
|
|
5
|
+
- sync with main
|
|
6
|
+
- sync main into workspace
|
|
7
|
+
- pull in hotfix
|
|
8
|
+
- merge main into branch
|
|
9
|
+
- pan sync-main
|
|
10
|
+
- get latest changes from main
|
|
11
|
+
allowed-tools:
|
|
12
|
+
- Bash
|
|
13
|
+
- Read
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Sync with Main
|
|
17
|
+
|
|
18
|
+
Merges the latest `main` branch into a workspace's feature branch. Uses `git merge` (not rebase) to avoid rewriting history, and delegates conflict resolution to the merge-agent specialist.
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# CLI command
|
|
24
|
+
pan work sync-main PAN-XXX
|
|
25
|
+
|
|
26
|
+
# Or via the dashboard API
|
|
27
|
+
curl -X POST http://localhost:3011/api/workspaces/PAN-XXX/sync-main
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## What It Does
|
|
31
|
+
|
|
32
|
+
1. Checks for uncommitted changes (blocks if any — must commit or stash first)
|
|
33
|
+
2. Cleans up any stale git locks
|
|
34
|
+
3. Runs `git fetch origin main`
|
|
35
|
+
4. Runs `git merge origin/main`
|
|
36
|
+
5. If clean merge: reports commit count and changed files
|
|
37
|
+
6. If conflicts: wakes the merge-agent specialist to resolve them
|
|
38
|
+
7. After conflict resolution: scans for leftover markers, then reports result
|
|
39
|
+
|
|
40
|
+
## Outcomes
|
|
41
|
+
|
|
42
|
+
| Result | Meaning |
|
|
43
|
+
|--------|---------|
|
|
44
|
+
| Already up to date | Main has no new commits since last sync |
|
|
45
|
+
| Success (N commits) | Clean merge or agent-resolved conflicts |
|
|
46
|
+
| Uncommitted changes | Commit or stash workspace changes first |
|
|
47
|
+
| Conflict (unresolvable) | Agent could not resolve — merge aborted, workspace unchanged |
|
|
48
|
+
|
|
49
|
+
## Design Decisions
|
|
50
|
+
|
|
51
|
+
- **Merge, not rebase** — Rebase rewrites SHAs and requires force-push. Merge commits serve as audit markers.
|
|
52
|
+
- **No tests/builds** — Feature branch is WIP. Running tests after sync would fail on pre-existing issues.
|
|
53
|
+
- **No push to remote** — This is a local workspace operation only.
|
|
54
|
+
- **All-or-nothing for polyrepo** — If any repo fails, all are aborted (not implemented yet; sync is per-workspace).
|
|
55
|
+
|
|
56
|
+
## Examples
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# Sync PAN-123 workspace with latest main
|
|
60
|
+
pan work sync-main PAN-123
|
|
61
|
+
|
|
62
|
+
# Output on success:
|
|
63
|
+
# ✓ Synced 3 commit(s) from main
|
|
64
|
+
# Commits merged: 3
|
|
65
|
+
# Changed files (5):
|
|
66
|
+
# src/lib/auth.ts
|
|
67
|
+
# src/lib/config.ts
|
|
68
|
+
# ...
|
|
69
|
+
|
|
70
|
+
# Output when already current:
|
|
71
|
+
# ✓ PAN-123 is already up to date with main
|
|
72
|
+
|
|
73
|
+
# Output on uncommitted changes (blocks):
|
|
74
|
+
# ✗ Sync failed: Workspace has uncommitted changes. Commit or stash them before syncing with main.
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Dashboard
|
|
78
|
+
|
|
79
|
+
The "Sync with Main" button appears in the workspace detail panel:
|
|
80
|
+
- In the **Git Status** section as a small "Sync" button next to the branch name (disabled if uncommitted changes)
|
|
81
|
+
- In the **Actions** section as a full "Sync with Main" button
|
|
82
|
+
|
|
83
|
+
## Related Commands
|
|
84
|
+
|
|
85
|
+
- `pan work approve <id>` — Review and merge to main
|
|
86
|
+
- `pan work request-review <id>` — Trigger review pipeline
|
|
87
|
+
- `pan work tell <id> "<message>"` — Send message to agent
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pan-tldr
|
|
3
|
+
description: TLDR code analysis — token-efficient codebase understanding. Use before reading large files.
|
|
4
|
+
triggers:
|
|
5
|
+
- tldr
|
|
6
|
+
- code analysis
|
|
7
|
+
- understand codebase
|
|
8
|
+
- explore code
|
|
9
|
+
- what does this file do
|
|
10
|
+
allowed-tools:
|
|
11
|
+
- Bash
|
|
12
|
+
- Read
|
|
13
|
+
- Grep
|
|
14
|
+
- Glob
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# TLDR Code Analysis
|
|
18
|
+
|
|
19
|
+
## What It Is
|
|
20
|
+
|
|
21
|
+
TLDR is a 5-layer code analysis tool that produces structured summaries using 500-1,200 tokens per file instead of 10-25k for raw reads. It extends how much work you can accomplish per session by 10-20x.
|
|
22
|
+
|
|
23
|
+
## When to Use TLDR
|
|
24
|
+
|
|
25
|
+
**Always use TLDR first when:**
|
|
26
|
+
- Exploring unfamiliar code (use `tldr context` or `tldr structure`)
|
|
27
|
+
- Understanding function relationships (use `tldr calls` or `tldr impact`)
|
|
28
|
+
- Searching code by description (use `tldr semantic`)
|
|
29
|
+
- Planning changes across multiple files
|
|
30
|
+
|
|
31
|
+
**Read the full file when:**
|
|
32
|
+
- You need exact line numbers for editing
|
|
33
|
+
- The file is small (< 3KB)
|
|
34
|
+
- You need config files, docs, or non-code files
|
|
35
|
+
- TLDR context wasn't sufficient for the specific section
|
|
36
|
+
|
|
37
|
+
## Decision Tree
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
Need to understand a file?
|
|
41
|
+
├── Small file (< 3KB) → Read directly
|
|
42
|
+
├── Need exact content for editing → Read with offset/limit
|
|
43
|
+
└── Understanding structure/relationships → Use TLDR first
|
|
44
|
+
├── "What does this file export?" → tldr context <file>
|
|
45
|
+
├── "What's in this directory?" → tldr structure <dir>
|
|
46
|
+
├── "What calls this function?" → tldr calls <func> <file>
|
|
47
|
+
├── "What does this function call?" → tldr impact <func> <file>
|
|
48
|
+
├── "Find code that handles X" → tldr semantic "X"
|
|
49
|
+
└── "Show me the architecture" → tldr arch <dir>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Available Commands
|
|
53
|
+
|
|
54
|
+
All commands run from the workspace root. The binary is at `.venv/bin/tldr`.
|
|
55
|
+
|
|
56
|
+
### Exploration
|
|
57
|
+
|
|
58
|
+
| Command | Purpose | Tokens |
|
|
59
|
+
|---------|---------|--------|
|
|
60
|
+
| `tldr context <file>` | File structure, exports, imports, key functions | ~800 |
|
|
61
|
+
| `tldr structure <dir>` | Directory layout and relationships | ~500 |
|
|
62
|
+
| `tldr tree <dir>` | File tree with language detection | ~200 |
|
|
63
|
+
| `tldr arch <dir>` | Architectural overview | ~600 |
|
|
64
|
+
|
|
65
|
+
### Relationships
|
|
66
|
+
|
|
67
|
+
| Command | Purpose | Tokens |
|
|
68
|
+
|---------|---------|--------|
|
|
69
|
+
| `tldr calls <file>` | What calls functions in this file (callers) | ~400 |
|
|
70
|
+
| `tldr impact <func> <file>` | What this function calls (callees) | ~400 |
|
|
71
|
+
| `tldr imports <file>` | What this file imports | ~200 |
|
|
72
|
+
| `tldr importers <file>` | What files import this one | ~200 |
|
|
73
|
+
|
|
74
|
+
### Analysis
|
|
75
|
+
|
|
76
|
+
| Command | Purpose | Tokens |
|
|
77
|
+
|---------|---------|--------|
|
|
78
|
+
| `tldr cfg <func> <file>` | Control flow graph | ~300 |
|
|
79
|
+
| `tldr dfg <func> <file>` | Data flow graph | ~300 |
|
|
80
|
+
| `tldr slice <func> <file>` | Program slice (dependency chain) | ~400 |
|
|
81
|
+
| `tldr dead <dir>` | Dead code detection | ~500 |
|
|
82
|
+
| `tldr change-impact <file>` | Files affected by changes to this file | ~300 |
|
|
83
|
+
| `tldr diagnostics <file>` | Type errors and lint issues | ~200 |
|
|
84
|
+
|
|
85
|
+
### Search
|
|
86
|
+
|
|
87
|
+
| Command | Purpose | Tokens |
|
|
88
|
+
|---------|---------|--------|
|
|
89
|
+
| `tldr search <pattern> <dir>` | Structural code search (AST-aware) | ~400 |
|
|
90
|
+
| `tldr semantic "query"` | Natural language code search (embedding-based) | ~500 |
|
|
91
|
+
| `tldr extract <symbol> <file>` | Extract specific function/class definition | ~300 |
|
|
92
|
+
|
|
93
|
+
## MCP Tools (if configured)
|
|
94
|
+
|
|
95
|
+
When TLDR is set up as an MCP server, Claude Code agents get these tools natively:
|
|
96
|
+
- `tldr_context <file>` — File structure overview
|
|
97
|
+
- `tldr_structure <directory>` — Directory layout
|
|
98
|
+
- `tldr_calls <function> <file>` — Call graph (callers)
|
|
99
|
+
- `tldr_impact <function> <file>` — Impact analysis (callees)
|
|
100
|
+
- `tldr_semantic <query>` — Natural language search
|
|
101
|
+
|
|
102
|
+
## Hook Integration
|
|
103
|
+
|
|
104
|
+
TLDR hooks run automatically:
|
|
105
|
+
|
|
106
|
+
- **Read enforcer** (PreToolUse): Intercepts reads on large code files (> 3KB) and returns TLDR summaries instead. To read the full file, use `Read` with `offset` and `limit` parameters.
|
|
107
|
+
- **Post-edit notify** (PostToolUse): Tracks edited files and triggers background re-warm after 10 edits to keep the index fresh.
|
|
108
|
+
|
|
109
|
+
## Index Management
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
# Check index status
|
|
113
|
+
pan tldr status
|
|
114
|
+
|
|
115
|
+
# Manually warm/rebuild the index
|
|
116
|
+
pan tldr warm
|
|
117
|
+
|
|
118
|
+
# Start/stop the daemon
|
|
119
|
+
pan tldr start
|
|
120
|
+
pan tldr stop
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
The index is built automatically:
|
|
124
|
+
- On workspace creation (background warm after daemon start)
|
|
125
|
+
- After merges to main (merge-agent triggers re-warm)
|
|
126
|
+
- After 10 code file edits (post-edit hook triggers re-warm)
|
|
127
|
+
- On `pan up` (main daemon starts)
|
|
128
|
+
|
|
129
|
+
## Token Savings Example
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
Without TLDR:
|
|
133
|
+
20 files x 15,000 tokens = 300,000 tokens (exhausts context)
|
|
134
|
+
|
|
135
|
+
With TLDR:
|
|
136
|
+
20 files x 800 tokens = 16,000 tokens (94% savings)
|
|
137
|
+
+ 3 full reads for editing = 45,000 tokens
|
|
138
|
+
Total: 61,000 tokens — can do 5x more work per session
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## Troubleshooting
|
|
142
|
+
|
|
143
|
+
| Symptom | Fix |
|
|
144
|
+
|---------|-----|
|
|
145
|
+
| `tldr: command not found` | Run from workspace root: `.venv/bin/tldr` |
|
|
146
|
+
| No `.venv` directory | `python3 -m venv .venv && .venv/bin/pip install llm-tldr` |
|
|
147
|
+
| Stale index | `pan tldr warm` or `.venv/bin/tldr warm .` |
|
|
148
|
+
| Empty results | Check `.tldrignore` isn't excluding your files |
|
|
149
|
+
| Daemon not running | `pan tldr start` or it auto-starts with `pan up` |
|