agentfootprint 3.0.0 → 3.1.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.
Files changed (180) hide show
  1. package/README.md +1 -1
  2. package/dist/cache/CacheDecisionSubflow.js +13 -18
  3. package/dist/cache/CacheDecisionSubflow.js.map +1 -1
  4. package/dist/cache/CacheGateDecider.js +18 -3
  5. package/dist/cache/CacheGateDecider.js.map +1 -1
  6. package/dist/cache/cacheRecorder.js +12 -3
  7. package/dist/cache/cacheRecorder.js.map +1 -1
  8. package/dist/conventions.js +152 -2
  9. package/dist/conventions.js.map +1 -1
  10. package/dist/core/Agent.js +46 -9
  11. package/dist/core/Agent.js.map +1 -1
  12. package/dist/core/LLMCall.js +177 -44
  13. package/dist/core/LLMCall.js.map +1 -1
  14. package/dist/core/RunnerBase.js +14 -0
  15. package/dist/core/RunnerBase.js.map +1 -1
  16. package/dist/core/agent/buildAgentChart.js +117 -48
  17. package/dist/core/agent/buildAgentChart.js.map +1 -1
  18. package/dist/core/agent/buildAgentMessageApiChart.js +201 -0
  19. package/dist/core/agent/buildAgentMessageApiChart.js.map +1 -0
  20. package/dist/core/agent/buildCacheSubflow.js +62 -0
  21. package/dist/core/agent/buildCacheSubflow.js.map +1 -0
  22. package/dist/core/agent/buildDynamicAgentChart.js +364 -0
  23. package/dist/core/agent/buildDynamicAgentChart.js.map +1 -0
  24. package/dist/core/agent/buildMessageApiChart.js +154 -0
  25. package/dist/core/agent/buildMessageApiChart.js.map +1 -0
  26. package/dist/core/agent/stages/callLLM.js +11 -0
  27. package/dist/core/agent/stages/callLLM.js.map +1 -1
  28. package/dist/core/agent/stages/reliabilityExecution.js +64 -9
  29. package/dist/core/agent/stages/reliabilityExecution.js.map +1 -1
  30. package/dist/core/humanizeLLMError.js +66 -0
  31. package/dist/core/humanizeLLMError.js.map +1 -0
  32. package/dist/core/slots/buildMessagesSlot.js +1 -1
  33. package/dist/core/slots/buildMessagesSlot.js.map +1 -1
  34. package/dist/core/slots/buildToolsSlot.js.map +1 -1
  35. package/dist/core-flow/Conditional.js +1 -1
  36. package/dist/core-flow/Conditional.js.map +1 -1
  37. package/dist/core-flow/Loop.js +1 -1
  38. package/dist/core-flow/Loop.js.map +1 -1
  39. package/dist/core-flow/Parallel.js +1 -1
  40. package/dist/core-flow/Parallel.js.map +1 -1
  41. package/dist/esm/cache/CacheDecisionSubflow.js +11 -17
  42. package/dist/esm/cache/CacheDecisionSubflow.js.map +1 -1
  43. package/dist/esm/cache/CacheGateDecider.js +18 -3
  44. package/dist/esm/cache/CacheGateDecider.js.map +1 -1
  45. package/dist/esm/cache/cacheRecorder.js +12 -3
  46. package/dist/esm/cache/cacheRecorder.js.map +1 -1
  47. package/dist/esm/conventions.js +148 -1
  48. package/dist/esm/conventions.js.map +1 -1
  49. package/dist/esm/core/Agent.js +47 -10
  50. package/dist/esm/core/Agent.js.map +1 -1
  51. package/dist/esm/core/LLMCall.js +177 -44
  52. package/dist/esm/core/LLMCall.js.map +1 -1
  53. package/dist/esm/core/RunnerBase.js +14 -0
  54. package/dist/esm/core/RunnerBase.js.map +1 -1
  55. package/dist/esm/core/agent/buildAgentChart.js +118 -49
  56. package/dist/esm/core/agent/buildAgentChart.js.map +1 -1
  57. package/dist/esm/core/agent/buildAgentMessageApiChart.js +197 -0
  58. package/dist/esm/core/agent/buildAgentMessageApiChart.js.map +1 -0
  59. package/dist/esm/core/agent/buildCacheSubflow.js +58 -0
  60. package/dist/esm/core/agent/buildCacheSubflow.js.map +1 -0
  61. package/dist/esm/core/agent/buildDynamicAgentChart.js +360 -0
  62. package/dist/esm/core/agent/buildDynamicAgentChart.js.map +1 -0
  63. package/dist/esm/core/agent/buildMessageApiChart.js +150 -0
  64. package/dist/esm/core/agent/buildMessageApiChart.js.map +1 -0
  65. package/dist/esm/core/agent/stages/callLLM.js +11 -0
  66. package/dist/esm/core/agent/stages/callLLM.js.map +1 -1
  67. package/dist/esm/core/agent/stages/reliabilityExecution.js +64 -9
  68. package/dist/esm/core/agent/stages/reliabilityExecution.js.map +1 -1
  69. package/dist/esm/core/humanizeLLMError.js +61 -0
  70. package/dist/esm/core/humanizeLLMError.js.map +1 -0
  71. package/dist/esm/core/slots/buildMessagesSlot.js +1 -1
  72. package/dist/esm/core/slots/buildMessagesSlot.js.map +1 -1
  73. package/dist/esm/core/slots/buildToolsSlot.js.map +1 -1
  74. package/dist/esm/core-flow/Conditional.js +1 -1
  75. package/dist/esm/core-flow/Conditional.js.map +1 -1
  76. package/dist/esm/core-flow/Loop.js +1 -1
  77. package/dist/esm/core-flow/Loop.js.map +1 -1
  78. package/dist/esm/core-flow/Parallel.js +1 -1
  79. package/dist/esm/core-flow/Parallel.js.map +1 -1
  80. package/dist/esm/events/registry.js +10 -0
  81. package/dist/esm/events/registry.js.map +1 -1
  82. package/dist/esm/index.js +21 -1
  83. package/dist/esm/index.js.map +1 -1
  84. package/dist/esm/lib/injection-engine/buildInjectionEngineSubflow.js +15 -8
  85. package/dist/esm/lib/injection-engine/buildInjectionEngineSubflow.js.map +1 -1
  86. package/dist/esm/recorders/core/ContextEvaluatedRecorder.js +31 -0
  87. package/dist/esm/recorders/core/ContextEvaluatedRecorder.js.map +1 -0
  88. package/dist/esm/recorders/core/ContextRecorder.js +12 -14
  89. package/dist/esm/recorders/core/ContextRecorder.js.map +1 -1
  90. package/dist/esm/recorders/core/ErrorBridge.js +59 -0
  91. package/dist/esm/recorders/core/ErrorBridge.js.map +1 -0
  92. package/dist/esm/recorders/core/ReliabilityRecorder.js +29 -0
  93. package/dist/esm/recorders/core/ReliabilityRecorder.js.map +1 -0
  94. package/dist/esm/recorders/observability/BoundaryRecorder.js +23 -0
  95. package/dist/esm/recorders/observability/BoundaryRecorder.js.map +1 -1
  96. package/dist/esm/recorders/observability/LiveStateRecorder.js +8 -0
  97. package/dist/esm/recorders/observability/LiveStateRecorder.js.map +1 -1
  98. package/dist/esm/recorders/observability/commentary/commentaryTemplates.js +1 -0
  99. package/dist/esm/recorders/observability/commentary/commentaryTemplates.js.map +1 -1
  100. package/dist/esm/reliability/buildReliabilityGateChart.js +10 -4
  101. package/dist/esm/reliability/buildReliabilityGateChart.js.map +1 -1
  102. package/dist/events/registry.js +10 -0
  103. package/dist/events/registry.js.map +1 -1
  104. package/dist/index.js +26 -3
  105. package/dist/index.js.map +1 -1
  106. package/dist/lib/injection-engine/buildInjectionEngineSubflow.js +15 -8
  107. package/dist/lib/injection-engine/buildInjectionEngineSubflow.js.map +1 -1
  108. package/dist/recorders/core/ContextEvaluatedRecorder.js +35 -0
  109. package/dist/recorders/core/ContextEvaluatedRecorder.js.map +1 -0
  110. package/dist/recorders/core/ContextRecorder.js +11 -13
  111. package/dist/recorders/core/ContextRecorder.js.map +1 -1
  112. package/dist/recorders/core/ErrorBridge.js +64 -0
  113. package/dist/recorders/core/ErrorBridge.js.map +1 -0
  114. package/dist/recorders/core/ReliabilityRecorder.js +33 -0
  115. package/dist/recorders/core/ReliabilityRecorder.js.map +1 -0
  116. package/dist/recorders/observability/BoundaryRecorder.js +23 -0
  117. package/dist/recorders/observability/BoundaryRecorder.js.map +1 -1
  118. package/dist/recorders/observability/LiveStateRecorder.js +8 -0
  119. package/dist/recorders/observability/LiveStateRecorder.js.map +1 -1
  120. package/dist/recorders/observability/commentary/commentaryTemplates.js +1 -0
  121. package/dist/recorders/observability/commentary/commentaryTemplates.js.map +1 -1
  122. package/dist/reliability/buildReliabilityGateChart.js +10 -4
  123. package/dist/reliability/buildReliabilityGateChart.js.map +1 -1
  124. package/dist/types/cache/CacheDecisionSubflow.d.ts +7 -10
  125. package/dist/types/cache/CacheDecisionSubflow.d.ts.map +1 -1
  126. package/dist/types/cache/CacheGateDecider.d.ts +16 -2
  127. package/dist/types/cache/CacheGateDecider.d.ts.map +1 -1
  128. package/dist/types/cache/cacheRecorder.d.ts.map +1 -1
  129. package/dist/types/conventions.d.ts +101 -1
  130. package/dist/types/conventions.d.ts.map +1 -1
  131. package/dist/types/core/Agent.d.ts +8 -0
  132. package/dist/types/core/Agent.d.ts.map +1 -1
  133. package/dist/types/core/LLMCall.d.ts +48 -12
  134. package/dist/types/core/LLMCall.d.ts.map +1 -1
  135. package/dist/types/core/RunnerBase.d.ts +12 -0
  136. package/dist/types/core/RunnerBase.d.ts.map +1 -1
  137. package/dist/types/core/agent/buildAgentChart.d.ts +31 -18
  138. package/dist/types/core/agent/buildAgentChart.d.ts.map +1 -1
  139. package/dist/types/core/agent/buildAgentMessageApiChart.d.ts +41 -0
  140. package/dist/types/core/agent/buildAgentMessageApiChart.d.ts.map +1 -0
  141. package/dist/types/core/agent/buildCacheSubflow.d.ts +36 -0
  142. package/dist/types/core/agent/buildCacheSubflow.d.ts.map +1 -0
  143. package/dist/types/core/agent/buildDynamicAgentChart.d.ts +57 -0
  144. package/dist/types/core/agent/buildDynamicAgentChart.d.ts.map +1 -0
  145. package/dist/types/core/agent/buildMessageApiChart.d.ts +48 -0
  146. package/dist/types/core/agent/buildMessageApiChart.d.ts.map +1 -0
  147. package/dist/types/core/agent/stages/callLLM.d.ts.map +1 -1
  148. package/dist/types/core/agent/stages/reliabilityExecution.d.ts.map +1 -1
  149. package/dist/types/core/agent/types.d.ts +69 -2
  150. package/dist/types/core/agent/types.d.ts.map +1 -1
  151. package/dist/types/core/humanizeLLMError.d.ts +24 -0
  152. package/dist/types/core/humanizeLLMError.d.ts.map +1 -0
  153. package/dist/types/core/slots/buildMessagesSlot.d.ts.map +1 -1
  154. package/dist/types/events/payloads.d.ts +84 -0
  155. package/dist/types/events/payloads.d.ts.map +1 -1
  156. package/dist/types/events/registry.d.ts +11 -1
  157. package/dist/types/events/registry.d.ts.map +1 -1
  158. package/dist/types/index.d.ts +4 -1
  159. package/dist/types/index.d.ts.map +1 -1
  160. package/dist/types/lib/injection-engine/buildInjectionEngineSubflow.d.ts.map +1 -1
  161. package/dist/types/recorders/core/ContextEvaluatedRecorder.d.ts +24 -0
  162. package/dist/types/recorders/core/ContextEvaluatedRecorder.d.ts.map +1 -0
  163. package/dist/types/recorders/core/ContextRecorder.d.ts +0 -2
  164. package/dist/types/recorders/core/ContextRecorder.d.ts.map +1 -1
  165. package/dist/types/recorders/core/ErrorBridge.d.ts +39 -0
  166. package/dist/types/recorders/core/ErrorBridge.d.ts.map +1 -0
  167. package/dist/types/recorders/core/ReliabilityRecorder.d.ts +25 -0
  168. package/dist/types/recorders/core/ReliabilityRecorder.d.ts.map +1 -0
  169. package/dist/types/recorders/observability/BoundaryRecorder.d.ts +7 -0
  170. package/dist/types/recorders/observability/BoundaryRecorder.d.ts.map +1 -1
  171. package/dist/types/recorders/observability/LiveStateRecorder.d.ts.map +1 -1
  172. package/dist/types/recorders/observability/commentary/commentaryTemplates.d.ts.map +1 -1
  173. package/dist/types/reliability/buildReliabilityGateChart.d.ts.map +1 -1
  174. package/package.json +4 -3
  175. package/dist/core/agent/stages/iterationStart.js +0 -24
  176. package/dist/core/agent/stages/iterationStart.js.map +0 -1
  177. package/dist/esm/core/agent/stages/iterationStart.js +0 -20
  178. package/dist/esm/core/agent/stages/iterationStart.js.map +0 -1
  179. package/dist/types/core/agent/stages/iterationStart.d.ts +0 -16
  180. package/dist/types/core/agent/stages/iterationStart.d.ts.map +0 -1
@@ -16,27 +16,27 @@
16
16
  *
17
17
  * Chart shape:
18
18
  *
19
- * Seed
19
+ * Initialize
20
20
  * → [memory READ subflows for each .memory()]
21
- * → InjectionEngine (subflow)
22
- * → SystemPrompt (slot subflow)
23
- * Messages (slot subflow)
24
- * Tools (slot subflow)
25
- * → CacheDecision (subflow)
21
+ * → InjectionEngine (subflow) ← loop target (tool-calls loops here)
22
+ * → Context (selector, PARALLEL fan-out, failFast)
23
+ * {System Prompt ‖ Messages ‖ Tools} (slot subflows)
24
+ * converge
26
25
  * → UpdateSkillHistory
27
- * → CacheGate (decider) ApplyMarkers / SkipCaching
28
- * IterationStart
29
- * → CallLLM
30
- * → Route (decider) tool-calls (pausable) / final (subflow)
31
- * |
32
- * ┌────── PrepareFinal ▼
26
+ * → Cache (sf-cache subflow: decideCacheMarkers CacheGate
27
+ * ApplyMarkers / SkipCaching)
28
+ * → CallLLM (also emits the per-iteration iteration_start marker)
29
+ * → [NormalizeThinking] (subflow, only when a ThinkingHandler resolved)
30
+ * → Route (decider)
31
+ * ├─ tool-calls (pausable) → loopTo(InjectionEngine) ← branch-sourced loop
32
+ * └─ final (subflow) → terminal leaf
33
+ * ┌────── PrepareFinal
33
34
  * ├──── [memory WRITE subflows]
34
35
  * └──── BreakFinal ($break)
35
- * loopTo(InjectionEngine)
36
36
  *
37
37
  * (When v2.11.x reliability is configured, the reliability gate chart
38
- * mounts as a subflow between IterationStart and CallLLM with a
39
- * TranslateFailFast stage after it. Lands in the next commit.)
38
+ * mounts as a subflow before CallLLM with a TranslateFailFast stage
39
+ * after it. Lands in the next commit.)
40
40
  */
41
41
  Object.defineProperty(exports, "__esModule", { value: true });
42
42
  exports.buildAgentChart = void 0;
@@ -48,10 +48,15 @@ const define_js_1 = require("../../memory/define.js");
48
48
  const mountMemoryPipeline_js_1 = require("../../memory/wire/mountMemoryPipeline.js");
49
49
  const breakFinal_js_1 = require("./stages/breakFinal.js");
50
50
  const prepareFinal_js_1 = require("./stages/prepareFinal.js");
51
+ const buildCacheSubflow_js_1 = require("./buildCacheSubflow.js");
51
52
  /**
52
53
  * Build the agent's complete FlowChart from the supplied deps.
53
54
  */
54
55
  function buildAgentChart(deps) {
56
+ // ReAct loop semantics. 'classic' caches the static slots (engineer
57
+ // system-prompt + tools only on the first turn); 'dynamic' (default)
58
+ // re-engineers all 3 slots every turn. Drives the Context selector below.
59
+ const reactMode = deps.reactMode ?? 'dynamic';
55
60
  // ── Final-branch subflow ─────────────────────────────────────
56
61
  // Split so memory-write subflows can mount BETWEEN setting
57
62
  // finalContent and breaking the ReAct loop. PrepareFinal captures
@@ -85,13 +90,16 @@ function buildAgentChart(deps) {
85
90
  // (Lens + FlowchartRecorder) detect Agent-primitive subflows via
86
91
  // this prefix and flag them as true agent boundaries (separate
87
92
  // from LLMCall subflows which use `LLMCall:` prefix).
88
- let builder = (0, footprintjs_1.flowChart)('Seed', deps.seed, conventions_js_1.STAGE_IDS.SEED, {
93
+ let builder = (0, footprintjs_1.flowChart)('Initialize', deps.seed, conventions_js_1.STAGE_IDS.SEED, {
89
94
  ...(deps.structureRecorders !== undefined && {
90
95
  structureRecorders: [...deps.structureRecorders],
91
96
  }),
92
- description: 'Agent: ReAct loop',
97
+ // Tag the mode so the Lens can label the run. Keep the `Agent:` taxonomy
98
+ // prefix (consumers detect Agent boundaries by it). Dynamic keeps the
99
+ // historical 'Agent: ReAct loop' string for byte-stability.
100
+ description: reactMode === 'classic' ? 'Agent: Classic ReAct loop' : 'Agent: ReAct loop',
93
101
  });
94
- // Memory READ subflows — mounted between Seed and InjectionEngine
102
+ // Memory READ subflows — mounted between Initialize and InjectionEngine
95
103
  // for TURN_START timing (default). Each memory writes to its own
96
104
  // scope key (`memoryInjection_${id}`) so multiple `.memory()`
97
105
  // registrations layer without colliding.
@@ -131,7 +139,48 @@ function buildAgentChart(deps) {
131
139
  // 8 → 16 → 24 → 32 cumulative injections per turn.
132
140
  arrayMerge: advanced_1.ArrayMergeMode.Replace,
133
141
  })
134
- .addSubFlowChartNext(conventions_js_1.SUBFLOW_IDS.SYSTEM_PROMPT, deps.systemPromptSubflow, 'System Prompt', {
142
+ // ── Context assembly: the 3 slots run in PARALLEL (selector fan-out) ──
143
+ // The slots are genuinely INDEPENDENT — each reads ONLY InjectionEngine's
144
+ // activeInjections + seed state, and each writes a DISJOINT output key
145
+ // (systemPromptInjections / messagesInjections / toolsInjections +
146
+ // dynamicToolSchemas). None reads another slot's output. Running them
147
+ // sequentially was an accident of chaining; the fork makes the execution
148
+ // tree tell the truth (and the Lens merge-tree renders the real shape).
149
+ // The selector picks ALL 3 every iteration (unconditional fan-out).
150
+ // failFast: true — a REQUIRED slot that throws aborts the whole turn,
151
+ // matching the old sequential-throw behavior. WITHOUT it the default
152
+ // Promise.allSettled would SWALLOW a failing slot and call the LLM with a
153
+ // half-built request (the documented request-assembly footgun).
154
+ // ── Context selector — THE one place Classic and Dynamic differ ──────
155
+ // The 3 slots are always selector BRANCHES (so they stay drawn in the
156
+ // chart in both modes); WHICH ones get selected per turn is the whole
157
+ // Classic-vs-Dynamic difference:
158
+ // • dynamic — pick all 3 EVERY turn (activations can change per turn:
159
+ // a skill fires, a rule matches, a tool-return steers the next turn).
160
+ // • classic — pick all 3 on the FIRST turn, then ONLY messages. The
161
+ // static slots aren't re-selected, so their turn-1 outputs persist in
162
+ // scope (that IS the cache — the flat builder has no per-turn reset),
163
+ // and only the message list rebuilds each iteration. The Lens shows
164
+ // this directly: after turn 1 only the Messages branch lights up.
165
+ .addSelectorFunction('Context', ((scope) => {
166
+ const firstTurn = (scope.iteration ?? 1) <= 1;
167
+ const includeStatic = reactMode === 'dynamic' || firstTurn;
168
+ return (0, footprintjs_1.select)(scope, [
169
+ {
170
+ when: () => includeStatic,
171
+ then: conventions_js_1.SUBFLOW_IDS.SYSTEM_PROMPT,
172
+ label: 'engineer system-prompt',
173
+ },
174
+ { when: () => true, then: conventions_js_1.SUBFLOW_IDS.MESSAGES, label: 'engineer messages' },
175
+ { when: () => includeStatic, then: conventions_js_1.SUBFLOW_IDS.TOOLS, label: 'engineer tools' },
176
+ ]);
177
+ }), conventions_js_1.STAGE_IDS.CONTEXT, reactMode === 'classic'
178
+ ? 'Assemble request context: messages every turn; system-prompt + tools cached after turn 1'
179
+ : 'Assemble request context: system-prompt + messages + tools (parallel)', { failFast: true })
180
+ // Each branch keeps its inputMapper + outputMapper + arrayMerge:Replace
181
+ // VERBATIM from the former sequential mounts. Replace (not concat) is
182
+ // load-bearing: the loopTo would otherwise accumulate injections/tools.
183
+ .addSubFlowChartBranch(conventions_js_1.SUBFLOW_IDS.SYSTEM_PROMPT, deps.systemPromptSubflow, 'System Prompt', {
135
184
  inputMapper: (parent) => ({
136
185
  userMessage: parent.userMessage,
137
186
  iteration: parent.iteration,
@@ -140,7 +189,7 @@ function buildAgentChart(deps) {
140
189
  outputMapper: (sf) => ({ systemPromptInjections: sf.systemPromptInjections }),
141
190
  arrayMerge: advanced_1.ArrayMergeMode.Replace,
142
191
  })
143
- .addSubFlowChartNext(conventions_js_1.SUBFLOW_IDS.MESSAGES, deps.messagesSubflow, 'Messages', {
192
+ .addSubFlowChartBranch(conventions_js_1.SUBFLOW_IDS.MESSAGES, deps.messagesSubflow, 'Messages', {
144
193
  inputMapper: (parent) => ({
145
194
  messages: parent.history,
146
195
  iteration: parent.iteration,
@@ -149,7 +198,7 @@ function buildAgentChart(deps) {
149
198
  outputMapper: (sf) => ({ messagesInjections: sf.messagesInjections }),
150
199
  arrayMerge: advanced_1.ArrayMergeMode.Replace,
151
200
  })
152
- .addSubFlowChartNext(conventions_js_1.SUBFLOW_IDS.TOOLS, deps.toolsSubflow, 'Tools', {
201
+ .addSubFlowChartBranch(conventions_js_1.SUBFLOW_IDS.TOOLS, deps.toolsSubflow, 'Tools', {
153
202
  inputMapper: (parent) => ({
154
203
  iteration: parent.iteration,
155
204
  activeInjections: parent.activeInjections,
@@ -171,9 +220,30 @@ function buildAgentChart(deps) {
171
220
  // duplicates that providers reject.
172
221
  arrayMerge: advanced_1.ArrayMergeMode.Replace,
173
222
  })
174
- // ── Cache layer (v2.6) ─────────────────────────────────────
175
- .addSubFlowChartNext(conventions_js_1.SUBFLOW_IDS.CACHE_DECISION, deps.cacheDecisionSubflow, 'CacheDecision', {
223
+ .end();
224
+ // ── Skill-churn window (cache concern) ──────────────────────────
225
+ // UpdateSkillHistory stays in the MAIN loop (NOT inside sf-cache): the
226
+ // skillHistory rolling window must persist across iterations, so keeping
227
+ // it here lets it live in parent scope without round-tripping through the
228
+ // subflow. It feeds sf-cache's CacheGate churn check, and sits right where
229
+ // the tool-driven skill activation flows into it.
230
+ //
231
+ // CONDITIONAL MOUNT: only when skills are registered. With no skills the
232
+ // window records "no skill" every iteration and CacheGate's churn rule can
233
+ // never fire — so the stage is omitted entirely (no dead weight, no
234
+ // misleading box). Mirrors the read_skill auto-attach + NormalizeThinking.
235
+ if (deps.hasSkills) {
236
+ builder = builder.addFunction('UpdateSkillHistory', deps.updateSkillHistoryStage, conventions_js_1.STAGE_IDS.UPDATE_SKILL_HISTORY, 'Update skill-history rolling window for CacheGate churn detection');
237
+ }
238
+ builder = builder
239
+ // sf-cache: decideCacheMarkers → CacheGate → apply/skip, collapsed into
240
+ // ONE box. Pure provider-agnostic DECISION layer — reads the turn's state,
241
+ // outputs only the gated cacheMarkers (Replace, not concat, across the
242
+ // loop). The attached provider's CacheStrategy turns markers into wire
243
+ // format later. See buildCacheSubflow.ts.
244
+ .addSubFlowChartNext(conventions_js_1.SUBFLOW_IDS.CACHE, (0, buildCacheSubflow_js_1.buildCacheSubflow)(), 'Cache', {
176
245
  inputMapper: (parent) => ({
246
+ // decideCacheMarkers inputs
177
247
  activeInjections: parent.activeInjections ?? [],
178
248
  iteration: parent.iteration ?? 1,
179
249
  maxIterations: parent.maxIterations ?? deps.maxIterations,
@@ -184,24 +254,16 @@ function buildAgentChart(deps) {
184
254
  cumulativeInputTokens: parent.totalInputTokens ?? 0,
185
255
  systemPromptCachePolicy: deps.systemPromptCachePolicy,
186
256
  cachingDisabled: parent.cachingDisabled ?? false,
257
+ // CacheGate inputs (read-only: skillHistory is updated in the main
258
+ // loop above, so it is NOT mapped back out)
259
+ recentHitRate: parent.recentHitRate,
260
+ skillHistory: parent.skillHistory ?? [],
187
261
  }),
188
262
  outputMapper: (sf) => ({ cacheMarkers: sf.cacheMarkers }),
189
263
  arrayMerge: advanced_1.ArrayMergeMode.Replace,
190
264
  })
191
- .addFunction('UpdateSkillHistory', deps.updateSkillHistoryStage, conventions_js_1.STAGE_IDS.UPDATE_SKILL_HISTORY, 'Update skill-history rolling window for CacheGate churn detection')
192
- .addDeciderFunction('CacheGate', deps.cacheGateDecide, conventions_js_1.STAGE_IDS.CACHE_GATE, 'Gate cache-marker application: kill switch / hit-rate / skill-churn')
193
- .addFunctionBranch(conventions_js_1.STAGE_IDS.APPLY_MARKERS, 'ApplyMarkers',
194
- // Pass-through stage — markers stay in scope as-is.
195
- // BuildLLMRequest (Phase 7+) reads them on the next stage.
196
- () => undefined, 'Proceed with cache markers from CacheDecision')
197
- .addFunctionBranch(conventions_js_1.STAGE_IDS.SKIP_CACHING, 'SkipCaching',
198
- // Clear markers so BuildLLMRequest sees an empty list and
199
- // makes the request unmodified.
200
- (scope) => {
201
- scope.cacheMarkers = [];
202
- }, 'Skip caching this iteration')
203
- .end()
204
- .addFunction('IterationStart', deps.iterationStart, 'iteration-start', 'Iteration begin marker')
265
+ // CallLLM emits the per-iteration `iteration_start` marker itself (no
266
+ // dedicated IterationStart stage emitting is passive observability).
205
267
  .addFunction('CallLLM', deps.callLLM, conventions_js_1.STAGE_IDS.CALL_LLM, 'LLM invocation');
206
268
  // v2.14 — conditional NormalizeThinking sub-subflow. Mounted ONLY
207
269
  // when a ThinkingHandler resolved (auto-wired by provider.name OR
@@ -223,7 +285,15 @@ function buildAgentChart(deps) {
223
285
  }
224
286
  builder = builder
225
287
  .addDeciderFunction('Route', deps.routeDecider, conventions_js_1.SUBFLOW_IDS.ROUTE, 'ReAct routing')
226
- .addPausableFunctionBranch('tool-calls', 'ToolCalls', deps.toolCallsHandler, 'Tool execution (pausable via pauseHere)')
288
+ .addPausableFunctionBranch('tool-calls', 'ToolCalls', deps.toolCallsHandler, 'Tool execution (pausable via pauseHere)',
289
+ // Branch-sourced loop: tool-calls loops back to the InjectionEngine so
290
+ // EVERY iteration re-evaluates triggers against the freshest context (the
291
+ // just-appended tool result). Sourced from the BRANCH (not the decider) so
292
+ // the chart reads honestly — `ToolCalls → InjectionEngine` loops, `Final`
293
+ // terminates. Survives pause/resume (human-in-the-loop tool approval): the
294
+ // engine resolves the subflow loop target on resume — footprintjs
295
+ // FlowChartExecutor.resume + test/lib/pause/resume-branch-loop-subflow.
296
+ { loopTo: conventions_js_1.SUBFLOW_IDS.INJECTION_ENGINE })
227
297
  .addSubFlowChartBranch(conventions_js_1.SUBFLOW_IDS.FINAL, finalBranchChart, 'Final', {
228
298
  // Pass through the read-only state the sub-chart needs;
229
299
  // OMIT keys the sub-chart writes (finalContent, newMessages)
@@ -237,19 +307,18 @@ function buildAgentChart(deps) {
237
307
  outputMapper: (sf) => ({
238
308
  finalContent: sf.finalContent,
239
309
  }),
240
- // BreakFinal's $break() must reach the outer loopTo so the
241
- // ReAct iteration terminates; without this the inner break
242
- // only exits the sub-chart and the outer loop continues.
310
+ // With the branch-sourced loop, `final` is a terminal LEAF — it ends the
311
+ // run on its own (no decider `next` to suppress). propagateBreak is kept
312
+ // so BreakFinal's $break() still surfaces a terminal onBreak signal to the
313
+ // parent (observability) and stays correct if a decider-level `next` is
314
+ // ever reintroduced.
243
315
  propagateBreak: true,
244
316
  })
245
317
  .setDefault(conventions_js_1.SUBFLOW_IDS.FINAL)
246
- .end()
247
- // Dynamic ReAct: loop back to the InjectionEngine so EVERY iteration
248
- // re-evaluates triggers (rule predicates, on-tool-return,
249
- // llm-activated) against the freshest context (the just-appended
250
- // tool result). Without this, the InjectionEngine runs ONCE per
251
- // turn — quietly breaking the framework's "Dynamic ReAct" claim.
252
- .loopTo(conventions_js_1.SUBFLOW_IDS.INJECTION_ENGINE);
318
+ .end();
319
+ // The ReAct loop is now sourced from the `tool-calls` branch (the
320
+ // `{ loopTo }` above), not the decider — so `Final` is a plain terminal leaf
321
+ // and the chart draws `ToolCalls → InjectionEngine` for the loop edge.
253
322
  return builder.build();
254
323
  }
255
324
  exports.buildAgentChart = buildAgentChart;
@@ -1 +1 @@
1
- {"version":3,"file":"buildAgentChart.js","sourceRoot":"","sources":["../../../src/core/agent/buildAgentChart.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"buildAgentChart.js","sourceRoot":"","sources":["../../../src/core/agent/buildAgentChart.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,201 @@
1
+ "use strict";
2
+ /**
3
+ * buildAgentMessageApiChart — the Agent (ReAct) form of the messageAPI
4
+ * merge-tree, as ONE FLAT main chart (no inner LLM-call sub-box).
5
+ *
6
+ * The whole ReAct cycle lives directly in the single Agent chart:
7
+ *
8
+ * Context (ROOT selector — inits + picks which context slots to engineer)
9
+ * ├─ system-prompt ┐
10
+ * ├─ messages ─────┼─→ messageAPI → Call-LLM
11
+ * └─ tools ────────┘
12
+ * → Route (decider) → [ ToolCalls (execute) → loop ] / Final (response)
13
+ * loopTo(Context)
14
+ *
15
+ * WHY flat (the user's call): the entire agent — context engineering, the LLM
16
+ * call, routing, tool execution, the loop, and the final response — is ONE
17
+ * visible flowchart in ONE Agent box. No nested LLM-call box: Lens wraps the
18
+ * whole chart in the Agent main-box and renders the slots as pills. This is
19
+ * simpler than the composed (sf-llm-call subflow) shape and avoids box-in-box
20
+ * nesting entirely.
21
+ *
22
+ * The three context slots are DIRECT children of Context; all converge at
23
+ * messageAPI (which assembles system-prompt + messages); Call-LLM then sends
24
+ * the assembled payload plus the tool schemas. Route decides tool-calls (loop)
25
+ * vs final (terminate). The same chart serves Static and Dynamic agents — only
26
+ * which slots the Context selector lights per iteration differs.
27
+ */
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.buildAgentMessageApiChart = void 0;
30
+ const footprintjs_1 = require("footprintjs");
31
+ const conventions_js_1 = require("../../conventions.js");
32
+ const typedEmit_js_1 = require("../../recorders/core/typedEmit.js");
33
+ const buildSystemPromptSlot_js_1 = require("../slots/buildSystemPromptSlot.js");
34
+ const buildMessagesSlot_js_1 = require("../slots/buildMessagesSlot.js");
35
+ const buildToolsSlot_js_1 = require("../slots/buildToolsSlot.js");
36
+ /** Route branch ids. */
37
+ const ROUTE_TOOL_CALLS = 'tool-calls';
38
+ const ROUTE_FINAL = conventions_js_1.SUBFLOW_IDS.FINAL;
39
+ /**
40
+ * Build the Agent merge-tree chart as one flat ReAct flowchart.
41
+ */
42
+ function buildAgentMessageApiChart(deps) {
43
+ const { provider, model, systemPrompt, tools } = deps;
44
+ const maxIterations = deps.maxIterations ?? 5;
45
+ // ── Context: ROOT selector. Inits per-call state on the first turn (the
46
+ // folded-in seed — Context is the chart's first node); on ReAct loop re-entry
47
+ // it leaves state intact (the iteration was bumped by ToolCalls). Returns the
48
+ // three context slots to engineer. ──
49
+ const contextSelector = (scope) => {
50
+ if (scope.iteration === undefined) {
51
+ const args = scope.$getArgs();
52
+ scope.userMessage = args.message;
53
+ scope.history = [{ role: 'user', content: args.message }];
54
+ scope.iteration = 1;
55
+ scope.systemPromptInjections = [];
56
+ scope.messagesInjections = [];
57
+ scope.toolSchemas = [];
58
+ scope.assembledSystem = '';
59
+ scope.assembledMessages = [];
60
+ scope.answer = '';
61
+ scope.toolCalls = [];
62
+ scope.finalContent = '';
63
+ }
64
+ return (0, footprintjs_1.select)(scope, [
65
+ { when: () => true, then: conventions_js_1.SUBFLOW_IDS.SYSTEM_PROMPT, label: 'engineer system-prompt' },
66
+ { when: () => true, then: conventions_js_1.SUBFLOW_IDS.MESSAGES, label: 'engineer messages' },
67
+ { when: () => true, then: conventions_js_1.SUBFLOW_IDS.TOOLS, label: 'engineer tools' },
68
+ ]);
69
+ };
70
+ // ── messageAPI: assemble system-prompt + messages (the join after the slots
71
+ // converge). tools is a separate field Call-LLM reads directly. ──
72
+ const messageApiStage = (scope) => {
73
+ const sysInjections = (scope.systemPromptInjections ?? []);
74
+ scope.assembledSystem = sysInjections
75
+ .map((r) => r.rawContent ?? '')
76
+ .filter((s) => s.length > 0)
77
+ .join('\n\n');
78
+ scope.assembledMessages = [...(scope.history ?? [])];
79
+ };
80
+ // ── Call-LLM: send the assembled payload + the tool schemas. ──
81
+ const callLLM = async (scope) => {
82
+ const system = scope.assembledSystem;
83
+ const messages = (scope.assembledMessages ?? []);
84
+ const toolSchemas = (scope.toolSchemas ?? []);
85
+ (0, typedEmit_js_1.typedEmit)(scope, 'agentfootprint.stream.llm_start', {
86
+ iteration: scope.iteration,
87
+ provider: provider.name,
88
+ model,
89
+ systemPromptChars: system.length,
90
+ messagesCount: messages.length,
91
+ toolsCount: toolSchemas.length,
92
+ });
93
+ const startMs = Date.now();
94
+ const response = await provider.complete({
95
+ ...(system.length > 0 && { systemPrompt: system }),
96
+ messages,
97
+ ...(toolSchemas.length > 0 && { tools: toolSchemas }),
98
+ model,
99
+ });
100
+ scope.answer = response.content;
101
+ scope.toolCalls = response.toolCalls;
102
+ (0, typedEmit_js_1.typedEmit)(scope, 'agentfootprint.stream.llm_end', {
103
+ iteration: scope.iteration,
104
+ content: response.content,
105
+ toolCallCount: response.toolCalls.length,
106
+ usage: response.usage,
107
+ stopReason: response.stopReason,
108
+ durationMs: Date.now() - startMs,
109
+ });
110
+ };
111
+ // ── Route: ReAct decider — tool-calls (loop) vs final (terminate). ──
112
+ const routeDecider = (scope) => {
113
+ const calls = (scope.toolCalls ?? []);
114
+ if (calls.length > 0 && scope.iteration < maxIterations)
115
+ return ROUTE_TOOL_CALLS;
116
+ return ROUTE_FINAL;
117
+ };
118
+ // ── ToolCalls: execute the LLM's requested tools, append results, bump the
119
+ // iteration, loop. ──
120
+ const toolExec = async (scope) => {
121
+ const calls = (scope.toolCalls ?? []);
122
+ const newHistory = [...(scope.history ?? [])];
123
+ for (const call of calls) {
124
+ (0, typedEmit_js_1.typedEmit)(scope, 'agentfootprint.stream.tool_start', {
125
+ toolCallId: call.id,
126
+ toolName: call.name,
127
+ args: call.args,
128
+ });
129
+ const result = `[${call.name} result]`; // demo executor — real agents wire a registry
130
+ newHistory.push({ role: 'tool', content: result, toolCallId: call.id });
131
+ (0, typedEmit_js_1.typedEmit)(scope, 'agentfootprint.stream.tool_end', {
132
+ toolCallId: call.id,
133
+ result,
134
+ durationMs: 0,
135
+ });
136
+ }
137
+ scope.history = newHistory;
138
+ scope.toolCalls = [];
139
+ scope.iteration = scope.iteration + 1;
140
+ };
141
+ // ── Final: the agent's response — terminate the loop, capture the answer. ──
142
+ const finalStage = (scope) => {
143
+ scope.finalContent = scope.answer;
144
+ scope.$break('agent reached final answer');
145
+ };
146
+ // ── Build ONE flat chart: Context(root) → 3 slots → messageAPI → Call-LLM
147
+ // → Route → [ToolCalls → loop] / Final. ──
148
+ return ((0, footprintjs_1.flowChartSelector)('Context', contextSelector, 'context', {
149
+ ...(deps.structureRecorders !== undefined && {
150
+ structureRecorders: [...deps.structureRecorders],
151
+ }),
152
+ // 'Agent:' taxonomy marker → Lens renders this as an Agent group.
153
+ description: 'Agent: ReAct loop',
154
+ })
155
+ // Three DIRECT context slots — all converge at messageAPI.
156
+ .addSubFlowChartBranch(conventions_js_1.SUBFLOW_IDS.SYSTEM_PROMPT, (0, buildSystemPromptSlot_js_1.buildSystemPromptSlot)({ prompt: systemPrompt, reason: 'agent messageAPI' }), 'System Prompt', {
157
+ inputMapper: (parent) => ({
158
+ userMessage: parent.userMessage,
159
+ iteration: parent.iteration,
160
+ }),
161
+ outputMapper: (sf) => ({
162
+ systemPromptInjections: sf.systemPromptInjections,
163
+ }),
164
+ })
165
+ .addSubFlowChartBranch(conventions_js_1.SUBFLOW_IDS.MESSAGES, (0, buildMessagesSlot_js_1.buildMessagesSlot)(), 'Messages', {
166
+ inputMapper: (parent) => ({
167
+ messages: parent.history,
168
+ iteration: parent.iteration,
169
+ }),
170
+ outputMapper: (sf) => ({ messagesInjections: sf.messagesInjections }),
171
+ })
172
+ .addSubFlowChartBranch(conventions_js_1.SUBFLOW_IDS.TOOLS, (0, buildToolsSlot_js_1.buildToolsSlot)({ tools }), 'Tools', {
173
+ inputMapper: (parent) => ({ iteration: parent.iteration }),
174
+ outputMapper: (sf) => ({ toolSchemas: sf.toolSchemas }),
175
+ // tools is a SEPARATE Anthropic wire field — it BYPASSES messageAPI
176
+ // (which assembles only system+messages) and pairs with its output at
177
+ // Call-LLM. `convergeAt` makes the structure edge `sf-tools → call-llm`
178
+ // instead of the default `sf-tools → message-api`, so Call-LLM reads as a
179
+ // true 2-parent merge {messageAPI, tools}. (toolSchemas already rides
180
+ // shared scope; this only makes the diagram faithful.)
181
+ convergeAt: 'call-llm',
182
+ })
183
+ .end()
184
+ // messageAPI assembles ONLY system+messages; Call-LLM then sends that
185
+ // payload + the tool schemas (the 2-parent merge above).
186
+ .addFunction('messageAPI', messageApiStage, 'message-api', 'Assemble system + messages into the LLM request')
187
+ .addFunction('CallLLM', callLLM, 'call-llm', 'Send the assembled request + tools to the LLM')
188
+ // Route → [ToolCalls → loop back to Context] / [Final → terminate].
189
+ .addDeciderFunction('Route', routeDecider, conventions_js_1.SUBFLOW_IDS.ROUTE, 'ReAct routing')
190
+ .addFunctionBranch(ROUTE_TOOL_CALLS, 'ToolCalls', toolExec, 'Execute tool calls')
191
+ // ReAct: the loop is sourced from the TOOL-CALLS branch (after executing
192
+ // tools, re-engineer context next turn) — NOT from the Route decider. Final
193
+ // terminates as a leaf (its $break is the terminal boundary signal).
194
+ .loopTo('context')
195
+ .addFunctionBranch(ROUTE_FINAL, 'Final', finalStage, 'Terminate the ReAct loop (response)')
196
+ .setDefault(ROUTE_FINAL)
197
+ .end()
198
+ .build());
199
+ }
200
+ exports.buildAgentMessageApiChart = buildAgentMessageApiChart;
201
+ //# sourceMappingURL=buildAgentMessageApiChart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildAgentMessageApiChart.js","sourceRoot":"","sources":["../../../src/core/agent/buildAgentMessageApiChart.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ /**
3
+ * buildCacheSubflow — the per-turn prompt-cache decision, as ONE subflow.
4
+ *
5
+ * Collapses the cache machinery into a single `sf-cache` boundary so the
6
+ * agent chart reads cleanly (one "Cache" box you can drill into) while the
7
+ * execution tree stays honest:
8
+ *
9
+ * decideCacheMarkers → CacheGate (decider) → ApplyMarkers / SkipCaching
10
+ *
11
+ * Layering (see src/cache/types.ts):
12
+ * - This subflow is the provider-AGNOSTIC DECISION layer — it only computes
13
+ * and gates provider-neutral `CacheMarker[]`. It knows nothing about any
14
+ * provider.
15
+ * - The provider-SPECIFIC MECHANISM (Anthropic `cache_control`, OpenAI
16
+ * automatic, …) is the attached provider's `CacheStrategy`, selected by
17
+ * `provider.name`, applied later when the request is built.
18
+ *
19
+ * Why `UpdateSkillHistory` is NOT in here: the `skillHistory` rolling window
20
+ * must persist across loop iterations. Keeping `UpdateSkillHistory` in the
21
+ * main loop (just before this subflow) lets `skillHistory` live in the parent
22
+ * scope without round-tripping through this subflow's in/out mappers — the
23
+ * subflow stays pure (reads the turn's state, writes only `cacheMarkers`).
24
+ *
25
+ * Deps-free: every input (`activeInjections`, `iteration`, `skillHistory`,
26
+ * `recentHitRate`, `systemPromptCachePolicy`, …) is supplied by the PARENT's
27
+ * `inputMapper` at the mount site; the output is just `cacheMarkers`.
28
+ */
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ exports.buildCacheSubflow = void 0;
31
+ const footprintjs_1 = require("footprintjs");
32
+ const CacheDecisionSubflow_js_1 = require("../../cache/CacheDecisionSubflow.js");
33
+ const CacheGateDecider_js_1 = require("../../cache/CacheGateDecider.js");
34
+ const conventions_js_1 = require("../../conventions.js");
35
+ /**
36
+ * Build the `sf-cache` subflow chart. Called by `buildAgentChart` and
37
+ * `buildDynamicAgentChart` and mounted via `addSubFlowChartNext(
38
+ * SUBFLOW_IDS.CACHE, buildCacheSubflow(), 'Cache', { inputMapper,
39
+ * outputMapper, arrayMerge: Replace })`.
40
+ */
41
+ function buildCacheSubflow() {
42
+ return (0, footprintjs_1.flowChart)('CacheDecision',
43
+ // Root stage = the cache-decision function (a chart cannot start with a
44
+ // nested subflow). Exported from CacheDecisionSubflow.ts and reused here —
45
+ // the cache decision is the root of sf-cache, no logic duplication.
46
+ CacheDecisionSubflow_js_1.decideCacheMarkers, 'decide-cache-markers', {
47
+ description: 'CacheDecision: walk activeInjections, evaluate cache directives, emit CacheMarker[]',
48
+ })
49
+ .addDeciderFunction('CacheGate', CacheGateDecider_js_1.cacheGateDecide, conventions_js_1.STAGE_IDS.CACHE_GATE, 'Gate cache-marker application: kill switch / hit-rate / skill-churn')
50
+ .addFunctionBranch(conventions_js_1.STAGE_IDS.APPLY_MARKERS, 'ApplyMarkers',
51
+ // Pass-through — markers stay in scope; the request build reads them.
52
+ () => undefined, 'Proceed with cache markers from CacheDecision')
53
+ .addFunctionBranch(conventions_js_1.STAGE_IDS.SKIP_CACHING, 'SkipCaching',
54
+ // Clear markers so the request is built unmodified this iteration.
55
+ (scope) => {
56
+ scope.cacheMarkers = [];
57
+ }, 'Skip caching this iteration')
58
+ .end()
59
+ .build();
60
+ }
61
+ exports.buildCacheSubflow = buildCacheSubflow;
62
+ //# sourceMappingURL=buildCacheSubflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildCacheSubflow.js","sourceRoot":"","sources":["../../../src/core/agent/buildCacheSubflow.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;;;AAEH,6CAAwD;AACxD,iFAAyE;AACzE,yEAAkE;AAClE,yDAAiD;AAGjD;;;;;GAKG;AACH,SAAgB,iBAAiB;IAC/B,OAAO,IAAA,uBAAS,EACd,eAAe;IACf,wEAAwE;IACxE,2EAA2E;IAC3E,oEAAoE;IACpE,4CAA2B,EAC3B,sBAAsB,EACtB;QACE,WAAW,EACT,qFAAqF;KACxF,CACF;SACE,kBAAkB,CACjB,WAAW,EACX,qCAAwB,EACxB,0BAAS,CAAC,UAAU,EACpB,qEAAqE,CACtE;SACA,iBAAiB,CAChB,0BAAS,CAAC,aAAa,EACvB,cAAc;IACd,sEAAsE;IACtE,GAAG,EAAE,CAAC,SAAS,EACf,+CAA+C,CAChD;SACA,iBAAiB,CAChB,0BAAS,CAAC,YAAY,EACtB,aAAa;IACb,mEAAmE;IACnE,CAAC,KAAK,EAAE,EAAE;QACP,KAA8C,CAAC,YAAY,GAAG,EAAE,CAAC;IACpE,CAAC,EACD,6BAA6B,CAC9B;SACA,GAAG,EAAE;SACL,KAAK,EAAE,CAAC;AACb,CAAC;AArCD,8CAqCC"}