agentfootprint 9.83.0 → 9.85.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 (137) hide show
  1. package/CHANGELOG.md +713 -512
  2. package/dist/artifacts/present.js +21 -3
  3. package/dist/artifacts/present.js.map +1 -1
  4. package/dist/artifacts/wants.js +19 -4
  5. package/dist/artifacts/wants.js.map +1 -1
  6. package/dist/core/Agent.js +10 -0
  7. package/dist/core/Agent.js.map +1 -1
  8. package/dist/core/agent/AgentBuilder.js.map +1 -1
  9. package/dist/core/agent/buildToolRegistry.js +137 -0
  10. package/dist/core/agent/buildToolRegistry.js.map +1 -1
  11. package/dist/core/agent/evidence/frames.js +15 -6
  12. package/dist/core/agent/evidence/frames.js.map +1 -1
  13. package/dist/core/agent/outputEnforcement.js +7 -4
  14. package/dist/core/agent/outputEnforcement.js.map +1 -1
  15. package/dist/core/agent/selfCallNotice.js +174 -0
  16. package/dist/core/agent/selfCallNotice.js.map +1 -0
  17. package/dist/core/agent/stages/routeTurn.js +28 -3
  18. package/dist/core/agent/stages/routeTurn.js.map +1 -1
  19. package/dist/core/agent/stages/toolCalls.js +87 -2
  20. package/dist/core/agent/stages/toolCalls.js.map +1 -1
  21. package/dist/core/agent/window/currentRequest.js +11 -13
  22. package/dist/core/agent/window/currentRequest.js.map +1 -1
  23. package/dist/core/agent/window/notice.js +9 -9
  24. package/dist/core/agent/window/notice.js.map +1 -1
  25. package/dist/core/agent/window/summarize.js +9 -9
  26. package/dist/core/agent/window/summarize.js.map +1 -1
  27. package/dist/core/codeRunnerTool.js +25 -6
  28. package/dist/core/codeRunnerTool.js.map +1 -1
  29. package/dist/doors/skill-graph.js +2 -1
  30. package/dist/doors/skill-graph.js.map +1 -1
  31. package/dist/esm/artifacts/present.js +21 -3
  32. package/dist/esm/artifacts/present.js.map +1 -1
  33. package/dist/esm/artifacts/wants.js +19 -4
  34. package/dist/esm/artifacts/wants.js.map +1 -1
  35. package/dist/esm/core/Agent.js +10 -0
  36. package/dist/esm/core/Agent.js.map +1 -1
  37. package/dist/esm/core/agent/AgentBuilder.d.ts +15 -0
  38. package/dist/esm/core/agent/AgentBuilder.js.map +1 -1
  39. package/dist/esm/core/agent/buildToolRegistry.d.ts +137 -0
  40. package/dist/esm/core/agent/buildToolRegistry.js +137 -0
  41. package/dist/esm/core/agent/buildToolRegistry.js.map +1 -1
  42. package/dist/esm/core/agent/evidence/frames.d.ts +9 -4
  43. package/dist/esm/core/agent/evidence/frames.js +13 -5
  44. package/dist/esm/core/agent/evidence/frames.js.map +1 -1
  45. package/dist/esm/core/agent/outputEnforcement.d.ts +1 -2
  46. package/dist/esm/core/agent/outputEnforcement.js +4 -2
  47. package/dist/esm/core/agent/outputEnforcement.js.map +1 -1
  48. package/dist/esm/core/agent/selfCallNotice.d.ts +140 -0
  49. package/dist/esm/core/agent/selfCallNotice.js +169 -0
  50. package/dist/esm/core/agent/selfCallNotice.js.map +1 -0
  51. package/dist/esm/core/agent/stages/routeTurn.js +28 -3
  52. package/dist/esm/core/agent/stages/routeTurn.js.map +1 -1
  53. package/dist/esm/core/agent/stages/toolCalls.d.ts +6 -0
  54. package/dist/esm/core/agent/stages/toolCalls.js +87 -2
  55. package/dist/esm/core/agent/stages/toolCalls.js.map +1 -1
  56. package/dist/esm/core/agent/window/currentRequest.d.ts +9 -3
  57. package/dist/esm/core/agent/window/currentRequest.js +11 -13
  58. package/dist/esm/core/agent/window/currentRequest.js.map +1 -1
  59. package/dist/esm/core/agent/window/notice.d.ts +1 -4
  60. package/dist/esm/core/agent/window/notice.js +5 -6
  61. package/dist/esm/core/agent/window/notice.js.map +1 -1
  62. package/dist/esm/core/agent/window/summarize.d.ts +1 -4
  63. package/dist/esm/core/agent/window/summarize.js +5 -6
  64. package/dist/esm/core/agent/window/summarize.js.map +1 -1
  65. package/dist/esm/core/codeRunnerTool.js +25 -6
  66. package/dist/esm/core/codeRunnerTool.js.map +1 -1
  67. package/dist/esm/doors/skill-graph.d.ts +1 -1
  68. package/dist/esm/doors/skill-graph.js +1 -1
  69. package/dist/esm/doors/skill-graph.js.map +1 -1
  70. package/dist/esm/events/payloads.d.ts +15 -0
  71. package/dist/esm/index.d.ts +1 -0
  72. package/dist/esm/index.js +8 -0
  73. package/dist/esm/index.js.map +1 -1
  74. package/dist/esm/lib/injection-engine/index.d.ts +1 -0
  75. package/dist/esm/lib/injection-engine/index.js +6 -0
  76. package/dist/esm/lib/injection-engine/index.js.map +1 -1
  77. package/dist/esm/lib/injection-engine/skillToolDescriptors.d.ts +29 -0
  78. package/dist/esm/lib/injection-engine/skillToolDescriptors.js +138 -8
  79. package/dist/esm/lib/injection-engine/skillToolDescriptors.js.map +1 -1
  80. package/dist/esm/lib/injection-engine/types.d.ts +54 -0
  81. package/dist/esm/lib/injection-engine/types.js +28 -0
  82. package/dist/esm/lib/injection-engine/types.js.map +1 -1
  83. package/dist/esm/lib/saidByPerson.d.ts +99 -0
  84. package/dist/esm/lib/saidByPerson.js +104 -0
  85. package/dist/esm/lib/saidByPerson.js.map +1 -0
  86. package/dist/esm/maps/engagement/parkCard.js +7 -1
  87. package/dist/esm/maps/engagement/parkCard.js.map +1 -1
  88. package/dist/index.js +14 -3
  89. package/dist/index.js.map +1 -1
  90. package/dist/lib/injection-engine/index.js +9 -2
  91. package/dist/lib/injection-engine/index.js.map +1 -1
  92. package/dist/lib/injection-engine/skillToolDescriptors.js +140 -9
  93. package/dist/lib/injection-engine/skillToolDescriptors.js.map +1 -1
  94. package/dist/lib/injection-engine/types.js +30 -1
  95. package/dist/lib/injection-engine/types.js.map +1 -1
  96. package/dist/lib/saidByPerson.js +111 -0
  97. package/dist/lib/saidByPerson.js.map +1 -0
  98. package/dist/maps/engagement/parkCard.js +7 -1
  99. package/dist/maps/engagement/parkCard.js.map +1 -1
  100. package/dist/types/artifacts/present.d.ts.map +1 -1
  101. package/dist/types/artifacts/wants.d.ts.map +1 -1
  102. package/dist/types/core/Agent.d.ts.map +1 -1
  103. package/dist/types/core/agent/AgentBuilder.d.ts +15 -0
  104. package/dist/types/core/agent/AgentBuilder.d.ts.map +1 -1
  105. package/dist/types/core/agent/buildToolRegistry.d.ts +137 -0
  106. package/dist/types/core/agent/buildToolRegistry.d.ts.map +1 -1
  107. package/dist/types/core/agent/evidence/frames.d.ts +9 -4
  108. package/dist/types/core/agent/evidence/frames.d.ts.map +1 -1
  109. package/dist/types/core/agent/outputEnforcement.d.ts +1 -2
  110. package/dist/types/core/agent/outputEnforcement.d.ts.map +1 -1
  111. package/dist/types/core/agent/selfCallNotice.d.ts +141 -0
  112. package/dist/types/core/agent/selfCallNotice.d.ts.map +1 -0
  113. package/dist/types/core/agent/stages/routeTurn.d.ts.map +1 -1
  114. package/dist/types/core/agent/stages/toolCalls.d.ts +6 -0
  115. package/dist/types/core/agent/stages/toolCalls.d.ts.map +1 -1
  116. package/dist/types/core/agent/window/currentRequest.d.ts +9 -3
  117. package/dist/types/core/agent/window/currentRequest.d.ts.map +1 -1
  118. package/dist/types/core/agent/window/notice.d.ts +1 -4
  119. package/dist/types/core/agent/window/notice.d.ts.map +1 -1
  120. package/dist/types/core/agent/window/summarize.d.ts +1 -4
  121. package/dist/types/core/agent/window/summarize.d.ts.map +1 -1
  122. package/dist/types/doors/skill-graph.d.ts +1 -1
  123. package/dist/types/doors/skill-graph.d.ts.map +1 -1
  124. package/dist/types/events/payloads.d.ts +15 -0
  125. package/dist/types/events/payloads.d.ts.map +1 -1
  126. package/dist/types/index.d.ts +1 -0
  127. package/dist/types/index.d.ts.map +1 -1
  128. package/dist/types/lib/injection-engine/index.d.ts +1 -0
  129. package/dist/types/lib/injection-engine/index.d.ts.map +1 -1
  130. package/dist/types/lib/injection-engine/skillToolDescriptors.d.ts +29 -0
  131. package/dist/types/lib/injection-engine/skillToolDescriptors.d.ts.map +1 -1
  132. package/dist/types/lib/injection-engine/types.d.ts +54 -0
  133. package/dist/types/lib/injection-engine/types.d.ts.map +1 -1
  134. package/dist/types/lib/saidByPerson.d.ts +100 -0
  135. package/dist/types/lib/saidByPerson.d.ts.map +1 -0
  136. package/dist/types/maps/engagement/parkCard.d.ts.map +1 -1
  137. package/package.json +1 -1
@@ -0,0 +1,169 @@
1
+ /**
2
+ * The answer a `read_skill` SELF-CALL gets back (9.84.0).
3
+ *
4
+ * A self-call is `read_skill("X")` from a cursor already standing on X. It used
5
+ * to fall through the skill-graph gate's reachability arm — `makeReachableSkills`
6
+ * filters the cursor out of its own successor set (a MOVE to where you already
7
+ * are is not a move) and `openSkillIds()` excludes every graph-wired skill, so
8
+ * the cursor's own id is in neither half of `hops ∪ open`. The model was told:
9
+ *
10
+ * read_skill("X") is not reachable from here. Reachable skills: …
11
+ *
12
+ * while X's body was in its system prompt and X's tools were in that very call's
13
+ * tool list. Read as a statement about AVAILABILITY — which is how a model reads
14
+ * "not reachable" — that is a flat contradiction of the request it arrived in,
15
+ * and the observed behaviour was to stop and answer that it could not help.
16
+ *
17
+ * ── THE LAW THIS FILE IS WRITTEN AGAINST ──────────────────────────────────
18
+ *
19
+ * A TOOL RESULT IS NOT READ ONCE. It is composed during iteration N, written
20
+ * into `history`, and then read by the model on call N+1 AND ON EVERY CALL
21
+ * AFTER IT for the rest of the turn — including the out-of-budget WRAP-UP,
22
+ * which `callLLM` serves with an EMPTY tool list under a user message saying
23
+ * "Do not request tools".
24
+ *
25
+ * The consequence is the whole design: NO COMPOSE-TIME CHECK CAN MAKE A
26
+ * FORWARD-LOOKING SENTENCE SAFE. A budget test, a posture test, a cursor test
27
+ * — each is true at the instant it runs and each is outlived by the sentence
28
+ * it admitted. Three rounds of this file fixed one clause at a time and each
29
+ * time a different clause was still false, because every one of them was a
30
+ * PREDICTION and the fix was always a better prediction.
31
+ *
32
+ * So the notice makes no predictions at all. Every clause is a fact about ONE
33
+ * already-finished event — the call the model made `read_skill` on — and every
34
+ * clause is anchored to that call by name ("that call"), never by deixis ("the
35
+ * call you just made", which denotes a different call each time it is re-read).
36
+ * A past fact about a named call cannot be falsified by anything that happens
37
+ * afterwards: not by the budget running out, not by a posture refusing a hop,
38
+ * not by a sibling tool in the same batch moving the cursor.
39
+ *
40
+ * ── WHAT WAS DELETED, AND WHY THE NOTICE STILL DOES ITS JOB ───────────────
41
+ *
42
+ * Gone: the exhortation ("Go ahead and act on the request"), the move offer
43
+ * ("read_skill MOVES you somewhere else — from here that would be: beta"), the
44
+ * open-skill offer ("These activate without moving you: gamma"), and the
45
+ * budget clause that was added to gate them. Each was false somewhere:
46
+ *
47
+ * • the exhortation, on the wrap-up call, beside "Do not request tools";
48
+ * • the move offer, on the wrap-up call (a hop is a tool call), under
49
+ * `strictness: 'rails'` (every model hop refused) and under `'guard'` on a
50
+ * decisively-routed turn (every hop not on an outstanding menu refused) —
51
+ * where the sibling posture arm answers a taken-up offer with "read_skill
52
+ * here reaches only the open skills: gamma", contradicting the notice from
53
+ * the arm immediately above it, and spending escalation budget to do so;
54
+ * • the budget clause, because a budget read at compose time is a claim
55
+ * about a call that has not happened.
56
+ *
57
+ * The notice's JOB is to stop a model concluding its capability is gone. It
58
+ * does that by stating what it held, not by promising what it may do: you were
59
+ * standing in this skill, its instructions were in that call's prompt, its
60
+ * tools were on that call's wire, and asking took nothing away. A model that
61
+ * reads those four facts has no ground left for "I cannot help".
62
+ *
63
+ * The forward-looking half had a rightful owner all along, and it is not a
64
+ * tool result: the `read_skill` DESCRIPTION is recomposed on every single call,
65
+ * so it can safely speak in the present ("You are in 'beta'."), it is filtered
66
+ * for per-role visibility at source, and it is absent from the wrap-up because
67
+ * the whole tool list is. One owner for the present tense, one for the past,
68
+ * and they can no longer disagree — which is the only property that survived
69
+ * every round of this bug.
70
+ */
71
+ /**
72
+ * The skill's tools, as of the call the model just made — or `undefined` when
73
+ * that cannot be established, which is not the same answer and must not be
74
+ * reported as one.
75
+ *
76
+ * `undefined` means the notice says nothing about tools at all. It happens when
77
+ * the tools slot composed no per-iteration list (`reactMode: 'classic'` caches
78
+ * the slot, and `callLLM` falls back to its build-time schemas), or when the
79
+ * cursor's skill is not in the active set. Silence is the only honest output
80
+ * there: the alternative is a sentence naming tools the model may not have.
81
+ *
82
+ * The out-of-budget wrap-up is NOT one of these cases and must not be modelled
83
+ * as one. Its empty tool list belongs to a LATER call; the wire read here is
84
+ * always the one the model was really handed on the call being answered, and
85
+ * the notice speaks of that call and only that call.
86
+ */
87
+ export function selfSkillTools(skillId, activeInjections, wire) {
88
+ if (wire === undefined || activeInjections === undefined)
89
+ return undefined;
90
+ const mine = activeInjections.find((i) => i.id === skillId);
91
+ if (mine === undefined)
92
+ return undefined;
93
+ const declared = (mine.inject.tools ?? []).map((t) => t.schema.name);
94
+ const onWire = new Set(wire.map((s) => s.name));
95
+ return { declared, served: declared.filter((n) => onWire.has(n)) };
96
+ }
97
+ /**
98
+ * The self-call's tool result.
99
+ *
100
+ * NOT a refusal to the MODEL, and deliberately so. The gate's other two arms
101
+ * refuse because the model asked for something it may not have; a self-call
102
+ * asks for a body it already holds, and the useful reply is the fact — where
103
+ * you stood, and what rode that call — not a decline. It is still counted as a
104
+ * refusal by the ESCALATION BUDGET (`noteSkillRefusal`, beside the emit), and
105
+ * those two facts do not fight: the budget is not measuring how the sentence
106
+ * reads, it is measuring a model that keeps asking the graph where it is
107
+ * instead of working, which is exactly the stuck run the budget escalates.
108
+ *
109
+ * It still OVERWRITES the tool's own result the way every other arm does,
110
+ * because that overwrite is what puts the authoritative sentence in front of
111
+ * the governance rules, the refusal cap and the after-tool moment, on both
112
+ * channels, before the model reads anything.
113
+ *
114
+ * The one thing not overwritten is a BODY. The live case is `surfaceMode:
115
+ * 'both'` — `'tool-only'` cannot arise here, because `skillBodyDelivery`
116
+ * refuses it at BUILD time for anything but an `llm-activated` skill and only a
117
+ * graph-wired skill can be the cursor. Under `'both'` the body is in the system
118
+ * prompt AND rides the tool result, and the second copy is the whole point of
119
+ * the mode: recency-first delivery, the body at the end of the window rather
120
+ * than only at the top of the prompt. Dropping it here would quietly demote
121
+ * `'both'` to `'system-prompt'` on the one call that asked to re-read.
122
+ *
123
+ * TENSE IS LOAD-BEARING, AND SO IS DEIXIS. Every clause below is past tense
124
+ * about a single named call, and every reference to that call is "that call" —
125
+ * bound by the opening clause, which says which call it was. "The call you just
126
+ * made" was the earlier wording and it is not safe: re-read four calls later it
127
+ * denotes call four, and the tools it names rode call one.
128
+ *
129
+ * There are exactly two present-tense phrases in the output and both are
130
+ * timeless rather than temporal: "It declares no tools of its own" (a
131
+ * declaration is fixed when the skill is defined and cannot vary within a run)
132
+ * and "Its instructions are repeated below" (the body is appended to this very
133
+ * string, so the sentence is true wherever the string is read).
134
+ */
135
+ export function selfCallNotice(args) {
136
+ const { skillId, tools, body } = args;
137
+ // "were in that call's system prompt" is a claim about the prompt, and the
138
+ // evidence for it is that the skill was in the ACTIVE set for that call —
139
+ // which is exactly what `tools !== undefined` establishes (see
140
+ // `selfSkillTools`). With no body to append and no proof it was mounted, the
141
+ // notice says nothing about the instructions rather than asserting where
142
+ // they were.
143
+ const bodyClause = body !== undefined
144
+ ? `Its instructions are repeated below. `
145
+ : tools !== undefined
146
+ ? `Its instructions were in that call's system prompt. `
147
+ : '';
148
+ const toolClause = tools === undefined
149
+ ? ''
150
+ : tools.declared.length === 0
151
+ ? `It declares no tools of its own. `
152
+ : tools.served.length > 0
153
+ ? `Its own tools were on that call's tool list: ${tools.served.join(', ')}.`
154
+ : `None of its own tools were on that call's tool list (${tools.declared.join(', ')} ` +
155
+ `${tools.declared.length === 1 ? 'was' : 'were'} withheld).`;
156
+ // The opening clause is what binds "that call" for every clause after it, so
157
+ // it names the event rather than the state: not where the cursor IS, but
158
+ // where it stood when this call was made. A sibling tool in the SAME batch
159
+ // can fire a step edge and move the cursor before the model reads this — the
160
+ // read_skill description in that request will then say "You are in 'beta'",
161
+ // and the two must not contradict each other. Only one of them is entitled
162
+ // to the present tense, and it is the one recomposed on every call.
163
+ const notice = `read_skill("${skillId}") named the skill you were already standing in when you ` +
164
+ `made that call, so the cursor did not move — nothing was activated, and nothing ` +
165
+ `was taken away. ${bodyClause}${toolClause}`;
166
+ const trimmed = notice.trimEnd();
167
+ return body === undefined ? trimmed : `${trimmed}\n\n${body}`;
168
+ }
169
+ //# sourceMappingURL=selfCallNotice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selfCallNotice.js","sourceRoot":"","sources":["../../../../src/core/agent/selfCallNotice.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqEG;AAaH;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAe,EACf,gBAAwD,EACxD,IAA0C;IAE1C,IAAI,IAAI,KAAK,SAAS,IAAI,gBAAgB,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3E,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;IAC5D,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACrE,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,UAAU,cAAc,CAAC,IAK9B;IACC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IACtC,2EAA2E;IAC3E,0EAA0E;IAC1E,+DAA+D;IAC/D,6EAA6E;IAC7E,yEAAyE;IACzE,aAAa;IACb,MAAM,UAAU,GACd,IAAI,KAAK,SAAS;QAChB,CAAC,CAAC,uCAAuC;QACzC,CAAC,CAAC,KAAK,KAAK,SAAS;YACrB,CAAC,CAAC,sDAAsD;YACxD,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,UAAU,GACd,KAAK,KAAK,SAAS;QACjB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;YAC7B,CAAC,CAAC,mCAAmC;YACrC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;gBACzB,CAAC,CAAC,gDAAgD,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBAC5E,CAAC,CAAC,wDAAwD,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;oBACpF,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,aAAa,CAAC;IACnE,6EAA6E;IAC7E,yEAAyE;IACzE,2EAA2E;IAC3E,6EAA6E;IAC7E,4EAA4E;IAC5E,2EAA2E;IAC3E,oEAAoE;IACpE,MAAM,MAAM,GACV,eAAe,OAAO,2DAA2D;QACjF,kFAAkF;QAClF,mBAAmB,UAAU,GAAG,UAAU,EAAE,CAAC;IAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;IACjC,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,OAAO,IAAI,EAAE,CAAC;AAChE,CAAC"}
@@ -60,9 +60,34 @@ export function makeRouteTurnStage(deps) {
60
60
  return async (scope) => {
61
61
  const env = scope.$getEnv();
62
62
  let inherited = scope.currentSkillId;
63
- // Deploy honesty: an inherited id that is not a node of the CURRENTLY
64
- // mounted graph is dropped (cold start), never silently parked on a node
65
- // that does not exist.
63
+ // ── THE CURSOR LAW ────────────────────────────────────────────────
64
+ //
65
+ // Position belongs to the HOST and the TRACE, never to the transcript.
66
+ //
67
+ // The clause below is its hardest one, and it shipped implemented and
68
+ // unnamed. Deploy honesty: an inherited id that is not a node of the
69
+ // CURRENTLY mounted graph is dropped (cold start), never silently parked
70
+ // on a node that does not exist.
71
+ //
72
+ // Read the three owners in the order they appear here. The HOST supplies
73
+ // the candidate — `scope.currentSkillId`, restored from a checkpoint the
74
+ // caller stored. The host also OWNS the graph, so the host is the only
75
+ // party who can say whether that id still names a node, which is what
76
+ // `deps.isNode` asks. The TRACE keeps the answer: whatever survives lands
77
+ // on `turn_routed`, and what did not survive lands there too, as
78
+ // `droppedResume`, because a position that was silently discarded is a
79
+ // position nobody can audit.
80
+ //
81
+ // The TRANSCRIPT is the party with no vote, and it is the one that looks
82
+ // most authoritative. After a deploy that retired a skill, the restored
83
+ // conversation is still full of it: a `read_skill` result announcing its
84
+ // activation, its body in an earlier system prompt, its tools' results.
85
+ // None of that is evidence of where the cursor is — it is evidence of
86
+ // where the cursor WAS, in a graph that is no longer mounted. Reading
87
+ // position back out of it would let a deleted skill keep routing a live
88
+ // conversation. So the id is judged against the mounted graph and nothing
89
+ // else, and a turn that cannot place its inherited cursor starts cold and
90
+ // says so, rather than parking on a node no resolver can move off.
66
91
  let droppedResume;
67
92
  if (inherited !== undefined && !deps.isNode(inherited)) {
68
93
  droppedResume = { id: inherited, reason: 'unknown-skill' };
@@ -1 +1 @@
1
- {"version":3,"file":"routeTurn.js","sourceRoot":"","sources":["../../../../../src/core/agent/stages/routeTurn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAOxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;AAErF,OAAO,EACL,WAAW,GAGZ,MAAM,gDAAgD,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sDAAsD,CAAC;AAE3F,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AA6CjE,+EAA+E;AAC/E,MAAM,YAAY,GAAG,MAAM,CAAC;AAC5B,sEAAsE;AACtE,MAAM,YAAY,GAAG,MAAM,CAAC;AAiB5B,MAAM,UAAU,kBAAkB,CAAC,IAAmB;IACpD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;IAC9B,OAAO,KAAK,EAAE,KAA6B,EAAiB,EAAE;QAC5D,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QAC5B,IAAI,SAAS,GAAG,KAAK,CAAC,cAAoC,CAAC;QAE3D,sEAAsE;QACtE,yEAAyE;QACzE,uBAAuB;QACvB,IAAI,aAAsD,CAAC;QAC3D,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YACvD,aAAa,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;YAC3D,KAAK,CAAC,cAAc,GAAG,SAAS,CAAC;YACjC,IAAI,SAAS,EAAE,EAAE,CAAC;gBAChB,sCAAsC;gBACtC,OAAO,CAAC,IAAI,CACV,+DAA+D,SAAS,aAAa;oBACnF,8EAA8E;oBAC9E,wCAAwC,CAC3C,CAAC;YACJ,CAAC;YACD,SAAS,GAAG,SAAS,CAAC;QACxB,CAAC;QAED,MAAM,GAAG,GAAqB;YAC5B,SAAS,EAAG,KAAK,CAAC,SAAgC,IAAI,CAAC;YACvD,WAAW,EAAG,KAAK,CAAC,WAAkC,IAAI,EAAE;YAC5D,OAAO,EAAG,KAAK,CAAC,OAAmD,IAAI,EAAE;YACzE,qBAAqB,EAAG,KAAK,CAAC,qBAAuD,IAAI,EAAE;YAC3F,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC;SAC9D,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC1D,yEAAyE;QACzE,wEAAwE;QACxE,kEAAkE;QAClE,MAAM,MAAM,GAAG,QAAQ,KAAK,iBAAiB,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3F,IAAI,QAAQ,KAAK,iBAAiB,IAAI,SAAS,EAAE,EAAE,CAAC;YAClD,OAAO,CAAC,IAAI,CACV,yEAAyE;gBACvE,oEAAoE;gBACpE,4CAA4C,CAC/C,CAAC;QACJ,CAAC;QACD,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAEtE,IAAI,OAAO,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAEhG,IAAI,OAAO,KAAK,SAAS,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YACzD,yEAAyE;YACzE,qEAAqE;YACrE,OAAO;QACT,CAAC;QAED,yEAAyE;QACzE,iDAAiD;QACjD,IAAI,OAAO,EAAE,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAClE,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;YACnC,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;QACrC,CAAC;QAED,sEAAsE;QACtE,oEAAoE;QACpE,iEAAiE;QACjE,iEAAiE;QACjE,qEAAqE;QACrE,wEAAwE;QACxE,IAAI,aAAgD,CAAC;QACrD;;wEAEgE;QAChE,IAAI,eAA4C,CAAC;QACjD,IACE,IAAI,CAAC,OAAO,KAAK,SAAS;YAC1B,OAAO,KAAK,SAAS;YACrB,OAAO,CAAC,EAAE,KAAK,MAAM;YACrB,OAAO,CAAC,OAAO,KAAK,SAAS;YAC7B,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAC1B,CAAC;YACD,iEAAiE;YACjE,gEAAgE;YAChE,MAAM,YAAY,GAChB,IAAI,CAAC,OAAO,CAAC,KAAK;gBAClB,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAE,KAAK,CAAC,aAAoC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACtF,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;YAC5B,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,KAAK,IAAI,IAAI,SAAS,KAAK,SAAS,CAAC;YAC5E,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC;gBAC9B,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;gBAC/B,KAAK,EAAE,YAAY;gBACnB,IAAI;gBACJ,WAAW,EAAE,GAAG,CAAC,WAAW;gBAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,WAAW;gBACX,SAAS;gBACT,MAAM,EAAE,GAAG,CAAC,MAAM;aACnB,CAAC,CAAC;YACH,aAAa,GAAG;gBACd,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI;gBACpC,KAAK,EAAE,YAAY;gBACnB,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,CAAC;aACxC,CAAC;YACF,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;gBACpD,+DAA+D;gBAC/D,oEAAoE;gBACpE,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;gBACpD,eAAe,GAAG,MAAM,CAAC;YAC3B,CAAC;iBAAM,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;gBACnC,oEAAoE;gBACpE,mEAAmE;gBACnE,+DAA+D;gBAC/D,mEAAmE;gBACnE,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,SAAU,EAAE,CAAC;gBAC3D,eAAe,GAAG,MAAM,CAAC;YAC3B,CAAC;YACD,wEAAwE;QAC1E,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;QAC1D,6EAA6E;QAC7E,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,KAAK,OAAO,CAAC;QAC1C,MAAM,OAAO,GAAG,KAAK,IAAI,OAAO,EAAE,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,IAAI,MAAM,CAAC;QAEjF,SAAS,CAAC,KAAK,EAAE,kCAAkC,EAAE;YACnD,EAAE,EAAE,OAAO;YACX,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;YACnD,GAAG,CAAC,OAAO,EAAE,EAAE,KAAK,SAAS,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;YACpD,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;YAChE,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACvF,GAAG,CAAC,OAAO,EAAE,QAAQ,KAAK,SAAS,IAAI,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC7E,GAAG,CAAC,OAAO,EAAE,QAAQ,KAAK,SAAS,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtE,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACxE,GAAG,CAAC,OAAO,EAAE,WAAW,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC;YAC/E,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YAC1E,MAAM,EAAE;gBACN,aAAa,EAAE,MAAM,CAAC,aAAa;gBACnC,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,GAAG,CAAC,cAAc,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;aAC/D;YACD,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;YAChE,GAAG,CAAC,aAAa,KAAK,SAAS,IAAI,EAAE,aAAa,EAAE,CAAC;YACrD,GAAG,CAAC,aAAa,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,aAAa,EAAE,EAAE,CAAC;SACtE,CAAC,CAAC;QAEH,oEAAoE;QACpE,yEAAyE;QACzE,2EAA2E;QAC3E,2EAA2E;QAC3E,sEAAsE;QACtE,sEAAsE;QACtE,oEAAoE;QACpE,qEAAqE;QACrE,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO;QAClC,uEAAuE;QACvE,yEAAyE;QACzE,qEAAqE;QACrE,+DAA+D;QAC/D,MAAM,oBAAoB,GAAG,eAAe,KAAK,SAAS,CAAC;QAC3D,MAAM,SAAS,GAAc;YAC3B,EAAE,EAAE,OAAO;YACX,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;YACnD,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,SAAS,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;YACnD,uEAAuE;YACvE,0EAA0E;YAC1E,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YACzE,GAAG,CAAC,CAAC,KAAK;gBACR,oBAAoB;gBACpB,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACrE,GAAG,CAAC,CAAC,KAAK;gBACR,oBAAoB;gBACpB,OAAO,CAAC,WAAW,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC;YAC5E,GAAG,CAAC,CAAC,KAAK;gBACR,oBAAoB;gBACpB,OAAO,CAAC,OAAO,KAAK,SAAS;gBAC7B,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI;gBAC9B,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;aAC7E,CAAC;SACL,CAAC;QACF,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IAC9B,CAAC,CAAC;AACJ,CAAC;AAED;;yDAEyD;AACzD,KAAK,UAAU,aAAa,CAC1B,cAA+C;IAE/C,IAAI,CAAC,cAAc;QAAE,OAAO,EAAE,CAAC;IAC/B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;QAC/B,OAAO,KAAK,YAAY,OAAO,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,iBAAiB,CAAC;IAC3B,CAAC;AACH,CAAC;AAED;mEACmE;AACnE,KAAK,UAAU,UAAU,CACvB,IAAmB,EACnB,IAAqB,EACrB,GAAqB,EACrB,SAA6B,EAC7B,MAA2B,EAC3B,eAAkC,EAClC,MAA+B;IAE/B,MAAM,IAAI,GAAG,SAAS,KAAK,SAAS,CAAC;IAErC,sEAAsE;IACtE,oDAAoD;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,uEAAuE;QACvE,yEAAyE;QACzE,qEAAqE;QACrE,OAAO;YACL,EAAE,EAAE,OAAO;YACX,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,QAAQ,EAAE,IAAI;YACd,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;SACnE,CAAC;IACJ,CAAC;IAED,iDAAiD;IACjD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,UAAU,GAAsB,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,CAAC;YACpF,uEAAuE;YACvE,4DAA4D;YAC5D,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAU,CAAC,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI;gBACT,CAAC,CAAC,WAAW,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;gBACjE,CAAC,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,SAAU,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QAChE,CAAC;QACD,IAAI,MAA8B,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG;gBACZ,OAAO,EAAE,GAAG,CAAC,WAAW;gBACxB,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI;oBACjC,WAAW,EAAE,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;iBACvD,CAAC;aACH,CAAC;YACF,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;YAC1D,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9F,CAAC;QACD,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE;YACvE,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;YAC1D,GAAG,CAAC,MAAM,CAAC,WAAW,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC;SAC7E,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACnF,CAAC;IAED,0EAA0E;IAC1E,+CAA+C;IAC/C,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACpC,IAAI,OAAqB,CAAC;QAC1B,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,iBAAiB,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;QAC7F,CAAC;QACD,wEAAwE;QACxE,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,CAAC;YAChF,yEAAyE;YACzE,oEAAoE;YACpE,8DAA8D;YAC9D,MAAM,GAAG,CAAC,GAAG,MAAM,EAAE,EAAE,EAAE,EAAE,SAAU,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YACrB,OAAO,IAAI;gBACT,CAAC,CAAC,WAAW,CAAC,eAAe,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC;gBAChE,CAAC,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,SAAU,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;QACnE,MAAM,CAAC,GAAG,WAAW,CACnB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EACjD,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAC5B,IAAI,CAAC,MAAM,EACX,EAAE,CACH,CAAC;QACF,OAAO,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;IAClF,CAAC;IAED,yEAAyE;IACzE,yEAAyE;IACzE,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,SAAU,EAAE,CAAC;IACvD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,mEAAmE;AACnE,SAAS,QAAQ,CACf,CAAe,EACf,UAAkB,EAClB,IAAa,EACb,SAA6B,EAC7B,eAAkC,EAClC,MAA0B;IAE1B,MAAM,OAAO,GAAG;QACd,MAAM,EAAE,UAAU;QAClB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QACnF,GAAG,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,IAAI,EAAE,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC;QAChE,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,CAAC;KACxC,CAAC;IACF,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,MAAM;YACT,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC;QAChD,KAAK,MAAM;YACT,sEAAsE;YACtE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,SAAU,EAAE,GAAG,OAAO,EAAE,CAAC;QAC1D,KAAK,MAAM;YACT,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;QAC7F,KAAK,WAAW;YACd,qEAAqE;YACrE,oBAAoB;YACpB,OAAO;gBACL,EAAE,EAAE,MAAM;gBACV,OAAO,EAAE,eAAe;gBACxB,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;gBACnC,GAAG,OAAO;aACX,CAAC;IACN,CAAC;AACH,CAAC;AAED;uEACuE;AACvE,SAAS,iBAAiB,CACxB,GAAY,EACZ,UAAkB,EAClB,IAAa,EACb,SAA6B,EAC7B,eAAkC,EAClC,MAA0B;IAE1B,IAAI,SAAS,EAAE,EAAE,CAAC;QAChB,sCAAsC;QACtC,OAAO,CAAC,IAAI,CACV,kCAAkC,UAAU,qBAC1C,IAAI;YACF,CAAC,CAAC,yCAAyC;YAC3C,CAAC,CAAC,4CACN,yDACE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CACjD,EAAE,CACH,CAAC;IACJ,CAAC;IACD,OAAO,IAAI;QACT,CAAC,CAAC,WAAW,CAAC,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC;QACzD,CAAC,CAAC;YACE,EAAE,EAAE,YAAY;YAChB,EAAE,EAAE,SAAU;YACd,MAAM,EAAE,UAAU;YAClB,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,CAAC;SACxC,CAAC;AACR,CAAC;AAED,SAAS,WAAW,CAClB,OAA0B,EAC1B,WAAoB,EACpB,UAA8B,EAC9B,MAA0B;IAE1B,OAAO;QACL,EAAE,EAAE,MAAM;QACV,OAAO;QACP,GAAG,CAAC,WAAW,IAAI,EAAE,WAAW,EAAE,CAAC;QACnC,GAAG,CAAC,UAAU,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QACvD,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,CAAC;KACxC,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,KAAK,UAAU,UAAU,CAAC,IASzB;IACC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;QACnD,OAAO,KAAK,SAAS,CAAC,EAAE,KAAK,SAAS,CAAC,MAAM,EAAE,CAAC;IAClD,CAAC,CAAC,CAAC;IACH,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,KAAK,YAAY,iCAAiC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IAClF,CAAC;IACD,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;IAC7F,MAAM,YAAY,GAChB,4DAA4D;QAC5D,UAAU,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;QAChC,kFAAkF;QAClF,IAAI,YAAY,wBAAwB,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC;YACvC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,YAAY;YACZ,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;YACvD,OAAO;YACP,QAAQ,EAAE,YAAY;YACtB,QAAQ,EAAE;gBACR,IAAI,EAAE,YAAY;gBAClB,WAAW,EAAE,8DAA8D,YAAY,aAAa;gBACpG,OAAO,EAAE,OAAO;gBAChB,cAAc,EAAE,sBAAsB;aACvC;YACD,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;SAC1D,CAAC,CAAC;QACH,OAAO,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;IACtD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,SAAS,EAAE,EAAE,CAAC;YAChB,sCAAsC;YACtC,OAAO,CAAC,IAAI,CACV,gFAAgF;gBAC9E,6EAA6E;gBAC7E,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACxD,CAAC;QACJ,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;kEACkE;AAClE,SAAS,aAAa,CACpB,OAAoC,EACpC,MAAc;IAEd,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAChE,OAAO,KAAK;SACT,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC;SAC1D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAA4B,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;SAC1E,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"routeTurn.js","sourceRoot":"","sources":["../../../../../src/core/agent/stages/routeTurn.ts"],"names":[],"mappings":"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"}
@@ -251,6 +251,12 @@ export interface ToolCallsHandlerDeps {
251
251
  * • `'rails'` — routing picks are refused outright: rules/scorer resolve
252
252
  * turn starts, declared routes handle transitions.
253
253
  * Same graph, same trace: postures change refusal behavior only.
254
+ *
255
+ * Read only by the `read_skill` gate below, and that is the whole scope:
256
+ * `applyToolEffects` never consults it, because a `propose-transition`
257
+ * comes from a tool — the author's own code — and is admitted under every
258
+ * posture against reachability alone. See `SkillGraphOptions.strictness`
259
+ * (AgentBuilder.ts), which states the exemption for authors.
254
260
  */
255
261
  readonly skillStrictness?: 'guard' | 'rails';
256
262
  /**
@@ -49,6 +49,8 @@ import { typedEmit } from '../../../recorders/core/typedEmit.js';
49
49
  import { extractSequence } from '../../../security/extractSequence.js';
50
50
  import { skillTarget } from '../../../security/skillTarget.js';
51
51
  import { menuOutstanding } from '../../../lib/injection-engine/routingPolicy.js';
52
+ import { skillActivationConfirmation } from '../../../lib/injection-engine/skillToolDescriptors.js';
53
+ import { selfCallNotice, selfSkillTools } from '../selfCallNotice.js';
52
54
  import { parkedMemberIds } from '../../../maps/engagement/types.js';
53
55
  import { unconfiguredCredentialProvider } from '../../../identity/types.js';
54
56
  import { bindArtifacts, unconfiguredArtifacts, } from '../../../artifacts/capability.js';
@@ -701,8 +703,14 @@ export function buildToolCallsHandler(deps) {
701
703
  return plan ? readSkillStepIntro(plan) : '';
702
704
  };
703
705
  // ── Escalate-on-evidence (9.19.0) — the refusal budget ─────────────────
704
- // Called beside BOTH `skill.rejected` emit sites (reachability + posture):
705
- // real recorded refusals are the only evidence that counts. At the
706
+ // Called beside ALL THREE `skill.rejected` emit sites — self-call,
707
+ // reachability and posture: real recorded refusals are the only evidence that
708
+ // counts. The self-call site is deliberate and worth stating, because the
709
+ // sentence it composes is NOT a refusal to the model (see `selfCallNotice`):
710
+ // what the budget measures is not how a message reads, it is a model that
711
+ // keeps asking the graph where it is instead of working — the stuck run this
712
+ // budget exists to escalate. Both facts hold at once, and neither comment
713
+ // gets to imply the other away. At the
706
714
  // declared threshold the flip is committed (`skillEscalated` — the fact
707
715
  // callLLM's brainFor reads) and `skill.escalated` fires ONCE; the counter
708
716
  // keeps counting so the record shows the whole loop. Gated on the policy
@@ -2510,6 +2518,81 @@ export function buildToolCallsHandler(deps) {
2510
2518
  // Admitted. Nothing to refuse and no posture to apply: this is
2511
2519
  // not a hop, and a posture governs routing, not engagement.
2512
2520
  }
2521
+ else if (currentSkillId !== undefined && reqId === currentSkillId) {
2522
+ // ── The SELF-CALL arm (9.84.0) — BEFORE reachability ─────────
2523
+ // The cursor is in neither half of `allowed`, by construction:
2524
+ // `makeReachableSkills` filters it out of its own successor set
2525
+ // and `openSkillIds()` excludes every graph-wired skill. So a
2526
+ // pick of the skill the model is ALREADY IN fell through to the
2527
+ // reachability arm and came back "not reachable from here" —
2528
+ // about the one skill whose body was in the prompt and whose
2529
+ // tools were in that same call's tool list. Models read that as
2530
+ // "unavailable" and stop, which is exactly what happened in the
2531
+ // field, three times in one day.
2532
+ //
2533
+ // It stays a REJECTION mechanically — no activation to append
2534
+ // (the cursor already activates it), no hop (`skillHop` is false
2535
+ // for the cursor anyway), and the refusal cap still counts it,
2536
+ // because a self-call LOOP is precisely the stuck model that
2537
+ // budget exists to escalate. What changes is the sentence: an
2538
+ // acknowledgement of where the model stands, and — named from
2539
+ // this call's own wire list, never from the declaration — what
2540
+ // it can call right now. `reason` on the event is what lets a
2541
+ // consumer tell the two apart without comparing ids.
2542
+ //
2543
+ // Ordered after re-engagement on purpose: a parked map member
2544
+ // picked at its own cursor is a genuine re-engagement request,
2545
+ // and re-engaging it beats telling the model about tools that
2546
+ // the park has just taken off the wire.
2547
+ skillRejected = true;
2548
+ // The wire the model was ACTUALLY handed on THIS call — the one
2549
+ // the notice speaks about and the only one it may speak about.
2550
+ // Read unconditionally: a `scope.wrapUpAsked` guard here could
2551
+ // never fire. This stage runs only on the Route decider's
2552
+ // `'tool-calls'` branch, which it takes only while
2553
+ // `iteration < maxIterations`; `wrapUpStage` raises the latch one
2554
+ // iteration PAST that, so every self-call is composed with the
2555
+ // latch still down.
2556
+ const wire = scope.dynamicToolSchemas;
2557
+ // No routing map is passed, and that is the fix rather than an
2558
+ // omission. A tool result is re-read on every later call of the
2559
+ // turn, so any id named here as somewhere `read_skill` could go
2560
+ // is a PREDICTION — and three separate mechanisms falsify it
2561
+ // after this line has run: the budget (a hop is a tool call, and
2562
+ // the wrap-up dispatches none), the POSTURE arm forty lines below
2563
+ // (`rails` refuses every model hop; `guard` refuses every hop off
2564
+ // an outstanding menu, which is the default state of a decisively
2565
+ // routed turn), and the cursor itself (a sibling tool in this
2566
+ // very batch can fire a step edge). Passing `hops` through the
2567
+ // hidden-id filter fixed only the third-party leak and left all
2568
+ // three staleness paths open; the notice contradicting the
2569
+ // posture arm's own refusal — and costing a refusal from the
2570
+ // escalation budget to find out — was the live bug. The routing
2571
+ // map belongs to the `read_skill` DESCRIPTION, which is
2572
+ // recomposed on every call and is therefore never stale.
2573
+ result = selfCallNotice({
2574
+ skillId: reqId,
2575
+ tools: selfSkillTools(reqId, scope.activeInjections, wire),
2576
+ // A body only exists under `surfaceMode: 'both'` (`'tool-only'`
2577
+ // is refused at build for anything a graph routes, and only a
2578
+ // graph-wired skill can be the cursor); every other mode
2579
+ // returns the activation confirmation, which would promise an
2580
+ // activation that is not pending. `ceilingRefused` is the third
2581
+ // shape `result` can hold — a `resultCeiling`/`resultColumns`
2582
+ // refusal composed above — and it is nobody's instructions.
2583
+ ...(typeof result === 'string' &&
2584
+ !ceilingRefused &&
2585
+ result !== skillActivationConfirmation(reqId) && { body: result }),
2586
+ });
2587
+ typedEmit(scope, 'agentfootprint.skill.rejected', {
2588
+ requestedId: reqId,
2589
+ currentSkillId,
2590
+ allowed,
2591
+ iteration,
2592
+ reason: 'self-call',
2593
+ });
2594
+ noteSkillRefusal(scope, iteration);
2595
+ }
2513
2596
  else if (!allowed.includes(reqId)) {
2514
2597
  skillRejected = true;
2515
2598
  result = skillRefusal(reqId, allowed, deps.skillGraphIsTree === true);
@@ -2518,6 +2601,7 @@ export function buildToolCallsHandler(deps) {
2518
2601
  ...(currentSkillId !== undefined && { currentSkillId }),
2519
2602
  allowed,
2520
2603
  iteration,
2604
+ reason: 'unreachable',
2521
2605
  });
2522
2606
  noteSkillRefusal(scope, iteration);
2523
2607
  }
@@ -2540,6 +2624,7 @@ export function buildToolCallsHandler(deps) {
2540
2624
  allowed,
2541
2625
  iteration,
2542
2626
  posture: deps.skillStrictness,
2627
+ reason: 'posture',
2543
2628
  });
2544
2629
  noteSkillRefusal(scope, iteration);
2545
2630
  }