jsfe 0.9.88 → 0.9.90
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +83 -6
- package/dist/index.d.ts +26 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +223 -11
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -12,6 +12,7 @@ npm i jsfe
|
|
|
12
12
|
- **[JavaScript Flow Engine User Guide](user-guide.md)**
|
|
13
13
|
- Comprehensive tutorials, examples, and best practices
|
|
14
14
|
- **[README.md](README.md)** - Technical API reference (this document)
|
|
15
|
+
- **[System Flows](docs/system-flows.md)** and **[Shopify Flows](docs/shopify-flows.md)** - the bundled flow and tool libraries in `flows/`, step by step
|
|
15
16
|
|
|
16
17
|
*For detailed tutorials, step-by-step examples, and comprehensive workflow patterns, see the **[User Guide](user-guide.md)**.*
|
|
17
18
|
|
|
@@ -297,7 +298,7 @@ structured form, so a host can answer it with a classifier instead of a text mod
|
|
|
297
298
|
async function aiCallback(systemInstruction, userMessage, jsonSchema, request) {
|
|
298
299
|
if (request?.task === 'detect_flow') {
|
|
299
300
|
// request.input — the user input, exactly as in <user-input>
|
|
300
|
-
// request.conversation —
|
|
301
|
+
// request.conversation — the last user/assistant turn: [{ role, content }], oldest first; [] when none
|
|
301
302
|
// request.flows — [{ id, name, description, parameters: [{ name, description, type?, enum? }] }]
|
|
302
303
|
// Reply exactly as the text path does: a JSON string { flowName, parameters }, flowName being a
|
|
303
304
|
// flow's name (or "None"). The engine validates it the same way, enums included.
|
|
@@ -327,10 +328,18 @@ const body = buildAiRequest(
|
|
|
327
328
|
- `buildAiRequest(model, systemInstruction, userMessage, jsonSchema)`, `parseSchemaArg`, `schemaName`.
|
|
328
329
|
`model` fields: `name`, `reservedReplySize`, and the optional `tokenParam`, `supportsSchema`,
|
|
329
330
|
`fixedSampling` and `extraParams`.
|
|
330
|
-
- `isDetectFlowRequest`, `toFlowRequest` / `fromFlowAnswers` (which flow), `
|
|
331
|
-
`fromParameterAnswers` (its enum and boolean parameters),
|
|
332
|
-
`mergeTextParameters`, `INTENT_YES_THRESHOLD`: these map the structured
|
|
333
|
-
request to TypeSafe System One and back. The host sends the requests.
|
|
331
|
+
- `isDetectFlowRequest`, `toFlowRequest` / `fromFlowAnswers` (which flow), `hasJevParameters` /
|
|
332
|
+
`toParameterRequest` / `fromParameterAnswers` (its enum and boolean parameters),
|
|
333
|
+
`freeTextParameters`, `mergeTextParameters`, `INTENT_YES_THRESHOLD`: these map the structured
|
|
334
|
+
intent-detection request to TypeSafe System One and back. The host sends the requests.
|
|
335
|
+
- Stage 1 asks one yes/no probability per flow and picks the highest if it reaches
|
|
336
|
+
`INTENT_YES_THRESHOLD` (0.5), else `"None"`. Stage 2, for the chosen flow only, asks one per enum
|
|
337
|
+
value and one per boolean parameter. Below the threshold a parameter is omitted (the flow asks for
|
|
338
|
+
it), never set to `false`.
|
|
339
|
+
- Any question that comes back unanswered makes the decoder **throw**, so the host can fall back
|
|
340
|
+
to a text model rather than read a missing answer as "no".
|
|
341
|
+
- `mergeTextParameters` adds a text model's free-text parameters only when the text model chose
|
|
342
|
+
the same flow. The classifier's enum and boolean values always win.
|
|
334
343
|
|
|
335
344
|
**Alternative AI Services:**
|
|
336
345
|
You can integrate any AI service (Claude, Gemini, local LLMs, etc.) by implementing this same interface. The engine only requires a function that takes system instructions and user input, then returns an AI response.
|
|
@@ -380,6 +389,8 @@ const flowsMenu = [
|
|
|
380
389
|
value, a value repeated ignoring case, and an enum on a non-string type.
|
|
381
390
|
- Declare an enum wherever the allowed values are a closed set. It also lets a host answer intent
|
|
382
391
|
detection with a classifier instead of a text model (see the `request` argument of `aiCallback`).
|
|
392
|
+
- Validation also requires `parameters` to be an array, every parameter to have a non-empty
|
|
393
|
+
`name`, and names to be unique within the flow.
|
|
383
394
|
- **`steps`** (required): Array of workflow steps to execute
|
|
384
395
|
- **`variables`** (optional): Flow-specific variable definitions with types and descriptions
|
|
385
396
|
- **`version`** (optional): Flow version for compatibility tracking (defaults to "1.0")
|
|
@@ -517,6 +528,22 @@ sessionContext.cargo.userProfile = {
|
|
|
517
528
|
sessionContext = await engine.updateActivity(userEntry, sessionContext);
|
|
518
529
|
```
|
|
519
530
|
|
|
531
|
+
#### Voice Sessions: `cargo.voice` and `cargo.digits`
|
|
532
|
+
|
|
533
|
+
Two cargo fields connect the engine to a voice channel:
|
|
534
|
+
|
|
535
|
+
- **`cargo.voice`** (set by the host): when truthy, the answer a `SAY-GET` collects into its
|
|
536
|
+
`variable` is cleaned by `aiCallback` before it is stored. The cleaner receives the question just asked and the caller's
|
|
537
|
+
words. It removes filler words, maps yes/no answers to `"yes"` / `"no"`, and writes spoken
|
|
538
|
+
numbers, phone numbers and emails in their written form ("john dot doe at gmail dot com" →
|
|
539
|
+
`john.doe@gmail.com`). It **never returns an email address or phone number that appears in the
|
|
540
|
+
question**: when a prompt reads a failed value back ("I could not verify the email
|
|
541
|
+
pinkas@example.com…"), the caller's answer is treated as a correction, and a near-miss such as
|
|
542
|
+
`rpinkas@…` is kept as said. If the cleanup fails or returns nothing, the raw answer is used.
|
|
543
|
+
- **`cargo.digits`** (set by the engine): when a `SAY-GET` step declares `digits` (for example
|
|
544
|
+
`{ "min": 6, "max": 6 }`), the engine copies it to `cargo.digits` while the answer is awaited, so
|
|
545
|
+
the host can configure keypad (DTMF) collection. It is removed once the input is collected.
|
|
546
|
+
|
|
520
547
|
#### Correct Session Update Pattern
|
|
521
548
|
|
|
522
549
|
```javascript
|
|
@@ -588,6 +615,12 @@ The method returns an updated `EngineSessionContext` containing:
|
|
|
588
615
|
- **Updated flow state**: Modified flow stacks, variables, and execution context
|
|
589
616
|
- **Response data**: If a workflow was triggered, `sessionContext.response` contains the result
|
|
590
617
|
- **Session metadata**: Updated timestamps, accumulated messages, and transaction data
|
|
618
|
+
- **`lastTurnToolCalls`**: every tool call this `updateActivity` attempted (see
|
|
619
|
+
[Host Responsibilities](#host-responsibilities-tool-calls-cancellation-and-concurrency))
|
|
620
|
+
- **`lastFlowOutcome`**: the declared outcome of a flow that terminated during this call, if any
|
|
621
|
+
(see [Declared flow outcomes](#declared-flow-outcomes-lastflowoutcome))
|
|
622
|
+
- **`lastTurnDispatch`**: `{ fromFlow, matchedFlow }` when a `DISPATCH` step re-routed this call's
|
|
623
|
+
input (`matchedFlow` is `null` when no flow matched and the response is `null`); one-shot
|
|
591
624
|
|
|
592
625
|
### Integration Pattern
|
|
593
626
|
|
|
@@ -624,6 +657,11 @@ return aiResponse;
|
|
|
624
657
|
- **Session isolation**: Each user/conversation needs its own session context
|
|
625
658
|
- **Response checking**: Check `sessionContext.response` to determine if a workflow handled the input
|
|
626
659
|
- **Persistence**: Your application should persist the updated session context between requests
|
|
660
|
+
- **`JSFEActiveFlowEmptyResponse`**: if a flow is still active but its last step produced no output
|
|
661
|
+
and was not a `RETURN`, `updateActivity` resets the session's flow stacks (cargo and global
|
|
662
|
+
variables are kept), clears pending messages, and throws an error with this `name`. The session
|
|
663
|
+
is already repaired: the next turn starts with fresh intent detection. Log or record the error;
|
|
664
|
+
no rollback is needed. A deliberate `RETURN ''` (which ends every flow) is not flagged.
|
|
627
665
|
|
|
628
666
|
### Host Responsibilities: Tool Calls, Cancellation and Concurrency
|
|
629
667
|
|
|
@@ -702,6 +740,40 @@ if (turnWasCancelled && after.lastTurnToolCalls.length === 0) {
|
|
|
702
740
|
await persist(session);
|
|
703
741
|
```
|
|
704
742
|
|
|
743
|
+
### Declared flow outcomes: `lastFlowOutcome`
|
|
744
|
+
|
|
745
|
+
A flow can say how it ended, not just that it ended. An optional `outcome` (and `reason`) on a step
|
|
746
|
+
is remembered on the flow and applied when the flow terminates. Put it on the step that ends the
|
|
747
|
+
flow: a `RETURN`, an `END` or a final `SAY`:
|
|
748
|
+
|
|
749
|
+
```json
|
|
750
|
+
{ "id": "say_support_message", "type": "SAY", "value": "Sorry I couldn't help! ...",
|
|
751
|
+
"outcome": "unresolved", "reason": "contact_support_fallback" }
|
|
752
|
+
```
|
|
753
|
+
|
|
754
|
+
- `"unresolved"`: the flow ended without resolving the user's need. Its transaction is marked
|
|
755
|
+
**failed** (reason = `reason`, or `"unresolved"`), so audits count it as a failure, not a success.
|
|
756
|
+
- `"deflected"`: a decoy flow absorbed an intent-detection false positive by design. The
|
|
757
|
+
transaction completes; do not treat it as a user struggle.
|
|
758
|
+
- `"resolved"` or any other value: informational; the transaction completes.
|
|
759
|
+
- A flow that declares nothing completes exactly as before.
|
|
760
|
+
|
|
761
|
+
The engine also stamps `engineSessionContext.lastFlowOutcome` for the host:
|
|
762
|
+
|
|
763
|
+
```typescript
|
|
764
|
+
interface FlowOutcome {
|
|
765
|
+
flowName: string;
|
|
766
|
+
outcome: string;
|
|
767
|
+
reason?: string;
|
|
768
|
+
endedBy: 'return' | 'completion'; // RETURN ended all flows; completion = ran out of steps (incl. after END)
|
|
769
|
+
}
|
|
770
|
+
```
|
|
771
|
+
|
|
772
|
+
It is **one-shot**: cleared at the start of every `updateActivity`, and set only when a flow that
|
|
773
|
+
declared an outcome terminated during that call. Hosts use it to run a recovery turn after an
|
|
774
|
+
`"unresolved"` ending. When a `RETURN` terminates several flows, only the flow that executed it
|
|
775
|
+
carries the RETURN's declaration; the others finalize with their own (usually none).
|
|
776
|
+
|
|
705
777
|
## Architecture Overview
|
|
706
778
|
|
|
707
779
|
### Stack-of-Stacks Design
|
|
@@ -735,6 +807,7 @@ their original workflow seamlessly.
|
|
|
735
807
|
lastSayMessage?: string; // Last SAY step output for context
|
|
736
808
|
pendingInterruption?: Record<string, unknown>; // Interruption state management
|
|
737
809
|
accumulatedMessages?: string[]; // Accumulated SAY messages for batching
|
|
810
|
+
declaredOutcome?: { outcome: string; reason?: string }; // From a step's `outcome`, applied when the frame terminates
|
|
738
811
|
parentTransaction?: string; // Parent transaction ID for sub-flow tracking
|
|
739
812
|
justResumed?: boolean; // Flag indicating flow was just resumed
|
|
740
813
|
}
|
|
@@ -939,7 +1012,7 @@ their original workflow seamlessly.
|
|
|
939
1012
|
- ✅ **Flow Interruption** - Suspend current flow for new task
|
|
940
1013
|
- ✅ **Flow Resumption** - Return to previously suspended flows
|
|
941
1014
|
- ✅ **Flow Replacement** - Replace current flow with new flow
|
|
942
|
-
- ✅ **Flow Reboot** - Nuclear option: clear all flows and restart
|
|
1015
|
+
- ✅ **Flow Reboot** - Nuclear option: clear all flows and restart (SAY output accumulated before the reboot is kept and delivered with the new flow's output)
|
|
943
1016
|
|
|
944
1017
|
### Step Types
|
|
945
1018
|
- ✅ **SAY** - Non-blocking output messages (accumulated)
|
|
@@ -951,6 +1024,10 @@ their original workflow seamlessly.
|
|
|
951
1024
|
- ✅ **SWITCH** - Conditional branching based on single value matching
|
|
952
1025
|
- ✅ **RETURN** - Terminate all flows and return evaluated expression value (an EXIT/abort)
|
|
953
1026
|
- ✅ **END** - Return from the current flow only, resuming the parent flow — a functional `return` (no value; variables are shared with the parent)
|
|
1027
|
+
- ✅ **DISPATCH** - End all flows and route this turn's input through intent detection, as if no flow had been active (a matched flow starts in the same turn; no match → no response, the host answers). Resets everything, declares no outcome, takes only `id`. See the user guide's *DISPATCH Steps*
|
|
1028
|
+
|
|
1029
|
+
A terminal step (`RETURN`, `END` or a final `SAY`) may also carry `outcome` / `reason`; see
|
|
1030
|
+
[Declared flow outcomes](#declared-flow-outcomes-lastflowoutcome).
|
|
954
1031
|
|
|
955
1032
|
### Step Reliability: Validation & Retry
|
|
956
1033
|
Any step can also declare:
|
package/dist/index.d.ts
CHANGED
|
@@ -126,7 +126,7 @@ export declare const GUIDANCE_CONFIG_EXAMPLES: {
|
|
|
126
126
|
};
|
|
127
127
|
export declare function getSystemMessage(engine: Engine, messageId: string, context?: Record<string, unknown>): string;
|
|
128
128
|
export declare function getFlowPrompt(engine: Engine, flowName: string): string;
|
|
129
|
-
export type StepType = 'SAY' | 'SAY-GET' | 'SET' | 'CALL-TOOL' | 'FLOW' | 'SWITCH' | 'CASE' | 'RETURN' | 'END';
|
|
129
|
+
export type StepType = 'SAY' | 'SAY-GET' | 'SET' | 'CALL-TOOL' | 'FLOW' | 'SWITCH' | 'CASE' | 'RETURN' | 'END' | 'DISPATCH';
|
|
130
130
|
export interface ContextEntry {
|
|
131
131
|
role: 'user' | 'assistant' | 'system' | 'tool';
|
|
132
132
|
content: string | Record<string, unknown> | unknown;
|
|
@@ -173,6 +173,7 @@ export type AiCallbackRequest = DetectFlowRequest;
|
|
|
173
173
|
* @property {TransactionData[]} [completedTransactions] - Completed transactions for host access
|
|
174
174
|
* @property {Record<string, unknown> | undefined} cargo - Additional session data for host use
|
|
175
175
|
* @property {FlowOutcome} [lastFlowOutcome] - Declared outcome of a flow that TERMINATED this turn (one-shot, cleared at the start of each updateActivity)
|
|
176
|
+
* @property {DispatchRecord} [lastTurnDispatch] - Set when a DISPATCH step re-routed this turn's input (one-shot, cleared at the start of each updateActivity)
|
|
176
177
|
*/
|
|
177
178
|
export interface EngineSessionContext {
|
|
178
179
|
sessionId: string;
|
|
@@ -193,6 +194,16 @@ export interface EngineSessionContext {
|
|
|
193
194
|
hasTentativeFlowInit?: boolean;
|
|
194
195
|
lastFlowOutcome?: FlowOutcome;
|
|
195
196
|
lastTurnToolCalls?: ToolCallRecord[];
|
|
197
|
+
lastTurnDispatch?: DispatchRecord;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Host-facing record of a DISPATCH: the flow whose DISPATCH step ended every flow, and the flow
|
|
201
|
+
* intent detection then started with the same input — or null when none matched, in which case
|
|
202
|
+
* the engine returned no response and the host answers the turn itself.
|
|
203
|
+
*/
|
|
204
|
+
export interface DispatchRecord {
|
|
205
|
+
fromFlow: string;
|
|
206
|
+
matchedFlow: string | null;
|
|
196
207
|
}
|
|
197
208
|
/**
|
|
198
209
|
* One tool call the engine ATTEMPTED during an updateActivity call — see
|
|
@@ -548,6 +559,11 @@ export declare class WorkflowEngine implements Engine {
|
|
|
548
559
|
* warning on a mismatch. Diagnostic only — a result is never altered or withheld because of it.
|
|
549
560
|
*/
|
|
550
561
|
validateToolReturns: boolean;
|
|
562
|
+
/**
|
|
563
|
+
* Set by a DISPATCH step to the name of the flow that dispatched; processActivity consumes it
|
|
564
|
+
* within the same call and routes the turn's input to intent detection. Never persisted.
|
|
565
|
+
*/
|
|
566
|
+
pendingDispatchFrom: string | null;
|
|
551
567
|
private enabledCommands;
|
|
552
568
|
private commandsEnabled;
|
|
553
569
|
private sessionContext;
|
|
@@ -682,6 +698,9 @@ export declare class WorkflowEngine implements Engine {
|
|
|
682
698
|
stampFlowOutcome(outcome: FlowOutcome): void;
|
|
683
699
|
getTentativeFlowInit(): boolean;
|
|
684
700
|
initializeFlowStacks(): void;
|
|
701
|
+
resetFlowState(): void;
|
|
702
|
+
clearFlowOutcome(): void;
|
|
703
|
+
recordDispatch(record: DispatchRecord): void;
|
|
685
704
|
getCurrentStack(): FlowFrame[];
|
|
686
705
|
getCurrentStackLength(): number;
|
|
687
706
|
getCurrentFlowFrame(): FlowFrame;
|
|
@@ -709,6 +728,12 @@ export declare class WorkflowEngine implements Engine {
|
|
|
709
728
|
* @returns Validation result with errors, warnings, and flow graph
|
|
710
729
|
*/
|
|
711
730
|
validateFlow(flowName: string, options?: any): any;
|
|
731
|
+
/**
|
|
732
|
+
* Errors when a DISPATCH step is reachable from the start of `entryFlow` with no SAY-GET on the
|
|
733
|
+
* way. Follows call/replace/reboot FLOW steps (all run in the same turn) and onFail handlers;
|
|
734
|
+
* CASE/SWITCH branches are alternatives. A RETURN ends the turn; END returns to the caller.
|
|
735
|
+
*/
|
|
736
|
+
private _checkDispatchBeforeSayGet;
|
|
712
737
|
/**
|
|
713
738
|
* Recursively validates a flow and its sub-flows
|
|
714
739
|
*/
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -2228,6 +2228,11 @@ async function playFlowFrame(engine) {
|
|
|
2228
2228
|
logger.info(`RETURN step executed, terminating all flows and returning value`);
|
|
2229
2229
|
return result;
|
|
2230
2230
|
}
|
|
2231
|
+
// DISPATCH ended every flow; processActivity routes this turn's input (see handleDispatchStep)
|
|
2232
|
+
if (step.type === 'DISPATCH') {
|
|
2233
|
+
logger.info(`DISPATCH step executed, all flows ended; handing this turn's input back to intent detection`);
|
|
2234
|
+
return result;
|
|
2235
|
+
}
|
|
2231
2236
|
// For SAY, CALL-TOOL, FLOW, and SET steps, continue processing automatically (non-blocking)
|
|
2232
2237
|
continue;
|
|
2233
2238
|
}
|
|
@@ -2309,6 +2314,8 @@ async function playStep(currentFlowFrame, engine) {
|
|
|
2309
2314
|
return handleReturnStep(currentFlowFrame, engine);
|
|
2310
2315
|
case 'END':
|
|
2311
2316
|
return handleEndStep(currentFlowFrame);
|
|
2317
|
+
case 'DISPATCH':
|
|
2318
|
+
return handleDispatchStep(currentFlowFrame, engine);
|
|
2312
2319
|
default:
|
|
2313
2320
|
throw new Error(`Unknown step type: ${step.type}`);
|
|
2314
2321
|
}
|
|
@@ -3126,8 +3133,15 @@ async function handleToolStep(currentFlowFrame, engine) {
|
|
|
3126
3133
|
logger.info(`Calling onFail step as sub-flow for tool ${step.tool}`);
|
|
3127
3134
|
// New behavior - call onFail as sub-flow (preserves current flow)
|
|
3128
3135
|
if (onFailStep.type === "FLOW") {
|
|
3129
|
-
// Push onFail flow as sub-flow
|
|
3130
|
-
|
|
3136
|
+
// Push onFail flow as sub-flow. A FLOW step names its target in `value` (id or name), exactly
|
|
3137
|
+
// as the reboot path and handleFlowStep resolve it. This looked up `onFailStep.name` — a field
|
|
3138
|
+
// a FLOW step does not carry — so the handler was never found, nothing was logged, and the
|
|
3139
|
+
// flow simply continued past the failed tool.
|
|
3140
|
+
const target = onFailStep.value ?? onFailStep.name;
|
|
3141
|
+
const onFailFlow = flowsMenu?.find(f => f.id === target || f.name === target);
|
|
3142
|
+
if (!onFailFlow) {
|
|
3143
|
+
logger.error(`onFail flow ${target} (callType call) for tool ${step.tool} not found in flows menu`);
|
|
3144
|
+
}
|
|
3131
3145
|
if (onFailFlow) {
|
|
3132
3146
|
const transaction = TransactionManager.create(onFailFlow.name, 'onFail-recovery', currentFlowFrame.userId);
|
|
3133
3147
|
const variables = { ...currentFlowFrame.variables }; // Inherit variables
|
|
@@ -3149,15 +3163,18 @@ async function handleToolStep(currentFlowFrame, engine) {
|
|
|
3149
3163
|
}
|
|
3150
3164
|
}
|
|
3151
3165
|
else {
|
|
3152
|
-
//
|
|
3153
|
-
|
|
3166
|
+
// Non-FLOW onFail runs NEXT. flowStepsStack is read with pop(), so the next step is pushed
|
|
3167
|
+
// (as a CASE branch and a tool retry are). This was unshift(), which put the onFail step at
|
|
3168
|
+
// the BOTTOM: it ran after every remaining step — a SAY arrived a turn late or never, and a
|
|
3169
|
+
// SET left the CALL-TOOL variable holding the error text while later steps read it.
|
|
3170
|
+
currentFlowFrame.flowStepsStack.push(onFailStep);
|
|
3154
3171
|
return `Tool ${step.tool} failed, executing onFail step`;
|
|
3155
3172
|
}
|
|
3156
3173
|
}
|
|
3157
3174
|
else {
|
|
3158
3175
|
logger.info(`Adding non FLOW onFail step: ${onFailStep.id || onFailStep.name} to current flow stack for tool ${step.tool}`);
|
|
3159
|
-
//
|
|
3160
|
-
currentFlowFrame.flowStepsStack.
|
|
3176
|
+
// Non-FLOW onFail runs NEXT — push, not unshift (see the call-mode branch above).
|
|
3177
|
+
currentFlowFrame.flowStepsStack.push(onFailStep);
|
|
3161
3178
|
return `Tool ${step.tool} failed, executing onFail step`;
|
|
3162
3179
|
}
|
|
3163
3180
|
}
|
|
@@ -3563,6 +3580,30 @@ function handleReturnStep(currentFlowFrame, engine) {
|
|
|
3563
3580
|
// Return the evaluated value as string
|
|
3564
3581
|
return String(returnValue);
|
|
3565
3582
|
}
|
|
3583
|
+
function handleDispatchStep(currentFlowFrame, engine) {
|
|
3584
|
+
// DISPATCH = forget every flow and treat THIS turn's input as if no flow had been active:
|
|
3585
|
+
// processActivity runs intent detection on the input the turn started with (never a flow
|
|
3586
|
+
// variable a step may have rewritten). It resets ALL engine flow state — every stack, the
|
|
3587
|
+
// queued messages and the tentative flow_init flag — so nothing said by the ended flows is
|
|
3588
|
+
// delivered. It declares no outcome and clears any outcome stamped earlier this turn: the
|
|
3589
|
+
// turn's result is now whatever the re-routing produces. Tool calls already attempted this
|
|
3590
|
+
// turn stay recorded (lastTurnToolCalls) — the host must still see them.
|
|
3591
|
+
currentFlowFrame.flowStepsStack.pop(); // This handler pops its own step
|
|
3592
|
+
const fromFlow = currentFlowFrame.flowName;
|
|
3593
|
+
const exitedFlows = [];
|
|
3594
|
+
for (const stack of engine.flowStacks) {
|
|
3595
|
+
for (const flow of stack) {
|
|
3596
|
+
TransactionManager.fail(flow.transaction, `Dispatched: flow ended by DISPATCH in ${fromFlow}`);
|
|
3597
|
+
exitedFlows.push(flow.flowName);
|
|
3598
|
+
auditLogger.logFlowExit(flow.flowName, currentFlowFrame.userId, flow.transaction.id, 'dispatch_step');
|
|
3599
|
+
}
|
|
3600
|
+
}
|
|
3601
|
+
engine.resetFlowState();
|
|
3602
|
+
engine.clearFlowOutcome();
|
|
3603
|
+
engine.pendingDispatchFrom = fromFlow;
|
|
3604
|
+
logger.info(`DISPATCH step in '${fromFlow}': ended flows [${exitedFlows.join(', ')}]; this turn's input goes to intent detection.`);
|
|
3605
|
+
return '';
|
|
3606
|
+
}
|
|
3566
3607
|
function handleEndStep(currentFlowFrame) {
|
|
3567
3608
|
// END = return from the CURRENT flow only (a functional `return`), in contrast
|
|
3568
3609
|
// to RETURN which terminates ALL flows (effectively an EXIT). Clearing this
|
|
@@ -5272,6 +5313,8 @@ async function processActivity(input, userId, engine) {
|
|
|
5272
5313
|
// Debug logging
|
|
5273
5314
|
logger.info(`processActivity received input: ${JSON.stringify(input)}, sanitized: ${JSON.stringify(sanitizedInput)}`);
|
|
5274
5315
|
logger.debug(`Current stack length: ${getCurrentStackLength(engine)}`);
|
|
5316
|
+
// A DISPATCH is consumed within the call that raised it; never carry one into another turn.
|
|
5317
|
+
engine.pendingDispatchFrom = null;
|
|
5275
5318
|
// Check if we're already in a flow (using new stack-of-stacks)
|
|
5276
5319
|
if (getCurrentStackLength(engine) > 0) {
|
|
5277
5320
|
logger.info(`\n=== [${new Date().toISOString()}] Flow Handling query: ${input} ===`);
|
|
@@ -5318,8 +5361,15 @@ async function processActivity(input, userId, engine) {
|
|
|
5318
5361
|
logger.info(`Flow context updated. inputStack: ${JSON.stringify(currentFlowFrame.inputStack)}, contextStack length: ${currentFlowFrame.contextStack.length}`);
|
|
5319
5362
|
try {
|
|
5320
5363
|
const response = await playFlowFrame(engine);
|
|
5321
|
-
|
|
5322
|
-
|
|
5364
|
+
if (engine.pendingDispatchFrom === null) {
|
|
5365
|
+
logger.info(`Flow response: ${response}`);
|
|
5366
|
+
return response;
|
|
5367
|
+
}
|
|
5368
|
+
else {
|
|
5369
|
+
// DISPATCH ended every flow: fall through to the no-active-flow routing below with
|
|
5370
|
+
// this same input, exactly as if no flow had been active when the user spoke.
|
|
5371
|
+
logger.info(`DISPATCH from '${engine.pendingDispatchFrom}': routing ${JSON.stringify(sanitizedInput)} through intent detection`);
|
|
5372
|
+
}
|
|
5323
5373
|
}
|
|
5324
5374
|
catch (error) {
|
|
5325
5375
|
logger.error(`Flow execution error: ${error.message}`);
|
|
@@ -5334,8 +5384,18 @@ async function processActivity(input, userId, engine) {
|
|
|
5334
5384
|
}
|
|
5335
5385
|
// Check if input should activate a new flow
|
|
5336
5386
|
logger.debug(`No active flow, checking if input should activate new flow...`);
|
|
5387
|
+
// Set when we arrived here from a DISPATCH in the active-flow branch above.
|
|
5388
|
+
const dispatchedFrom = engine.pendingDispatchFrom;
|
|
5389
|
+
engine.pendingDispatchFrom = null;
|
|
5337
5390
|
try {
|
|
5338
5391
|
const activatedFlow = await isFlowActivated(String(sanitizedInput), engine, userId);
|
|
5392
|
+
if (dispatchedFrom !== null) {
|
|
5393
|
+
engine.recordDispatch({ fromFlow: dispatchedFrom, matchedFlow: activatedFlow ? activatedFlow.name : null });
|
|
5394
|
+
logger.info(`DISPATCH from '${dispatchedFrom}': intent detection ${activatedFlow ? `started '${activatedFlow.name}'` : 'matched no flow; the host answers this turn'}`);
|
|
5395
|
+
}
|
|
5396
|
+
else {
|
|
5397
|
+
// ordinary turn with no active flow — nothing to record
|
|
5398
|
+
}
|
|
5339
5399
|
if (activatedFlow) {
|
|
5340
5400
|
logger.info(`Flow activated: ${activatedFlow.name}`);
|
|
5341
5401
|
// Clear lastChatTurn since we now have flow context
|
|
@@ -5347,8 +5407,18 @@ async function processActivity(input, userId, engine) {
|
|
|
5347
5407
|
}
|
|
5348
5408
|
logger.debug(`Cleared lastChatTurn - now using flow context for AI operations`);
|
|
5349
5409
|
const response = await playFlowFrame(engine);
|
|
5350
|
-
|
|
5351
|
-
|
|
5410
|
+
if (engine.pendingDispatchFrom === null) {
|
|
5411
|
+
logger.info(`Initial flow response: ${response}`);
|
|
5412
|
+
return response;
|
|
5413
|
+
}
|
|
5414
|
+
else {
|
|
5415
|
+
// An activated flow reached DISPATCH before any SAY-GET. The validator rejects such a
|
|
5416
|
+
// flow, so this is an invalid flow in production. The input is routed only once per
|
|
5417
|
+
// turn: everything is already reset, so the host answers this turn.
|
|
5418
|
+
logger.error(`DISPATCH in '${engine.pendingDispatchFrom}' was reached before any SAY-GET after '${activatedFlow.name}' was activated — invalid flow (see validateFlows); no second routing, the host answers this turn`);
|
|
5419
|
+
engine.pendingDispatchFrom = null;
|
|
5420
|
+
return null;
|
|
5421
|
+
}
|
|
5352
5422
|
}
|
|
5353
5423
|
}
|
|
5354
5424
|
catch (error) {
|
|
@@ -5387,6 +5457,11 @@ export class WorkflowEngine {
|
|
|
5387
5457
|
* warning on a mismatch. Diagnostic only — a result is never altered or withheld because of it.
|
|
5388
5458
|
*/
|
|
5389
5459
|
validateToolReturns = false;
|
|
5460
|
+
/**
|
|
5461
|
+
* Set by a DISPATCH step to the name of the flow that dispatched; processActivity consumes it
|
|
5462
|
+
* within the same call and routes the turn's input to intent detection. Never persisted.
|
|
5463
|
+
*/
|
|
5464
|
+
pendingDispatchFrom = null;
|
|
5390
5465
|
// Command management for different application types (chat vs voice vs automation)
|
|
5391
5466
|
enabledCommands;
|
|
5392
5467
|
commandsEnabled;
|
|
@@ -5537,6 +5612,8 @@ export class WorkflowEngine {
|
|
|
5537
5612
|
// host deciding whether this turn's session may be discarded is not misled by a tool
|
|
5538
5613
|
// that ran on an earlier turn. See recordToolCall and "Host Responsibilities".
|
|
5539
5614
|
this.sessionContext.lastTurnToolCalls = [];
|
|
5615
|
+
// Same one-shot semantics for a DISPATCH record (see recordDispatch).
|
|
5616
|
+
delete this.sessionContext.lastTurnDispatch;
|
|
5540
5617
|
// DIAGNOSTIC: Log flowStepsStack state from loaded session (before any processing)
|
|
5541
5618
|
if (engineSessionContext.flowStacks) {
|
|
5542
5619
|
for (let si = 0; si < engineSessionContext.flowStacks.length; si++) {
|
|
@@ -5911,6 +5988,37 @@ export class WorkflowEngine {
|
|
|
5911
5988
|
logger.warn('No session context available for initializeFlowStacks');
|
|
5912
5989
|
}
|
|
5913
5990
|
}
|
|
5991
|
+
// Start from scratch: every stack, the queued messages AND the tentative flow_init flag.
|
|
5992
|
+
// The flag must go with the queue: left set over an empty queue, handleSayGetStep would take
|
|
5993
|
+
// the next flow's first SAY for the "Processing…" placeholder and drop it.
|
|
5994
|
+
resetFlowState() {
|
|
5995
|
+
if (this.sessionContext) {
|
|
5996
|
+
this.sessionContext.flowStacks = [[]];
|
|
5997
|
+
this.sessionContext.globalAccumulatedMessages = [];
|
|
5998
|
+
this.sessionContext.hasTentativeFlowInit = false;
|
|
5999
|
+
}
|
|
6000
|
+
else {
|
|
6001
|
+
logger.warn('No session context available for resetFlowState');
|
|
6002
|
+
}
|
|
6003
|
+
}
|
|
6004
|
+
// Drop an outcome stamped earlier this turn (DISPATCH: the turn's result is the re-routing's).
|
|
6005
|
+
clearFlowOutcome() {
|
|
6006
|
+
if (this.sessionContext) {
|
|
6007
|
+
delete this.sessionContext.lastFlowOutcome;
|
|
6008
|
+
}
|
|
6009
|
+
else {
|
|
6010
|
+
logger.warn('No session context available for clearFlowOutcome');
|
|
6011
|
+
}
|
|
6012
|
+
}
|
|
6013
|
+
// Record this turn's DISPATCH for the host (one-shot, see EngineSessionContext.lastTurnDispatch).
|
|
6014
|
+
recordDispatch(record) {
|
|
6015
|
+
if (this.sessionContext) {
|
|
6016
|
+
this.sessionContext.lastTurnDispatch = record;
|
|
6017
|
+
}
|
|
6018
|
+
else {
|
|
6019
|
+
logger.warn(`recordDispatch: no sessionContext for DISPATCH from ${record.fromFlow}`);
|
|
6020
|
+
}
|
|
6021
|
+
}
|
|
5914
6022
|
getCurrentStack() {
|
|
5915
6023
|
return getCurrentStack(this);
|
|
5916
6024
|
}
|
|
@@ -6057,6 +6165,17 @@ export class WorkflowEngine {
|
|
|
6057
6165
|
};
|
|
6058
6166
|
try {
|
|
6059
6167
|
this._validateFlowRecursive(flowName, validationState, opts);
|
|
6168
|
+
// A flow intent detection can start must ask the user (SAY-GET) before any reachable
|
|
6169
|
+
// DISPATCH — the input is routed once per turn, so a DISPATCH before that would end
|
|
6170
|
+
// the turn with no flow. Applies to the flows detect_flow chooses from.
|
|
6171
|
+
const flowDef = this.flowsMenu.find((f) => f.id === flowName || f.name === flowName);
|
|
6172
|
+
const hasPrimaryFlows = this.flowsMenu.some((f) => f.primary === true);
|
|
6173
|
+
if (flowDef && (!hasPrimaryFlows || flowDef.primary === true)) {
|
|
6174
|
+
this._checkDispatchBeforeSayGet(flowDef, validationState);
|
|
6175
|
+
}
|
|
6176
|
+
else {
|
|
6177
|
+
// not a flow intent detection starts — nothing to check
|
|
6178
|
+
}
|
|
6060
6179
|
// Check for circular references if enabled
|
|
6061
6180
|
if (opts.checkCircularRefs) {
|
|
6062
6181
|
this._checkCircularReferences(validationState);
|
|
@@ -6079,6 +6198,88 @@ export class WorkflowEngine {
|
|
|
6079
6198
|
};
|
|
6080
6199
|
}
|
|
6081
6200
|
}
|
|
6201
|
+
/**
|
|
6202
|
+
* Errors when a DISPATCH step is reachable from the start of `entryFlow` with no SAY-GET on the
|
|
6203
|
+
* way. Follows call/replace/reboot FLOW steps (all run in the same turn) and onFail handlers;
|
|
6204
|
+
* CASE/SWITCH branches are alternatives. A RETURN ends the turn; END returns to the caller.
|
|
6205
|
+
*/
|
|
6206
|
+
_checkDispatchBeforeSayGet(entryFlow, state) {
|
|
6207
|
+
const reported = new Set();
|
|
6208
|
+
// 'open' = a path can leave these steps with no SAY-GET yet; 'closed' = every path stopped
|
|
6209
|
+
const walk = (steps, flowDef, visiting) => {
|
|
6210
|
+
for (const step of steps || []) {
|
|
6211
|
+
if (!step || typeof step !== 'object') {
|
|
6212
|
+
continue;
|
|
6213
|
+
}
|
|
6214
|
+
else if (step.type === 'SAY-GET' || step.type === 'RETURN') {
|
|
6215
|
+
return 'closed';
|
|
6216
|
+
}
|
|
6217
|
+
else if (step.type === 'END') {
|
|
6218
|
+
return 'open';
|
|
6219
|
+
}
|
|
6220
|
+
else if (step.type === 'DISPATCH') {
|
|
6221
|
+
const key = `${flowDef.name}:${step.id}`;
|
|
6222
|
+
if (!reported.has(key)) {
|
|
6223
|
+
reported.add(key);
|
|
6224
|
+
state.errors.push(`DISPATCH step "${step.id}" in flow "${flowDef.name}" can run before any SAY-GET when "${entryFlow.name}" is started by intent detection - a flow intent detection starts must ask the user (SAY-GET) before any reachable DISPATCH`);
|
|
6225
|
+
}
|
|
6226
|
+
else {
|
|
6227
|
+
// already reported for this entry flow
|
|
6228
|
+
}
|
|
6229
|
+
return 'closed';
|
|
6230
|
+
}
|
|
6231
|
+
else if (step.type === 'FLOW') {
|
|
6232
|
+
const target = String(step.value ?? step.name ?? '');
|
|
6233
|
+
const sub = this.flowsMenu.find((f) => f.id === target || f.name === target);
|
|
6234
|
+
if (sub && !visiting.has(sub.id || sub.name)) {
|
|
6235
|
+
const result = walk(sub.steps, sub, new Set([...visiting, sub.id || sub.name]));
|
|
6236
|
+
if (step.callType === 'reboot' || step.callType === 'replace') {
|
|
6237
|
+
return result; // the calling flow does not continue past a reboot/replace
|
|
6238
|
+
}
|
|
6239
|
+
else if (result === 'closed') {
|
|
6240
|
+
return 'closed';
|
|
6241
|
+
}
|
|
6242
|
+
else {
|
|
6243
|
+
// the sub-flow can return without asking — the caller continues
|
|
6244
|
+
}
|
|
6245
|
+
}
|
|
6246
|
+
else {
|
|
6247
|
+
// dynamic ({{…}}) or unknown target, or a cycle: nothing more to follow here
|
|
6248
|
+
}
|
|
6249
|
+
}
|
|
6250
|
+
else if (step.type === 'CASE' || step.type === 'SWITCH') {
|
|
6251
|
+
const branches = step.branches || step.cases || {};
|
|
6252
|
+
let anyOpen = !('default' in branches);
|
|
6253
|
+
for (const branch of Object.values(branches)) {
|
|
6254
|
+
const list = Array.isArray(branch) ? branch : [branch];
|
|
6255
|
+
if (walk(list, flowDef, visiting) === 'open') {
|
|
6256
|
+
anyOpen = true;
|
|
6257
|
+
}
|
|
6258
|
+
else {
|
|
6259
|
+
// this branch stops the path
|
|
6260
|
+
}
|
|
6261
|
+
}
|
|
6262
|
+
if (!anyOpen) {
|
|
6263
|
+
return 'closed';
|
|
6264
|
+
}
|
|
6265
|
+
else {
|
|
6266
|
+
// some path continues to the next step
|
|
6267
|
+
}
|
|
6268
|
+
}
|
|
6269
|
+
else {
|
|
6270
|
+
// SAY, SET, CALL-TOOL: the path continues
|
|
6271
|
+
}
|
|
6272
|
+
if (step.onFail) {
|
|
6273
|
+
walk(Array.isArray(step.onFail) ? step.onFail : [step.onFail], flowDef, visiting);
|
|
6274
|
+
}
|
|
6275
|
+
else {
|
|
6276
|
+
// no onFail path
|
|
6277
|
+
}
|
|
6278
|
+
}
|
|
6279
|
+
return 'open';
|
|
6280
|
+
};
|
|
6281
|
+
walk(entryFlow.steps, entryFlow, new Set([entryFlow.id || entryFlow.name]));
|
|
6282
|
+
}
|
|
6082
6283
|
/**
|
|
6083
6284
|
* Recursively validates a flow and its sub-flows
|
|
6084
6285
|
*/
|
|
@@ -6258,7 +6459,7 @@ export class WorkflowEngine {
|
|
|
6258
6459
|
return;
|
|
6259
6460
|
}
|
|
6260
6461
|
// Validate step type
|
|
6261
|
-
const validStepTypes = ['SAY', 'SAY-GET', 'SET', 'SWITCH', 'CASE', 'CALL-TOOL', 'FLOW', 'RETURN', 'END'];
|
|
6462
|
+
const validStepTypes = ['SAY', 'SAY-GET', 'SET', 'SWITCH', 'CASE', 'CALL-TOOL', 'FLOW', 'RETURN', 'END', 'DISPATCH'];
|
|
6262
6463
|
if (!validStepTypes.includes(step.type)) {
|
|
6263
6464
|
state.errors.push(`Step "${step.id}" in flow "${flowDef.name}" has invalid type: ${step.type}`);
|
|
6264
6465
|
return;
|
|
@@ -6286,6 +6487,17 @@ export class WorkflowEngine {
|
|
|
6286
6487
|
case 'FLOW':
|
|
6287
6488
|
this._validateSubFlowStep(step, flowDef, state, opts, currentScope);
|
|
6288
6489
|
break;
|
|
6490
|
+
case 'DISPATCH': {
|
|
6491
|
+
// DISPATCH takes nothing: it always routes the turn's own input, and never declares an outcome
|
|
6492
|
+
const extra = Object.keys(step).filter(k => k !== 'id' && k !== 'type');
|
|
6493
|
+
if (extra.length > 0) {
|
|
6494
|
+
state.errors.push(`DISPATCH step "${step.id}" in flow "${flowDef.name}" has invalid attribute(s) ${extra.map(k => `"${k}"`).join(', ')} - DISPATCH takes only "id"`);
|
|
6495
|
+
}
|
|
6496
|
+
else {
|
|
6497
|
+
// well-formed
|
|
6498
|
+
}
|
|
6499
|
+
break;
|
|
6500
|
+
}
|
|
6289
6501
|
}
|
|
6290
6502
|
// Update scope with variables created by this step
|
|
6291
6503
|
this._updateScopeAfterStep(step, flowDef, state);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "jsfe",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.90",
|
|
4
4
|
"description": "TypeScript workflow engine for conversational/automation apps: multi-flow orchestration, interrupt/resume, stack-based control, robust errors, and flexible tool/REST integration.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Ron Pinkas",
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
"scripts": {
|
|
32
32
|
"build": "tsc -p tsconfig.json",
|
|
33
33
|
"clean": "rm -rf dist",
|
|
34
|
+
"test": "for t in tests/*.test.mjs; do node \"$t\" || exit 1; done",
|
|
34
35
|
"prepublishOnly": "npm run clean && npm run build"
|
|
35
36
|
},
|
|
36
37
|
"keywords": [
|