@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.
Files changed (80) hide show
  1. package/dist/cli.js +279 -936
  2. package/dist/cli.js.map +1 -7
  3. package/dist/commands/carapace.js +20 -5
  4. package/dist/commands/carapace.js.map +1 -1
  5. package/dist/commands/eval.d.ts +1 -0
  6. package/dist/commands/eval.js +221 -0
  7. package/dist/commands/eval.js.map +1 -0
  8. package/dist/commands/mcp.d.ts +13 -0
  9. package/dist/commands/mcp.js +17 -0
  10. package/dist/commands/mcp.js.map +1 -0
  11. package/dist/commands/scan.js +8 -8
  12. package/dist/commands/scan.js.map +1 -1
  13. package/dist/commands/up.js +1 -30
  14. package/dist/commands/up.js.map +1 -1
  15. package/dist/lib/capture.d.ts +6 -0
  16. package/dist/lib/capture.js +29 -0
  17. package/dist/lib/capture.js.map +1 -0
  18. package/dist/mcp/docs.d.ts +16 -0
  19. package/dist/mcp/docs.js +192 -0
  20. package/dist/mcp/docs.js.map +1 -0
  21. package/dist/mcp/handler.d.ts +27 -0
  22. package/dist/mcp/handler.js +397 -0
  23. package/dist/mcp/handler.js.map +1 -0
  24. package/dist/mcp/server.d.ts +19 -0
  25. package/dist/mcp/server.js +105 -0
  26. package/dist/mcp/server.js.map +1 -0
  27. package/dist/mcp/templates.d.ts +9 -0
  28. package/dist/mcp/templates.js +46 -0
  29. package/dist/mcp/templates.js.map +1 -0
  30. package/dist/repl/addressing.d.ts +34 -0
  31. package/dist/repl/addressing.js +103 -0
  32. package/dist/repl/addressing.js.map +1 -0
  33. package/dist/repl/agent-loop.d.ts +8 -0
  34. package/dist/repl/agent-loop.js +57 -0
  35. package/dist/repl/agent-loop.js.map +1 -0
  36. package/dist/repl/bang.d.ts +13 -0
  37. package/dist/repl/bang.js +207 -0
  38. package/dist/repl/bang.js.map +1 -0
  39. package/dist/repl/file-tools.d.ts +4 -0
  40. package/dist/repl/file-tools.js +121 -0
  41. package/dist/repl/file-tools.js.map +1 -0
  42. package/dist/repl/index-readline.d.ts +7 -0
  43. package/dist/repl/index-readline.js +91 -0
  44. package/dist/repl/index-readline.js.map +1 -0
  45. package/dist/repl/index.d.ts +1 -0
  46. package/dist/repl/index.js +341 -0
  47. package/dist/repl/index.js.map +1 -0
  48. package/dist/repl/input.d.ts +36 -0
  49. package/dist/repl/input.js +312 -0
  50. package/dist/repl/input.js.map +1 -0
  51. package/dist/repl/providers.d.ts +21 -0
  52. package/dist/repl/providers.js +373 -0
  53. package/dist/repl/providers.js.map +1 -0
  54. package/dist/repl/renderer.d.ts +38 -0
  55. package/dist/repl/renderer.js +167 -0
  56. package/dist/repl/renderer.js.map +1 -0
  57. package/dist/repl/system-pane.d.ts +28 -0
  58. package/dist/repl/system-pane.js +194 -0
  59. package/dist/repl/system-pane.js.map +1 -0
  60. package/dist/repl/system-prompt.d.ts +3 -0
  61. package/dist/repl/system-prompt.js +74 -0
  62. package/dist/repl/system-prompt.js.map +1 -0
  63. package/dist/repl/tool-handlers.d.ts +5 -0
  64. package/dist/repl/tool-handlers.js +118 -0
  65. package/dist/repl/tool-handlers.js.map +1 -0
  66. package/dist/repl/tools.d.ts +2 -0
  67. package/dist/repl/tools.js +205 -0
  68. package/dist/repl/tools.js.map +1 -0
  69. package/dist/repl/tui.d.ts +41 -0
  70. package/dist/repl/tui.js +280 -0
  71. package/dist/repl/tui.js.map +1 -0
  72. package/dist/repl/types.d.ts +53 -0
  73. package/dist/repl/types.js +3 -0
  74. package/dist/repl/types.js.map +1 -0
  75. package/dist/repl/ws-client.d.ts +39 -0
  76. package/dist/repl/ws-client.js +144 -0
  77. package/dist/repl/ws-client.js.map +1 -0
  78. package/dist/wgl.js +1396 -0
  79. package/dist/wgl.js.map +7 -0
  80. package/package.json +6 -8
@@ -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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"}