* docs: rename OmO agent to Sisyphus, OmO-Plan to Planner-Sisyphus 🤖 GENERATED WITH ASSISTANCE OF [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode) * refactor: rename OmO agent to Sisyphus with automatic config migration - Rename OmO agent to Sisyphus (uses mythological pushing-the-boulder concept) - Rename OmO-Plan to Planner-Sisyphus for consistency - Update config schema: omo_agent → sisyphus_agent - Add backward compatibility: automatically migrate user's oh-my-opencode.json files - Migration handles old keys (OmO, omo, OmO-Plan, omo-plan) and rewrites config when detected - Update agent name mappings, index files, and type definitions - Add Sisyphus PNG asset to brand identity 🤖 GENERATED WITH ASSISTANCE OF [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode) * docs: add Sisyphus mythology introduction and teammates concept to all READMEs 🤖 GENERATED WITH ASSISTANCE OF [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode) * feat(startup-toast): show Sisyphus steering message when enabled - Updated startup toast to show "Sisyphus on steroids is steering OpenCode" when Sisyphus agent is enabled - Refactored getToastMessage function to handle conditional message rendering - Pass isSisyphusEnabled flag from plugin configuration to auto-update-checker hook 🤖 GENERATED WITH ASSISTANCE OF [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode) * docs(sisyphus): add philosophical context to Sisyphus agent identity - Add "Why Sisyphus?" explanation connecting the daily work cycle of humans and AI agents - Emphasize code quality expectations: indistinguishable from senior engineer's work - Concise identity statement: work, delegate, verify, ship without AI slop This clarifies the agent's purpose and reinforces the principle that quality code should not reveal whether it was written by human or AI. 🤖 GENERATED WITH ASSISTANCE OF [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode)
136 lines
4.1 KiB
TypeScript
136 lines
4.1 KiB
TypeScript
import { z } from "zod"
|
|
import { McpNameSchema } from "../mcp/types"
|
|
|
|
const PermissionValue = z.enum(["ask", "allow", "deny"])
|
|
|
|
const BashPermission = z.union([
|
|
PermissionValue,
|
|
z.record(z.string(), PermissionValue),
|
|
])
|
|
|
|
const AgentPermissionSchema = z.object({
|
|
edit: PermissionValue.optional(),
|
|
bash: BashPermission.optional(),
|
|
webfetch: PermissionValue.optional(),
|
|
doom_loop: PermissionValue.optional(),
|
|
external_directory: PermissionValue.optional(),
|
|
})
|
|
|
|
export const BuiltinAgentNameSchema = z.enum([
|
|
"Sisyphus",
|
|
"oracle",
|
|
"librarian",
|
|
"explore",
|
|
"frontend-ui-ux-engineer",
|
|
"document-writer",
|
|
"multimodal-looker",
|
|
])
|
|
|
|
export const OverridableAgentNameSchema = z.enum([
|
|
"build",
|
|
"plan",
|
|
"Sisyphus",
|
|
"Planner-Sisyphus",
|
|
"oracle",
|
|
"librarian",
|
|
"explore",
|
|
"frontend-ui-ux-engineer",
|
|
"document-writer",
|
|
"multimodal-looker",
|
|
])
|
|
|
|
export const AgentNameSchema = BuiltinAgentNameSchema
|
|
|
|
export const HookNameSchema = z.enum([
|
|
"todo-continuation-enforcer",
|
|
"context-window-monitor",
|
|
"session-recovery",
|
|
"session-notification",
|
|
"comment-checker",
|
|
"grep-output-truncator",
|
|
"tool-output-truncator",
|
|
"directory-agents-injector",
|
|
"directory-readme-injector",
|
|
"empty-task-response-detector",
|
|
"think-mode",
|
|
"anthropic-auto-compact",
|
|
"rules-injector",
|
|
"background-notification",
|
|
"auto-update-checker",
|
|
"startup-toast",
|
|
"keyword-detector",
|
|
"agent-usage-reminder",
|
|
"non-interactive-env",
|
|
"interactive-bash-session",
|
|
"empty-message-sanitizer",
|
|
])
|
|
|
|
export const AgentOverrideConfigSchema = z.object({
|
|
model: z.string().optional(),
|
|
temperature: z.number().min(0).max(2).optional(),
|
|
top_p: z.number().min(0).max(1).optional(),
|
|
prompt: z.string().optional(),
|
|
tools: z.record(z.string(), z.boolean()).optional(),
|
|
disable: z.boolean().optional(),
|
|
description: z.string().optional(),
|
|
mode: z.enum(["subagent", "primary", "all"]).optional(),
|
|
color: z
|
|
.string()
|
|
.regex(/^#[0-9A-Fa-f]{6}$/)
|
|
.optional(),
|
|
permission: AgentPermissionSchema.optional(),
|
|
})
|
|
|
|
export const AgentOverridesSchema = z.object({
|
|
build: AgentOverrideConfigSchema.optional(),
|
|
plan: AgentOverrideConfigSchema.optional(),
|
|
Sisyphus: AgentOverrideConfigSchema.optional(),
|
|
"Planner-Sisyphus": AgentOverrideConfigSchema.optional(),
|
|
oracle: AgentOverrideConfigSchema.optional(),
|
|
librarian: AgentOverrideConfigSchema.optional(),
|
|
explore: AgentOverrideConfigSchema.optional(),
|
|
"frontend-ui-ux-engineer": AgentOverrideConfigSchema.optional(),
|
|
"document-writer": AgentOverrideConfigSchema.optional(),
|
|
"multimodal-looker": AgentOverrideConfigSchema.optional(),
|
|
})
|
|
|
|
export const ClaudeCodeConfigSchema = z.object({
|
|
mcp: z.boolean().optional(),
|
|
commands: z.boolean().optional(),
|
|
skills: z.boolean().optional(),
|
|
agents: z.boolean().optional(),
|
|
hooks: z.boolean().optional(),
|
|
})
|
|
|
|
export const SisyphusAgentConfigSchema = z.object({
|
|
disabled: z.boolean().optional(),
|
|
})
|
|
|
|
export const ExperimentalConfigSchema = z.object({
|
|
aggressive_truncation: z.boolean().optional(),
|
|
empty_message_recovery: z.boolean().optional(),
|
|
auto_resume: z.boolean().optional(),
|
|
})
|
|
|
|
export const OhMyOpenCodeConfigSchema = z.object({
|
|
$schema: z.string().optional(),
|
|
disabled_mcps: z.array(McpNameSchema).optional(),
|
|
disabled_agents: z.array(BuiltinAgentNameSchema).optional(),
|
|
disabled_hooks: z.array(HookNameSchema).optional(),
|
|
agents: AgentOverridesSchema.optional(),
|
|
claude_code: ClaudeCodeConfigSchema.optional(),
|
|
google_auth: z.boolean().optional(),
|
|
sisyphus_agent: SisyphusAgentConfigSchema.optional(),
|
|
experimental: ExperimentalConfigSchema.optional(),
|
|
})
|
|
|
|
export type OhMyOpenCodeConfig = z.infer<typeof OhMyOpenCodeConfigSchema>
|
|
export type AgentOverrideConfig = z.infer<typeof AgentOverrideConfigSchema>
|
|
export type AgentOverrides = z.infer<typeof AgentOverridesSchema>
|
|
export type AgentName = z.infer<typeof AgentNameSchema>
|
|
export type HookName = z.infer<typeof HookNameSchema>
|
|
export type SisyphusAgentConfig = z.infer<typeof SisyphusAgentConfigSchema>
|
|
export type ExperimentalConfig = z.infer<typeof ExperimentalConfigSchema>
|
|
|
|
export { McpNameSchema, type McpName } from "../mcp/types"
|