network-ai 5.13.3 → 5.14.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 +6 -3
- package/QUICKSTART.md +9 -4
- package/README.md +66 -15
- package/SKILL.md +1 -1
- package/bin/cli.ts +73 -0
- package/bin/mcp-server.ts +15 -1
- package/dist/adapters/aps-adapter.d.ts +6 -2
- package/dist/adapters/aps-adapter.d.ts.map +1 -1
- package/dist/adapters/aps-adapter.js +20 -6
- package/dist/adapters/aps-adapter.js.map +1 -1
- package/dist/adapters/claude-agent-sdk-adapter.d.ts +100 -0
- package/dist/adapters/claude-agent-sdk-adapter.d.ts.map +1 -0
- package/dist/adapters/claude-agent-sdk-adapter.js +204 -0
- package/dist/adapters/claude-agent-sdk-adapter.js.map +1 -0
- package/dist/adapters/gemini-adapter.d.ts +124 -0
- package/dist/adapters/gemini-adapter.d.ts.map +1 -0
- package/dist/adapters/gemini-adapter.js +239 -0
- package/dist/adapters/gemini-adapter.js.map +1 -0
- package/dist/adapters/index.d.ts +6 -0
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +10 -1
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/openai-responses-adapter.d.ts +119 -0
- package/dist/adapters/openai-responses-adapter.d.ts.map +1 -0
- package/dist/adapters/openai-responses-adapter.js +235 -0
- package/dist/adapters/openai-responses-adapter.js.map +1 -0
- package/dist/bin/cli.js +72 -0
- package/dist/bin/cli.js.map +1 -1
- package/dist/bin/mcp-server.js +14 -1
- package/dist/bin/mcp-server.js.map +1 -1
- package/dist/esm/adapters/aps-adapter.js +20 -6
- package/dist/esm/adapters/aps-adapter.js.map +1 -1
- package/dist/esm/adapters/claude-agent-sdk-adapter.js +204 -0
- package/dist/esm/adapters/claude-agent-sdk-adapter.js.map +1 -0
- package/dist/esm/adapters/gemini-adapter.js +239 -0
- package/dist/esm/adapters/gemini-adapter.js.map +1 -0
- package/dist/esm/adapters/index.js +10 -1
- package/dist/esm/adapters/index.js.map +1 -1
- package/dist/esm/adapters/openai-responses-adapter.js +235 -0
- package/dist/esm/adapters/openai-responses-adapter.js.map +1 -0
- package/dist/esm/index.js +13 -5
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/a2a-server.js +293 -0
- package/dist/esm/lib/a2a-server.js.map +1 -0
- package/dist/esm/lib/approval-inbox.js +48 -15
- package/dist/esm/lib/approval-inbox.js.map +1 -1
- package/dist/esm/lib/claude-hooks.js +307 -0
- package/dist/esm/lib/claude-hooks.js.map +1 -0
- package/dist/esm/lib/mcp-elicitation.js +198 -0
- package/dist/esm/lib/mcp-elicitation.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -5
- package/dist/index.js.map +1 -1
- package/dist/lib/a2a-server.d.ts +120 -0
- package/dist/lib/a2a-server.d.ts.map +1 -0
- package/dist/lib/a2a-server.js +293 -0
- package/dist/lib/a2a-server.js.map +1 -0
- package/dist/lib/approval-inbox.d.ts +29 -5
- package/dist/lib/approval-inbox.d.ts.map +1 -1
- package/dist/lib/approval-inbox.js +48 -15
- package/dist/lib/approval-inbox.js.map +1 -1
- package/dist/lib/claude-hooks.d.ts +150 -0
- package/dist/lib/claude-hooks.d.ts.map +1 -0
- package/dist/lib/claude-hooks.js +307 -0
- package/dist/lib/claude-hooks.js.map +1 -0
- package/dist/lib/mcp-elicitation.d.ts +116 -0
- package/dist/lib/mcp-elicitation.d.ts.map +1 -0
- package/dist/lib/mcp-elicitation.js +198 -0
- package/dist/lib/mcp-elicitation.js.map +1 -0
- package/package.json +6 -5
- package/scripts/blackboard.py +11 -4
- package/scripts/clawhub-publish.js +136 -0
- package/socket.json +1 -1
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "network-ai",
|
|
3
|
-
"version": "5.
|
|
4
|
-
"description": "AI agent orchestration framework for TypeScript/Node.js -
|
|
3
|
+
"version": "5.14.0",
|
|
4
|
+
"description": "AI agent orchestration framework for TypeScript/Node.js - 32 adapters (LangChain, AutoGen, CrewAI, OpenAI Assistants, OpenAI Responses, LlamaIndex, Semantic Kernel, Haystack, DSPy, Agno, MCP, OpenClaw, A2A, Codex, MiniMax, NemoClaw, APS, Copilot, LangGraph, Anthropic Computer Use, Claude Agent SDK, OpenAI Agents SDK, Vertex AI, Gemini, 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",
|
|
7
7
|
"module": "dist/esm/index.js",
|
|
@@ -73,7 +73,8 @@
|
|
|
73
73
|
"socket:check": "node scripts/socket-check.js",
|
|
74
74
|
"socket:check:local": "node scripts/socket-check.js --local",
|
|
75
75
|
"codeql:check": "node scripts/codeql-check.js",
|
|
76
|
-
"clawhub:check": "node scripts/clawhub-check.js"
|
|
76
|
+
"clawhub:check": "node scripts/clawhub-check.js",
|
|
77
|
+
"clawhub:publish": "node scripts/clawhub-publish.js"
|
|
77
78
|
},
|
|
78
79
|
"keywords": [
|
|
79
80
|
"ai-agents",
|
|
@@ -126,9 +127,9 @@
|
|
|
126
127
|
"python": ">=3.9"
|
|
127
128
|
},
|
|
128
129
|
"devDependencies": {
|
|
129
|
-
"@types/node": "^26.0.
|
|
130
|
+
"@types/node": "^26.0.1",
|
|
130
131
|
"dotenv": "^17.4.2",
|
|
131
|
-
"openai": "^6.
|
|
132
|
+
"openai": "^6.45.0",
|
|
132
133
|
"ts-node": "^10.9.2",
|
|
133
134
|
"typescript": "^6.0.3"
|
|
134
135
|
},
|
package/scripts/blackboard.py
CHANGED
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
2
|
# SECURITY: This script makes NO network calls and spawns NO subprocesses.
|
|
3
3
|
# All I/O is local file operations only:
|
|
4
|
-
# READS: swarm-blackboard.md,
|
|
5
|
-
#
|
|
4
|
+
# READS: <data_dir>/swarm-blackboard.md, <data_dir>/pending_changes/<id>.json,
|
|
5
|
+
# <data_dir>/.blackboard.lock
|
|
6
|
+
# WRITES: <data_dir>/swarm-blackboard.md, <data_dir>/pending_changes/<id>.json,
|
|
7
|
+
# <data_dir>/.blackboard.lock
|
|
8
|
+
# where <data_dir> is "data/" by default, or "data/<env>/" when NETWORK_AI_ENV
|
|
9
|
+
# is set or --env is passed (env in: dev|st|sit|qa|sandbox|preprod|prod). This
|
|
10
|
+
# only changes WHICH data/ subdirectory is used — no path outside the project
|
|
11
|
+
# root is ever read or written (see the --path check below).
|
|
6
12
|
# --path controls the blackboard file path only and is validated against the project
|
|
7
13
|
# root directory; paths outside the project directory are rejected (CWE-22).
|
|
8
|
-
# Lock files and pending-change files always resolve from the
|
|
9
|
-
# regardless of --path; only the main blackboard file path is
|
|
14
|
+
# Lock files and pending-change files always resolve from the active env-scoped
|
|
15
|
+
# data directory regardless of --path; only the main blackboard file path is
|
|
16
|
+
# affected by --path.
|
|
10
17
|
# Imports used: argparse, json, os, re, sys, time, hashlib, datetime, pathlib,
|
|
11
18
|
# typing, contextlib, fcntl (Unix file-lock only, no network use)
|
|
12
19
|
# No imports of: requests, socket, subprocess, urllib, http, ssl, ftplib, smtplib
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* clawhub-publish.js — ClawHub skill publisher for network-ai
|
|
4
|
+
*
|
|
5
|
+
* ClawHub CLI v0.23+ detects package.json in the repo root and refuses
|
|
6
|
+
* `clawhub skill publish .` ("This looks like a plugin"). This script works
|
|
7
|
+
* around that by staging the 12 bundle files into a temp directory (no
|
|
8
|
+
* package.json) and publishing from there.
|
|
9
|
+
*
|
|
10
|
+
* Usage: node scripts/clawhub-publish.js [--dry-run] [--changelog "text"]
|
|
11
|
+
* npm run clawhub:publish
|
|
12
|
+
* npm run clawhub:publish -- --dry-run
|
|
13
|
+
* npm run clawhub:publish -- --changelog "my changelog text"
|
|
14
|
+
*
|
|
15
|
+
* The version, slug, and name are read from skill.json automatically.
|
|
16
|
+
* Source provenance (repo / commit / ref) is read from git automatically.
|
|
17
|
+
* Exit: 0 = published 1 = error
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
'use strict';
|
|
21
|
+
|
|
22
|
+
const fs = require('fs');
|
|
23
|
+
const os = require('os');
|
|
24
|
+
const path = require('path');
|
|
25
|
+
const { execSync, spawnSync } = require('child_process');
|
|
26
|
+
|
|
27
|
+
const ROOT = path.join(__dirname, '..');
|
|
28
|
+
|
|
29
|
+
// ── Files to stage (must match clawhub-check.js ALLOW_FILES) ─────────────────
|
|
30
|
+
const STAGE_FILES = [
|
|
31
|
+
'.clawhubignore',
|
|
32
|
+
'.clawignore',
|
|
33
|
+
'SKILL.md',
|
|
34
|
+
'requirements.txt',
|
|
35
|
+
'skill.json',
|
|
36
|
+
'swarm-blackboard.md',
|
|
37
|
+
'scripts/blackboard.py',
|
|
38
|
+
'scripts/check_permission.py',
|
|
39
|
+
'scripts/context_manager.py',
|
|
40
|
+
'scripts/revoke_token.py',
|
|
41
|
+
'scripts/swarm_guard.py',
|
|
42
|
+
'scripts/validate_token.py',
|
|
43
|
+
];
|
|
44
|
+
|
|
45
|
+
const SKILL_NAME = 'Network-AI';
|
|
46
|
+
const SKILL_SLUG = 'network-ai';
|
|
47
|
+
|
|
48
|
+
const c = {
|
|
49
|
+
reset: '\x1b[0m', bold: '\x1b[1m', red: '\x1b[31m',
|
|
50
|
+
green: '\x1b[32m', cyan: '\x1b[36m', gray: '\x1b[90m',
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
// ── Parse CLI args ────────────────────────────────────────────────────────────
|
|
54
|
+
const args = process.argv.slice(2);
|
|
55
|
+
const dryRun = args.includes('--dry-run');
|
|
56
|
+
const clIdx = args.indexOf('--changelog');
|
|
57
|
+
const changelog = clIdx !== -1 ? args[clIdx + 1] : undefined;
|
|
58
|
+
|
|
59
|
+
// ── Read version from skill.json ──────────────────────────────────────────────
|
|
60
|
+
const skillJson = JSON.parse(fs.readFileSync(path.join(ROOT, 'skill.json'), 'utf8'));
|
|
61
|
+
const version = skillJson.version;
|
|
62
|
+
if (!version) { console.error(`${c.red}skill.json missing "version"${c.reset}`); process.exit(1); }
|
|
63
|
+
|
|
64
|
+
// ── Read git provenance ───────────────────────────────────────────────────────
|
|
65
|
+
function git(cmd) {
|
|
66
|
+
try { return execSync(`git -C "${ROOT}" ${cmd}`, { stdio: ['pipe','pipe','pipe'] }).toString().trim(); }
|
|
67
|
+
catch { return undefined; }
|
|
68
|
+
}
|
|
69
|
+
const sourceCommit = git('rev-parse --short HEAD');
|
|
70
|
+
const sourceRef = git('describe --tags --exact-match HEAD') ? `refs/tags/${git('describe --tags --exact-match HEAD')}` : git('rev-parse --abbrev-ref HEAD');
|
|
71
|
+
const remoteUrl = git('remote get-url origin') || '';
|
|
72
|
+
const repoMatch = remoteUrl.match(/github\.com[:/](.+?)(?:\.git)?$/);
|
|
73
|
+
const sourceRepo = repoMatch ? repoMatch[1] : undefined;
|
|
74
|
+
|
|
75
|
+
// ── Create staging directory ──────────────────────────────────────────────────
|
|
76
|
+
const stage = path.join(os.tmpdir(), 'network-ai-skill-publish');
|
|
77
|
+
if (fs.existsSync(stage)) fs.rmSync(stage, { recursive: true });
|
|
78
|
+
fs.mkdirSync(stage);
|
|
79
|
+
fs.mkdirSync(path.join(stage, 'scripts'));
|
|
80
|
+
|
|
81
|
+
for (const rel of STAGE_FILES) {
|
|
82
|
+
const src = path.join(ROOT, rel);
|
|
83
|
+
const dst = path.join(stage, rel);
|
|
84
|
+
if (fs.existsSync(src)) {
|
|
85
|
+
fs.copyFileSync(src, dst);
|
|
86
|
+
} else {
|
|
87
|
+
console.warn(`${c.gray} skipped (not found): ${rel}${c.reset}`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// ── Build clawhub command ─────────────────────────────────────────────────────
|
|
92
|
+
// NOTE: spawnSync(..., { shell: true }) does NOT auto-quote array elements —
|
|
93
|
+
// any argument containing a space is split into multiple shell tokens by
|
|
94
|
+
// cmd.exe, which the clawhub CLI then rejects as extra positional arguments.
|
|
95
|
+
// quoteArg() wraps any element that needs it so it survives the shell hop.
|
|
96
|
+
function quoteArg(arg) {
|
|
97
|
+
const str = String(arg);
|
|
98
|
+
if (str === '' || /[\s"()&|<>^]/.test(str)) {
|
|
99
|
+
return `"${str.replace(/"/g, '\\"')}"`;
|
|
100
|
+
}
|
|
101
|
+
return str;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const cmd = ['clawhub', 'skill', 'publish', stage,
|
|
105
|
+
'--slug', SKILL_SLUG,
|
|
106
|
+
'--name', SKILL_NAME,
|
|
107
|
+
'--version', version,
|
|
108
|
+
'--tags', 'latest',
|
|
109
|
+
];
|
|
110
|
+
if (changelog) cmd.push('--changelog', changelog);
|
|
111
|
+
if (sourceRepo) cmd.push('--source-repo', sourceRepo);
|
|
112
|
+
if (sourceCommit) cmd.push('--source-commit', sourceCommit);
|
|
113
|
+
if (sourceRef) cmd.push('--source-ref', sourceRef);
|
|
114
|
+
if (dryRun) cmd.push('--dry-run');
|
|
115
|
+
|
|
116
|
+
console.log(`\n${c.bold}ClawHub Skill Publish${c.reset}`);
|
|
117
|
+
console.log(`${'─'.repeat(50)}`);
|
|
118
|
+
console.log(` Skill : ${SKILL_NAME} (${SKILL_SLUG})`);
|
|
119
|
+
console.log(` Version: ${version}${dryRun ? ' [dry-run]' : ''}`);
|
|
120
|
+
console.log(` Commit : ${sourceCommit || '(unknown)'}`);
|
|
121
|
+
console.log(` Ref : ${sourceRef || '(unknown)'}`);
|
|
122
|
+
console.log(` Staged : ${STAGE_FILES.length} files → ${stage}`);
|
|
123
|
+
console.log(`${'─'.repeat(50)}\n`);
|
|
124
|
+
|
|
125
|
+
// ── Publish ───────────────────────────────────────────────────────────────────
|
|
126
|
+
const quotedCmd = process.platform === 'win32' ? cmd.map(quoteArg) : cmd;
|
|
127
|
+
const result = spawnSync('npx', quotedCmd, { cwd: ROOT, stdio: 'inherit', shell: true });
|
|
128
|
+
|
|
129
|
+
// ── Cleanup ───────────────────────────────────────────────────────────────────
|
|
130
|
+
fs.rmSync(stage, { recursive: true });
|
|
131
|
+
|
|
132
|
+
if (result.status !== 0) {
|
|
133
|
+
console.error(`\n${c.red}✖ publish failed (exit ${result.status})${c.reset}`);
|
|
134
|
+
process.exit(result.status ?? 1);
|
|
135
|
+
}
|
|
136
|
+
console.log(`\n${c.green}✔ Published ${SKILL_SLUG}@${version}${c.reset}\n`);
|
package/socket.json
CHANGED
|
@@ -124,7 +124,7 @@
|
|
|
124
124
|
},
|
|
125
125
|
{
|
|
126
126
|
"path": "adapters/adapter-registry.ts",
|
|
127
|
-
"reason": "Intentional — adapter-registry re-exports all
|
|
127
|
+
"reason": "Intentional — adapter-registry re-exports all 32 adapters; Socket.dev's import-graph analysis flags it because it transitively references adapters that use fetch. No direct HTTP calls are made here."
|
|
128
128
|
},
|
|
129
129
|
{
|
|
130
130
|
"path": "dist/adapters/adapter-registry.js",
|