The reference Lightspeed workflow pack — and the template future packs
are cut from. One repo, one worker, one task queue (pack.hello.v1), three
workflows:
packHelloReceiverV1— bound receiver for two workflow-backed tools:hello_notify(Bound+Push+Accepted fire-and-forget) andhello_request(Bound+Push+Promises; parks until an operatorapprove_requestsignal, then resolves the session's promise with an approval receipt — the same shape a futurepack_releasetool will use).helloHousekeepingV1— an ordinary workflow not exposed as a tool.
The pack integrates with Lightspeed purely through data: a trusted caller
declares the tools at session/managed/start (see
src/contracts/tools.ts), invocations arrive on the fixed
deliver_emission signal, resolutions are signaled back to the engine
session workflow. See FOUNDRY.md for the contract and invariants, and
ls.bot/docs/foundry-plan.md for the surrounding plan.
src/contracts/ emission wire contract (engine-owned shapes) + tool decls
src/workflows/ receiver + plain workflow
src/activities/ gateway blob I/O, local helpers
src/worker.ts the worker: one process, one task queue
test/ unit + Temporal integration (incl. history replay)
e2e/ deterministic OpenAI-Responses stub, compose overlay, driver
scripts/ bootstrap / run-all (definition of done)
Node >= 22 and a sibling ../lightspeed checkout (scripts/bootstrap.sh
clones it when missing and builds the ts-client). The e2e tier also needs
Docker and a sibling ../ls.bot checkout with infra/.env prepared.
scripts/bootstrap.sh
npm run typecheck && npm test
npm run test:integration
scripts/run-all.sh --skip-e2e # laptop
scripts/run-all.sh # guest with the compose stack