network-ai 5.13.4 → 5.15.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 (73) hide show
  1. package/INTEGRATION_GUIDE.md +6 -3
  2. package/QUICKSTART.md +9 -4
  3. package/README.md +72 -15
  4. package/SKILL.md +1 -1
  5. package/bin/cli.ts +73 -0
  6. package/bin/mcp-server.ts +24 -1
  7. package/dist/adapters/claude-agent-sdk-adapter.d.ts +100 -0
  8. package/dist/adapters/claude-agent-sdk-adapter.d.ts.map +1 -0
  9. package/dist/adapters/claude-agent-sdk-adapter.js +204 -0
  10. package/dist/adapters/claude-agent-sdk-adapter.js.map +1 -0
  11. package/dist/adapters/gemini-adapter.d.ts +124 -0
  12. package/dist/adapters/gemini-adapter.d.ts.map +1 -0
  13. package/dist/adapters/gemini-adapter.js +239 -0
  14. package/dist/adapters/gemini-adapter.js.map +1 -0
  15. package/dist/adapters/index.d.ts +6 -0
  16. package/dist/adapters/index.d.ts.map +1 -1
  17. package/dist/adapters/index.js +10 -1
  18. package/dist/adapters/index.js.map +1 -1
  19. package/dist/adapters/openai-responses-adapter.d.ts +119 -0
  20. package/dist/adapters/openai-responses-adapter.d.ts.map +1 -0
  21. package/dist/adapters/openai-responses-adapter.js +235 -0
  22. package/dist/adapters/openai-responses-adapter.js.map +1 -0
  23. package/dist/bin/cli.js +72 -0
  24. package/dist/bin/cli.js.map +1 -1
  25. package/dist/bin/mcp-server.js +22 -1
  26. package/dist/bin/mcp-server.js.map +1 -1
  27. package/dist/esm/adapters/claude-agent-sdk-adapter.js +204 -0
  28. package/dist/esm/adapters/claude-agent-sdk-adapter.js.map +1 -0
  29. package/dist/esm/adapters/gemini-adapter.js +239 -0
  30. package/dist/esm/adapters/gemini-adapter.js.map +1 -0
  31. package/dist/esm/adapters/index.js +10 -1
  32. package/dist/esm/adapters/index.js.map +1 -1
  33. package/dist/esm/adapters/openai-responses-adapter.js +235 -0
  34. package/dist/esm/adapters/openai-responses-adapter.js.map +1 -0
  35. package/dist/esm/index.js +20 -5
  36. package/dist/esm/index.js.map +1 -1
  37. package/dist/esm/lib/a2a-server.js +293 -0
  38. package/dist/esm/lib/a2a-server.js.map +1 -0
  39. package/dist/esm/lib/claude-hooks.js +307 -0
  40. package/dist/esm/lib/claude-hooks.js.map +1 -0
  41. package/dist/esm/lib/context-composer.js +332 -0
  42. package/dist/esm/lib/context-composer.js.map +1 -0
  43. package/dist/esm/lib/mcp-elicitation.js +198 -0
  44. package/dist/esm/lib/mcp-elicitation.js.map +1 -0
  45. package/dist/esm/lib/mcp-tools-context.js +266 -0
  46. package/dist/esm/lib/mcp-tools-context.js.map +1 -0
  47. package/dist/index.d.ts +10 -0
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +20 -5
  50. package/dist/index.js.map +1 -1
  51. package/dist/lib/a2a-server.d.ts +120 -0
  52. package/dist/lib/a2a-server.d.ts.map +1 -0
  53. package/dist/lib/a2a-server.js +293 -0
  54. package/dist/lib/a2a-server.js.map +1 -0
  55. package/dist/lib/claude-hooks.d.ts +150 -0
  56. package/dist/lib/claude-hooks.d.ts.map +1 -0
  57. package/dist/lib/claude-hooks.js +307 -0
  58. package/dist/lib/claude-hooks.js.map +1 -0
  59. package/dist/lib/context-composer.d.ts +187 -0
  60. package/dist/lib/context-composer.d.ts.map +1 -0
  61. package/dist/lib/context-composer.js +332 -0
  62. package/dist/lib/context-composer.js.map +1 -0
  63. package/dist/lib/mcp-elicitation.d.ts +116 -0
  64. package/dist/lib/mcp-elicitation.d.ts.map +1 -0
  65. package/dist/lib/mcp-elicitation.js +198 -0
  66. package/dist/lib/mcp-elicitation.js.map +1 -0
  67. package/dist/lib/mcp-tools-context.d.ts +77 -0
  68. package/dist/lib/mcp-tools-context.d.ts.map +1 -0
  69. package/dist/lib/mcp-tools-context.js +266 -0
  70. package/dist/lib/mcp-tools-context.js.map +1 -0
  71. package/package.json +2 -2
  72. package/scripts/clawhub-publish.js +14 -1
  73. package/socket.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-elicitation.js","sourceRoot":"","sources":["../../lib/mcp-elicitation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * MCP Context Tools — signal-over-noise retrieval for MCP agents.
3
+ *
4
+ * Two tools that let any MCP client (Claude Code, Codex, Gemini CLI, Cursor)
5
+ * pull *curated* shared state instead of dumping the whole blackboard into
6
+ * its own context window:
7
+ *
8
+ * - `context_pack` — "give me everything relevant to task X in
9
+ * ≤ N tokens": a token-budgeted, relevance-ranked, position-aware
10
+ * context brief assembled by {@link ContextComposer} from the agent's
11
+ * scoped blackboard snapshot.
12
+ * - `blackboard_search` — ranked top-K search over blackboard entries.
13
+ * Uses a semantic ranker when one is wired (BYOE `SemanticMemory`),
14
+ * falling back to deterministic lexical overlap scoring otherwise —
15
+ * always works out of the box.
16
+ *
17
+ * Implements the same `McpToolProvider` contract as the other tool modules,
18
+ * so it registers directly on `McpCombinedBridge`.
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * const contextTools = new ContextMcpTools({ blackboard });
23
+ * combined.register(contextTools);
24
+ * // MCP client: context_pack { task: "fix the parser bug", budget_tokens: 1500, agent_id: "claude-code" }
25
+ * ```
26
+ *
27
+ * @module mcp-tools-context
28
+ * @version 1.0.0
29
+ */
30
+ import type { MCPToolDefinition, BlackboardToolResult, IBlackboard } from './mcp-blackboard-tools';
31
+ import { ContextComposer, type SemanticSearchLike } from './context-composer';
32
+ /** Options for {@link ContextMcpTools}. */
33
+ export interface ContextMcpToolsOptions {
34
+ /** The blackboard to compose/search over (required) */
35
+ blackboard: IBlackboard;
36
+ /**
37
+ * Optional BYOE semantic memory. When provided, `blackboard_search` and
38
+ * `context_pack` rank by embedding similarity; otherwise both fall back
39
+ * to deterministic lexical scoring.
40
+ */
41
+ memory?: SemanticSearchLike;
42
+ /** Optional pre-configured composer (default: `new ContextComposer()`) */
43
+ composer?: ContextComposer;
44
+ /** Default token budget for `context_pack` when the caller omits one (default 2000) */
45
+ defaultBudgetTokens?: number;
46
+ /** Hard ceiling on any requested budget (default 32000) */
47
+ maxBudgetTokens?: number;
48
+ }
49
+ /** MCP tool definitions for the two context tools. */
50
+ export declare const CONTEXT_TOOL_DEFINITIONS: MCPToolDefinition[];
51
+ /**
52
+ * `McpToolProvider` exposing `context_pack` and `blackboard_search`.
53
+ * Register on a `McpCombinedBridge` alongside the other tool providers.
54
+ */
55
+ export declare class ContextMcpTools {
56
+ private readonly blackboard;
57
+ private readonly composer;
58
+ private readonly ranker;
59
+ private readonly semantic;
60
+ private readonly defaultBudgetTokens;
61
+ private readonly maxBudgetTokens;
62
+ constructor(options: ContextMcpToolsOptions);
63
+ /** Returns the MCP tool definitions provided by this module. */
64
+ getDefinitions(): MCPToolDefinition[];
65
+ /**
66
+ * Dispatch a tool call by name. All errors are caught and returned as
67
+ * `{ ok: false, error }`.
68
+ */
69
+ call(toolName: string, args: Record<string, unknown>): Promise<BlackboardToolResult>;
70
+ private _pack;
71
+ private _search;
72
+ private _snapshot;
73
+ private _requireString;
74
+ /** Accept number or numeric string; clamp into [min, max]; fall back to a default. */
75
+ private _clampNumber;
76
+ }
77
+ //# sourceMappingURL=mcp-tools-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-tools-context.d.ts","sourceRoot":"","sources":["../../lib/mcp-tools-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACnG,OAAO,EACL,eAAe,EAKf,KAAK,kBAAkB,EACxB,MAAM,oBAAoB,CAAC;AAM5B,2CAA2C;AAC3C,MAAM,WAAW,sBAAsB;IACrC,uDAAuD;IACvD,UAAU,EAAE,WAAW,CAAC;IACxB;;;;OAIG;IACH,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,uFAAuF;IACvF,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,2DAA2D;IAC3D,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAMD,sDAAsD;AACtD,eAAO,MAAM,wBAAwB,EAAE,iBAAiB,EAsEvD,CAAC;AAMF;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAc;IACzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;IACpD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAC7C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;gBAE7B,OAAO,EAAE,sBAAsB;IAgB3C,gEAAgE;IAChE,cAAc,IAAI,iBAAiB,EAAE;IAIrC;;;OAGG;IACG,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,oBAAoB,CAAC;YAqB5E,KAAK;YAwCL,OAAO;IA2CrB,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,cAAc;IAQtB,sFAAsF;IACtF,OAAO,CAAC,YAAY;CAQrB"}
@@ -0,0 +1,266 @@
1
+ "use strict";
2
+ /**
3
+ * MCP Context Tools — signal-over-noise retrieval for MCP agents.
4
+ *
5
+ * Two tools that let any MCP client (Claude Code, Codex, Gemini CLI, Cursor)
6
+ * pull *curated* shared state instead of dumping the whole blackboard into
7
+ * its own context window:
8
+ *
9
+ * - `context_pack` — "give me everything relevant to task X in
10
+ * ≤ N tokens": a token-budgeted, relevance-ranked, position-aware
11
+ * context brief assembled by {@link ContextComposer} from the agent's
12
+ * scoped blackboard snapshot.
13
+ * - `blackboard_search` — ranked top-K search over blackboard entries.
14
+ * Uses a semantic ranker when one is wired (BYOE `SemanticMemory`),
15
+ * falling back to deterministic lexical overlap scoring otherwise —
16
+ * always works out of the box.
17
+ *
18
+ * Implements the same `McpToolProvider` contract as the other tool modules,
19
+ * so it registers directly on `McpCombinedBridge`.
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * const contextTools = new ContextMcpTools({ blackboard });
24
+ * combined.register(contextTools);
25
+ * // MCP client: context_pack { task: "fix the parser bug", budget_tokens: 1500, agent_id: "claude-code" }
26
+ * ```
27
+ *
28
+ * @module mcp-tools-context
29
+ * @version 1.0.0
30
+ */
31
+ Object.defineProperty(exports, "__esModule", { value: true });
32
+ exports.ContextMcpTools = exports.CONTEXT_TOOL_DEFINITIONS = void 0;
33
+ const context_composer_1 = require("./context-composer");
34
+ // ============================================================================
35
+ // TOOL DEFINITIONS
36
+ // ============================================================================
37
+ /** MCP tool definitions for the two context tools. */
38
+ exports.CONTEXT_TOOL_DEFINITIONS = [
39
+ {
40
+ name: 'context_pack',
41
+ description: 'Assemble a token-budgeted, relevance-ranked context brief from the shared blackboard for a given task. ' +
42
+ 'Use this INSTEAD of blackboard_list + many blackboard_read calls: it returns only the entries most relevant ' +
43
+ 'to your task, ranked by semantic/lexical relevance, recency (half-life decay), and namespace affinity, ' +
44
+ 'assembled position-aware (strongest items first and last) under a hard token budget. ' +
45
+ 'Read-only — never modifies the blackboard. Returns {ok:true, text, used_tokens, budget_tokens, utilization, ' +
46
+ 'included:[{key,score,tokens}], excluded:[{key,reason}]}. The `text` field is ready to use as working context. ' +
47
+ 'Entries past their TTL are excluded automatically.',
48
+ inputSchema: {
49
+ type: 'object',
50
+ properties: {
51
+ task: {
52
+ type: 'string',
53
+ description: 'The task or question driving relevance ranking (e.g. "diagnose the failing payment webhook")',
54
+ },
55
+ agent_id: {
56
+ type: 'string',
57
+ description: 'The agent requesting the pack (used for scoped access checks and audit)',
58
+ },
59
+ budget_tokens: {
60
+ type: 'number',
61
+ description: 'Hard token budget for the returned context text (default 2000)',
62
+ },
63
+ scope_tags: {
64
+ type: 'string',
65
+ description: 'Optional comma-separated scope tags for namespace affinity (e.g. "task,analytics")',
66
+ },
67
+ max_items: {
68
+ type: 'number',
69
+ description: 'Optional hard cap on the number of included entries (0 = unlimited)',
70
+ },
71
+ },
72
+ required: ['task', 'agent_id'],
73
+ },
74
+ },
75
+ {
76
+ name: 'blackboard_search',
77
+ description: 'Search the shared blackboard for entries relevant to a query and return the top-K ranked matches. ' +
78
+ 'Use this instead of blackboard_list when you need *relevant* keys rather than *all* keys — it keeps noise ' +
79
+ 'out of your context window. Read-only. Ranks semantically when the server has an embedding provider wired, ' +
80
+ 'otherwise by deterministic lexical overlap (response includes which mode was used). ' +
81
+ 'Returns {ok:true, mode, results:[{key, score, snippet, sourceAgent}], count}. ' +
82
+ 'Follow up with blackboard_read for the full value of a specific key.',
83
+ inputSchema: {
84
+ type: 'object',
85
+ properties: {
86
+ query: {
87
+ type: 'string',
88
+ description: 'Natural-language search query (e.g. "budget decisions for Q3")',
89
+ },
90
+ agent_id: {
91
+ type: 'string',
92
+ description: 'The agent performing the search (used for scoped access checks)',
93
+ },
94
+ top_k: {
95
+ type: 'number',
96
+ description: 'Maximum number of results to return (default 5, max 50)',
97
+ },
98
+ min_score: {
99
+ type: 'number',
100
+ description: 'Minimum relevance score 0-1 (default 0)',
101
+ },
102
+ },
103
+ required: ['query', 'agent_id'],
104
+ },
105
+ },
106
+ ];
107
+ // ============================================================================
108
+ // CONTEXT MCP TOOLS
109
+ // ============================================================================
110
+ /**
111
+ * `McpToolProvider` exposing `context_pack` and `blackboard_search`.
112
+ * Register on a `McpCombinedBridge` alongside the other tool providers.
113
+ */
114
+ class ContextMcpTools {
115
+ blackboard;
116
+ composer;
117
+ ranker;
118
+ semantic;
119
+ defaultBudgetTokens;
120
+ maxBudgetTokens;
121
+ constructor(options) {
122
+ if (!options || !options.blackboard) {
123
+ throw new Error('ContextMcpTools: options.blackboard is required');
124
+ }
125
+ this.blackboard = options.blackboard;
126
+ this.semantic = Boolean(options.memory);
127
+ this.ranker = options.memory ? (0, context_composer_1.createSemanticMemoryRanker)(options.memory) : undefined;
128
+ this.composer = options.composer
129
+ ?? new context_composer_1.ContextComposer(this.ranker ? { ranker: this.ranker } : {});
130
+ this.defaultBudgetTokens = options.defaultBudgetTokens ?? 2000;
131
+ this.maxBudgetTokens = options.maxBudgetTokens ?? 32_000;
132
+ if (this.defaultBudgetTokens <= 0 || this.maxBudgetTokens <= 0) {
133
+ throw new Error('ContextMcpTools: token budgets must be > 0');
134
+ }
135
+ }
136
+ /** Returns the MCP tool definitions provided by this module. */
137
+ getDefinitions() {
138
+ return exports.CONTEXT_TOOL_DEFINITIONS;
139
+ }
140
+ /**
141
+ * Dispatch a tool call by name. All errors are caught and returned as
142
+ * `{ ok: false, error }`.
143
+ */
144
+ async call(toolName, args) {
145
+ try {
146
+ switch (toolName) {
147
+ case 'context_pack': return await this._pack(args);
148
+ case 'blackboard_search': return await this._search(args);
149
+ default:
150
+ return { ok: false, tool: toolName, error: `Unknown tool: "${toolName}"` };
151
+ }
152
+ }
153
+ catch (err) {
154
+ return {
155
+ ok: false,
156
+ tool: toolName,
157
+ error: err instanceof Error ? err.message : String(err),
158
+ };
159
+ }
160
+ }
161
+ // --------------------------------------------------------------------------
162
+ // Tool implementations
163
+ // --------------------------------------------------------------------------
164
+ async _pack(args) {
165
+ const task = this._requireString(args, 'task');
166
+ const agentId = this._requireString(args, 'agent_id');
167
+ const budget = this._clampNumber(args['budget_tokens'], this.defaultBudgetTokens, 1, this.maxBudgetTokens);
168
+ const maxItems = this._clampNumber(args['max_items'], 0, 0, 10_000);
169
+ const scopeTags = typeof args['scope_tags'] === 'string' && args['scope_tags'].trim() !== ''
170
+ ? args['scope_tags'].split(',').map((t) => t.trim()).filter(Boolean)
171
+ : undefined;
172
+ const sources = context_composer_1.ContextComposer.fromSnapshot(this._snapshot(agentId));
173
+ const pack = await this.composer.compose(sources, {
174
+ task,
175
+ budgetTokens: budget,
176
+ ...(scopeTags ? { scopeTags } : {}),
177
+ ...(maxItems > 0 ? { maxItems } : {}),
178
+ });
179
+ return {
180
+ ok: true,
181
+ tool: 'context_pack',
182
+ data: {
183
+ text: pack.text,
184
+ used_tokens: pack.usedTokens,
185
+ budget_tokens: pack.budgetTokens,
186
+ utilization: Number(pack.utilization.toFixed(3)),
187
+ mode: this.semantic ? 'semantic' : 'lexical',
188
+ included: pack.included.map((i) => ({
189
+ key: i.key,
190
+ score: Number(i.score.toFixed(3)),
191
+ tokens: i.tokens,
192
+ })),
193
+ excluded: pack.excluded.map((e) => ({
194
+ key: e.key,
195
+ reason: e.reason,
196
+ ...(e.score !== undefined ? { score: Number(e.score.toFixed(3)) } : {}),
197
+ })),
198
+ },
199
+ };
200
+ }
201
+ async _search(args) {
202
+ const query = this._requireString(args, 'query');
203
+ const agentId = this._requireString(args, 'agent_id');
204
+ const topK = this._clampNumber(args['top_k'], 5, 1, 50);
205
+ const minScore = this._clampNumber(args['min_score'], 0, 0, 1);
206
+ const sources = context_composer_1.ContextComposer.fromSnapshot(this._snapshot(agentId));
207
+ // Rank purely by relevance: reuse the composer with relevance-only
208
+ // weights and an unbounded budget, then take the top-K.
209
+ const ranked = await this.composer.compose(sources, {
210
+ task: query,
211
+ budgetTokens: this.maxBudgetTokens,
212
+ weights: { relevance: 1, recency: 0, affinity: 0 },
213
+ minScore: Math.max(minScore, 0.000_001), // drop zero-relevance items
214
+ positionAware: false,
215
+ });
216
+ const results = ranked.included
217
+ .slice(0, topK)
218
+ .map((i) => ({
219
+ key: i.key,
220
+ score: Number(i.relevance.toFixed(3)),
221
+ snippet: i.text.length > 240 ? `${i.text.slice(0, 240)}…` : i.text,
222
+ ...(i.sourceAgent ? { sourceAgent: i.sourceAgent } : {}),
223
+ }));
224
+ return {
225
+ ok: true,
226
+ tool: 'blackboard_search',
227
+ data: {
228
+ mode: this.semantic ? 'semantic' : 'lexical',
229
+ results,
230
+ count: results.length,
231
+ query_tokens: (0, context_composer_1.estimateTokens)(query),
232
+ },
233
+ };
234
+ }
235
+ // --------------------------------------------------------------------------
236
+ // Helpers
237
+ // --------------------------------------------------------------------------
238
+ _snapshot(agentId) {
239
+ if (this.blackboard.getScopedSnapshot) {
240
+ return this.blackboard.getScopedSnapshot(agentId);
241
+ }
242
+ return this.blackboard.getSnapshot();
243
+ }
244
+ _requireString(args, field) {
245
+ const val = args[field];
246
+ if (typeof val !== 'string' || val.trim() === '') {
247
+ throw new Error(`Missing required field "${field}" (must be a non-empty string)`);
248
+ }
249
+ return val;
250
+ }
251
+ /** Accept number or numeric string; clamp into [min, max]; fall back to a default. */
252
+ _clampNumber(raw, fallback, min, max) {
253
+ let n;
254
+ if (typeof raw === 'number')
255
+ n = raw;
256
+ else if (typeof raw === 'string' && raw.trim() !== '')
257
+ n = Number(raw);
258
+ else
259
+ return fallback;
260
+ if (!Number.isFinite(n))
261
+ return fallback;
262
+ return Math.min(max, Math.max(min, Math.floor(n)));
263
+ }
264
+ }
265
+ exports.ContextMcpTools = ContextMcpTools;
266
+ //# sourceMappingURL=mcp-tools-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-tools-context.js","sourceRoot":"","sources":["../../lib/mcp-tools-context.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "network-ai",
3
- "version": "5.13.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.",
3
+ "version": "5.15.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",
@@ -89,6 +89,18 @@ for (const rel of STAGE_FILES) {
89
89
  }
90
90
 
91
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
+
92
104
  const cmd = ['clawhub', 'skill', 'publish', stage,
93
105
  '--slug', SKILL_SLUG,
94
106
  '--name', SKILL_NAME,
@@ -111,7 +123,8 @@ console.log(` Staged : ${STAGE_FILES.length} files → ${stage}`);
111
123
  console.log(`${'─'.repeat(50)}\n`);
112
124
 
113
125
  // ── Publish ───────────────────────────────────────────────────────────────────
114
- const result = spawnSync('npx', cmd, { cwd: ROOT, stdio: 'inherit', shell: true });
126
+ const quotedCmd = process.platform === 'win32' ? cmd.map(quoteArg) : cmd;
127
+ const result = spawnSync('npx', quotedCmd, { cwd: ROOT, stdio: 'inherit', shell: true });
115
128
 
116
129
  // ── Cleanup ───────────────────────────────────────────────────────────────────
117
130
  fs.rmSync(stage, { recursive: true });
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 29 adapters; Socket.dev's import-graph analysis flags it because it transitively references adapters that use fetch. No direct HTTP calls are made here."
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",