{"_id":"@artsnlabs/xci","_rev":"6-ffd66dfe2148382a83b537668f2bc452","name":"@artsnlabs/xci","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.2":{"name":"@artsnlabs/xci","version":"0.1.2","keywords":["github-actions","ci","act","cli","tui"],"author":{"url":"https://moee.dev","name":"Moe Haje","email":"hello@moee.dev"},"license":"MIT","_id":"@artsnlabs/xci@0.1.2","maintainers":[{"name":"moehaje","email":"hello@moee.dev"}],"homepage":"https://github.com/moehaje/xci#readme","bugs":{"url":"https://github.com/moehaje/xci/issues"},"bin":{"xci":"dist/index.js"},"dist":{"shasum":"3d58d0457465e744539caaba3f6454dc7d0d8cc4","tarball":"https://registry.npmjs.org/@artsnlabs/xci/-/xci-0.1.2.tgz","fileCount":117,"integrity":"sha512-dha02wkoU2tRE05ZsjiXJ6bnBb8NVfqvL6QvdfcYAdgGZsO+zu5xwclX+Mur72G7fC8YN8NpdmWfa+kyWvYF1Q==","signatures":[{"sig":"MEUCIC0sZtBIFuSZaD2lGJMAPd5NnzrUoenZX+GDROVf0kd+AiEA8HtTzCO+bLV0ihuJelZrFGXBCVsFqb35XEVb/XJ4MUg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":238387},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"5e0ab05630b55774870d880234a118238ae4ed19","scripts":{"dev":"tsx src/index.ts","lint":"biome lint .","build":"npm run clean && tsc -p tsconfig.json && node scripts/ensure-shebang.js","clean":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"","format":"biome format --write .","prepack":"npm run build","type-check":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"moehaje","email":"hello@moee.dev"},"repository":{"url":"git+https://github.com/moehaje/xci.git","type":"git"},"_npmVersion":"11.6.2","description":"Local GitHub Actions runner UX powered by act.","directories":{},"_nodeVersion":"25.2.1","dependencies":{"ink":"^4.4.1","zod":"^3.23.8","yaml":"^2.4.5","react":"^18.2.0","@clack/prompts":"^0.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","typescript":"^5.3.3","@types/node":"^20.14.10","@types/react":"^18.3.1","@biomejs/biome":"^2.3.13","@types/react-dom":"^18.3.0"},"_npmOperationalInternal":{"tmp":"tmp/xci_0.1.2_1769722704204_0.2162977292829451","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@artsnlabs/xci","version":"0.1.3","keywords":["github-actions","ci","act","cli","tui"],"author":{"url":"https://moee.dev","name":"Moe Haje","email":"hello@moee.dev"},"license":"MIT","_id":"@artsnlabs/xci@0.1.3","maintainers":[{"name":"moehaje","email":"hello@moee.dev"}],"homepage":"https://github.com/moehaje/xci#readme","bugs":{"url":"https://github.com/moehaje/xci/issues"},"bin":{"xci":"dist/index.js"},"dist":{"shasum":"de549ce88ce06c2e94ec62584bb8aa7000e44ed6","tarball":"https://registry.npmjs.org/@artsnlabs/xci/-/xci-0.1.3.tgz","fileCount":117,"integrity":"sha512-YZGZeWHGzpsbMDvuY88Ib+A9S1ofi5IX5Zg/0HRq+U/0CJXXqhvx054B9jbXCYAPENUCELu0GzTPguNv4vJVmQ==","signatures":[{"sig":"MEUCIQCh/fsbWBr22DSpo9p31O88pN+a6tLISZzetABYMqJWRgIgDf001jQ7yoTaA5IiNuNqBV+6r0hLMWi4mhjoe3dwgk0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":238356},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"65c94eb17a619e17a53349bbf494c053aa1a3425","scripts":{"dev":"tsx src/index.ts","lint":"biome lint .","build":"npm run clean && tsc -p tsconfig.json && node scripts/ensure-shebang.js","clean":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"","format":"biome format --write .","prepack":"npm run build","type-check":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"moehaje","email":"hello@moee.dev"},"repository":{"url":"git+https://github.com/moehaje/xci.git","type":"git"},"_npmVersion":"11.6.2","description":"Local GitHub Actions runner UX powered by act.","directories":{},"_nodeVersion":"25.2.1","dependencies":{"ink":"^4.4.1","zod":"^3.23.8","yaml":"^2.4.5","react":"^18.2.0","@clack/prompts":"^0.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","typescript":"^5.3.3","@types/node":"^20.14.10","@types/react":"^18.3.1","@biomejs/biome":"^2.3.13","@types/react-dom":"^18.3.0"},"_npmOperationalInternal":{"tmp":"tmp/xci_0.1.3_1769722972185_0.6859711271078539","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@artsnlabs/xci","version":"0.1.4","keywords":["github-actions","ci","act","cli","tui"],"author":{"url":"https://moee.dev","name":"Moe Haje","email":"hello@moee.dev"},"license":"MIT","_id":"@artsnlabs/xci@0.1.4","maintainers":[{"name":"moehaje","email":"hello@moee.dev"}],"homepage":"https://github.com/moehaje/xci#readme","bugs":{"url":"https://github.com/moehaje/xci/issues"},"bin":{"xci":"dist/index.js"},"dist":{"shasum":"7b54b8d82af6130f4e1387466e0b40df05a820b1","tarball":"https://registry.npmjs.org/@artsnlabs/xci/-/xci-0.1.4.tgz","fileCount":122,"integrity":"sha512-Ckt0enyKRN798dnKdoF6HFwxmeSr1L2q1ctznxKhtsEbXyWk/AQl5Bb1j/oWJ13yO645v9yNrTJLwpEHEy1lPQ==","signatures":[{"sig":"MEYCIQC6wpMBAO7El+jf6+ARoNlHgxhN+9o/GQqdpdKoReC0NwIhALBudRAYOMtlMXhZvRxr4xGzACTuejbnMaPA3+7ywZDJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":246492},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"bd19d770e9bda8b8bd773dadc76f1879eb850c22","scripts":{"dev":"tsx src/index.ts","lint":"biome lint .","build":"npm run clean && tsc -p tsconfig.json && node scripts/ensure-shebang.js","clean":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"","format":"biome format --write .","prepack":"npm run build","type-check":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"moehaje","email":"hello@moee.dev"},"repository":{"url":"git+https://github.com/moehaje/xci.git","type":"git"},"_npmVersion":"11.6.2","description":"Local GitHub Actions runner UX powered by act.","directories":{},"_nodeVersion":"25.2.1","dependencies":{"ink":"^4.4.1","zod":"^3.23.8","yaml":"^2.4.5","react":"^18.2.0","@clack/prompts":"^0.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","typescript":"^5.3.3","@types/node":"^20.14.10","@types/react":"^18.3.1","@biomejs/biome":"^2.3.13","@types/react-dom":"^18.3.0"},"_npmOperationalInternal":{"tmp":"tmp/xci_0.1.4_1769724195424_0.5640794868233396","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@artsnlabs/xci","version":"0.1.5","keywords":["github-actions","ci","act","cli","tui"],"author":{"url":"https://moee.dev","name":"Moe Haje","email":"hello@moee.dev"},"license":"MIT","_id":"@artsnlabs/xci@0.1.5","maintainers":[{"name":"moehaje","email":"hello@moee.dev"}],"homepage":"https://github.com/moehaje/xci#readme","bugs":{"url":"https://github.com/moehaje/xci/issues"},"bin":{"xci":"dist/index.js"},"dist":{"shasum":"2d7f21ad6f7f567e8ee6df99099dd84dab1447f0","tarball":"https://registry.npmjs.org/@artsnlabs/xci/-/xci-0.1.5.tgz","fileCount":152,"integrity":"sha512-Z5eXeoQoYiiT2CfNkOuQZ6g1j7vNxVyMokpHpG4Rlo+SXSbi8+YcWe9Yefp1EOWgmnEn5ptCO3zOnjDCWySt6Q==","signatures":[{"sig":"MEYCIQD5hU5GIyYRsH3jIMRhX7QuRRY5QaLYTZW0xi2CVeYKwQIhAN7cBE7gQVrUFHRdR+dpSe3yQGYNdugD05SQoFFdC8nu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":378203},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"9333e69b2f35de6fbf740557c20ebaeaf0cca5ad","scripts":{"dev":"tsx src/index.ts","lint":"biome lint .","build":"npm run clean && tsc -p tsconfig.json && node scripts/ensure-shebang.js","clean":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"","format":"biome format --write .","prepack":"npm run build","type-check":"tsc -p tsconfig.json --noEmit","release:homebrew-metadata":"node scripts/homebrew-metadata.js --formula"},"_npmUser":{"name":"moehaje","email":"hello@moee.dev"},"repository":{"url":"git+https://github.com/moehaje/xci.git","type":"git"},"_npmVersion":"11.8.0","description":"Local GitHub Actions runner UX powered by act.","directories":{},"_nodeVersion":"22.19.0","dependencies":{"ink":"^4.4.1","zod":"^3.23.8","yaml":"^2.4.5","react":"^18.2.0","@clack/prompts":"^0.7.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","typescript":"^5.3.3","@types/node":"^20.14.10","@types/react":"^18.3.1","@biomejs/biome":"^2.3.13","@types/react-dom":"^18.3.0"},"_npmOperationalInternal":{"tmp":"tmp/xci_0.1.5_1770156075684_0.2908513020162977","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@artsnlabs/xci","version":"0.1.6","keywords":["github-actions","ci","act","cli","tui"],"author":{"url":"https://moee.dev","name":"Moe Haje","email":"hello@moee.dev"},"license":"MIT","_id":"@artsnlabs/xci@0.1.6","maintainers":[{"name":"moehaje","email":"hello@moee.dev"}],"homepage":"https://github.com/moehaje/xci#readme","bugs":{"url":"https://github.com/moehaje/xci/issues"},"bin":{"xci":"dist/index.js"},"dist":{"shasum":"a2af594f564ea9c18e300c8eca1691f4f74951e4","tarball":"https://registry.npmjs.org/@artsnlabs/xci/-/xci-0.1.6.tgz","fileCount":157,"integrity":"sha512-uk+p16vjE9k9wTRY10gda6xs5Ov5AFT983hEezKdgj/IuAwuIENnGUXRY+UQaPyBiJ2saXPULhP2XraJLG4gBA==","signatures":[{"sig":"MEUCIQDyPwUnPsQ8m21J7yhI/Pz+qS7r4FrRCtx++IzQAJTr3QIgDLoYxVv2zpmiSEVFx/iw7Wf0sJ+0bXpy3k1LAB+Rcro=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":422806},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"6f3721815016ff51fbb71df5c482998ce17038ba","scripts":{"dev":"tsx src/index.ts","lint":"biome lint .","build":"npm run clean && tsc -p tsconfig.json && node scripts/ensure-shebang.js","clean":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"","format":"biome format --write .","prepack":"npm run build","type-check":"tsc -p tsconfig.json --noEmit","release:homebrew-metadata":"node scripts/homebrew-metadata.js --formula"},"_npmUser":{"name":"moehaje","email":"hello@moee.dev"},"repository":{"url":"git+https://github.com/moehaje/xci.git","type":"git"},"_npmVersion":"11.8.0","description":"Local GitHub Actions runner UX powered by act.","directories":{},"_nodeVersion":"22.19.0","dependencies":{"ink":"^4.4.1","zod":"^3.23.8","yaml":"^2.4.5","react":"^18.2.0","@clack/prompts":"^0.7.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","typescript":"^5.3.3","@types/node":"^20.14.10","@types/react":"^18.3.1","@biomejs/biome":"^2.3.13","@types/react-dom":"^18.3.0"},"_npmOperationalInternal":{"tmp":"tmp/xci_0.1.6_1770249626298_0.07433454788195837","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@artsnlabs/xci","version":"0.2.0","description":"Local GitHub Actions runner UX powered by act.","license":"MIT","author":{"name":"Moe Haje","email":"hello@moee.dev","url":"https://moee.dev"},"repository":{"type":"git","url":"git+https://github.com/moehaje/xci.git"},"bugs":{"url":"https://github.com/moehaje/xci/issues"},"homepage":"https://github.com/moehaje/xci#readme","type":"module","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"engines":{"node":">=18"},"keywords":["github-actions","ci","act","cli","tui"],"bin":{"xci":"dist/index.js"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"scripts":{"clean":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"","build":"npm run clean && tsc -p tsconfig.json && node scripts/ensure-shebang.js","dev":"tsx src/index.ts","format":"biome format --write .","format:check":"biome format .","lint":"biome lint .","prepare":"husky","prepack":"npm run build","release:homebrew-metadata":"node scripts/homebrew-metadata.js --formula","smoke:packaged":"node scripts/smoke-packaged-cli.js","test":"vitest run","type-check":"tsc -p tsconfig.json --noEmit"},"lint-staged":{"*.{ts,tsx,js,mjs,cjs,json,yml,yaml,md}":["biome check --write --no-errors-on-unmatched"]},"dependencies":{"@clack/prompts":"^0.7.0","ink":"^4.4.1","react":"^18.2.0","yaml":"^2.4.5","zod":"^3.23.8"},"devDependencies":{"@biomejs/biome":"^2.3.13","@types/node":"^20.14.10","@types/react":"^18.3.1","@types/react-dom":"^18.3.0","husky":"^9.1.7","lint-staged":"^16.2.7","tsx":"^4.7.0","typescript":"^5.3.3","vitest":"^4.0.18"},"_id":"@artsnlabs/xci@0.2.0","gitHead":"5f6ef9f62fa5514fd13926d554ff831af5238d86","_nodeVersion":"20.20.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-wKaxH3DavopboWBGiFxf/sgDehBuikMDLi4SYWic3X+143Ls6ZG7nrRzIHZmYGXEAG6MQg4+sQ1HTJJJd/giPA==","shasum":"0170bfc79f89aafeefcd694d7a16fcf648e34bb5","tarball":"https://registry.npmjs.org/@artsnlabs/xci/-/xci-0.2.0.tgz","fileCount":197,"unpackedSize":478382,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIG/pZsutQPOkwXMdnW9yQQuERQ0IUKHNoGMkcwUKJzS1AiBnMzbJvtDVbhnsFCGy81qEdugVUQF/yohMKxaj1KdVLQ=="}]},"_npmUser":{"name":"moehaje","email":"hello@moee.dev"},"directories":{},"maintainers":[{"name":"moehaje","email":"hello@moee.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/xci_0.2.0_1770318956644_0.007966570369369874"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-29T21:38:24.144Z","modified":"2026-02-05T19:15:57.056Z","0.1.2":"2026-01-29T21:38:24.359Z","0.1.3":"2026-01-29T21:42:52.355Z","0.1.4":"2026-01-29T22:03:15.583Z","0.1.5":"2026-02-03T22:01:15.852Z","0.1.6":"2026-02-05T00:00:26.473Z","0.2.0":"2026-02-05T19:15:56.934Z"},"bugs":{"url":"https://github.com/moehaje/xci/issues"},"author":{"name":"Moe Haje","email":"hello@moee.dev","url":"https://moee.dev"},"license":"MIT","homepage":"https://github.com/moehaje/xci#readme","keywords":["github-actions","ci","act","cli","tui"],"repository":{"type":"git","url":"git+https://github.com/moehaje/xci.git"},"description":"Local GitHub Actions runner UX powered by act.","maintainers":[{"name":"moehaje","email":"hello@moee.dev"}],"readme":"# XCI\n\n[![npm version](https://img.shields.io/npm/v/%40artsnlabs%2Fxci)](https://www.npmjs.com/package/@artsnlabs/xci)\n[![npm downloads](https://img.shields.io/npm/dm/%40artsnlabs%2Fxci)](https://www.npmjs.com/package/@artsnlabs/xci)\n[![license](https://img.shields.io/npm/l/%40artsnlabs%2Fxci)](LICENSE)\n[![CI](https://github.com/moehaje/xci/actions/workflows/ci.yml/badge.svg)](https://github.com/moehaje/xci/actions/workflows/ci.yml)\n\nXCI is a local GitHub Actions runner UX for running workflows locally with a polished terminal experience, delegating execution to `act`.\n\n## Features\n\n- Discover workflows under `.github/workflows/*.yml`\n- Interactive selection of workflows and jobs\n- Non-interactive usage with flags\n- Local runs via `act` with Docker/Podman\n- Run history and logs under `.xci/runs/<run-id>/`\n\n## Architecture\n\nXCI is built as a small set of layers with strict dependency direction:\n\n```\ncore -> engine + store -> cli + tui\n```\n\nKey modules:\n- `src/core/`: workflow discovery + parsing\n- `src/engines/`: engine adapters (v1: act)\n- `src/store/`: run persistence\n- `src/cli/`: CLI wiring and non-interactive usage\n- `src/tui/`: Ink UI rendering\n\nSee `docs/architecture.md` for details.\n\n## Demo\n\n![XCI demo placeholder](.github/assets/xci-demo.gif)\n\n## Requirements\n\n- Node.js 18+\n- `act` installed and available on PATH\n- Docker or Podman running\n\n## Install\n\n```bash\nnpm i -g @artsnlabs/xci\n```\n\nHomebrew (tap, available now):\n\n```bash\nbrew tap moehaje/tap\nbrew install xci\n```\n\nTap installs `xci` with `act`; Docker or Podman still needs to be running.\n\nHomebrew one-command install:\n\n```bash\nbrew install moehaje/tap/xci\n```\n\nFor release/update flow, see `docs/homebrew-core.md`.\n\n## Usage\n\nExamples below use both `xci` and `xci run` forms.\n\nGlobal install:\n\n```bash\nxci\nxci run\nxci run --workflow ci.yml --event push --job build-and-test\nxci run --workflow ci.yml --all --json\n```\n\nWithout global install:\n\n```bash\nnpx xci\nnpx xci run\nnpx xci run --workflow ci.yml --event push --job build-and-test\nnpx xci run --workflow ci.yml --all --json\n```\n\n## Configuration\n\nCreate a `.xci.yml` at the repo root:\n\n```yml\nengine: act\nruntime:\n  container: docker\n  architecture: amd64\n  cleanupMode: fast\n  image:\n    ubuntu-latest: ghcr.io/catthehacker/ubuntu:act-latest\npresets:\n  quick:\n    jobs: [build-and-test, code-quality]\n```\n\nCleanup modes:\n- `off`: skip post-run cleanup\n- `fast` (default): remove act containers and ephemeral act volumes, keep `act-toolcache` + images\n- `full`: remove act containers, all act volumes (including `act-toolcache`), and act images\n\nUse `--no-cleanup` to force `off` for one run, or `--cleanup-mode off|fast|full` to override per run.\n\n## Project Health\n\n- [CI workflow](.github/workflows/ci.yml)\n- [Contributing guide](CONTRIBUTING.md)\n- [Security policy](SECURITY.md)\n- [Code of conduct](CODE_OF_CONDUCT.md)\n- [Changelog](CHANGELOG.md)\n- [Versioning policy](VERSIONING.md)\n\n## Development\n\n```bash\nnpm install\nnpm run build\nnpm run type-check\n```\n\nDocs:\n- `docs/architecture.md`\n- `docs/testing.md`\n- `docs/exit-codes.md`\n\n## License\n\nMIT\n","readmeFilename":"README.md"}