agentfootprint 6.25.0 → 6.26.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/dist/esm/lib/context-bisect/ablation.js +183 -0
- package/dist/esm/lib/context-bisect/ablation.js.map +1 -0
- package/dist/esm/lib/context-bisect/bisect.js +129 -0
- package/dist/esm/lib/context-bisect/bisect.js.map +1 -0
- package/dist/esm/lib/context-bisect/index.js +22 -0
- package/dist/esm/lib/context-bisect/index.js.map +1 -0
- package/dist/esm/lib/context-bisect/llmEdgeWeigher.js +0 -0
- package/dist/esm/lib/context-bisect/llmEdgeWeigher.js.map +1 -0
- package/dist/esm/lib/context-bisect/localize.js +555 -0
- package/dist/esm/lib/context-bisect/localize.js.map +1 -0
- package/dist/esm/lib/context-bisect/types.js +56 -0
- package/dist/esm/lib/context-bisect/types.js.map +1 -0
- package/dist/esm/observe.js +7 -0
- package/dist/esm/observe.js.map +1 -1
- package/dist/lib/context-bisect/ablation.js +192 -0
- package/dist/lib/context-bisect/ablation.js.map +1 -0
- package/dist/lib/context-bisect/bisect.js +133 -0
- package/dist/lib/context-bisect/bisect.js.map +1 -0
- package/dist/lib/context-bisect/index.js +40 -0
- package/dist/lib/context-bisect/index.js.map +1 -0
- package/dist/lib/context-bisect/llmEdgeWeigher.js +0 -0
- package/dist/lib/context-bisect/llmEdgeWeigher.js.map +1 -0
- package/dist/lib/context-bisect/localize.js +563 -0
- package/dist/lib/context-bisect/localize.js.map +1 -0
- package/dist/lib/context-bisect/types.js +59 -0
- package/dist/lib/context-bisect/types.js.map +1 -0
- package/dist/observe.js +42 -20
- package/dist/observe.js.map +1 -1
- package/dist/types/lib/context-bisect/ablation.d.ts +97 -0
- package/dist/types/lib/context-bisect/ablation.d.ts.map +1 -0
- package/dist/types/lib/context-bisect/bisect.d.ts +76 -0
- package/dist/types/lib/context-bisect/bisect.d.ts.map +1 -0
- package/dist/types/lib/context-bisect/index.d.ts +22 -0
- package/dist/types/lib/context-bisect/index.d.ts.map +1 -0
- package/dist/types/lib/context-bisect/llmEdgeWeigher.d.ts +125 -0
- package/dist/types/lib/context-bisect/llmEdgeWeigher.d.ts.map +1 -0
- package/dist/types/lib/context-bisect/localize.d.ts +119 -0
- package/dist/types/lib/context-bisect/localize.d.ts.map +1 -0
- package/dist/types/lib/context-bisect/types.d.ts +356 -0
- package/dist/types/lib/context-bisect/types.d.ts.map +1 -0
- package/dist/types/observe.d.ts +1 -0
- package/dist/types/observe.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/observe.js
CHANGED
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
* directly; Tier 3 dashboards are opt-in.
|
|
33
33
|
*/
|
|
34
34
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
-
exports.
|
|
36
|
-
exports.toolChoiceRecorder = exports.buildChoiceContext = exports.saysWhatNotWhenRule = exports.runToolLintCli = exports.optionalParamRule = exports.MOCK_EMBEDDER_CALIBRATION = exports.formatToolCatalogReport = exports.enumInProseRule = exports.differentiationHint = exports.descriptionRule = exports.defaultStructuralRules = exports.DEFAULT_WHEN_CUES = exports.DEFAULT_WATCH_BAND = exports.DEFAULT_OMISSION_CUES = exports.DEFAULT_CONFUSABILITY_THRESHOLD = exports.confusabilityText = void 0;
|
|
35
|
+
exports.bisectCulprits = exports.applyAblations = exports.ablationForSuspect = exports.traceToolpack = exports.TOOLPACK_HARD_CAPS = exports.callTraceTool = exports.structuralProximity = exports.scoreMargin = exports.scoreInfluence = exports.persistence = exports.pairwiseSimilarity = exports.finalAnswerSimilarity = exports.embeddingCache = exports.EmbeddingCache = exports.DEFAULT_PERSISTENCE_THRESHOLD = exports.DEFAULT_MARGIN_THRESHOLD = exports.DEFAULT_INFLUENCE_WEIGHTS = exports.contentHash = exports.compositeScore = exports.averageRelevancy = exports.adaptWeights = exports.typedEmit = exports.agentThinkingTrace = exports.toolLineageRecorder = exports.attachStatus = exports.LoggingDomains = exports.attachLogging = exports.skillRecorder = exports.permissionRecorder = exports.memoryRecorder = exports.evalRecorder = exports.contextEvaluatedRecorder = exports.toolsRecorder = exports.costRecorder = exports.LiveAgentTurnTracker = exports.LiveToolTracker = exports.LiveLLMTracker = exports.LiveStateRecorder = exports.liveStateRecorder = exports.buildStepGraph = exports.attachFlowchart = exports.runStepRecorder = exports.RunStepRecorder = exports.buildRunSteps = exports.BoundaryRecorder = exports.boundaryRecorder = exports.agentRecorder = exports.compositionRecorder = exports.streamRecorder = exports.ContextRecorder = void 0;
|
|
36
|
+
exports.toolChoiceRecorder = exports.buildChoiceContext = exports.saysWhatNotWhenRule = exports.runToolLintCli = exports.optionalParamRule = exports.MOCK_EMBEDDER_CALIBRATION = exports.formatToolCatalogReport = exports.enumInProseRule = exports.differentiationHint = exports.descriptionRule = exports.defaultStructuralRules = exports.DEFAULT_WHEN_CUES = exports.DEFAULT_WATCH_BAND = exports.DEFAULT_OMISSION_CUES = exports.DEFAULT_CONFUSABILITY_THRESHOLD = exports.confusabilityText = exports.coerceCatalog = exports.catalogFromTools = exports.analyzeToolCatalog = exports.verdictFor = exports.suspectLabel = exports.stepOutputText = exports.runAblationProbe = exports.probeFlipped = exports.localizeContextBug = exports.llmEdgeWeigher = exports.llmCallIdsFromEvents = exports.formatContextBugReport = exports.defaultSuspectClassifier = exports.defaultOutcomeComparator = exports.CONTEXT_BISECT_DEFAULTS = void 0;
|
|
37
37
|
// Tier 1 — context + stream
|
|
38
38
|
var ContextRecorder_js_1 = require("./recorders/core/ContextRecorder.js");
|
|
39
39
|
Object.defineProperty(exports, "ContextRecorder", { enumerable: true, get: function () { return ContextRecorder_js_1.ContextRecorder; } });
|
|
@@ -121,6 +121,28 @@ var index_js_2 = require("./lib/trace-toolpack/index.js");
|
|
|
121
121
|
Object.defineProperty(exports, "callTraceTool", { enumerable: true, get: function () { return index_js_2.callTraceTool; } });
|
|
122
122
|
Object.defineProperty(exports, "TOOLPACK_HARD_CAPS", { enumerable: true, get: function () { return index_js_2.TOOLPACK_HARD_CAPS; } });
|
|
123
123
|
Object.defineProperty(exports, "traceToolpack", { enumerable: true, get: function () { return index_js_2.traceToolpack; } });
|
|
124
|
+
// Contextual-bug localizer (RFC-003 Part B, D7–D9) — "git bisect for
|
|
125
|
+
// context". Assembly: footprintjs causal DAG (control edges + honesty
|
|
126
|
+
// markers + EdgeWeigher) × influence-core scoring (D6) × consumer-run
|
|
127
|
+
// counterfactual ablation. §B2 claim tiers: scores/weights are
|
|
128
|
+
// embedding-geometry PROXIES; ablation verdicts are the ONLY causal
|
|
129
|
+
// claims; slice completeness is bounded by tracking — and says so.
|
|
130
|
+
var index_js_3 = require("./lib/context-bisect/index.js");
|
|
131
|
+
Object.defineProperty(exports, "ablationForSuspect", { enumerable: true, get: function () { return index_js_3.ablationForSuspect; } });
|
|
132
|
+
Object.defineProperty(exports, "applyAblations", { enumerable: true, get: function () { return index_js_3.applyAblations; } });
|
|
133
|
+
Object.defineProperty(exports, "bisectCulprits", { enumerable: true, get: function () { return index_js_3.bisectCulprits; } });
|
|
134
|
+
Object.defineProperty(exports, "CONTEXT_BISECT_DEFAULTS", { enumerable: true, get: function () { return index_js_3.CONTEXT_BISECT_DEFAULTS; } });
|
|
135
|
+
Object.defineProperty(exports, "defaultOutcomeComparator", { enumerable: true, get: function () { return index_js_3.defaultOutcomeComparator; } });
|
|
136
|
+
Object.defineProperty(exports, "defaultSuspectClassifier", { enumerable: true, get: function () { return index_js_3.defaultSuspectClassifier; } });
|
|
137
|
+
Object.defineProperty(exports, "formatContextBugReport", { enumerable: true, get: function () { return index_js_3.formatContextBugReport; } });
|
|
138
|
+
Object.defineProperty(exports, "llmCallIdsFromEvents", { enumerable: true, get: function () { return index_js_3.llmCallIdsFromEvents; } });
|
|
139
|
+
Object.defineProperty(exports, "llmEdgeWeigher", { enumerable: true, get: function () { return index_js_3.llmEdgeWeigher; } });
|
|
140
|
+
Object.defineProperty(exports, "localizeContextBug", { enumerable: true, get: function () { return index_js_3.localizeContextBug; } });
|
|
141
|
+
Object.defineProperty(exports, "probeFlipped", { enumerable: true, get: function () { return index_js_3.probeFlipped; } });
|
|
142
|
+
Object.defineProperty(exports, "runAblationProbe", { enumerable: true, get: function () { return index_js_3.runAblationProbe; } });
|
|
143
|
+
Object.defineProperty(exports, "stepOutputText", { enumerable: true, get: function () { return index_js_3.stepOutputText; } });
|
|
144
|
+
Object.defineProperty(exports, "suspectLabel", { enumerable: true, get: function () { return index_js_3.suspectLabel; } });
|
|
145
|
+
Object.defineProperty(exports, "verdictFor", { enumerable: true, get: function () { return index_js_3.verdictFor; } });
|
|
124
146
|
// Tool-catalog confusability lint (RFC-002 tier 1, C1–C3) — build-time,
|
|
125
147
|
// CI-gateable, framework-agnostic: plain { name, description?, inputSchema? }
|
|
126
148
|
// tools in (OpenAI/Anthropic/MCP lists coerce via coerceCatalog; the
|
|
@@ -128,24 +150,24 @@ Object.defineProperty(exports, "traceToolpack", { enumerable: true, get: functio
|
|
|
128
150
|
// out. Pluggable structural rule pack; thresholds + embedder consumer-
|
|
129
151
|
// injected with our defaults. Bin: `agentfootprint-lint-tools`.
|
|
130
152
|
// Front door: docs/guides/tool-catalog-lint.md.
|
|
131
|
-
var
|
|
132
|
-
Object.defineProperty(exports, "analyzeToolCatalog", { enumerable: true, get: function () { return
|
|
133
|
-
Object.defineProperty(exports, "catalogFromTools", { enumerable: true, get: function () { return
|
|
134
|
-
Object.defineProperty(exports, "coerceCatalog", { enumerable: true, get: function () { return
|
|
135
|
-
Object.defineProperty(exports, "confusabilityText", { enumerable: true, get: function () { return
|
|
136
|
-
Object.defineProperty(exports, "DEFAULT_CONFUSABILITY_THRESHOLD", { enumerable: true, get: function () { return
|
|
137
|
-
Object.defineProperty(exports, "DEFAULT_OMISSION_CUES", { enumerable: true, get: function () { return
|
|
138
|
-
Object.defineProperty(exports, "DEFAULT_WATCH_BAND", { enumerable: true, get: function () { return
|
|
139
|
-
Object.defineProperty(exports, "DEFAULT_WHEN_CUES", { enumerable: true, get: function () { return
|
|
140
|
-
Object.defineProperty(exports, "defaultStructuralRules", { enumerable: true, get: function () { return
|
|
141
|
-
Object.defineProperty(exports, "descriptionRule", { enumerable: true, get: function () { return
|
|
142
|
-
Object.defineProperty(exports, "differentiationHint", { enumerable: true, get: function () { return
|
|
143
|
-
Object.defineProperty(exports, "enumInProseRule", { enumerable: true, get: function () { return
|
|
144
|
-
Object.defineProperty(exports, "formatToolCatalogReport", { enumerable: true, get: function () { return
|
|
145
|
-
Object.defineProperty(exports, "MOCK_EMBEDDER_CALIBRATION", { enumerable: true, get: function () { return
|
|
146
|
-
Object.defineProperty(exports, "optionalParamRule", { enumerable: true, get: function () { return
|
|
147
|
-
Object.defineProperty(exports, "runToolLintCli", { enumerable: true, get: function () { return
|
|
148
|
-
Object.defineProperty(exports, "saysWhatNotWhenRule", { enumerable: true, get: function () { return
|
|
153
|
+
var index_js_4 = require("./lib/tool-lint/index.js");
|
|
154
|
+
Object.defineProperty(exports, "analyzeToolCatalog", { enumerable: true, get: function () { return index_js_4.analyzeToolCatalog; } });
|
|
155
|
+
Object.defineProperty(exports, "catalogFromTools", { enumerable: true, get: function () { return index_js_4.catalogFromTools; } });
|
|
156
|
+
Object.defineProperty(exports, "coerceCatalog", { enumerable: true, get: function () { return index_js_4.coerceCatalog; } });
|
|
157
|
+
Object.defineProperty(exports, "confusabilityText", { enumerable: true, get: function () { return index_js_4.confusabilityText; } });
|
|
158
|
+
Object.defineProperty(exports, "DEFAULT_CONFUSABILITY_THRESHOLD", { enumerable: true, get: function () { return index_js_4.DEFAULT_CONFUSABILITY_THRESHOLD; } });
|
|
159
|
+
Object.defineProperty(exports, "DEFAULT_OMISSION_CUES", { enumerable: true, get: function () { return index_js_4.DEFAULT_OMISSION_CUES; } });
|
|
160
|
+
Object.defineProperty(exports, "DEFAULT_WATCH_BAND", { enumerable: true, get: function () { return index_js_4.DEFAULT_WATCH_BAND; } });
|
|
161
|
+
Object.defineProperty(exports, "DEFAULT_WHEN_CUES", { enumerable: true, get: function () { return index_js_4.DEFAULT_WHEN_CUES; } });
|
|
162
|
+
Object.defineProperty(exports, "defaultStructuralRules", { enumerable: true, get: function () { return index_js_4.defaultStructuralRules; } });
|
|
163
|
+
Object.defineProperty(exports, "descriptionRule", { enumerable: true, get: function () { return index_js_4.descriptionRule; } });
|
|
164
|
+
Object.defineProperty(exports, "differentiationHint", { enumerable: true, get: function () { return index_js_4.differentiationHint; } });
|
|
165
|
+
Object.defineProperty(exports, "enumInProseRule", { enumerable: true, get: function () { return index_js_4.enumInProseRule; } });
|
|
166
|
+
Object.defineProperty(exports, "formatToolCatalogReport", { enumerable: true, get: function () { return index_js_4.formatToolCatalogReport; } });
|
|
167
|
+
Object.defineProperty(exports, "MOCK_EMBEDDER_CALIBRATION", { enumerable: true, get: function () { return index_js_4.MOCK_EMBEDDER_CALIBRATION; } });
|
|
168
|
+
Object.defineProperty(exports, "optionalParamRule", { enumerable: true, get: function () { return index_js_4.optionalParamRule; } });
|
|
169
|
+
Object.defineProperty(exports, "runToolLintCli", { enumerable: true, get: function () { return index_js_4.runToolLintCli; } });
|
|
170
|
+
Object.defineProperty(exports, "saysWhatNotWhenRule", { enumerable: true, get: function () { return index_js_4.saysWhatNotWhenRule; } });
|
|
149
171
|
// Tool-choice margin recorder (RFC-002 tier 2, C4–C6) — per LLM call,
|
|
150
172
|
// ranks the OFFERED catalog against the choice context (user message +
|
|
151
173
|
// latest assistant reasoning) via influence-core scoreMargin; embeds
|
package/dist/observe.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observe.js","sourceRoot":"","sources":["../src/observe.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;;;;AAEH,4BAA4B;AAC5B,0EAAmG;AAA1F,qHAAA,eAAe,OAAA;AACxB,wEAAgG;AAAvF,mHAAA,cAAc,OAAA;AAEvB,+BAA+B;AAC/B,kFAGiD;AAF/C,6HAAA,mBAAmB,OAAA;AAGrB,sEAA6F;AAApF,iHAAA,aAAa,OAAA;AACtB,qFAkBuD;AAjBrD,uHAAA,gBAAgB,OAAA;AAChB,uHAAA,gBAAgB,OAAA;AAiBlB,mFAWsD;AAVpD,mHAAA,aAAa,OAAA;AACb,qHAAA,eAAe,OAAA;AACf,qHAAA,eAAe,OAAA;AASjB,uFAUwD;AATtD,uHAAA,eAAe,OAAA;AACf,sHAAA,cAAc,OAAA;AAShB,uFAUwD;AATtD,yHAAA,iBAAiB,OAAA;AACjB,yHAAA,iBAAiB,OAAA;AACjB,sHAAA,cAAc,OAAA;AACd,uHAAA,eAAe,OAAA;AACf,4HAAA,oBAAoB,OAAA;AAOtB,6BAA6B;AAC7B,oEAA0F;AAAjF,+GAAA,YAAY,OAAA;AACrB,sEAA6F;AAApF,iHAAA,aAAa,OAAA;AACtB,4FAGsD;AAFpD,uIAAA,wBAAwB,OAAA;AAG1B,oEAA0F;AAAjF,+GAAA,YAAY,OAAA;AACrB,wEAAgG;AAAvF,mHAAA,cAAc,OAAA;AACvB,gFAGgD;AAF9C,2HAAA,kBAAkB,OAAA;AAGpB,sEAA6F;AAApF,iHAAA,aAAa,OAAA;AACtB,mFAMsD;AALpD,mHAAA,aAAa,OAAA;AACb,oHAAA,cAAc,OAAA;AAKhB,iFAIqD;AAHnD,iHAAA,YAAY,OAAA;AAId,4EAA4E;AAC5E,gFAAgF;AAChF,2FAO0D;AANxD,6HAAA,mBAAmB,OAAA;AAOrB,gFAAgF;AAChF,gFAAgF;AAChF,yGASiE;AAR/D,mIAAA,kBAAkB,OAAA;AAUpB,uDAAuD;AACvD,8DAA0D;AAAjD,yGAAA,SAAS,OAAA;AAElB,uEAAuE;AACvE,uEAAuE;AACvE,uEAAuE;AACvE,oEAAoE;AACpE,oEAAoE;AACpE,kEAAkE;AAClE,eAAe;AACf,0DAgCuC;AA/BrC,wGAAA,YAAY,OAAA;AACZ,4GAAA,gBAAgB,OAAA;AAChB,0GAAA,cAAc,OAAA;AACd,uGAAA,WAAW,OAAA;AACX,qHAAA,yBAAyB,OAAA;AACzB,oHAAA,wBAAwB,OAAA;AACxB,yHAAA,6BAA6B,OAAA;AAC7B,0GAAA,cAAc,OAAA;AACd,0GAAA,cAAc,OAAA;AACd,iHAAA,qBAAqB,OAAA;AACrB,8GAAA,kBAAkB,OAAA;AAClB,uGAAA,WAAW,OAAA;AACX,0GAAA,cAAc,OAAA;AACd,uGAAA,WAAW,OAAA;AACX,+GAAA,mBAAmB,OAAA;AAkBrB,uEAAuE;AACvE,2EAA2E;AAC3E,mEAAmE;AACnE,0DAMuC;AALrC,yGAAA,aAAa,OAAA;AACb,8GAAA,kBAAkB,OAAA;AAClB,yGAAA,aAAa,OAAA;AAIf,wEAAwE;AACxE,8EAA8E;AAC9E,qEAAqE;AACrE,wEAAwE;AACxE,uEAAuE;AACvE,gEAAgE;AAChE,gDAAgD;AAChD,qDAgCkC;AA/BhC,8GAAA,kBAAkB,OAAA;AAClB,4GAAA,gBAAgB,OAAA;AAChB,yGAAA,aAAa,OAAA;AACb,6GAAA,iBAAiB,OAAA;AACjB,2HAAA,+BAA+B,OAAA;AAC/B,iHAAA,qBAAqB,OAAA;AACrB,8GAAA,kBAAkB,OAAA;AAClB,6GAAA,iBAAiB,OAAA;AACjB,kHAAA,sBAAsB,OAAA;AACtB,2GAAA,eAAe,OAAA;AACf,+GAAA,mBAAmB,OAAA;AACnB,2GAAA,eAAe,OAAA;AACf,mHAAA,uBAAuB,OAAA;AACvB,qHAAA,yBAAyB,OAAA;AACzB,6GAAA,iBAAiB,OAAA;AACjB,0GAAA,cAAc,OAAA;AACd,+GAAA,mBAAmB,OAAA;AAgBrB,sEAAsE;AACtE,uEAAuE;AACvE,qEAAqE;AACrE,oEAAoE;AACpE,yFASyD;AARvD,2HAAA,kBAAkB,OAAA;AAClB,2HAAA,kBAAkB,OAAA"}
|
|
1
|
+
{"version":3,"file":"observe.js","sourceRoot":"","sources":["../src/observe.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;;;;AAEH,4BAA4B;AAC5B,0EAAmG;AAA1F,qHAAA,eAAe,OAAA;AACxB,wEAAgG;AAAvF,mHAAA,cAAc,OAAA;AAEvB,+BAA+B;AAC/B,kFAGiD;AAF/C,6HAAA,mBAAmB,OAAA;AAGrB,sEAA6F;AAApF,iHAAA,aAAa,OAAA;AACtB,qFAkBuD;AAjBrD,uHAAA,gBAAgB,OAAA;AAChB,uHAAA,gBAAgB,OAAA;AAiBlB,mFAWsD;AAVpD,mHAAA,aAAa,OAAA;AACb,qHAAA,eAAe,OAAA;AACf,qHAAA,eAAe,OAAA;AASjB,uFAUwD;AATtD,uHAAA,eAAe,OAAA;AACf,sHAAA,cAAc,OAAA;AAShB,uFAUwD;AATtD,yHAAA,iBAAiB,OAAA;AACjB,yHAAA,iBAAiB,OAAA;AACjB,sHAAA,cAAc,OAAA;AACd,uHAAA,eAAe,OAAA;AACf,4HAAA,oBAAoB,OAAA;AAOtB,6BAA6B;AAC7B,oEAA0F;AAAjF,+GAAA,YAAY,OAAA;AACrB,sEAA6F;AAApF,iHAAA,aAAa,OAAA;AACtB,4FAGsD;AAFpD,uIAAA,wBAAwB,OAAA;AAG1B,oEAA0F;AAAjF,+GAAA,YAAY,OAAA;AACrB,wEAAgG;AAAvF,mHAAA,cAAc,OAAA;AACvB,gFAGgD;AAF9C,2HAAA,kBAAkB,OAAA;AAGpB,sEAA6F;AAApF,iHAAA,aAAa,OAAA;AACtB,mFAMsD;AALpD,mHAAA,aAAa,OAAA;AACb,oHAAA,cAAc,OAAA;AAKhB,iFAIqD;AAHnD,iHAAA,YAAY,OAAA;AAId,4EAA4E;AAC5E,gFAAgF;AAChF,2FAO0D;AANxD,6HAAA,mBAAmB,OAAA;AAOrB,gFAAgF;AAChF,gFAAgF;AAChF,yGASiE;AAR/D,mIAAA,kBAAkB,OAAA;AAUpB,uDAAuD;AACvD,8DAA0D;AAAjD,yGAAA,SAAS,OAAA;AAElB,uEAAuE;AACvE,uEAAuE;AACvE,uEAAuE;AACvE,oEAAoE;AACpE,oEAAoE;AACpE,kEAAkE;AAClE,eAAe;AACf,0DAgCuC;AA/BrC,wGAAA,YAAY,OAAA;AACZ,4GAAA,gBAAgB,OAAA;AAChB,0GAAA,cAAc,OAAA;AACd,uGAAA,WAAW,OAAA;AACX,qHAAA,yBAAyB,OAAA;AACzB,oHAAA,wBAAwB,OAAA;AACxB,yHAAA,6BAA6B,OAAA;AAC7B,0GAAA,cAAc,OAAA;AACd,0GAAA,cAAc,OAAA;AACd,iHAAA,qBAAqB,OAAA;AACrB,8GAAA,kBAAkB,OAAA;AAClB,uGAAA,WAAW,OAAA;AACX,0GAAA,cAAc,OAAA;AACd,uGAAA,WAAW,OAAA;AACX,+GAAA,mBAAmB,OAAA;AAkBrB,uEAAuE;AACvE,2EAA2E;AAC3E,mEAAmE;AACnE,0DAMuC;AALrC,yGAAA,aAAa,OAAA;AACb,8GAAA,kBAAkB,OAAA;AAClB,yGAAA,aAAa,OAAA;AAIf,qEAAqE;AACrE,sEAAsE;AACtE,sEAAsE;AACtE,+DAA+D;AAC/D,oEAAoE;AACpE,mEAAmE;AACnE,0DA8CuC;AA7CrC,8GAAA,kBAAkB,OAAA;AAClB,0GAAA,cAAc,OAAA;AACd,0GAAA,cAAc,OAAA;AACd,mHAAA,uBAAuB,OAAA;AACvB,oHAAA,wBAAwB,OAAA;AACxB,oHAAA,wBAAwB,OAAA;AACxB,kHAAA,sBAAsB,OAAA;AACtB,gHAAA,oBAAoB,OAAA;AACpB,0GAAA,cAAc,OAAA;AACd,8GAAA,kBAAkB,OAAA;AAClB,wGAAA,YAAY,OAAA;AACZ,4GAAA,gBAAgB,OAAA;AAChB,0GAAA,cAAc,OAAA;AACd,wGAAA,YAAY,OAAA;AACZ,sGAAA,UAAU,OAAA;AAgCZ,wEAAwE;AACxE,8EAA8E;AAC9E,qEAAqE;AACrE,wEAAwE;AACxE,uEAAuE;AACvE,gEAAgE;AAChE,gDAAgD;AAChD,qDAgCkC;AA/BhC,8GAAA,kBAAkB,OAAA;AAClB,4GAAA,gBAAgB,OAAA;AAChB,yGAAA,aAAa,OAAA;AACb,6GAAA,iBAAiB,OAAA;AACjB,2HAAA,+BAA+B,OAAA;AAC/B,iHAAA,qBAAqB,OAAA;AACrB,8GAAA,kBAAkB,OAAA;AAClB,6GAAA,iBAAiB,OAAA;AACjB,kHAAA,sBAAsB,OAAA;AACtB,2GAAA,eAAe,OAAA;AACf,+GAAA,mBAAmB,OAAA;AACnB,2GAAA,eAAe,OAAA;AACf,mHAAA,uBAAuB,OAAA;AACvB,qHAAA,yBAAyB,OAAA;AACzB,6GAAA,iBAAiB,OAAA;AACjB,0GAAA,cAAc,OAAA;AACd,+GAAA,mBAAmB,OAAA;AAgBrB,sEAAsE;AACtE,uEAAuE;AACvE,qEAAqE;AACrE,oEAAoE;AACpE,yFASyD;AARvD,2HAAA,kBAAkB,OAAA;AAClB,2HAAA,kBAAkB,OAAA"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ablation — the counterfactual seam (RFC-003 Part B, D8 stage 4 + the
|
|
3
|
+
* D9 stats engine).
|
|
4
|
+
*
|
|
5
|
+
* Three pieces:
|
|
6
|
+
*
|
|
7
|
+
* 1. **Adapters** — `ablationForSuspect` maps a classified suspect to
|
|
8
|
+
* the spec that removes it (tool → drop from catalog; injection /
|
|
9
|
+
* fact / skill → exclude the `Injection.id`; memory → filter the
|
|
10
|
+
* `MemoryEntry.id`; arg → consumer-override note).
|
|
11
|
+
*
|
|
12
|
+
* 2. **The seam** — `applyAblations` filters the inputs an agent is
|
|
13
|
+
* BUILT from. Documented here because the seam did not previously
|
|
14
|
+
* exist: `AgentOptions` has no `ignoredTools` runtime kill-switch, so
|
|
15
|
+
* tool ablation happens at construction (the consumer's
|
|
16
|
+
* `AblationRunner` rebuilds the agent from filtered inputs). Same for
|
|
17
|
+
* injections and memory entries.
|
|
18
|
+
*
|
|
19
|
+
* 3. **The probe engine** — `runAblationProbe` calls the consumer's
|
|
20
|
+
* runner N seeded times, measures embedding similarity to the
|
|
21
|
+
* original output, counts outcome flips, and returns variance —
|
|
22
|
+
* never a single-run verdict (D9 discipline).
|
|
23
|
+
*
|
|
24
|
+
* §B2: only `runAblationProbe`-derived verdicts are causal claims; every
|
|
25
|
+
* score elsewhere is a correlational proxy.
|
|
26
|
+
*/
|
|
27
|
+
import type { Embedder } from '../influence-core/index.js';
|
|
28
|
+
import type { AblationRerun, AblationRunStats, AblationSpec, AblationVerdict, OutcomeComparator, Suspect } from './types.js';
|
|
29
|
+
/**
|
|
30
|
+
* The spec that removes one suspect — or `undefined` for kind `'stage'`
|
|
31
|
+
* (plain pipeline stages have no removable input; re-rank or refactor).
|
|
32
|
+
*/
|
|
33
|
+
export declare function ablationForSuspect(suspect: Suspect): AblationSpec | undefined;
|
|
34
|
+
/** Anything with a stable id — `Injection` and `MemoryEntry` both fit. */
|
|
35
|
+
interface Identified {
|
|
36
|
+
readonly id: string;
|
|
37
|
+
}
|
|
38
|
+
/** Anything with a named schema — the library's `Tool` fits. */
|
|
39
|
+
interface NamedTool {
|
|
40
|
+
readonly schema: {
|
|
41
|
+
readonly name: string;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export interface AblationTargets<TTool extends NamedTool = NamedTool, TInjection extends Identified = Identified, TMemoryEntry extends Identified = Identified> {
|
|
45
|
+
readonly tools?: readonly TTool[];
|
|
46
|
+
readonly injections?: readonly TInjection[];
|
|
47
|
+
readonly memoryEntries?: readonly TMemoryEntry[];
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Apply ablation specs to the inputs an agent is constructed from —
|
|
51
|
+
* THE documented seam (see module docs). Generic over the concrete tool /
|
|
52
|
+
* injection / memory-entry types so it filters without importing them.
|
|
53
|
+
*
|
|
54
|
+
* `'arg'` specs are deliberately NOT handled here: run input belongs to
|
|
55
|
+
* the consumer's runner (`spec.note` says so).
|
|
56
|
+
*
|
|
57
|
+
* @example inside an AblationRunner
|
|
58
|
+
* ```ts
|
|
59
|
+
* const { tools, injections } = applyAblations(specs, {
|
|
60
|
+
* tools: ALL_TOOLS, injections: ALL_FACTS,
|
|
61
|
+
* });
|
|
62
|
+
* const agent = Agent.create({ provider: freshProvider(), model })
|
|
63
|
+
* .tools([...tools]);
|
|
64
|
+
* for (const inj of injections) agent.fact(inj);
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
export declare function applyAblations<TTool extends NamedTool, TInjection extends Identified, TMemoryEntry extends Identified>(specs: readonly AblationSpec[], targets: AblationTargets<TTool, TInjection, TMemoryEntry>): {
|
|
68
|
+
tools: readonly TTool[];
|
|
69
|
+
injections: readonly TInjection[];
|
|
70
|
+
memoryEntries: readonly TMemoryEntry[];
|
|
71
|
+
};
|
|
72
|
+
/** The default comparator: embedding similarity below the threshold. */
|
|
73
|
+
export declare function defaultOutcomeComparator(embedder: Embedder, flipThreshold: number): OutcomeComparator;
|
|
74
|
+
/** Resolved probe configuration shared by D8 and D9. */
|
|
75
|
+
export interface ProbeConfig {
|
|
76
|
+
readonly rerun: AblationRerun;
|
|
77
|
+
readonly embedder: Embedder;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Run ONE probe: call the consumer's runner with `specs` once per seed
|
|
81
|
+
* (0..samples-1), measure each output's embedding similarity to the
|
|
82
|
+
* original, and count outcome flips. Variance is always reported.
|
|
83
|
+
*
|
|
84
|
+
* `samples` is clamped to ≥ 2 — D9: never single-run verdicts.
|
|
85
|
+
*/
|
|
86
|
+
export declare function runAblationProbe(config: ProbeConfig, specs: readonly AblationSpec[]): Promise<AblationRunStats>;
|
|
87
|
+
/** Majority-flip rule shared by D8 verdicts and D9 probes. */
|
|
88
|
+
export declare function probeFlipped(stats: AblationRunStats): boolean;
|
|
89
|
+
/**
|
|
90
|
+
* Translate probe evidence into the verdict — the ONLY causal claim tier
|
|
91
|
+
* (§B2). `baselineStable=false` (the un-ablated scenario itself flipped)
|
|
92
|
+
* forces `'inconclusive'`: no ablation verdict is trustworthy on an
|
|
93
|
+
* unstable baseline.
|
|
94
|
+
*/
|
|
95
|
+
export declare function verdictFor(label: string, stats: AblationRunStats, baselineStable: boolean): AblationVerdict;
|
|
96
|
+
export {};
|
|
97
|
+
//# sourceMappingURL=ablation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ablation.d.ts","sourceRoot":"","sources":["../../../../src/lib/context-bisect/ablation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,iBAAiB,EAEjB,OAAO,EACR,MAAM,YAAY,CAAC;AAKpB;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,GAAG,SAAS,CAyB7E;AAID,0EAA0E;AAC1E,UAAU,UAAU;IAClB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED,gEAAgE;AAChE,UAAU,SAAS;IACjB,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5C;AAED,MAAM,WAAW,eAAe,CAC9B,KAAK,SAAS,SAAS,GAAG,SAAS,EACnC,UAAU,SAAS,UAAU,GAAG,UAAU,EAC1C,YAAY,SAAS,UAAU,GAAG,UAAU;IAE5C,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,KAAK,EAAE,CAAC;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IAC5C,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;CAClD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAC5B,KAAK,SAAS,SAAS,EACvB,UAAU,SAAS,UAAU,EAC7B,YAAY,SAAS,UAAU,EAE/B,KAAK,EAAE,SAAS,YAAY,EAAE,EAC9B,OAAO,EAAE,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,YAAY,CAAC,GACxD;IACD,KAAK,EAAE,SAAS,KAAK,EAAE,CAAC;IACxB,UAAU,EAAE,SAAS,UAAU,EAAE,CAAC;IAClC,aAAa,EAAE,SAAS,YAAY,EAAE,CAAC;CACxC,CAiBA;AAgBD,wEAAwE;AACxE,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,MAAM,GACpB,iBAAiB,CAQnB;AAED,wDAAwD;AACxD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,SAAS,YAAY,EAAE,GAC7B,OAAO,CAAC,gBAAgB,CAAC,CAgB3B;AAED,8DAA8D;AAC9D,wBAAgB,YAAY,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAE7D;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,gBAAgB,EACvB,cAAc,EAAE,OAAO,GACtB,eAAe,CAgCjB"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* bisectCulprits — multi-culprit bisection over the ranked suspect set
|
|
3
|
+
* (RFC-003 Part B, block D9). The "git bisect" of the localizer.
|
|
4
|
+
*
|
|
5
|
+
* When single-suspect ablations don't flip the outcome — redundant causes
|
|
6
|
+
* (two facts that EACH justify the wrong answer), or interacting ones —
|
|
7
|
+
* the culprit is a SET. This harness finds a minimal culprit set by
|
|
8
|
+
* recursive halving over the ranked suspects (delta-debugging style,
|
|
9
|
+
* Zeller's ddmin specialized to two-way splits), then keeps searching the
|
|
10
|
+
* remainder for INDEPENDENT culprits until the remainder stops flipping.
|
|
11
|
+
*
|
|
12
|
+
* Probe semantics (the D9 discipline):
|
|
13
|
+
* - every probe = N seeded reruns of the consumer's `AblationRunner`
|
|
14
|
+
* with the probe's combined specs; "flipped" = MAJORITY of runs
|
|
15
|
+
* changed outcome; similarity mean ± spread is always reported —
|
|
16
|
+
* never single-run verdicts;
|
|
17
|
+
* - probe 0 is the BASELINE (no ablation): if it flips, the scenario
|
|
18
|
+
* itself is unstable and the result is honestly `'inconclusive'`;
|
|
19
|
+
* - probes are cached by spec-set, and budgeted (`maxProbes`) — running
|
|
20
|
+
* out of budget yields `'inconclusive'`, never a partial claim
|
|
21
|
+
* dressed up as a finding.
|
|
22
|
+
*
|
|
23
|
+
* §B2: the returned `verdict`/`culprits` are CAUSAL claims — they rest
|
|
24
|
+
* exclusively on counterfactual reruns. The input ranking only chooses
|
|
25
|
+
* the SEARCH ORDER (better ranking = fewer probes), it never decides the
|
|
26
|
+
* outcome.
|
|
27
|
+
*/
|
|
28
|
+
import type { AblationRerun, AblationRunStats, Embedder, Suspect } from './types.js';
|
|
29
|
+
/** One executed probe — full variance evidence, kept for the report. */
|
|
30
|
+
export interface BisectionProbe {
|
|
31
|
+
/** Labels of the suspects ablated together ([] = the baseline probe). */
|
|
32
|
+
readonly ablated: readonly string[];
|
|
33
|
+
readonly stats: AblationRunStats;
|
|
34
|
+
/** Majority-of-N outcome flip. */
|
|
35
|
+
readonly flipped: boolean;
|
|
36
|
+
}
|
|
37
|
+
export interface BisectionResult {
|
|
38
|
+
/**
|
|
39
|
+
* `'confirmed'` — a minimal culprit set was found and verified by
|
|
40
|
+
* counterfactual reruns. `'not-reproducible'` — ablating EVERY ranked
|
|
41
|
+
* suspect together does not flip the outcome: the bug's cause is not
|
|
42
|
+
* in the ranked set (look at the report's honesty flags — the slice
|
|
43
|
+
* may be incomplete). `'inconclusive'` — unstable baseline or probe
|
|
44
|
+
* budget exhausted.
|
|
45
|
+
*/
|
|
46
|
+
readonly verdict: 'confirmed' | 'not-reproducible' | 'inconclusive';
|
|
47
|
+
/**
|
|
48
|
+
* Minimal culprit set(s): each inner array is one minimal set whose
|
|
49
|
+
* JOINT ablation flips the outcome. Independent culprits appear as
|
|
50
|
+
* separate sets; redundant/interacting causes appear together in one.
|
|
51
|
+
*/
|
|
52
|
+
readonly culprits: readonly (readonly Suspect[])[];
|
|
53
|
+
/** Every probe executed, in order (baseline first). */
|
|
54
|
+
readonly probes: readonly BisectionProbe[];
|
|
55
|
+
/** Total consumer-runner invocations (probes × samples). */
|
|
56
|
+
readonly runsUsed: number;
|
|
57
|
+
}
|
|
58
|
+
export interface BisectCulpritsOptions {
|
|
59
|
+
/** Ranked suspects — only those carrying an applicable ablation spec
|
|
60
|
+
* participate ('arg' and 'stage' suspects are skipped: nothing the
|
|
61
|
+
* harness can remove for the consumer). */
|
|
62
|
+
readonly suspects: readonly Suspect[];
|
|
63
|
+
readonly rerun: AblationRerun;
|
|
64
|
+
/** Embedder for similarity stats (and the default flip comparator). */
|
|
65
|
+
readonly embedder: Embedder;
|
|
66
|
+
/** Probe budget. Default 24. Exhaustion → 'inconclusive'. */
|
|
67
|
+
readonly maxProbes?: number;
|
|
68
|
+
/** Max independent culprit sets to search for. Default 4. */
|
|
69
|
+
readonly maxCulprits?: number;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Find minimal culprit set(s) by seeded counterfactual bisection. See
|
|
73
|
+
* module docs for semantics and the §B2 claim tier.
|
|
74
|
+
*/
|
|
75
|
+
export declare function bisectCulprits(options: BisectCulpritsOptions): Promise<BisectionResult>;
|
|
76
|
+
//# sourceMappingURL=bisect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bisect.d.ts","sourceRoot":"","sources":["../../../../src/lib/context-bisect/bisect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAMrF,wEAAwE;AACxE,MAAM,WAAW,cAAc;IAC7B,yEAAyE;IACzE,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACjC,kCAAkC;IAClC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B;;;;;;;OAOG;IACH,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,kBAAkB,GAAG,cAAc,CAAC;IACpE;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,SAAS,OAAO,EAAE,CAAC,EAAE,CAAC;IACnD,uDAAuD;IACvD,QAAQ,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,4DAA4D;IAC5D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC;;gDAE4C;IAC5C,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,6DAA6D;IAC7D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,6DAA6D;IAC7D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAUD;;;GAGG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,CA+F7F"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* context-bisect — RFC-003 Part B: the contextual-bug LOCALIZER,
|
|
3
|
+
* "git bisect for context".
|
|
4
|
+
*
|
|
5
|
+
* Assembly over shipped pieces: footprintjs 9.8.0's complete causal DAG
|
|
6
|
+
* (control edges, honesty markers, `EdgeWeigher` hook) × influence-core
|
|
7
|
+
* scoring (D6) × consumer-run counterfactual ablation.
|
|
8
|
+
*
|
|
9
|
+
* D7 — `llmEdgeWeigher` influence-weighted LLM-call slice edges
|
|
10
|
+
* D8 — `localizeContextBug` trigger → slice → ranked suspects → ablation
|
|
11
|
+
* D9 — `bisectCulprits` seeded multi-culprit bisection + variance
|
|
12
|
+
*
|
|
13
|
+
* §B2 claim tiers (spelled out on every type): weights/scores are
|
|
14
|
+
* embedding-geometry PROXIES; ablation verdicts are the ONLY causal
|
|
15
|
+
* claims; slice completeness is bounded by tracking — and says so.
|
|
16
|
+
*/
|
|
17
|
+
export { llmEdgeWeigher, stepOutputText, type LlmEdgeWeigherHandle, type LlmEdgeWeigherOptions, type RankedParentEdge, } from './llmEdgeWeigher.js';
|
|
18
|
+
export { defaultSuspectClassifier, formatContextBugReport, llmCallIdsFromEvents, localizeContextBug, suspectLabel, type ClassifyContext, type LocalizeContextBugOptions, type SuspectClassifier, type SuspectSeed, } from './localize.js';
|
|
19
|
+
export { ablationForSuspect, applyAblations, defaultOutcomeComparator, probeFlipped, runAblationProbe, verdictFor, type AblationTargets, type ProbeConfig, } from './ablation.js';
|
|
20
|
+
export { bisectCulprits, type BisectCulpritsOptions, type BisectionProbe, type BisectionResult, } from './bisect.js';
|
|
21
|
+
export { CONTEXT_BISECT_DEFAULTS, type AblationRerun, type AblationRunner, type AblationRunStats, type AblationSpec, type AblationVerdict, type AblationVerdictKind, type CapturedEventLike, type ContextBugArtifacts, type ContextBugReport, type EdgePathStep, type HonestyFlag, type HonestyFlagKind, type OutcomeComparator, type QualityTriggerLookup, type SimilarityStats, type SliceStats, type Suspect, type SuspectDetail, type SuspectKind, } from './types.js';
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/context-bisect/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EACL,cAAc,EACd,cAAc,EACd,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,GACtB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,EAClB,YAAY,EACZ,KAAK,eAAe,EACpB,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,EACtB,KAAK,WAAW,GACjB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,wBAAwB,EACxB,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,WAAW,GACjB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,cAAc,EACd,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,eAAe,GACrB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,uBAAuB,EACvB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,KAAK,aAAa,EAClB,KAAK,WAAW,GACjB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* llmEdgeWeigher — influence-scored `EdgeWeigher` for LLM-call slice edges
|
|
3
|
+
* (RFC-003 Part B, block D7).
|
|
4
|
+
*
|
|
5
|
+
* The gap this fills: footprintjs's causal slice treats every parent of an
|
|
6
|
+
* LLM call equally — a 12-parent hairball (system prompt, history, tool
|
|
7
|
+
* results, cache markers, counters …) gives a debugger 12 equally-plausible
|
|
8
|
+
* leads. D7 turns the hairball into a RANKED shortlist by weighing each
|
|
9
|
+
* parent edge with influence-core's composite (D6): the parent's WRITTEN
|
|
10
|
+
* content vs the LLM call's OUTPUT.
|
|
11
|
+
*
|
|
12
|
+
* Pattern: two-pass adapter over footprintjs's synchronous `EdgeWeigher`
|
|
13
|
+
* hook (A3). Embedding is async, the hook is sync — so the handle
|
|
14
|
+
* PRIMES first (walk an unweighted slice, embed every needed text
|
|
15
|
+
* in deduplicated batches, memoize composites), and `weigh` then
|
|
16
|
+
* answers synchronously from the primed map. `localizeContextBug`
|
|
17
|
+
* drives the two passes; standalone consumers call
|
|
18
|
+
* `prime(dag)` themselves and re-run `causalChain({ weigh })`.
|
|
19
|
+
* Role: `src/lib/context-bisect/` leaf. The engine stays zero-dep — the
|
|
20
|
+
* weigher is consumer-injected exactly as A3 intended.
|
|
21
|
+
*
|
|
22
|
+
* ## Honest claim (§B2)
|
|
23
|
+
*
|
|
24
|
+
* Weights are CORRELATIONAL proxies: deterministic embedding geometry
|
|
25
|
+
* between texts the run already committed — never model internals, never
|
|
26
|
+
* causal attribution (ablation is the causal tier). A weight of 0.93 means
|
|
27
|
+
* "this parent's content is semantically close to what the LLM produced",
|
|
28
|
+
* not "the LLM used it".
|
|
29
|
+
*
|
|
30
|
+
* ## Determinism
|
|
31
|
+
*
|
|
32
|
+
* Same artifacts + same (deterministic) embedder → same weights and same
|
|
33
|
+
* ranking, run after run: texts are built from the commit log in commit
|
|
34
|
+
* order, embedded via influence-core's deduplicated batch, and ties in
|
|
35
|
+
* `rankedParents` keep first-seen (slice BFS) order. Wrap the embedder in
|
|
36
|
+
* `embeddingCache(...)` to also make repeat localizations embed nothing.
|
|
37
|
+
*
|
|
38
|
+
* ## What is weighed
|
|
39
|
+
*
|
|
40
|
+
* DATA edges whose CHILD is an LLM call (`llmCallIds`). Everything else —
|
|
41
|
+
* non-LLM children, control edges (a routing decision's influence is not a
|
|
42
|
+
* semantic-content question) — returns `undefined`, which footprintjs
|
|
43
|
+
* stamps as the default 1.0.
|
|
44
|
+
*
|
|
45
|
+
* ## Redaction posture
|
|
46
|
+
*
|
|
47
|
+
* Texts come exclusively from the COMMIT LOG, which footprintjs scrubs at
|
|
48
|
+
* commit time — a redacted key's committed value IS the placeholder, so
|
|
49
|
+
* the embedder never sees the raw secret.
|
|
50
|
+
*/
|
|
51
|
+
import type { CommitBundle } from 'footprintjs/advanced';
|
|
52
|
+
import type { CausalNode, EdgeWeigher } from 'footprintjs/trace';
|
|
53
|
+
import { type Embedder, type InfluenceWeights } from '../influence-core/index.js';
|
|
54
|
+
export interface LlmEdgeWeigherOptions {
|
|
55
|
+
/**
|
|
56
|
+
* Injected embedder (D6 contract). Wrap in `embeddingCache(...)` so the
|
|
57
|
+
* weigher, the suspect refinement, and any margin/lint consumer share
|
|
58
|
+
* one embedding spend.
|
|
59
|
+
*/
|
|
60
|
+
readonly embedder: Embedder;
|
|
61
|
+
/**
|
|
62
|
+
* runtimeStageIds of LLM-call executions — the children whose parent
|
|
63
|
+
* edges get weighed. Provide explicitly, or extract from captured
|
|
64
|
+
* events with `llmCallIdsFromEvents` (the `stream.llm_start` ids).
|
|
65
|
+
*/
|
|
66
|
+
readonly llmCallIds: Iterable<string>;
|
|
67
|
+
/** The run's commit log — where edge texts are read from. */
|
|
68
|
+
readonly commitLog: readonly CommitBundle[];
|
|
69
|
+
/** Char cap per embedded text. Default 2000. */
|
|
70
|
+
readonly maxTextChars?: number;
|
|
71
|
+
/** Composite weights forwarded to influence-core. Default: paper priors. */
|
|
72
|
+
readonly weights?: InfluenceWeights;
|
|
73
|
+
/**
|
|
74
|
+
* Override the CHILD text (the LLM call's output). Default: the values
|
|
75
|
+
* the child committed, serialized `key=value` in trace order, capped.
|
|
76
|
+
*/
|
|
77
|
+
readonly childTextOf?: (runtimeStageId: string) => string | undefined;
|
|
78
|
+
/**
|
|
79
|
+
* Override the PARENT text for one edge. Default: the value the parent
|
|
80
|
+
* committed for the edge's key, serialized + capped.
|
|
81
|
+
*/
|
|
82
|
+
readonly parentTextOf?: (runtimeStageId: string, key: string) => string | undefined;
|
|
83
|
+
}
|
|
84
|
+
/** One ranked parent edge of an LLM call (descending weight). */
|
|
85
|
+
export interface RankedParentEdge {
|
|
86
|
+
readonly parentId: string;
|
|
87
|
+
readonly stageName: string;
|
|
88
|
+
readonly key: string;
|
|
89
|
+
/** Influence composite clamped to [0, 1] — a correlational proxy (§B2). */
|
|
90
|
+
readonly weight: number;
|
|
91
|
+
}
|
|
92
|
+
export interface LlmEdgeWeigherHandle {
|
|
93
|
+
/**
|
|
94
|
+
* Pass 1 — walk an (unweighted) causal DAG, embed every LLM-edge text in
|
|
95
|
+
* one deduplicated batch, and memoize composite weights. Idempotent;
|
|
96
|
+
* call again with a different DAG to extend the map.
|
|
97
|
+
*/
|
|
98
|
+
prime(root: CausalNode): Promise<void>;
|
|
99
|
+
/**
|
|
100
|
+
* Pass 2 — the synchronous footprintjs `EdgeWeigher`. Returns the primed
|
|
101
|
+
* weight for (LLM child, parent, data key); `undefined` (→ engine
|
|
102
|
+
* default 1.0) for control edges, non-LLM children, and unprimed pairs.
|
|
103
|
+
*/
|
|
104
|
+
readonly weigh: EdgeWeigher;
|
|
105
|
+
/**
|
|
106
|
+
* The D7 acceptance view: an LLM call's parents ranked by weight,
|
|
107
|
+
* descending; ties keep first-seen (slice BFS) order. Empty until
|
|
108
|
+
* `prime` ran over a DAG containing the call.
|
|
109
|
+
*/
|
|
110
|
+
rankedParents(llmCallId: string): readonly RankedParentEdge[];
|
|
111
|
+
/** Texts the embedder was given — exposed for security audits/tests. */
|
|
112
|
+
embeddedTexts(): readonly string[];
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Default child text: everything the step committed, `key=value` in trace
|
|
116
|
+
* order. For an agent's LLM call this carries the assistant content +
|
|
117
|
+
* tool-call intents — the step's observable OUTPUT.
|
|
118
|
+
*/
|
|
119
|
+
export declare function stepOutputText(commitLog: readonly CommitBundle[], lastIdxOf: Map<string, number>, runtimeStageId: string, maxChars: number): string | undefined;
|
|
120
|
+
/**
|
|
121
|
+
* Build the D7 weigher. See module docs for the two-pass contract, the
|
|
122
|
+
* determinism guarantee, and the §B2 honest claim (weights = proxies).
|
|
123
|
+
*/
|
|
124
|
+
export declare function llmEdgeWeigher(options: LlmEdgeWeigherOptions): LlmEdgeWeigherHandle;
|
|
125
|
+
//# sourceMappingURL=llmEdgeWeigher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llmEdgeWeigher.d.ts","sourceRoot":"","sources":["../../../../src/lib/context-bisect/llmEdgeWeigher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGjE,OAAO,EAEL,KAAK,QAAQ,EAEb,KAAK,gBAAgB,EACtB,MAAM,4BAA4B,CAAC;AAMpC,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtC,6DAA6D;IAC7D,QAAQ,CAAC,SAAS,EAAE,SAAS,YAAY,EAAE,CAAC;IAC5C,gDAAgD;IAChD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,4EAA4E;IAC5E,QAAQ,CAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC;IACpC;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IACtE;;;OAGG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;CACrF;AAED,iEAAiE;AACjE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B;;;;OAIG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,gBAAgB,EAAE,CAAC;IAC9D,wEAAwE;IACxE,aAAa,IAAI,SAAS,MAAM,EAAE,CAAC;CACpC;AAeD;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,SAAS,YAAY,EAAE,EAClC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,GACf,MAAM,GAAG,SAAS,CAepB;AAmBD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,oBAAoB,CA+FnF"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* localizeContextBug — the contextual-bug LOCALIZER, "git bisect for
|
|
3
|
+
* context" (RFC-003 Part B, block D8).
|
|
4
|
+
*
|
|
5
|
+
* The five-stage pipeline (each stage is a shipped piece — this file only
|
|
6
|
+
* ASSEMBLES):
|
|
7
|
+
*
|
|
8
|
+
* 1. TRIGGER — an explicit `atStep`, a custom trigger strategy, or
|
|
9
|
+
* the QualityRecorder's lowest-scoring step.
|
|
10
|
+
* 2. SLICE — footprintjs `causalChain` over the commit log, WITH
|
|
11
|
+
* control-dependence edges (D3) and honesty markers
|
|
12
|
+
* (A2/A4) when the artifacts carry them.
|
|
13
|
+
* 3. WEIGH — D7's `llmEdgeWeigher` stamps influence weights on
|
|
14
|
+
* every LLM-call parent edge (two-pass: prime, re-slice).
|
|
15
|
+
* 4. RANK — suspects = slice nodes classified into ablatable
|
|
16
|
+
* context sources (tool / injection / memory / arg),
|
|
17
|
+
* scored by max-product path weight × per-item semantic
|
|
18
|
+
* refinement. CORRELATIONAL tier — and marked so.
|
|
19
|
+
* 5. ABLATE — optional: the consumer's `AblationRunner` re-runs the
|
|
20
|
+
* scenario without each top suspect, N seeded times.
|
|
21
|
+
* Verdicts (the ONLY causal claims, §B2) + variance.
|
|
22
|
+
*
|
|
23
|
+
* Without a runner the report stops at stage 4 with
|
|
24
|
+
* `mode: 'correlational'` — explicitly a ranking of proxies, no causal
|
|
25
|
+
* claim anywhere.
|
|
26
|
+
*
|
|
27
|
+
* Every `source` / `step` id in the report is a plain runtimeStageId —
|
|
28
|
+
* drill any of them with the trace-toolpack tools (`trace_node`,
|
|
29
|
+
* `trace_slice`, `get_value`) over the same artifacts bag.
|
|
30
|
+
*/
|
|
31
|
+
import type { CausalNode } from 'footprintjs/trace';
|
|
32
|
+
import { type Embedder } from '../influence-core/index.js';
|
|
33
|
+
import type { AblationRerun, ContextBugArtifacts, ContextBugReport, Suspect, SuspectDetail, SuspectKind } from './types.js';
|
|
34
|
+
/**
|
|
35
|
+
* Extract LLM-call step ids from captured typed events: the
|
|
36
|
+
* `meta.runtimeStageId` of every `agentfootprint.stream.llm_start`
|
|
37
|
+
* envelope, deduplicated in event order. Collect events with
|
|
38
|
+
* `agent.on('*', (e) => events.push(e))`.
|
|
39
|
+
*/
|
|
40
|
+
export declare function llmCallIdsFromEvents(events: readonly {
|
|
41
|
+
readonly type: string;
|
|
42
|
+
readonly meta: {
|
|
43
|
+
readonly runtimeStageId: string;
|
|
44
|
+
};
|
|
45
|
+
}[]): string[];
|
|
46
|
+
/** A classified-but-unscored suspect produced by a classifier. */
|
|
47
|
+
export interface SuspectSeed {
|
|
48
|
+
readonly kind: SuspectKind;
|
|
49
|
+
readonly detail?: SuspectDetail;
|
|
50
|
+
}
|
|
51
|
+
/** What a classifier sees for one slice node. */
|
|
52
|
+
export interface ClassifyContext {
|
|
53
|
+
readonly node: CausalNode;
|
|
54
|
+
/** Keys this node committed. */
|
|
55
|
+
readonly keysWritten: readonly string[];
|
|
56
|
+
/** Verb-aware value of a key as of this node's last commit. */
|
|
57
|
+
readonly valueOf: (key: string) => unknown;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Pluggable classifier: map one slice node to its ablatable context
|
|
61
|
+
* sources. Return `undefined` to fall through to the default (which
|
|
62
|
+
* understands the agent chart's committed shapes); return `[]` to
|
|
63
|
+
* suppress the node entirely.
|
|
64
|
+
*/
|
|
65
|
+
export type SuspectClassifier = (ctx: ClassifyContext) => readonly SuspectSeed[] | undefined;
|
|
66
|
+
/**
|
|
67
|
+
* The default classifier — reads the node's COMMITTED values (already
|
|
68
|
+
* redaction-scrubbed) and recognizes the agent chart's shapes:
|
|
69
|
+
*
|
|
70
|
+
* - `systemPromptInjections` / `messagesInjections` / `toolsInjections`
|
|
71
|
+
* records with an engineered source → one suspect per `Injection.id`
|
|
72
|
+
* (kind `'memory'` for source `'memory'`, else `'injection'`).
|
|
73
|
+
* - `lastToolResult` → a `'tool'` suspect for the tool that ran.
|
|
74
|
+
* - footprintjs A2 honesty marker `args` → an `'arg'` suspect (the
|
|
75
|
+
* consumer's runner must override the input — nothing to filter).
|
|
76
|
+
* - anything else → the honest `'stage'` fallback (no ablation spec).
|
|
77
|
+
*/
|
|
78
|
+
export declare function defaultSuspectClassifier(ctx: ClassifyContext): readonly SuspectSeed[];
|
|
79
|
+
export interface LocalizeContextBugOptions {
|
|
80
|
+
readonly artifacts: ContextBugArtifacts;
|
|
81
|
+
/** Injected embedder (D6) — wrap in `embeddingCache(...)`. */
|
|
82
|
+
readonly embedder: Embedder;
|
|
83
|
+
/** Explicit trigger step (runtimeStageId). Wins over everything. */
|
|
84
|
+
readonly atStep?: string;
|
|
85
|
+
/** Custom trigger strategy — consulted when `atStep` is absent. */
|
|
86
|
+
readonly trigger?: (artifacts: ContextBugArtifacts) => string | undefined;
|
|
87
|
+
/**
|
|
88
|
+
* The counterfactual tier: supply a runner (+ the original output) and
|
|
89
|
+
* top suspects get ablation verdicts. Absent → the report stops at the
|
|
90
|
+
* ranking, marked `mode: 'correlational'`.
|
|
91
|
+
*/
|
|
92
|
+
readonly rerun?: AblationRerun;
|
|
93
|
+
/** Slice depth budget. Default 12. */
|
|
94
|
+
readonly maxDepth?: number;
|
|
95
|
+
/** Slice node budget. Default 80. */
|
|
96
|
+
readonly maxNodes?: number;
|
|
97
|
+
/** Ranked suspects kept on the report. Default 12. */
|
|
98
|
+
readonly maxSuspects?: number;
|
|
99
|
+
/** Override / extend the suspect classifier. */
|
|
100
|
+
readonly classify?: SuspectClassifier;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Localize a contextual bug: trigger → causal slice → influence-weighted
|
|
104
|
+
* ranking → (optional) counterfactual ablation. See module docs for the
|
|
105
|
+
* pipeline and the §B2 claim tiers.
|
|
106
|
+
*
|
|
107
|
+
* @throws when no trigger can be resolved (no `atStep`, no custom
|
|
108
|
+
* strategy hit, no `artifacts.quality`), or when the trigger step
|
|
109
|
+
* is not in the commit log.
|
|
110
|
+
*/
|
|
111
|
+
export declare function localizeContextBug(options: LocalizeContextBugOptions): Promise<ContextBugReport>;
|
|
112
|
+
export declare function suspectLabel(suspect: Suspect): string;
|
|
113
|
+
/**
|
|
114
|
+
* Human-readable report. The claim tiers are spelled out in the output
|
|
115
|
+
* itself (§B2): scores are proxies; verdict lines are the only causal
|
|
116
|
+
* claims; every ⚠ honesty flag prints.
|
|
117
|
+
*/
|
|
118
|
+
export declare function formatContextBugReport(report: ContextBugReport): string;
|
|
119
|
+
//# sourceMappingURL=localize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localize.d.ts","sourceRoot":"","sources":["../../../../src/lib/context-bisect/localize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAkB,KAAK,QAAQ,EAAsB,MAAM,4BAA4B,CAAC;AAG/F,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAIhB,OAAO,EACP,aAAa,EACb,WAAW,EACZ,MAAM,YAAY,CAAC;AAKpB;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,EAAE,GAC/F,MAAM,EAAE,CAWV;AAID,kEAAkE;AAClE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;CACjC;AAED,iDAAiD;AACjD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,gCAAgC;IAChC,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,+DAA+D;IAC/D,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;CAC5C;AAED;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,eAAe,KAAK,SAAS,WAAW,EAAE,GAAG,SAAS,CAAC;AAuB7F;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,eAAe,GAAG,SAAS,WAAW,EAAE,CAsDrF;AAmGD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAC;IACxC,8DAA8D;IAC9D,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,oEAAoE;IACpE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,mEAAmE;IACnE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,mBAAmB,KAAK,MAAM,GAAG,SAAS,CAAC;IAC1E;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;IAC/B,sCAAsC;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,qCAAqC;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,sDAAsD;IACtD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,gDAAgD;IAChD,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CACvC;AAID;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,gBAAgB,CAAC,CA+N3B;AAsGD,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAGrD;AAID;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAiFvE"}
|