agentfootprint 9.16.0 → 9.18.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 (237) hide show
  1. package/AGENTS.md +1 -1
  2. package/CLAUDE.md +1 -1
  3. package/README.md +21 -0
  4. package/ai-instructions/claude-code/SKILL.md +1 -1
  5. package/dist/conventions.js +14 -0
  6. package/dist/conventions.js.map +1 -1
  7. package/dist/core/Agent.js +123 -5
  8. package/dist/core/Agent.js.map +1 -1
  9. package/dist/core/agent/AgentBuilder.js +192 -3
  10. package/dist/core/agent/AgentBuilder.js.map +1 -1
  11. package/dist/core/agent/buildAgentChart.js +40 -5
  12. package/dist/core/agent/buildAgentChart.js.map +1 -1
  13. package/dist/core/agent/buildDynamicAgentChart.js +49 -4
  14. package/dist/core/agent/buildDynamicAgentChart.js.map +1 -1
  15. package/dist/core/agent/buildToolRegistry.js +23 -0
  16. package/dist/core/agent/buildToolRegistry.js.map +1 -1
  17. package/dist/core/agent/stages/route.js +130 -4
  18. package/dist/core/agent/stages/route.js.map +1 -1
  19. package/dist/core/agent/stages/routeTurn.js +308 -0
  20. package/dist/core/agent/stages/routeTurn.js.map +1 -0
  21. package/dist/core/agent/stages/seed.js +20 -0
  22. package/dist/core/agent/stages/seed.js.map +1 -1
  23. package/dist/core/agent/stages/stepNudge.js +82 -0
  24. package/dist/core/agent/stages/stepNudge.js.map +1 -0
  25. package/dist/core/agent/stages/toolCalls.js +231 -5
  26. package/dist/core/agent/stages/toolCalls.js.map +1 -1
  27. package/dist/core/runCheckpoint.js +18 -1
  28. package/dist/core/runCheckpoint.js.map +1 -1
  29. package/dist/core/slots/buildToolsSlot.js +125 -7
  30. package/dist/core/slots/buildToolsSlot.js.map +1 -1
  31. package/dist/esm/conventions.d.ts +6 -0
  32. package/dist/esm/conventions.js +14 -0
  33. package/dist/esm/conventions.js.map +1 -1
  34. package/dist/esm/core/Agent.d.ts +33 -2
  35. package/dist/esm/core/Agent.js +123 -5
  36. package/dist/esm/core/Agent.js.map +1 -1
  37. package/dist/esm/core/agent/AgentBuilder.d.ts +68 -6
  38. package/dist/esm/core/agent/AgentBuilder.js +192 -3
  39. package/dist/esm/core/agent/AgentBuilder.js.map +1 -1
  40. package/dist/esm/core/agent/buildAgentChart.d.ts +31 -0
  41. package/dist/esm/core/agent/buildAgentChart.js +40 -5
  42. package/dist/esm/core/agent/buildAgentChart.js.map +1 -1
  43. package/dist/esm/core/agent/buildDynamicAgentChart.js +49 -4
  44. package/dist/esm/core/agent/buildDynamicAgentChart.js.map +1 -1
  45. package/dist/esm/core/agent/buildToolRegistry.js +23 -0
  46. package/dist/esm/core/agent/buildToolRegistry.js.map +1 -1
  47. package/dist/esm/core/agent/stages/route.d.ts +3 -2
  48. package/dist/esm/core/agent/stages/route.js +130 -4
  49. package/dist/esm/core/agent/stages/route.js.map +1 -1
  50. package/dist/esm/core/agent/stages/routeTurn.d.ts +73 -0
  51. package/dist/esm/core/agent/stages/routeTurn.js +304 -0
  52. package/dist/esm/core/agent/stages/routeTurn.js.map +1 -0
  53. package/dist/esm/core/agent/stages/seed.d.ts +21 -0
  54. package/dist/esm/core/agent/stages/seed.js +20 -0
  55. package/dist/esm/core/agent/stages/seed.js.map +1 -1
  56. package/dist/esm/core/agent/stages/stepNudge.d.ts +29 -0
  57. package/dist/esm/core/agent/stages/stepNudge.js +78 -0
  58. package/dist/esm/core/agent/stages/stepNudge.js.map +1 -0
  59. package/dist/esm/core/agent/stages/toolCalls.d.ts +40 -0
  60. package/dist/esm/core/agent/stages/toolCalls.js +231 -5
  61. package/dist/esm/core/agent/stages/toolCalls.js.map +1 -1
  62. package/dist/esm/core/agent/types.d.ts +25 -0
  63. package/dist/esm/core/runCheckpoint.d.ts +29 -1
  64. package/dist/esm/core/runCheckpoint.js +18 -1
  65. package/dist/esm/core/runCheckpoint.js.map +1 -1
  66. package/dist/esm/core/slots/buildToolsSlot.d.ts +32 -0
  67. package/dist/esm/core/slots/buildToolsSlot.js +125 -7
  68. package/dist/esm/core/slots/buildToolsSlot.js.map +1 -1
  69. package/dist/esm/events/payloads.d.ts +141 -3
  70. package/dist/esm/events/registry.d.ts +9 -1
  71. package/dist/esm/events/registry.js +8 -0
  72. package/dist/esm/events/registry.js.map +1 -1
  73. package/dist/esm/index.d.ts +1 -1
  74. package/dist/esm/index.js.map +1 -1
  75. package/dist/esm/lib/injection-engine/buildInjectionEngineSubflow.d.ts +10 -0
  76. package/dist/esm/lib/injection-engine/buildInjectionEngineSubflow.js +51 -5
  77. package/dist/esm/lib/injection-engine/buildInjectionEngineSubflow.js.map +1 -1
  78. package/dist/esm/lib/injection-engine/entryScorer.d.ts +20 -2
  79. package/dist/esm/lib/injection-engine/entryScorer.js +60 -22
  80. package/dist/esm/lib/injection-engine/entryScorer.js.map +1 -1
  81. package/dist/esm/lib/injection-engine/factories/defineMenuHint.d.ts +39 -0
  82. package/dist/esm/lib/injection-engine/factories/defineMenuHint.js +53 -0
  83. package/dist/esm/lib/injection-engine/factories/defineMenuHint.js.map +1 -0
  84. package/dist/esm/lib/injection-engine/factories/defineSkill.d.ts +34 -0
  85. package/dist/esm/lib/injection-engine/factories/defineSkill.js +17 -0
  86. package/dist/esm/lib/injection-engine/factories/defineSkill.js.map +1 -1
  87. package/dist/esm/lib/injection-engine/factories/defineStepsHint.d.ts +39 -0
  88. package/dist/esm/lib/injection-engine/factories/defineStepsHint.js +51 -0
  89. package/dist/esm/lib/injection-engine/factories/defineStepsHint.js.map +1 -0
  90. package/dist/esm/lib/injection-engine/index.d.ts +7 -0
  91. package/dist/esm/lib/injection-engine/index.js +15 -0
  92. package/dist/esm/lib/injection-engine/index.js.map +1 -1
  93. package/dist/esm/lib/injection-engine/intentScorer.d.ts +78 -0
  94. package/dist/esm/lib/injection-engine/intentScorer.js +56 -0
  95. package/dist/esm/lib/injection-engine/intentScorer.js.map +1 -0
  96. package/dist/esm/lib/injection-engine/llmClassifier.d.ts +36 -0
  97. package/dist/esm/lib/injection-engine/llmClassifier.js +140 -0
  98. package/dist/esm/lib/injection-engine/llmClassifier.js.map +1 -0
  99. package/dist/esm/lib/injection-engine/routingPolicy.d.ts +154 -0
  100. package/dist/esm/lib/injection-engine/routingPolicy.js +128 -0
  101. package/dist/esm/lib/injection-engine/routingPolicy.js.map +1 -0
  102. package/dist/esm/lib/injection-engine/skillGraph.d.ts +76 -2
  103. package/dist/esm/lib/injection-engine/skillGraph.js +135 -14
  104. package/dist/esm/lib/injection-engine/skillGraph.js.map +1 -1
  105. package/dist/esm/lib/injection-engine/skillGraphCheckup.d.ts +11 -1
  106. package/dist/esm/lib/injection-engine/skillGraphCheckup.js +28 -2
  107. package/dist/esm/lib/injection-engine/skillGraphCheckup.js.map +1 -1
  108. package/dist/esm/lib/injection-engine/skillIntent.d.ts +88 -0
  109. package/dist/esm/lib/injection-engine/skillIntent.js +192 -0
  110. package/dist/esm/lib/injection-engine/skillIntent.js.map +1 -0
  111. package/dist/esm/lib/injection-engine/skillMatch.d.ts +28 -6
  112. package/dist/esm/lib/injection-engine/skillMatch.js +47 -12
  113. package/dist/esm/lib/injection-engine/skillMatch.js.map +1 -1
  114. package/dist/esm/lib/injection-engine/skillSteps.d.ts +185 -0
  115. package/dist/esm/lib/injection-engine/skillSteps.js +276 -0
  116. package/dist/esm/lib/injection-engine/skillSteps.js.map +1 -0
  117. package/dist/esm/lib/injection-engine/skillTools.d.ts +24 -0
  118. package/dist/esm/lib/injection-engine/skillTools.js +24 -4
  119. package/dist/esm/lib/injection-engine/skillTools.js.map +1 -1
  120. package/dist/esm/lib/injection-engine/types.d.ts +27 -2
  121. package/dist/esm/lib/injection-engine/types.js.map +1 -1
  122. package/dist/esm/recorders/observability/AgentThinkingTraceRecorder.js +16 -1
  123. package/dist/esm/recorders/observability/AgentThinkingTraceRecorder.js.map +1 -1
  124. package/dist/esm/recorders/observability/RouteRecorder.d.ts +6 -1
  125. package/dist/esm/recorders/observability/RouteRecorder.js +9 -0
  126. package/dist/esm/recorders/observability/RouteRecorder.js.map +1 -1
  127. package/dist/esm/recorders/observability/commentary/commentaryTemplates.js +232 -3
  128. package/dist/esm/recorders/observability/commentary/commentaryTemplates.js.map +1 -1
  129. package/dist/events/registry.js +8 -0
  130. package/dist/events/registry.js.map +1 -1
  131. package/dist/index.js.map +1 -1
  132. package/dist/lib/injection-engine/buildInjectionEngineSubflow.js +51 -5
  133. package/dist/lib/injection-engine/buildInjectionEngineSubflow.js.map +1 -1
  134. package/dist/lib/injection-engine/entryScorer.js +60 -22
  135. package/dist/lib/injection-engine/entryScorer.js.map +1 -1
  136. package/dist/lib/injection-engine/factories/defineMenuHint.js +57 -0
  137. package/dist/lib/injection-engine/factories/defineMenuHint.js.map +1 -0
  138. package/dist/lib/injection-engine/factories/defineSkill.js +17 -0
  139. package/dist/lib/injection-engine/factories/defineSkill.js.map +1 -1
  140. package/dist/lib/injection-engine/factories/defineStepsHint.js +55 -0
  141. package/dist/lib/injection-engine/factories/defineStepsHint.js.map +1 -0
  142. package/dist/lib/injection-engine/index.js +30 -1
  143. package/dist/lib/injection-engine/index.js.map +1 -1
  144. package/dist/lib/injection-engine/intentScorer.js +60 -0
  145. package/dist/lib/injection-engine/intentScorer.js.map +1 -0
  146. package/dist/lib/injection-engine/llmClassifier.js +144 -0
  147. package/dist/lib/injection-engine/llmClassifier.js.map +1 -0
  148. package/dist/lib/injection-engine/routingPolicy.js +134 -0
  149. package/dist/lib/injection-engine/routingPolicy.js.map +1 -0
  150. package/dist/lib/injection-engine/skillGraph.js +134 -13
  151. package/dist/lib/injection-engine/skillGraph.js.map +1 -1
  152. package/dist/lib/injection-engine/skillGraphCheckup.js +28 -2
  153. package/dist/lib/injection-engine/skillGraphCheckup.js.map +1 -1
  154. package/dist/lib/injection-engine/skillIntent.js +199 -0
  155. package/dist/lib/injection-engine/skillIntent.js.map +1 -0
  156. package/dist/lib/injection-engine/skillMatch.js +47 -12
  157. package/dist/lib/injection-engine/skillMatch.js.map +1 -1
  158. package/dist/lib/injection-engine/skillSteps.js +297 -0
  159. package/dist/lib/injection-engine/skillSteps.js.map +1 -0
  160. package/dist/lib/injection-engine/skillTools.js +24 -4
  161. package/dist/lib/injection-engine/skillTools.js.map +1 -1
  162. package/dist/lib/injection-engine/types.js.map +1 -1
  163. package/dist/recorders/observability/AgentThinkingTraceRecorder.js +16 -1
  164. package/dist/recorders/observability/AgentThinkingTraceRecorder.js.map +1 -1
  165. package/dist/recorders/observability/RouteRecorder.js +9 -0
  166. package/dist/recorders/observability/RouteRecorder.js.map +1 -1
  167. package/dist/recorders/observability/commentary/commentaryTemplates.js +232 -3
  168. package/dist/recorders/observability/commentary/commentaryTemplates.js.map +1 -1
  169. package/dist/types/conventions.d.ts +6 -0
  170. package/dist/types/conventions.d.ts.map +1 -1
  171. package/dist/types/core/Agent.d.ts +33 -2
  172. package/dist/types/core/Agent.d.ts.map +1 -1
  173. package/dist/types/core/agent/AgentBuilder.d.ts +68 -6
  174. package/dist/types/core/agent/AgentBuilder.d.ts.map +1 -1
  175. package/dist/types/core/agent/buildAgentChart.d.ts +31 -0
  176. package/dist/types/core/agent/buildAgentChart.d.ts.map +1 -1
  177. package/dist/types/core/agent/buildDynamicAgentChart.d.ts.map +1 -1
  178. package/dist/types/core/agent/buildToolRegistry.d.ts.map +1 -1
  179. package/dist/types/core/agent/stages/route.d.ts +3 -2
  180. package/dist/types/core/agent/stages/route.d.ts.map +1 -1
  181. package/dist/types/core/agent/stages/routeTurn.d.ts +74 -0
  182. package/dist/types/core/agent/stages/routeTurn.d.ts.map +1 -0
  183. package/dist/types/core/agent/stages/seed.d.ts +21 -0
  184. package/dist/types/core/agent/stages/seed.d.ts.map +1 -1
  185. package/dist/types/core/agent/stages/stepNudge.d.ts +30 -0
  186. package/dist/types/core/agent/stages/stepNudge.d.ts.map +1 -0
  187. package/dist/types/core/agent/stages/toolCalls.d.ts +40 -0
  188. package/dist/types/core/agent/stages/toolCalls.d.ts.map +1 -1
  189. package/dist/types/core/agent/types.d.ts +25 -0
  190. package/dist/types/core/agent/types.d.ts.map +1 -1
  191. package/dist/types/core/runCheckpoint.d.ts +29 -1
  192. package/dist/types/core/runCheckpoint.d.ts.map +1 -1
  193. package/dist/types/core/slots/buildToolsSlot.d.ts +32 -0
  194. package/dist/types/core/slots/buildToolsSlot.d.ts.map +1 -1
  195. package/dist/types/events/payloads.d.ts +141 -3
  196. package/dist/types/events/payloads.d.ts.map +1 -1
  197. package/dist/types/events/registry.d.ts +9 -1
  198. package/dist/types/events/registry.d.ts.map +1 -1
  199. package/dist/types/index.d.ts +1 -1
  200. package/dist/types/index.d.ts.map +1 -1
  201. package/dist/types/lib/injection-engine/buildInjectionEngineSubflow.d.ts +10 -0
  202. package/dist/types/lib/injection-engine/buildInjectionEngineSubflow.d.ts.map +1 -1
  203. package/dist/types/lib/injection-engine/entryScorer.d.ts +20 -2
  204. package/dist/types/lib/injection-engine/entryScorer.d.ts.map +1 -1
  205. package/dist/types/lib/injection-engine/factories/defineMenuHint.d.ts +40 -0
  206. package/dist/types/lib/injection-engine/factories/defineMenuHint.d.ts.map +1 -0
  207. package/dist/types/lib/injection-engine/factories/defineSkill.d.ts +34 -0
  208. package/dist/types/lib/injection-engine/factories/defineSkill.d.ts.map +1 -1
  209. package/dist/types/lib/injection-engine/factories/defineStepsHint.d.ts +40 -0
  210. package/dist/types/lib/injection-engine/factories/defineStepsHint.d.ts.map +1 -0
  211. package/dist/types/lib/injection-engine/index.d.ts +7 -0
  212. package/dist/types/lib/injection-engine/index.d.ts.map +1 -1
  213. package/dist/types/lib/injection-engine/intentScorer.d.ts +79 -0
  214. package/dist/types/lib/injection-engine/intentScorer.d.ts.map +1 -0
  215. package/dist/types/lib/injection-engine/llmClassifier.d.ts +37 -0
  216. package/dist/types/lib/injection-engine/llmClassifier.d.ts.map +1 -0
  217. package/dist/types/lib/injection-engine/routingPolicy.d.ts +155 -0
  218. package/dist/types/lib/injection-engine/routingPolicy.d.ts.map +1 -0
  219. package/dist/types/lib/injection-engine/skillGraph.d.ts +76 -2
  220. package/dist/types/lib/injection-engine/skillGraph.d.ts.map +1 -1
  221. package/dist/types/lib/injection-engine/skillGraphCheckup.d.ts +11 -1
  222. package/dist/types/lib/injection-engine/skillGraphCheckup.d.ts.map +1 -1
  223. package/dist/types/lib/injection-engine/skillIntent.d.ts +89 -0
  224. package/dist/types/lib/injection-engine/skillIntent.d.ts.map +1 -0
  225. package/dist/types/lib/injection-engine/skillMatch.d.ts +28 -6
  226. package/dist/types/lib/injection-engine/skillMatch.d.ts.map +1 -1
  227. package/dist/types/lib/injection-engine/skillSteps.d.ts +186 -0
  228. package/dist/types/lib/injection-engine/skillSteps.d.ts.map +1 -0
  229. package/dist/types/lib/injection-engine/skillTools.d.ts +24 -0
  230. package/dist/types/lib/injection-engine/skillTools.d.ts.map +1 -1
  231. package/dist/types/lib/injection-engine/types.d.ts +27 -2
  232. package/dist/types/lib/injection-engine/types.d.ts.map +1 -1
  233. package/dist/types/recorders/observability/AgentThinkingTraceRecorder.d.ts.map +1 -1
  234. package/dist/types/recorders/observability/RouteRecorder.d.ts +6 -1
  235. package/dist/types/recorders/observability/RouteRecorder.d.ts.map +1 -1
  236. package/dist/types/recorders/observability/commentary/commentaryTemplates.d.ts.map +1 -1
  237. package/package.json +1 -1
@@ -0,0 +1,308 @@
1
+ "use strict";
2
+ /**
3
+ * RouteTurn — the turn-start routing cascade stage (SG-C).
4
+ *
5
+ * Runs ONCE per turn, BEFORE the ReAct loop, in the slot PickEntry has always
6
+ * occupied (`STAGE_IDS.PICK_ENTRY` — recorded structures stay stable), so
7
+ * anything async (a classifier, an embedder, one model call) is paid off the
8
+ * hot loop and `nextSkill` stays synchronous. It decides where the turn
9
+ * STARTS and writes the verdict to `scope.turnRoute`; the graph's cursor
10
+ * resolver consumes it on iteration 1 — the exact mechanism
11
+ * `entryScores`/`pendingSkillPick` already use. Iterations 2..N keep today's
12
+ * law byte-for-byte (`userMessage` is fixed for a run).
13
+ *
14
+ * The cascade:
15
+ * tier 1 — declared start rules (regex / keywords / `when`), declaration
16
+ * order, binary and decisive;
17
+ * tier 2 — the configured scorer: the intent classifier (`classify`) over
18
+ * declared intents, or the entry scorer (`entryBy*`) over
19
+ * descriptions — judged by `decideTier2` (floor + pairwise
20
+ * near-tie margin; near-ties FALL THROUGH, never argmax);
21
+ * tier 3 — a menu through the model's own `read_skill` description (plus
22
+ * the advisory menu hint), STAY first-class mid-conversation.
23
+ *
24
+ * Mounted only on graphs that run the cascade — `classify` configured, or
25
+ * `continuity: 'conversation'` declared. A 9.16-style graph (scorer or not)
26
+ * keeps its exact prior stage and events: scorer-only graphs keep PickEntry
27
+ * byte-for-byte, and the cascade fires no `turn_routed` there.
28
+ *
29
+ * Mid-conversation (an inherited cursor from `continuity: 'conversation'`):
30
+ * sticky default — the incumbent is scored AS A CANDIDATE, beaten only by a
31
+ * decisive tier-1/tier-2 verdict; ambiguity = stay; genuinely-new-but-
32
+ * unmatched opens the full menu with STAY first-class. An inherited id the
33
+ * mounted graph does not know is DROPPED (cold start), dev-warned, and
34
+ * recorded as `turn_routed.droppedResume` — never silently parked on a node
35
+ * that does not exist.
36
+ *
37
+ * Every verdict lands on `agentfootprint.skill.turn_routed` with the losers
38
+ * (`scores`, ranked), the pairwise runner-up gap, and the policy numbers that
39
+ * judged it. A throwing/misbehaving scorer never aborts the run: cold start
40
+ * falls through to the FULL menu (recorded — never the declaration-order
41
+ * walk), mid-conversation stays put (`by: 'continuity'`), both dev-warned.
42
+ *
43
+ * `strictness: 'rails'` and menus: the model is not allowed to route, so a
44
+ * menu verdict proceeds on the base prompt — recorded as `by: 'none'` WITH
45
+ * the offered set on the EVENT (what happened), while `scope.turnRoute`
46
+ * carries no `offered` (what the loop may act on): no envelope is composed,
47
+ * and no entry loads. That is the honest cost of rails without a resolver,
48
+ * and the README names it.
49
+ */
50
+ Object.defineProperty(exports, "__esModule", { value: true });
51
+ exports.makeRouteTurnStage = void 0;
52
+ const footprintjs_1 = require("footprintjs");
53
+ const intentScorer_js_1 = require("../../../lib/injection-engine/intentScorer.js");
54
+ const routingPolicy_js_1 = require("../../../lib/injection-engine/routingPolicy.js");
55
+ const typedEmit_js_1 = require("../../../recorders/core/typedEmit.js");
56
+ function makeRouteTurnStage(deps) {
57
+ const plan = deps.turnRouting;
58
+ return async (scope) => {
59
+ const env = scope.$getEnv();
60
+ let inherited = scope.currentSkillId;
61
+ // Deploy honesty: an inherited id that is not a node of the CURRENTLY
62
+ // mounted graph is dropped (cold start), never silently parked on a node
63
+ // that does not exist.
64
+ let droppedResume;
65
+ if (inherited !== undefined && !deps.isNode(inherited)) {
66
+ droppedResume = { id: inherited, reason: 'unknown-skill' };
67
+ scope.currentSkillId = undefined;
68
+ if ((0, footprintjs_1.isDevMode)()) {
69
+ // eslint-disable-next-line no-console
70
+ console.warn(`agentfootprint RouteTurn: the conversation's stored cursor "${inherited}" is not a ` +
71
+ `node of the currently mounted graph (a deploy changed it?) — starting cold. ` +
72
+ `Recorded as turn_routed.droppedResume.`);
73
+ }
74
+ inherited = undefined;
75
+ }
76
+ const ctx = {
77
+ iteration: scope.iteration ?? 1,
78
+ userMessage: scope.userMessage ?? '',
79
+ history: scope.history ?? [],
80
+ activatedInjectionIds: scope.activatedInjectionIds ?? [],
81
+ ...(inherited !== undefined && { currentSkillId: inherited }),
82
+ };
83
+ const resolved = await resolveHidden(deps.hiddenSkillIds);
84
+ // Fail CLOSED: a throwing resolver hides EVERY graph candidate this turn
85
+ // (the cascade degrades to continuity-stay / base prompt, all recorded)
86
+ // rather than advertising skills a policy may have meant to hide.
87
+ const hidden = resolved === 'resolver-failed' ? new Set(plan.entryIds) : new Set(resolved);
88
+ if (resolved === 'resolver-failed' && (0, footprintjs_1.isDevMode)()) {
89
+ console.warn('agentfootprint: the hidden-skills resolver threw during turn routing — ' +
90
+ 'failing closed (no graph candidates scored or offered this turn). ' +
91
+ 'Fix the resolver passed to hiddenSkillIds.');
92
+ }
93
+ const visibleEntryIds = plan.entryIds.filter((id) => !hidden.has(id));
94
+ const verdict = await runCascade(deps, plan, ctx, inherited, hidden, visibleEntryIds, env.signal);
95
+ if (verdict === undefined && droppedResume === undefined) {
96
+ // Cold start on a continuity graph with no tier 2 at all: the resolver's
97
+ // cold walk decides exactly as it always has — no verdict, no event.
98
+ return;
99
+ }
100
+ // The shipped ranking surface (defineRelevanceHint, the Why-panel) — the
101
+ // tier-2 numbers, whatever scorer produced them.
102
+ if (verdict?.scores !== undefined && verdict.scorer !== undefined) {
103
+ scope.entryScores = verdict.scores;
104
+ scope.entryScorer = verdict.scorer;
105
+ }
106
+ const policy = plan.policy;
107
+ const effectiveFloor = policy.floor ?? plan.scorer?.floor;
108
+ // Rails × menu: the model may not act on it — record the offer, act on none.
109
+ const rails = deps.strictness === 'rails';
110
+ const eventBy = rails && verdict?.by === 'menu' ? 'none' : verdict?.by ?? 'none';
111
+ (0, typedEmit_js_1.typedEmit)(scope, 'agentfootprint.skill.turn_routed', {
112
+ by: eventBy,
113
+ ...(inherited !== undefined && { from: inherited }),
114
+ ...(verdict?.to !== undefined && { to: verdict.to }),
115
+ ...(verdict?.scorer !== undefined && { scorer: verdict.scorer }),
116
+ ...(verdict?.scores !== undefined && { scores: verdict.scores.map((s) => ({ ...s })) }),
117
+ ...(verdict?.runnerUp !== undefined && { runnerUp: { ...verdict.runnerUp } }),
118
+ ...(verdict?.decisive !== undefined && { decisive: verdict.decisive }),
119
+ ...(verdict?.offered !== undefined && { offered: [...verdict.offered] }),
120
+ ...(verdict?.stayOffered !== undefined && { stayOffered: verdict.stayOffered }),
121
+ policy: {
122
+ nearTieMargin: policy.nearTieMargin,
123
+ menuSize: policy.menuSize,
124
+ ...(effectiveFloor !== undefined && { floor: effectiveFloor }),
125
+ },
126
+ ...(verdict?.window !== undefined && { window: verdict.window }),
127
+ ...(droppedResume !== undefined && { droppedResume }),
128
+ });
129
+ // The POJO the LOOP acts on — the resolver's iteration-1 input, the
130
+ // envelope's source, the guard gate's window. Under rails a menu carries
131
+ // no `offered` here: nothing downstream may offer what nothing may accept.
132
+ // Written ONLY when the cascade DECIDED something: the resolver suppresses
133
+ // its cold-start walk on the POJO's presence (suppression follows the
134
+ // verdict), so a droppedResume with nothing else to say — a TRUE cold
135
+ // start on a graph whose cold walk still decides — must leave scope
136
+ // untouched, or the drop would silently strand the turn on no entry.
137
+ if (verdict === undefined)
138
+ return;
139
+ const turnRoute = {
140
+ by: eventBy,
141
+ ...(inherited !== undefined && { from: inherited }),
142
+ ...(verdict.to !== undefined && { to: verdict.to }),
143
+ ...(!rails && verdict.offered !== undefined && { offered: [...verdict.offered] }),
144
+ ...(!rails && verdict.stayOffered !== undefined && { stayOffered: verdict.stayOffered }),
145
+ ...(!rails &&
146
+ verdict.offered !== undefined &&
147
+ verdict.scores !== undefined && {
148
+ relevance: verdict.scores.map((s) => ({ id: s.id, relevance: s.relevance })),
149
+ }),
150
+ };
151
+ scope.turnRoute = turnRoute;
152
+ };
153
+ }
154
+ exports.makeRouteTurnStage = makeRouteTurnStage;
155
+ /** Resolve the role-hidden set. A throwing resolver returns the sentinel so the
156
+ * caller can fail CLOSED (hide every candidate) — a menu built on a question
157
+ * nobody answered would advertise what policy hides. */
158
+ async function resolveHidden(hiddenSkillIds) {
159
+ if (!hiddenSkillIds)
160
+ return [];
161
+ try {
162
+ const asked = hiddenSkillIds();
163
+ return asked instanceof Promise ? await asked : asked;
164
+ }
165
+ catch {
166
+ return 'resolver-failed';
167
+ }
168
+ }
169
+ /** The cascade proper. Returns undefined when the stage has nothing to decide
170
+ * (cold start, no classifier, no scorer — the resolver's law). */
171
+ async function runCascade(deps, plan, ctx, inherited, hidden, visibleEntryIds, signal) {
172
+ const cold = inherited === undefined;
173
+ // Tier 1 — declared rules, declaration order. Binary: a rule match is
174
+ // decisive by definition, cold or mid-conversation.
175
+ const ruleWin = plan.firstRuleMatch(ctx);
176
+ if (ruleWin !== undefined) {
177
+ return { by: 'entry', to: ruleWin, decisive: true };
178
+ }
179
+ // Tier 2 — the classifier over declared intents…
180
+ if (plan.scorer !== undefined) {
181
+ const scorer = plan.scorer;
182
+ const candidates = [...plan.intentCandidates(hidden)];
183
+ if (!cold && !hidden.has(inherited) && !candidates.some((c) => c.id === inherited)) {
184
+ // The incumbent is judged by the same numbers as its challengers — its
185
+ // intent is its description when it is not an intent entry.
186
+ candidates.push(plan.incumbentCandidate(inherited));
187
+ }
188
+ if (candidates.length === 0) {
189
+ return cold
190
+ ? menuVerdict(visibleEntryIds, false, scorer.name, scorer.window)
191
+ : { by: 'continuity', to: inherited, scorer: scorer.name };
192
+ }
193
+ let scores;
194
+ try {
195
+ const input = {
196
+ message: ctx.userMessage,
197
+ ...(scorer.window !== undefined && {
198
+ recentTurns: recentTurnsOf(ctx.history, scorer.window),
199
+ }),
200
+ };
201
+ const raw = await scorer.score(input, candidates, signal);
202
+ scores = (0, intentScorer_js_1.validateIntentScores)(scorer.name, candidates, raw);
203
+ }
204
+ catch (err) {
205
+ return scorerFellThrough(err, scorer.name, cold, inherited, visibleEntryIds, scorer.window);
206
+ }
207
+ const v = (0, routingPolicy_js_1.decideTier2)(scores, cold ? undefined : inherited, plan.policy, {
208
+ ...(scorer.floor !== undefined && { floor: scorer.floor }),
209
+ ...(scorer.categorical !== undefined && { categorical: scorer.categorical }),
210
+ });
211
+ return mapTier2(v, scorer.name, cold, inherited, visibleEntryIds, scorer.window);
212
+ }
213
+ // …or the entry scorer over descriptions (entryBy/entryByRelevance graphs
214
+ // that opted into the cascade via continuity).
215
+ if (deps.scoreEntries !== undefined) {
216
+ let scoring;
217
+ try {
218
+ scoring = await deps.scoreEntries(ctx, signal);
219
+ }
220
+ catch (err) {
221
+ return scorerFellThrough(err, 'entry-scorer', cold, inherited, visibleEntryIds, undefined);
222
+ }
223
+ // Role-hidden candidates never appear in scores, menus or the envelope.
224
+ let ranked = scoring.ranked.filter((r) => !hidden.has(r.id));
225
+ if (!cold && !hidden.has(inherited) && !ranked.some((r) => r.id === inherited)) {
226
+ // The incumbent was not a when-passing entry candidate this turn — score
227
+ // floor-less zero so the same verdict function judges it. (An entry
228
+ // scorer declares no floor, so 0 is a rank, not "unmatched".)
229
+ ranked = [...ranked, { id: inherited, score: 0, relevance: 0 }];
230
+ }
231
+ if (ranked.length === 0)
232
+ return cold
233
+ ? menuVerdict(visibleEntryIds, false, scoring.scorer, undefined)
234
+ : { by: 'continuity', to: inherited, scorer: scoring.scorer };
235
+ const v = (0, routingPolicy_js_1.decideTier2)(ranked.map((r) => ({ id: r.id, score: r.score })), cold ? undefined : inherited, plan.policy, {});
236
+ return mapTier2(v, scoring.scorer, cold, inherited, visibleEntryIds, undefined);
237
+ }
238
+ // No tier 2 at all: mid-conversation the inherited cursor holds (sticky,
239
+ // recorded); cold start is the resolver's cold walk — nothing to decide.
240
+ if (!cold)
241
+ return { by: 'continuity', to: inherited };
242
+ return undefined;
243
+ }
244
+ /** Map a `decideTier2` verdict into the stage's recorded shape. */
245
+ function mapTier2(v, scorerName, cold, inherited, visibleEntryIds, window) {
246
+ const numbers = {
247
+ scorer: scorerName,
248
+ scores: v.ranked.map((r) => ({ id: r.id, score: r.score, relevance: r.relevance })),
249
+ ...(v.runnerUp !== undefined && { runnerUp: { ...v.runnerUp } }),
250
+ decisive: v.decisive,
251
+ ...(window !== undefined && { window }),
252
+ };
253
+ switch (v.kind) {
254
+ case 'move':
255
+ return { by: 'intent', to: v.to, ...numbers };
256
+ case 'stay':
257
+ // Incumbent won or near-tie held it — `continuity`, with the numbers.
258
+ return { by: 'continuity', to: inherited, ...numbers };
259
+ case 'menu':
260
+ return { by: 'menu', offered: v.offered, ...(!cold && { stayOffered: true }), ...numbers };
261
+ case 'unmatched':
262
+ // Genuinely new but unmatched: the FULL entry menu, STAY first-class
263
+ // mid-conversation.
264
+ return {
265
+ by: 'menu',
266
+ offered: visibleEntryIds,
267
+ ...(!cold && { stayOffered: true }),
268
+ ...numbers,
269
+ };
270
+ }
271
+ }
272
+ /** The recorded fallback for a throwing/misbehaving scorer: cold → the full
273
+ * menu (never the declaration-order walk); mid → stay. Dev-warned. */
274
+ function scorerFellThrough(err, scorerName, cold, inherited, visibleEntryIds, window) {
275
+ if ((0, footprintjs_1.isDevMode)()) {
276
+ // eslint-disable-next-line no-console
277
+ console.warn(`agentfootprint RouteTurn: the '${scorerName}' scorer failed — ${cold
278
+ ? 'offering the full entry menu (recorded)'
279
+ : 'staying on the inherited cursor (recorded)'}. Scorers are a tier, never a correctness dependency. ${err instanceof Error ? err.message : String(err)}`);
280
+ }
281
+ return cold
282
+ ? menuVerdict(visibleEntryIds, false, scorerName, window)
283
+ : {
284
+ by: 'continuity',
285
+ to: inherited,
286
+ scorer: scorerName,
287
+ ...(window !== undefined && { window }),
288
+ };
289
+ }
290
+ function menuVerdict(offered, stayOffered, scorerName, window) {
291
+ return {
292
+ by: 'menu',
293
+ offered,
294
+ ...(stayOffered && { stayOffered }),
295
+ ...(scorerName !== undefined && { scorer: scorerName }),
296
+ ...(window !== undefined && { window }),
297
+ };
298
+ }
299
+ /** The prior conversational turns a windowed scorer sees — user/assistant
300
+ * roles only, the CURRENT user message excluded, newest last. */
301
+ function recentTurnsOf(history, window) {
302
+ const prior = history.slice(0, Math.max(0, history.length - 1));
303
+ return prior
304
+ .filter((m) => m.role === 'user' || m.role === 'assistant')
305
+ .map((m) => ({ role: m.role, content: m.content }))
306
+ .slice(-window);
307
+ }
308
+ //# sourceMappingURL=routeTurn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routeTurn.js","sourceRoot":"","sources":["../../../../src/core/agent/stages/routeTurn.ts"],"names":[],"mappings":"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"}
@@ -244,8 +244,28 @@ function seedFrom(scope, message, deps) {
244
244
  // graph through the entry router (cold start). The Injection Engine advances
245
245
  // it each iteration; undefined for agents without a skillGraph().
246
246
  scope.currentSkillId = undefined;
247
+ // …unless the graph declared `continuity: 'conversation'` and this run
248
+ // continues a stored conversation (SG-C): the SAME key, one clause earlier —
249
+ // no second cursor, no new time axis. Consumed unconditionally (the side
250
+ // channel clears whether or not it is honored); written only under the
251
+ // option, so `continuity: 'turn'` commits exactly the keys it always did.
252
+ const inheritedCursor = deps.consumePendingResumeSkillCursor?.();
253
+ if (deps.restoreSkillCursor === true && inheritedCursor !== undefined) {
254
+ scope.currentSkillId = inheritedCursor;
255
+ }
247
256
  // The model's `read_skill` pick — nothing picked yet on a fresh turn.
248
257
  scope.pendingSkillPick = undefined;
258
+ // Step-procedure state (9.18.0) — fresh every run, beside the cursor reset
259
+ // it is subordinate to. Steps are TURN-scoped by design: even under
260
+ // `continuity: 'conversation'` only the CURSOR carries, and a re-tenured
261
+ // stepped skill starts at step 1 on the continued turn (the restored
262
+ // history still shows the prior turn's completed step results — the record
263
+ // is not lost, the pointer is fresh). Written only when a stepped skill is
264
+ // registered, so every other agent commits exactly the keys it always did.
265
+ if (deps.hasSteps === true) {
266
+ scope.stepPointer = [];
267
+ scope.stepNudgeSpent = false;
268
+ }
249
269
  // `.configure()` — resolved ONCE here (seed runs exactly once per run)
250
270
  // and written to scope, which means the run's commit log records the
251
271
  // model and instructions the run actually used. A run that changed its
@@ -1 +1 @@
1
- {"version":3,"file":"seed.js","sourceRoot":"","sources":["../../../../src/core/agent/stages/seed.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"seed.js","sourceRoot":"","sources":["../../../../src/core/agent/stages/seed.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ /**
3
+ * stepNudge — the branch that asks once when a final answer left declared
4
+ * steps unrun (9.18.0).
5
+ *
6
+ * Mounted as a branch of the Route decider, and only on an agent with ≥1
7
+ * STEPPED skill. It carries `{ loopTo }` to the same target the
8
+ * `tool-calls` branch loops to — the SchemaRetry mechanism verbatim: a
9
+ * nudge is not a special mode, it is one more ordinary turn of the ReAct
10
+ * loop, with its own `iteration_start` / `llm_start` bracket and its own
11
+ * `cost.tick` against `costBudget`.
12
+ *
13
+ * What it appends is the conversation as it really went: the premature
14
+ * answer as the assistant turn, then a `role: 'user'` teaching message
15
+ * naming every unrun step and its note — "finish them, or say why you are
16
+ * stopping". At most once per turn (`stepNudgeSpent`); the model stopping
17
+ * AGAIN is honored (`steps_unfinished { action: 'accepted' }`, judged by
18
+ * the decider) — a procedure is a declared order, never a forced march.
19
+ *
20
+ * Pure function apart from its plan closure — no Agent class state.
21
+ */
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.buildStepNudgeStage = void 0;
24
+ const typedEmit_js_1 = require("../../../recorders/core/typedEmit.js");
25
+ const skillSteps_js_1 = require("../../../lib/injection-engine/skillSteps.js");
26
+ /**
27
+ * Build the nudge stage. The decider already judged the table (steps
28
+ * remain, no limit fired, nudge unspent) before routing here — this stage
29
+ * does the work of asking.
30
+ */
31
+ function buildStepNudgeStage(stepPlanFor) {
32
+ return (scope) => {
33
+ const ptr = (0, skillSteps_js_1.pointerOf)(scope.stepPointer);
34
+ const plan = (0, skillSteps_js_1.stepInProgress)(ptr) ? stepPlanFor(ptr.skillId) : undefined;
35
+ if (!ptr || !plan) {
36
+ // Unreachable through the decider, which judges the pointer
37
+ // immediately before routing here. Returning quietly rather than
38
+ // throwing keeps a hand-built chart that mounts this branch without
39
+ // the decider from taking down a run (the SchemaRetry discipline).
40
+ return;
41
+ }
42
+ const iteration = scope.iteration;
43
+ const prematureAnswer = scope.llmLatestContent;
44
+ const teaching = (0, skillSteps_js_1.nudgeTeachingMessage)(ptr, plan);
45
+ // The conversation, as it really went: the answer that stopped early,
46
+ // then the teaching ask. A plain local array — a TypedScope array read
47
+ // is a live proxy view, and both the commit and the event payload below
48
+ // must be detached plain data.
49
+ const newHistory = [
50
+ ...scope.history,
51
+ { role: 'assistant', content: prematureAnswer },
52
+ { role: 'user', content: teaching },
53
+ ];
54
+ scope.history = newHistory;
55
+ // The one-per-turn latch. Spent BEFORE the loop turns, so a second
56
+ // premature stop is accepted rather than re-nudged — never a forced
57
+ // continue.
58
+ scope.stepNudgeSpent = true;
59
+ (0, typedEmit_js_1.typedEmit)(scope, 'agentfootprint.skill.steps_unfinished', {
60
+ skillId: ptr.skillId,
61
+ remaining: (0, skillSteps_js_1.remainingStepsOf)(ptr, plan),
62
+ total: ptr.total,
63
+ action: 'nudged',
64
+ iteration,
65
+ });
66
+ // Close this iteration's bracket before the loop turns — every recorder
67
+ // that synthesizes steps pairs `iteration_start`/`iteration_end` per
68
+ // `iterIndex`, and the crash-checkpoint tracker snapshots history from
69
+ // this payload (the SchemaRetry stage's reasoning, verbatim).
70
+ (0, typedEmit_js_1.typedEmit)(scope, 'agentfootprint.agent.iteration_end', {
71
+ turnIndex: 0,
72
+ iterIndex: iteration,
73
+ toolCallCount: 0,
74
+ history: newHistory,
75
+ });
76
+ // A nudge consumes an iteration, exactly as a tool call does — one more
77
+ // real turn against the agent's declared budget.
78
+ scope.iteration = iteration + 1;
79
+ };
80
+ }
81
+ exports.buildStepNudgeStage = buildStepNudgeStage;
82
+ //# sourceMappingURL=stepNudge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stepNudge.js","sourceRoot":"","sources":["../../../../src/core/agent/stages/stepNudge.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;;AAIH,uEAAiE;AACjE,+EAMqD;AAGrD;;;;GAIG;AACH,SAAgB,mBAAmB,CACjC,WAAwB;IAExB,OAAO,CAAC,KAAK,EAAE,EAAE;QACf,MAAM,GAAG,GAAG,IAAA,yBAAS,EAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,IAAA,8BAAc,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACxE,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,4DAA4D;YAC5D,iEAAiE;YACjE,oEAAoE;YACpE,mEAAmE;YACnE,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,KAAK,CAAC,SAAmB,CAAC;QAC5C,MAAM,eAAe,GAAG,KAAK,CAAC,gBAA0B,CAAC;QACzD,MAAM,QAAQ,GAAG,IAAA,oCAAoB,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAEjD,sEAAsE;QACtE,uEAAuE;QACvE,wEAAwE;QACxE,+BAA+B;QAC/B,MAAM,UAAU,GAAiB;YAC/B,GAAI,KAAK,CAAC,OAAiC;YAC3C,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,EAAE;YAC/C,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE;SACpC,CAAC;QACF,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC;QAE3B,mEAAmE;QACnE,oEAAoE;QACpE,YAAY;QACZ,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;QAE5B,IAAA,wBAAS,EAAC,KAAK,EAAE,uCAAuC,EAAE;YACxD,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,SAAS,EAAE,IAAA,gCAAgB,EAAC,GAAG,EAAE,IAAI,CAAC;YACtC,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,MAAM,EAAE,QAAQ;YAChB,SAAS;SACV,CAAC,CAAC;QAEH,wEAAwE;QACxE,qEAAqE;QACrE,uEAAuE;QACvE,8DAA8D;QAC9D,IAAA,wBAAS,EAAC,KAAK,EAAE,oCAAoC,EAAE;YACrD,SAAS,EAAE,CAAC;YACZ,SAAS,EAAE,SAAS;YACpB,aAAa,EAAE,CAAC;YAChB,OAAO,EAAE,UAAU;SACpB,CAAC,CAAC;QAEH,wEAAwE;QACxE,iDAAiD;QACjD,KAAK,CAAC,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC;IAClC,CAAC,CAAC;AACJ,CAAC;AAzDD,kDAyDC"}