dme-agent 7.4.2 → 9.69.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -4
- package/assets/agent/AGENTS.md +365 -50
- package/assets/agent/DME-Agent-v7.4-SYSTEM.md +29 -98
- package/assets/agent/DME-Agent-v9.69-SYSTEM.md +208 -0
- package/assets/agent/PROMPT-COMPACT.md +21 -9
- package/assets/agent/dme-v9.69.md +43 -0
- package/assets/manifesto/DME-Agent-v9.69.md +514 -0
- package/assets/references/icon-doctrine.md +122 -0
- package/assets/references/motion-bible.md +262 -0
- package/assets/references/palette-intake.md +159 -0
- package/assets/skills/dme-app-shell/SKILL.md +77 -0
- package/assets/skills/dme-critique/SKILL.md +105 -6
- package/assets/skills/dme-dashboard/SKILL.md +108 -35
- package/assets/skills/dme-design/SKILL.md +138 -11
- package/assets/skills/dme-icons/SKILL.md +89 -0
- package/assets/skills/dme-landing/SKILL.md +98 -23
- package/assets/skills/dme-motion/SKILL.md +111 -0
- package/assets/skills/dme-research/SKILL.md +134 -6
- package/assets/skills/dme-shadcn/SKILL.md +128 -6
- package/assets/skills/dme-ux/SKILL.md +110 -27
- package/assets/skills/dme-welcome/SKILL.md +87 -0
- package/bin/dme.mjs +31 -14
- package/package.json +7 -3
- package/src/install.mjs +101 -57
- package/src/postinstall-hint.mjs +2 -2
- package/src/ui.mjs +3 -3
|
@@ -1,14 +1,142 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: dme-research
|
|
3
3
|
description: >
|
|
4
|
-
|
|
5
|
-
Triggers: /dme-research, design
|
|
4
|
+
DME 9.69 design research: competitive UI patterns, references, MCP-aware
|
|
5
|
+
gathering, peace/platform fit. Triggers: /dme-research, design research,
|
|
6
|
+
UI references, competitive audit, pattern research, inspire design, benchmarks.
|
|
6
7
|
---
|
|
7
8
|
|
|
8
|
-
# DME Research
|
|
9
|
+
# DME Research 9.69 — Look Before You Paint
|
|
9
10
|
|
|
10
|
-
|
|
11
|
+
Research feeds decisions; it does not replace taste. Output must be **actionable for build**, not a moodboard essay.
|
|
11
12
|
|
|
12
|
-
|
|
13
|
+
## When to run
|
|
13
14
|
|
|
14
|
-
|
|
15
|
+
- New product surface / rebrand
|
|
16
|
+
- He asks for references, competitors, “how does X do it”
|
|
17
|
+
- Before large dashboard/landing/app-shell bets
|
|
18
|
+
- Critique needs benchmarks
|
|
19
|
+
|
|
20
|
+
## Intake
|
|
21
|
+
|
|
22
|
+
1. **Question** — what decision will this research unlock?
|
|
23
|
+
2. **Platform** — web · app · both
|
|
24
|
+
3. **Category** — ops dashboard · marketing · desktop utility · onboarding…
|
|
25
|
+
4. **Constraints** — peace gray, shadcn, short copy, brand palette if any
|
|
26
|
+
|
|
27
|
+
## Sources (MCP-aware)
|
|
28
|
+
|
|
29
|
+
Use tools available in environment — do not fake visits:
|
|
30
|
+
|
|
31
|
+
| Need | Prefer |
|
|
32
|
+
|------|--------|
|
|
33
|
+
| Live pages | browser / web fetch / open page MCP |
|
|
34
|
+
| Social/UI chatter | X search if relevant |
|
|
35
|
+
| General landscape | web search |
|
|
36
|
+
| Repo patterns | codebase grep / read |
|
|
37
|
+
| Design systems | official docs (shadcn, Radix, platform HIG) |
|
|
38
|
+
|
|
39
|
+
**Cite real URLs** when reporting. If a tool fails, say so and continue with what you have.
|
|
40
|
+
|
|
41
|
+
### Target reference classes
|
|
42
|
+
|
|
43
|
+
- **Vercel dens** — dashboard density, marketing restraint
|
|
44
|
+
- **Apple editorial** — HIG spacing, marketing typography
|
|
45
|
+
- **Fumadocs / Linear / Notion-ish calm** — nav + content peace
|
|
46
|
+
- **Category leaders** — 2–4 direct competitors max
|
|
47
|
+
|
|
48
|
+
## Protocol
|
|
49
|
+
|
|
50
|
+
### 1. Frame
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
Decision:
|
|
54
|
+
Success looks like:
|
|
55
|
+
Out of scope:
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### 2. Gather (timebox)
|
|
59
|
+
|
|
60
|
+
- 3–7 references max (depth > 20 tabs)
|
|
61
|
+
- For each: capture **structure**, not aesthetics only
|
|
62
|
+
|
|
63
|
+
### 3. Extract pattern cards
|
|
64
|
+
|
|
65
|
+
Per reference:
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
Name / URL
|
|
69
|
+
Platform
|
|
70
|
+
Protagonist of first viewport
|
|
71
|
+
Shell structure
|
|
72
|
+
Density (sparse | medium | dense)
|
|
73
|
+
Motion (none | calm | rich)
|
|
74
|
+
Icon policy
|
|
75
|
+
Card usage
|
|
76
|
+
What to steal
|
|
77
|
+
What to refuse
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### 4. Synthesize for DME 9.69
|
|
81
|
+
|
|
82
|
+
Map findings onto doctrine:
|
|
83
|
+
|
|
84
|
+
| Doctrine | Research ask |
|
|
85
|
+
|----------|----------------|
|
|
86
|
+
| Peace gray | Do they use neutral calm or carnival? |
|
|
87
|
+
| Platform motion | Web calm vs app rich evidence |
|
|
88
|
+
| shadcn-shaped | Could this be composed with shadcn? |
|
|
89
|
+
| Short copy | Word counts on hero/KPI |
|
|
90
|
+
| Cards | Lean entity vs feature spam |
|
|
91
|
+
| Icons | Smart vs spam |
|
|
92
|
+
|
|
93
|
+
### 5. Recommendation
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
Anchor: vercel-dens | apple-editorial | fumadocs
|
|
97
|
+
Shell:
|
|
98
|
+
Palette direction:
|
|
99
|
+
Motion density:
|
|
100
|
+
Icon density:
|
|
101
|
+
Do:
|
|
102
|
+
Don't:
|
|
103
|
+
Open questions for him:
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Output format (always)
|
|
107
|
+
|
|
108
|
+
1. **Decision frame** (3 lines)
|
|
109
|
+
2. **Reference table** (name · steal · refuse)
|
|
110
|
+
3. **Pattern verdict** (one protagonist structure)
|
|
111
|
+
4. **Build implications** (shadcn list, motion, icons)
|
|
112
|
+
5. **Risks** (a11y, density, scope creep)
|
|
113
|
+
|
|
114
|
+
Keep it scannable. No “in today’s competitive landscape” fluff.
|
|
115
|
+
|
|
116
|
+
## Anti-patterns
|
|
117
|
+
|
|
118
|
+
- 2000-word essays with no build implication
|
|
119
|
+
- Copying competitor purple-glow AI look
|
|
120
|
+
- Research as procrastination (timebox)
|
|
121
|
+
- Inventing quotes/screenshots not seen
|
|
122
|
+
|
|
123
|
+
## Hand-off
|
|
124
|
+
|
|
125
|
+
| Next | Skill |
|
|
126
|
+
|------|-------|
|
|
127
|
+
| Implement product UI | `/dme-design` |
|
|
128
|
+
| Dashboard | `/dme-dashboard` |
|
|
129
|
+
| Landing | `/dme-landing` |
|
|
130
|
+
| Desktop | `/dme-app-shell` |
|
|
131
|
+
| Score after | `/dme-critique` |
|
|
132
|
+
|
|
133
|
+
## Checklist
|
|
134
|
+
|
|
135
|
+
- [ ] Decision named
|
|
136
|
+
- [ ] Real sources / MCP used when available
|
|
137
|
+
- [ ] ≤7 references, deep
|
|
138
|
+
- [ ] Steal/refuse explicit
|
|
139
|
+
- [ ] Mapped to 9.69 peace + platform
|
|
140
|
+
- [ ] Build implications concrete
|
|
141
|
+
|
|
142
|
+
**Research ends when the next commit is obvious.**
|
|
@@ -1,14 +1,136 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: dme-shadcn
|
|
3
3
|
description: >
|
|
4
|
-
|
|
5
|
-
Triggers: /dme-shadcn,
|
|
4
|
+
DME 9.69 shadcn-first composition skill. Install and compose primitives;
|
|
5
|
+
never reinvent Button/Input/Dialog/Table/Sidebar. Triggers: /dme-shadcn,
|
|
6
|
+
shadcn, compose UI, install components, don't reinvent primitives, ui atoms.
|
|
6
7
|
---
|
|
7
8
|
|
|
8
|
-
# DME shadcn
|
|
9
|
+
# DME shadcn 9.69 — Compose, Don't Invent
|
|
9
10
|
|
|
10
|
-
|
|
11
|
+
Law: **if shadcn has it, you use it.** You are a composer, not a component factory.
|
|
11
12
|
|
|
12
|
-
|
|
13
|
+
## When this skill owns the room
|
|
13
14
|
|
|
14
|
-
|
|
15
|
+
- Scaffolding any product UI, dashboard, landing form, dialog flow, table, sidebar
|
|
16
|
+
- He says “use shadcn”, “don’t hand-roll”, “install components”
|
|
17
|
+
- You feel the urge to write a custom Button or Modal from scratch → stop
|
|
18
|
+
|
|
19
|
+
## Install discipline
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npx shadcn@latest add button input label textarea select checkbox radio-group
|
|
23
|
+
npx shadcn@latest add dialog sheet drawer popover dropdown-menu
|
|
24
|
+
npx shadcn@latest add table tabs badge separator skeleton sonner tooltip
|
|
25
|
+
npx shadcn@latest add card form accordion progress pagination
|
|
26
|
+
npx shadcn@latest add sidebar command scroll-area avatar switch
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Add only what the surface needs. Prefer one `add` batch over drive-by custom CSS atoms.
|
|
30
|
+
|
|
31
|
+
## Primitive map (default to these)
|
|
32
|
+
|
|
33
|
+
| Need | Use |
|
|
34
|
+
|------|-----|
|
|
35
|
+
| Actions | `Button` variants: default, secondary, outline, ghost, destructive |
|
|
36
|
+
| Text | `Input` + `Label` · `Textarea` · `InputOTP` if needed |
|
|
37
|
+
| Choice | `Select` · `Checkbox` · `RadioGroup` · `Switch` |
|
|
38
|
+
| Overlay | `Dialog` (decision) · `Sheet` (detail/side) · `Drawer` (mobile) · `Popover` |
|
|
39
|
+
| Menus | `DropdownMenu` · `ContextMenu` · `Command` (palette) |
|
|
40
|
+
| Data | `Table` + `Pagination` · never fake tables with div grids for tabular data |
|
|
41
|
+
| Chrome | `Sidebar` · `Tabs` · `Breadcrumb` · `Separator` · `ScrollArea` |
|
|
42
|
+
| Feedback | `Sonner` toasts · `Progress` · `Skeleton` · `Badge` · `Alert` |
|
|
43
|
+
| Structure | `Card` only when entity/KPI/plan/media — not for every paragraph |
|
|
44
|
+
| Forms | `Form` (RHF + zod) when validation matters |
|
|
45
|
+
|
|
46
|
+
## Compose patterns
|
|
47
|
+
|
|
48
|
+
### Work surface (dashboard)
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
SidebarProvider
|
|
52
|
+
Sidebar
|
|
53
|
+
SidebarInset
|
|
54
|
+
header: search | filters | Button(CTA)
|
|
55
|
+
metric strip: plain numbers (not Card essays)
|
|
56
|
+
Table | list (divide-y)
|
|
57
|
+
Sheet | Dialog for detail/create
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Decision modal
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
Dialog
|
|
64
|
+
DialogHeader (title + 1 line description)
|
|
65
|
+
body ≤ 2–3 lines + fields
|
|
66
|
+
DialogFooter: outline cancel + primary verb
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Detail without route change
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
Sheet side="right"
|
|
73
|
+
identity header
|
|
74
|
+
dl / Table / Tabs
|
|
75
|
+
sticky footer actions
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Empty
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
short title
|
|
82
|
+
one helper line
|
|
83
|
+
one Button CTA
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
No illustration spam unless brand requires it.
|
|
87
|
+
|
|
88
|
+
## Styling rules (peace / 9.69)
|
|
89
|
+
|
|
90
|
+
- Extend via `className` + CVA variants — don’t fork the primitive file unless token-level
|
|
91
|
+
- Radius ≤ 8px; keep shadcn radius tokens consistent with zinc peace palette
|
|
92
|
+
- Prefer `variant` and `size` over one-off colored divs
|
|
93
|
+
- Dark: bg `#09090b`, raise `#18181b`; Light: white/zinc-50 peace
|
|
94
|
+
- Accent sparingly on primary Button / key Badge — not every border
|
|
95
|
+
|
|
96
|
+
## Anti-patterns (instant fail)
|
|
97
|
+
|
|
98
|
+
| Fail | Fix |
|
|
99
|
+
|------|-----|
|
|
100
|
+
| Custom `<button className="...">` for primary actions | `Button` |
|
|
101
|
+
| Hand-rolled modal with fixed overlay | `Dialog` / `Sheet` |
|
|
102
|
+
| Div soup “table” | `Table` |
|
|
103
|
+
| Card wrapping every sentence | list / `Separator` / bare layout |
|
|
104
|
+
| Rebuilding toast system | `Sonner` |
|
|
105
|
+
| Custom sidebar from scratch | `Sidebar` primitives |
|
|
106
|
+
| Icon+title+paragraph feature grid as “design system” | not a system — delete |
|
|
107
|
+
|
|
108
|
+
## Accessibility (ships with shadcn — keep it)
|
|
109
|
+
|
|
110
|
+
- Don’t strip `Dialog` focus trap or `Label` association
|
|
111
|
+
- Icon-only `Button` → `aria-label` or `sr-only` text
|
|
112
|
+
- Touch targets ≥ 44px on mobile (size default / padding)
|
|
113
|
+
- Focus rings visible — never `outline-none` without replacement
|
|
114
|
+
|
|
115
|
+
## Motion pairing
|
|
116
|
+
|
|
117
|
+
Primitives stay dumb; motion wraps them:
|
|
118
|
+
|
|
119
|
+
```tsx
|
|
120
|
+
<motion.div {...fadeUp}>
|
|
121
|
+
<Card>...</Card>
|
|
122
|
+
</motion.div>
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Don’t animate in a way that breaks Dialog/Sheet exit. See `/dme-motion`.
|
|
126
|
+
|
|
127
|
+
## Checklist
|
|
128
|
+
|
|
129
|
+
- [ ] Listed needed primitives before coding
|
|
130
|
+
- [ ] Installed via shadcn CLI (or confirmed present)
|
|
131
|
+
- [ ] Zero hand-rolled atoms that exist upstream
|
|
132
|
+
- [ ] Cards lean; tables for tabular data
|
|
133
|
+
- [ ] Forms labeled; errors human
|
|
134
|
+
- [ ] Composed shell matches platform (web vs app)
|
|
135
|
+
|
|
136
|
+
**Compose. Don’t invent.**
|
|
@@ -1,53 +1,136 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: dme-ux
|
|
3
3
|
description: >
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
microcopy, onboarding,
|
|
4
|
+
DME 9.69 human UX for non-developers: addiction via ease not dark patterns,
|
|
5
|
+
microcopy caps, clear verbs, complete states. Triggers: /dme-ux, UX writing,
|
|
6
|
+
microcopy, empty state, onboarding UX, usability, human UI, dark patterns.
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
# DME UX —
|
|
9
|
+
# DME UX 9.69 — Ease, Not Traps
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
Audience default: **humans who don’t code**. They scan. They fear mistakes. Next step must be obvious.
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
## Goal
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
Make the product **habit-forming through ease**: fast success, clear recovery, low shame.
|
|
16
|
+
**Never** through dark patterns (forced continuity, hidden costs, fake urgency, trick checkboxes).
|
|
16
17
|
|
|
17
|
-
|
|
18
|
-
2. Immediate feedback (<150ms state)
|
|
19
|
-
3. Prevent errors; confirm destructive
|
|
20
|
-
4. Easy exit / undo
|
|
21
|
-
5. Progressive disclosure
|
|
22
|
-
6. Consistent patterns
|
|
23
|
-
7. A11y: contrast, focus, 44px targets, labeled inputs
|
|
24
|
-
8. Button = real verb
|
|
25
|
-
9. Full states: empty · loading · partial · success · error · offline
|
|
26
|
-
10. First-minute magic: one valuable action
|
|
18
|
+
## Core loop (ethical stickiness)
|
|
27
19
|
|
|
28
|
-
|
|
20
|
+
1. **One obvious primary action** per view
|
|
21
|
+
2. **Time-to-first-success** as short as honest
|
|
22
|
+
3. **Forgiving errors** — say what happened + how to continue
|
|
23
|
+
4. **Memory** — remember filters, last place, drafts
|
|
24
|
+
5. **Feedback** — every action gets a visible result (toast, row update, progress)
|
|
25
|
+
|
|
26
|
+
If they return, it’s because work was easier — not because leave was hard.
|
|
27
|
+
|
|
28
|
+
## Microcopy caps (hard)
|
|
29
29
|
|
|
30
30
|
| Element | Max |
|
|
31
|
-
|
|
31
|
+
|---------|-----|
|
|
32
32
|
| Field label | 3 words |
|
|
33
33
|
| Helper | 1 line |
|
|
34
34
|
| Card body | 1–2 lines |
|
|
35
35
|
| Toast | 1 line |
|
|
36
|
-
|
|
|
36
|
+
| Modal body | 2–3 lines |
|
|
37
37
|
| Hero lead | 1 sentence |
|
|
38
|
+
| Empty title | 3–6 words |
|
|
39
|
+
| Error | 1–2 lines + action |
|
|
40
|
+
|
|
41
|
+
### Buttons = verbs
|
|
42
|
+
|
|
43
|
+
`Salvar` · `Criar pedido` · `Enviar` · `Aprovar` · `Tentar de novo`
|
|
44
|
+
|
|
45
|
+
Not: `OK` · `Submit` · `Click here` · `Explore`
|
|
46
|
+
|
|
47
|
+
### Errors
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
Não deu para salvar.
|
|
51
|
+
Verifique a conexão e tente de novo.
|
|
52
|
+
[ Tentar de novo ]
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Never stack traces, never blame, never “unexpected error” alone.
|
|
56
|
+
|
|
57
|
+
## States (every surface)
|
|
58
|
+
|
|
59
|
+
| State | Content |
|
|
60
|
+
|-------|---------|
|
|
61
|
+
| Empty | title + one line + one CTA |
|
|
62
|
+
| Loading | skeleton geometry of result |
|
|
63
|
+
| Success | toast or inline confirm, 1 line |
|
|
64
|
+
| Error | cause + recovery |
|
|
65
|
+
| Offline | honest status + safe actions only |
|
|
66
|
+
|
|
67
|
+
## Progressive disclosure
|
|
38
68
|
|
|
39
|
-
|
|
69
|
+
- Defaults cover 80%
|
|
70
|
+
- “Mais opções” / advanced filters collapsed
|
|
71
|
+
- Dangerous stuff: Dialog confirm with consequence in plain language
|
|
40
72
|
|
|
41
|
-
|
|
73
|
+
## Onboarding (UX lens)
|
|
74
|
+
|
|
75
|
+
Value → account → **one** essential setup → first success.
|
|
76
|
+
|
|
77
|
+
No 12-tooltip product tours. For motion/craft detail → `/dme-welcome`.
|
|
42
78
|
|
|
43
79
|
## Forms
|
|
44
80
|
|
|
45
|
-
|
|
81
|
+
- Labels outside fields (visible)
|
|
82
|
+
- Placeholders are examples, not labels
|
|
83
|
+
- Inline validation after blur or submit — not while first keystroke
|
|
84
|
+
- Password managers / autocomplete respected
|
|
85
|
+
- Required: mark few; don’t asterisk everything
|
|
86
|
+
|
|
87
|
+
## Navigation & wayfinding
|
|
88
|
+
|
|
89
|
+
- Current location always clear
|
|
90
|
+
- Destructive far from primary when possible
|
|
91
|
+
- Back restores context (scroll, filters)
|
|
92
|
+
|
|
93
|
+
## Addiction via ease (allowed)
|
|
94
|
+
|
|
95
|
+
- Keyboard shortcuts for power users (discoverable)
|
|
96
|
+
- Optimistic UI when safe
|
|
97
|
+
- Smart defaults
|
|
98
|
+
- Undo instead of scary confirms when reversible
|
|
99
|
+
- Fast search (`Command`)
|
|
100
|
+
|
|
101
|
+
## Dark patterns (banned)
|
|
102
|
+
|
|
103
|
+
| Pattern | Why banned |
|
|
104
|
+
|---------|------------|
|
|
105
|
+
| Confirmshaming (“No, I hate saving time”) | contempt |
|
|
106
|
+
| Hidden unsubscribe / cancel | trap |
|
|
107
|
+
| Fake countdown scarcity | lie |
|
|
108
|
+
| Prechecked marketing consent | coercion |
|
|
109
|
+
| Infinite guilt badges | anxiety ≠ retention |
|
|
110
|
+
| Roach motel (easy in, hard out) | hostility |
|
|
111
|
+
|
|
112
|
+
## Language
|
|
113
|
+
|
|
114
|
+
- Human language; no API field names in UI (`order_id` → `Nº do pedido`)
|
|
115
|
+
- Locale-aware dates/numbers when product requires
|
|
116
|
+
- Banned AI fluff: seamless, next-gen, powerful, unlock, supercharge, elevate, journey, empower…
|
|
117
|
+
|
|
118
|
+
## a11y floor
|
|
46
119
|
|
|
47
|
-
|
|
120
|
+
- Contrast AA
|
|
121
|
+
- Focus visible
|
|
122
|
+
- ≥44px targets mobile
|
|
123
|
+
- Labels on inputs
|
|
124
|
+
- Don’t rely on color alone for status
|
|
48
125
|
|
|
49
|
-
|
|
126
|
+
## Checklist
|
|
50
127
|
|
|
51
|
-
|
|
128
|
+
- [ ] Primary action obvious
|
|
129
|
+
- [ ] Copy under caps
|
|
130
|
+
- [ ] Verbs on buttons
|
|
131
|
+
- [ ] Empty/error/success real
|
|
132
|
+
- [ ] No dark patterns
|
|
133
|
+
- [ ] Non-dev language
|
|
134
|
+
- [ ] First success path short
|
|
52
135
|
|
|
53
|
-
|
|
136
|
+
**Be easy to love. Never hard to leave for the wrong reasons.**
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dme-welcome
|
|
3
|
+
description: >
|
|
4
|
+
DME 9.69 welcome and onboarding as craft. Peace aesthetic, Framer Motion beats,
|
|
5
|
+
short human copy, platform-aware (desktop rich / web calm). Triggers: /dme-welcome,
|
|
6
|
+
onboarding, first-run, welcome screen, empty setup, splash, intro sequence.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# DME Welcome 9.69 — Craft sequence
|
|
10
|
+
|
|
11
|
+
Welcome is a **first-run craft piece**, not a fake “hello!” every login.
|
|
12
|
+
|
|
13
|
+
## When to build
|
|
14
|
+
|
|
15
|
+
| Yes | No |
|
|
16
|
+
|---|---|
|
|
17
|
+
| First open of desktop app | Every dashboard visit |
|
|
18
|
+
| Empty workspace needs first object | 12-tooltip product tour |
|
|
19
|
+
| Account just created | Marketing inside logged-in shell |
|
|
20
|
+
|
|
21
|
+
## Flow (addiction via ease)
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
value (why you're here)
|
|
25
|
+
→ account / identity if needed
|
|
26
|
+
→ ONE essential setup
|
|
27
|
+
→ first success action
|
|
28
|
+
→ stillness + product
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
- ≤ **3** visible steps
|
|
32
|
+
- Progress thin and quiet
|
|
33
|
+
- **Skip** always available
|
|
34
|
+
- Buttons = real verbs (`Criar primeiro projeto`, not `Continuar jornada`)
|
|
35
|
+
|
|
36
|
+
## Platform density
|
|
37
|
+
|
|
38
|
+
| Platform | Motion |
|
|
39
|
+
|---|---|
|
|
40
|
+
| **Web** | Crossfade / opacity + y 8–12px · 180–280ms easeOut · max one stagger group |
|
|
41
|
+
| **Electron/Tauri** | 2–4 beat choreography OK · spring gentle · layoutId mark→title optional |
|
|
42
|
+
| **Reduced motion** | Instant or ≤80ms fade; no travel |
|
|
43
|
+
|
|
44
|
+
### Desktop beat recipe (example)
|
|
45
|
+
|
|
46
|
+
1. **0ms** mark/logo opacity + scale 0.98→1 spring soft
|
|
47
|
+
2. **120ms** title y 12→0 easeOut
|
|
48
|
+
3. **200ms** one-line lead
|
|
49
|
+
4. **280ms** primary CTA
|
|
50
|
+
5. **Stillness** — no loop
|
|
51
|
+
|
|
52
|
+
## Visual (peace)
|
|
53
|
+
|
|
54
|
+
- Default: **peace gray** (zinc/stone) unless brand locked
|
|
55
|
+
- Soft contrast; breathing whitespace
|
|
56
|
+
- **One** protagonist: mark **or** title **or** product preview
|
|
57
|
+
- Icons: onboarding strategy · **1–3 glyphs** for whole flow
|
|
58
|
+
- No feature-card grid on step 1
|
|
59
|
+
|
|
60
|
+
## Copy caps
|
|
61
|
+
|
|
62
|
+
| Element | Max |
|
|
63
|
+
|---|---|
|
|
64
|
+
| Step title | 4–6 words |
|
|
65
|
+
| Body | 1–2 lines |
|
|
66
|
+
| Helper | 1 line |
|
|
67
|
+
| CTA | verb + object |
|
|
68
|
+
|
|
69
|
+
Banned: seamless, next-gen, unlock, empower, “your journey”, wall of text.
|
|
70
|
+
|
|
71
|
+
## Stack
|
|
72
|
+
|
|
73
|
+
- **shadcn:** Button, Progress, Input, Dialog/Sheet or full-page route
|
|
74
|
+
- **framer-motion:** AnimatePresence for steps
|
|
75
|
+
- **lucide:** optional single step glyph
|
|
76
|
+
|
|
77
|
+
## Empty state after welcome
|
|
78
|
+
|
|
79
|
+
Short title + one line + **one** CTA. One quiet icon max. No “Welcome to your dashboard!” hero forever.
|
|
80
|
+
|
|
81
|
+
## Deliver
|
|
82
|
+
|
|
83
|
+
1. Step list + copy
|
|
84
|
+
2. Platform density + easing
|
|
85
|
+
3. Framer beat map
|
|
86
|
+
4. Implement
|
|
87
|
+
5. Subtract — if beat 4 doesn’t teach, cut it
|
package/bin/dme.mjs
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* DME Agent CLI — navigable TUI · detect-only install · strong AGENTS.md
|
|
3
|
+
* DME Agent CLI 9.69 — navigable TUI · detect-only install · strong AGENTS.md
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import fs from "node:fs";
|
|
7
7
|
import path from "node:path";
|
|
8
8
|
import { fileURLToPath } from "node:url";
|
|
9
9
|
import { asciiLogo, c, fail, info, hr, showCursor } from "../src/ui.mjs";
|
|
10
|
-
import { installDme, doctor, uninstall, scan } from "../src/install.mjs";
|
|
10
|
+
import { installDme, doctor, uninstall, scan, SKILL_NAMES } from "../src/install.mjs";
|
|
11
11
|
import { getTargets } from "../src/targets.mjs";
|
|
12
12
|
import { formatScanReport, getDetectedTargets } from "../src/detect.mjs";
|
|
13
13
|
import { runMainTui, printScanTable } from "../src/tui.mjs";
|
|
@@ -27,7 +27,7 @@ function parseFlags(argv) {
|
|
|
27
27
|
noProject: false,
|
|
28
28
|
force: false,
|
|
29
29
|
all: false,
|
|
30
|
-
agentsPolicy: "ask",
|
|
30
|
+
agentsPolicy: "ask",
|
|
31
31
|
noTui: false,
|
|
32
32
|
yes: false,
|
|
33
33
|
};
|
|
@@ -39,13 +39,11 @@ function parseFlags(argv) {
|
|
|
39
39
|
else if (a === "--all") {
|
|
40
40
|
flags.all = true;
|
|
41
41
|
flags.targets = ["all"];
|
|
42
|
-
}
|
|
43
|
-
else if (a === "--no-tui" || a === "--plain") flags.noTui = true;
|
|
42
|
+
} else if (a === "--no-tui" || a === "--plain") flags.noTui = true;
|
|
44
43
|
else if (a === "-y" || a === "--yes") {
|
|
45
44
|
flags.yes = true;
|
|
46
45
|
flags.agentsPolicy = "merge";
|
|
47
|
-
}
|
|
48
|
-
else if (a === "--agents" || a === "--agents-policy") {
|
|
46
|
+
} else if (a === "--agents" || a === "--agents-policy") {
|
|
49
47
|
flags.agentsPolicy = (argv[++i] || "ask").toLowerCase();
|
|
50
48
|
} else if (a.startsWith("--agents=")) {
|
|
51
49
|
flags.agentsPolicy = a.slice(9).toLowerCase();
|
|
@@ -64,17 +62,22 @@ function parseFlags(argv) {
|
|
|
64
62
|
}
|
|
65
63
|
|
|
66
64
|
function help() {
|
|
67
|
-
|
|
68
|
-
console.log(
|
|
65
|
+
const ver = pkg.version || "9.69.0";
|
|
66
|
+
console.log(asciiLogo("9.69"));
|
|
67
|
+
console.log(`${c.bold}${c.brightCyan}DME Agent ${ver}${c.reset}
|
|
68
|
+
${c.dim}Ask palette · motion bible · web vs app · icons · welcome · TUI detect-only${c.reset}
|
|
69
|
+
|
|
70
|
+
${c.bold}${c.brightCyan}Usage${c.reset}
|
|
69
71
|
${c.brightYellow}dme${c.reset} interactive TUI
|
|
70
72
|
${c.brightYellow}dme${c.reset} <command> [options]
|
|
71
73
|
|
|
72
74
|
${c.bold}${c.brightCyan}Commands${c.reset}
|
|
73
75
|
${c.brightYellow}install${c.reset} Detect CLIs on this PC → install DME only there
|
|
74
|
-
${c.brightYellow}scan${c.reset} Show which CLIs are detected
|
|
76
|
+
${c.brightYellow}scan${c.reset} Show which CLIs are detected (detect-only)
|
|
75
77
|
${c.brightYellow}doctor${c.reset} Verify DME install health
|
|
76
78
|
${c.brightYellow}uninstall${c.reset} Remove DME (detected CLIs only)
|
|
77
79
|
${c.brightYellow}list${c.reset} List all supported targets
|
|
80
|
+
${c.brightYellow}skills${c.reset} List installer skill pack
|
|
78
81
|
${c.brightYellow}tui${c.reset} Open navigable menu
|
|
79
82
|
${c.brightYellow}path${c.reset} Print assets path
|
|
80
83
|
${c.brightYellow}version${c.reset} Print version
|
|
@@ -89,8 +92,11 @@ ${c.bold}${c.brightCyan}Options${c.reset}
|
|
|
89
92
|
${c.dim}--no-project${c.reset} Skip cwd project files
|
|
90
93
|
${c.dim}--no-tui${c.reset} Disable interactive pickers
|
|
91
94
|
|
|
95
|
+
${c.bold}${c.brightCyan}9.69 skills${c.reset}
|
|
96
|
+
${c.dim}${SKILL_NAMES.map((s) => "/" + s).join(" ")}${c.reset}
|
|
97
|
+
|
|
92
98
|
${c.bold}${c.brightCyan}Examples${c.reset}
|
|
93
|
-
${c.dim}npx dme-agent${c.reset}
|
|
99
|
+
${c.dim}npx dme-agent@9.69.0${c.reset}
|
|
94
100
|
${c.dim}dme install${c.reset}
|
|
95
101
|
${c.dim}dme install --targets claude,cursor${c.reset}
|
|
96
102
|
${c.dim}dme install --agents merge -y${c.reset}
|
|
@@ -98,6 +104,8 @@ ${c.bold}${c.brightCyan}Examples${c.reset}
|
|
|
98
104
|
|
|
99
105
|
${c.bold}${c.brightCyan}AGENTS.md${c.reset}
|
|
100
106
|
Written to each CLI’s ${c.underline}correct path${c.reset}.
|
|
107
|
+
Prefer assets: AGENTS.md · DME-Agent-v9.69-SYSTEM.md · dme-v9.69.md
|
|
108
|
+
(falls back to v7.4 names if 9.69 assets not yet present).
|
|
101
109
|
If the file already exists → TUI asks: Merge / Overwrite / Skip.
|
|
102
110
|
`);
|
|
103
111
|
}
|
|
@@ -123,7 +131,6 @@ async function doInstall(flags) {
|
|
|
123
131
|
}
|
|
124
132
|
|
|
125
133
|
async function main() {
|
|
126
|
-
// ensure cursor restored on crash
|
|
127
134
|
process.on("exit", () => showCursor());
|
|
128
135
|
process.on("SIGINT", () => {
|
|
129
136
|
showCursor();
|
|
@@ -132,7 +139,6 @@ async function main() {
|
|
|
132
139
|
|
|
133
140
|
const flags = parseFlags(cmd ? args.slice(1) : args);
|
|
134
141
|
|
|
135
|
-
// No command → TUI if tty, else help + scan hint
|
|
136
142
|
if (!cmd) {
|
|
137
143
|
if (process.stdin.isTTY && process.stdout.isTTY && !flags.noTui) {
|
|
138
144
|
await runMainTui({
|
|
@@ -180,6 +186,17 @@ async function main() {
|
|
|
180
186
|
uninstall({ all: flags.all });
|
|
181
187
|
break;
|
|
182
188
|
|
|
189
|
+
case "skills":
|
|
190
|
+
console.log(asciiLogo("9.69"));
|
|
191
|
+
console.log(hr());
|
|
192
|
+
for (const s of SKILL_NAMES) {
|
|
193
|
+
console.log(` ${c.brightYellow}/${s}${c.reset}`);
|
|
194
|
+
}
|
|
195
|
+
console.log("");
|
|
196
|
+
console.log(info(`${SKILL_NAMES.length} skills in installer pack`));
|
|
197
|
+
console.log("");
|
|
198
|
+
break;
|
|
199
|
+
|
|
183
200
|
case "tui":
|
|
184
201
|
case "menu":
|
|
185
202
|
case "ui":
|
|
@@ -194,7 +211,7 @@ async function main() {
|
|
|
194
211
|
|
|
195
212
|
case "list":
|
|
196
213
|
case "targets":
|
|
197
|
-
console.log(asciiLogo(
|
|
214
|
+
console.log(asciiLogo("9.69"));
|
|
198
215
|
console.log(hr());
|
|
199
216
|
for (const t of getTargets()) {
|
|
200
217
|
console.log(
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dme-agent",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "DME Agent
|
|
3
|
+
"version": "9.69.1",
|
|
4
|
+
"description": "DME Agent 9.69 — Neominimal Identity Engine. Detect-only bootstrap + TUI. Ask palette · motion bible · web vs app · icons · welcome.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"dme": "bin/dme.mjs",
|
|
@@ -35,7 +35,11 @@
|
|
|
35
35
|
"dashboard",
|
|
36
36
|
"landing-page",
|
|
37
37
|
"bootstrap",
|
|
38
|
-
"tui"
|
|
38
|
+
"tui",
|
|
39
|
+
"motion",
|
|
40
|
+
"icons",
|
|
41
|
+
"electron",
|
|
42
|
+
"tauri"
|
|
39
43
|
],
|
|
40
44
|
"author": "AnThophicous / brennoleondesouza",
|
|
41
45
|
"license": "MIT",
|