tryassay 0.6.0 → 0.11.1

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 (109) 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 +123 -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 +61 -0
  16. package/dist/commands/runtime.js +554 -0
  17. package/dist/commands/runtime.js.map +1 -1
  18. package/dist/runtime/agent-spawner.d.ts +56 -0
  19. package/dist/runtime/agent-spawner.js +217 -0
  20. package/dist/runtime/agent-spawner.js.map +1 -0
  21. package/dist/runtime/agents/coordinator-agent.d.ts +20 -0
  22. package/dist/runtime/agents/coordinator-agent.js +182 -0
  23. package/dist/runtime/agents/coordinator-agent.js.map +1 -0
  24. package/dist/runtime/agents/ops-agent.d.ts +11 -0
  25. package/dist/runtime/agents/ops-agent.js +113 -0
  26. package/dist/runtime/agents/ops-agent.js.map +1 -0
  27. package/dist/runtime/agents/research-agent.d.ts +11 -0
  28. package/dist/runtime/agents/research-agent.js +114 -0
  29. package/dist/runtime/agents/research-agent.js.map +1 -0
  30. package/dist/runtime/agents/test-agent.d.ts +11 -0
  31. package/dist/runtime/agents/test-agent.js +114 -0
  32. package/dist/runtime/agents/test-agent.js.map +1 -0
  33. package/dist/runtime/audit-log.js +2 -2
  34. package/dist/runtime/audit-log.js.map +1 -1
  35. package/dist/runtime/capability-registry.d.ts +62 -0
  36. package/dist/runtime/capability-registry.js +191 -0
  37. package/dist/runtime/capability-registry.js.map +1 -0
  38. package/dist/runtime/collusion-detector.d.ts +35 -0
  39. package/dist/runtime/collusion-detector.js +97 -0
  40. package/dist/runtime/collusion-detector.js.map +1 -0
  41. package/dist/runtime/control-server.js +8 -4
  42. package/dist/runtime/control-server.js.map +1 -1
  43. package/dist/runtime/domain-coverage-analyzer.d.ts +24 -0
  44. package/dist/runtime/domain-coverage-analyzer.js +178 -0
  45. package/dist/runtime/domain-coverage-analyzer.js.map +1 -0
  46. package/dist/runtime/executor.js +27 -12
  47. package/dist/runtime/executor.js.map +1 -1
  48. package/dist/runtime/human-escalation.d.ts +41 -0
  49. package/dist/runtime/human-escalation.js +122 -0
  50. package/dist/runtime/human-escalation.js.map +1 -0
  51. package/dist/runtime/kill-switch.d.ts +51 -0
  52. package/dist/runtime/kill-switch.js +185 -0
  53. package/dist/runtime/kill-switch.js.map +1 -0
  54. package/dist/runtime/layer2-guardian.d.ts +81 -0
  55. package/dist/runtime/layer2-guardian.js +263 -0
  56. package/dist/runtime/layer2-guardian.js.map +1 -0
  57. package/dist/runtime/multi-agent-loop.d.ts +37 -0
  58. package/dist/runtime/multi-agent-loop.js +411 -0
  59. package/dist/runtime/multi-agent-loop.js.map +1 -0
  60. package/dist/runtime/prompt-safety-analyzer.d.ts +17 -0
  61. package/dist/runtime/prompt-safety-analyzer.js +230 -0
  62. package/dist/runtime/prompt-safety-analyzer.js.map +1 -0
  63. package/dist/runtime/rollback-manager.d.ts +50 -0
  64. package/dist/runtime/rollback-manager.js +157 -0
  65. package/dist/runtime/rollback-manager.js.map +1 -0
  66. package/dist/runtime/rule-canary-deployer.d.ts +69 -0
  67. package/dist/runtime/rule-canary-deployer.js +289 -0
  68. package/dist/runtime/rule-canary-deployer.js.map +1 -0
  69. package/dist/runtime/rule-conflict-detector.d.ts +48 -0
  70. package/dist/runtime/rule-conflict-detector.js +214 -0
  71. package/dist/runtime/rule-conflict-detector.js.map +1 -0
  72. package/dist/runtime/rule-meta-verifier.d.ts +18 -0
  73. package/dist/runtime/rule-meta-verifier.js +275 -0
  74. package/dist/runtime/rule-meta-verifier.js.map +1 -0
  75. package/dist/runtime/rule-proposal-manager.d.ts +95 -0
  76. package/dist/runtime/rule-proposal-manager.js +190 -0
  77. package/dist/runtime/rule-proposal-manager.js.map +1 -0
  78. package/dist/runtime/safety-enforcer.d.ts +35 -0
  79. package/dist/runtime/safety-enforcer.js +165 -0
  80. package/dist/runtime/safety-enforcer.js.map +1 -0
  81. package/dist/runtime/safety-status.d.ts +48 -0
  82. package/dist/runtime/safety-status.js +119 -0
  83. package/dist/runtime/safety-status.js.map +1 -0
  84. package/dist/runtime/shared-memory.d.ts +47 -0
  85. package/dist/runtime/shared-memory.js +151 -0
  86. package/dist/runtime/shared-memory.js.map +1 -0
  87. package/dist/runtime/specialized-agent.d.ts +5 -0
  88. package/dist/runtime/specialized-agent.js +37 -0
  89. package/dist/runtime/specialized-agent.js.map +1 -1
  90. package/dist/runtime/stall-detector.d.ts +13 -0
  91. package/dist/runtime/stall-detector.js +121 -0
  92. package/dist/runtime/stall-detector.js.map +1 -0
  93. package/dist/runtime/tool-approval.d.ts +51 -0
  94. package/dist/runtime/tool-approval.js +148 -0
  95. package/dist/runtime/tool-approval.js.map +1 -0
  96. package/dist/runtime/tool-sandbox.d.ts +43 -0
  97. package/dist/runtime/tool-sandbox.js +394 -0
  98. package/dist/runtime/tool-sandbox.js.map +1 -0
  99. package/dist/runtime/tool-verifier.d.ts +18 -0
  100. package/dist/runtime/tool-verifier.js +323 -0
  101. package/dist/runtime/tool-verifier.js.map +1 -0
  102. package/dist/runtime/trust-manager.d.ts +33 -3
  103. package/dist/runtime/trust-manager.js +128 -26
  104. package/dist/runtime/trust-manager.js.map +1 -1
  105. package/dist/runtime/types.d.ts +652 -0
  106. package/dist/runtime/verification-intensity.d.ts +34 -0
  107. package/dist/runtime/verification-intensity.js +104 -0
  108. package/dist/runtime/verification-intensity.js.map +1 -0
  109. package/package.json +1 -1
@@ -0,0 +1,263 @@
1
+ // ============================================================
2
+ // Assay Verified Agent Runtime — Layer 2 Guardian
3
+ // Enforces immutability of the verification substrate.
4
+ //
5
+ // Four levels of enforcement:
6
+ // 1. Process isolation: validates caller is not an agent process
7
+ // 2. Filesystem permissions: verifies Layer 2 files are read-only
8
+ // 3. Cryptographic signing: SHA-256 hash verification of all artifacts
9
+ // 4. Immutable deployment: manifest-based integrity check on startup
10
+ //
11
+ // If ANY level detects a violation, the system halts.
12
+ // ============================================================
13
+ import { createHash } from 'node:crypto';
14
+ import { readFile, stat, writeFile, mkdir } from 'node:fs/promises';
15
+ import { join, dirname } from 'node:path';
16
+ // ── Layer 2 Component Paths (relative to project root) ───
17
+ const DEFAULT_LAYER2_COMPONENTS = [
18
+ { component: 'formal_verifier', path: 'api/lib/formal-verifier.ts' },
19
+ { component: 'verification_protocol', path: 'api/v1/forward.ts' },
20
+ { component: 'approval_framework', path: 'src/runtime/tool-approval.ts' },
21
+ { component: 'immutability_constraint', path: 'src/runtime/layer2-guardian.ts' },
22
+ { component: 'kill_switch', path: 'src/runtime/kill-switch.ts' },
23
+ ];
24
+ // ── Layer 2 Guardian ───────────────────────────────────
25
+ export class Layer2Guardian {
26
+ projectRoot;
27
+ manifestPath;
28
+ manifest = null;
29
+ componentPaths;
30
+ constructor(projectRoot, opts) {
31
+ this.projectRoot = projectRoot;
32
+ this.manifestPath = opts?.manifestPath ?? join(projectRoot, '.assay', 'layer2-manifest.json');
33
+ this.componentPaths = opts?.componentPaths ?? DEFAULT_LAYER2_COMPONENTS;
34
+ }
35
+ // ── Level 1: Process Isolation Validation ──────────────
36
+ /**
37
+ * Validate that a modification proposal does not target Layer 2.
38
+ * This is the first line of defense: structural prevention at the type level.
39
+ */
40
+ validateProposal(proposal) {
41
+ // Type-level check: modifies_layer2 must be literal false
42
+ if (proposal.safety.modifies_layer2 !== false) {
43
+ return {
44
+ valid: false,
45
+ reason: 'BLOCKED: Proposal declares modifies_layer2 = true. Layer 2 cannot be modified by agents.',
46
+ };
47
+ }
48
+ if (proposal.safety.modifies_approval_framework !== false) {
49
+ return {
50
+ valid: false,
51
+ reason: 'BLOCKED: Proposal declares modifies_approval_framework = true. The approval framework is part of Layer 2.',
52
+ };
53
+ }
54
+ // Content check: scan the payload for references to Layer 2 files
55
+ const payloadStr = JSON.stringify(proposal.payload);
56
+ for (const comp of this.componentPaths) {
57
+ if (payloadStr.includes(comp.path)) {
58
+ return {
59
+ valid: false,
60
+ reason: `BLOCKED: Proposal payload references Layer 2 component "${comp.component}" (${comp.path}).`,
61
+ };
62
+ }
63
+ }
64
+ return { valid: true, reason: 'Proposal does not target Layer 2.' };
65
+ }
66
+ // ── Level 2: Filesystem Permission Verification ────────
67
+ /**
68
+ * Verify that Layer 2 files have appropriate permissions.
69
+ * In production, Layer 2 files should be owned by a different user
70
+ * and be read-only from the agent's perspective.
71
+ */
72
+ async verifyPermissions() {
73
+ const findings = [];
74
+ for (const comp of this.componentPaths) {
75
+ const fullPath = join(this.projectRoot, comp.path);
76
+ try {
77
+ const stats = await stat(fullPath);
78
+ // Check that file is not world-writable
79
+ // mode & 0o002 checks the "others write" bit
80
+ const mode = stats.mode;
81
+ if (mode & 0o002) {
82
+ findings.push({
83
+ path: comp.path,
84
+ issue: `World-writable (mode: ${mode.toString(8)}). Layer 2 files must not be world-writable.`,
85
+ });
86
+ }
87
+ // In development mode, we can't enforce strict ownership
88
+ // but we log the permissions for audit purposes
89
+ }
90
+ catch (err) {
91
+ findings.push({
92
+ path: comp.path,
93
+ issue: `Cannot stat file: ${err instanceof Error ? err.message : String(err)}`,
94
+ });
95
+ }
96
+ }
97
+ return {
98
+ valid: findings.length === 0,
99
+ findings,
100
+ };
101
+ }
102
+ // ── Level 3: Cryptographic Signing ─────────────────────
103
+ /**
104
+ * Generate a Layer 2 manifest by hashing all component files.
105
+ * This is called during deployment (by humans), not at runtime (by agents).
106
+ */
107
+ async generateManifest(deployedBy) {
108
+ const components = [];
109
+ for (const comp of this.componentPaths) {
110
+ const fullPath = join(this.projectRoot, comp.path);
111
+ try {
112
+ const content = await readFile(fullPath, 'utf-8');
113
+ const hash = createHash('sha256').update(content).digest('hex');
114
+ const stats = await stat(fullPath);
115
+ components.push({
116
+ component: comp.component,
117
+ file_path: comp.path,
118
+ hash,
119
+ size_bytes: stats.size,
120
+ last_verified: new Date().toISOString(),
121
+ });
122
+ }
123
+ catch (err) {
124
+ throw new Error(`Cannot read Layer 2 component "${comp.component}" at ${comp.path}: ${err instanceof Error ? err.message : String(err)}`);
125
+ }
126
+ }
127
+ // Generate manifest hash (hash of all component hashes)
128
+ const allHashes = components.map(c => c.hash).join(':');
129
+ const manifestHash = createHash('sha256').update(allHashes).digest('hex');
130
+ const manifest = {
131
+ version: new Date().toISOString().replace(/[-:T]/g, '').slice(0, 14),
132
+ deployed_at: new Date().toISOString(),
133
+ deployed_by: deployedBy,
134
+ components,
135
+ manifest_hash: manifestHash,
136
+ signing_key_id: 'local-dev', // In production: HSM key ID
137
+ };
138
+ this.manifest = manifest;
139
+ return manifest;
140
+ }
141
+ /**
142
+ * Save the manifest to disk.
143
+ */
144
+ async saveManifest(manifest) {
145
+ const m = manifest ?? this.manifest;
146
+ if (!m)
147
+ throw new Error('No manifest to save. Call generateManifest() first.');
148
+ await mkdir(dirname(this.manifestPath), { recursive: true });
149
+ await writeFile(this.manifestPath, JSON.stringify(m, null, 2), 'utf-8');
150
+ }
151
+ /**
152
+ * Load the manifest from disk.
153
+ */
154
+ async loadManifest() {
155
+ try {
156
+ const raw = await readFile(this.manifestPath, 'utf-8');
157
+ this.manifest = JSON.parse(raw);
158
+ return this.manifest;
159
+ }
160
+ catch {
161
+ return null;
162
+ }
163
+ }
164
+ // ── Level 4: Integrity Verification on Startup ─────────
165
+ /**
166
+ * Verify Layer 2 integrity by comparing current file hashes
167
+ * against the signed manifest. Called at system startup.
168
+ *
169
+ * If ANY component has been modified, returns a violation.
170
+ * The caller MUST halt the system on violation.
171
+ */
172
+ async verifyIntegrity() {
173
+ const manifest = this.manifest ?? await this.loadManifest();
174
+ if (!manifest) {
175
+ return {
176
+ timestamp: new Date().toISOString(),
177
+ manifest_version: 'none',
178
+ components_checked: 0,
179
+ components_valid: 0,
180
+ components_invalid: [{
181
+ component: 'formal_verifier',
182
+ file_path: 'N/A',
183
+ expected_hash: 'N/A',
184
+ actual_hash: 'N/A',
185
+ severity: 'critical',
186
+ action: 'halt',
187
+ }],
188
+ overall: 'violation',
189
+ };
190
+ }
191
+ const violations = [];
192
+ for (const entry of manifest.components) {
193
+ const fullPath = join(this.projectRoot, entry.file_path);
194
+ try {
195
+ const content = await readFile(fullPath, 'utf-8');
196
+ const actualHash = createHash('sha256').update(content).digest('hex');
197
+ if (actualHash !== entry.hash) {
198
+ violations.push({
199
+ component: entry.component,
200
+ file_path: entry.file_path,
201
+ expected_hash: entry.hash,
202
+ actual_hash: actualHash,
203
+ severity: 'critical',
204
+ action: 'halt',
205
+ });
206
+ }
207
+ }
208
+ catch {
209
+ violations.push({
210
+ component: entry.component,
211
+ file_path: entry.file_path,
212
+ expected_hash: entry.hash,
213
+ actual_hash: 'FILE_NOT_FOUND',
214
+ severity: 'critical',
215
+ action: 'halt',
216
+ });
217
+ }
218
+ }
219
+ // Also verify the manifest hash itself
220
+ const allHashes = manifest.components.map(c => c.hash).join(':');
221
+ const expectedManifestHash = createHash('sha256').update(allHashes).digest('hex');
222
+ if (expectedManifestHash !== manifest.manifest_hash) {
223
+ violations.push({
224
+ component: 'immutability_constraint',
225
+ file_path: this.manifestPath,
226
+ expected_hash: manifest.manifest_hash,
227
+ actual_hash: expectedManifestHash,
228
+ severity: 'critical',
229
+ action: 'halt',
230
+ });
231
+ }
232
+ return {
233
+ timestamp: new Date().toISOString(),
234
+ manifest_version: manifest.version,
235
+ components_checked: manifest.components.length,
236
+ components_valid: manifest.components.length - violations.length,
237
+ components_invalid: violations,
238
+ overall: violations.length === 0 ? 'valid' : 'violation',
239
+ };
240
+ }
241
+ /**
242
+ * Run all four levels of verification.
243
+ * Returns a comprehensive status report.
244
+ */
245
+ async fullAudit() {
246
+ const permissions = await this.verifyPermissions();
247
+ const integrity = await this.verifyIntegrity();
248
+ const manifestPresent = this.manifest !== null;
249
+ return {
250
+ permissions,
251
+ integrity,
252
+ manifestPresent,
253
+ overallSafe: permissions.valid && integrity.overall === 'valid' && manifestPresent,
254
+ };
255
+ }
256
+ /**
257
+ * Get the current manifest (if loaded).
258
+ */
259
+ getManifest() {
260
+ return this.manifest;
261
+ }
262
+ }
263
+ //# sourceMappingURL=layer2-guardian.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layer2-guardian.js","sourceRoot":"","sources":["../../src/runtime/layer2-guardian.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import { EventEmitter } from 'node:events';
2
+ import { SharedMemoryStore } from './shared-memory.js';
3
+ import type { AuditEntry, TeamConfig, TeamResult } from './types.js';
4
+ export declare class MultiAgentLoop extends EventEmitter {
5
+ private messageBus;
6
+ private compositionVerifier;
7
+ private trustManager;
8
+ private sharedMemory;
9
+ private stallDetector;
10
+ private agents;
11
+ private auditTrail;
12
+ private config;
13
+ private codebaseRoot;
14
+ constructor(codebaseRoot: string, config: TeamConfig);
15
+ /**
16
+ * Run the full multi-agent loop on a goal.
17
+ * 1. Coordinator decomposes goal into task graph
18
+ * 2. Ready tasks are assigned to agents
19
+ * 3. Each agent output passes through boundary verification
20
+ * 4. Completed tasks unlock dependent tasks
21
+ * 5. Stall detector monitors for problems
22
+ * 6. Loop until all tasks complete, fail, or escalate
23
+ */
24
+ run(): Promise<TeamResult>;
25
+ /** Get the current audit trail. */
26
+ getAuditTrail(): readonly AuditEntry[];
27
+ /** Get the shared memory store. */
28
+ getSharedMemory(): SharedMemoryStore;
29
+ private updateReadyTasks;
30
+ private getReviewTarget;
31
+ private buildContextRefs;
32
+ private parseDecomposition;
33
+ private buildGraph;
34
+ private makeEmptyGraph;
35
+ private makeResult;
36
+ private audit;
37
+ }