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.
- package/LICENSE +21 -0
- package/QUICKSTART.md +260 -0
- package/README.md +604 -0
- package/SKILL.md +568 -0
- package/dist/adapters/adapter-registry.d.ts +94 -0
- package/dist/adapters/adapter-registry.d.ts.map +1 -0
- package/dist/adapters/adapter-registry.js +355 -0
- package/dist/adapters/adapter-registry.js.map +1 -0
- package/dist/adapters/agno-adapter.d.ts +112 -0
- package/dist/adapters/agno-adapter.d.ts.map +1 -0
- package/dist/adapters/agno-adapter.js +140 -0
- package/dist/adapters/agno-adapter.js.map +1 -0
- package/dist/adapters/autogen-adapter.d.ts +67 -0
- package/dist/adapters/autogen-adapter.d.ts.map +1 -0
- package/dist/adapters/autogen-adapter.js +141 -0
- package/dist/adapters/autogen-adapter.js.map +1 -0
- package/dist/adapters/base-adapter.d.ts +51 -0
- package/dist/adapters/base-adapter.d.ts.map +1 -0
- package/dist/adapters/base-adapter.js +103 -0
- package/dist/adapters/base-adapter.js.map +1 -0
- package/dist/adapters/crewai-adapter.d.ts +72 -0
- package/dist/adapters/crewai-adapter.d.ts.map +1 -0
- package/dist/adapters/crewai-adapter.js +148 -0
- package/dist/adapters/crewai-adapter.js.map +1 -0
- package/dist/adapters/custom-adapter.d.ts +74 -0
- package/dist/adapters/custom-adapter.d.ts.map +1 -0
- package/dist/adapters/custom-adapter.js +142 -0
- package/dist/adapters/custom-adapter.js.map +1 -0
- package/dist/adapters/dspy-adapter.d.ts +70 -0
- package/dist/adapters/dspy-adapter.d.ts.map +1 -0
- package/dist/adapters/dspy-adapter.js +127 -0
- package/dist/adapters/dspy-adapter.js.map +1 -0
- package/dist/adapters/haystack-adapter.d.ts +83 -0
- package/dist/adapters/haystack-adapter.d.ts.map +1 -0
- package/dist/adapters/haystack-adapter.js +149 -0
- package/dist/adapters/haystack-adapter.js.map +1 -0
- package/dist/adapters/index.d.ts +47 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +56 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/langchain-adapter.d.ts +51 -0
- package/dist/adapters/langchain-adapter.d.ts.map +1 -0
- package/dist/adapters/langchain-adapter.js +134 -0
- package/dist/adapters/langchain-adapter.js.map +1 -0
- package/dist/adapters/llamaindex-adapter.d.ts +89 -0
- package/dist/adapters/llamaindex-adapter.d.ts.map +1 -0
- package/dist/adapters/llamaindex-adapter.js +135 -0
- package/dist/adapters/llamaindex-adapter.js.map +1 -0
- package/dist/adapters/mcp-adapter.d.ts +90 -0
- package/dist/adapters/mcp-adapter.d.ts.map +1 -0
- package/dist/adapters/mcp-adapter.js +200 -0
- package/dist/adapters/mcp-adapter.js.map +1 -0
- package/dist/adapters/openai-assistants-adapter.d.ts +94 -0
- package/dist/adapters/openai-assistants-adapter.d.ts.map +1 -0
- package/dist/adapters/openai-assistants-adapter.js +130 -0
- package/dist/adapters/openai-assistants-adapter.js.map +1 -0
- package/dist/adapters/openclaw-adapter.d.ts +21 -0
- package/dist/adapters/openclaw-adapter.d.ts.map +1 -0
- package/dist/adapters/openclaw-adapter.js +140 -0
- package/dist/adapters/openclaw-adapter.js.map +1 -0
- package/dist/adapters/semantic-kernel-adapter.d.ts +73 -0
- package/dist/adapters/semantic-kernel-adapter.d.ts.map +1 -0
- package/dist/adapters/semantic-kernel-adapter.js +123 -0
- package/dist/adapters/semantic-kernel-adapter.js.map +1 -0
- package/dist/index.d.ts +379 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1428 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/blackboard-validator.d.ts +205 -0
- package/dist/lib/blackboard-validator.d.ts.map +1 -0
- package/dist/lib/blackboard-validator.js +756 -0
- package/dist/lib/blackboard-validator.js.map +1 -0
- package/dist/lib/locked-blackboard.d.ts +174 -0
- package/dist/lib/locked-blackboard.d.ts.map +1 -0
- package/dist/lib/locked-blackboard.js +654 -0
- package/dist/lib/locked-blackboard.js.map +1 -0
- package/dist/lib/swarm-utils.d.ts +136 -0
- package/dist/lib/swarm-utils.d.ts.map +1 -0
- package/dist/lib/swarm-utils.js +510 -0
- package/dist/lib/swarm-utils.js.map +1 -0
- package/dist/security.d.ts +269 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +713 -0
- package/dist/security.js.map +1 -0
- package/package.json +84 -0
- package/scripts/blackboard.py +819 -0
- package/scripts/check_permission.py +331 -0
- package/scripts/revoke_token.py +243 -0
- package/scripts/swarm_guard.py +1140 -0
- package/scripts/validate_token.py +97 -0
- package/types/agent-adapter.d.ts +244 -0
- package/types/openclaw-core.d.ts +52 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Jovan Marinovic
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/QUICKSTART.md
ADDED
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
# Network-AI Quick Start Guide
|
|
2
|
+
|
|
3
|
+
Get the Multi-Agent Swarm Orchestrator running in **under 5 minutes**.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# Clone the repo
|
|
11
|
+
git clone https://github.com/jovanSAPFIONEER/Network-AI.git
|
|
12
|
+
cd Network-AI
|
|
13
|
+
|
|
14
|
+
# Install dependencies (only TypeScript + ts-node needed)
|
|
15
|
+
npm install
|
|
16
|
+
|
|
17
|
+
# Verify everything works
|
|
18
|
+
npx ts-node setup.ts --check
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
**Zero external AI dependencies.** All 12 adapters are self-contained — add framework SDKs only when you need them.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 2. Pick Your Framework
|
|
26
|
+
|
|
27
|
+
| Adapter | Framework | Dependency | Use Case |
|
|
28
|
+
|---------|-----------|------------|----------|
|
|
29
|
+
| `custom` | Any | none | Plain functions or HTTP endpoints |
|
|
30
|
+
| `langchain` | LangChain | `langchain` | Chains, agents, RAG |
|
|
31
|
+
| `autogen` | AutoGen/AG2 | `autogen-agentchat` | Multi-agent conversations |
|
|
32
|
+
| `crewai` | CrewAI | none | Role-based agent crews |
|
|
33
|
+
| `mcp` | MCP | `@modelcontextprotocol/sdk` | Tool serving & discovery |
|
|
34
|
+
| `openclaw` | OpenClaw | `openclaw-core` | OpenClaw skill ecosystem |
|
|
35
|
+
| `llamaindex` | LlamaIndex | `llamaindex` | RAG, query engines |
|
|
36
|
+
| `semantic-kernel` | Semantic Kernel | `semantic-kernel` | Enterprise planners & plugins |
|
|
37
|
+
| `openai-assistants` | OpenAI Assistants | `openai` | GPT assistants with threads |
|
|
38
|
+
| `haystack` | Haystack | none | Production RAG pipelines |
|
|
39
|
+
| `dspy` | DSPy | none | Programmatic prompt optimisation |
|
|
40
|
+
| `agno` | Agno | none | Multi-agent teams |
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## 3. Hello World (30 seconds)
|
|
45
|
+
|
|
46
|
+
```typescript
|
|
47
|
+
import { createSwarmOrchestrator } from './index';
|
|
48
|
+
import { AdapterRegistry, CustomAdapter } from './adapters';
|
|
49
|
+
|
|
50
|
+
async function main() {
|
|
51
|
+
// Create orchestrator
|
|
52
|
+
const orchestrator = createSwarmOrchestrator({
|
|
53
|
+
agentId: 'my-app',
|
|
54
|
+
swarmName: 'My First Swarm',
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
// Create a simple agent
|
|
58
|
+
const adapter = new CustomAdapter();
|
|
59
|
+
adapter.registerHandler('greeter', async (payload) => {
|
|
60
|
+
const name = payload.handoff?.instruction || 'World';
|
|
61
|
+
return { greeting: `Hello, ${name}!` };
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
// Register it
|
|
65
|
+
const registry = new AdapterRegistry();
|
|
66
|
+
await registry.addAdapter(adapter);
|
|
67
|
+
|
|
68
|
+
// Execute
|
|
69
|
+
const result = await registry.executeAgent('custom:greeter', {
|
|
70
|
+
action: 'greet',
|
|
71
|
+
params: {},
|
|
72
|
+
handoff: { instruction: 'Developer' },
|
|
73
|
+
}, {
|
|
74
|
+
agentId: 'my-app',
|
|
75
|
+
taskId: 'task-1',
|
|
76
|
+
timestamp: Date.now(),
|
|
77
|
+
priority: 5,
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
console.log(result.data); // { greeting: "Hello, Developer!" }
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
main();
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## 4. Multi-Framework Setup
|
|
89
|
+
|
|
90
|
+
Use different AI frameworks **together** in one orchestrator:
|
|
91
|
+
|
|
92
|
+
```typescript
|
|
93
|
+
import { AdapterRegistry, CustomAdapter, LlamaIndexAdapter, DSPyAdapter } from './adapters';
|
|
94
|
+
|
|
95
|
+
async function multiFramework() {
|
|
96
|
+
const registry = new AdapterRegistry();
|
|
97
|
+
|
|
98
|
+
// Framework 1: Custom agents for business logic
|
|
99
|
+
const custom = new CustomAdapter();
|
|
100
|
+
custom.registerHandler('validator', async (p) => ({
|
|
101
|
+
valid: true,
|
|
102
|
+
message: 'Input validated',
|
|
103
|
+
}));
|
|
104
|
+
|
|
105
|
+
// Framework 2: LlamaIndex for RAG
|
|
106
|
+
const llamaindex = new LlamaIndexAdapter();
|
|
107
|
+
llamaindex.registerQueryEngine('knowledge-base', myQueryEngine);
|
|
108
|
+
|
|
109
|
+
// Framework 3: DSPy for classification
|
|
110
|
+
const dspy = new DSPyAdapter();
|
|
111
|
+
dspy.registerPredictor('classifier', async (inputs) => ({
|
|
112
|
+
answer: inputs.question?.toString().includes('urgent') ? 'high' : 'low',
|
|
113
|
+
}));
|
|
114
|
+
|
|
115
|
+
// Register all
|
|
116
|
+
await registry.addAdapter(custom);
|
|
117
|
+
await registry.addAdapter(llamaindex);
|
|
118
|
+
await registry.addAdapter(dspy);
|
|
119
|
+
|
|
120
|
+
// Route tasks to the right framework
|
|
121
|
+
await registry.executeAgent('custom:validator', ...);
|
|
122
|
+
await registry.executeAgent('llamaindex:knowledge-base', ...);
|
|
123
|
+
await registry.executeAgent('dspy:classifier', ...);
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## 5. Add Quality Validation
|
|
130
|
+
|
|
131
|
+
Prevent bad data from entering the shared blackboard:
|
|
132
|
+
|
|
133
|
+
```typescript
|
|
134
|
+
import { createSwarmOrchestrator } from './index';
|
|
135
|
+
|
|
136
|
+
const orchestrator = createSwarmOrchestrator({
|
|
137
|
+
agentId: 'my-app',
|
|
138
|
+
swarmName: 'Quality-Controlled Swarm',
|
|
139
|
+
qualityThreshold: 0.7, // Auto-approve above this score
|
|
140
|
+
aiReviewCallback: async (entry) => {
|
|
141
|
+
// Optional: plug in your AI model for borderline entries
|
|
142
|
+
const score = await myAIModel.evaluate(entry.value);
|
|
143
|
+
return { approved: score > 0.5, score, reason: 'AI reviewed' };
|
|
144
|
+
},
|
|
145
|
+
});
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## 6. Security
|
|
151
|
+
|
|
152
|
+
```typescript
|
|
153
|
+
import {
|
|
154
|
+
SecureSwarmGateway,
|
|
155
|
+
SecureTokenManager,
|
|
156
|
+
RateLimiter,
|
|
157
|
+
} from './security';
|
|
158
|
+
|
|
159
|
+
const gateway = new SecureSwarmGateway({
|
|
160
|
+
rateLimiting: true,
|
|
161
|
+
auditLogging: true,
|
|
162
|
+
inputSanitization: true,
|
|
163
|
+
});
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## 7. Build Your Own Adapter
|
|
169
|
+
|
|
170
|
+
Create a custom adapter for any framework in ~50 lines:
|
|
171
|
+
|
|
172
|
+
```typescript
|
|
173
|
+
import { BaseAdapter } from './adapters/base-adapter';
|
|
174
|
+
import type { AgentPayload, AgentContext, AgentResult } from './types/agent-adapter';
|
|
175
|
+
|
|
176
|
+
export class MyFrameworkAdapter extends BaseAdapter {
|
|
177
|
+
readonly name = 'my-framework';
|
|
178
|
+
readonly version = '1.0.0';
|
|
179
|
+
|
|
180
|
+
private agents = new Map<string, any>();
|
|
181
|
+
|
|
182
|
+
registerAgent(id: string, agent: any): void {
|
|
183
|
+
this.agents.set(id, agent);
|
|
184
|
+
this.registerLocalAgent({
|
|
185
|
+
id, name: id,
|
|
186
|
+
description: `My agent: ${id}`,
|
|
187
|
+
status: 'available',
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
async executeAgent(
|
|
192
|
+
agentId: string,
|
|
193
|
+
payload: AgentPayload,
|
|
194
|
+
context: AgentContext
|
|
195
|
+
): Promise<AgentResult> {
|
|
196
|
+
this.ensureReady();
|
|
197
|
+
const agent = this.agents.get(agentId);
|
|
198
|
+
if (!agent) return this.errorResult('NOT_FOUND', `Unknown: ${agentId}`, false);
|
|
199
|
+
|
|
200
|
+
const start = Date.now();
|
|
201
|
+
try {
|
|
202
|
+
const result = await agent.run(payload.handoff?.instruction || '');
|
|
203
|
+
return this.successResult(result, Date.now() - start);
|
|
204
|
+
} catch (e: any) {
|
|
205
|
+
return this.errorResult('ERROR', e.message, true, e);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## 8. Run Tests
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
npx ts-node test-standalone.ts # 79 core tests
|
|
217
|
+
npx ts-node test-security.ts # 33 security tests
|
|
218
|
+
npx ts-node test-adapters.ts # 100+ adapter tests (all 12 frameworks)
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## 9. Commands Reference
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
npx ts-node setup.ts --check # Verify installation
|
|
227
|
+
npx ts-node setup.ts --list # List all 12 adapters
|
|
228
|
+
npx ts-node setup.ts --example # Generate example.ts
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## Architecture
|
|
234
|
+
|
|
235
|
+
```
|
|
236
|
+
Your App
|
|
237
|
+
└── SwarmOrchestrator (index.ts)
|
|
238
|
+
├── SharedBlackboard — Shared state across agents
|
|
239
|
+
├── AuthGuardian — Trust & permissions
|
|
240
|
+
├── TaskDecomposer — Break tasks into subtasks
|
|
241
|
+
├── BlackboardValidator — Quality gate (Layer 1)
|
|
242
|
+
├── QualityGateAgent — AI review (Layer 2)
|
|
243
|
+
└── AdapterRegistry — Routes to any framework
|
|
244
|
+
├── CustomAdapter ─── your functions / HTTP
|
|
245
|
+
├── LangChainAdapter ─── LangChain / LangGraph
|
|
246
|
+
├── AutoGenAdapter ─── Microsoft AutoGen
|
|
247
|
+
├── CrewAIAdapter ─── CrewAI crews
|
|
248
|
+
├── MCPAdapter ─── Model Context Protocol
|
|
249
|
+
├── OpenClawAdapter ─── OpenClaw skills
|
|
250
|
+
├── LlamaIndexAdapter ─── LlamaIndex engines
|
|
251
|
+
├── SemanticKernelAdapter── Semantic Kernel
|
|
252
|
+
├── OpenAIAssistantsAdapter── OpenAI Assistants
|
|
253
|
+
├── HaystackAdapter ─── Haystack pipelines
|
|
254
|
+
├── DSPyAdapter ─── DSPy modules
|
|
255
|
+
└── AgnoAdapter ─── Agno agents/teams
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
**Questions?** Open an issue at [github.com/jovanSAPFIONEER/Network-AI](https://github.com/jovanSAPFIONEER/Network-AI)
|