@zcy2nn/agent-forge 1.1.3 → 1.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/README.md +247 -247
  2. package/agent-forge.schema.json +2 -133
  3. package/dist/cli/index.js +109 -204
  4. package/dist/cli/providers.d.ts +0 -44
  5. package/dist/config/constants.d.ts +3 -4
  6. package/dist/config/index.d.ts +0 -1
  7. package/dist/config/schema.d.ts +2 -72
  8. package/dist/index.js +191 -995
  9. package/dist/tools/index.d.ts +0 -1
  10. package/dist/tui.js +5 -18
  11. package/package.json +104 -104
  12. package/src/skills/brainstorming/SKILL.md +185 -186
  13. package/src/skills/brainstorming/scripts/frame-template.html +214 -214
  14. package/src/skills/brainstorming/scripts/server.cjs +354 -354
  15. package/src/skills/brainstorming/spec-document-reviewer-prompt.md +1 -1
  16. package/src/skills/codemap/README.md +3 -3
  17. package/src/skills/codemap/SKILL.md +5 -5
  18. package/src/skills/codemap/codemap.md +4 -4
  19. package/src/skills/codemap/scripts/codemap.mjs +1 -1
  20. package/src/skills/codemap/scripts/codemap.test.ts +1 -1
  21. package/src/skills/requesting-code-review/SKILL.md +1 -1
  22. package/src/skills/subagent-driven-development/SKILL.md +1 -1
  23. package/src/skills/systematic-debugging/SKILL.md +318 -318
  24. package/src/skills/test-driven-development/SKILL.md +392 -392
  25. package/src/skills/verification-before-completion/SKILL.md +153 -153
  26. package/src/skills/writing-plans/SKILL.md +2 -2
  27. package/src/skills/writing-skills/graphviz-conventions.dot +171 -171
  28. package/dist/agents/council.d.ts +0 -27
  29. package/dist/agents/councillor.d.ts +0 -2
  30. package/dist/agents/designer.d.ts +0 -2
  31. package/dist/agents/explorer.d.ts +0 -2
  32. package/dist/agents/fixer.d.ts +0 -2
  33. package/dist/agents/implementer.d.ts +0 -2
  34. package/dist/agents/librarian.d.ts +0 -2
  35. package/dist/agents/observer.d.ts +0 -2
  36. package/dist/agents/oracle.d.ts +0 -2
  37. package/dist/agents/reviewer.d.ts +0 -2
  38. package/dist/cli/migration.d.ts +0 -46
  39. package/dist/config/council-schema.d.ts +0 -127
  40. package/dist/council/council-manager.d.ts +0 -49
  41. package/dist/council/index.d.ts +0 -1
  42. package/dist/skills/systematic-debugging/condition-based-waiting-example.d.ts +0 -51
  43. package/dist/tools/council.d.ts +0 -10
  44. package/src/skills/using-git-worktrees/SKILL.md +0 -226
package/dist/cli/index.js CHANGED
@@ -1,10 +1,11 @@
1
1
  #!/usr/bin/env bun
2
+ // @bun
2
3
  import { createRequire } from "node:module";
3
4
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
4
5
 
5
6
  // src/cli/doctor.ts
6
7
  import * as fs2 from "node:fs";
7
- import { z as z3 } from "zod";
8
+ import { z as z2 } from "zod";
8
9
 
9
10
  // src/config/loader.ts
10
11
  import * as fs from "node:fs";
@@ -126,95 +127,20 @@ function ensureOpenCodeConfigDir() {
126
127
 
127
128
  // src/config/constants.ts
128
129
  var SUBAGENT_NAMES = [
129
- "researcher",
130
- "reviewer",
131
- "implementer",
132
- "council",
133
- "councillor"
130
+ "researcher"
134
131
  ];
135
132
  var ORCHESTRATOR_NAME = "orchestrator";
136
133
  var ALL_AGENT_NAMES = [ORCHESTRATOR_NAME, ...SUBAGENT_NAMES];
137
134
  var PROTECTED_AGENTS = new Set([
138
135
  "orchestrator",
139
- "researcher",
140
- "reviewer",
141
- "implementer",
142
- "councillor"
136
+ "researcher"
143
137
  ]);
144
138
  var DEFAULT_TIMEOUT_MS = 2 * 60 * 1000;
145
139
  var MAX_POLL_TIME_MS = 5 * 60 * 1000;
146
- // src/config/council-schema.ts
147
- import { z } from "zod";
148
- var ModelIdSchema = z.string().regex(/^[^/\s]+\/[^\s]+$/, 'Expected provider/model format (e.g. "openai/gpt-5.4-mini")');
149
- var CouncillorConfigSchema = z.object({
150
- model: ModelIdSchema.describe('Model ID in provider/model format (e.g. "openai/gpt-5.4-mini")'),
151
- variant: z.string().optional(),
152
- prompt: z.string().optional().describe("Optional role/guidance injected into the councillor user prompt")
153
- });
154
- var CouncilPresetSchema = z.record(z.string(), z.record(z.string(), z.unknown())).transform((entries, ctx) => {
155
- const councillors = {};
156
- for (const [key, raw] of Object.entries(entries)) {
157
- if (key === "master")
158
- continue;
159
- if (key === "councillors" && typeof raw === "object" && raw !== null) {
160
- for (const [innerKey, innerRaw] of Object.entries(raw)) {
161
- const innerParsed = CouncillorConfigSchema.safeParse(innerRaw);
162
- if (!innerParsed.success) {
163
- ctx.addIssue({
164
- code: z.ZodIssueCode.custom,
165
- message: `Invalid councillor "${innerKey}" (nested under legacy "councillors" key): ${innerParsed.error.issues.map((i) => i.message).join(", ")}`
166
- });
167
- return z.NEVER;
168
- }
169
- councillors[innerKey] = innerParsed.data;
170
- }
171
- continue;
172
- }
173
- const parsed = CouncillorConfigSchema.safeParse(raw);
174
- if (!parsed.success) {
175
- ctx.addIssue({
176
- code: z.ZodIssueCode.custom,
177
- message: `Invalid councillor "${key}": ${parsed.error.issues.map((i) => i.message).join(", ")}`
178
- });
179
- return z.NEVER;
180
- }
181
- councillors[key] = parsed.data;
182
- }
183
- return councillors;
184
- });
185
- var CouncillorExecutionModeSchema = z.enum(["parallel", "serial"]).default("parallel").describe('Execution mode for councillors. Use "serial" for single-model systems to avoid conflicts. ' + 'Use "parallel" for multi-model systems for faster execution.');
186
- var CouncilConfigSchema = z.object({
187
- presets: z.record(z.string(), CouncilPresetSchema),
188
- timeout: z.number().min(0).default(180000),
189
- default_preset: z.string().default("default"),
190
- councillor_execution_mode: CouncillorExecutionModeSchema.describe('Execution mode for councillors. "serial" runs them one at a time (required for single-model systems). "parallel" runs them concurrently (default, faster for multi-model systems).'),
191
- councillor_retries: z.number().int().min(0).max(5).default(3).describe("Number of retry attempts for councillors that return empty responses " + "(e.g. due to provider rate limiting). Default: 3 retries."),
192
- master: z.unknown().optional().describe("DEPRECATED — ignored. Council agent synthesizes directly."),
193
- master_timeout: z.unknown().optional().describe('DEPRECATED — ignored. Use "timeout" instead.'),
194
- master_fallback: z.unknown().optional().describe("DEPRECATED — ignored. No separate master session.")
195
- }).transform((data) => {
196
- const deprecated = [];
197
- if (data.master !== undefined)
198
- deprecated.push("master");
199
- if (data.master_timeout !== undefined)
200
- deprecated.push("master_timeout");
201
- if (data.master_fallback !== undefined)
202
- deprecated.push("master_fallback");
203
- const legacyMasterModel = typeof data.master === "object" && data.master !== null && "model" in data.master && typeof data.master.model === "string" ? data.master.model : undefined;
204
- return {
205
- presets: data.presets,
206
- timeout: data.timeout,
207
- default_preset: data.default_preset,
208
- councillor_execution_mode: data.councillor_execution_mode,
209
- councillor_retries: data.councillor_retries,
210
- _deprecated: deprecated.length > 0 ? deprecated : undefined,
211
- _legacyMasterModel: legacyMasterModel
212
- };
213
- });
214
140
  // src/config/schema.ts
215
- import { z as z2 } from "zod";
216
- var ProviderModelIdSchema = z2.string().regex(/^[^/\s]+\/[^\s]+$/, "Expected provider/model format (provider/.../model)");
217
- var ManualAgentPlanSchema = z2.object({
141
+ import { z } from "zod";
142
+ var ProviderModelIdSchema = z.string().regex(/^[^/\s]+\/[^\s]+$/, "Expected provider/model format (provider/.../model)");
143
+ var ManualAgentPlanSchema = z.object({
218
144
  primary: ProviderModelIdSchema,
219
145
  fallback1: ProviderModelIdSchema,
220
146
  fallback2: ProviderModelIdSchema,
@@ -228,46 +154,42 @@ var ManualAgentPlanSchema = z2.object({
228
154
  ]);
229
155
  if (unique.size !== 4) {
230
156
  ctx.addIssue({
231
- code: z2.ZodIssueCode.custom,
157
+ code: z.ZodIssueCode.custom,
232
158
  message: "primary and fallbacks must be unique per agent"
233
159
  });
234
160
  }
235
161
  });
236
- var ManualPlanSchema = z2.object({
162
+ var ManualPlanSchema = z.object({
237
163
  orchestrator: ManualAgentPlanSchema,
238
- researcher: ManualAgentPlanSchema,
239
- reviewer: ManualAgentPlanSchema,
240
- implementer: ManualAgentPlanSchema
164
+ researcher: ManualAgentPlanSchema
241
165
  }).strict();
242
- var AgentModelChainSchema = z2.array(z2.string()).min(1);
243
- var FallbackChainsSchema = z2.object({
166
+ var AgentModelChainSchema = z.array(z.string()).min(1);
167
+ var FallbackChainsSchema = z.object({
244
168
  orchestrator: AgentModelChainSchema.optional(),
245
- researcher: AgentModelChainSchema.optional(),
246
- reviewer: AgentModelChainSchema.optional(),
247
- implementer: AgentModelChainSchema.optional()
169
+ researcher: AgentModelChainSchema.optional()
248
170
  }).catchall(AgentModelChainSchema);
249
- var AgentOverrideConfigSchema = z2.object({
250
- model: z2.union([
251
- z2.string(),
252
- z2.array(z2.union([
253
- z2.string(),
254
- z2.object({
255
- id: z2.string(),
256
- variant: z2.string().optional()
171
+ var AgentOverrideConfigSchema = z.object({
172
+ model: z.union([
173
+ z.string(),
174
+ z.array(z.union([
175
+ z.string(),
176
+ z.object({
177
+ id: z.string(),
178
+ variant: z.string().optional()
257
179
  })
258
180
  ])).min(1)
259
181
  ]).optional(),
260
- temperature: z2.number().min(0).max(2).optional(),
261
- variant: z2.string().optional().catch(undefined),
262
- skills: z2.array(z2.string()).optional(),
263
- mcps: z2.array(z2.string()).optional(),
264
- prompt: z2.string().min(1).optional(),
265
- orchestratorPrompt: z2.string().min(1).optional(),
266
- options: z2.record(z2.string(), z2.unknown()).optional(),
267
- displayName: z2.string().min(1).optional()
182
+ temperature: z.number().min(0).max(2).optional(),
183
+ variant: z.string().optional().catch(undefined),
184
+ skills: z.array(z.string()).optional(),
185
+ mcps: z.array(z.string()).optional(),
186
+ prompt: z.string().min(1).optional(),
187
+ orchestratorPrompt: z.string().min(1).optional(),
188
+ options: z.record(z.string(), z.unknown()).optional(),
189
+ displayName: z.string().min(1).optional()
268
190
  }).strict();
269
- var MultiplexerTypeSchema = z2.enum(["auto", "tmux", "zellij", "none"]);
270
- var MultiplexerLayoutSchema = z2.enum([
191
+ var MultiplexerTypeSchema = z.enum(["auto", "tmux", "zellij", "none"]);
192
+ var MultiplexerLayoutSchema = z.enum([
271
193
  "main-horizontal",
272
194
  "main-vertical",
273
195
  "tiled",
@@ -275,56 +197,56 @@ var MultiplexerLayoutSchema = z2.enum([
275
197
  "even-vertical"
276
198
  ]);
277
199
  var TmuxLayoutSchema = MultiplexerLayoutSchema;
278
- var MultiplexerConfigSchema = z2.object({
200
+ var MultiplexerConfigSchema = z.object({
279
201
  type: MultiplexerTypeSchema.default("none"),
280
202
  layout: MultiplexerLayoutSchema.default("main-vertical"),
281
- main_pane_size: z2.number().min(20).max(80).default(60)
203
+ main_pane_size: z.number().min(20).max(80).default(60)
282
204
  });
283
- var TmuxConfigSchema = z2.object({
284
- enabled: z2.boolean().default(false),
205
+ var TmuxConfigSchema = z.object({
206
+ enabled: z.boolean().default(false),
285
207
  layout: TmuxLayoutSchema.default("main-vertical"),
286
- main_pane_size: z2.number().min(20).max(80).default(60)
208
+ main_pane_size: z.number().min(20).max(80).default(60)
287
209
  });
288
- var PresetSchema = z2.record(z2.string(), AgentOverrideConfigSchema);
289
- var WebsearchConfigSchema = z2.object({
290
- provider: z2.enum(["exa", "tavily"]).default("exa")
210
+ var PresetSchema = z.record(z.string(), AgentOverrideConfigSchema);
211
+ var WebsearchConfigSchema = z.object({
212
+ provider: z.enum(["exa", "tavily"]).default("exa")
291
213
  });
292
- var McpNameSchema = z2.enum(["websearch", "context7", "grep_app"]);
293
- var InterviewConfigSchema = z2.object({
294
- maxQuestions: z2.number().int().min(1).max(10).default(2),
295
- outputFolder: z2.string().min(1).default("interview"),
296
- autoOpenBrowser: z2.boolean().default(true).describe("Automatically open the interview UI in your default browser during interactive runs. Disabled automatically in tests and CI."),
297
- port: z2.number().int().min(0).max(65535).default(0),
298
- dashboard: z2.boolean().default(false)
214
+ var McpNameSchema = z.enum(["websearch", "context7", "grep_app"]);
215
+ var InterviewConfigSchema = z.object({
216
+ maxQuestions: z.number().int().min(1).max(10).default(2),
217
+ outputFolder: z.string().min(1).default("interview"),
218
+ autoOpenBrowser: z.boolean().default(true).describe("Automatically open the interview UI in your default browser during interactive runs. Disabled automatically in tests and CI."),
219
+ port: z.number().int().min(0).max(65535).default(0),
220
+ dashboard: z.boolean().default(false)
299
221
  });
300
- var SessionManagerConfigSchema = z2.object({
301
- maxSessionsPerAgent: z2.number().int().min(1).max(10).default(2),
302
- readContextMinLines: z2.number().int().min(0).max(1000).default(10),
303
- readContextMaxFiles: z2.number().int().min(0).max(50).default(8)
222
+ var SessionManagerConfigSchema = z.object({
223
+ maxSessionsPerAgent: z.number().int().min(1).max(10).default(2),
224
+ readContextMinLines: z.number().int().min(0).max(1000).default(10),
225
+ readContextMaxFiles: z.number().int().min(0).max(50).default(8)
304
226
  });
305
- var DivoomConfigSchema = z2.object({
306
- enabled: z2.boolean().default(false),
307
- python: z2.string().min(1).default("/Applications/Divoom MiniToo.app/Contents/Resources/.venv/bin/python"),
308
- script: z2.string().min(1).default("/Applications/Divoom MiniToo.app/Contents/Resources/tools/divoom_send.py"),
309
- size: z2.number().int().min(1).max(1024).default(128),
310
- fps: z2.number().int().min(1).max(60).default(8),
311
- speed: z2.number().int().min(1).max(1e4).default(125),
312
- maxFrames: z2.number().int().min(1).max(500).default(24),
313
- posterizeBits: z2.number().int().min(1).max(8).default(3),
314
- gifs: z2.record(z2.string(), z2.string().min(1)).optional()
227
+ var DivoomConfigSchema = z.object({
228
+ enabled: z.boolean().default(false),
229
+ python: z.string().min(1).default("/Applications/Divoom MiniToo.app/Contents/Resources/.venv/bin/python"),
230
+ script: z.string().min(1).default("/Applications/Divoom MiniToo.app/Contents/Resources/tools/divoom_send.py"),
231
+ size: z.number().int().min(1).max(1024).default(128),
232
+ fps: z.number().int().min(1).max(60).default(8),
233
+ speed: z.number().int().min(1).max(1e4).default(125),
234
+ maxFrames: z.number().int().min(1).max(500).default(24),
235
+ posterizeBits: z.number().int().min(1).max(8).default(3),
236
+ gifs: z.record(z.string(), z.string().min(1)).optional()
315
237
  });
316
- var TodoContinuationConfigSchema = z2.object({
317
- maxContinuations: z2.number().int().min(1).max(50).default(5).describe("Maximum consecutive auto-continuations before stopping to ask user"),
318
- cooldownMs: z2.number().int().min(0).max(30000).default(3000).describe("Delay in ms before auto-continuing (gives user time to abort)"),
319
- autoEnable: z2.boolean().default(false).describe("Automatically enable auto-continue when the orchestrator session has enough todos"),
320
- autoEnableThreshold: z2.number().int().min(1).max(50).default(4).describe("Number of todos that triggers auto-enable (only used when autoEnable is true)")
238
+ var TodoContinuationConfigSchema = z.object({
239
+ maxContinuations: z.number().int().min(1).max(50).default(5).describe("Maximum consecutive auto-continuations before stopping to ask user"),
240
+ cooldownMs: z.number().int().min(0).max(30000).default(3000).describe("Delay in ms before auto-continuing (gives user time to abort)"),
241
+ autoEnable: z.boolean().default(false).describe("Automatically enable auto-continue when the orchestrator session has enough todos"),
242
+ autoEnableThreshold: z.number().int().min(1).max(50).default(4).describe("Number of todos that triggers auto-enable (only used when autoEnable is true)")
321
243
  });
322
- var FailoverConfigSchema = z2.object({
323
- enabled: z2.boolean().default(true),
324
- timeoutMs: z2.number().min(0).default(15000),
325
- retryDelayMs: z2.number().min(0).default(500),
244
+ var FailoverConfigSchema = z.object({
245
+ enabled: z.boolean().default(true),
246
+ timeoutMs: z.number().min(0).default(15000),
247
+ retryDelayMs: z.number().min(0).default(500),
326
248
  chains: FallbackChainsSchema.default({}),
327
- retry_on_empty: z2.boolean().default(true).describe("When true (default), empty provider responses are treated as failures, " + "triggering fallback/retry. Set to false to treat them as successes.")
249
+ retry_on_empty: z.boolean().default(true).describe("When true (default), empty provider responses are treated as failures, " + "triggering fallback/retry. Set to false to treat them as successes.")
328
250
  });
329
251
  function validateCustomOnlyPromptFields(overrides, ctx, pathPrefix) {
330
252
  for (const [name, override] of Object.entries(overrides)) {
@@ -334,31 +256,31 @@ function validateCustomOnlyPromptFields(overrides, ctx, pathPrefix) {
334
256
  }
335
257
  if (override.prompt !== undefined) {
336
258
  ctx.addIssue({
337
- code: z2.ZodIssueCode.custom,
259
+ code: z.ZodIssueCode.custom,
338
260
  path: [...pathPrefix, name, "prompt"],
339
261
  message: "prompt is only supported for custom agents"
340
262
  });
341
263
  }
342
264
  if (override.orchestratorPrompt !== undefined) {
343
265
  ctx.addIssue({
344
- code: z2.ZodIssueCode.custom,
266
+ code: z.ZodIssueCode.custom,
345
267
  path: [...pathPrefix, name, "orchestratorPrompt"],
346
268
  message: "orchestratorPrompt is only supported for custom agents"
347
269
  });
348
270
  }
349
271
  }
350
272
  }
351
- var PluginConfigSchema = z2.object({
352
- preset: z2.string().optional(),
353
- setDefaultAgent: z2.boolean().optional(),
354
- scoringEngineVersion: z2.enum(["v1", "v2-shadow", "v2"]).optional(),
355
- balanceProviderUsage: z2.boolean().optional(),
356
- autoUpdate: z2.boolean().optional().describe("Disable automatic installation of plugin updates when false. Defaults to true."),
273
+ var PluginConfigSchema = z.object({
274
+ preset: z.string().optional(),
275
+ setDefaultAgent: z.boolean().optional(),
276
+ scoringEngineVersion: z.enum(["v1", "v2-shadow", "v2"]).optional(),
277
+ balanceProviderUsage: z.boolean().optional(),
278
+ autoUpdate: z.boolean().optional().describe("Disable automatic installation of plugin updates when false. Defaults to true."),
357
279
  manualPlan: ManualPlanSchema.optional(),
358
- presets: z2.record(z2.string(), PresetSchema).optional(),
359
- agents: z2.record(z2.string(), AgentOverrideConfigSchema).optional(),
360
- disabled_agents: z2.array(z2.string()).optional().describe("Agent names to disable completely. " + "Disabled agents are not instantiated and cannot be delegated to. " + "Orchestrator, researcher, reviewer, implementer and council internal agents (councillor) cannot be disabled. " + "By default, only council is disabled."),
361
- disabled_mcps: z2.array(z2.string()).optional(),
280
+ presets: z.record(z.string(), PresetSchema).optional(),
281
+ agents: z.record(z.string(), AgentOverrideConfigSchema).optional(),
282
+ disabled_agents: z.array(z.string()).optional().describe("Agent names to disable completely. " + "Disabled agents are not instantiated and cannot be delegated to. " + "Orchestrator and researcher cannot be disabled."),
283
+ disabled_mcps: z.array(z.string()).optional(),
362
284
  multiplexer: MultiplexerConfigSchema.optional(),
363
285
  tmux: TmuxConfigSchema.optional(),
364
286
  websearch: WebsearchConfigSchema.optional(),
@@ -366,8 +288,7 @@ var PluginConfigSchema = z2.object({
366
288
  sessionManager: SessionManagerConfigSchema.optional(),
367
289
  divoom: DivoomConfigSchema.optional(),
368
290
  todoContinuation: TodoContinuationConfigSchema.optional(),
369
- fallback: FailoverConfigSchema.optional(),
370
- council: CouncilConfigSchema.optional()
291
+ fallback: FailoverConfigSchema.optional()
371
292
  }).superRefine((value, ctx) => {
372
293
  if (value.agents) {
373
294
  validateCustomOnlyPromptFields(value.agents, ctx, ["agents"]);
@@ -381,11 +302,7 @@ var PluginConfigSchema = z2.object({
381
302
  // src/config/agent-mcps.ts
382
303
  var DEFAULT_AGENT_MCPS = {
383
304
  orchestrator: ["*", "!context7"],
384
- researcher: ["websearch", "context7", "grep_app"],
385
- reviewer: [],
386
- implementer: [],
387
- council: [],
388
- councillor: []
305
+ researcher: ["websearch", "context7", "grep_app"]
389
306
  };
390
307
 
391
308
  // src/cli/custom-skills.ts
@@ -393,7 +310,7 @@ var CUSTOM_SKILLS = [
393
310
  {
394
311
  name: "simplify",
395
312
  description: "Code simplification and readability-focused refactoring",
396
- allowedAgents: ["reviewer"],
313
+ allowedAgents: ["orchestrator"],
397
314
  sourcePath: "src/skills/simplify"
398
315
  },
399
316
  {
@@ -432,12 +349,6 @@ var CUSTOM_SKILLS = [
432
349
  allowedAgents: ["orchestrator"],
433
350
  sourcePath: "src/skills/dispatching-parallel-agents"
434
351
  },
435
- {
436
- name: "using-git-worktrees",
437
- description: "Create isolated git worktrees before executing implementation plans",
438
- allowedAgents: ["orchestrator"],
439
- sourcePath: "src/skills/using-git-worktrees"
440
- },
441
352
  {
442
353
  name: "finishing-a-development-branch",
443
354
  description: "Guide completion of development work with structured merge/PR options",
@@ -453,25 +364,25 @@ var CUSTOM_SKILLS = [
453
364
  {
454
365
  name: "test-driven-development",
455
366
  description: "Write failing tests first, then minimal code to pass, before any implementation",
456
- allowedAgents: ["implementer"],
367
+ allowedAgents: ["orchestrator"],
457
368
  sourcePath: "src/skills/test-driven-development"
458
369
  },
459
370
  {
460
371
  name: "verification-before-completion",
461
372
  description: "Run verification commands and confirm output before claiming work is complete",
462
- allowedAgents: ["implementer"],
373
+ allowedAgents: ["orchestrator"],
463
374
  sourcePath: "src/skills/verification-before-completion"
464
375
  },
465
376
  {
466
377
  name: "systematic-debugging",
467
378
  description: "Find root cause before attempting fixes for any bug or test failure",
468
- allowedAgents: ["reviewer"],
379
+ allowedAgents: ["orchestrator"],
469
380
  sourcePath: "src/skills/systematic-debugging"
470
381
  },
471
382
  {
472
383
  name: "receiving-code-review",
473
384
  description: "Evaluate code review feedback with technical rigor before implementing suggestions",
474
- allowedAgents: ["reviewer"],
385
+ allowedAgents: ["orchestrator"],
475
386
  sourcePath: "src/skills/receiving-code-review"
476
387
  },
477
388
  {
@@ -489,7 +400,7 @@ var RECOMMENDED_SKILLS = [
489
400
  name: "agent-browser",
490
401
  repo: "https://github.com/vercel-labs/agent-browser",
491
402
  skillName: "agent-browser",
492
- allowedAgents: ["implementer"],
403
+ allowedAgents: ["orchestrator"],
493
404
  description: "High-performance browser automation",
494
405
  postInstallCommands: [
495
406
  "npm install -g agent-browser",
@@ -538,34 +449,23 @@ var GENERATED_PRESETS = ["openai", "opencode-go"];
538
449
  var MODEL_MAPPINGS = {
539
450
  openai: {
540
451
  orchestrator: { model: "openai/gpt-5.5" },
541
- reviewer: { model: "openai/gpt-5.5", variant: "high" },
542
- researcher: { model: "openai/gpt-5.4-mini", variant: "low" },
543
- implementer: { model: "openai/gpt-5.4-mini", variant: "low" }
452
+ researcher: { model: "openai/gpt-5.4-mini", variant: "low" }
544
453
  },
545
454
  kimi: {
546
455
  orchestrator: { model: "kimi-for-coding/k2p5" },
547
- reviewer: { model: "kimi-for-coding/k2p5", variant: "high" },
548
- researcher: { model: "kimi-for-coding/k2p5", variant: "low" },
549
- implementer: { model: "kimi-for-coding/k2p5", variant: "low" }
456
+ researcher: { model: "kimi-for-coding/k2p5", variant: "low" }
550
457
  },
551
458
  copilot: {
552
459
  orchestrator: { model: "github-copilot/claude-opus-4.6" },
553
- reviewer: { model: "github-copilot/claude-opus-4.6", variant: "high" },
554
- researcher: { model: "github-copilot/grok-code-fast-1", variant: "low" },
555
- implementer: { model: "github-copilot/claude-sonnet-4.6", variant: "low" }
460
+ researcher: { model: "github-copilot/grok-code-fast-1", variant: "low" }
556
461
  },
557
462
  "zai-plan": {
558
463
  orchestrator: { model: "zai-coding-plan/glm-5" },
559
- reviewer: { model: "zai-coding-plan/glm-5", variant: "high" },
560
- researcher: { model: "zai-coding-plan/glm-5", variant: "low" },
561
- implementer: { model: "zai-coding-plan/glm-5", variant: "low" }
464
+ researcher: { model: "zai-coding-plan/glm-5", variant: "low" }
562
465
  },
563
466
  "opencode-go": {
564
467
  orchestrator: { model: "opencode-go/glm-5.1" },
565
- reviewer: { model: "opencode-go/deepseek-v4-pro", variant: "max" },
566
- council: { model: "opencode-go/deepseek-v4-pro", variant: "high" },
567
- researcher: { model: "opencode-go/minimax-m2.7" },
568
- implementer: { model: "opencode-go/deepseek-v4-flash", variant: "high" }
468
+ researcher: { model: "opencode-go/minimax-m2.7" }
569
469
  }
570
470
  };
571
471
  function isGeneratedPresetName(value) {
@@ -593,9 +493,6 @@ function generateLiteConfig(installConfig) {
593
493
  ...RECOMMENDED_SKILLS.filter((s) => s.allowedAgents.includes("*") || s.allowedAgents.includes(agentName)).map((s) => s.skillName),
594
494
  ...CUSTOM_SKILLS.filter((s) => s.allowedAgents.includes("*") || s.allowedAgents.includes(agentName)).map((s) => s.name)
595
495
  ];
596
- if (installConfig.installSkills && agentName === "implementer" && !skills.includes("agent-browser")) {
597
- skills.push("agent-browser");
598
- }
599
496
  return {
600
497
  model: modelInfo.model,
601
498
  variant: modelInfo.variant,
@@ -990,8 +887,7 @@ function mergePluginConfigs(base, override) {
990
887
  interview: deepMerge(base.interview, override.interview),
991
888
  sessionManager: deepMerge(base.sessionManager, override.sessionManager),
992
889
  divoom: deepMerge(base.divoom, override.divoom),
993
- fallback: deepMerge(base.fallback, override.fallback),
994
- council: deepMerge(base.council, override.council)
890
+ fallback: deepMerge(base.fallback, override.fallback)
995
891
  };
996
892
  }
997
893
  function deepMerge(base, override) {
@@ -1055,7 +951,7 @@ function checkConfigFile(scope, configPath) {
1055
951
  ok: false,
1056
952
  error: {
1057
953
  kind: "invalid-schema",
1058
- message: z3.prettifyError(parseResult.error),
954
+ message: z2.prettifyError(parseResult.error),
1059
955
  issues: parseResult.error.issues
1060
956
  }
1061
957
  };
@@ -1611,6 +1507,15 @@ async function install(args) {
1611
1507
  return runInstall(config);
1612
1508
  }
1613
1509
 
1510
+ // src/cli/providers.ts
1511
+ var GENERATED_PRESETS2 = ["openai", "opencode-go"];
1512
+ function isGeneratedPresetName2(value) {
1513
+ return GENERATED_PRESETS2.includes(value);
1514
+ }
1515
+ function getGeneratedPresetNames2() {
1516
+ return [...GENERATED_PRESETS2];
1517
+ }
1518
+
1614
1519
  // src/cli/index.ts
1615
1520
  function parseArgs(args) {
1616
1521
  const result = {
@@ -1624,8 +1529,8 @@ function parseArgs(args) {
1624
1529
  result.skills = arg.split("=")[1];
1625
1530
  } else if (arg.startsWith("--preset=")) {
1626
1531
  const preset = arg.split("=")[1];
1627
- if (!isGeneratedPresetName(preset)) {
1628
- console.error(`Unsupported preset: ${preset}. Available presets: ${getGeneratedPresetNames().join(", ")}`);
1532
+ if (!isGeneratedPresetName2(preset)) {
1533
+ console.error(`Unsupported preset: ${preset}. Available presets: ${getGeneratedPresetNames2().join(", ")}`);
1629
1534
  process.exit(1);
1630
1535
  }
1631
1536
  result.preset = preset;
@@ -1659,7 +1564,7 @@ Options:
1659
1564
  Doctor options:
1660
1565
  --json Print diagnostics as JSON
1661
1566
 
1662
- Available presets: ${getGeneratedPresetNames().join(", ")}
1567
+ Available presets: ${getGeneratedPresetNames2().join(", ")}
1663
1568
 
1664
1569
  The installer generates OpenAI and OpenCode Go presets by default.
1665
1570
  OpenAI is active unless --preset selects another generated preset.
@@ -5,89 +5,45 @@ export declare const MODEL_MAPPINGS: {
5
5
  readonly orchestrator: {
6
6
  readonly model: "openai/gpt-5.5";
7
7
  };
8
- readonly reviewer: {
9
- readonly model: "openai/gpt-5.5";
10
- readonly variant: "high";
11
- };
12
8
  readonly researcher: {
13
9
  readonly model: "openai/gpt-5.4-mini";
14
10
  readonly variant: "low";
15
11
  };
16
- readonly implementer: {
17
- readonly model: "openai/gpt-5.4-mini";
18
- readonly variant: "low";
19
- };
20
12
  };
21
13
  readonly kimi: {
22
14
  readonly orchestrator: {
23
15
  readonly model: "kimi-for-coding/k2p5";
24
16
  };
25
- readonly reviewer: {
26
- readonly model: "kimi-for-coding/k2p5";
27
- readonly variant: "high";
28
- };
29
17
  readonly researcher: {
30
18
  readonly model: "kimi-for-coding/k2p5";
31
19
  readonly variant: "low";
32
20
  };
33
- readonly implementer: {
34
- readonly model: "kimi-for-coding/k2p5";
35
- readonly variant: "low";
36
- };
37
21
  };
38
22
  readonly copilot: {
39
23
  readonly orchestrator: {
40
24
  readonly model: "github-copilot/claude-opus-4.6";
41
25
  };
42
- readonly reviewer: {
43
- readonly model: "github-copilot/claude-opus-4.6";
44
- readonly variant: "high";
45
- };
46
26
  readonly researcher: {
47
27
  readonly model: "github-copilot/grok-code-fast-1";
48
28
  readonly variant: "low";
49
29
  };
50
- readonly implementer: {
51
- readonly model: "github-copilot/claude-sonnet-4.6";
52
- readonly variant: "low";
53
- };
54
30
  };
55
31
  readonly 'zai-plan': {
56
32
  readonly orchestrator: {
57
33
  readonly model: "zai-coding-plan/glm-5";
58
34
  };
59
- readonly reviewer: {
60
- readonly model: "zai-coding-plan/glm-5";
61
- readonly variant: "high";
62
- };
63
35
  readonly researcher: {
64
36
  readonly model: "zai-coding-plan/glm-5";
65
37
  readonly variant: "low";
66
38
  };
67
- readonly implementer: {
68
- readonly model: "zai-coding-plan/glm-5";
69
- readonly variant: "low";
70
- };
71
39
  };
72
40
  readonly 'opencode-go': {
73
41
  readonly orchestrator: {
74
42
  readonly model: "opencode-go/glm-5.1";
75
43
  };
76
- readonly reviewer: {
77
- readonly model: "opencode-go/deepseek-v4-pro";
78
- readonly variant: "max";
79
- };
80
- readonly council: {
81
- readonly model: "opencode-go/deepseek-v4-pro";
82
- readonly variant: "high";
83
- };
84
44
  readonly researcher: {
85
45
  readonly model: "opencode-go/minimax-m2.7";
86
46
  };
87
- readonly implementer: {
88
- readonly model: "opencode-go/deepseek-v4-flash";
89
- readonly variant: "high";
90
- };
91
47
  };
92
48
  };
93
49
  export type PresetName = keyof typeof MODEL_MAPPINGS;
@@ -1,8 +1,8 @@
1
- export declare const SUBAGENT_NAMES: readonly ["researcher", "reviewer", "implementer", "council", "councillor"];
1
+ export declare const SUBAGENT_NAMES: readonly ["researcher"];
2
2
  export declare const ORCHESTRATOR_NAME: "orchestrator";
3
- export declare const ALL_AGENT_NAMES: readonly ["orchestrator", "researcher", "reviewer", "implementer", "council", "councillor"];
3
+ export declare const ALL_AGENT_NAMES: readonly ["orchestrator", "researcher"];
4
4
  export type AgentName = (typeof ALL_AGENT_NAMES)[number];
5
- export declare const ORCHESTRATABLE_AGENTS: readonly ["researcher", "reviewer", "implementer", "council"];
5
+ export declare const ORCHESTRATABLE_AGENTS: readonly ["researcher"];
6
6
  /** Agents that cannot be disabled even if listed in disabled_agents config. */
7
7
  export declare const PROTECTED_AGENTS: Set<string>;
8
8
  /**
@@ -21,7 +21,6 @@ export declare const FALLBACK_FAILOVER_TIMEOUT_MS = 15000;
21
21
  export declare const DEFAULT_MAX_SUBAGENT_DEPTH = 3;
22
22
  export declare const PHASE_REMINDER_TEXT = "!IMPORTANT! Recall the workflow rules:\nUnderstand \u2192 choose the best parallelized path based on your capabilities and agents delegation rules \u2192 recall session reuse rules \u2192 execute \u2192 verify.\nIf delegating, launch the specialist in the same turn you mention it !END!";
23
23
  export declare const TMUX_SPAWN_DELAY_MS = 500;
24
- export declare const COUNCILLOR_STAGGER_MS = 250;
25
24
  export declare const STABLE_POLLS_THRESHOLD = 3;
26
25
  /** Agents that are disabled by default. Users must explicitly enable them
27
26
  * by removing from disabled_agents and configuring an appropriate model. */
@@ -1,5 +1,4 @@
1
1
  export * from './constants';
2
- export * from './council-schema';
3
2
  export { deepMerge, loadAgentPrompt, loadPluginConfig } from './loader';
4
3
  export * from './schema';
5
4
  export { getAgentOverride, getCustomAgentNames } from './utils';