network-ai 3.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 (92) hide show
  1. package/LICENSE +21 -0
  2. package/QUICKSTART.md +260 -0
  3. package/README.md +604 -0
  4. package/SKILL.md +568 -0
  5. package/dist/adapters/adapter-registry.d.ts +94 -0
  6. package/dist/adapters/adapter-registry.d.ts.map +1 -0
  7. package/dist/adapters/adapter-registry.js +355 -0
  8. package/dist/adapters/adapter-registry.js.map +1 -0
  9. package/dist/adapters/agno-adapter.d.ts +112 -0
  10. package/dist/adapters/agno-adapter.d.ts.map +1 -0
  11. package/dist/adapters/agno-adapter.js +140 -0
  12. package/dist/adapters/agno-adapter.js.map +1 -0
  13. package/dist/adapters/autogen-adapter.d.ts +67 -0
  14. package/dist/adapters/autogen-adapter.d.ts.map +1 -0
  15. package/dist/adapters/autogen-adapter.js +141 -0
  16. package/dist/adapters/autogen-adapter.js.map +1 -0
  17. package/dist/adapters/base-adapter.d.ts +51 -0
  18. package/dist/adapters/base-adapter.d.ts.map +1 -0
  19. package/dist/adapters/base-adapter.js +103 -0
  20. package/dist/adapters/base-adapter.js.map +1 -0
  21. package/dist/adapters/crewai-adapter.d.ts +72 -0
  22. package/dist/adapters/crewai-adapter.d.ts.map +1 -0
  23. package/dist/adapters/crewai-adapter.js +148 -0
  24. package/dist/adapters/crewai-adapter.js.map +1 -0
  25. package/dist/adapters/custom-adapter.d.ts +74 -0
  26. package/dist/adapters/custom-adapter.d.ts.map +1 -0
  27. package/dist/adapters/custom-adapter.js +142 -0
  28. package/dist/adapters/custom-adapter.js.map +1 -0
  29. package/dist/adapters/dspy-adapter.d.ts +70 -0
  30. package/dist/adapters/dspy-adapter.d.ts.map +1 -0
  31. package/dist/adapters/dspy-adapter.js +127 -0
  32. package/dist/adapters/dspy-adapter.js.map +1 -0
  33. package/dist/adapters/haystack-adapter.d.ts +83 -0
  34. package/dist/adapters/haystack-adapter.d.ts.map +1 -0
  35. package/dist/adapters/haystack-adapter.js +149 -0
  36. package/dist/adapters/haystack-adapter.js.map +1 -0
  37. package/dist/adapters/index.d.ts +47 -0
  38. package/dist/adapters/index.d.ts.map +1 -0
  39. package/dist/adapters/index.js +56 -0
  40. package/dist/adapters/index.js.map +1 -0
  41. package/dist/adapters/langchain-adapter.d.ts +51 -0
  42. package/dist/adapters/langchain-adapter.d.ts.map +1 -0
  43. package/dist/adapters/langchain-adapter.js +134 -0
  44. package/dist/adapters/langchain-adapter.js.map +1 -0
  45. package/dist/adapters/llamaindex-adapter.d.ts +89 -0
  46. package/dist/adapters/llamaindex-adapter.d.ts.map +1 -0
  47. package/dist/adapters/llamaindex-adapter.js +135 -0
  48. package/dist/adapters/llamaindex-adapter.js.map +1 -0
  49. package/dist/adapters/mcp-adapter.d.ts +90 -0
  50. package/dist/adapters/mcp-adapter.d.ts.map +1 -0
  51. package/dist/adapters/mcp-adapter.js +200 -0
  52. package/dist/adapters/mcp-adapter.js.map +1 -0
  53. package/dist/adapters/openai-assistants-adapter.d.ts +94 -0
  54. package/dist/adapters/openai-assistants-adapter.d.ts.map +1 -0
  55. package/dist/adapters/openai-assistants-adapter.js +130 -0
  56. package/dist/adapters/openai-assistants-adapter.js.map +1 -0
  57. package/dist/adapters/openclaw-adapter.d.ts +21 -0
  58. package/dist/adapters/openclaw-adapter.d.ts.map +1 -0
  59. package/dist/adapters/openclaw-adapter.js +140 -0
  60. package/dist/adapters/openclaw-adapter.js.map +1 -0
  61. package/dist/adapters/semantic-kernel-adapter.d.ts +73 -0
  62. package/dist/adapters/semantic-kernel-adapter.d.ts.map +1 -0
  63. package/dist/adapters/semantic-kernel-adapter.js +123 -0
  64. package/dist/adapters/semantic-kernel-adapter.js.map +1 -0
  65. package/dist/index.d.ts +379 -0
  66. package/dist/index.d.ts.map +1 -0
  67. package/dist/index.js +1428 -0
  68. package/dist/index.js.map +1 -0
  69. package/dist/lib/blackboard-validator.d.ts +205 -0
  70. package/dist/lib/blackboard-validator.d.ts.map +1 -0
  71. package/dist/lib/blackboard-validator.js +756 -0
  72. package/dist/lib/blackboard-validator.js.map +1 -0
  73. package/dist/lib/locked-blackboard.d.ts +174 -0
  74. package/dist/lib/locked-blackboard.d.ts.map +1 -0
  75. package/dist/lib/locked-blackboard.js +654 -0
  76. package/dist/lib/locked-blackboard.js.map +1 -0
  77. package/dist/lib/swarm-utils.d.ts +136 -0
  78. package/dist/lib/swarm-utils.d.ts.map +1 -0
  79. package/dist/lib/swarm-utils.js +510 -0
  80. package/dist/lib/swarm-utils.js.map +1 -0
  81. package/dist/security.d.ts +269 -0
  82. package/dist/security.d.ts.map +1 -0
  83. package/dist/security.js +713 -0
  84. package/dist/security.js.map +1 -0
  85. package/package.json +84 -0
  86. package/scripts/blackboard.py +819 -0
  87. package/scripts/check_permission.py +331 -0
  88. package/scripts/revoke_token.py +243 -0
  89. package/scripts/swarm_guard.py +1140 -0
  90. package/scripts/validate_token.py +97 -0
  91. package/types/agent-adapter.d.ts +244 -0
  92. package/types/openclaw-core.d.ts +52 -0
@@ -0,0 +1,136 @@
1
+ /**
2
+ * SwarmOrchestrator - Standalone TypeScript Utilities
3
+ *
4
+ * This module provides TypeScript/Node.js utilities for the Swarm Orchestrator skill.
5
+ * It can be used alongside the Python scripts or as an alternative implementation.
6
+ *
7
+ * NOTE: This is a standalone library - it does NOT import from 'openclaw-core'.
8
+ * OpenClaw integration happens through the SKILL.md instructions and Python scripts.
9
+ *
10
+ * @module SwarmOrchestrator
11
+ * @version 2.0.0
12
+ * @license MIT
13
+ */
14
+ export interface TaskPayload {
15
+ instruction: string;
16
+ context?: Record<string, unknown>;
17
+ constraints?: string[];
18
+ expectedOutput?: string;
19
+ }
20
+ export interface HandoffMessage {
21
+ handoffId: string;
22
+ sourceAgent: string;
23
+ targetAgent: string;
24
+ taskType: 'delegate' | 'collaborate' | 'validate';
25
+ payload: TaskPayload;
26
+ metadata: {
27
+ priority: number;
28
+ deadline: number;
29
+ parentTaskId: string | null;
30
+ };
31
+ }
32
+ export interface PermissionGrant {
33
+ granted: boolean;
34
+ token: string | null;
35
+ expiresAt: string | null;
36
+ restrictions: string[];
37
+ reason?: string;
38
+ scores?: {
39
+ justification: number;
40
+ trust: number | null;
41
+ risk: number | null;
42
+ weighted?: number;
43
+ };
44
+ }
45
+ export interface BlackboardEntry {
46
+ key: string;
47
+ value: unknown;
48
+ source_agent: string;
49
+ timestamp: string;
50
+ ttl: number | null;
51
+ }
52
+ export interface ActiveGrant {
53
+ token: string;
54
+ agent_id: string;
55
+ resource_type: string;
56
+ scope: string | null;
57
+ expires_at: string;
58
+ restrictions: string[];
59
+ granted_at: string;
60
+ }
61
+ export type ResourceType = 'SAP_API' | 'FINANCIAL_API' | 'EXTERNAL_SERVICE' | 'DATA_EXPORT';
62
+ declare const CONFIG: {
63
+ blackboardPath: string;
64
+ dataDir: string;
65
+ grantTokenTTLMinutes: number;
66
+ defaultTrustLevels: Record<string, number>;
67
+ baseRisks: Record<string, number>;
68
+ restrictions: Record<string, string[]>;
69
+ };
70
+ export declare class SharedBlackboard {
71
+ private path;
72
+ private cache;
73
+ constructor(basePath?: string);
74
+ private initialize;
75
+ private loadFromDisk;
76
+ private persistToDisk;
77
+ private isExpired;
78
+ read(key: string): BlackboardEntry | null;
79
+ write(key: string, value: unknown, sourceAgent: string, ttl?: number): BlackboardEntry;
80
+ delete(key: string): boolean;
81
+ exists(key: string): boolean;
82
+ listKeys(): string[];
83
+ getSnapshot(): Record<string, BlackboardEntry>;
84
+ }
85
+ export declare class AuthGuardian {
86
+ private basePath;
87
+ private grantsFile;
88
+ private auditLog;
89
+ constructor(basePath?: string);
90
+ private loadGrants;
91
+ private saveGrants;
92
+ private logAudit;
93
+ private scoreJustification;
94
+ private assessRisk;
95
+ private generateToken;
96
+ requestPermission(agentId: string, resourceType: ResourceType, justification: string, scope?: string): PermissionGrant;
97
+ validateToken(token: string): {
98
+ valid: boolean;
99
+ grant?: ActiveGrant;
100
+ reason?: string;
101
+ };
102
+ revokeToken(token: string): boolean;
103
+ getActiveGrants(): ActiveGrant[];
104
+ }
105
+ export declare class DataEncryptor {
106
+ private key;
107
+ private algorithm;
108
+ constructor(secretKey: string);
109
+ encrypt(data: string): string;
110
+ decrypt(encryptedData: string): string | null;
111
+ encryptObject(obj: unknown): string;
112
+ decryptObject<T>(encryptedData: string): T | null;
113
+ }
114
+ export declare class HandoffBuilder {
115
+ /**
116
+ * Create a handoff message for task delegation
117
+ */
118
+ static createHandoff(sourceAgent: string, targetAgent: string, payload: TaskPayload, options?: {
119
+ taskType?: 'delegate' | 'collaborate' | 'validate';
120
+ priority?: number;
121
+ timeoutMs?: number;
122
+ parentTaskId?: string;
123
+ }): HandoffMessage;
124
+ /**
125
+ * Format handoff message for sessions_send
126
+ */
127
+ static formatForSessionSend(handoff: HandoffMessage): string;
128
+ /**
129
+ * Parse handoff message from text
130
+ */
131
+ static parseHandoff(text: string): Partial<TaskPayload> | null;
132
+ }
133
+ export { CONFIG };
134
+ export declare function getBlackboard(basePath?: string): SharedBlackboard;
135
+ export declare function getAuthGuardian(basePath?: string): AuthGuardian;
136
+ //# sourceMappingURL=swarm-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swarm-utils.d.ts","sourceRoot":"","sources":["../../lib/swarm-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,510 @@
1
+ "use strict";
2
+ /**
3
+ * SwarmOrchestrator - Standalone TypeScript Utilities
4
+ *
5
+ * This module provides TypeScript/Node.js utilities for the Swarm Orchestrator skill.
6
+ * It can be used alongside the Python scripts or as an alternative implementation.
7
+ *
8
+ * NOTE: This is a standalone library - it does NOT import from 'openclaw-core'.
9
+ * OpenClaw integration happens through the SKILL.md instructions and Python scripts.
10
+ *
11
+ * @module SwarmOrchestrator
12
+ * @version 2.0.0
13
+ * @license MIT
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.CONFIG = exports.HandoffBuilder = exports.DataEncryptor = exports.AuthGuardian = exports.SharedBlackboard = void 0;
17
+ exports.getBlackboard = getBlackboard;
18
+ exports.getAuthGuardian = getAuthGuardian;
19
+ const fs_1 = require("fs");
20
+ const path_1 = require("path");
21
+ const crypto_1 = require("crypto");
22
+ // ============================================================================
23
+ // CONFIGURATION
24
+ // ============================================================================
25
+ const CONFIG = {
26
+ blackboardPath: './swarm-blackboard.md',
27
+ dataDir: './data',
28
+ grantTokenTTLMinutes: 5,
29
+ defaultTrustLevels: {
30
+ orchestrator: 0.9,
31
+ risk_assessor: 0.85,
32
+ data_analyst: 0.8,
33
+ strategy_advisor: 0.7,
34
+ },
35
+ baseRisks: {
36
+ SAP_API: 0.5,
37
+ FINANCIAL_API: 0.7,
38
+ EXTERNAL_SERVICE: 0.4,
39
+ DATA_EXPORT: 0.6,
40
+ },
41
+ restrictions: {
42
+ SAP_API: ['read_only', 'max_records:100'],
43
+ FINANCIAL_API: ['read_only', 'no_pii_fields', 'audit_required'],
44
+ EXTERNAL_SERVICE: ['rate_limit:10_per_minute'],
45
+ DATA_EXPORT: ['anonymize_pii', 'local_only'],
46
+ },
47
+ };
48
+ exports.CONFIG = CONFIG;
49
+ // ============================================================================
50
+ // UTILITY FUNCTIONS
51
+ // ============================================================================
52
+ function ensureDataDir(basePath = '.') {
53
+ const dataDir = (0, path_1.join)(basePath, 'data');
54
+ if (!(0, fs_1.existsSync)(dataDir)) {
55
+ (0, fs_1.mkdirSync)(dataDir, { recursive: true });
56
+ }
57
+ return dataDir;
58
+ }
59
+ function ensureDir(filePath) {
60
+ const dir = (0, path_1.dirname)(filePath);
61
+ if (!(0, fs_1.existsSync)(dir)) {
62
+ (0, fs_1.mkdirSync)(dir, { recursive: true });
63
+ }
64
+ }
65
+ // ============================================================================
66
+ // SHARED BLACKBOARD
67
+ // ============================================================================
68
+ class SharedBlackboard {
69
+ path;
70
+ cache = new Map();
71
+ constructor(basePath = '.') {
72
+ this.path = (0, path_1.join)(basePath, 'swarm-blackboard.md');
73
+ this.initialize();
74
+ }
75
+ initialize() {
76
+ ensureDir(this.path);
77
+ if (!(0, fs_1.existsSync)(this.path)) {
78
+ const initialContent = `# Swarm Blackboard
79
+ Last Updated: ${new Date().toISOString()}
80
+
81
+ ## Active Tasks
82
+ | TaskID | Agent | Status | Started | Description |
83
+ |--------|-------|--------|---------|-------------|
84
+
85
+ ## Knowledge Cache
86
+ <!-- Cached results from agent operations -->
87
+
88
+ ## Coordination Signals
89
+ <!-- Agent availability status -->
90
+
91
+ ## Execution History
92
+ <!-- Chronological log of completed tasks -->
93
+ `;
94
+ (0, fs_1.writeFileSync)(this.path, initialContent, 'utf-8');
95
+ }
96
+ this.loadFromDisk();
97
+ }
98
+ loadFromDisk() {
99
+ try {
100
+ const content = (0, fs_1.readFileSync)(this.path, 'utf-8');
101
+ const cacheSection = content.match(/## Knowledge Cache\n([\s\S]*?)(?=\n## |$)/);
102
+ if (cacheSection) {
103
+ const entries = cacheSection[1].matchAll(/### (\S+)\n([\s\S]*?)(?=\n### |$)/g);
104
+ for (const entry of entries) {
105
+ const key = entry[1];
106
+ try {
107
+ const metadata = JSON.parse(entry[2].trim());
108
+ this.cache.set(key, metadata);
109
+ }
110
+ catch {
111
+ // Skip malformed entries
112
+ }
113
+ }
114
+ }
115
+ }
116
+ catch (error) {
117
+ console.error('[Blackboard] Failed to load from disk:', error);
118
+ }
119
+ }
120
+ persistToDisk() {
121
+ const sections = [
122
+ `# Swarm Blackboard`,
123
+ `Last Updated: ${new Date().toISOString()}`,
124
+ ``,
125
+ `## Active Tasks`,
126
+ `| TaskID | Agent | Status | Started | Description |`,
127
+ `|--------|-------|--------|---------|-------------|`,
128
+ ``,
129
+ `## Knowledge Cache`,
130
+ ];
131
+ for (const [key, entry] of this.cache.entries()) {
132
+ if (this.isExpired(entry)) {
133
+ this.cache.delete(key);
134
+ continue;
135
+ }
136
+ sections.push(`### ${key}`);
137
+ sections.push(JSON.stringify(entry, null, 2));
138
+ sections.push('');
139
+ }
140
+ sections.push(`## Coordination Signals`);
141
+ sections.push(`## Execution History`);
142
+ (0, fs_1.writeFileSync)(this.path, sections.join('\n'), 'utf-8');
143
+ }
144
+ isExpired(entry) {
145
+ if (!entry.ttl)
146
+ return false;
147
+ const expiresAt = new Date(entry.timestamp).getTime() + entry.ttl * 1000;
148
+ return Date.now() > expiresAt;
149
+ }
150
+ read(key) {
151
+ const entry = this.cache.get(key);
152
+ if (!entry)
153
+ return null;
154
+ if (this.isExpired(entry)) {
155
+ this.cache.delete(key);
156
+ this.persistToDisk();
157
+ return null;
158
+ }
159
+ return entry;
160
+ }
161
+ write(key, value, sourceAgent, ttl) {
162
+ const entry = {
163
+ key,
164
+ value,
165
+ source_agent: sourceAgent,
166
+ timestamp: new Date().toISOString(),
167
+ ttl: ttl ?? null,
168
+ };
169
+ this.cache.set(key, entry);
170
+ this.persistToDisk();
171
+ return entry;
172
+ }
173
+ delete(key) {
174
+ if (this.cache.has(key)) {
175
+ this.cache.delete(key);
176
+ this.persistToDisk();
177
+ return true;
178
+ }
179
+ return false;
180
+ }
181
+ exists(key) {
182
+ return this.read(key) !== null;
183
+ }
184
+ listKeys() {
185
+ const validKeys = [];
186
+ for (const key of this.cache.keys()) {
187
+ if (this.read(key) !== null) {
188
+ validKeys.push(key);
189
+ }
190
+ }
191
+ return validKeys;
192
+ }
193
+ getSnapshot() {
194
+ const snapshot = {};
195
+ for (const key of this.cache.keys()) {
196
+ const entry = this.read(key);
197
+ if (entry) {
198
+ snapshot[key] = entry;
199
+ }
200
+ }
201
+ return snapshot;
202
+ }
203
+ }
204
+ exports.SharedBlackboard = SharedBlackboard;
205
+ // ============================================================================
206
+ // AUTH GUARDIAN
207
+ // ============================================================================
208
+ class AuthGuardian {
209
+ basePath;
210
+ grantsFile;
211
+ auditLog;
212
+ constructor(basePath = '.') {
213
+ this.basePath = basePath;
214
+ const dataDir = ensureDataDir(basePath);
215
+ this.grantsFile = (0, path_1.join)(dataDir, 'active_grants.json');
216
+ this.auditLog = (0, path_1.join)(dataDir, 'audit_log.jsonl');
217
+ }
218
+ loadGrants() {
219
+ if (!(0, fs_1.existsSync)(this.grantsFile)) {
220
+ return {};
221
+ }
222
+ try {
223
+ return JSON.parse((0, fs_1.readFileSync)(this.grantsFile, 'utf-8'));
224
+ }
225
+ catch {
226
+ return {};
227
+ }
228
+ }
229
+ saveGrants(grants) {
230
+ ensureDir(this.grantsFile);
231
+ (0, fs_1.writeFileSync)(this.grantsFile, JSON.stringify(grants, null, 2), 'utf-8');
232
+ }
233
+ logAudit(action, details) {
234
+ ensureDir(this.auditLog);
235
+ const entry = {
236
+ timestamp: new Date().toISOString(),
237
+ action,
238
+ details,
239
+ };
240
+ const line = JSON.stringify(entry) + '\n';
241
+ try {
242
+ const existing = (0, fs_1.existsSync)(this.auditLog) ? (0, fs_1.readFileSync)(this.auditLog, 'utf-8') : '';
243
+ (0, fs_1.writeFileSync)(this.auditLog, existing + line, 'utf-8');
244
+ }
245
+ catch {
246
+ (0, fs_1.writeFileSync)(this.auditLog, line, 'utf-8');
247
+ }
248
+ }
249
+ scoreJustification(justification) {
250
+ let score = 0;
251
+ if (justification.length > 20)
252
+ score += 0.2;
253
+ if (justification.length > 50)
254
+ score += 0.2;
255
+ if (/task|purpose|need|require|generate|analyze|create|process/i.test(justification))
256
+ score += 0.2;
257
+ if (/specific|particular|exact|quarterly|annual|report|summary/i.test(justification))
258
+ score += 0.2;
259
+ if (!/test|debug|try|experiment/i.test(justification))
260
+ score += 0.2;
261
+ return Math.min(score, 1);
262
+ }
263
+ assessRisk(resourceType, scope) {
264
+ let risk = CONFIG.baseRisks[resourceType] ?? 0.5;
265
+ if (!scope || scope === '*' || scope === 'all')
266
+ risk += 0.2;
267
+ if (scope && /write|delete|update|modify|create/i.test(scope))
268
+ risk += 0.2;
269
+ return Math.min(risk, 1);
270
+ }
271
+ generateToken() {
272
+ return `grant_${(0, crypto_1.randomUUID)().replace(/-/g, '')}`;
273
+ }
274
+ requestPermission(agentId, resourceType, justification, scope) {
275
+ this.logAudit('permission_request', { agentId, resourceType, justification, scope });
276
+ // 1. Justification Quality (40%)
277
+ const justificationScore = this.scoreJustification(justification);
278
+ if (justificationScore < 0.3) {
279
+ return {
280
+ granted: false,
281
+ token: null,
282
+ expiresAt: null,
283
+ restrictions: [],
284
+ reason: 'Justification is insufficient. Please provide specific task context.',
285
+ scores: { justification: justificationScore, trust: null, risk: null },
286
+ };
287
+ }
288
+ // 2. Agent Trust Level (30%)
289
+ const trustLevel = CONFIG.defaultTrustLevels[agentId] ?? 0.5;
290
+ if (trustLevel < 0.4) {
291
+ return {
292
+ granted: false,
293
+ token: null,
294
+ expiresAt: null,
295
+ restrictions: [],
296
+ reason: 'Agent trust level is below threshold. Escalate to human operator.',
297
+ scores: { justification: justificationScore, trust: trustLevel, risk: null },
298
+ };
299
+ }
300
+ // 3. Risk Assessment (30%)
301
+ const riskScore = this.assessRisk(resourceType, scope);
302
+ if (riskScore > 0.8) {
303
+ return {
304
+ granted: false,
305
+ token: null,
306
+ expiresAt: null,
307
+ restrictions: [],
308
+ reason: 'Risk assessment exceeds acceptable threshold. Narrow the requested scope.',
309
+ scores: { justification: justificationScore, trust: trustLevel, risk: riskScore },
310
+ };
311
+ }
312
+ // Calculate weighted score
313
+ const weightedScore = (justificationScore * 0.4) + (trustLevel * 0.3) + ((1 - riskScore) * 0.3);
314
+ if (weightedScore < 0.5) {
315
+ return {
316
+ granted: false,
317
+ token: null,
318
+ expiresAt: null,
319
+ restrictions: [],
320
+ reason: `Combined evaluation score (${weightedScore.toFixed(2)}) below threshold (0.5).`,
321
+ scores: { justification: justificationScore, trust: trustLevel, risk: riskScore, weighted: weightedScore },
322
+ };
323
+ }
324
+ // Generate grant
325
+ const token = this.generateToken();
326
+ const expiresAt = new Date(Date.now() + CONFIG.grantTokenTTLMinutes * 60 * 1000).toISOString();
327
+ const restrictions = CONFIG.restrictions[resourceType] ?? [];
328
+ const grant = {
329
+ token,
330
+ agent_id: agentId,
331
+ resource_type: resourceType,
332
+ scope: scope ?? null,
333
+ expires_at: expiresAt,
334
+ restrictions,
335
+ granted_at: new Date().toISOString(),
336
+ };
337
+ const grants = this.loadGrants();
338
+ grants[token] = grant;
339
+ this.saveGrants(grants);
340
+ this.logAudit('permission_granted', grant);
341
+ return {
342
+ granted: true,
343
+ token,
344
+ expiresAt,
345
+ restrictions,
346
+ scores: { justification: justificationScore, trust: trustLevel, risk: riskScore, weighted: weightedScore },
347
+ };
348
+ }
349
+ validateToken(token) {
350
+ const grants = this.loadGrants();
351
+ const grant = grants[token];
352
+ if (!grant) {
353
+ return { valid: false, reason: 'Token not found' };
354
+ }
355
+ if (new Date(grant.expires_at) < new Date()) {
356
+ return { valid: false, reason: 'Token has expired', grant };
357
+ }
358
+ return { valid: true, grant };
359
+ }
360
+ revokeToken(token) {
361
+ const grants = this.loadGrants();
362
+ if (token in grants) {
363
+ const grant = grants[token];
364
+ delete grants[token];
365
+ this.saveGrants(grants);
366
+ this.logAudit('permission_revoked', { token, original_grant: grant });
367
+ return true;
368
+ }
369
+ return false;
370
+ }
371
+ getActiveGrants() {
372
+ const grants = this.loadGrants();
373
+ const now = new Date();
374
+ const active = [];
375
+ for (const [token, grant] of Object.entries(grants)) {
376
+ if (new Date(grant.expires_at) > now) {
377
+ active.push(grant);
378
+ }
379
+ else {
380
+ delete grants[token];
381
+ }
382
+ }
383
+ this.saveGrants(grants);
384
+ return active;
385
+ }
386
+ }
387
+ exports.AuthGuardian = AuthGuardian;
388
+ // ============================================================================
389
+ // SECURE DATA ENCRYPTOR
390
+ // ============================================================================
391
+ class DataEncryptor {
392
+ key;
393
+ algorithm = 'aes-256-gcm';
394
+ constructor(secretKey) {
395
+ // Derive 32-byte key from secret
396
+ this.key = (0, crypto_1.createHmac)('sha256', secretKey).update('encryption-key').digest();
397
+ }
398
+ encrypt(data) {
399
+ const iv = (0, crypto_1.randomBytes)(16);
400
+ const cipher = (0, crypto_1.createCipheriv)(this.algorithm, this.key, iv);
401
+ let encrypted = cipher.update(data, 'utf8', 'hex');
402
+ encrypted += cipher.final('hex');
403
+ const authTag = cipher.getAuthTag();
404
+ return `${iv.toString('hex')}:${authTag.toString('hex')}:${encrypted}`;
405
+ }
406
+ decrypt(encryptedData) {
407
+ try {
408
+ const [ivHex, authTagHex, encrypted] = encryptedData.split(':');
409
+ const iv = Buffer.from(ivHex, 'hex');
410
+ const authTag = Buffer.from(authTagHex, 'hex');
411
+ const decipher = (0, crypto_1.createDecipheriv)(this.algorithm, this.key, iv);
412
+ decipher.setAuthTag(authTag);
413
+ let decrypted = decipher.update(encrypted, 'hex', 'utf8');
414
+ decrypted += decipher.final('utf8');
415
+ return decrypted;
416
+ }
417
+ catch {
418
+ return null;
419
+ }
420
+ }
421
+ encryptObject(obj) {
422
+ return this.encrypt(JSON.stringify(obj));
423
+ }
424
+ decryptObject(encryptedData) {
425
+ const decrypted = this.decrypt(encryptedData);
426
+ if (!decrypted)
427
+ return null;
428
+ try {
429
+ return JSON.parse(decrypted);
430
+ }
431
+ catch {
432
+ return null;
433
+ }
434
+ }
435
+ }
436
+ exports.DataEncryptor = DataEncryptor;
437
+ // ============================================================================
438
+ // HANDOFF MESSAGE BUILDER
439
+ // ============================================================================
440
+ class HandoffBuilder {
441
+ /**
442
+ * Create a handoff message for task delegation
443
+ */
444
+ static createHandoff(sourceAgent, targetAgent, payload, options = {}) {
445
+ const { taskType = 'delegate', priority = 1, timeoutMs = 30000, parentTaskId = null, } = options;
446
+ return {
447
+ handoffId: (0, crypto_1.randomUUID)(),
448
+ sourceAgent,
449
+ targetAgent,
450
+ taskType,
451
+ payload,
452
+ metadata: {
453
+ priority,
454
+ deadline: Date.now() + timeoutMs,
455
+ parentTaskId,
456
+ },
457
+ };
458
+ }
459
+ /**
460
+ * Format handoff message for sessions_send
461
+ */
462
+ static formatForSessionSend(handoff) {
463
+ return `[HANDOFF]
464
+ Instruction: ${handoff.payload.instruction}
465
+ Context: ${handoff.payload.context ? JSON.stringify(handoff.payload.context) : 'N/A'}
466
+ Constraints: ${handoff.payload.constraints?.join(', ') || 'None'}
467
+ Expected Output: ${handoff.payload.expectedOutput || 'Any appropriate response'}
468
+ [/HANDOFF]
469
+
470
+ Handoff ID: ${handoff.handoffId}
471
+ From: ${handoff.sourceAgent}
472
+ Priority: ${handoff.metadata.priority}`;
473
+ }
474
+ /**
475
+ * Parse handoff message from text
476
+ */
477
+ static parseHandoff(text) {
478
+ const match = text.match(/\[HANDOFF\]([\s\S]*?)\[\/HANDOFF\]/);
479
+ if (!match)
480
+ return null;
481
+ const content = match[1];
482
+ const instruction = content.match(/Instruction:\s*(.+)/)?.[1]?.trim();
483
+ const contextStr = content.match(/Context:\s*(.+)/)?.[1]?.trim();
484
+ const constraintsStr = content.match(/Constraints:\s*(.+)/)?.[1]?.trim();
485
+ const expectedOutput = content.match(/Expected Output:\s*(.+)/)?.[1]?.trim();
486
+ return {
487
+ instruction: instruction || '',
488
+ context: contextStr && contextStr !== 'N/A' ? JSON.parse(contextStr) : undefined,
489
+ constraints: constraintsStr && constraintsStr !== 'None' ? constraintsStr.split(', ') : undefined,
490
+ expectedOutput: expectedOutput && expectedOutput !== 'Any appropriate response' ? expectedOutput : undefined,
491
+ };
492
+ }
493
+ }
494
+ exports.HandoffBuilder = HandoffBuilder;
495
+ // Default instances for convenience
496
+ let defaultBlackboard = null;
497
+ let defaultAuthGuardian = null;
498
+ function getBlackboard(basePath) {
499
+ if (!defaultBlackboard || basePath) {
500
+ defaultBlackboard = new SharedBlackboard(basePath);
501
+ }
502
+ return defaultBlackboard;
503
+ }
504
+ function getAuthGuardian(basePath) {
505
+ if (!defaultAuthGuardian || basePath) {
506
+ defaultAuthGuardian = new AuthGuardian(basePath);
507
+ }
508
+ return defaultAuthGuardian;
509
+ }
510
+ //# sourceMappingURL=swarm-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swarm-utils.js","sourceRoot":"","sources":["../../lib/swarm-utils.ts"],"names":[],"mappings":"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"}