@mcp-index/sdk 0.9.2 → 0.11.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 CHANGED
@@ -8,6 +8,74 @@ additive feature, patch = fix). Backward-compatible additions only in 0.2.0.
8
8
  Staged for the next publish — `npm publish` packs the current `README.md`, so these
9
9
  ride out automatically with the next version bump (no ad-hoc republish needed).
10
10
 
11
+ ## 0.11.0 - 2026-08-11
12
+
13
+ **A description change that moves only digits now carries its own ChangeKind.**
14
+ `description-numeric` splits off `description-only`.
15
+
16
+ Minor, not patch, because it is observable for consumers: an event that used to be
17
+ labelled `description-only` is now labelled `description-numeric` whenever the two
18
+ descriptions differ only in digit runs. Anything filtering on `description-only` will
19
+ see far fewer events - measured across 30 daily snapshots of the public registry,
20
+ 94.8% of description changes (88,564 of 93,419 tool pairs) move only digits, because
21
+ vendors template a counter or a timestamp into the description and it re-renders on
22
+ every crawl. A genuine edit was buried roughly 20:1.
23
+
24
+ **Nothing new is surfaced and no verdict changed.** Neither description kind is
25
+ surfaceable, and the gate's description HOLD is byte-exact and kind-independent, so a
26
+ numeric-only change still HOLDs exactly as before. The new kind states a FACT ("only the
27
+ numbers moved"), never a clearance: a moved price, port, IP or limit is numeric too.
28
+
29
+ **The HOLD text now says which one you have.** The reason and banner append "only the
30
+ embedded numbers moved, the prose is identical" when that is true, so you are not
31
+ eyeball-diffing two long strings to find out. The existing wording is appended to, never
32
+ rewritten, because GUARD matches the substring "DESCRIPTION changed".
33
+
34
+ Masking is ASCII-only (`[0-9]`) and does not touch whitespace, deliberately: Python's
35
+ `\d` matches Unicode decimal digits and JavaScript's never does, and JS `\s` matches
36
+ U+FEFF while Python's does not. Either divergence would make the crawler and the gate
37
+ in your agent describe one event differently. Pinning both to `[0-9]` changes zero
38
+ classifications on the measured corpus.
39
+
40
+ New export: `isNumericOnlyDescriptionChange(before, after)`.
41
+
42
+ ## 0.10.0 — 2026-08-05
43
+
44
+ **The HOLD text an agent reads is now separate from the one a human reads.** Behaviour
45
+ change on a shipped surface: `PreflightHold.message` (and the proxy's JSON-RPC error
46
+ `message`) no longer carry the brand banner.
47
+
48
+ Why: on 2026-08-05 a frontier model met a real HOLD, classified the banner as a
49
+ prompt-injection attempt, refused to act on it, retried the held call, and told the user
50
+ something suspicious was intercepting its tools. Its load-bearing objection was not tone —
51
+ it could not verify us. The gate diffs the pin against the LIVE contract while the agent
52
+ sees only its own cached tool list, a third view that legitimately disagrees. We were
53
+ asserting a change the reader could not observe and then inviting it to act, which is the
54
+ shape of a manipulation attempt. Refusing was correct behaviour.
55
+
56
+ - **Added** `renderHoldMessage()` — the agent-facing text. Renders the drift as an evidence
57
+ block (tool / change + path / effect / call sent), names the stale-tool-list mismatch
58
+ before the agent trips over it, and states the disposition without inviting any action.
59
+ - **Added** `PreflightHold.presentation` — the human brand banner, kept off `message`.
60
+ `String(err)` is what a builder is most likely to hand to a model.
61
+ - **Unchanged** `renderHoldBanner()` and `holdBanner()` — same text, same meaning, for
62
+ humans and hosts.
63
+ - **Security:** the agent-facing message may only CONSTRAIN. `[Review · Re-pin · Validate]`
64
+ invited the reader toward `repin()` — the one action that makes a changed contract the
65
+ new trusted baseline — on a channel the agent must treat as attacker-controlled. That is
66
+ the text an attacker would forge; forging "stop and ask your human" earns them nothing.
67
+ - **Security:** no defence was traded away to get there. `mdText` escaping and
68
+ `redactGreenWords` now run per untrusted value rather than over the whole render, so they
69
+ can only touch attacker-derived spans. Values are truncated before escaping
70
+ (`VALUE_CHAR_CAP`), closing an unbounded-render vector a security audit measured at 5.2 MB
71
+ from a 1.6 MB hostile tool name.
72
+ - **Fixed** (audit HIGH) `holdBanner()` fell through to the full detail banner when the
73
+ provenance choke refused or on an internal-error verdict — asserting a specific contract
74
+ change that, in the latter case, never happened. It now returns the generic notice, as
75
+ Python always did.
76
+ - **Fixed** evidence rows sort by codepoint, not `localeCompare`, so the two SDKs cannot
77
+ render different evidence for identical drift.
78
+
11
79
  ## 0.9.2 — 2026-07-29
12
80
 
13
81
  Copy only, no behaviour change.
@@ -17,7 +17,19 @@ export declare enum Posture {
17
17
  STRICT = "strict"
18
18
  }
19
19
  export declare const HELD_PROVENANCE_UNAVAILABLE_BANNER = "\u2B21 mcpindex \u2014 held a call before your agent ran it (provenance unavailable; no detail shown).";
20
- export declare const INTERNAL_ERROR_HELD_MESSAGE = "\u2B21 mcpindex internal error \u2014 held this call for safety. [Override]";
20
+ /** The AGENT-facing twin of the banner above. Same fact, no brand glyph, no chrome.
21
+ *
22
+ * INSTANCE FOURTEEN, found in round 9 and present in both languages. `heldSurface` has two
23
+ * early returns, one line apart, that both put a constant in the AGENT-message position and
24
+ * bypass `renderHoldMessage` entirely. Round 7 fixed the internal-error one and left this
25
+ * sibling, which shipped the brand glyph to the agent channel - the exact tell the suite's
26
+ * first test bans, and one the 2026-08-05 model named when it read the hold as a UI trying to
27
+ * persuade it. That test only ever ran against the renderer.
28
+ *
29
+ * The banner keeps its glyph: a HUMAN still reads it via `holdBanner()`. One fact, two
30
+ * readers, two renderings - the same split this whole change is about. */
31
+ export declare const HELD_PROVENANCE_UNAVAILABLE_MESSAGE: string;
32
+ export declare const INTERNAL_ERROR_HELD_MESSAGE: string;
21
33
  export declare function isInternalErrorVerdict(verdict: PreflightVerdict): boolean;
22
34
  export declare function internalErrorHold(serverId: string, toolName: string): PreflightVerdict;
23
35
  export declare enum Ownership {
@@ -53,7 +65,42 @@ export interface BehavioralResult {
53
65
  export interface BehavioralVerifier {
54
66
  verify(serverId: string, toolName: string, toolDef: ToolDef, ownership: Ownership, method: BehavioralMethod): BehavioralResult;
55
67
  }
56
- export declare function renderHoldBanner(verdict: PreflightVerdict, monthlyCount?: number | null): string;
68
+ /**
69
+ * The AGENT-facing HOLD text: evidence over assertion, constrain never expand.
70
+ *
71
+ * `renderHoldBanner` is the HUMAN brand moment and is unchanged - it still renders for
72
+ * hosts and operators. But it was ALSO the thrown message, which is read by a MODEL.
73
+ * Observed 2026-08-05: Claude Opus 4.8 classified that banner as a prompt-injection
74
+ * attempt, refused to act on it, retried the held call, and told the user something
75
+ * suspicious was intercepting its tools.
76
+ *
77
+ * Its load-bearing objection was not tone - it was that it could not VERIFY us: the gate
78
+ * diffs the pin against the LIVE contract, while the agent sees only its own cached tool
79
+ * list, a third view that legitimately disagrees. Asserting a change the reader cannot
80
+ * observe, then inviting it to act, is the exact shape of a manipulation attempt.
81
+ *
82
+ * Every defence is unchanged: `mdText` on each attacker-derived value, `redactGreenWords`
83
+ * over the whole output, fail-closed behaviour untouched.
84
+ */
85
+ export declare function renderHoldMessage(verdict: PreflightVerdict, sentKeys?: readonly string[] | null, pinPath?: string | null, drill?: boolean): string;
86
+ /** The minimal HOLD text: claims nothing beyond "this did not complete normally". The
87
+ * fail-closed fallback for a whole-message invariant no span redaction can repair. */
88
+ export declare const MINIMAL_HOLD_MESSAGE: string;
89
+ /** The single boundary every agent-facing HOLD string crosses. REDACTS, never suppresses.
90
+ *
91
+ * Span-level, because the first cut returned a minimal message on any violation — which
92
+ * handed a hostile server a SUPPRESSION PRIMITIVE: name a tool `[Override]` and the whole
93
+ * detailed HOLD collapses to a sentence that says nothing. This module refuses that same
94
+ * trade for the pin anchor ("drop only the poisoned span, never the whole line").
95
+ * Python twin: `cse.gate.redact_agent_unsafe`. */
96
+ export declare function redactAgentUnsafe(text: string): string;
97
+ /** WHOLE-MESSAGE invariants no span redaction can repair. Returns a reason, or null.
98
+ * Python twin: `cse.gate.agent_channel_violation`. */
99
+ export declare function agentChannelViolation(verdict: PreflightVerdict, text: string): string | null;
100
+ /** Raw assembly, before the channel boundary. Exported for the suite, which must see our
101
+ * prose as written — handed the redacted output, a no-op assertion is vacuous. */
102
+ export declare function assembleHoldMessage(verdict: PreflightVerdict, sentKeys?: readonly string[] | null, pinPath?: string | null, drill?: boolean): string;
103
+ export declare function renderHoldBanner(verdict: PreflightVerdict, monthlyCount?: number | null, chips?: boolean): string;
57
104
  export interface GateOptions {
58
105
  pin: PreflightPin;
59
106
  serverId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"gate.d.ts","sourceRoot":"","sources":["../../src/gate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gate.d.ts","sourceRoot":"","sources":["../../src/gate.ts"],"names":[],"mappings":"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"}