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.
Files changed (142) hide show
  1. package/README.md +96 -210
  2. package/dist/{agents-BDFHF4T3.js → agents-E43Y3HNU.js} +10 -7
  3. package/dist/chunk-7SN4L4PH.js +150 -0
  4. package/dist/chunk-7SN4L4PH.js.map +1 -0
  5. package/dist/{chunk-2NIAOCIC.js → chunk-AAFQANKW.js} +358 -97
  6. package/dist/chunk-AAFQANKW.js.map +1 -0
  7. package/dist/chunk-AQXETQHW.js +113 -0
  8. package/dist/chunk-AQXETQHW.js.map +1 -0
  9. package/dist/chunk-B3PF6JPQ.js +212 -0
  10. package/dist/chunk-B3PF6JPQ.js.map +1 -0
  11. package/dist/chunk-CFCUOV3Q.js +669 -0
  12. package/dist/chunk-CFCUOV3Q.js.map +1 -0
  13. package/dist/chunk-CWELWPWQ.js +32 -0
  14. package/dist/chunk-CWELWPWQ.js.map +1 -0
  15. package/dist/chunk-DI7ABPNQ.js +352 -0
  16. package/dist/chunk-DI7ABPNQ.js.map +1 -0
  17. package/dist/{chunk-VU4FLXV5.js → chunk-FQ66DECN.js} +31 -4
  18. package/dist/chunk-FQ66DECN.js.map +1 -0
  19. package/dist/{chunk-VIWUCJ4V.js → chunk-FTCPTHIJ.js} +57 -432
  20. package/dist/chunk-FTCPTHIJ.js.map +1 -0
  21. package/dist/{review-status-GWQYY77L.js → chunk-GFP3PIPB.js} +14 -7
  22. package/dist/chunk-GFP3PIPB.js.map +1 -0
  23. package/dist/chunk-GR6ZZMCX.js +816 -0
  24. package/dist/chunk-GR6ZZMCX.js.map +1 -0
  25. package/dist/chunk-HJSM6E6U.js +1038 -0
  26. package/dist/chunk-HJSM6E6U.js.map +1 -0
  27. package/dist/{chunk-XP2DXWYP.js → chunk-HZT2AOPN.js} +164 -39
  28. package/dist/chunk-HZT2AOPN.js.map +1 -0
  29. package/dist/chunk-JQBV3Q2W.js +29 -0
  30. package/dist/chunk-JQBV3Q2W.js.map +1 -0
  31. package/dist/{chunk-BWGFN44T.js → chunk-JT4O4YVM.js} +28 -16
  32. package/dist/chunk-JT4O4YVM.js.map +1 -0
  33. package/dist/chunk-NTO3EDB3.js +600 -0
  34. package/dist/chunk-NTO3EDB3.js.map +1 -0
  35. package/dist/{chunk-JY7R7V4G.js → chunk-OMNXYPXC.js} +2 -2
  36. package/dist/chunk-OMNXYPXC.js.map +1 -0
  37. package/dist/chunk-PELXV435.js +215 -0
  38. package/dist/chunk-PELXV435.js.map +1 -0
  39. package/dist/chunk-PPRFKTVC.js +154 -0
  40. package/dist/chunk-PPRFKTVC.js.map +1 -0
  41. package/dist/chunk-WQG2TYCB.js +677 -0
  42. package/dist/chunk-WQG2TYCB.js.map +1 -0
  43. package/dist/{chunk-HCTJFIJJ.js → chunk-YLPSQAM2.js} +2 -2
  44. package/dist/{chunk-HCTJFIJJ.js.map → chunk-YLPSQAM2.js.map} +1 -1
  45. package/dist/{chunk-6HXKTOD7.js → chunk-ZTFNYOC7.js} +53 -38
  46. package/dist/chunk-ZTFNYOC7.js.map +1 -0
  47. package/dist/cli/index.js +5103 -3165
  48. package/dist/cli/index.js.map +1 -1
  49. package/dist/{config-BOAMSKTF.js → config-4CJNUE3O.js} +7 -3
  50. package/dist/dashboard/prompts/merge-agent.md +217 -0
  51. package/dist/dashboard/prompts/review-agent.md +409 -0
  52. package/dist/dashboard/prompts/sync-main.md +84 -0
  53. package/dist/dashboard/prompts/test-agent.md +283 -0
  54. package/dist/dashboard/prompts/work-agent.md +249 -0
  55. package/dist/dashboard/public/assets/index-BxpjweAL.css +32 -0
  56. package/dist/dashboard/public/assets/index-DQHkwvvJ.js +743 -0
  57. package/dist/dashboard/public/index.html +2 -2
  58. package/dist/dashboard/server.js +17619 -4044
  59. package/dist/{dns-L3L2BB27.js → dns-7BDJSD3E.js} +4 -2
  60. package/dist/{feedback-writer-AAKF5BTK.js → feedback-writer-LVZ5TFYZ.js} +8 -4
  61. package/dist/feedback-writer-LVZ5TFYZ.js.map +1 -0
  62. package/dist/hume-WMAUBBV2.js +13 -0
  63. package/dist/index.d.ts +162 -40
  64. package/dist/index.js +67 -23
  65. package/dist/index.js.map +1 -1
  66. package/dist/{projects-VXRUCMLM.js → projects-JEIVIYC6.js} +3 -3
  67. package/dist/rally-RKFSWC7E.js +10 -0
  68. package/dist/{remote-agents-Z3R2A5BN.js → remote-agents-TFSMW7GN.js} +2 -2
  69. package/dist/{remote-workspace-2G6V2KNP.js → remote-workspace-AHVHQEES.js} +8 -8
  70. package/dist/review-status-EPFG4XM7.js +19 -0
  71. package/dist/shadow-state-5MDP6YXH.js +30 -0
  72. package/dist/shadow-state-5MDP6YXH.js.map +1 -0
  73. package/dist/{specialist-context-N32QBNNQ.js → specialist-context-ZC6A4M3I.js} +8 -7
  74. package/dist/{specialist-context-N32QBNNQ.js.map → specialist-context-ZC6A4M3I.js.map} +1 -1
  75. package/dist/{specialist-logs-GF3YV4KL.js → specialist-logs-KLGJCEUL.js} +7 -6
  76. package/dist/specialist-logs-KLGJCEUL.js.map +1 -0
  77. package/dist/{specialists-JBIW6MP4.js → specialists-O4HWDJL5.js} +7 -6
  78. package/dist/specialists-O4HWDJL5.js.map +1 -0
  79. package/dist/tldr-daemon-T3THOUGT.js +21 -0
  80. package/dist/tldr-daemon-T3THOUGT.js.map +1 -0
  81. package/dist/traefik-QN7R5I6V.js +19 -0
  82. package/dist/traefik-QN7R5I6V.js.map +1 -0
  83. package/dist/tunnel-W2GZBLEV.js +13 -0
  84. package/dist/tunnel-W2GZBLEV.js.map +1 -0
  85. package/dist/workspace-manager-IE4JL2JP.js +22 -0
  86. package/dist/workspace-manager-IE4JL2JP.js.map +1 -0
  87. package/package.json +2 -2
  88. package/scripts/heartbeat-hook +37 -10
  89. package/scripts/patches/llm-tldr-tsx-support.py +109 -0
  90. package/scripts/pre-tool-hook +26 -15
  91. package/scripts/record-cost-event.js +177 -43
  92. package/scripts/record-cost-event.ts +87 -3
  93. package/scripts/statusline.sh +169 -0
  94. package/scripts/stop-hook +21 -11
  95. package/scripts/tldr-post-edit +72 -0
  96. package/scripts/tldr-read-enforcer +275 -0
  97. package/scripts/work-agent-stop-hook +137 -0
  98. package/skills/check-merged/SKILL.md +143 -0
  99. package/skills/crash-investigation/SKILL.md +301 -0
  100. package/skills/github-cli/SKILL.md +185 -0
  101. package/skills/myn-standards/SKILL.md +351 -0
  102. package/skills/pan-reopen/SKILL.md +65 -0
  103. package/skills/pan-sync-main/SKILL.md +87 -0
  104. package/skills/pan-tldr/SKILL.md +149 -0
  105. package/skills/react-best-practices/SKILL.md +125 -0
  106. package/skills/spec-readiness/REPORT-TEMPLATE.md +158 -0
  107. package/skills/spec-readiness/SCORING-REFERENCE.md +369 -0
  108. package/skills/spec-readiness/SKILL.md +400 -0
  109. package/skills/spec-readiness-setup/SKILL.md +361 -0
  110. package/skills/workspace-status/SKILL.md +56 -0
  111. package/skills/write-spec/SKILL.md +138 -0
  112. package/templates/traefik/dynamic/panopticon.yml.template +0 -5
  113. package/templates/traefik/traefik.yml +0 -8
  114. package/dist/chunk-2NIAOCIC.js.map +0 -1
  115. package/dist/chunk-3XAB4IXF.js +0 -51
  116. package/dist/chunk-3XAB4IXF.js.map +0 -1
  117. package/dist/chunk-6HXKTOD7.js.map +0 -1
  118. package/dist/chunk-BBCUK6N2.js +0 -241
  119. package/dist/chunk-BBCUK6N2.js.map +0 -1
  120. package/dist/chunk-BWGFN44T.js.map +0 -1
  121. package/dist/chunk-ELK6Q7QI.js +0 -545
  122. package/dist/chunk-ELK6Q7QI.js.map +0 -1
  123. package/dist/chunk-JY7R7V4G.js.map +0 -1
  124. package/dist/chunk-LYSBSZYV.js +0 -1523
  125. package/dist/chunk-LYSBSZYV.js.map +0 -1
  126. package/dist/chunk-VIWUCJ4V.js.map +0 -1
  127. package/dist/chunk-VU4FLXV5.js.map +0 -1
  128. package/dist/chunk-XP2DXWYP.js.map +0 -1
  129. package/dist/dashboard/public/assets/index-C7X6LP5Z.css +0 -32
  130. package/dist/dashboard/public/assets/index-ClYqpcAJ.js +0 -645
  131. package/dist/feedback-writer-AAKF5BTK.js.map +0 -1
  132. package/dist/review-status-GWQYY77L.js.map +0 -1
  133. package/dist/traefik-CUJM6K5Z.js +0 -12
  134. /package/dist/{agents-BDFHF4T3.js.map → agents-E43Y3HNU.js.map} +0 -0
  135. /package/dist/{config-BOAMSKTF.js.map → config-4CJNUE3O.js.map} +0 -0
  136. /package/dist/{dns-L3L2BB27.js.map → dns-7BDJSD3E.js.map} +0 -0
  137. /package/dist/{projects-VXRUCMLM.js.map → hume-WMAUBBV2.js.map} +0 -0
  138. /package/dist/{remote-agents-Z3R2A5BN.js.map → projects-JEIVIYC6.js.map} +0 -0
  139. /package/dist/{specialist-logs-GF3YV4KL.js.map → rally-RKFSWC7E.js.map} +0 -0
  140. /package/dist/{specialists-JBIW6MP4.js.map → remote-agents-TFSMW7GN.js.map} +0 -0
  141. /package/dist/{remote-workspace-2G6V2KNP.js.map → remote-workspace-AHVHQEES.js.map} +0 -0
  142. /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` |