oh-my-opencode-serverlocal 0.1.2 → 0.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/dist/cli/index.js +94 -186
- package/dist/config/constants.d.ts +2 -2
- package/dist/config/index.d.ts +0 -1
- package/dist/config/schema.d.ts +0 -41
- package/dist/index.js +546 -1268
- package/dist/tools/index.d.ts +0 -1
- package/dist/tui.js +94 -194
- package/dist/utils/session.d.ts +1 -1
- package/dist/utils/subagent-depth.d.ts +2 -2
- package/package.json +1 -1
- package/dist/agents/council.d.ts +0 -27
- package/dist/agents/councillor.d.ts +0 -2
- package/dist/config/council-schema.d.ts +0 -137
- package/dist/council/council-manager.d.ts +0 -53
- package/dist/council/index.d.ts +0 -1
- package/dist/tools/council.d.ts +0 -10
- package/dist/utils/councillor-models.d.ts +0 -20
package/dist/cli/index.js
CHANGED
|
@@ -154,7 +154,7 @@ var init_zip_extractor = __esm(() => {
|
|
|
154
154
|
|
|
155
155
|
// src/cli/doctor.ts
|
|
156
156
|
import * as fs2 from "node:fs";
|
|
157
|
-
import { z as
|
|
157
|
+
import { z as z2 } from "zod";
|
|
158
158
|
|
|
159
159
|
// src/config/loader.ts
|
|
160
160
|
import * as fs from "node:fs";
|
|
@@ -285,12 +285,10 @@ var SUBAGENT_NAMES = [
|
|
|
285
285
|
"oracle",
|
|
286
286
|
"designer",
|
|
287
287
|
"fixer",
|
|
288
|
-
"observer"
|
|
289
|
-
"council",
|
|
290
|
-
"councillor"
|
|
288
|
+
"observer"
|
|
291
289
|
];
|
|
292
290
|
var ALL_AGENT_NAMES = ["orchestrator", ...SUBAGENT_NAMES];
|
|
293
|
-
var PROTECTED_AGENTS = new Set(["orchestrator"
|
|
291
|
+
var PROTECTED_AGENTS = new Set(["orchestrator"]);
|
|
294
292
|
var MAX_POLL_TIME_MS = 5 * 60 * 1000;
|
|
295
293
|
var PHASE_REMINDER_TEXT = `!IMPORTANT! Scheduler workflow: First choose the lightest workflow that fits the work. If direct execution is justified, complete it and verify proportionately. Otherwise: plan lanes/dependencies → dispatch background specialists → track task IDs → wait for hook-driven completion → reconcile terminal results → verify. Do not poll running jobs, consume running-job output, or advance dependent work. !END!`;
|
|
296
294
|
function formatSystemReminder(text) {
|
|
@@ -299,96 +297,10 @@ ${text}
|
|
|
299
297
|
</system-reminder>`;
|
|
300
298
|
}
|
|
301
299
|
var PHASE_REMINDER = formatSystemReminder(PHASE_REMINDER_TEXT);
|
|
302
|
-
// src/config/council-schema.ts
|
|
303
|
-
import { z } from "zod";
|
|
304
|
-
|
|
305
|
-
// src/utils/councillor-models.ts
|
|
306
|
-
function normalizeCouncillorModels(model, fallbackVariant) {
|
|
307
|
-
const raw = Array.isArray(model) ? model : [model];
|
|
308
|
-
return raw.map((entry) => typeof entry === "string" ? { id: entry, variant: fallbackVariant } : { id: entry.id, variant: entry.variant ?? fallbackVariant });
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
// src/config/council-schema.ts
|
|
312
|
-
var ModelIdSchema = z.string().regex(/^[^/\s]+\/[^\s]+$/, 'Expected provider/model format (e.g. "openai/gpt-5.6-luna")');
|
|
313
|
-
var CouncillorModelEntrySchema = z.object({
|
|
314
|
-
id: ModelIdSchema,
|
|
315
|
-
variant: z.string().optional()
|
|
316
|
-
});
|
|
317
|
-
var CouncillorModelSchema = z.union([
|
|
318
|
-
ModelIdSchema,
|
|
319
|
-
z.array(z.union([ModelIdSchema, CouncillorModelEntrySchema])).min(1)
|
|
320
|
-
]).describe('Model ID in provider/model format (e.g. "openai/gpt-5.6-luna"), or an ' + "ordered fallback chain (array of model IDs or { id, variant } entries) " + "tried in order until one responds.");
|
|
321
|
-
var CouncillorConfigSchema = z.object({
|
|
322
|
-
model: CouncillorModelSchema,
|
|
323
|
-
variant: z.string().optional(),
|
|
324
|
-
prompt: z.string().optional().describe("Optional role/guidance injected into the councillor user prompt")
|
|
325
|
-
}).transform((c) => {
|
|
326
|
-
const models = normalizeCouncillorModels(c.model, c.variant);
|
|
327
|
-
return {
|
|
328
|
-
model: models[0].id,
|
|
329
|
-
variant: c.variant,
|
|
330
|
-
prompt: c.prompt,
|
|
331
|
-
models
|
|
332
|
-
};
|
|
333
|
-
});
|
|
334
|
-
var CouncilPresetSchema = z.record(z.string(), z.record(z.string(), z.unknown())).transform((entries, ctx) => {
|
|
335
|
-
const councillors = {};
|
|
336
|
-
for (const [key, raw] of Object.entries(entries)) {
|
|
337
|
-
if (key === "master")
|
|
338
|
-
continue;
|
|
339
|
-
if (key === "councillors" && typeof raw === "object" && raw !== null) {
|
|
340
|
-
for (const [innerKey, innerRaw] of Object.entries(raw)) {
|
|
341
|
-
const innerParsed = CouncillorConfigSchema.safeParse(innerRaw);
|
|
342
|
-
if (!innerParsed.success) {
|
|
343
|
-
ctx.addIssue({
|
|
344
|
-
code: z.ZodIssueCode.custom,
|
|
345
|
-
message: `Invalid councillor "${innerKey}" (nested under legacy "councillors" key): ${innerParsed.error.issues.map((i) => i.message).join(", ")}`
|
|
346
|
-
});
|
|
347
|
-
return z.NEVER;
|
|
348
|
-
}
|
|
349
|
-
councillors[innerKey] = innerParsed.data;
|
|
350
|
-
}
|
|
351
|
-
continue;
|
|
352
|
-
}
|
|
353
|
-
const parsed = CouncillorConfigSchema.safeParse(raw);
|
|
354
|
-
if (!parsed.success) {
|
|
355
|
-
ctx.addIssue({
|
|
356
|
-
code: z.ZodIssueCode.custom,
|
|
357
|
-
message: `Invalid councillor "${key}": ${parsed.error.issues.map((i) => i.message).join(", ")}`
|
|
358
|
-
});
|
|
359
|
-
return z.NEVER;
|
|
360
|
-
}
|
|
361
|
-
councillors[key] = parsed.data;
|
|
362
|
-
}
|
|
363
|
-
return councillors;
|
|
364
|
-
});
|
|
365
|
-
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.');
|
|
366
|
-
var CouncilConfigSchema = z.object({
|
|
367
|
-
presets: z.record(z.string(), CouncilPresetSchema),
|
|
368
|
-
timeout: z.number().min(0).default(180000),
|
|
369
|
-
default_preset: z.string().default("default"),
|
|
370
|
-
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).'),
|
|
371
|
-
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."),
|
|
372
|
-
master: z.unknown().optional().describe("DEPRECATED - ignored. Council agent synthesizes directly.")
|
|
373
|
-
}).transform((data) => {
|
|
374
|
-
const deprecated = [];
|
|
375
|
-
if (data.master !== undefined)
|
|
376
|
-
deprecated.push("master");
|
|
377
|
-
const legacyMasterModel = typeof data.master === "object" && data.master !== null && "model" in data.master && typeof data.master.model === "string" ? data.master.model : undefined;
|
|
378
|
-
return {
|
|
379
|
-
presets: data.presets,
|
|
380
|
-
timeout: data.timeout,
|
|
381
|
-
default_preset: data.default_preset,
|
|
382
|
-
councillor_execution_mode: data.councillor_execution_mode,
|
|
383
|
-
councillor_retries: data.councillor_retries,
|
|
384
|
-
_deprecated: deprecated.length > 0 ? deprecated : undefined,
|
|
385
|
-
_legacyMasterModel: legacyMasterModel
|
|
386
|
-
};
|
|
387
|
-
});
|
|
388
300
|
// src/config/schema.ts
|
|
389
|
-
import { z
|
|
390
|
-
var ProviderModelIdSchema =
|
|
391
|
-
var ManualAgentPlanSchema =
|
|
301
|
+
import { z } from "zod";
|
|
302
|
+
var ProviderModelIdSchema = z.string().regex(/^[^/\s]+\/[^\s]+$/, "Expected provider/model format (provider/.../model)");
|
|
303
|
+
var ManualAgentPlanSchema = z.object({
|
|
392
304
|
primary: ProviderModelIdSchema,
|
|
393
305
|
fallback1: ProviderModelIdSchema,
|
|
394
306
|
fallback2: ProviderModelIdSchema,
|
|
@@ -402,12 +314,12 @@ var ManualAgentPlanSchema = z2.object({
|
|
|
402
314
|
]);
|
|
403
315
|
if (unique.size !== 4) {
|
|
404
316
|
ctx.addIssue({
|
|
405
|
-
code:
|
|
317
|
+
code: z.ZodIssueCode.custom,
|
|
406
318
|
message: "primary and fallbacks must be unique per agent"
|
|
407
319
|
});
|
|
408
320
|
}
|
|
409
321
|
});
|
|
410
|
-
var ManualPlanSchema =
|
|
322
|
+
var ManualPlanSchema = z.object({
|
|
411
323
|
orchestrator: ManualAgentPlanSchema,
|
|
412
324
|
oracle: ManualAgentPlanSchema,
|
|
413
325
|
designer: ManualAgentPlanSchema,
|
|
@@ -415,12 +327,12 @@ var ManualPlanSchema = z2.object({
|
|
|
415
327
|
librarian: ManualAgentPlanSchema,
|
|
416
328
|
fixer: ManualAgentPlanSchema
|
|
417
329
|
}).strict();
|
|
418
|
-
var PermissionActionSchema =
|
|
419
|
-
var PermissionRuleSchema =
|
|
330
|
+
var PermissionActionSchema = z.enum(["ask", "allow", "deny"]);
|
|
331
|
+
var PermissionRuleSchema = z.union([
|
|
420
332
|
PermissionActionSchema,
|
|
421
|
-
|
|
333
|
+
z.record(z.string(), PermissionActionSchema)
|
|
422
334
|
]);
|
|
423
|
-
var PermissionObjectSchema =
|
|
335
|
+
var PermissionObjectSchema = z.object({
|
|
424
336
|
read: PermissionRuleSchema.optional(),
|
|
425
337
|
edit: PermissionRuleSchema.optional(),
|
|
426
338
|
glob: PermissionRuleSchema.optional(),
|
|
@@ -438,32 +350,32 @@ var PermissionObjectSchema = z2.object({
|
|
|
438
350
|
codesearch: PermissionActionSchema.optional(),
|
|
439
351
|
doom_loop: PermissionActionSchema.optional()
|
|
440
352
|
}).catchall(PermissionRuleSchema);
|
|
441
|
-
var PermissionConfigSchema =
|
|
353
|
+
var PermissionConfigSchema = z.union([
|
|
442
354
|
PermissionActionSchema,
|
|
443
355
|
PermissionObjectSchema
|
|
444
356
|
]);
|
|
445
|
-
var AgentOverrideConfigSchema =
|
|
446
|
-
model:
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
id:
|
|
452
|
-
variant:
|
|
357
|
+
var AgentOverrideConfigSchema = z.object({
|
|
358
|
+
model: z.union([
|
|
359
|
+
z.string(),
|
|
360
|
+
z.array(z.union([
|
|
361
|
+
z.string(),
|
|
362
|
+
z.object({
|
|
363
|
+
id: z.string(),
|
|
364
|
+
variant: z.string().optional()
|
|
453
365
|
})
|
|
454
366
|
])).min(1)
|
|
455
367
|
]).optional(),
|
|
456
|
-
temperature:
|
|
457
|
-
variant:
|
|
458
|
-
skills:
|
|
459
|
-
mcps:
|
|
460
|
-
prompt:
|
|
461
|
-
orchestratorPrompt:
|
|
462
|
-
options:
|
|
463
|
-
displayName:
|
|
368
|
+
temperature: z.number().min(0).max(2).optional(),
|
|
369
|
+
variant: z.string().optional().catch(undefined),
|
|
370
|
+
skills: z.array(z.string()).optional(),
|
|
371
|
+
mcps: z.array(z.string()).optional(),
|
|
372
|
+
prompt: z.string().min(1).optional(),
|
|
373
|
+
orchestratorPrompt: z.string().min(1).optional(),
|
|
374
|
+
options: z.record(z.string(), z.unknown()).optional(),
|
|
375
|
+
displayName: z.string().min(1).optional(),
|
|
464
376
|
permission: PermissionConfigSchema.optional()
|
|
465
377
|
}).strict();
|
|
466
|
-
var MultiplexerTypeSchema =
|
|
378
|
+
var MultiplexerTypeSchema = z.enum([
|
|
467
379
|
"auto",
|
|
468
380
|
"tmux",
|
|
469
381
|
"zellij",
|
|
@@ -471,107 +383,106 @@ var MultiplexerTypeSchema = z2.enum([
|
|
|
471
383
|
"cmux",
|
|
472
384
|
"none"
|
|
473
385
|
]);
|
|
474
|
-
var MultiplexerLayoutSchema =
|
|
386
|
+
var MultiplexerLayoutSchema = z.enum([
|
|
475
387
|
"main-horizontal",
|
|
476
388
|
"main-vertical",
|
|
477
389
|
"tiled",
|
|
478
390
|
"even-horizontal",
|
|
479
391
|
"even-vertical"
|
|
480
392
|
]);
|
|
481
|
-
var ZellijPaneModeSchema =
|
|
393
|
+
var ZellijPaneModeSchema = z.enum(["agent-tab", "current-tab"]);
|
|
482
394
|
var TmuxLayoutSchema = MultiplexerLayoutSchema;
|
|
483
|
-
var MultiplexerConfigSchema =
|
|
395
|
+
var MultiplexerConfigSchema = z.object({
|
|
484
396
|
type: MultiplexerTypeSchema.default("none"),
|
|
485
397
|
layout: MultiplexerLayoutSchema.default("main-vertical"),
|
|
486
|
-
main_pane_size:
|
|
398
|
+
main_pane_size: z.number().min(20).max(80).default(60),
|
|
487
399
|
zellij_pane_mode: ZellijPaneModeSchema.default("agent-tab")
|
|
488
400
|
});
|
|
489
|
-
var TmuxConfigSchema =
|
|
490
|
-
enabled:
|
|
401
|
+
var TmuxConfigSchema = z.object({
|
|
402
|
+
enabled: z.boolean().default(false),
|
|
491
403
|
layout: TmuxLayoutSchema.default("main-vertical"),
|
|
492
|
-
main_pane_size:
|
|
404
|
+
main_pane_size: z.number().min(20).max(80).default(60)
|
|
493
405
|
});
|
|
494
|
-
var PresetSchema =
|
|
495
|
-
var WebsearchConfigSchema =
|
|
496
|
-
provider:
|
|
406
|
+
var PresetSchema = z.record(z.string(), AgentOverrideConfigSchema);
|
|
407
|
+
var WebsearchConfigSchema = z.object({
|
|
408
|
+
provider: z.enum(["exa", "tavily"]).default("exa")
|
|
497
409
|
});
|
|
498
|
-
var McpNameSchema =
|
|
499
|
-
var InterviewConfigSchema =
|
|
500
|
-
maxQuestions:
|
|
501
|
-
outputFolder:
|
|
502
|
-
autoOpenBrowser:
|
|
503
|
-
port:
|
|
504
|
-
dashboard:
|
|
410
|
+
var McpNameSchema = z.enum(["websearch", "context7", "gh_grep"]);
|
|
411
|
+
var InterviewConfigSchema = z.object({
|
|
412
|
+
maxQuestions: z.number().int().min(1).max(10).default(2),
|
|
413
|
+
outputFolder: z.string().min(1).default("interview"),
|
|
414
|
+
autoOpenBrowser: z.boolean().default(true).describe("Automatically open the interview UI in your default browser during interactive runs. Disabled automatically in tests and CI."),
|
|
415
|
+
port: z.number().int().min(0).max(65535).default(0),
|
|
416
|
+
dashboard: z.boolean().default(false)
|
|
505
417
|
});
|
|
506
|
-
var BackgroundJobsConfigSchema =
|
|
507
|
-
maxSessionsPerAgent:
|
|
508
|
-
readContextMinLines:
|
|
509
|
-
readContextMaxFiles:
|
|
418
|
+
var BackgroundJobsConfigSchema = z.object({
|
|
419
|
+
maxSessionsPerAgent: z.number().int().min(1).max(10).default(2),
|
|
420
|
+
readContextMinLines: z.number().int().min(0).max(1000).default(10),
|
|
421
|
+
readContextMaxFiles: z.number().int().min(0).max(50).default(8)
|
|
510
422
|
});
|
|
511
|
-
var FailoverConfigSchema =
|
|
512
|
-
enabled:
|
|
513
|
-
timeoutMs:
|
|
514
|
-
retryDelayMs:
|
|
515
|
-
maxRetries:
|
|
516
|
-
retry_on_empty:
|
|
517
|
-
runtimeOverride:
|
|
423
|
+
var FailoverConfigSchema = z.object({
|
|
424
|
+
enabled: z.boolean().default(true),
|
|
425
|
+
timeoutMs: z.number().min(0).default(15000),
|
|
426
|
+
retryDelayMs: z.number().min(0).default(500),
|
|
427
|
+
maxRetries: z.number().int().min(0).default(3).describe("Number of consecutive 429/rate-limit responses tolerated on the " + "same model before aborting (or swapping to the next fallback " + "model when a chain is configured)."),
|
|
428
|
+
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."),
|
|
429
|
+
runtimeOverride: z.boolean().optional().describe("DEPRECATED: no longer used. Previously controlled whether out-of-chain " + "runtime model picks triggered fallback. Fallback is now always " + "disabled when a user explicitly selects a model via /model.")
|
|
518
430
|
}).strict();
|
|
519
|
-
var CompanionConfigSchema =
|
|
520
|
-
enabled:
|
|
521
|
-
binaryPath:
|
|
522
|
-
position:
|
|
523
|
-
size:
|
|
524
|
-
gifPack:
|
|
525
|
-
loopStyle:
|
|
526
|
-
speed:
|
|
527
|
-
debug:
|
|
431
|
+
var CompanionConfigSchema = z.object({
|
|
432
|
+
enabled: z.boolean().optional(),
|
|
433
|
+
binaryPath: z.string().min(1).optional().describe("Path to a custom companion binary to launch."),
|
|
434
|
+
position: z.enum(["bottom-right", "bottom-left", "top-right", "top-left"]).optional(),
|
|
435
|
+
size: z.enum(["small", "medium", "large"]).optional(),
|
|
436
|
+
gifPack: z.enum(["default"]).optional().describe("Bundled companion animation pack to use."),
|
|
437
|
+
loopStyle: z.enum(["classic", "smooth"]).optional().describe("Companion animation playback style: classic loops or smooth ping-pong playback."),
|
|
438
|
+
speed: z.number().min(0.25).max(4).optional().describe("Companion animation playback speed multiplier. Defaults to 1."),
|
|
439
|
+
debug: z.boolean().optional().describe("Enable verbose native companion debug logs.")
|
|
528
440
|
});
|
|
529
|
-
var AcpAgentPermissionModeSchema =
|
|
441
|
+
var AcpAgentPermissionModeSchema = z.enum(["ask", "allow", "reject"]);
|
|
530
442
|
var MAX_ACP_TIMEOUT_MS = 2147483647;
|
|
531
|
-
var AcpAgentConfigSchema =
|
|
532
|
-
command:
|
|
533
|
-
args:
|
|
534
|
-
env:
|
|
535
|
-
cwd:
|
|
536
|
-
description:
|
|
537
|
-
prompt:
|
|
538
|
-
orchestratorPrompt:
|
|
443
|
+
var AcpAgentConfigSchema = z.object({
|
|
444
|
+
command: z.string().min(1),
|
|
445
|
+
args: z.array(z.string()).default([]),
|
|
446
|
+
env: z.record(z.string(), z.string()).default({}),
|
|
447
|
+
cwd: z.string().min(1).optional(),
|
|
448
|
+
description: z.string().min(1).optional(),
|
|
449
|
+
prompt: z.string().min(1).optional(),
|
|
450
|
+
orchestratorPrompt: z.string().min(1).optional(),
|
|
539
451
|
wrapperModel: ProviderModelIdSchema.optional(),
|
|
540
|
-
timeoutMs:
|
|
452
|
+
timeoutMs: z.number().int().min(0).max(MAX_ACP_TIMEOUT_MS).default(0).describe("Timeout for a single ACP run in milliseconds. Set to 0 to disable the timeout."),
|
|
541
453
|
permissionMode: AcpAgentPermissionModeSchema.default("ask")
|
|
542
454
|
}).strict();
|
|
543
|
-
var AcpAgentsConfigSchema =
|
|
455
|
+
var AcpAgentsConfigSchema = z.record(z.string(), AcpAgentConfigSchema);
|
|
544
456
|
function rejectOrchestratorPromptOnOrchestrator(overrides, ctx, pathPrefix) {
|
|
545
457
|
for (const [name, override] of Object.entries(overrides)) {
|
|
546
458
|
if (name === "orchestrator" && override.orchestratorPrompt !== undefined) {
|
|
547
459
|
ctx.addIssue({
|
|
548
|
-
code:
|
|
460
|
+
code: z.ZodIssueCode.custom,
|
|
549
461
|
path: [...pathPrefix, name, "orchestratorPrompt"],
|
|
550
462
|
message: "orchestratorPrompt is not supported for the orchestrator agent"
|
|
551
463
|
});
|
|
552
464
|
}
|
|
553
465
|
}
|
|
554
466
|
}
|
|
555
|
-
var PluginConfigSchema =
|
|
556
|
-
preset:
|
|
557
|
-
setDefaultAgent:
|
|
558
|
-
compactSidebar:
|
|
559
|
-
stripOrchestratorModel:
|
|
560
|
-
autoUpdate:
|
|
561
|
-
presets:
|
|
562
|
-
agents:
|
|
563
|
-
disabled_agents:
|
|
564
|
-
image_routing:
|
|
565
|
-
disabled_mcps:
|
|
566
|
-
disabled_tools:
|
|
567
|
-
disabled_skills:
|
|
467
|
+
var PluginConfigSchema = z.object({
|
|
468
|
+
preset: z.string().optional(),
|
|
469
|
+
setDefaultAgent: z.boolean().optional(),
|
|
470
|
+
compactSidebar: z.boolean().optional().describe("Use the compact TUI sidebar layout. Defaults to true; set false to use the expanded layout."),
|
|
471
|
+
stripOrchestratorModel: z.boolean().optional().describe("When true, omit orchestrator.model and orchestrator.variant from the SDK config so OpenCode uses the session model selected with /model after subagent dispatch. An explicitly selected preset that sets orchestrator.model is preserved. Defaults to false."),
|
|
472
|
+
autoUpdate: z.boolean().optional().describe("Disable automatic installation of plugin updates when false. Defaults to true."),
|
|
473
|
+
presets: z.record(z.string(), PresetSchema).optional(),
|
|
474
|
+
agents: z.record(z.string(), AgentOverrideConfigSchema).optional(),
|
|
475
|
+
disabled_agents: z.array(z.string()).optional().describe("Agent names to disable completely. " + "Disabled agents are not instantiated and cannot be delegated to. " + "Orchestrator cannot be disabled. " + "By default, 'observer' is disabled. Remove it from this list and configure a vision-capable model to enable."),
|
|
476
|
+
image_routing: z.enum(["auto", "direct"]).optional().describe("How image attachments are handled. " + "When omitted, preserves legacy conditional behavior: intercept " + 'attachments only when observer is enabled. "auto": requires ' + "observer to be enabled and saves attachments to disk before " + 'nudging delegation to @observer. "direct": always passes ' + "attachments to the orchestrator untouched."),
|
|
477
|
+
disabled_mcps: z.array(z.string()).optional().describe("MCP server names to disable completely. Disabled servers are not " + "started and cannot be used by agents."),
|
|
478
|
+
disabled_tools: z.array(z.string()).optional().describe("Tool names to disable completely. Disabled tools are not registered with OpenCode and cannot be used by agents."),
|
|
479
|
+
disabled_skills: z.array(z.string()).optional().describe("Skill names to disable completely. Disabled skills are not granted to agents, even when referenced by presets or agent overrides."),
|
|
568
480
|
multiplexer: MultiplexerConfigSchema.optional(),
|
|
569
481
|
tmux: TmuxConfigSchema.optional(),
|
|
570
482
|
websearch: WebsearchConfigSchema.optional(),
|
|
571
483
|
interview: InterviewConfigSchema.optional(),
|
|
572
484
|
backgroundJobs: BackgroundJobsConfigSchema.optional(),
|
|
573
485
|
fallback: FailoverConfigSchema.optional(),
|
|
574
|
-
council: CouncilConfigSchema.optional(),
|
|
575
486
|
companion: CompanionConfigSchema.optional(),
|
|
576
487
|
acpAgents: AcpAgentsConfigSchema.optional()
|
|
577
488
|
}).superRefine((value, ctx) => {
|
|
@@ -595,9 +506,7 @@ var DEFAULT_AGENT_MCPS = {
|
|
|
595
506
|
librarian: ["websearch", "context7", "gh_grep"],
|
|
596
507
|
explorer: [],
|
|
597
508
|
fixer: [],
|
|
598
|
-
observer: []
|
|
599
|
-
council: [],
|
|
600
|
-
councillor: []
|
|
509
|
+
observer: []
|
|
601
510
|
};
|
|
602
511
|
|
|
603
512
|
// src/cli/custom-skills-registry.ts
|
|
@@ -1308,7 +1217,6 @@ function mergePluginConfigs(base, override) {
|
|
|
1308
1217
|
interview: deepMerge(base.interview, override.interview),
|
|
1309
1218
|
backgroundJobs: deepMerge(base.backgroundJobs, override.backgroundJobs),
|
|
1310
1219
|
fallback: deepMerge(base.fallback, override.fallback),
|
|
1311
|
-
council: deepMerge(base.council, override.council),
|
|
1312
1220
|
acpAgents: deepMerge(base.acpAgents, override.acpAgents),
|
|
1313
1221
|
companion: deepMerge(base.companion, override.companion)
|
|
1314
1222
|
};
|
|
@@ -1374,7 +1282,7 @@ function checkConfigFile(scope, configPath) {
|
|
|
1374
1282
|
ok: false,
|
|
1375
1283
|
error: {
|
|
1376
1284
|
kind: "invalid-schema",
|
|
1377
|
-
message:
|
|
1285
|
+
message: z2.prettifyError(parseResult.error),
|
|
1378
1286
|
issues: parseResult.error.issues
|
|
1379
1287
|
}
|
|
1380
1288
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export declare const AGENT_ALIASES: Record<string, string>;
|
|
2
|
-
export declare const SUBAGENT_NAMES: readonly ["explorer", "librarian", "oracle", "designer", "fixer", "observer"
|
|
3
|
-
export declare const ALL_AGENT_NAMES: readonly ["orchestrator", "explorer", "librarian", "oracle", "designer", "fixer", "observer"
|
|
2
|
+
export declare const SUBAGENT_NAMES: readonly ["explorer", "librarian", "oracle", "designer", "fixer", "observer"];
|
|
3
|
+
export declare const ALL_AGENT_NAMES: readonly ["orchestrator", "explorer", "librarian", "oracle", "designer", "fixer", "observer"];
|
|
4
4
|
export type AgentName = (typeof ALL_AGENT_NAMES)[number];
|
|
5
5
|
/** Agents that cannot be disabled even if listed in disabled_agents config. */
|
|
6
6
|
export declare const PROTECTED_AGENTS: Set<string>;
|
package/dist/config/index.d.ts
CHANGED
package/dist/config/schema.d.ts
CHANGED
|
@@ -1021,47 +1021,6 @@ export declare const PluginConfigSchema: z.ZodObject<{
|
|
|
1021
1021
|
retry_on_empty: z.ZodDefault<z.ZodBoolean>;
|
|
1022
1022
|
runtimeOverride: z.ZodOptional<z.ZodBoolean>;
|
|
1023
1023
|
}, z.core.$strict>>;
|
|
1024
|
-
council: z.ZodOptional<z.ZodPipe<z.ZodObject<{
|
|
1025
|
-
presets: z.ZodRecord<z.ZodString, z.ZodPipe<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>>, z.ZodTransform<Record<string, {
|
|
1026
|
-
model: string;
|
|
1027
|
-
variant: string | undefined;
|
|
1028
|
-
prompt: string | undefined;
|
|
1029
|
-
models: import("./council-schema").CouncillorModelEntry[];
|
|
1030
|
-
}>, Record<string, Record<string, unknown>>>>>;
|
|
1031
|
-
timeout: z.ZodDefault<z.ZodNumber>;
|
|
1032
|
-
default_preset: z.ZodDefault<z.ZodString>;
|
|
1033
|
-
councillor_execution_mode: z.ZodDefault<z.ZodEnum<{
|
|
1034
|
-
parallel: "parallel";
|
|
1035
|
-
serial: "serial";
|
|
1036
|
-
}>>;
|
|
1037
|
-
councillor_retries: z.ZodDefault<z.ZodNumber>;
|
|
1038
|
-
master: z.ZodOptional<z.ZodUnknown>;
|
|
1039
|
-
}, z.core.$strip>, z.ZodTransform<{
|
|
1040
|
-
presets: Record<string, Record<string, {
|
|
1041
|
-
model: string;
|
|
1042
|
-
variant: string | undefined;
|
|
1043
|
-
prompt: string | undefined;
|
|
1044
|
-
models: import("./council-schema").CouncillorModelEntry[];
|
|
1045
|
-
}>>;
|
|
1046
|
-
timeout: number;
|
|
1047
|
-
default_preset: string;
|
|
1048
|
-
councillor_execution_mode: "parallel" | "serial";
|
|
1049
|
-
councillor_retries: number;
|
|
1050
|
-
_deprecated: string[] | undefined;
|
|
1051
|
-
_legacyMasterModel: string | undefined;
|
|
1052
|
-
}, {
|
|
1053
|
-
presets: Record<string, Record<string, {
|
|
1054
|
-
model: string;
|
|
1055
|
-
variant: string | undefined;
|
|
1056
|
-
prompt: string | undefined;
|
|
1057
|
-
models: import("./council-schema").CouncillorModelEntry[];
|
|
1058
|
-
}>>;
|
|
1059
|
-
timeout: number;
|
|
1060
|
-
default_preset: string;
|
|
1061
|
-
councillor_execution_mode: "parallel" | "serial";
|
|
1062
|
-
councillor_retries: number;
|
|
1063
|
-
master?: unknown;
|
|
1064
|
-
}>>>;
|
|
1065
1024
|
companion: z.ZodOptional<z.ZodObject<{
|
|
1066
1025
|
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
1067
1026
|
binaryPath: z.ZodOptional<z.ZodString>;
|