{"_id":"@crolix-altf4/lunira","_rev":"3-9016b7694f78cf90f6d25f28716af6ae","name":"@crolix-altf4/lunira","dist-tags":{"latest":"1.3.0"},"versions":{"1.2.0":{"name":"@crolix-altf4/lunira","version":"1.2.0","keywords":["ai","cli","llm","orchestration","developer-tools","open-source"],"author":{"name":"CrOliX-AltF4"},"license":"MIT","_id":"@crolix-altf4/lunira@1.2.0","maintainers":[{"name":"crolix-altf4","email":"loricworms@orange.fr"}],"homepage":"https://github.com/CrOliX-AltF4/LunIra#readme","bugs":{"url":"https://github.com/CrOliX-AltF4/LunIra/issues"},"bin":{"lunira":"dist/index.js"},"dist":{"shasum":"873c32362ffa3ddf49804487febe062d4c28a01a","tarball":"https://registry.npmjs.org/@crolix-altf4/lunira/-/lunira-1.2.0.tgz","fileCount":17,"integrity":"sha512-MrLfRS3jpes2xt9jfwe3Cu4rXr874lV6GFOPpFmlDcldrSmVI23WmEHJ+QfEkNR9IwzZI06VFaOxlPIx3hjsPg==","signatures":[{"sig":"MEYCIQDuskulJb6oZzItsAxMxAix/A9o9rquBnstQT3VL/ajkgIhAJmHOA5nDOpZJ06dCXddaKKto1rRF073yHkjTa7kQRnd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":983403},"type":"module","engines":{"npm":">=10.0.0","node":">=20.0.0"},"gitHead":"0c36f2be418f84c6e86a22079521214f31bc2d4a","scripts":{"dev":"tsx src/cli/index.ts","lint":"eslint .","test":"vitest run","build":"tsup","format":"prettier --write .","prepare":"husky","lint:fix":"eslint . --fix","typecheck":"tsc --noEmit -p tsconfig.test.json","gen:mascot":"tsx scripts/mascot-calcifer.ts","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"crolix-altf4","email":"loricworms@orange.fr"},"repository":{"url":"git+https://github.com/CrOliX-AltF4/LunIra.git","type":"git"},"_npmVersion":"11.12.1","description":"Multi-agent AI development pipeline CLI — forge production-ready code from a single intent","directories":{},"lint-staged":{"*.{ts,tsx}":["eslint --fix","prettier --write"],"*.{json,md,yaml,yml}":["prettier --write"]},"_nodeVersion":"24.9.0","dependencies":{"ajv":"^8.20.0","ink":"^7.0.2","chalk":"^5.6.2","react":"^19.2.5","dotenv":"^17.4.2","openai":"^6.37.0","groq-sdk":"^1.1.2","commander":"^14.0.3","ink-text-input":"^6.0.0","gradient-string":"^3.0.0","@anthropic-ai/sdk":"^0.95.1","@google/generative-ai":"^0.24.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","tsup":"^8.5.1","husky":"^9.0.0","pngjs":"^7.0.0","sharp":"^0.34.5","eslint":"^9.0.0","vitest":"^4.1.4","prettier":"^3.8.3","typescript":"^5.0.0","lint-staged":"^15.0.0","@types/pngjs":"^6.0.5","@types/react":"^19.2.14","@commitlint/cli":"^19.0.0","typescript-eslint":"^8.0.0","@vitest/coverage-v8":"^4.1.4","eslint-config-prettier":"^9.0.0","@commitlint/config-conventional":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/lunira_1.2.0_1781779406538_0.5083339361068364","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@crolix-altf4/lunira","version":"1.2.1","keywords":["ai","cli","llm","orchestration","developer-tools","open-source"],"author":{"name":"CrOliX-AltF4"},"license":"MIT","_id":"@crolix-altf4/lunira@1.2.1","maintainers":[{"name":"crolix-altf4","email":"loricworms@orange.fr"}],"homepage":"https://github.com/CrOliX-AltF4/LunIra#readme","bugs":{"url":"https://github.com/CrOliX-AltF4/LunIra/issues"},"bin":{"lunira":"dist/index.js"},"dist":{"shasum":"dfb9810c345bfae933d908ae614ddfe8206afa17","tarball":"https://registry.npmjs.org/@crolix-altf4/lunira/-/lunira-1.2.1.tgz","fileCount":17,"integrity":"sha512-Dv1JRUgr0AGzedf2dKzw0uORUVXleYh+xJYsTYNNDcDe744ooGfmTIZ7jGWVKHChVDN/ODgrTGR5rHEIMkRB9w==","signatures":[{"sig":"MEYCIQC2zcwC5ZC+jvQ3t6iw/VOVA61ujRKjIe9BaDKjLLjN2wIhAJFfkD9zcirFM7QaNWwVB63au5HON7g8eVFuHNDWa4A7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@crolix-altf4%2flunira@1.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":967724},"type":"module","engines":{"npm":">=10.0.0","node":">=20.0.0"},"gitHead":"1bd5d6ef14273c13f241fd0a9245765acb7156d1","scripts":{"dev":"tsx src/cli/index.ts","lint":"eslint .","test":"vitest run","build":"tsup","format":"prettier --write .","prepare":"husky","lint:fix":"eslint . --fix","typecheck":"tsc --noEmit -p tsconfig.test.json","gen:mascot":"tsx scripts/mascot-calcifer.ts","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ab2366b8-b67f-4cf9-803b-a2d955d29718"}},"repository":{"url":"git+https://github.com/CrOliX-AltF4/LunIra.git","type":"git"},"_npmVersion":"11.13.0","description":"Multi-agent AI development pipeline CLI — forge production-ready code from a single intent","directories":{},"lint-staged":{"*.{ts,tsx}":["eslint --fix","prettier --write"],"*.{json,md,yaml,yml}":["prettier --write"]},"_nodeVersion":"24.16.0","dependencies":{"ajv":"^8.20.0","ink":"^7.0.2","chalk":"^5.6.2","react":"^19.2.5","dotenv":"^17.4.2","openai":"^6.37.0","groq-sdk":"^1.1.2","commander":"^14.0.3","ink-text-input":"^6.0.0","gradient-string":"^3.0.0","@anthropic-ai/sdk":"^0.95.1","@google/generative-ai":"^0.24.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","tsup":"^8.5.1","husky":"^9.0.0","pngjs":"^7.0.0","sharp":"^0.34.5","eslint":"^9.0.0","vitest":"^4.1.4","prettier":"^3.8.3","typescript":"^5.0.0","lint-staged":"^15.0.0","@types/pngjs":"^6.0.5","@types/react":"^19.2.14","@commitlint/cli":"^19.0.0","typescript-eslint":"^8.0.0","@vitest/coverage-v8":"^4.1.4","eslint-config-prettier":"^9.0.0","@commitlint/config-conventional":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/lunira_1.2.1_1781785621958_0.9945814213795063","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@crolix-altf4/lunira","version":"1.3.0","description":"Multi-agent AI development pipeline CLI — forge production-ready code from a single intent","type":"module","engines":{"node":">=20.0.0","npm":">=10.0.0"},"bin":{"lunira":"dist/index.js"},"scripts":{"build":"tsup","dev":"tsx src/cli/index.ts","lint":"eslint .","lint:fix":"eslint . --fix","format":"prettier --write .","format:check":"prettier --check .","typecheck":"tsc --noEmit -p tsconfig.test.json","test":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage","prepare":"husky","prepublishOnly":"npm run build && npm test","gen:mascot":"tsx scripts/mascot-calcifer.ts"},"lint-staged":{"*.{ts,tsx}":["eslint --fix","prettier --write"],"*.{json,md,yaml,yml}":["prettier --write"]},"keywords":["ai","cli","llm","orchestration","developer-tools","open-source"],"author":{"name":"CrOliX-AltF4"},"repository":{"type":"git","url":"git+https://github.com/CrOliX-AltF4/LunIra.git"},"homepage":"https://github.com/CrOliX-AltF4/LunIra#readme","bugs":{"url":"https://github.com/CrOliX-AltF4/LunIra/issues"},"license":"MIT","devDependencies":{"@commitlint/cli":"^19.0.0","@commitlint/config-conventional":"^19.0.0","@types/pngjs":"^6.0.5","@types/react":"^19.2.14","@vitest/coverage-v8":"^4.1.4","eslint":"^9.0.0","eslint-config-prettier":"^9.0.0","husky":"^9.0.0","lint-staged":"^15.0.0","pngjs":"^7.0.0","prettier":"^3.8.3","sharp":"^0.34.5","tsup":"^8.5.1","tsx":"^4.0.0","typescript":"^5.0.0","typescript-eslint":"^8.0.0","vitest":"^4.1.4"},"dependencies":{"@anthropic-ai/sdk":"^0.95.1","@google/generative-ai":"^0.24.1","ajv":"^8.20.0","chalk":"^5.6.2","commander":"^14.0.3","dotenv":"^17.4.2","gradient-string":"^3.0.0","groq-sdk":"^1.1.2","ink":"^7.0.2","ink-text-input":"^6.0.0","openai":"^6.37.0","react":"^19.2.5"},"gitHead":"9960974e66a3c1c63fe0cfa398bdf5d49412a832","_id":"@crolix-altf4/lunira@1.3.0","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-aEIRbk8/GMi00FGtu29e1XfN9281dOfNHufoq0k0ooxFt9js2btbAAT255wYk6hJsN6MJZOao+1D9Zwbt0e7bw==","shasum":"9ab18ebc6741ab6e068310d53f8a62e2c1359a6c","tarball":"https://registry.npmjs.org/@crolix-altf4/lunira/-/lunira-1.3.0.tgz","fileCount":17,"unpackedSize":971924,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@crolix-altf4%2flunira@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIExl6phQxFmFiY2ffqPXJNLNDvUWYQYJtg5+WD4r8k7aAiEAh5/1RaeOR/eldbbbVvZEAvDG9Cx1uOCPro6LpebO+uU="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ab2366b8-b67f-4cf9-803b-a2d955d29718"}},"directories":{},"maintainers":[{"name":"crolix-altf4","email":"loricworms@orange.fr"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/lunira_1.3.0_1785349347205_0.5217399811146954"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-18T10:43:26.429Z","modified":"2026-07-29T18:22:27.794Z","1.2.0":"2026-06-18T10:43:26.748Z","1.2.1":"2026-06-18T12:27:02.147Z","1.3.0":"2026-07-29T18:22:27.383Z"},"bugs":{"url":"https://github.com/CrOliX-AltF4/LunIra/issues"},"author":{"name":"CrOliX-AltF4"},"license":"MIT","homepage":"https://github.com/CrOliX-AltF4/LunIra#readme","keywords":["ai","cli","llm","orchestration","developer-tools","open-source"],"repository":{"type":"git","url":"git+https://github.com/CrOliX-AltF4/LunIra.git"},"description":"Multi-agent AI development pipeline CLI — forge production-ready code from a single intent","maintainers":[{"name":"crolix-altf4","email":"loricworms@orange.fr"}],"readme":"<div align=\"center\">\n\n# ◆ Lun'Ira\n\n[![Version](https://img.shields.io/npm/v/@crolix-altf4/lunira?style=flat-square&color=C8A415)](https://www.npmjs.com/package/@crolix-altf4/lunira)\n[![License](https://img.shields.io/badge/license-MIT-333333?style=flat-square)](LICENSE)\n[![CI](https://img.shields.io/github/actions/workflow/status/CrOliX-AltF4/LunIra/ci.yml?style=flat-square&label=CI)](https://github.com/CrOliX-AltF4/LunIra/actions)\n[![Node](https://img.shields.io/badge/node-%3E%3D20-555555?style=flat-square)](.)\n\n**intent → code**\n\n_A multi-agent AI pipeline CLI. Feed the forge a plain-text intent — refined, tested code comes out._\n\n</div>\n\n---\n\n<div align=\"center\">\n  <img src=\"assets/calcifer-f0.png\" alt=\"Lun'Ira — the forge spirit\" width=\"140\"/>\n</div>\n\n---\n\n## Quick start\n\n```bash\nnpm install -g @crolix-altf4/lunira\nlunira               # the forge opens — setup runs automatically on first launch\n```\n\n> [!TIP]\n> No API key yet? Type `/demo` in the forge bar — a full pipeline runs on mock data, no credentials needed.\n\n> [!TIP]\n> **Easiest entry point:** one [OpenRouter](https://openrouter.ai) key gives you access to 200+ models including free tiers. Lun'Ira will suggest it automatically if no provider is configured.\n\n---\n\n## The forge\n\nOne plain-text intent enters. Four agents process it in sequence — each focused on a single role, passing only what the next step needs. On failure, the work goes back into the fire.\n\n```\n  \"build a REST API to manage users\"\n           │\n           ▼\n  ┌──────────────────┐\n  │   Product Owner  │  clarifies goal, requirements, constraints\n  └────────┬─────────┘\n           │  structured requirements\n           ▼\n  ┌──────────────────┐\n  │     Planner      │  architecture, tech stack, task breakdown\n  └────────┬─────────┘\n           │  architecture + tasks\n           ▼\n  ┌──────────────────┐\n  │    Developer     │  generates complete, runnable files\n  └────────┬─────────┘\n           │  code files\n           ▼\n  ┌──────────────────┐\n  │   QA Engineer    │  verdict + score + issues\n  └────────┬─────────┘\n           │  fail? → back to Developer (up to N times)\n           ▼\n      ✦ artifact sealed\n```\n\nWhy four agents instead of one? Context pollution. A single LLM handling PO + architecture + code + QA in one context degrades fast. Lun'Ira splits each responsibility, keeps outputs typed, and gives you full traceability per run.\n\n> [!NOTE]\n> \"Ira\" is the sin of Wrath (Trinity Seven) — the forge that strikes with precision and force. Part of the [Lun' ecosystem](https://github.com/CrOliX-AltF4).\n\n---\n\n## Features\n\n**Pipeline**\n\n- Automatic model selection per role — each agent gets the model best suited for its task\n- QA iteration loop — on fail, issues are fed back to Dev for a retry (`--max-iterations`)\n- Budget guard — abort if total cost exceeds your limit (`--budget-usd`, `--daily-budget-usd`)\n- Provider fallback — automatic failover to the next configured provider\n\n**7 Providers**\n\n| Provider   | Free tier | Notes                                  |\n| ---------- | --------- | -------------------------------------- |\n| Groq       | ✓         | Ultra-fast LPU — default for PO and QA |\n| Gemini     | ✓         | 1M context, strong reasoning           |\n| OpenRouter | ✓         | Gateway to 200+ models, one key        |\n| Ollama     | ✓         | Local models, no API key               |\n| Claude     | —         | Best code quality                      |\n| OpenAI     | —         | GPT-4o, o1                             |\n| NVIDIA NIM | ✓         | Hosted NVIDIA models                   |\n\n**Skills & Plugins**\n\n_Skills_ are expertise injected into agent prompts — TypeScript conventions, React patterns, Laravel, security rules, REST design, and more. Think of them as the blacksmith's training.\n\n_Plugins_ are tools the agents can wield — write files, read context, web search, run commands, execute code, open GitHub issues. Bridges to the outside world.\n\nEvery plugin carries a safety tier — `safe`, `restricted`, or `dangerous`. The first time you activate a restricted or dangerous plugin from the Arsenal screen, Lun'Ira prompts for consent. Grants are saved in `~/.config/lunira/permissions.json` so you're only asked once.\n\nBoth are declared per-project via `lunira.config.json` and selectable per-run from the TUI (`/arsenal`).\n\n> [!NOTE]\n> Skills and plugins are community-extensible via npm packages (`lunira-skill-*`, `lunira-plugin-*`). Install with `lunira install skill <name>` or `lunira install plugin <name>`, and Lun'Ira discovers them automatically.\n\n**TUI**\n\n- Animated living flame mascot (Calcifer-inspired) on the idle screen\n- Slash command navigation — `/history`, `/arsenal`, `/setup`, `/demo`\n- Live pipeline view with forge fire animation per active step\n- Tabbed results: Verdict · Artefacts · Stratégie · Diff\n- Apply generated files directly to your dungeon (`[a]` key)\n- Run history (the Annales) with re-run support\n- RPG lexicon — Incantation, Dungeon, Forge, Blacksmith level, Artifact\n\n---\n\n## Setup\n\nThe forge is cold until you light it. On first launch, Lun'Ira opens setup automatically.\n\n```bash\nlunira setup                              # interactive provider configuration\nlunira config set groq.apiKey <key>       # or configure directly\nlunira config set openrouter.apiKey <key> # one key, 200+ models\n```\n\n> [!TIP]\n> Keys are stored in `~/.lunira/config.json`. Environment variables always take precedence — useful for CI or per-project overrides:\n>\n> ```bash\n> GROQ_API_KEY=<key> lunira run \"...\"\n> ```\n\n---\n\n## CLI\n\n```bash\nlunira                                         # interactive TUI\nlunira run \"build a REST API\"                  # fire the forge headlessly\nlunira run \"...\" --dry                         # preview cost — no LLM calls\nlunira run \"...\" --apply                       # write output to current directory\nlunira run \"...\" --skip qa                     # bypass a role\nlunira run \"...\" --model gemini-2.5-pro        # override model\nlunira run \"...\" --provider openrouter         # override provider\nlunira run \"...\" --budget-usd 0.10             # abort above $0.10\nlunira run \"...\" --max-iterations 3            # allow 3 Dev→QA retries\nlunira run \"...\" --json                        # machine-readable output\nlunira ask \"what does this file do\" --file x   # direct question to the LLM\nlunira history                                 # browse the Annales\nlunira costs                                   # combustible spent\nlunira watch ./src --intent intent.txt         # re-forge on file change\nlunira catalog                                 # list available skills and plugins\nlunira install skill <name>                    # install a lunira-skill-* package\nlunira install plugin <name>                   # install a lunira-plugin-* package\nlunira init                                    # scaffold a new project\n```\n\n## TUI controls\n\n| Key        | Action                                                |\n| ---------- | ----------------------------------------------------- |\n| `/`        | Slash commands — type to filter autocomplete          |\n| `/demo`    | Run demo pipeline (no API key needed)                 |\n| `/history` | The Annales — browse past runs                        |\n| `/arsenal` | Select skills & plugins for next run                  |\n| `/setup`   | Arm the forge — configure API keys                    |\n| `↑ ↓`      | Navigate                                              |\n| `m`        | Swap rune (change model on focused step)              |\n| `↵`        | Fire the forge                                        |\n| `1 2 3 4`  | Results tabs — Verdict / Artefacts / Stratégie / Diff |\n| `a`        | Deploy to dungeon (apply files to current directory)  |\n| `s`        | Seal artifacts (save to `./output/<run-id>/`)         |\n| `r / q`    | New forge                                             |\n\n---\n\n## Project config\n\n```json\n{\n  \"skills\": {\n    \"all\": [\"conventional-commits\", \"typescript-strict\"],\n    \"dev\": [\"react-css-modules\"]\n  },\n  \"plugins\": {\n    \"dev\": [\"file_write\", \"read_file\"],\n    \"qa\": [\"execute_code\"]\n  }\n}\n```\n\n**Skills:** `typescript-strict` · `react-css-modules` · `conventional-commits` · `project-context` · `laravel-conventions` · `test-conventions` · `api-design` · `i18n` · `security`\n\n**Plugins:** `file_write` · `read_file` · `web_search` · `run_command` · `list_directory` · `create_directory` · `execute_code` · `github_create_issue`\n\n---\n\n> [!WARNING]\n> Lun'Ira generates code. It does not execute it. The QA agent audits for issues but is not a substitute for human review before deploying to production.\n\n---\n\n## Lun ecosystem\n\n| Project                                                    | Role                                                      |\n| ---------------------------------------------------------- | --------------------------------------------------------- |\n| **LunIra**                                                 | AI dev pipeline — intent → code                           |\n| [LunAcedia](https://github.com/CrOliX-AltF4/LunAcedia)     | Information infrastructure — events · actions · AI butler |\n| [LunAvaritia](https://github.com/CrOliX-AltF4/LunAvaritia) | Mobile companion — Android                                |\n| [LunGula](https://github.com/CrOliX-AltF4/LunGula)         | Imitation learning — gameplay → ONNX policy               |\n| LunAnima                                                   | AI companion core — private                               |\n\n---\n\n<div align=\"center\">\n\nBuilt by **[CrOliX-AltF4](https://github.com/CrOliX-AltF4)** · MIT License · © 2026\n\n_Where raw intent finds its final form._\n\n</div>\n","readmeFilename":"README.md"}