oh-my-opencode-slim 2.0.1 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ja-JP.md +30 -1
- package/README.ko-KR.md +30 -1
- package/README.md +36 -1
- package/README.zh-CN.md +30 -1
- package/dist/agents/orchestrator.d.ts +0 -2
- package/dist/cli/index.js +22 -34
- package/dist/config/agent-mcps.d.ts +0 -4
- package/dist/config/constants.d.ts +1 -7
- package/dist/config/council-schema.d.ts +0 -15
- package/dist/config/runtime-preset.d.ts +0 -1
- package/dist/config/schema.d.ts +2 -68
- package/dist/hooks/auto-update-checker/skill-sync.d.ts +9 -0
- package/dist/hooks/filter-available-skills/index.d.ts +1 -13
- package/dist/hooks/foreground-fallback/index.d.ts +1 -1
- package/dist/hooks/image-hook.d.ts +1 -13
- package/dist/hooks/index.d.ts +3 -2
- package/dist/hooks/phase-reminder/index.d.ts +10 -16
- package/dist/hooks/reflect/index.d.ts +13 -0
- package/dist/hooks/task-session-manager/index.d.ts +2 -16
- package/dist/hooks/types.d.ts +23 -0
- package/dist/index.js +391 -289
- package/dist/tui.js +16 -25
- package/dist/utils/agent-variant.d.ts +0 -40
- package/dist/utils/compat.d.ts +0 -1
- package/dist/utils/guards.d.ts +4 -0
- package/dist/utils/index.d.ts +1 -2
- package/dist/utils/logger.d.ts +1 -1
- package/dist/utils/task.d.ts +0 -2
- package/oh-my-opencode-slim.schema.json +2 -249
- package/package.json +1 -1
- package/src/skills/codemap.md +4 -1
- package/src/skills/reflect/SKILL.md +193 -0
- package/src/skills/worktrees/SKILL.md +164 -0
- package/dist/config/fallback-chains.d.ts +0 -1
- package/dist/hooks/apply-patch/patch.d.ts +0 -2
- package/dist/hooks/delegate-task-retry/guidance.d.ts +0 -2
- package/dist/hooks/delegate-task-retry/index.d.ts +0 -4
- package/dist/hooks/json-error-recovery/index.d.ts +0 -1
- package/dist/utils/env.d.ts +0 -1
package/dist/tui.js
CHANGED
|
@@ -50,8 +50,7 @@ var SUBAGENT_NAMES = [
|
|
|
50
50
|
"council",
|
|
51
51
|
"councillor"
|
|
52
52
|
];
|
|
53
|
-
var
|
|
54
|
-
var ALL_AGENT_NAMES = [ORCHESTRATOR_NAME, ...SUBAGENT_NAMES];
|
|
53
|
+
var ALL_AGENT_NAMES = ["orchestrator", ...SUBAGENT_NAMES];
|
|
55
54
|
var PROTECTED_AGENTS = new Set(["orchestrator", "councillor"]);
|
|
56
55
|
var DEFAULT_MODELS = {
|
|
57
56
|
orchestrator: undefined,
|
|
@@ -65,10 +64,10 @@ var DEFAULT_MODELS = {
|
|
|
65
64
|
councillor: "openai/gpt-5.4-mini"
|
|
66
65
|
};
|
|
67
66
|
var POLL_INTERVAL_BACKGROUND_MS = 2000;
|
|
68
|
-
var DEFAULT_TIMEOUT_MS = 2 * 60 * 1000;
|
|
69
67
|
var MAX_POLL_TIME_MS = 5 * 60 * 1000;
|
|
70
68
|
var DEFAULT_MAX_SUBAGENT_DEPTH = 3;
|
|
71
69
|
var PHASE_REMINDER_TEXT = `!IMPORTANT! Scheduler workflow: 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!`;
|
|
70
|
+
var PHASE_REMINDER = `<internal_reminder>${PHASE_REMINDER_TEXT}</internal_reminder>`;
|
|
72
71
|
var WRITABLE_FILE_OPERATIONS_RULES = `**File Operations Rules**:
|
|
73
72
|
- Prefer dedicated file tools for normal code work: glob/grep/ast_grep_search for discovery, read for file contents, and edit/write/apply_patch for targeted source changes.
|
|
74
73
|
- Use bash for execution and automation: git, package managers, tests, builds, scripts, diagnostics, and shell-native filesystem operations.
|
|
@@ -95,7 +94,6 @@ import * as path from "node:path";
|
|
|
95
94
|
// src/utils/compat.ts
|
|
96
95
|
import { spawn as nodeSpawn } from "node:child_process";
|
|
97
96
|
import { writeFile as fsWriteFile } from "node:fs/promises";
|
|
98
|
-
var isBun = typeof globalThis.Bun !== "undefined";
|
|
99
97
|
function collectStream(stream) {
|
|
100
98
|
if (!stream)
|
|
101
99
|
return () => Promise.resolve("");
|
|
@@ -216,17 +214,11 @@ var CouncilConfigSchema = z.object({
|
|
|
216
214
|
default_preset: z.string().default("default"),
|
|
217
215
|
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).'),
|
|
218
216
|
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."),
|
|
219
|
-
master: z.unknown().optional().describe("DEPRECATED — ignored. Council agent synthesizes directly.")
|
|
220
|
-
master_timeout: z.unknown().optional().describe('DEPRECATED — ignored. Use "timeout" instead.'),
|
|
221
|
-
master_fallback: z.unknown().optional().describe("DEPRECATED — ignored. No separate master session.")
|
|
217
|
+
master: z.unknown().optional().describe("DEPRECATED — ignored. Council agent synthesizes directly.")
|
|
222
218
|
}).transform((data) => {
|
|
223
219
|
const deprecated = [];
|
|
224
220
|
if (data.master !== undefined)
|
|
225
221
|
deprecated.push("master");
|
|
226
|
-
if (data.master_timeout !== undefined)
|
|
227
|
-
deprecated.push("master_timeout");
|
|
228
|
-
if (data.master_fallback !== undefined)
|
|
229
|
-
deprecated.push("master_fallback");
|
|
230
222
|
const legacyMasterModel = typeof data.master === "object" && data.master !== null && "model" in data.master && typeof data.master.model === "string" ? data.master.model : undefined;
|
|
231
223
|
return {
|
|
232
224
|
presets: data.presets,
|
|
@@ -268,15 +260,6 @@ var ManualPlanSchema = z2.object({
|
|
|
268
260
|
librarian: ManualAgentPlanSchema,
|
|
269
261
|
fixer: ManualAgentPlanSchema
|
|
270
262
|
}).strict();
|
|
271
|
-
var AgentModelChainSchema = z2.array(z2.string()).min(1);
|
|
272
|
-
var FallbackChainsSchema = z2.object({
|
|
273
|
-
orchestrator: AgentModelChainSchema.optional(),
|
|
274
|
-
oracle: AgentModelChainSchema.optional(),
|
|
275
|
-
designer: AgentModelChainSchema.optional(),
|
|
276
|
-
explorer: AgentModelChainSchema.optional(),
|
|
277
|
-
librarian: AgentModelChainSchema.optional(),
|
|
278
|
-
fixer: AgentModelChainSchema.optional()
|
|
279
|
-
}).catchall(AgentModelChainSchema);
|
|
280
263
|
var AgentOverrideConfigSchema = z2.object({
|
|
281
264
|
model: z2.union([
|
|
282
265
|
z2.string(),
|
|
@@ -339,9 +322,8 @@ var FailoverConfigSchema = z2.object({
|
|
|
339
322
|
enabled: z2.boolean().default(true),
|
|
340
323
|
timeoutMs: z2.number().min(0).default(15000),
|
|
341
324
|
retryDelayMs: z2.number().min(0).default(500),
|
|
342
|
-
chains: FallbackChainsSchema.default({}),
|
|
343
325
|
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.")
|
|
344
|
-
});
|
|
326
|
+
}).strict();
|
|
345
327
|
var CompanionConfigSchema = z2.object({
|
|
346
328
|
enabled: z2.boolean().optional(),
|
|
347
329
|
position: z2.enum(["bottom-right", "bottom-left", "top-right", "top-left"]).optional(),
|
|
@@ -372,10 +354,7 @@ function validateCustomOnlyPromptFields(overrides, ctx, pathPrefix) {
|
|
|
372
354
|
var PluginConfigSchema = z2.object({
|
|
373
355
|
preset: z2.string().optional(),
|
|
374
356
|
setDefaultAgent: z2.boolean().optional(),
|
|
375
|
-
scoringEngineVersion: z2.enum(["v1", "v2-shadow", "v2"]).optional(),
|
|
376
|
-
balanceProviderUsage: z2.boolean().optional(),
|
|
377
357
|
autoUpdate: z2.boolean().optional().describe("Disable automatic installation of plugin updates when false. Defaults to true."),
|
|
378
|
-
manualPlan: ManualPlanSchema.optional(),
|
|
379
358
|
presets: z2.record(z2.string(), PresetSchema).optional(),
|
|
380
359
|
agents: z2.record(z2.string(), AgentOverrideConfigSchema).optional(),
|
|
381
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 and council internal agents (councillor) cannot be disabled. " + "By default, 'observer' is disabled. Remove it from this list and configure a vision-capable model to enable."),
|
|
@@ -473,11 +452,23 @@ var CUSTOM_SKILLS = [
|
|
|
473
452
|
allowedAgents: ["orchestrator"],
|
|
474
453
|
sourcePath: "src/skills/deepwork"
|
|
475
454
|
},
|
|
455
|
+
{
|
|
456
|
+
name: "reflect",
|
|
457
|
+
description: "Review repeated work and suggest reusable workflow improvements",
|
|
458
|
+
allowedAgents: ["orchestrator"],
|
|
459
|
+
sourcePath: "src/skills/reflect"
|
|
460
|
+
},
|
|
476
461
|
{
|
|
477
462
|
name: "oh-my-opencode-slim",
|
|
478
463
|
description: "Configure, customize, and safely improve oh-my-opencode-slim setups",
|
|
479
464
|
allowedAgents: ["orchestrator"],
|
|
480
465
|
sourcePath: "src/skills/oh-my-opencode-slim"
|
|
466
|
+
},
|
|
467
|
+
{
|
|
468
|
+
name: "worktrees",
|
|
469
|
+
description: "Manage Git worktrees as OMO safe isolated coding lanes for complex/risky/parallel work",
|
|
470
|
+
allowedAgents: ["orchestrator"],
|
|
471
|
+
sourcePath: "src/skills/worktrees"
|
|
481
472
|
}
|
|
482
473
|
];
|
|
483
474
|
|
|
@@ -10,23 +10,6 @@ import { type PluginConfig } from '../config';
|
|
|
10
10
|
* normalizeAgentName(" explore ") // returns "explore"
|
|
11
11
|
*/
|
|
12
12
|
export declare function normalizeAgentName(agentName: string): string;
|
|
13
|
-
/**
|
|
14
|
-
* Resolves the variant configuration for a specific agent.
|
|
15
|
-
*
|
|
16
|
-
* Looks up the agent's variant in the plugin configuration. Returns undefined if:
|
|
17
|
-
* - No config is provided
|
|
18
|
-
* - The agent has no variant configured
|
|
19
|
-
* - The variant is not a string
|
|
20
|
-
* - The variant is empty or whitespace-only
|
|
21
|
-
*
|
|
22
|
-
* @param config - The plugin configuration object
|
|
23
|
-
* @param agentName - The name of the agent (with or without @ prefix)
|
|
24
|
-
* @returns The trimmed variant string, or undefined if no valid variant is found
|
|
25
|
-
*
|
|
26
|
-
* @example
|
|
27
|
-
* resolveAgentVariant(config, "@oracle") // returns "high" if configured
|
|
28
|
-
*/
|
|
29
|
-
export declare function resolveAgentVariant(config: PluginConfig | undefined, agentName: string): string | undefined;
|
|
30
13
|
/**
|
|
31
14
|
* Resolve a runtime-provided agent name to an internal agent name.
|
|
32
15
|
*
|
|
@@ -38,26 +21,3 @@ export declare function resolveAgentVariant(config: PluginConfig | undefined, ag
|
|
|
38
21
|
export declare function resolveRuntimeAgentName(config: PluginConfig | undefined, agentName: string): string;
|
|
39
22
|
export type DisplayNameMentionRewriter = (text: string) => string;
|
|
40
23
|
export declare function createDisplayNameMentionRewriter(config: PluginConfig | undefined): DisplayNameMentionRewriter;
|
|
41
|
-
/**
|
|
42
|
-
* Rewrites user-facing display-name mentions (e.g. @advisor) into internal
|
|
43
|
-
* agent mentions (e.g. @oracle) for runtime routing.
|
|
44
|
-
*/
|
|
45
|
-
export declare function rewriteDisplayNameMentions(config: PluginConfig | undefined, text: string): string;
|
|
46
|
-
/**
|
|
47
|
-
* Applies a variant to a request body if the body doesn't already have one.
|
|
48
|
-
*
|
|
49
|
-
* This function will NOT override an existing variant in the body. If no variant
|
|
50
|
-
* is provided or the body already has a variant, the original body is returned.
|
|
51
|
-
*
|
|
52
|
-
* @template T - The type of the body object, must have an optional variant property
|
|
53
|
-
* @param variant - The variant string to apply (or undefined)
|
|
54
|
-
* @param body - The request body object
|
|
55
|
-
* @returns The body with the variant applied (new object) or the original body unchanged
|
|
56
|
-
*
|
|
57
|
-
* @example
|
|
58
|
-
* applyAgentVariant("high", { agent: "oracle" }) // returns { agent: "oracle", variant: "high" }
|
|
59
|
-
* applyAgentVariant("high", { agent: "oracle", variant: "low" }) // returns original body with variant: "low"
|
|
60
|
-
*/
|
|
61
|
-
export declare function applyAgentVariant<T extends {
|
|
62
|
-
variant?: string;
|
|
63
|
-
}>(variant: string | undefined, body: T): T;
|
package/dist/utils/compat.d.ts
CHANGED
package/dist/utils/index.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
export * from './agent-variant';
|
|
2
2
|
export * from './background-job-board';
|
|
3
|
-
export * from './env';
|
|
4
3
|
export * from './internal-initiator';
|
|
5
|
-
export { getLogDir, initLogger, log
|
|
4
|
+
export { getLogDir, initLogger, log } from './logger';
|
|
6
5
|
export * from './polling';
|
|
7
6
|
export * from './session';
|
|
8
7
|
export * from './task';
|
package/dist/utils/logger.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
declare function getLogDir(): string;
|
|
2
2
|
export declare function initLogger(sessionId: string): void;
|
|
3
|
+
export { getLogDir };
|
|
3
4
|
/** @internal Reset logger state for testing */
|
|
4
5
|
export declare function resetLogger(): void;
|
|
5
6
|
/** @internal Wait for queued log writes in tests. */
|
|
6
7
|
export declare function flushLoggerForTesting(): Promise<void>;
|
|
7
|
-
export { getLogDir };
|
|
8
8
|
export declare function log(message: string, data?: unknown): void;
|
package/dist/utils/task.d.ts
CHANGED
|
@@ -13,10 +13,8 @@ export interface TaskStatusOutput {
|
|
|
13
13
|
timedOut: boolean;
|
|
14
14
|
result?: string;
|
|
15
15
|
}
|
|
16
|
-
export type TaskStatusClassification = 'running' | 'terminal' | 'timeout' | 'transient_process_error' | 'unknown_error';
|
|
17
16
|
export declare function parseTaskIdFromTaskOutput(output: string): string | undefined;
|
|
18
17
|
export declare function parseTaskLaunchOutput(output: string): TaskLaunchOutput | undefined;
|
|
19
18
|
export declare function parseTaskStatusOutput(output: string): TaskStatusOutput | undefined;
|
|
20
|
-
export declare function classifyTaskStatusOutput(status: TaskStatusOutput): TaskStatusClassification;
|
|
21
19
|
export declare function parseTaskStateFromOutput(output: string): TaskOutputState | undefined;
|
|
22
20
|
export declare function parseTaskResultFromOutput(output: string): string | undefined;
|
|
@@ -8,197 +8,10 @@
|
|
|
8
8
|
"setDefaultAgent": {
|
|
9
9
|
"type": "boolean"
|
|
10
10
|
},
|
|
11
|
-
"scoringEngineVersion": {
|
|
12
|
-
"type": "string",
|
|
13
|
-
"enum": [
|
|
14
|
-
"v1",
|
|
15
|
-
"v2-shadow",
|
|
16
|
-
"v2"
|
|
17
|
-
]
|
|
18
|
-
},
|
|
19
|
-
"balanceProviderUsage": {
|
|
20
|
-
"type": "boolean"
|
|
21
|
-
},
|
|
22
11
|
"autoUpdate": {
|
|
23
12
|
"description": "Disable automatic installation of plugin updates when false. Defaults to true.",
|
|
24
13
|
"type": "boolean"
|
|
25
14
|
},
|
|
26
|
-
"manualPlan": {
|
|
27
|
-
"type": "object",
|
|
28
|
-
"properties": {
|
|
29
|
-
"orchestrator": {
|
|
30
|
-
"type": "object",
|
|
31
|
-
"properties": {
|
|
32
|
-
"primary": {
|
|
33
|
-
"type": "string",
|
|
34
|
-
"pattern": "^[^/\\s]+\\/[^\\s]+$"
|
|
35
|
-
},
|
|
36
|
-
"fallback1": {
|
|
37
|
-
"type": "string",
|
|
38
|
-
"pattern": "^[^/\\s]+\\/[^\\s]+$"
|
|
39
|
-
},
|
|
40
|
-
"fallback2": {
|
|
41
|
-
"type": "string",
|
|
42
|
-
"pattern": "^[^/\\s]+\\/[^\\s]+$"
|
|
43
|
-
},
|
|
44
|
-
"fallback3": {
|
|
45
|
-
"type": "string",
|
|
46
|
-
"pattern": "^[^/\\s]+\\/[^\\s]+$"
|
|
47
|
-
}
|
|
48
|
-
},
|
|
49
|
-
"required": [
|
|
50
|
-
"primary",
|
|
51
|
-
"fallback1",
|
|
52
|
-
"fallback2",
|
|
53
|
-
"fallback3"
|
|
54
|
-
]
|
|
55
|
-
},
|
|
56
|
-
"oracle": {
|
|
57
|
-
"type": "object",
|
|
58
|
-
"properties": {
|
|
59
|
-
"primary": {
|
|
60
|
-
"type": "string",
|
|
61
|
-
"pattern": "^[^/\\s]+\\/[^\\s]+$"
|
|
62
|
-
},
|
|
63
|
-
"fallback1": {
|
|
64
|
-
"type": "string",
|
|
65
|
-
"pattern": "^[^/\\s]+\\/[^\\s]+$"
|
|
66
|
-
},
|
|
67
|
-
"fallback2": {
|
|
68
|
-
"type": "string",
|
|
69
|
-
"pattern": "^[^/\\s]+\\/[^\\s]+$"
|
|
70
|
-
},
|
|
71
|
-
"fallback3": {
|
|
72
|
-
"type": "string",
|
|
73
|
-
"pattern": "^[^/\\s]+\\/[^\\s]+$"
|
|
74
|
-
}
|
|
75
|
-
},
|
|
76
|
-
"required": [
|
|
77
|
-
"primary",
|
|
78
|
-
"fallback1",
|
|
79
|
-
"fallback2",
|
|
80
|
-
"fallback3"
|
|
81
|
-
]
|
|
82
|
-
},
|
|
83
|
-
"designer": {
|
|
84
|
-
"type": "object",
|
|
85
|
-
"properties": {
|
|
86
|
-
"primary": {
|
|
87
|
-
"type": "string",
|
|
88
|
-
"pattern": "^[^/\\s]+\\/[^\\s]+$"
|
|
89
|
-
},
|
|
90
|
-
"fallback1": {
|
|
91
|
-
"type": "string",
|
|
92
|
-
"pattern": "^[^/\\s]+\\/[^\\s]+$"
|
|
93
|
-
},
|
|
94
|
-
"fallback2": {
|
|
95
|
-
"type": "string",
|
|
96
|
-
"pattern": "^[^/\\s]+\\/[^\\s]+$"
|
|
97
|
-
},
|
|
98
|
-
"fallback3": {
|
|
99
|
-
"type": "string",
|
|
100
|
-
"pattern": "^[^/\\s]+\\/[^\\s]+$"
|
|
101
|
-
}
|
|
102
|
-
},
|
|
103
|
-
"required": [
|
|
104
|
-
"primary",
|
|
105
|
-
"fallback1",
|
|
106
|
-
"fallback2",
|
|
107
|
-
"fallback3"
|
|
108
|
-
]
|
|
109
|
-
},
|
|
110
|
-
"explorer": {
|
|
111
|
-
"type": "object",
|
|
112
|
-
"properties": {
|
|
113
|
-
"primary": {
|
|
114
|
-
"type": "string",
|
|
115
|
-
"pattern": "^[^/\\s]+\\/[^\\s]+$"
|
|
116
|
-
},
|
|
117
|
-
"fallback1": {
|
|
118
|
-
"type": "string",
|
|
119
|
-
"pattern": "^[^/\\s]+\\/[^\\s]+$"
|
|
120
|
-
},
|
|
121
|
-
"fallback2": {
|
|
122
|
-
"type": "string",
|
|
123
|
-
"pattern": "^[^/\\s]+\\/[^\\s]+$"
|
|
124
|
-
},
|
|
125
|
-
"fallback3": {
|
|
126
|
-
"type": "string",
|
|
127
|
-
"pattern": "^[^/\\s]+\\/[^\\s]+$"
|
|
128
|
-
}
|
|
129
|
-
},
|
|
130
|
-
"required": [
|
|
131
|
-
"primary",
|
|
132
|
-
"fallback1",
|
|
133
|
-
"fallback2",
|
|
134
|
-
"fallback3"
|
|
135
|
-
]
|
|
136
|
-
},
|
|
137
|
-
"librarian": {
|
|
138
|
-
"type": "object",
|
|
139
|
-
"properties": {
|
|
140
|
-
"primary": {
|
|
141
|
-
"type": "string",
|
|
142
|
-
"pattern": "^[^/\\s]+\\/[^\\s]+$"
|
|
143
|
-
},
|
|
144
|
-
"fallback1": {
|
|
145
|
-
"type": "string",
|
|
146
|
-
"pattern": "^[^/\\s]+\\/[^\\s]+$"
|
|
147
|
-
},
|
|
148
|
-
"fallback2": {
|
|
149
|
-
"type": "string",
|
|
150
|
-
"pattern": "^[^/\\s]+\\/[^\\s]+$"
|
|
151
|
-
},
|
|
152
|
-
"fallback3": {
|
|
153
|
-
"type": "string",
|
|
154
|
-
"pattern": "^[^/\\s]+\\/[^\\s]+$"
|
|
155
|
-
}
|
|
156
|
-
},
|
|
157
|
-
"required": [
|
|
158
|
-
"primary",
|
|
159
|
-
"fallback1",
|
|
160
|
-
"fallback2",
|
|
161
|
-
"fallback3"
|
|
162
|
-
]
|
|
163
|
-
},
|
|
164
|
-
"fixer": {
|
|
165
|
-
"type": "object",
|
|
166
|
-
"properties": {
|
|
167
|
-
"primary": {
|
|
168
|
-
"type": "string",
|
|
169
|
-
"pattern": "^[^/\\s]+\\/[^\\s]+$"
|
|
170
|
-
},
|
|
171
|
-
"fallback1": {
|
|
172
|
-
"type": "string",
|
|
173
|
-
"pattern": "^[^/\\s]+\\/[^\\s]+$"
|
|
174
|
-
},
|
|
175
|
-
"fallback2": {
|
|
176
|
-
"type": "string",
|
|
177
|
-
"pattern": "^[^/\\s]+\\/[^\\s]+$"
|
|
178
|
-
},
|
|
179
|
-
"fallback3": {
|
|
180
|
-
"type": "string",
|
|
181
|
-
"pattern": "^[^/\\s]+\\/[^\\s]+$"
|
|
182
|
-
}
|
|
183
|
-
},
|
|
184
|
-
"required": [
|
|
185
|
-
"primary",
|
|
186
|
-
"fallback1",
|
|
187
|
-
"fallback2",
|
|
188
|
-
"fallback3"
|
|
189
|
-
]
|
|
190
|
-
}
|
|
191
|
-
},
|
|
192
|
-
"required": [
|
|
193
|
-
"orchestrator",
|
|
194
|
-
"oracle",
|
|
195
|
-
"designer",
|
|
196
|
-
"explorer",
|
|
197
|
-
"librarian",
|
|
198
|
-
"fixer"
|
|
199
|
-
],
|
|
200
|
-
"additionalProperties": false
|
|
201
|
-
},
|
|
202
15
|
"presets": {
|
|
203
16
|
"type": "object",
|
|
204
17
|
"propertyNames": {
|
|
@@ -534,67 +347,13 @@
|
|
|
534
347
|
"type": "number",
|
|
535
348
|
"minimum": 0
|
|
536
349
|
},
|
|
537
|
-
"chains": {
|
|
538
|
-
"default": {},
|
|
539
|
-
"type": "object",
|
|
540
|
-
"properties": {
|
|
541
|
-
"orchestrator": {
|
|
542
|
-
"minItems": 1,
|
|
543
|
-
"type": "array",
|
|
544
|
-
"items": {
|
|
545
|
-
"type": "string"
|
|
546
|
-
}
|
|
547
|
-
},
|
|
548
|
-
"oracle": {
|
|
549
|
-
"minItems": 1,
|
|
550
|
-
"type": "array",
|
|
551
|
-
"items": {
|
|
552
|
-
"type": "string"
|
|
553
|
-
}
|
|
554
|
-
},
|
|
555
|
-
"designer": {
|
|
556
|
-
"minItems": 1,
|
|
557
|
-
"type": "array",
|
|
558
|
-
"items": {
|
|
559
|
-
"type": "string"
|
|
560
|
-
}
|
|
561
|
-
},
|
|
562
|
-
"explorer": {
|
|
563
|
-
"minItems": 1,
|
|
564
|
-
"type": "array",
|
|
565
|
-
"items": {
|
|
566
|
-
"type": "string"
|
|
567
|
-
}
|
|
568
|
-
},
|
|
569
|
-
"librarian": {
|
|
570
|
-
"minItems": 1,
|
|
571
|
-
"type": "array",
|
|
572
|
-
"items": {
|
|
573
|
-
"type": "string"
|
|
574
|
-
}
|
|
575
|
-
},
|
|
576
|
-
"fixer": {
|
|
577
|
-
"minItems": 1,
|
|
578
|
-
"type": "array",
|
|
579
|
-
"items": {
|
|
580
|
-
"type": "string"
|
|
581
|
-
}
|
|
582
|
-
}
|
|
583
|
-
},
|
|
584
|
-
"additionalProperties": {
|
|
585
|
-
"minItems": 1,
|
|
586
|
-
"type": "array",
|
|
587
|
-
"items": {
|
|
588
|
-
"type": "string"
|
|
589
|
-
}
|
|
590
|
-
}
|
|
591
|
-
},
|
|
592
350
|
"retry_on_empty": {
|
|
593
351
|
"default": true,
|
|
594
352
|
"description": "When true (default), empty provider responses are treated as failures, triggering fallback/retry. Set to false to treat them as successes.",
|
|
595
353
|
"type": "boolean"
|
|
596
354
|
}
|
|
597
|
-
}
|
|
355
|
+
},
|
|
356
|
+
"additionalProperties": false
|
|
598
357
|
},
|
|
599
358
|
"council": {
|
|
600
359
|
"type": "object",
|
|
@@ -645,12 +404,6 @@
|
|
|
645
404
|
},
|
|
646
405
|
"master": {
|
|
647
406
|
"description": "DEPRECATED — ignored. Council agent synthesizes directly."
|
|
648
|
-
},
|
|
649
|
-
"master_timeout": {
|
|
650
|
-
"description": "DEPRECATED — ignored. Use \"timeout\" instead."
|
|
651
|
-
},
|
|
652
|
-
"master_fallback": {
|
|
653
|
-
"description": "DEPRECATED — ignored. No separate master session."
|
|
654
407
|
}
|
|
655
408
|
},
|
|
656
409
|
"required": [
|
package/package.json
CHANGED
package/src/skills/codemap.md
CHANGED
|
@@ -19,6 +19,8 @@
|
|
|
19
19
|
- `src/skills/clonedeps/` (workflow skill for dependency source mirroring)
|
|
20
20
|
- `src/skills/simplify/` (readability/refactor guidance skill)
|
|
21
21
|
- `src/skills/deepwork/` (orchestrator-only workflow for heavy coding sessions)
|
|
22
|
+
- `src/skills/reflect/` (orchestrator-only workflow for learning from repeated work and suggesting reusable improvements)
|
|
23
|
+
- `src/skills/worktrees/` (orchestrator-only workflow for safe Git worktree lanes)
|
|
22
24
|
- `src/skills/oh-my-opencode-slim/` (orchestrator-only plugin configuration and self-improvement guidance)
|
|
23
25
|
- Files are considered static runtime payload. No plugin TS module in `src/` imports these files directly; they
|
|
24
26
|
are loaded by OpenCode via filesystem installation.
|
|
@@ -41,6 +43,7 @@
|
|
|
41
43
|
- `verify-release-artifact.ts` enforces artifact completeness by asserting key
|
|
42
44
|
bundled skill payloads such as `src/skills/simplify/SKILL.md`,
|
|
43
45
|
`src/skills/codemap/SKILL.md`, `src/skills/clonedeps/SKILL.md`, and
|
|
44
|
-
`src/skills/deepwork/SKILL.md`,
|
|
46
|
+
`src/skills/deepwork/SKILL.md`, `src/skills/reflect/SKILL.md`,
|
|
47
|
+
`src/skills/worktrees/SKILL.md`, plus `src/skills/oh-my-opencode-slim/SKILL.md`,
|
|
45
48
|
are present in the tarball.
|
|
46
49
|
- `package.json` scripts (`verify:release`, `build`) rely on these assets to ensure install-time skill availability.
|