@tangle-network/agent-eval 0.140.1 → 0.141.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/CHANGELOG.md +15 -0
- package/dist/analyst/index.d.ts +74 -6
- package/dist/analyst/index.d.ts.map +1 -1
- package/dist/analyst/index.js +6 -6
- package/dist/{benchmark-command-Bo_hkhQf.js → benchmark-command-D8xXNVVh.js} +2239 -1820
- package/dist/benchmark-command-D8xXNVVh.js.map +1 -0
- package/dist/benchmarks/index.js +1 -1
- package/dist/{benchmarks-HwoBE32G.js → benchmarks-Ce8GdJbc.js} +4 -4
- package/dist/{benchmarks-HwoBE32G.js.map → benchmarks-Ce8GdJbc.js.map} +1 -1
- package/dist/campaign/index.js +3 -3
- package/dist/{campaign-BzjYNYVZ.js → campaign-COFTVy3Q.js} +3 -3
- package/dist/{campaign-BzjYNYVZ.js.map → campaign-COFTVy3Q.js.map} +1 -1
- package/dist/cli.js +1 -1
- package/dist/contract/index.d.ts.map +1 -1
- package/dist/contract/index.js +56 -13
- package/dist/contract/index.js.map +1 -1
- package/dist/{default-registry-BOiBXNFh.js → default-registry-BupFSXSN.js} +108 -20
- package/dist/default-registry-BupFSXSN.js.map +1 -0
- package/dist/default-registry-Ci7wAAR8.d.ts.map +1 -1
- package/dist/{dspy-rlm-engine-Bkak4nzo.js → dspy-rlm-engine-Bw8Zz9CX.js} +7 -4
- package/dist/{dspy-rlm-engine-Bkak4nzo.js.map → dspy-rlm-engine-Bw8Zz9CX.js.map} +1 -1
- package/dist/{extract-usage-C5vMw-0R.js → extract-usage-7l1Xq5ti.js} +2 -2
- package/dist/{extract-usage-C5vMw-0R.js.map → extract-usage-7l1Xq5ti.js.map} +1 -1
- package/dist/index.d.ts +68 -31
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +122 -46
- package/dist/index.js.map +1 -1
- package/dist/{kind-factory-DB7nIs35.js → kind-factory-Bvwe3pup.js} +11 -1
- package/dist/kind-factory-Bvwe3pup.js.map +1 -0
- package/dist/multishot/index.d.ts +29 -6
- package/dist/multishot/index.d.ts.map +1 -1
- package/dist/multishot/index.js +53 -3
- package/dist/multishot/index.js.map +1 -1
- package/dist/openapi.json +1 -1
- package/dist/replay-BqTgoioO.d.ts.map +1 -1
- package/dist/{replay-k2MsOmv5.js → replay-DjUfTrHD.js} +40 -48
- package/dist/replay-DjUfTrHD.js.map +1 -0
- package/dist/{single-run-lock-CiQThJxB.js → single-run-lock-BcvPQY57.js} +65 -15
- package/dist/single-run-lock-BcvPQY57.js.map +1 -0
- package/dist/{skill-usage-CVVnoIx-.d.ts → skill-usage-CNZTk_LT.d.ts} +8 -4
- package/dist/{skill-usage-CVVnoIx-.d.ts.map → skill-usage-CNZTk_LT.d.ts.map} +1 -1
- package/dist/{skillopt-optimization-method-CSBQ8Qma.js → skillopt-optimization-method-DV6c4ooy.js} +2 -2
- package/dist/{skillopt-optimization-method-CSBQ8Qma.js.map → skillopt-optimization-method-DV6c4ooy.js.map} +1 -1
- package/dist/{store-otlp-vRByAR6h.js → store-otlp-D4I90_vR.js} +2 -2
- package/dist/{store-otlp-vRByAR6h.js.map → store-otlp-D4I90_vR.js.map} +1 -1
- package/dist/traces.js +4 -4
- package/docs/adapters-observability.md +35 -21
- package/docs/concepts.md +1 -0
- package/docs/distributed-driver.md +7 -3
- package/docs/feature-guide.md +1 -0
- package/docs/insight-report.md +1 -1
- package/docs/trace-analysis.md +11 -0
- package/docs/wire-protocol.md +70 -2
- package/package.json +5 -3
- package/dist/benchmark-command-Bo_hkhQf.js.map +0 -1
- package/dist/default-registry-BOiBXNFh.js.map +0 -1
- package/dist/kind-factory-DB7nIs35.js.map +0 -1
- package/dist/replay-k2MsOmv5.js.map +0 -1
- package/dist/single-run-lock-CiQThJxB.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { n as LlmClient } from "./llm-client-B3WXSH5Y.js";
|
|
2
2
|
import { LLM_CONTEXT_TOKENS, LLM_INPUT_TOKEN_ATTR_KEYS, LLM_OUTPUT_TOKEN_ATTR_KEYS, TOOL_NAME_ATTR_KEYS } from "./trace-attributes.js";
|
|
3
3
|
import { t as executionTrackByLane } from "./execution-tracks-CpgFPpS5.js";
|
|
4
|
-
import { $ as spanEpochMillis, H as snapshotExactExecutionPlan, R as findingSubjectGrammarPromptFor, U as deepFreezeCanonicalJson, V as snapshotExactExecutionComponentIdentity, t as createTraceAnalyst } from "./kind-factory-
|
|
4
|
+
import { $ as spanEpochMillis, H as snapshotExactExecutionPlan, R as findingSubjectGrammarPromptFor, U as deepFreezeCanonicalJson, V as snapshotExactExecutionComponentIdentity, t as createTraceAnalyst } from "./kind-factory-Bvwe3pup.js";
|
|
5
5
|
import { i as validateUsageSettlementTimeout, o as makeFinding, t as assertValidAnalystUsageReceipt } from "./usage-receipt-CgxMEBZq.js";
|
|
6
6
|
import { i as hashCanonical, r as canonicalString } from "./canonical-D011XM8r.js";
|
|
7
7
|
import { t as analyzeSupervisorRunIntegrity } from "./integrity-hruKe6oe.js";
|
|
@@ -103,6 +103,27 @@ function resolveModel(req, defaultModel) {
|
|
|
103
103
|
const INPUT_GROWTH_FACTOR = 3;
|
|
104
104
|
/** Tool-usage signals need at least this many calls to be meaningful. */
|
|
105
105
|
const MIN_TOOL_CALLS = 3;
|
|
106
|
+
/**
|
|
107
|
+
* Serial calls required before a strictly-decreasing output run counts as decay.
|
|
108
|
+
*
|
|
109
|
+
* A run of n independent lengths is strictly decreasing by chance with
|
|
110
|
+
* probability 1/n!, so the old minimum of 3 fired on roughly one sequence in
|
|
111
|
+
* six. The paired `inputIsMonotonic && inputGrew` guard does not offset that:
|
|
112
|
+
* context accumulates by construction in a serial agent loop, so input growth
|
|
113
|
+
* is very nearly free evidence. At 5 calls chance alone accounts for under 1%,
|
|
114
|
+
* which is the bar a signal reported at full confidence has to clear.
|
|
115
|
+
*/
|
|
116
|
+
const OUTPUT_DECAY_MINIMUM_CALLS = 5;
|
|
117
|
+
/**
|
|
118
|
+
* The last output must fall to at most this fraction of the first.
|
|
119
|
+
*
|
|
120
|
+
* Length wanders between turns for reasons that are not degradation, so
|
|
121
|
+
* direction alone is not a finding — an observed 784 → 646 run (18%) was
|
|
122
|
+
* reported as decay and was noise. Requiring the response to lose most of its
|
|
123
|
+
* length keeps the signal on the failure it names: late steps that quietly
|
|
124
|
+
* stop doing the work.
|
|
125
|
+
*/
|
|
126
|
+
const OUTPUT_DECAY_MAXIMUM_RETAINED_FRACTION = .6;
|
|
106
127
|
/** Tool names that read or check state count as self-verification, not mutation.
|
|
107
128
|
* Covers the inspect verbs plus the read/search tools real harnesses use to
|
|
108
129
|
* verify (Claude Code Read/Grep/Glob, codex read_file/ls/cat, git status/diff,
|
|
@@ -400,13 +421,14 @@ function tokenSignals(sequence) {
|
|
|
400
421
|
});
|
|
401
422
|
}
|
|
402
423
|
}
|
|
403
|
-
if (inputs.length >=
|
|
424
|
+
if (inputs.length >= OUTPUT_DECAY_MINIMUM_CALLS && inputs.length === outputs.length && inputs.every((value) => value !== null) && outputs.every((value) => value !== null)) {
|
|
404
425
|
const first = outputs[0];
|
|
405
426
|
const last = outputs[outputs.length - 1];
|
|
406
427
|
const inputIsMonotonic = everyAdjacent(inputs, (previous, current) => current >= previous);
|
|
407
428
|
const outputIsMonotonic = everyAdjacent(outputs, (previous, current) => current <= previous);
|
|
408
429
|
const inputGrew = inputs[inputs.length - 1] > inputs[0];
|
|
409
|
-
|
|
430
|
+
const decayIsMaterial = last <= first * OUTPUT_DECAY_MAXIMUM_RETAINED_FRACTION;
|
|
431
|
+
if (inputIsMonotonic && inputGrew && outputIsMonotonic && decayIsMaterial) signals.push({
|
|
410
432
|
code: "output-length-decay",
|
|
411
433
|
severity: "medium",
|
|
412
434
|
detail: `LLM output tokens shrank ${first}→${last} over ${outputs.length} serial calls while input tokens increased monotonically.`,
|
|
@@ -624,30 +646,53 @@ var ControlIntegrityAnalyst = class {
|
|
|
624
646
|
const CONTROL_INTEGRITY_ANALYST = new ControlIntegrityAnalyst();
|
|
625
647
|
const FAILURE_MODE_KIND_SPEC = {
|
|
626
648
|
id: "failure-mode",
|
|
627
|
-
description: "
|
|
649
|
+
description: "Ranks failures by the work each one burned — spans, model calls, and wall-clock between the error and the span where the agent resumed — and treats a failure that reached a human as the most expensive class.",
|
|
628
650
|
area: "failure-mode",
|
|
629
|
-
version: "
|
|
630
|
-
instructions: `You are a failure-
|
|
651
|
+
version: "2.0.0",
|
|
652
|
+
instructions: `You are a failure-cost analyst for an OTLP trace dataset. Your job is to find the failures that **burned the most agent work** and to price each one in spans, model calls, and wall-clock. How often an error occurred is not its cost and is not your output.
|
|
631
653
|
|
|
632
654
|
${findingSubjectGrammarPromptFor("failure-mode")}
|
|
633
655
|
|
|
634
|
-
|
|
656
|
+
Use a lowercase cluster label that names the cost shape, not the error string: "human-corrected-file-overwrite", "unrecovered-auth-loop", "long-detour-schema-guess".
|
|
635
657
|
|
|
636
|
-
|
|
637
|
-
2. Use \`queryTraces(filters={"has_errors": true}, limit=...)\` to pull error-bearing traces. Combine with \`countTraces\` to see what fraction of the dataset failed.
|
|
638
|
-
3. For each candidate failure cluster, use \`searchTrace\` with regex like \`STATUS_CODE_ERROR\`, \`MaxTurnsExceeded\`, \`assertion\`, \`unauthorized\`, \`timeout\`, \`429\`, \`5\\d\\d\`, the agent's specific error strings, or the names of its tools. Pull one or two representative traces per cluster, **not all** of them.
|
|
639
|
-
4. **Cluster, do not enumerate.** Two failures with the same root cause should be ONE finding citing both traces, not two findings. The point of this analyst is to compress N runs into K modes.
|
|
640
|
-
5. For each defensible cluster, emit ONE finding. Use a lowercase cluster label matching the subject grammar ("tool-call-loop", "auth-revoked-mid-run", ...). Rate it critical when it blocks the run, high when the run finishes degraded, and medium when it slows convergence. Cite representative spans and include exact error, payload, or contradictory-output quotes. Use confidence 0.85+ when multiple traces show the same shape, 0.6-0.8 for a single-trace inference, and <0.5 for speculation. Keep the imperative fix idea short; the improvement analyst expands it.
|
|
658
|
+
WORKLIST → RECOVERY BOUNDARY → PRICE → CITE protocol:
|
|
641
659
|
|
|
642
|
-
|
|
660
|
+
1. \`getDatasetOverview({})\` first. Read \`errors.trace_count\`, \`errors.span_count\`, and \`error_clusters[]\` — each cluster carries \`signature\`, \`tool_name\`, \`trace_count\`, \`span_count\`, \`prevalence\`, \`exemplar_trace_ids\`, and \`exemplar_span_ids\`. This is the deterministic analyzer's output, already computed for free. It is your WORKLIST: the exemplar ids name the spans you go price. It is never your findings.
|
|
661
|
+
2. Reach error-bearing traces the exemplars miss with \`queryTraces(filters={"has_errors": true}, limit=...)\`. Prefer long traces and traces whose errors sit early: a failure has room to be expensive only when work followed it.
|
|
662
|
+
3. Take one candidate error span E and read its trace in order. \`viewTrace\` returns that trace's spans sorted by \`start_time\`, which is the ordering every distance below is counted in. When \`viewTrace\` returns \`oversized\` instead of spans, locate candidates with \`searchTrace\` and pull the exact ids with \`viewSpans\`; use \`searchSpan\` when one span's payload is truncated.
|
|
663
|
+
4. Find the RECOVERY BOUNDARY R — the first span after E in which the agent resumed productive work. Productive means a different, task-advancing action. A retry of the same call with the same arguments, a re-read of the same file, a re-plan of the same step, and an apology are all still inside the failure. Then price it:
|
|
664
|
+
- spans_burned: spans strictly between E and R
|
|
665
|
+
- model_calls_burned: how many of those spans have kind \`LLM\`
|
|
666
|
+
- wall_clock_ms: R \`end_time\` minus E \`start_time\`
|
|
667
|
+
Report all three. If the agent never resumed, R is the trace's last span and the failure is UNRECOVERED.
|
|
668
|
+
5. Set severity from what ENDED the failure and from the measured distance, never from how many times the signature appears:
|
|
669
|
+
- HUMAN-CORRECTED — a human turn after E supplies the correction. This is the most expensive class at any span count, because the failure escaped the agent entirely and reached the user: severity critical. Detect it as a new user-role message in a later \`LLM\` span's input attributes, or a new root-level \`AGENT\` span in which the user restates or repairs the task. Search with patterns like \`"role"\\s*:\\s*"user"\`, \`(that|this) is (wrong|not what)\`, \`I (said|asked|told you)\`, \`stop\`, \`undo\`, \`revert\`, \`you (deleted|broke|missed|ignored)\`, \`try again\`. Quote the human's words exactly.
|
|
670
|
+
- UNRECOVERED — the trace ends without resumption: severity critical.
|
|
671
|
+
- LONG DETOUR — 10 or more spans burned, or 3 or more \`LLM\` spans burned: severity high.
|
|
672
|
+
- SHORT DETOUR — 2 to 9 spans burned: severity medium.
|
|
673
|
+
- SELF-RECOVERED ON THE NEXT SPAN — cost is approximately zero. Do not emit it. That is resilience, and reporting it dilutes the ranking.
|
|
674
|
+
One error that cost 20 spans outranks 50 errors that each cost one retry. Frequency may appear in a finding only as a multiplier on a measured per-instance cost, never as the reason for its severity.
|
|
675
|
+
6. **Cluster, do not enumerate.** Errors sharing a root cause AND a recovery shape are ONE finding: report the summed cost across instances, state how many instances it covers, and cite the bounding pair of the single most expensive instance. Two errors with the same signature but different recovery shapes — one shrugged off, one human-corrected — are NOT the same finding; the expensive one is the finding and the cheap one is noise.
|
|
643
676
|
|
|
644
|
-
|
|
677
|
+
FORBIDDEN OUTPUT. Each of the following duplicates the deterministic pass, and a duplicate finding is worse than no finding because it costs a reviewer the same attention while carrying no new information:
|
|
678
|
+
- a count of errors by tool ("Bash is the dominant failure surface, 54 error spans")
|
|
679
|
+
- a count or inventory of error signatures ("47 distinct error signatures")
|
|
680
|
+
- an error rate ("79 of 5260 tool calls ended in errors")
|
|
681
|
+
- any restatement of \`prevalence\`, \`trace_count\`, or \`span_count\` from \`error_clusters[]\`
|
|
682
|
+
Every finding MUST state its measured cost — spans burned, model calls burned, wall-clock — in the claim, and MUST cite the two spans that bound it: the error span and the recovery span, or the escaping human turn, or the trace's last span when unrecovered. A failure you cannot bound with two spans is one you did not measure: drop it.
|
|
683
|
+
|
|
684
|
+
**Adjudicate boundaries with subqueries.** The single judgement call in this protocol is whether a post-error span is genuine resumption or more flailing. Load E, the spans between, and the candidate R, then send one bounded \`llm_query\` per candidate carrying those exact excerpts and asking which span first advances the task. Subqueries cannot call trace tools, so a trace id tells them nothing — paste the excerpts. Accept a boundary only when the excerpts you loaded support the answer.
|
|
685
|
+
|
|
686
|
+
Confidence 0.9+ when both bounding spans are quoted and the spans between them were counted directly; 0.6-0.8 when an oversized trace forced you to sample the interval and the distance is an estimate; below 0.5 does not belong in this analyst, because an unmeasurable cost is not a finding. Keep the recommended action a short imperative; the improvement analyst expands it.
|
|
687
|
+
|
|
688
|
+
If every error in this dataset was recovered on the next span, return an empty findings array. That is the correct answer for a dataset whose failures were all cheap. Do not backfill it with the counts listed above and do not pad it with speculation.`,
|
|
645
689
|
toolGroup: "all",
|
|
646
690
|
limits: {
|
|
647
691
|
maxLlmCalls: 8,
|
|
648
692
|
maxIterations: 24,
|
|
649
|
-
maxToolCalls:
|
|
650
|
-
}
|
|
693
|
+
maxToolCalls: 80
|
|
694
|
+
},
|
|
695
|
+
minimumEvidenceCitations: 2
|
|
651
696
|
};
|
|
652
697
|
const IMPROVEMENT_KIND_SPEC = {
|
|
653
698
|
id: "improvement",
|
|
@@ -691,6 +736,44 @@ Do NOT propose a fix you cannot defend with evidence. "Tighten the prompt" is no
|
|
|
691
736
|
maxOutputChars: 12e3
|
|
692
737
|
}
|
|
693
738
|
};
|
|
739
|
+
const INTENT_DIVERGENCE_KIND_SPEC = {
|
|
740
|
+
id: "intent-divergence",
|
|
741
|
+
description: "Anchors each corrective human turn to the earliest assistant turn where the divergence from stated intent was already detectable, and prices it in burned turns.",
|
|
742
|
+
area: "intent-divergence",
|
|
743
|
+
version: "1.0.0",
|
|
744
|
+
instructions: `You are an intent-divergence analyst for an OTLP trace dataset. Your job is to find where the agent stopped doing what the user asked, and to establish **how early that was knowable**.
|
|
745
|
+
|
|
746
|
+
This dataset carries ground truth the other analysts do not have. When a human turn corrects the agent — "no, I meant…", "stop doing X", "why are you still asking" — the user has labelled a divergence for you. That label marks the END of the divergence, not its start. Your finding is the start: the earliest assistant turn already off-intent, the signal in the user's stated intent it contradicted, and the number of turns burned before the correction landed.
|
|
747
|
+
|
|
748
|
+
${findingSubjectGrammarPromptFor("intent-divergence")}
|
|
749
|
+
|
|
750
|
+
DISCOVERY → BACKTRACK → QUANTIFY → CITE protocol:
|
|
751
|
+
|
|
752
|
+
1. \`getDatasetOverview({})\` first. Note the agent names and \`sample_trace_ids\`; conversational datasets carry several human turns per trace and those are the ones worth pulling.
|
|
753
|
+
2. **DISCOVERY — find the corrective human turns.** Use \`searchTrace\` for user-authored corrections:
|
|
754
|
+
Every pattern MUST begin with \`(?i)\`. The trace store compiles a search pattern case-sensitively unless it opens with that flag, and corrections are overwhelmingly sentence-initial and capitalised ("Stop", "No,", "I said"), so a lowercase pattern silently returns zero hits.
|
|
755
|
+
- Imperative stops: \`(?i)\\bstop\\b\`, \`(?i)\\b(don'?t|do not)\\b\`, \`(?i)^\\s*no[,.!]\`, \`(?i)\\bnot what I (wanted|asked|meant)\\b\`, \`(?i)\\bthat'?s not what\\b\`, \`(?i)\\brevert\\b\`, \`(?i)\\bstart over\\b\`
|
|
756
|
+
- Repetition and frustration: \`(?i)\\bI (said|asked|told you)\\b\`, \`(?i)\\balready told you\\b\`, \`(?i)\\bwhy are you (still )?\\w+ing\\b\`, \`(?i)\\bjust (do|use|write|make)\\b\`, \`(?i)\\bagain\\b\`
|
|
757
|
+
- Clarification markers (second-order, see step 6): \`(?i)\\bI mean(t)?\\b\`, \`(?i)\\bto be clear\\b\`, \`(?i)\\bactually,? I (want|need)\\b\`, \`(?i)\\bwhat I meant\\b\`, \`(?i)\\blet me rephrase\\b\`
|
|
758
|
+
Attribute every match to a role before using it. The same phrases inside an assistant turn are hedging, not correction.
|
|
759
|
+
3. **BACKTRACK — walk the trace backward from the correction.** Read the ordered turns preceding it with \`viewTrace\` / \`viewSpans\`. Locate the user's ORIGINAL statement of intent (usually the first human turn, sometimes a constraint added mid-run), then locate the FIRST assistant turn that contradicts it. That turn, not the correction, anchors the finding. Name the concrete signal already available at that turn: an explicit constraint the agent violated, a scope it exceeded, a different question it answered, a file or target the user never named, a decision the user had already made.
|
|
760
|
+
4. **QUANTIFY — count the burned turns.** K = (index of the corrective human turn) − (index of the earliest detectable assistant turn). Report both indices and K. If you cannot locate an earliest-detectable turn, you have a correction and not a divergence: drop it.
|
|
761
|
+
5. **CLUSTER.** Repeated corrections about the same misread intent are ONE finding citing all of them, not one finding per corrective turn. Corrections about genuinely different intents in the same trace are separate findings.
|
|
762
|
+
6. **Second-order — the request itself was ambiguous.** When the user CLARIFIES rather than corrects ("I mean the staging config, not prod"), the agent's reading was defensible and the request was underspecified or self-contradictory. Emit those against a \`scaffolding:*\` locus — a clarifying-question policy or a plan checkpoint — because the fix is one sharp question before acting, priced against the K turns the ambiguity cost. Do not charge the agent's instructions for a request that could not be resolved from its own text.
|
|
763
|
+
|
|
764
|
+
**Test competing anchors with subqueries.** After the backward walk, load the excerpts for the original intent turn, your candidate earliest-detectable turn, and the turn before it. Send one bounded \`llm_query\` per candidate anchor asking whether the divergence is already present in that turn's text alone. Subqueries cannot call trace tools, and a turn index alone is insufficient context. Take the EARLIEST candidate the loaded excerpts support.
|
|
765
|
+
|
|
766
|
+
For each cluster, emit ONE finding. Use an exact locus from the subject grammar — the surface whose edit prevents the divergence, not the surface where it surfaced. State the claim in the shape "turn N did X against stated intent Y; user corrected at turn N+K, burning K turns." Rate it critical when the divergence produced a user-visible or irreversible action, high when K is 3 or more or the run ended without the intent satisfied, medium for one or two burned turns, and low for a cosmetic correction. Cite BOTH spans with exact quotes: the earliest-detectable assistant turn and the corrective human turn. Use confidence 0.85+ when the stated intent and the diverging turn are both quotable and the contradiction is explicit, and 0.6-0.8 when the earliest-detectable turn is inferred from surrounding context. The recommended action must be the literal instruction, question, or checkpoint to add.
|
|
767
|
+
|
|
768
|
+
Do NOT report a divergence the agent noticed and reversed inside the same turn — that is self-correction and it cost the user nothing. Do NOT report a human turn that adds NEW scope; a changed mind is not a divergence. If the dataset holds no corrective or clarifying human turns, return an empty findings array instead of grading tone.`,
|
|
769
|
+
toolGroup: "all",
|
|
770
|
+
limits: {
|
|
771
|
+
maxLlmCalls: 6,
|
|
772
|
+
maxIterations: 22,
|
|
773
|
+
maxToolCalls: 64
|
|
774
|
+
},
|
|
775
|
+
minimumEvidenceCitations: 2
|
|
776
|
+
};
|
|
694
777
|
const KNOWLEDGE_GAP_KIND_SPEC = {
|
|
695
778
|
id: "knowledge-gap",
|
|
696
779
|
description: "Identifies missing or stale pieces of knowledge — primarily against the agent-knowledge wiki — and attributes each to the runtime layer (wiki page, claim, raw source, websearch, tool-doc, system-prompt, memory) that should have held it.",
|
|
@@ -768,12 +851,17 @@ Do NOT report a finding if the agent caught and corrected the false belief in th
|
|
|
768
851
|
//#endregion
|
|
769
852
|
//#region src/analyst/kinds/index.ts
|
|
770
853
|
/**
|
|
771
|
-
* The default kind suite. Order is the run order operators should
|
|
772
|
-
*
|
|
773
|
-
*
|
|
854
|
+
* The default kind suite. Order is the run order operators should use:
|
|
855
|
+
* failure-mode and intent-divergence first (neither reads upstream
|
|
856
|
+
* findings), gap + poisoning next (both explain the problems those two
|
|
857
|
+
* found), improvement last (chains all four). Intent-divergence sits
|
|
858
|
+
* ahead of improvement deliberately — a proposed edit should be able to
|
|
859
|
+
* act on a priced divergence, and it is the only kind whose findings
|
|
860
|
+
* carry a burned-turn cost to rank against.
|
|
774
861
|
*/
|
|
775
862
|
const DEFAULT_TRACE_ANALYST_KINDS = [
|
|
776
863
|
FAILURE_MODE_KIND_SPEC,
|
|
864
|
+
INTENT_DIVERGENCE_KIND_SPEC,
|
|
777
865
|
KNOWLEDGE_GAP_KIND_SPEC,
|
|
778
866
|
KNOWLEDGE_POISONING_KIND_SPEC,
|
|
779
867
|
IMPROVEMENT_KIND_SPEC
|
|
@@ -2361,4 +2449,4 @@ function buildDefaultAnalystRegistry(options = {}) {
|
|
|
2361
2449
|
//#endregion
|
|
2362
2450
|
export { createChatClient as C, computeTraceMetrics as S, CONTROL_INTEGRITY_ANALYST as _, analystFindingDigest as a, behavioralAnalyst as b, completedAnalystReviewQuality as c, validateAnalystReviewDecisions as d, DEFAULT_TRACE_ANALYST_KINDS as f, FAILURE_MODE_KIND_SPEC as g, IMPROVEMENT_KIND_SPEC as h, assertExactRegistryRunOpts as i, readAnalystReview as l, KNOWLEDGE_GAP_KIND_SPEC as m, AnalystRegistry as n, analystRunDigest as o, KNOWLEDGE_POISONING_KIND_SPEC as p, ExactAnalystRunExecutionError as r, assertUniqueFindingIds as s, buildDefaultAnalystRegistry as t, snapshotAnalystRun as u, ControlIntegrityAnalyst as v, deriveEfficiencyFindings as x, emitControlIntegrityFindings as y };
|
|
2363
2451
|
|
|
2364
|
-
//# sourceMappingURL=default-registry-
|
|
2452
|
+
//# sourceMappingURL=default-registry-BupFSXSN.js.map
|