network-ai 5.4.4 → 5.5.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.
- package/INTEGRATION_GUIDE.md +2 -2
- package/README.md +4 -3
- package/bin/mcp-server.ts +8 -7
- package/dist/bin/mcp-server.js +7 -6
- package/dist/bin/mcp-server.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -4
- package/dist/index.js.map +1 -1
- package/dist/lib/landscape-agent.d.ts +88 -0
- package/dist/lib/landscape-agent.d.ts.map +1 -0
- package/dist/lib/landscape-agent.js +134 -0
- package/dist/lib/landscape-agent.js.map +1 -0
- package/dist/lib/mcp-blackboard-tools.js +5 -5
- package/dist/lib/mcp-blackboard-tools.js.map +1 -1
- package/dist/lib/mcp-tools-control.js +4 -4
- package/dist/lib/mcp-tools-control.js.map +1 -1
- package/dist/lib/mcp-tools-extended.js +10 -10
- package/dist/lib/mcp-tools-extended.js.map +1 -1
- package/dist/lib/mcp-transport-sse.d.ts.map +1 -1
- package/dist/lib/mcp-transport-sse.js +8 -12
- package/dist/lib/mcp-transport-sse.js.map +1 -1
- package/dist/lib/orchestrator-types.d.ts.map +1 -1
- package/dist/lib/orchestrator-types.js +5 -0
- package/dist/lib/orchestrator-types.js.map +1 -1
- package/dist/lib/strategy-agent.d.ts +15 -0
- package/dist/lib/strategy-agent.d.ts.map +1 -1
- package/dist/lib/strategy-agent.js +26 -1
- package/dist/lib/strategy-agent.js.map +1 -1
- package/dist/lib/transport-agent.d.ts +159 -0
- package/dist/lib/transport-agent.d.ts.map +1 -0
- package/dist/lib/transport-agent.js +365 -0
- package/dist/lib/transport-agent.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,365 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* TransportAgent — SAP Basis-inspired configuration transport layer
|
|
4
|
+
*
|
|
5
|
+
* Manages the safe promotion of configuration artefacts between deployment
|
|
6
|
+
* environments. Enforces the AuthGuardian permission wall, drains in-flight
|
|
7
|
+
* agent pools before promoting, runs an optional canary window, and rolls
|
|
8
|
+
* back on a violation spike.
|
|
9
|
+
*
|
|
10
|
+
* State machine:
|
|
11
|
+
* pending → draining → promoting → canary → complete
|
|
12
|
+
* ↘ rolled_back
|
|
13
|
+
* ↘ failed (auth denied / prerequisite missing / lock conflict)
|
|
14
|
+
*
|
|
15
|
+
* Blackboard keys (written by TransportAgent only):
|
|
16
|
+
* transport:request:<trId> — original request (written once by submitRequest)
|
|
17
|
+
* transport:status:<trId> — mutable status record (updated each state change)
|
|
18
|
+
* transport:lock:<toEnv> — advisory lock preventing concurrent promotions
|
|
19
|
+
*
|
|
20
|
+
* @module TransportAgent
|
|
21
|
+
* @version 1.0.0
|
|
22
|
+
*/
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.TransportAgent = void 0;
|
|
25
|
+
const fs_1 = require("fs");
|
|
26
|
+
const path_1 = require("path");
|
|
27
|
+
const crypto_1 = require("crypto");
|
|
28
|
+
// ============================================================================
|
|
29
|
+
// HELPERS
|
|
30
|
+
// ============================================================================
|
|
31
|
+
function sleep(ms) {
|
|
32
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
33
|
+
}
|
|
34
|
+
// ============================================================================
|
|
35
|
+
// TRANSPORT AGENT
|
|
36
|
+
// ============================================================================
|
|
37
|
+
/**
|
|
38
|
+
* SAP Basis-inspired transport agent for environment promotion.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* const agent = new TransportAgent({ blackboard, envManager, authGuardian, pools });
|
|
43
|
+
* agent.start();
|
|
44
|
+
*
|
|
45
|
+
* // From any agent — submit a transport request:
|
|
46
|
+
* const trId = TransportAgent.submitRequest(blackboard, {
|
|
47
|
+
* fromEnv: 'dev', toEnv: 'st', reason: 'Sprint 42 config', operator: 'dev-lead',
|
|
48
|
+
* });
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
class TransportAgent {
|
|
52
|
+
_blackboard;
|
|
53
|
+
_envManager;
|
|
54
|
+
_authGuardian;
|
|
55
|
+
_pools;
|
|
56
|
+
_complianceMonitor;
|
|
57
|
+
_agentId;
|
|
58
|
+
_pollIntervalMs;
|
|
59
|
+
_drainTimeoutMs;
|
|
60
|
+
_auditLogPath;
|
|
61
|
+
_pollHandle = null;
|
|
62
|
+
_running = false;
|
|
63
|
+
_processing = false;
|
|
64
|
+
constructor(options) {
|
|
65
|
+
this._blackboard = options.blackboard;
|
|
66
|
+
this._envManager = options.envManager;
|
|
67
|
+
this._authGuardian = options.authGuardian;
|
|
68
|
+
this._pools = options.pools ?? [];
|
|
69
|
+
this._complianceMonitor = options.complianceMonitor;
|
|
70
|
+
this._agentId = options.agentId ?? 'basis:transport';
|
|
71
|
+
this._pollIntervalMs = options.pollIntervalMs ?? 5_000;
|
|
72
|
+
this._drainTimeoutMs = options.drainTimeoutMs ?? 60_000;
|
|
73
|
+
this._auditLogPath = options.auditLogPath ?? (0, path_1.join)(process.cwd(), 'data', 'audit_log.jsonl');
|
|
74
|
+
}
|
|
75
|
+
// --------------------------------------------------------------------------
|
|
76
|
+
// Public lifecycle
|
|
77
|
+
// --------------------------------------------------------------------------
|
|
78
|
+
/**
|
|
79
|
+
* Start the transport agent's poll loop.
|
|
80
|
+
* Processes pending transport requests at `pollIntervalMs` intervals.
|
|
81
|
+
*/
|
|
82
|
+
start() {
|
|
83
|
+
if (this._running)
|
|
84
|
+
return;
|
|
85
|
+
this._running = true;
|
|
86
|
+
this._pollHandle = setInterval(() => {
|
|
87
|
+
void this._pollOnce();
|
|
88
|
+
}, this._pollIntervalMs);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Stop the poll loop.
|
|
92
|
+
* In-flight transports already in progress will run to completion.
|
|
93
|
+
*/
|
|
94
|
+
stop() {
|
|
95
|
+
this._running = false;
|
|
96
|
+
if (this._pollHandle) {
|
|
97
|
+
clearInterval(this._pollHandle);
|
|
98
|
+
this._pollHandle = null;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/** Whether the agent is currently running. */
|
|
102
|
+
get isRunning() { return this._running; }
|
|
103
|
+
/**
|
|
104
|
+
* Manually execute a single transport request by ID (one-shot).
|
|
105
|
+
* Useful for testing and CLI invocation.
|
|
106
|
+
*
|
|
107
|
+
* @param trId - Transport request ID as returned by {@link TransportAgent.submitRequest}.
|
|
108
|
+
* @throws if the TR does not exist on the blackboard.
|
|
109
|
+
*/
|
|
110
|
+
async execute(trId) {
|
|
111
|
+
const entry = this._blackboard.read(`transport:request:${trId}`);
|
|
112
|
+
if (!entry) {
|
|
113
|
+
throw new Error(`Transport request '${trId}' not found on blackboard`);
|
|
114
|
+
}
|
|
115
|
+
return this._runTransport(trId, entry.value);
|
|
116
|
+
}
|
|
117
|
+
// --------------------------------------------------------------------------
|
|
118
|
+
// Static helpers
|
|
119
|
+
// --------------------------------------------------------------------------
|
|
120
|
+
/**
|
|
121
|
+
* Submit a new transport request to the blackboard.
|
|
122
|
+
* Any agent may call this; only {@link TransportAgent} will execute it.
|
|
123
|
+
*
|
|
124
|
+
* @returns The generated transport request ID (`trId`).
|
|
125
|
+
*/
|
|
126
|
+
static submitRequest(blackboard, request) {
|
|
127
|
+
if (!request.fromEnv || !request.toEnv) {
|
|
128
|
+
throw new Error('TransportRequest must have fromEnv and toEnv');
|
|
129
|
+
}
|
|
130
|
+
if (!request.reason) {
|
|
131
|
+
throw new Error('TransportRequest must have a reason');
|
|
132
|
+
}
|
|
133
|
+
const trId = `tr-${(0, crypto_1.randomUUID)()}`;
|
|
134
|
+
blackboard.write(`transport:request:${trId}`, request, 'basis:transport');
|
|
135
|
+
const status = {
|
|
136
|
+
trId,
|
|
137
|
+
status: 'pending',
|
|
138
|
+
fromEnv: request.fromEnv,
|
|
139
|
+
toEnv: request.toEnv,
|
|
140
|
+
reason: request.reason,
|
|
141
|
+
operator: request.operator,
|
|
142
|
+
submittedAt: new Date().toISOString(),
|
|
143
|
+
};
|
|
144
|
+
blackboard.write(`transport:status:${trId}`, status, 'basis:transport');
|
|
145
|
+
return trId;
|
|
146
|
+
}
|
|
147
|
+
// --------------------------------------------------------------------------
|
|
148
|
+
// Internal poll loop
|
|
149
|
+
// --------------------------------------------------------------------------
|
|
150
|
+
async _pollOnce() {
|
|
151
|
+
if (this._processing)
|
|
152
|
+
return;
|
|
153
|
+
this._processing = true;
|
|
154
|
+
try {
|
|
155
|
+
const keys = this._blackboard.listKeys().filter(k => k.startsWith('transport:request:'));
|
|
156
|
+
for (const key of keys) {
|
|
157
|
+
const trId = key.replace('transport:request:', '');
|
|
158
|
+
const statusEntry = this._blackboard.read(`transport:status:${trId}`);
|
|
159
|
+
if (!statusEntry)
|
|
160
|
+
continue;
|
|
161
|
+
if (statusEntry.value.status !== 'pending')
|
|
162
|
+
continue;
|
|
163
|
+
const requestEntry = this._blackboard.read(key);
|
|
164
|
+
if (!requestEntry)
|
|
165
|
+
continue;
|
|
166
|
+
await this._runTransport(trId, requestEntry.value);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
finally {
|
|
170
|
+
this._processing = false;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// --------------------------------------------------------------------------
|
|
174
|
+
// Transport lifecycle
|
|
175
|
+
// --------------------------------------------------------------------------
|
|
176
|
+
async _runTransport(trId, request) {
|
|
177
|
+
const now = () => new Date().toISOString();
|
|
178
|
+
const updateStatus = (patch) => {
|
|
179
|
+
const existing = this._blackboard.read(`transport:status:${trId}`)?.value;
|
|
180
|
+
const updated = {
|
|
181
|
+
...(existing ?? {
|
|
182
|
+
trId,
|
|
183
|
+
status: 'pending',
|
|
184
|
+
fromEnv: request.fromEnv,
|
|
185
|
+
toEnv: request.toEnv,
|
|
186
|
+
reason: request.reason,
|
|
187
|
+
operator: request.operator,
|
|
188
|
+
submittedAt: now(),
|
|
189
|
+
}),
|
|
190
|
+
...patch,
|
|
191
|
+
};
|
|
192
|
+
this._blackboard.write(`transport:status:${trId}`, updated, this._agentId);
|
|
193
|
+
return updated;
|
|
194
|
+
};
|
|
195
|
+
let status = updateStatus({ startedAt: now() });
|
|
196
|
+
// ------------------------------------------------------------------
|
|
197
|
+
// 1. Prerequisite check
|
|
198
|
+
// ------------------------------------------------------------------
|
|
199
|
+
for (const prereqId of (request.prerequisites ?? [])) {
|
|
200
|
+
const prereqEntry = this._blackboard.read(`transport:status:${prereqId}`);
|
|
201
|
+
if (!prereqEntry) {
|
|
202
|
+
status = updateStatus({ status: 'failed', error: `Prerequisite TR '${prereqId}' not found`, completedAt: now() });
|
|
203
|
+
this._writeAudit('transport:prereq_failed', { trId, prereqId });
|
|
204
|
+
return status;
|
|
205
|
+
}
|
|
206
|
+
const prereqState = prereqEntry.value.status;
|
|
207
|
+
if (prereqState !== 'complete') {
|
|
208
|
+
status = updateStatus({ status: 'failed', error: `Prerequisite TR '${prereqId}' is in state '${prereqState}' (expected 'complete')`, completedAt: now() });
|
|
209
|
+
this._writeAudit('transport:prereq_failed', { trId, prereqId, prereqState });
|
|
210
|
+
return status;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
// ------------------------------------------------------------------
|
|
214
|
+
// 2. Advisory lock — prevent concurrent promotions to the same env
|
|
215
|
+
// ------------------------------------------------------------------
|
|
216
|
+
const lockKey = `transport:lock:${request.toEnv}`;
|
|
217
|
+
const existingLock = this._blackboard.read(lockKey);
|
|
218
|
+
if (existingLock) {
|
|
219
|
+
const lockData = existingLock.value;
|
|
220
|
+
status = updateStatus({ status: 'failed', error: `Environment '${request.toEnv}' is locked by TR '${lockData.trId}'`, completedAt: now() });
|
|
221
|
+
this._writeAudit('transport:lock_conflict', { trId, lockedBy: lockData.trId, toEnv: request.toEnv });
|
|
222
|
+
return status;
|
|
223
|
+
}
|
|
224
|
+
this._blackboard.write(lockKey, { trId, lockedAt: now() }, this._agentId);
|
|
225
|
+
try {
|
|
226
|
+
// ----------------------------------------------------------------
|
|
227
|
+
// 3. Auth check
|
|
228
|
+
// ----------------------------------------------------------------
|
|
229
|
+
const grant = await this._authGuardian.requestPermission(this._agentId, 'ENVIRONMENT_PROMOTE', `Transport ${trId}: ${request.reason}`, `${request.fromEnv}→${request.toEnv}`);
|
|
230
|
+
if (!grant.granted) {
|
|
231
|
+
status = updateStatus({ status: 'failed', error: `Permission denied: ${grant.reason ?? 'AuthGuardian rejected ENVIRONMENT_PROMOTE'}`, completedAt: now() });
|
|
232
|
+
this._writeAudit('transport:auth_denied', { trId, reason: grant.reason });
|
|
233
|
+
return status;
|
|
234
|
+
}
|
|
235
|
+
// ----------------------------------------------------------------
|
|
236
|
+
// 4. Drain pools tagged for the destination environment
|
|
237
|
+
// ----------------------------------------------------------------
|
|
238
|
+
status = updateStatus({ status: 'draining' });
|
|
239
|
+
const drainedPools = this._drainPools(request.toEnv);
|
|
240
|
+
await this._waitForDrain(drainedPools);
|
|
241
|
+
// ----------------------------------------------------------------
|
|
242
|
+
// 5. Backup destination environment before overwriting
|
|
243
|
+
// ----------------------------------------------------------------
|
|
244
|
+
let backupId;
|
|
245
|
+
try {
|
|
246
|
+
const backupResult = this._envManager.backup(request.toEnv);
|
|
247
|
+
backupId = backupResult.backupId;
|
|
248
|
+
}
|
|
249
|
+
catch {
|
|
250
|
+
// Destination env may not exist yet — nothing to back up
|
|
251
|
+
}
|
|
252
|
+
// ----------------------------------------------------------------
|
|
253
|
+
// 6. Promote
|
|
254
|
+
// ----------------------------------------------------------------
|
|
255
|
+
status = updateStatus({ status: 'promoting', backupId });
|
|
256
|
+
let promotionResult;
|
|
257
|
+
try {
|
|
258
|
+
promotionResult = this._envManager.promote(request.fromEnv, request.toEnv, {
|
|
259
|
+
confirmedBy: request.operator,
|
|
260
|
+
approvedBy: request.operator,
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
catch (err) {
|
|
264
|
+
status = updateStatus({ status: 'failed', error: `Promote failed: ${String(err)}`, completedAt: now() });
|
|
265
|
+
this._writeAudit('transport:promote_failed', { trId, error: String(err) });
|
|
266
|
+
this._resumePools(drainedPools, 100);
|
|
267
|
+
return status;
|
|
268
|
+
}
|
|
269
|
+
// ----------------------------------------------------------------
|
|
270
|
+
// 7. Canary phase
|
|
271
|
+
// ----------------------------------------------------------------
|
|
272
|
+
const canaryWindowMs = request.canaryWindowMs ?? 30_000;
|
|
273
|
+
const canaryMaxViolations = request.canaryMaxViolations ?? 0;
|
|
274
|
+
if (canaryWindowMs > 0 && this._complianceMonitor) {
|
|
275
|
+
status = updateStatus({ status: 'canary', promotionResult });
|
|
276
|
+
this._resumePools(drainedPools, request.canaryPercent ?? 20);
|
|
277
|
+
const violationsBefore = this._complianceMonitor.getViolations().length;
|
|
278
|
+
await sleep(canaryWindowMs);
|
|
279
|
+
const violationsAfter = this._complianceMonitor.getViolations().length;
|
|
280
|
+
const violationsDelta = Math.max(0, violationsAfter - violationsBefore);
|
|
281
|
+
if (violationsDelta > canaryMaxViolations) {
|
|
282
|
+
// Canary failed — roll back
|
|
283
|
+
status = updateStatus({ status: 'rolled_back', violationsDetected: violationsDelta, completedAt: now() });
|
|
284
|
+
this._writeAudit('transport:canary_failed', { trId, violationsDelta, canaryMaxViolations });
|
|
285
|
+
this._resumePools(drainedPools, 100);
|
|
286
|
+
if (backupId) {
|
|
287
|
+
try {
|
|
288
|
+
this._envManager.restore(request.toEnv, backupId);
|
|
289
|
+
this._writeAudit('transport:rollback_complete', { trId, backupId, toEnv: request.toEnv });
|
|
290
|
+
}
|
|
291
|
+
catch (rollbackErr) {
|
|
292
|
+
this._writeAudit('transport:rollback_failed', { trId, backupId, error: String(rollbackErr) });
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
return status;
|
|
296
|
+
}
|
|
297
|
+
status = updateStatus({ status: 'complete', violationsDetected: violationsDelta, promotionResult, completedAt: now() });
|
|
298
|
+
this._resumePools(drainedPools, 100);
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
// No canary — complete immediately
|
|
302
|
+
status = updateStatus({ status: 'complete', promotionResult, completedAt: now() });
|
|
303
|
+
this._resumePools(drainedPools, 100);
|
|
304
|
+
}
|
|
305
|
+
this._writeAudit('transport:complete', {
|
|
306
|
+
trId,
|
|
307
|
+
fromEnv: request.fromEnv,
|
|
308
|
+
toEnv: request.toEnv,
|
|
309
|
+
operator: request.operator ?? null,
|
|
310
|
+
});
|
|
311
|
+
return status;
|
|
312
|
+
}
|
|
313
|
+
finally {
|
|
314
|
+
// Always release the advisory lock regardless of outcome
|
|
315
|
+
this._blackboard.delete(lockKey);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
// --------------------------------------------------------------------------
|
|
319
|
+
// Pool helpers
|
|
320
|
+
// --------------------------------------------------------------------------
|
|
321
|
+
/** Pause dispatch on all pools tagged for `env`. Returns the paused pools. */
|
|
322
|
+
_drainPools(env) {
|
|
323
|
+
const tagged = this._pools.filter(p => Array.isArray(p.template.tags) && p.template.tags.includes(env));
|
|
324
|
+
for (const pool of tagged) {
|
|
325
|
+
pool.setDispatchPause(true);
|
|
326
|
+
}
|
|
327
|
+
return tagged;
|
|
328
|
+
}
|
|
329
|
+
/** Resume dispatch on `pools` at `percent` capacity. */
|
|
330
|
+
_resumePools(pools, percent) {
|
|
331
|
+
for (const pool of pools) {
|
|
332
|
+
pool.setDispatchPause(false, { percent });
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Wait for all actively-running agents in the given pools to finish,
|
|
337
|
+
* up to `_drainTimeoutMs`. Proceeds even if timeout is reached
|
|
338
|
+
* (pools remain paused — only newly spawned agents are blocked).
|
|
339
|
+
*/
|
|
340
|
+
async _waitForDrain(pools) {
|
|
341
|
+
if (pools.length === 0)
|
|
342
|
+
return;
|
|
343
|
+
const deadline = Date.now() + this._drainTimeoutMs;
|
|
344
|
+
while (Date.now() < deadline) {
|
|
345
|
+
const anyActive = pools.some(p => p.active > 0);
|
|
346
|
+
if (!anyActive)
|
|
347
|
+
return;
|
|
348
|
+
await sleep(500);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
// --------------------------------------------------------------------------
|
|
352
|
+
// Audit helper
|
|
353
|
+
// --------------------------------------------------------------------------
|
|
354
|
+
_writeAudit(event, details) {
|
|
355
|
+
try {
|
|
356
|
+
const entry = JSON.stringify({ timestamp: new Date().toISOString(), event, ...details });
|
|
357
|
+
(0, fs_1.appendFileSync)(this._auditLogPath, entry + '\n', 'utf-8');
|
|
358
|
+
}
|
|
359
|
+
catch {
|
|
360
|
+
// Audit log is best-effort — never interrupt a transport for logging failures
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
exports.TransportAgent = TransportAgent;
|
|
365
|
+
//# sourceMappingURL=transport-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport-agent.js","sourceRoot":"","sources":["../../lib/transport-agent.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "network-ai",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.5.0",
|
|
4
4
|
"description": "AI agent orchestration framework for TypeScript/Node.js - 29 adapters (LangChain, AutoGen, CrewAI, OpenAI Assistants, LlamaIndex, Semantic Kernel, Haystack, DSPy, Agno, MCP, OpenClaw, A2A, Codex, MiniMax, NemoClaw, APS, Copilot, LangGraph, Anthropic Computer Use, OpenAI Agents SDK, Vertex AI, Pydantic AI, Browser Agent, Hermes, Orchestrator, RLM + streaming variants). Built-in CLI, security, swarm intelligence, real-time streaming, and agentic workflow patterns.",
|
|
5
5
|
"homepage": "https://network-ai.org",
|
|
6
6
|
"main": "dist/index.js",
|