jsfe 1.10.8 → 1.11.0

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 CHANGED
@@ -357,6 +357,19 @@ and the decoders (`decodeFlowLlm`, `decodeFlowSystemOne`, `decodeParametersLlm`,
357
357
  a stage-2 failure starts the flow without its parameters (it asks for them). The default, `'single-call'`,
358
358
  is the original single call.
359
359
 
360
+ **The reply ranker (contextual DISPATCH, `onResponse: "continue"`):** when a flow's question gets a reply its
361
+ deterministic reader cannot read, jsfe asks what the reply does with the step's `responseContext` (the question):
362
+ `answers`, `abort` or `new_request`. ONE aiCallback call whose 4th argument is `task: 'rank_reply'` with both
363
+ executors' instructions (`llm`, `systemOne`); the host replies `{ "option": … }`. `jsfe/host` exports
364
+ `buildReplyRank`, `decodeReplyRankLlm` and `decodeReplyRankSystemOne` (the highest option at or above 0.5, else
365
+ `answers`). `answers` continues the flow, after extracting the step's `responseParameters` with a stage-2 request
366
+ when it declares them; `abort` is a RETURN: every flow ends and the reply is system message `cmd_request_aborted`
367
+ ("The process has been cancelled at your request - how can I help you?"),
368
+ outcome `user_aborted`, no recovery stamp;
369
+ `new_request` ends the flows and routes the input through intent detection. Only a new request is routed: after
370
+ `answers` a later ordinary DISPATCH in the same turn hands the host the turn without detection. A host that does not know the task answers the `llm`
371
+ instructions with its text model.
372
+
360
373
  **Host start (`ContextEntry.start`):** `{ role: 'user', content, start: { flow, arguments } }` starts that
361
374
  flow (any flow, by id or name) with those arguments on this turn, without asking the AI. Only the host sets it;
362
375
  it is never derived from what the user typed.
@@ -61,6 +61,8 @@ export function validateFlowContracts(flows: any, tools?: any[], { externalFlows
61
61
  question_es: string;
62
62
  retry: string;
63
63
  retry_es: string;
64
+ retry_text: string;
65
+ retry_text_es: string;
64
66
  };
65
67
  email: {
66
68
  label: string;
@@ -89,6 +91,8 @@ export function validateFlowContracts(flows: any, tools?: any[], { externalFlows
89
91
  question_es: string;
90
92
  retry: string;
91
93
  retry_es: string;
94
+ retry_text: string;
95
+ retry_text_es: string;
92
96
  };
93
97
  account_number: {
94
98
  label: string;
@@ -105,6 +109,8 @@ export function validateFlowContracts(flows: any, tools?: any[], { externalFlows
105
109
  question_es: string;
106
110
  retry: string;
107
111
  retry_es: string;
112
+ retry_text: string;
113
+ retry_text_es: string;
108
114
  };
109
115
  ssn_last4: {
110
116
  label: string;
@@ -183,8 +189,12 @@ export function validateFlowContracts(flows: any, tools?: any[], { externalFlows
183
189
  validator: string;
184
190
  question: string;
185
191
  question_es: string;
192
+ question_text: string;
193
+ question_text_es: string;
186
194
  retry: string;
187
195
  retry_es: string;
196
+ retry_text: string;
197
+ retry_text_es: string;
188
198
  };
189
199
  card_expiration: {
190
200
  label: string;
@@ -202,6 +212,8 @@ export function validateFlowContracts(flows: any, tools?: any[], { externalFlows
202
212
  question_es: string;
203
213
  retry: string;
204
214
  retry_es: string;
215
+ retry_text: string;
216
+ retry_text_es: string;
205
217
  };
206
218
  card_cvv: {
207
219
  label: string;
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/forms/contracts.js"],"names":[],"mappings":"AAgBA;;;IAGC;AACD;;;;;EAGC;AACD,qGAAqG;AACrG;;QAwCC;AAqBD;;;QAEC;AAgBD;;;;;;;;;QASC;AACD;;;;QAGC;AACD;;;;;;;;QA8BC;AAED,mHAAmH;AACnH,kDAgBC;AAED,+GAA+G;AAC/G;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2EC"}
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/forms/contracts.js"],"names":[],"mappings":"AAgBA;;;IAGC;AACD;;;;;EAGC;AACD,qGAAqG;AACrG;;QAwCC;AAqBD;;;QAEC;AAgBD;;;;;;;;;QASC;AACD;;;;QAGC;AACD;;;;;;;;QA8BC;AAED,mHAAmH;AACnH,kDAgBC;AAED,+GAA+G;AAC/G;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2EC"}
@@ -84,6 +84,8 @@ export namespace FIELD_PRESETS {
84
84
  let question_es: string;
85
85
  let retry: string;
86
86
  let retry_es: string;
87
+ let retry_text: string;
88
+ let retry_text_es: string;
87
89
  }
88
90
  namespace email {
89
91
  let label_1: string;
@@ -133,6 +135,10 @@ export namespace FIELD_PRESETS {
133
135
  export { retry_2 as retry };
134
136
  let retry_es_2: string;
135
137
  export { retry_es_2 as retry_es };
138
+ let retry_text_1: string;
139
+ export { retry_text_1 as retry_text };
140
+ let retry_text_es_1: string;
141
+ export { retry_text_es_1 as retry_text_es };
136
142
  }
137
143
  namespace account_number {
138
144
  let label_3: string;
@@ -160,6 +166,10 @@ export namespace FIELD_PRESETS {
160
166
  export { retry_3 as retry };
161
167
  let retry_es_3: string;
162
168
  export { retry_es_3 as retry_es };
169
+ let retry_text_2: string;
170
+ export { retry_text_2 as retry_text };
171
+ let retry_text_es_2: string;
172
+ export { retry_text_es_2 as retry_text_es };
163
173
  }
164
174
  namespace ssn_last4 {
165
175
  let label_4: string;
@@ -287,10 +297,16 @@ export namespace FIELD_PRESETS {
287
297
  export { question_9 as question };
288
298
  let question_es_9: string;
289
299
  export { question_es_9 as question_es };
300
+ export let question_text: string;
301
+ export let question_text_es: string;
290
302
  let retry_4: string;
291
303
  export { retry_4 as retry };
292
304
  let retry_es_4: string;
293
305
  export { retry_es_4 as retry_es };
306
+ let retry_text_3: string;
307
+ export { retry_text_3 as retry_text };
308
+ let retry_text_es_3: string;
309
+ export { retry_text_es_3 as retry_text_es };
294
310
  }
295
311
  namespace card_expiration {
296
312
  let label_10: string;
@@ -321,6 +337,10 @@ export namespace FIELD_PRESETS {
321
337
  export { retry_5 as retry };
322
338
  let retry_es_5: string;
323
339
  export { retry_es_5 as retry_es };
340
+ let retry_text_4: string;
341
+ export { retry_text_4 as retry_text };
342
+ let retry_text_es_4: string;
343
+ export { retry_text_es_4 as retry_text_es };
324
344
  }
325
345
  namespace card_cvv {
326
346
  let label_11: string;
@@ -1 +1 @@
1
- {"version":3,"file":"flows.d.ts","sourceRoot":"","sources":["../../src/forms/flows.js"],"names":[],"mappings":"AAsHA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4DC;AACD;;;GAGG;AACH;;;;;;EAGC;AAgZD,wHAAwH;AACxH,wEAaC;AACD,4FAA4F;AAC5F;;;EAYC;AACD,sGAAsG;AACtG;;;EAOC;AArkBM,6CAAuG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4vB9G;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAOG"}
1
+ {"version":3,"file":"flows.d.ts","sourceRoot":"","sources":["../../src/forms/flows.js"],"names":[],"mappings":"AA4HA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4DC;AACD;;;GAGG;AACH;;;;;;EAGC;AAgZD,wHAAwH;AACxH,wEAaC;AACD,4FAA4F;AAC5F;;;EAYC;AACD,sGAAsG;AACtG;;;EAOC;AA3kBM,6CAAuG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkwB9G;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAOG"}
@@ -45,16 +45,19 @@ const KEYS_JS = "(function (n) { var k = []; for (var i = 1; k.length < n && i <
45
45
  export const FIELD_PRESETS = {
46
46
  phone: { label: 'phone number', label_es: 'número de teléfono', profile: { kind: 'phone' }, digits: { min: 10, max: 11 },
47
47
  question: 'What is your phone number?', question_es: '¿Cuál es su número de teléfono?',
48
- retry: 'Please say or enter your 10-digit phone number.', retry_es: 'Por favor diga o ingrese su número de teléfono de 10 dígitos.' },
48
+ retry: 'Please say or enter your 10-digit phone number.', retry_es: 'Por favor diga o ingrese su número de teléfono de 10 dígitos.',
49
+ retry_text: 'Please type your 10-digit phone number.', retry_text_es: 'Por favor escriba su número de teléfono de 10 dígitos.' },
49
50
  email: { label: 'email address', label_es: 'correo electrónico', profile: { kind: 'email' },
50
51
  question: 'What is your email address?', question_es: '¿Cuál es su correo electrónico?',
51
52
  retry: 'Please say your email address, for example juan at gmail dot com.', retry_es: 'Por favor diga su correo electrónico, por ejemplo juan arroba gmail punto com.' },
52
53
  zip: { label: 'ZIP code', label_es: 'código postal', profile: { kind: 'digits', min: 5, max: 5 }, digits: { min: 5, max: 5 },
53
54
  question: 'What is your ZIP code?', question_es: '¿Cuál es su código postal?',
54
- retry: 'Please say or enter your 5-digit ZIP code.', retry_es: 'Por favor diga o ingrese su código postal de 5 dígitos.' },
55
+ retry: 'Please say or enter your 5-digit ZIP code.', retry_es: 'Por favor diga o ingrese su código postal de 5 dígitos.',
56
+ retry_text: 'Please type your 5-digit ZIP code.', retry_text_es: 'Por favor escriba su código postal de 5 dígitos.' },
55
57
  account_number: { label: 'account number', label_es: 'número de cuenta', profile: { kind: 'identifier', pattern: '^\\d{6,12}$' }, digits: { min: 6, max: 12 },
56
58
  question: 'What is your account number?', question_es: '¿Cuál es su número de cuenta?',
57
- retry: 'Please say or enter your account number.', retry_es: 'Por favor diga o ingrese su número de cuenta.' },
59
+ retry: 'Please say or enter your account number.', retry_es: 'Por favor diga o ingrese su número de cuenta.',
60
+ retry_text: 'Please type your account number.', retry_text_es: 'Por favor escriba su número de cuenta.' },
58
61
  ssn_last4: { label: 'last four digits of your Social Security number', label_es: 'últimos cuatro dígitos de su Seguro Social',
59
62
  profile: { kind: 'digits', min: 4, max: 4 }, digits: { min: 4, max: 4 }, pii: true,
60
63
  question: 'What are the last four digits of your Social Security number?', question_es: '¿Cuáles son los últimos cuatro dígitos de su Seguro Social?' },
@@ -68,13 +71,16 @@ export const FIELD_PRESETS = {
68
71
  card_number: { label: 'card number', label_es: 'número de tarjeta', accumulate: true, accumulate_first: '^[2-6]', profile: { kind: 'digits', min: 13, max: 19 }, digits: { min: 13, max: 19, complete: [{ first: '4', lengths: [16, 19] }, { first: '25', lengths: [16] }, { first: '3', lengths: [15] }, { first: '6', lengths: [16, 19] }] },
69
72
  pii: true, validator: 'validate-card-number',
70
73
  question: 'Please say or enter your card number.', question_es: 'Por favor diga o ingrese el número de su tarjeta.',
71
- retry: 'Please say or enter the full card number.', retry_es: 'Por favor diga o ingrese el número completo de su tarjeta.' },
74
+ question_text: 'Please type your card number.', question_text_es: 'Por favor escriba el número de su tarjeta.',
75
+ retry: 'Please say or enter the full card number.', retry_es: 'Por favor diga o ingrese el número completo de su tarjeta.',
76
+ retry_text: 'Please type the full card number.', retry_text_es: 'Por favor escriba el número completo de su tarjeta.' },
72
77
  card_expiration: { label: 'expiration date', label_es: 'fecha de vencimiento',
73
78
  // MM0YY: a zero said between month and year ("020 28", prod 2026-10-25 14:10, was taken for the billing ZIP)
74
79
  profile: { kind: 'pattern', regex: '\\b(0?[1-9]|1[0-2])\\s*(?:/|-|\\s|de)?\\s*(?:20)?(\\d{2})\\b|\\b0[1-9]0\\s+(?:20)?\\d{2}\\b' }, digits: { min: 3, max: 6 },
75
80
  validator: 'validate-card-expiration',
76
81
  question: 'What is the expiration date, month and year?', question_es: '¿Cuál es la fecha de vencimiento, mes y año?',
77
- retry: 'Please say or enter the expiration as four digits, month then year, like 0 9 2 8.', retry_es: 'Por favor diga o ingrese el vencimiento en cuatro dígitos, mes y año, por ejemplo 0 9 2 8.' },
82
+ retry: 'Please say or enter the expiration as four digits, month then year, like 0 9 2 8.', retry_es: 'Por favor diga o ingrese el vencimiento en cuatro dígitos, mes y año, por ejemplo 0 9 2 8.',
83
+ retry_text: 'Please type the expiration as four digits, month then year, like 0928.', retry_text_es: 'Por favor escriba el vencimiento en cuatro dígitos, mes y año, por ejemplo 0928.' },
78
84
  card_cvv: { label: 'security code', label_es: 'código de seguridad', profile: { kind: 'digits', min: 3, max: 4 }, digits: { min: 3, max: 4 }, pii: true,
79
85
  question: 'What is the security code on the back of the card?', question_es: '¿Cuál es el código de seguridad al reverso de la tarjeta?' },
80
86
  card_zip: { label: 'billing ZIP code', label_es: 'código postal de facturación', profile: { kind: 'digits', min: 5, max: 5 }, digits: { min: 5, max: 5 },
@@ -359,7 +365,7 @@ const requestCancelled = {
359
365
  };
360
366
  // Open-ended answers use the same contextual intent/extraction path as other DISPATCH replies.
361
367
  const readFormResponse = {
362
- id: 'read-form-response', name: 'ReadFormResponse', version: '1.0.0', scope: 'isolated', description: 'Read the requested field with contextual DISPATCH; uncertainty returns to the host with saved form progress.',
368
+ id: 'read-form-response', name: 'ReadFormResponse', version: '1.0.0', scope: 'isolated', description: 'Read the requested field with contextual DISPATCH: an answer continues, a withdrawal or a new request leaves with saved form progress.',
363
369
  parameters: [{ name: 'form', type: 'string' }, { name: 'input', type: 'string' }],
364
370
  variables: vars({ group: null, spec: null, question: '', reply: null }),
365
371
  steps: [SET('response_group', 'group', "cargo.forms[form].specs.find(function(s){return s.name===input || s.any_of && s.any_of.some(function(member){return member.name===input;});})"),
@@ -367,7 +373,7 @@ const readFormResponse = {
367
373
  { ...SET('response_declared', 'noop', '!!spec && !!validateFormResponse(spec.response)'), requireTrue: true },
368
374
  SET('response_question', 'question', "formInputPrompt(cargo,form,input,Object.assign({},group,spec,{question:spec.question || group.question,question_es:spec.question_es || group.question_es,question_from:spec.question_from || group.question_from}),cargo.forms[form].data || {},language)"),
369
375
  SET('response_clear', 'reply', 'null'),
370
- { ...yieldDispatch('response_dispatch', 'form', "'input_not_matched'"), onResponse: 'continue', responseContext: 'Current question: {{question}}. Requested answer: {{spec.response.description}}. Continue only for an answer to this question. A changed request belongs to its workflow; an unrelated question or uncertain response belongs to the host.', responseParameters: [{ name: 'answer', type: 'string', description: '{{spec.response.description}}' }], responseVariable: 'reply' },
376
+ { ...yieldDispatch('response_dispatch', 'form', "'input_not_matched'"), onResponse: 'continue', responseContext: 'Current question: {{question}}. Requested answer: {{spec.response.description}}.', responseParameters: [{ name: 'answer', type: 'string', description: '{{spec.response.description}}' }], responseVariable: 'reply' },
371
377
  WHEN('response_missing', "!reply || typeof reply.answer !== 'string' || !reply.answer.trim()", yieldDispatch('response_handoff', 'form', "'input_not_matched'"))]
372
378
  };
373
379
  const collectContextualAnswer = formFlow({ id: 'collect-contextual-answer', name: 'CollectContextualAnswer', description: 'Collect one open-ended answer using contextual DISPATCH and preserve the caller wording.',
@@ -10,8 +10,13 @@
10
10
  export function readEmail(text: any, { literal }?: {
11
11
  literal?: boolean | undefined;
12
12
  }): string;
13
- /** The 10-digit North American number in the answer (a leading 1 dropped), or ''. */
14
- export function readPhone(text: any): string;
13
+ /**
14
+ * The 10-digit North American number in the answer (a leading 1 dropped), or ''. A caller who restates the number
15
+ * ("Area code 21. 213 555 0147.", "Area code, 213 555. Area code 213-555-0147.") is read by the last complete number
16
+ * after a sentence break or an "area code": prod 2026-10-26 07:28, the first read as a Mexican number, the second as
17
+ * nothing. An answer with an international prefix (+, plus, más, 00) is never split, so it stays international.
18
+ */
19
+ export function readPhone(text: any): any;
15
20
  /**
16
21
  * A phone number from outside the US / Canada in the answer, as its digits with the country code, or ''. With an
17
22
  * explicit prefix ("+", "plus", "más", "00") 8-15 digits; without one 11-13 digits not starting with 1 (a card or an
@@ -28,7 +33,7 @@ export function callerIsInternational(cargo: any): boolean;
28
33
  */
29
34
  export function readIdentifier(text: any, accountPattern?: string): {
30
35
  kind: string;
31
- value: string;
36
+ value: any;
32
37
  } | null;
33
38
  /**
34
39
  * The last four characters of a number (card, account, phone, tracking) as said to the customer: spaced one by one on a
@@ -1 +1 @@
1
- {"version":3,"file":"contact.d.ts","sourceRoot":"","sources":["../../src/helpers/contact.js"],"names":[],"mappings":"AAiBA;;;;;;;;GAQG;AACH;;WA8BC;AAED,qFAAqF;AACrF,6CASC;AAED;;;;;GAKG;AACH,0DAgBC;AAED,qHAAqH;AACrH,2DAIC;AAED;;;;GAIG;AACH;;;SAmBC;AAED;;;GAGG;AACH,sDAOC;AAED;;;;;GAKG;AACH,yEAUC;AAQD;;;;;GAKG;AACH,qDAIC;AAED,mHAAmH;AACnH,oDAIC"}
1
+ {"version":3,"file":"contact.d.ts","sourceRoot":"","sources":["../../src/helpers/contact.js"],"names":[],"mappings":"AAiBA;;;;;;;;GAQG;AACH;;WA8BC;AAID;;;;;GAKG;AACH,0CAWC;AAED;;;;;GAKG;AACH,0DAgBC;AAED,qHAAqH;AACrH,2DAIC;AAED;;;;GAIG;AACH;;;SAmBC;AAED;;;GAGG;AACH,sDAOC;AAED;;;;;GAKG;AACH,yEAUC;AAQD;;;;;GAKG;AACH,qDAIC;AAED,mHAAmH;AACnH,oDAIC"}
@@ -56,17 +56,25 @@ export function readEmail(text, { literal = false } = {}) {
56
56
  return /^[a-z0-9][a-z0-9._%+-]*@[a-z0-9.-]+\.[a-z]{2,}$/.test(email) ? email : '';
57
57
  }
58
58
  }
59
- /** The 10-digit North American number in the answer (a leading 1 dropped), or ''. */
59
+ const northAmerican = (digits) => digits.length === 11 && digits.startsWith('1') ? digits.slice(1) : digits.length === 10 ? digits : '';
60
+ /**
61
+ * The 10-digit North American number in the answer (a leading 1 dropped), or ''. A caller who restates the number
62
+ * ("Area code 21. 213 555 0147.", "Area code, 213 555. Area code 213-555-0147.") is read by the last complete number
63
+ * after a sentence break or an "area code": prod 2026-10-26 07:28, the first read as a Mexican number, the second as
64
+ * nothing. An answer with an international prefix (+, plus, más, 00) is never split, so it stays international.
65
+ */
60
66
  export function readPhone(text) {
61
- const digits = String(text ?? '').replace(/[^0-9]/g, '');
62
- if (digits.length === 11 && digits.startsWith('1')) {
63
- return digits.slice(1);
67
+ const t = String(text ?? '');
68
+ const whole = northAmerican(t.replace(/[^0-9]/g, ''));
69
+ if (whole) {
70
+ return whole;
64
71
  }
65
- else if (digits.length === 10) {
66
- return digits;
72
+ else if (/(^|[\s(])(\+|00|plus\b|m[aá]s\b)\s*\d/i.test(t)) {
73
+ return '';
67
74
  }
68
75
  else {
69
- return '';
76
+ const restated = t.split(/[.!?;](?:\s+|$)|\barea\s+code\b|\bc[oó]digo\s+de\s+[aá]rea\b/i).map((part) => northAmerican(part.replace(/[^0-9]/g, ''))).filter(Boolean);
77
+ return restated.length ? restated[restated.length - 1] : '';
70
78
  }
71
79
  }
72
80
  /**
@@ -4,7 +4,10 @@ export function missFormInput(cargo: any, id: any, input: any): any;
4
4
  * turn away on an unreadable answer: it says it did not catch that and asks again. Its exits stay explicit (the form's
5
5
  * stop words, max_attempts and on_exhausted, and whatever the host intercepts before the engine). */
6
6
  export function formMustComplete(cargo: any, id: any, input: any): boolean;
7
- /** Explicit retry wins. Otherwise acknowledge only an actual unrecognized answer, once per re-ask. */
7
+ /**
8
+ * Explicit retry wins. Otherwise acknowledge only an actual unrecognized answer, once per re-ask.
9
+ * question_text / retry_text (and _es): the written-channel wording, used only when the conversation is not a call.
10
+ */
8
11
  export function formInputPrompt(cargo: any, id: any, input: any, spec: any, data?: {}, language?: string): any;
9
12
  export function consumeFormFeedback(cargo: any, id: any, input: any): boolean;
10
13
  /** Recovery refers to the actual owning root, and never permits a fresh attempt at an unknown action. */
@@ -1 +1 @@
1
- {"version":3,"file":"form-conversation.d.ts","sourceRoot":"","sources":["../../src/helpers/form-conversation.js"],"names":[],"mappings":"AAGA,0EAGC;AACD,oEAGC;AACD;;qGAEqG;AACrG,2EAWC;AACD,sGAAsG;AACtG,+GAOC;AACD,8EAAwI;AAExI,yGAAyG;AACzG;;;;;;;;;;;;;;;;;;;;EAUC;AAED,sGAAsG;AACtG;;;;;;;;;;;;;;;;;;;;EAeC"}
1
+ {"version":3,"file":"form-conversation.d.ts","sourceRoot":"","sources":["../../src/helpers/form-conversation.js"],"names":[],"mappings":"AAGA,0EAGC;AACD,oEAGC;AACD;;qGAEqG;AACrG,2EAWC;AACD;;;GAGG;AACH,+GAQC;AACD,8EAAwI;AAExI,yGAAyG;AACzG;;;;;;;;;;;;;;;;;;;;EAUC;AAED,sGAAsG;AACtG;;;;;;;;;;;;;;;;;;;;EAeC"}
@@ -41,11 +41,15 @@ export function formMustComplete(cargo, id, input) {
41
41
  }
42
42
  return false;
43
43
  }
44
- /** Explicit retry wins. Otherwise acknowledge only an actual unrecognized answer, once per re-ask. */
44
+ /**
45
+ * Explicit retry wins. Otherwise acknowledge only an actual unrecognized answer, once per re-ask.
46
+ * question_text / retry_text (and _es): the written-channel wording, used only when the conversation is not a call.
47
+ */
45
48
  export function formInputPrompt(cargo, id, input, spec, data = {}, language = 'en') {
46
- const es = language === 'es', feedback = cargo.forms?.[id]?.feedback?.[input];
47
- const question = spec.question_from && (es ? (data[spec.question_from + '_es'] || data[spec.question_from]) : data[spec.question_from]) || (es ? (spec.question_es || spec.question) : spec.question) || '';
48
- const retry = es ? spec.retry_es : spec.retry;
49
+ const es = language === 'es', feedback = cargo.forms?.[id]?.feedback?.[input], text = !cargo?.voice;
50
+ const written = (key) => text ? (es ? (spec[key + '_text_es'] || spec[key + '_text']) : spec[key + '_text']) : undefined;
51
+ const question = spec.question_from && (es ? (data[spec.question_from + '_es'] || data[spec.question_from]) : data[spec.question_from]) || written('question') || (es ? (spec.question_es || spec.question) : spec.question) || '';
52
+ const retry = written('retry') || (es ? spec.retry_es : spec.retry);
49
53
  if (feedback === 'partial')
50
54
  return es ? 'Continúe.' : 'Go on.';
51
55
  if (feedback && retry)
@@ -10,6 +10,7 @@ export { validateFlowRecovery, flowHandoffInfo, renderFlowRecovery } from './flo
10
10
  export type { FlowRecovery } from './flow-recovery.js';
11
11
  export * from './systemone-intent.js';
12
12
  export * from './intent-stages.js';
13
+ export * from './reply-rank.js';
13
14
  export { createActionJournal, createMemoryActionStorage, ActionJournalError } from './action-journal.js';
14
15
  export { actionSessionSnapshot, checkpointActionSession } from './action-session.js';
15
16
  export { retainRecoveryState, applyRecoveryStatePolicy } from './recovery-policy.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/host/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAC,oBAAoB,EAAC,eAAe,EAAC,kBAAkB,EAAC,MAAM,oBAAoB,CAAC;AAC3F,YAAY,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AACrD,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AAEnC,OAAO,EAAC,mBAAmB,EAAC,yBAAyB,EAAC,kBAAkB,EAAC,MAAM,qBAAqB,CAAC;AACrG,OAAO,EAAC,qBAAqB,EAAC,uBAAuB,EAAC,MAAM,qBAAqB,CAAC;AAElF,OAAO,EAAC,mBAAmB,EAAC,wBAAwB,EAAC,MAAM,sBAAsB,CAAC;AAElF,OAAO,EAAC,oBAAoB,EAAC,MAAM,6BAA6B,CAAC;AAEjE,OAAO,EAAC,4BAA4B,EAAC,4BAA4B,EAAC,6BAA6B,EAAC,MAAM,wBAAwB,CAAC;AAE/H,OAAO,EAAC,0BAA0B,EAAC,uBAAuB,EAAC,qBAAqB,EAAC,MAAM,mBAAmB,CAAC;AAE3G,OAAO,EAAC,iBAAiB,EAAC,4BAA4B,EAAC,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/host/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAC,oBAAoB,EAAC,eAAe,EAAC,kBAAkB,EAAC,MAAM,oBAAoB,CAAC;AAC3F,YAAY,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AACrD,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAEhC,OAAO,EAAC,mBAAmB,EAAC,yBAAyB,EAAC,kBAAkB,EAAC,MAAM,qBAAqB,CAAC;AACrG,OAAO,EAAC,qBAAqB,EAAC,uBAAuB,EAAC,MAAM,qBAAqB,CAAC;AAElF,OAAO,EAAC,mBAAmB,EAAC,wBAAwB,EAAC,MAAM,sBAAsB,CAAC;AAElF,OAAO,EAAC,oBAAoB,EAAC,MAAM,6BAA6B,CAAC;AAEjE,OAAO,EAAC,4BAA4B,EAAC,4BAA4B,EAAC,6BAA6B,EAAC,MAAM,wBAAwB,CAAC;AAE/H,OAAO,EAAC,0BAA0B,EAAC,uBAAuB,EAAC,qBAAqB,EAAC,MAAM,mBAAmB,CAAC;AAE3G,OAAO,EAAC,iBAAiB,EAAC,4BAA4B,EAAC,MAAM,2BAA2B,CAAC"}
@@ -9,6 +9,7 @@ export * from './request.js';
9
9
  export { validateFlowRecovery, flowHandoffInfo, renderFlowRecovery } from './flow-recovery.js';
10
10
  export * from './systemone-intent.js';
11
11
  export * from './intent-stages.js';
12
+ export * from './reply-rank.js';
12
13
  export { createActionJournal, createMemoryActionStorage, ActionJournalError } from './action-journal.js';
13
14
  export { actionSessionSnapshot, checkpointActionSession } from './action-session.js';
14
15
  export { retainRecoveryState, applyRecoveryStatePolicy } from './recovery-policy.js';
@@ -0,0 +1,66 @@
1
+ /**
2
+ * The reply ranker: what the caller's latest message does with the question a flow asked — the instructions and the
3
+ * decoders, zero runtime imports. jsfe asks it at a contextual DISPATCH (`onResponse: "continue"`), passing the request
4
+ * below to aiCallback as its 4th argument (task 'rank_reply'). The host is the executor: System One (Jev) answers, a
5
+ * text model covers it (the host's aiCallbackRank), and the CANONICAL reply is a JSON string: { "option": "<name>" }.
6
+ *
7
+ * answers the reply answers the question (the default: an open question's reply that clears no option is its answer)
8
+ * abort the caller withdraws the request and asks for nothing else
9
+ * new_request the caller asks for something else: a different service or an unrelated question
10
+ *
11
+ * Both executors' instructions come from the same criteria. A host that does not know this task answers the `llm`
12
+ * instructions with its text model, which is a complete answer.
13
+ */
14
+ export declare const REPLY_OPTIONS: readonly ["answers", "abort", "new_request"];
15
+ export type ReplyOption = typeof REPLY_OPTIONS[number];
16
+ /** An open question's reply that clears no option is its answer (owner decision 2026-10-26). */
17
+ export declare const REPLY_DEFAULT: ReplyOption;
18
+ /** A noul at or above this is a yes. */
19
+ export declare const REPLY_YES_THRESHOLD = 0.5;
20
+ export interface ReplyTurn {
21
+ role: 'user' | 'assistant';
22
+ content: string;
23
+ }
24
+ export interface ReplyRankRequest {
25
+ task: 'rank_reply';
26
+ input: string;
27
+ conversation: ReplyTurn[];
28
+ /** the flow's question and what answers it (the step's responseContext, interpolated) */
29
+ question: string;
30
+ options: ReplyOption[];
31
+ llm: {
32
+ system: string;
33
+ user: string;
34
+ schema: Record<string, unknown>;
35
+ };
36
+ systemOne: {
37
+ state: Record<string, unknown>;
38
+ questions: Record<string, unknown>;
39
+ index: {
40
+ id: string;
41
+ option: ReplyOption;
42
+ }[];
43
+ };
44
+ }
45
+ /** The reply ranker's instructions for both executors. */
46
+ export declare function buildReplyRank(input: string, conversation: ReplyTurn[], question: string): ReplyRankRequest;
47
+ /** A text model's answer as the canonical reply; throws when it names no offered option. */
48
+ export declare function decodeReplyRankLlm(text: string, request: ReplyRankRequest): {
49
+ option: ReplyOption;
50
+ };
51
+ /**
52
+ * System One's answers as the canonical reply: the highest-rated option when it clears the cut, else the default
53
+ * (`answers`), with every option's probability (for logs). Throws if any question is unanswered.
54
+ */
55
+ export declare function decodeReplyRankSystemOne(answers: Record<string, {
56
+ noul?: unknown;
57
+ } | undefined> | undefined, request: ReplyRankRequest, { threshold }?: {
58
+ threshold?: number | undefined;
59
+ }): {
60
+ option: ReplyOption;
61
+ scores: Record<string, number>;
62
+ fallback: boolean;
63
+ };
64
+ /** Is this jsfe's reply-rank request (a host's aiCallback receives it as the 4th argument)? */
65
+ export declare function isReplyRankRequest(request: unknown): request is ReplyRankRequest;
66
+ //# sourceMappingURL=reply-rank.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reply-rank.d.ts","sourceRoot":"","sources":["../../src/host/reply-rank.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,eAAO,MAAM,aAAa,8CAA+C,CAAC;AAC1E,MAAM,MAAM,WAAW,GAAG,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;AACvD,gGAAgG;AAChG,eAAO,MAAM,aAAa,EAAE,WAAuB,CAAC;AACpD,wCAAwC;AACxC,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,MAAM,WAAW,SAAS;IAAG,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AAC1E,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,SAAS,EAAE,CAAC;IAC1B,yFAAyF;IACzF,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,GAAG,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IACvE,SAAS,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,KAAK,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,WAAW,CAAA;SAAE,EAAE,CAAA;KAAE,CAAC;CACjI;AAsBD,0DAA0D;AAC1D,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CA0C3G;AAED,4FAA4F;AAC5F,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,CAMnG;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,CAAC,GAAG,SAAS,EACnE,OAAO,EAAE,gBAAgB,EACzB,EAAE,SAA+B,EAAE;;CAAK,GACvC;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAa5E;AAED,+FAA+F;AAC/F,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,gBAAgB,CAGhF"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * The reply ranker: what the caller's latest message does with the question a flow asked — the instructions and the
3
+ * decoders, zero runtime imports. jsfe asks it at a contextual DISPATCH (`onResponse: "continue"`), passing the request
4
+ * below to aiCallback as its 4th argument (task 'rank_reply'). The host is the executor: System One (Jev) answers, a
5
+ * text model covers it (the host's aiCallbackRank), and the CANONICAL reply is a JSON string: { "option": "<name>" }.
6
+ *
7
+ * answers the reply answers the question (the default: an open question's reply that clears no option is its answer)
8
+ * abort the caller withdraws the request and asks for nothing else
9
+ * new_request the caller asks for something else: a different service or an unrelated question
10
+ *
11
+ * Both executors' instructions come from the same criteria. A host that does not know this task answers the `llm`
12
+ * instructions with its text model, which is a complete answer.
13
+ */
14
+ export const REPLY_OPTIONS = ['answers', 'abort', 'new_request'];
15
+ /** An open question's reply that clears no option is its answer (owner decision 2026-10-26). */
16
+ export const REPLY_DEFAULT = 'answers';
17
+ /** A noul at or above this is a yes. */
18
+ export const REPLY_YES_THRESHOLD = 0.5;
19
+ // ── the criteria: written once, rendered for both executors ─────────────────────────────────────────
20
+ const CRITERIA = {
21
+ answers: {
22
+ true: 'The latest message responds to the current question, in any words: the requested information, a correction of it, or that the caller does not know, does not have or cannot give it (datos incorrectos, no lo sé, no lo tengo, no puedo dar el dato), including asking how to provide it.',
23
+ false: 'It withdraws the request, or asks for a different service or an unrelated question.',
24
+ },
25
+ abort: {
26
+ true: 'The latest message withdraws the current request (never mind, forget it, I no longer want it) and asks for nothing else.',
27
+ false: 'It responds to the current question, or asks for something.',
28
+ },
29
+ new_request: {
30
+ true: 'The latest message asks for a different service or action, or asks a question unrelated to the current question.',
31
+ false: 'It responds to the current question, or only withdraws the request.',
32
+ },
33
+ };
34
+ const TASK = 'A workflow asked the caller a question. Decide what the caller\'s latest message does with it.';
35
+ const conversationText = (conversation, input) => `${conversation.length ? `<conversation>\n${conversation.map(t => `${t.role}: ${t.content}`).join('\n')}\n</conversation>\n` : ''}<latest-message>\n${input}\n</latest-message>`;
36
+ /** The reply ranker's instructions for both executors. */
37
+ export function buildReplyRank(input, conversation, question) {
38
+ const options = [...REPLY_OPTIONS];
39
+ const schema = {
40
+ type: 'object', additionalProperties: false, required: ['option'],
41
+ properties: { option: { type: 'string', enum: options } },
42
+ };
43
+ const system = [
44
+ TASK,
45
+ '',
46
+ '<current-question>',
47
+ question,
48
+ '</current-question>',
49
+ '',
50
+ ...options.map(o => `- ${o}: ${CRITERIA[o].true}`),
51
+ `When none clearly applies: ${REPLY_DEFAULT}.`,
52
+ '',
53
+ '<json-schema>',
54
+ JSON.stringify(schema),
55
+ '</json-schema>',
56
+ '',
57
+ 'Respond ONLY with valid JSON matching the schema. No other text.',
58
+ ].join('\n');
59
+ const questions = {};
60
+ const index = [];
61
+ options.forEach((o, i) => {
62
+ const id = `r${i}`;
63
+ questions[id] = { type: 'noul', criteria: CRITERIA[o], instructions: { option: o, question: `Does the latest message do what \`${o}\` describes?` } };
64
+ index.push({ id, option: o });
65
+ });
66
+ return {
67
+ task: 'rank_reply', input, conversation, question, options,
68
+ llm: { system, user: conversationText(conversation, input), schema },
69
+ systemOne: {
70
+ state: {
71
+ assistant_instructions: `${TASK}\n\nThe current question:\n${question}`,
72
+ conversation: conversation.map(t => ({ role: t.role, content: t.content })),
73
+ latest_message: input,
74
+ },
75
+ questions,
76
+ index,
77
+ },
78
+ };
79
+ }
80
+ /** A text model's answer as the canonical reply; throws when it names no offered option. */
81
+ export function decodeReplyRankLlm(text, request) {
82
+ const parsed = parseJsonObject(text);
83
+ const said = String(parsed.option ?? '').trim().toLowerCase();
84
+ const option = request.options.find(o => o === said);
85
+ if (!option)
86
+ throw new Error(`rank_reply: "${said.slice(0, 40)}" is not an offered option`);
87
+ return { option };
88
+ }
89
+ /**
90
+ * System One's answers as the canonical reply: the highest-rated option when it clears the cut, else the default
91
+ * (`answers`), with every option's probability (for logs). Throws if any question is unanswered.
92
+ */
93
+ export function decodeReplyRankSystemOne(answers, request, { threshold = REPLY_YES_THRESHOLD } = {}) {
94
+ const scores = {};
95
+ for (const q of request.systemOne.index) {
96
+ const noul = Number(answers?.[q.id]?.noul);
97
+ if (!Number.isFinite(noul))
98
+ throw new Error(`System One: question ${q.id} unanswered`);
99
+ scores[q.option] = noul;
100
+ }
101
+ const [best] = request.systemOne.index.map(q => q.option).sort((a, b) => scores[b] - scores[a]);
102
+ if (best && scores[best] >= threshold) {
103
+ return { option: best, scores, fallback: false };
104
+ }
105
+ else {
106
+ return { option: REPLY_DEFAULT, scores, fallback: true };
107
+ }
108
+ }
109
+ /** Is this jsfe's reply-rank request (a host's aiCallback receives it as the 4th argument)? */
110
+ export function isReplyRankRequest(request) {
111
+ const r = request;
112
+ return !!r && r.task === 'rank_reply' && Array.isArray(r.options) && !!r.systemOne && !!r.llm;
113
+ }
114
+ function parseJsonObject(text) {
115
+ const t = String(text ?? '').replace(/<think>[\s\S]*?<\/think>/g, '').replace(/^```(?:json)?\s*/i, '').replace(/```\s*$/, '').trim();
116
+ let parsed;
117
+ try {
118
+ parsed = JSON.parse((t.match(/\{[\s\S]*\}/) || [t])[0]);
119
+ }
120
+ catch {
121
+ throw new Error(`not JSON: ${t.slice(0, 60)}`);
122
+ }
123
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))
124
+ throw new Error('not a JSON object');
125
+ return parsed;
126
+ }
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import type { FlowRecovery } from './host/flow-recovery.js';
2
2
  export type { FlowRecovery } from './host/flow-recovery.js';
3
3
  import type { IntentStageRequest } from './host/intent-stages.js';
4
+ import type { ReplyRankRequest } from './host/reply-rank.js';
4
5
  /**
5
6
  * Pure JS parser for .tools file content (string or object)
6
7
  * @param input JSON string or parsed object
@@ -149,7 +150,7 @@ export interface DetectFlowRequest {
149
150
  parameters: FlowParameterDefinition[];
150
151
  }[];
151
152
  }
152
- export type AiCallbackRequest = DetectFlowRequest | IntentStageRequest;
153
+ export type AiCallbackRequest = DetectFlowRequest | IntentStageRequest | ReplyRankRequest;
153
154
  /**
154
155
  * @interface EngineSessionContext
155
156
  * @property {string} sessionId - Unique identifier for the session
@@ -251,6 +252,8 @@ export interface ToolCallRecord {
251
252
  * - 'deflected': a decoy ("fake flow") absorbed an intent-detection false
252
253
  * positive by design — transaction completes; hosts should NOT treat it as
253
254
  * a user struggle (stats only).
255
+ * - 'user_aborted': the caller withdrew the request (the reply ranker's `abort`) — transaction failed; not a
256
+ * struggle to recover from: the caller chose to stop, and jsfe already answered.
254
257
  * - 'resolved' (or any other value): informational; transaction completes.
255
258
  *
256
259
  * Flows that declare nothing behave exactly as before.
@@ -586,7 +589,7 @@ export interface PathTraversableObject {
586
589
  /** Intrinsic admission marker for generators and hosts. Absent safetyRevision retains legacy behavior. */
587
590
  export { continuationSafetyProtocol } from './forms/continuation-safety.js';
588
591
  export declare function getFlowForInput(input: string, engine: Engine): Promise<FlowDefinition | null>;
589
- export declare function detectFlowWithParameters(input: string, engine: Engine, continuation?: FlowDefinition, responseContext?: string): Promise<{
592
+ export declare function detectFlowWithParameters(input: string, engine: Engine): Promise<{
590
593
  flow: FlowDefinition;
591
594
  parameters?: Record<string, any>;
592
595
  } | null>;
@@ -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
@@ -28,6 +28,7 @@ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
28
28
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29
29
  **/
30
30
  import { buildFlowStage, buildParameterStage, hasStageParameters } from './host/intent-stages.js';
31
+ import { buildReplyRank, REPLY_OPTIONS } from './host/reply-rank.js';
31
32
  /*
32
33
  // Deploy new version to NPM:
33
34
  npm version patch -m "chore(release): %s"
@@ -137,6 +138,7 @@ const DEFAULT_MESSAGE_REGISTRY = {
137
138
  flow_switch_general_error: "I encountered an error while switching flows: {{errorMessage}}. Please try again or contact support if the issue persists.",
138
139
  // System Commands
139
140
  cmd_flow_exited: "Successfully exited {{flowName}}. How can I help you with something else?",
141
+ cmd_request_aborted: "The process has been cancelled at your request - how can I help you?",
140
142
  cmd_help_title: "Flow Help - {{flowName}}",
141
143
  cmd_help_available_commands: "Available commands while in this flow:",
142
144
  cmd_help_cancel: "• \"cancel flow\" - Exit this flow completely",
@@ -182,6 +184,7 @@ const DEFAULT_MESSAGE_REGISTRY = {
182
184
  flow_switch_general_error: "Encontré un error al cambiar flujos: {{errorMessage}}. Por favor intente de nuevo o contacte soporte si el problema persiste.",
183
185
  // System Commands
184
186
  cmd_flow_exited: "Salió exitosamente de {{flowName}}. ¿Cómo puedo ayudarle con algo más?",
187
+ cmd_request_aborted: "El proceso fue cancelado a petición suya - ¿cómo puedo ayudarle?",
185
188
  cmd_help_title: "Ayuda del Flujo - {{flowName}}",
186
189
  cmd_help_available_commands: "Comandos disponibles en este flujo:",
187
190
  cmd_help_cancel: "• \"cancelar flujo\" - Salir completamente de este flujo",
@@ -448,8 +451,8 @@ export class TransactionManager {
448
451
  function finalizeFlowTransaction(engine, frame, endedBy) {
449
452
  const declared = frame.declaredOutcome;
450
453
  if (declared) {
451
- if (declared.outcome === 'unresolved') {
452
- TransactionManager.fail(frame.transaction, declared.reason || 'unresolved');
454
+ if (declared.outcome === 'unresolved' || declared.outcome === 'user_aborted') {
455
+ TransactionManager.fail(frame.transaction, declared.reason || declared.outcome);
453
456
  }
454
457
  else if (declared.outcome === 'pending') {
455
458
  TransactionManager.yield(frame.transaction);
@@ -2169,8 +2172,8 @@ async function detectLanguage(input, engine) {
2169
2172
  }
2170
2173
  }
2171
2174
  // === FLOW EXECUTION ENGINE WITH ENHANCED ERROR HANDLING ===
2172
- async function isFlowActivated(input, engine, userId = 'anonymous', detected) {
2173
- const result = detected === undefined ? await detectFlowWithParameters(input, engine) : detected;
2175
+ async function isFlowActivated(input, engine, userId = 'anonymous') {
2176
+ const result = await detectFlowWithParameters(input, engine);
2174
2177
  if (result && result.flow) {
2175
2178
  const flow = result.flow;
2176
2179
  const parameters = result.parameters;
@@ -2495,8 +2498,8 @@ async function playFlowFrame(engine) {
2495
2498
  }
2496
2499
  // DISPATCH ended every flow; processActivity routes this turn's input (see handleDispatchStep)
2497
2500
  if (step.type === 'DISPATCH' && step.onResponse === 'continue') {
2498
- // ContinueCurrent retains the stack; a workflow replaces it; None hands off to the host.
2499
- if (engine.pendingDispatchFrom !== null)
2501
+ // An answer retains the stack; abort (a RETURN) and a new request (intent detection) end every flow.
2502
+ if (engine.pendingDispatchFrom !== null || getCurrentStackLength(engine) === 0)
2500
2503
  return result;
2501
2504
  continue;
2502
2505
  }
@@ -2882,7 +2885,7 @@ function enforceParameterTypes(flow, parameters) {
2882
2885
  return result;
2883
2886
  }
2884
2887
  /** The structured form of the intent-detection call, passed to aiCallback as its 4th argument. */
2885
- function buildDetectFlowRequest(input, lastChatTurn, flows, responseContext) {
2888
+ function buildDetectFlowRequest(input, lastChatTurn, flows) {
2886
2889
  const conversation = [];
2887
2890
  for (const entry of [lastChatTurn?.user, lastChatTurn?.assistant]) {
2888
2891
  if (entry && (entry.role === 'user' || entry.role === 'assistant')) {
@@ -2892,8 +2895,6 @@ function buildDetectFlowRequest(input, lastChatTurn, flows, responseContext) {
2892
2895
  // absent, or a role the conversation cannot carry
2893
2896
  }
2894
2897
  }
2895
- if (responseContext !== undefined)
2896
- conversation.push({ role: 'assistant', content: responseContext });
2897
2898
  return {
2898
2899
  task: 'detect_flow',
2899
2900
  input: String(sanitizeInput(input)),
@@ -2919,8 +2920,8 @@ function buildDetectFlowRequest(input, lastChatTurn, flows, responseContext) {
2919
2920
  * ({ flowName } / { parameters }). A stage-1 failure reaches the host as before; a stage-2 failure starts the flow
2920
2921
  * without its parameters (it asks for them) rather than losing the turn.
2921
2922
  */
2922
- async function detectFlowInTwoStages(input, engine, flows, responseContext) {
2923
- const { input: cleanInput, conversation } = buildDetectFlowRequest(input, engine.lastChatTurn, [], responseContext);
2923
+ async function detectFlowInTwoStages(input, engine, flows) {
2924
+ const { input: cleanInput, conversation } = buildDetectFlowRequest(input, engine.lastChatTurn, []);
2924
2925
  const stage1 = buildFlowStage(cleanInput, conversation, flows.map(f => ({ id: f.id, name: f.name, description: String(f.description ?? '') })));
2925
2926
  const reply1 = parseStageReply(await fetchAiResponse(stage1.llm.system, stage1.llm.user, engine.aiCallback, engine.aiTimeOut, stageSchema('detect_flow', stage1.llm.schema), stage1));
2926
2927
  const said = String(reply1.flowName ?? 'None');
@@ -2944,13 +2945,39 @@ async function detectFlowInTwoStages(input, engine, flows, responseContext) {
2944
2945
  return { flow, parameters: enforceParameterEnums(flow, enforceParameterTypes(flow, ownParametersOnly(flow, given))) };
2945
2946
  }
2946
2947
  catch (error) {
2947
- if (flow.id === '__jsfe_continue_current__' && responseContext !== undefined)
2948
- throw error;
2949
2948
  logger.warn(`detectFlowWithParameters: stage 2 failed for "${flow.name}" (${error.message}) - the flow starts without its parameters`);
2950
2949
  return { flow, parameters: {} };
2951
2950
  }
2952
2951
  }
2953
2952
  }
2953
+ /**
2954
+ * The reply ranker (jsfe/host reply-rank): what the latest message does with the question a contextual DISPATCH
2955
+ * asked — `answers`, `abort` or `new_request`. ONE aiCallback call whose 4th argument carries both executors'
2956
+ * instructions; the host answers with System One and covers it with a text model (its aiCallbackRank). A reply that
2957
+ * is not an offered option throws, and the pending step stays for the caller's error policy.
2958
+ */
2959
+ async function rankReply(input, engine, question) {
2960
+ const { input: cleanInput, conversation } = buildDetectFlowRequest(input, engine.lastChatTurn, []);
2961
+ const request = buildReplyRank(cleanInput, conversation, question);
2962
+ const reply = parseStageReply(await fetchAiResponse(request.llm.system, request.llm.user, engine.aiCallback, engine.aiTimeOut, stageSchema('rank_reply', request.llm.schema), request));
2963
+ const option = String(reply.option ?? '');
2964
+ if (!REPLY_OPTIONS.includes(option))
2965
+ throw new Error(`rank_reply: "${option.slice(0, 40)}" is not an offered option`);
2966
+ logger.info(`rank_reply: ${option} for ${JSON.stringify(cleanInput)}`);
2967
+ return option;
2968
+ }
2969
+ /**
2970
+ * A typed contextual response: the reply answers the question, so its declared fields are extracted with the
2971
+ * intent stage-2 request (the question is the assistant's last turn). Missing fields stay missing; a failure throws.
2972
+ */
2973
+ async function extractReplyParameters(input, engine, question, parameters) {
2974
+ const { input: cleanInput, conversation } = buildDetectFlowRequest(input, engine.lastChatTurn, []);
2975
+ const reply = { id: '__jsfe_reply__', name: 'CurrentQuestion', version: '1.0.0', description: 'The reply to the current question', steps: [], parameters };
2976
+ const stage2 = buildParameterStage(cleanInput, conversation.concat([{ role: 'assistant', content: question }]), reply);
2977
+ const answer = parseStageReply(await fetchAiResponse(stage2.llm.system, stage2.llm.user, engine.aiCallback, engine.aiTimeOut, stageSchema('extract_parameters', stage2.llm.schema), stage2));
2978
+ const given = answer.parameters && typeof answer.parameters === 'object' ? answer.parameters : {};
2979
+ return structuredClone(enforceParameterEnums(reply, enforceParameterTypes(reply, ownParametersOnly(reply, given))));
2980
+ }
2954
2981
  /** The OpenAI-compatible response_format wrapper a host already reads from the 3rd argument. */
2955
2982
  function stageSchema(name, schema) {
2956
2983
  return JSON.stringify({ type: 'json_schema', json_schema: { name, strict: true, schema } });
@@ -2966,7 +2993,7 @@ export async function getFlowForInput(input, engine) {
2966
2993
  const result = await detectFlowWithParameters(input, engine);
2967
2994
  return result ? result.flow : null;
2968
2995
  }
2969
- export async function detectFlowWithParameters(input, engine, continuation, responseContext) {
2996
+ export async function detectFlowWithParameters(input, engine) {
2970
2997
  // CRITICAL: This function requires AI access via engine.aiCallback
2971
2998
  // Without AI, the engine cannot detect user intent and activate flows
2972
2999
  // Sessions would never be activated as no workflows could be triggered
@@ -2984,7 +3011,7 @@ export async function detectFlowWithParameters(input, engine, continuation, resp
2984
3011
  }
2985
3012
  // Filter to only primary flows for AI intent detection
2986
3013
  const primaryFlows = flowsMenu.filter(flow => flow.primary === true);
2987
- const flowsForIntentDetection = (primaryFlows.length > 0 ? primaryFlows : flowsMenu).concat(continuation ? [continuation] : []);
3014
+ const flowsForIntentDetection = primaryFlows.length > 0 ? primaryFlows : flowsMenu;
2988
3015
  logger.debug(`Using ${flowsForIntentDetection.length} flows for intent detection (${primaryFlows.length} primary flows available)`);
2989
3016
  // A host start (ContextEntry.start) answers detection for this turn: that flow, with its arguments.
2990
3017
  if (engine.hostStart) {
@@ -3014,7 +3041,7 @@ export async function detectFlowWithParameters(input, engine, continuation, resp
3014
3041
  return null;
3015
3042
  }
3016
3043
  if (engine.intentDetection === 'two-stage') {
3017
- return await detectFlowInTwoStages(input, engine, flowsForIntentDetection, responseContext);
3044
+ return await detectFlowInTwoStages(input, engine, flowsForIntentDetection);
3018
3045
  }
3019
3046
  else {
3020
3047
  // the original single call, below
@@ -3046,12 +3073,10 @@ export async function detectFlowWithParameters(input, engine, continuation, resp
3046
3073
  </chat-history>\n\n`;
3047
3074
  }
3048
3075
  // Let AI errors (timeout, communication failures) propagate to the host
3049
- if (responseContext !== undefined)
3050
- context += `<current-response-context>\n${responseContext}\n</current-response-context>\n`;
3051
- const request = buildDetectFlowRequest(input, engine.lastChatTurn, flowsForIntentDetection, responseContext);
3076
+ const request = buildDetectFlowRequest(input, engine.lastChatTurn, flowsForIntentDetection);
3052
3077
  const aiResponse = await fetchAiTask(task, rules, context, input, flowsForIntentDetection, jsonSchema, engine.aiCallback, engine.aiTimeOut, request);
3053
3078
  if (aiResponse && aiResponse.flowName && aiResponse.flowName !== 'None' && aiResponse.flowName !== 'null') {
3054
- const flow = flowsMenu.concat(continuation ? [continuation] : []).find(flow => flow.name.toLowerCase() === aiResponse.flowName.toLowerCase() || flow.id === aiResponse.flowName);
3079
+ const flow = flowsMenu.find(flow => flow.name.toLowerCase() === aiResponse.flowName.toLowerCase() || flow.id === aiResponse.flowName);
3055
3080
  if (flow) {
3056
3081
  // Defensive: strip empty-string keys from AI-generated parameters.
3057
3082
  // AI occasionally emits { "": value } which would cascade into flow
@@ -4123,6 +4148,21 @@ async function handleDispatchStep(currentFlowFrame, engine) {
4123
4148
  }
4124
4149
  return terminateForDispatch(currentFlowFrame, engine);
4125
4150
  }
4151
+ /** A withdrawn request ends as a RETURN does: the DISPATCH step is consumed and every flow finalizes and ends. */
4152
+ function terminateForAbort(currentFlowFrame, engine) {
4153
+ const step = currentFlowFrame.flowStepsStack.pop();
4154
+ // The caller chose to stop: `user_aborted`, whatever the step declared for an unanswered question; its reason says where.
4155
+ const declared = step.outcome !== undefined ? resolveDeclaredOutcome(step, currentFlowFrame, engine) : currentFlowFrame.declaredOutcome;
4156
+ currentFlowFrame.declaredOutcome = { outcome: 'user_aborted', reason: declared?.reason || 'request_withdrawn' };
4157
+ while (engine.flowStacks.length > 0) {
4158
+ const poppedStack = engine.flowStacks.pop();
4159
+ for (const flow of poppedStack || []) {
4160
+ finalizeFlowTransaction(engine, flow, 'return');
4161
+ auditLogger.logFlowExit(flow.flowName, currentFlowFrame.userId, flow.transaction.id, 'request_withdrawn');
4162
+ }
4163
+ }
4164
+ initializeFlowStacks(engine);
4165
+ }
4126
4166
  function terminateForDispatch(currentFlowFrame, engine) {
4127
4167
  // DISPATCH = forget every flow and treat THIS turn's input as if no flow had been active:
4128
4168
  // processActivity runs intent detection on the input the turn started with (never a flow
@@ -5941,26 +5981,16 @@ async function processActivity(input, userId, engine) {
5941
5981
  logger.debug(`Current stack length: ${getCurrentStackLength(engine)}`);
5942
5982
  // A DISPATCH is consumed within the call that raised it; never carry one into another turn.
5943
5983
  engine.pendingDispatchFrom = null;
5944
- // One routing decision for the original turn, shared by guarded and ordinary dispatch.
5945
- let detected;
5946
5984
  let activatedThisTurn = false;
5947
- let detectedResponseContext;
5985
+ // The reply ranker's verdict this turn. Only a new request is routed: after `answers` a later ordinary DISPATCH
5986
+ // (e.g. an answer with nothing usable in it) hands the turn to the host, so an answer never restarts its own flow.
5987
+ let ranked = null;
5988
+ // `abort` is a RETURN: every flow ends and this is the turn's reply.
5989
+ let abortReply = null;
5948
5990
  let guardedRoutingFailed = false;
5949
- const route = async (continuation, responseContext) => {
5950
- if (detected === undefined) {
5951
- detected = await detectFlowWithParameters(String(sanitizedInput), engine, continuation, responseContext);
5952
- detectedResponseContext = responseContext;
5953
- }
5954
- else if (continuation?.parameters?.length && (responseContext !== detectedResponseContext || JSON.stringify(continuation.parameters) !== JSON.stringify(detected?.flow.parameters))) {
5955
- throw new Error('A typed contextual response cannot reuse an incompatible routing decision this turn');
5956
- }
5957
- return detected;
5958
- };
5959
5991
  engine.dispatchIfMatched = async (frame, step) => {
5960
5992
  if (activatedThisTurn && step.responseParameters === undefined && step.responseVariable === undefined)
5961
5993
  return false;
5962
- if (engine.flowsMenu.some(flow => flow.name.toLowerCase() === 'continuecurrent' || flow.id.toLowerCase() === '__jsfe_continue_current__'))
5963
- throw new Error('ContinueCurrent is reserved for contextual dispatch');
5964
5994
  let declaration;
5965
5995
  try {
5966
5996
  declaration = validateContextualResponseStep(step, engine.flowsMenu.find(flow => flow.id === frame.flowId));
@@ -5971,7 +6001,7 @@ async function processActivity(input, userId, engine) {
5971
6001
  guardedRoutingFailed = true;
5972
6002
  throw error;
5973
6003
  }
5974
- const context = interpolateMessage(step.responseContext, frame.contextStack, frame.variables, engine).trim();
6004
+ const question = interpolateMessage(step.responseContext, frame.contextStack, frame.variables, engine).trim();
5975
6005
  if (declaration) {
5976
6006
  declaration.parameters = declaration.parameters.map((parameter) => ({ ...parameter, description: interpolateMessage(parameter.description, frame.contextStack, frame.variables, engine).trim() }));
5977
6007
  if (declaration.parameters.some((parameter) => !parameter.description)) {
@@ -5979,36 +6009,45 @@ async function processActivity(input, userId, engine) {
5979
6009
  throw new Error('Contextual response parameter description resolved empty');
5980
6010
  }
5981
6011
  }
5982
- const continuation = { id: '__jsfe_continue_current__', name: 'ContinueCurrent', version: '1.0.0', primary: true, steps: [], ...(declaration ? { parameters: declaration.parameters } : {}), description: `The caller is responding to the requested ${context} or reports that the requested information is invalid, unknown or unavailable; datos incorrectos o inválidos, no lo sé, no lo tengo, no puedo dar el dato. Includes asking how to provide the requested information. Not a different service request or unrelated question; choose its workflow when offered, otherwise None for the host.` };
5983
- let selected;
6012
+ // A model error leaves this live continuation pending for the caller's error policy.
6013
+ let option;
5984
6014
  try {
5985
- selected = await route(continuation, context);
6015
+ option = await rankReply(String(sanitizedInput), engine, question);
5986
6016
  }
5987
6017
  catch (error) {
5988
6018
  guardedRoutingFailed = true;
5989
6019
  throw error;
5990
6020
  }
5991
- // A contextual handoff must not restart its own live workflow without new input.
5992
- // The host has the broader dialogue needed to clarify this otherwise empty re-entry.
5993
- if (selected && selected.flow.id !== continuation.id && !Object.keys(selected.parameters || {}).length && engine.flowStacks.flat().some(active => active.flowId === selected.flow.id)) {
5994
- selected = null;
5995
- detected = null;
5996
- }
5997
- if (selected?.flow.id === continuation.id) {
5998
- if (declaration)
5999
- frame.variables[declaration.variable] = structuredClone(selected.parameters || {});
6021
+ ranked = option;
6022
+ if (option === 'answers') {
6023
+ if (declaration) {
6024
+ try {
6025
+ frame.variables[declaration.variable] = await extractReplyParameters(String(sanitizedInput), engine, question, declaration.parameters);
6026
+ }
6027
+ catch (error) {
6028
+ guardedRoutingFailed = true;
6029
+ throw error;
6030
+ }
6031
+ }
6032
+ else {
6033
+ // no typed response: the flow reads the reply itself
6034
+ }
6035
+ logger.info(`Contextual DISPATCH in '${frame.flowName}': the reply answers the current question; the flow continues`);
6000
6036
  return false;
6001
6037
  }
6002
- stampStepRecovery(step, frame, engine);
6003
- terminateForDispatch(frame, engine);
6004
- if (!selected)
6005
- return true; // Real host handoff: ordinary dispatch consumes the cached None below.
6006
- engine.pendingDispatchFrom = null;
6007
- engine.recordDispatch({ fromFlow: frame.flowName, matchedFlow: selected.flow.name });
6008
- engine.clearFlowOutcome();
6009
- activatedThisTurn = true;
6010
- await isFlowActivated(String(sanitizedInput), engine, userId, selected);
6011
- return true;
6038
+ else if (option === 'abort') {
6039
+ // No recovery stamp: the caller chose to stop, so the host has nothing to resume or post-mortem.
6040
+ abortReply = getSystemMessage(engine, 'cmd_request_aborted');
6041
+ terminateForAbort(frame, engine);
6042
+ logger.info(`Contextual DISPATCH in '${frame.flowName}': the caller withdrew the request; every flow ended`);
6043
+ return true;
6044
+ }
6045
+ else {
6046
+ stampStepRecovery(step, frame, engine);
6047
+ terminateForDispatch(frame, engine);
6048
+ logger.info(`Contextual DISPATCH in '${frame.flowName}': a new request; this turn's input goes to intent detection`);
6049
+ return true;
6050
+ }
6012
6051
  };
6013
6052
  // Check if we're already in a flow (using new stack-of-stacks)
6014
6053
  if (getCurrentStackLength(engine) > 0) {
@@ -6056,7 +6095,11 @@ async function processActivity(input, userId, engine) {
6056
6095
  logger.info(`Flow context updated. inputStack: ${JSON.stringify(currentFlowFrame.inputStack)}, contextStack length: ${currentFlowFrame.contextStack.length}`);
6057
6096
  try {
6058
6097
  const response = await playFlowFrame(engine);
6059
- if (engine.pendingDispatchFrom === null) {
6098
+ if (abortReply !== null) {
6099
+ logger.info(`Flow response (request withdrawn): ${abortReply}`);
6100
+ return abortReply;
6101
+ }
6102
+ else if (engine.pendingDispatchFrom === null) {
6060
6103
  logger.info(`Flow response: ${response}`);
6061
6104
  return response;
6062
6105
  }
@@ -6083,8 +6126,7 @@ async function processActivity(input, userId, engine) {
6083
6126
  const dispatchedFrom = engine.pendingDispatchFrom;
6084
6127
  engine.pendingDispatchFrom = null;
6085
6128
  try {
6086
- const routed = await route();
6087
- const activatedFlow = activatedThisTurn || routed?.flow.id === '__jsfe_continue_current__' ? null : await isFlowActivated(String(sanitizedInput), engine, userId, routed);
6129
+ const activatedFlow = activatedThisTurn || (ranked !== null && ranked !== 'new_request') ? null : await isFlowActivated(String(sanitizedInput), engine, userId);
6088
6130
  if (activatedFlow)
6089
6131
  activatedThisTurn = true;
6090
6132
  if (dispatchedFrom !== null) {
@@ -1 +1 @@
1
- export const JSFE_RUNTIME_FINGERPRINT = "sha256:2ee0e74e5da06d62d22520608be1621f099396640d5a2bc08b2f8855af499f8e";
1
+ export const JSFE_RUNTIME_FINGERPRINT = "sha256:c6e5cc44dfdfbc555a1ce60e81c5dab5ed0f095eb3c3230f3b06af26106fcd8c";
@@ -160,6 +160,7 @@ Field options:
160
160
  | Fields | Meaning |
161
161
  | --- | --- |
162
162
  | `label`, `label_es`; `question`, `question_es`; `retry`, `retry_es` | Names, first prompt and explicit retry wording. Contextual question templates compile to workers automatically. |
163
+ | `question_text`, `question_text_es`; `retry_text`, `retry_text_es` | Optional written-channel wording, used instead when the conversation is not a call (`cargo.voice` false). |
163
164
  | `description` | Public extraction guidance; `response.description`, when used, describes an open answer. |
164
165
  | `when` | Map paths to desired scalar values or arrays; siblings use field names, session paths use `cargo.*`, owner data uses `form.*`. Values prefixed `!` exclude that value. |
165
166
  | `unless` | Paths whose populated, non-false value makes the field inapplicable. |
@@ -250,7 +251,7 @@ The loop skips accepted data and asks the first ready missing required field. Co
250
251
 
251
252
  `must_complete:true` on a form (inherited by every field of it and of the forms nested in it) or on one field (`false` on a field opts out): an unreadable answer is never yielded to DISPATCH, however long, and neither is a confirmation miss or an unresolved ambiguity — the question is asked again, acknowledged. Use it where leaving would strand an effect in progress (a payment's card, its billing-ZIP correction). Exits stay explicit: the form's stop words, `max_attempts` with `on_exhausted`, and whatever the host intercepts before the engine. The form runaway guard counts passes without a caller answer only.
252
253
 
253
- Use `response:{description}` for open descriptions that need the existing intent/extraction model's interpretation. The prepared question and field description become contextual DISPATCH context. An extracted answer still passes deterministic validation; missing usable data yields with progress saved. A supported different intent routes to that flow; otherwise the host can answer with its full context. No separate field classifier/model role is needed. Do not attempt exhaustive conversational inference with keyword lists.
254
+ Use `response:{description}` for open descriptions that need a model's interpretation. The prepared question and field description become the contextual DISPATCH question, and the reply ranker decides what the reply does: an answer is extracted and still passes deterministic validation (missing usable data yields with progress saved); a withdrawal leaves for the host; a new request routes through intent detection. No separate field classifier/model role is needed. Do not attempt exhaustive conversational inference with keyword lists.
254
255
 
255
256
  Ordinary DISPATCH is the default uncertainty escape. An explicit contextual DISPATCH may additionally declare the following step fragment (its surrounding flow must declare the response object and supply its own input/recovery steps):
256
257
 
@@ -263,7 +264,7 @@ Ordinary DISPATCH is the default uncertainty escape. An explicit contextual DISP
263
264
  }
264
265
  ```
265
266
 
266
- Declare `response` as a local object variable. Contextual routing offers `ContinueCurrent` along with primaries and `None`. ContinueCurrent retains the live continuation and runs following recovery steps; an optional typed response writes a cloned normalized object before continuing. A named primary replaces the continuation; None hands off. Neither writes that response object. Typed contextual v1 permits primitive string/boolean/number/integer fields, not object/array/jsonSchema. Missing fields remain missing. Errors preserve the pending step and prior object. Context is supplied to that decision without overwriting saved conversation history. This is existing configured intent/extraction, not authorization and not a snapshot restore.
267
+ Declare `response` as a local object variable. The reply ranker answers `answers`, `abort` or `new_request` (nothing clear is `answers`). `answers` retains the live continuation and runs the following recovery steps; an optional typed response writes a cloned normalized object before continuing. `new_request` routes the input through intent detection; `abort` ends every flow as a RETURN with the reply `cmd_request_aborted` and outcome `user_aborted` (no recovery stamp). Neither writes that response object. Typed contextual v1 permits primitive string/boolean/number/integer fields, not object/array/jsonSchema. Missing fields remain missing. Errors preserve the pending step and prior object. Context is supplied to that decision without overwriting saved conversation history. This is existing configured intent/extraction, not authorization and not a snapshot restore.
267
268
 
268
269
  ## 7. Providers
269
270
 
@@ -1,3 +1,12 @@
1
+ ## 1.10.9: written wording for a written channel
2
+
3
+ An input may carry `question_text` / `retry_text` (and `_es`): the wording used when the conversation is not a call
4
+ (`cargo.voice` false). Absent, `question` / `retry` are used on every channel, as before. The phone, ZIP, account number
5
+ and card presets carry them, so a chat no longer reads "Por favor diga o ingrese el número de su tarjeta" (prod 2026-10-26,
6
+ web D365 and WhatsApp).
7
+
8
+ **A restated phone number is read.** `readPhone` (and so `readIdentifier`) reads the last complete North American number after a sentence break or an "area code" when the whole answer is not one number: "Area code 21. 213 555 0147." was read as a Mexican number and "Area code, 213 555. Area code 213-555-0147." as nothing (prod 2026-10-26). An answer with an international prefix is never split.
9
+
1
10
  ## 1.10.8: "por favor" confirms
2
11
 
3
12
  "please" / "por favor" alone are a firm YES (`CONFIRM_WORDS`; owner rule 2026-10-26: prod 21:47, "por favor" to "presione 1 o
@@ -198,3 +207,9 @@ The 1.7.10 publication workflow was stopped before publication after the host-co
198
207
  Correct four OTP decision expressions to reference the renamed `otp_phrases` catalog. The incomplete rename in 1.7.11 prevented resend, lost-phone, later and some invalid-code recovery branches from executing correctly. Consent, authentication, action persistence and tool permissions are unchanged. A focused runtime regression executes the actual shared validator for English/Spanish lost-phone answers, resend, later and a short code, requiring no expression failures and no authentication. Tenant execution checks cover the affected account, identity, statement-delivery and proposal paths.
199
208
 
200
209
  This corrective release follows the same authorized dev-only rollout: exact consumer pins, matched shared and ai-ar-ql definitions in all three session-only dev configurations, and production unchanged. Broader execution and model results are retained separately and must be reported as observed.
210
+
211
+ ## 1.11.0 — the reply ranker replaces ContinueCurrent
212
+
213
+ A contextual DISPATCH (`onResponse: "continue"`) now asks one question: what does the reply do with the step's question? The reply ranker (`jsfe/host` `buildReplyRank`, task `rank_reply`, 4th aiCallback argument with `llm` and `systemOne` instructions) answers `answers`, `abort` or `new_request`; nothing clear is `answers`. `answers` continues the flow, extracting declared `responseParameters` with a stage-2 request; `abort` is a RETURN: every flow ends and the reply is the new system message `cmd_request_aborted` ("The process has been cancelled at your request - how can I help you?"; es: "El proceso fue cancelado a petición suya - ¿cómo puedo ayudarle?"), outcome `user_aborted` (new: transaction failed, never a post-mortem), no recovery stamp; `new_request` ends them and routes the input through intent detection. Only a new request is routed: after `answers` a later ordinary DISPATCH in the same turn goes to the host unrouted, so an answer never restarts its own flow.
214
+
215
+ Removed: the synthetic `ContinueCurrent` flow offered beside the primaries, its reserved name, and the per-turn routing cache shared between contextual and ordinary dispatch. Flow attributes and the `jsfe:contextual-responses:v1` protocol are unchanged. A host that does not know `rank_reply` answers its `llm` instructions with a text model. ReadFormResponse's question no longer sends uncertain replies to the host.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jsfe",
3
- "version": "1.10.8",
3
+ "version": "1.11.0",
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",