dme-agent 7.4.1 → 9.69.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.
@@ -1,14 +1,136 @@
1
1
  ---
2
2
  name: dme-shadcn
3
3
  description: >
4
- Force shadcn/ui-first implementation. Stop reinventing Button/Input/Dialog.
5
- Triggers: /dme-shadcn, shadcn, add component, ui primitive.
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 First
9
+ # DME shadcn 9.69 — Compose, Don't Invent
9
10
 
10
- Map UI `npx shadcn@latest add …` CSS variables compose domain blocks.
11
+ Law: **if shadcn has it, you use it.** You are a composer, not a component factory.
11
12
 
12
- Never hand-roll atoms that exist. Customize via tokens, className, cva, asChild.
13
+ ## When this skill owns the room
13
14
 
14
- Card is allowed as primitive; DME still forbids text-bloat inside cards.
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
- Human-centered UX doctrine for non-developers. Microcopy, flows, forms,
5
- onboarding, errors, accessibility. Triggers: /dme-ux, UX, usabilidade,
6
- microcopy, onboarding, empty state, formulário.
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 — Humans First
9
+ # DME UX 9.69 Ease, Not Traps
10
10
 
11
- ## Default user
11
+ Audience default: **humans who don’t code**. They scan. They fear mistakes. Next step must be obvious.
12
12
 
13
- Not a developer. Scans. Fears mistakes. Wants the next step obvious.
13
+ ## Goal
14
14
 
15
- ## Laws
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
- 1. Recognition over recall
18
- 2. Immediate feedback (&lt;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
- ## Microcopy caps
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
- | Empty | title + 1 line + CTA |
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
- ## Translate errors
69
+ - Defaults cover 80%
70
+ - “Mais opções” / advanced filters collapsed
71
+ - Dangerous stuff: Dialog confirm with consequence in plain language
40
72
 
41
- Dev message human cause + next action. Never dump stack traces.
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
- One column · external labels · inline errors · primary at end · autosave if long.
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
- ## Onboarding
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
- Value → account → one essential setup → first success. No 12-tooltip tours.
126
+ ## Checklist
50
127
 
51
- ## Output when reviewing UX
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
- Friction list · copy rewrites · state gaps · mobile issues · priority fixes.
136
+ **Be easy to love. Never hard to leave for the wrong reasons.**
@@ -0,0 +1,20 @@
1
+ ---
2
+ name: dme-welcome
3
+ description: >
4
+ DME 9.69 onboarding / first-run welcome. Value then one setup then first win.
5
+ Triggers: /dme-welcome, onboarding, first-run, empty state setup, welcome flow.
6
+ ---
7
+
8
+ # DME Welcome 9.69
9
+
10
+ 1. Flow: **value → account → one essential setup → first success**
11
+ 2. ≤3 visible steps · thin progress · skip always available
12
+ 3. Motion: functional step crossfade 180–200ms
13
+ 4. Icons: onboarding strategy (1–3 glyphs) — never 12-tooltip tours
14
+ 5. After: empty state = short title + one line + one CTA
15
+ 6. Copy caps: step title short · body ≤2 lines · buttons = real verbs
16
+ 7. shadcn: Dialog/Sheet or full page · Progress · Button · Input
17
+
18
+ Banned: guided product tours with tooltip chains, feature-card spam on step 1.
19
+
20
+ Deliver: step list → copy → motion → implement → subtract.
package/bin/dme.mjs CHANGED
@@ -1,14 +1,16 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * DME Agent CLI — bootstrap + manage Neominimal Identity Engine 7.4
3
+ * DME Agent CLI 9.69 navigable TUI · detect-only install · strong AGENTS.md
4
4
  */
5
5
 
6
- import { banner, colors as c, info, fail, hr } from "../src/ui.mjs";
7
- import { installDme, doctor, uninstall } from "../src/install.mjs";
8
- import { getTargets } from "../src/targets.mjs";
9
6
  import fs from "node:fs";
10
7
  import path from "node:path";
11
8
  import { fileURLToPath } from "node:url";
9
+ import { asciiLogo, c, fail, info, hr, showCursor } from "../src/ui.mjs";
10
+ import { installDme, doctor, uninstall, scan, SKILL_NAMES } from "../src/install.mjs";
11
+ import { getTargets } from "../src/targets.mjs";
12
+ import { formatScanReport, getDetectedTargets } from "../src/detect.mjs";
13
+ import { runMainTui, printScanTable } from "../src/tui.mjs";
12
14
 
13
15
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
14
16
  const pkg = JSON.parse(
@@ -16,7 +18,7 @@ const pkg = JSON.parse(
16
18
  );
17
19
 
18
20
  const args = process.argv.slice(2);
19
- const cmd = (args[0] || "help").toLowerCase();
21
+ const cmd = (args[0] || "").toLowerCase();
20
22
 
21
23
  function parseFlags(argv) {
22
24
  const flags = {
@@ -24,13 +26,28 @@ function parseFlags(argv) {
24
26
  dryRun: false,
25
27
  noProject: false,
26
28
  force: false,
29
+ all: false,
30
+ agentsPolicy: "ask",
31
+ noTui: false,
32
+ yes: false,
27
33
  };
28
34
  for (let i = 0; i < argv.length; i++) {
29
35
  const a = argv[i];
30
36
  if (a === "--dry-run") flags.dryRun = true;
31
37
  else if (a === "--no-project") flags.noProject = true;
32
38
  else if (a === "--force") flags.force = true;
33
- else if (a === "--targets" || a === "-t") {
39
+ else if (a === "--all") {
40
+ flags.all = true;
41
+ flags.targets = ["all"];
42
+ } else if (a === "--no-tui" || a === "--plain") flags.noTui = true;
43
+ else if (a === "-y" || a === "--yes") {
44
+ flags.yes = true;
45
+ flags.agentsPolicy = "merge";
46
+ } else if (a === "--agents" || a === "--agents-policy") {
47
+ flags.agentsPolicy = (argv[++i] || "ask").toLowerCase();
48
+ } else if (a.startsWith("--agents=")) {
49
+ flags.agentsPolicy = a.slice(9).toLowerCase();
50
+ } else if (a === "--targets" || a === "-t") {
34
51
  const v = argv[++i] || "";
35
52
  flags.targets = v.split(",").map((s) => s.trim()).filter(Boolean);
36
53
  } else if (a.startsWith("--targets=")) {
@@ -45,100 +62,194 @@ function parseFlags(argv) {
45
62
  }
46
63
 
47
64
  function help() {
48
- console.log(banner(pkg.version));
49
- console.log(`${c.bold}Usage${c.reset}
50
- dme <command> [options]
51
-
52
- ${c.bold}Commands${c.reset}
53
- ${c.yellow}install${c.reset} Bootstrap DME 7.4 into all AI CLIs (default)
54
- ${c.yellow}update${c.reset} Re-sync assets (alias of install)
55
- ${c.yellow}doctor${c.reset} Verify what is installed
56
- ${c.yellow}uninstall${c.reset} Remove DME files / merged blocks
57
- ${c.yellow}list${c.reset} List supported targets
58
- ${c.yellow}path${c.reset} Print package asset path
59
- ${c.yellow}version${c.reset} Print version
60
- ${c.yellow}help${c.reset} This screen
61
-
62
- ${c.bold}Options${c.reset}
63
- --targets claude,cursor,codex,zed,grok,all
64
- --dry-run
65
- --no-project Skip cwd project install
66
- --force
67
-
68
- ${c.bold}Examples${c.reset}
69
- ${c.dim}npx dme-agent install${c.reset}
70
- ${c.dim}dme install --targets claude,cursor,grok${c.reset}
71
- ${c.dim}dme doctor${c.reset}
72
-
73
- ${c.bold}After install${c.reset}
74
- Restart agent sessions. Use skills:
75
- /dme-design /dme-dashboard /dme-landing /dme-ux /dme-shadcn
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}
71
+ ${c.brightYellow}dme${c.reset} interactive TUI
72
+ ${c.brightYellow}dme${c.reset} <command> [options]
73
+
74
+ ${c.bold}${c.brightCyan}Commands${c.reset}
75
+ ${c.brightYellow}install${c.reset} Detect CLIs on this PC → install DME only there
76
+ ${c.brightYellow}scan${c.reset} Show which CLIs are detected (detect-only)
77
+ ${c.brightYellow}doctor${c.reset} Verify DME install health
78
+ ${c.brightYellow}uninstall${c.reset} Remove DME (detected CLIs only)
79
+ ${c.brightYellow}list${c.reset} List all supported targets
80
+ ${c.brightYellow}skills${c.reset} List installer skill pack
81
+ ${c.brightYellow}tui${c.reset} Open navigable menu
82
+ ${c.brightYellow}path${c.reset} Print assets path
83
+ ${c.brightYellow}version${c.reset} Print version
84
+ ${c.brightYellow}help${c.reset} This screen
85
+
86
+ ${c.bold}${c.brightCyan}Options${c.reset}
87
+ ${c.dim}--targets${c.reset} claude,cursor,grok,detected,all
88
+ ${c.dim}--all${c.reset} Force every surface (ignore detection)
89
+ ${c.dim}--agents${c.reset} ask|merge|overwrite|skip
90
+ ${c.dim}-y, --yes${c.reset} Auto-merge existing AGENTS.md
91
+ ${c.dim}--dry-run${c.reset}
92
+ ${c.dim}--no-project${c.reset} Skip cwd project files
93
+ ${c.dim}--no-tui${c.reset} Disable interactive pickers
94
+
95
+ ${c.bold}${c.brightCyan}9.69 skills${c.reset}
96
+ ${c.dim}${SKILL_NAMES.map((s) => "/" + s).join(" ")}${c.reset}
97
+
98
+ ${c.bold}${c.brightCyan}Examples${c.reset}
99
+ ${c.dim}npx dme-agent@9.69.0${c.reset}
100
+ ${c.dim}dme install${c.reset}
101
+ ${c.dim}dme install --targets claude,cursor${c.reset}
102
+ ${c.dim}dme install --agents merge -y${c.reset}
103
+ ${c.dim}dme scan${c.reset}
104
+
105
+ ${c.bold}${c.brightCyan}AGENTS.md${c.reset}
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).
109
+ If the file already exists → TUI asks: Merge / Overwrite / Skip.
76
110
  `);
77
111
  }
78
112
 
113
+ async function doInstall(flags) {
114
+ const targets =
115
+ flags.targets.length > 0
116
+ ? flags.targets
117
+ : flags.all
118
+ ? ["all"]
119
+ : ["detected"];
120
+
121
+ await installDme({
122
+ targets,
123
+ dryRun: flags.dryRun,
124
+ force: flags.force,
125
+ cwdProject: !flags.noProject,
126
+ agentsPolicy: flags.agentsPolicy,
127
+ interactive: !flags.noTui && !flags.yes,
128
+ quiet: flags.yes,
129
+ pick: !flags.noTui && flags.targets.length === 0 && !flags.all,
130
+ });
131
+ }
132
+
79
133
  async function main() {
80
- const flags = parseFlags(args.slice(1));
134
+ process.on("exit", () => showCursor());
135
+ process.on("SIGINT", () => {
136
+ showCursor();
137
+ process.exit(130);
138
+ });
139
+
140
+ const flags = parseFlags(cmd ? args.slice(1) : args);
141
+
142
+ if (!cmd) {
143
+ if (process.stdin.isTTY && process.stdout.isTTY && !flags.noTui) {
144
+ await runMainTui({
145
+ version: pkg.version,
146
+ onInstall: () => doInstall({ ...flags, targets: [] }),
147
+ onDoctor: () => doctor(),
148
+ onUninstall: () => uninstall({ all: flags.all }),
149
+ onScan: () => {
150
+ printScanTable(formatScanReport());
151
+ const n = getDetectedTargets().length;
152
+ console.log(
153
+ info(`${n} CLI(s) will receive DME on install (detect-only)`)
154
+ );
155
+ console.log("");
156
+ },
157
+ });
158
+ return;
159
+ }
160
+ help();
161
+ return;
162
+ }
81
163
 
82
164
  switch (cmd) {
83
165
  case "i":
84
166
  case "install":
85
167
  case "bootstrap":
86
168
  case "update":
87
- case "init": {
88
- console.log(banner(pkg.version));
89
- console.log(info("Bootstrapping Neominimal Identity Engine…"));
90
- console.log(hr());
91
- await installDme({
92
- targets: flags.targets.length ? flags.targets : ["all"],
93
- dryRun: flags.dryRun,
94
- force: flags.force,
95
- cwdProject: !flags.noProject,
96
- });
169
+ case "init":
170
+ await doInstall(flags);
97
171
  break;
98
- }
172
+
173
+ case "scan":
174
+ case "detect":
175
+ scan();
176
+ break;
177
+
99
178
  case "doctor":
100
179
  case "status":
101
180
  case "check":
102
- console.log(banner(pkg.version));
103
181
  doctor();
104
182
  break;
183
+
105
184
  case "uninstall":
106
185
  case "remove":
107
- console.log(banner(pkg.version));
108
- uninstall();
186
+ uninstall({ all: flags.all });
187
+ break;
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
+
200
+ case "tui":
201
+ case "menu":
202
+ case "ui":
203
+ await runMainTui({
204
+ version: pkg.version,
205
+ onInstall: () => doInstall({ ...flags, targets: [] }),
206
+ onDoctor: () => doctor(),
207
+ onUninstall: () => uninstall({ all: flags.all }),
208
+ onScan: () => scan(),
209
+ });
109
210
  break;
211
+
110
212
  case "list":
111
213
  case "targets":
112
- console.log(banner(pkg.version));
214
+ console.log(asciiLogo("9.69"));
215
+ console.log(hr());
113
216
  for (const t of getTargets()) {
114
217
  console.log(
115
- ` ${c.yellow}${t.id.padEnd(14)}${c.reset} ${t.name}${t.optional ? c.dim + " (optional)" + c.reset : ""}`
218
+ ` ${c.brightYellow}${t.id.padEnd(14)}${c.reset} ${c.brightWhite}${t.name}${c.reset}`
116
219
  );
220
+ if (t.agentsMd) {
221
+ console.log(` ${"".padEnd(14)} ${c.dim}AGENTS → ${t.agentsMd}${c.reset}`);
222
+ }
117
223
  }
118
224
  console.log("");
119
225
  break;
226
+
120
227
  case "path":
121
228
  case "assets":
122
229
  console.log(path.join(__dirname, "..", "assets"));
123
230
  break;
231
+
124
232
  case "version":
125
233
  case "-v":
126
234
  case "--version":
127
235
  console.log(pkg.version);
128
236
  break;
237
+
129
238
  case "help":
130
239
  case "-h":
131
240
  case "--help":
241
+ help();
242
+ break;
243
+
132
244
  default:
133
- if (cmd !== "help" && cmd !== "-h" && cmd !== "--help") {
134
- console.log(fail(`Unknown command: ${cmd}`));
135
- }
245
+ console.log(fail(`Unknown command: ${cmd}`));
136
246
  help();
137
- process.exit(cmd === "help" || cmd === "-h" || cmd === "--help" ? 0 : 1);
247
+ process.exit(1);
138
248
  }
139
249
  }
140
250
 
141
251
  main().catch((e) => {
252
+ showCursor();
142
253
  console.error(fail(e?.stack || String(e)));
143
254
  process.exit(1);
144
255
  });
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "dme-agent",
3
- "version": "7.4.1",
4
- "description": "DME Agent 7.4 — Neominimal Identity Engine. Bootstrap design system prompts, skills & UX doctrine across Claude, Codex, Cursor, Zed, Grok, Windsurf and more.",
3
+ "version": "9.69.0",
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",
@@ -34,13 +34,18 @@
34
34
  "neominimal",
35
35
  "dashboard",
36
36
  "landing-page",
37
- "bootstrap"
37
+ "bootstrap",
38
+ "tui",
39
+ "motion",
40
+ "icons",
41
+ "electron",
42
+ "tauri"
38
43
  ],
39
44
  "author": "AnThophicous / brennoleondesouza",
40
45
  "license": "MIT",
41
46
  "repository": {
42
47
  "type": "git",
43
- "url": "https://github.com/brennoleondesouza/dme-agent"
48
+ "url": "git+https://github.com/brennoleondesouza/dme-agent.git"
44
49
  },
45
50
  "homepage": "https://www.npmjs.com/package/dme-agent",
46
51
  "engines": {