oh-my-openagent 5.1.1 → 5.1.3

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.
Files changed (72) hide show
  1. package/README.ja.md +3 -3
  2. package/README.ko.md +3 -3
  3. package/README.md +6 -4
  4. package/README.ru.md +3 -3
  5. package/README.zh-cn.md +3 -3
  6. package/dist/cli/index.js +112 -95
  7. package/dist/cli-node/index.js +112 -95
  8. package/dist/index.js +66 -37
  9. package/dist/skills/browser/runtime/omowright/manifest.json +1 -1
  10. package/dist/skills/refactor/SKILL.md +1 -0
  11. package/dist/skills/remove-ai-slops/SKILL.md +1 -0
  12. package/dist/skills/ulw-execute/SKILL.md +1 -0
  13. package/dist/tui.js +27 -31
  14. package/package.json +27 -31
  15. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  16. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  17. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  18. package/packages/omo-codex/plugin/components/comment-checker/dist/cli.js +33 -7
  19. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  20. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  21. package/packages/omo-codex/plugin/components/comment-checker/src/runner.ts +4 -4
  22. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  23. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  24. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  25. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  26. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
  27. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  28. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  29. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  30. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  31. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  32. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  33. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  34. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  35. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  36. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  37. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
  38. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  39. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  40. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  41. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  42. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  43. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  44. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  45. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  46. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  47. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  48. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  49. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  50. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  51. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  52. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  53. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  54. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  55. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  56. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  57. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  58. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  59. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  60. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  61. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  62. package/packages/omo-codex/plugin/package-lock.json +12 -12
  63. package/packages/omo-codex/plugin/package.json +1 -1
  64. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +1 -1
  65. package/packages/omo-codex/plugin/skills/refactor/SKILL.md +1 -0
  66. package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +1 -0
  67. package/packages/omo-codex/plugin/skills/ulw-execute/SKILL.md +1 -0
  68. package/packages/omo-codex/scripts/install-dist/install-local.mjs +2 -2
  69. package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +1 -1
  70. package/packages/shared-skills/skills/refactor/SKILL.md +1 -0
  71. package/packages/shared-skills/skills/remove-ai-slops/SKILL.md +1 -0
  72. package/packages/shared-skills/skills/ulw-execute/SKILL.md +1 -0
package/README.ja.md CHANGED
@@ -1,6 +1,6 @@
1
1
  > [!NOTE]
2
2
  > **OmO ベータ: OmO ❤️ Pi**
3
- > `bun add -g omo-ai` でインストールしてください。メモリシステム、CodeMode、Anthropic サブスクリプションにすべて対応しています。
3
+ > `curl -fsSL https://get.omo.dev/install.sh | bash` でインストールしてください。メモリシステム、CodeMode、Anthropic サブスクリプションにすべて対応しています。
4
4
  > [![OmO Herdr DAG - live OmO workflow DAGs in a Herdr side pane](./.github/assets/omo-herdr-dag.png)](https://github.com/jc01rho/omo-herdr-dag)
5
5
  > *プロンプトに "mass ulw" と入れるだけ。あなたはもうグラフエンジニアリングのマスター。マルチモデルの ultracode を、より良いメモリシステムとともに。(右側のパネルは [omo-herdr-dag](https://github.com/jc01rho/omo-herdr-dag) です)*
6
6
 
@@ -52,11 +52,11 @@ OmO は、あなたのトークンを完成した成果に変える `omo` コマ
52
52
  ## インストール
53
53
 
54
54
  ```bash
55
- bun add -g omo-ai
55
+ curl -fsSL https://get.omo.dev/install.sh | bash
56
56
  omo
57
57
  ```
58
58
 
59
- bun がない場合は `npm i -g omo-ai` でも動きます。パッケージ名は `omo-ai` です。npm にある `omo` パッケージは無関係の別物です。
59
+ Windows では PowerShell で `irm https://get.omo.dev/install.ps1 | iex` を実行してください。OS と CPU に合ったネイティブの `omo` を `~/.local/bin` に入れ、リリースのチェックサムで検証します。パッケージマネージャーを使いたい場合は `bun add -g omo-ai`(または `npm i -g omo-ai`)で同じ OmO が入ります。パッケージ名は `omo-ai` です。npm にある `omo` パッケージは無関係の別物です。Windows CMD、`PATH` の直し方、更新とアンインストールは [omo.dev/docs/install](https://omo.dev/docs/install) で説明しています。
60
60
 
61
61
  プロジェクトを開いて `omo` を実行し、やることを伝えてください。セットアップはそれだけです。
62
62
 
package/README.ko.md CHANGED
@@ -1,6 +1,6 @@
1
1
  > [!NOTE]
2
2
  > **OmO 베타: OmO ❤️ Pi**
3
- > `bun add -g omo-ai`로 설치하세요. 메모리 시스템, CodeMode, Anthropic 구독까지 전부 지원됩니다.
3
+ > `curl -fsSL https://get.omo.dev/install.sh | bash`로 설치하세요. 메모리 시스템, CodeMode, Anthropic 구독까지 전부 지원됩니다.
4
4
  > [![OmO Herdr DAG - live OmO workflow DAGs in a Herdr side pane](./.github/assets/omo-herdr-dag.png)](https://github.com/jc01rho/omo-herdr-dag)
5
5
  > *프롬프트에 "mass ulw" 한 줄이면 끝. 당신도 그래프 엔지니어링의 마스터가 됩니다. 멀티 모델 ultracode, 더 나은 메모리 시스템과 함께. (우측의 패널은 [omo-herdr-dag](https://github.com/jc01rho/omo-herdr-dag) 입니다)*
6
6
 
@@ -53,11 +53,11 @@ OmO는 토큰을 끝난 일로 바꿔 주는 `omo` 명령 하나입니다. 만
53
53
  ## 설치
54
54
 
55
55
  ```bash
56
- bun add -g omo-ai
56
+ curl -fsSL https://get.omo.dev/install.sh | bash
57
57
  omo
58
58
  ```
59
59
 
60
- bun이 없으면 `npm i -g omo-ai`로 설치해도 됩니다. 패키지 이름은 `omo-ai`예요. npm의 `omo` 패키지는 다른 사람이 만든 전혀 다른 물건입니다.
60
+ Windows는 PowerShell에서 `irm https://get.omo.dev/install.ps1 | iex`를 실행하세요. OS와 CPU에 맞는 네이티브 `omo`를 `~/.local/bin`에 설치하고 릴리스 체크섬으로 검증합니다. 패키지 매니저가 편하면 `bun add -g omo-ai`(또는 `npm i -g omo-ai`)로 같은 OmO를 설치할 수 있어요. 패키지 이름은 `omo-ai`예요. npm의 `omo` 패키지는 다른 사람이 만든 전혀 다른 물건입니다. Windows CMD, `PATH` 문제 해결, 업데이트와 삭제는 [omo.dev/docs/install](https://omo.dev/docs/install)에서 다룹니다.
61
61
 
62
62
  프로젝트를 열고 `omo`를 실행한 다음, 할 일을 말하세요. 설정은 그게 끝.
63
63
 
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  > [!NOTE]
2
2
  > **OmO 5.0: OmO ❤️ Pi**
3
- > Install it with `bun add -g omo-ai`. Memory system, CodeMode, Anthropic subscriptions, all covered.
3
+ > Install it with `curl -fsSL https://get.omo.dev/install.sh | bash`. Memory system, CodeMode, Anthropic subscriptions, all covered.
4
4
  > [![OmO Herdr DAG - live OmO workflow DAGs in a Herdr side pane](./.github/assets/omo-herdr-dag.png)](https://github.com/jc01rho/omo-herdr-dag)
5
5
  > *Just type "mass ulw" with your prompt - now you are the master of graph engineering. Multi-model ultracode, together with a better memory system. (The right panel is [omo-herdr-dag](https://github.com/jc01rho/omo-herdr-dag).)*
6
6
 
@@ -51,17 +51,19 @@ OmO is one `omo` command that turns your tokens into finished work: research acr
51
51
  ## Install
52
52
 
53
53
  ```bash
54
- bun add -g omo-ai
54
+ curl -fsSL https://get.omo.dev/install.sh | bash
55
55
  omo
56
56
  ```
57
57
 
58
- No bun? `npm i -g omo-ai` works too. The package is `omo-ai`; the unrelated `omo` package on npm is someone else's.
58
+ On Windows, in PowerShell: `irm https://get.omo.dev/install.ps1 | iex`. The script installs the native `omo` binary for your OS and CPU into `~/.local/bin`, checks it against the release checksums, and falls back to GitHub Releases when the mirror is unreachable. Add `-s -- beta` (or a version such as `-s -- 5.1.1`) after `bash` to pick another channel. Windows CMD, fixing your `PATH`, updating and uninstalling are covered at [omo.dev/docs/install](https://omo.dev/docs/install).
59
+
60
+ Prefer a package manager? `bun add -g omo-ai` (or `npm i -g omo-ai`) installs the same OmO. The package is `omo-ai`; the unrelated `omo` package on npm is someone else's.
59
61
 
60
62
  Open your project, run `omo`, describe the job. That's the whole setup.
61
63
 
62
64
  Coming from the OpenCode edition or LazyCodex? Run `omo setup` once. It carries your provider keys, custom providers, MCP servers, skills and model picks across. `omo doctor` then shows which task categories your providers can run and what the old install left behind. The full walkthrough is [Migrating from OpenCode](docs/guide/migrating-from-opencode.md).
63
65
 
64
- `omo update` updates in place. `bun remove -g omo-ai` (or `npm uninstall -g omo-ai`) removes it.
66
+ To update, run the install line again (a package-manager install updates with `omo update`). `rm ~/.local/bin/omo` removes the binary install; `bun remove -g omo-ai` (or `npm uninstall -g omo-ai`) removes the package install.
65
67
 
66
68
  ## Why OmO
67
69
 
package/README.ru.md CHANGED
@@ -1,6 +1,6 @@
1
1
  > [!NOTE]
2
2
  > **OmO Бета: OmO ❤️ Pi**
3
- > Установите `bun add -g omo-ai`: система памяти, CodeMode, подписки Anthropic. Всё включено.
3
+ > Установите одной командой `curl -fsSL https://get.omo.dev/install.sh | bash`: система памяти, CodeMode, подписки Anthropic. Всё включено.
4
4
  > [![OmO Herdr DAG - live OmO workflow DAGs in a Herdr side pane](./.github/assets/omo-herdr-dag.png)](https://github.com/jc01rho/omo-herdr-dag)
5
5
  > *Просто добавьте "mass ulw" в свой промпт - и вы мастер графовой инженерии. Мультимодельный ultracode с улучшенной системой памяти. (Правая панель - [omo-herdr-dag](https://github.com/jc01rho/omo-herdr-dag))*
6
6
 
@@ -52,11 +52,11 @@ OmO это одна команда `omo`, которая превращает в
52
52
  ## Установка
53
53
 
54
54
  ```bash
55
- bun add -g omo-ai
55
+ curl -fsSL https://get.omo.dev/install.sh | bash
56
56
  omo
57
57
  ```
58
58
 
59
- Нет bun? Подойдёт и `npm i -g omo-ai`. Пакет называется `omo-ai`, а пакет `omo` в npm не имеет к нам отношения.
59
+ В Windows запустите в PowerShell `irm https://get.omo.dev/install.ps1 | iex`. Скрипт ставит нативный `omo` для вашей ОС и процессора в `~/.local/bin` и сверяет его с контрольными суммами релиза. Если удобнее пакетный менеджер, `bun add -g omo-ai` (или `npm i -g omo-ai`) ставит тот же OmO. Пакет называется `omo-ai`, а пакет `omo` в npm не имеет к нам отношения. Windows CMD, исправление `PATH`, обновление и удаление описаны на [omo.dev/docs/install](https://omo.dev/docs/install).
60
60
 
61
61
  Откройте проект, запустите `omo` и опишите задачу. На этом настройка закончена.
62
62
 
package/README.zh-cn.md CHANGED
@@ -1,6 +1,6 @@
1
1
  > [!NOTE]
2
2
  > **OmO 测试版: OmO ❤️ Pi**
3
- > 使用 `bun add -g omo-ai` 安装。记忆系统、CodeMode、Anthropic 订阅,全部支持。
3
+ > 使用 `curl -fsSL https://get.omo.dev/install.sh | bash` 安装。记忆系统、CodeMode、Anthropic 订阅,全部支持。
4
4
  > [![OmO Herdr DAG - live OmO workflow DAGs in a Herdr side pane](./.github/assets/omo-herdr-dag.png)](https://github.com/jc01rho/omo-herdr-dag)
5
5
  > *只需在提示词中输入 "mass ulw" - 你就是图工程的大师。多模型 ultracode,搭配更出色的记忆系统。(右侧面板是 [omo-herdr-dag](https://github.com/jc01rho/omo-herdr-dag))*
6
6
 
@@ -52,11 +52,11 @@ OmO 就是一个 `omo` 命令,把你的 token 变成真正完成的工作:
52
52
  ## 安装
53
53
 
54
54
  ```bash
55
- bun add -g omo-ai
55
+ curl -fsSL https://get.omo.dev/install.sh | bash
56
56
  omo
57
57
  ```
58
58
 
59
- 没有 bun?用 `npm i -g omo-ai` 也可以。包名是 `omo-ai`;npm 上那个无关的 `omo` 包属于别人。
59
+ Windows 请在 PowerShell 中运行 `irm https://get.omo.dev/install.ps1 | iex`。脚本会为你的系统和 CPU 安装原生 `omo` 到 `~/.local/bin`,并用发布的校验和验证。想用包管理器的话,`bun add -g omo-ai`(或 `npm i -g omo-ai`)安装的是同一个 OmO。包名是 `omo-ai`;npm 上那个无关的 `omo` 包属于别人。Windows CMD、`PATH` 修复、更新和卸载见 [omo.dev/docs/install](https://omo.dev/docs/install)。
60
60
 
61
61
  打开项目,运行 `omo`,说出要做的事。设置就这么多。
62
62
 
package/dist/cli/index.js CHANGED
@@ -64,7 +64,7 @@ var package_default;
64
64
  var init_package = __esm(() => {
65
65
  package_default = {
66
66
  name: "oh-my-opencode",
67
- version: "5.1.1",
67
+ version: "5.1.3",
68
68
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
69
69
  main: "./dist/index.js",
70
70
  types: "dist/index.d.ts",
@@ -235,25 +235,14 @@ var init_package = __esm(() => {
235
235
  },
236
236
  homepage: "https://github.com/code-yeongyu/oh-my-openagent#readme",
237
237
  dependencies: {
238
- "@clack/prompts": "^1.8.1",
239
- "@modelcontextprotocol/sdk": "^1.30.0",
240
- "@opencode-ai/plugin": "1.18.31",
241
- "@opencode-ai/sdk": "1.18.31",
242
- "@opentui/core": "^0.5.11",
243
- "@opentui/keymap": "^0.5.11",
244
238
  "@opentui/solid": "^0.5.11",
245
- commander: "^15.0.0",
246
239
  "detect-libc": "^2.1.2",
247
- diff: "^9.0.0",
248
- "js-yaml": "^5.4.2",
249
- "jsonc-parser": "^3.3.1",
250
- picocolors: "^1.1.1",
251
- picomatch: "^4.0.7",
252
- "posthog-node": "^5.52.4",
253
240
  zod: "^4.6.5"
254
241
  },
255
242
  devDependencies: {
256
- "@code-yeongyu/senpi": "2026.9.29",
243
+ "@clack/prompts": "^1.8.1",
244
+ "@code-yeongyu/senpi": "2026.9.29-4",
245
+ "@modelcontextprotocol/sdk": "^1.30.0",
257
246
  "@oh-my-opencode/agents-md-core": "workspace:*",
258
247
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
259
248
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -287,36 +276,43 @@ var init_package = __esm(() => {
287
276
  "@oh-my-opencode/telemetry-core": "workspace:*",
288
277
  "@oh-my-opencode/tmux-core": "workspace:*",
289
278
  "@oh-my-opencode/utils": "workspace:*",
279
+ "@opencode-ai/plugin": "1.18.31",
280
+ "@opencode-ai/sdk": "1.18.31",
281
+ "@opentui/core": "^0.5.11",
282
+ "@opentui/keymap": "^0.5.11",
290
283
  "@types/js-yaml": "^4.0.9",
291
284
  "@types/picomatch": "^4.0.3",
292
285
  "@typescript/native-preview": "7.0.0-dev.20260707.2",
293
286
  "@xterm/addon-unicode11": "^0.9.0",
294
287
  "@xterm/xterm": "^6.0.0",
295
288
  "bun-types": "1.4.2",
289
+ commander: "^15.0.0",
290
+ diff: "^9.0.0",
291
+ "js-yaml": "^5.4.2",
292
+ "jsonc-parser": "^3.3.1",
296
293
  "node-pty": "^1.1.0",
297
294
  omowright: "github:code-yeongyu/omowright#293ca5002cbd4c8b0c104c5934683385ef7e0d3a",
295
+ picocolors: "^1.1.1",
296
+ picomatch: "^4.0.7",
297
+ "posthog-node": "^5.52.4",
298
298
  "puppeteer-core": "^25.11.0",
299
299
  typescript: "^7.0.2"
300
300
  },
301
301
  optionalDependencies: {
302
- "oh-my-opencode-darwin-arm64": "5.1.1",
303
- "oh-my-opencode-darwin-x64": "5.1.1",
304
- "oh-my-opencode-darwin-x64-baseline": "5.1.1",
305
- "oh-my-opencode-linux-arm64": "5.1.1",
306
- "oh-my-opencode-linux-arm64-musl": "5.1.1",
307
- "oh-my-opencode-linux-x64": "5.1.1",
308
- "oh-my-opencode-linux-x64-baseline": "5.1.1",
309
- "oh-my-opencode-linux-x64-musl": "5.1.1",
310
- "oh-my-opencode-linux-x64-musl-baseline": "5.1.1",
311
- "oh-my-opencode-windows-arm64": "5.1.1",
312
- "oh-my-opencode-windows-x64": "5.1.1",
313
- "oh-my-opencode-windows-x64-baseline": "5.1.1"
302
+ "oh-my-opencode-darwin-arm64": "5.1.3",
303
+ "oh-my-opencode-darwin-x64": "5.1.3",
304
+ "oh-my-opencode-darwin-x64-baseline": "5.1.3",
305
+ "oh-my-opencode-linux-arm64": "5.1.3",
306
+ "oh-my-opencode-linux-arm64-musl": "5.1.3",
307
+ "oh-my-opencode-linux-x64": "5.1.3",
308
+ "oh-my-opencode-linux-x64-baseline": "5.1.3",
309
+ "oh-my-opencode-linux-x64-musl": "5.1.3",
310
+ "oh-my-opencode-linux-x64-musl-baseline": "5.1.3",
311
+ "oh-my-opencode-windows-arm64": "5.1.3",
312
+ "oh-my-opencode-windows-x64": "5.1.3",
313
+ "oh-my-opencode-windows-x64-baseline": "5.1.3"
314
314
  },
315
315
  overrides: {
316
- "@earendil-works/pi-agent-core": "0.84.2",
317
- "@earendil-works/pi-ai": "0.84.2",
318
- "@earendil-works/pi-coding-agent": "0.84.2",
319
- "@earendil-works/pi-tui": "0.84.2",
320
316
  hono: "^4.13.8",
321
317
  "@hono/node-server": "2.1.1",
322
318
  "express-rate-limit": "^8.7.0",
@@ -89024,7 +89020,7 @@ var package_default2;
89024
89020
  var init_package2 = __esm(() => {
89025
89021
  package_default2 = {
89026
89022
  name: "@oh-my-opencode/omo-codex",
89027
- version: "5.1.1",
89023
+ version: "5.1.3",
89028
89024
  type: "module",
89029
89025
  private: true,
89030
89026
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
@@ -106457,15 +106453,10 @@ async function checkDeprecatedReasoningKeys() {
106457
106453
  }
106458
106454
 
106459
106455
  // packages/omo-opencode/src/cli/doctor/checks/dependencies.ts
106460
- init_src();
106461
106456
  import { existsSync as existsSync55 } from "fs";
106462
- import { createRequire as createRequire2 } from "module";
106457
+ import { createRequire as createRequire3 } from "module";
106463
106458
  import { homedir as homedir20 } from "os";
106464
- import { dirname as dirname33, join as join88 } from "path";
106465
-
106466
- // packages/omo-opencode/src/hooks/comment-checker/downloader.ts
106467
- import { join as join87 } from "path";
106468
- import { homedir as homedir19, tmpdir as tmpdir4 } from "os";
106459
+ import { join as join89 } from "path";
106469
106460
  // packages/comment-checker-core/src/release.ts
106470
106461
  import { join as join85 } from "path";
106471
106462
  var COMMENT_CHECKER_RELEASE_VERSION = "0.8.0";
@@ -106492,12 +106483,45 @@ function isCachedCommentCheckerCurrent(cacheDir, readFile = (path) => readFileSy
106492
106483
  return false;
106493
106484
  }
106494
106485
  }
106486
+ // packages/comment-checker-core/src/package-binary.ts
106487
+ import { createRequire as createRequire2 } from "module";
106488
+ import { dirname as dirname33, join as join87 } from "path";
106489
+ var COMMENT_CHECKER_PACKAGE_NAME = "@code-yeongyu/comment-checker";
106490
+ function isModuleResolutionMiss(error) {
106491
+ return error instanceof Error || typeof error === "object" && error !== null && "name" in error && error.name === "ResolveMessage";
106492
+ }
106493
+ function findCommentCheckerPackageBinary(input) {
106494
+ const packageName = input.packageName ?? COMMENT_CHECKER_PACKAGE_NAME;
106495
+ const platformKey = `${input.platform ?? process.platform}-${input.arch ?? process.arch}`;
106496
+ const packageDir = dirname33(input.packageJsonPath);
106497
+ const candidates = [
106498
+ resolvePlatformPackageBinary(input.packageJsonPath, `${packageName}-${platformKey}`, input.binaryName),
106499
+ join87(packageDir, "vendor", platformKey, input.binaryName),
106500
+ join87(packageDir, "bin", input.binaryName)
106501
+ ];
106502
+ return candidates.find((candidate) => candidate !== null && input.existsSync(candidate)) ?? null;
106503
+ }
106504
+ function resolvePlatformPackageBinary(packageJsonPath, platformPackageName, binaryName) {
106505
+ try {
106506
+ const manifestPath = createRequire2(packageJsonPath).resolve(`${platformPackageName}/package.json`);
106507
+ return join87(dirname33(manifestPath), "bin", binaryName);
106508
+ } catch (error) {
106509
+ if (isModuleResolutionMiss(error))
106510
+ return null;
106511
+ throw error;
106512
+ }
106513
+ }
106514
+ // packages/omo-opencode/src/cli/doctor/checks/dependencies.ts
106515
+ init_src();
106516
+
106495
106517
  // packages/omo-opencode/src/hooks/comment-checker/downloader.ts
106518
+ import { join as join88 } from "path";
106519
+ import { homedir as homedir19, tmpdir as tmpdir4 } from "os";
106496
106520
  init_binary_downloader();
106497
106521
  init_logger2();
106498
106522
  init_plugin_identity();
106499
106523
  var DEBUG = process.env.COMMENT_CHECKER_DEBUG === "1";
106500
- var DEBUG_FILE = join87(tmpdir4(), "comment-checker-debug.log");
106524
+ var DEBUG_FILE = join88(tmpdir4(), "comment-checker-debug.log");
106501
106525
  function getCacheDir2() {
106502
106526
  return commentCheckerCacheDir({
106503
106527
  platform: process.platform,
@@ -106556,7 +106580,7 @@ async function getBinaryVersion(binary) {
106556
106580
  }
106557
106581
  }
106558
106582
  async function checkAstGrepCli() {
106559
- const runtimeDir = astGrepRuntimeDir(join88(homedir20(), ".omo"));
106583
+ const runtimeDir = astGrepRuntimeDir(join89(homedir20(), ".omo"));
106560
106584
  const sgPath = findSgBinarySync({ runtimeDir });
106561
106585
  if (sgPath === null) {
106562
106586
  return {
@@ -106578,20 +106602,14 @@ async function checkAstGrepCli() {
106578
106602
  };
106579
106603
  }
106580
106604
  function resolveCommentCheckerPackageJson() {
106581
- const require2 = createRequire2(import.meta.url);
106605
+ const require2 = createRequire3(import.meta.url);
106582
106606
  return require2.resolve("@code-yeongyu/comment-checker/package.json");
106583
106607
  }
106584
- function findCommentCheckerPackageBinary(baseDirOverride, resolvePackageJsonPath = resolveCommentCheckerPackageJson) {
106608
+ function findCommentCheckerPackageBinary2(baseDirOverride, resolvePackageJsonPath = resolveCommentCheckerPackageJson) {
106585
106609
  const binaryName = process.platform === "win32" ? "comment-checker.exe" : "comment-checker";
106586
- const platformKey = `${process.platform}-${process.arch === "x64" ? "x64" : process.arch}`;
106587
106610
  try {
106588
- const packageDir = baseDirOverride ?? dirname33(resolvePackageJsonPath());
106589
- const vendorPath = join88(packageDir, "vendor", platformKey, binaryName);
106590
- if (existsSync55(vendorPath))
106591
- return vendorPath;
106592
- const binPath = join88(packageDir, "bin", binaryName);
106593
- if (existsSync55(binPath))
106594
- return binPath;
106611
+ const packageJsonPath = baseDirOverride === undefined ? resolvePackageJsonPath() : join89(baseDirOverride, "package.json");
106612
+ return findCommentCheckerPackageBinary({ packageJsonPath, binaryName, existsSync: existsSync55 });
106595
106613
  } catch (error) {
106596
106614
  if (!(error instanceof Error) && !isModuleResolutionFailure(error))
106597
106615
  throw error;
@@ -106611,7 +106629,7 @@ async function checkCommentChecker() {
106611
106629
  };
106612
106630
  }
106613
106631
  const binaryCheck = await checkBinaryExists("comment-checker");
106614
- const resolvedPath = binaryCheck.exists ? binaryCheck.path : findCommentCheckerPackageBinary();
106632
+ const resolvedPath = binaryCheck.exists ? binaryCheck.path : findCommentCheckerPackageBinary2();
106615
106633
  if (!resolvedPath) {
106616
106634
  return {
106617
106635
  name: "Comment Checker",
@@ -106737,7 +106755,7 @@ async function getGhCliInfo(dependencies = {}) {
106737
106755
  init_zod();
106738
106756
  init_opencode_config_dir();
106739
106757
  import { existsSync as existsSync56, readFileSync as readFileSync38 } from "fs";
106740
- import { delimiter as delimiter3, dirname as dirname34, resolve as resolve23 } from "path";
106758
+ import { delimiter as delimiter3, dirname as dirname35, resolve as resolve23 } from "path";
106741
106759
  import { fileURLToPath as fileURLToPath7 } from "url";
106742
106760
 
106743
106761
  // packages/omo-opencode/src/mcp/cli-suffix.ts
@@ -106868,7 +106886,7 @@ var LSP_BOOTSTRAP_SCRIPT = [
106868
106886
  ].join(";");
106869
106887
  function getModuleDirectory(moduleUrl) {
106870
106888
  try {
106871
- return dirname34(fileURLToPath7(moduleUrl));
106889
+ return dirname35(fileURLToPath7(moduleUrl));
106872
106890
  } catch (error) {
106873
106891
  if (!(error instanceof Error))
106874
106892
  throw error;
@@ -106965,13 +106983,13 @@ function getInstalledLspServers(options = {}) {
106965
106983
  init_shared();
106966
106984
  import { existsSync as existsSync57, readFileSync as readFileSync39 } from "fs";
106967
106985
  import { homedir as homedir21 } from "os";
106968
- import { join as join89 } from "path";
106986
+ import { join as join90 } from "path";
106969
106987
  var BUILTIN_MCP_SERVERS = ["websearch", "context7", "grep_app", "lsp"];
106970
106988
  function getMcpConfigPaths() {
106971
106989
  return [
106972
- join89(homedir21(), ".claude", ".mcp.json"),
106973
- join89(process.cwd(), ".mcp.json"),
106974
- join89(process.cwd(), ".claude", ".mcp.json")
106990
+ join90(homedir21(), ".claude", ".mcp.json"),
106991
+ join90(process.cwd(), ".mcp.json"),
106992
+ join90(process.cwd(), ".claude", ".mcp.json")
106975
106993
  ];
106976
106994
  }
106977
106995
  function loadUserMcpConfig() {
@@ -107253,7 +107271,7 @@ init_src();
107253
107271
  import { existsSync as existsSync59 } from "fs";
107254
107272
  import { lstat as lstat16, readdir as readdir14, readFile as readFile30 } from "fs/promises";
107255
107273
  import { homedir as homedir23 } from "os";
107256
- import { basename as basename12, join as join90, resolve as resolve24 } from "path";
107274
+ import { basename as basename12, join as join91, resolve as resolve24 } from "path";
107257
107275
  // packages/omo-opencode/package.json
107258
107276
  var package_default3 = {
107259
107277
  name: "@oh-my-opencode/omo-opencode",
@@ -107301,7 +107319,6 @@ var package_default3 = {
107301
107319
  commander: "^15.0.0",
107302
107320
  "jsonc-parser": "^3.3.1",
107303
107321
  picocolors: "^1.1.1",
107304
- picomatch: "^4.0.7",
107305
107322
  zod: "^4.6.5"
107306
107323
  }
107307
107324
  };
@@ -107323,13 +107340,13 @@ var CODEX_BIN_NAMES = [
107323
107340
  "omo-git-bash-hook"
107324
107341
  ];
107325
107342
  async function gatherCodexSummary(deps = {}) {
107326
- const codexHome = resolve24(deps.codexHome ?? process.env.CODEX_HOME ?? join90(homedir23(), ".codex"));
107343
+ const codexHome = resolve24(deps.codexHome ?? process.env.CODEX_HOME ?? join91(homedir23(), ".codex"));
107327
107344
  const binDir = resolveCodexInstallerBinDir({ binDir: deps.binDir, codexHome, env: process.env });
107328
107345
  const detection = await (deps.detectCodexInstallation ?? detectCodexInstallation)();
107329
107346
  const pluginRoot = await resolveInstalledPluginRoot(codexHome);
107330
- const manifest = pluginRoot === null ? null : await readJson(join90(pluginRoot, ".codex-plugin", "plugin.json"));
107331
- const installSnapshot = pluginRoot === null ? null : await readJson(join90(pluginRoot, "lazycodex-install.json"));
107332
- const configPath = join90(codexHome, "config.toml");
107347
+ const manifest = pluginRoot === null ? null : await readJson(join91(pluginRoot, ".codex-plugin", "plugin.json"));
107348
+ const installSnapshot = pluginRoot === null ? null : await readJson(join91(pluginRoot, "lazycodex-install.json"));
107349
+ const configPath = join91(codexHome, "config.toml");
107333
107350
  const pluginVersion = stringField(manifest, "version");
107334
107351
  return {
107335
107352
  codexPath: detection.found && "path" in detection ? detection.path : null,
@@ -107386,7 +107403,7 @@ function buildCodexIssues(summary) {
107386
107403
  if (summary.pluginRoot === null) {
107387
107404
  issues.push({
107388
107405
  title: "OMO Codex plugin is not installed",
107389
- description: `Expected cached plugin at ${join90("plugins", "cache", MARKETPLACE_NAME, PLUGIN_NAME2, DEFAULT_PLUGIN_VERSION)} under CODEX_HOME.`,
107406
+ description: `Expected cached plugin at ${join91("plugins", "cache", MARKETPLACE_NAME, PLUGIN_NAME2, DEFAULT_PLUGIN_VERSION)} under CODEX_HOME.`,
107390
107407
  fix: "Run: npx lazycodex-ai install",
107391
107408
  severity: "error",
107392
107409
  affects: ["plugin loading"]
@@ -107451,12 +107468,12 @@ function buildCodexIssues(summary) {
107451
107468
  return issues;
107452
107469
  }
107453
107470
  async function resolveInstalledPluginRoot(codexHome) {
107454
- const pluginRoot = join90(codexHome, "plugins", "cache", MARKETPLACE_NAME, PLUGIN_NAME2);
107471
+ const pluginRoot = join91(codexHome, "plugins", "cache", MARKETPLACE_NAME, PLUGIN_NAME2);
107455
107472
  if (!existsSync59(pluginRoot))
107456
107473
  return null;
107457
107474
  const versions = await readdir14(pluginRoot, { withFileTypes: true });
107458
107475
  const candidates = versions.filter((entry) => entry.isDirectory()).map((entry) => entry.name).sort(compareVersionsDescending);
107459
- return candidates.length === 0 ? null : join90(pluginRoot, candidates[0] ?? DEFAULT_PLUGIN_VERSION);
107476
+ return candidates.length === 0 ? null : join91(pluginRoot, candidates[0] ?? DEFAULT_PLUGIN_VERSION);
107460
107477
  }
107461
107478
  async function readCodexConfigSummary(configPath) {
107462
107479
  if (!existsSync59(configPath)) {
@@ -107484,13 +107501,13 @@ async function readCodexConfigSummary(configPath) {
107484
107501
  async function readLinkedBins(binDir) {
107485
107502
  const linked = [];
107486
107503
  for (const name of CODEX_BIN_NAMES) {
107487
- if (await pathExists3(join90(binDir, process.platform === "win32" ? `${name}.cmd` : name)))
107504
+ if (await pathExists3(join91(binDir, process.platform === "win32" ? `${name}.cmd` : name)))
107488
107505
  linked.push(name);
107489
107506
  }
107490
107507
  return linked;
107491
107508
  }
107492
107509
  async function readLinkedAgents(codexHome) {
107493
- const agentsDir = join90(codexHome, "agents");
107510
+ const agentsDir = join91(codexHome, "agents");
107494
107511
  if (!existsSync59(agentsDir))
107495
107512
  return [];
107496
107513
  const entries = await readdir14(agentsDir, { withFileTypes: true });
@@ -107624,7 +107641,7 @@ function resolveLatestVersion(input) {
107624
107641
  init_src();
107625
107642
  import { readdir as readdir15, readFile as readFile31, stat as stat7 } from "fs/promises";
107626
107643
  import { homedir as homedir24 } from "os";
107627
- import { dirname as dirname35, isAbsolute as isAbsolute14, join as join91, relative as relative9, resolve as resolve25, sep as sep9 } from "path";
107644
+ import { dirname as dirname36, isAbsolute as isAbsolute14, join as join92, relative as relative9, resolve as resolve25, sep as sep9 } from "path";
107628
107645
  var CODEX_COMPONENTS_CHECK_ID = "codex-components";
107629
107646
  var CODEX_COMPONENTS_CHECK_NAME = "codex-components";
107630
107647
  var PLUGIN_DATA_DIR_NAME = "omo-sisyphuslabs";
@@ -107634,7 +107651,7 @@ async function checkCodexComponents(deps = {}) {
107634
107651
  const env = deps.env ?? process.env;
107635
107652
  const platform = deps.platform ?? process.platform;
107636
107653
  const arch = deps.arch ?? process.arch;
107637
- const codexHome = resolve25(deps.codexHome ?? env["CODEX_HOME"] ?? join91(homedir24(), ".codex"));
107654
+ const codexHome = resolve25(deps.codexHome ?? env["CODEX_HOME"] ?? join92(homedir24(), ".codex"));
107638
107655
  const summary = await gatherCodexSummary({ ...deps, codexHome });
107639
107656
  if (summary.pluginRoot === null) {
107640
107657
  return {
@@ -107659,7 +107676,7 @@ async function checkCodexComponents(deps = {}) {
107659
107676
  });
107660
107677
  }
107661
107678
  const runtimeSgDir = runtimeSgDirectory(codexHome, platform, arch);
107662
- const runtimeSgPath = join91(runtimeSgDir, sgBinaryName(platform));
107679
+ const runtimeSgPath = join92(runtimeSgDir, sgBinaryName(platform));
107663
107680
  const sg = findSgBinarySync({
107664
107681
  arch,
107665
107682
  env,
@@ -107698,7 +107715,7 @@ async function auditBundleTargets(pluginRoot) {
107698
107715
  const manifest = await readJson2(manifestPath);
107699
107716
  if (manifest === null || !isRecord18(manifest["mcpServers"]))
107700
107717
  continue;
107701
- const manifestRoot = dirname35(manifestPath);
107718
+ const manifestRoot = dirname36(manifestPath);
107702
107719
  const isRootManifest = resolve25(manifestRoot) === resolve25(pluginRoot);
107703
107720
  for (const server of Object.values(manifest["mcpServers"])) {
107704
107721
  if (!isRecord18(server) || !Array.isArray(server["args"]))
@@ -107719,7 +107736,7 @@ async function auditBundleTargets(pluginRoot) {
107719
107736
  continue;
107720
107737
  const commands = [];
107721
107738
  collectHookCommands(manifest, commands);
107722
- const hookPluginRoot = dirname35(dirname35(hookManifestPath));
107739
+ const hookPluginRoot = dirname36(dirname36(hookManifestPath));
107723
107740
  for (const command of commands) {
107724
107741
  for (const relativePath of extractPluginRootPaths(command)) {
107725
107742
  referencedCount += 1;
@@ -107758,7 +107775,7 @@ async function classifyBundleTarget(bundleRoot, baseRoot, relativePath, allowEsc
107758
107775
  }
107759
107776
  async function findHookManifestPaths(root) {
107760
107777
  const paths = await findManifestPaths(root, "hooks.json");
107761
- return paths.filter((path) => dirname35(path).endsWith(`${sep9}hooks`));
107778
+ return paths.filter((path) => dirname36(path).endsWith(`${sep9}hooks`));
107762
107779
  }
107763
107780
  async function findManifestPaths(root, manifestName) {
107764
107781
  let entries;
@@ -107771,7 +107788,7 @@ async function findManifestPaths(root, manifestName) {
107771
107788
  for (const entry of entries) {
107772
107789
  if (entry.name === "node_modules" || entry.name === ".git")
107773
107790
  continue;
107774
- const entryPath = join91(root, entry.name);
107791
+ const entryPath = join92(root, entry.name);
107775
107792
  if (entry.isDirectory()) {
107776
107793
  paths.push(...await findManifestPaths(entryPath, manifestName));
107777
107794
  continue;
@@ -107815,18 +107832,18 @@ function isPluginRuntimePathArg(arg) {
107815
107832
  return normalized.endsWith(".js") && normalized.includes("/dist/") && (normalized.startsWith("./") || normalized.startsWith("../") || normalized.startsWith("components/") || normalized.startsWith("/") || isAbsolute14(arg));
107816
107833
  }
107817
107834
  function runtimeSgDirectory(codexHome, platform, arch) {
107818
- return join91(codexHome, "runtime", "ast-grep", runtimeSlug(platform, arch));
107835
+ return join92(codexHome, "runtime", "ast-grep", runtimeSlug(platform, arch));
107819
107836
  }
107820
107837
  function describeSgSource(sgPath, env, runtimeSgDir, platform) {
107821
107838
  const override = env[SG_PATH_ENV_KEY]?.trim();
107822
107839
  if (override !== undefined && override.length > 0 && sgPath === override)
107823
107840
  return `env override ${SG_PATH_ENV_KEY}`;
107824
- if (sgPath === join91(runtimeSgDir, sgBinaryName(platform)))
107841
+ if (sgPath === join92(runtimeSgDir, sgBinaryName(platform)))
107825
107842
  return "runtime dir";
107826
107843
  return "PATH";
107827
107844
  }
107828
107845
  async function readBootstrapStateSummary(codexHome) {
107829
- const statePath = join91(codexHome, "plugins", "data", PLUGIN_DATA_DIR_NAME, "bootstrap", "state.json");
107846
+ const statePath = join92(codexHome, "plugins", "data", PLUGIN_DATA_DIR_NAME, "bootstrap", "state.json");
107830
107847
  const raw = await readJson2(statePath);
107831
107848
  if (raw === null)
107832
107849
  return null;
@@ -107905,16 +107922,16 @@ function isRecord18(value) {
107905
107922
  import { existsSync as existsSync60 } from "fs";
107906
107923
  import { readFile as readFile32 } from "fs/promises";
107907
107924
  import { homedir as homedir25 } from "os";
107908
- import { join as join92, resolve as resolve26 } from "path";
107925
+ import { join as join93, resolve as resolve26 } from "path";
107909
107926
  var RUNTIME_WRAPPER_MARKER2 = "OMO_GENERATED_RUNTIME_WRAPPER";
107910
107927
  var CHECK_NAME = "codex-runtime-wrapper";
107911
107928
  var REINSTALL_COMMAND = "npx --yes lazycodex-ai@latest install --no-tui";
107912
107929
  async function checkCodexRuntimeWrapper(deps = {}) {
107913
- const codexHome = resolve26(deps.codexHome ?? process.env.CODEX_HOME ?? join92(homedir25(), ".codex"));
107930
+ const codexHome = resolve26(deps.codexHome ?? process.env.CODEX_HOME ?? join93(homedir25(), ".codex"));
107914
107931
  const binDir = resolveCodexInstallerBinDir({ binDir: deps.binDir, codexHome, env: process.env });
107915
107932
  const platform = deps.platform ?? process.platform;
107916
- const wrapperPath = join92(binDir, platform === "win32" ? "omo-agent-toolkit.cmd" : "omo-agent-toolkit");
107917
- const legacyWrapperPath = join92(binDir, platform === "win32" ? "omo.cmd" : "omo");
107933
+ const wrapperPath = join93(binDir, platform === "win32" ? "omo-agent-toolkit.cmd" : "omo-agent-toolkit");
107934
+ const legacyWrapperPath = join93(binDir, platform === "win32" ? "omo.cmd" : "omo");
107918
107935
  const [wrapper, legacyWrapper] = await Promise.all([readRuntimeWrapper(wrapperPath), readRuntimeWrapper(legacyWrapperPath)]);
107919
107936
  const issues = [];
107920
107937
  if (wrapper?.includes(RUNTIME_WRAPPER_MARKER2) === true) {
@@ -108450,12 +108467,12 @@ import {
108450
108467
  unlinkSync as unlinkSync9,
108451
108468
  writeFileSync as writeFileSync14
108452
108469
  } from "fs";
108453
- import { basename as basename13, dirname as dirname36, join as join95 } from "path";
108470
+ import { basename as basename13, dirname as dirname37, join as join96 } from "path";
108454
108471
 
108455
108472
  // packages/mcp-client-core/src/config-dir.ts
108456
108473
  import { existsSync as existsSync61, realpathSync as realpathSync10 } from "fs";
108457
108474
  import { homedir as homedir26 } from "os";
108458
- import { join as join93, resolve as resolve27 } from "path";
108475
+ import { join as join94, resolve as resolve27 } from "path";
108459
108476
  function resolveConfigPath2(pathValue) {
108460
108477
  const resolvedPath = resolve27(pathValue);
108461
108478
  if (!existsSync61(resolvedPath))
@@ -108473,13 +108490,13 @@ function getOpenCodeCliConfigDir(env = process.env) {
108473
108490
  if (customConfigDir) {
108474
108491
  return resolveConfigPath2(customConfigDir);
108475
108492
  }
108476
- const xdgConfigDir = env["XDG_CONFIG_HOME"]?.trim() || join93(homedir26(), ".config");
108477
- return resolveConfigPath2(join93(xdgConfigDir, "opencode"));
108493
+ const xdgConfigDir = env["XDG_CONFIG_HOME"]?.trim() || join94(homedir26(), ".config");
108494
+ return resolveConfigPath2(join94(xdgConfigDir, "opencode"));
108478
108495
  }
108479
108496
 
108480
108497
  // packages/mcp-client-core/src/mcp-oauth/storage-index.ts
108481
108498
  import { chmodSync as chmodSync4, existsSync as existsSync62, readFileSync as readFileSync41, renameSync as renameSync7, writeFileSync as writeFileSync13 } from "fs";
108482
- import { join as join94 } from "path";
108499
+ import { join as join95 } from "path";
108483
108500
  var INDEX_FILE_NAME = "index.json";
108484
108501
  function isTokenIndex(value) {
108485
108502
  if (typeof value !== "object" || value === null || Array.isArray(value))
@@ -108487,7 +108504,7 @@ function isTokenIndex(value) {
108487
108504
  return Object.values(value).every((entry) => typeof entry === "string");
108488
108505
  }
108489
108506
  function getIndexPath(storageDir) {
108490
- return join94(storageDir, INDEX_FILE_NAME);
108507
+ return join95(storageDir, INDEX_FILE_NAME);
108491
108508
  }
108492
108509
  function readTokenIndex(storageDir) {
108493
108510
  const indexPath = getIndexPath(storageDir);
@@ -108531,16 +108548,16 @@ function deleteTokenIndexEntry(storageDir, hash) {
108531
108548
  var STORAGE_DIR_NAME = "mcp-oauth";
108532
108549
  var LEGACY_STORAGE_FILE_NAME = "mcp-oauth.json";
108533
108550
  function getMcpOauthStorageDir() {
108534
- return join95(getOpenCodeCliConfigDir(), STORAGE_DIR_NAME);
108551
+ return join96(getOpenCodeCliConfigDir(), STORAGE_DIR_NAME);
108535
108552
  }
108536
108553
  function getMcpOauthServerHash(serverHost, resource) {
108537
108554
  return createHash7("sha256").update(buildKey(serverHost, resource)).digest("hex").slice(0, 32);
108538
108555
  }
108539
108556
  function getMcpOauthStoragePath(serverHost, resource) {
108540
- return join95(getMcpOauthStorageDir(), `${getMcpOauthServerHash(serverHost, resource)}.json`);
108557
+ return join96(getMcpOauthStorageDir(), `${getMcpOauthServerHash(serverHost, resource)}.json`);
108541
108558
  }
108542
108559
  function getLegacyStoragePath() {
108543
- return join95(getOpenCodeCliConfigDir(), LEGACY_STORAGE_FILE_NAME);
108560
+ return join96(getOpenCodeCliConfigDir(), LEGACY_STORAGE_FILE_NAME);
108544
108561
  }
108545
108562
  function normalizeHost2(serverHost) {
108546
108563
  let host = serverHost.trim();
@@ -108634,7 +108651,7 @@ function readLegacyStore() {
108634
108651
  }
108635
108652
  function writeTokenFile(filePath, token) {
108636
108653
  try {
108637
- const dir = dirname36(filePath);
108654
+ const dir = dirname37(filePath);
108638
108655
  if (!existsSync63(dir)) {
108639
108656
  mkdirSync17(dir, { recursive: true });
108640
108657
  }
@@ -108719,7 +108736,7 @@ function listTokensByHost(serverHost) {
108719
108736
  for (const [hash, indexedKey] of Object.entries(index)) {
108720
108737
  if (!indexedKey.startsWith(prefix))
108721
108738
  continue;
108722
- const indexedToken = readTokenFile(join95(getMcpOauthStorageDir(), `${hash}.json`));
108739
+ const indexedToken = readTokenFile(join96(getMcpOauthStorageDir(), `${hash}.json`));
108723
108740
  if (indexedToken)
108724
108741
  result[indexedKey] = indexedToken;
108725
108742
  }
@@ -108734,7 +108751,7 @@ function listAllTokens() {
108734
108751
  for (const entry of readdirSync13(dir, { withFileTypes: true })) {
108735
108752
  if (!entry.isFile() || !entry.name.endsWith(".json") || entry.name === "index.json")
108736
108753
  continue;
108737
- const token = readTokenFile(join95(dir, entry.name));
108754
+ const token = readTokenFile(join96(dir, entry.name));
108738
108755
  const hash = basename13(entry.name, ".json");
108739
108756
  if (token)
108740
108757
  result[index[hash] ?? hash] = token;