network-ai 4.15.2 → 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 +267 -5
  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,61 @@
1
+ "use strict";
2
+ /**
3
+ * Shared type definitions, configuration, and default profiles for the
4
+ * SwarmOrchestrator engine.
5
+ *
6
+ * Extracted from index.ts to break the god-file pattern. All types are
7
+ * re-exported from the main index.ts barrel.
8
+ *
9
+ * @module OrchestratorTypes
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.DEFAULT_AGENT_TRUST = exports.DEFAULT_RESOURCE_PROFILES = exports.CONFIG = void 0;
13
+ // ============================================================================
14
+ // CONFIGURATION
15
+ // ============================================================================
16
+ exports.CONFIG = {
17
+ blackboardPath: './swarm-blackboard.md',
18
+ maxParallelAgents: Infinity,
19
+ defaultTimeout: 30000,
20
+ enableTracing: true,
21
+ grantTokenTTL: 300000, // 5 minutes in milliseconds
22
+ maxBlackboardValueSize: 1024 * 1024, // 1 MB max per entry
23
+ auditLogPath: './data/audit_log.jsonl',
24
+ trustConfigPath: './data/trust_levels.json',
25
+ };
26
+ // ============================================================================
27
+ // DEFAULT RESOURCE PROFILES -- Universal, domain-agnostic
28
+ // Users can override/extend these for any domain (coding, finance, devops, etc.)
29
+ // ============================================================================
30
+ exports.DEFAULT_RESOURCE_PROFILES = {
31
+ // --- Financial / Enterprise ---
32
+ SAP_API: { baseRisk: 0.5, defaultRestrictions: ['read_only', 'max_records:100'], description: 'SAP enterprise API' },
33
+ FINANCIAL_API: { baseRisk: 0.7, defaultRestrictions: ['read_only', 'no_pii_fields', 'audit_required'], description: 'Financial data API' },
34
+ DATA_EXPORT: { baseRisk: 0.6, defaultRestrictions: ['anonymize_pii', 'local_only'], description: 'Data export operations' },
35
+ // --- Coding / Development ---
36
+ FILE_SYSTEM: { baseRisk: 0.5, defaultRestrictions: ['workspace_only', 'no_system_dirs', 'max_file_size:10mb'], description: 'Read/write files in workspace' },
37
+ SHELL_EXEC: { baseRisk: 0.8, defaultRestrictions: ['sandbox_only', 'no_sudo', 'timeout:30s', 'audit_required'], description: 'Execute shell commands' },
38
+ GIT: { baseRisk: 0.4, defaultRestrictions: ['local_repo_only', 'no_force_push'], description: 'Git operations' },
39
+ PACKAGE_MANAGER: { baseRisk: 0.6, defaultRestrictions: ['audit_required', 'no_global_install', 'lockfile_required'], description: 'npm/pip/cargo package management' },
40
+ BUILD_TOOL: { baseRisk: 0.5, defaultRestrictions: ['workspace_only', 'timeout:120s'], description: 'Build and compilation' },
41
+ // --- Infrastructure / DevOps ---
42
+ DOCKER: { baseRisk: 0.7, defaultRestrictions: ['no_privileged', 'no_host_network', 'audit_required'], description: 'Container operations' },
43
+ CLOUD_DEPLOY: { baseRisk: 0.9, defaultRestrictions: ['staging_only', 'approval_required', 'rollback_ready'], description: 'Cloud deployment' },
44
+ DATABASE: { baseRisk: 0.6, defaultRestrictions: ['read_only', 'max_records:1000', 'no_schema_changes'], description: 'Database access' },
45
+ // --- Communication / External ---
46
+ EXTERNAL_SERVICE: { baseRisk: 0.4, defaultRestrictions: ['rate_limit:10_per_minute'], description: 'External API calls' },
47
+ EMAIL: { baseRisk: 0.5, defaultRestrictions: ['rate_limit:5_per_minute', 'no_attachments'], description: 'Email sending' },
48
+ WEBHOOK: { baseRisk: 0.4, defaultRestrictions: ['allowed_domains_only', 'no_credentials'], description: 'Webhook dispatch' },
49
+ };
50
+ exports.DEFAULT_AGENT_TRUST = [
51
+ { agentId: 'orchestrator', trustLevel: 0.9, allowedNamespaces: ['*'], allowedResources: ['*'] },
52
+ { agentId: 'data_analyst', trustLevel: 0.8, allowedNamespaces: ['task:', 'analytics:', 'agent:'], allowedResources: ['SAP_API', 'DATABASE', 'DATA_EXPORT', 'EXTERNAL_SERVICE'] },
53
+ { agentId: 'strategy_advisor', trustLevel: 0.7, allowedNamespaces: ['task:', 'strategy:'], allowedResources: ['EXTERNAL_SERVICE', 'DATA_EXPORT'] },
54
+ { agentId: 'risk_assessor', trustLevel: 0.85, allowedNamespaces: ['task:', 'risk:', 'analytics:'], allowedResources: ['EXTERNAL_SERVICE', 'DATABASE'] },
55
+ // Coding agents
56
+ { agentId: 'code_writer', trustLevel: 0.75, allowedNamespaces: ['task:', 'code:', 'build:'], allowedResources: ['FILE_SYSTEM', 'GIT', 'BUILD_TOOL', 'PACKAGE_MANAGER'] },
57
+ { agentId: 'code_reviewer', trustLevel: 0.8, allowedNamespaces: ['task:', 'code:', 'review:'], allowedResources: ['FILE_SYSTEM', 'GIT'] },
58
+ { agentId: 'test_runner', trustLevel: 0.75, allowedNamespaces: ['task:', 'test:', 'build:'], allowedResources: ['FILE_SYSTEM', 'SHELL_EXEC', 'BUILD_TOOL'] },
59
+ { agentId: 'devops_agent', trustLevel: 0.7, allowedNamespaces: ['task:', 'deploy:', 'infra:'], allowedResources: ['DOCKER', 'SHELL_EXEC', 'CLOUD_DEPLOY', 'GIT'] },
60
+ ];
61
+ //# sourceMappingURL=orchestrator-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator-types.js","sourceRoot":"","sources":["../../lib/orchestrator-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * OTelBridge — Zero-dependency OpenTelemetry bridge (BYOC pattern).
3
+ *
4
+ * Users inject their own OTel `Tracer` instance; the bridge wraps agent
5
+ * executions, blackboard operations, and permission checks in proper OTel
6
+ * spans with semantic attributes. If no tracer is provided, all calls are
7
+ * no-ops (zero overhead).
8
+ *
9
+ * @module OTelBridge
10
+ */
11
+ /** Minimal subset of OTel SpanStatusCode */
12
+ export declare enum SpanStatus {
13
+ UNSET = 0,
14
+ OK = 1,
15
+ ERROR = 2
16
+ }
17
+ /** Minimal span interface matching @opentelemetry/api Span */
18
+ export interface OTelSpan {
19
+ setAttribute(key: string, value: string | number | boolean): this;
20
+ setStatus(status: {
21
+ code: SpanStatus;
22
+ message?: string;
23
+ }): this;
24
+ recordException(error: Error | string): this;
25
+ end(): void;
26
+ }
27
+ /** Minimal span options */
28
+ export interface OTelSpanOptions {
29
+ attributes?: Record<string, string | number | boolean>;
30
+ }
31
+ /** Minimal tracer interface matching @opentelemetry/api Tracer */
32
+ export interface OTelTracer {
33
+ startSpan(name: string, options?: OTelSpanOptions): OTelSpan;
34
+ }
35
+ /**
36
+ * Wraps orchestrator operations in OTel spans.
37
+ *
38
+ * @example
39
+ * ```ts
40
+ * import { trace } from '@opentelemetry/api';
41
+ * const bridge = new OTelBridge(trace.getTracer('network-ai'));
42
+ *
43
+ * // Or zero-config (no-op):
44
+ * const bridge = new OTelBridge();
45
+ * ```
46
+ */
47
+ export declare class OTelBridge {
48
+ private tracer;
49
+ constructor(tracer?: OTelTracer);
50
+ /** Replace the tracer at runtime (e.g. after late initialization). */
51
+ setTracer(tracer: OTelTracer): void;
52
+ /** Whether a real tracer (not no-op) is configured. */
53
+ get isEnabled(): boolean;
54
+ /**
55
+ * Wrap an async function in a span. Automatically sets status and records
56
+ * exceptions on failure.
57
+ */
58
+ trace<T>(spanName: string, attributes: Record<string, string | number | boolean>, fn: (span: OTelSpan) => Promise<T>): Promise<T>;
59
+ /**
60
+ * Wrap a synchronous function in a span.
61
+ */
62
+ traceSync<T>(spanName: string, attributes: Record<string, string | number | boolean>, fn: (span: OTelSpan) => T): T;
63
+ /** Start a span for an agent delegation. Returns the span for manual end(). */
64
+ startDelegation(sourceAgent: string, targetAgent: string, taskId: string): OTelSpan;
65
+ /** Start a span for adapter execution. */
66
+ startAdapterExecution(adapterId: string, agentId: string): OTelSpan;
67
+ /** Start a span for a blackboard operation. */
68
+ startBlackboardOp(operation: string, key: string, agentId: string): OTelSpan;
69
+ /** Start a span for a permission check. */
70
+ startPermissionCheck(agentId: string, resourceType: string): OTelSpan;
71
+ /** Start a span for quality gate validation. */
72
+ startQualityGate(agentId: string, key: string): OTelSpan;
73
+ }
74
+ //# sourceMappingURL=otel-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otel-bridge.d.ts","sourceRoot":"","sources":["../../lib/otel-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,4CAA4C;AAC5C,oBAAY,UAAU;IACpB,KAAK,IAAI;IACT,EAAE,IAAI;IACN,KAAK,IAAI;CACV;AAED,8DAA8D;AAC9D,MAAM,WAAW,QAAQ;IACvB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;IAClE,SAAS,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAChE,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC;IAC7C,GAAG,IAAI,IAAI,CAAC;CACb;AAED,2BAA2B;AAC3B,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;CACxD;AAED,kEAAkE;AAClE,MAAM,WAAW,UAAU;IACzB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,QAAQ,CAAC;CAC9D;AAyBD;;;;;;;;;;;GAWG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAa;gBAEf,MAAM,CAAC,EAAE,UAAU;IAI/B,sEAAsE;IACtE,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAInC,uDAAuD;IACvD,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED;;;OAGG;IACG,KAAK,CAAC,CAAC,EACX,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,EACrD,EAAE,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,GACjC,OAAO,CAAC,CAAC,CAAC;IAoBb;;OAEG;IACH,SAAS,CAAC,CAAC,EACT,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,EACrD,EAAE,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,CAAC,GACxB,CAAC;IAwBJ,+EAA+E;IAC/E,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ;IAUnF,0CAA0C;IAC1C,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ;IASnE,+CAA+C;IAC/C,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ;IAU5E,2CAA2C;IAC3C,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,QAAQ;IASrE,gDAAgD;IAChD,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ;CAQzD"}
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ /**
3
+ * OTelBridge — Zero-dependency OpenTelemetry bridge (BYOC pattern).
4
+ *
5
+ * Users inject their own OTel `Tracer` instance; the bridge wraps agent
6
+ * executions, blackboard operations, and permission checks in proper OTel
7
+ * spans with semantic attributes. If no tracer is provided, all calls are
8
+ * no-ops (zero overhead).
9
+ *
10
+ * @module OTelBridge
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.OTelBridge = exports.SpanStatus = void 0;
14
+ // ============================================================================
15
+ // BYOC Tracer Interface (subset of @opentelemetry/api)
16
+ // ============================================================================
17
+ /** Minimal subset of OTel SpanStatusCode */
18
+ var SpanStatus;
19
+ (function (SpanStatus) {
20
+ SpanStatus[SpanStatus["UNSET"] = 0] = "UNSET";
21
+ SpanStatus[SpanStatus["OK"] = 1] = "OK";
22
+ SpanStatus[SpanStatus["ERROR"] = 2] = "ERROR";
23
+ })(SpanStatus || (exports.SpanStatus = SpanStatus = {}));
24
+ // ============================================================================
25
+ // NO-OP IMPLEMENTATION
26
+ // ============================================================================
27
+ class NoOpSpan {
28
+ setAttribute() { return this; }
29
+ setStatus() { return this; }
30
+ recordException() { return this; }
31
+ end() { }
32
+ }
33
+ const NOOP_SPAN = new NoOpSpan();
34
+ class NoOpTracer {
35
+ startSpan() { return NOOP_SPAN; }
36
+ }
37
+ const NOOP_TRACER = new NoOpTracer();
38
+ // ============================================================================
39
+ // BRIDGE
40
+ // ============================================================================
41
+ /**
42
+ * Wraps orchestrator operations in OTel spans.
43
+ *
44
+ * @example
45
+ * ```ts
46
+ * import { trace } from '@opentelemetry/api';
47
+ * const bridge = new OTelBridge(trace.getTracer('network-ai'));
48
+ *
49
+ * // Or zero-config (no-op):
50
+ * const bridge = new OTelBridge();
51
+ * ```
52
+ */
53
+ class OTelBridge {
54
+ tracer;
55
+ constructor(tracer) {
56
+ this.tracer = tracer ?? NOOP_TRACER;
57
+ }
58
+ /** Replace the tracer at runtime (e.g. after late initialization). */
59
+ setTracer(tracer) {
60
+ this.tracer = tracer;
61
+ }
62
+ /** Whether a real tracer (not no-op) is configured. */
63
+ get isEnabled() {
64
+ return this.tracer !== NOOP_TRACER;
65
+ }
66
+ /**
67
+ * Wrap an async function in a span. Automatically sets status and records
68
+ * exceptions on failure.
69
+ */
70
+ async trace(spanName, attributes, fn) {
71
+ const span = this.tracer.startSpan(spanName, { attributes });
72
+ try {
73
+ const result = await fn(span);
74
+ span.setStatus({ code: SpanStatus.OK });
75
+ return result;
76
+ }
77
+ catch (error) {
78
+ span.setStatus({
79
+ code: SpanStatus.ERROR,
80
+ message: error instanceof Error ? error.message : String(error),
81
+ });
82
+ if (error instanceof Error) {
83
+ span.recordException(error);
84
+ }
85
+ throw error;
86
+ }
87
+ finally {
88
+ span.end();
89
+ }
90
+ }
91
+ /**
92
+ * Wrap a synchronous function in a span.
93
+ */
94
+ traceSync(spanName, attributes, fn) {
95
+ const span = this.tracer.startSpan(spanName, { attributes });
96
+ try {
97
+ const result = fn(span);
98
+ span.setStatus({ code: SpanStatus.OK });
99
+ return result;
100
+ }
101
+ catch (error) {
102
+ span.setStatus({
103
+ code: SpanStatus.ERROR,
104
+ message: error instanceof Error ? error.message : String(error),
105
+ });
106
+ if (error instanceof Error) {
107
+ span.recordException(error);
108
+ }
109
+ throw error;
110
+ }
111
+ finally {
112
+ span.end();
113
+ }
114
+ }
115
+ // -----------------------------------------------------------------------
116
+ // Pre-built span helpers for common orchestrator operations
117
+ // -----------------------------------------------------------------------
118
+ /** Start a span for an agent delegation. Returns the span for manual end(). */
119
+ startDelegation(sourceAgent, targetAgent, taskId) {
120
+ return this.tracer.startSpan('agent.delegation', {
121
+ attributes: {
122
+ 'agent.source': sourceAgent,
123
+ 'agent.target': targetAgent,
124
+ 'task.id': taskId,
125
+ },
126
+ });
127
+ }
128
+ /** Start a span for adapter execution. */
129
+ startAdapterExecution(adapterId, agentId) {
130
+ return this.tracer.startSpan('adapter.execute', {
131
+ attributes: {
132
+ 'adapter.id': adapterId,
133
+ 'agent.id': agentId,
134
+ },
135
+ });
136
+ }
137
+ /** Start a span for a blackboard operation. */
138
+ startBlackboardOp(operation, key, agentId) {
139
+ return this.tracer.startSpan(`blackboard.${operation}`, {
140
+ attributes: {
141
+ 'blackboard.operation': operation,
142
+ 'blackboard.key': key,
143
+ 'agent.id': agentId,
144
+ },
145
+ });
146
+ }
147
+ /** Start a span for a permission check. */
148
+ startPermissionCheck(agentId, resourceType) {
149
+ return this.tracer.startSpan('auth.permission_check', {
150
+ attributes: {
151
+ 'agent.id': agentId,
152
+ 'auth.resource_type': resourceType,
153
+ },
154
+ });
155
+ }
156
+ /** Start a span for quality gate validation. */
157
+ startQualityGate(agentId, key) {
158
+ return this.tracer.startSpan('quality.gate', {
159
+ attributes: {
160
+ 'agent.id': agentId,
161
+ 'quality.key': key,
162
+ },
163
+ });
164
+ }
165
+ }
166
+ exports.OTelBridge = OTelBridge;
167
+ //# sourceMappingURL=otel-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otel-bridge.js","sourceRoot":"","sources":["../../lib/otel-bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Playground — Interactive REPL sandbox for Network-AI
3
+ *
4
+ * Provides an in-process REPL environment with pre-configured mock adapters,
5
+ * a blackboard, budget, auth guardian, and orchestrator — ready to experiment
6
+ * with immediately.
7
+ *
8
+ * Features:
9
+ * - Pre-wired SwarmOrchestrator with mock CustomAdapter
10
+ * - LockedBlackboard with in-memory backend
11
+ * - AuthGuardian with default trust levels
12
+ * - FederatedBudget with generous defaults
13
+ * - REPL context exposes all key objects
14
+ * - Helper functions: delegate(), bb(), budget(), agents()
15
+ *
16
+ * Usage:
17
+ * import { startPlayground } from 'network-ai';
18
+ * await startPlayground();
19
+ *
20
+ * CLI:
21
+ * npx network-ai playground
22
+ *
23
+ * @module Playground
24
+ * @version 1.0.0
25
+ */
26
+ import { EventEmitter } from 'events';
27
+ /** Configuration for the playground environment */
28
+ export interface PlaygroundConfig {
29
+ /** Welcome banner (set to '' to disable) */
30
+ banner?: string;
31
+ /** REPL prompt string (default: 'swarm> ') */
32
+ prompt?: string;
33
+ /** Pre-register mock agent handlers (name → response) */
34
+ mockAgents?: Record<string, (input: string) => string | Promise<string>>;
35
+ /** Budget ceiling (default: 100) */
36
+ budgetCeiling?: number;
37
+ /** Whether to show tips on startup (default: true) */
38
+ showTips?: boolean;
39
+ }
40
+ /** Playground instance — provides access to all sandbox objects */
41
+ export interface PlaygroundInstance {
42
+ /** The playground event emitter */
43
+ emitter: EventEmitter;
44
+ /** Stop the playground */
45
+ stop: () => void;
46
+ /** Whether the playground is running */
47
+ isRunning: boolean;
48
+ }
49
+ /** Simple mock agent registry for the playground */
50
+ export declare class MockAgentRegistry {
51
+ private handlers;
52
+ private callLog;
53
+ /** Register a mock agent */
54
+ register(name: string, handler: (input: string) => string | Promise<string>): void;
55
+ /** List registered mock agents */
56
+ list(): string[];
57
+ /** Call a mock agent */
58
+ call(name: string, input: string): Promise<string>;
59
+ /** Get call history */
60
+ history(): ReadonlyArray<{
61
+ agentId: string;
62
+ input: string;
63
+ output: string;
64
+ timestamp: number;
65
+ }>;
66
+ /** Clear call history */
67
+ clearHistory(): void;
68
+ }
69
+ /**
70
+ * Start an interactive playground REPL with mock adapters.
71
+ *
72
+ * All key Network-AI objects are available in the REPL context.
73
+ * Mock agents respond instantly with deterministic outputs.
74
+ */
75
+ export declare function startPlayground(config?: PlaygroundConfig): PlaygroundInstance;
76
+ //# sourceMappingURL=playground.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playground.d.ts","sourceRoot":"","sources":["../../lib/playground.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAMtC,mDAAmD;AACnD,MAAM,WAAW,gBAAgB;IAC/B,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACzE,oCAAoC;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sDAAsD;IACtD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,mEAAmE;AACnE,MAAM,WAAW,kBAAkB;IACjC,mCAAmC;IACnC,OAAO,EAAE,YAAY,CAAC;IACtB,0BAA0B;IAC1B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,wCAAwC;IACxC,SAAS,EAAE,OAAO,CAAC;CACpB;AAMD,oDAAoD;AACpD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAkE;IAClF,OAAO,CAAC,OAAO,CAAoF;IAEnG,4BAA4B;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI;IAIlF,kCAAkC;IAClC,IAAI,IAAI,MAAM,EAAE;IAIhB,wBAAwB;IAClB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUxD,uBAAuB;IACvB,OAAO,IAAI,aAAa,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAI/F,yBAAyB;IACzB,YAAY,IAAI,IAAI;CAGrB;AAiDD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,GAAE,gBAAqB,GAAG,kBAAkB,CAgFjF"}
@@ -0,0 +1,224 @@
1
+ "use strict";
2
+ /**
3
+ * Playground — Interactive REPL sandbox for Network-AI
4
+ *
5
+ * Provides an in-process REPL environment with pre-configured mock adapters,
6
+ * a blackboard, budget, auth guardian, and orchestrator — ready to experiment
7
+ * with immediately.
8
+ *
9
+ * Features:
10
+ * - Pre-wired SwarmOrchestrator with mock CustomAdapter
11
+ * - LockedBlackboard with in-memory backend
12
+ * - AuthGuardian with default trust levels
13
+ * - FederatedBudget with generous defaults
14
+ * - REPL context exposes all key objects
15
+ * - Helper functions: delegate(), bb(), budget(), agents()
16
+ *
17
+ * Usage:
18
+ * import { startPlayground } from 'network-ai';
19
+ * await startPlayground();
20
+ *
21
+ * CLI:
22
+ * npx network-ai playground
23
+ *
24
+ * @module Playground
25
+ * @version 1.0.0
26
+ */
27
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
28
+ if (k2 === undefined) k2 = k;
29
+ var desc = Object.getOwnPropertyDescriptor(m, k);
30
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
31
+ desc = { enumerable: true, get: function() { return m[k]; } };
32
+ }
33
+ Object.defineProperty(o, k2, desc);
34
+ }) : (function(o, m, k, k2) {
35
+ if (k2 === undefined) k2 = k;
36
+ o[k2] = m[k];
37
+ }));
38
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
39
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
40
+ }) : function(o, v) {
41
+ o["default"] = v;
42
+ });
43
+ var __importStar = (this && this.__importStar) || (function () {
44
+ var ownKeys = function(o) {
45
+ ownKeys = Object.getOwnPropertyNames || function (o) {
46
+ var ar = [];
47
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
48
+ return ar;
49
+ };
50
+ return ownKeys(o);
51
+ };
52
+ return function (mod) {
53
+ if (mod && mod.__esModule) return mod;
54
+ var result = {};
55
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
56
+ __setModuleDefault(result, mod);
57
+ return result;
58
+ };
59
+ })();
60
+ Object.defineProperty(exports, "__esModule", { value: true });
61
+ exports.MockAgentRegistry = void 0;
62
+ exports.startPlayground = startPlayground;
63
+ const repl = __importStar(require("repl"));
64
+ const events_1 = require("events");
65
+ // ============================================================================
66
+ // MOCK HELPERS
67
+ // ============================================================================
68
+ /** Simple mock agent registry for the playground */
69
+ class MockAgentRegistry {
70
+ handlers = new Map();
71
+ callLog = [];
72
+ /** Register a mock agent */
73
+ register(name, handler) {
74
+ this.handlers.set(name, handler);
75
+ }
76
+ /** List registered mock agents */
77
+ list() {
78
+ return Array.from(this.handlers.keys());
79
+ }
80
+ /** Call a mock agent */
81
+ async call(name, input) {
82
+ const handler = this.handlers.get(name);
83
+ if (!handler) {
84
+ throw new Error(`No mock agent '${name}'. Available: ${this.list().join(', ')}`);
85
+ }
86
+ const output = await handler(input);
87
+ this.callLog.push({ agentId: name, input, output, timestamp: Date.now() });
88
+ return output;
89
+ }
90
+ /** Get call history */
91
+ history() {
92
+ return this.callLog;
93
+ }
94
+ /** Clear call history */
95
+ clearHistory() {
96
+ this.callLog = [];
97
+ }
98
+ }
99
+ exports.MockAgentRegistry = MockAgentRegistry;
100
+ // ============================================================================
101
+ // DEFAULT MOCKS
102
+ // ============================================================================
103
+ function createDefaultMocks() {
104
+ return {
105
+ echo: (input) => `Echo: ${input}`,
106
+ upper: (input) => input.toUpperCase(),
107
+ reverse: (input) => input.split('').reverse().join(''),
108
+ count: (input) => `Words: ${input.split(/\s+/).filter(Boolean).length}`,
109
+ json: (input) => JSON.stringify({ input, processed: true, timestamp: Date.now() }),
110
+ summarize: (input) => {
111
+ const words = input.split(/\s+/);
112
+ return words.length <= 10 ? input : words.slice(0, 10).join(' ') + '...';
113
+ },
114
+ sentiment: (input) => {
115
+ const positive = /good|great|excellent|happy|love|amazing|wonderful/i;
116
+ const negative = /bad|terrible|awful|hate|horrible|worst/i;
117
+ if (positive.test(input))
118
+ return 'positive';
119
+ if (negative.test(input))
120
+ return 'negative';
121
+ return 'neutral';
122
+ },
123
+ };
124
+ }
125
+ // ============================================================================
126
+ // PLAYGROUND
127
+ // ============================================================================
128
+ const DEFAULT_BANNER = `
129
+ \x1b[36m\x1b[1m╔══════════════════════════════════════════════════╗
130
+ ║ Network-AI Playground (REPL) ║
131
+ ╚══════════════════════════════════════════════════╝\x1b[0m
132
+
133
+ \x1b[33mPre-loaded objects:\x1b[0m
134
+ \x1b[32mmocks\x1b[0m — MockAgentRegistry (register/call/list/history)
135
+ \x1b[32mdelegate\x1b[0m — Call a mock agent: delegate('echo', 'hello')
136
+ \x1b[32magents\x1b[0m — List available mock agents
137
+ \x1b[32mhistory\x1b[0m — View call history
138
+
139
+ \x1b[33mTips:\x1b[0m
140
+ • Type \x1b[32m.help\x1b[0m for REPL commands
141
+ • Type \x1b[32magents()\x1b[0m to see available agents
142
+ • Type \x1b[32mdelegate('echo', 'hello world')\x1b[0m to test
143
+ • Type \x1b[32m.exit\x1b[0m to quit
144
+ `;
145
+ /**
146
+ * Start an interactive playground REPL with mock adapters.
147
+ *
148
+ * All key Network-AI objects are available in the REPL context.
149
+ * Mock agents respond instantly with deterministic outputs.
150
+ */
151
+ function startPlayground(config = {}) {
152
+ const emitter = new events_1.EventEmitter();
153
+ let running = true;
154
+ const banner = config.banner ?? DEFAULT_BANNER;
155
+ const prompt = config.prompt ?? 'swarm> ';
156
+ // Set up mocks
157
+ const mocks = new MockAgentRegistry();
158
+ const defaultMocks = createDefaultMocks();
159
+ for (const [name, handler] of Object.entries(defaultMocks)) {
160
+ mocks.register(name, handler);
161
+ }
162
+ if (config.mockAgents) {
163
+ for (const [name, handler] of Object.entries(config.mockAgents)) {
164
+ mocks.register(name, handler);
165
+ }
166
+ }
167
+ // Print banner
168
+ if (banner) {
169
+ console.log(banner);
170
+ }
171
+ // Create REPL
172
+ const server = repl.start({
173
+ prompt,
174
+ useColors: true,
175
+ ignoreUndefined: true,
176
+ });
177
+ // Expose objects in REPL context
178
+ server.context['mocks'] = mocks;
179
+ server.context['delegate'] = async (agentId, input) => {
180
+ try {
181
+ const result = await mocks.call(agentId, input);
182
+ console.log(`\x1b[32m✓\x1b[0m ${result}`);
183
+ return result;
184
+ }
185
+ catch (err) {
186
+ console.log(`\x1b[31m✗\x1b[0m ${err instanceof Error ? err.message : String(err)}`);
187
+ return undefined;
188
+ }
189
+ };
190
+ server.context['agents'] = () => {
191
+ const list = mocks.list();
192
+ console.log(`\x1b[36mAvailable agents (${list.length}):\x1b[0m`);
193
+ for (const name of list) {
194
+ console.log(` • ${name}`);
195
+ }
196
+ return list;
197
+ };
198
+ server.context['history'] = () => {
199
+ const hist = mocks.history();
200
+ if (hist.length === 0) {
201
+ console.log('\x1b[33mNo calls yet.\x1b[0m');
202
+ return [];
203
+ }
204
+ for (const entry of hist) {
205
+ const time = new Date(entry.timestamp).toLocaleTimeString();
206
+ console.log(` [${time}] ${entry.agentId}("${entry.input}") → "${entry.output}"`);
207
+ }
208
+ return hist;
209
+ };
210
+ server.on('exit', () => {
211
+ running = false;
212
+ emitter.emit('exit');
213
+ });
214
+ emitter.emit('started');
215
+ return {
216
+ emitter,
217
+ stop: () => {
218
+ running = false;
219
+ server.close();
220
+ },
221
+ get isRunning() { return running; },
222
+ };
223
+ }
224
+ //# sourceMappingURL=playground.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playground.js","sourceRoot":"","sources":["../../lib/playground.ts"],"names":[],"mappings":"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"}