@honeybee-ai/waggle-cli 1.0.20 → 1.0.21
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/dist/cli.js +279 -936
- package/dist/cli.js.map +1 -7
- package/dist/commands/carapace.js +20 -5
- package/dist/commands/carapace.js.map +1 -1
- package/dist/commands/eval.d.ts +1 -0
- package/dist/commands/eval.js +221 -0
- package/dist/commands/eval.js.map +1 -0
- package/dist/commands/mcp.d.ts +13 -0
- package/dist/commands/mcp.js +17 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/scan.js +8 -8
- package/dist/commands/scan.js.map +1 -1
- package/dist/commands/up.js +1 -30
- package/dist/commands/up.js.map +1 -1
- package/dist/lib/capture.d.ts +6 -0
- package/dist/lib/capture.js +29 -0
- package/dist/lib/capture.js.map +1 -0
- package/dist/mcp/docs.d.ts +16 -0
- package/dist/mcp/docs.js +192 -0
- package/dist/mcp/docs.js.map +1 -0
- package/dist/mcp/handler.d.ts +27 -0
- package/dist/mcp/handler.js +397 -0
- package/dist/mcp/handler.js.map +1 -0
- package/dist/mcp/server.d.ts +19 -0
- package/dist/mcp/server.js +105 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/templates.d.ts +9 -0
- package/dist/mcp/templates.js +46 -0
- package/dist/mcp/templates.js.map +1 -0
- package/dist/repl/addressing.d.ts +34 -0
- package/dist/repl/addressing.js +103 -0
- package/dist/repl/addressing.js.map +1 -0
- package/dist/repl/agent-loop.d.ts +8 -0
- package/dist/repl/agent-loop.js +57 -0
- package/dist/repl/agent-loop.js.map +1 -0
- package/dist/repl/bang.d.ts +13 -0
- package/dist/repl/bang.js +207 -0
- package/dist/repl/bang.js.map +1 -0
- package/dist/repl/file-tools.d.ts +4 -0
- package/dist/repl/file-tools.js +121 -0
- package/dist/repl/file-tools.js.map +1 -0
- package/dist/repl/index-readline.d.ts +7 -0
- package/dist/repl/index-readline.js +91 -0
- package/dist/repl/index-readline.js.map +1 -0
- package/dist/repl/index.d.ts +1 -0
- package/dist/repl/index.js +341 -0
- package/dist/repl/index.js.map +1 -0
- package/dist/repl/input.d.ts +36 -0
- package/dist/repl/input.js +312 -0
- package/dist/repl/input.js.map +1 -0
- package/dist/repl/providers.d.ts +21 -0
- package/dist/repl/providers.js +373 -0
- package/dist/repl/providers.js.map +1 -0
- package/dist/repl/renderer.d.ts +38 -0
- package/dist/repl/renderer.js +167 -0
- package/dist/repl/renderer.js.map +1 -0
- package/dist/repl/system-pane.d.ts +28 -0
- package/dist/repl/system-pane.js +194 -0
- package/dist/repl/system-pane.js.map +1 -0
- package/dist/repl/system-prompt.d.ts +3 -0
- package/dist/repl/system-prompt.js +74 -0
- package/dist/repl/system-prompt.js.map +1 -0
- package/dist/repl/tool-handlers.d.ts +5 -0
- package/dist/repl/tool-handlers.js +118 -0
- package/dist/repl/tool-handlers.js.map +1 -0
- package/dist/repl/tools.d.ts +2 -0
- package/dist/repl/tools.js +205 -0
- package/dist/repl/tools.js.map +1 -0
- package/dist/repl/tui.d.ts +41 -0
- package/dist/repl/tui.js +280 -0
- package/dist/repl/tui.js.map +1 -0
- package/dist/repl/types.d.ts +53 -0
- package/dist/repl/types.js +3 -0
- package/dist/repl/types.js.map +1 -0
- package/dist/repl/ws-client.d.ts +39 -0
- package/dist/repl/ws-client.js +144 -0
- package/dist/repl/ws-client.js.map +1 -0
- package/dist/wgl.js +1396 -0
- package/dist/wgl.js.map +7 -0
- package/package.json +6 -8
package/dist/mcp/docs.js
ADDED
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Docs search — TF-IDF over Honeybee documentation.
|
|
3
|
+
*
|
|
4
|
+
* Resolution order:
|
|
5
|
+
* 1. Cloud index (docs.honeyb.dev/api/search-index.json) — 1hr cache
|
|
6
|
+
* 2. Local cache (~/.honeyb/cache/docs-index.json)
|
|
7
|
+
* 3. Bundled fallback (inline minimal index)
|
|
8
|
+
*
|
|
9
|
+
* Phase 3 will add the full TF-IDF engine + build script.
|
|
10
|
+
* For now, returns inline docs summaries for common queries.
|
|
11
|
+
*/
|
|
12
|
+
const INLINE_DOCS = [
|
|
13
|
+
{
|
|
14
|
+
title: 'Available Operations',
|
|
15
|
+
section: 'reference',
|
|
16
|
+
content: `Operations for the honeybee MCP tool (use { "do": "<op>", ...params }):
|
|
17
|
+
|
|
18
|
+
COORDINATION: status, team, claim (resource), release (resource)
|
|
19
|
+
STATE: state_get (key?), state_set (key, value), state_delete (key)
|
|
20
|
+
EVENTS: events_list (type?, since?), events_publish (type, data?)
|
|
21
|
+
COMMUNICATION: msg_send (to, text), msg_list, msg_broadcast (text)
|
|
22
|
+
CONTROL: halt (reason?), pause (reason?), resume
|
|
23
|
+
INSPECT: inspect, inspect_agents, inspect_events, inspect_health
|
|
24
|
+
SECURITY: scan (text)
|
|
25
|
+
CLOUD HIVES: hive_list, hive_create (name, provider?, max_agents?), hive_info (id), hive_start (id), hive_pause (id), hive_resume (id), hive_delete (id)
|
|
26
|
+
MARKETPLACE: marketplace_search (query?), marketplace_info (name), marketplace_install (name)
|
|
27
|
+
TELEMETRY: telemetry_overview (local?), telemetry_events (limit?, type?)
|
|
28
|
+
AUTH: auth_status, secret_list, secret_set (provider, hive?)
|
|
29
|
+
PROTOCOL: protocol_show, protocol_validate (file)
|
|
30
|
+
NAMESPACE: namespace_list
|
|
31
|
+
DOCS: docs (query, section?)
|
|
32
|
+
|
|
33
|
+
Sequential: [op1, op2] — each waits for previous, chain via $last / $last.field.
|
|
34
|
+
Parallel: [op1, [op2, op3], op4] — nested array = Promise.all fan-out.`,
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
title: 'Brood Configuration',
|
|
38
|
+
section: 'guides',
|
|
39
|
+
content: `brood.yaml — "docker-compose for agents"
|
|
40
|
+
|
|
41
|
+
name: my-project
|
|
42
|
+
provider: cerebras/llama-3.3-70b # default LLM
|
|
43
|
+
hives:
|
|
44
|
+
main:
|
|
45
|
+
acp: spec.acp.yaml # protocol spec
|
|
46
|
+
dances: logic.js # dance file (inject + tool handlers)
|
|
47
|
+
agents:
|
|
48
|
+
- role: developer
|
|
49
|
+
type: worker # worker (env tools), drone (ACP only), claude (Claude Code)
|
|
50
|
+
tools: [read_file, shell] # filter available tools
|
|
51
|
+
wake_on: { types: [...] } # reactive sleep/wake
|
|
52
|
+
|
|
53
|
+
Start: wgl up
|
|
54
|
+
Stop: wgl down`,
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
title: 'ACP Protocol Format',
|
|
58
|
+
section: 'reference',
|
|
59
|
+
content: `ACP (Agent Coordination Protocol) — YAML spec format:
|
|
60
|
+
|
|
61
|
+
protocol:
|
|
62
|
+
name: my-protocol
|
|
63
|
+
version: 1.0.0
|
|
64
|
+
variables:
|
|
65
|
+
max_agents: { type: number, default: 3 }
|
|
66
|
+
roles:
|
|
67
|
+
developer: { agents: { default: 2, min: 1, max: 5 }, scope: ["src/**"] }
|
|
68
|
+
reviewer: { agents: 1 }
|
|
69
|
+
phases:
|
|
70
|
+
coding: { exit_condition: { event: "code.complete" } }
|
|
71
|
+
review: { exit_condition: { event: "review.approved" } }
|
|
72
|
+
rules:
|
|
73
|
+
developer:
|
|
74
|
+
coding:
|
|
75
|
+
steps: [{ action: "external" }, { action: "publish", event: "code.complete" }]
|
|
76
|
+
governance:
|
|
77
|
+
budget: { max_cost: 10, warn_at: 0.8 }
|
|
78
|
+
heartbeat: { interval: 30, timeout: 90 }`,
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
title: 'Waggle Compound Tool',
|
|
82
|
+
section: 'reference',
|
|
83
|
+
content: `The waggle compound tool batches operations in one call:
|
|
84
|
+
|
|
85
|
+
{ dance: [{ do: "claim", resource: "file:api.ts" }, { do: "publish", type: "started" }], wait: true }
|
|
86
|
+
|
|
87
|
+
Env ops (13): read_file, write_file, patch_file, list_files, glob, grep, shell, git_status, git_diff, git_commit, git_log, fetch, scrape
|
|
88
|
+
ACP ops (5): publish, claim, release, get_state, set_state
|
|
89
|
+
Wait: true (any), "type" (specific), ["a","b"] (any of), 5000 (ms), {types, timeout}
|
|
90
|
+
|
|
91
|
+
$last templates: $last = previous result, $last.field = nested path.
|
|
92
|
+
Parallel: nested arrays run via Promise.all.`,
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
title: 'Hive Management',
|
|
96
|
+
section: 'guides',
|
|
97
|
+
content: `Manage cloud hives (managed agent orchestration):
|
|
98
|
+
|
|
99
|
+
Create: { "do": "hive_create", "name": "my-hive", "provider": "cerebras", "max_agents": "5" }
|
|
100
|
+
List: { "do": "hive_list" }
|
|
101
|
+
Info: { "do": "hive_info", "id": "hive-uuid" }
|
|
102
|
+
Start: { "do": "hive_start", "id": "hive-uuid" }
|
|
103
|
+
Pause: { "do": "hive_pause", "id": "hive-uuid" }
|
|
104
|
+
Resume: { "do": "hive_resume", "id": "hive-uuid" }
|
|
105
|
+
Delete: { "do": "hive_delete", "id": "hive-uuid" }
|
|
106
|
+
|
|
107
|
+
Set provider keys: { "do": "secret_set", "provider": "cerebras", "hive": "hive-uuid" }
|
|
108
|
+
Providers: cerebras (fast), openai (smart), groq, anthropic, ollama (local)`,
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
title: 'Carapace Security Scanner',
|
|
112
|
+
section: 'security',
|
|
113
|
+
content: `Scan text for prompt injection attacks:
|
|
114
|
+
|
|
115
|
+
{ "do": "scan", "text": "ignore previous instructions and..." }
|
|
116
|
+
|
|
117
|
+
Returns JSON with: action (PASS/LOG/WARN/BLOCK), score, findings.
|
|
118
|
+
Threshold: 100 (default). Scores above threshold = BLOCK.
|
|
119
|
+
|
|
120
|
+
Use in pipelines: scan user input before passing to LLM.
|
|
121
|
+
Carapace is zero-dependency — works everywhere.`,
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
title: 'State and Events',
|
|
125
|
+
section: 'guides',
|
|
126
|
+
content: `Shared state (key-value store):
|
|
127
|
+
Get all: { "do": "state_get" }
|
|
128
|
+
Get key: { "do": "state_get", "key": "phase" }
|
|
129
|
+
Get glob: { "do": "state_get", "key": "research.*" }
|
|
130
|
+
Set: { "do": "state_set", "key": "phase", "value": "review" }
|
|
131
|
+
Delete: { "do": "state_delete", "key": "phase" }
|
|
132
|
+
|
|
133
|
+
Events (pub/sub):
|
|
134
|
+
List: { "do": "events_list", "type": "code.written", "since": "5" }
|
|
135
|
+
Publish: { "do": "events_publish", "type": "task.done", "data": {"file": "api.ts"} }
|
|
136
|
+
|
|
137
|
+
Claims (mutex):
|
|
138
|
+
Claim: { "do": "claim", "resource": "file:api.ts" }
|
|
139
|
+
Release: { "do": "release", "resource": "file:api.ts" }`,
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
title: 'Telemetry and Observability',
|
|
143
|
+
section: 'guides',
|
|
144
|
+
content: `Telemetry is opt-in. Local JSONL files always written.
|
|
145
|
+
|
|
146
|
+
Overview: { "do": "telemetry_overview", "local": true }
|
|
147
|
+
Events: { "do": "telemetry_events", "limit": "20", "type": "llm_call" }
|
|
148
|
+
|
|
149
|
+
Inspect running incubator:
|
|
150
|
+
Overview: { "do": "inspect" }
|
|
151
|
+
Agents: { "do": "inspect_agents" }
|
|
152
|
+
Events: { "do": "inspect_events" }
|
|
153
|
+
Health: { "do": "inspect_health" }
|
|
154
|
+
|
|
155
|
+
12 event types: llm_call, llm_error, tool_call, agent_complete, context_compaction,
|
|
156
|
+
guard_scan, agent_spawn, agent_exit, agent_kill, protocol_start/end, dance_call.`,
|
|
157
|
+
},
|
|
158
|
+
];
|
|
159
|
+
/**
|
|
160
|
+
* Search docs using simple keyword matching.
|
|
161
|
+
* Phase 3 upgrades this to TF-IDF with cloud index.
|
|
162
|
+
*/
|
|
163
|
+
export async function searchDocs(query, section) {
|
|
164
|
+
if (!query) {
|
|
165
|
+
return INLINE_DOCS.map(d => `## ${d.title}\n${d.content}`).join('\n\n---\n\n');
|
|
166
|
+
}
|
|
167
|
+
const queryTerms = query.toLowerCase().split(/\s+/).filter(Boolean);
|
|
168
|
+
let candidates = INLINE_DOCS;
|
|
169
|
+
if (section) {
|
|
170
|
+
const sec = section.toLowerCase();
|
|
171
|
+
candidates = candidates.filter(d => d.section?.toLowerCase() === sec);
|
|
172
|
+
}
|
|
173
|
+
// Score by term frequency
|
|
174
|
+
const scored = candidates.map(doc => {
|
|
175
|
+
const text = `${doc.title} ${doc.content}`.toLowerCase();
|
|
176
|
+
let score = 0;
|
|
177
|
+
for (const term of queryTerms) {
|
|
178
|
+
const regex = new RegExp(term.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'gi');
|
|
179
|
+
const matches = text.match(regex);
|
|
180
|
+
score += matches ? matches.length : 0;
|
|
181
|
+
}
|
|
182
|
+
return { doc, score };
|
|
183
|
+
});
|
|
184
|
+
// Sort by score, take top 3
|
|
185
|
+
scored.sort((a, b) => b.score - a.score);
|
|
186
|
+
const top = scored.filter(s => s.score > 0).slice(0, 3);
|
|
187
|
+
if (top.length === 0) {
|
|
188
|
+
return `No docs found for "${query}". Try: "available operations", "brood", "protocol", "hive", "state", "events", "scan", "telemetry".`;
|
|
189
|
+
}
|
|
190
|
+
return top.map(({ doc }) => `## ${doc.title}\n${doc.content}`).join('\n\n---\n\n');
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=docs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/mcp/docs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Honeybee MCP compound handler.
|
|
3
|
+
*
|
|
4
|
+
* Routes operations to existing CLI commands via captureOutput().
|
|
5
|
+
* Supports sequential execution and parallel fan-out (nested arrays).
|
|
6
|
+
*
|
|
7
|
+
* dance: [
|
|
8
|
+
* { do: "status" }, // sequential
|
|
9
|
+
* [ // parallel group
|
|
10
|
+
* { do: "msg_send", to: "w1", text: "go" },
|
|
11
|
+
* { do: "msg_send", to: "w2", text: "go" },
|
|
12
|
+
* ],
|
|
13
|
+
* { do: "state_get", key: "$last.0.data" } // sequential, uses parallel result
|
|
14
|
+
* ]
|
|
15
|
+
*/
|
|
16
|
+
export interface OpResult {
|
|
17
|
+
op: string;
|
|
18
|
+
ok: boolean;
|
|
19
|
+
data?: unknown;
|
|
20
|
+
error?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Execute the full dance array — sequential items with parallel groups.
|
|
24
|
+
*/
|
|
25
|
+
export declare function executeDance(rawDance: string | unknown[]): Promise<{
|
|
26
|
+
results: OpResult[];
|
|
27
|
+
}>;
|
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Honeybee MCP compound handler.
|
|
3
|
+
*
|
|
4
|
+
* Routes operations to existing CLI commands via captureOutput().
|
|
5
|
+
* Supports sequential execution and parallel fan-out (nested arrays).
|
|
6
|
+
*
|
|
7
|
+
* dance: [
|
|
8
|
+
* { do: "status" }, // sequential
|
|
9
|
+
* [ // parallel group
|
|
10
|
+
* { do: "msg_send", to: "w1", text: "go" },
|
|
11
|
+
* { do: "msg_send", to: "w2", text: "go" },
|
|
12
|
+
* ],
|
|
13
|
+
* { do: "state_get", key: "$last.0.data" } // sequential, uses parallel result
|
|
14
|
+
* ]
|
|
15
|
+
*/
|
|
16
|
+
import { captureOutput } from '../lib/capture.js';
|
|
17
|
+
import { resolveTemplates } from './templates.js';
|
|
18
|
+
/**
|
|
19
|
+
* Execute the full dance array — sequential items with parallel groups.
|
|
20
|
+
*/
|
|
21
|
+
export async function executeDance(rawDance) {
|
|
22
|
+
let dance;
|
|
23
|
+
if (typeof rawDance === 'string') {
|
|
24
|
+
dance = JSON.parse(rawDance);
|
|
25
|
+
}
|
|
26
|
+
else if (Array.isArray(rawDance)) {
|
|
27
|
+
dance = rawDance;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
return { results: [] };
|
|
31
|
+
}
|
|
32
|
+
const allResults = [];
|
|
33
|
+
let lastResult = undefined;
|
|
34
|
+
for (const item of dance) {
|
|
35
|
+
if (Array.isArray(item)) {
|
|
36
|
+
// Parallel group — fan out via Promise.all
|
|
37
|
+
const parallelResults = await Promise.all(item.map(op => {
|
|
38
|
+
const resolved = resolveTemplates(op, lastResult);
|
|
39
|
+
return executeOp(resolved);
|
|
40
|
+
}));
|
|
41
|
+
lastResult = parallelResults;
|
|
42
|
+
allResults.push(...parallelResults);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
// Sequential op
|
|
46
|
+
const resolved = resolveTemplates(item, lastResult);
|
|
47
|
+
const result = await executeOp(resolved);
|
|
48
|
+
lastResult = result.ok ? result.data : result;
|
|
49
|
+
allResults.push(result);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return { results: allResults };
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Execute a single operation by routing to the appropriate CLI command.
|
|
56
|
+
*/
|
|
57
|
+
async function executeOp(op) {
|
|
58
|
+
const action = op.do;
|
|
59
|
+
if (!action || typeof action !== 'string') {
|
|
60
|
+
return { op: 'unknown', ok: false, error: 'Missing "do" field in operation' };
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
switch (action) {
|
|
64
|
+
// ─── Docs ──────────────────────────────────────────────────
|
|
65
|
+
case 'docs': {
|
|
66
|
+
const { searchDocs } = await import('./docs.js');
|
|
67
|
+
const data = await searchDocs(String(op.query ?? ''), op.section ? String(op.section) : undefined);
|
|
68
|
+
return { op: action, ok: true, data };
|
|
69
|
+
}
|
|
70
|
+
// ─── Coordination ──────────────────────────────────────────
|
|
71
|
+
case 'status': {
|
|
72
|
+
const output = await captureOutput(async () => {
|
|
73
|
+
const { status } = await import('../commands/status.js');
|
|
74
|
+
await status();
|
|
75
|
+
});
|
|
76
|
+
return { op: action, ok: true, data: output };
|
|
77
|
+
}
|
|
78
|
+
case 'team': {
|
|
79
|
+
const output = await captureOutput(async () => {
|
|
80
|
+
const { team } = await import('../commands/team.js');
|
|
81
|
+
await team();
|
|
82
|
+
});
|
|
83
|
+
return { op: action, ok: true, data: output };
|
|
84
|
+
}
|
|
85
|
+
case 'claim': {
|
|
86
|
+
const output = await captureOutput(async () => {
|
|
87
|
+
const { claim } = await import('../commands/claim.js');
|
|
88
|
+
await claim([String(op.resource ?? '')]);
|
|
89
|
+
});
|
|
90
|
+
return { op: action, ok: true, data: output };
|
|
91
|
+
}
|
|
92
|
+
case 'release': {
|
|
93
|
+
const output = await captureOutput(async () => {
|
|
94
|
+
const { release } = await import('../commands/release.js');
|
|
95
|
+
await release([String(op.resource ?? '')]);
|
|
96
|
+
});
|
|
97
|
+
return { op: action, ok: true, data: output };
|
|
98
|
+
}
|
|
99
|
+
// ─── State ─────────────────────────────────────────────────
|
|
100
|
+
case 'state_get': {
|
|
101
|
+
const output = await captureOutput(async () => {
|
|
102
|
+
const { state } = await import('../commands/state.js');
|
|
103
|
+
const cmdArgs = op.key ? ['get', String(op.key)] : ['get'];
|
|
104
|
+
await state(cmdArgs);
|
|
105
|
+
});
|
|
106
|
+
return { op: action, ok: true, data: output };
|
|
107
|
+
}
|
|
108
|
+
case 'state_set': {
|
|
109
|
+
const output = await captureOutput(async () => {
|
|
110
|
+
const { state } = await import('../commands/state.js');
|
|
111
|
+
await state(['set', String(op.key ?? ''), String(op.value ?? '')]);
|
|
112
|
+
});
|
|
113
|
+
return { op: action, ok: true, data: output };
|
|
114
|
+
}
|
|
115
|
+
case 'state_delete': {
|
|
116
|
+
const output = await captureOutput(async () => {
|
|
117
|
+
const { state } = await import('../commands/state.js');
|
|
118
|
+
await state(['delete', String(op.key ?? '')]);
|
|
119
|
+
});
|
|
120
|
+
return { op: action, ok: true, data: output };
|
|
121
|
+
}
|
|
122
|
+
// ─── Events ────────────────────────────────────────────────
|
|
123
|
+
case 'events_list': {
|
|
124
|
+
const output = await captureOutput(async () => {
|
|
125
|
+
const { events } = await import('../commands/events.js');
|
|
126
|
+
const cmdArgs = ['list'];
|
|
127
|
+
if (op.type)
|
|
128
|
+
cmdArgs.push('--type', String(op.type));
|
|
129
|
+
if (op.since)
|
|
130
|
+
cmdArgs.push('--since', String(op.since));
|
|
131
|
+
await events(cmdArgs);
|
|
132
|
+
});
|
|
133
|
+
return { op: action, ok: true, data: output };
|
|
134
|
+
}
|
|
135
|
+
case 'events_publish': {
|
|
136
|
+
const output = await captureOutput(async () => {
|
|
137
|
+
const { events } = await import('../commands/events.js');
|
|
138
|
+
const cmdArgs = ['publish', '--type', String(op.type ?? '')];
|
|
139
|
+
if (op.data)
|
|
140
|
+
cmdArgs.push('--data', typeof op.data === 'string' ? op.data : JSON.stringify(op.data));
|
|
141
|
+
await events(cmdArgs);
|
|
142
|
+
});
|
|
143
|
+
return { op: action, ok: true, data: output };
|
|
144
|
+
}
|
|
145
|
+
// ─── Communication ─────────────────────────────────────────
|
|
146
|
+
case 'msg_send': {
|
|
147
|
+
const output = await captureOutput(async () => {
|
|
148
|
+
const { msg } = await import('../commands/msg.js');
|
|
149
|
+
await msg(['send', String(op.to ?? ''), String(op.text ?? '')]);
|
|
150
|
+
});
|
|
151
|
+
return { op: action, ok: true, data: output };
|
|
152
|
+
}
|
|
153
|
+
case 'msg_list': {
|
|
154
|
+
const output = await captureOutput(async () => {
|
|
155
|
+
const { msg } = await import('../commands/msg.js');
|
|
156
|
+
await msg(['list']);
|
|
157
|
+
});
|
|
158
|
+
return { op: action, ok: true, data: output };
|
|
159
|
+
}
|
|
160
|
+
case 'msg_broadcast': {
|
|
161
|
+
const output = await captureOutput(async () => {
|
|
162
|
+
const { msg } = await import('../commands/msg.js');
|
|
163
|
+
await msg(['broadcast', String(op.text ?? '')]);
|
|
164
|
+
});
|
|
165
|
+
return { op: action, ok: true, data: output };
|
|
166
|
+
}
|
|
167
|
+
// ─── Control ───────────────────────────────────────────────
|
|
168
|
+
case 'halt': {
|
|
169
|
+
const output = await captureOutput(async () => {
|
|
170
|
+
const { halt } = await import('../commands/halt.js');
|
|
171
|
+
const cmdArgs = op.reason ? [String(op.reason)] : [];
|
|
172
|
+
await halt(cmdArgs);
|
|
173
|
+
});
|
|
174
|
+
return { op: action, ok: true, data: output };
|
|
175
|
+
}
|
|
176
|
+
case 'pause': {
|
|
177
|
+
const output = await captureOutput(async () => {
|
|
178
|
+
const { pause } = await import('../commands/pause.js');
|
|
179
|
+
const cmdArgs = op.reason ? [String(op.reason)] : [];
|
|
180
|
+
await pause(cmdArgs);
|
|
181
|
+
});
|
|
182
|
+
return { op: action, ok: true, data: output };
|
|
183
|
+
}
|
|
184
|
+
case 'resume': {
|
|
185
|
+
const output = await captureOutput(async () => {
|
|
186
|
+
const { resume } = await import('../commands/pause.js');
|
|
187
|
+
await resume();
|
|
188
|
+
});
|
|
189
|
+
return { op: action, ok: true, data: output };
|
|
190
|
+
}
|
|
191
|
+
// ─── Inspect ───────────────────────────────────────────────
|
|
192
|
+
case 'inspect': {
|
|
193
|
+
const output = await captureOutput(async () => {
|
|
194
|
+
const { inspect } = await import('../commands/inspect.js');
|
|
195
|
+
await inspect([]);
|
|
196
|
+
});
|
|
197
|
+
return { op: action, ok: true, data: output };
|
|
198
|
+
}
|
|
199
|
+
case 'inspect_agents': {
|
|
200
|
+
const output = await captureOutput(async () => {
|
|
201
|
+
const { inspect } = await import('../commands/inspect.js');
|
|
202
|
+
await inspect(['agents']);
|
|
203
|
+
});
|
|
204
|
+
return { op: action, ok: true, data: output };
|
|
205
|
+
}
|
|
206
|
+
case 'inspect_events': {
|
|
207
|
+
const output = await captureOutput(async () => {
|
|
208
|
+
const { inspect } = await import('../commands/inspect.js');
|
|
209
|
+
await inspect(['events']);
|
|
210
|
+
});
|
|
211
|
+
return { op: action, ok: true, data: output };
|
|
212
|
+
}
|
|
213
|
+
case 'inspect_health': {
|
|
214
|
+
const output = await captureOutput(async () => {
|
|
215
|
+
const { inspect } = await import('../commands/inspect.js');
|
|
216
|
+
await inspect(['health']);
|
|
217
|
+
});
|
|
218
|
+
return { op: action, ok: true, data: output };
|
|
219
|
+
}
|
|
220
|
+
// ─── Security ──────────────────────────────────────────────
|
|
221
|
+
case 'scan': {
|
|
222
|
+
const output = await captureOutput(async () => {
|
|
223
|
+
const { scan } = await import('../commands/scan.js');
|
|
224
|
+
await scan([String(op.text ?? ''), '--json']);
|
|
225
|
+
});
|
|
226
|
+
return { op: action, ok: true, data: output };
|
|
227
|
+
}
|
|
228
|
+
// ─── Hive (Cloud) ──────────────────────────────────────────
|
|
229
|
+
case 'hive_list': {
|
|
230
|
+
const output = await captureOutput(async () => {
|
|
231
|
+
const { hive } = await import('../commands/hive.js');
|
|
232
|
+
await hive(['list']);
|
|
233
|
+
});
|
|
234
|
+
return { op: action, ok: true, data: output };
|
|
235
|
+
}
|
|
236
|
+
case 'hive_create': {
|
|
237
|
+
const output = await captureOutput(async () => {
|
|
238
|
+
const { hive } = await import('../commands/hive.js');
|
|
239
|
+
const cmdArgs = ['create', String(op.name ?? '')];
|
|
240
|
+
if (op.provider)
|
|
241
|
+
cmdArgs.push('--provider', String(op.provider));
|
|
242
|
+
if (op.max_agents)
|
|
243
|
+
cmdArgs.push('--max-agents', String(op.max_agents));
|
|
244
|
+
await hive(cmdArgs);
|
|
245
|
+
});
|
|
246
|
+
return { op: action, ok: true, data: output };
|
|
247
|
+
}
|
|
248
|
+
case 'hive_info': {
|
|
249
|
+
const output = await captureOutput(async () => {
|
|
250
|
+
const { hive } = await import('../commands/hive.js');
|
|
251
|
+
await hive(['info', String(op.id ?? '')]);
|
|
252
|
+
});
|
|
253
|
+
return { op: action, ok: true, data: output };
|
|
254
|
+
}
|
|
255
|
+
case 'hive_start': {
|
|
256
|
+
const output = await captureOutput(async () => {
|
|
257
|
+
const { hive } = await import('../commands/hive.js');
|
|
258
|
+
await hive(['start', String(op.id ?? '')]);
|
|
259
|
+
});
|
|
260
|
+
return { op: action, ok: true, data: output };
|
|
261
|
+
}
|
|
262
|
+
case 'hive_pause': {
|
|
263
|
+
const output = await captureOutput(async () => {
|
|
264
|
+
const { hive } = await import('../commands/hive.js');
|
|
265
|
+
await hive(['pause', String(op.id ?? '')]);
|
|
266
|
+
});
|
|
267
|
+
return { op: action, ok: true, data: output };
|
|
268
|
+
}
|
|
269
|
+
case 'hive_resume': {
|
|
270
|
+
const output = await captureOutput(async () => {
|
|
271
|
+
const { hive } = await import('../commands/hive.js');
|
|
272
|
+
await hive(['resume', String(op.id ?? '')]);
|
|
273
|
+
});
|
|
274
|
+
return { op: action, ok: true, data: output };
|
|
275
|
+
}
|
|
276
|
+
case 'hive_delete': {
|
|
277
|
+
const output = await captureOutput(async () => {
|
|
278
|
+
const { hive } = await import('../commands/hive.js');
|
|
279
|
+
await hive(['delete', String(op.id ?? '')]);
|
|
280
|
+
});
|
|
281
|
+
return { op: action, ok: true, data: output };
|
|
282
|
+
}
|
|
283
|
+
// ─── Marketplace ───────────────────────────────────────────
|
|
284
|
+
case 'marketplace_search': {
|
|
285
|
+
const output = await captureOutput(async () => {
|
|
286
|
+
const { marketplace } = await import('../commands/marketplace.js');
|
|
287
|
+
const cmdArgs = ['search'];
|
|
288
|
+
if (op.query)
|
|
289
|
+
cmdArgs.push(String(op.query));
|
|
290
|
+
await marketplace(cmdArgs);
|
|
291
|
+
});
|
|
292
|
+
return { op: action, ok: true, data: output };
|
|
293
|
+
}
|
|
294
|
+
case 'marketplace_info': {
|
|
295
|
+
const output = await captureOutput(async () => {
|
|
296
|
+
const { marketplace } = await import('../commands/marketplace.js');
|
|
297
|
+
await marketplace(['info', String(op.name ?? '')]);
|
|
298
|
+
});
|
|
299
|
+
return { op: action, ok: true, data: output };
|
|
300
|
+
}
|
|
301
|
+
case 'marketplace_install': {
|
|
302
|
+
const output = await captureOutput(async () => {
|
|
303
|
+
const { marketplace } = await import('../commands/marketplace.js');
|
|
304
|
+
await marketplace(['install', String(op.name ?? '')]);
|
|
305
|
+
});
|
|
306
|
+
return { op: action, ok: true, data: output };
|
|
307
|
+
}
|
|
308
|
+
// ─── Telemetry ─────────────────────────────────────────────
|
|
309
|
+
case 'telemetry_overview': {
|
|
310
|
+
const output = await captureOutput(async () => {
|
|
311
|
+
const { telemetry } = await import('../commands/telemetry.js');
|
|
312
|
+
const cmdArgs = ['overview'];
|
|
313
|
+
if (op.local)
|
|
314
|
+
cmdArgs.push('--local');
|
|
315
|
+
await telemetry(cmdArgs);
|
|
316
|
+
});
|
|
317
|
+
return { op: action, ok: true, data: output };
|
|
318
|
+
}
|
|
319
|
+
case 'telemetry_events': {
|
|
320
|
+
const output = await captureOutput(async () => {
|
|
321
|
+
const { telemetry } = await import('../commands/telemetry.js');
|
|
322
|
+
const cmdArgs = ['events'];
|
|
323
|
+
if (op.limit)
|
|
324
|
+
cmdArgs.push('--limit', String(op.limit));
|
|
325
|
+
if (op.type)
|
|
326
|
+
cmdArgs.push('--type', String(op.type));
|
|
327
|
+
await telemetry(cmdArgs);
|
|
328
|
+
});
|
|
329
|
+
return { op: action, ok: true, data: output };
|
|
330
|
+
}
|
|
331
|
+
// ─── Auth & Secrets ────────────────────────────────────────
|
|
332
|
+
case 'auth_status': {
|
|
333
|
+
const output = await captureOutput(async () => {
|
|
334
|
+
const { auth } = await import('../commands/auth.js');
|
|
335
|
+
await auth(['status']);
|
|
336
|
+
});
|
|
337
|
+
return { op: action, ok: true, data: output };
|
|
338
|
+
}
|
|
339
|
+
case 'secret_list': {
|
|
340
|
+
const output = await captureOutput(async () => {
|
|
341
|
+
const { secret } = await import('../commands/secret.js');
|
|
342
|
+
await secret(['list']);
|
|
343
|
+
});
|
|
344
|
+
return { op: action, ok: true, data: output };
|
|
345
|
+
}
|
|
346
|
+
case 'secret_set': {
|
|
347
|
+
const output = await captureOutput(async () => {
|
|
348
|
+
const { secret } = await import('../commands/secret.js');
|
|
349
|
+
const cmdArgs = ['set', String(op.provider ?? '')];
|
|
350
|
+
if (op.hive)
|
|
351
|
+
cmdArgs.push('--hive', String(op.hive));
|
|
352
|
+
// Key comes from stdin in the CLI, but for MCP we pass it directly
|
|
353
|
+
// This may need special handling if the command reads from stdin
|
|
354
|
+
await secret(cmdArgs);
|
|
355
|
+
});
|
|
356
|
+
return { op: action, ok: true, data: output };
|
|
357
|
+
}
|
|
358
|
+
// ─── Protocol ──────────────────────────────────────────────
|
|
359
|
+
case 'protocol_show': {
|
|
360
|
+
const output = await captureOutput(async () => {
|
|
361
|
+
const { protocol } = await import('../commands/protocol.js');
|
|
362
|
+
await protocol(['show']);
|
|
363
|
+
});
|
|
364
|
+
return { op: action, ok: true, data: output };
|
|
365
|
+
}
|
|
366
|
+
case 'protocol_validate': {
|
|
367
|
+
const output = await captureOutput(async () => {
|
|
368
|
+
const { protocol } = await import('../commands/protocol.js');
|
|
369
|
+
await protocol(['validate', String(op.file ?? '')]);
|
|
370
|
+
});
|
|
371
|
+
return { op: action, ok: true, data: output };
|
|
372
|
+
}
|
|
373
|
+
// ─── Namespace ─────────────────────────────────────────────
|
|
374
|
+
case 'namespace_list': {
|
|
375
|
+
const output = await captureOutput(async () => {
|
|
376
|
+
const { namespace } = await import('../commands/namespace.js');
|
|
377
|
+
await namespace(['list']);
|
|
378
|
+
});
|
|
379
|
+
return { op: action, ok: true, data: output };
|
|
380
|
+
}
|
|
381
|
+
default:
|
|
382
|
+
return {
|
|
383
|
+
op: action,
|
|
384
|
+
ok: false,
|
|
385
|
+
error: `Unknown action "${action}". Use { "do": "docs", "query": "available operations" } to see what's available.`,
|
|
386
|
+
};
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
catch (err) {
|
|
390
|
+
return {
|
|
391
|
+
op: action,
|
|
392
|
+
ok: false,
|
|
393
|
+
error: err.message,
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
//# sourceMappingURL=handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/mcp/handler.ts"],"names":[],"mappings":"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"}
|