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.
- package/AGENTS.md +1 -1
- package/CLAUDE.md +1 -1
- package/README.md +21 -0
- package/ai-instructions/claude-code/SKILL.md +1 -1
- package/dist/conventions.js +14 -0
- package/dist/conventions.js.map +1 -1
- package/dist/core/Agent.js +123 -5
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/agent/AgentBuilder.js +192 -3
- package/dist/core/agent/AgentBuilder.js.map +1 -1
- package/dist/core/agent/buildAgentChart.js +40 -5
- package/dist/core/agent/buildAgentChart.js.map +1 -1
- package/dist/core/agent/buildDynamicAgentChart.js +49 -4
- package/dist/core/agent/buildDynamicAgentChart.js.map +1 -1
- package/dist/core/agent/buildToolRegistry.js +23 -0
- package/dist/core/agent/buildToolRegistry.js.map +1 -1
- package/dist/core/agent/stages/route.js +130 -4
- package/dist/core/agent/stages/route.js.map +1 -1
- package/dist/core/agent/stages/routeTurn.js +308 -0
- package/dist/core/agent/stages/routeTurn.js.map +1 -0
- package/dist/core/agent/stages/seed.js +20 -0
- package/dist/core/agent/stages/seed.js.map +1 -1
- package/dist/core/agent/stages/stepNudge.js +82 -0
- package/dist/core/agent/stages/stepNudge.js.map +1 -0
- package/dist/core/agent/stages/toolCalls.js +231 -5
- package/dist/core/agent/stages/toolCalls.js.map +1 -1
- package/dist/core/runCheckpoint.js +18 -1
- package/dist/core/runCheckpoint.js.map +1 -1
- package/dist/core/slots/buildToolsSlot.js +125 -7
- package/dist/core/slots/buildToolsSlot.js.map +1 -1
- package/dist/esm/conventions.d.ts +6 -0
- package/dist/esm/conventions.js +14 -0
- package/dist/esm/conventions.js.map +1 -1
- package/dist/esm/core/Agent.d.ts +33 -2
- package/dist/esm/core/Agent.js +123 -5
- package/dist/esm/core/Agent.js.map +1 -1
- package/dist/esm/core/agent/AgentBuilder.d.ts +68 -6
- package/dist/esm/core/agent/AgentBuilder.js +192 -3
- package/dist/esm/core/agent/AgentBuilder.js.map +1 -1
- package/dist/esm/core/agent/buildAgentChart.d.ts +31 -0
- package/dist/esm/core/agent/buildAgentChart.js +40 -5
- package/dist/esm/core/agent/buildAgentChart.js.map +1 -1
- package/dist/esm/core/agent/buildDynamicAgentChart.js +49 -4
- package/dist/esm/core/agent/buildDynamicAgentChart.js.map +1 -1
- package/dist/esm/core/agent/buildToolRegistry.js +23 -0
- package/dist/esm/core/agent/buildToolRegistry.js.map +1 -1
- package/dist/esm/core/agent/stages/route.d.ts +3 -2
- package/dist/esm/core/agent/stages/route.js +130 -4
- package/dist/esm/core/agent/stages/route.js.map +1 -1
- package/dist/esm/core/agent/stages/routeTurn.d.ts +73 -0
- package/dist/esm/core/agent/stages/routeTurn.js +304 -0
- package/dist/esm/core/agent/stages/routeTurn.js.map +1 -0
- package/dist/esm/core/agent/stages/seed.d.ts +21 -0
- package/dist/esm/core/agent/stages/seed.js +20 -0
- package/dist/esm/core/agent/stages/seed.js.map +1 -1
- package/dist/esm/core/agent/stages/stepNudge.d.ts +29 -0
- package/dist/esm/core/agent/stages/stepNudge.js +78 -0
- package/dist/esm/core/agent/stages/stepNudge.js.map +1 -0
- package/dist/esm/core/agent/stages/toolCalls.d.ts +40 -0
- package/dist/esm/core/agent/stages/toolCalls.js +231 -5
- package/dist/esm/core/agent/stages/toolCalls.js.map +1 -1
- package/dist/esm/core/agent/types.d.ts +25 -0
- package/dist/esm/core/runCheckpoint.d.ts +29 -1
- package/dist/esm/core/runCheckpoint.js +18 -1
- package/dist/esm/core/runCheckpoint.js.map +1 -1
- package/dist/esm/core/slots/buildToolsSlot.d.ts +32 -0
- package/dist/esm/core/slots/buildToolsSlot.js +125 -7
- package/dist/esm/core/slots/buildToolsSlot.js.map +1 -1
- package/dist/esm/events/payloads.d.ts +141 -3
- package/dist/esm/events/registry.d.ts +9 -1
- package/dist/esm/events/registry.js +8 -0
- package/dist/esm/events/registry.js.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/injection-engine/buildInjectionEngineSubflow.d.ts +10 -0
- package/dist/esm/lib/injection-engine/buildInjectionEngineSubflow.js +51 -5
- package/dist/esm/lib/injection-engine/buildInjectionEngineSubflow.js.map +1 -1
- package/dist/esm/lib/injection-engine/entryScorer.d.ts +20 -2
- package/dist/esm/lib/injection-engine/entryScorer.js +60 -22
- package/dist/esm/lib/injection-engine/entryScorer.js.map +1 -1
- package/dist/esm/lib/injection-engine/factories/defineMenuHint.d.ts +39 -0
- package/dist/esm/lib/injection-engine/factories/defineMenuHint.js +53 -0
- package/dist/esm/lib/injection-engine/factories/defineMenuHint.js.map +1 -0
- package/dist/esm/lib/injection-engine/factories/defineSkill.d.ts +34 -0
- package/dist/esm/lib/injection-engine/factories/defineSkill.js +17 -0
- package/dist/esm/lib/injection-engine/factories/defineSkill.js.map +1 -1
- package/dist/esm/lib/injection-engine/factories/defineStepsHint.d.ts +39 -0
- package/dist/esm/lib/injection-engine/factories/defineStepsHint.js +51 -0
- package/dist/esm/lib/injection-engine/factories/defineStepsHint.js.map +1 -0
- package/dist/esm/lib/injection-engine/index.d.ts +7 -0
- package/dist/esm/lib/injection-engine/index.js +15 -0
- package/dist/esm/lib/injection-engine/index.js.map +1 -1
- package/dist/esm/lib/injection-engine/intentScorer.d.ts +78 -0
- package/dist/esm/lib/injection-engine/intentScorer.js +56 -0
- package/dist/esm/lib/injection-engine/intentScorer.js.map +1 -0
- package/dist/esm/lib/injection-engine/llmClassifier.d.ts +36 -0
- package/dist/esm/lib/injection-engine/llmClassifier.js +140 -0
- package/dist/esm/lib/injection-engine/llmClassifier.js.map +1 -0
- package/dist/esm/lib/injection-engine/routingPolicy.d.ts +154 -0
- package/dist/esm/lib/injection-engine/routingPolicy.js +128 -0
- package/dist/esm/lib/injection-engine/routingPolicy.js.map +1 -0
- package/dist/esm/lib/injection-engine/skillGraph.d.ts +76 -2
- package/dist/esm/lib/injection-engine/skillGraph.js +135 -14
- package/dist/esm/lib/injection-engine/skillGraph.js.map +1 -1
- package/dist/esm/lib/injection-engine/skillGraphCheckup.d.ts +11 -1
- package/dist/esm/lib/injection-engine/skillGraphCheckup.js +28 -2
- package/dist/esm/lib/injection-engine/skillGraphCheckup.js.map +1 -1
- package/dist/esm/lib/injection-engine/skillIntent.d.ts +88 -0
- package/dist/esm/lib/injection-engine/skillIntent.js +192 -0
- package/dist/esm/lib/injection-engine/skillIntent.js.map +1 -0
- package/dist/esm/lib/injection-engine/skillMatch.d.ts +28 -6
- package/dist/esm/lib/injection-engine/skillMatch.js +47 -12
- package/dist/esm/lib/injection-engine/skillMatch.js.map +1 -1
- package/dist/esm/lib/injection-engine/skillSteps.d.ts +185 -0
- package/dist/esm/lib/injection-engine/skillSteps.js +276 -0
- package/dist/esm/lib/injection-engine/skillSteps.js.map +1 -0
- package/dist/esm/lib/injection-engine/skillTools.d.ts +24 -0
- package/dist/esm/lib/injection-engine/skillTools.js +24 -4
- package/dist/esm/lib/injection-engine/skillTools.js.map +1 -1
- package/dist/esm/lib/injection-engine/types.d.ts +27 -2
- package/dist/esm/lib/injection-engine/types.js.map +1 -1
- package/dist/esm/recorders/observability/AgentThinkingTraceRecorder.js +16 -1
- package/dist/esm/recorders/observability/AgentThinkingTraceRecorder.js.map +1 -1
- package/dist/esm/recorders/observability/RouteRecorder.d.ts +6 -1
- package/dist/esm/recorders/observability/RouteRecorder.js +9 -0
- package/dist/esm/recorders/observability/RouteRecorder.js.map +1 -1
- package/dist/esm/recorders/observability/commentary/commentaryTemplates.js +232 -3
- package/dist/esm/recorders/observability/commentary/commentaryTemplates.js.map +1 -1
- package/dist/events/registry.js +8 -0
- package/dist/events/registry.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/injection-engine/buildInjectionEngineSubflow.js +51 -5
- package/dist/lib/injection-engine/buildInjectionEngineSubflow.js.map +1 -1
- package/dist/lib/injection-engine/entryScorer.js +60 -22
- package/dist/lib/injection-engine/entryScorer.js.map +1 -1
- package/dist/lib/injection-engine/factories/defineMenuHint.js +57 -0
- package/dist/lib/injection-engine/factories/defineMenuHint.js.map +1 -0
- package/dist/lib/injection-engine/factories/defineSkill.js +17 -0
- package/dist/lib/injection-engine/factories/defineSkill.js.map +1 -1
- package/dist/lib/injection-engine/factories/defineStepsHint.js +55 -0
- package/dist/lib/injection-engine/factories/defineStepsHint.js.map +1 -0
- package/dist/lib/injection-engine/index.js +30 -1
- package/dist/lib/injection-engine/index.js.map +1 -1
- package/dist/lib/injection-engine/intentScorer.js +60 -0
- package/dist/lib/injection-engine/intentScorer.js.map +1 -0
- package/dist/lib/injection-engine/llmClassifier.js +144 -0
- package/dist/lib/injection-engine/llmClassifier.js.map +1 -0
- package/dist/lib/injection-engine/routingPolicy.js +134 -0
- package/dist/lib/injection-engine/routingPolicy.js.map +1 -0
- package/dist/lib/injection-engine/skillGraph.js +134 -13
- package/dist/lib/injection-engine/skillGraph.js.map +1 -1
- package/dist/lib/injection-engine/skillGraphCheckup.js +28 -2
- package/dist/lib/injection-engine/skillGraphCheckup.js.map +1 -1
- package/dist/lib/injection-engine/skillIntent.js +199 -0
- package/dist/lib/injection-engine/skillIntent.js.map +1 -0
- package/dist/lib/injection-engine/skillMatch.js +47 -12
- package/dist/lib/injection-engine/skillMatch.js.map +1 -1
- package/dist/lib/injection-engine/skillSteps.js +297 -0
- package/dist/lib/injection-engine/skillSteps.js.map +1 -0
- package/dist/lib/injection-engine/skillTools.js +24 -4
- package/dist/lib/injection-engine/skillTools.js.map +1 -1
- package/dist/lib/injection-engine/types.js.map +1 -1
- package/dist/recorders/observability/AgentThinkingTraceRecorder.js +16 -1
- package/dist/recorders/observability/AgentThinkingTraceRecorder.js.map +1 -1
- package/dist/recorders/observability/RouteRecorder.js +9 -0
- package/dist/recorders/observability/RouteRecorder.js.map +1 -1
- package/dist/recorders/observability/commentary/commentaryTemplates.js +232 -3
- package/dist/recorders/observability/commentary/commentaryTemplates.js.map +1 -1
- package/dist/types/conventions.d.ts +6 -0
- package/dist/types/conventions.d.ts.map +1 -1
- package/dist/types/core/Agent.d.ts +33 -2
- package/dist/types/core/Agent.d.ts.map +1 -1
- package/dist/types/core/agent/AgentBuilder.d.ts +68 -6
- package/dist/types/core/agent/AgentBuilder.d.ts.map +1 -1
- package/dist/types/core/agent/buildAgentChart.d.ts +31 -0
- package/dist/types/core/agent/buildAgentChart.d.ts.map +1 -1
- package/dist/types/core/agent/buildDynamicAgentChart.d.ts.map +1 -1
- package/dist/types/core/agent/buildToolRegistry.d.ts.map +1 -1
- package/dist/types/core/agent/stages/route.d.ts +3 -2
- package/dist/types/core/agent/stages/route.d.ts.map +1 -1
- package/dist/types/core/agent/stages/routeTurn.d.ts +74 -0
- package/dist/types/core/agent/stages/routeTurn.d.ts.map +1 -0
- package/dist/types/core/agent/stages/seed.d.ts +21 -0
- package/dist/types/core/agent/stages/seed.d.ts.map +1 -1
- package/dist/types/core/agent/stages/stepNudge.d.ts +30 -0
- package/dist/types/core/agent/stages/stepNudge.d.ts.map +1 -0
- package/dist/types/core/agent/stages/toolCalls.d.ts +40 -0
- package/dist/types/core/agent/stages/toolCalls.d.ts.map +1 -1
- package/dist/types/core/agent/types.d.ts +25 -0
- package/dist/types/core/agent/types.d.ts.map +1 -1
- package/dist/types/core/runCheckpoint.d.ts +29 -1
- package/dist/types/core/runCheckpoint.d.ts.map +1 -1
- package/dist/types/core/slots/buildToolsSlot.d.ts +32 -0
- package/dist/types/core/slots/buildToolsSlot.d.ts.map +1 -1
- package/dist/types/events/payloads.d.ts +141 -3
- package/dist/types/events/payloads.d.ts.map +1 -1
- package/dist/types/events/registry.d.ts +9 -1
- package/dist/types/events/registry.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/lib/injection-engine/buildInjectionEngineSubflow.d.ts +10 -0
- package/dist/types/lib/injection-engine/buildInjectionEngineSubflow.d.ts.map +1 -1
- package/dist/types/lib/injection-engine/entryScorer.d.ts +20 -2
- package/dist/types/lib/injection-engine/entryScorer.d.ts.map +1 -1
- package/dist/types/lib/injection-engine/factories/defineMenuHint.d.ts +40 -0
- package/dist/types/lib/injection-engine/factories/defineMenuHint.d.ts.map +1 -0
- package/dist/types/lib/injection-engine/factories/defineSkill.d.ts +34 -0
- package/dist/types/lib/injection-engine/factories/defineSkill.d.ts.map +1 -1
- package/dist/types/lib/injection-engine/factories/defineStepsHint.d.ts +40 -0
- package/dist/types/lib/injection-engine/factories/defineStepsHint.d.ts.map +1 -0
- package/dist/types/lib/injection-engine/index.d.ts +7 -0
- package/dist/types/lib/injection-engine/index.d.ts.map +1 -1
- package/dist/types/lib/injection-engine/intentScorer.d.ts +79 -0
- package/dist/types/lib/injection-engine/intentScorer.d.ts.map +1 -0
- package/dist/types/lib/injection-engine/llmClassifier.d.ts +37 -0
- package/dist/types/lib/injection-engine/llmClassifier.d.ts.map +1 -0
- package/dist/types/lib/injection-engine/routingPolicy.d.ts +155 -0
- package/dist/types/lib/injection-engine/routingPolicy.d.ts.map +1 -0
- package/dist/types/lib/injection-engine/skillGraph.d.ts +76 -2
- package/dist/types/lib/injection-engine/skillGraph.d.ts.map +1 -1
- package/dist/types/lib/injection-engine/skillGraphCheckup.d.ts +11 -1
- package/dist/types/lib/injection-engine/skillGraphCheckup.d.ts.map +1 -1
- package/dist/types/lib/injection-engine/skillIntent.d.ts +89 -0
- package/dist/types/lib/injection-engine/skillIntent.d.ts.map +1 -0
- package/dist/types/lib/injection-engine/skillMatch.d.ts +28 -6
- package/dist/types/lib/injection-engine/skillMatch.d.ts.map +1 -1
- package/dist/types/lib/injection-engine/skillSteps.d.ts +186 -0
- package/dist/types/lib/injection-engine/skillSteps.d.ts.map +1 -0
- package/dist/types/lib/injection-engine/skillTools.d.ts +24 -0
- package/dist/types/lib/injection-engine/skillTools.d.ts.map +1 -1
- package/dist/types/lib/injection-engine/types.d.ts +27 -2
- package/dist/types/lib/injection-engine/types.d.ts.map +1 -1
- package/dist/types/recorders/observability/AgentThinkingTraceRecorder.d.ts.map +1 -1
- package/dist/types/recorders/observability/RouteRecorder.d.ts +6 -1
- package/dist/types/recorders/observability/RouteRecorder.d.ts.map +1 -1
- package/dist/types/recorders/observability/commentary/commentaryTemplates.d.ts.map +1 -1
- 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":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;;AAKH,4DAAkE;AAClE,uEAAiE;AAIjE,2DAA4D;AAC5D,uDAA0D;
|
|
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"}
|