network-ai 5.8.3 → 5.8.4

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.
@@ -564,4 +564,4 @@ Run these before declaring the integration production-ready:
564
564
 
565
565
  ---
566
566
 
567
- *Network-AI v5.8.3 · MIT License · https://github.com/Jovancoding/Network-AI*
567
+ *Network-AI v5.8.4 · MIT License · https://github.com/Jovancoding/Network-AI*
package/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  [![Website](https://img.shields.io/badge/website-network--ai.org-4b9df2?style=flat&logo=web&logoColor=white)](https://network-ai.org/)
6
6
  [![CI](https://github.com/Jovancoding/Network-AI/actions/workflows/ci.yml/badge.svg)](https://github.com/Jovancoding/Network-AI/actions/workflows/ci.yml)
7
7
  [![CodeQL](https://github.com/Jovancoding/Network-AI/actions/workflows/codeql.yml/badge.svg)](https://github.com/Jovancoding/Network-AI/actions/workflows/codeql.yml)
8
- [![Release](https://img.shields.io/badge/release-v5.8.3-blue.svg)](https://github.com/Jovancoding/Network-AI/releases)
8
+ [![Release](https://img.shields.io/badge/release-v5.8.4-blue.svg)](https://github.com/Jovancoding/Network-AI/releases)
9
9
  [![npm](https://img.shields.io/npm/dw/network-ai.svg?label=npm%20downloads)](https://www.npmjs.com/package/network-ai)
10
10
  [![Tests](https://img.shields.io/badge/tests-3136%20passing-brightgreen.svg)](#testing)
11
11
  [![Adapters](https://img.shields.io/badge/frameworks-29%20supported-blueviolet.svg)](#adapter-system)
package/SKILL.md CHANGED
@@ -6,7 +6,7 @@ metadata:
6
6
  emoji: "\U0001F41D"
7
7
  homepage: https://network-ai.org
8
8
  capabilities:
9
- filesystem: "read/write — project root `swarm-blackboard.md` (blackboard state), `data/pending_changes/<id>.json` (WAL entries), `data/audit_log.jsonl`, `data/active_grants.json`, `data/.signing_key`, `data/project-context.json`, `data/task_tracking.json`, `data/agent_health.json`, `data/budget_tracking.json`. All paths are local; nothing is transmitted over the network. When NETWORK_AI_ENV is set, data paths are rooted at `data/<env>/` instead of `data/`."
9
+ filesystem: "read/write — project root `swarm-blackboard.md` (blackboard state), `data/pending_changes/<id>.json` (WAL entries), `data/audit_log.jsonl`, `data/active_grants.json`, `data/.signing_key`, `data/project-context.json`, `data/task_tracking.json`, `data/agent_health.json`, `data/budget_tracking.json`. All paths are local; nothing is transmitted over the network. When NETWORK_AI_ENV is set, data paths are rooted at `data/<env>/` instead of `data/`. The `--path` argument in blackboard.py is validated against the project root at runtime — paths outside the project directory are rejected (CWE-22)."
10
10
  env_vars: "read — NETWORK_AI_ENV (environment routing), NETWORK_AI_MCP_SECRET (MCP bearer auth), NETWORK_AI_MINIMAL (minimal-mode flag). No env vars are written."
11
11
  shell_exec: "optional — AgentRuntime (lib/agent-runtime.ts) with SandboxPolicy and ApprovalGate; disabled by default. Never auto-enabled by this skill. auto_approve must NOT be set in production (see auto_approve_warning below)."
12
12
  tcp_port: "optional — MCP SSE server (bin/mcp-server.ts) binds 127.0.0.1 only when explicitly started by the operator. Requires a non-empty bearer-token secret. Never auto-started by this skill or any bundled Python script."
@@ -754,7 +754,7 @@ The following findings are drawn from the **MAESTRO Agent Security Threat** fram
754
754
 
755
755
  | Control | How Network-AI addresses it |
756
756
  |---|---|
757
- | **Exact version pinning** | npm `package.json` uses exact `"version": "5.8.3"` — no semver range specifiers; `clawhub install network-ai` pins to a specific published version |
757
+ | **Exact version pinning** | npm `package.json` uses exact `"version": "5.8.4"` — no semver range specifiers; `clawhub install network-ai` pins to a specific published version |
758
758
  | **Zero transitive dependency drift** | All bundled Python scripts use Python stdlib only — `pip install` is never required; there are no third-party packages to drift, be compromised upstream, or introduce CVEs |
759
759
  | **Signed, tagged releases** | Every release is committed with a signed Git tag (`v5.7.x`); commit hash is verifiable against CHANGELOG.md; GitHub releases link tag → diff → changelog entry |
760
760
  | **Supply chain monitoring** | npm package continuously scored by Socket.dev (score A); any new dependency or permission change triggers an alert |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "network-ai",
3
- "version": "5.8.3",
3
+ "version": "5.8.4",
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",
@@ -3,6 +3,8 @@
3
3
  # All I/O is local file operations only:
4
4
  # READS: swarm-blackboard.md, data/pending_changes/<id>.json
5
5
  # WRITES: swarm-blackboard.md, data/pending_changes/<id>.json
6
+ # --path is accepted for environment routing but is validated against the project
7
+ # root directory; paths outside the project directory are rejected (CWE-22).
6
8
  # Imports used: argparse, json, os, re, sys, time, hashlib, datetime, pathlib,
7
9
  # typing, contextlib, fcntl (Unix file-lock only, no network use)
8
10
  # No imports of: requests, socket, subprocess, urllib, http, ssl, ftplib, smtplib
@@ -677,7 +679,7 @@ Examples:
677
679
  "--path",
678
680
  type=Path,
679
681
  default=BLACKBOARD_PATH,
680
- help="Path to blackboard file"
682
+ help="Path to blackboard file (must be inside the project directory)",
681
683
  )
682
684
  parser.add_argument(
683
685
  "--env",
@@ -690,6 +692,20 @@ Examples:
690
692
  if args.env:
691
693
  _data = _resolve_data_dir(args.env)
692
694
  args.path = _data / "swarm-blackboard.md"
695
+
696
+ # Validate --path against the project root to prevent path traversal (CWE-22).
697
+ # Resolving symlinks before comparison ensures traversal via symlinks is also blocked.
698
+ _project_root = Path(__file__).parent.parent.resolve()
699
+ try:
700
+ args.path.resolve().relative_to(_project_root)
701
+ except ValueError:
702
+ print(
703
+ f"Error: --path must be inside the project directory ({_project_root}). "
704
+ f"Got: {args.path.resolve()}",
705
+ file=sys.stderr,
706
+ )
707
+ sys.exit(1)
708
+
693
709
  bb = SharedBlackboard(args.path)
694
710
 
695
711
  try: