pluribus-context 0.3.22 → 0.3.27

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 (95) hide show
  1. package/CHANGELOG.md +33 -3
  2. package/README.md +9 -2
  3. package/docs/community-review-packet.md +10 -2
  4. package/docs/context-budget-receipts.md +152 -0
  5. package/docs/context-input-evidence.md +397 -0
  6. package/docs/context-receipts-for-agent-observability.md +177 -0
  7. package/docs/orchestration-search-receipts.md +102 -0
  8. package/docs/portability-fidelity-report.md +4 -2
  9. package/examples/agent-skills/context-receipts/README.md +22 -0
  10. package/examples/agent-skills/context-receipts/SKILL.md +89 -0
  11. package/examples/context-input-evidence/AGENTS.md +12 -0
  12. package/examples/context-input-evidence/agent-overlay-log.jsonl +4 -0
  13. package/examples/context-input-evidence/agent-overlay-otel-trace.json +548 -0
  14. package/examples/context-input-evidence/agent-overlay-receipt.ndjson +3 -0
  15. package/examples/context-input-evidence/agentgateway-progressive-disclosure-otel-trace.json +393 -0
  16. package/examples/context-input-evidence/agentgateway-progressive-disclosure-receipt.ndjson +4 -0
  17. package/examples/context-input-evidence/brain-remediation-otel-trace.json +645 -0
  18. package/examples/context-input-evidence/brain-remediation-receipt.ndjson +7 -0
  19. package/examples/context-input-evidence/claudekit-mcp-manager-otel-trace.json +417 -0
  20. package/examples/context-input-evidence/claudekit-mcp-manager-receipt.ndjson +5 -0
  21. package/examples/context-input-evidence/cli-progressive-disclosure-otel-trace.json +399 -0
  22. package/examples/context-input-evidence/cli-progressive-disclosure-receipt.ndjson +4 -0
  23. package/examples/context-input-evidence/compaction-otel-trace.json +711 -0
  24. package/examples/context-input-evidence/compaction-receipt.ndjson +6 -0
  25. package/examples/context-input-evidence/context-selection-otel-trace.json +627 -0
  26. package/examples/context-input-evidence/context-selection-receipt.ndjson +7 -0
  27. package/examples/context-input-evidence/convert-agent-overlay-log.mjs +156 -0
  28. package/examples/context-input-evidence/convert-agentgateway-progressive-disclosure-log.mjs +251 -0
  29. package/examples/context-input-evidence/convert-brain-remediation-log.mjs +241 -0
  30. package/examples/context-input-evidence/convert-claudekit-mcp-manager-log.mjs +253 -0
  31. package/examples/context-input-evidence/convert-cli-progressive-disclosure-log.mjs +251 -0
  32. package/examples/context-input-evidence/convert-compaction-log.mjs +224 -0
  33. package/examples/context-input-evidence/convert-context-selection-log.mjs +247 -0
  34. package/examples/context-input-evidence/convert-mcp-tool-search-log.mjs +242 -0
  35. package/examples/context-input-evidence/convert-memory-consolidation-log.mjs +240 -0
  36. package/examples/context-input-evidence/convert-memory-governance-delete-log.mjs +223 -0
  37. package/examples/context-input-evidence/convert-memory-log.mjs +226 -0
  38. package/examples/context-input-evidence/convert-memory-provenance-log.mjs +263 -0
  39. package/examples/context-input-evidence/convert-secret-scanning-log.mjs +233 -0
  40. package/examples/context-input-evidence/convert-session-log.mjs +186 -0
  41. package/examples/context-input-evidence/convert-skill-log.mjs +161 -0
  42. package/examples/context-input-evidence/convert-skill-registry-log.mjs +246 -0
  43. package/examples/context-input-evidence/convert-skill-routing-log.mjs +253 -0
  44. package/examples/context-input-evidence/convert-subagent-context-budget-log.mjs +267 -0
  45. package/examples/context-input-evidence/convert-subagent-delegation-log.mjs +264 -0
  46. package/examples/context-input-evidence/export-otel-trace.mjs +128 -0
  47. package/examples/context-input-evidence/generate-receipt.mjs +188 -0
  48. package/examples/context-input-evidence/mcp-tool-search-otel-trace.json +477 -0
  49. package/examples/context-input-evidence/mcp-tool-search-receipt.ndjson +5 -0
  50. package/examples/context-input-evidence/memory-consolidation-otel-trace.json +492 -0
  51. package/examples/context-input-evidence/memory-consolidation-receipt.ndjson +4 -0
  52. package/examples/context-input-evidence/memory-governance-delete-otel-trace.json +614 -0
  53. package/examples/context-input-evidence/memory-governance-delete-receipt.ndjson +5 -0
  54. package/examples/context-input-evidence/memory-otel-trace.json +645 -0
  55. package/examples/context-input-evidence/memory-provenance-otel-trace.json +711 -0
  56. package/examples/context-input-evidence/memory-provenance-receipt.ndjson +5 -0
  57. package/examples/context-input-evidence/memory-receipt.ndjson +4 -0
  58. package/examples/context-input-evidence/otel-trace.json +1119 -0
  59. package/examples/context-input-evidence/receipt.ndjson +6 -0
  60. package/examples/context-input-evidence/sample-agentgateway-progressive-disclosure-log.jsonl +5 -0
  61. package/examples/context-input-evidence/sample-brain-remediation-log.jsonl +9 -0
  62. package/examples/context-input-evidence/sample-claudekit-mcp-manager-log.jsonl +6 -0
  63. package/examples/context-input-evidence/sample-cli-progressive-disclosure-log.jsonl +5 -0
  64. package/examples/context-input-evidence/sample-compaction-log.jsonl +7 -0
  65. package/examples/context-input-evidence/sample-context-selection-log.jsonl +7 -0
  66. package/examples/context-input-evidence/sample-mcp-tool-search-log.jsonl +6 -0
  67. package/examples/context-input-evidence/sample-memory-consolidation-log.jsonl +5 -0
  68. package/examples/context-input-evidence/sample-memory-governance-delete-log.jsonl +6 -0
  69. package/examples/context-input-evidence/sample-memory-provenance-log.jsonl +6 -0
  70. package/examples/context-input-evidence/sample-memory-retrieval-log.jsonl +6 -0
  71. package/examples/context-input-evidence/sample-secret-scanning-log.jsonl +7 -0
  72. package/examples/context-input-evidence/sample-session-log.jsonl +6 -0
  73. package/examples/context-input-evidence/sample-skill-registry-log.jsonl +5 -0
  74. package/examples/context-input-evidence/sample-skill-routing-log.jsonl +7 -0
  75. package/examples/context-input-evidence/sample-subagent-context-budget-log.jsonl +6 -0
  76. package/examples/context-input-evidence/sample-subagent-delegation-log.jsonl +5 -0
  77. package/examples/context-input-evidence/secret-scanning-otel-trace.json +794 -0
  78. package/examples/context-input-evidence/secret-scanning-receipt.ndjson +6 -0
  79. package/examples/context-input-evidence/session-otel-trace.json +411 -0
  80. package/examples/context-input-evidence/session-receipt.ndjson +2 -0
  81. package/examples/context-input-evidence/skill-invocation-log.jsonl +4 -0
  82. package/examples/context-input-evidence/skill-otel-trace.json +548 -0
  83. package/examples/context-input-evidence/skill-receipt.ndjson +3 -0
  84. package/examples/context-input-evidence/skill-registry-otel-trace.json +471 -0
  85. package/examples/context-input-evidence/skill-registry-receipt.ndjson +5 -0
  86. package/examples/context-input-evidence/skill-routing-otel-trace.json +567 -0
  87. package/examples/context-input-evidence/skill-routing-receipt.ndjson +6 -0
  88. package/examples/context-input-evidence/subagent-context-budget-otel-trace.json +507 -0
  89. package/examples/context-input-evidence/subagent-context-budget-receipt.ndjson +5 -0
  90. package/examples/context-input-evidence/subagent-delegation-otel-trace.json +388 -0
  91. package/examples/context-input-evidence/subagent-delegation-receipt.ndjson +4 -0
  92. package/package.json +6 -2
  93. package/schemas/audit-result.schema.json +409 -71
  94. package/src/commands/audit.js +64 -3
  95. package/src/utils/version.js +1 -1
@@ -0,0 +1,188 @@
1
+ #!/usr/bin/env node
2
+ import { createHash } from 'node:crypto';
3
+ import { readFileSync, writeFileSync } from 'node:fs';
4
+ import { dirname, join } from 'node:path';
5
+ import { fileURLToPath } from 'node:url';
6
+
7
+ const here = dirname(fileURLToPath(import.meta.url));
8
+ const sourcePath = join(here, 'AGENTS.md');
9
+ const sourceBytes = readFileSync(sourcePath);
10
+ const sourceText = sourceBytes.toString('utf8');
11
+
12
+ function sha256(value) {
13
+ return `sha256:${createHash('sha256').update(value).digest('hex')}`;
14
+ }
15
+
16
+ function canonicalize(text) {
17
+ return text.normalize('NFC').replace(/\r\n/g, '\n');
18
+ }
19
+
20
+ function stripFrontmatter(text) {
21
+ return text.replace(/^---\n[\s\S]*?\n---\n\n?/, '');
22
+ }
23
+
24
+ function renderGeneratedHeader(timestamp) {
25
+ return `Generated by a context sync tool at ${timestamp}. Do not edit manually.\n\n`;
26
+ }
27
+
28
+ const canonicalText = canonicalize(sourceText);
29
+ const source = {
30
+ path: 'examples/context-input-evidence/AGENTS.md',
31
+ bytes_hash: sha256(sourceBytes),
32
+ canonical_form: 'otel.context.source.nfc_lf.v1_candidate',
33
+ canonical_hash: sha256(canonicalText),
34
+ canonicalization: ['utf8', 'unicode_nfc', 'crlf_to_lf']
35
+ };
36
+
37
+ const generatedFallbackBody = stripFrontmatter(sourceText);
38
+ const generatedFallbackTemplate = 'Generated by a context sync tool at {{generated_at}}. Do not edit manually.\n\n{{body}}';
39
+ const clippedRender = sourceText.replaceAll('{{repo_root}}', '/workspace/example-service');
40
+ const clippedAtIngestText = clippedRender.slice(0, 120);
41
+
42
+ const deliveries = [
43
+ {
44
+ tool: 'claude-code',
45
+ loadedBy: 'native-file-discovery',
46
+ deliveryTransform: 'source-as-delivered',
47
+ text: sourceText,
48
+ fullText: sourceText,
49
+ nondeterministic: false,
50
+ dedupeScope: 'session'
51
+ },
52
+ {
53
+ tool: 'codex',
54
+ loadedBy: 'native-agents-md',
55
+ deliveryTransform: 'post-template-expansion',
56
+ text: clippedRender,
57
+ fullText: clippedRender,
58
+ templateHash: sha256(sourceText.replaceAll('{{repo_root}}', '{{repo_root}}')),
59
+ nondeterministic: false,
60
+ dedupeScope: 'session'
61
+ },
62
+ {
63
+ tool: 'cursor',
64
+ loadedBy: 'generated-generic-fallback',
65
+ deliveryTransform: 'frontmatter-stripped-with-generated-header',
66
+ text: `${renderGeneratedHeader('2026-05-20T17:00:00.000Z')}${generatedFallbackBody}`,
67
+ fullText: `${renderGeneratedHeader('2026-05-20T17:00:00.000Z')}${generatedFallbackBody}`,
68
+ templateHash: sha256(generatedFallbackTemplate),
69
+ nondeterministic: true,
70
+ nondeterminismReason: 'generated_header_timestamp',
71
+ dedupeScope: 'session'
72
+ },
73
+ {
74
+ tool: 'cursor',
75
+ loadedBy: 'generated-generic-fallback',
76
+ deliveryTransform: 'same-logical-load-different-generated-header',
77
+ text: `${renderGeneratedHeader('2026-05-20T17:00:01.000Z')}${generatedFallbackBody}`,
78
+ fullText: `${renderGeneratedHeader('2026-05-20T17:00:01.000Z')}${generatedFallbackBody}`,
79
+ templateHash: sha256(generatedFallbackTemplate),
80
+ nondeterministic: true,
81
+ nondeterminismReason: 'generated_header_timestamp',
82
+ dedupeScope: 'session'
83
+ },
84
+ {
85
+ tool: 'small-window-harness',
86
+ loadedBy: 'native-file-discovery',
87
+ deliveryTransform: 'post-template-expansion-clipped-for-window',
88
+ text: clippedRender.slice(0, 180),
89
+ fullText: clippedRender,
90
+ templateHash: sha256(sourceText.replaceAll('{{repo_root}}', '{{repo_root}}')),
91
+ nondeterministic: false,
92
+ truncated: true,
93
+ truncationLimitChars: 180,
94
+ fullRenderStatus: 'available',
95
+ dedupeScope: 'session'
96
+ },
97
+ {
98
+ tool: 'ingest-clipping-harness',
99
+ loadedBy: 'native-file-discovery',
100
+ deliveryTransform: 'clipped-at-ingest-full-render-not-materialized',
101
+ text: clippedAtIngestText,
102
+ fullText: null,
103
+ templateHash: sha256(sourceText.replaceAll('{{repo_root}}', '{{repo_root}}')),
104
+ nondeterministic: false,
105
+ truncated: true,
106
+ truncationLimitChars: 120,
107
+ fullRenderStatus: 'unavailable_not_materialized',
108
+ dedupeScope: 'session'
109
+ }
110
+ ];
111
+
112
+ const sessionId = 'demo-session-context-input-evidence';
113
+ const now = '2026-05-20T18:00:00.000Z';
114
+ const events = deliveries.map((delivery) => {
115
+ const deliveredHash = sha256(delivery.text);
116
+ const fullRenderHash = delivery.fullText == null ? null : sha256(delivery.fullText);
117
+ const fullRenderStatus = delivery.fullRenderStatus ?? 'available';
118
+ const duplicateBasis = delivery.truncated && fullRenderHash ? fullRenderHash : deliveredHash;
119
+ const suppressionPolicy = delivery.nondeterministic
120
+ ? 'keep_distinct_template_hash_is_candidate_only'
121
+ : delivery.truncated && !fullRenderHash
122
+ ? 'keep_distinct_full_render_unknown'
123
+ : 'suppress_equal_dedupe_key_within_scope';
124
+
125
+ return {
126
+ trace_id: 'demo-trace-context-input-evidence',
127
+ span_id: sessionId,
128
+ name: 'context.input.loaded',
129
+ time: now,
130
+ attributes: {
131
+ 'context.input.kind': 'agent_instructions',
132
+ 'context.input.source.path': source.path,
133
+ 'context.input.source.bytes_hash': source.bytes_hash,
134
+ 'context.input.source.canonical.form': source.canonical_form,
135
+ 'context.input.source.canonical.hash': source.canonical_hash,
136
+ 'context.input.source.canonicalization': source.canonicalization.join(','),
137
+ 'context.input.delivered.hash': deliveredHash,
138
+ 'session.id': sessionId,
139
+ 'gen_ai.conversation.id': sessionId,
140
+ 'context.input.delivered.full_render.hash': fullRenderHash ?? '',
141
+ 'context.input.delivered.full_render.status': fullRenderStatus,
142
+ 'context.input.delivered.template_hash': delivery.templateHash ?? '',
143
+ 'context.input.delivered.transform': delivery.deliveryTransform,
144
+ 'context.input.delivered.nondeterministic': String(Boolean(delivery.nondeterministic)),
145
+ 'context.input.delivered.nondeterminism_reason': delivery.nondeterminismReason ?? '',
146
+ 'context.input.delivered.truncated': String(Boolean(delivery.truncated)),
147
+ 'context.input.delivered.truncation_limit_chars': String(delivery.truncationLimitChars ?? ''),
148
+ 'context.input.loaded_by': delivery.loadedBy,
149
+ 'context.input.activation': 'session_start',
150
+ 'context.input.scope': 'repo',
151
+ 'context.input.applies_to': delivery.tool,
152
+ 'context.input.why_loaded': 'shared invariant guidance',
153
+ 'context.input.expected_benefit': 'align agent behavior with repository conventions',
154
+ 'context.input.duplicate.dedupe_key': `${delivery.dedupeScope}:${duplicateBasis}`,
155
+ 'context.input.duplicate.dedupe_scope': delivery.dedupeScope,
156
+ 'context.input.duplicate.suppression_policy': suppressionPolicy,
157
+ 'context.input.duplicate.role': 'selected',
158
+ 'context.input.duplicate.risk': 'unknown'
159
+ }
160
+ };
161
+ });
162
+
163
+ const outputPath = join(here, 'receipt.ndjson');
164
+ writeFileSync(outputPath, `${events.map((event) => JSON.stringify(event)).join('\n')}\n`);
165
+
166
+ const deliveredHashes = new Set(events.map((event) => event.attributes['context.input.delivered.hash']));
167
+ const templateHashes = new Set(events.map((event) => event.attributes['context.input.delivered.template_hash']).filter(Boolean));
168
+ const nondeterministicEvents = events.filter((event) => event.attributes['context.input.delivered.nondeterministic'] === 'true');
169
+ const truncatedEvents = events.filter((event) => event.attributes['context.input.delivered.truncated'] === 'true');
170
+
171
+ const summary = {
172
+ schema: 'pluribus.contextInputEvidence.demo.v0',
173
+ eventCount: events.length,
174
+ sourceBytesHash: source.bytes_hash,
175
+ sourceCanonicalForm: source.canonical_form,
176
+ sourceCanonicalHash: source.canonical_hash,
177
+ deliveredHashCount: deliveredHashes.size,
178
+ templateHashCount: templateHashes.size,
179
+ nondeterministicEventCount: nondeterministicEvents.length,
180
+ truncatedEventCount: truncatedEvents.length,
181
+ dedupeScope: 'session',
182
+ sourceBytesIdenticalAcrossTools: true,
183
+ deliveredHashesDiverge: deliveredHashes.size > 1,
184
+ receiptPath: 'examples/context-input-evidence/receipt.ndjson',
185
+ lesson: 'Do not use one content.hash for source identity, canonical comparison, delivered identity, template stability, and truncation-aware dedupe.'
186
+ };
187
+
188
+ console.log(JSON.stringify(summary, null, 2));
@@ -0,0 +1,477 @@
1
+ {
2
+ "resourceSpans": [
3
+ {
4
+ "resource": {
5
+ "attributes": [
6
+ {
7
+ "key": "service.name",
8
+ "value": {
9
+ "stringValue": "pluribus-mcp-tool-search-receipt-demo"
10
+ }
11
+ },
12
+ {
13
+ "key": "service.version",
14
+ "value": {
15
+ "stringValue": "0.0.0-fixture"
16
+ }
17
+ },
18
+ {
19
+ "key": "deployment.environment.name",
20
+ "value": {
21
+ "stringValue": "local-fixture"
22
+ }
23
+ }
24
+ ]
25
+ },
26
+ "scopeSpans": [
27
+ {
28
+ "scope": {
29
+ "name": "pluribus.context_input_evidence.mcp_tool_search_demo",
30
+ "version": "0.0.0-fixture"
31
+ },
32
+ "spans": [
33
+ {
34
+ "traceId": "4789227ad83ce0e9ec757d0b42969d93",
35
+ "spanId": "d80b9f987f119cda",
36
+ "parentSpanId": "",
37
+ "name": "agent.session.mcp.tool_search",
38
+ "kind": 1,
39
+ "startTimeUnixNano": "1779397322000000000",
40
+ "endTimeUnixNano": "1779397519000000000",
41
+ "attributes": [
42
+ {
43
+ "key": "session.id",
44
+ "value": {
45
+ "stringValue": "sess-mcp-tool-search-demo"
46
+ }
47
+ },
48
+ {
49
+ "key": "gen_ai.conversation.id",
50
+ "value": {
51
+ "stringValue": "conv-tool-search-001"
52
+ }
53
+ },
54
+ {
55
+ "key": "agent.name",
56
+ "value": {
57
+ "stringValue": "claude-code"
58
+ }
59
+ },
60
+ {
61
+ "key": "workspace.name",
62
+ "value": {
63
+ "stringValue": "checkout-service"
64
+ }
65
+ },
66
+ {
67
+ "key": "gen_ai.request.model",
68
+ "value": {
69
+ "stringValue": "claude-opus-4.6"
70
+ }
71
+ },
72
+ {
73
+ "key": "mcp.tool_loading.strategy",
74
+ "value": {
75
+ "stringValue": "deferred_tool_loading"
76
+ }
77
+ },
78
+ {
79
+ "key": "mcp.server.count",
80
+ "value": {
81
+ "intValue": "2"
82
+ }
83
+ }
84
+ ],
85
+ "events": [
86
+ {
87
+ "name": "mcp.tool_index.loaded",
88
+ "timeUnixNano": "1779397322000000000",
89
+ "attributes": [
90
+ {
91
+ "key": "session.id",
92
+ "value": {
93
+ "stringValue": "sess-mcp-tool-search-demo"
94
+ }
95
+ },
96
+ {
97
+ "key": "gen_ai.conversation.id",
98
+ "value": {
99
+ "stringValue": "conv-tool-search-001"
100
+ }
101
+ },
102
+ {
103
+ "key": "agent.name",
104
+ "value": {
105
+ "stringValue": "claude-code"
106
+ }
107
+ },
108
+ {
109
+ "key": "mcp.server.name_hash",
110
+ "value": {
111
+ "stringValue": "sha256:72d2ff97a5d5"
112
+ }
113
+ },
114
+ {
115
+ "key": "mcp.transport",
116
+ "value": {
117
+ "stringValue": "stdio"
118
+ }
119
+ },
120
+ {
121
+ "key": "mcp.tool_loading.strategy",
122
+ "value": {
123
+ "stringValue": "deferred_tool_loading"
124
+ }
125
+ },
126
+ {
127
+ "key": "mcp.tool.names_hash",
128
+ "value": {
129
+ "stringValue": "sha256:ccd485858abcc8901621ba77a013a0f7151eda36566d5f924d7ce3f3107c3dcf"
130
+ }
131
+ },
132
+ {
133
+ "key": "mcp.tool.count",
134
+ "value": {
135
+ "intValue": "4"
136
+ }
137
+ },
138
+ {
139
+ "key": "mcp.tool.full_definitions.loaded_at_startup",
140
+ "value": {
141
+ "intValue": "0"
142
+ }
143
+ },
144
+ {
145
+ "key": "mcp.tool.definition_token_count_bucket",
146
+ "value": {
147
+ "stringValue": "under_50k"
148
+ }
149
+ },
150
+ {
151
+ "key": "mcp.tool.index_token_count_bucket",
152
+ "value": {
153
+ "stringValue": "under_1k"
154
+ }
155
+ },
156
+ {
157
+ "key": "mcp.tool.index_only",
158
+ "value": {
159
+ "boolValue": true
160
+ }
161
+ },
162
+ {
163
+ "key": "privacy.raw_tool_definitions_recorded",
164
+ "value": {
165
+ "boolValue": false
166
+ }
167
+ },
168
+ {
169
+ "key": "privacy.raw_tool_descriptions_recorded",
170
+ "value": {
171
+ "boolValue": false
172
+ }
173
+ }
174
+ ]
175
+ },
176
+ {
177
+ "name": "mcp.tool_index.loaded",
178
+ "timeUnixNano": "1779397323000000000",
179
+ "attributes": [
180
+ {
181
+ "key": "session.id",
182
+ "value": {
183
+ "stringValue": "sess-mcp-tool-search-demo"
184
+ }
185
+ },
186
+ {
187
+ "key": "gen_ai.conversation.id",
188
+ "value": {
189
+ "stringValue": "conv-tool-search-001"
190
+ }
191
+ },
192
+ {
193
+ "key": "agent.name",
194
+ "value": {
195
+ "stringValue": "claude-code"
196
+ }
197
+ },
198
+ {
199
+ "key": "mcp.server.name_hash",
200
+ "value": {
201
+ "stringValue": "sha256:51cc17c0e419"
202
+ }
203
+ },
204
+ {
205
+ "key": "mcp.transport",
206
+ "value": {
207
+ "stringValue": "http"
208
+ }
209
+ },
210
+ {
211
+ "key": "mcp.tool_loading.strategy",
212
+ "value": {
213
+ "stringValue": "deferred_tool_loading"
214
+ }
215
+ },
216
+ {
217
+ "key": "mcp.tool.names_hash",
218
+ "value": {
219
+ "stringValue": "sha256:ea59ee5e428e861511c82cafe23b06a0ddab0b99ad6ace823fe291f7c367108f"
220
+ }
221
+ },
222
+ {
223
+ "key": "mcp.tool.count",
224
+ "value": {
225
+ "intValue": "4"
226
+ }
227
+ },
228
+ {
229
+ "key": "mcp.tool.full_definitions.loaded_at_startup",
230
+ "value": {
231
+ "intValue": "0"
232
+ }
233
+ },
234
+ {
235
+ "key": "mcp.tool.definition_token_count_bucket",
236
+ "value": {
237
+ "stringValue": "under_50k"
238
+ }
239
+ },
240
+ {
241
+ "key": "mcp.tool.index_token_count_bucket",
242
+ "value": {
243
+ "stringValue": "under_1k"
244
+ }
245
+ },
246
+ {
247
+ "key": "mcp.tool.index_only",
248
+ "value": {
249
+ "boolValue": true
250
+ }
251
+ },
252
+ {
253
+ "key": "privacy.raw_tool_definitions_recorded",
254
+ "value": {
255
+ "boolValue": false
256
+ }
257
+ },
258
+ {
259
+ "key": "privacy.raw_tool_descriptions_recorded",
260
+ "value": {
261
+ "boolValue": false
262
+ }
263
+ }
264
+ ]
265
+ },
266
+ {
267
+ "name": "mcp.tool_search.performed",
268
+ "timeUnixNano": "1779397510000000000",
269
+ "attributes": [
270
+ {
271
+ "key": "session.id",
272
+ "value": {
273
+ "stringValue": "sess-mcp-tool-search-demo"
274
+ }
275
+ },
276
+ {
277
+ "key": "gen_ai.conversation.id",
278
+ "value": {
279
+ "stringValue": "conv-tool-search-001"
280
+ }
281
+ },
282
+ {
283
+ "key": "mcp.tool_search.query_hash",
284
+ "value": {
285
+ "stringValue": "sha256:469147828f80b6da9fd77217a51495e8a0b3a97e8453495f90d17066241850a7"
286
+ }
287
+ },
288
+ {
289
+ "key": "mcp.tool_search.candidate_count_bucket",
290
+ "value": {
291
+ "stringValue": "under_25"
292
+ }
293
+ },
294
+ {
295
+ "key": "mcp.tool_search.selected_server_hash",
296
+ "value": {
297
+ "stringValue": "sha256:51cc17c0e419"
298
+ }
299
+ },
300
+ {
301
+ "key": "mcp.tool_search.selected_tool_hash",
302
+ "value": {
303
+ "stringValue": "sha256:a6eab88bf060"
304
+ }
305
+ },
306
+ {
307
+ "key": "mcp.tool_search.selection_policy",
308
+ "value": {
309
+ "stringValue": "least_privilege_relevant_tool"
310
+ }
311
+ },
312
+ {
313
+ "key": "mcp.tool_search.loaded_definition_count",
314
+ "value": {
315
+ "intValue": "1"
316
+ }
317
+ },
318
+ {
319
+ "key": "mcp.tool_search.unselected_definitions_loaded",
320
+ "value": {
321
+ "intValue": "0"
322
+ }
323
+ },
324
+ {
325
+ "key": "privacy.raw_query_recorded",
326
+ "value": {
327
+ "boolValue": false
328
+ }
329
+ },
330
+ {
331
+ "key": "privacy.raw_candidate_rationale_recorded",
332
+ "value": {
333
+ "boolValue": false
334
+ }
335
+ }
336
+ ]
337
+ },
338
+ {
339
+ "name": "mcp.tool_definition.loaded",
340
+ "timeUnixNano": "1779397511000000000",
341
+ "attributes": [
342
+ {
343
+ "key": "session.id",
344
+ "value": {
345
+ "stringValue": "sess-mcp-tool-search-demo"
346
+ }
347
+ },
348
+ {
349
+ "key": "gen_ai.conversation.id",
350
+ "value": {
351
+ "stringValue": "conv-tool-search-001"
352
+ }
353
+ },
354
+ {
355
+ "key": "mcp.server.name_hash",
356
+ "value": {
357
+ "stringValue": "sha256:51cc17c0e419"
358
+ }
359
+ },
360
+ {
361
+ "key": "mcp.tool.name_hash",
362
+ "value": {
363
+ "stringValue": "sha256:a6eab88bf060"
364
+ }
365
+ },
366
+ {
367
+ "key": "mcp.tool.definition_hash",
368
+ "value": {
369
+ "stringValue": "sha256:4c7078d642ccf323f18dcdcbd868703e37189701380b44c54a5025a1ff5de697"
370
+ }
371
+ },
372
+ {
373
+ "key": "mcp.tool.definition_load_reason",
374
+ "value": {
375
+ "stringValue": "selected_by_tool_search"
376
+ }
377
+ },
378
+ {
379
+ "key": "mcp.tool.definition_token_count_bucket",
380
+ "value": {
381
+ "stringValue": "under_10k"
382
+ }
383
+ },
384
+ {
385
+ "key": "mcp.tool.definition_loaded_on_demand",
386
+ "value": {
387
+ "boolValue": true
388
+ }
389
+ },
390
+ {
391
+ "key": "privacy.raw_tool_definition_recorded",
392
+ "value": {
393
+ "boolValue": false
394
+ }
395
+ }
396
+ ]
397
+ },
398
+ {
399
+ "name": "mcp.tool_call.completed",
400
+ "timeUnixNano": "1779397519000000000",
401
+ "attributes": [
402
+ {
403
+ "key": "session.id",
404
+ "value": {
405
+ "stringValue": "sess-mcp-tool-search-demo"
406
+ }
407
+ },
408
+ {
409
+ "key": "gen_ai.conversation.id",
410
+ "value": {
411
+ "stringValue": "conv-tool-search-001"
412
+ }
413
+ },
414
+ {
415
+ "key": "mcp.server.name_hash",
416
+ "value": {
417
+ "stringValue": "sha256:51cc17c0e419"
418
+ }
419
+ },
420
+ {
421
+ "key": "mcp.tool.name_hash",
422
+ "value": {
423
+ "stringValue": "sha256:a6eab88bf060"
424
+ }
425
+ },
426
+ {
427
+ "key": "mcp.tool_call.status",
428
+ "value": {
429
+ "stringValue": "success"
430
+ }
431
+ },
432
+ {
433
+ "key": "mcp.tool_call.result_count_bucket",
434
+ "value": {
435
+ "stringValue": "under_25"
436
+ }
437
+ },
438
+ {
439
+ "key": "mcp.tool_call.arguments_hash",
440
+ "value": {
441
+ "stringValue": "sha256:7e6a4776c1ec0bef7a8b3cf91b917cf162cc891ab9b401eb9ff340f5ebcf7d0a"
442
+ }
443
+ },
444
+ {
445
+ "key": "mcp.tool_call.result_sample_hash",
446
+ "value": {
447
+ "stringValue": "sha256:7f9f0536d9f6a3d086cc5a1d7f32a318184f013c1efddf222258c6c5ad12e5ec"
448
+ }
449
+ },
450
+ {
451
+ "key": "mcp.tool_search.audit_gap",
452
+ "value": {
453
+ "stringValue": "receipt_proves_loaded_boundary_not_selection_optimality"
454
+ }
455
+ },
456
+ {
457
+ "key": "privacy.raw_tool_arguments_recorded",
458
+ "value": {
459
+ "boolValue": false
460
+ }
461
+ },
462
+ {
463
+ "key": "privacy.raw_tool_results_recorded",
464
+ "value": {
465
+ "boolValue": false
466
+ }
467
+ }
468
+ ]
469
+ }
470
+ ]
471
+ }
472
+ ]
473
+ }
474
+ ]
475
+ }
476
+ ]
477
+ }
@@ -0,0 +1,5 @@
1
+ {"trace_id":"4789227ad83ce0e9ec757d0b42969d93","span_id":"d80b9f987f119cda","name":"mcp.tool_index.loaded","time":"2026-05-21T21:02:02.000Z","attributes":{"session.id":"sess-mcp-tool-search-demo","gen_ai.conversation.id":"conv-tool-search-001","agent.name":"claude-code","mcp.server.name_hash":"sha256:72d2ff97a5d5","mcp.transport":"stdio","mcp.tool_loading.strategy":"deferred_tool_loading","mcp.tool.names_hash":"sha256:ccd485858abcc8901621ba77a013a0f7151eda36566d5f924d7ce3f3107c3dcf","mcp.tool.count":4,"mcp.tool.full_definitions.loaded_at_startup":0,"mcp.tool.definition_token_count_bucket":"under_50k","mcp.tool.index_token_count_bucket":"under_1k","mcp.tool.index_only":true,"privacy.raw_tool_definitions_recorded":false,"privacy.raw_tool_descriptions_recorded":false}}
2
+ {"trace_id":"4789227ad83ce0e9ec757d0b42969d93","span_id":"d80b9f987f119cda","name":"mcp.tool_index.loaded","time":"2026-05-21T21:02:03.000Z","attributes":{"session.id":"sess-mcp-tool-search-demo","gen_ai.conversation.id":"conv-tool-search-001","agent.name":"claude-code","mcp.server.name_hash":"sha256:51cc17c0e419","mcp.transport":"http","mcp.tool_loading.strategy":"deferred_tool_loading","mcp.tool.names_hash":"sha256:ea59ee5e428e861511c82cafe23b06a0ddab0b99ad6ace823fe291f7c367108f","mcp.tool.count":4,"mcp.tool.full_definitions.loaded_at_startup":0,"mcp.tool.definition_token_count_bucket":"under_50k","mcp.tool.index_token_count_bucket":"under_1k","mcp.tool.index_only":true,"privacy.raw_tool_definitions_recorded":false,"privacy.raw_tool_descriptions_recorded":false}}
3
+ {"trace_id":"4789227ad83ce0e9ec757d0b42969d93","span_id":"d80b9f987f119cda","name":"mcp.tool_search.performed","time":"2026-05-21T21:05:10.000Z","attributes":{"session.id":"sess-mcp-tool-search-demo","gen_ai.conversation.id":"conv-tool-search-001","mcp.tool_search.query_hash":"sha256:469147828f80b6da9fd77217a51495e8a0b3a97e8453495f90d17066241850a7","mcp.tool_search.candidate_count_bucket":"under_25","mcp.tool_search.selected_server_hash":"sha256:51cc17c0e419","mcp.tool_search.selected_tool_hash":"sha256:a6eab88bf060","mcp.tool_search.selection_policy":"least_privilege_relevant_tool","mcp.tool_search.loaded_definition_count":1,"mcp.tool_search.unselected_definitions_loaded":0,"privacy.raw_query_recorded":false,"privacy.raw_candidate_rationale_recorded":false}}
4
+ {"trace_id":"4789227ad83ce0e9ec757d0b42969d93","span_id":"d80b9f987f119cda","name":"mcp.tool_definition.loaded","time":"2026-05-21T21:05:11.000Z","attributes":{"session.id":"sess-mcp-tool-search-demo","gen_ai.conversation.id":"conv-tool-search-001","mcp.server.name_hash":"sha256:51cc17c0e419","mcp.tool.name_hash":"sha256:a6eab88bf060","mcp.tool.definition_hash":"sha256:4c7078d642ccf323f18dcdcbd868703e37189701380b44c54a5025a1ff5de697","mcp.tool.definition_load_reason":"selected_by_tool_search","mcp.tool.definition_token_count_bucket":"under_10k","mcp.tool.definition_loaded_on_demand":true,"privacy.raw_tool_definition_recorded":false}}
5
+ {"trace_id":"4789227ad83ce0e9ec757d0b42969d93","span_id":"d80b9f987f119cda","name":"mcp.tool_call.completed","time":"2026-05-21T21:05:19.000Z","attributes":{"session.id":"sess-mcp-tool-search-demo","gen_ai.conversation.id":"conv-tool-search-001","mcp.server.name_hash":"sha256:51cc17c0e419","mcp.tool.name_hash":"sha256:a6eab88bf060","mcp.tool_call.status":"success","mcp.tool_call.result_count_bucket":"under_25","mcp.tool_call.arguments_hash":"sha256:7e6a4776c1ec0bef7a8b3cf91b917cf162cc891ab9b401eb9ff340f5ebcf7d0a","mcp.tool_call.result_sample_hash":"sha256:7f9f0536d9f6a3d086cc5a1d7f32a318184f013c1efddf222258c6c5ad12e5ec","mcp.tool_search.audit_gap":"receipt_proves_loaded_boundary_not_selection_optimality","privacy.raw_tool_arguments_recorded":false,"privacy.raw_tool_results_recorded":false}}