Development workspace for the ChELL stack — four independently-published npm packages that layer into one interactive ChRIS shell:
chell (@fnndsc/chell) REPL / CLI ← top
└ chili (@fnndsc/chili) controller / commands
└ salsa (@fnndsc/salsa) logic / intents
└ cumin (@fnndsc/cumin) state / infra
└ @fnndsc/chrisapi REST client ← from npm
This repo contains no stack source — only the npm-workspace glue and helper scripts. It exists so you can develop across all four layers at once with a single install, while each layer still publishes and installs standalone.
To just use the shell:
npm install -g @fnndsc/chell
chelltui-dev is only for developing the stack.
git clone https://github.com/FNNDSC/tui-dev
cd tui-dev
./bootstrap.sh # clones cumin/salsa/chili/chell + npm installbootstrap.sh clones the four repos as siblings and runs one npm install.
Because each layer depends on the others via ^semver, npm satisfies those
ranges with the local checkouts (symlinked into node_modules/@fnndsc/*)
instead of downloading them. @fnndsc/chrisapi comes from npm.
Edit a layer, rebuild that layer, run chell:
# e.g. after editing cumin/src/...
npm run build -w @fnndsc/cumin
node chell/dist/index.jsLayers above load the changed layer from its dist/ through the symlink — no
publishing, no file: edits.
npm run build # build all, in dependency order
npm test # test all
npm run pull # git pull --ff-only across all fourtui-dev/
├── package.json bootstrap.sh build.sh test.sh pull.sh (tracked here)
├── cumin/ salsa/ chili/ chell/ (independent repos — gitignored here)
└── node_modules/@fnndsc/{cumin,salsa,chili,chell} → symlinks to the clones
- Node ≥ 20.12 (22.x recommended — lint-staged/husky needs
node:util.styleText) - git, npm
The four repos have differing default branches (cumin/chili → main,
salsa/chell → master); git clone checks out each repo's default
automatically.
Each layer publishes independently, bottom-up, from its own repo:
cumin → salsa → chili → chell # npm publish --access public
Deps stay ^semver (never file:), so published packages resolve from the
registry for end users while these workspaces shadow them for local dev.