From c46d57f3aa65dc7c3231476c3643c1a1b8340af8 Mon Sep 17 00:00:00 2001 From: justsisyphus Date: Tue, 20 Jan 2026 16:52:20 +0900 Subject: [PATCH] refactor(hooks): rename sisyphus-orchestrator to atlas MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Rename SisyphusOrchestratorHookOptions → AtlasHookOptions - Rename createSisyphusOrchestratorHook → createAtlasHook - Update hook name in schema: sisyphus-orchestrator → atlas - Update all documentation references - Rename image: orchestrator-sisyphus.png → orchestrator-atlas.png --- ...or-sisyphus.png => orchestrator-atlas.png} | Bin AGENTS.md | 6 +- README.ja.md | 4 +- README.md | 4 +- README.zh-cn.md | 4 +- assets/oh-my-opencode.schema.json | 256 +----------------- docs/features.md | 4 +- src/config/schema.ts | 8 +- src/hooks/AGENTS.md | 2 +- src/hooks/atlas/index.test.ts | 62 ++--- src/hooks/atlas/index.ts | 6 +- src/hooks/index.ts | 2 +- src/index.ts | 10 +- 13 files changed, 52 insertions(+), 316 deletions(-) rename .github/assets/{orchestrator-sisyphus.png => orchestrator-atlas.png} (100%) diff --git a/.github/assets/orchestrator-sisyphus.png b/.github/assets/orchestrator-atlas.png similarity index 100% rename from .github/assets/orchestrator-sisyphus.png rename to .github/assets/orchestrator-atlas.png diff --git a/AGENTS.md b/AGENTS.md index 6d347d78c..37eefa008 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -44,7 +44,7 @@ oh-my-opencode/ | Skill MCP | `src/features/skill-mcp-manager/` | MCP servers embedded in skills | | CLI installer | `src/cli/install.ts` | Interactive TUI (462 lines) | | Doctor checks | `src/cli/doctor/checks/` | 14 health checks across 6 categories | -| Orchestrator | `src/hooks/sisyphus-orchestrator/` | Main orchestration hook (771 lines) | +| Orchestrator | `src/hooks/atlas/` | Main orchestration hook (771 lines) | ## TDD (Test-Driven Development) @@ -109,8 +109,6 @@ oh-my-opencode/ | oracle | openai/gpt-5.2 | Read-only consultation, high-IQ debugging | | librarian | opencode/glm-4.7-free | Multi-repo analysis, docs, GitHub search | | explore | opencode/grok-code | Fast codebase exploration (contextual grep) | -| frontend-ui-ux-engineer | google/gemini-3-pro-preview | UI generation, visual design | -| document-writer | google/gemini-3-flash | Technical documentation | | multimodal-looker | google/gemini-3-flash | PDF/image analysis | | Prometheus (Planner) | anthropic/claude-opus-4-5 | Strategic planning, interview mode | | Metis (Plan Consultant) | anthropic/claude-sonnet-4-5 | Pre-planning analysis | @@ -149,7 +147,7 @@ bun test # Run tests (83 test files) | `src/features/builtin-skills/skills.ts` | 1203 | Skill definitions (playwright, git-master, frontend-ui-ux) | | `src/agents/prometheus-prompt.ts` | 1196 | Planning agent, interview mode, Momus loop | | `src/features/background-agent/manager.ts` | 1165 | Task lifecycle, concurrency, notification batching | -| `src/hooks/sisyphus-orchestrator/index.ts` | 771 | Orchestrator hook implementation | +| `src/hooks/atlas/index.ts` | 771 | Orchestrator hook implementation | | `src/tools/delegate-task/tools.ts` | 761 | Category-based task delegation | | `src/cli/config-manager.ts` | 730 | JSONC parsing, multi-level config | | `src/agents/sisyphus.ts` | 640 | Main Sisyphus prompt | diff --git a/README.ja.md b/README.ja.md index 5bf76fb6f..76ece98b8 100644 --- a/README.ja.md +++ b/README.ja.md @@ -16,7 +16,7 @@ > [!TIP] > -> [![The Orchestrator is now available in beta.](./.github/assets/orchestrator-sisyphus.png?v=3)](https://github.com/code-yeongyu/oh-my-opencode/releases/tag/v3.0.0-beta.10) +> [![The Orchestrator is now available in beta.](./.github/assets/orchestrator-atlas.png?v=3)](https://github.com/code-yeongyu/oh-my-opencode/releases/tag/v3.0.0-beta.10) > > **オーケストレーターがベータ版で利用可能になりました。`oh-my-opencode@3.0.0-beta.10`を使用してインストールしてください。** > > 一緒に歩みましょう! @@ -279,7 +279,7 @@ oh-my-opencode を削除するには: 詳細は [Features Documentation](docs/features.md) を参照してください。 **概要:** -- **エージェント**: Sisyphus(メインエージェント)、Prometheus(プランナー)、Oracle(アーキテクチャ/デバッグ)、Librarian(ドキュメント/コード検索)、Explore(高速コードベース grep)、Frontend Engineer(UI/UX)、Document Writer、Multimodal Looker +- **エージェント**: Sisyphus(メインエージェント)、Prometheus(プランナー)、Oracle(アーキテクチャ/デバッグ)、Librarian(ドキュメント/コード検索)、Explore(高速コードベース grep)、Multimodal Looker - **バックグラウンドエージェント**: 本物の開発チームのように複数エージェントを並列実行 - **LSP & AST ツール**: リファクタリング、リネーム、診断、AST 認識コード検索 - **コンテキスト注入**: AGENTS.md、README.md、条件付きルールの自動注入 diff --git a/README.md b/README.md index 704bf4359..1825b08aa 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ > [!TIP] > -> [![The Orchestrator is now available in beta.](./.github/assets/orchestrator-sisyphus.png?v=3)](https://github.com/code-yeongyu/oh-my-opencode/releases/tag/v3.0.0-beta.10) +> [![The Orchestrator is now available in beta.](./.github/assets/orchestrator-atlas.png?v=3)](https://github.com/code-yeongyu/oh-my-opencode/releases/tag/v3.0.0-beta.10) > > **The Orchestrator is now available in beta. Use `oh-my-opencode@3.0.0-beta.10` to install it.** > > Be with us! @@ -293,7 +293,7 @@ We have lots of features that you'll think should obviously exist, and once you See the full [Features Documentation](docs/features.md) for detailed information. **Quick Overview:** -- **Agents**: Sisyphus (the main agent), Prometheus (planner), Oracle (architecture/debugging), Librarian (docs/code search), Explore (fast codebase grep), Frontend Engineer (UI/UX), Document Writer, Multimodal Looker +- **Agents**: Sisyphus (the main agent), Prometheus (planner), Oracle (architecture/debugging), Librarian (docs/code search), Explore (fast codebase grep), Multimodal Looker - **Background Agents**: Run multiple agents in parallel like a real dev team - **LSP & AST Tools**: Refactoring, rename, diagnostics, AST-aware code search - **Context Injection**: Auto-inject AGENTS.md, README.md, conditional rules diff --git a/README.zh-cn.md b/README.zh-cn.md index d264dcd83..9abe91bd7 100644 --- a/README.zh-cn.md +++ b/README.zh-cn.md @@ -16,7 +16,7 @@ > [!TIP] > -> [![Orchestrator 现已进入测试阶段。](./.github/assets/orchestrator-sisyphus.png?v=3)](https://github.com/code-yeongyu/oh-my-opencode/releases/tag/v3.0.0-beta.10) +> [![Orchestrator 现已进入测试阶段。](./.github/assets/orchestrator-atlas.png?v=3)](https://github.com/code-yeongyu/oh-my-opencode/releases/tag/v3.0.0-beta.10) > > **Orchestrator 现已进入测试阶段。使用 `oh-my-opencode@3.0.0-beta.10` 安装。** > > 加入我们! @@ -289,7 +289,7 @@ curl -s https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/refs/heads 详细信息请参阅 [Features Documentation](docs/features.md)。 **概览:** -- **智能体**:Sisyphus(主智能体)、Prometheus(规划器)、Oracle(架构/调试)、Librarian(文档/代码搜索)、Explore(快速代码库 grep)、Frontend Engineer(UI/UX)、Document Writer、Multimodal Looker +- **智能体**:Sisyphus(主智能体)、Prometheus(规划器)、Oracle(架构/调试)、Librarian(文档/代码搜索)、Explore(快速代码库 grep)、Multimodal Looker - **后台智能体**:像真正的开发团队一样并行运行多个智能体 - **LSP & AST 工具**:重构、重命名、诊断、AST 感知代码搜索 - **上下文注入**:自动注入 AGENTS.md、README.md、条件规则 diff --git a/assets/oh-my-opencode.schema.json b/assets/oh-my-opencode.schema.json index 0f65e1cd9..ff01ab62f 100644 --- a/assets/oh-my-opencode.schema.json +++ b/assets/oh-my-opencode.schema.json @@ -24,8 +24,6 @@ "oracle", "librarian", "explore", - "frontend-ui-ux-engineer", - "document-writer", "multimodal-looker", "Metis (Plan Consultant)", "Momus (Plan Reviewer)", @@ -78,7 +76,7 @@ "delegate-task-retry", "prometheus-md-only", "start-work", - "sisyphus-orchestrator" + "atlas" ] } }, @@ -1481,258 +1479,6 @@ } } }, - "frontend-ui-ux-engineer": { - "type": "object", - "properties": { - "model": { - "type": "string" - }, - "variant": { - "type": "string" - }, - "category": { - "type": "string" - }, - "skills": { - "type": "array", - "items": { - "type": "string" - } - }, - "temperature": { - "type": "number", - "minimum": 0, - "maximum": 2 - }, - "top_p": { - "type": "number", - "minimum": 0, - "maximum": 1 - }, - "prompt": { - "type": "string" - }, - "prompt_append": { - "type": "string" - }, - "tools": { - "type": "object", - "propertyNames": { - "type": "string" - }, - "additionalProperties": { - "type": "boolean" - } - }, - "disable": { - "type": "boolean" - }, - "description": { - "type": "string" - }, - "mode": { - "type": "string", - "enum": [ - "subagent", - "primary", - "all" - ] - }, - "color": { - "type": "string", - "pattern": "^#[0-9A-Fa-f]{6}$" - }, - "permission": { - "type": "object", - "properties": { - "edit": { - "type": "string", - "enum": [ - "ask", - "allow", - "deny" - ] - }, - "bash": { - "anyOf": [ - { - "type": "string", - "enum": [ - "ask", - "allow", - "deny" - ] - }, - { - "type": "object", - "propertyNames": { - "type": "string" - }, - "additionalProperties": { - "type": "string", - "enum": [ - "ask", - "allow", - "deny" - ] - } - } - ] - }, - "webfetch": { - "type": "string", - "enum": [ - "ask", - "allow", - "deny" - ] - }, - "doom_loop": { - "type": "string", - "enum": [ - "ask", - "allow", - "deny" - ] - }, - "external_directory": { - "type": "string", - "enum": [ - "ask", - "allow", - "deny" - ] - } - } - } - } - }, - "document-writer": { - "type": "object", - "properties": { - "model": { - "type": "string" - }, - "variant": { - "type": "string" - }, - "category": { - "type": "string" - }, - "skills": { - "type": "array", - "items": { - "type": "string" - } - }, - "temperature": { - "type": "number", - "minimum": 0, - "maximum": 2 - }, - "top_p": { - "type": "number", - "minimum": 0, - "maximum": 1 - }, - "prompt": { - "type": "string" - }, - "prompt_append": { - "type": "string" - }, - "tools": { - "type": "object", - "propertyNames": { - "type": "string" - }, - "additionalProperties": { - "type": "boolean" - } - }, - "disable": { - "type": "boolean" - }, - "description": { - "type": "string" - }, - "mode": { - "type": "string", - "enum": [ - "subagent", - "primary", - "all" - ] - }, - "color": { - "type": "string", - "pattern": "^#[0-9A-Fa-f]{6}$" - }, - "permission": { - "type": "object", - "properties": { - "edit": { - "type": "string", - "enum": [ - "ask", - "allow", - "deny" - ] - }, - "bash": { - "anyOf": [ - { - "type": "string", - "enum": [ - "ask", - "allow", - "deny" - ] - }, - { - "type": "object", - "propertyNames": { - "type": "string" - }, - "additionalProperties": { - "type": "string", - "enum": [ - "ask", - "allow", - "deny" - ] - } - } - ] - }, - "webfetch": { - "type": "string", - "enum": [ - "ask", - "allow", - "deny" - ] - }, - "doom_loop": { - "type": "string", - "enum": [ - "ask", - "allow", - "deny" - ] - }, - "external_directory": { - "type": "string", - "enum": [ - "ask", - "allow", - "deny" - ] - } - } - } - } - }, "multimodal-looker": { "type": "object", "properties": { diff --git a/docs/features.md b/docs/features.md index 31c3ea707..38dad891b 100644 --- a/docs/features.md +++ b/docs/features.md @@ -14,8 +14,6 @@ Oh-My-OpenCode provides 10 specialized AI agents. Each has distinct expertise, o | **oracle** | `openai/gpt-5.2` | Architecture decisions, code review, debugging. Read-only consultation - stellar logical reasoning and deep analysis. Inspired by AmpCode. | | **librarian** | `opencode/glm-4.7-free` | Multi-repo analysis, documentation lookup, OSS implementation examples. Deep codebase understanding with evidence-based answers. Inspired by AmpCode. | | **explore** | `opencode/grok-code` | Fast codebase exploration and contextual grep. Uses Gemini 3 Flash when Antigravity auth is configured, Haiku when Claude max20 is available, otherwise Grok. Inspired by Claude Code. | -| **frontend-ui-ux-engineer** | `google/gemini-3-pro-preview` | A designer turned developer. Builds gorgeous UIs with pixel-perfect details, smooth animations, and intuitive interactions. Gemini excels at creative, beautiful UI code. | -| **document-writer** | `google/gemini-3-flash` | Technical writing expert - README, API docs, guides. Gemini is a wordsmith - writes prose that flows. | | **multimodal-looker** | `google/gemini-3-flash` | Visual content specialist. Analyzes PDFs, images, diagrams to extract information. Saves tokens by having another agent process media. | ### Planning Agents @@ -334,7 +332,7 @@ Hooks intercept and modify behavior at key points in the agent lifecycle. | Hook | Event | Description | |------|-------|-------------| | **claude-code-hooks** | All | Executes hooks from Claude Code's settings.json. | -| **sisyphus-orchestrator** | All | Main orchestration logic (771 lines). | +| **atlas** | All | Main orchestration logic (771 lines). | | **interactive-bash-session** | PreToolUse | Manages tmux sessions for interactive CLI. | | **non-interactive-env** | PreToolUse | Handles non-interactive environment constraints. | diff --git a/src/config/schema.ts b/src/config/schema.ts index 9a46fc377..cea3300cd 100644 --- a/src/config/schema.ts +++ b/src/config/schema.ts @@ -21,8 +21,6 @@ export const BuiltinAgentNameSchema = z.enum([ "oracle", "librarian", "explore", - "frontend-ui-ux-engineer", - "document-writer", "multimodal-looker", "Metis (Plan Consultant)", "Momus (Plan Reviewer)", @@ -47,8 +45,6 @@ export const OverridableAgentNameSchema = z.enum([ "oracle", "librarian", "explore", - "frontend-ui-ux-engineer", - "document-writer", "multimodal-looker", "atlas", ]) @@ -87,7 +83,7 @@ export const HookNameSchema = z.enum([ "delegate-task-retry", "prometheus-md-only", "start-work", - "sisyphus-orchestrator", + "atlas", ]) export const BuiltinCommandNameSchema = z.enum([ @@ -130,8 +126,6 @@ export const AgentOverridesSchema = z.object({ oracle: AgentOverrideConfigSchema.optional(), librarian: AgentOverrideConfigSchema.optional(), explore: AgentOverrideConfigSchema.optional(), - "frontend-ui-ux-engineer": AgentOverrideConfigSchema.optional(), - "document-writer": AgentOverrideConfigSchema.optional(), "multimodal-looker": AgentOverrideConfigSchema.optional(), atlas: AgentOverrideConfigSchema.optional(), }) diff --git a/src/hooks/AGENTS.md b/src/hooks/AGENTS.md index f350e7ad6..8325b5b73 100644 --- a/src/hooks/AGENTS.md +++ b/src/hooks/AGENTS.md @@ -8,7 +8,7 @@ ``` hooks/ -├── sisyphus-orchestrator/ # Main orchestration & delegation (771 lines) +├── atlas/ # Main orchestration & delegation (771 lines) ├── anthropic-context-window-limit-recovery/ # Auto-summarize at token limit ├── todo-continuation-enforcer.ts # Force TODO completion ├── ralph-loop/ # Self-referential dev loop until done diff --git a/src/hooks/atlas/index.test.ts b/src/hooks/atlas/index.test.ts index 8d51cde70..19f6db8bd 100644 --- a/src/hooks/atlas/index.test.ts +++ b/src/hooks/atlas/index.test.ts @@ -2,7 +2,7 @@ import { describe, expect, test, beforeEach, afterEach, mock } from "bun:test" import { existsSync, mkdirSync, rmSync, writeFileSync } from "node:fs" import { join } from "node:path" import { tmpdir } from "node:os" -import { createSisyphusOrchestratorHook } from "./index" +import { createAtlasHook } from "./index" import { writeBoulderState, clearBoulderState, @@ -26,7 +26,7 @@ describe("atlas hook", () => { }, }, _promptMock: promptMock, - } as unknown as Parameters[0] & { _promptMock: ReturnType } + } as unknown as Parameters[0] & { _promptMock: ReturnType } } function setupMessageStorage(sessionID: string, agent: string): void { @@ -68,7 +68,7 @@ describe("atlas hook", () => { describe("tool.execute.after handler", () => { test("should ignore non-delegate_task tools", async () => { // #given - hook and non-delegate_task tool - const hook = createSisyphusOrchestratorHook(createMockPluginInput()) + const hook = createAtlasHook(createMockPluginInput()) const output = { title: "Test Tool", output: "Original output", @@ -101,7 +101,7 @@ describe("atlas hook", () => { } writeBoulderState(TEST_DIR, state) - const hook = createSisyphusOrchestratorHook(createMockPluginInput()) + const hook = createAtlasHook(createMockPluginInput()) const output = { title: "Sisyphus Task", output: "Task completed successfully", @@ -125,7 +125,7 @@ describe("atlas hook", () => { const sessionID = "session-no-boulder-test" setupMessageStorage(sessionID, "atlas") - const hook = createSisyphusOrchestratorHook(createMockPluginInput()) + const hook = createAtlasHook(createMockPluginInput()) const output = { title: "Sisyphus Task", output: "Task completed successfully", @@ -162,7 +162,7 @@ describe("atlas hook", () => { } writeBoulderState(TEST_DIR, state) - const hook = createSisyphusOrchestratorHook(createMockPluginInput()) + const hook = createAtlasHook(createMockPluginInput()) const output = { title: "Sisyphus Task", output: "Task completed successfully", @@ -201,7 +201,7 @@ describe("atlas hook", () => { } writeBoulderState(TEST_DIR, state) - const hook = createSisyphusOrchestratorHook(createMockPluginInput()) + const hook = createAtlasHook(createMockPluginInput()) const output = { title: "Sisyphus Task", output: "Original output", @@ -238,7 +238,7 @@ describe("atlas hook", () => { } writeBoulderState(TEST_DIR, state) - const hook = createSisyphusOrchestratorHook(createMockPluginInput()) + const hook = createAtlasHook(createMockPluginInput()) const output = { title: "Sisyphus Task", output: "Task output", @@ -274,7 +274,7 @@ describe("atlas hook", () => { } writeBoulderState(TEST_DIR, state) - const hook = createSisyphusOrchestratorHook(createMockPluginInput()) + const hook = createAtlasHook(createMockPluginInput()) const output = { title: "Sisyphus Task", output: "Task output", @@ -311,7 +311,7 @@ describe("atlas hook", () => { } writeBoulderState(TEST_DIR, state) - const hook = createSisyphusOrchestratorHook(createMockPluginInput()) + const hook = createAtlasHook(createMockPluginInput()) const output = { title: "Sisyphus Task", output: "Task completed", @@ -348,7 +348,7 @@ describe("atlas hook", () => { } writeBoulderState(TEST_DIR, state) - const hook = createSisyphusOrchestratorHook(createMockPluginInput()) + const hook = createAtlasHook(createMockPluginInput()) const output = { title: "Sisyphus Task", output: "Task completed", @@ -382,7 +382,7 @@ describe("atlas hook", () => { test("should append delegation reminder when orchestrator writes outside .sisyphus/", async () => { // #given - const hook = createSisyphusOrchestratorHook(createMockPluginInput()) + const hook = createAtlasHook(createMockPluginInput()) const output = { title: "Write", output: "File written successfully", @@ -403,7 +403,7 @@ describe("atlas hook", () => { test("should append delegation reminder when orchestrator edits outside .sisyphus/", async () => { // #given - const hook = createSisyphusOrchestratorHook(createMockPluginInput()) + const hook = createAtlasHook(createMockPluginInput()) const output = { title: "Edit", output: "File edited successfully", @@ -422,7 +422,7 @@ describe("atlas hook", () => { test("should NOT append reminder when orchestrator writes inside .sisyphus/", async () => { // #given - const hook = createSisyphusOrchestratorHook(createMockPluginInput()) + const hook = createAtlasHook(createMockPluginInput()) const originalOutput = "File written successfully" const output = { title: "Write", @@ -446,7 +446,7 @@ describe("atlas hook", () => { const nonOrchestratorSession = "non-orchestrator-session" setupMessageStorage(nonOrchestratorSession, "Sisyphus-Junior") - const hook = createSisyphusOrchestratorHook(createMockPluginInput()) + const hook = createAtlasHook(createMockPluginInput()) const originalOutput = "File written successfully" const output = { title: "Write", @@ -469,7 +469,7 @@ describe("atlas hook", () => { test("should NOT append reminder for read-only tools", async () => { // #given - const hook = createSisyphusOrchestratorHook(createMockPluginInput()) + const hook = createAtlasHook(createMockPluginInput()) const originalOutput = "File content" const output = { title: "Read", @@ -489,7 +489,7 @@ describe("atlas hook", () => { test("should handle missing filePath gracefully", async () => { // #given - const hook = createSisyphusOrchestratorHook(createMockPluginInput()) + const hook = createAtlasHook(createMockPluginInput()) const originalOutput = "File written successfully" const output = { title: "Write", @@ -510,7 +510,7 @@ describe("atlas hook", () => { describe("cross-platform path validation (Windows support)", () => { test("should NOT append reminder when orchestrator writes inside .sisyphus\\ (Windows backslash)", async () => { // #given - const hook = createSisyphusOrchestratorHook(createMockPluginInput()) + const hook = createAtlasHook(createMockPluginInput()) const originalOutput = "File written successfully" const output = { title: "Write", @@ -531,7 +531,7 @@ describe("atlas hook", () => { test("should NOT append reminder when orchestrator writes inside .sisyphus with mixed separators", async () => { // #given - const hook = createSisyphusOrchestratorHook(createMockPluginInput()) + const hook = createAtlasHook(createMockPluginInput()) const originalOutput = "File written successfully" const output = { title: "Write", @@ -552,7 +552,7 @@ describe("atlas hook", () => { test("should NOT append reminder for absolute Windows path inside .sisyphus\\", async () => { // #given - const hook = createSisyphusOrchestratorHook(createMockPluginInput()) + const hook = createAtlasHook(createMockPluginInput()) const originalOutput = "File written successfully" const output = { title: "Write", @@ -573,7 +573,7 @@ describe("atlas hook", () => { test("should append reminder for Windows path outside .sisyphus\\", async () => { // #given - const hook = createSisyphusOrchestratorHook(createMockPluginInput()) + const hook = createAtlasHook(createMockPluginInput()) const output = { title: "Write", output: "File written successfully", @@ -622,7 +622,7 @@ describe("atlas hook", () => { writeBoulderState(TEST_DIR, state) const mockInput = createMockPluginInput() - const hook = createSisyphusOrchestratorHook(mockInput) + const hook = createAtlasHook(mockInput) // #when await hook.handler({ @@ -643,7 +643,7 @@ describe("atlas hook", () => { test("should not inject when no boulder state exists", async () => { // #given - no boulder state const mockInput = createMockPluginInput() - const hook = createSisyphusOrchestratorHook(mockInput) + const hook = createAtlasHook(mockInput) // #when await hook.handler({ @@ -671,7 +671,7 @@ describe("atlas hook", () => { writeBoulderState(TEST_DIR, state) const mockInput = createMockPluginInput() - const hook = createSisyphusOrchestratorHook(mockInput) + const hook = createAtlasHook(mockInput) // #when await hook.handler({ @@ -699,7 +699,7 @@ describe("atlas hook", () => { writeBoulderState(TEST_DIR, state) const mockInput = createMockPluginInput() - const hook = createSisyphusOrchestratorHook(mockInput) + const hook = createAtlasHook(mockInput) // #when - send abort error then idle await hook.handler({ @@ -740,7 +740,7 @@ describe("atlas hook", () => { } const mockInput = createMockPluginInput() - const hook = createSisyphusOrchestratorHook(mockInput, { + const hook = createAtlasHook(mockInput, { directory: TEST_DIR, backgroundManager: mockBackgroundManager as any, }) @@ -771,7 +771,7 @@ describe("atlas hook", () => { writeBoulderState(TEST_DIR, state) const mockInput = createMockPluginInput() - const hook = createSisyphusOrchestratorHook(mockInput) + const hook = createAtlasHook(mockInput) // #when - abort error, then message update, then idle await hook.handler({ @@ -814,7 +814,7 @@ describe("atlas hook", () => { writeBoulderState(TEST_DIR, state) const mockInput = createMockPluginInput() - const hook = createSisyphusOrchestratorHook(mockInput) + const hook = createAtlasHook(mockInput) // #when await hook.handler({ @@ -848,7 +848,7 @@ describe("atlas hook", () => { setupMessageStorage(MAIN_SESSION_ID, "Sisyphus") const mockInput = createMockPluginInput() - const hook = createSisyphusOrchestratorHook(mockInput) + const hook = createAtlasHook(mockInput) // #when await hook.handler({ @@ -876,7 +876,7 @@ describe("atlas hook", () => { writeBoulderState(TEST_DIR, state) const mockInput = createMockPluginInput() - const hook = createSisyphusOrchestratorHook(mockInput) + const hook = createAtlasHook(mockInput) // #when - fire multiple idle events in rapid succession (simulating infinite loop bug) await hook.handler({ @@ -916,7 +916,7 @@ describe("atlas hook", () => { writeBoulderState(TEST_DIR, state) const mockInput = createMockPluginInput() - const hook = createSisyphusOrchestratorHook(mockInput) + const hook = createAtlasHook(mockInput) // #when - create abort state then delete await hook.handler({ diff --git a/src/hooks/atlas/index.ts b/src/hooks/atlas/index.ts index e36175d84..6a2f9638f 100644 --- a/src/hooks/atlas/index.ts +++ b/src/hooks/atlas/index.ts @@ -407,7 +407,7 @@ interface SessionState { const CONTINUATION_COOLDOWN_MS = 5000 -export interface SisyphusOrchestratorHookOptions { +export interface AtlasHookOptions { directory: string backgroundManager?: BackgroundManager } @@ -433,9 +433,9 @@ function isAbortError(error: unknown): boolean { return false } -export function createSisyphusOrchestratorHook( +export function createAtlasHook( ctx: PluginInput, - options?: SisyphusOrchestratorHookOptions + options?: AtlasHookOptions ) { const backgroundManager = options?.backgroundManager const sessions = new Map() diff --git a/src/hooks/index.ts b/src/hooks/index.ts index 31690d22e..48ee884cb 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -28,5 +28,5 @@ export { createEditErrorRecoveryHook } from "./edit-error-recovery"; export { createPrometheusMdOnlyHook } from "./prometheus-md-only"; export { createTaskResumeInfoHook } from "./task-resume-info"; export { createStartWorkHook } from "./start-work"; -export { createSisyphusOrchestratorHook } from "./atlas"; +export { createAtlasHook } from "./atlas"; export { createDelegateTaskRetryHook } from "./delegate-task-retry"; diff --git a/src/index.ts b/src/index.ts index 755edf33b..c75b42785 100644 --- a/src/index.ts +++ b/src/index.ts @@ -29,7 +29,7 @@ import { createDelegateTaskRetryHook, createTaskResumeInfoHook, createStartWorkHook, - createSisyphusOrchestratorHook, + createAtlasHook, createPrometheusMdOnlyHook, } from "./hooks"; import { @@ -198,8 +198,8 @@ const OhMyOpenCodePlugin: Plugin = async (ctx) => { ? createStartWorkHook(ctx) : null; - const sisyphusOrchestrator = isHookEnabled("sisyphus-orchestrator") - ? createSisyphusOrchestratorHook(ctx) + const atlasHook = isHookEnabled("atlas") + ? createAtlasHook(ctx) : null; const prometheusMdOnly = isHookEnabled("prometheus-md-only") @@ -411,7 +411,7 @@ const OhMyOpenCodePlugin: Plugin = async (ctx) => { await agentUsageReminder?.event(input); await interactiveBashSession?.event(input); await ralphLoop?.event(input); - await sisyphusOrchestrator?.handler(input); + await atlasHook?.handler(input); const { event } = input; const props = event.properties as Record | undefined; @@ -565,7 +565,7 @@ const OhMyOpenCodePlugin: Plugin = async (ctx) => { await interactiveBashSession?.["tool.execute.after"](input, output); await editErrorRecovery?.["tool.execute.after"](input, output); await delegateTaskRetry?.["tool.execute.after"](input, output); - await sisyphusOrchestrator?.["tool.execute.after"]?.(input, output); + await atlasHook?.["tool.execute.after"]?.(input, output); await taskResumeInfo["tool.execute.after"](input, output); }, };