@honeybee-ai/waggle-cli 1.0.0 → 1.0.2
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/brood.d.ts +92 -0
- package/dist/brood.js +259 -0
- package/dist/brood.js.map +1 -0
- package/dist/cli.js +1025 -91
- package/dist/cli.js.map +4 -4
- package/dist/commands/auth.js +1 -1
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/down.d.ts +1 -0
- package/dist/commands/down.js +76 -0
- package/dist/commands/down.js.map +1 -0
- package/dist/commands/integrations.js +10 -5
- package/dist/commands/integrations.js.map +1 -1
- package/dist/commands/marketplace.js +1 -1
- package/dist/commands/marketplace.js.map +1 -1
- package/dist/commands/swarm.js +1 -1
- package/dist/commands/swarm.js.map +1 -1
- package/dist/commands/telemetry.d.ts +1 -0
- package/dist/commands/telemetry.js +151 -0
- package/dist/commands/telemetry.js.map +1 -0
- package/dist/commands/up.d.ts +1 -0
- package/dist/commands/up.js +376 -0
- package/dist/commands/up.js.map +1 -0
- package/dist/hook.js +10 -9
- package/dist/hook.js.map +3 -3
- package/dist/hooks/session-start.js +7 -5
- package/dist/hooks/session-start.js.map +1 -1
- package/dist/lib/global-config.js +1 -1
- package/dist/lib/global-config.js.map +1 -1
- package/dist/lib/ipc-broker.d.ts +23 -0
- package/dist/lib/ipc-broker.js +95 -0
- package/dist/lib/ipc-broker.js.map +1 -0
- package/dist/types.d.ts +1 -1
- package/package.json +9 -12
package/dist/brood.d.ts
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* brood.yaml parser — "docker-compose for agents"
|
|
3
|
+
*
|
|
4
|
+
* Reads a brood.yaml (or brood.json) file and returns a validated BroodConfig.
|
|
5
|
+
* No Zod dependency — manual validation consistent with CLI patterns.
|
|
6
|
+
*/
|
|
7
|
+
/** Normalized start trigger config passed to drone as JSON. */
|
|
8
|
+
export interface StartOnCondition {
|
|
9
|
+
event: string;
|
|
10
|
+
count: number;
|
|
11
|
+
}
|
|
12
|
+
export interface StartOnConfig {
|
|
13
|
+
conditions: StartOnCondition[];
|
|
14
|
+
timeout: number;
|
|
15
|
+
}
|
|
16
|
+
/** Raw startOn field as written in brood.yaml/json. */
|
|
17
|
+
export type StartOnRaw = string | {
|
|
18
|
+
event?: string;
|
|
19
|
+
count?: number;
|
|
20
|
+
all?: (string | {
|
|
21
|
+
event: string;
|
|
22
|
+
count?: number;
|
|
23
|
+
})[];
|
|
24
|
+
timeout?: number;
|
|
25
|
+
};
|
|
26
|
+
/** Normalize all startOn variants to a flat config for drone. */
|
|
27
|
+
export declare function normalizeStartOn(raw: StartOnRaw): StartOnConfig;
|
|
28
|
+
export interface WakeOnRaw {
|
|
29
|
+
types?: string[];
|
|
30
|
+
timeout?: number;
|
|
31
|
+
max_wakes?: number;
|
|
32
|
+
}
|
|
33
|
+
export interface AgentEntry {
|
|
34
|
+
role: string;
|
|
35
|
+
count?: number;
|
|
36
|
+
/** 'worker' = in-process tools (default), 'drone' = MCP tools, 'claude' = Claude Code instance */
|
|
37
|
+
type?: 'worker' | 'drone' | 'claude';
|
|
38
|
+
model_hint?: string;
|
|
39
|
+
/** Custom prompt for claude agents. Overrides the default generic prompt. */
|
|
40
|
+
prompt?: string;
|
|
41
|
+
/** Propolis tool names to expose. Omit or 'all' = no filtering. */
|
|
42
|
+
tools?: string[] | 'all';
|
|
43
|
+
/** Incubator tools in no-ACP mode. 'lite'=4 core, 'full'=all, 'none'=zero, or array of names. */
|
|
44
|
+
coordination?: 'lite' | 'full' | 'none' | string[];
|
|
45
|
+
/** Wait for events before starting. */
|
|
46
|
+
startOn?: StartOnRaw;
|
|
47
|
+
/** Sleep/wake reactive config. */
|
|
48
|
+
wake_on?: WakeOnRaw;
|
|
49
|
+
}
|
|
50
|
+
export interface HiveConfig {
|
|
51
|
+
worktree?: string;
|
|
52
|
+
/** ACP spec: file path, URL, or inline spec object. Aliases: 'protocol', 'spec'. */
|
|
53
|
+
acp?: string | Record<string, unknown>;
|
|
54
|
+
/** @deprecated Use 'acp'. */
|
|
55
|
+
protocol?: string | Record<string, unknown>;
|
|
56
|
+
/** @deprecated Use 'acp'. */
|
|
57
|
+
spec?: string | Record<string, unknown>;
|
|
58
|
+
port?: number;
|
|
59
|
+
/** Dance file path. Aliases: 'logic'. */
|
|
60
|
+
dances?: string;
|
|
61
|
+
/** Agent definitions. Accepts both 'agents' and 'workers' in YAML (alias). */
|
|
62
|
+
agents?: AgentEntry[];
|
|
63
|
+
/** Cross-hive event routing. Alias: 'comb'. */
|
|
64
|
+
honeycomb?: {
|
|
65
|
+
publishes?: string[];
|
|
66
|
+
subscribes?: string[];
|
|
67
|
+
};
|
|
68
|
+
/** @deprecated Use 'honeycomb'. */
|
|
69
|
+
comb?: {
|
|
70
|
+
publishes?: string[];
|
|
71
|
+
subscribes?: string[];
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
export interface BroodConfig {
|
|
75
|
+
name: string;
|
|
76
|
+
version?: string;
|
|
77
|
+
/** Default LLM provider shorthand (e.g. "ollama/qwen3:8b") */
|
|
78
|
+
provider?: string;
|
|
79
|
+
/** Role → provider override map (e.g. { reviewer: "anthropic/claude-sonnet" }) */
|
|
80
|
+
models?: Record<string, string>;
|
|
81
|
+
/** Environment variables injected into all child processes */
|
|
82
|
+
env?: Record<string, string>;
|
|
83
|
+
/** Seconds between each agent spawn (default: 2). Increase for remote providers. */
|
|
84
|
+
stagger?: number;
|
|
85
|
+
/** Top-level dance file path. Aliases: 'logic'. Per-hive dances override this. */
|
|
86
|
+
dances?: string;
|
|
87
|
+
hives: Record<string, HiveConfig>;
|
|
88
|
+
}
|
|
89
|
+
/** Find brood file in directory or via explicit path. */
|
|
90
|
+
export declare function findBroodFile(fileArg?: string): string | null;
|
|
91
|
+
/** Parse and validate a brood file. */
|
|
92
|
+
export declare function parseBroodFile(filePath: string): Promise<BroodConfig>;
|
package/dist/brood.js
ADDED
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* brood.yaml parser — "docker-compose for agents"
|
|
3
|
+
*
|
|
4
|
+
* Reads a brood.yaml (or brood.json) file and returns a validated BroodConfig.
|
|
5
|
+
* No Zod dependency — manual validation consistent with CLI patterns.
|
|
6
|
+
*/
|
|
7
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
8
|
+
import { join, resolve } from 'node:path';
|
|
9
|
+
import yaml from 'js-yaml';
|
|
10
|
+
/** Default: 0 = wait forever. Set a positive number for a timeout in seconds. */
|
|
11
|
+
const DEFAULT_START_ON_TIMEOUT = 0;
|
|
12
|
+
/** Normalize all startOn variants to a flat config for drone. */
|
|
13
|
+
export function normalizeStartOn(raw) {
|
|
14
|
+
// Simple string: "section_complete"
|
|
15
|
+
if (typeof raw === 'string') {
|
|
16
|
+
return {
|
|
17
|
+
conditions: [{ event: raw, count: 1 }],
|
|
18
|
+
timeout: DEFAULT_START_ON_TIMEOUT,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
const timeout = typeof raw.timeout === 'number' ? raw.timeout : DEFAULT_START_ON_TIMEOUT;
|
|
22
|
+
// AND combo: { all: [...] }
|
|
23
|
+
if (raw.all) {
|
|
24
|
+
const conditions = raw.all.map(item => {
|
|
25
|
+
if (typeof item === 'string')
|
|
26
|
+
return { event: item, count: 1 };
|
|
27
|
+
return { event: item.event, count: item.count ?? 1 };
|
|
28
|
+
});
|
|
29
|
+
return { conditions, timeout };
|
|
30
|
+
}
|
|
31
|
+
// Single event with options: { event: "...", count?: N }
|
|
32
|
+
if (raw.event) {
|
|
33
|
+
return {
|
|
34
|
+
conditions: [{ event: raw.event, count: raw.count ?? 1 }],
|
|
35
|
+
timeout,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
throw new Error('startOn must be a string, { event, count? }, or { all: [...] }');
|
|
39
|
+
}
|
|
40
|
+
const BROOD_FILES = ['brood.yaml', 'brood.yml', 'brood.json'];
|
|
41
|
+
/** Find brood file in directory or via explicit path. */
|
|
42
|
+
export function findBroodFile(fileArg) {
|
|
43
|
+
if (fileArg) {
|
|
44
|
+
const p = resolve(fileArg);
|
|
45
|
+
return existsSync(p) ? p : null;
|
|
46
|
+
}
|
|
47
|
+
for (const name of BROOD_FILES) {
|
|
48
|
+
const p = join(process.cwd(), name);
|
|
49
|
+
if (existsSync(p))
|
|
50
|
+
return p;
|
|
51
|
+
}
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
/** Parse and validate a brood file. */
|
|
55
|
+
export async function parseBroodFile(filePath) {
|
|
56
|
+
const content = readFileSync(filePath, 'utf8');
|
|
57
|
+
const raw = filePath.endsWith('.json') ? JSON.parse(content) : parseYaml(content);
|
|
58
|
+
return validate(raw);
|
|
59
|
+
}
|
|
60
|
+
function parseYaml(content) {
|
|
61
|
+
return yaml.load(content);
|
|
62
|
+
}
|
|
63
|
+
function validate(raw) {
|
|
64
|
+
if (!raw || typeof raw !== 'object') {
|
|
65
|
+
throw new Error('brood file must be a YAML/JSON object');
|
|
66
|
+
}
|
|
67
|
+
const obj = raw;
|
|
68
|
+
if (typeof obj.name !== 'string' || !obj.name) {
|
|
69
|
+
throw new Error('brood file requires a "name" field');
|
|
70
|
+
}
|
|
71
|
+
if (!obj.hives || typeof obj.hives !== 'object') {
|
|
72
|
+
throw new Error('brood file requires a "hives" map');
|
|
73
|
+
}
|
|
74
|
+
const hives = {};
|
|
75
|
+
const hivesObj = obj.hives;
|
|
76
|
+
for (const [name, value] of Object.entries(hivesObj)) {
|
|
77
|
+
if (!value || typeof value !== 'object') {
|
|
78
|
+
throw new Error(`hive "${name}" must be an object`);
|
|
79
|
+
}
|
|
80
|
+
const hive = value;
|
|
81
|
+
const config = {};
|
|
82
|
+
if (hive.worktree !== undefined) {
|
|
83
|
+
if (typeof hive.worktree !== 'string')
|
|
84
|
+
throw new Error(`hive "${name}".worktree must be a string`);
|
|
85
|
+
config.worktree = hive.worktree;
|
|
86
|
+
}
|
|
87
|
+
// Accept 'acp', 'spec', or 'protocol' (prefer acp > spec > protocol)
|
|
88
|
+
const acpRaw = hive.acp ?? hive.spec ?? hive.protocol;
|
|
89
|
+
if (acpRaw !== undefined) {
|
|
90
|
+
if (typeof acpRaw === 'string') {
|
|
91
|
+
config.acp = acpRaw;
|
|
92
|
+
}
|
|
93
|
+
else if (typeof acpRaw === 'object' && acpRaw !== null && !Array.isArray(acpRaw)) {
|
|
94
|
+
// Inline ACP spec object
|
|
95
|
+
config.acp = acpRaw;
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
throw new Error(`hive "${name}".acp must be a string (file/URL) or inline spec object`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if (hive.port !== undefined) {
|
|
102
|
+
if (typeof hive.port !== 'number')
|
|
103
|
+
throw new Error(`hive "${name}".port must be a number`);
|
|
104
|
+
config.port = hive.port;
|
|
105
|
+
}
|
|
106
|
+
// Accept both 'agents' and 'workers' (prefer 'workers', alias 'agents')
|
|
107
|
+
const agentsRaw = hive.workers ?? hive.agents;
|
|
108
|
+
if (agentsRaw !== undefined) {
|
|
109
|
+
if (!Array.isArray(agentsRaw))
|
|
110
|
+
throw new Error(`hive "${name}".agents must be an array`);
|
|
111
|
+
config.agents = agentsRaw.map((a, i) => {
|
|
112
|
+
if (!a || typeof a !== 'object')
|
|
113
|
+
throw new Error(`hive "${name}".agents[${i}] must be an object`);
|
|
114
|
+
const agent = a;
|
|
115
|
+
if (typeof agent.role !== 'string')
|
|
116
|
+
throw new Error(`hive "${name}".agents[${i}].role must be a string`);
|
|
117
|
+
// Parse tools field
|
|
118
|
+
let tools;
|
|
119
|
+
if (agent.tools !== undefined) {
|
|
120
|
+
if (agent.tools === 'all') {
|
|
121
|
+
tools = 'all';
|
|
122
|
+
}
|
|
123
|
+
else if (Array.isArray(agent.tools) && agent.tools.every((t) => typeof t === 'string')) {
|
|
124
|
+
tools = agent.tools;
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
throw new Error(`hive "${name}".agents[${i}].tools must be 'all' or an array of strings`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Parse coordination field
|
|
131
|
+
let coordination;
|
|
132
|
+
if (agent.coordination !== undefined) {
|
|
133
|
+
if (typeof agent.coordination === 'string' && ['lite', 'full', 'none'].includes(agent.coordination)) {
|
|
134
|
+
coordination = agent.coordination;
|
|
135
|
+
}
|
|
136
|
+
else if (Array.isArray(agent.coordination) && agent.coordination.every((t) => typeof t === 'string')) {
|
|
137
|
+
coordination = agent.coordination;
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
throw new Error(`hive "${name}".agents[${i}].coordination must be 'lite', 'full', 'none', or an array of strings`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// Parse type field
|
|
144
|
+
let agentType;
|
|
145
|
+
if (agent.type !== undefined) {
|
|
146
|
+
if (agent.type !== 'worker' && agent.type !== 'drone' && agent.type !== 'claude') {
|
|
147
|
+
throw new Error(`hive "${name}".agents[${i}].type must be 'worker', 'drone', or 'claude'`);
|
|
148
|
+
}
|
|
149
|
+
agentType = agent.type;
|
|
150
|
+
}
|
|
151
|
+
// Parse startOn field (validated at normalization time during `wgl up`)
|
|
152
|
+
const startOn = agent.startOn !== undefined ? agent.startOn : undefined;
|
|
153
|
+
// Parse wake_on field
|
|
154
|
+
let wakeOn;
|
|
155
|
+
if (agent.wake_on !== undefined) {
|
|
156
|
+
if (!agent.wake_on || typeof agent.wake_on !== 'object') {
|
|
157
|
+
throw new Error(`hive "${name}".agents[${i}].wake_on must be an object`);
|
|
158
|
+
}
|
|
159
|
+
const wo = agent.wake_on;
|
|
160
|
+
wakeOn = {
|
|
161
|
+
types: Array.isArray(wo.types) ? wo.types.filter((t) => typeof t === 'string') : undefined,
|
|
162
|
+
timeout: typeof wo.timeout === 'number' ? wo.timeout : undefined,
|
|
163
|
+
max_wakes: typeof wo.max_wakes === 'number' ? wo.max_wakes : undefined,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
return {
|
|
167
|
+
role: agent.role,
|
|
168
|
+
count: typeof agent.count === 'number' ? agent.count : undefined,
|
|
169
|
+
type: agentType,
|
|
170
|
+
model_hint: typeof agent.model_hint === 'string' ? agent.model_hint : undefined,
|
|
171
|
+
prompt: typeof agent.prompt === 'string' ? agent.prompt : undefined,
|
|
172
|
+
pluginDir: typeof agent.plugin_dir === 'string' ? agent.plugin_dir : undefined,
|
|
173
|
+
tools,
|
|
174
|
+
coordination,
|
|
175
|
+
startOn,
|
|
176
|
+
wake_on: wakeOn,
|
|
177
|
+
};
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
// Accept 'honeycomb' or 'comb' (prefer honeycomb)
|
|
181
|
+
const honeycombRaw = hive.honeycomb ?? hive.comb;
|
|
182
|
+
if (honeycombRaw !== undefined) {
|
|
183
|
+
if (!honeycombRaw || typeof honeycombRaw !== 'object') {
|
|
184
|
+
throw new Error(`hive "${name}".honeycomb must be an object`);
|
|
185
|
+
}
|
|
186
|
+
const hc = honeycombRaw;
|
|
187
|
+
config.honeycomb = {
|
|
188
|
+
publishes: Array.isArray(hc.publishes) ? hc.publishes.filter((x) => typeof x === 'string') : undefined,
|
|
189
|
+
subscribes: Array.isArray(hc.subscribes) ? hc.subscribes.filter((x) => typeof x === 'string') : undefined,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
// Accept 'dances' or 'logic' (prefer dances)
|
|
193
|
+
const dancesRaw = hive.dances ?? hive.logic;
|
|
194
|
+
if (dancesRaw !== undefined) {
|
|
195
|
+
if (typeof dancesRaw !== 'string')
|
|
196
|
+
throw new Error(`hive "${name}".dances must be a string (file path)`);
|
|
197
|
+
config.dances = dancesRaw;
|
|
198
|
+
}
|
|
199
|
+
hives[name] = config;
|
|
200
|
+
}
|
|
201
|
+
// Parse provider
|
|
202
|
+
let provider;
|
|
203
|
+
if (obj.provider !== undefined) {
|
|
204
|
+
if (typeof obj.provider !== 'string')
|
|
205
|
+
throw new Error('"provider" must be a string (e.g. "ollama/qwen3:8b")');
|
|
206
|
+
provider = obj.provider;
|
|
207
|
+
}
|
|
208
|
+
// Parse models map
|
|
209
|
+
let models;
|
|
210
|
+
if (obj.models !== undefined) {
|
|
211
|
+
if (!obj.models || typeof obj.models !== 'object' || Array.isArray(obj.models)) {
|
|
212
|
+
throw new Error('"models" must be an object mapping role names to provider strings');
|
|
213
|
+
}
|
|
214
|
+
models = {};
|
|
215
|
+
for (const [role, val] of Object.entries(obj.models)) {
|
|
216
|
+
if (typeof val !== 'string')
|
|
217
|
+
throw new Error(`models.${role} must be a string`);
|
|
218
|
+
models[role] = val;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
// Parse env map
|
|
222
|
+
let env;
|
|
223
|
+
if (obj.env !== undefined) {
|
|
224
|
+
if (!obj.env || typeof obj.env !== 'object' || Array.isArray(obj.env)) {
|
|
225
|
+
throw new Error('"env" must be an object mapping variable names to string values');
|
|
226
|
+
}
|
|
227
|
+
env = {};
|
|
228
|
+
for (const [key, val] of Object.entries(obj.env)) {
|
|
229
|
+
env[key] = String(val);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
// Parse stagger
|
|
233
|
+
let stagger;
|
|
234
|
+
if (obj.stagger !== undefined) {
|
|
235
|
+
if (typeof obj.stagger !== 'number' || obj.stagger < 0) {
|
|
236
|
+
throw new Error('"stagger" must be a non-negative number (seconds between agent spawns)');
|
|
237
|
+
}
|
|
238
|
+
stagger = obj.stagger;
|
|
239
|
+
}
|
|
240
|
+
// Parse dances (top-level, aliases: 'logic')
|
|
241
|
+
let dances;
|
|
242
|
+
const dancesTopRaw = obj.dances ?? obj.logic;
|
|
243
|
+
if (dancesTopRaw !== undefined) {
|
|
244
|
+
if (typeof dancesTopRaw !== 'string')
|
|
245
|
+
throw new Error('"dances" must be a string (file path)');
|
|
246
|
+
dances = dancesTopRaw;
|
|
247
|
+
}
|
|
248
|
+
return {
|
|
249
|
+
name: obj.name,
|
|
250
|
+
version: typeof obj.version === 'string' ? obj.version : undefined,
|
|
251
|
+
provider,
|
|
252
|
+
models,
|
|
253
|
+
env,
|
|
254
|
+
stagger,
|
|
255
|
+
dances,
|
|
256
|
+
hives,
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=brood.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brood.js","sourceRoot":"","sources":["../src/brood.ts"],"names":[],"mappings":"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"}
|