dme-agent 9.69.0 → 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.
|
@@ -1,19 +1,77 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: dme-app-shell
|
|
3
3
|
description: >
|
|
4
|
-
DME 9.69 desktop app shells
|
|
5
|
-
|
|
4
|
+
DME 9.69 desktop app shells for Electron, Tauri, hybrid. Minimal chrome,
|
|
5
|
+
richer motion than web, titlebar, command palette, peace gray ops UI.
|
|
6
|
+
Triggers: /dme-app-shell, electron UI, tauri UI, desktop shell, titlebar,
|
|
7
|
+
app layout, desktop dashboard chrome.
|
|
6
8
|
---
|
|
7
9
|
|
|
8
|
-
# DME App Shell 9.69
|
|
10
|
+
# DME App Shell 9.69 — Electron / Tauri
|
|
9
11
|
|
|
10
|
-
|
|
11
|
-
2. Custom titlebar + drag region; OS window controls zone
|
|
12
|
-
3. Left icon rail or full sidebar · content pane · optional inspector
|
|
13
|
-
4. Command palette > nested menus
|
|
14
|
-
5. No marketing hero inside the shell
|
|
15
|
-
6. Motion: subtle (sidebar width, panel opacity) — no bounce on chrome
|
|
16
|
-
7. shadcn: Sidebar, Menubar, Command, Tabs, Sheet, Tooltip
|
|
17
|
-
8. Tauri: lean DOM; prefer native dialogs/tray APIs
|
|
12
|
+
Desktop apps get **richer motion** and **tighter ops density** than marketing web — still peaceful, still minimal.
|
|
18
13
|
|
|
19
|
-
|
|
14
|
+
## Intake (if missing)
|
|
15
|
+
|
|
16
|
+
Platform: **electron** | **tauri** | hybrid · brand or peace gray · product work object
|
|
17
|
+
|
|
18
|
+
## Shell map
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
[ custom titlebar · drag region · window controls ]
|
|
22
|
+
[ icon rail or sidebar | main work surface | optional inspector ]
|
|
23
|
+
[ status / toast layer ]
|
|
24
|
+
[ command palette overlay ]
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Laws
|
|
28
|
+
|
|
29
|
+
1. **No marketing hero** inside authenticated shell
|
|
30
|
+
2. **Work object center** — table/queue/editor, not posters
|
|
31
|
+
3. **Command palette > deep nested menus**
|
|
32
|
+
4. Titlebar: drag region; don’t put critical actions only in OS menu
|
|
33
|
+
5. Peace gray default unless brand locked
|
|
34
|
+
6. shadcn for content controls; native dialogs/tray when OS-better (Tauri)
|
|
35
|
+
|
|
36
|
+
## Motion (app-rich, not clown)
|
|
37
|
+
|
|
38
|
+
| Surface | Recipe |
|
|
39
|
+
|---|---|
|
|
40
|
+
| Sidebar collapse | width + opacity · 200–280ms emphasized |
|
|
41
|
+
| Panel dock | cubicOut slide |
|
|
42
|
+
| Command palette | spring snappy scale/opacity |
|
|
43
|
+
| Route change | opacity + y 6–10 · optional layoutId title |
|
|
44
|
+
| Welcome first-run | use **/dme-welcome** craft (2–4 beats) |
|
|
45
|
+
| List hydrate | stagger 50–80ms easeOut |
|
|
46
|
+
|
|
47
|
+
Always honor `prefers-reduced-motion`.
|
|
48
|
+
|
|
49
|
+
## Icons
|
|
50
|
+
|
|
51
|
+
**system-rail** strategy: Lucide rail + labels on expand · tooltip when collapsed · active = surface weight
|
|
52
|
+
|
|
53
|
+
## shadcn map
|
|
54
|
+
|
|
55
|
+
`sidebar` · `menubar` · `command` · `tabs` · `sheet` · `dialog` · `tooltip` · `scroll-area` · `separator` · `button` · `input` · `table` · `badge` · `dropdown-menu` · `sonner`
|
|
56
|
+
|
|
57
|
+
## Electron / Tauri notes
|
|
58
|
+
|
|
59
|
+
| | |
|
|
60
|
+
|---|---|
|
|
61
|
+
| Electron | watch window controls spacing per OS; no double titlebar |
|
|
62
|
+
| Tauri | lean DOM; prefer native file/message dialogs when appropriate |
|
|
63
|
+
| Both | frameless + custom chrome must keep traffic lights / Win buttons usable |
|
|
64
|
+
|
|
65
|
+
## Web vs app split (hybrid)
|
|
66
|
+
|
|
67
|
+
- Public marketing routes → **web-calm** (/dme-landing)
|
|
68
|
+
- Desktop shell → **app-rich** (this skill)
|
|
69
|
+
Document split in decision brief.
|
|
70
|
+
|
|
71
|
+
## Deliver
|
|
72
|
+
|
|
73
|
+
1. Shell wireframe (text)
|
|
74
|
+
2. Motion density locks
|
|
75
|
+
3. Icon rail map
|
|
76
|
+
4. Compose shadcn + framer
|
|
77
|
+
5. Subtract chrome until work object breathes
|
|
@@ -1,21 +1,89 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: dme-icons
|
|
3
3
|
description: >
|
|
4
|
-
DME 9.69 icon
|
|
5
|
-
Triggers: /dme-icons,
|
|
4
|
+
DME 9.69 intelligent icon doctrine. Lucide/Phosphor/Radix with discipline —
|
|
5
|
+
recognition, nav, status — never decorative spam. Triggers: /dme-icons,
|
|
6
|
+
lucide, icon system, sidebar icons, toolbar icons, icon density.
|
|
6
7
|
---
|
|
7
8
|
|
|
8
|
-
# DME Icons 9.69
|
|
9
|
+
# DME Icons 9.69 — Intelligent, not spam
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
2. Size: **16/20px** dense UI · **24px** empty/hero only
|
|
12
|
-
3. Strategies:
|
|
13
|
-
- **none** — landings/editorial (type carries hierarchy)
|
|
14
|
-
- **sparse-functional** — action icons only
|
|
15
|
-
- **system-rail** — nav rail + toolbar, labels on expand
|
|
16
|
-
- **onboarding** — 1–3 step glyphs max
|
|
17
|
-
4. Icons label actions — never decorate paragraphs
|
|
18
|
-
5. No multicolor icon packs in product UI
|
|
19
|
-
6. Active = weight/bg, not rainbow recolor
|
|
11
|
+
Icons are **affordance and status**, not confetti.
|
|
20
12
|
|
|
21
|
-
|
|
13
|
+
## Law
|
|
14
|
+
|
|
15
|
+
If removing the icon loses **no** recognition and **no** faster scan → **remove it**.
|
|
16
|
+
|
|
17
|
+
## Stack
|
|
18
|
+
|
|
19
|
+
| Default | Also OK (pick one set per product) |
|
|
20
|
+
|---|---|
|
|
21
|
+
| **lucide-react** | Phosphor, Radix Icons |
|
|
22
|
+
|
|
23
|
+
Never mix 3 icon libraries on one surface. Never emoji as product chrome.
|
|
24
|
+
|
|
25
|
+
## Size & stroke
|
|
26
|
+
|
|
27
|
+
| Context | Size | Stroke |
|
|
28
|
+
|---|---|---|
|
|
29
|
+
| Dense table / meta | 14–16 | 1.5–2 |
|
|
30
|
+
| Nav / toolbar | 18–20 | 1.5–2 |
|
|
31
|
+
| Empty / welcome glyph | 24–32 | 1.5 |
|
|
32
|
+
| Marketing feature spam | **don’t** | — |
|
|
33
|
+
|
|
34
|
+
Align to text cap-height. Optical center in hit targets ≥44px mobile.
|
|
35
|
+
|
|
36
|
+
## Strategies (pick one per surface)
|
|
37
|
+
|
|
38
|
+
| Strategy | When | Rules |
|
|
39
|
+
|---|---|---|
|
|
40
|
+
| **none** | editorial landing, manifesto | type carries hierarchy |
|
|
41
|
+
| **sparse-functional** | most product UI | icons only on actions / destructive / search / close |
|
|
42
|
+
| **system-rail** | app sidebar / Electron shell | icon rail + labels on expand; active = bg/weight not rainbow |
|
|
43
|
+
| **status-system** | dashboards | Badge + optional icon; color never sole channel |
|
|
44
|
+
| **onboarding** | welcome steps | **1–3** glyphs total for whole flow |
|
|
45
|
+
|
|
46
|
+
## Where icons earn space
|
|
47
|
+
|
|
48
|
+
- Navigation items (with labels, or tooltip if collapsed rail)
|
|
49
|
+
- Primary/secondary actions when verb is faster with symbol (Search, Settings, Close)
|
|
50
|
+
- Status: success / warning / error / offline (pair with text)
|
|
51
|
+
- Empty state: **one** quiet glyph max
|
|
52
|
+
- Input affordances: show/hide password, clear, calendar
|
|
53
|
+
|
|
54
|
+
## Where icons are crime
|
|
55
|
+
|
|
56
|
+
- Every feature card with a different colorful glyph + essay
|
|
57
|
+
- Icon beside every H2 “for polish”
|
|
58
|
+
- Random multicolor packs
|
|
59
|
+
- Icon-only mystery meat for non-universal actions
|
|
60
|
+
- Animated spinning icons for no reason
|
|
61
|
+
|
|
62
|
+
## Pairing rules
|
|
63
|
+
|
|
64
|
+
| Case | Rule |
|
|
65
|
+
|---|---|
|
|
66
|
+
| Nav | icon + label (collapsed: icon + tooltip) |
|
|
67
|
+
| Button | icon optional left of verb |
|
|
68
|
+
| Table row action | icon-only OK if universal + aria-label |
|
|
69
|
+
| Marketing | prefer zero or one mark, not six |
|
|
70
|
+
|
|
71
|
+
## Compose with shadcn
|
|
72
|
+
|
|
73
|
+
```tsx
|
|
74
|
+
import { Search, Plus, ChevronRight } from "lucide-react"
|
|
75
|
+
import { Button } from "@/components/ui/button"
|
|
76
|
+
// Button size icon + aria-label for icon-only
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Active nav: `bg-zinc-100 dark:bg-zinc-800` + weight — not recoloring the SVG to 5 brand hues.
|
|
80
|
+
|
|
81
|
+
## Deliver
|
|
82
|
+
|
|
83
|
+
1. Strategy name
|
|
84
|
+
2. Icon map (nav / actions / status)
|
|
85
|
+
3. Size tokens
|
|
86
|
+
4. Implement with lucide + shadcn
|
|
87
|
+
5. Run spam test: strip half — if clearer, keep stripped
|
|
88
|
+
|
|
89
|
+
Full doctrine: `assets/references/icon-doctrine.md`
|
|
@@ -1,19 +1,111 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: dme-motion
|
|
3
3
|
description: >
|
|
4
|
-
DME 9.69 motion
|
|
5
|
-
|
|
4
|
+
DME 9.69 Absolute motion craft. Framer Motion, cubic-bezier graphs, springs,
|
|
5
|
+
platform density (web calm / Electron-Tauri rich), reduced-motion law.
|
|
6
|
+
Triggers: /dme-motion, framer-motion, keyframes, cubic-out, easing, spring,
|
|
7
|
+
animate UI, page transition, stagger, prefers-reduced-motion.
|
|
6
8
|
---
|
|
7
9
|
|
|
8
|
-
# DME Motion 9.69
|
|
10
|
+
# DME Motion 9.69 — Absolute
|
|
9
11
|
|
|
10
|
-
|
|
11
|
-
2. Duration: **120–250ms**; stagger children **40–80ms**
|
|
12
|
-
3. Easing: ease-out / `cubic-bezier(0.22, 1, 0.36, 1)`
|
|
13
|
-
4. Landing: hero once (opacity + y 12→0); sections once-in-view
|
|
14
|
-
5. Dashboard: state feedback only; dialog/sheet 150ms
|
|
15
|
-
6. Onboarding: step crossfade ≤200ms; ≤3 steps
|
|
16
|
-
7. Always honor `prefers-reduced-motion`
|
|
17
|
-
8. Banned: particles, mesh morph loops, typing forever, bounce spam
|
|
12
|
+
Motion is **craft**, not confetti. Peace aesthetic: soft landings, clear intent, no carnival.
|
|
18
13
|
|
|
19
|
-
|
|
14
|
+
## 0. Resolve density first
|
|
15
|
+
|
|
16
|
+
| Platform | Density | Allowed |
|
|
17
|
+
|---|---|---|
|
|
18
|
+
| **Web** | calmer | functional UI + **one** hero beat; light stagger 40–60ms |
|
|
19
|
+
| **Mobile web** | minimal | opacity / short crossfade; no heavy shared-element |
|
|
20
|
+
| **Electron / Tauri** | richer | welcome choreography, layoutId, spring chrome, route transitions |
|
|
21
|
+
| **prefers-reduced-motion** | hard cut | ≤80ms opacity or instant; kill travel/parallax/spring travel |
|
|
22
|
+
|
|
23
|
+
## 1. Easing graphs (abuse these — vary by intent)
|
|
24
|
+
|
|
25
|
+
| Token | cubic-bezier | Use |
|
|
26
|
+
|---|---|---|
|
|
27
|
+
| **easeOut** | `0.16, 1, 0.3, 1` | entrances (default) |
|
|
28
|
+
| **easeIn** | `0.55, 0, 1, 0.45` | exits |
|
|
29
|
+
| **easeInOut** | `0.65, 0, 0.35, 1` | reposition on-screen |
|
|
30
|
+
| **cubicOut** | `0.33, 1, 0.68, 1` | sheets, drawers, soft panels |
|
|
31
|
+
| **expoOut** | `0.16, 1, 0.3, 1` | premium hero / desktop reveal |
|
|
32
|
+
| **emphasized** | `0.2, 0, 0, 1` | settle after drag / material |
|
|
33
|
+
|
|
34
|
+
```css
|
|
35
|
+
--ease-out: cubic-bezier(0.16, 1, 0.3, 1);
|
|
36
|
+
--ease-cubic-out: cubic-bezier(0.33, 1, 0.68, 1);
|
|
37
|
+
--ease-emphasized: cubic-bezier(0.2, 0, 0, 1);
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## 2. Springs (Framer / motion)
|
|
41
|
+
|
|
42
|
+
| Token | stiffness | damping | mass | Use |
|
|
43
|
+
|---|---|---|---|---|
|
|
44
|
+
| soft | 280 | 24 | 0.8 | press, icon toggle |
|
|
45
|
+
| snappy | 400 | 30 | 0.6 | command palette, tab indicator |
|
|
46
|
+
| gentle | 120 | 20 | 1.0 | welcome, large panels (desktop) |
|
|
47
|
+
| stiff | 500 | 40 | 0.5 | dense tools |
|
|
48
|
+
|
|
49
|
+
```tsx
|
|
50
|
+
const easeOut = [0.16, 1, 0.3, 1] as const
|
|
51
|
+
const springSnappy = { type: "spring", stiffness: 400, damping: 30, mass: 0.6 }
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## 3. Duration bands
|
|
55
|
+
|
|
56
|
+
| Band | ms |
|
|
57
|
+
|---|---|
|
|
58
|
+
| feedback | 80–120 |
|
|
59
|
+
| functional | 150–250 |
|
|
60
|
+
| panel | 220–380 |
|
|
61
|
+
| page / welcome | 300–600 |
|
|
62
|
+
| hard cap | ≤800 continuous |
|
|
63
|
+
|
|
64
|
+
## 4. First-class tools
|
|
65
|
+
|
|
66
|
+
1. **framer-motion** / **motion/react** — layout, AnimatePresence, layoutId, springs
|
|
67
|
+
2. **CSS transition / @keyframes** — micro states when lighter
|
|
68
|
+
3. **WAAPI** — one-offs without React weight
|
|
69
|
+
|
|
70
|
+
## 5. Pattern recipes
|
|
71
|
+
|
|
72
|
+
**List enter (web/app)**
|
|
73
|
+
`staggerChildren: 0.05` · child `y: 8 → 0` + opacity · easeOut 200–280ms
|
|
74
|
+
|
|
75
|
+
**Sheet**
|
|
76
|
+
`y` or `x` + opacity · cubicOut 280–360ms · backdrop fade easeOut
|
|
77
|
+
|
|
78
|
+
**Dialog**
|
|
79
|
+
scale `0.98 → 1` + opacity · **no bounce**
|
|
80
|
+
|
|
81
|
+
**Tab indicator**
|
|
82
|
+
`layoutId` + spring snappy
|
|
83
|
+
|
|
84
|
+
**Button press**
|
|
85
|
+
scale `0.98` spring soft
|
|
86
|
+
|
|
87
|
+
**Welcome (desktop)**
|
|
88
|
+
2–4 beats max: mark → title → body → CTA · then **stillness**
|
|
89
|
+
|
|
90
|
+
**Route (desktop)**
|
|
91
|
+
opacity + slight y; optional shared layout title
|
|
92
|
+
|
|
93
|
+
## 6. Gray / white motion taste
|
|
94
|
+
|
|
95
|
+
- Prefer opacity + small translation (4–12px) over loud scale
|
|
96
|
+
- Shadows only on overlays; animate opacity of overlay not neon glow
|
|
97
|
+
- Gradients: soft zinc washes, slow optional desktop ambient — never mesh carnival
|
|
98
|
+
|
|
99
|
+
## 7. Banned
|
|
100
|
+
|
|
101
|
+
particles · blob morph loops · mesh storms · infinite typing hero · bounce on ops dashboards · same fade on every node · parallax fighting scroll
|
|
102
|
+
|
|
103
|
+
## 8. Deliver
|
|
104
|
+
|
|
105
|
+
1. Density label (web-calm | app-rich | reduced)
|
|
106
|
+
2. Easing map used
|
|
107
|
+
3. Framer/CSS snippets
|
|
108
|
+
4. Implement
|
|
109
|
+
5. Subtract excess motion
|
|
110
|
+
|
|
111
|
+
Full bible: package `assets/references/motion-bible.md` when present.
|
|
@@ -1,20 +1,87 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: dme-welcome
|
|
3
3
|
description: >
|
|
4
|
-
DME 9.69 onboarding
|
|
5
|
-
|
|
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.
|
|
6
7
|
---
|
|
7
8
|
|
|
8
|
-
# DME Welcome 9.69
|
|
9
|
+
# DME Welcome 9.69 — Craft sequence
|
|
9
10
|
|
|
10
|
-
|
|
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
|
|
11
|
+
Welcome is a **first-run craft piece**, not a fake “hello!” every login.
|
|
17
12
|
|
|
18
|
-
|
|
13
|
+
## When to build
|
|
19
14
|
|
|
20
|
-
|
|
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/package.json
CHANGED
package/src/install.mjs
CHANGED
|
@@ -27,7 +27,7 @@ import { agentsConflictPromptInline, multiSelect, printScanTable } from "./tui.m
|
|
|
27
27
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
28
28
|
const PKG_ROOT = path.resolve(__dirname, "..");
|
|
29
29
|
const ASSETS = path.join(PKG_ROOT, "assets");
|
|
30
|
-
const VERSION = "9.69.
|
|
30
|
+
const VERSION = "9.69.1";
|
|
31
31
|
const VERSION_SHORT = "9.69";
|
|
32
32
|
const MARKER_BEGIN = "<!-- DME-AGENT-9.69 BEGIN -->";
|
|
33
33
|
const MARKER_END = "<!-- DME-AGENT-9.69 END -->";
|