oh-my-opencode-serverlocal 0.1.6 → 0.1.8
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 +0 -6
- package/dist/hooks/index.d.ts +1 -1
- package/dist/hooks/{deepwork → tier-commands}/index.d.ts +1 -1
- package/dist/index.js +124 -118
- package/dist/tui.js +0 -6
- package/package.json +1 -1
- package/src/skills/deepwork/SKILL.md +0 -122
package/dist/cli/index.js
CHANGED
|
@@ -529,12 +529,6 @@ var CUSTOM_SKILLS = [
|
|
|
529
529
|
allowedAgents: ["orchestrator"],
|
|
530
530
|
sourcePath: "src/skills/clonedeps"
|
|
531
531
|
},
|
|
532
|
-
{
|
|
533
|
-
name: "deepwork",
|
|
534
|
-
description: "Heavy/complex coding sessions and large modifications workflow",
|
|
535
|
-
allowedAgents: ["orchestrator"],
|
|
536
|
-
sourcePath: "src/skills/deepwork"
|
|
537
|
-
},
|
|
538
532
|
{
|
|
539
533
|
name: "verification-planning",
|
|
540
534
|
description: "Plan credible, proportionate evidence before non-trivial implementation",
|
package/dist/hooks/index.d.ts
CHANGED
|
@@ -2,7 +2,6 @@ export { createApplyPatchHook } from './apply-patch';
|
|
|
2
2
|
export type { AutoUpdateCheckerOptions } from './auto-update-checker';
|
|
3
3
|
export { createAutoUpdateCheckerHook } from './auto-update-checker';
|
|
4
4
|
export { createChatHeadersHook } from './chat-headers';
|
|
5
|
-
export { createDeepworkCommandHook } from './deepwork';
|
|
6
5
|
export { createDelegateTaskRetryHook } from './delegate-task-retry/hook';
|
|
7
6
|
export { createFilterAvailableSkillsHook } from './filter-available-skills';
|
|
8
7
|
export { ForegroundFallbackManager, isFailoverError, isRetryableError, } from './foreground-fallback';
|
|
@@ -14,3 +13,4 @@ export { createPostFileToolNudgeHook } from './post-file-tool-nudge';
|
|
|
14
13
|
export { createReflectCommandHook } from './reflect';
|
|
15
14
|
export { SessionLifecycle } from './session-lifecycle';
|
|
16
15
|
export { createTaskSessionManagerHook } from './task-session-manager';
|
|
16
|
+
export { createTierCommandsHook } from './tier-commands';
|
package/dist/index.js
CHANGED
|
@@ -18357,12 +18357,6 @@ var CUSTOM_SKILLS = [
|
|
|
18357
18357
|
allowedAgents: ["orchestrator"],
|
|
18358
18358
|
sourcePath: "src/skills/clonedeps"
|
|
18359
18359
|
},
|
|
18360
|
-
{
|
|
18361
|
-
name: "deepwork",
|
|
18362
|
-
description: "Heavy/complex coding sessions and large modifications workflow",
|
|
18363
|
-
allowedAgents: ["orchestrator"],
|
|
18364
|
-
sourcePath: "src/skills/deepwork"
|
|
18365
|
-
},
|
|
18366
18360
|
{
|
|
18367
18361
|
name: "verification-planning",
|
|
18368
18362
|
description: "Plan credible, proportionate evidence before non-trivial implementation",
|
|
@@ -19028,7 +19022,7 @@ var AGENT_DESCRIPTIONS = {
|
|
|
19028
19022
|
- Role: Your strict supervisor and senior reviewer.
|
|
19029
19023
|
- Permissions: read_files
|
|
19030
19024
|
- Capabilities: Deep architectural reasoning, system-level trade-offs, logic bugs, edge cases, simplification.
|
|
19031
|
-
- **Delegate when:**
|
|
19025
|
+
- **Delegate when:** Planning reviews, final implementation reviews, high-risk refactors, logical error spotting. Oracle finds what you miss.`,
|
|
19032
19026
|
designer: `@designer
|
|
19033
19027
|
- Lane: UI/UX perfection, design systems, visual execution.
|
|
19034
19028
|
- Permissions: read_files, write_files
|
|
@@ -19045,7 +19039,7 @@ var AGENT_DESCRIPTIONS = {
|
|
|
19045
19039
|
- Lane: Multi-model adversarial debate, ideation, and complex technical planning.
|
|
19046
19040
|
- Role: Launches a structured round-table debate with 3 independent debaters (skeptic, pragmatist, architect) and a critic.
|
|
19047
19041
|
- Capabilities: Creative ideation, feature expansion, non-technical vision refinement, high-stakes trade-off analysis.
|
|
19048
|
-
- **Delegate when:**
|
|
19042
|
+
- **Delegate when:** User wants to expand their vision, needs creative ideas, feature suggestions, or when tech decisions are highly ambiguous.
|
|
19049
19043
|
- **How to call:** \`roundtable({ query: "...", maxRounds: 5 })\`.`,
|
|
19050
19044
|
observer: `@observer
|
|
19051
19045
|
- Lane: Visual/media analysis.
|
|
@@ -19059,39 +19053,37 @@ function buildOrchestratorPrompt(disabledAgents) {
|
|
|
19059
19053
|
`);
|
|
19060
19054
|
return `You are the Master Orchestrator. Your job is to plan, implement, schedule, and delegate coding work.
|
|
19061
19055
|
You are aware of all tools, skills, and agents available to you.
|
|
19062
|
-
You implement the main tasks yourself unless parallel offloading is needed or a specialist is required.
|
|
19063
19056
|
|
|
19064
|
-
##
|
|
19065
|
-
|
|
19057
|
+
## Default Workflow (Tier 0)
|
|
19058
|
+
By default, you operate autonomously.
|
|
19059
|
+
- You implement the main tasks yourself.
|
|
19060
|
+
- You use @explorer and @librarian freely for basic context.
|
|
19061
|
+
- You have a high threshold for asking for review (you don't prioritize cooperation/supervision unless explicitly needed).
|
|
19062
|
+
- If parallel simple implementation is needed, offload to @fixer.
|
|
19066
19063
|
|
|
19067
|
-
##
|
|
19068
|
-
|
|
19064
|
+
## Explicit Tiers
|
|
19065
|
+
The user may invoke specific tiers via slash commands (e.g., \`/tier1\`, \`/tier2\`, \`/tier3\`). If they do, a specific set of rules will be injected into your prompt. You MUST abandon your default autonomous behavior and strictly follow the injected tier rules (which involve mandatory @oracle reviews, \`roundtable\` usage, etc.).
|
|
19069
19066
|
|
|
19070
|
-
|
|
19071
|
-
|
|
19072
|
-
- Workflow: You do the work. High threshold for asking for review. Use @explorer and @librarian freely for basic context.
|
|
19073
|
-
- Supervision: No mandatory @oracle review.
|
|
19067
|
+
## Crucial Skills & Commands (USE THESE PROACTIVELY)
|
|
19068
|
+
You have access to powerful workflow commands. You MUST use them when the situation calls for it:
|
|
19074
19069
|
|
|
19075
|
-
|
|
19076
|
-
-
|
|
19077
|
-
-
|
|
19078
|
-
-
|
|
19079
|
-
- Verification: **MANDATORY:** You must call @oracle at the end of implementation to review the final code for bugs and logical errors. Treat @oracle as your strict supervisor.
|
|
19070
|
+
1. **/interview Command:**
|
|
19071
|
+
- If the user asks you to implement a new feature, app, or workflow, and their description is vague, not well thought out, or lacks sophisticated details: DO NOT GUESS.
|
|
19072
|
+
- IMMEDIATELY invoke the \`/interview\` command (or ask the user questions directly) to extract their vision, refine the requirements, and clarify what they actually want before writing any code.
|
|
19073
|
+
- Think before you act: "Do I have enough detail to make this perfect?" If no, interview the user.
|
|
19080
19074
|
|
|
19081
|
-
|
|
19082
|
-
-
|
|
19083
|
-
- Workflow: When the user provides a vision or basic idea, you MUST use the \`roundtable\` tool to plan the non-technical implementation, get creative feature suggestions, and refine the user's vision.
|
|
19084
|
-
- Supervision: Follow Tier 1 supervisor rules (@oracle reviews the technical translation of the roundtable's output).
|
|
19075
|
+
2. **/reflect Command:**
|
|
19076
|
+
- Use this to review past work and suggest reusable workflows or improvements.
|
|
19085
19077
|
|
|
19086
|
-
|
|
19087
|
-
-
|
|
19088
|
-
|
|
19089
|
-
|
|
19078
|
+
3. **/loop Command:**
|
|
19079
|
+
- Use this for loop engineering and monitoring.
|
|
19080
|
+
|
|
19081
|
+
## Available Specialists
|
|
19082
|
+
${enabledAgents}
|
|
19090
19083
|
|
|
19091
19084
|
## Universal Rules
|
|
19092
19085
|
- Design: If something needs visual design, call @designer. Ensure it follows existing design system files.
|
|
19093
19086
|
- Vision/Images: Call @observer for screenshots or visual review.
|
|
19094
|
-
- Parallel Work: If simple implementation is needed and we know exactly what to change, offload parallel tasks to @fixer via background tasks.
|
|
19095
19087
|
- Main Implementation: If implementation is the main focus, YOU do it yourself. @fixer is ONLY for offloading parallel or bounded sub-tasks.
|
|
19096
19088
|
- Background Tasks: Prefer \`task(..., background: true)\` for delegated work that can run independently. Continue orchestration only on non-overlapping work.
|
|
19097
19089
|
- Session Reuse: Smartly reuse an available specialist session using \`task_id\`.
|
|
@@ -19105,7 +19097,7 @@ function createOrchestratorAgent(model, customPrompt, customAppendPrompt, disabl
|
|
|
19105
19097
|
const prompt = resolvePrompt(basePrompt, customPrompt, customAppendPrompt);
|
|
19106
19098
|
const definition = {
|
|
19107
19099
|
name: "orchestrator",
|
|
19108
|
-
description: "Master Orchestrator.
|
|
19100
|
+
description: "Master Orchestrator. Operates autonomously by default, or follows strict Tier 1-3 rules when invoked. Conducts interviews for vague tasks.",
|
|
19109
19101
|
config: {
|
|
19110
19102
|
temperature: 0.1,
|
|
19111
19103
|
prompt
|
|
@@ -24458,70 +24450,6 @@ function createChatHeadersHook(ctx) {
|
|
|
24458
24450
|
}
|
|
24459
24451
|
};
|
|
24460
24452
|
}
|
|
24461
|
-
// src/hooks/command-hook-utils.ts
|
|
24462
|
-
function registerCommandHook(opencodeConfig, commandName, template, description) {
|
|
24463
|
-
const cmdConfig = opencodeConfig.command;
|
|
24464
|
-
if (cmdConfig?.[commandName])
|
|
24465
|
-
return false;
|
|
24466
|
-
if (!opencodeConfig.command)
|
|
24467
|
-
opencodeConfig.command = {};
|
|
24468
|
-
opencodeConfig.command[commandName] = { template, description };
|
|
24469
|
-
return true;
|
|
24470
|
-
}
|
|
24471
|
-
|
|
24472
|
-
// src/hooks/deepwork/index.ts
|
|
24473
|
-
var COMMAND_NAME = "deepwork";
|
|
24474
|
-
function activationPrompt(tier, task2) {
|
|
24475
|
-
return [
|
|
24476
|
-
`Use the deepwork skill for this task. Treat it as a heavy coding session operating in **${tier}**.`,
|
|
24477
|
-
"",
|
|
24478
|
-
"Deepwork requirements:",
|
|
24479
|
-
"- before planning, delegation, or creating state, inspect existing `.gitignore` and `.ignore`; add only missing entries without duplicates: `.gitignore` must contain `.slim/deepwork/`, and `.ignore` must contain `!.slim/deepwork/` and `!.slim/deepwork/**`; this keeps state git-local yet OpenCode-readable;",
|
|
24480
|
-
"- create/update a `.slim/deepwork/` progress file;",
|
|
24481
|
-
"- keep OpenCode todos synced with the current phase;",
|
|
24482
|
-
"- **Follow the strict rules of your assigned Tier** (e.g., calling @oracle or the roundtable tool as mandated).",
|
|
24483
|
-
"- execute phase by phase with background specialists where useful;",
|
|
24484
|
-
"- wait for hook-driven background completion, reconcile results, validate, and adhere to your tier's review requirements;",
|
|
24485
|
-
"- fix actionable review issues before continuing.",
|
|
24486
|
-
"",
|
|
24487
|
-
"Task:",
|
|
24488
|
-
task2
|
|
24489
|
-
].join(`
|
|
24490
|
-
`);
|
|
24491
|
-
}
|
|
24492
|
-
function createDeepworkCommandHook() {
|
|
24493
|
-
return {
|
|
24494
|
-
registerCommand: (opencodeConfig) => {
|
|
24495
|
-
registerCommandHook(opencodeConfig, COMMAND_NAME, "Start a deepwork session with a specific Tier (e.g., /deepwork tier 2 <task>)", "Use the deepwork workflow with Tier 0, 1, 2, or 3");
|
|
24496
|
-
},
|
|
24497
|
-
handleCommandExecuteBefore: async (input, output) => {
|
|
24498
|
-
if (input.command !== COMMAND_NAME)
|
|
24499
|
-
return;
|
|
24500
|
-
output.parts.length = 0;
|
|
24501
|
-
const rawArgs = input.arguments.trim();
|
|
24502
|
-
if (!rawArgs) {
|
|
24503
|
-
output.parts.push(createInternalAgentTextPart("What task should deepwork manage? Run `/deepwork tier 1 <task>`. Defaults to Tier 1 if omitted."));
|
|
24504
|
-
return;
|
|
24505
|
-
}
|
|
24506
|
-
let tier = "Tier 1: Guided / Supervised Mode";
|
|
24507
|
-
let task2 = rawArgs;
|
|
24508
|
-
const tierMatch = rawArgs.match(/^tier\s*([0-3])\s+(.*)/i);
|
|
24509
|
-
if (tierMatch) {
|
|
24510
|
-
const tierNum = tierMatch[1];
|
|
24511
|
-
task2 = tierMatch[2];
|
|
24512
|
-
if (tierNum === "0")
|
|
24513
|
-
tier = "Tier 0: Basic Mode";
|
|
24514
|
-
else if (tierNum === "1")
|
|
24515
|
-
tier = "Tier 1: Guided / Supervised Mode";
|
|
24516
|
-
else if (tierNum === "2")
|
|
24517
|
-
tier = "Tier 2: Sophisticated Ideation & Planning";
|
|
24518
|
-
else if (tierNum === "3")
|
|
24519
|
-
tier = "Tier 3: Sophisticated Implementation";
|
|
24520
|
-
}
|
|
24521
|
-
output.parts.push({ type: "text", text: activationPrompt(tier, task2) });
|
|
24522
|
-
}
|
|
24523
|
-
};
|
|
24524
|
-
}
|
|
24525
24453
|
// src/hooks/delegate-task-retry/patterns.ts
|
|
24526
24454
|
var DELEGATE_TASK_ERROR_PATTERNS = [
|
|
24527
24455
|
{
|
|
@@ -25402,14 +25330,25 @@ ${JSON_ERROR_REMINDER}`;
|
|
|
25402
25330
|
}
|
|
25403
25331
|
};
|
|
25404
25332
|
}
|
|
25333
|
+
// src/hooks/command-hook-utils.ts
|
|
25334
|
+
function registerCommandHook(opencodeConfig, commandName, template, description) {
|
|
25335
|
+
const cmdConfig = opencodeConfig.command;
|
|
25336
|
+
if (cmdConfig?.[commandName])
|
|
25337
|
+
return false;
|
|
25338
|
+
if (!opencodeConfig.command)
|
|
25339
|
+
opencodeConfig.command = {};
|
|
25340
|
+
opencodeConfig.command[commandName] = { template, description };
|
|
25341
|
+
return true;
|
|
25342
|
+
}
|
|
25343
|
+
|
|
25405
25344
|
// src/hooks/loop-command/index.ts
|
|
25406
|
-
var
|
|
25345
|
+
var COMMAND_NAME = "loop";
|
|
25407
25346
|
function historyDir() {
|
|
25408
25347
|
const shortID = Math.random().toString(36).slice(2, 8);
|
|
25409
25348
|
const timestamp = Date.now().toString(36);
|
|
25410
25349
|
return `.opencode/loop-history/loop-${timestamp}-${shortID}`;
|
|
25411
25350
|
}
|
|
25412
|
-
function
|
|
25351
|
+
function activationPrompt(text) {
|
|
25413
25352
|
const dir = historyDir();
|
|
25414
25353
|
return [
|
|
25415
25354
|
"The user ran `/loop`. From the text below, extract: goal, successCriteria, maxAttempts.",
|
|
@@ -25446,10 +25385,10 @@ function helpPrompt() {
|
|
|
25446
25385
|
function createLoopCommandHook() {
|
|
25447
25386
|
return {
|
|
25448
25387
|
registerCommand: (opencodeConfig) => {
|
|
25449
|
-
registerCommandHook(opencodeConfig,
|
|
25388
|
+
registerCommandHook(opencodeConfig, COMMAND_NAME, "Run an automated execute-verify loop", "Dispatch fixer, verify, iterate with file-based history on disk.");
|
|
25450
25389
|
},
|
|
25451
25390
|
handleCommandExecuteBefore: async (input, output) => {
|
|
25452
|
-
if (input.command !==
|
|
25391
|
+
if (input.command !== COMMAND_NAME)
|
|
25453
25392
|
return;
|
|
25454
25393
|
output.parts.length = 0;
|
|
25455
25394
|
const args = input.arguments.trim();
|
|
@@ -25457,7 +25396,7 @@ function createLoopCommandHook() {
|
|
|
25457
25396
|
output.parts.push(createInternalAgentTextPart(helpPrompt()));
|
|
25458
25397
|
return;
|
|
25459
25398
|
}
|
|
25460
|
-
output.parts.push({ type: "text", text:
|
|
25399
|
+
output.parts.push({ type: "text", text: activationPrompt(args) });
|
|
25461
25400
|
}
|
|
25462
25401
|
};
|
|
25463
25402
|
}
|
|
@@ -25549,8 +25488,8 @@ function getEligibleMessage(message) {
|
|
|
25549
25488
|
return { message, sessionID: message.info.sessionID };
|
|
25550
25489
|
}
|
|
25551
25490
|
// src/hooks/reflect/index.ts
|
|
25552
|
-
var
|
|
25553
|
-
function
|
|
25491
|
+
var COMMAND_NAME2 = "reflect";
|
|
25492
|
+
function activationPrompt2(focus, isSessionMode = false, lastN = 50) {
|
|
25554
25493
|
const focusBlock = focus ? ["Focus:", focus] : [
|
|
25555
25494
|
"Focus:",
|
|
25556
25495
|
isSessionMode ? "Analyze recent sessions to find repeated patterns, friction, and improvement opportunities." : "Review recent work broadly and identify repeated workflow friction worth improving."
|
|
@@ -25586,10 +25525,10 @@ function createReflectCommandHook() {
|
|
|
25586
25525
|
let shouldHandleCommand = false;
|
|
25587
25526
|
return {
|
|
25588
25527
|
registerCommand: (opencodeConfig) => {
|
|
25589
|
-
shouldHandleCommand ||= registerCommandHook(opencodeConfig,
|
|
25528
|
+
shouldHandleCommand ||= registerCommandHook(opencodeConfig, COMMAND_NAME2, "Review repeated work and suggest workflow improvements", "Use reflect to learn from repeated workflows and suggest reusable improvements");
|
|
25590
25529
|
},
|
|
25591
25530
|
handleCommandExecuteBefore: async (input, output) => {
|
|
25592
|
-
if (input.command !==
|
|
25531
|
+
if (input.command !== COMMAND_NAME2 || !shouldHandleCommand)
|
|
25593
25532
|
return;
|
|
25594
25533
|
const args = input.arguments.trim();
|
|
25595
25534
|
const isSessionMode = args.includes("--sessions");
|
|
@@ -25599,7 +25538,7 @@ function createReflectCommandHook() {
|
|
|
25599
25538
|
output.parts.length = 0;
|
|
25600
25539
|
output.parts.push({
|
|
25601
25540
|
type: "text",
|
|
25602
|
-
text:
|
|
25541
|
+
text: activationPrompt2(focus, isSessionMode, last)
|
|
25603
25542
|
});
|
|
25604
25543
|
}
|
|
25605
25544
|
};
|
|
@@ -26332,6 +26271,72 @@ function formatCancelledTaskStatusOutput(taskID, summary = "cancelled") {
|
|
|
26332
26271
|
].join(`
|
|
26333
26272
|
`);
|
|
26334
26273
|
}
|
|
26274
|
+
// src/hooks/tier-commands/index.ts
|
|
26275
|
+
function activationPrompt3(tier, task2) {
|
|
26276
|
+
let tierRules = "";
|
|
26277
|
+
if (tier === 1) {
|
|
26278
|
+
tierRules = `**Tier 1: Basic Collaboration**
|
|
26279
|
+
Focus: Quality assurance through basic supervision.
|
|
26280
|
+
Rules:
|
|
26281
|
+
1. You must plan the work first.
|
|
26282
|
+
2. MANDATORY: Call @oracle to review your plan BEFORE implementing.
|
|
26283
|
+
3. Implement the work yourself, or offload parallel tasks to @fixer.
|
|
26284
|
+
4. MANDATORY: Call @oracle at the end of the implementation to review the final code.`;
|
|
26285
|
+
} else if (tier === 2) {
|
|
26286
|
+
tierRules = `**Tier 2: Deep Collaboration & Multiple Reviews**
|
|
26287
|
+
Focus: High-quality, heavily supervised implementation.
|
|
26288
|
+
Rules:
|
|
26289
|
+
1. You are working under the strict supervision of @oracle.
|
|
26290
|
+
2. You must interact with @oracle multiple times: for initial planning, during major implementation steps, and for final corrections.
|
|
26291
|
+
3. Utilize all normal sub-agents (@explorer, @librarian, @designer) extensively to gather perfect context before acting.
|
|
26292
|
+
4. Expect and proactively seek multiple reviews and corrections.`;
|
|
26293
|
+
} else if (tier === 3) {
|
|
26294
|
+
tierRules = `**Tier 3: The "All Out" Tier**
|
|
26295
|
+
Focus: Maximum sophistication, ideation, and complex problem solving.
|
|
26296
|
+
Rules:
|
|
26297
|
+
1. This is the highest level of execution. You use everything available.
|
|
26298
|
+
2. **ROUNDTABLE MANDATORY:** Because task requirements at this tier are often vague or have multiple valid approaches, you MUST start by invoking the \`roundtable\` tool. Let the debaters ideate, refine the vision, and figure out the best approach.
|
|
26299
|
+
3. Once the roundtable produces a council report, translate it into a technical plan and have @oracle review it.
|
|
26300
|
+
4. During implementation, if any ambiguity arises, invoke the \`roundtable\` tool again.
|
|
26301
|
+
5. Work with @oracle for continuous, strict supervision (multiple reviews/corrections).`;
|
|
26302
|
+
}
|
|
26303
|
+
return [
|
|
26304
|
+
`You are operating in **Tier ${tier}**. Follow these rules strictly:`,
|
|
26305
|
+
"",
|
|
26306
|
+
tierRules,
|
|
26307
|
+
"",
|
|
26308
|
+
"State Management Requirements:",
|
|
26309
|
+
"- Inspect `.gitignore` and `.ignore`. Add `.slim/tier_state/` to `.gitignore` and `!.slim/tier_state/` to `.ignore`.",
|
|
26310
|
+
"- Maintain a progress file at `.slim/tier_state/progress.md`.",
|
|
26311
|
+
"- Keep OpenCode todos synced.",
|
|
26312
|
+
"",
|
|
26313
|
+
"Task:",
|
|
26314
|
+
task2
|
|
26315
|
+
].join(`
|
|
26316
|
+
`);
|
|
26317
|
+
}
|
|
26318
|
+
function createTierCommandsHook() {
|
|
26319
|
+
const commands = ["tier1", "tier2", "tier3"];
|
|
26320
|
+
return {
|
|
26321
|
+
registerCommand: (opencodeConfig) => {
|
|
26322
|
+
registerCommandHook(opencodeConfig, "tier1", "Start a Tier 1 session (Basic Oracle Collaboration)", "Tier 1");
|
|
26323
|
+
registerCommandHook(opencodeConfig, "tier2", "Start a Tier 2 session (Deep Collaboration & Multiple Reviews)", "Tier 2");
|
|
26324
|
+
registerCommandHook(opencodeConfig, "tier3", "Start a Tier 3 session (All-Out: Roundtable + Deep Collaboration)", "Tier 3");
|
|
26325
|
+
},
|
|
26326
|
+
handleCommandExecuteBefore: async (input, output) => {
|
|
26327
|
+
if (!commands.includes(input.command))
|
|
26328
|
+
return;
|
|
26329
|
+
output.parts.length = 0;
|
|
26330
|
+
const task2 = input.arguments.trim();
|
|
26331
|
+
if (!task2) {
|
|
26332
|
+
output.parts.push(createInternalAgentTextPart(`What task should this tier manage? Run \`/${input.command} <task>\`.`));
|
|
26333
|
+
return;
|
|
26334
|
+
}
|
|
26335
|
+
const tierNum = parseInt(input.command.replace("tier", ""), 10);
|
|
26336
|
+
output.parts.push({ type: "text", text: activationPrompt3(tierNum, task2) });
|
|
26337
|
+
}
|
|
26338
|
+
};
|
|
26339
|
+
}
|
|
26335
26340
|
// src/interview/dashboard.ts
|
|
26336
26341
|
import crypto2 from "node:crypto";
|
|
26337
26342
|
import * as fsSync2 from "node:fs";
|
|
@@ -30172,7 +30177,7 @@ function buildAnswerPrompt(answers, questions, maxQuestions) {
|
|
|
30172
30177
|
}
|
|
30173
30178
|
|
|
30174
30179
|
// src/interview/service.ts
|
|
30175
|
-
var
|
|
30180
|
+
var COMMAND_NAME3 = "interview";
|
|
30176
30181
|
var DEFAULT_MAX_QUESTIONS = 2;
|
|
30177
30182
|
var MAX_RETAINED_ABANDONED = 50;
|
|
30178
30183
|
function isTruthyEnvFlag(value) {
|
|
@@ -30476,11 +30481,11 @@ function createInterviewService(ctx, config, deps) {
|
|
|
30476
30481
|
}
|
|
30477
30482
|
function registerCommand(opencodeConfig) {
|
|
30478
30483
|
const configCommand = opencodeConfig.command;
|
|
30479
|
-
if (!configCommand?.[
|
|
30484
|
+
if (!configCommand?.[COMMAND_NAME3]) {
|
|
30480
30485
|
if (!opencodeConfig.command) {
|
|
30481
30486
|
opencodeConfig.command = {};
|
|
30482
30487
|
}
|
|
30483
|
-
opencodeConfig.command[
|
|
30488
|
+
opencodeConfig.command[COMMAND_NAME3] = {
|
|
30484
30489
|
template: "Start an interview and write a live markdown spec",
|
|
30485
30490
|
description: "Open a localhost interview UI linked to the current OpenCode session"
|
|
30486
30491
|
};
|
|
@@ -30554,7 +30559,7 @@ function createInterviewService(ctx, config, deps) {
|
|
|
30554
30559
|
}
|
|
30555
30560
|
}
|
|
30556
30561
|
async function handleCommandExecuteBefore(input, output) {
|
|
30557
|
-
if (input.command !==
|
|
30562
|
+
if (input.command !== COMMAND_NAME3) {
|
|
30558
30563
|
return;
|
|
30559
30564
|
}
|
|
30560
30565
|
const idea = input.arguments.trim();
|
|
@@ -35360,11 +35365,11 @@ function recordTuiAgentModel(input, projectDir) {
|
|
|
35360
35365
|
}
|
|
35361
35366
|
|
|
35362
35367
|
// src/tools/preset-manager.ts
|
|
35363
|
-
var
|
|
35368
|
+
var COMMAND_NAME4 = "preset";
|
|
35364
35369
|
function createPresetManager(ctx, config) {
|
|
35365
35370
|
let activePreset = getActiveRuntimePreset() ?? config.preset ?? null;
|
|
35366
35371
|
async function handleCommandExecuteBefore(input, output) {
|
|
35367
|
-
if (input.command !==
|
|
35372
|
+
if (input.command !== COMMAND_NAME4) {
|
|
35368
35373
|
return;
|
|
35369
35374
|
}
|
|
35370
35375
|
output.parts.length = 0;
|
|
@@ -35383,11 +35388,11 @@ function createPresetManager(ctx, config) {
|
|
|
35383
35388
|
}
|
|
35384
35389
|
function registerCommand(opencodeConfig) {
|
|
35385
35390
|
const configCommand = opencodeConfig.command;
|
|
35386
|
-
if (!configCommand?.[
|
|
35391
|
+
if (!configCommand?.[COMMAND_NAME4]) {
|
|
35387
35392
|
if (!opencodeConfig.command) {
|
|
35388
35393
|
opencodeConfig.command = {};
|
|
35389
35394
|
}
|
|
35390
|
-
opencodeConfig.command[
|
|
35395
|
+
opencodeConfig.command[COMMAND_NAME4] = {
|
|
35391
35396
|
template: "List available presets and switch between them",
|
|
35392
35397
|
description: "Switch agent presets at runtime (e.g., /preset cheap, /preset powerful)"
|
|
35393
35398
|
};
|
|
@@ -37937,7 +37942,8 @@ var OhMyOpenCodeLite = async (ctx) => {
|
|
|
37937
37942
|
let sessionLifecycle;
|
|
37938
37943
|
let chatHeadersHook;
|
|
37939
37944
|
let foregroundFallback;
|
|
37940
|
-
let
|
|
37945
|
+
let applyPatchHook;
|
|
37946
|
+
let tierCommandsHook;
|
|
37941
37947
|
let reflectCommandHook;
|
|
37942
37948
|
let loopCommandHook;
|
|
37943
37949
|
let taskSessionManagerHook;
|
|
@@ -38024,7 +38030,7 @@ var OhMyOpenCodeLite = async (ctx) => {
|
|
|
38024
38030
|
sessionAgentMap = new Map;
|
|
38025
38031
|
chatHeadersHook = createChatHeadersHook(ctx);
|
|
38026
38032
|
foregroundFallback = new ForegroundFallbackManager(ctx.client, runtimeChains, config.fallback?.enabled !== false, config.fallback?.maxRetries ?? 3, sessionLifecycle);
|
|
38027
|
-
|
|
38033
|
+
tierCommandsHook = createTierCommandsHook();
|
|
38028
38034
|
reflectCommandHook = createReflectCommandHook();
|
|
38029
38035
|
loopCommandHook = createLoopCommandHook();
|
|
38030
38036
|
taskSessionManagerHook = createTaskSessionManagerHook(ctx, {
|
|
@@ -38351,7 +38357,7 @@ var OhMyOpenCodeLite = async (ctx) => {
|
|
|
38351
38357
|
agentConfigEntry.permission = agentPermission;
|
|
38352
38358
|
}
|
|
38353
38359
|
interviewManager.registerCommand(opencodeConfig);
|
|
38354
|
-
|
|
38360
|
+
tierCommandsHook.registerCommand(opencodeConfig);
|
|
38355
38361
|
reflectCommandHook.registerCommand(opencodeConfig);
|
|
38356
38362
|
loopCommandHook.registerCommand(opencodeConfig);
|
|
38357
38363
|
presetManager.registerCommand(opencodeConfig);
|
|
@@ -38433,7 +38439,7 @@ var OhMyOpenCodeLite = async (ctx) => {
|
|
|
38433
38439
|
"command.execute.before": async (input, output) => {
|
|
38434
38440
|
await interviewManager.handleCommandExecuteBefore(input, output);
|
|
38435
38441
|
await presetManager.handleCommandExecuteBefore(input, output);
|
|
38436
|
-
await
|
|
38442
|
+
await tierCommandsHook.handleCommandExecuteBefore(input, output);
|
|
38437
38443
|
await reflectCommandHook.handleCommandExecuteBefore(input, output);
|
|
38438
38444
|
await loopCommandHook.handleCommandExecuteBefore(input, output);
|
|
38439
38445
|
},
|
package/dist/tui.js
CHANGED
|
@@ -448,12 +448,6 @@ var CUSTOM_SKILLS = [
|
|
|
448
448
|
allowedAgents: ["orchestrator"],
|
|
449
449
|
sourcePath: "src/skills/clonedeps"
|
|
450
450
|
},
|
|
451
|
-
{
|
|
452
|
-
name: "deepwork",
|
|
453
|
-
description: "Heavy/complex coding sessions and large modifications workflow",
|
|
454
|
-
allowedAgents: ["orchestrator"],
|
|
455
|
-
sourcePath: "src/skills/deepwork"
|
|
456
|
-
},
|
|
457
451
|
{
|
|
458
452
|
name: "verification-planning",
|
|
459
453
|
description: "Plan credible, proportionate evidence before non-trivial implementation",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oh-my-opencode-serverlocal",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.8",
|
|
4
4
|
"description": "Custom serverlocal fork of oh-my-opencode-slim — fully owned, custom prompts + commands, dist synced via opencode-dotfiles",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: deepwork
|
|
3
|
-
description: High-cost orchestrator workflow for large, high-risk, multi-phase coding efforts with meaningful dependencies and review gates. Do not activate for routine multi-file changes.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Deepwork
|
|
7
|
-
|
|
8
|
-
Deepwork is an orchestrator workflow for heavy coding sessions. Use it only
|
|
9
|
-
when the work is clearly large or high-risk: multiple dependent phases,
|
|
10
|
-
cross-cutting architectural change, unsafe-to-partially-ship migration, or
|
|
11
|
-
sustained coordination across several specialist lanes.
|
|
12
|
-
|
|
13
|
-
Do not infer Deepwork merely because a task touches multiple files. Do not use
|
|
14
|
-
it for trivial edits, quick docs changes, simple bug fixes, or routine bounded
|
|
15
|
-
features.
|
|
16
|
-
|
|
17
|
-
## Core Contract
|
|
18
|
-
|
|
19
|
-
When deepwork is active, the orchestrator must manage the work as a scheduler,
|
|
20
|
-
not as the default implementation worker.
|
|
21
|
-
|
|
22
|
-
Required behavior:
|
|
23
|
-
|
|
24
|
-
- before planning, delegation, or creating a deepwork state file, inspect the
|
|
25
|
-
existing `.gitignore` and `.ignore`; add only missing entries, without
|
|
26
|
-
duplicates, so `.gitignore` contains `.slim/deepwork/` and `.ignore` contains
|
|
27
|
-
`!.slim/deepwork/` and `!.slim/deepwork/**`;
|
|
28
|
-
- keep OpenCode todos aligned with the active deepwork phase;
|
|
29
|
-
- create and maintain a local markdown progress file under `.slim/deepwork/`;
|
|
30
|
-
- write valuable research findings into that file as confirmed research context
|
|
31
|
-
when they are received and reconciled;
|
|
32
|
-
- draft a plan before implementation;
|
|
33
|
-
- ask `@oracle` to review the plan and revise it until acceptable;
|
|
34
|
-
- create a phased implementation/delegation plan;
|
|
35
|
-
- before oracle reviews, add relevant confirmed research findings and file
|
|
36
|
-
references to the deepwork file so oracle can review the plan or phase from
|
|
37
|
-
accepted context instead of redoing discovery;
|
|
38
|
-
- ask `@oracle` to review that implementation plan before execution;
|
|
39
|
-
- after oracle review and before each implementation phase, decide the execution
|
|
40
|
-
path: what can run in parallel, what must be sequential, which specialists to
|
|
41
|
-
delegate to, and whether to split the same agent into multiple bounded lanes;
|
|
42
|
-
- after each phase, validate, update the deepwork file, prepare the plan file
|
|
43
|
-
for oracle review and ask `@oracle` to review the phase result, fix
|
|
44
|
-
actionable issues, then continue;
|
|
45
|
-
- when a phase includes `@designer`, preserve designer intent across later
|
|
46
|
-
phases. Use `@fixer` only for mechanical follow-up that does not alter the
|
|
47
|
-
UI/UX;
|
|
48
|
-
- finish with final validation and a concise summary.
|
|
49
|
-
|
|
50
|
-
## Designer Handoff Guardrail
|
|
51
|
-
|
|
52
|
-
When a deepwork phase includes `@designer`, treat the delivered UI/UX as
|
|
53
|
-
accepted design intent for later phases. Record any important design decisions in
|
|
54
|
-
the deepwork file before continuing.
|
|
55
|
-
|
|
56
|
-
After designer work:
|
|
57
|
-
|
|
58
|
-
- preserve layout, rhythm, hierarchy, motion, spacing, color, affordances,
|
|
59
|
-
responsiveness, and component feel;
|
|
60
|
-
- review and improve user-facing copy with grounded, normal wording, but do not
|
|
61
|
-
change visual structure or interaction intent;
|
|
62
|
-
- route follow-up visual, responsive, motion, hierarchy, polish, or
|
|
63
|
-
component-feel changes back to `@designer`;
|
|
64
|
-
- use `@fixer` only for bounded mechanical follow-up that preserves the design
|
|
65
|
-
exactly, such as wiring, tests, type fixes, or non-visual behavior changes;
|
|
66
|
-
- if design intent must change, record why in the deepwork file before changing
|
|
67
|
-
it.
|
|
68
|
-
|
|
69
|
-
## Deepwork File
|
|
70
|
-
|
|
71
|
-
Create a task-specific file such as:
|
|
72
|
-
|
|
73
|
-
```text
|
|
74
|
-
.slim/deepwork/<short-task-slug>.md
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
Before creating this file—and before planning or delegation—inspect the existing
|
|
78
|
-
`.gitignore` and `.ignore`. Add only missing entries and do not add duplicates:
|
|
79
|
-
|
|
80
|
-
```gitignore
|
|
81
|
-
# .gitignore
|
|
82
|
-
.slim/deepwork/
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
```gitignore
|
|
86
|
-
# .ignore
|
|
87
|
-
!.slim/deepwork/
|
|
88
|
-
!.slim/deepwork/**
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
These rules keep deepwork state git-local while allowing OpenCode to read it.
|
|
92
|
-
|
|
93
|
-
Do not follow a rigid template. Choose whatever markdown structure best fits the
|
|
94
|
-
work. The file only needs to remain useful as persistent session state and should
|
|
95
|
-
capture, as applicable:
|
|
96
|
-
|
|
97
|
-
- current goal and understanding;
|
|
98
|
-
- researched, factual context from `@librarian` to avoid oracle doing its own
|
|
99
|
-
research;
|
|
100
|
-
- plan drafts and oracle review notes;
|
|
101
|
-
- implementation phases and status;
|
|
102
|
-
- validation results;
|
|
103
|
-
- unresolved questions, blockers, and follow-ups.
|
|
104
|
-
|
|
105
|
-
Update this file after major decisions, valuable specialist research, reviews,
|
|
106
|
-
phase completions, validation results, and scope changes.
|
|
107
|
-
When `@librarian` docs, code reads, or external references produce useful
|
|
108
|
-
information, reconcile the result and record the accepted findings here so later
|
|
109
|
-
planning and reviews share the same context instead of rediscovering it.
|
|
110
|
-
Don't put actual contents of local files, reference them by path only.
|
|
111
|
-
|
|
112
|
-
## Scheduler Discipline
|
|
113
|
-
|
|
114
|
-
Use the scheduler model throughout:
|
|
115
|
-
|
|
116
|
-
- follow Orchestrator delegations rules
|
|
117
|
-
- record task/session IDs and ownership boundaries;
|
|
118
|
-
- wait for hook-driven background completion before consuming background results;
|
|
119
|
-
- avoid blocking Orchestrator lane while background jobs run; if no independent
|
|
120
|
-
work remains, stop briefly and let the completion event resume the workflow;
|
|
121
|
-
- do not advance to the next phase while relevant jobs are running or terminal
|
|
122
|
-
results are unreconciled.
|