@lenne.tech/cli 1.10.0 → 1.11.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.
@@ -0,0 +1,972 @@
1
+ # lenne.tech Fullstack Ecosystem: CLI & lt-dev Plugin
2
+
3
+ Comprehensive reference for the `lt` CLI and the `lt-dev` Claude Code plugin, with focus on **vendor-mode workflows** for `@lenne.tech/nest-server` and `@lenne.tech/nuxt-extensions`.
4
+
5
+ ---
6
+
7
+ ## Table of Contents
8
+
9
+ - [Overview](#overview)
10
+ - [Architecture Diagram](#architecture-diagram)
11
+ - [lt CLI — Features](#lt-cli--features)
12
+ - [Project Scaffolding](#project-scaffolding)
13
+ - [Server Development](#server-development)
14
+ - [Frontend Development](#frontend-development)
15
+ - [Fullstack Workflows](#fullstack-workflows)
16
+ - [Vendor-Mode Conversion](#vendor-mode-conversion)
17
+ - [Status & Diagnostics](#status--diagnostics)
18
+ - [Additional Tools](#additional-tools)
19
+ - [lt-dev Plugin — Features](#lt-dev-plugin--features)
20
+ - [Commands](#commands)
21
+ - [Autonomous Agents](#autonomous-agents)
22
+ - [Skills (Knowledge Base)](#skills-knowledge-base)
23
+ - [Vendor-Mode Processes](#vendor-mode-processes)
24
+ - [1. Create a new project in vendor mode](#1-create-a-new-project-in-vendor-mode)
25
+ - [2. Backend: convert npm → vendor](#2-backend-convert-npm--vendor)
26
+ - [3. Frontend: convert npm → vendor](#3-frontend-convert-npm--vendor)
27
+ - [4. Backend: vendor → npm rollback](#4-backend-vendor--npm-rollback)
28
+ - [5. Frontend: vendor → npm rollback](#5-frontend-vendor--npm-rollback)
29
+ - [6. Update workflows](#6-update-workflows)
30
+ - [7. Upstream contribution](#7-upstream-contribution)
31
+ - [Decision Matrix](#decision-matrix)
32
+ - [Glossary](#glossary)
33
+
34
+ ---
35
+
36
+ ## Overview
37
+
38
+ The lenne.tech ecosystem consists of two complementary tools:
39
+
40
+ - **`lt CLI`** (`@lenne.tech/cli`) — Terminal tool for scaffolding, code generation, status, and mode conversion
41
+ - **`lt-dev` Plugin** — Claude Code plugin providing commands, autonomous agents, and skills for intelligent development workflows
42
+
43
+ Both tools support the **vendor mode** as a pilot for `@lenne.tech/nest-server` (backend) and `@lenne.tech/nuxt-extensions` (frontend). In vendor mode, the framework code is copied directly into the project as source code under `src/core/` (backend) or `app/core/` (frontend) — without an npm dependency.
44
+
45
+ ---
46
+
47
+ ## Architecture Diagram
48
+
49
+ ```
50
+ ┌─────────────────────────────────────────────────────────────────────┐
51
+ │ Developer / Claude Code │
52
+ └─────────┬────────────────────────────────────────────────┬──────────┘
53
+ │ │
54
+ │ Terminal │ Slash commands
55
+ ▼ ▼
56
+ ┌──────────────────────┐ ┌────────────────────────┐
57
+ │ lt CLI │ │ lt-dev Plugin │
58
+ │ │ │ │
59
+ │ • Scaffolding │ │ • Commands │
60
+ │ • Mode conversion │◄─── invoked by ──────┤ • Agents │
61
+ │ • Code generation │ │ • Skills │
62
+ │ • Status/diagnosis │ │ │
63
+ └──────────┬───────────┘ └────────────┬───────────┘
64
+ │ │
65
+ │ writes to │ operates on
66
+ ▼ ▼
67
+ ┌─────────────────────────────────────────────────────────────────────┐
68
+ │ Fullstack Project │
69
+ │ │
70
+ │ projects/api (Backend — NestJS) projects/app (Frontend) │
71
+ │ ├── npm mode: @lenne.tech/nest-server ├── npm mode: @lenne.tech/ │
72
+ │ │ in package.json │ nuxt-extensions │
73
+ │ └── vendor mode: src/core/ + VENDOR.md └── vendor mode: app/core/ │
74
+ │ + VENDOR.md │
75
+ └─────────────────────────────────────────────────────────────────────┘
76
+ ▲ ▲
77
+ │ syncs from │ syncs from
78
+ │ │
79
+ ┌──────────┴──────────────┐ ┌───────────┴────────────┐
80
+ │ github.com/lenneTech/ │ │ github.com/lenneTech/ │
81
+ │ nest-server │ │ nuxt-extensions │
82
+ │ nest-server-starter │ │ nuxt-base-starter │
83
+ └─────────────────────────┘ └────────────────────────┘
84
+ ```
85
+
86
+ ---
87
+
88
+ ## lt CLI — Features
89
+
90
+ ### Project Scaffolding
91
+
92
+ | Command | Purpose |
93
+ |---------|---------|
94
+ | `lt fullstack init` | Create a new monorepo with API + frontend. Supports npm and vendor mode for both sides |
95
+ | `lt frontend nuxt` | Standalone Nuxt 4 project from `nuxt-base-starter` |
96
+ | `lt frontend angular` | Standalone Angular project from `ng-base-starter` |
97
+ | `lt server create` | Standalone NestJS project from `nest-server-starter` |
98
+ | `lt starter chrome-extension` | Chrome extension starter |
99
+ | `lt cli create` | New CLI project via Gluegun |
100
+ | `lt typescript create` | TypeScript library starter |
101
+
102
+ **Fullstack init with vendor modes:**
103
+
104
+ ```bash
105
+ lt fullstack init \
106
+ --name my-project \
107
+ --frontend nuxt \
108
+ --api-mode Rest \
109
+ --framework-mode vendor \
110
+ --frontend-framework-mode vendor \
111
+ --framework-upstream-branch 11.24.3 \
112
+ --noConfirm
113
+ ```
114
+
115
+ Flags:
116
+ - `--framework-mode npm|vendor` — Backend mode
117
+ - `--frontend-framework-mode npm|vendor` — Frontend mode
118
+ - `--framework-upstream-branch <tag>` — Specific nest-server version for vendor
119
+ - `--dry-run` — Show plan without making changes
120
+
121
+ ---
122
+
123
+ ### Server Development
124
+
125
+ | Command | Purpose |
126
+ |---------|---------|
127
+ | `lt server module` | Generate a NestJS module (model, service, controller, resolver, tests) |
128
+ | `lt server object` | Generate an input/output type |
129
+ | `lt server add-property` | Add a property to an existing module |
130
+ | `lt server test` | Generate E2E tests for a module |
131
+ | `lt server permissions` | Analyze all `@Roles`/`@Restricted` decorators, generate report (md/json/html) |
132
+ | `lt server create-secret` | Generate secure secrets for `.env` |
133
+ | `lt server set-secrets` | Set secrets in the project |
134
+ | **`lt server convert-mode`** | **Convert backend between npm and vendor mode** |
135
+
136
+ All code generators are **mode-aware**: In vendor mode they use relative paths to `src/core/`; in npm mode they use the bare specifier `@lenne.tech/nest-server`.
137
+
138
+ ---
139
+
140
+ ### Frontend Development
141
+
142
+ | Command | Purpose |
143
+ |---------|---------|
144
+ | `lt frontend nuxt` | Create Nuxt project from starter |
145
+ | `lt frontend angular` | Create Angular project from starter |
146
+ | **`lt frontend convert-mode`** | **Convert frontend between npm and vendor mode** |
147
+
148
+ ---
149
+
150
+ ### Fullstack Workflows
151
+
152
+ | Command | Purpose |
153
+ |---------|---------|
154
+ | `lt fullstack init` | Create fullstack monorepo (see above) |
155
+ | `lt fullstack update` | Show mode-specific update instructions for backend AND frontend |
156
+ | **`lt fullstack convert-mode`** | **Convert backend AND frontend between npm and vendor mode in a single command** |
157
+
158
+ **Fullstack mode conversion in one command:**
159
+
160
+ ```bash
161
+ # Both subprojects to vendor mode
162
+ lt fullstack convert-mode --to vendor --noConfirm
163
+
164
+ # With specific upstream versions
165
+ lt fullstack convert-mode --to vendor \
166
+ --framework-upstream-branch 11.24.3 \
167
+ --frontend-framework-upstream-branch 1.5.3 \
168
+ --noConfirm
169
+
170
+ # Both back to npm
171
+ lt fullstack convert-mode --to npm --noConfirm
172
+
173
+ # Only convert backend
174
+ lt fullstack convert-mode --to vendor --skip-frontend --noConfirm
175
+
176
+ # Only convert frontend
177
+ lt fullstack convert-mode --to vendor --skip-backend --noConfirm
178
+
179
+ # Dry-run (plan without changes)
180
+ lt fullstack convert-mode --to vendor --dry-run
181
+ ```
182
+
183
+ The command automatically locates `projects/api/` and `projects/app/` (or `packages/api` / `packages/app`), detects the current modes, shows a plan, and then orchestrates the conversion of both sides using the appropriate helper methods.
184
+
185
+ ---
186
+
187
+ ### Vendor-Mode Conversion
188
+
189
+ **Backend**: `lt server convert-mode`
190
+
191
+ ```bash
192
+ # npm → vendor
193
+ cd projects/api
194
+ lt server convert-mode --to vendor --upstream-branch 11.24.3 --noConfirm
195
+
196
+ # vendor → npm
197
+ lt server convert-mode --to npm --version 11.24.3 --noConfirm
198
+
199
+ # Dry-run (plan without changes)
200
+ lt server convert-mode --to vendor --dry-run
201
+ ```
202
+
203
+ **Frontend**: `lt frontend convert-mode`
204
+
205
+ ```bash
206
+ # npm → vendor
207
+ cd projects/app
208
+ lt frontend convert-mode --to vendor --upstream-branch 1.5.3 --noConfirm
209
+
210
+ # vendor → npm
211
+ lt frontend convert-mode --to npm --version 1.5.3 --noConfirm
212
+
213
+ # Dry-run
214
+ lt frontend convert-mode --to vendor --dry-run
215
+ ```
216
+
217
+ Both commands clone the respective upstream repo into `/tmp/`, perform the code transformation, and clean up at the end. **No local paths** are required.
218
+
219
+ ---
220
+
221
+ ### Status & Diagnostics
222
+
223
+ | Command | Purpose |
224
+ |---------|---------|
225
+ | `lt status` | Shows project type, framework mode (backend + frontend), config, git branch, versions. At the monorepo root, both subprojects are automatically scanned |
226
+ | `lt doctor` | Checks environment, versions, dependencies |
227
+ | `lt history` | Shows CLI command history |
228
+
229
+ **Example at the monorepo root:**
230
+
231
+ ```
232
+ Monorepo Subprojects:
233
+ Backend: projects/api → vendor (src/core/, VENDOR.md)
234
+ Frontend: projects/app → vendor (app/core/, VENDOR.md)
235
+ ```
236
+
237
+ ---
238
+
239
+ ### Additional Tools
240
+
241
+ | Area | Commands |
242
+ |------|----------|
243
+ | **Config** | `lt config init`, `lt config validate`, `lt config show`, `lt config help` |
244
+ | **Git** | `lt git create`, `git get`, `git update`, `git clean`, `git squash`, `git rebase`, `git rename`, `git reset`, `git undo`, `git clear`, `git force-pull` |
245
+ | **NPM** | `lt npm reinit` |
246
+ | **MongoDB** | `lt mongodb collection-export`, `mongodb s3-restore` |
247
+ | **Qdrant** | `lt qdrant stats`, `qdrant delete` |
248
+ | **Directus** | `lt directus docker-setup`, `directus typegen`, `directus remove` |
249
+ | **Deployment** | `lt deployment create` (GitHub/GitLab pipelines) |
250
+ | **Blocks/Components** | `lt blocks add`, `lt components add` |
251
+ | **Tools** | `lt tools regex`, `tools sha256`, `tools jwt-read`, `tools crypt`, `tools install-scripts` |
252
+ | **Docs** | `lt docs open` |
253
+ | **Claude** | `lt claude shortcuts`, `lt claude plugins` |
254
+ | **Templates** | `lt templates llm` |
255
+
256
+ ---
257
+
258
+ ## lt-dev Plugin — Features
259
+
260
+ The `lt-dev` Claude Code plugin provides **Commands** (user-invocable), **Agents** (autonomous execution), and **Skills** (knowledge bases).
261
+
262
+ ### Commands
263
+
264
+ #### Backend
265
+
266
+ | Command | Purpose |
267
+ |---------|---------|
268
+ | `/lt-dev:backend:update-nest-server` | Update `@lenne.tech/nest-server` in npm mode with migration guides |
269
+ | `/lt-dev:backend:update-nest-server-core` | Sync vendored `src/core/` with upstream (vendor mode) |
270
+ | `/lt-dev:backend:convert-to-vendor` | Convert existing project from npm → vendor (incl. migration guides) |
271
+ | `/lt-dev:backend:convert-to-npm` | Convert vendored project back to npm |
272
+ | `/lt-dev:backend:contribute-nest-server-core` | Prepare local patches as upstream PR for nest-server |
273
+ | `/lt-dev:backend:sec-audit` | Security audit of backend code |
274
+ | `/lt-dev:backend:sec-review` | Security review of a specific code area |
275
+ | `/lt-dev:backend:test-generate` | Generate E2E tests |
276
+ | `/lt-dev:backend:code-cleanup` | Clean up code (imports, formatting) |
277
+
278
+ #### Frontend
279
+
280
+ | Command | Purpose |
281
+ |---------|---------|
282
+ | `/lt-dev:frontend:update-nuxt-extensions-core` | Sync vendored `app/core/` with upstream |
283
+ | `/lt-dev:frontend:convert-to-vendor` | Convert frontend project from npm → vendor |
284
+ | `/lt-dev:frontend:convert-to-npm` | Convert vendored frontend back to npm |
285
+ | `/lt-dev:frontend:contribute-nuxt-extensions-core` | Prepare local patches as upstream PR for nuxt-extensions |
286
+ | `/lt-dev:frontend:figma-init` | Initialize Figma Code Connect setup |
287
+ | `/lt-dev:frontend:figma-research` | Analyze Figma designs for implementation |
288
+ | `/lt-dev:frontend:figma-to-code` | Translate Figma design into Vue/Nuxt code |
289
+ | `/lt-dev:frontend:env-migrate` | Migrate `.env` from old standards |
290
+ | `/lt-dev:frontend:init-conventions` | Initialize frontend conventions |
291
+
292
+ #### Fullstack
293
+
294
+ | Command | Purpose |
295
+ |---------|---------|
296
+ | **`/lt-dev:fullstack:update-all`** | **Comprehensive update**: backend + frontend (mode-aware) + package maintenance + CLAUDE.md sync + validation |
297
+ | `/lt-dev:fullstack:update` | Simple backend + frontend update (legacy, less comprehensive) |
298
+ | `/lt-dev:fullstack:sync-claude-md` | Sync `CLAUDE.md` from upstream starter templates |
299
+
300
+ #### Maintenance
301
+
302
+ | Command | Purpose |
303
+ |---------|---------|
304
+ | `/lt-dev:maintenance:maintain` | FULL MODE: package update + audit + security + deduplication |
305
+ | `/lt-dev:maintenance:maintain-check` | DRY-RUN: analysis without changes |
306
+ | `/lt-dev:maintenance:maintain-security` | Security patches only |
307
+ | `/lt-dev:maintenance:maintain-pre-release` | Conservative patch-only before release |
308
+ | `/lt-dev:maintenance:maintain-post-feature` | Post-feature cleanup |
309
+
310
+ #### Git
311
+
312
+ | Command | Purpose |
313
+ |---------|---------|
314
+ | `/lt-dev:git:commit-message` | Generate conventional commit message from staging |
315
+ | `/lt-dev:git:create-request` | Create merge request with descriptive body |
316
+ | `/lt-dev:git:mr-description` | Generate MR description from commits |
317
+ | `/lt-dev:git:mr-description-clipboard` | Same, copied to clipboard |
318
+ | `/lt-dev:git:rebase` | Rebase onto development branch with conflict resolution |
319
+ | `/lt-dev:git:rebase-mrs` | Rebase multiple MRs sequentially |
320
+
321
+ #### Docker
322
+
323
+ | Command | Purpose |
324
+ |---------|---------|
325
+ | `/lt-dev:docker:gen-setup` | Generate Docker configuration (Dockerfile + compose + .env) |
326
+
327
+ #### Plugin
328
+
329
+ | Command | Purpose |
330
+ |---------|---------|
331
+ | `/lt-dev:plugin:check` | Validate the plugin setup after context loss |
332
+ | `/lt-dev:plugin:element` | Interactive creation of new plugin elements |
333
+
334
+ #### Vibe (Spec-Driven Development)
335
+
336
+ | Command | Purpose |
337
+ |---------|---------|
338
+ | `/lt-dev:vibe:plan` | Create implementation plan from requirement |
339
+ | `/lt-dev:vibe:build` | Implement according to plan |
340
+ | `/lt-dev:vibe:build-plan` | Plan + build in one flow |
341
+
342
+ #### Standalone
343
+
344
+ | Command | Purpose |
345
+ |---------|---------|
346
+ | `/lt-dev:debug` | Structured debugging session |
347
+ | `/lt-dev:review` | Code review with multiple reviewer perspectives |
348
+ | `/lt-dev:refactor-frontend` | Frontend refactoring helper |
349
+ | `/lt-dev:resolve-ticket` | Implement Linear ticket |
350
+ | `/lt-dev:create-ticket` | Create Linear ticket |
351
+ | `/lt-dev:create-story` | Create user story (German) |
352
+ | `/lt-dev:create-task` | Create Linear task |
353
+ | `/lt-dev:create-bug` | Create Linear bug |
354
+ | `/lt-dev:linear-comment` | Create Linear comment |
355
+ | `/lt-dev:dev-submit` | Dev-submit workflow (commit + push + MR) |
356
+ | `/lt-dev:interview` | Structured interview for requirements |
357
+ | `/lt-dev:skill-optimize` | Optimize a plugin skill |
358
+ | `/lt-dev:spec-to-tasks` | Spec → task list |
359
+
360
+ ---
361
+
362
+ ### Autonomous Agents
363
+
364
+ Autonomous agents perform multi-step tasks without interaction. They are spawned via commands or the Agent tool.
365
+
366
+ #### Vendor-Mode Agents
367
+
368
+ | Agent | Purpose | Spawned by |
369
+ |-------|---------|------------|
370
+ | `vendor-mode-converter` | Backend npm → vendor conversion incl. migration guides | `/lt-dev:backend:convert-to-vendor` |
371
+ | `vendor-mode-converter-frontend` | Frontend npm → vendor conversion incl. changelog | `/lt-dev:frontend:convert-to-vendor` |
372
+ | `nest-server-core-updater` | Upstream sync for vendored nest-server core | `/lt-dev:backend:update-nest-server-core` |
373
+ | `nuxt-extensions-core-updater` | Upstream sync for vendored nuxt-extensions core | `/lt-dev:frontend:update-nuxt-extensions-core` |
374
+ | `nest-server-core-contributor` | Upstream PR drafts from local backend patches | `/lt-dev:backend:contribute-nest-server-core` |
375
+ | `nuxt-extensions-core-contributor` | Upstream PR drafts from local frontend patches | `/lt-dev:frontend:contribute-nuxt-extensions-core` |
376
+
377
+ #### Update Agents
378
+
379
+ | Agent | Purpose |
380
+ |-------|---------|
381
+ | `nest-server-updater` | npm-mode update of nest-server incl. migration guides |
382
+ | `fullstack-updater` | Coordinated backend + frontend update (legacy) |
383
+ | `npm-package-maintainer` | Package optimization (5 modes) |
384
+ | `branch-rebaser` | Rebase automation with conflict resolution |
385
+
386
+ #### Development Agents
387
+
388
+ | Agent | Purpose |
389
+ |-------|---------|
390
+ | `backend-dev` | Autonomous NestJS development |
391
+ | `frontend-dev` | Autonomous Nuxt 4 development |
392
+ | `architect` | Architecture planning with stack enforcement |
393
+ | `devops` | Docker, CI/CD, environment |
394
+
395
+ #### Reviewer Agents
396
+
397
+ | Agent | Purpose |
398
+ |-------|---------|
399
+ | `code-reviewer` | 6-dimension code review |
400
+ | `backend-reviewer` | NestJS-specific |
401
+ | `frontend-reviewer` | Vue/Nuxt-specific |
402
+ | `security-reviewer` | OWASP-aligned |
403
+ | `a11y-reviewer` | Accessibility + Lighthouse |
404
+ | `ux-reviewer` | UX patterns |
405
+ | `performance-reviewer` | Bundle, queries, caching |
406
+ | `devops-reviewer` | Docker, CI/CD security |
407
+ | `docs-reviewer` | README, JSDoc, migration guides |
408
+ | `test-reviewer` | Test coverage + quality |
409
+
410
+ ---
411
+
412
+ ### Skills (Knowledge Base)
413
+
414
+ Skills contain structured knowledge and are automatically activated on matching queries.
415
+
416
+ | Skill | Purpose |
417
+ |-------|---------|
418
+ | **`nest-server-core-vendoring`** | Backend vendoring pattern, flatten-fix, sync workflows |
419
+ | **`nuxt-extensions-core-vendoring`** | Frontend vendoring pattern, nuxt.config rewrite, sync |
420
+ | `nest-server-updating` | npm-mode update processes, migration guides, error patterns |
421
+ | `generating-nest-servers` | Generate NestJS modules/services/controllers |
422
+ | `developing-lt-frontend` | Nuxt 4 development, composables, forms, auth |
423
+ | `maintaining-npm-packages` | Dependency optimization (5 modes) |
424
+ | `using-lt-cli` | lt CLI reference, conventions |
425
+ | `developing-claude-plugins` | Plugin development (skills, commands, agents) |
426
+ | `coordinating-agent-teams` | Agent team coordination, parallelism |
427
+ | `building-stories-with-tdd` | TDD workflow for user stories |
428
+ | `rebasing-branches` | Rebase strategies with conflict resolution |
429
+ | `general-frontend-security` | OWASP frontend security |
430
+
431
+ ---
432
+
433
+ ## Vendor-Mode Processes
434
+
435
+ ### 1. Create a new project in vendor mode
436
+
437
+ ```
438
+ ┌────────────────────────────────────────────────────────────────┐
439
+ │ DEVELOPER │
440
+ │ │
441
+ │ lt fullstack init │
442
+ │ --name my-project │
443
+ │ --frontend nuxt │
444
+ │ --api-mode Rest │
445
+ │ --framework-mode vendor ← Backend vendored │
446
+ │ --frontend-framework-mode vendor ← Frontend vendored │
447
+ │ --framework-upstream-branch 11.24.3 │
448
+ │ --noConfirm │
449
+ │ │
450
+ └───────────────────────┬────────────────────────────────────────┘
451
+
452
+
453
+ ┌────────────────────────────────────────────────────────────────┐
454
+ │ lt CLI performs: │
455
+ │ │
456
+ │ 1. git clone lt-monorepo │
457
+ │ 2. setup frontend (nuxt-base-starter) │
458
+ │ 3. setup backend (nest-server-starter) │
459
+ │ 4. convertCloneToVendored (backend): │
460
+ │ - clone nest-server 11.24.3 → /tmp │
461
+ │ - copy src/core/, index.ts, core.module.ts, etc. │
462
+ │ - apply flatten-fix (4 edge cases) │
463
+ │ - rewrite consumer imports (@lenne.tech/nest-server → ../) │
464
+ │ - merge upstream deps dynamically │
465
+ │ - apply express type-imports fix │
466
+ │ - create src/core/VENDOR.md │
467
+ │ - prepend vendor notice to CLAUDE.md │
468
+ │ 5. convertAppCloneToVendored (frontend): │
469
+ │ - clone nuxt-extensions 1.5.3 → /tmp │
470
+ │ - copy src/module.ts + src/runtime/ │
471
+ │ - rewrite nuxt.config.ts modules[] entry │
472
+ │ - rewrite consumer imports (4 files) │
473
+ │ - remove @lenne.tech/nuxt-extensions dep │
474
+ │ - create app/core/VENDOR.md │
475
+ │ - prepend vendor notice to CLAUDE.md │
476
+ │ 6. pnpm install (monorepo) │
477
+ │ 7. git init + initial commit │
478
+ │ │
479
+ └────────────────────────────────────────────────────────────────┘
480
+
481
+
482
+ ┌────────────────────────────────────────────────────────────────┐
483
+ │ PROJECT READY │
484
+ │ │
485
+ │ my-project/ │
486
+ │ ├── projects/ │
487
+ │ │ ├── api/ │
488
+ │ │ │ ├── src/ │
489
+ │ │ │ │ ├── core/ ← Vendored nest-server │
490
+ │ │ │ │ │ └── VENDOR.md │
491
+ │ │ │ │ ├── server/ ← Project code │
492
+ │ │ │ │ └── main.ts │
493
+ │ │ │ ├── bin/migrate.js │
494
+ │ │ │ └── package.json (no @lenne.tech/nest-server) │
495
+ │ │ └── app/ │
496
+ │ │ ├── app/ │
497
+ │ │ │ ├── core/ ← Vendored nuxt-extensions │
498
+ │ │ │ │ ├── module.ts │
499
+ │ │ │ │ ├── runtime/ │
500
+ │ │ │ │ └── VENDOR.md │
501
+ │ │ │ └── ... │
502
+ │ │ ├── nuxt.config.ts (modules: ['./app/core/module']) │
503
+ │ │ └── package.json (no @lenne.tech/nuxt-extensions) │
504
+ │ └── CLAUDE.md │
505
+ └────────────────────────────────────────────────────────────────┘
506
+ ```
507
+
508
+ **Alternative**: Only backend OR only frontend vendored. Omit the respective flag:
509
+
510
+ ```bash
511
+ # Only backend vendored, frontend stays npm
512
+ lt fullstack init --name my-project --frontend nuxt --api-mode Rest \
513
+ --framework-mode vendor --framework-upstream-branch 11.24.3 --noConfirm
514
+
515
+ # Only frontend vendored, backend stays npm
516
+ lt fullstack init --name my-project --frontend nuxt --api-mode Rest \
517
+ --frontend-framework-mode vendor --noConfirm
518
+ ```
519
+
520
+ ---
521
+
522
+ ### 2. Backend: convert npm → vendor
523
+
524
+ **Starting point**: Existing project in npm mode (`@lenne.tech/nest-server` in `package.json`).
525
+
526
+ ```
527
+ ┌──────────────────────────────────────────────────────────┐
528
+ │ DEVELOPER in projects/api/ │
529
+ │ │
530
+ │ Option A — Via Claude Code (with migration guides): │
531
+ │ /lt-dev:backend:convert-to-vendor │
532
+ │ │
533
+ │ Option B — Directly via CLI (no migration guides): │
534
+ │ lt server convert-mode --to vendor │
535
+ │ │
536
+ │ Option C — Dry-run (plan without changes): │
537
+ │ lt server convert-mode --to vendor --dry-run │
538
+ └─────────────┬────────────────────────────────────────────┘
539
+
540
+ ▼ Option A uses agent
541
+ ┌──────────────────────────────────────────────────────────┐
542
+ │ vendor-mode-converter agent │
543
+ │ │
544
+ │ Phase 0: Prerequisites │
545
+ │ - Verify npm mode │
546
+ │ - Verify NOT already vendored │
547
+ │ - Verify lt CLI available │
548
+ │ │
549
+ │ Phase 1: Version detection │
550
+ │ - SOURCE = current @lenne.tech/nest-server version │
551
+ │ - TARGET = latest (or specified) │
552
+ │ - Calculate version gap │
553
+ │ │
554
+ │ Phase 2: Migration-guide discovery │
555
+ │ - gh api lenneTech/nest-server/contents/migration- │
556
+ │ guides │
557
+ │ - Filter by from-version >= SOURCE, < TARGET │
558
+ │ - Build ordered migration plan │
559
+ │ │
560
+ │ Phase 3: CLI conversion │
561
+ │ - lt server convert-mode --to vendor │
562
+ │ --upstream-branch <TARGET> │
563
+ │ - Applies all transformations: │
564
+ │ • clone nest-server │
565
+ │ • copy + flatten-fix │
566
+ │ • rewrite imports │
567
+ │ • merge deps │
568
+ │ • express type-imports fix │
569
+ │ • VENDOR.md │
570
+ │ │
571
+ │ Phase 4: Migration application │
572
+ │ - Apply each migration guide in version order │
573
+ │ - Translate @lenne.tech/nest-server refs to relative │
574
+ │ paths │
575
+ │ │
576
+ │ Phase 5: Validation loop │
577
+ │ - tsc --noEmit │
578
+ │ - pnpm lint │
579
+ │ - pnpm test │
580
+ │ - Fix until green │
581
+ │ │
582
+ │ Phase 6: Report │
583
+ └──────────────────────────────────────────────────────────┘
584
+ ```
585
+
586
+ ---
587
+
588
+ ### 3. Frontend: convert npm → vendor
589
+
590
+ **Starting point**: Existing Nuxt project in npm mode.
591
+
592
+ ```
593
+ ┌──────────────────────────────────────────────────────────┐
594
+ │ DEVELOPER in projects/app/ │
595
+ │ │
596
+ │ Option A — Via Claude Code (with changelog): │
597
+ │ /lt-dev:frontend:convert-to-vendor │
598
+ │ │
599
+ │ Option B — Directly via CLI: │
600
+ │ lt frontend convert-mode --to vendor │
601
+ │ │
602
+ │ Option C — Dry-run: │
603
+ │ lt frontend convert-mode --to vendor --dry-run │
604
+ └─────────────┬────────────────────────────────────────────┘
605
+
606
+
607
+ ┌──────────────────────────────────────────────────────────┐
608
+ │ vendor-mode-converter-frontend agent (Option A) │
609
+ │ │
610
+ │ Phase 0: Prerequisites │
611
+ │ Phase 1: Version detection │
612
+ │ - SOURCE = current @lenne.tech/nuxt-extensions │
613
+ │ - TARGET = latest │
614
+ │ │
615
+ │ Phase 2: Changelog discovery │
616
+ │ - Fetch CHANGELOG.md from nuxt-extensions repo │
617
+ │ - Fetch GitHub releases for version gap │
618
+ │ │
619
+ │ Phase 3: CLI conversion │
620
+ │ - lt frontend convert-mode --to vendor │
621
+ │ --upstream-branch <TARGET> │
622
+ │ - Transformations: │
623
+ │ • clone nuxt-extensions │
624
+ │ • copy src/module.ts + src/runtime/ │
625
+ │ • rewrite nuxt.config.ts │
626
+ │ • rewrite 4 explicit consumer imports │
627
+ │ • remove @lenne.tech/nuxt-extensions dep │
628
+ │ • VENDOR.md │
629
+ │ │
630
+ │ Phase 4: Changelog application │
631
+ │ - Apply breaking changes from changelog │
632
+ │ │
633
+ │ Phase 5: Validation │
634
+ │ - nuxt build │
635
+ │ - pnpm lint │
636
+ │ │
637
+ │ Phase 6: Report │
638
+ └──────────────────────────────────────────────────────────┘
639
+ ```
640
+
641
+ ---
642
+
643
+ ### 4. Backend: vendor → npm rollback
644
+
645
+ **Starting point**: Project in vendor mode (`src/core/VENDOR.md` exists).
646
+
647
+ ```
648
+ ┌──────────────────────────────────────────────────────────┐
649
+ │ DEVELOPER in projects/api/ │
650
+ │ │
651
+ │ Option A — Via Claude Code: │
652
+ │ /lt-dev:backend:convert-to-npm │
653
+ │ │
654
+ │ Option B — Directly via CLI: │
655
+ │ lt server convert-mode --to npm │
656
+ │ │
657
+ │ With specific version: │
658
+ │ lt server convert-mode --to npm --version 11.24.3 │
659
+ └─────────────┬────────────────────────────────────────────┘
660
+
661
+
662
+ ┌──────────────────────────────────────────────────────────┐
663
+ │ lt CLI performs: │
664
+ │ │
665
+ │ 1. Read baseline version from src/core/VENDOR.md │
666
+ │ 2. Warn if local patches exist in VENDOR.md │
667
+ │ → Hint: /lt-dev:backend:contribute-nest-server-core │
668
+ │ should be run FIRST to upstream them │
669
+ │ 3. Rewrite consumer imports: │
670
+ │ relative paths → @lenne.tech/nest-server │
671
+ │ 4. Delete src/core/ │
672
+ │ 5. Restore @lenne.tech/nest-server dep │
673
+ │ 6. Restore migrate:* scripts to node_modules paths │
674
+ │ 7. Remove vendor artifacts: │
675
+ │ - bin/migrate.js │
676
+ │ - migrations-utils/ts-compiler.js │
677
+ │ - migration-guides/ │
678
+ │ 8. Remove CLAUDE.md vendor marker block │
679
+ │ 9. Post-verification: scan for stale relative imports │
680
+ └──────────────────────────────────────────────────────────┘
681
+ ```
682
+
683
+ **⚠️ Warning before rollback:**
684
+ Before a `convert-to-npm`, all substantial local patches in the vendored core should be **contributed upstream** via `/lt-dev:backend:contribute-nest-server-core` — otherwise they will be lost.
685
+
686
+ ---
687
+
688
+ ### 5. Frontend: vendor → npm rollback
689
+
690
+ ```
691
+ ┌──────────────────────────────────────────────────────────┐
692
+ │ DEVELOPER in projects/app/ │
693
+ │ │
694
+ │ Option A — Via Claude Code: │
695
+ │ /lt-dev:frontend:convert-to-npm │
696
+ │ │
697
+ │ Option B — Directly via CLI: │
698
+ │ lt frontend convert-mode --to npm │
699
+ │ │
700
+ │ With specific version: │
701
+ │ lt frontend convert-mode --to npm --version 1.5.3 │
702
+ └─────────────┬────────────────────────────────────────────┘
703
+
704
+
705
+ ┌──────────────────────────────────────────────────────────┐
706
+ │ lt CLI performs: │
707
+ │ │
708
+ │ 1. Read baseline version from app/core/VENDOR.md │
709
+ │ 2. Warn if local patches exist in VENDOR.md │
710
+ │ 3. Rewrite consumer imports: │
711
+ │ relative paths → @lenne.tech/nuxt-extensions │
712
+ │ 4. Delete app/core/ │
713
+ │ 5. Restore @lenne.tech/nuxt-extensions dep │
714
+ │ 6. Rewrite nuxt.config.ts: │
715
+ │ './app/core/module' → '@lenne.tech/nuxt-extensions' │
716
+ │ 7. Remove vendor-freshness script │
717
+ │ 8. Remove CLAUDE.md vendor marker block │
718
+ │ 9. Post-verification │
719
+ └──────────────────────────────────────────────────────────┘
720
+ ```
721
+
722
+ ---
723
+
724
+ ### 6. Update workflows
725
+
726
+ The **recommended** path for all updates is `/lt-dev:fullstack:update-all`. It is mode-aware and orchestrates the appropriate agents automatically.
727
+
728
+ ```
729
+ ┌──────────────────────────────────────────────────────────────────┐
730
+ │ /lt-dev:fullstack:update-all │
731
+ │ │
732
+ │ Phase 1: Detect project structure + framework modes │
733
+ │ Backend: test -f <api>/src/core/VENDOR.md → vendor | npm │
734
+ │ Frontend: test -f <app>/app/core/VENDOR.md → vendor | npm │
735
+ │ │
736
+ │ Phase 2: Version analysis + UPDATE_PLAN.md + user approval │
737
+ │ │
738
+ │ Phase 3: Backend framework update │
739
+ │ IF npm: spawn lt-dev:nest-server-updater │
740
+ │ IF vendor: spawn lt-dev:nest-server-core-updater │
741
+ │ │
742
+ │ Phase 4: Frontend framework update │
743
+ │ IF npm: spawn lt-dev:fullstack-updater --skip-backend │
744
+ │ IF vendor: spawn lt-dev:nuxt-extensions-core-updater │
745
+ │ │
746
+ │ Phase 5: Package maintenance │
747
+ │ → spawn lt-dev:npm-package-maintainer (FULL MODE) │
748
+ │ (for backend AND frontend package.json) │
749
+ │ │
750
+ │ Phase 6: CLAUDE.md sync from upstream starters │
751
+ │ │
752
+ │ Phase 7: Cross-validation (build + lint + tests) │
753
+ │ │
754
+ │ Phase 8: Final report │
755
+ └──────────────────────────────────────────────────────────────────┘
756
+ ```
757
+
758
+ **All 4 mode combinations are supported:**
759
+
760
+ | Backend | Frontend | Backend Agent | Frontend Agent |
761
+ |---------|----------|---------------|----------------|
762
+ | npm | npm | `nest-server-updater` | `fullstack-updater --skip-backend` |
763
+ | npm | vendor | `nest-server-updater` | `nuxt-extensions-core-updater` |
764
+ | vendor | npm | `nest-server-core-updater` | `fullstack-updater --skip-backend` |
765
+ | vendor | vendor | `nest-server-core-updater` | `nuxt-extensions-core-updater` |
766
+
767
+ **Skip flags:**
768
+
769
+ ```bash
770
+ /lt-dev:fullstack:update-all --dry-run # Plan only
771
+ /lt-dev:fullstack:update-all --skip-backend # Frontend only
772
+ /lt-dev:fullstack:update-all --skip-frontend # Backend only
773
+ /lt-dev:fullstack:update-all --skip-packages # Framework only, no package maintenance
774
+ ```
775
+
776
+ **Individual updates** (if you only need one part):
777
+
778
+ ```bash
779
+ # Backend npm mode
780
+ /lt-dev:backend:update-nest-server
781
+
782
+ # Backend vendor mode
783
+ /lt-dev:backend:update-nest-server-core
784
+
785
+ # Frontend vendor mode
786
+ /lt-dev:frontend:update-nuxt-extensions-core
787
+
788
+ # Packages only
789
+ /lt-dev:maintenance:maintain
790
+ ```
791
+
792
+ ---
793
+
794
+ ### 7. Upstream contribution
795
+
796
+ If you have made **generally useful** changes to the vendored core (bug fixes, features), they can be contributed back as pull requests to the upstream repo.
797
+
798
+ ```
799
+ ┌──────────────────────────────────────────────────────────┐
800
+ │ BACKEND: /lt-dev:backend:contribute-nest-server-core │
801
+ │ FRONTEND: /lt-dev:frontend:contribute-nuxt-extensions-core│
802
+ │ │
803
+ │ Phase 1: git log since VENDOR.md baseline │
804
+ │ Phase 2: Filter cosmetic commits (format, lint) │
805
+ │ Phase 3: Categorize: │
806
+ │ - upstream-candidate: generic bugfix, framework │
807
+ │ enhancement, type correction │
808
+ │ - project-specific: business rules, branding │
809
+ │ Phase 4: Clone upstream fresh + cherry-pick candidates │
810
+ │ Phase 5: Generate PR draft with motivation │
811
+ │ Phase 6: Present summary for human review │
812
+ │ │
813
+ │ Human: reviews + pushes PR via normal GitHub flow │
814
+ └──────────────────────────────────────────────────────────┘
815
+ ```
816
+
817
+ After the PR is merged, the next `/lt-dev:backend:update-nest-server-core` or `/lt-dev:frontend:update-nuxt-extensions-core` run will recognize the patch as "upstream-delivered" and remove it from the VENDOR.md local-changes log.
818
+
819
+ ---
820
+
821
+ ## Decision Matrix
822
+
823
+ ### When to use npm mode?
824
+
825
+ - ✅ Standard project without local framework modifications
826
+ - ✅ Fast updates via `pnpm update`
827
+ - ✅ Simpler CI/CD
828
+ - ✅ Smaller memory footprint in the repo
829
+
830
+ ### When to use vendor mode?
831
+
832
+ - ✅ Claude Code should **understand** the framework code (better context comprehension)
833
+ - ✅ Local patches to the framework are required
834
+ - ✅ Upstream contributions should emerge from real development
835
+ - ✅ Debugging in framework code with source maps / original code
836
+ - ✅ Framework changes immediately testable without npm release cycle
837
+ - ⚠️ Requires occasional merge conflict handling during sync
838
+ - ⚠️ Longer test import phase (TypeScript source)
839
+
840
+ ---
841
+
842
+ ## Glossary
843
+
844
+ | Term | Meaning |
845
+ |------|---------|
846
+ | **npm mode** | Framework as `@lenne.tech/nest-server` / `@lenne.tech/nuxt-extensions` npm dependency |
847
+ | **Vendor mode** | Framework source copied into `src/core/` (backend) or `app/core/` (frontend) |
848
+ | **VENDOR.md** | Marker file in the vendored core with baseline version, sync history, local patches |
849
+ | **Flatten-fix** | Import path rewrites in 4 backend files after copying (backend only) |
850
+ | **Consumer-import codemod** | Rewrite of `@lenne.tech/nest-server` to relative paths in project code |
851
+ | **Upstream sync** | Pulling upstream changes into the vendored core |
852
+ | **Upstream contribution** | Pushing local patches as PR to the upstream repo |
853
+ | **Mode-aware** | Code that automatically chooses correct paths for npm or vendor |
854
+ | **Starter** | `nest-server-starter` / `nuxt-base-starter` — template repo with standard config |
855
+
856
+ ---
857
+
858
+ ## Sources & References
859
+
860
+ ### GitHub repos
861
+
862
+ | Repo | URL |
863
+ |------|-----|
864
+ | lt CLI | https://github.com/lenneTech/cli |
865
+ | lt-dev Plugin | https://github.com/lenneTech/claude-code |
866
+ | nest-server framework | https://github.com/lenneTech/nest-server |
867
+ | nest-server starter | https://github.com/lenneTech/nest-server-starter |
868
+ | nuxt-extensions module | https://github.com/lenneTech/nuxt-extensions |
869
+ | nuxt-base starter | https://github.com/lenneTech/nuxt-base-starter |
870
+ | lt-monorepo template | https://github.com/lenneTech/lt-monorepo |
871
+
872
+ ### Local documentation
873
+
874
+ - `cli/CLAUDE.md` — CLI internal documentation + vendor touchpoints table
875
+ - `cli/docs/commands.md` — CLI command reference
876
+ - `cli/docs/lt.config.md` — CLI config reference
877
+ - `cli/scripts/test-vendor-init.sh` — Backend vendor integration tests (4 scenarios × ~22 assertions)
878
+ - `cli/scripts/test-frontend-vendor-init.sh` — Frontend vendor integration tests (4 scenarios)
879
+
880
+ ---
881
+
882
+ ## Quick Reference — The Most Important Commands
883
+
884
+ ```bash
885
+ # ═══════════════════════════════════════════════════════════════
886
+ # PROJECT SETUP
887
+ # ═══════════════════════════════════════════════════════════════
888
+
889
+ # New project (both in vendor mode)
890
+ lt fullstack init --name <n> --frontend nuxt --api-mode Rest \
891
+ --framework-mode vendor --frontend-framework-mode vendor --noConfirm
892
+
893
+ # New project (npm mode, standard)
894
+ lt fullstack init --name <n> --frontend nuxt --api-mode Rest --noConfirm
895
+
896
+ # Check status (shows both modes at monorepo root)
897
+ lt status
898
+
899
+ # ═══════════════════════════════════════════════════════════════
900
+ # CONVERSION — Fullstack (both subprojects in one step)
901
+ # ═══════════════════════════════════════════════════════════════
902
+
903
+ # Both subprojects: npm → vendor (from monorepo root)
904
+ lt fullstack convert-mode --to vendor --noConfirm
905
+
906
+ # Both subprojects: vendor → npm (rollback)
907
+ lt fullstack convert-mode --to npm --noConfirm
908
+
909
+ # With specific upstream versions
910
+ lt fullstack convert-mode --to vendor \
911
+ --framework-upstream-branch 11.24.3 \
912
+ --frontend-framework-upstream-branch 1.5.3 \
913
+ --noConfirm
914
+
915
+ # Only backend or only frontend
916
+ lt fullstack convert-mode --to vendor --skip-frontend --noConfirm
917
+ lt fullstack convert-mode --to vendor --skip-backend --noConfirm
918
+
919
+ # Dry-run (plan without changes)
920
+ lt fullstack convert-mode --to vendor --dry-run
921
+
922
+ # ═══════════════════════════════════════════════════════════════
923
+ # CONVERSION — Individual (in the respective subprojects)
924
+ # ═══════════════════════════════════════════════════════════════
925
+
926
+ # Backend: npm → vendor (with migrations via Claude Code)
927
+ /lt-dev:backend:convert-to-vendor
928
+
929
+ # Backend: npm → vendor (directly via CLI)
930
+ cd projects/api && lt server convert-mode --to vendor
931
+
932
+ # Frontend: npm → vendor (with changelog via Claude Code)
933
+ /lt-dev:frontend:convert-to-vendor
934
+
935
+ # Frontend: npm → vendor (directly via CLI)
936
+ cd projects/app && lt frontend convert-mode --to vendor
937
+
938
+ # Rollback individually
939
+ cd projects/api && lt server convert-mode --to npm
940
+ cd projects/app && lt frontend convert-mode --to npm
941
+
942
+ # ═══════════════════════════════════════════════════════════════
943
+ # UPDATES
944
+ # ═══════════════════════════════════════════════════════════════
945
+
946
+ # Comprehensive fullstack update (recommended, mode-aware)
947
+ /lt-dev:fullstack:update-all
948
+
949
+ # Backend only
950
+ /lt-dev:backend:update-nest-server # npm mode
951
+ /lt-dev:backend:update-nest-server-core # vendor mode
952
+
953
+ # Frontend only
954
+ /lt-dev:frontend:update-nuxt-extensions-core # vendor mode
955
+
956
+ # Packages only
957
+ /lt-dev:maintenance:maintain
958
+
959
+ # ═══════════════════════════════════════════════════════════════
960
+ # UPSTREAM CONTRIBUTION
961
+ # ═══════════════════════════════════════════════════════════════
962
+
963
+ # Backend: prepare local patches as PR
964
+ /lt-dev:backend:contribute-nest-server-core
965
+
966
+ # Frontend: prepare local patches as PR
967
+ /lt-dev:frontend:contribute-nuxt-extensions-core
968
+ ```
969
+
970
+ ---
971
+
972
+ *This file is intended as living documentation. It should be updated when new features are added to the lt CLI or lt-dev plugin.*