fc7fc9158c
Phase 4 of RFC #308: Stateful Sense refactor. - CLAUDE.md: updated diagram, tables, examples (no more Signal) - Cleaned stale Signal Bus / DrizzleDB / _signals / retention refs across READMEs, .cursor rules, copilot instructions, .knowledge - Removed drizzle-orm from core package.json (no longer used) - Updated pnpm-lock.yaml Refs #308
32 lines
1.1 KiB
Markdown
32 lines
1.1 KiB
Markdown
# Sense compute → workflow (RFC #308)
|
|
|
|
Stateful senses no longer emit signals or pass outputs through `routeSenseComputeOutput`. The worker runs `compute(state)` and returns `{ state, workflow }`.
|
|
|
|
## Flow
|
|
|
|
```
|
|
Sense worker: compute(state) → { state, workflow }
|
|
↓
|
|
persist state JSON (data/senses/<name>.json)
|
|
↓
|
|
IPC compute-result → kernel
|
|
↓
|
|
workflow !== null → parseWorkflowTrigger (validation) → workflowManager.startWorkflow
|
|
scheduler.onSenseCompleted(senseName) → dependents with `on: [senseName]`
|
|
```
|
|
|
|
## Workflow trigger shape
|
|
|
|
When `workflow` is non-null it must be a plain object validated by `parseWorkflowTrigger()` in `packages/core/src/sense.ts`:
|
|
|
|
- `name`: non-empty string
|
|
- `maxRounds`: integer ≥ 1
|
|
- `prompt`: string
|
|
- `dryRun`: boolean
|
|
|
|
Invalid triggers are rejected by the daemon when handling the worker message (workflow is not started).
|
|
|
|
## Scheduling
|
|
|
|
Other senses list this sense under `on` in `nerve.yaml` to be scheduled when this sense completes a successful compute (see sense scheduler reverse-index in the daemon).
|