network-ai 4.15.3 → 5.0.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 (204) hide show
  1. package/INTEGRATION_GUIDE.md +11 -4
  2. package/QUICKSTART.md +31 -4
  3. package/README.md +37 -15
  4. package/bin/dashboard.ts +146 -0
  5. package/bin/mcp-server.ts +3 -2
  6. package/dist/adapters/adapter-registry.d.ts +33 -1
  7. package/dist/adapters/adapter-registry.d.ts.map +1 -1
  8. package/dist/adapters/adapter-registry.js +49 -0
  9. package/dist/adapters/adapter-registry.js.map +1 -1
  10. package/dist/adapters/anthropic-computer-use-adapter.d.ts +132 -0
  11. package/dist/adapters/anthropic-computer-use-adapter.d.ts.map +1 -0
  12. package/dist/adapters/anthropic-computer-use-adapter.js +180 -0
  13. package/dist/adapters/anthropic-computer-use-adapter.js.map +1 -0
  14. package/dist/adapters/browser-agent-adapter.d.ts +121 -0
  15. package/dist/adapters/browser-agent-adapter.d.ts.map +1 -0
  16. package/dist/adapters/browser-agent-adapter.js +219 -0
  17. package/dist/adapters/browser-agent-adapter.js.map +1 -0
  18. package/dist/adapters/copilot-adapter.d.ts +59 -0
  19. package/dist/adapters/copilot-adapter.d.ts.map +1 -0
  20. package/dist/adapters/copilot-adapter.js +132 -0
  21. package/dist/adapters/copilot-adapter.js.map +1 -0
  22. package/dist/adapters/index.d.ts +15 -1
  23. package/dist/adapters/index.d.ts.map +1 -1
  24. package/dist/adapters/index.js +22 -1
  25. package/dist/adapters/index.js.map +1 -1
  26. package/dist/adapters/langgraph-adapter.d.ts +70 -0
  27. package/dist/adapters/langgraph-adapter.d.ts.map +1 -0
  28. package/dist/adapters/langgraph-adapter.js +119 -0
  29. package/dist/adapters/langgraph-adapter.js.map +1 -0
  30. package/dist/adapters/openai-agents-adapter.d.ts +100 -0
  31. package/dist/adapters/openai-agents-adapter.d.ts.map +1 -0
  32. package/dist/adapters/openai-agents-adapter.js +118 -0
  33. package/dist/adapters/openai-agents-adapter.js.map +1 -0
  34. package/dist/adapters/pydantic-ai-adapter.d.ts +104 -0
  35. package/dist/adapters/pydantic-ai-adapter.d.ts.map +1 -0
  36. package/dist/adapters/pydantic-ai-adapter.js +163 -0
  37. package/dist/adapters/pydantic-ai-adapter.js.map +1 -0
  38. package/dist/adapters/vertex-ai-adapter.d.ts +122 -0
  39. package/dist/adapters/vertex-ai-adapter.d.ts.map +1 -0
  40. package/dist/adapters/vertex-ai-adapter.js +166 -0
  41. package/dist/adapters/vertex-ai-adapter.js.map +1 -0
  42. package/dist/bin/dashboard.d.ts +11 -0
  43. package/dist/bin/dashboard.d.ts.map +1 -0
  44. package/dist/bin/dashboard.js +135 -0
  45. package/dist/bin/dashboard.js.map +1 -0
  46. package/dist/bin/mcp-server.js +3 -2
  47. package/dist/bin/mcp-server.js.map +1 -1
  48. package/dist/index.d.ts +103 -559
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +295 -1074
  51. package/dist/index.js.map +1 -1
  52. package/dist/lib/adapter-test-harness.d.ts +88 -0
  53. package/dist/lib/adapter-test-harness.d.ts.map +1 -0
  54. package/dist/lib/adapter-test-harness.js +118 -0
  55. package/dist/lib/adapter-test-harness.js.map +1 -0
  56. package/dist/lib/agent-conversation.d.ts +115 -0
  57. package/dist/lib/agent-conversation.d.ts.map +1 -0
  58. package/dist/lib/agent-conversation.js +155 -0
  59. package/dist/lib/agent-conversation.js.map +1 -0
  60. package/dist/lib/agent-debate.d.ts +115 -0
  61. package/dist/lib/agent-debate.d.ts.map +1 -0
  62. package/dist/lib/agent-debate.js +146 -0
  63. package/dist/lib/agent-debate.js.map +1 -0
  64. package/dist/lib/agent-memory.d.ts +157 -0
  65. package/dist/lib/agent-memory.d.ts.map +1 -0
  66. package/dist/lib/agent-memory.js +336 -0
  67. package/dist/lib/agent-memory.js.map +1 -0
  68. package/dist/lib/agent-vcr.d.ts +133 -0
  69. package/dist/lib/agent-vcr.d.ts.map +1 -0
  70. package/dist/lib/agent-vcr.js +218 -0
  71. package/dist/lib/agent-vcr.js.map +1 -0
  72. package/dist/lib/anomaly-detector.d.ts +112 -0
  73. package/dist/lib/anomaly-detector.d.ts.map +1 -0
  74. package/dist/lib/anomaly-detector.js +178 -0
  75. package/dist/lib/anomaly-detector.js.map +1 -0
  76. package/dist/lib/approval-inbox.d.ts +147 -0
  77. package/dist/lib/approval-inbox.d.ts.map +1 -0
  78. package/dist/lib/approval-inbox.js +385 -0
  79. package/dist/lib/approval-inbox.js.map +1 -0
  80. package/dist/lib/auth-guardian.d.ts +170 -0
  81. package/dist/lib/auth-guardian.d.ts.map +1 -0
  82. package/dist/lib/auth-guardian.js +604 -0
  83. package/dist/lib/auth-guardian.js.map +1 -0
  84. package/dist/lib/auth-validator.d.ts +70 -0
  85. package/dist/lib/auth-validator.d.ts.map +1 -0
  86. package/dist/lib/auth-validator.js +32 -0
  87. package/dist/lib/auth-validator.js.map +1 -0
  88. package/dist/lib/blackboard-validator.d.ts +56 -0
  89. package/dist/lib/blackboard-validator.d.ts.map +1 -1
  90. package/dist/lib/blackboard-validator.js +181 -4
  91. package/dist/lib/blackboard-validator.js.map +1 -1
  92. package/dist/lib/comparison-runner.d.ts +99 -0
  93. package/dist/lib/comparison-runner.d.ts.map +1 -0
  94. package/dist/lib/comparison-runner.js +138 -0
  95. package/dist/lib/comparison-runner.js.map +1 -0
  96. package/dist/lib/config-watcher.d.ts +109 -0
  97. package/dist/lib/config-watcher.d.ts.map +1 -0
  98. package/dist/lib/config-watcher.js +215 -0
  99. package/dist/lib/config-watcher.js.map +1 -0
  100. package/dist/lib/cost-governor.d.ts +105 -0
  101. package/dist/lib/cost-governor.d.ts.map +1 -0
  102. package/dist/lib/cost-governor.js +128 -0
  103. package/dist/lib/cost-governor.js.map +1 -0
  104. package/dist/lib/cost-heatmap.d.ts +104 -0
  105. package/dist/lib/cost-heatmap.d.ts.map +1 -0
  106. package/dist/lib/cost-heatmap.js +161 -0
  107. package/dist/lib/cost-heatmap.js.map +1 -0
  108. package/dist/lib/coverage-reporter.d.ts +92 -0
  109. package/dist/lib/coverage-reporter.d.ts.map +1 -0
  110. package/dist/lib/coverage-reporter.js +177 -0
  111. package/dist/lib/coverage-reporter.js.map +1 -0
  112. package/dist/lib/dashboard-server.d.ts +71 -0
  113. package/dist/lib/dashboard-server.d.ts.map +1 -0
  114. package/dist/lib/dashboard-server.js +403 -0
  115. package/dist/lib/dashboard-server.js.map +1 -0
  116. package/dist/lib/dry-run.d.ts +73 -0
  117. package/dist/lib/dry-run.d.ts.map +1 -0
  118. package/dist/lib/dry-run.js +130 -0
  119. package/dist/lib/dry-run.js.map +1 -0
  120. package/dist/lib/errors.d.ts +15 -0
  121. package/dist/lib/errors.d.ts.map +1 -1
  122. package/dist/lib/errors.js +38 -0
  123. package/dist/lib/errors.js.map +1 -1
  124. package/dist/lib/event-bus.d.ts +167 -0
  125. package/dist/lib/event-bus.d.ts.map +1 -0
  126. package/dist/lib/event-bus.js +229 -0
  127. package/dist/lib/event-bus.js.map +1 -0
  128. package/dist/lib/explainability.d.ts +85 -0
  129. package/dist/lib/explainability.d.ts.map +1 -0
  130. package/dist/lib/explainability.js +102 -0
  131. package/dist/lib/explainability.js.map +1 -0
  132. package/dist/lib/goal-dsl.d.ts +157 -0
  133. package/dist/lib/goal-dsl.d.ts.map +1 -0
  134. package/dist/lib/goal-dsl.js +392 -0
  135. package/dist/lib/goal-dsl.js.map +1 -0
  136. package/dist/lib/job-queue.d.ts +183 -0
  137. package/dist/lib/job-queue.d.ts.map +1 -0
  138. package/dist/lib/job-queue.js +310 -0
  139. package/dist/lib/job-queue.js.map +1 -0
  140. package/dist/lib/learning-loop.d.ts +113 -0
  141. package/dist/lib/learning-loop.d.ts.map +1 -0
  142. package/dist/lib/learning-loop.js +181 -0
  143. package/dist/lib/learning-loop.js.map +1 -0
  144. package/dist/lib/lifecycle-hooks.d.ts +116 -0
  145. package/dist/lib/lifecycle-hooks.d.ts.map +1 -0
  146. package/dist/lib/lifecycle-hooks.js +148 -0
  147. package/dist/lib/lifecycle-hooks.js.map +1 -0
  148. package/dist/lib/locked-blackboard.d.ts.map +1 -1
  149. package/dist/lib/locked-blackboard.js +9 -5
  150. package/dist/lib/locked-blackboard.js.map +1 -1
  151. package/dist/lib/mcp-tool-consumer.d.ts +153 -0
  152. package/dist/lib/mcp-tool-consumer.d.ts.map +1 -0
  153. package/dist/lib/mcp-tool-consumer.js +320 -0
  154. package/dist/lib/mcp-tool-consumer.js.map +1 -0
  155. package/dist/lib/metrics.d.ts +119 -0
  156. package/dist/lib/metrics.d.ts.map +1 -0
  157. package/dist/lib/metrics.js +284 -0
  158. package/dist/lib/metrics.js.map +1 -0
  159. package/dist/lib/orchestrator-types.d.ts +309 -0
  160. package/dist/lib/orchestrator-types.d.ts.map +1 -0
  161. package/dist/lib/orchestrator-types.js +61 -0
  162. package/dist/lib/orchestrator-types.js.map +1 -0
  163. package/dist/lib/otel-bridge.d.ts +74 -0
  164. package/dist/lib/otel-bridge.d.ts.map +1 -0
  165. package/dist/lib/otel-bridge.js +167 -0
  166. package/dist/lib/otel-bridge.js.map +1 -0
  167. package/dist/lib/playground.d.ts +76 -0
  168. package/dist/lib/playground.d.ts.map +1 -0
  169. package/dist/lib/playground.js +224 -0
  170. package/dist/lib/playground.js.map +1 -0
  171. package/dist/lib/quadtree.d.ts +114 -0
  172. package/dist/lib/quadtree.d.ts.map +1 -0
  173. package/dist/lib/quadtree.js +259 -0
  174. package/dist/lib/quadtree.js.map +1 -0
  175. package/dist/lib/shared-blackboard.d.ts +101 -0
  176. package/dist/lib/shared-blackboard.d.ts.map +1 -0
  177. package/dist/lib/shared-blackboard.js +249 -0
  178. package/dist/lib/shared-blackboard.js.map +1 -0
  179. package/dist/lib/speculative-executor.d.ts +89 -0
  180. package/dist/lib/speculative-executor.d.ts.map +1 -0
  181. package/dist/lib/speculative-executor.js +107 -0
  182. package/dist/lib/speculative-executor.js.map +1 -0
  183. package/dist/lib/swarm-transport.d.ts +150 -0
  184. package/dist/lib/swarm-transport.d.ts.map +1 -0
  185. package/dist/lib/swarm-transport.js +307 -0
  186. package/dist/lib/swarm-transport.js.map +1 -0
  187. package/dist/lib/task-decomposer.d.ts +41 -0
  188. package/dist/lib/task-decomposer.d.ts.map +1 -0
  189. package/dist/lib/task-decomposer.js +272 -0
  190. package/dist/lib/task-decomposer.js.map +1 -0
  191. package/dist/lib/timeline-scrubber.d.ts +84 -0
  192. package/dist/lib/timeline-scrubber.d.ts.map +1 -0
  193. package/dist/lib/timeline-scrubber.js +173 -0
  194. package/dist/lib/timeline-scrubber.js.map +1 -0
  195. package/dist/lib/topology.d.ts +361 -0
  196. package/dist/lib/topology.d.ts.map +1 -0
  197. package/dist/lib/topology.js +591 -0
  198. package/dist/lib/topology.js.map +1 -0
  199. package/dist/security.d.ts +95 -0
  200. package/dist/security.d.ts.map +1 -1
  201. package/dist/security.js +266 -4
  202. package/dist/security.js.map +1 -1
  203. package/package.json +7 -5
  204. package/types/agent-adapter.d.ts +5 -0
@@ -0,0 +1,604 @@
1
+ "use strict";
2
+ /**
3
+ * Universal permission wall for multi-agent systems.
4
+ *
5
+ * Evaluates permission requests using a weighted formula of justification
6
+ * quality (40%), agent trust level (30%), and risk score (30%).
7
+ * Resource types, risk profiles, trust levels, and restrictions are all
8
+ * configurable — works for coding, finance, DevOps, or any domain.
9
+ *
10
+ * @module AuthGuardian
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.AuthGuardian = void 0;
14
+ const fs_1 = require("fs");
15
+ const path_1 = require("path");
16
+ const crypto_1 = require("crypto");
17
+ const security_1 = require("../security");
18
+ const errors_1 = require("./errors");
19
+ const orchestrator_types_1 = require("./orchestrator-types");
20
+ /**
21
+ * Universal permission wall for multi-agent systems.
22
+ *
23
+ * Evaluates permission requests using a weighted formula of justification
24
+ * quality (40%), agent trust level (30%), and risk score (30%).
25
+ * Resource types, risk profiles, trust levels, and restrictions are all
26
+ * configurable — works for coding, finance, DevOps, or any domain.
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * const guardian = new AuthGuardian({
31
+ * trustLevels: [{ agentId: 'analyst', trustLevel: 0.8 }],
32
+ * resourceProfiles: { CUSTOM_API: { baseRisk: 0.5, defaultRestrictions: ['audit_required'] } },
33
+ * });
34
+ *
35
+ * const grant = await guardian.requestPermission(
36
+ * 'analyst', 'CUSTOM_API', 'Need to fetch Q4 revenue data for report', 'read'
37
+ * );
38
+ * if (grant.granted) {
39
+ * // Use grant.grantToken to prove authorization
40
+ * }
41
+ * ```
42
+ */
43
+ class AuthGuardian {
44
+ activeGrants = new Map();
45
+ agentTrustLevels = new Map();
46
+ agentTrustConfigs = new Map();
47
+ resourceProfiles = new Map();
48
+ auditLog = [];
49
+ auditLogPath;
50
+ trustConfigPath;
51
+ signingAlgorithm;
52
+ hmacSecret;
53
+ ed25519PrivateKey;
54
+ ed25519PublicKey;
55
+ constructor(options) {
56
+ this.auditLogPath = options?.auditLogPath ?? orchestrator_types_1.CONFIG.auditLogPath;
57
+ this.trustConfigPath = options?.trustConfigPath ?? orchestrator_types_1.CONFIG.trustConfigPath;
58
+ this.signingAlgorithm = options?.algorithm ?? 'hmac-sha256';
59
+ if (this.signingAlgorithm === 'ed25519') {
60
+ const { publicKey, privateKey } = (0, crypto_1.generateKeyPairSync)('ed25519');
61
+ this.ed25519PrivateKey = privateKey;
62
+ this.ed25519PublicKey = publicKey;
63
+ this.hmacSecret = '';
64
+ }
65
+ else {
66
+ this.ed25519PrivateKey = null;
67
+ this.ed25519PublicKey = null;
68
+ this.hmacSecret = options?.hmacSecret ?? (0, crypto_1.randomUUID)();
69
+ }
70
+ // Load resource profiles (file → user-provided → defaults)
71
+ const fileProfiles = this.loadResourceProfilesFromDisk();
72
+ const profiles = { ...orchestrator_types_1.DEFAULT_RESOURCE_PROFILES, ...fileProfiles, ...(options?.resourceProfiles ?? {}) };
73
+ for (const [name, profile] of Object.entries(profiles)) {
74
+ this.resourceProfiles.set(name, profile);
75
+ }
76
+ // Load trust levels (try disk first, then user-provided, then defaults)
77
+ const trustConfigs = options?.trustLevels ?? this.loadTrustFromDisk() ?? orchestrator_types_1.DEFAULT_AGENT_TRUST;
78
+ for (const config of trustConfigs) {
79
+ this.agentTrustLevels.set(config.agentId, config.trustLevel);
80
+ this.agentTrustConfigs.set(config.agentId, config);
81
+ }
82
+ // Load existing audit log from disk
83
+ this.loadAuditFromDisk();
84
+ }
85
+ /**
86
+ * Register a new resource type at runtime.
87
+ * Makes the system extensible for any domain.
88
+ */
89
+ registerResourceType(name, profile) {
90
+ if (!name || typeof name !== 'string' || name.trim() === '') {
91
+ throw new errors_1.ValidationError('resource name must be a non-empty string');
92
+ }
93
+ if (!profile || typeof profile !== 'object' || typeof profile.baseRisk !== 'number') {
94
+ throw new errors_1.ValidationError('profile must be an object with a numeric baseRisk');
95
+ }
96
+ if (profile.baseRisk < 0 || profile.baseRisk > 1) {
97
+ throw new errors_1.ValidationError('profile.baseRisk must be between 0 and 1');
98
+ }
99
+ if (!Array.isArray(profile.defaultRestrictions)) {
100
+ throw new errors_1.ValidationError('profile.defaultRestrictions must be an array');
101
+ }
102
+ this.resourceProfiles.set(name, profile);
103
+ }
104
+ /**
105
+ * Register or update an agent's trust configuration at runtime.
106
+ */
107
+ registerAgentTrust(config) {
108
+ if (!config || typeof config !== 'object') {
109
+ throw new errors_1.ValidationError('config must be an object');
110
+ }
111
+ if (!config.agentId || typeof config.agentId !== 'string' || config.agentId.trim() === '') {
112
+ throw new errors_1.ValidationError('config.agentId must be a non-empty string');
113
+ }
114
+ if (typeof config.trustLevel !== 'number' || config.trustLevel < 0 || config.trustLevel > 1) {
115
+ throw new errors_1.ValidationError('config.trustLevel must be a number between 0 and 1');
116
+ }
117
+ this.agentTrustLevels.set(config.agentId, config.trustLevel);
118
+ this.agentTrustConfigs.set(config.agentId, config);
119
+ this.persistTrustToDisk();
120
+ }
121
+ /**
122
+ * Request permission to access a resource.
123
+ * resourceType is now a free string -- validated against registered profiles.
124
+ */
125
+ async requestPermission(agentId, resourceType, justification, scope) {
126
+ if (!agentId || typeof agentId !== 'string') {
127
+ throw new errors_1.ValidationError('agentId must be a non-empty string');
128
+ }
129
+ if (!resourceType || typeof resourceType !== 'string') {
130
+ throw new errors_1.ValidationError('resourceType must be a non-empty string');
131
+ }
132
+ if (!justification || typeof justification !== 'string') {
133
+ throw new errors_1.ValidationError('justification must be a non-empty string');
134
+ }
135
+ // Sanitize inputs
136
+ let safeAgentId;
137
+ let safeJustification;
138
+ try {
139
+ safeAgentId = security_1.InputSanitizer.sanitizeAgentId(agentId);
140
+ safeJustification = security_1.InputSanitizer.sanitizeString(justification, 2000);
141
+ }
142
+ catch {
143
+ safeAgentId = agentId.replace(/[^a-zA-Z0-9_-]/g, '').slice(0, 64) || 'unknown';
144
+ safeJustification = justification.slice(0, 2000);
145
+ }
146
+ this.log('permission_request', { agentId: safeAgentId, resourceType, justification: safeJustification, scope });
147
+ // Check if agent is allowed to access this resource type
148
+ const agentConfig = this.agentTrustConfigs.get(safeAgentId);
149
+ if (agentConfig && agentConfig.allowedResources && !agentConfig.allowedResources.includes('*')) {
150
+ if (!agentConfig.allowedResources.includes(resourceType)) {
151
+ this.log('permission_denied', { agentId: safeAgentId, resourceType, reason: 'resource_not_in_allowlist' });
152
+ return {
153
+ granted: false,
154
+ grantToken: null,
155
+ expiresAt: null,
156
+ restrictions: [],
157
+ reason: `Agent '${safeAgentId}' is not authorized to access '${resourceType}'. Allowed: ${agentConfig.allowedResources.join(', ')}`,
158
+ };
159
+ }
160
+ }
161
+ // Evaluate the permission request
162
+ const evaluation = this.evaluateRequest(safeAgentId, resourceType, safeJustification, scope);
163
+ if (!evaluation.approved) {
164
+ this.log('permission_denied', { agentId: safeAgentId, resourceType, reason: evaluation.reason });
165
+ return {
166
+ granted: false,
167
+ grantToken: null,
168
+ expiresAt: null,
169
+ restrictions: [],
170
+ reason: evaluation.reason,
171
+ };
172
+ }
173
+ // Generate grant token
174
+ const grantToken = this.generateGrantToken();
175
+ const expiresAt = new Date(Date.now() + orchestrator_types_1.CONFIG.grantTokenTTL).toISOString();
176
+ const grant = {
177
+ grantToken,
178
+ resourceType,
179
+ agentId: safeAgentId,
180
+ expiresAt,
181
+ restrictions: evaluation.restrictions,
182
+ scope,
183
+ };
184
+ this.activeGrants.set(grantToken, grant);
185
+ this.log('permission_granted', { grantToken, agentId: safeAgentId, resourceType, expiresAt, restrictions: evaluation.restrictions });
186
+ return {
187
+ granted: true,
188
+ grantToken,
189
+ expiresAt,
190
+ restrictions: evaluation.restrictions,
191
+ };
192
+ }
193
+ /**
194
+ * Validate a grant token and return `true` if it is active and not expired.
195
+ *
196
+ * @param token - The grant token to validate
197
+ * @returns `true` if the token is valid, `false` otherwise
198
+ */
199
+ validateToken(token) {
200
+ if (!token || typeof token !== 'string')
201
+ return false;
202
+ const grant = this.activeGrants.get(token);
203
+ if (!grant)
204
+ return false;
205
+ if (new Date(grant.expiresAt) < new Date()) {
206
+ this.activeGrants.delete(token);
207
+ return false;
208
+ }
209
+ return true;
210
+ }
211
+ /**
212
+ * Validate a token and return the full grant object (including restrictions
213
+ * and scope) for point-of-use enforcement.
214
+ *
215
+ * @param token - The grant token to validate
216
+ * @returns The grant details, or `null` if invalid/expired
217
+ */
218
+ validateTokenWithGrant(token) {
219
+ if (!token || typeof token !== 'string')
220
+ return null;
221
+ const grant = this.activeGrants.get(token);
222
+ if (!grant)
223
+ return null;
224
+ if (new Date(grant.expiresAt) < new Date()) {
225
+ this.activeGrants.delete(token);
226
+ return null;
227
+ }
228
+ return grant;
229
+ }
230
+ /**
231
+ * Enforce restrictions on an operation. Returns an error string if
232
+ * the operation violates any restriction, or `null` if all restrictions pass.
233
+ *
234
+ * @param grantToken - The grant token authorizing the operation
235
+ * @param operation - Description of the operation to check against restrictions
236
+ * @returns Error message string if a restriction is violated, or `null` if allowed
237
+ */
238
+ enforceRestrictions(grantToken, operation) {
239
+ if (!grantToken || typeof grantToken !== 'string') {
240
+ return 'Invalid or expired grant token';
241
+ }
242
+ const grant = this.validateTokenWithGrant(grantToken);
243
+ if (!grant)
244
+ return 'Invalid or expired grant token';
245
+ for (const restriction of grant.restrictions) {
246
+ // Enforce read_only
247
+ if (restriction === 'read_only' && operation.type && operation.type !== 'read') {
248
+ return `Restriction 'read_only' violated: attempted '${operation.type}'`;
249
+ }
250
+ // Enforce max_records
251
+ const maxRecordsMatch = restriction.match(/^max_records:(\d+)$/);
252
+ if (maxRecordsMatch && operation.recordCount) {
253
+ const max = parseInt(maxRecordsMatch[1], 10);
254
+ if (operation.recordCount > max) {
255
+ return `Restriction '${restriction}' violated: requested ${operation.recordCount} records`;
256
+ }
257
+ }
258
+ // Enforce sandbox_only
259
+ if (restriction === 'sandbox_only' && operation.targetPath) {
260
+ if (/^\/|^[A-Z]:\\(?:Windows|Program)/i.test(operation.targetPath)) {
261
+ return `Restriction 'sandbox_only' violated: path '${operation.targetPath}' is outside sandbox`;
262
+ }
263
+ }
264
+ // Enforce no_sudo
265
+ if (restriction === 'no_sudo' && operation.command) {
266
+ if (/\bsudo\b/i.test(operation.command)) {
267
+ return `Restriction 'no_sudo' violated: command contains sudo`;
268
+ }
269
+ }
270
+ // Enforce workspace_only
271
+ if (restriction === 'workspace_only' && operation.targetPath) {
272
+ if (/\.\.[/\\]/.test(operation.targetPath)) {
273
+ return `Restriction 'workspace_only' violated: path traversal detected`;
274
+ }
275
+ }
276
+ // Enforce no_system_dirs
277
+ if (restriction === 'no_system_dirs' && operation.targetPath) {
278
+ if (/(?:\/etc|\/usr|\/var|\\Windows|\\System32)/i.test(operation.targetPath)) {
279
+ return `Restriction 'no_system_dirs' violated: system directory access`;
280
+ }
281
+ }
282
+ // Enforce no_attachments
283
+ if (restriction === 'no_attachments' && operation.hasAttachments) {
284
+ return `Restriction 'no_attachments' violated`;
285
+ }
286
+ }
287
+ return null; // All restrictions passed
288
+ }
289
+ /**
290
+ * Revoke a grant token, immediately invalidating it.
291
+ * Silently no-ops if the token doesn't exist.
292
+ *
293
+ * @param token - The grant token to revoke
294
+ */
295
+ revokeToken(token) {
296
+ this.activeGrants.delete(token);
297
+ this.log('permission_revoked', { token });
298
+ }
299
+ evaluateRequest(agentId, resourceType, justification, scope) {
300
+ // 1. Justification Quality (40% weight) -- now includes resource-relevance
301
+ const justificationScore = this.scoreJustification(justification, resourceType);
302
+ if (justificationScore < 0.3) {
303
+ return {
304
+ approved: false,
305
+ reason: 'Justification is insufficient. Please provide specific task context.',
306
+ restrictions: [],
307
+ };
308
+ }
309
+ // 2. Agent Trust Level (30% weight)
310
+ const trustLevel = this.agentTrustLevels.get(agentId) ?? 0.5;
311
+ if (trustLevel < 0.4) {
312
+ return {
313
+ approved: false,
314
+ reason: 'Agent trust level is below threshold. Escalate to human operator.',
315
+ restrictions: [],
316
+ };
317
+ }
318
+ // 3. Risk Assessment (30% weight)
319
+ const riskScore = this.assessRisk(resourceType, scope);
320
+ if (riskScore > 0.8) {
321
+ return {
322
+ approved: false,
323
+ reason: 'Risk assessment exceeds acceptable threshold. Narrow the requested scope.',
324
+ restrictions: [],
325
+ };
326
+ }
327
+ // Get restrictions from resource profile (data-driven, not hardcoded)
328
+ const profile = this.resourceProfiles.get(resourceType);
329
+ const restrictions = profile
330
+ ? [...profile.defaultRestrictions]
331
+ : ['audit_required']; // Unknown resources get audited by default
332
+ // Calculate weighted approval
333
+ const weightedScore = (justificationScore * 0.4) + (trustLevel * 0.3) + ((1 - riskScore) * 0.3);
334
+ const approved = weightedScore >= 0.5;
335
+ return {
336
+ approved,
337
+ reason: approved ? undefined : 'Combined evaluation score below threshold.',
338
+ restrictions,
339
+ };
340
+ }
341
+ /**
342
+ * Improved justification scoring with resource-relevance checking.
343
+ * Prevents trivial gaming by verifying the justification mentions
344
+ * concepts relevant to the requested resource.
345
+ */
346
+ scoreJustification(justification, resourceType) {
347
+ let score = 0;
348
+ // Length scoring
349
+ if (justification.length > 20)
350
+ score += 0.15;
351
+ if (justification.length > 50)
352
+ score += 0.15;
353
+ // Intent keywords
354
+ if (/task|purpose|need|require|generate|analyze|process|build|deploy|test|review/i.test(justification))
355
+ score += 0.15;
356
+ // Specificity keywords
357
+ if (/specific|particular|exact|for\s+the|in\s+order\s+to|because|so\s+that/i.test(justification))
358
+ score += 0.15;
359
+ // Penalty for vague/test phrasing
360
+ if (/^test$|^debug$|^try$|^just\s+testing/i.test(justification.trim()))
361
+ score -= 0.3;
362
+ // Resource-relevance check: does the justification mention anything related
363
+ // to the requested resource? (+0.2 bonus for relevant context)
364
+ if (resourceType) {
365
+ const relevancePatterns = {
366
+ SAP_API: /sap|erp|invoice|procurement|purchase|material|vendor/i,
367
+ FINANCIAL_API: /financ|revenue|budget|accounting|payment|ledger|balance/i,
368
+ DATA_EXPORT: /export|report|csv|download|extract|migrate/i,
369
+ FILE_SYSTEM: /file|read|write|save|load|path|directory|workspace/i,
370
+ SHELL_EXEC: /command|script|compile|build|run|execute|terminal/i,
371
+ GIT: /git|commit|branch|merge|pull|push|repository|diff/i,
372
+ PACKAGE_MANAGER: /package|install|dependency|npm|pip|cargo|module/i,
373
+ BUILD_TOOL: /build|compile|webpack|tsc|make|gradle|cargo/i,
374
+ DOCKER: /container|docker|image|deploy|service|compose/i,
375
+ CLOUD_DEPLOY: /deploy|cloud|staging|production|release|infrastructure/i,
376
+ DATABASE: /database|query|sql|table|record|schema|migration/i,
377
+ EXTERNAL_SERVICE: /api|service|endpoint|webhook|request|fetch/i,
378
+ EMAIL: /email|mail|send|notification|alert|message/i,
379
+ WEBHOOK: /webhook|callback|notification|event|dispatch/i,
380
+ };
381
+ const pattern = relevancePatterns[resourceType];
382
+ if (pattern && pattern.test(justification)) {
383
+ score += 0.2;
384
+ }
385
+ else if (pattern && !pattern.test(justification)) {
386
+ // Justification doesn't mention anything relevant -- small penalty
387
+ score -= 0.1;
388
+ }
389
+ }
390
+ // Bonus for mentioning a task/ticket ID
391
+ if (/(?:task|ticket|issue|jira|pr|bug)[_\-#]?\s*\d+/i.test(justification))
392
+ score += 0.1;
393
+ return Math.max(0, Math.min(score, 1));
394
+ }
395
+ assessRisk(resourceType, scope) {
396
+ // Look up base risk from registered profile (not hardcoded)
397
+ const profile = this.resourceProfiles.get(resourceType);
398
+ let risk = profile?.baseRisk ?? 0.5; // Unknown resources get medium risk
399
+ // Broad scopes increase risk
400
+ if (!scope || scope === '*' || scope === 'all') {
401
+ risk += 0.2;
402
+ }
403
+ // Write/delete operations increase risk
404
+ if (scope && /write|delete|update|modify|execute|deploy/i.test(scope)) {
405
+ risk += 0.2;
406
+ }
407
+ return Math.min(risk, 1);
408
+ }
409
+ generateGrantToken() {
410
+ const id = (0, crypto_1.randomUUID)().replace(/-/g, '');
411
+ const payload = `grant_${id}`;
412
+ if (this.signingAlgorithm === 'ed25519' && this.ed25519PrivateKey) {
413
+ const sig = (0, crypto_1.sign)(null, Buffer.from(payload), this.ed25519PrivateKey).toString('base64url');
414
+ return `${payload}.${sig}`;
415
+ }
416
+ // HMAC: append signature so tokens are tamper-evident
417
+ const sig = (0, crypto_1.createHmac)('sha256', this.hmacSecret).update(payload).digest('base64url');
418
+ return `${payload}.${sig}`;
419
+ }
420
+ /**
421
+ * Verify a grant token's cryptographic signature.
422
+ * For Ed25519 tokens, this can be done by any party holding the public key.
423
+ * For HMAC tokens, only the issuing AuthGuardian can verify.
424
+ *
425
+ * @param token - The grant token to verify
426
+ * @returns `true` if the signature is valid
427
+ */
428
+ verifyTokenSignature(token) {
429
+ const dotIndex = token.lastIndexOf('.');
430
+ if (dotIndex === -1)
431
+ return false;
432
+ const payload = token.slice(0, dotIndex);
433
+ const sig = token.slice(dotIndex + 1);
434
+ if (this.signingAlgorithm === 'ed25519' && this.ed25519PublicKey) {
435
+ try {
436
+ return (0, crypto_1.verify)(null, Buffer.from(payload), this.ed25519PublicKey, Buffer.from(sig, 'base64url'));
437
+ }
438
+ catch {
439
+ return false;
440
+ }
441
+ }
442
+ const expected = (0, crypto_1.createHmac)('sha256', this.hmacSecret).update(payload).digest('base64url');
443
+ // Constant-time comparison
444
+ if (expected.length !== sig.length)
445
+ return false;
446
+ let result = 0;
447
+ for (let i = 0; i < expected.length; i++) {
448
+ result |= expected.charCodeAt(i) ^ sig.charCodeAt(i);
449
+ }
450
+ return result === 0;
451
+ }
452
+ /**
453
+ * Get the signing algorithm used by this AuthGuardian instance.
454
+ */
455
+ getSigningAlgorithm() {
456
+ return this.signingAlgorithm;
457
+ }
458
+ /**
459
+ * Export the Ed25519 public key in PEM format for third-party verification.
460
+ * Returns `null` if the instance uses HMAC signing.
461
+ */
462
+ exportPublicKey() {
463
+ if (!this.ed25519PublicKey)
464
+ return null;
465
+ return this.ed25519PublicKey.export({ type: 'spki', format: 'pem' });
466
+ }
467
+ log(action, details) {
468
+ const entry = {
469
+ timestamp: new Date().toISOString(),
470
+ action,
471
+ details,
472
+ };
473
+ this.auditLog.push(entry);
474
+ // Persist to disk (non-blocking — in-memory array is the source of truth)
475
+ try {
476
+ const dir = (0, path_1.join)('.', 'data');
477
+ if (!(0, fs_1.existsSync)(dir)) {
478
+ (0, fs_1.mkdirSync)(dir, { recursive: true });
479
+ }
480
+ (0, fs_1.appendFile)(this.auditLogPath, JSON.stringify(entry) + '\n', () => { });
481
+ }
482
+ catch {
483
+ // Non-fatal -- log is also in memory
484
+ }
485
+ }
486
+ /**
487
+ * Get all active (non-expired) permission grants.
488
+ * Automatically cleans up expired grants before returning.
489
+ */
490
+ getActiveGrants() {
491
+ // Clean expired grants
492
+ const now = new Date();
493
+ for (const [token, grant] of this.activeGrants.entries()) {
494
+ if (new Date(grant.expiresAt) < now) {
495
+ this.activeGrants.delete(token);
496
+ }
497
+ }
498
+ return Array.from(this.activeGrants.values());
499
+ }
500
+ /**
501
+ * Get the full audit log of permission decisions.
502
+ * Returns a defensive copy.
503
+ */
504
+ getAuditLog() {
505
+ return [...this.auditLog];
506
+ }
507
+ /**
508
+ * Get all registered resource profiles.
509
+ */
510
+ getResourceProfiles() {
511
+ return Object.fromEntries(this.resourceProfiles);
512
+ }
513
+ /**
514
+ * Get the allowed namespaces for an agent (used by blackboard scoping).
515
+ */
516
+ getAgentNamespaces(agentId) {
517
+ if (!agentId || typeof agentId !== 'string')
518
+ return ['task:'];
519
+ const config = this.agentTrustConfigs.get(agentId);
520
+ return config?.allowedNamespaces ?? ['task:'];
521
+ }
522
+ // ---- Persistence helpers ----
523
+ /** Path for the resource profiles policy file. */
524
+ get resourceProfilesPath() {
525
+ return (0, path_1.join)('.', 'data', 'resource-profiles.json');
526
+ }
527
+ /**
528
+ * Load resource profiles from `data/resource-profiles.json` if it exists.
529
+ * Expected format: `{ "PROFILE_NAME": { baseRisk, defaultRestrictions, description? } }`
530
+ */
531
+ loadResourceProfilesFromDisk() {
532
+ try {
533
+ if ((0, fs_1.existsSync)(this.resourceProfilesPath)) {
534
+ const raw = (0, fs_1.readFileSync)(this.resourceProfilesPath, 'utf-8');
535
+ const parsed = JSON.parse(raw);
536
+ if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
537
+ return parsed;
538
+ }
539
+ }
540
+ }
541
+ catch { /* ignore — fall back to defaults */ }
542
+ return null;
543
+ }
544
+ /**
545
+ * Persist the current resource profiles to `data/resource-profiles.json`.
546
+ * Useful after calling registerResourceType() at runtime.
547
+ */
548
+ persistResourceProfiles() {
549
+ try {
550
+ const dir = (0, path_1.join)('.', 'data');
551
+ if (!(0, fs_1.existsSync)(dir)) {
552
+ (0, fs_1.mkdirSync)(dir, { recursive: true });
553
+ }
554
+ const profiles = {};
555
+ for (const [name, profile] of this.resourceProfiles) {
556
+ profiles[name] = profile;
557
+ }
558
+ (0, fs_1.writeFile)(this.resourceProfilesPath, JSON.stringify(profiles, null, 2), () => { });
559
+ }
560
+ catch {
561
+ // Non-fatal
562
+ }
563
+ }
564
+ loadTrustFromDisk() {
565
+ try {
566
+ if ((0, fs_1.existsSync)(this.trustConfigPath)) {
567
+ const raw = (0, fs_1.readFileSync)(this.trustConfigPath, 'utf-8');
568
+ return JSON.parse(raw);
569
+ }
570
+ }
571
+ catch { /* ignore */ }
572
+ return null;
573
+ }
574
+ persistTrustToDisk() {
575
+ try {
576
+ const dir = (0, path_1.join)('.', 'data');
577
+ if (!(0, fs_1.existsSync)(dir)) {
578
+ (0, fs_1.mkdirSync)(dir, { recursive: true });
579
+ }
580
+ const configs = Array.from(this.agentTrustConfigs.values());
581
+ (0, fs_1.writeFile)(this.trustConfigPath, JSON.stringify(configs, null, 2), () => { });
582
+ }
583
+ catch {
584
+ // Non-fatal
585
+ }
586
+ }
587
+ loadAuditFromDisk() {
588
+ try {
589
+ if ((0, fs_1.existsSync)(this.auditLogPath)) {
590
+ const raw = (0, fs_1.readFileSync)(this.auditLogPath, 'utf-8');
591
+ const lines = raw.trim().split('\n').filter(l => l);
592
+ for (const line of lines) {
593
+ try {
594
+ this.auditLog.push(JSON.parse(line));
595
+ }
596
+ catch { /* skip malformed */ }
597
+ }
598
+ }
599
+ }
600
+ catch { /* ignore */ }
601
+ }
602
+ }
603
+ exports.AuthGuardian = AuthGuardian;
604
+ //# sourceMappingURL=auth-guardian.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-guardian.js","sourceRoot":"","sources":["../../lib/auth-guardian.ts"],"names":[],"mappings":"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"}