agentfootprint 7.11.0 → 7.13.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 (141) hide show
  1. package/dist/core/Agent.js +52 -7
  2. package/dist/core/Agent.js.map +1 -1
  3. package/dist/core/agent/AgentBuilder.js +59 -1
  4. package/dist/core/agent/AgentBuilder.js.map +1 -1
  5. package/dist/core/agent/buildAgentChart.js +6 -0
  6. package/dist/core/agent/buildAgentChart.js.map +1 -1
  7. package/dist/core/agent/buildDynamicAgentChart.js +14 -0
  8. package/dist/core/agent/buildDynamicAgentChart.js.map +1 -1
  9. package/dist/core/agent/stages/callLLM.js +10 -4
  10. package/dist/core/agent/stages/callLLM.js.map +1 -1
  11. package/dist/core/agent/stages/seed.js +16 -0
  12. package/dist/core/agent/stages/seed.js.map +1 -1
  13. package/dist/core/slots/buildSystemPromptSlot.js +2 -1
  14. package/dist/core/slots/buildSystemPromptSlot.js.map +1 -1
  15. package/dist/debug.js +5 -2
  16. package/dist/debug.js.map +1 -1
  17. package/dist/esm/core/Agent.d.ts +11 -3
  18. package/dist/esm/core/Agent.js +52 -7
  19. package/dist/esm/core/Agent.js.map +1 -1
  20. package/dist/esm/core/agent/AgentBuilder.d.ts +48 -1
  21. package/dist/esm/core/agent/AgentBuilder.js +59 -1
  22. package/dist/esm/core/agent/AgentBuilder.js.map +1 -1
  23. package/dist/esm/core/agent/buildAgentChart.js +6 -0
  24. package/dist/esm/core/agent/buildAgentChart.js.map +1 -1
  25. package/dist/esm/core/agent/buildDynamicAgentChart.js +14 -0
  26. package/dist/esm/core/agent/buildDynamicAgentChart.js.map +1 -1
  27. package/dist/esm/core/agent/stages/callLLM.d.ts +9 -0
  28. package/dist/esm/core/agent/stages/callLLM.js +10 -4
  29. package/dist/esm/core/agent/stages/callLLM.js.map +1 -1
  30. package/dist/esm/core/agent/stages/seed.d.ts +10 -1
  31. package/dist/esm/core/agent/stages/seed.js +16 -0
  32. package/dist/esm/core/agent/stages/seed.js.map +1 -1
  33. package/dist/esm/core/agent/types.d.ts +69 -1
  34. package/dist/esm/core/slots/buildSystemPromptSlot.d.ts +19 -4
  35. package/dist/esm/core/slots/buildSystemPromptSlot.js +2 -1
  36. package/dist/esm/core/slots/buildSystemPromptSlot.js.map +1 -1
  37. package/dist/esm/debug.d.ts +2 -2
  38. package/dist/esm/debug.js +2 -2
  39. package/dist/esm/debug.js.map +1 -1
  40. package/dist/esm/index.d.ts +1 -0
  41. package/dist/esm/index.js.map +1 -1
  42. package/dist/esm/lib/context-bisect/index.d.ts +3 -1
  43. package/dist/esm/lib/context-bisect/index.js +5 -0
  44. package/dist/esm/lib/context-bisect/index.js.map +1 -1
  45. package/dist/esm/lib/context-bisect/trajectory.d.ts +8 -0
  46. package/dist/esm/lib/context-bisect/trajectory.js +10 -3
  47. package/dist/esm/lib/context-bisect/trajectory.js.map +1 -1
  48. package/dist/esm/lib/context-bisect/variable-recall.d.ts +171 -0
  49. package/dist/esm/lib/context-bisect/variable-recall.js +0 -0
  50. package/dist/esm/lib/context-bisect/variable-recall.js.map +1 -0
  51. package/dist/esm/lib/context-bisect/variableToBacktrackTrace.d.ts +53 -0
  52. package/dist/esm/lib/context-bisect/variableToBacktrackTrace.js +142 -0
  53. package/dist/esm/lib/context-bisect/variableToBacktrackTrace.js.map +1 -0
  54. package/dist/esm/lib/context-bisect/walk-to-root.d.ts +37 -2
  55. package/dist/esm/lib/context-bisect/walk-to-root.js +61 -6
  56. package/dist/esm/lib/context-bisect/walk-to-root.js.map +1 -1
  57. package/dist/esm/lib/injection-engine/index.d.ts +1 -0
  58. package/dist/esm/lib/injection-engine/index.js +4 -0
  59. package/dist/esm/lib/injection-engine/index.js.map +1 -1
  60. package/dist/esm/lib/injection-engine/skillsFromDir.d.ts +80 -0
  61. package/dist/esm/lib/injection-engine/skillsFromDir.js +243 -0
  62. package/dist/esm/lib/injection-engine/skillsFromDir.js.map +1 -0
  63. package/dist/esm/lib/mcp/index.d.ts +6 -5
  64. package/dist/esm/lib/mcp/index.js +5 -4
  65. package/dist/esm/lib/mcp/index.js.map +1 -1
  66. package/dist/esm/lib/mcp/mcpClient.js +21 -9
  67. package/dist/esm/lib/mcp/mcpClient.js.map +1 -1
  68. package/dist/esm/lib/mcp/mcpServe.d.ts +70 -0
  69. package/dist/esm/lib/mcp/mcpServe.js +374 -0
  70. package/dist/esm/lib/mcp/mcpServe.js.map +1 -0
  71. package/dist/esm/lib/mcp/types.d.ts +130 -17
  72. package/dist/esm/lib/mcp/types.js +10 -10
  73. package/dist/esm/tool-providers/index.d.ts +8 -2
  74. package/dist/esm/tool-providers/index.js +7 -1
  75. package/dist/esm/tool-providers/index.js.map +1 -1
  76. package/dist/index.js.map +1 -1
  77. package/dist/lib/context-bisect/index.js +9 -1
  78. package/dist/lib/context-bisect/index.js.map +1 -1
  79. package/dist/lib/context-bisect/trajectory.js +10 -3
  80. package/dist/lib/context-bisect/trajectory.js.map +1 -1
  81. package/dist/lib/context-bisect/variable-recall.js +0 -0
  82. package/dist/lib/context-bisect/variable-recall.js.map +1 -0
  83. package/dist/lib/context-bisect/variableToBacktrackTrace.js +146 -0
  84. package/dist/lib/context-bisect/variableToBacktrackTrace.js.map +1 -0
  85. package/dist/lib/context-bisect/walk-to-root.js +61 -6
  86. package/dist/lib/context-bisect/walk-to-root.js.map +1 -1
  87. package/dist/lib/injection-engine/index.js +6 -1
  88. package/dist/lib/injection-engine/index.js.map +1 -1
  89. package/dist/lib/injection-engine/skillsFromDir.js +270 -0
  90. package/dist/lib/injection-engine/skillsFromDir.js.map +1 -0
  91. package/dist/lib/mcp/index.js +7 -5
  92. package/dist/lib/mcp/index.js.map +1 -1
  93. package/dist/lib/mcp/mcpClient.js +21 -9
  94. package/dist/lib/mcp/mcpClient.js.map +1 -1
  95. package/dist/lib/mcp/mcpServe.js +401 -0
  96. package/dist/lib/mcp/mcpServe.js.map +1 -0
  97. package/dist/lib/mcp/types.js +10 -10
  98. package/dist/tool-providers/index.js +8 -1
  99. package/dist/tool-providers/index.js.map +1 -1
  100. package/dist/types/core/Agent.d.ts +11 -3
  101. package/dist/types/core/Agent.d.ts.map +1 -1
  102. package/dist/types/core/agent/AgentBuilder.d.ts +48 -1
  103. package/dist/types/core/agent/AgentBuilder.d.ts.map +1 -1
  104. package/dist/types/core/agent/buildAgentChart.d.ts.map +1 -1
  105. package/dist/types/core/agent/buildDynamicAgentChart.d.ts.map +1 -1
  106. package/dist/types/core/agent/stages/callLLM.d.ts +9 -0
  107. package/dist/types/core/agent/stages/callLLM.d.ts.map +1 -1
  108. package/dist/types/core/agent/stages/seed.d.ts +10 -1
  109. package/dist/types/core/agent/stages/seed.d.ts.map +1 -1
  110. package/dist/types/core/agent/types.d.ts +69 -1
  111. package/dist/types/core/agent/types.d.ts.map +1 -1
  112. package/dist/types/core/slots/buildSystemPromptSlot.d.ts +19 -4
  113. package/dist/types/core/slots/buildSystemPromptSlot.d.ts.map +1 -1
  114. package/dist/types/debug.d.ts +2 -2
  115. package/dist/types/debug.d.ts.map +1 -1
  116. package/dist/types/index.d.ts +1 -0
  117. package/dist/types/index.d.ts.map +1 -1
  118. package/dist/types/lib/context-bisect/index.d.ts +3 -1
  119. package/dist/types/lib/context-bisect/index.d.ts.map +1 -1
  120. package/dist/types/lib/context-bisect/trajectory.d.ts +8 -0
  121. package/dist/types/lib/context-bisect/trajectory.d.ts.map +1 -1
  122. package/dist/types/lib/context-bisect/variable-recall.d.ts +172 -0
  123. package/dist/types/lib/context-bisect/variable-recall.d.ts.map +1 -0
  124. package/dist/types/lib/context-bisect/variableToBacktrackTrace.d.ts +54 -0
  125. package/dist/types/lib/context-bisect/variableToBacktrackTrace.d.ts.map +1 -0
  126. package/dist/types/lib/context-bisect/walk-to-root.d.ts +37 -2
  127. package/dist/types/lib/context-bisect/walk-to-root.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/skillsFromDir.d.ts +81 -0
  131. package/dist/types/lib/injection-engine/skillsFromDir.d.ts.map +1 -0
  132. package/dist/types/lib/mcp/index.d.ts +6 -5
  133. package/dist/types/lib/mcp/index.d.ts.map +1 -1
  134. package/dist/types/lib/mcp/mcpClient.d.ts.map +1 -1
  135. package/dist/types/lib/mcp/mcpServe.d.ts +71 -0
  136. package/dist/types/lib/mcp/mcpServe.d.ts.map +1 -0
  137. package/dist/types/lib/mcp/types.d.ts +130 -17
  138. package/dist/types/lib/mcp/types.d.ts.map +1 -1
  139. package/dist/types/tool-providers/index.d.ts +8 -2
  140. package/dist/types/tool-providers/index.d.ts.map +1 -1
  141. package/package.json +4 -3
@@ -22,7 +22,7 @@ function buildWriterFrameIndex(trajectory) {
22
22
  return map;
23
23
  }
24
24
  exports.buildWriterFrameIndex = buildWriterFrameIndex;
25
- /** Map each suspectId present in a frame to the runtimeStageId that WROTE its slot (cross-loop provenance). */
25
+ /** Map each suspectId present in a frame to its {@link SuspectOrigin}. */
26
26
  function writtenByOf(frame) {
27
27
  const map = new Map();
28
28
  for (const src of frame.contextSources) {
@@ -32,7 +32,7 @@ function writtenByOf(frame) {
32
32
  for (const rec of v) {
33
33
  const id = typeof rec.sourceId === 'string' ? rec.sourceId : undefined;
34
34
  if (id !== undefined && !map.has(id))
35
- map.set(id, src.writerId);
35
+ map.set(id, { writerId: src.writerId, stateKey: src.key });
36
36
  }
37
37
  }
38
38
  else if (v !== null &&
@@ -41,7 +41,7 @@ function writtenByOf(frame) {
41
41
  // lastToolResult: a { toolName, result } object → the tool suspect
42
42
  const tool = v.toolName;
43
43
  if (!map.has(tool))
44
- map.set(tool, src.writerId);
44
+ map.set(tool, { writerId: src.writerId, stateKey: src.key });
45
45
  }
46
46
  }
47
47
  // The WALK-ONLY proximate tool source (proposal 008) — the cross-loop descent edge. NOT in
@@ -50,10 +50,46 @@ function writtenByOf(frame) {
50
50
  if (tool && typeof tool.value?.toolName === 'string') {
51
51
  const name = tool.value.toolName;
52
52
  if (!map.has(name))
53
- map.set(name, tool.writerId);
53
+ map.set(name, { writerId: tool.writerId, stateKey: tool.stateKey });
54
54
  }
55
55
  return map;
56
56
  }
57
+ /**
58
+ * The DETERMINISTIC descent: the write that produced the value this loop's
59
+ * `call-llm` read of `stateKey` — straight off the recorded moments, no
60
+ * embedding involved.
61
+ *
62
+ * Preference order, both commit-log facts:
63
+ * 1. the read moment BY this loop's call-llm → its `fromWriteIdx` → that
64
+ * write (exact value identity — footprintjs pins the same rule its forward
65
+ * walk uses);
66
+ * 2. otherwise the last write strictly before the call-llm's commit (the key
67
+ * the call-llm did not read directly — e.g. an inferred proximate).
68
+ *
69
+ * Returns `undefined` unless coverage is EXACT: a conservative (stage-level)
70
+ * edge must never be presented as an exact hop.
71
+ */
72
+ function dataflowWriter(slice, frame) {
73
+ const coverage = slice?.coverage;
74
+ if (slice === undefined || coverage !== 'exact')
75
+ return undefined;
76
+ // Grouped frames index a subflow's OWN inner log; a run-log slice cannot be
77
+ // joined to them (see LoopFrame.subflowScope).
78
+ if (frame.subflowScope !== undefined)
79
+ return undefined;
80
+ const writes = slice.moments.filter((m) => m.kind === 'write');
81
+ const read = frame.llmCallId !== undefined
82
+ ? slice.moments.find((m) => m.kind === 'read' && m.runtimeStageId === frame.llmCallId)
83
+ : undefined;
84
+ if (read?.fromWriteIdx !== undefined) {
85
+ return writes.find((w) => w.commitIdx === read.fromWriteIdx);
86
+ }
87
+ const llmIdx = frame.llmCallArrayIdx;
88
+ if (llmIdx === undefined)
89
+ return undefined;
90
+ const before = writes.filter((w) => w.commitIdx < llmIdx);
91
+ return before.length > 0 ? before[before.length - 1] : undefined;
92
+ }
57
93
  /** A minimal Suspect for ablationForSuspect (only kind + detail identity are read). */
58
94
  function suspectFor(suspectId, kind) {
59
95
  const detail = kind === 'tool' ? { toolName: suspectId } : { injectionId: suspectId };
@@ -94,6 +130,8 @@ async function walkTrajectory(trajectory, opts) {
94
130
  });
95
131
  }
96
132
  const writerFrame = buildWriterFrameIndex(trajectory);
133
+ const variables = new Map((opts.variables ?? []).map((v) => [v.key, v]));
134
+ const variableOf = (key) => variables.get(key);
97
135
  // Baseline stability (the un-ablated scenario must reproduce for any ablation verdict to be trusted).
98
136
  let baselineStable = true;
99
137
  let ablationsUsed = 0;
@@ -153,17 +191,34 @@ async function walkTrajectory(trajectory, opts) {
153
191
  }
154
192
  }
155
193
  }
194
+ // NARROW → HOP. The beam picked WHO; this picks WHERE. When the narrowed
195
+ // suspect rode in on a state key whose dataflow is per-write EXACT, WHERE is
196
+ // a commit-log fact — the write that produced the value THIS loop read —
197
+ // instead of a provenance scrape or an inferred proximate. Absent
198
+ // `variables`, `exactWriter` is always undefined and nothing below changes.
199
+ const beamOrigin = writtenBy.get(chosen.suspectId);
200
+ const exactWrite = beamOrigin?.stateKey !== undefined
201
+ ? dataflowWriter(variableOf(beamOrigin.stateKey), frame)
202
+ : undefined;
203
+ const exactFrameIdx = exactWrite !== undefined ? writerFrame.get(exactWrite.runtimeStageId) : undefined;
204
+ const exactWriter = exactWrite !== undefined && exactFrameIdx !== undefined && exactFrameIdx < frameIdx
205
+ ? exactWrite.runtimeStageId
206
+ : undefined; // strictly backward, or it is no descent at all
156
207
  // The proximate tool source (walk-only, proposal 008) is the cross-loop DESCENT edge. When this
157
208
  // loop did NOT convict, follow it back to the loop that PRODUCED the tool output the decision was
158
209
  // conditioned on — that's where a buried root (e.g. the misdirecting instruction) scores + convicts.
210
+ // It is an INFERRED proximate (`call-llm` read `history`, not this key), so a RECORDED exact edge
211
+ // for the narrowed suspect outranks it: better evidence wins, and the hop says which it used.
159
212
  const toolName = !convicted &&
213
+ exactWriter === undefined &&
160
214
  frame.proximateToolSource &&
161
215
  typeof frame.proximateToolSource.value?.toolName === 'string'
162
216
  ? frame.proximateToolSource.value.toolName
163
217
  : undefined;
164
218
  if (toolName !== undefined)
165
219
  chosen = { suspectId: toolName, kind: 'tool' };
166
- const writer = writtenBy.get(chosen.suspectId);
220
+ const narrowedBy = exactWriter !== undefined ? 'dataflow' : 'text-similarity';
221
+ const writer = exactWriter ?? writtenBy.get(chosen.suspectId)?.writerId;
167
222
  const nextFrameIdx = writer !== undefined ? writerFrame.get(writer) : undefined;
168
223
  const descendIdx = nextFrameIdx !== undefined && nextFrameIdx < frameIdx ? nextFrameIdx : undefined; // strictly backward
169
224
  // Per-hop honest note: untracked-origin (structural — no provenance writer to descend) is set
@@ -177,7 +232,7 @@ async function walkTrajectory(trajectory, opts) {
177
232
  loopIndex: frame.loopIndex,
178
233
  suspectId: chosen.suspectId,
179
234
  kind: chosen.kind,
180
- narrowedBy: 'text-similarity',
235
+ narrowedBy,
181
236
  ...(chosenVerdict ? { verdict: chosenVerdict } : {}),
182
237
  ...(writer !== undefined ? { writtenBy: writer } : {}),
183
238
  ...(descendIdx !== undefined ? { cameFrom: trajectory.frames[descendIdx].loopIndex } : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"walk-to-root.js","sourceRoot":"","sources":["../../../src/lib/context-bisect/walk-to-root.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"walk-to-root.js","sourceRoot":"","sources":["../../../src/lib/context-bisect/walk-to-root.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@
7
7
  * factories. See `README.md` in this folder for the full concept.
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.skillToolNames = exports.checkSkillContracts = exports.checkSkillContract = exports.rankEntries = exports.embeddingScorer = exports.keywordScorer = exports.SKILL_GRAPH_METADATA_KEY = exports.decideSkill = exports.skillGraph = exports.defineInjection = exports.defineFact = exports.defineSteering = exports.buildReadSkillTool = exports.buildListSkillsTool = exports.SkillRegistry = exports.resolveSurfaceMode = exports.defineSkill = exports.defineRelevanceHint = exports.defineInstruction = exports.buildInjectionEngineSubflow = exports.evaluateInjections = exports.projectActiveInjection = void 0;
10
+ exports.skillToolNames = exports.checkSkillContracts = exports.checkSkillContract = exports.rankEntries = exports.embeddingScorer = exports.keywordScorer = exports.SKILL_GRAPH_METADATA_KEY = exports.decideSkill = exports.skillGraph = exports.defineInjection = exports.defineFact = exports.defineSteering = exports.buildReadSkillTool = exports.buildListSkillsTool = exports.skillsFromDir = exports.SkillRegistry = exports.resolveSurfaceMode = exports.defineSkill = exports.defineRelevanceHint = exports.defineInstruction = exports.buildInjectionEngineSubflow = exports.evaluateInjections = exports.projectActiveInjection = void 0;
11
11
  // POJO projection — used by slot subflows + advanced consumers
12
12
  var types_js_1 = require("./types.js");
13
13
  Object.defineProperty(exports, "projectActiveInjection", { enumerable: true, get: function () { return types_js_1.projectActiveInjection; } });
@@ -26,6 +26,11 @@ Object.defineProperty(exports, "defineSkill", { enumerable: true, get: function
26
26
  Object.defineProperty(exports, "resolveSurfaceMode", { enumerable: true, get: function () { return defineSkill_js_1.resolveSurfaceMode; } });
27
27
  var SkillRegistry_js_1 = require("./SkillRegistry.js");
28
28
  Object.defineProperty(exports, "SkillRegistry", { enumerable: true, get: function () { return SkillRegistry_js_1.SkillRegistry; } });
29
+ // File-authored skills — a loader over `defineSkill`, not a second mechanism.
30
+ // Node-only (reads the filesystem); node:fs is imported lazily inside the call
31
+ // so this barrel stays safe to import from a browser bundle.
32
+ var skillsFromDir_js_1 = require("./skillsFromDir.js");
33
+ Object.defineProperty(exports, "skillsFromDir", { enumerable: true, get: function () { return skillsFromDir_js_1.skillsFromDir; } });
29
34
  // Skill-tool builders — used by SkillRegistry.toTools() and the Agent's
30
35
  // auto-attach path. Exported so consumers building custom tool wiring
31
36
  // (e.g., gatedTools chains) can compose the same `list_skills` /
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/injection-engine/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAYH,+DAA+D;AAC/D,uCAAoD;AAA3C,kHAAA,sBAAsB,OAAA;AAE/B,SAAS;AACT,+CAAoD;AAA3C,kHAAA,kBAAkB,OAAA;AAC3B,mFAG0C;AAFxC,6IAAA,2BAA2B,OAAA;AAI7B,gFAAgF;AAChF,yEAAoG;AAA3F,yHAAA,iBAAiB,OAAA;AAC1B,6EAAoG;AAA3F,6HAAA,mBAAmB,OAAA;AAE5B,6DAOoC;AANlC,6GAAA,WAAW,OAAA;AACX,oHAAA,kBAAkB,OAAA;AAOpB,uDAA8E;AAArE,iHAAA,aAAa,OAAA;AAEtB,wEAAwE;AACxE,sEAAsE;AACtE,iEAAiE;AACjE,+BAA+B;AAC/B,iDAA8F;AAArF,oHAAA,mBAAmB,OAAA;AAAE,mHAAA,kBAAkB,OAAA;AAEhD,mEAA2F;AAAlF,mHAAA,cAAc,OAAA;AAEvB,2DAA+E;AAAtE,2GAAA,UAAU,OAAA;AAEnB,6EAA6E;AAC7E,0EAA0E;AAC1E,qDAAqD;AACrD,qEAIwC;AAHtC,qHAAA,eAAe,OAAA;AAKjB,4EAA4E;AAC5E,8EAA8E;AAC9E,iDAuByB;AAtBvB,2GAAA,UAAU,OAAA;AACV,4GAAA,WAAW,OAAA;AACX,yHAAA,wBAAwB,OAAA;AAqB1B,mDAO0B;AANxB,+GAAA,aAAa,OAAA;AACb,iHAAA,eAAe,OAAA;AACf,6GAAA,WAAW,OAAA;AAKb,uDAA6F;AAApF,sHAAA,kBAAkB,OAAA;AAAE,uHAAA,mBAAmB,OAAA;AAAE,kHAAA,cAAc,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/injection-engine/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAYH,+DAA+D;AAC/D,uCAAoD;AAA3C,kHAAA,sBAAsB,OAAA;AAE/B,SAAS;AACT,+CAAoD;AAA3C,kHAAA,kBAAkB,OAAA;AAC3B,mFAG0C;AAFxC,6IAAA,2BAA2B,OAAA;AAI7B,gFAAgF;AAChF,yEAAoG;AAA3F,yHAAA,iBAAiB,OAAA;AAC1B,6EAAoG;AAA3F,6HAAA,mBAAmB,OAAA;AAE5B,6DAOoC;AANlC,6GAAA,WAAW,OAAA;AACX,oHAAA,kBAAkB,OAAA;AAOpB,uDAA8E;AAArE,iHAAA,aAAa,OAAA;AAEtB,8EAA8E;AAC9E,+EAA+E;AAC/E,6DAA6D;AAC7D,uDAA8E;AAArE,iHAAA,aAAa,OAAA;AAEtB,wEAAwE;AACxE,sEAAsE;AACtE,iEAAiE;AACjE,+BAA+B;AAC/B,iDAA8F;AAArF,oHAAA,mBAAmB,OAAA;AAAE,mHAAA,kBAAkB,OAAA;AAEhD,mEAA2F;AAAlF,mHAAA,cAAc,OAAA;AAEvB,2DAA+E;AAAtE,2GAAA,UAAU,OAAA;AAEnB,6EAA6E;AAC7E,0EAA0E;AAC1E,qDAAqD;AACrD,qEAIwC;AAHtC,qHAAA,eAAe,OAAA;AAKjB,4EAA4E;AAC5E,8EAA8E;AAC9E,iDAuByB;AAtBvB,2GAAA,UAAU,OAAA;AACV,4GAAA,WAAW,OAAA;AACX,yHAAA,wBAAwB,OAAA;AAqB1B,mDAO0B;AANxB,+GAAA,aAAa,OAAA;AACb,iHAAA,eAAe,OAAA;AACf,6GAAA,WAAW,OAAA;AAKb,uDAA6F;AAApF,sHAAA,kBAAkB,OAAA;AAAE,uHAAA,mBAAmB,OAAA;AAAE,kHAAA,cAAc,OAAA"}
@@ -0,0 +1,270 @@
1
+ "use strict";
2
+ /**
3
+ * skillsFromDir — load Skills that were AUTHORED AS FILES.
4
+ *
5
+ * The just-in-time half of skills already ships: `defineSkill` produces an
6
+ * Injection whose `description` is all the model sees until it calls
7
+ * `read_skill(<id>)`, at which point the body enters the context. What did not
8
+ * ship was the other half — a way to keep those bodies where prose belongs, in
9
+ * files, next to the code they describe, reviewable in a diff.
10
+ *
11
+ * This is that loader, and nothing more. It reads a directory of `SKILL.md`
12
+ * files and hands each one to `defineSkill`. The progressive disclosure, the
13
+ * activation tool, the slot routing — all unchanged, all upstream of here.
14
+ *
15
+ * skills/
16
+ * billing/SKILL.md
17
+ * refunds/SKILL.md
18
+ *
19
+ * ---
20
+ * name: billing
21
+ * description: Use for refunds, charges and billing questions.
22
+ * ---
23
+ * When handling billing: confirm identity first, then …
24
+ *
25
+ * const skills = await skillsFromDir('./skills');
26
+ * const agent = Agent.create({ provider, model }).skills({ list: () => skills }).build();
27
+ *
28
+ * The frontmatter is the disclosure stub (`name` + `description` — what the
29
+ * model reads when deciding), and everything after the closing fence is the
30
+ * body (what it reads after deciding). That is the same file convention Claude
31
+ * Code made familiar, so a skill folder is portable between the two.
32
+ *
33
+ * ── Why authorship is decided here, at load time ─────────────────────────────
34
+ * A Skill body is *instructions to a model*. Where it came from is therefore a
35
+ * security property, not a convenience: content fetched at run time from
36
+ * somewhere else is content someone else can change after you reviewed it.
37
+ * This loader accepts a local directory and nothing else — a URL is refused BY
38
+ * NAME rather than fetched — because "these files are mine" is a claim you can
39
+ * only make about a path on your own disk at build time. Each file is read
40
+ * ONCE, here; a later edit does not reach a run already in flight.
41
+ *
42
+ * Node-only. `node:fs/promises` and `node:path` are imported lazily inside the
43
+ * call, the same gating `lib/tool-lint/cli.ts` uses: this module is reachable
44
+ * from the `agentfootprint/injection-engine` barrel, and a TOP-LEVEL node:fs
45
+ * import detonates a browser bundle at module-eval even when nothing calls it.
46
+ */
47
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
48
+ if (k2 === undefined) k2 = k;
49
+ var desc = Object.getOwnPropertyDescriptor(m, k);
50
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
51
+ desc = { enumerable: true, get: function() { return m[k]; } };
52
+ }
53
+ Object.defineProperty(o, k2, desc);
54
+ }) : (function(o, m, k, k2) {
55
+ if (k2 === undefined) k2 = k;
56
+ o[k2] = m[k];
57
+ }));
58
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
59
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
60
+ }) : function(o, v) {
61
+ o["default"] = v;
62
+ });
63
+ var __importStar = (this && this.__importStar) || function (mod) {
64
+ if (mod && mod.__esModule) return mod;
65
+ var result = {};
66
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
67
+ __setModuleDefault(result, mod);
68
+ return result;
69
+ };
70
+ Object.defineProperty(exports, "__esModule", { value: true });
71
+ exports.skillsFromDir = void 0;
72
+ const defineSkill_js_1 = require("./factories/defineSkill.js");
73
+ /** The file name every skill folder is expected to use. */
74
+ const SKILL_FILE = 'SKILL.md';
75
+ /**
76
+ * Skill ids ride into `read_skill`'s `enum` and into the skill-graph's node
77
+ * ids. The house tool-name charset keeps them quotable in a prompt, comparable
78
+ * as plain strings, and safe as an object key.
79
+ */
80
+ const SKILL_NAME_RE = /^[a-zA-Z0-9_-]{1,64}$/;
81
+ /** Anything of the form `scheme://…` — http, https, s3, git+ssh, file, … */
82
+ const URL_LIKE_RE = /^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//;
83
+ /**
84
+ * Load every `SKILL.md` under `dir` as a Skill Injection.
85
+ *
86
+ * Two layouts are accepted, and they can be mixed:
87
+ * - `dir/<anything>/SKILL.md` — one folder per skill (the portable layout,
88
+ * and the one to prefer: the folder can hold the skill's other assets).
89
+ * - `dir/SKILL.md` — the directory IS one skill.
90
+ *
91
+ * The returned array is sorted by skill name, so a chart built from it is
92
+ * stable regardless of the order the filesystem happened to hand back.
93
+ *
94
+ * @param dir - A local filesystem path. A URL (or any `scheme://` string, or a
95
+ * UNC network path) is refused by name — see the module header for why.
96
+ * @param opts - Applied uniformly to every loaded skill.
97
+ *
98
+ * @throws when `dir` is not a local path, does not exist, is not a directory,
99
+ * or contains no `SKILL.md` at all; when a file's frontmatter is malformed
100
+ * (the message names the file); or when two files claim the same skill name
101
+ * (the message names both).
102
+ */
103
+ async function skillsFromDir(dir, opts = {}) {
104
+ assertLocalDirectoryArgument(dir);
105
+ // Lazy node imports (browser-compat) — see module header.
106
+ const { readdir, readFile, stat } = await Promise.resolve().then(() => __importStar(require('node:fs/promises')));
107
+ const { join } = await Promise.resolve().then(() => __importStar(require('node:path')));
108
+ let isDirectory = false;
109
+ try {
110
+ isDirectory = (await stat(dir)).isDirectory();
111
+ }
112
+ catch {
113
+ throw new Error(`skillsFromDir: '${dir}' does not exist. Pass the directory that holds your ` +
114
+ `${SKILL_FILE} folders.`);
115
+ }
116
+ if (!isDirectory) {
117
+ throw new Error(`skillsFromDir: '${dir}' is a file, not a directory. Pass the directory that holds ` +
118
+ `your ${SKILL_FILE} folders.`);
119
+ }
120
+ const entries = await readdir(dir, { withFileTypes: true });
121
+ const files = [];
122
+ // `dir/SKILL.md` — the whole directory is one skill.
123
+ if (entries.some((e) => e.isFile() && e.name === SKILL_FILE)) {
124
+ files.push(join(dir, SKILL_FILE));
125
+ }
126
+ // `dir/<folder>/SKILL.md` — the portable layout.
127
+ for (const entry of entries) {
128
+ if (!entry.isDirectory())
129
+ continue;
130
+ const candidate = join(dir, entry.name, SKILL_FILE);
131
+ try {
132
+ if ((await stat(candidate)).isFile())
133
+ files.push(candidate);
134
+ }
135
+ catch {
136
+ // A subdirectory without a SKILL.md is not an error — a skill folder can
137
+ // sit next to assets, fixtures, or anything else the author keeps here.
138
+ }
139
+ }
140
+ if (files.length === 0) {
141
+ throw new Error(`skillsFromDir: no ${SKILL_FILE} found under '${dir}'. Expected '${dir}/<skill>/${SKILL_FILE}' ` +
142
+ `or '${dir}/${SKILL_FILE}'.`);
143
+ }
144
+ const parsed = [];
145
+ for (const file of files.sort()) {
146
+ parsed.push(parseSkillFile(await readFile(file, 'utf8'), file));
147
+ }
148
+ // Collisions are refused naming BOTH files: with only the id in the message
149
+ // you would know a duplicate exists and still have to go find the pair.
150
+ const byName = new Map();
151
+ for (const skill of parsed) {
152
+ const clash = byName.get(skill.name);
153
+ if (clash) {
154
+ throw new Error(`skillsFromDir: two files claim the skill name '${skill.name}' — '${clash.file}' and ` +
155
+ `'${skill.file}'. Skill ids must be unique (read_skill dispatches by id); rename one.`);
156
+ }
157
+ byName.set(skill.name, skill);
158
+ }
159
+ return parsed
160
+ .slice()
161
+ .sort((a, b) => (a.name < b.name ? -1 : a.name > b.name ? 1 : 0))
162
+ .map((skill) => (0, defineSkill_js_1.defineSkill)({
163
+ id: skill.name,
164
+ description: skill.description,
165
+ body: skill.body,
166
+ ...(opts.viaToolName !== undefined && { viaToolName: opts.viaToolName }),
167
+ ...(opts.surfaceMode !== undefined && { surfaceMode: opts.surfaceMode }),
168
+ }));
169
+ }
170
+ exports.skillsFromDir = skillsFromDir;
171
+ // ─── Authorship guard ──────────────────────────────────────────────
172
+ /**
173
+ * Refuse anything that is not a local path, BY NAME. The message quotes what
174
+ * was passed, because the whole point is that the reader can see the thing
175
+ * that was rejected.
176
+ */
177
+ function assertLocalDirectoryArgument(dir) {
178
+ if (typeof dir !== 'string' || dir.trim().length === 0) {
179
+ throw new Error(`skillsFromDir: expected a local directory path, got ${JSON.stringify(dir)}.`);
180
+ }
181
+ const scheme = URL_LIKE_RE.exec(dir);
182
+ if (scheme) {
183
+ throw new Error(`skillsFromDir: '${dir}' is a ${scheme[0].slice(0, -3)} URL, not a local directory. ` +
184
+ `Skill bodies are instructions to a model, so this loader only reads files you own ` +
185
+ `at build time — fetch remote content yourself, review it, and pass defineSkill(...) ` +
186
+ `the result.`);
187
+ }
188
+ if (dir.startsWith('\\\\')) {
189
+ throw new Error(`skillsFromDir: '${dir}' is a network (UNC) path, not a local directory. ` +
190
+ `Skill bodies are instructions to a model, so this loader only reads files you own ` +
191
+ `at build time.`);
192
+ }
193
+ }
194
+ // ─── Frontmatter ───────────────────────────────────────────────────
195
+ /**
196
+ * Parse one `SKILL.md`. Every refusal names the file — a loader that says
197
+ * "malformed frontmatter" over a directory of forty files has told you nothing.
198
+ *
199
+ * The grammar is deliberately small: an opening `---` line, `key: value` lines
200
+ * (`#` comments and blank lines skipped, single/double quotes stripped), a
201
+ * closing `---` line, then the body. Keys other than `name` and `description`
202
+ * are IGNORED rather than rejected, so a file carrying extra frontmatter for
203
+ * another tool still loads here.
204
+ */
205
+ function parseSkillFile(raw, file) {
206
+ // Strip a UTF-8 BOM — an editor artifact, not the author's intent.
207
+ const text = raw.charCodeAt(0) === 0xfeff ? raw.slice(1) : raw;
208
+ const lines = text.split(/\r?\n/);
209
+ if (lines[0]?.trim() !== '---') {
210
+ throw new Error(`skillsFromDir: '${file}' does not start with a '---' frontmatter block. ` +
211
+ `Expected:\n---\nname: my-skill\ndescription: When to use it.\n---\n<the body>`);
212
+ }
213
+ const closingIndex = lines.findIndex((line, i) => i > 0 && line.trim() === '---');
214
+ if (closingIndex === -1) {
215
+ throw new Error(`skillsFromDir: '${file}' opens a '---' frontmatter block that is never closed. ` +
216
+ `Add a '---' line after the last frontmatter key.`);
217
+ }
218
+ const fields = new Map();
219
+ for (let i = 1; i < closingIndex; i++) {
220
+ const line = lines[i] ?? '';
221
+ if (line.trim().length === 0 || line.trimStart().startsWith('#'))
222
+ continue;
223
+ const separator = line.indexOf(':');
224
+ if (separator === -1) {
225
+ throw new Error(`skillsFromDir: '${file}' frontmatter line ${i + 1} is not 'key: value' — got ` +
226
+ `${JSON.stringify(line)}.`);
227
+ }
228
+ const key = line.slice(0, separator).trim();
229
+ if (key.length === 0) {
230
+ throw new Error(`skillsFromDir: '${file}' frontmatter line ${i + 1} has an empty key — got ` +
231
+ `${JSON.stringify(line)}.`);
232
+ }
233
+ fields.set(key, unquote(line.slice(separator + 1).trim()));
234
+ }
235
+ const name = fields.get('name') ?? '';
236
+ const description = fields.get('description') ?? '';
237
+ const body = lines
238
+ .slice(closingIndex + 1)
239
+ .join('\n')
240
+ .trim();
241
+ if (name.length === 0) {
242
+ throw new Error(`skillsFromDir: '${file}' frontmatter is missing 'name'. It becomes the skill id the ` +
243
+ `model passes to read_skill.`);
244
+ }
245
+ if (!SKILL_NAME_RE.test(name)) {
246
+ throw new Error(`skillsFromDir: '${file}' frontmatter name '${name}' must match ` +
247
+ `/^[a-zA-Z0-9_-]{1,64}$/ — it is the id the model passes to read_skill.`);
248
+ }
249
+ if (description.length === 0) {
250
+ throw new Error(`skillsFromDir: '${file}' frontmatter is missing 'description'. It is the ONLY thing ` +
251
+ `the model reads when deciding whether to open this skill.`);
252
+ }
253
+ if (body.length === 0) {
254
+ throw new Error(`skillsFromDir: '${file}' has no body after the closing '---'. The body is what the ` +
255
+ `model reads once it activates the skill.`);
256
+ }
257
+ return { name, description, body, file };
258
+ }
259
+ /** Strip one layer of matching single or double quotes from a YAML-ish scalar. */
260
+ function unquote(value) {
261
+ if (value.length >= 2) {
262
+ const first = value[0];
263
+ const last = value[value.length - 1];
264
+ if ((first === '"' && last === '"') || (first === "'" && last === "'")) {
265
+ return value.slice(1, -1);
266
+ }
267
+ }
268
+ return value;
269
+ }
270
+ //# sourceMappingURL=skillsFromDir.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillsFromDir.js","sourceRoot":"","sources":["../../../src/lib/injection-engine/skillsFromDir.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.mockMcpClient = exports.mcpClient = void 0;
3
+ exports.mockMcpClient = exports.mcpServe = exports.mcpClient = void 0;
4
4
  /**
5
- * MCP — Model Context Protocol client integration. Connect to an MCP
6
- * server, register its tools on your Agent. Server-side support is
7
- * separate (consumer exposes their agent as an MCP tool — different
8
- * use case, not yet shipped).
5
+ * MCP — Model Context Protocol, both directions. `mcpClient` connects to
6
+ * someone else's MCP server and registers its tools on your Agent;
7
+ * `mcpServe` exposes your own tools AS an MCP server so any MCP client
8
+ * can call them.
9
9
  */
10
10
  var mcpClient_js_1 = require("./mcpClient.js");
11
11
  Object.defineProperty(exports, "mcpClient", { enumerable: true, get: function () { return mcpClient_js_1.mcpClient; } });
12
+ var mcpServe_js_1 = require("./mcpServe.js");
13
+ Object.defineProperty(exports, "mcpServe", { enumerable: true, get: function () { return mcpServe_js_1.mcpServe; } });
12
14
  var mockMcpClient_js_1 = require("./mockMcpClient.js");
13
15
  Object.defineProperty(exports, "mockMcpClient", { enumerable: true, get: function () { return mockMcpClient_js_1.mockMcpClient; } });
14
16
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/mcp/index.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,+CAA2C;AAAlC,yGAAA,SAAS,OAAA;AAClB,uDAAgG;AAAvF,iHAAA,aAAa,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/mcp/index.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,+CAA2C;AAAlC,yGAAA,SAAS,OAAA;AAClB,6CAAyC;AAAhC,uGAAA,QAAQ,OAAA;AACjB,uDAAgG;AAAvF,iHAAA,aAAa,OAAA"}
@@ -55,7 +55,7 @@ const DEFAULT_CLIENT_INFO = {
55
55
  */
56
56
  async function mcpClient(opts) {
57
57
  const name = opts.name ?? 'mcp';
58
- const sdk = opts._client ?? (await resolveClient(opts.transport, opts.clientInfo));
58
+ const sdk = opts._client ?? (await resolveClient(opts.transport, opts.clientInfo, opts.signal));
59
59
  // Tool cache so consumers calling `.tools()` more than once don't
60
60
  // hammer the server. `.refresh()` invalidates it.
61
61
  let cache = null;
@@ -66,7 +66,11 @@ async function mcpClient(opts) {
66
66
  }
67
67
  };
68
68
  const buildTools = async () => {
69
- const listed = await sdk.listTools();
69
+ // `signal` rides in the SDK's THIRD argument (RequestOptions), not in
70
+ // the request params — see `wrapMcpTool`.
71
+ const listed = opts.signal
72
+ ? await sdk.listTools(undefined, { signal: opts.signal })
73
+ : await sdk.listTools();
70
74
  return listed.tools.map((t) => wrapMcpTool(name, sdk, t, opts.signal));
71
75
  };
72
76
  return {
@@ -93,7 +97,7 @@ async function mcpClient(opts) {
93
97
  }
94
98
  exports.mcpClient = mcpClient;
95
99
  // ─── SDK construction (lazy require) ───────────────────────────────
96
- async function resolveClient(transport, clientInfo) {
100
+ async function resolveClient(transport, clientInfo, signal) {
97
101
  let mod;
98
102
  try {
99
103
  mod = (0, lazyRequire_js_1.lazyRequire)('@modelcontextprotocol/sdk/client/index.js');
@@ -107,7 +111,11 @@ async function resolveClient(transport, clientInfo) {
107
111
  capabilities: {},
108
112
  });
109
113
  const transportImpl = await buildTransport(transport);
110
- await client.connect(transportImpl);
114
+ // Same rule as callTool: options ride beside the transport, never inside it.
115
+ if (signal)
116
+ await client.connect(transportImpl, { signal });
117
+ else
118
+ await client.connect(transportImpl);
111
119
  return client;
112
120
  }
113
121
  async function buildTransport(t) {
@@ -155,11 +163,15 @@ function wrapMcpTool(serverName, sdk, mcp, signal) {
155
163
  const argsObj = args !== null && typeof args === 'object' && !Array.isArray(args)
156
164
  ? args
157
165
  : {};
158
- const result = await sdk.callTool({
159
- name: mcp.name,
160
- arguments: argsObj,
161
- ...(signal && { signal }),
162
- });
166
+ // The abort signal is NOT a request param — it belongs to the SDK's
167
+ // third argument (`RequestOptions`). Put it in the params object and
168
+ // it gets serialized onto the wire as an empty `{}` and the call is
169
+ // uncancellable: a silent no-op that only a real transport reveals.
170
+ // `resultSchema` (2nd arg) is left to the SDK's own default.
171
+ const params = { name: mcp.name, arguments: argsObj };
172
+ const result = signal
173
+ ? await sdk.callTool(params, undefined, { signal })
174
+ : await sdk.callTool(params);
163
175
  // MCP returns content blocks. We concatenate text blocks into
164
176
  // a single string for the agent's tool-result event payload.
165
177
  // Non-text blocks (images, resources) are summarized with their
@@ -1 +1 @@
1
- {"version":3,"file":"mcpClient.js","sourceRoot":"","sources":["../../../src/lib/mcp/mcpClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcpClient.js","sourceRoot":"","sources":["../../../src/lib/mcp/mcpClient.ts"],"names":[],"mappings":"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"}