{"id":23701007,"url":"https://github.com/lennetech/cli","last_synced_at":"2026-04-13T00:22:45.151Z","repository":{"id":35061430,"uuid":"202134686","full_name":"lenneTech/cli","owner":"lenneTech","description":"A CLI for lenne.Tech libraries and frameworks.","archived":false,"fork":false,"pushed_at":"2024-10-15T13:11:38.000Z","size":2248,"stargazers_count":10,"open_issues_count":4,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-12-19T08:22:29.219Z","etag":null,"topics":["cli","git","git-tools","gluegun","helper","lenne","lennetech","nest-server","tech"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lenneTech.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-08-13T12:00:03.000Z","updated_at":"2024-10-15T13:11:42.000Z","dependencies_parsed_at":"2024-08-03T23:17:08.213Z","dependency_job_id":null,"html_url":"https://github.com/lenneTech/cli","commit_stats":{"total_commits":133,"total_committers":5,"mean_commits":26.6,"dds":0.3157894736842105,"last_synced_commit":"749c8912309d8898b9f0988c53c542824bf6f8d4"},"previous_names":[],"tags_count":55,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lenneTech%2Fcli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lenneTech%2Fcli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lenneTech%2Fcli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lenneTech%2Fcli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lenneTech","download_url":"https://codeload.github.com/lenneTech/cli/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":231837433,"owners_count":18433962,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","git","git-tools","gluegun","helper","lenne","lennetech","nest-server","tech"],"created_at":"2024-12-30T09:31:28.454Z","updated_at":"2026-04-13T00:22:45.138Z","avatar_url":"https://github.com/lenneTech.png","language":"TypeScript","readme":"# lt CLI\n\nA CLI for [lenne.Tech](https://github.com/lenneTech) libraries and frameworks.\n\nCLI in action:\n\n![Gluegun Menu Demo](assets/demo.gif)\n\n[![License](https://img.shields.io/github/license/lenneTech/cli)](/LICENSE) [![CircleCI](https://circleci.com/gh/lenneTech/cli/tree/master.svg?style=shield)](https://circleci.com/gh/lenneTech/cli/tree/master)\n[![Dependency Status](https://david-dm.org/lenneTech/cli.svg)](https://david-dm.org/lenneTech/cli) [![devDependency Status](https://david-dm.org/lenneTech/cli/dev-status.svg)](https://david-dm.org/lenneTech/cli?type=dev)\n\n\u003c!--\n[![GitHub forks](https://img.shields.io/github/forks/lenneTech/cli)](https://github.com/lenneTech/cli/fork) [![GitHub stars](https://img.shields.io/github/stars/lenneTech/cli)](https://github.com/lenneTech/cli)\n--\u003e\n\n## Installation\n\n```\n$ npm install -g @lenne.tech/cli\n```\n\n## Usage\n\n```\nMenu mode\n$ lt\nor command line mode\n$ lt \u003ccommand\u003e (\u003csubcommand\u003e) (\u003cparameter\u003e)\n```\n\n## Help / List of commands\n\n```\n$ lt help\nor\n$ lt\n```\n\n## Documentation\n\n- **[LT-ECOSYSTEM-GUIDE](docs/LT-ECOSYSTEM-GUIDE.md)** — Complete reference for `lt` CLI **and** the `lt-dev` Claude-Code Plugin (architecture, functions, vendor-mode workflows, agents, skills)\n- **[VENDOR-MODE-WORKFLOW](docs/VENDOR-MODE-WORKFLOW.md)** — Step-by-step guide for npm → vendor conversion, updates, and rollback\n- [Command Reference](docs/commands.md) — Complete list of all commands with options\n- [Configuration Guide](docs/lt.config.md) — Configuration file documentation\n- [Plugin Guide](docs/plugins.md) — How to create plugins\n\n## Quick Start\n\n```bash\n# Check your environment\n$ lt doctor\n\n# Show project status\n$ lt status\n\n# Enable shell completions\n$ lt completion install\n```\n\n## Framework consumption modes (nest-server)\n\nWhen you create a new api project (`lt fullstack init` or `lt server create`),\nthe CLI supports two framework consumption modes:\n\n**`npm` mode (default)** — `@lenne.tech/nest-server` is installed as an npm\ndependency. Framework source lives in `node_modules/@lenne.tech/nest-server/`.\nImports use the bare specifier `from '@lenne.tech/nest-server'`. Update path:\n`/lt-dev:backend:update-nest-server` (Claude Code agent).\n\n**`vendor` mode** — The framework's `core/` directory is copied directly into\n`\u003capi\u003e/src/core/` as first-class project code. No `@lenne.tech/nest-server`\nnpm dependency. Generated imports use relative paths (`from '../../../core'`).\nLocal patches are allowed and tracked in `src/core/VENDOR.md`. Update path:\n`/lt-dev:backend:update-nest-server-core` (Claude Code agent).\n\n### Creating projects\n\n```bash\n# npm mode (classic, default)\n$ lt fullstack init --name myapp --frontend nuxt --api-mode Rest\n\n# vendor mode, HEAD of upstream\n$ lt fullstack init --name myapp --frontend nuxt --api-mode Rest \\\n    --framework-mode vendor\n\n# vendor mode, pinned to a specific upstream branch or tag\n$ lt fullstack init --name myapp --framework-mode vendor \\\n    --framework-upstream-branch 11.24.1\n\n# dry-run: print the plan without touching the filesystem\n$ lt fullstack init --name myapp --framework-mode vendor --dry-run --noConfirm\n\n# standalone api project (vendor mode works here too)\n$ lt server create --name myapp --framework-mode vendor\n```\n\n### Working on an existing project\n\nAll `lt server …` commands (module, object, addProp, test, permissions)\n**auto-detect** the framework mode via `src/core/VENDOR.md` and generate\nthe correct import syntax automatically. You never pass `--framework-mode`\nafter `init`; it is persisted in the project's `lt.config.json`.\n\n```bash\n# inside projects/api — generates relative or bare imports automatically\n$ lt server module --name Product --controller Rest\n\n# shows the mode + project type\n$ lt status\n\n# prints the mode-specific update instructions\n$ lt fullstack update\n```\n\n### Vendor-mode housekeeping\n\nVendor-mode projects ship three maintenance scripts under `scripts/vendor/`:\n\n| Script | Purpose | Invocation |\n|---|---|---|\n| `check-vendor-freshness.mjs` | Non-blocking warning when upstream has a newer release than the current baseline | `pnpm run check:vendor-freshness` (auto-invoked by `pnpm run check` / `check:fix` / `check:naf`) |\n| `sync-from-upstream.ts` | Diff generator consumed by the `nest-server-core-updater` Claude Code agent | `pnpm run vendor:sync` |\n| `propose-upstream-pr.ts` | Patch-list generator consumed by the `nest-server-core-contributor` agent | `pnpm run vendor:propose-upstream` |\n\nThe vendor-mode baseline (upstream version + commit SHA) is recorded in\n`src/core/VENDOR.md`. Log any substantial local patch there so the updater\nagent can classify it at sync time.\n\n### Integration test\n\nA full end-to-end smoke test for all four supported init combinations\n(`npm/Rest`, `vendor/Rest`, `vendor/GraphQL`, `vendor/Both`) ships with the\nCLI:\n\n```bash\n$ pnpm run test:vendor-init\n```\n\nEach scenario runs init → module → object → addProp → test → tsc → build →\nmigrate:list and asserts ~30 structural + functional invariants per scenario.\nRun this before releasing a new CLI version to catch upstream drift early.\n\n## Configuration\n\nThe CLI supports project-specific configuration via `lt.config` files. This allows you to set default values for commands, reducing repetitive input.\n\n```bash\n# Create a configuration file interactively\n$ lt config init\n\n# Show current configuration (merged from hierarchy)\n$ lt config show\n```\n\nSupported formats:\n- `lt.config.json` - JSON format (recommended)\n- `lt.config.yaml` - YAML format\n- `lt.config` - Auto-detected format\n\nConfiguration files are searched from the current directory up to root and merged hierarchically.\n\nFor detailed documentation, see [docs/lt.config.md](docs/lt.config.md).\n\n## Examples\n\n```\n// Start\n$ lt\n\n// Create new server\n$ lt server create \u003cServerName\u003e\nor\n$ lt server c \u003cServerName\u003e\n\n// Create new module for server (in server project root dir)\n$ lt server module \u003cModuleName\u003e\nor\n$ lt server m \u003cModuleName\u003e\n\n// Update and install npm packages (in project dir)\n$ lt npm update\nor\n$ lt npm up\nor\n$ lt npm u\n\n// Checkout git branch and update packages (in project dir)\n$ lt git get \u003cbranch-name or part-of-branch-name\u003e\nor\n$ lt git g \u003cbranch-name or part-of-branch-name\u003e\n\n// Preview what a command would do (dry-run)\n$ lt git clear --dry-run\n$ lt git reset --dry-run\n$ lt git squash --dry-run\n$ lt git rebase --dry-run\n\n// Skip confirmation prompts (noConfirm)\n$ lt git get feature --noConfirm\n$ lt git squash dev --noConfirm\n\n// Combine flags for CI/CD pipelines\n$ lt git clean --noConfirm\n$ lt server module User --noConfirm\n\n// View command history\n$ lt history\n\n...\n\n```\n\n## Development\n\n```\n# Clone project\ngit clone git@github.com:lenneTech/cli.git\ncd cli\n\n# Link the project for global usage\nnpm link\n\n# Make changes\n...\n\n# Test changes\nlt ...\n\n# Build new version\nnpm build\n```\n\n## Thanks\n\nMany thanks to the developers of [Glugun](https://infinitered.github.io/gluegun)\nand all the developers whose packages are used here.\n\n## License\n\nMIT - see LICENSE\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flennetech%2Fcli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flennetech%2Fcli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flennetech%2Fcli/lists"}