tryassay 0.3.0 → 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.
Files changed (150) hide show
  1. package/dist/api/pricing-enforcer.d.ts +45 -0
  2. package/dist/api/pricing-enforcer.js +144 -0
  3. package/dist/api/pricing-enforcer.js.map +1 -0
  4. package/dist/api/server.d.ts +28 -0
  5. package/dist/api/server.js +265 -0
  6. package/dist/api/server.js.map +1 -0
  7. package/dist/api/team-session.d.ts +59 -0
  8. package/dist/api/team-session.js +240 -0
  9. package/dist/api/team-session.js.map +1 -0
  10. package/dist/cli.js +142 -2
  11. package/dist/cli.js.map +1 -1
  12. package/dist/commands/api.d.ts +4 -0
  13. package/dist/commands/api.js +50 -0
  14. package/dist/commands/api.js.map +1 -0
  15. package/dist/commands/runtime.d.ts +69 -0
  16. package/dist/commands/runtime.js +673 -0
  17. package/dist/commands/runtime.js.map +1 -1
  18. package/dist/runtime/agent-loop.d.ts +6 -0
  19. package/dist/runtime/agent-loop.js +87 -5
  20. package/dist/runtime/agent-loop.js.map +1 -1
  21. package/dist/runtime/agent-spawner.d.ts +56 -0
  22. package/dist/runtime/agent-spawner.js +217 -0
  23. package/dist/runtime/agent-spawner.js.map +1 -0
  24. package/dist/runtime/agents/code-agent.d.ts +11 -0
  25. package/dist/runtime/agents/code-agent.js +90 -0
  26. package/dist/runtime/agents/code-agent.js.map +1 -0
  27. package/dist/runtime/agents/coordinator-agent.d.ts +20 -0
  28. package/dist/runtime/agents/coordinator-agent.js +182 -0
  29. package/dist/runtime/agents/coordinator-agent.js.map +1 -0
  30. package/dist/runtime/agents/ops-agent.d.ts +11 -0
  31. package/dist/runtime/agents/ops-agent.js +113 -0
  32. package/dist/runtime/agents/ops-agent.js.map +1 -0
  33. package/dist/runtime/agents/research-agent.d.ts +11 -0
  34. package/dist/runtime/agents/research-agent.js +114 -0
  35. package/dist/runtime/agents/research-agent.js.map +1 -0
  36. package/dist/runtime/agents/review-agent.d.ts +11 -0
  37. package/dist/runtime/agents/review-agent.js +96 -0
  38. package/dist/runtime/agents/review-agent.js.map +1 -0
  39. package/dist/runtime/agents/test-agent.d.ts +11 -0
  40. package/dist/runtime/agents/test-agent.js +114 -0
  41. package/dist/runtime/agents/test-agent.js.map +1 -0
  42. package/dist/runtime/capability-registry.d.ts +62 -0
  43. package/dist/runtime/capability-registry.js +191 -0
  44. package/dist/runtime/capability-registry.js.map +1 -0
  45. package/dist/runtime/collusion-detector.d.ts +35 -0
  46. package/dist/runtime/collusion-detector.js +97 -0
  47. package/dist/runtime/collusion-detector.js.map +1 -0
  48. package/dist/runtime/composition-verifier.d.ts +22 -0
  49. package/dist/runtime/composition-verifier.js +265 -0
  50. package/dist/runtime/composition-verifier.js.map +1 -0
  51. package/dist/runtime/confidence-calibrator.d.ts +10 -0
  52. package/dist/runtime/confidence-calibrator.js +95 -0
  53. package/dist/runtime/confidence-calibrator.js.map +1 -0
  54. package/dist/runtime/domain-coverage-analyzer.d.ts +24 -0
  55. package/dist/runtime/domain-coverage-analyzer.js +178 -0
  56. package/dist/runtime/domain-coverage-analyzer.js.map +1 -0
  57. package/dist/runtime/enriched-prompt-builder.d.ts +25 -0
  58. package/dist/runtime/enriched-prompt-builder.js +173 -0
  59. package/dist/runtime/enriched-prompt-builder.js.map +1 -0
  60. package/dist/runtime/gap-detector.d.ts +6 -0
  61. package/dist/runtime/gap-detector.js +111 -0
  62. package/dist/runtime/gap-detector.js.map +1 -0
  63. package/dist/runtime/human-escalation.d.ts +41 -0
  64. package/dist/runtime/human-escalation.js +122 -0
  65. package/dist/runtime/human-escalation.js.map +1 -0
  66. package/dist/runtime/kill-switch.d.ts +51 -0
  67. package/dist/runtime/kill-switch.js +185 -0
  68. package/dist/runtime/kill-switch.js.map +1 -0
  69. package/dist/runtime/layer2-guardian.d.ts +81 -0
  70. package/dist/runtime/layer2-guardian.js +263 -0
  71. package/dist/runtime/layer2-guardian.js.map +1 -0
  72. package/dist/runtime/message-bus.d.ts +57 -0
  73. package/dist/runtime/message-bus.js +115 -0
  74. package/dist/runtime/message-bus.js.map +1 -0
  75. package/dist/runtime/multi-agent-loop.d.ts +37 -0
  76. package/dist/runtime/multi-agent-loop.js +411 -0
  77. package/dist/runtime/multi-agent-loop.js.map +1 -0
  78. package/dist/runtime/pattern-extractor.d.ts +20 -0
  79. package/dist/runtime/pattern-extractor.js +257 -0
  80. package/dist/runtime/pattern-extractor.js.map +1 -0
  81. package/dist/runtime/planner.d.ts +2 -2
  82. package/dist/runtime/planner.js +10 -7
  83. package/dist/runtime/planner.js.map +1 -1
  84. package/dist/runtime/prompt-safety-analyzer.d.ts +17 -0
  85. package/dist/runtime/prompt-safety-analyzer.js +230 -0
  86. package/dist/runtime/prompt-safety-analyzer.js.map +1 -0
  87. package/dist/runtime/reasoner.d.ts +2 -2
  88. package/dist/runtime/reasoner.js +9 -5
  89. package/dist/runtime/reasoner.js.map +1 -1
  90. package/dist/runtime/reflector.d.ts +7 -1
  91. package/dist/runtime/reflector.js.map +1 -1
  92. package/dist/runtime/rollback-manager.d.ts +50 -0
  93. package/dist/runtime/rollback-manager.js +157 -0
  94. package/dist/runtime/rollback-manager.js.map +1 -0
  95. package/dist/runtime/rule-canary-deployer.d.ts +69 -0
  96. package/dist/runtime/rule-canary-deployer.js +289 -0
  97. package/dist/runtime/rule-canary-deployer.js.map +1 -0
  98. package/dist/runtime/rule-conflict-detector.d.ts +48 -0
  99. package/dist/runtime/rule-conflict-detector.js +214 -0
  100. package/dist/runtime/rule-conflict-detector.js.map +1 -0
  101. package/dist/runtime/rule-meta-verifier.d.ts +18 -0
  102. package/dist/runtime/rule-meta-verifier.js +275 -0
  103. package/dist/runtime/rule-meta-verifier.js.map +1 -0
  104. package/dist/runtime/rule-proposal-manager.d.ts +95 -0
  105. package/dist/runtime/rule-proposal-manager.js +190 -0
  106. package/dist/runtime/rule-proposal-manager.js.map +1 -0
  107. package/dist/runtime/safety-enforcer.d.ts +35 -0
  108. package/dist/runtime/safety-enforcer.js +165 -0
  109. package/dist/runtime/safety-enforcer.js.map +1 -0
  110. package/dist/runtime/safety-status.d.ts +48 -0
  111. package/dist/runtime/safety-status.js +119 -0
  112. package/dist/runtime/safety-status.js.map +1 -0
  113. package/dist/runtime/shadow-runner.d.ts +14 -0
  114. package/dist/runtime/shadow-runner.js +190 -0
  115. package/dist/runtime/shadow-runner.js.map +1 -0
  116. package/dist/runtime/shared-memory.d.ts +47 -0
  117. package/dist/runtime/shared-memory.js +151 -0
  118. package/dist/runtime/shared-memory.js.map +1 -0
  119. package/dist/runtime/specialized-agent.d.ts +72 -0
  120. package/dist/runtime/specialized-agent.js +123 -0
  121. package/dist/runtime/specialized-agent.js.map +1 -0
  122. package/dist/runtime/stall-detector.d.ts +13 -0
  123. package/dist/runtime/stall-detector.js +121 -0
  124. package/dist/runtime/stall-detector.js.map +1 -0
  125. package/dist/runtime/strategy-library.d.ts +11 -0
  126. package/dist/runtime/strategy-library.js +142 -0
  127. package/dist/runtime/strategy-library.js.map +1 -0
  128. package/dist/runtime/supabase-experience-store.d.ts +19 -0
  129. package/dist/runtime/supabase-experience-store.js +215 -0
  130. package/dist/runtime/supabase-experience-store.js.map +1 -0
  131. package/dist/runtime/tool-approval.d.ts +51 -0
  132. package/dist/runtime/tool-approval.js +148 -0
  133. package/dist/runtime/tool-approval.js.map +1 -0
  134. package/dist/runtime/tool-sandbox.d.ts +43 -0
  135. package/dist/runtime/tool-sandbox.js +394 -0
  136. package/dist/runtime/tool-sandbox.js.map +1 -0
  137. package/dist/runtime/tool-verifier.d.ts +18 -0
  138. package/dist/runtime/tool-verifier.js +323 -0
  139. package/dist/runtime/tool-verifier.js.map +1 -0
  140. package/dist/runtime/trust-manager.d.ts +63 -0
  141. package/dist/runtime/trust-manager.js +212 -0
  142. package/dist/runtime/trust-manager.js.map +1 -0
  143. package/dist/runtime/two-agent-loop.d.ts +35 -0
  144. package/dist/runtime/two-agent-loop.js +208 -0
  145. package/dist/runtime/two-agent-loop.js.map +1 -0
  146. package/dist/runtime/types.d.ts +939 -1
  147. package/dist/runtime/verification-intensity.d.ts +34 -0
  148. package/dist/runtime/verification-intensity.js +104 -0
  149. package/dist/runtime/verification-intensity.js.map +1 -0
  150. package/package.json +1 -1
@@ -0,0 +1,191 @@
1
+ // ============================================================
2
+ // Assay Verified Agent Runtime — Capability Registry
3
+ // Stores and manages tools with version tracking, rollback,
4
+ // and cryptographic integrity verification.
5
+ // ============================================================
6
+ import { readFile, writeFile, mkdir } from 'node:fs/promises';
7
+ import { dirname } from 'node:path';
8
+ import { createHash } from 'node:crypto';
9
+ // ── CapabilityRegistryManager ──────────────────────────────
10
+ export class CapabilityRegistryManager {
11
+ registry;
12
+ registryPath;
13
+ versionHistory = [];
14
+ constructor(registryPath) {
15
+ this.registryPath = registryPath;
16
+ this.registry = this.createEmptyRegistry();
17
+ }
18
+ /**
19
+ * Load the registry from disk. Creates an empty one if not found.
20
+ */
21
+ async load() {
22
+ try {
23
+ const raw = await readFile(this.registryPath, 'utf-8');
24
+ const parsed = JSON.parse(raw);
25
+ this.registry = parsed;
26
+ }
27
+ catch {
28
+ // File doesn't exist or is invalid — start fresh
29
+ this.registry = this.createEmptyRegistry();
30
+ }
31
+ }
32
+ /**
33
+ * Save the registry to disk with updated manifest hash.
34
+ */
35
+ async save() {
36
+ this.registry.manifest_hash = this.computeManifestHash();
37
+ await mkdir(dirname(this.registryPath), { recursive: true });
38
+ await writeFile(this.registryPath, JSON.stringify(this.registry, null, 2), 'utf-8');
39
+ }
40
+ /**
41
+ * Get the current registry state (readonly snapshot).
42
+ */
43
+ getRegistry() {
44
+ return {
45
+ ...this.registry,
46
+ tools: {
47
+ active: [...this.registry.tools.active],
48
+ deprecated: [...this.registry.tools.deprecated],
49
+ },
50
+ modifications: [...this.registry.modifications],
51
+ };
52
+ }
53
+ /**
54
+ * Add a new tool to the registry.
55
+ * The tool must have status 'approved' before calling this.
56
+ */
57
+ addTool(tool, approvedBy, proposalId) {
58
+ if (tool.status !== 'approved') {
59
+ throw new Error(`Cannot add tool with status "${tool.status}". Must be "approved".`);
60
+ }
61
+ // Check for duplicate IDs
62
+ if (this.findTool(tool.id)) {
63
+ throw new Error(`Tool "${tool.id}" already exists in registry.`);
64
+ }
65
+ // Save version history for rollback
66
+ this.pushHistory();
67
+ // Activate the tool
68
+ const activeTool = { ...tool, status: 'active' };
69
+ this.registry.tools.active.push(activeTool);
70
+ // Log the modification
71
+ this.logModification(proposalId, 'tool', 'added', tool.id, approvedBy);
72
+ }
73
+ /**
74
+ * Deprecate a tool. It remains in the registry but is no longer active.
75
+ */
76
+ deprecateTool(toolId, deprecatedBy, _reason) {
77
+ const index = this.registry.tools.active.findIndex(t => t.id === toolId);
78
+ if (index === -1) {
79
+ throw new Error(`Tool "${toolId}" not found in active tools.`);
80
+ }
81
+ this.pushHistory();
82
+ const tool = this.registry.tools.active[index];
83
+ this.registry.tools.active.splice(index, 1);
84
+ const deprecated = { ...tool, status: 'deprecated' };
85
+ this.registry.tools.deprecated.push(deprecated);
86
+ this.logModification(`deprecate-${toolId}`, 'tool', 'deprecated', toolId, deprecatedBy);
87
+ }
88
+ /**
89
+ * Rollback the registry to the previous version.
90
+ * Returns true if rollback succeeded, false if no history available.
91
+ */
92
+ rollback(rolledBackBy) {
93
+ const previous = this.versionHistory.pop();
94
+ if (!previous)
95
+ return false;
96
+ const currentVersion = this.registry.version;
97
+ this.registry = previous;
98
+ // Log the rollback (on the restored version)
99
+ this.logModification(`rollback-from-${currentVersion}`, 'tool', 'rolled_back', 'registry', rolledBackBy);
100
+ return true;
101
+ }
102
+ /**
103
+ * Find a tool by ID across active and deprecated pools.
104
+ */
105
+ findTool(toolId) {
106
+ return this.registry.tools.active.find(t => t.id === toolId)
107
+ ?? this.registry.tools.deprecated.find(t => t.id === toolId);
108
+ }
109
+ /**
110
+ * List all active tools.
111
+ */
112
+ listActiveTools() {
113
+ return this.registry.tools.active;
114
+ }
115
+ /**
116
+ * List all deprecated tools.
117
+ */
118
+ listDeprecatedTools() {
119
+ return this.registry.tools.deprecated;
120
+ }
121
+ /**
122
+ * Get the modification history.
123
+ */
124
+ getModificationHistory() {
125
+ return this.registry.modifications;
126
+ }
127
+ /**
128
+ * Verify registry integrity by recomputing the manifest hash.
129
+ */
130
+ verifyIntegrity() {
131
+ const actual = this.computeManifestHash();
132
+ return {
133
+ valid: actual === this.registry.manifest_hash,
134
+ expected: this.registry.manifest_hash,
135
+ actual,
136
+ };
137
+ }
138
+ // ── Private helpers ──────────────────────────────────────
139
+ createEmptyRegistry() {
140
+ return {
141
+ version: '0.0.1',
142
+ last_modified: new Date().toISOString(),
143
+ modified_by: 'system',
144
+ tools: { active: [], deprecated: [] },
145
+ manifest_hash: '',
146
+ layer2_hash: '',
147
+ modifications: [],
148
+ };
149
+ }
150
+ pushHistory() {
151
+ // Deep clone the current state for rollback
152
+ const snapshot = JSON.parse(JSON.stringify(this.registry));
153
+ this.versionHistory.push(snapshot);
154
+ // Keep at most 10 versions for rollback
155
+ if (this.versionHistory.length > 10) {
156
+ this.versionHistory.shift();
157
+ }
158
+ }
159
+ incrementVersion() {
160
+ const parts = this.registry.version.split('.').map(Number);
161
+ parts[2] = (parts[2] ?? 0) + 1;
162
+ return parts.join('.');
163
+ }
164
+ logModification(proposalId, type, action, targetId, approvedBy) {
165
+ const previousVersion = this.registry.version;
166
+ const newVersion = this.incrementVersion();
167
+ this.registry.modifications.push({
168
+ timestamp: new Date().toISOString(),
169
+ proposal_id: proposalId,
170
+ type,
171
+ action,
172
+ target_id: targetId,
173
+ approved_by: approvedBy,
174
+ registry_version_before: previousVersion,
175
+ registry_version_after: newVersion,
176
+ });
177
+ this.registry.version = newVersion;
178
+ this.registry.last_modified = new Date().toISOString();
179
+ this.registry.modified_by = approvedBy;
180
+ }
181
+ computeManifestHash() {
182
+ // Hash everything except the manifest_hash field itself
183
+ const data = {
184
+ version: this.registry.version,
185
+ tools: this.registry.tools,
186
+ modifications: this.registry.modifications,
187
+ };
188
+ return createHash('sha256').update(JSON.stringify(data)).digest('hex');
189
+ }
190
+ }
191
+ //# sourceMappingURL=capability-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability-registry.js","sourceRoot":"","sources":["../../src/runtime/capability-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { BoundaryClaim, BoundaryVerificationResult, CollusionEvent, AgentIdentity } from './types.js';
2
+ export declare class CollusionDetector {
3
+ private events;
4
+ /**
5
+ * Check a verification result for collusion signals.
6
+ *
7
+ * Collusion is detected when:
8
+ * 1. Two LLM-backed agents agreed on a claim (Code + Review both say PASS)
9
+ * 2. The formal verifier disagrees (says FAIL)
10
+ *
11
+ * This catches the most dangerous failure mode: correlated LLM errors
12
+ * where agents trained on similar data share the same blind spots.
13
+ */
14
+ check(sourceAgent: AgentIdentity, targetAgent: AgentIdentity, claims: readonly BoundaryClaim[], result: BoundaryVerificationResult): CollusionEvent[];
15
+ /**
16
+ * Check if the collusion rate exceeds a threshold for a given agent pair.
17
+ * Returns true if the ratio of collusion events to total verifications
18
+ * exceeds the threshold (default: 20%).
19
+ */
20
+ isCollusionRateExcessive(agentA: string, agentB: string, totalVerifications: number, threshold?: number): boolean;
21
+ /** Get all collusion events. */
22
+ getAllEvents(): readonly CollusionEvent[];
23
+ /** Get collusion events for a specific agent. */
24
+ getEventsForAgent(agentId: string): readonly CollusionEvent[];
25
+ /** Get critical collusion events (security/data-loss claims). */
26
+ getCriticalEvents(): readonly CollusionEvent[];
27
+ /** Get collusion event count. */
28
+ getEventCount(): number;
29
+ /** Get unique agent pairs involved in collusion. */
30
+ getColludingPairs(): Array<{
31
+ agentA: string;
32
+ agentB: string;
33
+ count: number;
34
+ }>;
35
+ }
@@ -0,0 +1,97 @@
1
+ // ============================================================
2
+ // Assay Verified Agent Runtime — Collusion Detector
3
+ // Detects when LLM-backed agents agree on something the formal
4
+ // verifier disagrees with. This is the anti-collusion primitive.
5
+ // ============================================================
6
+ import { randomUUID } from 'node:crypto';
7
+ // ── Collusion Detector ─────────────────────────────────────
8
+ export class CollusionDetector {
9
+ events = [];
10
+ /**
11
+ * Check a verification result for collusion signals.
12
+ *
13
+ * Collusion is detected when:
14
+ * 1. Two LLM-backed agents agreed on a claim (Code + Review both say PASS)
15
+ * 2. The formal verifier disagrees (says FAIL)
16
+ *
17
+ * This catches the most dangerous failure mode: correlated LLM errors
18
+ * where agents trained on similar data share the same blind spots.
19
+ */
20
+ check(sourceAgent, targetAgent, claims, result) {
21
+ const detected = [];
22
+ // Only check if both agents are LLM-backed (not formal)
23
+ if (sourceAgent.trustLevel === 'formal' || targetAgent.trustLevel === 'formal') {
24
+ return detected;
25
+ }
26
+ // Look for formal overrides — these are the collusion signals
27
+ for (const claim of claims) {
28
+ if (claim.formalOverride) {
29
+ // LLM said one thing, formal verifier said another
30
+ const event = {
31
+ id: randomUUID(),
32
+ agentA: sourceAgent.id,
33
+ agentB: targetAgent.id,
34
+ agreedVerdict: claim.formalOverride.originalLlmVerdict,
35
+ formalVerdict: claim.formalOverride.formalVerdict,
36
+ claimId: claim.id,
37
+ claimText: claim.text,
38
+ severity: claim.severity,
39
+ timestamp: new Date().toISOString(),
40
+ };
41
+ detected.push(event);
42
+ this.events.push(event);
43
+ }
44
+ }
45
+ // Also check for suspicious patterns: both agents consistently
46
+ // passing claims that the formal stats show disagreement on
47
+ if (result.formalStats.disagreements > 0 && result.formalStats.formalOverrides > 0) {
48
+ // Each formal override where both LLM agents agreed is a collusion signal
49
+ // (already captured above via formalOverride on claims)
50
+ }
51
+ return detected;
52
+ }
53
+ /**
54
+ * Check if the collusion rate exceeds a threshold for a given agent pair.
55
+ * Returns true if the ratio of collusion events to total verifications
56
+ * exceeds the threshold (default: 20%).
57
+ */
58
+ isCollusionRateExcessive(agentA, agentB, totalVerifications, threshold = 0.2) {
59
+ const pairEvents = this.events.filter(e => (e.agentA === agentA && e.agentB === agentB) ||
60
+ (e.agentA === agentB && e.agentB === agentA));
61
+ if (totalVerifications === 0)
62
+ return false;
63
+ return pairEvents.length / totalVerifications > threshold;
64
+ }
65
+ /** Get all collusion events. */
66
+ getAllEvents() {
67
+ return this.events;
68
+ }
69
+ /** Get collusion events for a specific agent. */
70
+ getEventsForAgent(agentId) {
71
+ return this.events.filter(e => e.agentA === agentId || e.agentB === agentId);
72
+ }
73
+ /** Get critical collusion events (security/data-loss claims). */
74
+ getCriticalEvents() {
75
+ return this.events.filter(e => e.severity === 'critical' || e.severity === 'high');
76
+ }
77
+ /** Get collusion event count. */
78
+ getEventCount() {
79
+ return this.events.length;
80
+ }
81
+ /** Get unique agent pairs involved in collusion. */
82
+ getColludingPairs() {
83
+ const pairs = new Map();
84
+ for (const event of this.events) {
85
+ const key = [event.agentA, event.agentB].sort().join('::');
86
+ const existing = pairs.get(key);
87
+ if (existing) {
88
+ existing.count++;
89
+ }
90
+ else {
91
+ pairs.set(key, { agentA: event.agentA, agentB: event.agentB, count: 1 });
92
+ }
93
+ }
94
+ return Array.from(pairs.values());
95
+ }
96
+ }
97
+ //# sourceMappingURL=collusion-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collusion-detector.js","sourceRoot":"","sources":["../../src/runtime/collusion-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { AgentIdentity, BoundaryArtifact, VerifiedHandoff } from './types.js';
2
+ export declare class CompositionVerifier {
3
+ private cachedIndex;
4
+ private codebaseRoot;
5
+ constructor(codebaseRoot: string);
6
+ /**
7
+ * Verify an artifact at a composition boundary between two agents.
8
+ * Returns a VerifiedHandoff with the verification result and handoff decision.
9
+ */
10
+ verifyHandoff(sourceAgent: AgentIdentity, targetAgent: AgentIdentity, artifact: BoundaryArtifact): Promise<VerifiedHandoff>;
11
+ /** Invalidate cached codebase index after code changes. */
12
+ invalidateIndex(): void;
13
+ private extractBoundaryClaims;
14
+ private verifyClaims;
15
+ private makeDecision;
16
+ private makePassResult;
17
+ private makeHandoff;
18
+ private artifactToDocument;
19
+ private getCodebaseIndex;
20
+ private inferCategory;
21
+ private inferSeverity;
22
+ }
@@ -0,0 +1,265 @@
1
+ // ============================================================
2
+ // Assay Verified Agent Runtime — Composition Verifier
3
+ // Verifies artifacts at every agent-to-agent boundary.
4
+ // No artifact moves between agents without passing this gate.
5
+ // ============================================================
6
+ import { randomUUID } from 'node:crypto';
7
+ import { extractClaims } from '../lib/claim-extractor.js';
8
+ import { verifyClaims } from '../lib/code-verifier.js';
9
+ import { indexCodebase } from '../lib/codebase-indexer.js';
10
+ const TRUST_POLICIES = {
11
+ untrusted: { verifyAll: true, sampleRate: 1.0, requireFormalForCritical: true },
12
+ provisional: { verifyAll: true, sampleRate: 1.0, requireFormalForCritical: true },
13
+ trusted: { verifyAll: false, sampleRate: 0.2, requireFormalForCritical: true },
14
+ formal: { verifyAll: false, sampleRate: 0, requireFormalForCritical: false },
15
+ };
16
+ // ── CompositionVerifier ─────────────────────────────────────
17
+ export class CompositionVerifier {
18
+ cachedIndex = null;
19
+ codebaseRoot;
20
+ constructor(codebaseRoot) {
21
+ this.codebaseRoot = codebaseRoot;
22
+ }
23
+ /**
24
+ * Verify an artifact at a composition boundary between two agents.
25
+ * Returns a VerifiedHandoff with the verification result and handoff decision.
26
+ */
27
+ async verifyHandoff(sourceAgent, targetAgent, artifact) {
28
+ const boundaryId = randomUUID();
29
+ const start = Date.now();
30
+ // Determine verification intensity based on source agent trust
31
+ const policy = TRUST_POLICIES[sourceAgent.trustLevel];
32
+ // Formal agents produce ground truth — skip verification
33
+ if (sourceAgent.trustLevel === 'formal') {
34
+ const passResult = this.makePassResult(boundaryId, start);
35
+ return this.makeHandoff(boundaryId, sourceAgent, targetAgent, artifact, passResult);
36
+ }
37
+ // Extract claims from the artifact
38
+ const claims = await this.extractBoundaryClaims(artifact, policy);
39
+ if (claims.length === 0) {
40
+ const passResult = this.makePassResult(boundaryId, start);
41
+ return this.makeHandoff(boundaryId, sourceAgent, targetAgent, artifact, passResult);
42
+ }
43
+ // Verify claims
44
+ const verificationResult = await this.verifyClaims(boundaryId, claims, start);
45
+ // Make handoff decision
46
+ const decision = this.makeDecision(verificationResult);
47
+ const boundary = {
48
+ id: boundaryId,
49
+ sourceAgent: sourceAgent.id,
50
+ targetAgent: targetAgent.id,
51
+ artifact,
52
+ extractedClaims: claims,
53
+ verificationResult,
54
+ timestamp: new Date().toISOString(),
55
+ };
56
+ return {
57
+ id: randomUUID(),
58
+ boundary,
59
+ artifact,
60
+ verificationResult,
61
+ decision,
62
+ timestamp: new Date().toISOString(),
63
+ };
64
+ }
65
+ /** Invalidate cached codebase index after code changes. */
66
+ invalidateIndex() {
67
+ this.cachedIndex = null;
68
+ }
69
+ // ── Private methods ─────────────────────────────────────
70
+ async extractBoundaryClaims(artifact, policy) {
71
+ // Build a document representation for claim extraction
72
+ const document = this.artifactToDocument(artifact);
73
+ try {
74
+ const { claims: rawClaims } = await extractClaims(document);
75
+ // Apply sampling if trusted agent
76
+ let claimsToVerify = rawClaims;
77
+ if (!policy.verifyAll && policy.sampleRate < 1.0) {
78
+ // Always include critical/high severity claims
79
+ // Sample from medium/low
80
+ const highPriority = rawClaims.filter(c => {
81
+ const text = c.text?.toLowerCase() ?? '';
82
+ return text.includes('security') || text.includes('injection') ||
83
+ text.includes('authentication') || text.includes('authorization');
84
+ });
85
+ const rest = rawClaims.filter(c => !highPriority.includes(c));
86
+ const sampled = rest.filter(() => Math.random() < policy.sampleRate);
87
+ claimsToVerify = [...highPriority, ...sampled];
88
+ }
89
+ // Convert to BoundaryClaims (initially unverified)
90
+ return claimsToVerify.map((c, i) => ({
91
+ id: `${randomUUID().slice(0, 8)}-BC-${String(i + 1).padStart(3, '0')}`,
92
+ text: c.text || `Claim ${i + 1}`,
93
+ category: this.inferCategory(c.text || ''),
94
+ severity: this.inferSeverity(c.text || ''),
95
+ source: 'implicit',
96
+ verificationMethod: 'llm',
97
+ verdict: 'N/A',
98
+ evidence: '',
99
+ }));
100
+ }
101
+ catch {
102
+ return [];
103
+ }
104
+ }
105
+ async verifyClaims(boundaryId, claims, startTime) {
106
+ const index = await this.getCodebaseIndex();
107
+ // Convert BoundaryClaims to the Claim format that verifyClaims expects
108
+ const assayClaims = claims.map(c => ({
109
+ id: c.id,
110
+ text: c.text,
111
+ section: c.category,
112
+ category: c.category,
113
+ severity: c.severity,
114
+ testable: true,
115
+ }));
116
+ try {
117
+ const { verifications } = await verifyClaims(assayClaims, index);
118
+ // Map back to BoundaryClaims with verdicts
119
+ const verifiedClaims = claims.map((claim, i) => {
120
+ const v = verifications[i];
121
+ if (!v)
122
+ return claim;
123
+ const avgConfidence = v.evidence?.length > 0
124
+ ? v.evidence.reduce((sum, e) => sum + e.confidence, 0) / v.evidence.length
125
+ : 0.5;
126
+ return {
127
+ ...claim,
128
+ verdict: v.verdict,
129
+ verificationMethod: avgConfidence >= 0.95 ? 'formal' : 'llm',
130
+ evidence: v.evidence?.map((e) => e.text ?? e.snippet ?? '').join('; ') ?? '',
131
+ };
132
+ });
133
+ const passed = verifiedClaims.filter(c => c.verdict === 'PASS').length;
134
+ const failed = verifiedClaims.filter(c => c.verdict === 'FAIL').length;
135
+ const partial = verifiedClaims.filter(c => c.verdict === 'PARTIAL').length;
136
+ const formallyVerified = verifiedClaims.filter(c => c.verificationMethod === 'formal').length;
137
+ const formalOverrides = verifiedClaims.filter(c => c.formalOverride).length;
138
+ const verdict = failed > 0 ? 'FAIL' :
139
+ partial > 0 ? 'PARTIAL' :
140
+ 'PASS';
141
+ return {
142
+ boundaryId,
143
+ passed,
144
+ failed,
145
+ partial,
146
+ total: verifiedClaims.length,
147
+ formalStats: {
148
+ formallyVerified,
149
+ llmVerified: verifiedClaims.length - formallyVerified,
150
+ disagreements: formalOverrides,
151
+ formalOverrides,
152
+ },
153
+ verdict,
154
+ blockers: verifiedClaims.filter(c => c.verdict === 'FAIL' && (c.severity === 'critical' || c.severity === 'high')),
155
+ durationMs: Date.now() - startTime,
156
+ };
157
+ }
158
+ catch {
159
+ // Verification pipeline error — report as partial
160
+ return {
161
+ boundaryId,
162
+ passed: 0,
163
+ failed: 0,
164
+ partial: claims.length,
165
+ total: claims.length,
166
+ formalStats: { formallyVerified: 0, llmVerified: 0, disagreements: 0, formalOverrides: 0 },
167
+ verdict: 'PARTIAL',
168
+ blockers: [],
169
+ durationMs: Date.now() - startTime,
170
+ };
171
+ }
172
+ }
173
+ makeDecision(result) {
174
+ // Any critical/high FAIL → reject
175
+ if (result.blockers.length > 0) {
176
+ return { action: 'reject', blockers: result.blockers };
177
+ }
178
+ // Any formal override → reject (formal verifier disagrees with LLM consensus)
179
+ if (result.formalStats.formalOverrides > 0) {
180
+ return { action: 'reject', blockers: result.blockers };
181
+ }
182
+ // Only low/medium failures → pass with warnings
183
+ if (result.failed > 0) {
184
+ const warnings = result.blockers; // already filtered to critical/high
185
+ return { action: 'pass_with_warnings', warnings };
186
+ }
187
+ // Too many partial results → escalate
188
+ if (result.partial > result.total * 0.5) {
189
+ return { action: 'escalate', reason: 'Too many ambiguous verification results' };
190
+ }
191
+ return { action: 'pass' };
192
+ }
193
+ makePassResult(boundaryId, startTime) {
194
+ return {
195
+ boundaryId,
196
+ passed: 0,
197
+ failed: 0,
198
+ partial: 0,
199
+ total: 0,
200
+ formalStats: { formallyVerified: 0, llmVerified: 0, disagreements: 0, formalOverrides: 0 },
201
+ verdict: 'PASS',
202
+ blockers: [],
203
+ durationMs: Date.now() - startTime,
204
+ };
205
+ }
206
+ makeHandoff(boundaryId, source, target, artifact, result) {
207
+ return {
208
+ id: randomUUID(),
209
+ boundary: {
210
+ id: boundaryId,
211
+ sourceAgent: source.id,
212
+ targetAgent: target.id,
213
+ artifact,
214
+ extractedClaims: [],
215
+ verificationResult: result,
216
+ timestamp: new Date().toISOString(),
217
+ },
218
+ artifact,
219
+ verificationResult: result,
220
+ decision: { action: 'pass' },
221
+ timestamp: new Date().toISOString(),
222
+ };
223
+ }
224
+ artifactToDocument(artifact) {
225
+ const header = `// Artifact type: ${artifact.type}\n`;
226
+ const pathLine = artifact.path ? `// Path: ${artifact.path}\n` : '';
227
+ const langLine = artifact.language ? `// Language: ${artifact.language}\n` : '';
228
+ return `${header}${pathLine}${langLine}\n${artifact.content}`;
229
+ }
230
+ async getCodebaseIndex() {
231
+ if (this.cachedIndex)
232
+ return this.cachedIndex;
233
+ this.cachedIndex = await indexCodebase(this.codebaseRoot);
234
+ return this.cachedIndex;
235
+ }
236
+ inferCategory(claimText) {
237
+ const lower = claimText.toLowerCase();
238
+ if (lower.includes('security') || lower.includes('injection') || lower.includes('xss'))
239
+ return 'security';
240
+ if (lower.includes('error') || lower.includes('exception') || lower.includes('null'))
241
+ return 'error-handling';
242
+ if (lower.includes('type') || lower.includes('interface'))
243
+ return 'type-safety';
244
+ if (lower.includes('test') || lower.includes('assert'))
245
+ return 'test-quality';
246
+ if (lower.includes('performance') || lower.includes('latency'))
247
+ return 'performance';
248
+ if (lower.includes('edge') || lower.includes('boundary'))
249
+ return 'edge-case';
250
+ if (lower.includes('complete') || lower.includes('implement'))
251
+ return 'completeness';
252
+ return 'correctness';
253
+ }
254
+ inferSeverity(claimText) {
255
+ const lower = claimText.toLowerCase();
256
+ if (lower.includes('injection') || lower.includes('auth') || lower.includes('secret'))
257
+ return 'critical';
258
+ if (lower.includes('error') || lower.includes('crash') || lower.includes('data loss'))
259
+ return 'high';
260
+ if (lower.includes('performance') || lower.includes('edge case'))
261
+ return 'medium';
262
+ return 'low';
263
+ }
264
+ }
265
+ //# sourceMappingURL=composition-verifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composition-verifier.js","sourceRoot":"","sources":["../../src/runtime/composition-verifier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Experience, CalibrationProfile } from './types.js';
2
+ export declare class ConfidenceCalibrator {
3
+ private profiles;
4
+ constructor(initial?: CalibrationProfile[]);
5
+ calibrate(domain: string, statedConfidence: number): number;
6
+ update(experience: Experience): Promise<void>;
7
+ getProfile(domain: string): CalibrationProfile | null;
8
+ getAllProfiles(): CalibrationProfile[];
9
+ load(profiles: CalibrationProfile[]): void;
10
+ }