agentfootprint 8.6.0 → 8.8.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 +12 -4
- package/CLAUDE.md +4 -2
- package/README.md +1 -1
- package/ai-instructions/claude-code/SKILL.md +1 -1
- package/ai-instructions/setup.sh +0 -0
- package/bin/agentfootprint-lint-tools.mjs +0 -0
- package/dist/core/agent/AgentBuilder.js +104 -0
- package/dist/core/agent/AgentBuilder.js.map +1 -1
- package/dist/core/agent/buildAgentChart.js +12 -1
- package/dist/core/agent/buildAgentChart.js.map +1 -1
- package/dist/core/agent/buildDynamicAgentChart.js +12 -1
- package/dist/core/agent/buildDynamicAgentChart.js.map +1 -1
- package/dist/core/agent/memoryRecallInjections.js +100 -10
- package/dist/core/agent/memoryRecallInjections.js.map +1 -1
- package/dist/core/agent/stages/deliver.js.map +1 -1
- package/dist/core/slots/buildSystemPromptSlot.js +10 -0
- package/dist/core/slots/buildSystemPromptSlot.js.map +1 -1
- package/dist/core/slots/buildToolsSlot.js +77 -0
- package/dist/core/slots/buildToolsSlot.js.map +1 -1
- package/dist/core/slots/helpers.js +12 -10
- package/dist/core/slots/helpers.js.map +1 -1
- package/dist/esm/core/agent/AgentBuilder.js +104 -0
- package/dist/esm/core/agent/AgentBuilder.js.map +1 -1
- package/dist/esm/core/agent/buildAgentChart.js +13 -2
- package/dist/esm/core/agent/buildAgentChart.js.map +1 -1
- package/dist/esm/core/agent/buildDynamicAgentChart.js +13 -2
- package/dist/esm/core/agent/buildDynamicAgentChart.js.map +1 -1
- package/dist/esm/core/agent/memoryRecallInjections.d.ts +13 -3
- package/dist/esm/core/agent/memoryRecallInjections.js +101 -11
- package/dist/esm/core/agent/memoryRecallInjections.js.map +1 -1
- package/dist/esm/core/agent/stages/deliver.d.ts +6 -3
- package/dist/esm/core/agent/stages/deliver.js.map +1 -1
- package/dist/esm/core/slots/buildSystemPromptSlot.js +10 -0
- package/dist/esm/core/slots/buildSystemPromptSlot.js.map +1 -1
- package/dist/esm/core/slots/buildToolsSlot.js +78 -1
- package/dist/esm/core/slots/buildToolsSlot.js.map +1 -1
- package/dist/esm/core/slots/helpers.d.ts +11 -2
- package/dist/esm/core/slots/helpers.js +11 -9
- package/dist/esm/core/slots/helpers.js.map +1 -1
- package/dist/esm/events/payloads.d.ts +92 -0
- package/dist/esm/events/registry.d.ts +5 -1
- package/dist/esm/events/registry.js +4 -0
- package/dist/esm/events/registry.js.map +1 -1
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.js +6 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/fnv1a.d.ts +16 -0
- package/dist/esm/lib/fnv1a.js +24 -0
- package/dist/esm/lib/fnv1a.js.map +1 -0
- package/dist/esm/lib/injection-engine/factories/defineRelevanceHint.d.ts +15 -0
- package/dist/esm/lib/injection-engine/factories/defineRelevanceHint.js +16 -0
- package/dist/esm/lib/injection-engine/factories/defineRelevanceHint.js.map +1 -1
- package/dist/esm/lib/injection-engine/factories/defineSkill.d.ts +9 -0
- package/dist/esm/lib/injection-engine/factories/defineSkill.js.map +1 -1
- package/dist/esm/lib/injection-engine/index.d.ts +3 -3
- package/dist/esm/lib/injection-engine/index.js +8 -3
- package/dist/esm/lib/injection-engine/index.js.map +1 -1
- package/dist/esm/lib/injection-engine/skillContract.d.ts +25 -2
- package/dist/esm/lib/injection-engine/skillContract.js +11 -4
- package/dist/esm/lib/injection-engine/skillContract.js.map +1 -1
- package/dist/esm/lib/injection-engine/skillGraph.d.ts +65 -4
- package/dist/esm/lib/injection-engine/skillGraph.js +36 -11
- package/dist/esm/lib/injection-engine/skillGraph.js.map +1 -1
- package/dist/esm/lib/injection-engine/skillGraphCheckup.d.ts +47 -7
- package/dist/esm/lib/injection-engine/skillGraphCheckup.js +165 -13
- package/dist/esm/lib/injection-engine/skillGraphCheckup.js.map +1 -1
- package/dist/esm/lib/injection-engine/skillsFromDir.d.ts +24 -0
- package/dist/esm/lib/injection-engine/skillsFromDir.js +19 -0
- package/dist/esm/lib/injection-engine/skillsFromDir.js.map +1 -1
- package/dist/esm/lib/injection-engine/types.d.ts +25 -0
- package/dist/esm/lib/injection-engine/types.js.map +1 -1
- package/dist/esm/lib/rag/defineRAG.d.ts +126 -26
- package/dist/esm/lib/rag/defineRAG.js +112 -25
- package/dist/esm/lib/rag/defineRAG.js.map +1 -1
- package/dist/esm/lib/rag/index.d.ts +1 -1
- package/dist/esm/lib/rag/index.js +1 -1
- package/dist/esm/lib/rag/index.js.map +1 -1
- package/dist/esm/memory/define.js +38 -2
- package/dist/esm/memory/define.js.map +1 -1
- package/dist/esm/memory/define.types.d.ts +93 -1
- package/dist/esm/memory/define.types.js +18 -0
- package/dist/esm/memory/define.types.js.map +1 -1
- package/dist/esm/memory/embedding/loadRelevant.d.ts +49 -15
- package/dist/esm/memory/embedding/loadRelevant.js +136 -7
- package/dist/esm/memory/embedding/loadRelevant.js.map +1 -1
- package/dist/esm/memory/index.d.ts +2 -1
- package/dist/esm/memory/index.js +2 -1
- package/dist/esm/memory/index.js.map +1 -1
- package/dist/esm/memory/pipeline/semantic.d.ts +15 -0
- package/dist/esm/memory/pipeline/semantic.js +3 -1
- package/dist/esm/memory/pipeline/semantic.js.map +1 -1
- package/dist/esm/memory/retrieval/index.d.ts +10 -0
- package/dist/esm/memory/retrieval/index.js +3 -0
- package/dist/esm/memory/retrieval/index.js.map +1 -0
- package/dist/esm/memory/retrieval/provenance.d.ts +43 -0
- package/dist/esm/memory/retrieval/provenance.js +60 -0
- package/dist/esm/memory/retrieval/provenance.js.map +1 -0
- package/dist/esm/memory/retrieval/topK.d.ts +67 -0
- package/dist/esm/memory/retrieval/topK.js +53 -0
- package/dist/esm/memory/retrieval/topK.js.map +1 -0
- package/dist/esm/memory/retrieval/types.d.ts +189 -0
- package/dist/esm/memory/retrieval/types.js +2 -0
- package/dist/esm/memory/retrieval/types.js.map +1 -0
- package/dist/esm/memory/stages/formatDefault.d.ts +52 -26
- package/dist/esm/memory/stages/formatDefault.js +118 -28
- package/dist/esm/memory/stages/formatDefault.js.map +1 -1
- package/dist/esm/memory/stages/pickByBudget.js +53 -3
- package/dist/esm/memory/stages/pickByBudget.js.map +1 -1
- package/dist/esm/memory/stages/types.d.ts +15 -0
- package/dist/esm/memory/wire/mountMemoryPipeline.d.ts +25 -0
- package/dist/esm/memory/wire/mountMemoryPipeline.js +11 -2
- package/dist/esm/memory/wire/mountMemoryPipeline.js.map +1 -1
- package/dist/esm/tool-providers/index.d.ts +1 -1
- package/dist/esm/tool-providers/index.js +4 -1
- package/dist/esm/tool-providers/index.js.map +1 -1
- package/dist/esm/tool-providers/skillScopedTools.d.ts +4 -0
- package/dist/esm/tool-providers/skillScopedTools.js +33 -2
- package/dist/esm/tool-providers/skillScopedTools.js.map +1 -1
- package/dist/esm/tool-providers/types.d.ts +25 -0
- package/dist/events/registry.js +4 -0
- package/dist/events/registry.js.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/fnv1a.js +28 -0
- package/dist/lib/fnv1a.js.map +1 -0
- package/dist/lib/injection-engine/factories/defineRelevanceHint.js +17 -1
- package/dist/lib/injection-engine/factories/defineRelevanceHint.js.map +1 -1
- package/dist/lib/injection-engine/factories/defineSkill.js.map +1 -1
- package/dist/lib/injection-engine/index.js +7 -1
- package/dist/lib/injection-engine/index.js.map +1 -1
- package/dist/lib/injection-engine/skillContract.js +11 -4
- package/dist/lib/injection-engine/skillContract.js.map +1 -1
- package/dist/lib/injection-engine/skillGraph.js +37 -11
- package/dist/lib/injection-engine/skillGraph.js.map +1 -1
- package/dist/lib/injection-engine/skillGraphCheckup.js +165 -13
- package/dist/lib/injection-engine/skillGraphCheckup.js.map +1 -1
- package/dist/lib/injection-engine/skillsFromDir.js +19 -0
- package/dist/lib/injection-engine/skillsFromDir.js.map +1 -1
- package/dist/lib/injection-engine/types.js.map +1 -1
- package/dist/lib/rag/defineRAG.js +113 -26
- package/dist/lib/rag/defineRAG.js.map +1 -1
- package/dist/lib/rag/index.js +2 -1
- package/dist/lib/rag/index.js.map +1 -1
- package/dist/memory/define.js +38 -2
- package/dist/memory/define.js.map +1 -1
- package/dist/memory/define.types.js +21 -1
- package/dist/memory/define.types.js.map +1 -1
- package/dist/memory/embedding/loadRelevant.js +138 -8
- package/dist/memory/embedding/loadRelevant.js.map +1 -1
- package/dist/memory/index.js +5 -1
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/pipeline/semantic.js +2 -0
- package/dist/memory/pipeline/semantic.js.map +1 -1
- package/dist/memory/retrieval/index.js +9 -0
- package/dist/memory/retrieval/index.js.map +1 -0
- package/dist/memory/retrieval/provenance.js +65 -0
- package/dist/memory/retrieval/provenance.js.map +1 -0
- package/dist/memory/retrieval/topK.js +57 -0
- package/dist/memory/retrieval/topK.js.map +1 -0
- package/dist/memory/retrieval/types.js +3 -0
- package/dist/memory/retrieval/types.js.map +1 -0
- package/dist/memory/stages/formatDefault.js +118 -28
- package/dist/memory/stages/formatDefault.js.map +1 -1
- package/dist/memory/stages/pickByBudget.js +53 -3
- package/dist/memory/stages/pickByBudget.js.map +1 -1
- package/dist/memory/wire/mountMemoryPipeline.js +11 -2
- package/dist/memory/wire/mountMemoryPipeline.js.map +1 -1
- package/dist/tool-providers/index.js +5 -1
- package/dist/tool-providers/index.js.map +1 -1
- package/dist/tool-providers/skillScopedTools.js +35 -3
- package/dist/tool-providers/skillScopedTools.js.map +1 -1
- package/dist/types/core/agent/AgentBuilder.d.ts.map +1 -1
- 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/memoryRecallInjections.d.ts +13 -3
- package/dist/types/core/agent/memoryRecallInjections.d.ts.map +1 -1
- package/dist/types/core/agent/stages/deliver.d.ts +6 -3
- package/dist/types/core/agent/stages/deliver.d.ts.map +1 -1
- package/dist/types/core/slots/buildSystemPromptSlot.d.ts.map +1 -1
- package/dist/types/core/slots/buildToolsSlot.d.ts.map +1 -1
- package/dist/types/core/slots/helpers.d.ts +11 -2
- package/dist/types/core/slots/helpers.d.ts.map +1 -1
- package/dist/types/events/payloads.d.ts +92 -0
- package/dist/types/events/payloads.d.ts.map +1 -1
- package/dist/types/events/registry.d.ts +5 -1
- package/dist/types/events/registry.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/lib/fnv1a.d.ts +17 -0
- package/dist/types/lib/fnv1a.d.ts.map +1 -0
- package/dist/types/lib/injection-engine/factories/defineRelevanceHint.d.ts +15 -0
- package/dist/types/lib/injection-engine/factories/defineRelevanceHint.d.ts.map +1 -1
- package/dist/types/lib/injection-engine/factories/defineSkill.d.ts +9 -0
- package/dist/types/lib/injection-engine/factories/defineSkill.d.ts.map +1 -1
- package/dist/types/lib/injection-engine/index.d.ts +3 -3
- package/dist/types/lib/injection-engine/index.d.ts.map +1 -1
- package/dist/types/lib/injection-engine/skillContract.d.ts +25 -2
- package/dist/types/lib/injection-engine/skillContract.d.ts.map +1 -1
- package/dist/types/lib/injection-engine/skillGraph.d.ts +65 -4
- package/dist/types/lib/injection-engine/skillGraph.d.ts.map +1 -1
- package/dist/types/lib/injection-engine/skillGraphCheckup.d.ts +47 -7
- package/dist/types/lib/injection-engine/skillGraphCheckup.d.ts.map +1 -1
- package/dist/types/lib/injection-engine/skillsFromDir.d.ts +24 -0
- package/dist/types/lib/injection-engine/skillsFromDir.d.ts.map +1 -1
- package/dist/types/lib/injection-engine/types.d.ts +25 -0
- package/dist/types/lib/injection-engine/types.d.ts.map +1 -1
- package/dist/types/lib/rag/defineRAG.d.ts +126 -26
- package/dist/types/lib/rag/defineRAG.d.ts.map +1 -1
- package/dist/types/lib/rag/index.d.ts +1 -1
- package/dist/types/lib/rag/index.d.ts.map +1 -1
- package/dist/types/memory/define.d.ts.map +1 -1
- package/dist/types/memory/define.types.d.ts +93 -1
- package/dist/types/memory/define.types.d.ts.map +1 -1
- package/dist/types/memory/embedding/loadRelevant.d.ts +49 -15
- package/dist/types/memory/embedding/loadRelevant.d.ts.map +1 -1
- package/dist/types/memory/index.d.ts +2 -1
- package/dist/types/memory/index.d.ts.map +1 -1
- package/dist/types/memory/pipeline/semantic.d.ts +15 -0
- package/dist/types/memory/pipeline/semantic.d.ts.map +1 -1
- package/dist/types/memory/retrieval/index.d.ts +11 -0
- package/dist/types/memory/retrieval/index.d.ts.map +1 -0
- package/dist/types/memory/retrieval/provenance.d.ts +44 -0
- package/dist/types/memory/retrieval/provenance.d.ts.map +1 -0
- package/dist/types/memory/retrieval/topK.d.ts +68 -0
- package/dist/types/memory/retrieval/topK.d.ts.map +1 -0
- package/dist/types/memory/retrieval/types.d.ts +190 -0
- package/dist/types/memory/retrieval/types.d.ts.map +1 -0
- package/dist/types/memory/stages/formatDefault.d.ts +52 -26
- package/dist/types/memory/stages/formatDefault.d.ts.map +1 -1
- package/dist/types/memory/stages/pickByBudget.d.ts.map +1 -1
- package/dist/types/memory/stages/types.d.ts +15 -0
- package/dist/types/memory/stages/types.d.ts.map +1 -1
- package/dist/types/memory/wire/mountMemoryPipeline.d.ts +25 -0
- package/dist/types/memory/wire/mountMemoryPipeline.d.ts.map +1 -1
- package/dist/types/tool-providers/index.d.ts +1 -1
- package/dist/types/tool-providers/index.d.ts.map +1 -1
- package/dist/types/tool-providers/skillScopedTools.d.ts +4 -0
- package/dist/types/tool-providers/skillScopedTools.d.ts.map +1 -1
- package/dist/types/tool-providers/types.d.ts +25 -0
- package/dist/types/tool-providers/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -9,9 +9,9 @@ exports.withMemoryRecall = exports.memoryRecallInjections = void 0;
|
|
|
9
9
|
* (`buildSystemPromptSlot` / `buildMessagesSlot`) only iterate `activeInjections` —
|
|
10
10
|
* so on the Agent path the recall was read, formatted, and persisted but NEVER
|
|
11
11
|
* composed into the prompt (a dead-end key). This turns those recalls into
|
|
12
|
-
* `
|
|
13
|
-
*
|
|
14
|
-
*
|
|
12
|
+
* `ActiveInjection`s so the existing composers inject them: system-role content →
|
|
13
|
+
* the system slot (`inject.systemPrompt`), everything else → the messages slot
|
|
14
|
+
* (`inject.messages`).
|
|
15
15
|
*
|
|
16
16
|
* Only the system-role half reaches the model. The messages slot is an
|
|
17
17
|
* observability projection, not a wire (see `messagesSlotRefusal.ts`), so a
|
|
@@ -20,12 +20,42 @@ exports.withMemoryRecall = exports.memoryRecallInjections = void 0;
|
|
|
20
20
|
* `defineMemory()`; it can only be entered by a hand-built read subflow mounted
|
|
21
21
|
* with `mountMemoryRead`. It is left as-is rather than silently re-homed into
|
|
22
22
|
* the system slot, which would change what the model sees.
|
|
23
|
+
*
|
|
24
|
+
* ─── One injection PER CHUNK (8.8.0) ───────────────────────────────────
|
|
25
|
+
*
|
|
26
|
+
* A retrieval that put three passages in the prompt used to produce ONE
|
|
27
|
+
* injection, so the recording could say "the recall block went in" and
|
|
28
|
+
* nothing finer. Ablating a single passage was impossible; the context
|
|
29
|
+
* ledger credited the block, not the passage; and `retrievalScore` /
|
|
30
|
+
* `rankPosition` on `ContextInjectedPayload` — declared since 2.x — had
|
|
31
|
+
* nowhere to come from, because one record cannot carry three scores.
|
|
32
|
+
*
|
|
33
|
+
* When the read subflow lifted a retrieval record (`retrievalEvidence_<id>`),
|
|
34
|
+
* this splits the recall into one injection per admitted chunk, keyed by
|
|
35
|
+
* the chunk's own id, carrying that chunk's score and rank.
|
|
36
|
+
*
|
|
37
|
+
* **The prompt does not change by one byte.** The formatter records the
|
|
38
|
+
* exact fragment each chunk contributed (`promptFragment`), header on the
|
|
39
|
+
* first and footer on the last, and `callLLM` assembles the system prompt
|
|
40
|
+
* by joining every record's `rawContent` with `\n\n` — the same separator
|
|
41
|
+
* the formatter joined its blocks with. Splitting and re-joining is the
|
|
42
|
+
* identity function here, and a test pins it.
|
|
43
|
+
*
|
|
44
|
+
* Without a record (conversation memory, hand-built pipelines) the old
|
|
45
|
+
* single-injection path is taken unchanged.
|
|
23
46
|
*/
|
|
24
47
|
const define_types_js_1 = require("../../memory/define.types.js");
|
|
25
|
-
|
|
26
|
-
|
|
48
|
+
function normalize(source) {
|
|
49
|
+
return typeof source === 'string' ? { id: source } : source;
|
|
50
|
+
}
|
|
51
|
+
function sourceOf(flavor) {
|
|
52
|
+
return flavor === 'rag' ? 'rag' : 'memory';
|
|
53
|
+
}
|
|
54
|
+
/** Build recall ActiveInjections from the per-id recall keys in `parent`. */
|
|
55
|
+
function memoryRecallInjections(parent, memories) {
|
|
27
56
|
const out = [];
|
|
28
|
-
for (const
|
|
57
|
+
for (const entry of memories) {
|
|
58
|
+
const { id, flavor } = normalize(entry);
|
|
29
59
|
const recall = parent[(0, define_types_js_1.memoryInjectionKey)(id)];
|
|
30
60
|
if (!Array.isArray(recall) || recall.length === 0)
|
|
31
61
|
continue;
|
|
@@ -39,9 +69,25 @@ function memoryRecallInjections(parent, memoryIds) {
|
|
|
39
69
|
.map((m) => ({ role: m.role, content: m.content }));
|
|
40
70
|
if (!systemContent && messages.length === 0)
|
|
41
71
|
continue;
|
|
72
|
+
const perChunk = chunkInjections(parent, id, flavor, systemContent);
|
|
73
|
+
if (perChunk) {
|
|
74
|
+
out.push(...perChunk);
|
|
75
|
+
// A non-system recall alongside a retrieval record is not something
|
|
76
|
+
// any shipped formatter produces; carry it on its own record rather
|
|
77
|
+
// than dropping it.
|
|
78
|
+
if (messages.length > 0) {
|
|
79
|
+
out.push({
|
|
80
|
+
id: `memory:${id}`,
|
|
81
|
+
flavor: sourceOf(flavor),
|
|
82
|
+
description: `recall from memory '${id}'`,
|
|
83
|
+
inject: { messages },
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
42
88
|
out.push({
|
|
43
89
|
id: `memory:${id}`,
|
|
44
|
-
flavor:
|
|
90
|
+
flavor: sourceOf(flavor),
|
|
45
91
|
description: `recall from memory '${id}'`,
|
|
46
92
|
inject: {
|
|
47
93
|
...(systemContent ? { systemPrompt: systemContent } : {}),
|
|
@@ -52,15 +98,59 @@ function memoryRecallInjections(parent, memoryIds) {
|
|
|
52
98
|
return out;
|
|
53
99
|
}
|
|
54
100
|
exports.memoryRecallInjections = memoryRecallInjections;
|
|
101
|
+
/**
|
|
102
|
+
* One injection per admitted chunk, or `undefined` when this memory left
|
|
103
|
+
* no usable retrieval record.
|
|
104
|
+
*
|
|
105
|
+
* Refuses to split unless the fragments rebuild the recall EXACTLY. A
|
|
106
|
+
* custom formatter, a hand-written `renderEntry`, or a future change to
|
|
107
|
+
* how blocks are joined would silently alter the prompt otherwise — so
|
|
108
|
+
* the guard is an equality check on the assembled bytes, not a version
|
|
109
|
+
* flag. Failing it falls back to the single-injection path, which is
|
|
110
|
+
* always correct and merely coarser.
|
|
111
|
+
*/
|
|
112
|
+
function chunkInjections(parent, id, flavor, systemContent) {
|
|
113
|
+
const evidence = parent[(0, define_types_js_1.retrievalEvidenceKey)(id)];
|
|
114
|
+
const candidates = evidence?.candidates;
|
|
115
|
+
if (!candidates || candidates.length === 0)
|
|
116
|
+
return undefined;
|
|
117
|
+
// In PROMPT order, not score order. The record is stored best-scoring
|
|
118
|
+
// first; the message was assembled in the budget picker's order. Joining
|
|
119
|
+
// the wrong one reproduces the right bytes in a sequence the model never
|
|
120
|
+
// saw — which the equality check below would catch, but silently, by
|
|
121
|
+
// falling back to one coarse injection for every retrieval.
|
|
122
|
+
const admitted = candidates
|
|
123
|
+
.filter((c) => c.admitted && c.promptFragment !== undefined && c.promptPosition !== undefined)
|
|
124
|
+
.sort((a, b) => (a.promptPosition ?? 0) - (b.promptPosition ?? 0));
|
|
125
|
+
if (admitted.length === 0)
|
|
126
|
+
return undefined;
|
|
127
|
+
const rebuilt = admitted.map((c) => c.promptFragment ?? '').join('\n\n');
|
|
128
|
+
if (rebuilt !== systemContent)
|
|
129
|
+
return undefined;
|
|
130
|
+
const source = sourceOf(flavor);
|
|
131
|
+
return admitted.map((c) => ({
|
|
132
|
+
id: `memory:${id}#${c.id}`,
|
|
133
|
+
flavor: source,
|
|
134
|
+
description: c.docUri !== undefined
|
|
135
|
+
? `retrieved '${c.id}' from ${c.docUri} (rank ${c.rank}, score ${c.score.toFixed(2)})`
|
|
136
|
+
: `retrieved '${c.id}' (rank ${c.rank}, score ${c.score.toFixed(2)})`,
|
|
137
|
+
retrieval: {
|
|
138
|
+
score: c.score,
|
|
139
|
+
rank: c.rank,
|
|
140
|
+
...(evidence?.threshold !== undefined && { threshold: evidence.threshold }),
|
|
141
|
+
},
|
|
142
|
+
inject: { systemPrompt: c.promptFragment ?? '' },
|
|
143
|
+
}));
|
|
144
|
+
}
|
|
55
145
|
/**
|
|
56
146
|
* Append memory recalls to the active-injection set a slot-fork inputMapper hands to
|
|
57
147
|
* the system / messages slot subflows. No-op when the agent has no memories.
|
|
58
148
|
*/
|
|
59
|
-
function withMemoryRecall(activeInjections, parent,
|
|
149
|
+
function withMemoryRecall(activeInjections, parent, memories) {
|
|
60
150
|
const base = activeInjections ?? [];
|
|
61
|
-
if (
|
|
151
|
+
if (memories.length === 0)
|
|
62
152
|
return base;
|
|
63
|
-
const recall = memoryRecallInjections(parent,
|
|
153
|
+
const recall = memoryRecallInjections(parent, memories);
|
|
64
154
|
return recall.length === 0 ? base : [...base, ...recall];
|
|
65
155
|
}
|
|
66
156
|
exports.withMemoryRecall = withMemoryRecall;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memoryRecallInjections.js","sourceRoot":"","sources":["../../../src/core/agent/memoryRecallInjections.ts"],"names":[],"mappings":";;;AAAA
|
|
1
|
+
{"version":3,"file":"memoryRecallInjections.js","sourceRoot":"","sources":["../../../src/core/agent/memoryRecallInjections.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deliver.js","sourceRoot":"","sources":["../../../../src/core/agent/stages/deliver.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;;;AAIH,yDAAyE;AAEzE,iGAG8D;AAC9D,uDAA+C;AAC/C,
|
|
1
|
+
{"version":3,"file":"deliver.js","sourceRoot":"","sources":["../../../../src/core/agent/stages/deliver.ts"],"names":[],"mappings":"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"}
|
|
@@ -82,6 +82,16 @@ function buildSystemPromptSlot(config) {
|
|
|
82
82
|
sourceId: inj.id,
|
|
83
83
|
reason: inj.description ?? `${inj.flavor} '${inj.id}' active`,
|
|
84
84
|
rawContent: promptContent,
|
|
85
|
+
// Retrieval provenance (8.8.0) — present only when a retrieval
|
|
86
|
+
// produced this injection. These are the payload's declared
|
|
87
|
+
// `retrievalScore` / `rankPosition` / `threshold`, written for
|
|
88
|
+
// the first time; before the recall was split per chunk there
|
|
89
|
+
// was no single score a record could honestly carry.
|
|
90
|
+
...(inj.retrieval !== undefined && {
|
|
91
|
+
retrievalScore: inj.retrieval.score,
|
|
92
|
+
rankPosition: inj.retrieval.rank,
|
|
93
|
+
...(inj.retrieval.threshold !== undefined && { threshold: inj.retrieval.threshold }),
|
|
94
|
+
}),
|
|
85
95
|
});
|
|
86
96
|
}
|
|
87
97
|
scope.$setValue(conventions_js_1.INJECTION_KEYS.SYSTEM_PROMPT, injections);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildSystemPromptSlot.js","sourceRoot":"","sources":["../../../src/core/slots/buildSystemPromptSlot.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;AAEH,6CAAwC;AAExC,yDAAsD;AAEtD,4DAAiE;AAEjE,6CAAiG;AA6CjG;;;;;;;;GAQG;AACH,SAAgB,qBAAqB,CAAC,MAA8B;IAClE,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC;IAC3C,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,IAAI,sBAAsB,CAAC;IAC7D,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;IACnC,0EAA0E;IAC1E,IAAI,cAAc,GAAG,KAAK,CAAC;IAE3B,OAAO,IAAA,uBAAS,EACd,SAAS,EACT,KAAK,EAAE,KAA2C,EAAE,EAAE;QACpD,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAwB,CAAC;QACpD,MAAM,QAAQ,GAAG,OAAO,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;QAC9F,MAAM,MAAM,GAAG,OAAO,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;QAEtF,MAAM,UAAU,GAAsB,EAAE,CAAC;QAEzC,+DAA+D;QAC/D,gEAAgE;QAChE,6DAA6D;QAC7D,8DAA8D;QAC9D,+DAA+D;QAC/D,0BAA0B;QAC1B,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,UAAU,CAAC,IAAI,CAAC;gBACd,cAAc,EAAE,IAAA,qBAAQ,EAAC,QAAQ,EAAE,EAAE,CAAC;gBACtC,WAAW,EAAE,IAAA,kBAAK,EAAC,MAAM,QAAQ,EAAE,CAAC;gBACpC,IAAI,EAAE,eAAe;gBACrB,MAAM,EAAE,MAAM;gBACd,MAAM;gBACN,UAAU,EAAE,QAAQ;aACrB,CAAC,CAAC;QACL,CAAC;QAED,2DAA2D;QAC3D,2DAA2D;QAC3D,kEAAkE;QAClE,8DAA8D;QAC9D,mEAAmE;QACnE,sDAAsD;QACtD,MAAM,gBAAgB,GACnB,KAAK,CAAC,SAAS,CAAC,kBAAkB,CAA4C,IAAI,EAAE,CAAC;QACxF,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;YACnC,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC;YAC9C,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAC3D,mEAAmE;YACnE,8DAA8D;YAC9D,kEAAkE;YAClE,gEAAgE;YAChE,kEAAkE;YAClE,6DAA6D;YAC7D,IAAI,GAAG,CAAC,MAAM,KAAK,OAAO,IAAI,GAAG,CAAC,WAAW,KAAK,WAAW;gBAAE,SAAS;YACxE,UAAU,CAAC,IAAI,CAAC;gBACd,cAAc,EAAE,IAAA,qBAAQ,EAAC,aAAa,EAAE,EAAE,CAAC;gBAC3C,WAAW,EAAE,IAAA,kBAAK,EAAC,MAAM,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,EAAE,IAAI,aAAa,EAAE,CAAC;gBACjE,IAAI,EAAE,eAAe;gBACrB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,QAAQ,EAAE,GAAG,CAAC,EAAE;gBAChB,MAAM,EAAE,GAAG,CAAC,WAAW,IAAI,GAAG,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,EAAE,UAAU;gBAC7D,UAAU,EAAE,aAAa;
|
|
1
|
+
{"version":3,"file":"buildSystemPromptSlot.js","sourceRoot":"","sources":["../../../src/core/slots/buildSystemPromptSlot.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,6 +38,9 @@ function buildToolsSlot(config) {
|
|
|
38
38
|
// typed `context.budget_pressure` event still fires every iteration and
|
|
39
39
|
// carries the per-iteration truth.
|
|
40
40
|
let warnedOverflow = false;
|
|
41
|
+
// Same latch discipline for the provider↔skill tool-name shadow warning (8.7.0):
|
|
42
|
+
// one console line per offending NAME per built chart. The typed event is unlatched.
|
|
43
|
+
const warnedShadow = new Set();
|
|
41
44
|
// Stage 1 — Discover: consult the external ToolProvider (if any) and
|
|
42
45
|
// resolve its Tool[] for this iteration. ALWAYS runs (even when no
|
|
43
46
|
// provider) so the trace shape is consistent across agents — the
|
|
@@ -62,9 +65,17 @@ function buildToolsSlot(config) {
|
|
|
62
65
|
const env = scope.$getEnv();
|
|
63
66
|
const activatedIds = scope.$getValue('activatedInjectionIds') ?? [];
|
|
64
67
|
const identity = scope.$getValue('runIdentity');
|
|
68
|
+
// `activeSkillIds` is the REAL active set (8.7.0) — every skill the injection
|
|
69
|
+
// engine resolved for this iteration, whatever activated it. `activeSkillId`
|
|
70
|
+
// stays what it always was: the tail of `activatedInjectionIds`, which only
|
|
71
|
+
// `read_skill` writes. The two answer different questions and both are needed.
|
|
72
|
+
const activeSkillIds = (scope.$getValue('activeInjections') ?? [])
|
|
73
|
+
.filter((inj) => inj.flavor === 'skill')
|
|
74
|
+
.map((inj) => inj.id);
|
|
65
75
|
const ctx = {
|
|
66
76
|
iteration,
|
|
67
77
|
...(activatedIds.length > 0 && { activeSkillId: activatedIds[activatedIds.length - 1] }),
|
|
78
|
+
...(activeSkillIds.length > 0 && { activeSkillIds }),
|
|
68
79
|
...(identity && { identity }),
|
|
69
80
|
...(env.signal && { signal: env.signal }),
|
|
70
81
|
};
|
|
@@ -207,6 +218,13 @@ function buildToolsSlot(config) {
|
|
|
207
218
|
merged.push(t);
|
|
208
219
|
}
|
|
209
220
|
scope.toolSchemas = merged;
|
|
221
|
+
reportShadowedTools(scope, {
|
|
222
|
+
iteration,
|
|
223
|
+
...(toolProvider?.id && { providerId: toolProvider.id }),
|
|
224
|
+
providerSchemas,
|
|
225
|
+
activeInjections,
|
|
226
|
+
warnedShadow,
|
|
227
|
+
});
|
|
210
228
|
const composition = (0, helpers_js_1.composeSlot)('tools', iteration, injections, budgetCap, toolProvider ? 'registry+provider+injections' : 'registry+injections');
|
|
211
229
|
scope.$setValue(types_js_1.COMPOSITION_KEYS.SLOT_COMPOSED, composition);
|
|
212
230
|
// Overflow is LOUD. Nothing here truncates — the full tool definitions
|
|
@@ -237,4 +255,63 @@ function buildToolsSlot(config) {
|
|
|
237
255
|
.build();
|
|
238
256
|
}
|
|
239
257
|
exports.buildToolsSlot = buildToolsSlot;
|
|
258
|
+
/**
|
|
259
|
+
* Report a tool name a `ToolProvider` and an active SKILL both claim (8.7.0).
|
|
260
|
+
*
|
|
261
|
+
* The two sources disagree in opposite directions, and both directions are laws of
|
|
262
|
+
* this codebase rather than races:
|
|
263
|
+
*
|
|
264
|
+
* • **The provider wins the LLM's tool list.** The merge above is
|
|
265
|
+
* `[static, provider, skill]` with first-occurrence-wins, and an
|
|
266
|
+
* `autoActivate: 'currentSkill'` skill's tools are deliberately kept OUT of the
|
|
267
|
+
* static registry (`buildToolRegistry`), so the provider's schema — its name, its
|
|
268
|
+
* description, its `inputSchema` — is the one the model reads.
|
|
269
|
+
* • **The skill wins dispatch.** `lookupTool` checks `registryByName` first, and
|
|
270
|
+
* every skill tool is in that map (`buildToolRegistry` adds autoActivate tools
|
|
271
|
+
* explicitly so dispatch resolves once the skill is active). Provider tools are
|
|
272
|
+
* not in it. So the skill's `execute` is what runs.
|
|
273
|
+
*
|
|
274
|
+
* The model therefore reads one contract and calls a different implementation, with
|
|
275
|
+
* nothing in the trace saying so. Reported rather than refused: the provider's list
|
|
276
|
+
* is resolved per iteration (`list(ctx)`) and the skill has to be active, so there is
|
|
277
|
+
* no build-time moment at which this is knowable.
|
|
278
|
+
*
|
|
279
|
+
* A static `.tool()` colliding with a skill tool is NOT reported here —
|
|
280
|
+
* `buildToolRegistry` already throws on that pair at build time, which is the better
|
|
281
|
+
* answer when the answer is available that early.
|
|
282
|
+
*/
|
|
283
|
+
function reportShadowedTools(scope, input) {
|
|
284
|
+
const { iteration, providerId, providerSchemas, activeInjections, warnedShadow } = input;
|
|
285
|
+
if (providerSchemas.length === 0)
|
|
286
|
+
return;
|
|
287
|
+
const providerNames = new Set(providerSchemas.map((s) => s.name));
|
|
288
|
+
for (const inj of activeInjections) {
|
|
289
|
+
for (const tool of inj.inject.tools ?? []) {
|
|
290
|
+
const toolName = tool.schema.name;
|
|
291
|
+
if (!providerNames.has(toolName))
|
|
292
|
+
continue;
|
|
293
|
+
// The EVENT fires every iteration — it is the channel that reaches production,
|
|
294
|
+
// where a dynamic provider can start shadowing on iteration 9 of a run nobody
|
|
295
|
+
// is watching. The console line is dev-mode only and latched per tool name, so
|
|
296
|
+
// a 20-iteration loop prints once (same discipline as the overflow warning).
|
|
297
|
+
(0, typedEmit_js_1.typedEmit)(scope, 'agentfootprint.tools.shadowed', {
|
|
298
|
+
toolName,
|
|
299
|
+
iteration,
|
|
300
|
+
schemaFrom: 'provider',
|
|
301
|
+
...(providerId && { schemaFromId: providerId }),
|
|
302
|
+
dispatchTo: 'skill',
|
|
303
|
+
dispatchToId: inj.id,
|
|
304
|
+
});
|
|
305
|
+
if (!(0, footprintjs_1.isDevMode)() || warnedShadow.has(toolName))
|
|
306
|
+
continue;
|
|
307
|
+
warnedShadow.add(toolName);
|
|
308
|
+
// eslint-disable-next-line no-console
|
|
309
|
+
console.warn(`agentfootprint tools: '${toolName}' is declared by BOTH the tool provider` +
|
|
310
|
+
`${providerId ? ` '${providerId}'` : ''} and the active skill '${inj.id}'. The model ` +
|
|
311
|
+
`is shown the PROVIDER's description, but dispatch always resolves the SKILL's ` +
|
|
312
|
+
`implementation — so the model reads one tool's contract and calls another's. Rename ` +
|
|
313
|
+
`one of them, or drop it from the skill's tools:[] if the provider is meant to own it.`);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
240
317
|
//# sourceMappingURL=buildToolsSlot.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildToolsSlot.js","sourceRoot":"","sources":["../../../src/core/slots/buildToolsSlot.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;AAEH,
|
|
1
|
+
{"version":3,"file":"buildToolsSlot.js","sourceRoot":"","sources":["../../../src/core/slots/buildToolsSlot.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,16 +8,18 @@
|
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.formatOverflowWarning = exports.slotOverflow = exports.composeSlot = exports.breakdown = exports.truncate = exports.fnv1a = void 0;
|
|
11
|
-
/**
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Non-cryptographic stable hash — sufficient for InjectionRecord dedup.
|
|
13
|
+
*
|
|
14
|
+
* The implementation moved to `lib/fnv1a.ts` in 8.8.0 so the memory
|
|
15
|
+
* layer's retrieval record can hash the same way without importing
|
|
16
|
+
* `core/` (which imports `memory/` — the cycle is why a second copy was
|
|
17
|
+
* the alternative). Re-exported here under the same name: every existing
|
|
18
|
+
* importer of `helpers.fnv1a` is untouched, and there is still exactly
|
|
19
|
+
* one implementation.
|
|
20
|
+
*/
|
|
21
|
+
var fnv1a_js_1 = require("../../lib/fnv1a.js");
|
|
22
|
+
Object.defineProperty(exports, "fnv1a", { enumerable: true, get: function () { return fnv1a_js_1.fnv1a; } });
|
|
21
23
|
/** Truncate with ellipsis for contentSummary fields. */
|
|
22
24
|
function truncate(s, n) {
|
|
23
25
|
if (s.length <= n)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/core/slots/helpers.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AASH
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/core/slots/helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,12 +6,15 @@
|
|
|
6
6
|
* Re-exported by Agent.ts so external consumers importing
|
|
7
7
|
* `AgentBuilder` from `'../core/Agent.js'` continue to work.
|
|
8
8
|
*/
|
|
9
|
+
import { isDevMode } from 'footprintjs';
|
|
9
10
|
import { buildDefaultInstruction, } from '../outputSchema.js';
|
|
10
11
|
import { buildSchemaTool, resolveJsonSchema, SCHEMA_TOOL_NAME, } from './outputEnforcement.js';
|
|
11
12
|
import { validateCannedAgainstSchema, } from '../outputFallback.js';
|
|
12
13
|
import { toolOnlyDeliveryRefusal } from '../../lib/injection-engine/skillBodyDelivery.js';
|
|
13
14
|
import { defineInstruction } from '../../lib/injection-engine/factories/defineInstruction.js';
|
|
14
15
|
import { messagesToolRoleRefusal } from '../../lib/injection-engine/messagesSlotRefusal.js';
|
|
16
|
+
import { READS_ENTRY_SCORES_METADATA_KEY } from '../../lib/injection-engine/factories/defineRelevanceHint.js';
|
|
17
|
+
import { skillScopedToolsTarget } from '../../tool-providers/skillScopedTools.js';
|
|
15
18
|
import { defaultCommentaryTemplates } from '../../recorders/observability/commentary/commentaryTemplates.js';
|
|
16
19
|
import { defaultStatusTemplates } from '../../recorders/observability/status/statusTemplates.js';
|
|
17
20
|
import { buildSelfExplainSkill, buildSelfExplainToolProvider, SelfExplainBinding, } from '../../lib/trace-toolpack/selfExplain.js';
|
|
@@ -639,6 +642,7 @@ export class AgentBuilder {
|
|
|
639
642
|
throw new Error(messagesToolRoleRefusal(`Agent.injection('${injection.id}')`));
|
|
640
643
|
}
|
|
641
644
|
}
|
|
645
|
+
assertReadSkillActivation(injection);
|
|
642
646
|
this.injectionList.push(injection);
|
|
643
647
|
return this;
|
|
644
648
|
}
|
|
@@ -1379,6 +1383,11 @@ export class AgentBuilder {
|
|
|
1379
1383
|
const deliveryRefusal = toolOnlyDeliveryRefusal(injections);
|
|
1380
1384
|
if (deliveryRefusal)
|
|
1381
1385
|
throw new Error(deliveryRefusal);
|
|
1386
|
+
// Two dev-mode warnings about wiring that is inert rather than wrong (8.7.0).
|
|
1387
|
+
// Both need the WHOLE agent — one asks whether a scorer exists, the other pairs a
|
|
1388
|
+
// provider against an injection — so both live here, beside the refusal above.
|
|
1389
|
+
warnInertRelevanceHint(injections, this.skillGraphScoreEntries !== undefined);
|
|
1390
|
+
warnRedundantSkillScopedTools(this.toolProviderRef, injections);
|
|
1382
1391
|
const agent = new Agent(opts, this.systemPromptValue, this.registry, voice, injections, this.memoryList, this.outputSchemaParser, toolProvider, this.systemPromptCachePolicy, this.cachingDisabledValue, this.cacheStrategyOverride, this.outputFallbackCfg, this.reliabilityConfig, this.thinkingHandlerValue, this.thinkingBudgetValue, this.skillGraphNextSkill, this.skillGraphReachable, this.skillGraphScoreEntries, this.checkInConfig, this.runConfigFn, this.windowStrategyValue, this.toolMiddlewareList, this.messageMiddlewareList, this.resolveOutputEnforcement(), this.skillGraphEdgeTargets, this.skillGraphExplainNextSkill, this.skillGraphIsTree);
|
|
1383
1392
|
// Attach the observers collected by `.watch()` so they receive events
|
|
1384
1393
|
// from the very first run. Mirrors what consumers would do post-build
|
|
@@ -1396,6 +1405,101 @@ export class AgentBuilder {
|
|
|
1396
1405
|
return agent;
|
|
1397
1406
|
}
|
|
1398
1407
|
}
|
|
1408
|
+
/**
|
|
1409
|
+
* Refuse an `llm-activated` trigger whose `viaToolName` is not `'read_skill'` (8.7.0).
|
|
1410
|
+
*
|
|
1411
|
+
* `viaToolName` reads as a promise the library never kept: name a tool, and that tool
|
|
1412
|
+
* activates the skill. No such tool has ever been created. The one consumer of an
|
|
1413
|
+
* `llm-activated` trigger is the evaluator, which matches on
|
|
1414
|
+
* `ctx.activatedInjectionIds.includes(inj.id)` and never looks at the field
|
|
1415
|
+
* (`evaluator.ts`); the only writer of that array is `read_skill`. So a skill carrying
|
|
1416
|
+
* `viaToolName: 'open_playbook'` activated by `read_skill` exactly like every other
|
|
1417
|
+
* skill, and the declaration meant nothing at all — a configuration that was never
|
|
1418
|
+
* read is worse than one that is refused, because it looks like it worked.
|
|
1419
|
+
*
|
|
1420
|
+
* Refused HERE because `injection()` is the one funnel every flavor passes through:
|
|
1421
|
+
* `defineSkill`, `skillsFromDir({ viaToolName })`, `.skill()`, `.skills(registry)`,
|
|
1422
|
+
* `.skillGraph()` and a hand-built Injection all arrive at this line. The option
|
|
1423
|
+
* itself is removed in 9.0.0.
|
|
1424
|
+
*/
|
|
1425
|
+
function assertReadSkillActivation(injection) {
|
|
1426
|
+
const trigger = injection.trigger;
|
|
1427
|
+
if (trigger.kind !== 'llm-activated')
|
|
1428
|
+
return;
|
|
1429
|
+
if (trigger.viaToolName === 'read_skill')
|
|
1430
|
+
return;
|
|
1431
|
+
throw new Error(`Agent.injection('${injection.id}'): viaToolName is '${trigger.viaToolName}', but ` +
|
|
1432
|
+
`'read_skill' is the only activation tool this library builds — nothing reads the field, ` +
|
|
1433
|
+
`and no tool named '${trigger.viaToolName}' is ever offered to the model. This skill would ` +
|
|
1434
|
+
`have activated through read_skill like every other one, so the name was decoration on a ` +
|
|
1435
|
+
`door that does not exist. Drop \`viaToolName\` (skills already share one activation tool ` +
|
|
1436
|
+
`and the model picks WHICH skill by id), or gate the skill on something the engine does ` +
|
|
1437
|
+
`read — a \`rule\` trigger, or a skillGraph() edge. The option is removed in 9.0.0.`);
|
|
1438
|
+
}
|
|
1439
|
+
/**
|
|
1440
|
+
* Dev-warn a `defineRelevanceHint()` mounted where no scorer can feed it (8.7.0).
|
|
1441
|
+
*
|
|
1442
|
+
* The hint's trigger reads `ctx.entryScores`, and only the PickEntry stage writes it
|
|
1443
|
+
* — which runs only when the graph was built with `.entryBy()` / `.entryByRelevance()`
|
|
1444
|
+
* / `start: { entries, scoredBy | byRelevance }`. Without one, the injection mounts,
|
|
1445
|
+
* evaluates false on every iteration for the life of the agent, and reports nothing:
|
|
1446
|
+
* a feature that is configured and inert looks exactly like a feature that is working
|
|
1447
|
+
* and simply has not been needed yet.
|
|
1448
|
+
*
|
|
1449
|
+
* Keyed on the `readsEntryScores` metadata marker, not on the id — the id is the
|
|
1450
|
+
* caller's to rename.
|
|
1451
|
+
*/
|
|
1452
|
+
function warnInertRelevanceHint(injections, hasScorer) {
|
|
1453
|
+
if (hasScorer || !isDevMode())
|
|
1454
|
+
return;
|
|
1455
|
+
for (const inj of injections) {
|
|
1456
|
+
const meta = inj.metadata;
|
|
1457
|
+
if (meta?.[READS_ENTRY_SCORES_METADATA_KEY] !== true)
|
|
1458
|
+
continue;
|
|
1459
|
+
// eslint-disable-next-line no-console
|
|
1460
|
+
console.warn(`agentfootprint Agent: injection '${inj.id}' reads ctx.entryScores, which only an ENTRY ` +
|
|
1461
|
+
`SCORER produces — and this agent's skill graph has none, so the injection can never ` +
|
|
1462
|
+
`activate. Build the graph with .entryBy(keywordScorer()) or .entryByRelevance(embedder) ` +
|
|
1463
|
+
`(object form: start: { entries, scoredBy }), or drop the injection. Note .entryByRead() ` +
|
|
1464
|
+
`does NOT score — there the model picks, so there is no near-tie to report.`);
|
|
1465
|
+
}
|
|
1466
|
+
}
|
|
1467
|
+
/**
|
|
1468
|
+
* Dev-warn a `skillScopedTools(id, …)` pointed at a skill that already scopes its own
|
|
1469
|
+
* tools (8.7.0).
|
|
1470
|
+
*
|
|
1471
|
+
* `defineSkill({ tools, autoActivate: 'currentSkill' })` already narrows the LLM's
|
|
1472
|
+
* tool list to the active skill, with no provider at all — that is what
|
|
1473
|
+
* `skillScopedTools`' own header means by "you probably don't need this". Wiring both
|
|
1474
|
+
* gives one skill two tool sources keyed on two DIFFERENT signals (the graph's active
|
|
1475
|
+
* set vs. the last `read_skill` call), which is how a tool ends up visible on
|
|
1476
|
+
* iterations nobody expected — and it is the exact pairing that put a shadowed tool
|
|
1477
|
+
* name into a field agent.
|
|
1478
|
+
*/
|
|
1479
|
+
function warnRedundantSkillScopedTools(provider, injections) {
|
|
1480
|
+
if (!isDevMode())
|
|
1481
|
+
return;
|
|
1482
|
+
const target = skillScopedToolsTarget(provider?.id);
|
|
1483
|
+
if (target === undefined)
|
|
1484
|
+
return;
|
|
1485
|
+
const skill = injections.find((i) => i.id === target);
|
|
1486
|
+
if (!skill)
|
|
1487
|
+
return;
|
|
1488
|
+
const meta = skill.metadata;
|
|
1489
|
+
if (meta?.autoActivate !== 'currentSkill')
|
|
1490
|
+
return;
|
|
1491
|
+
if ((skill.inject?.tools ?? []).length === 0)
|
|
1492
|
+
return;
|
|
1493
|
+
// eslint-disable-next-line no-console
|
|
1494
|
+
console.warn(`agentfootprint Agent: skillScopedTools('${target}') is wired, but skill '${target}' already ` +
|
|
1495
|
+
`carries autoActivate: 'currentSkill' with its own tools:[] — which narrows the tool list ` +
|
|
1496
|
+
`to that skill on its own. The two gates key on DIFFERENT signals (the provider on the ` +
|
|
1497
|
+
`last read_skill call, the skill on the graph's active set), so a tool can appear on ` +
|
|
1498
|
+
`iterations you did not expect, and a name declared on both sides shadows (the model ` +
|
|
1499
|
+
`reads the provider's description and the skill's implementation runs). Keep one: the ` +
|
|
1500
|
+
`skill's tools:[] if the tools belong to the skill, the provider if they are assembled ` +
|
|
1501
|
+
`elsewhere.`);
|
|
1502
|
+
}
|
|
1399
1503
|
/**
|
|
1400
1504
|
* Validate `.outputSchema(…, { retries })`.
|
|
1401
1505
|
*
|