@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.
- package/README.md +247 -247
- package/agent-forge.schema.json +2 -133
- package/dist/cli/index.js +109 -204
- package/dist/cli/providers.d.ts +0 -44
- package/dist/config/constants.d.ts +3 -4
- package/dist/config/index.d.ts +0 -1
- package/dist/config/schema.d.ts +2 -72
- package/dist/index.js +191 -995
- package/dist/tools/index.d.ts +0 -1
- package/dist/tui.js +5 -18
- package/package.json +104 -104
- package/src/skills/brainstorming/SKILL.md +185 -186
- package/src/skills/brainstorming/scripts/frame-template.html +214 -214
- package/src/skills/brainstorming/scripts/server.cjs +354 -354
- package/src/skills/brainstorming/spec-document-reviewer-prompt.md +1 -1
- package/src/skills/codemap/README.md +3 -3
- package/src/skills/codemap/SKILL.md +5 -5
- package/src/skills/codemap/codemap.md +4 -4
- package/src/skills/codemap/scripts/codemap.mjs +1 -1
- package/src/skills/codemap/scripts/codemap.test.ts +1 -1
- package/src/skills/requesting-code-review/SKILL.md +1 -1
- package/src/skills/subagent-driven-development/SKILL.md +1 -1
- package/src/skills/systematic-debugging/SKILL.md +318 -318
- package/src/skills/test-driven-development/SKILL.md +392 -392
- package/src/skills/verification-before-completion/SKILL.md +153 -153
- package/src/skills/writing-plans/SKILL.md +2 -2
- package/src/skills/writing-skills/graphviz-conventions.dot +171 -171
- package/dist/agents/council.d.ts +0 -27
- package/dist/agents/councillor.d.ts +0 -2
- package/dist/agents/designer.d.ts +0 -2
- package/dist/agents/explorer.d.ts +0 -2
- package/dist/agents/fixer.d.ts +0 -2
- package/dist/agents/implementer.d.ts +0 -2
- package/dist/agents/librarian.d.ts +0 -2
- package/dist/agents/observer.d.ts +0 -2
- package/dist/agents/oracle.d.ts +0 -2
- package/dist/agents/reviewer.d.ts +0 -2
- package/dist/cli/migration.d.ts +0 -46
- package/dist/config/council-schema.d.ts +0 -127
- package/dist/council/council-manager.d.ts +0 -49
- package/dist/council/index.d.ts +0 -1
- package/dist/skills/systematic-debugging/condition-based-waiting-example.d.ts +0 -51
- package/dist/tools/council.d.ts +0 -10
- 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
|
|
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
|
|
216
|
-
var ProviderModelIdSchema =
|
|
217
|
-
var ManualAgentPlanSchema =
|
|
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:
|
|
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 =
|
|
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 =
|
|
243
|
-
var FallbackChainsSchema =
|
|
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 =
|
|
250
|
-
model:
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
id:
|
|
256
|
-
variant:
|
|
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:
|
|
261
|
-
variant:
|
|
262
|
-
skills:
|
|
263
|
-
mcps:
|
|
264
|
-
prompt:
|
|
265
|
-
orchestratorPrompt:
|
|
266
|
-
options:
|
|
267
|
-
displayName:
|
|
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 =
|
|
270
|
-
var MultiplexerLayoutSchema =
|
|
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 =
|
|
200
|
+
var MultiplexerConfigSchema = z.object({
|
|
279
201
|
type: MultiplexerTypeSchema.default("none"),
|
|
280
202
|
layout: MultiplexerLayoutSchema.default("main-vertical"),
|
|
281
|
-
main_pane_size:
|
|
203
|
+
main_pane_size: z.number().min(20).max(80).default(60)
|
|
282
204
|
});
|
|
283
|
-
var TmuxConfigSchema =
|
|
284
|
-
enabled:
|
|
205
|
+
var TmuxConfigSchema = z.object({
|
|
206
|
+
enabled: z.boolean().default(false),
|
|
285
207
|
layout: TmuxLayoutSchema.default("main-vertical"),
|
|
286
|
-
main_pane_size:
|
|
208
|
+
main_pane_size: z.number().min(20).max(80).default(60)
|
|
287
209
|
});
|
|
288
|
-
var PresetSchema =
|
|
289
|
-
var WebsearchConfigSchema =
|
|
290
|
-
provider:
|
|
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 =
|
|
293
|
-
var InterviewConfigSchema =
|
|
294
|
-
maxQuestions:
|
|
295
|
-
outputFolder:
|
|
296
|
-
autoOpenBrowser:
|
|
297
|
-
port:
|
|
298
|
-
dashboard:
|
|
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 =
|
|
301
|
-
maxSessionsPerAgent:
|
|
302
|
-
readContextMinLines:
|
|
303
|
-
readContextMaxFiles:
|
|
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 =
|
|
306
|
-
enabled:
|
|
307
|
-
python:
|
|
308
|
-
script:
|
|
309
|
-
size:
|
|
310
|
-
fps:
|
|
311
|
-
speed:
|
|
312
|
-
maxFrames:
|
|
313
|
-
posterizeBits:
|
|
314
|
-
gifs:
|
|
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 =
|
|
317
|
-
maxContinuations:
|
|
318
|
-
cooldownMs:
|
|
319
|
-
autoEnable:
|
|
320
|
-
autoEnableThreshold:
|
|
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 =
|
|
323
|
-
enabled:
|
|
324
|
-
timeoutMs:
|
|
325
|
-
retryDelayMs:
|
|
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:
|
|
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:
|
|
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:
|
|
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 =
|
|
352
|
-
preset:
|
|
353
|
-
setDefaultAgent:
|
|
354
|
-
scoringEngineVersion:
|
|
355
|
-
balanceProviderUsage:
|
|
356
|
-
autoUpdate:
|
|
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:
|
|
359
|
-
agents:
|
|
360
|
-
disabled_agents:
|
|
361
|
-
disabled_mcps:
|
|
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: ["
|
|
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: ["
|
|
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: ["
|
|
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: ["
|
|
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: ["
|
|
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: ["
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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 (!
|
|
1628
|
-
console.error(`Unsupported preset: ${preset}. Available presets: ${
|
|
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: ${
|
|
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.
|
package/dist/cli/providers.d.ts
CHANGED
|
@@ -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"
|
|
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"
|
|
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"
|
|
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. */
|
package/dist/config/index.d.ts
CHANGED