pluribus-context 0.3.21 → 0.3.26
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 +31 -3
- package/README.md +2 -2
- package/docs/community-review-packet.md +4 -2
- package/docs/context-budget-receipts.md +150 -0
- package/docs/context-input-evidence.md +397 -0
- package/docs/context-receipts-for-agent-observability.md +177 -0
- package/docs/orchestration-search-receipts.md +102 -0
- package/docs/portability-fidelity-report.md +10 -6
- package/examples/context-input-evidence/AGENTS.md +12 -0
- package/examples/context-input-evidence/agent-overlay-log.jsonl +4 -0
- package/examples/context-input-evidence/agent-overlay-otel-trace.json +548 -0
- package/examples/context-input-evidence/agent-overlay-receipt.ndjson +3 -0
- package/examples/context-input-evidence/agentgateway-progressive-disclosure-otel-trace.json +393 -0
- package/examples/context-input-evidence/agentgateway-progressive-disclosure-receipt.ndjson +4 -0
- package/examples/context-input-evidence/brain-remediation-otel-trace.json +645 -0
- package/examples/context-input-evidence/brain-remediation-receipt.ndjson +7 -0
- package/examples/context-input-evidence/claudekit-mcp-manager-otel-trace.json +417 -0
- package/examples/context-input-evidence/claudekit-mcp-manager-receipt.ndjson +5 -0
- package/examples/context-input-evidence/cli-progressive-disclosure-otel-trace.json +399 -0
- package/examples/context-input-evidence/cli-progressive-disclosure-receipt.ndjson +4 -0
- package/examples/context-input-evidence/compaction-otel-trace.json +711 -0
- package/examples/context-input-evidence/compaction-receipt.ndjson +6 -0
- package/examples/context-input-evidence/context-selection-otel-trace.json +627 -0
- package/examples/context-input-evidence/context-selection-receipt.ndjson +7 -0
- package/examples/context-input-evidence/convert-agent-overlay-log.mjs +156 -0
- package/examples/context-input-evidence/convert-agentgateway-progressive-disclosure-log.mjs +251 -0
- package/examples/context-input-evidence/convert-brain-remediation-log.mjs +241 -0
- package/examples/context-input-evidence/convert-claudekit-mcp-manager-log.mjs +253 -0
- package/examples/context-input-evidence/convert-cli-progressive-disclosure-log.mjs +251 -0
- package/examples/context-input-evidence/convert-compaction-log.mjs +224 -0
- package/examples/context-input-evidence/convert-context-selection-log.mjs +247 -0
- package/examples/context-input-evidence/convert-mcp-tool-search-log.mjs +242 -0
- package/examples/context-input-evidence/convert-memory-consolidation-log.mjs +240 -0
- package/examples/context-input-evidence/convert-memory-governance-delete-log.mjs +223 -0
- package/examples/context-input-evidence/convert-memory-log.mjs +226 -0
- package/examples/context-input-evidence/convert-memory-provenance-log.mjs +263 -0
- package/examples/context-input-evidence/convert-secret-scanning-log.mjs +233 -0
- package/examples/context-input-evidence/convert-session-log.mjs +186 -0
- package/examples/context-input-evidence/convert-skill-log.mjs +161 -0
- package/examples/context-input-evidence/convert-skill-registry-log.mjs +246 -0
- package/examples/context-input-evidence/convert-skill-routing-log.mjs +253 -0
- package/examples/context-input-evidence/convert-subagent-context-budget-log.mjs +267 -0
- package/examples/context-input-evidence/convert-subagent-delegation-log.mjs +264 -0
- package/examples/context-input-evidence/export-otel-trace.mjs +128 -0
- package/examples/context-input-evidence/generate-receipt.mjs +188 -0
- package/examples/context-input-evidence/mcp-tool-search-otel-trace.json +477 -0
- package/examples/context-input-evidence/mcp-tool-search-receipt.ndjson +5 -0
- package/examples/context-input-evidence/memory-consolidation-otel-trace.json +492 -0
- package/examples/context-input-evidence/memory-consolidation-receipt.ndjson +4 -0
- package/examples/context-input-evidence/memory-governance-delete-otel-trace.json +614 -0
- package/examples/context-input-evidence/memory-governance-delete-receipt.ndjson +5 -0
- package/examples/context-input-evidence/memory-otel-trace.json +645 -0
- package/examples/context-input-evidence/memory-provenance-otel-trace.json +711 -0
- package/examples/context-input-evidence/memory-provenance-receipt.ndjson +5 -0
- package/examples/context-input-evidence/memory-receipt.ndjson +4 -0
- package/examples/context-input-evidence/otel-trace.json +1119 -0
- package/examples/context-input-evidence/receipt.ndjson +6 -0
- package/examples/context-input-evidence/sample-agentgateway-progressive-disclosure-log.jsonl +5 -0
- package/examples/context-input-evidence/sample-brain-remediation-log.jsonl +9 -0
- package/examples/context-input-evidence/sample-claudekit-mcp-manager-log.jsonl +6 -0
- package/examples/context-input-evidence/sample-cli-progressive-disclosure-log.jsonl +5 -0
- package/examples/context-input-evidence/sample-compaction-log.jsonl +7 -0
- package/examples/context-input-evidence/sample-context-selection-log.jsonl +7 -0
- package/examples/context-input-evidence/sample-mcp-tool-search-log.jsonl +6 -0
- package/examples/context-input-evidence/sample-memory-consolidation-log.jsonl +5 -0
- package/examples/context-input-evidence/sample-memory-governance-delete-log.jsonl +6 -0
- package/examples/context-input-evidence/sample-memory-provenance-log.jsonl +6 -0
- package/examples/context-input-evidence/sample-memory-retrieval-log.jsonl +6 -0
- package/examples/context-input-evidence/sample-secret-scanning-log.jsonl +7 -0
- package/examples/context-input-evidence/sample-session-log.jsonl +6 -0
- package/examples/context-input-evidence/sample-skill-registry-log.jsonl +5 -0
- package/examples/context-input-evidence/sample-skill-routing-log.jsonl +7 -0
- package/examples/context-input-evidence/sample-subagent-context-budget-log.jsonl +6 -0
- package/examples/context-input-evidence/sample-subagent-delegation-log.jsonl +5 -0
- package/examples/context-input-evidence/secret-scanning-otel-trace.json +794 -0
- package/examples/context-input-evidence/secret-scanning-receipt.ndjson +6 -0
- package/examples/context-input-evidence/session-otel-trace.json +411 -0
- package/examples/context-input-evidence/session-receipt.ndjson +2 -0
- package/examples/context-input-evidence/skill-invocation-log.jsonl +4 -0
- package/examples/context-input-evidence/skill-otel-trace.json +548 -0
- package/examples/context-input-evidence/skill-receipt.ndjson +3 -0
- package/examples/context-input-evidence/skill-registry-otel-trace.json +471 -0
- package/examples/context-input-evidence/skill-registry-receipt.ndjson +5 -0
- package/examples/context-input-evidence/skill-routing-otel-trace.json +567 -0
- package/examples/context-input-evidence/skill-routing-receipt.ndjson +6 -0
- package/examples/context-input-evidence/subagent-context-budget-otel-trace.json +507 -0
- package/examples/context-input-evidence/subagent-context-budget-receipt.ndjson +5 -0
- package/examples/context-input-evidence/subagent-delegation-otel-trace.json +388 -0
- package/examples/context-input-evidence/subagent-delegation-receipt.ndjson +4 -0
- package/package.json +6 -2
- package/schemas/audit-result.schema.json +468 -43
- package/src/commands/audit.js +105 -5
- package/src/utils/version.js +1 -1
package/src/commands/audit.js
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
import * as fs from 'fs'
|
|
11
11
|
import * as path from 'path'
|
|
12
|
+
import { createHash } from 'crypto'
|
|
12
13
|
import { parsePluribusFile, validateSections, REQUIRED_SECTIONS } from '../utils/parser.js'
|
|
13
14
|
import { resolveImportsAsync } from '../utils/imports.js'
|
|
14
15
|
import { renderTemplate, parseSkillFile } from '../utils/renderer.js'
|
|
@@ -294,7 +295,10 @@ function buildFidelityReport({ cwd, sections, tools, loadSkill }) {
|
|
|
294
295
|
const discovery = inferDiscovery(toolId, outputFiles)
|
|
295
296
|
const represented = presentSections.filter((name) => representedSections.has(name.toLowerCase()))
|
|
296
297
|
|
|
297
|
-
const
|
|
298
|
+
const rendered = renderTemplate(skill.template, sections, 'pluribus.md')
|
|
299
|
+
const loadEvidence = inferLoadEvidence(toolId, outputFiles, discovery, activation)
|
|
300
|
+
const duplicateLoadEvidence = inferDuplicateLoadEvidence(toolId, outputFiles, loadEvidence, rendered)
|
|
301
|
+
const effectiveContext = inferEffectiveContext(toolId, outputFiles, loadEvidence)
|
|
298
302
|
|
|
299
303
|
return {
|
|
300
304
|
toolId,
|
|
@@ -304,8 +308,10 @@ function buildFidelityReport({ cwd, sections, tools, loadSkill }) {
|
|
|
304
308
|
genericFallback: discovery.genericFallback,
|
|
305
309
|
manualActivationRequired: discovery.manualActivationRequired,
|
|
306
310
|
activation,
|
|
311
|
+
loadEvidence,
|
|
312
|
+
duplicateLoadEvidence,
|
|
307
313
|
effectiveContext,
|
|
308
|
-
semanticDifference: summarizeSemanticDifference({ unsupportedSections, activation, discovery, effectiveContext }),
|
|
314
|
+
semanticDifference: summarizeSemanticDifference({ unsupportedSections, activation, discovery, effectiveContext, loadEvidence, duplicateLoadEvidence }),
|
|
309
315
|
representedSections: represented,
|
|
310
316
|
unsupportedSections,
|
|
311
317
|
}
|
|
@@ -338,6 +344,22 @@ function buildFidelityReport({ cwd, sections, tools, loadSkill }) {
|
|
|
338
344
|
})
|
|
339
345
|
}
|
|
340
346
|
|
|
347
|
+
if (targets.some((target) => target.loadEvidence?.dedupeRisk === 'unknown')) {
|
|
348
|
+
warnings.push({
|
|
349
|
+
code: 'load-dedupe-not-proven',
|
|
350
|
+
target: '*',
|
|
351
|
+
message: 'Load evidence records the expected delivery path, but Pluribus does not currently prove runtime deduplication across native files, hooks, generated imports, or manual injection.',
|
|
352
|
+
})
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
if (targets.some((target) => target.duplicateLoadEvidence?.duplicateRisk === 'unknown')) {
|
|
356
|
+
warnings.push({
|
|
357
|
+
code: 'duplicate-load-selection-not-proven',
|
|
358
|
+
target: '*',
|
|
359
|
+
message: 'Duplicate load evidence records the Pluribus generated candidate, but does not inspect runtime scanner roots, caches, plugins, or sibling tool directories to prove which duplicate candidate the agent selected or suppressed.',
|
|
360
|
+
})
|
|
361
|
+
}
|
|
362
|
+
|
|
341
363
|
const advancedSections = ['workflow', 'context', 'examples', 'anti-patterns'].filter((name) => lowerPresentSections.has(name))
|
|
342
364
|
if (advancedSections.length > 0 && warnings.some((warning) => warning.code === 'section-not-rendered-by-target')) {
|
|
343
365
|
warnings.push({
|
|
@@ -398,7 +420,69 @@ function inferDiscovery(toolId, outputFiles) {
|
|
|
398
420
|
}
|
|
399
421
|
}
|
|
400
422
|
|
|
401
|
-
function
|
|
423
|
+
function inferLoadEvidence(toolId, outputFiles, discovery, activation) {
|
|
424
|
+
const primaryFile = outputFiles[0] || null
|
|
425
|
+
const loadedBy = discovery.genericFallback ? 'generic-agent-file' : 'native-file-discovery'
|
|
426
|
+
|
|
427
|
+
return {
|
|
428
|
+
loadedBy,
|
|
429
|
+
effectiveSource: primaryFile,
|
|
430
|
+
deliveryPath: primaryFile,
|
|
431
|
+
deliveryMechanism: discovery.genericFallback ? 'generated-generic-fallback' : 'generated-native-surface',
|
|
432
|
+
hookInstalled: false,
|
|
433
|
+
injectedOnSessionStart: false,
|
|
434
|
+
manualInjectionRequired: discovery.manualActivationRequired,
|
|
435
|
+
resumeBehavior: 'not-proven',
|
|
436
|
+
dedupeKey: primaryFile ? `${toolId}:${loadedBy}:${primaryFile}` : `${toolId}:${loadedBy}:unknown`,
|
|
437
|
+
dedupeRisk: 'unknown',
|
|
438
|
+
evidence: outputFiles,
|
|
439
|
+
note: `${toolId} load path is inferred from generated files and known discovery surfaces; verify runtime loading/deduplication in the target agent when hooks, imports, or manual injection are also used.`,
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
|
|
444
|
+
function inferDuplicateLoadEvidence(toolId, outputFiles, loadEvidence, rendered) {
|
|
445
|
+
const primaryFile = outputFiles[0] || null
|
|
446
|
+
const contentHash = typeof rendered === 'string'
|
|
447
|
+
? `sha256:${createHash('sha256').update(rendered, 'utf8').digest('hex')}`
|
|
448
|
+
: null
|
|
449
|
+
const candidateLoads = primaryFile
|
|
450
|
+
? [{
|
|
451
|
+
path: primaryFile,
|
|
452
|
+
contentHash,
|
|
453
|
+
toolOwner: toolId,
|
|
454
|
+
loadedBy: loadEvidence.loadedBy,
|
|
455
|
+
discoveryRoot: inferDiscoveryRoot(primaryFile),
|
|
456
|
+
priority: 'not-modeled',
|
|
457
|
+
source: 'pluribus-generated-output',
|
|
458
|
+
}]
|
|
459
|
+
: []
|
|
460
|
+
|
|
461
|
+
return {
|
|
462
|
+
contentIdentity: contentHash,
|
|
463
|
+
candidateLoads,
|
|
464
|
+
selectedLoad: candidateLoads[0]
|
|
465
|
+
? {
|
|
466
|
+
...candidateLoads[0],
|
|
467
|
+
selectionReason: 'only-pluribus-generated-output-for-target',
|
|
468
|
+
}
|
|
469
|
+
: null,
|
|
470
|
+
suppressedLoads: [],
|
|
471
|
+
selectionPolicy: 'not-proven-runtime-selection',
|
|
472
|
+
crossRootScanMode: 'not-inspected',
|
|
473
|
+
duplicateRisk: 'unknown',
|
|
474
|
+
invariant: 'For each session_id + logical context or skill name + content hash, inject at most one effective definition unless the second load is explicitly marked as replace or supplement.',
|
|
475
|
+
note: `${toolId} duplicate-load evidence covers the Pluribus generated output only; verify runtime scanner roots, caches, plugins, hooks, imports, and sibling tool directories before claiming duplicate suppression.`,
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
function inferDiscoveryRoot(file) {
|
|
480
|
+
if (!file) return null
|
|
481
|
+
const dirname = path.dirname(file)
|
|
482
|
+
return dirname === '.' ? 'repo-root' : dirname
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
function inferEffectiveContext(toolId, outputFiles, loadEvidence) {
|
|
402
486
|
return {
|
|
403
487
|
scope: 'repo-root',
|
|
404
488
|
pathScoped: false,
|
|
@@ -406,11 +490,13 @@ function inferEffectiveContext(toolId, outputFiles) {
|
|
|
406
490
|
overrideBehavior: 'none-modeled',
|
|
407
491
|
isolationEvidence: 'not-modeled',
|
|
408
492
|
entrypoints: outputFiles,
|
|
493
|
+
loadedBy: loadEvidence.loadedBy,
|
|
494
|
+
effectiveSource: loadEvidence.effectiveSource,
|
|
409
495
|
note: `${toolId} output is audited as repo-root context only; verify subdirectory load order separately in monorepos.`,
|
|
410
496
|
}
|
|
411
497
|
}
|
|
412
498
|
|
|
413
|
-
function summarizeSemanticDifference({ unsupportedSections, activation, discovery, effectiveContext }) {
|
|
499
|
+
function summarizeSemanticDifference({ unsupportedSections, activation, discovery, effectiveContext, loadEvidence, duplicateLoadEvidence }) {
|
|
414
500
|
const differences = []
|
|
415
501
|
|
|
416
502
|
if (unsupportedSections.length > 0) {
|
|
@@ -433,6 +519,14 @@ function summarizeSemanticDifference({ unsupportedSections, activation, discover
|
|
|
433
519
|
differences.push('manual-activation-required')
|
|
434
520
|
}
|
|
435
521
|
|
|
522
|
+
if (loadEvidence?.dedupeRisk === 'unknown') {
|
|
523
|
+
differences.push('runtime-load-dedupe-not-proven')
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
if (duplicateLoadEvidence?.duplicateRisk === 'unknown') {
|
|
527
|
+
differences.push('duplicate-load-selection-not-proven')
|
|
528
|
+
}
|
|
529
|
+
|
|
436
530
|
return differences.length > 0 ? differences : ['no-known-template-loss']
|
|
437
531
|
}
|
|
438
532
|
|
|
@@ -452,10 +546,16 @@ function printFidelityReport(report) {
|
|
|
452
546
|
const scope = target.effectiveContext?.scope
|
|
453
547
|
? `; effective context: ${target.effectiveContext.scope}`
|
|
454
548
|
: ''
|
|
549
|
+
const loadedBy = target.loadEvidence?.loadedBy
|
|
550
|
+
? `; loaded by: ${target.loadEvidence.loadedBy}`
|
|
551
|
+
: ''
|
|
552
|
+
const duplicateSelection = target.duplicateLoadEvidence?.duplicateRisk
|
|
553
|
+
? `; duplicate selection: ${target.duplicateLoadEvidence.duplicateRisk}`
|
|
554
|
+
: ''
|
|
455
555
|
const semantics = target.semanticDifference?.length
|
|
456
556
|
? `; semantic: ${target.semanticDifference.join(', ')}`
|
|
457
557
|
: ''
|
|
458
|
-
console.log(` • ${target.toolId}: ${target.activation.kind}${discovery}${scope}${unsupported}${semantics}`)
|
|
558
|
+
console.log(` • ${target.toolId}: ${target.activation.kind}${discovery}${scope}${loadedBy}${duplicateSelection}${unsupported}${semantics}`)
|
|
459
559
|
}
|
|
460
560
|
|
|
461
561
|
for (const warning of report.warnings) {
|
package/src/utils/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const VERSION = '0.3.
|
|
1
|
+
export const VERSION = '0.3.26'
|