git clone https://github.com/Narcooo/inkos.git
cd inkos
pnpm install
pnpm build
pnpm testNode ≥ 20, pnpm ≥ 9.
packages/
core/ # Agents, pipeline, state management, LLM providers
cli/ # Commander.js commands (22 commands)
Monorepo managed with pnpm workspaces. cli depends on core via workspace:*.
pnpm dev # Watch mode (both packages)
pnpm build # Build once
pnpm test # Run all tests
pnpm typecheck # Type-check without emitting<type>: <description>
Types: feat, fix, refactor, docs, test, chore, perf, ci
Keep commits atomic — one logical change per commit. Split new files, interface changes, tests, and docs into separate commits when they're non-trivial.
-
pnpm buildpasses -
pnpm testpasses (all existing + new tests) -
pnpm typecheckpasses - New features have tests
- No unrelated formatting changes (keep diffs focused)
- Commit messages follow the convention above
- TypeScript, strict mode
- 2-space indentation
- Immutable patterns:
{ ...obj, key: value }over mutation - Functions < 50 lines, files < 800 lines
- Errors must surface, not be swallowed (
catch { }without re-throw needs a comment) workspace:*stays in sourcepackage.json— the CI pipeline handles version replacement at publish time
- Create
packages/cli/src/commands/<name>.ts - Export a
Commandinstance - Register it in
packages/cli/src/index.ts - Add
--jsonoutput support - Support book-id auto-detection when only one book exists
- Create
packages/core/genres/<id>.mdwith YAML frontmatter - Define:
chapterTypes,fatigueWords,numericalSystem,powerScaling,pacingRule,satisfactionTypes,auditDimensions,language - Add genre body (prohibitions, language rules, narrative guidance)
Tests live next to source in __tests__/ directories. We use Vitest.
pnpm --filter @actalk/inkos-core test # Core tests only
pnpm --filter @actalk/inkos test # CLI tests onlyFor features touching the LLM pipeline, mock the LLM calls — don't make real API requests in tests.
Open an issue or check existing ones: https://github.com/Narcooo/inkos/issues