refactor(hooks): rename sisyphus-orchestrator to atlas

- 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
This commit is contained in:
justsisyphus 2026-01-20 16:52:20 +09:00
parent 8cc995891e
commit c46d57f3aa
13 changed files with 52 additions and 316 deletions

View File

Before

Width:  |  Height:  |  Size: 182 KiB

After

Width:  |  Height:  |  Size: 182 KiB

View File

@ -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 |

View File

@ -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高速コードベース grepFrontend EngineerUI/UX、Document Writer、Multimodal Looker
- **エージェント**: Sisyphusメインエージェント、Prometheusプランナー、Oracleアーキテクチャ/デバッグ、Librarianドキュメント/コード検索、Explore高速コードベース grep、Multimodal Looker
- **バックグラウンドエージェント**: 本物の開発チームのように複数エージェントを並列実行
- **LSP & AST ツール**: リファクタリング、リネーム、診断、AST 認識コード検索
- **コンテキスト注入**: AGENTS.md、README.md、条件付きルールの自動注入

View File

@ -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

View File

@ -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快速代码库 grepFrontend EngineerUI/UX、Document Writer、Multimodal Looker
- **智能体**Sisyphus主智能体、Prometheus规划器、Oracle架构/调试、Librarian文档/代码搜索、Explore快速代码库 grep、Multimodal Looker
- **后台智能体**:像真正的开发团队一样并行运行多个智能体
- **LSP & AST 工具**重构、重命名、诊断、AST 感知代码搜索
- **上下文注入**:自动注入 AGENTS.md、README.md、条件规则

View File

@ -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": {

View File

@ -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. |

View File

@ -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(),
})

View File

@ -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

View File

@ -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<typeof createSisyphusOrchestratorHook>[0] & { _promptMock: ReturnType<typeof mock> }
} as unknown as Parameters<typeof createAtlasHook>[0] & { _promptMock: ReturnType<typeof mock> }
}
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({

View File

@ -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<string, SessionState>()

View File

@ -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";

View File

@ -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<string, unknown> | 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);
},
};