From a2c2922d0ab945917ea34453db231fde219eb086 Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Fri, 9 Jan 2026 15:44:06 +0900 Subject: [PATCH] fix(publish): add --tag for prerelease versions npm requires --tag flag when publishing prerelease versions. Extracts tag from version string (e.g., 'beta' from '3.0.0-beta.2'). --- AGENTS.md | 48 ++++++++++++++++++++++++++---------------- script/publish.ts | 19 ++++++++++++----- src/agents/AGENTS.md | 9 ++++++-- src/auth/AGENTS.md | 12 +++++++---- src/cli/AGENTS.md | 10 ++++++--- src/features/AGENTS.md | 12 ++++++++--- src/hooks/AGENTS.md | 19 +++++++++++------ src/tools/AGENTS.md | 6 ++++-- 8 files changed, 92 insertions(+), 43 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 3cbc4561c..9e1654423 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,7 +1,7 @@ # PROJECT KNOWLEDGE BASE -**Generated:** 2026-01-02T22:41:22+09:00 -**Commit:** d0694e5 +**Generated:** 2026-01-09T15:38:00+09:00 +**Commit:** 0581793 **Branch:** dev ## OVERVIEW @@ -22,7 +22,7 @@ oh-my-opencode/ │ ├── cli/ # CLI installer, doctor - see src/cli/AGENTS.md │ ├── mcp/ # MCP configs: context7, grep_app │ ├── config/ # Zod schema, TypeScript types -│ └── index.ts # Main plugin entry (464 lines) +│ └── index.ts # Main plugin entry (548 lines) ├── script/ # build-schema.ts, publish.ts, generate-changelog.ts ├── assets/ # JSON schema └── dist/ # Build output (ESM + .d.ts) @@ -50,6 +50,7 @@ oh-my-opencode/ | Shared utilities | `src/shared/` | Cross-cutting utilities | | Slash commands | `src/hooks/auto-slash-command/` | Auto-detect and execute `/command` patterns | | Ralph Loop | `src/hooks/ralph-loop/` | Self-referential dev loop until completion | +| Orchestrator | `src/hooks/sisyphus-orchestrator/` | Main orchestration hook (660 lines) | ## TDD (Test-Driven Development) @@ -64,15 +65,16 @@ oh-my-opencode/ | Phase | Action | Verification | |-------|--------|--------------| -| **RED** | Write test describing expected behavior | `bun test` → FAIL (expected) | -| **GREEN** | Implement minimum code to pass | `bun test` → PASS | -| **REFACTOR** | Improve code quality, remove duplication | `bun test` → PASS (must stay green) | +| **RED** | Write test describing expected behavior | `bun test` -> FAIL (expected) | +| **GREEN** | Implement minimum code to pass | `bun test` -> PASS | +| **REFACTOR** | Improve code quality, remove duplication | `bun test` -> PASS (must stay green) | **Rules:** - NEVER write implementation before test - NEVER delete failing tests to "pass" - fix the code - One test at a time - don't batch - Test file naming: `*.test.ts` alongside source +- BDD comments: `#given`, `#when`, `#then` (same as AAA) ## CONVENTIONS @@ -81,7 +83,7 @@ oh-my-opencode/ - **Build**: `bun build` (ESM) + `tsc --emitDeclarationOnly` - **Exports**: Barrel pattern in index.ts; explicit named exports for tools/hooks - **Naming**: kebab-case directories, createXXXHook/createXXXTool factories -- **Testing**: BDD comments `#given`, `#when`, `#then` (same as AAA); TDD workflow (RED-GREEN-REFACTOR) +- **Testing**: BDD comments `#given/#when/#then`, TDD workflow (RED-GREEN-REFACTOR) - **Temperature**: 0.1 for code agents, max 0.3 ## ANTI-PATTERNS (THIS PROJECT) @@ -99,6 +101,11 @@ oh-my-opencode/ - **Sequential agent calls**: Use `sisyphus_task` for parallel execution - **Heavy PreToolUse logic**: Slows every tool call - **Self-planning for complex tasks**: Spawn planning agent (Prometheus) instead +- **Trust agent self-reports**: ALWAYS verify results independently +- **Skip TODO creation**: Multi-step tasks MUST have todos first +- **Batch completions**: Mark TODOs complete immediately, don't group +- **Giant commits**: 3+ files = 2+ commits minimum +- **Separate test from impl**: Same commit always ## UNIQUE STYLES @@ -114,7 +121,7 @@ oh-my-opencode/ ## AGENT MODELS | Agent | Default Model | Purpose | -|-------|-------|---------| +|-------|---------------|---------| | Sisyphus | anthropic/claude-opus-4-5 | Primary orchestrator | | oracle | openai/gpt-5.2 | Read-only consultation. High-IQ debugging, architecture | | librarian | anthropic/claude-sonnet-4-5 | Multi-repo analysis, docs | @@ -130,7 +137,7 @@ bun run typecheck # Type check bun run build # ESM + declarations + schema bun run rebuild # Clean + Build bun run build:schema # Schema only -bun test # Run tests +bun test # Run tests (76 test files, 2559+ BDD assertions) ``` ## DEPLOYMENT @@ -153,18 +160,23 @@ bun test # Run tests | File | Lines | Description | |------|-------|-------------| -| `src/index.ts` | 464 | Main plugin, all hook/tool init | -| `src/cli/config-manager.ts` | 669 | JSONC parsing, env detection | -| `src/auth/antigravity/fetch.ts` | 621 | Token refresh, URL rewriting | -| `src/tools/lsp/client.ts` | 611 | LSP protocol, JSON-RPC | -| `src/auth/antigravity/response.ts` | 598 | Response transformation, streaming | -| `src/auth/antigravity/thinking.ts` | 571 | Thinking block extraction/transformation | -| `src/hooks/anthropic-context-window-limit-recovery/executor.ts` | 564 | Multi-stage recovery | -| `src/agents/sisyphus.ts` | 504 | Orchestrator prompt | +| `src/agents/orchestrator-sisyphus.ts` | 1484 | Orchestrator agent, complex delegation | +| `src/features/builtin-skills/skills.ts` | 1230 | Skill definitions (frontend-ui-ux, playwright) | +| `src/agents/prometheus-prompt.ts` | 982 | Planning agent system prompt | +| `src/auth/antigravity/fetch.ts` | 798 | Token refresh, URL rewriting | +| `src/auth/antigravity/thinking.ts` | 755 | Thinking block extraction | +| `src/cli/config-manager.ts` | 725 | JSONC parsing, env detection | +| `src/hooks/sisyphus-orchestrator/index.ts` | 660 | Orchestrator hook impl | +| `src/agents/sisyphus.ts` | 641 | Main Sisyphus prompt | +| `src/tools/lsp/client.ts` | 612 | LSP protocol, JSON-RPC | +| `src/features/background-agent/manager.ts` | 608 | Task lifecycle | +| `src/auth/antigravity/response.ts` | 599 | Response transformation, streaming | +| `src/hooks/anthropic-context-window-limit-recovery/executor.ts` | 556 | Multi-stage recovery | +| `src/index.ts` | 548 | Main plugin, all hook/tool init | ## NOTES -- **Testing**: Bun native test (`bun test`), BDD-style `#given/#when/#then`, 360+ tests +- **Testing**: Bun native test (`bun test`), BDD-style `#given/#when/#then`, 76 test files - **OpenCode**: Requires >= 1.0.150 - **Multi-lang docs**: README.md (EN), README.ko.md (KO), README.ja.md (JA), README.zh-cn.md (ZH-CN) - **Config**: `~/.config/opencode/oh-my-opencode.json` (user) or `.opencode/oh-my-opencode.json` (project) diff --git a/script/publish.ts b/script/publish.ts index ba7e33dc2..151500cca 100644 --- a/script/publish.ts +++ b/script/publish.ts @@ -106,13 +106,22 @@ async function getContributors(previous: string): Promise { return notes } -async function buildAndPublish(): Promise { +function getDistTag(version: string): string | null { + if (!version.includes("-")) return null + const prerelease = version.split("-")[1] + const tag = prerelease?.split(".")[0] + return tag || "next" +} + +async function buildAndPublish(version: string): Promise { console.log("\nPublishing to npm...") - // --ignore-scripts: workflow에서 이미 빌드 완료, prepublishOnly 재실행 방지 + const distTag = getDistTag(version) + const tagArgs = distTag ? ["--tag", distTag] : [] + if (process.env.CI) { - await $`npm publish --access public --provenance --ignore-scripts` + await $`npm publish --access public --provenance --ignore-scripts ${tagArgs}` } else { - await $`npm publish --access public --ignore-scripts` + await $`npm publish --access public --ignore-scripts ${tagArgs}` } } @@ -174,7 +183,7 @@ async function main() { const contributors = await getContributors(previous) const notes = [...changelog, ...contributors] - await buildAndPublish() + await buildAndPublish(newVersion) await gitTagAndRelease(newVersion, notes) console.log(`\n=== Successfully published ${PACKAGE_NAME}@${newVersion} ===`) diff --git a/src/agents/AGENTS.md b/src/agents/AGENTS.md index 4bfe0b69b..dbad2f148 100644 --- a/src/agents/AGENTS.md +++ b/src/agents/AGENTS.md @@ -8,13 +8,18 @@ AI agent definitions for multi-model orchestration. 7 specialized agents: Sisyph ``` agents/ -├── sisyphus.ts # Primary orchestrator (Claude Opus 4.5) +├── orchestrator-sisyphus.ts # Orchestrator agent (1484 lines) - complex delegation +├── sisyphus.ts # Main Sisyphus prompt (641 lines) +├── sisyphus-junior.ts # Junior variant for delegated tasks ├── oracle.ts # Strategic advisor (GPT-5.2) ├── librarian.ts # Multi-repo research (Claude Sonnet 4.5) ├── explore.ts # Fast codebase grep (Grok Code) ├── frontend-ui-ux-engineer.ts # UI generation (Gemini 3 Pro) -├── document-writer.ts # Technical docs (Gemini 3 Flash) +├── document-writer.ts # Technical docs (Gemini 3 Pro) ├── multimodal-looker.ts # PDF/image analysis (Gemini 3 Flash) +├── prometheus-prompt.ts # Planning agent prompt (982 lines) +├── metis.ts # Plan Consultant agent (404 lines) +├── momus.ts # Plan Reviewer agent (404 lines) ├── build-prompt.ts # Shared build agent prompt ├── plan-prompt.ts # Shared plan agent prompt ├── types.ts # AgentModelConfig interface diff --git a/src/auth/AGENTS.md b/src/auth/AGENTS.md index a3a98d85e..526f5f716 100644 --- a/src/auth/AGENTS.md +++ b/src/auth/AGENTS.md @@ -9,16 +9,20 @@ Google Antigravity OAuth for Gemini models. Token management, fetch interception ``` auth/ └── antigravity/ - ├── plugin.ts # Main export, hooks registration + ├── plugin.ts # Main export, hooks registration (554 lines) ├── oauth.ts # OAuth flow, token acquisition ├── token.ts # Token storage, refresh logic - ├── fetch.ts # Fetch interceptor (621 lines) - ├── response.ts # Response transformation (598 lines) - ├── thinking.ts # Thinking block extraction (571 lines) + ├── fetch.ts # Fetch interceptor (798 lines) + ├── response.ts # Response transformation (599 lines) + ├── thinking.ts # Thinking block extraction (755 lines) ├── thought-signature-store.ts # Signature caching ├── message-converter.ts # Format conversion + ├── accounts.ts # Multi-account management + ├── browser.ts # Browser automation for OAuth + ├── cli.ts # CLI interaction ├── request.ts # Request building ├── project.ts # Project ID management + ├── storage.ts # Token persistence ├── tools.ts # OAuth tool registration ├── constants.ts # API endpoints, model mappings └── types.ts diff --git a/src/cli/AGENTS.md b/src/cli/AGENTS.md index 78ed33e3e..1f95d3af7 100644 --- a/src/cli/AGENTS.md +++ b/src/cli/AGENTS.md @@ -9,16 +9,20 @@ CLI for oh-my-opencode: interactive installer, health diagnostics (doctor), runt ``` cli/ ├── index.ts # Commander.js entry, subcommand routing -├── install.ts # Interactive TUI installer (477 lines) -├── config-manager.ts # JSONC parsing, env detection (669 lines) +├── install.ts # Interactive TUI installer (436 lines) +├── config-manager.ts # JSONC parsing, env detection (725 lines) ├── types.ts # CLI-specific types +├── commands/ # CLI subcommands ├── doctor/ # Health check system │ ├── index.ts # Doctor command entry +│ ├── runner.ts # Health check orchestration │ ├── constants.ts # Check categories │ ├── types.ts # Check result interfaces -│ └── checks/ # 17+ individual checks +│ └── checks/ # 17+ individual checks (auth, config, dependencies, gh, lsp, mcp, opencode, plugin, version) ├── get-local-version/ # Version detection └── run/ # OpenCode session launcher + ├── completion.ts # Completion logic + └── events.ts # Event handling ``` ## CLI COMMANDS diff --git a/src/features/AGENTS.md b/src/features/AGENTS.md index b753fcbe8..75a9b0580 100644 --- a/src/features/AGENTS.md +++ b/src/features/AGENTS.md @@ -8,17 +8,23 @@ Claude Code compatibility layer + core feature modules. Commands, skills, agents ``` features/ -├── background-agent/ # Task lifecycle, notifications (460 lines) +├── background-agent/ # Task lifecycle, notifications (608 lines) +├── boulder-state/ # Boulder state persistence ├── builtin-commands/ # Built-in slash commands -├── builtin-skills/ # Built-in skills (playwright) +│ └── templates/ # start-work, refactor, init-deep, ralph-loop +├── builtin-skills/ # Built-in skills +│ ├── git-master/ # Atomic commits, rebase, history search +│ └── frontend-ui-ux/ # Designer-turned-developer skill ├── claude-code-agent-loader/ # ~/.claude/agents/*.md ├── claude-code-command-loader/ # ~/.claude/commands/*.md ├── claude-code-mcp-loader/ # .mcp.json files │ └── env-expander.ts # ${VAR} expansion -├── claude-code-plugin-loader/ # installed_plugins.json (484 lines) +├── claude-code-plugin-loader/ # installed_plugins.json (486 lines) ├── claude-code-session-state/ # Session state persistence +├── context-injector/ # Context collection and injection ├── opencode-skill-loader/ # Skills from OpenCode + Claude paths ├── skill-mcp-manager/ # MCP servers in skill YAML +├── task-toast-manager/ # Task toast notifications └── hook-message-injector/ # Inject messages into conversation ``` diff --git a/src/hooks/AGENTS.md b/src/hooks/AGENTS.md index ead594d3f..006978573 100644 --- a/src/hooks/AGENTS.md +++ b/src/hooks/AGENTS.md @@ -2,35 +2,42 @@ ## OVERVIEW -22 lifecycle hooks intercepting/modifying agent behavior. Context injection, error recovery, output control, notifications. +22+ lifecycle hooks intercepting/modifying agent behavior. Context injection, error recovery, output control, notifications. ## STRUCTURE ``` hooks/ -├── anthropic-context-window-limit-recovery/ # Auto-compact at token limit (554 lines) +├── anthropic-context-window-limit-recovery/ # Auto-compact at token limit (556 lines) ├── auto-slash-command/ # Detect and execute /command patterns ├── auto-update-checker/ # Version notifications, startup toast ├── background-notification/ # OS notify on task complete -├── claude-code-hooks/ # settings.json PreToolUse/PostToolUse/etc +├── claude-code-hooks/ # settings.json PreToolUse/PostToolUse/etc (408 lines) ├── comment-checker/ # Prevent excessive AI comments -│ └── filters/ # docstring, directive, bdd, etc +│ ├── filters/ # docstring, directive, bdd, shebang +│ └── output/ # XML builder, formatter ├── compaction-context-injector/ # Preserve context during compaction ├── directory-agents-injector/ # Auto-inject AGENTS.md ├── directory-readme-injector/ # Auto-inject README.md +├── edit-error-recovery/ # Recover from edit failures ├── empty-message-sanitizer/ # Sanitize empty messages ├── interactive-bash-session/ # Tmux session management ├── keyword-detector/ # ultrawork/search keyword activation ├── non-interactive-env/ # CI/headless handling ├── preemptive-compaction/ # Pre-emptive at 85% usage +├── prometheus-md-only/ # Restrict prometheus to read-only ├── ralph-loop/ # Self-referential dev loop ├── rules-injector/ # Conditional rules from .claude/rules/ -├── session-recovery/ # Recover from errors (430 lines) +├── session-recovery/ # Recover from errors (432 lines) +├── sisyphus-orchestrator/ # Main orchestration hook (660 lines) +├── start-work/ # Initialize Sisyphus work session +├── task-resume-info/ # Track task resume state ├── think-mode/ # Auto-detect thinking triggers +├── thinking-block-validator/ # Validate thinking block format ├── agent-usage-reminder/ # Remind to use specialists ├── context-window-monitor.ts # Monitor usage (standalone) ├── session-notification.ts # OS notify on idle -├── todo-continuation-enforcer.ts # Force TODO completion +├── todo-continuation-enforcer.ts # Force TODO completion (413 lines) └── tool-output-truncator.ts # Truncate verbose outputs ``` diff --git a/src/tools/AGENTS.md b/src/tools/AGENTS.md index cd79d1c5e..ce6f82849 100644 --- a/src/tools/AGENTS.md +++ b/src/tools/AGENTS.md @@ -19,9 +19,10 @@ tools/ ├── interactive-bash/ # Tmux session management ├── look-at/ # Multimodal analysis (PDF, images) ├── lsp/ # 11 LSP tools -│ ├── client.ts # LSP connection lifecycle +│ ├── client.ts # LSP connection lifecycle (612 lines) +│ ├── utils.ts # LSP utilities (461 lines) │ ├── config.ts # Server configurations -│ ├── tools.ts # Tool implementations +│ ├── tools.ts # Tool implementations (405 lines) │ └── types.ts ├── session-manager/ # OpenCode session file management │ ├── constants.ts # Storage paths, descriptions @@ -29,6 +30,7 @@ tools/ │ ├── storage.ts # File I/O operations │ ├── utils.ts # Formatting, filtering │ └── tools.ts # Tool implementations +├── sisyphus-task/ # Category-based task delegation (493 lines) ├── skill/ # Skill loading and execution ├── skill-mcp/ # Skill-embedded MCP invocation ├── slashcommand/ # Slash command execution