@falai/agent 4.0.0-alpha.14 → 4.0.0-alpha.15

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.
Files changed (245) hide show
  1. package/README.md +5 -3
  2. package/dist/cjs/core/Agent.js +9 -0
  3. package/dist/cjs/core/Agent.js.map +1 -1
  4. package/dist/cjs/core/CompactionEngine.d.ts.map +1 -1
  5. package/dist/cjs/core/CompactionEngine.js +8 -3
  6. package/dist/cjs/core/CompactionEngine.js.map +1 -1
  7. package/dist/cjs/core/FlowSpec.d.ts +19 -2
  8. package/dist/cjs/core/FlowSpec.d.ts.map +1 -1
  9. package/dist/cjs/core/FlowSpec.js +256 -57
  10. package/dist/cjs/core/FlowSpec.js.map +1 -1
  11. package/dist/cjs/core/Prompt.d.ts +16 -0
  12. package/dist/cjs/core/Prompt.d.ts.map +1 -1
  13. package/dist/cjs/core/Prompt.js +39 -0
  14. package/dist/cjs/core/Prompt.js.map +1 -1
  15. package/dist/cjs/core/Runner.d.ts +2 -0
  16. package/dist/cjs/core/Runner.d.ts.map +1 -1
  17. package/dist/cjs/core/Runner.js +26 -15
  18. package/dist/cjs/core/Runner.js.map +1 -1
  19. package/dist/cjs/core/Speak.d.ts.map +1 -1
  20. package/dist/cjs/core/Speak.js +22 -16
  21. package/dist/cjs/core/Speak.js.map +1 -1
  22. package/dist/cjs/core/Understand.d.ts +4 -3
  23. package/dist/cjs/core/Understand.d.ts.map +1 -1
  24. package/dist/cjs/core/Understand.js +5 -38
  25. package/dist/cjs/core/Understand.js.map +1 -1
  26. package/dist/cjs/core/contracts.d.ts +5 -5
  27. package/dist/cjs/core/contracts.d.ts.map +1 -1
  28. package/dist/cjs/index.d.ts +1 -1
  29. package/dist/cjs/index.d.ts.map +1 -1
  30. package/dist/cjs/index.js.map +1 -1
  31. package/dist/cjs/persistence/OpenSearchStore.d.ts +2 -1
  32. package/dist/cjs/persistence/OpenSearchStore.d.ts.map +1 -1
  33. package/dist/cjs/persistence/OpenSearchStore.js +2 -2
  34. package/dist/cjs/persistence/OpenSearchStore.js.map +1 -1
  35. package/dist/cjs/persistence/RedisStore.d.ts +1 -1
  36. package/dist/cjs/persistence/RedisStore.d.ts.map +1 -1
  37. package/dist/cjs/providers/AnthropicProvider.d.ts +2 -5
  38. package/dist/cjs/providers/AnthropicProvider.d.ts.map +1 -1
  39. package/dist/cjs/providers/AnthropicProvider.js +3 -4
  40. package/dist/cjs/providers/AnthropicProvider.js.map +1 -1
  41. package/dist/cjs/providers/DeepSeekProvider.d.ts.map +1 -1
  42. package/dist/cjs/providers/DeepSeekProvider.js +3 -4
  43. package/dist/cjs/providers/DeepSeekProvider.js.map +1 -1
  44. package/dist/cjs/providers/FallbackAiProvider.js +1 -1
  45. package/dist/cjs/providers/FallbackAiProvider.js.map +1 -1
  46. package/dist/cjs/providers/GeminiProvider.d.ts +1 -2
  47. package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -1
  48. package/dist/cjs/providers/GeminiProvider.js +3 -4
  49. package/dist/cjs/providers/GeminiProvider.js.map +1 -1
  50. package/dist/cjs/providers/GenericOpenAICompatibleProvider.js +4 -4
  51. package/dist/cjs/providers/GenericOpenAICompatibleProvider.js.map +1 -1
  52. package/dist/cjs/providers/OpenAIProvider.d.ts.map +1 -1
  53. package/dist/cjs/providers/OpenAIProvider.js +3 -4
  54. package/dist/cjs/providers/OpenAIProvider.js.map +1 -1
  55. package/dist/cjs/providers/OpenRouterProvider.d.ts.map +1 -1
  56. package/dist/cjs/providers/OpenRouterProvider.js +4 -3
  57. package/dist/cjs/providers/OpenRouterProvider.js.map +1 -1
  58. package/dist/cjs/providers/ProviderAdapter.d.ts +5 -9
  59. package/dist/cjs/providers/ProviderAdapter.d.ts.map +1 -1
  60. package/dist/cjs/providers/ProviderAdapter.js +1 -2
  61. package/dist/cjs/providers/ProviderAdapter.js.map +1 -1
  62. package/dist/cjs/providers/ZaiProvider.js +1 -1
  63. package/dist/cjs/providers/ZaiProvider.js.map +1 -1
  64. package/dist/cjs/types/agent.d.ts +1 -1
  65. package/dist/cjs/types/agent.d.ts.map +1 -1
  66. package/dist/cjs/types/ai.d.ts +4 -6
  67. package/dist/cjs/types/ai.d.ts.map +1 -1
  68. package/dist/cjs/types/compaction.d.ts +1 -0
  69. package/dist/cjs/types/compaction.d.ts.map +1 -1
  70. package/dist/cjs/types/errors.d.ts +4 -9
  71. package/dist/cjs/types/errors.d.ts.map +1 -1
  72. package/dist/cjs/types/errors.js +12 -12
  73. package/dist/cjs/types/errors.js.map +1 -1
  74. package/dist/cjs/types/history.d.ts +0 -7
  75. package/dist/cjs/types/history.d.ts.map +1 -1
  76. package/dist/cjs/types/index.d.ts +1 -1
  77. package/dist/cjs/types/index.d.ts.map +1 -1
  78. package/dist/cjs/types/index.js.map +1 -1
  79. package/dist/cjs/types/session.d.ts +1 -1
  80. package/dist/cjs/types/session.d.ts.map +1 -1
  81. package/dist/cjs/utils/clock.js +1 -1
  82. package/dist/cjs/utils/clock.js.map +1 -1
  83. package/dist/cjs/utils/schema.d.ts +2 -11
  84. package/dist/cjs/utils/schema.d.ts.map +1 -1
  85. package/dist/cjs/utils/schema.js +2 -43
  86. package/dist/cjs/utils/schema.js.map +1 -1
  87. package/dist/core/Agent.js +10 -1
  88. package/dist/core/Agent.js.map +1 -1
  89. package/dist/core/CompactionEngine.d.ts.map +1 -1
  90. package/dist/core/CompactionEngine.js +8 -3
  91. package/dist/core/CompactionEngine.js.map +1 -1
  92. package/dist/core/FlowSpec.d.ts +19 -2
  93. package/dist/core/FlowSpec.d.ts.map +1 -1
  94. package/dist/core/FlowSpec.js +254 -57
  95. package/dist/core/FlowSpec.js.map +1 -1
  96. package/dist/core/Prompt.d.ts +16 -0
  97. package/dist/core/Prompt.d.ts.map +1 -1
  98. package/dist/core/Prompt.js +37 -0
  99. package/dist/core/Prompt.js.map +1 -1
  100. package/dist/core/Runner.d.ts +2 -0
  101. package/dist/core/Runner.d.ts.map +1 -1
  102. package/dist/core/Runner.js +27 -16
  103. package/dist/core/Runner.js.map +1 -1
  104. package/dist/core/Speak.d.ts.map +1 -1
  105. package/dist/core/Speak.js +23 -17
  106. package/dist/core/Speak.js.map +1 -1
  107. package/dist/core/Understand.d.ts +4 -3
  108. package/dist/core/Understand.d.ts.map +1 -1
  109. package/dist/core/Understand.js +5 -38
  110. package/dist/core/Understand.js.map +1 -1
  111. package/dist/core/contracts.d.ts +5 -5
  112. package/dist/core/contracts.d.ts.map +1 -1
  113. package/dist/index.d.ts +1 -1
  114. package/dist/index.d.ts.map +1 -1
  115. package/dist/index.js.map +1 -1
  116. package/dist/persistence/OpenSearchStore.d.ts +2 -1
  117. package/dist/persistence/OpenSearchStore.d.ts.map +1 -1
  118. package/dist/persistence/OpenSearchStore.js +2 -2
  119. package/dist/persistence/OpenSearchStore.js.map +1 -1
  120. package/dist/persistence/RedisStore.d.ts +1 -1
  121. package/dist/persistence/RedisStore.d.ts.map +1 -1
  122. package/dist/providers/AnthropicProvider.d.ts +2 -5
  123. package/dist/providers/AnthropicProvider.d.ts.map +1 -1
  124. package/dist/providers/AnthropicProvider.js +3 -4
  125. package/dist/providers/AnthropicProvider.js.map +1 -1
  126. package/dist/providers/DeepSeekProvider.d.ts.map +1 -1
  127. package/dist/providers/DeepSeekProvider.js +3 -4
  128. package/dist/providers/DeepSeekProvider.js.map +1 -1
  129. package/dist/providers/FallbackAiProvider.js +1 -1
  130. package/dist/providers/FallbackAiProvider.js.map +1 -1
  131. package/dist/providers/GeminiProvider.d.ts +1 -2
  132. package/dist/providers/GeminiProvider.d.ts.map +1 -1
  133. package/dist/providers/GeminiProvider.js +3 -4
  134. package/dist/providers/GeminiProvider.js.map +1 -1
  135. package/dist/providers/GenericOpenAICompatibleProvider.js +4 -4
  136. package/dist/providers/GenericOpenAICompatibleProvider.js.map +1 -1
  137. package/dist/providers/OpenAIProvider.d.ts.map +1 -1
  138. package/dist/providers/OpenAIProvider.js +3 -4
  139. package/dist/providers/OpenAIProvider.js.map +1 -1
  140. package/dist/providers/OpenRouterProvider.d.ts.map +1 -1
  141. package/dist/providers/OpenRouterProvider.js +4 -3
  142. package/dist/providers/OpenRouterProvider.js.map +1 -1
  143. package/dist/providers/ProviderAdapter.d.ts +5 -9
  144. package/dist/providers/ProviderAdapter.d.ts.map +1 -1
  145. package/dist/providers/ProviderAdapter.js +1 -2
  146. package/dist/providers/ProviderAdapter.js.map +1 -1
  147. package/dist/providers/ZaiProvider.js +1 -1
  148. package/dist/providers/ZaiProvider.js.map +1 -1
  149. package/dist/types/agent.d.ts +1 -1
  150. package/dist/types/agent.d.ts.map +1 -1
  151. package/dist/types/ai.d.ts +4 -6
  152. package/dist/types/ai.d.ts.map +1 -1
  153. package/dist/types/compaction.d.ts +1 -0
  154. package/dist/types/compaction.d.ts.map +1 -1
  155. package/dist/types/errors.d.ts +4 -9
  156. package/dist/types/errors.d.ts.map +1 -1
  157. package/dist/types/errors.js +12 -12
  158. package/dist/types/errors.js.map +1 -1
  159. package/dist/types/history.d.ts +0 -7
  160. package/dist/types/history.d.ts.map +1 -1
  161. package/dist/types/index.d.ts +1 -1
  162. package/dist/types/index.d.ts.map +1 -1
  163. package/dist/types/index.js.map +1 -1
  164. package/dist/types/session.d.ts +1 -1
  165. package/dist/types/session.d.ts.map +1 -1
  166. package/dist/utils/clock.js +1 -1
  167. package/dist/utils/clock.js.map +1 -1
  168. package/dist/utils/schema.d.ts +2 -11
  169. package/dist/utils/schema.d.ts.map +1 -1
  170. package/dist/utils/schema.js +2 -42
  171. package/dist/utils/schema.js.map +1 -1
  172. package/docs/concepts/pipeline.md +2 -2
  173. package/docs/concepts/runs-and-waits.md +1 -1
  174. package/docs/guides/actions-and-events.md +1 -1
  175. package/docs/guides/branching.md +1 -1
  176. package/docs/guides/compaction.md +2 -2
  177. package/docs/guides/error-handling.md +1 -1
  178. package/docs/guides/flow-control.md +1 -1
  179. package/docs/guides/persistence.md +1 -1
  180. package/docs/migration/v3-to-v4.md +2 -2
  181. package/docs/reference/agent.md +1 -1
  182. package/docs/reference/errors.md +10 -7
  183. package/docs/reference/flow-spec.md +29 -5
  184. package/docs/reference/outcomes.md +1 -1
  185. package/docs/reference/providers.md +2 -0
  186. package/docs/reference/step.md +1 -1
  187. package/docs/reference/stores.md +5 -3
  188. package/docs/start/01-install.md +5 -3
  189. package/package.json +1 -1
  190. package/src/core/Agent.ts +12 -1
  191. package/src/core/CompactionEngine.ts +10 -3
  192. package/src/core/FlowSpec.ts +263 -65
  193. package/src/core/Prompt.ts +40 -0
  194. package/src/core/Runner.ts +27 -14
  195. package/src/core/Speak.ts +23 -16
  196. package/src/core/Understand.ts +5 -39
  197. package/src/core/contracts.ts +5 -3
  198. package/src/index.ts +0 -1
  199. package/src/persistence/OpenSearchStore.ts +3 -2
  200. package/src/persistence/RedisStore.ts +1 -1
  201. package/src/providers/AnthropicProvider.ts +4 -9
  202. package/src/providers/DeepSeekProvider.ts +2 -4
  203. package/src/providers/FallbackAiProvider.ts +1 -1
  204. package/src/providers/GeminiProvider.ts +3 -6
  205. package/src/providers/GenericOpenAICompatibleProvider.ts +4 -4
  206. package/src/providers/OpenAIProvider.ts +3 -4
  207. package/src/providers/OpenRouterProvider.ts +4 -2
  208. package/src/providers/ProviderAdapter.ts +6 -11
  209. package/src/providers/ZaiProvider.ts +1 -1
  210. package/src/types/agent.ts +1 -1
  211. package/src/types/ai.ts +4 -6
  212. package/src/types/compaction.ts +1 -0
  213. package/src/types/errors.ts +11 -12
  214. package/src/types/history.ts +0 -10
  215. package/src/types/index.ts +0 -1
  216. package/src/types/session.ts +1 -1
  217. package/src/utils/clock.ts +1 -1
  218. package/src/utils/schema.ts +2 -48
  219. package/dist/cjs/providers/index.d.ts +0 -26
  220. package/dist/cjs/providers/index.d.ts.map +0 -1
  221. package/dist/cjs/providers/index.js +0 -30
  222. package/dist/cjs/providers/index.js.map +0 -1
  223. package/dist/cjs/utils/clone.d.ts +0 -8
  224. package/dist/cjs/utils/clone.d.ts.map +0 -1
  225. package/dist/cjs/utils/clone.js +0 -32
  226. package/dist/cjs/utils/clone.js.map +0 -1
  227. package/dist/cjs/utils/index.d.ts +0 -9
  228. package/dist/cjs/utils/index.d.ts.map +0 -1
  229. package/dist/cjs/utils/index.js +0 -29
  230. package/dist/cjs/utils/index.js.map +0 -1
  231. package/dist/providers/index.d.ts +0 -26
  232. package/dist/providers/index.d.ts.map +0 -1
  233. package/dist/providers/index.js +0 -17
  234. package/dist/providers/index.js.map +0 -1
  235. package/dist/utils/clone.d.ts +0 -8
  236. package/dist/utils/clone.d.ts.map +0 -1
  237. package/dist/utils/clone.js +0 -29
  238. package/dist/utils/clone.js.map +0 -1
  239. package/dist/utils/index.d.ts +0 -9
  240. package/dist/utils/index.d.ts.map +0 -1
  241. package/dist/utils/index.js +0 -9
  242. package/dist/utils/index.js.map +0 -1
  243. package/src/providers/index.ts +0 -38
  244. package/src/utils/clone.ts +0 -34
  245. package/src/utils/index.ts +0 -18
package/README.md CHANGED
@@ -68,13 +68,15 @@ console.log(r.messages[0]?.text);
68
68
  ## Install
69
69
 
70
70
  ```bash
71
- bun add @falai/agent
71
+ bun add @falai/agent@alpha
72
72
  # or
73
- npm install @falai/agent
73
+ npm install @falai/agent@alpha
74
74
  # or
75
- pnpm add @falai/agent
75
+ pnpm add @falai/agent@alpha
76
76
  ```
77
77
 
78
+ 4.0 is in alpha. Plain `@falai/agent`, with no tag, still installs 3.x, and the examples here will not compile against it.
79
+
78
80
  Requires Node 22.12+ or Bun 1.0+. Set a provider API key in your environment (for example `GEMINI_API_KEY`, `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, `OPENROUTER_API_KEY`, or `DEEPSEEK_API_KEY`).
79
81
 
80
82
  ## License
@@ -101,6 +101,14 @@ function compactionOptions(options) {
101
101
  }
102
102
  /** Every name a flow uses must resolve now, not on the turn that first reaches it. */
103
103
  function validate(options) {
104
+ // A host condition under a built-in's name is never called: the built-in answers first.
105
+ for (const name of Object.keys(options.conditions ?? {})) {
106
+ if (FlowSpec_js_1.BUILT_IN_CONDITIONS.includes(name)) {
107
+ throw new errors_js_1.FlowConfigurationError(`[FlowConfigurationError] condition "${name}" shadows a built-in: ${FlowSpec_js_1.BUILT_IN_CONDITIONS.join(", ")} are reserved. Rename it.`);
108
+ }
109
+ }
110
+ // An agent-level `if` is judged on every turn, so an unknown name here would throw on every turn.
111
+ options.instructions?.forEach((ins, i) => (0, FlowSpec_js_1.checkPred)(ins.if, "agent", `instructions[${i}].if`, options));
104
112
  const ids = new Set();
105
113
  for (const flow of options.flows ?? []) {
106
114
  if (ids.has(flow.id)) {
@@ -122,6 +130,7 @@ function validate(options) {
122
130
  }
123
131
  const { idle } = options;
124
132
  if (idle && idle !== "silent") {
133
+ idle.instructions?.forEach((ins, i) => (0, FlowSpec_js_1.checkPred)(ins.if, "idle", `instructions[${i}].if`, options));
125
134
  const known = new Set((options.tools ?? []).map((tool) => tool.id));
126
135
  for (const name of idle.tools ?? []) {
127
136
  if (!known.has(name)) {
@@ -1 +1 @@
1
- {"version":3,"file":"Agent.js","sourceRoot":"","sources":["../../../src/core/Agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Agent.js","sourceRoot":"","sources":["../../../src/core/Agent.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"CompactionEngine.d.ts","sourceRoot":"","sources":["../../../src/core/CompactionEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAGlF,qBAAa,gBAAgB;IACzB;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IA4BxD;;;;;;OAMG;IACH,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM;IAiBrD;;;;;;OAMG;IACH,MAAM,CAAC,qBAAqB,CACxB,OAAO,EAAE,WAAW,EAAE,EACtB,iBAAiB,EAAE,MAAM,GAC1B,WAAW,EAAE;IAkBhB;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IA2B3B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAc/B;;;OAGG;mBACkB,iBAAiB;IA+BtC;;;;;;;;;OASG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAWjC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAgCjC;;;;;;;;;;;OAWG;WACU,eAAe,CACxB,OAAO,EAAE,WAAW,EAAE,EACtB,OAAO,EAAE,iBAAiB,GAC3B,OAAO,CAAC,gBAAgB,CAAC;CAkG/B"}
1
+ {"version":3,"file":"CompactionEngine.d.ts","sourceRoot":"","sources":["../../../src/core/CompactionEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAGlF,qBAAa,gBAAgB;IACzB;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAmCxD;;;;;;OAMG;IACH,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM;IAiBrD;;;;;;OAMG;IACH,MAAM,CAAC,qBAAqB,CACxB,OAAO,EAAE,WAAW,EAAE,EACtB,iBAAiB,EAAE,MAAM,GAC1B,WAAW,EAAE;IAkBhB;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IA2B3B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAc/B;;;OAGG;mBACkB,iBAAiB;IA+BtC;;;;;;;;;OASG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAWjC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAgCjC;;;;;;;;;;;OAWG;WACU,eAAe,CACxB,OAAO,EAAE,WAAW,EAAE,EACtB,OAAO,EAAE,iBAAiB,GAC3B,OAAO,CAAC,gBAAgB,CAAC;CAkG/B"}
@@ -20,18 +20,23 @@ class CompactionEngine {
20
20
  * Validate CompactionOptions. Throws on invalid values.
21
21
  */
22
22
  static validateOptions(options) {
23
+ if (typeof options.maxTokens !== "number" || !(options.maxTokens > 0)) {
24
+ throw new Error(`[CompactionEngine] maxTokens is ${String(options.maxTokens)}: it must be above 0. ` +
25
+ `Set it to the most history, in tokens, each call should carry, e.g. 100000.`);
26
+ }
23
27
  if (typeof options.compactionThreshold !== "number" ||
24
28
  options.compactionThreshold < 0.5 ||
25
29
  options.compactionThreshold > 0.95) {
26
- throw new Error(`compactionThreshold must be between 0.5 and 0.95, got ${options.compactionThreshold}`);
30
+ throw new Error(`[CompactionEngine] compactionThreshold is ${String(options.compactionThreshold)}: it must be between 0.5 and 0.95. ` +
31
+ `Use 0.8 unless you measured otherwise.`);
27
32
  }
28
33
  if (typeof options.preserveRecentCount !== "number" ||
29
34
  options.preserveRecentCount < 2) {
30
- throw new Error(`preserveRecentCount must be >= 2, got ${options.preserveRecentCount}`);
35
+ throw new Error(`[CompactionEngine] preserveRecentCount is ${String(options.preserveRecentCount)}: it must be 2 or more. Use 4, the default.`);
31
36
  }
32
37
  if (typeof options.maxToolResultChars !== "number" ||
33
38
  options.maxToolResultChars <= 0) {
34
- throw new Error(`maxToolResultChars must be > 0, got ${options.maxToolResultChars}`);
39
+ throw new Error(`[CompactionEngine] maxToolResultChars is ${String(options.maxToolResultChars)}: it must be above 0. Use 5000, the default.`);
35
40
  }
36
41
  }
37
42
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"CompactionEngine.js","sourceRoot":"","sources":["../../../src/core/CompactionEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CompactionEngine.js","sourceRoot":"","sources":["../../../src/core/CompactionEngine.ts"],"names":[],"mappings":"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"}
@@ -99,8 +99,16 @@ export interface FlowSpec {
99
99
  instructions?: InstructionSpec[];
100
100
  tools?: string[];
101
101
  }
102
- /** What a flow's names resolve against: the agent's fields, actions, events, conditions and tools. */
103
- export type Registries = Pick<AgentOptions, "fields" | "actions" | "events" | "conditions" | "tools">;
102
+ /**
103
+ * What a flow's names resolve against: the agent's fields, actions, events,
104
+ * conditions and tools. With `flows`, a literal `{ flow }` target must name
105
+ * one of them; the agent passes its own.
106
+ */
107
+ export type Registries = Pick<AgentOptions, "fields" | "actions" | "events" | "conditions" | "tools"> & {
108
+ flows?: ReadonlyArray<{
109
+ id: string;
110
+ }>;
111
+ };
104
112
  /**
105
113
  * A spec as a typed flow. The slugs and names inside a spec are strings from
106
114
  * storage, so the result is typed by claim: `validateFlow` (which the agent
@@ -110,6 +118,9 @@ export type Registries = Pick<AgentOptions, "fields" | "actions" | "events" | "c
110
118
  export declare function fromSpec<C = unknown, D = LooseData>(spec: FlowSpec): Flow<C, D>;
111
119
  /** Throws `FlowConfigurationError` when the flow carries a function predicate: it cannot be stored. */
112
120
  export declare function toSpec<C, D extends LooseData>(flow: Flow<C, D>): FlowSpec;
121
+ /** A read-only view that a typed Flow and a spec-derived Flow both fit; the validator only reads. */
122
+ type LoosePred = ((ctx: never) => boolean) | Record<string, unknown>;
123
+ export declare const BUILT_IN_CONDITIONS: string[];
113
124
  /**
114
125
  * Check a flow, typed or as a spec, against the agent's registries. Throws
115
126
  * `FlowConfigurationError` on the first problem that would break at runtime;
@@ -118,6 +129,12 @@ export declare function toSpec<C, D extends LooseData>(flow: Flow<C, D>): FlowSp
118
129
  export declare function validateFlow<C = unknown, D = LooseData>(input: Flow<C, D> | FlowSpec, registries: Registries): {
119
130
  warnings: string[];
120
131
  };
132
+ /**
133
+ * A predicate's names against the registries: the fields `equals` and `known`
134
+ * read, and every other key as one of the agent's conditions. A function is
135
+ * code and passes as is. The agent runs this on its own instructions too.
136
+ */
137
+ export declare function checkPred(value: LoosePred | undefined, at: string, where: string, registries: Registries): void;
121
138
  /**
122
139
  * FlowSpec's JSON schema with this workspace's actions (each with its
123
140
  * parameter schema), events, conditions and field slugs as enums. Every
@@ -1 +1 @@
1
- {"version":3,"file":"FlowSpec.d.ts","sourceRoot":"","sources":["../../../src/core/FlowSpec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FlowSpec.d.ts","sourceRoot":"","sources":["../../../src/core/FlowSpec.ts"],"names":[],"mappings":"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"}
@@ -17,9 +17,11 @@
17
17
  * nulls dropped, and the identity on a spec that had none.
18
18
  */
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.BUILT_IN_CONDITIONS = void 0;
20
21
  exports.fromSpec = fromSpec;
21
22
  exports.toSpec = toSpec;
22
23
  exports.validateFlow = validateFlow;
24
+ exports.checkPred = checkPred;
23
25
  exports.flowSpecSchema = flowSpecSchema;
24
26
  const errors_js_1 = require("../types/errors.js");
25
27
  const duration_js_1 = require("../utils/duration.js");
@@ -34,9 +36,7 @@ const schema_js_1 = require("../utils/schema.js");
34
36
  */
35
37
  function fromSpec(spec) {
36
38
  const clean = stripNulls(spec);
37
- if (!Array.isArray(clean.steps)) {
38
- throw problem(`flow "${clean.id}"`, "has no steps list", "Write steps as a list, even an empty one.");
39
- }
39
+ checkShape(clean);
40
40
  const { steps, ...rest } = clean;
41
41
  const flow = { ...rest, steps: steps.map(fromStepSpec) };
42
42
  return flow;
@@ -126,12 +126,12 @@ function jsonPredRequired(pred, at) {
126
126
  }
127
127
  return pred;
128
128
  }
129
- const BUILT_IN_CONDITIONS = ["equals", "known", "silenced"];
129
+ exports.BUILT_IN_CONDITIONS = ["equals", "known", "silenced"];
130
130
  const DURATION_HINT = 'Write a number and a unit: "30s", "5m", "24h" or "3d".';
131
131
  /** The four keys one of which makes an `on[]` entry a trigger. */
132
132
  const TRIGGER_KINDS = ["message", "mention", "silence", "event"];
133
- /** The six keys one of which makes a step do something. */
134
- const STEP_DOES = ["prompt", "collect", "say", "do", "wait", "if"];
133
+ const ON_END = ["end", "stay", "reset"];
134
+ const INSTRUCTION_KINDS = ["must", "never", "should"];
135
135
  /**
136
136
  * Check a flow, typed or as a spec, against the agent's registries. Throws
137
137
  * `FlowConfigurationError` on the first problem that would break at runtime;
@@ -140,16 +140,14 @@ const STEP_DOES = ["prompt", "collect", "say", "do", "wait", "if"];
140
140
  function validateFlow(input, registries) {
141
141
  // Nulls mean "not set" in a spec; a typed flow has none, so one pass serves both forms.
142
142
  const flow = stripNulls(input);
143
- const { fields, actions = {}, events = {}, conditions = {}, tools = [] } = registries;
143
+ checkShape(flow);
144
+ const { fields, actions = {}, events = {}, tools = [] } = registries;
144
145
  const toolIds = new Set(tools.map((tool) => tool.id));
145
146
  const warnings = [];
146
147
  if (typeof flow.id !== "string" || flow.id === "") {
147
148
  throw problem("flow", "has no id", "Give the flow a short unique id.");
148
149
  }
149
150
  const flowAt = `flow "${flow.id}"`;
150
- if (!Array.isArray(flow.steps)) {
151
- throw problem(flowAt, "has no steps list", "Write steps as a list, even an empty one.");
152
- }
153
151
  const index = new Map();
154
152
  flow.steps.forEach((step, i) => {
155
153
  if (typeof step.id !== "string" || step.id === "") {
@@ -166,48 +164,14 @@ function validateFlow(input, registries) {
166
164
  if (flow.on?.length && flow.steps.length === 0) {
167
165
  throw problem(flowAt, "has triggers but no steps", "Add at least one step or remove `on`.");
168
166
  }
169
- const slug = (name, at, where) => {
170
- if (!own(fields, name)) {
171
- throw problem(at, `unknown field "${name}" in ${where}`, "Add it to the agent's fields or fix the slug.");
172
- }
173
- };
167
+ const slug = (name, at, where) => checkSlug(fields, name, at, where);
174
168
  const toolNames = (names, at) => {
175
169
  for (const name of names ?? []) {
176
170
  if (!toolIds.has(name))
177
171
  throw problem(at, `unknown tool "${name}"`, "Register it in the agent's tools or fix the name.");
178
172
  }
179
173
  };
180
- const pred = (value, at, where) => {
181
- if (value === undefined || typeof value === "function")
182
- return;
183
- for (const [name, arg] of Object.entries(value)) {
184
- if (name === "equals") {
185
- if (arg === null || typeof arg !== "object" || Array.isArray(arg)) {
186
- throw problem(at, `${where}.equals is not an object`, "Write equals as { field: value }.");
187
- }
188
- for (const [field, given] of Object.entries(arg)) {
189
- slug(field, at, `${where}.equals`);
190
- const def = fields[field];
191
- if (!matches(def, given)) {
192
- throw problem(at, `${where}.equals gives "${field}" a ${describe(given)}, but the field is a ${def.type}`, `Write a ${def.type}; values are not coerced.`);
193
- }
194
- }
195
- }
196
- else if (name === "known") {
197
- if (!Array.isArray(arg))
198
- throw problem(at, `${where}.known is not a list`, "Write known as [field, ...].");
199
- for (const field of arg)
200
- slug(String(field), at, `${where}.known`);
201
- }
202
- else if (name === "silenced") {
203
- if (typeof arg !== "boolean")
204
- throw problem(at, `${where}.silenced is not a boolean`, "Write true or false.");
205
- }
206
- else if (!own(conditions, name)) {
207
- throw problem(at, `unknown condition "${name}" in ${where}`, `Register it in conditions or use ${BUILT_IN_CONDITIONS.join(", ")}.`);
208
- }
209
- }
210
- };
174
+ const pred = (value, at, where) => checkPred(value, at, where, registries);
211
175
  const duration = (value, at, where) => {
212
176
  if (value !== undefined && !(0, duration_js_1.isDuration)(value)) {
213
177
  throw problem(at, `${where} has duration "${value}", which does not parse`, DURATION_HINT);
@@ -224,8 +188,16 @@ function validateFlow(input, registries) {
224
188
  }
225
189
  return to;
226
190
  }
227
- if ("flow" in next)
191
+ if ("flow" in next) {
192
+ // A templated id resolves per run; only a literal one can be checked now. A warning, not a throw:
193
+ // a host that drops one bad row keeps the rest of its agent, and the Runner skips this move as flow-gone.
194
+ const known = registries.flows?.map((f) => f.id);
195
+ if (known && !next.flow.includes("{{") && !known.includes(next.flow)) {
196
+ const fix = known.length ? `Use one of ${known.map((id) => `"${id}"`).join(", ")}, or add the flow.` : "Add the flow to the agent.";
197
+ warnings.push(`${at}: ${where} names flow "${next.flow}", which this agent does not have; a run skips this move with flow-gone. ${fix}`);
198
+ }
228
199
  return undefined;
200
+ }
229
201
  const to = index.get(next.step);
230
202
  if (to === undefined) {
231
203
  throw problem(at, `${where} points at step "${next.step}", which does not exist`, 'Use an existing step id or "end".');
@@ -312,13 +284,6 @@ function validateFlow(input, registries) {
312
284
  });
313
285
  flow.steps.forEach((step, i) => {
314
286
  const at = `${flowAt}, step "${step.id}"`;
315
- // Same reasoning as the trigger above: a step that does none of the five
316
- // things is a step the run walks straight past, silently. `kind` alone is
317
- // not enough — the spec form drops it and keeps the body, so what counts
318
- // is whether the body says what to do.
319
- if (!STEP_DOES.some((key) => step[key] !== undefined)) {
320
- throw problem(at, "does nothing", "A step talks (`prompt` / `collect`), says (`say`), acts (`do`), waits (`wait`) or forks (`if`).");
321
- }
322
287
  const thenTo = edge(i, step.then, at, "then");
323
288
  edge(i, step.else, at, "else");
324
289
  if (step.collect !== undefined || step.prompt !== undefined) {
@@ -342,6 +307,12 @@ function validateFlow(input, registries) {
342
307
  if (branch.when === undefined && branch.if === undefined) {
343
308
  throw problem(at, `${where} has neither when nor if`, "Give the branch an AI condition (when) or a code one (if).");
344
309
  }
310
+ // No understand call judges a wait, so an AI condition there never fires. A warning, not a throw: the
311
+ // flow still runs as it did, a reply goes to `else`, and editors that offered the branch keep their rows.
312
+ if (branch.when !== undefined && step.wait !== undefined) {
313
+ warnings.push(`${at}: ${where} is a "when" branch on a wait step, which no call judges, so a reply goes to else. ` +
314
+ 'Use "if", or move the branch to a talk step.');
315
+ }
345
316
  pred(branch.if, at, `${where}.if`);
346
317
  edge(i, branch.then, at, `${where}.then`);
347
318
  });
@@ -372,6 +343,232 @@ function validateFlow(input, registries) {
372
343
  });
373
344
  return { warnings };
374
345
  }
346
+ function checkSlug(fields, name, at, where) {
347
+ if (!own(fields, name)) {
348
+ throw problem(at, `unknown field "${name}" in ${where}`, "Add it to the agent's fields or fix the slug.");
349
+ }
350
+ }
351
+ /**
352
+ * A predicate's names against the registries: the fields `equals` and `known`
353
+ * read, and every other key as one of the agent's conditions. A function is
354
+ * code and passes as is. The agent runs this on its own instructions too.
355
+ */
356
+ function checkPred(value, at, where, registries) {
357
+ if (value === undefined || typeof value === "function")
358
+ return;
359
+ const { fields, conditions = {} } = registries;
360
+ for (const [name, arg] of Object.entries(value)) {
361
+ if (name === "equals") {
362
+ if (!isObject(arg)) {
363
+ throw problem(at, `${where}.equals is not an object`, "Write equals as { field: value }.");
364
+ }
365
+ for (const [field, given] of Object.entries(arg)) {
366
+ checkSlug(fields, field, at, `${where}.equals`);
367
+ const def = fields[field];
368
+ if (!matches(def, given)) {
369
+ const { listed, expected, got, fix } = mismatch(def, given);
370
+ throw listed
371
+ ? problem(at, `${where}.equals gives "${field}" ${got}, which is not ${expected}`, fix)
372
+ : problem(at, `${where}.equals gives "${field}" ${article(got)} ${got}, but the field is ${expected}`, `Write ${expected}; values are not coerced.`);
373
+ }
374
+ }
375
+ }
376
+ else if (name === "known") {
377
+ if (!Array.isArray(arg))
378
+ throw problem(at, `${where}.known is not a list`, "Write known as [field, ...].");
379
+ for (const field of arg)
380
+ checkSlug(fields, String(field), at, `${where}.known`);
381
+ }
382
+ else if (name === "silenced") {
383
+ if (typeof arg !== "boolean")
384
+ throw problem(at, `${where}.silenced is not a boolean`, "Write true or false.");
385
+ }
386
+ else if (!own(conditions, name)) {
387
+ throw problem(at, `unknown condition "${name}" in ${where}`, `Register it in conditions or use ${exports.BUILT_IN_CONDITIONS.join(", ")}.`);
388
+ }
389
+ }
390
+ }
391
+ // ── Shape ───────────────────────────────────────────────────────────────
392
+ /**
393
+ * The JSON shape, checked before any name is. Stored rows and generated specs
394
+ * are untrusted: a string where a list belongs used to crash with a raw
395
+ * TypeError naming no flow, or pass and misbehave at run time (`collect:
396
+ * "nome"` read as the fields "n", "o", "m", "e").
397
+ */
398
+ function checkShape(value) {
399
+ if (!isObject(value))
400
+ throw problem("flow", `is ${show(value)}, not an object`, "Pass the flow itself: { id, name, steps }.");
401
+ const flowAt = typeof value.id === "string" ? `flow "${value.id}"` : "flow";
402
+ if (!Array.isArray(value.steps)) {
403
+ throw problem(flowAt, "has no steps list", "Write steps as a list, even an empty one.");
404
+ }
405
+ text(value, ["description", "anchor"], flowAt);
406
+ for (const key of ["collect", "clearOnStart", "tools"])
407
+ listOf(value[key], key, flowAt, "string");
408
+ oneOf(value.onEnd, "onEnd", ON_END, flowAt);
409
+ predShape(value.while, "while", flowAt);
410
+ instructionsShape(value.instructions, flowAt);
411
+ listOf(value.on, "on", flowAt, "object").forEach((trigger, i) => {
412
+ const at = `${flowAt}, trigger #${i + 1}`;
413
+ if (!isObject(trigger))
414
+ return;
415
+ listOf(trigger.message, "message", at, "string");
416
+ listOf(trigger.mention, "mention", at, "string");
417
+ predShape(trigger.if, "if", at);
418
+ const { repeat } = trigger;
419
+ if (repeat !== undefined && repeat !== "once" && repeat !== "always" && !(isObject(repeat) && typeof repeat.cooldown === "string")) {
420
+ throw problem(at, `repeat is ${show(repeat)}`, 'Use "once", "always" or { cooldown: "24h" }.');
421
+ }
422
+ });
423
+ listOf(value.steps, "steps", flowAt, "object").forEach((step, i) => {
424
+ if (!isObject(step))
425
+ return;
426
+ const at = typeof step.id === "string" ? `${flowAt}, step "${step.id}"` : `${flowAt}, step #${i + 1}`;
427
+ stepShape(step, at);
428
+ });
429
+ }
430
+ /** One step: what it does, and every value the right kind of thing. */
431
+ function stepShape(step, at) {
432
+ // A step that does none of the five things is one the run walks straight
433
+ // past; one that does two runs only the first, and the other never happens.
434
+ const kinds = bodyKinds(step);
435
+ if (kinds.length === 0) {
436
+ throw problem(at, "does nothing", "A step talks (`prompt` / `collect`), says (`say`), acts (`do`), waits (`wait`) or forks (`if`).");
437
+ }
438
+ if (kinds.length > 1) {
439
+ throw problem(at, `mixes ${and(kinds.map((k) => `"${k}"`))}`, "A step does one thing. Split it into one step per kind.");
440
+ }
441
+ // The spec's `kind` must say what the body does; the Runner reads the body.
442
+ if (step.kind !== undefined && step.kind !== kinds[0]) {
443
+ throw problem(at, `has kind ${show(step.kind)}, but its body is a "${kinds[0]}" step`, `Set kind to "${kinds[0]}", or change the body to match.`);
444
+ }
445
+ text(step, ["say", "prompt", "question"], at);
446
+ listOf(step.collect, "collect", at, "string");
447
+ listOf(step.tools, "tools", at, "string");
448
+ if (step.ask !== undefined && !isObject(step.ask)) {
449
+ throw problem(at, `ask is ${show(step.ask)}, not an object`, 'Write ask as { field: "how to ask" }.');
450
+ }
451
+ if (step.with !== undefined && !isObject(step.with)) {
452
+ throw problem(at, `with is ${show(step.with)}, not an object`, "Write with as { parameter: value }.");
453
+ }
454
+ const { maxAsks } = step;
455
+ if (maxAsks !== undefined && !(typeof maxAsks === "number" && Number.isInteger(maxAsks) && maxAsks >= 1)) {
456
+ throw problem(at, `maxAsks is ${show(maxAsks)}, not a whole number of 1 or more`, "Write a number like 3.");
457
+ }
458
+ if (isObject(step.wait) && typeof step.wait.event !== "string") {
459
+ throw problem(at, "wait has no event", 'Write wait: { event: "name" } to wait for an event, or a duration like "1h".');
460
+ }
461
+ predShape(step.if, "if", at);
462
+ for (const key of ["then", "else", "onFail"])
463
+ nextShape(step[key], key, at);
464
+ instructionsShape(step.instructions, at);
465
+ listOf(step.branches, "branches", at, "object").forEach((branch, j) => {
466
+ if (!isObject(branch))
467
+ return;
468
+ const where = `branches[${j}]`;
469
+ if (branch.when !== undefined && typeof branch.when !== "string") {
470
+ throw problem(at, `${where}.when is ${show(branch.when)}, not text`, "Write the condition as one sentence.");
471
+ }
472
+ predShape(branch.if, `${where}.if`, at);
473
+ nextShape(branch.then, `${where}.then`, at);
474
+ });
475
+ }
476
+ /** The kinds a step's body carries, by its keys. A talk step is `collect` with a list, `prompt` with a guideline alone. */
477
+ function bodyKinds(step) {
478
+ const kinds = [];
479
+ if (step.collect !== undefined)
480
+ kinds.push("collect");
481
+ else if (step.prompt !== undefined)
482
+ kinds.push("prompt");
483
+ if (step.say !== undefined)
484
+ kinds.push("say");
485
+ if (step.do !== undefined)
486
+ kinds.push("do");
487
+ if (step.wait !== undefined)
488
+ kinds.push(typeof step.wait === "string" ? "wait" : "waitEvent");
489
+ if (step.if !== undefined)
490
+ kinds.push("if");
491
+ return kinds;
492
+ }
493
+ function instructionsShape(value, at) {
494
+ listOf(value, "instructions", at, "object").forEach((ins, i) => {
495
+ if (!isObject(ins))
496
+ return;
497
+ const where = `instructions[${i}]`;
498
+ oneOf(ins.kind, `${where}.kind`, INSTRUCTION_KINDS, at);
499
+ if (typeof ins.prompt !== "string") {
500
+ throw problem(at, `${where}.prompt is ${show(ins.prompt)}, not text`, "Write the rule as a sentence.");
501
+ }
502
+ if (ins.when !== undefined && typeof ins.when !== "string")
503
+ listOf(ins.when, `${where}.when`, at, "string");
504
+ predShape(ins.if, `${where}.if`, at);
505
+ });
506
+ }
507
+ /** A step id, `"end"`, `{ step, clear? }` or `{ flow, input? }`. */
508
+ function nextShape(value, where, at) {
509
+ if (value === undefined || typeof value === "string")
510
+ return;
511
+ if (isObject(value) && (typeof value.step === "string" || typeof value.flow === "string")) {
512
+ listOf(value.clear, `${where}.clear`, at, "string");
513
+ return;
514
+ }
515
+ throw problem(at, `${where} is ${show(value)}, not a step id or a target`, 'Write a step id, "end", { step: "id" } or { flow: "id" }.');
516
+ }
517
+ /** A condition object, or code on a typed flow. */
518
+ function predShape(value, where, at) {
519
+ if (value === undefined || typeof value === "function" || isObject(value))
520
+ return;
521
+ throw problem(at, `${where} is ${show(value)}, not a condition`, 'Write it as an object, e.g. { known: ["nome"] }.');
522
+ }
523
+ /** Each named key, when set, must be text. */
524
+ function text(owner, keys, at) {
525
+ for (const key of keys) {
526
+ const value = owner[key];
527
+ if (value !== undefined && typeof value !== "string") {
528
+ throw problem(at, `${key} is ${show(value)}, not text`, `Write ${key} as a string.`);
529
+ }
530
+ }
531
+ }
532
+ function oneOf(value, where, allowed, at) {
533
+ if (value === undefined || (typeof value === "string" && allowed.includes(value)))
534
+ return;
535
+ throw problem(at, `${where} is ${show(value)}, which is not one of ${allowed.map((v) => `"${v}"`).join(", ")}`, "Use one of them.");
536
+ }
537
+ /** A list whose items are all strings or all objects; absent reads as empty. */
538
+ function listOf(value, where, at, item) {
539
+ if (value === undefined)
540
+ return [];
541
+ if (!Array.isArray(value)) {
542
+ const example = item === "string" && typeof value === "string" ? `${where}: ${JSON.stringify([value])}` : `${where} as a list`;
543
+ throw problem(at, `${where} is ${show(value)}, not a list`, `Write ${example}.`);
544
+ }
545
+ value.forEach((entry, i) => {
546
+ if (item === "string" ? typeof entry !== "string" : !isObject(entry)) {
547
+ throw problem(at, `${where}[${i}] is ${show(entry)}, not ${item === "string" ? "text" : "an object"}`, `Write each entry of ${where} as ${item === "string" ? "a string" : "an object"}.`);
548
+ }
549
+ });
550
+ return value;
551
+ }
552
+ /** A plain object: not null, not a list, not a function. */
553
+ function isObject(value) {
554
+ return typeof value === "object" && value !== null && !Array.isArray(value);
555
+ }
556
+ /** A wrong value as an error names it: short scalars verbatim, anything else by kind. */
557
+ function show(value) {
558
+ if (typeof value === "string")
559
+ return JSON.stringify(value.length > 40 ? `${value.slice(0, 37)}...` : value);
560
+ if (typeof value === "number" || typeof value === "boolean")
561
+ return String(value);
562
+ if (value === undefined)
563
+ return "missing";
564
+ if (value === null)
565
+ return "null";
566
+ return Array.isArray(value) ? "a list" : typeof value === "function" ? "a function" : "an object";
567
+ }
568
+ /** `"a"`, `"a" and "b"`, `"a", "b" and "c"`. */
569
+ function and(items) {
570
+ return items.length < 2 ? items.join("") : `${items.slice(0, -1).join(", ")} and ${items.at(-1)}`;
571
+ }
375
572
  function matchesParam(def, value) {
376
573
  if (def.type === "array")
377
574
  return Array.isArray(value) && value.every((item) => matches(def.items, item));
@@ -402,10 +599,10 @@ function mismatch(def, value) {
402
599
  const items = def.type === "array" && Array.isArray(value) ? value : [value];
403
600
  const off = allowed ? items.findIndex((item) => matches(typeOnly, item) && !matches(scalar, item)) : -1;
404
601
  if (!allowed || off === -1) {
405
- return { expected: describeDef(def), got: describe(value), fix: "Values are not coerced; write the right type." };
602
+ return { listed: false, expected: describeDef(def), got: describe(value), fix: "Values are not coerced; write the right type." };
406
603
  }
407
604
  const list = (v) => JSON.stringify(v);
408
- return { expected: `one of ${allowed.map(list).join(", ")}`, got: list(items[off]), fix: "Use one of the listed values." };
605
+ return { listed: true, expected: `one of ${allowed.map(list).join(", ")}`, got: list(items[off]), fix: "Use one of the listed values." };
409
606
  }
410
607
  function describe(value) {
411
608
  return Array.isArray(value) ? "list" : value === null ? "null" : typeof value;
@@ -473,6 +670,8 @@ function flowSpecSchema(registries) {
473
670
  : undefined,
474
671
  ]);
475
672
  const branches = orNull(list(union([closed({ when: STRING, then: next }), closed({ if: condition, then: next })]), "Exits judged while the step asks"));
673
+ // No understand call judges a wait, so its branches are code only.
674
+ const waitBranches = orNull(list(closed({ if: condition, then: next }), "Exits checked by code when the lead replies before the wait ends"));
476
675
  const stepBase = { id: STRING, label: orNull(STRING), then: nextOrNull };
477
676
  const step = union([
478
677
  closed({ ...stepBase, kind: enumOf(["prompt"]), prompt: { type: "string", description: "Guideline for the AI's next message" }, branches }),
@@ -500,7 +699,7 @@ function flowSpecSchema(registries) {
500
699
  wait: { ...duration, description: "Park this long; then = time passed, else = the lead replied" },
501
700
  businessHours: orNull(BOOLEAN),
502
701
  else: nextOrNull,
503
- branches,
702
+ branches: waitBranches,
504
703
  }),
505
704
  eventNames.length
506
705
  ? closed({