@zcy2nn/agent-forge 1.1.3 → 1.1.5

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 (58) hide show
  1. package/README.md +188 -247
  2. package/agent-forge.schema.json +2 -265
  3. package/dist/agents/orchestrator.d.ts +1 -1
  4. package/dist/cli/index.js +90 -259
  5. package/dist/cli/providers.d.ts +0 -44
  6. package/dist/cli/types.d.ts +0 -2
  7. package/dist/config/constants.d.ts +3 -8
  8. package/dist/config/index.d.ts +0 -1
  9. package/dist/config/loader.d.ts +1 -1
  10. package/dist/config/schema.d.ts +1 -184
  11. package/dist/hooks/index.d.ts +0 -6
  12. package/dist/hooks/json-error-recovery/hook.d.ts +1 -1
  13. package/dist/hooks/todo-continuation/index.d.ts +2 -1
  14. package/dist/index.d.ts +1 -1
  15. package/dist/index.js +7875 -31853
  16. package/dist/tools/index.d.ts +0 -3
  17. package/dist/tui.js +5 -61
  18. package/dist/utils/index.d.ts +0 -2
  19. package/package.json +95 -104
  20. package/src/skills/brainstorming/SKILL.md +185 -186
  21. package/src/skills/brainstorming/scripts/frame-template.html +214 -214
  22. package/src/skills/brainstorming/scripts/server.cjs +354 -354
  23. package/src/skills/brainstorming/spec-document-reviewer-prompt.md +1 -1
  24. package/src/skills/requesting-code-review/SKILL.md +1 -1
  25. package/src/skills/subagent-driven-development/SKILL.md +1 -1
  26. package/src/skills/systematic-debugging/SKILL.md +318 -318
  27. package/src/skills/test-driven-development/SKILL.md +392 -392
  28. package/src/skills/verification-before-completion/SKILL.md +153 -153
  29. package/src/skills/writing-plans/SKILL.md +2 -2
  30. package/src/skills/writing-skills/graphviz-conventions.dot +171 -171
  31. package/dist/agents/council.d.ts +0 -27
  32. package/dist/agents/councillor.d.ts +0 -2
  33. package/dist/agents/designer.d.ts +0 -2
  34. package/dist/agents/explorer.d.ts +0 -2
  35. package/dist/agents/fixer.d.ts +0 -2
  36. package/dist/agents/implementer.d.ts +0 -2
  37. package/dist/agents/librarian.d.ts +0 -2
  38. package/dist/agents/observer.d.ts +0 -2
  39. package/dist/agents/oracle.d.ts +0 -2
  40. package/dist/agents/reviewer.d.ts +0 -2
  41. package/dist/cli/migration.d.ts +0 -46
  42. package/dist/config/council-schema.d.ts +0 -127
  43. package/dist/council/council-manager.d.ts +0 -49
  44. package/dist/council/index.d.ts +0 -1
  45. package/dist/hooks/phase-reminder/index.d.ts +0 -26
  46. package/dist/hooks/post-file-tool-nudge/index.d.ts +0 -19
  47. package/dist/skills/systematic-debugging/condition-based-waiting-example.d.ts +0 -51
  48. package/dist/tools/council.d.ts +0 -10
  49. package/src/skills/codemap/README.md +0 -59
  50. package/src/skills/codemap/SKILL.md +0 -163
  51. package/src/skills/codemap/codemap.md +0 -36
  52. package/src/skills/codemap/scripts/codemap.mjs +0 -483
  53. package/src/skills/codemap/scripts/codemap.test.ts +0 -129
  54. package/src/skills/codemap.md +0 -40
  55. package/src/skills/simplify/README.md +0 -19
  56. package/src/skills/simplify/SKILL.md +0 -138
  57. package/src/skills/simplify/codemap.md +0 -36
  58. 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";
@@ -125,96 +126,16 @@ function ensureOpenCodeConfigDir() {
125
126
  }
126
127
 
127
128
  // src/config/constants.ts
128
- var SUBAGENT_NAMES = [
129
- "researcher",
130
- "reviewer",
131
- "implementer",
132
- "council",
133
- "councillor"
134
- ];
129
+ var SUBAGENT_NAMES = ["researcher"];
135
130
  var ORCHESTRATOR_NAME = "orchestrator";
136
131
  var ALL_AGENT_NAMES = [ORCHESTRATOR_NAME, ...SUBAGENT_NAMES];
137
- var PROTECTED_AGENTS = new Set([
138
- "orchestrator",
139
- "researcher",
140
- "reviewer",
141
- "implementer",
142
- "councillor"
143
- ]);
132
+ var PROTECTED_AGENTS = new Set(["orchestrator", "researcher"]);
144
133
  var DEFAULT_TIMEOUT_MS = 2 * 60 * 1000;
145
134
  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
135
  // 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({
136
+ import { z } from "zod";
137
+ var ProviderModelIdSchema = z.string().regex(/^[^/\s]+\/[^\s]+$/, "Expected provider/model format (provider/.../model)");
138
+ var ManualAgentPlanSchema = z.object({
218
139
  primary: ProviderModelIdSchema,
219
140
  fallback1: ProviderModelIdSchema,
220
141
  fallback2: ProviderModelIdSchema,
@@ -228,103 +149,63 @@ var ManualAgentPlanSchema = z2.object({
228
149
  ]);
229
150
  if (unique.size !== 4) {
230
151
  ctx.addIssue({
231
- code: z2.ZodIssueCode.custom,
152
+ code: z.ZodIssueCode.custom,
232
153
  message: "primary and fallbacks must be unique per agent"
233
154
  });
234
155
  }
235
156
  });
236
- var ManualPlanSchema = z2.object({
157
+ var ManualPlanSchema = z.object({
237
158
  orchestrator: ManualAgentPlanSchema,
238
- researcher: ManualAgentPlanSchema,
239
- reviewer: ManualAgentPlanSchema,
240
- implementer: ManualAgentPlanSchema
159
+ researcher: ManualAgentPlanSchema
241
160
  }).strict();
242
- var AgentModelChainSchema = z2.array(z2.string()).min(1);
243
- var FallbackChainsSchema = z2.object({
244
- orchestrator: AgentModelChainSchema.optional(),
245
- researcher: AgentModelChainSchema.optional(),
246
- reviewer: AgentModelChainSchema.optional(),
247
- implementer: AgentModelChainSchema.optional()
248
- }).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()
161
+ var AgentOverrideConfigSchema = z.object({
162
+ model: z.union([
163
+ z.string(),
164
+ z.array(z.union([
165
+ z.string(),
166
+ z.object({
167
+ id: z.string(),
168
+ variant: z.string().optional()
257
169
  })
258
170
  ])).min(1)
259
171
  ]).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()
172
+ temperature: z.number().min(0).max(2).optional(),
173
+ variant: z.string().optional().catch(undefined),
174
+ skills: z.array(z.string()).optional(),
175
+ mcps: z.array(z.string()).optional(),
176
+ prompt: z.string().min(1).optional(),
177
+ orchestratorPrompt: z.string().min(1).optional(),
178
+ options: z.record(z.string(), z.unknown()).optional(),
179
+ displayName: z.string().min(1).optional()
268
180
  }).strict();
269
- var MultiplexerTypeSchema = z2.enum(["auto", "tmux", "zellij", "none"]);
270
- var MultiplexerLayoutSchema = z2.enum([
271
- "main-horizontal",
272
- "main-vertical",
273
- "tiled",
274
- "even-horizontal",
275
- "even-vertical"
276
- ]);
277
- var TmuxLayoutSchema = MultiplexerLayoutSchema;
278
- var MultiplexerConfigSchema = z2.object({
279
- type: MultiplexerTypeSchema.default("none"),
280
- layout: MultiplexerLayoutSchema.default("main-vertical"),
281
- main_pane_size: z2.number().min(20).max(80).default(60)
282
- });
283
- var TmuxConfigSchema = z2.object({
284
- enabled: z2.boolean().default(false),
285
- layout: TmuxLayoutSchema.default("main-vertical"),
286
- main_pane_size: z2.number().min(20).max(80).default(60)
287
- });
288
- var PresetSchema = z2.record(z2.string(), AgentOverrideConfigSchema);
289
- var WebsearchConfigSchema = z2.object({
290
- provider: z2.enum(["exa", "tavily"]).default("exa")
291
- });
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)
299
- });
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)
181
+ var PresetSchema = z.record(z.string(), AgentOverrideConfigSchema);
182
+ var WebsearchConfigSchema = z.object({
183
+ provider: z.enum(["exa", "tavily"]).default("exa")
304
184
  });
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()
185
+ var McpNameSchema = z.enum(["websearch", "context7", "grep_app"]);
186
+ var InterviewConfigSchema = z.object({
187
+ maxQuestions: z.number().int().min(1).max(10).default(2),
188
+ outputFolder: z.string().min(1).default("interview"),
189
+ autoOpenBrowser: z.boolean().default(true).describe("Automatically open the interview UI in your default browser during interactive runs. Disabled automatically in tests and CI."),
190
+ port: z.number().int().min(0).max(65535).default(0),
191
+ dashboard: z.boolean().default(false)
315
192
  });
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)")
193
+ var DivoomConfigSchema = z.object({
194
+ enabled: z.boolean().default(false),
195
+ python: z.string().min(1).default("/Applications/Divoom MiniToo.app/Contents/Resources/.venv/bin/python"),
196
+ script: z.string().min(1).default("/Applications/Divoom MiniToo.app/Contents/Resources/tools/divoom_send.py"),
197
+ size: z.number().int().min(1).max(1024).default(128),
198
+ fps: z.number().int().min(1).max(60).default(8),
199
+ speed: z.number().int().min(1).max(1e4).default(125),
200
+ maxFrames: z.number().int().min(1).max(500).default(24),
201
+ posterizeBits: z.number().int().min(1).max(8).default(3),
202
+ gifs: z.record(z.string(), z.string().min(1)).optional()
321
203
  });
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),
326
- 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.")
204
+ var TodoContinuationConfigSchema = z.object({
205
+ maxContinuations: z.number().int().min(1).max(50).default(5).describe("Maximum consecutive auto-continuations before stopping to ask user"),
206
+ cooldownMs: z.number().int().min(0).max(30000).default(3000).describe("Delay in ms before auto-continuing (gives user time to abort)"),
207
+ autoEnable: z.boolean().default(false).describe("Automatically enable auto-continue when the orchestrator session has enough todos"),
208
+ autoEnableThreshold: z.number().int().min(1).max(50).default(4).describe("Number of todos that triggers auto-enable (only used when autoEnable is true)")
328
209
  });
329
210
  function validateCustomOnlyPromptFields(overrides, ctx, pathPrefix) {
330
211
  for (const [name, override] of Object.entries(overrides)) {
@@ -334,40 +215,35 @@ function validateCustomOnlyPromptFields(overrides, ctx, pathPrefix) {
334
215
  }
335
216
  if (override.prompt !== undefined) {
336
217
  ctx.addIssue({
337
- code: z2.ZodIssueCode.custom,
218
+ code: z.ZodIssueCode.custom,
338
219
  path: [...pathPrefix, name, "prompt"],
339
220
  message: "prompt is only supported for custom agents"
340
221
  });
341
222
  }
342
223
  if (override.orchestratorPrompt !== undefined) {
343
224
  ctx.addIssue({
344
- code: z2.ZodIssueCode.custom,
225
+ code: z.ZodIssueCode.custom,
345
226
  path: [...pathPrefix, name, "orchestratorPrompt"],
346
227
  message: "orchestratorPrompt is only supported for custom agents"
347
228
  });
348
229
  }
349
230
  }
350
231
  }
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."),
232
+ var PluginConfigSchema = z.object({
233
+ preset: z.string().optional(),
234
+ setDefaultAgent: z.boolean().optional(),
235
+ scoringEngineVersion: z.enum(["v1", "v2-shadow", "v2"]).optional(),
236
+ balanceProviderUsage: z.boolean().optional(),
237
+ autoUpdate: z.boolean().optional().describe("Disable automatic installation of plugin updates when false. Defaults to true."),
357
238
  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(),
362
- multiplexer: MultiplexerConfigSchema.optional(),
363
- tmux: TmuxConfigSchema.optional(),
239
+ presets: z.record(z.string(), PresetSchema).optional(),
240
+ agents: z.record(z.string(), AgentOverrideConfigSchema).optional(),
241
+ 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."),
242
+ disabled_mcps: z.array(z.string()).optional(),
364
243
  websearch: WebsearchConfigSchema.optional(),
365
244
  interview: InterviewConfigSchema.optional(),
366
- sessionManager: SessionManagerConfigSchema.optional(),
367
245
  divoom: DivoomConfigSchema.optional(),
368
- todoContinuation: TodoContinuationConfigSchema.optional(),
369
- fallback: FailoverConfigSchema.optional(),
370
- council: CouncilConfigSchema.optional()
246
+ todoContinuation: TodoContinuationConfigSchema.optional()
371
247
  }).superRefine((value, ctx) => {
372
248
  if (value.agents) {
373
249
  validateCustomOnlyPromptFields(value.agents, ctx, ["agents"]);
@@ -381,27 +257,11 @@ var PluginConfigSchema = z2.object({
381
257
  // src/config/agent-mcps.ts
382
258
  var DEFAULT_AGENT_MCPS = {
383
259
  orchestrator: ["*", "!context7"],
384
- researcher: ["websearch", "context7", "grep_app"],
385
- reviewer: [],
386
- implementer: [],
387
- council: [],
388
- councillor: []
260
+ researcher: ["websearch", "context7", "grep_app"]
389
261
  };
390
262
 
391
263
  // src/cli/custom-skills.ts
392
264
  var CUSTOM_SKILLS = [
393
- {
394
- name: "simplify",
395
- description: "Code simplification and readability-focused refactoring",
396
- allowedAgents: ["reviewer"],
397
- sourcePath: "src/skills/simplify"
398
- },
399
- {
400
- name: "codemap",
401
- description: "Repository understanding and hierarchical codemap generation",
402
- allowedAgents: ["orchestrator"],
403
- sourcePath: "src/skills/codemap"
404
- },
405
265
  {
406
266
  name: "brainstorming",
407
267
  description: "Turn ideas into designs through collaborative dialogue before implementation",
@@ -432,12 +292,6 @@ var CUSTOM_SKILLS = [
432
292
  allowedAgents: ["orchestrator"],
433
293
  sourcePath: "src/skills/dispatching-parallel-agents"
434
294
  },
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
295
  {
442
296
  name: "finishing-a-development-branch",
443
297
  description: "Guide completion of development work with structured merge/PR options",
@@ -453,25 +307,25 @@ var CUSTOM_SKILLS = [
453
307
  {
454
308
  name: "test-driven-development",
455
309
  description: "Write failing tests first, then minimal code to pass, before any implementation",
456
- allowedAgents: ["implementer"],
310
+ allowedAgents: ["orchestrator"],
457
311
  sourcePath: "src/skills/test-driven-development"
458
312
  },
459
313
  {
460
314
  name: "verification-before-completion",
461
315
  description: "Run verification commands and confirm output before claiming work is complete",
462
- allowedAgents: ["implementer"],
316
+ allowedAgents: ["orchestrator"],
463
317
  sourcePath: "src/skills/verification-before-completion"
464
318
  },
465
319
  {
466
320
  name: "systematic-debugging",
467
321
  description: "Find root cause before attempting fixes for any bug or test failure",
468
- allowedAgents: ["reviewer"],
322
+ allowedAgents: ["orchestrator"],
469
323
  sourcePath: "src/skills/systematic-debugging"
470
324
  },
471
325
  {
472
326
  name: "receiving-code-review",
473
327
  description: "Evaluate code review feedback with technical rigor before implementing suggestions",
474
- allowedAgents: ["reviewer"],
328
+ allowedAgents: ["orchestrator"],
475
329
  sourcePath: "src/skills/receiving-code-review"
476
330
  },
477
331
  {
@@ -489,7 +343,7 @@ var RECOMMENDED_SKILLS = [
489
343
  name: "agent-browser",
490
344
  repo: "https://github.com/vercel-labs/agent-browser",
491
345
  skillName: "agent-browser",
492
- allowedAgents: ["implementer"],
346
+ allowedAgents: ["orchestrator"],
493
347
  description: "High-performance browser automation",
494
348
  postInstallCommands: [
495
349
  "npm install -g agent-browser",
@@ -538,34 +392,23 @@ var GENERATED_PRESETS = ["openai", "opencode-go"];
538
392
  var MODEL_MAPPINGS = {
539
393
  openai: {
540
394
  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" }
395
+ researcher: { model: "openai/gpt-5.4-mini", variant: "low" }
544
396
  },
545
397
  kimi: {
546
398
  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" }
399
+ researcher: { model: "kimi-for-coding/k2p5", variant: "low" }
550
400
  },
551
401
  copilot: {
552
402
  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" }
403
+ researcher: { model: "github-copilot/grok-code-fast-1", variant: "low" }
556
404
  },
557
405
  "zai-plan": {
558
406
  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" }
407
+ researcher: { model: "zai-coding-plan/glm-5", variant: "low" }
562
408
  },
563
409
  "opencode-go": {
564
410
  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" }
411
+ researcher: { model: "opencode-go/minimax-m2.7" }
569
412
  }
570
413
  };
571
414
  function isGeneratedPresetName(value) {
@@ -593,9 +436,6 @@ function generateLiteConfig(installConfig) {
593
436
  ...RECOMMENDED_SKILLS.filter((s) => s.allowedAgents.includes("*") || s.allowedAgents.includes(agentName)).map((s) => s.skillName),
594
437
  ...CUSTOM_SKILLS.filter((s) => s.allowedAgents.includes("*") || s.allowedAgents.includes(agentName)).map((s) => s.name)
595
438
  ];
596
- if (installConfig.installSkills && agentName === "implementer" && !skills.includes("agent-browser")) {
597
- skills.push("agent-browser");
598
- }
599
439
  return {
600
440
  model: modelInfo.model,
601
441
  variant: modelInfo.variant,
@@ -614,13 +454,6 @@ function generateLiteConfig(installConfig) {
614
454
  for (const presetName of GENERATED_PRESETS) {
615
455
  presets[presetName] = buildPreset(presetName);
616
456
  }
617
- if (installConfig.hasTmux) {
618
- config.tmux = {
619
- enabled: true,
620
- layout: "main-vertical",
621
- main_pane_size: 60
622
- };
623
- }
624
457
  return config;
625
458
  }
626
459
 
@@ -908,8 +741,7 @@ function detectCurrentConfig() {
908
741
  hasZaiPlan: false,
909
742
  hasAntigravity: false,
910
743
  hasChutes: false,
911
- hasOpencodeZen: false,
912
- hasTmux: false
744
+ hasOpencodeZen: false
913
745
  };
914
746
  const { config } = parseConfig(getExistingConfigPath());
915
747
  if (!config)
@@ -945,10 +777,6 @@ function detectCurrentConfig() {
945
777
  result.hasChutes = true;
946
778
  }
947
779
  }
948
- if (configObj.tmux && typeof configObj.tmux === "object") {
949
- const tmuxConfig = configObj.tmux;
950
- result.hasTmux = tmuxConfig.enabled === true;
951
- }
952
780
  }
953
781
  return result;
954
782
  }
@@ -985,13 +813,8 @@ function mergePluginConfigs(base, override) {
985
813
  ...base,
986
814
  ...override,
987
815
  agents: deepMerge(base.agents, override.agents),
988
- tmux: deepMerge(base.tmux, override.tmux),
989
- multiplexer: deepMerge(base.multiplexer, override.multiplexer),
990
816
  interview: deepMerge(base.interview, override.interview),
991
- sessionManager: deepMerge(base.sessionManager, override.sessionManager),
992
- divoom: deepMerge(base.divoom, override.divoom),
993
- fallback: deepMerge(base.fallback, override.fallback),
994
- council: deepMerge(base.council, override.council)
817
+ divoom: deepMerge(base.divoom, override.divoom)
995
818
  };
996
819
  }
997
820
  function deepMerge(base, override) {
@@ -1055,7 +878,7 @@ function checkConfigFile(scope, configPath) {
1055
878
  ok: false,
1056
879
  error: {
1057
880
  kind: "invalid-schema",
1058
- message: z3.prettifyError(parseResult.error),
881
+ message: z2.prettifyError(parseResult.error),
1059
882
  issues: parseResult.error.issues
1060
883
  }
1061
884
  };
@@ -1601,7 +1424,6 @@ ${JSON.stringify(liteConfig, null, 2)}
1601
1424
  }
1602
1425
  async function install(args) {
1603
1426
  const config = {
1604
- hasTmux: false,
1605
1427
  installSkills: args.skills === "yes",
1606
1428
  preset: args.preset,
1607
1429
  promptForStar: args.tui,
@@ -1611,6 +1433,15 @@ async function install(args) {
1611
1433
  return runInstall(config);
1612
1434
  }
1613
1435
 
1436
+ // src/cli/providers.ts
1437
+ var GENERATED_PRESETS2 = ["openai", "opencode-go"];
1438
+ function isGeneratedPresetName2(value) {
1439
+ return GENERATED_PRESETS2.includes(value);
1440
+ }
1441
+ function getGeneratedPresetNames2() {
1442
+ return [...GENERATED_PRESETS2];
1443
+ }
1444
+
1614
1445
  // src/cli/index.ts
1615
1446
  function parseArgs(args) {
1616
1447
  const result = {
@@ -1624,8 +1455,8 @@ function parseArgs(args) {
1624
1455
  result.skills = arg.split("=")[1];
1625
1456
  } else if (arg.startsWith("--preset=")) {
1626
1457
  const preset = arg.split("=")[1];
1627
- if (!isGeneratedPresetName(preset)) {
1628
- console.error(`Unsupported preset: ${preset}. Available presets: ${getGeneratedPresetNames().join(", ")}`);
1458
+ if (!isGeneratedPresetName2(preset)) {
1459
+ console.error(`Unsupported preset: ${preset}. Available presets: ${getGeneratedPresetNames2().join(", ")}`);
1629
1460
  process.exit(1);
1630
1461
  }
1631
1462
  result.preset = preset;
@@ -1659,7 +1490,7 @@ Options:
1659
1490
  Doctor options:
1660
1491
  --json Print diagnostics as JSON
1661
1492
 
1662
- Available presets: ${getGeneratedPresetNames().join(", ")}
1493
+ Available presets: ${getGeneratedPresetNames2().join(", ")}
1663
1494
 
1664
1495
  The installer generates OpenAI and OpenCode Go presets by default.
1665
1496
  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;
@@ -13,7 +13,6 @@ export interface OpenCodeConfig {
13
13
  [key: string]: unknown;
14
14
  }
15
15
  export interface InstallConfig {
16
- hasTmux: boolean;
17
16
  installSkills: boolean;
18
17
  preset?: string;
19
18
  promptForStar?: boolean;
@@ -35,5 +34,4 @@ export interface DetectedConfig {
35
34
  hasAntigravity: boolean;
36
35
  hasChutes?: boolean;
37
36
  hasOpencodeZen: boolean;
38
- hasTmux: boolean;
39
37
  }