lazycodex-ai 5.0.0-beta.42 → 5.0.0-beta.44
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.
- package/README.ja.md +2 -2
- package/README.ko.md +4 -4
- package/README.md +4 -4
- package/README.ru.md +2 -2
- package/README.zh-cn.md +2 -2
- package/dist/cli/index.js +389 -310
- package/dist/cli-node/index.js +389 -310
- package/package.json +3 -1
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
- package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
- package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
- package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/rules/package.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
- package/packages/omo-codex/plugin/hooks/subagent-stop-checking-ulw-execute-continuation.json +1 -1
- package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/package-lock.json +12 -12
- package/packages/omo-codex/plugin/package.json +1 -1
- package/packages/omo-codex/plugin/test/sync-skills-codex-compatibility.test.mjs +47 -2
- package/packages/omo-codex/plugin/test/sync-skills.test.mjs +4 -0
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +32 -50
- package/packages/shared-skills/skill-source-filter.d.ts +16 -0
- package/packages/shared-skills/skill-source-filter.mjs +44 -0
package/dist/cli/index.js
CHANGED
|
@@ -54,7 +54,7 @@ var package_default;
|
|
|
54
54
|
var init_package = __esm(() => {
|
|
55
55
|
package_default = {
|
|
56
56
|
name: "oh-my-opencode",
|
|
57
|
-
version: "5.0.0-beta.
|
|
57
|
+
version: "5.0.0-beta.44",
|
|
58
58
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
59
59
|
main: "./dist/index.js",
|
|
60
60
|
types: "dist/index.d.ts",
|
|
@@ -144,6 +144,7 @@ var init_package = __esm(() => {
|
|
|
144
144
|
"packages/omo-codex/plugin/components/telemetry/dist/cli.js",
|
|
145
145
|
"packages/omo-codex/plugin/components/ultrawork/dist/cli.js",
|
|
146
146
|
"packages/omo-codex/plugin/components/ulw-loop/dist/cli.js",
|
|
147
|
+
"packages/prompts-core/prompts/ultrawork/codex.md",
|
|
147
148
|
"packages/omo-codex/plugin/.codex-plugin",
|
|
148
149
|
"!packages/omo-codex/plugin/node_modules",
|
|
149
150
|
"!packages/omo-codex/plugin/**/node_modules",
|
|
@@ -186,14 +187,14 @@ var init_package = __esm(() => {
|
|
|
186
187
|
prepare: "bun run build",
|
|
187
188
|
postinstall: "node postinstall.mjs",
|
|
188
189
|
prepublishOnly: "bun run clean && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && bun run build",
|
|
189
|
-
"test:model-capabilities": "bun test packages/model-core/src/model-capability-aliases.test.ts packages/model-core/src/model-capability-guardrails.test.ts packages/model-core/src/model-capabilities.test.ts packages/omo-opencode/src/cli/doctor/checks/model-resolution.test.ts --bail",
|
|
190
|
+
"test:model-capabilities": "bun test --timeout 20000 packages/model-core/src/model-capability-aliases.test.ts packages/model-core/src/model-capability-guardrails.test.ts packages/model-core/src/model-capabilities.test.ts packages/omo-opencode/src/cli/doctor/checks/model-resolution.test.ts --bail",
|
|
190
191
|
typecheck: "tsgo --noEmit && bun run typecheck:script && bun run typecheck:packages",
|
|
191
192
|
"typecheck:packages": "tsgo --noEmit -p packages/rules-engine/tsconfig.json && tsgo --noEmit -p packages/delegate-core/tsconfig.json && tsgo --noEmit -p packages/mcp-stdio-core/tsconfig.json && tsgo --noEmit -p packages/mcp-client-core/tsconfig.json && tsgo --noEmit -p packages/git-bash-mcp/tsconfig.json && tsgo --noEmit -p packages/ast-grep-mcp/tsconfig.json && tsgo --noEmit -p packages/lsp-core/tsconfig.json && tsgo --noEmit -p packages/utils/tsconfig.json && tsgo --noEmit -p packages/model-core/tsconfig.json && tsgo --noEmit -p packages/omo-config-core/tsconfig.json && tsgo --noEmit -p packages/prompts-core/tsconfig.json && tsgo --noEmit -p packages/comment-checker-core/tsconfig.json && tsgo --noEmit -p packages/hashline-core/tsconfig.json && tsgo --noEmit -p packages/tmux-core/tsconfig.json && tsgo --noEmit -p packages/team-core/tsconfig.json && tsgo --noEmit -p packages/openclaw-core/tsconfig.json && tsgo --noEmit -p packages/boulder-state/tsconfig.json && tsgo --noEmit -p packages/memory-core/tsconfig.json && tsgo --noEmit -p packages/telemetry-core/tsconfig.json && tsgo --noEmit -p packages/claude-code-compat-core/tsconfig.json && tsgo --noEmit -p packages/skills-loader-core/tsconfig.json && tsgo --noEmit -p packages/agents-md-core/tsconfig.json && tsgo --noEmit -p packages/omo-codex/plugin/shared/tsconfig.json && tsgo --noEmit -p packages/omo-codex/tsconfig.json && tsgo --noEmit -p packages/omo-senpi/tsconfig.json && tsgo --noEmit -p packages/senpi-task/tsconfig.json && tsgo --noEmit -p packages/pi-goal/tsconfig.json && tsgo --noEmit -p packages/pi-webfetch/tsconfig.json && tsgo --noEmit -p packages/omo-opencode/tsconfig.json && tsgo --noEmit -p packages/omo-native/tsconfig.json",
|
|
192
193
|
"typecheck:script": "tsgo --noEmit -p script/tsconfig.json",
|
|
193
|
-
test: "bun test",
|
|
194
|
-
"test:codex": "bun run build:codex-install && bun run build:git-bash-mcp && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && npm --prefix packages/lsp-tools-mcp test && npm --prefix packages/omo-codex/plugin ci && npm --prefix packages/omo-codex/plugin/components/ulw-loop test && bun run --cwd packages/omo-codex/plugin build && node scripts/check-third-party-notices.mjs --ship && bun test packages/omo-opencode/src/cli/cli-installer.platform.test.ts packages/omo-codex/src/install/codex-cache.test.ts packages/omo-codex/src/install/codex-cleanup.test.ts packages/omo-codex/src/install/codex-config-agent-cleanup.test.ts packages/omo-codex/src/install/codex-config-autonomous-features.test.ts packages/omo-codex/src/install/codex-config-reasoning.test.ts packages/omo-codex/src/install/codex-config-toml.test.ts packages/omo-codex/src/install/codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex.test.ts packages/omo-codex/src/install/install-codex-packaged.test.ts packages/omo-codex/src/install/link-cached-plugin-agents.test.ts packages/omo-codex/src/**/*.test.ts packages/utils/src/jsonc-parser.test.ts packages/utils/src/frontmatter.test.ts packages/hashline-core/src/hash-computation.test.ts packages/hashline-core/src/smoke-untested-modules.test.ts packages/rules-engine/src/index.test.ts packages/rules-engine/src/security-boundary.test.ts packages/agents-md-core/src/injector.test.ts packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts && node --test packages/omo-codex/plugin/test/*.test.mjs packages/omo-codex/scripts/install-cache-copy.test.mjs packages/omo-codex/scripts/install-cli-args.test.mjs packages/omo-codex/scripts/install-delegated-command.test.mjs packages/omo-codex/scripts/install-config-autonomous-features.test.mjs packages/omo-codex/scripts/install-config-autonomous.test.mjs packages/omo-codex/scripts/install-config-reasoning.test.mjs packages/omo-codex/scripts/install-config.test.mjs packages/omo-codex/scripts/install-hook-targets.test.mjs packages/omo-codex/scripts/install-project-local-cleanup.test.mjs packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs packages/omo-codex/scripts/install-local-entrypoint.test.mjs packages/omo-codex/scripts/install-local-git-bash-preflight.test.mjs packages/omo-codex/scripts/install-local.test.mjs packages/omo-codex/scripts/install-marketplace-cache.test.mjs packages/omo-codex/scripts/install-mcp-context7-runtime.test.mjs packages/omo-codex/scripts/install-mcp-runtime.test.mjs packages/omo-codex/scripts/install-packaged-local.test.mjs packages/omo-codex/scripts/install-generated-bundle.test.mjs packages/omo-codex/scripts/install-agent-links.test.mjs packages/omo-codex/scripts/install-bin-links.test.mjs",
|
|
194
|
+
test: "bun test --timeout 20000",
|
|
195
|
+
"test:codex": "bun run build:codex-install && bun run build:git-bash-mcp && bun run build:lsp-tools-mcp && bun run build:lsp-daemon && npm --prefix packages/lsp-tools-mcp test && npm --prefix packages/omo-codex/plugin ci && npm --prefix packages/omo-codex/plugin/components/ulw-loop test && bun run --cwd packages/omo-codex/plugin build && node scripts/check-third-party-notices.mjs --ship && bun test --timeout 20000 packages/omo-opencode/src/cli/cli-installer.platform.test.ts packages/omo-codex/src/install/codex-cache.test.ts packages/omo-codex/src/install/codex-cleanup.test.ts packages/omo-codex/src/install/codex-config-agent-cleanup.test.ts packages/omo-codex/src/install/codex-config-autonomous-features.test.ts packages/omo-codex/src/install/codex-config-reasoning.test.ts packages/omo-codex/src/install/codex-config-toml.test.ts packages/omo-codex/src/install/codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex-project-local-cleanup.test.ts packages/omo-codex/src/install/install-codex.test.ts packages/omo-codex/src/install/install-codex-packaged.test.ts packages/omo-codex/src/install/link-cached-plugin-agents.test.ts packages/omo-codex/src/**/*.test.ts packages/utils/src/jsonc-parser.test.ts packages/utils/src/frontmatter.test.ts packages/hashline-core/src/hash-computation.test.ts packages/hashline-core/src/smoke-untested-modules.test.ts packages/rules-engine/src/index.test.ts packages/rules-engine/src/security-boundary.test.ts packages/agents-md-core/src/injector.test.ts packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts && node --test packages/omo-codex/plugin/test/*.test.mjs packages/omo-codex/scripts/install-cache-copy.test.mjs packages/omo-codex/scripts/install-cli-args.test.mjs packages/omo-codex/scripts/install-delegated-command.test.mjs packages/omo-codex/scripts/install-config-autonomous-features.test.mjs packages/omo-codex/scripts/install-config-autonomous.test.mjs packages/omo-codex/scripts/install-config-reasoning.test.mjs packages/omo-codex/scripts/install-config.test.mjs packages/omo-codex/scripts/install-hook-targets.test.mjs packages/omo-codex/scripts/install-project-local-cleanup.test.mjs packages/omo-codex/scripts/install-lazycodex-version-stamp.test.mjs packages/omo-codex/scripts/install-local-entrypoint.test.mjs packages/omo-codex/scripts/install-local-git-bash-preflight.test.mjs packages/omo-codex/scripts/install-local.test.mjs packages/omo-codex/scripts/install-marketplace-cache.test.mjs packages/omo-codex/scripts/install-mcp-context7-runtime.test.mjs packages/omo-codex/scripts/install-mcp-runtime.test.mjs packages/omo-codex/scripts/install-packaged-local.test.mjs packages/omo-codex/scripts/install-generated-bundle.test.mjs packages/omo-codex/scripts/install-agent-links.test.mjs packages/omo-codex/scripts/install-bin-links.test.mjs",
|
|
195
196
|
"test:fast": "bun run script/test-fast.ts",
|
|
196
|
-
"test:senpi": "bun run build:senpi-plugin && tsgo --noEmit -p packages/omo-senpi/tsconfig.json && bun test packages/omo-senpi && bun test ./.agents/skills/senpi-qa/scripts/resolve-evidence-dir.test.mjs",
|
|
197
|
+
"test:senpi": "bun run build:senpi-plugin && tsgo --noEmit -p packages/omo-senpi/tsconfig.json && bun test --timeout 20000 packages/omo-senpi && bun test ./.agents/skills/senpi-qa/scripts/resolve-evidence-dir.test.mjs",
|
|
197
198
|
"test:windows-codex": "bun run test:codex",
|
|
198
199
|
"build:git-bash-mcp": "bun run --cwd packages/git-bash-mcp build",
|
|
199
200
|
"build:ast-grep-mcp": "bun run --cwd packages/ast-grep-mcp build"
|
|
@@ -237,7 +238,7 @@ var init_package = __esm(() => {
|
|
|
237
238
|
zod: "^4.4.3"
|
|
238
239
|
},
|
|
239
240
|
devDependencies: {
|
|
240
|
-
"@code-yeongyu/senpi": "2026.9.
|
|
241
|
+
"@code-yeongyu/senpi": "2026.9.5-3",
|
|
241
242
|
"@oh-my-opencode/agents-md-core": "workspace:*",
|
|
242
243
|
"@oh-my-opencode/ast-grep-mcp": "workspace:*",
|
|
243
244
|
"@oh-my-opencode/boulder-state": "workspace:*",
|
|
@@ -278,18 +279,18 @@ var init_package = __esm(() => {
|
|
|
278
279
|
typescript: "^7.0.2"
|
|
279
280
|
},
|
|
280
281
|
optionalDependencies: {
|
|
281
|
-
"oh-my-opencode-darwin-arm64": "5.0.0-beta.
|
|
282
|
-
"oh-my-opencode-darwin-x64": "5.0.0-beta.
|
|
283
|
-
"oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.
|
|
284
|
-
"oh-my-opencode-linux-arm64": "5.0.0-beta.
|
|
285
|
-
"oh-my-opencode-linux-arm64-musl": "5.0.0-beta.
|
|
286
|
-
"oh-my-opencode-linux-x64": "5.0.0-beta.
|
|
287
|
-
"oh-my-opencode-linux-x64-baseline": "5.0.0-beta.
|
|
288
|
-
"oh-my-opencode-linux-x64-musl": "5.0.0-beta.
|
|
289
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.
|
|
290
|
-
"oh-my-opencode-windows-arm64": "5.0.0-beta.
|
|
291
|
-
"oh-my-opencode-windows-x64": "5.0.0-beta.
|
|
292
|
-
"oh-my-opencode-windows-x64-baseline": "5.0.0-beta.
|
|
282
|
+
"oh-my-opencode-darwin-arm64": "5.0.0-beta.44",
|
|
283
|
+
"oh-my-opencode-darwin-x64": "5.0.0-beta.44",
|
|
284
|
+
"oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.44",
|
|
285
|
+
"oh-my-opencode-linux-arm64": "5.0.0-beta.44",
|
|
286
|
+
"oh-my-opencode-linux-arm64-musl": "5.0.0-beta.44",
|
|
287
|
+
"oh-my-opencode-linux-x64": "5.0.0-beta.44",
|
|
288
|
+
"oh-my-opencode-linux-x64-baseline": "5.0.0-beta.44",
|
|
289
|
+
"oh-my-opencode-linux-x64-musl": "5.0.0-beta.44",
|
|
290
|
+
"oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.44",
|
|
291
|
+
"oh-my-opencode-windows-arm64": "5.0.0-beta.44",
|
|
292
|
+
"oh-my-opencode-windows-x64": "5.0.0-beta.44",
|
|
293
|
+
"oh-my-opencode-windows-x64-baseline": "5.0.0-beta.44"
|
|
293
294
|
},
|
|
294
295
|
overrides: {
|
|
295
296
|
"@earendil-works/pi-agent-core": "0.84.2",
|
|
@@ -7126,7 +7127,7 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
7126
7127
|
fallbackChain: [
|
|
7127
7128
|
{
|
|
7128
7129
|
providers: ["anthropic", "github-copilot", "opencode"],
|
|
7129
|
-
model: "claude-fable-5",
|
|
7130
|
+
model: "claude-fable-5-1",
|
|
7130
7131
|
variant: "xhigh"
|
|
7131
7132
|
},
|
|
7132
7133
|
{
|
|
@@ -7152,10 +7153,9 @@ var init_agent_model_requirements = __esm(() => {
|
|
|
7152
7153
|
},
|
|
7153
7154
|
momus: {
|
|
7154
7155
|
fallbackChain: [
|
|
7155
|
-
{ providers: ["openai", "openai-codex"], model: "gpt-
|
|
7156
|
-
{ providers: ["github-copilot"], model: "gpt-
|
|
7157
|
-
{ providers: ["openai", "openai-codex", "opencode"], model: "gpt-
|
|
7158
|
-
{ providers: ["github-copilot"], model: "gpt-5.6-sol", variant: "high" },
|
|
7156
|
+
{ providers: ["openai", "openai-codex"], model: "gpt-6-astra", variant: "xhigh" },
|
|
7157
|
+
{ providers: ["github-copilot"], model: "gpt-6-astra", variant: "high" },
|
|
7158
|
+
{ providers: ["openai", "openai-codex", "opencode"], model: "gpt-6-astra", variant: "high" },
|
|
7159
7159
|
{
|
|
7160
7160
|
providers: ["anthropic", "github-copilot", "opencode"],
|
|
7161
7161
|
model: "claude-opus-5",
|
|
@@ -7207,6 +7207,11 @@ var init_category_model_requirements = __esm(() => {
|
|
|
7207
7207
|
CATEGORY_MODEL_REQUIREMENTS = {
|
|
7208
7208
|
"visual-engineering": {
|
|
7209
7209
|
fallbackChain: [
|
|
7210
|
+
{
|
|
7211
|
+
providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
|
|
7212
|
+
model: "claude-fable-5-1",
|
|
7213
|
+
variant: "max"
|
|
7214
|
+
},
|
|
7210
7215
|
{
|
|
7211
7216
|
providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
|
|
7212
7217
|
model: "claude-opus-5",
|
|
@@ -7216,17 +7221,14 @@ var init_category_model_requirements = __esm(() => {
|
|
|
7216
7221
|
providers: ["kimi-for-coding", "moonshotai", "opencode-go", "opencode"],
|
|
7217
7222
|
model: "kimi-k3",
|
|
7218
7223
|
variant: "max"
|
|
7219
|
-
},
|
|
7220
|
-
{ providers: ["zai-coding-plan", "opencode-go"], model: "glm-5.2", variant: "max" },
|
|
7221
|
-
{
|
|
7222
|
-
providers: ["openai", "openai-codex", "github-copilot", "opencode"],
|
|
7223
|
-
model: "gpt-5.6-sol",
|
|
7224
|
-
variant: "medium"
|
|
7225
7224
|
}
|
|
7226
7225
|
]
|
|
7227
7226
|
},
|
|
7228
7227
|
ultrabrain: {
|
|
7229
7228
|
fallbackChain: [
|
|
7229
|
+
{ providers: ["openai", "openai-codex"], model: "gpt-6-astra", variant: "max" },
|
|
7230
|
+
{ providers: ["github-copilot"], model: "gpt-6-astra", variant: "max" },
|
|
7231
|
+
{ providers: ["openai", "openai-codex", "opencode"], model: "gpt-6-astra", variant: "max" },
|
|
7230
7232
|
{ providers: ["openai", "openai-codex"], model: "gpt-5.6-sol", variant: "max" },
|
|
7231
7233
|
{ providers: ["github-copilot"], model: "gpt-5.6-sol", variant: "max" },
|
|
7232
7234
|
{ providers: ["openai", "openai-codex", "opencode"], model: "gpt-5.6-sol", variant: "max" }
|
|
@@ -7234,6 +7236,11 @@ var init_category_model_requirements = __esm(() => {
|
|
|
7234
7236
|
},
|
|
7235
7237
|
deep: {
|
|
7236
7238
|
fallbackChain: [
|
|
7239
|
+
{
|
|
7240
|
+
providers: ["openai", "openai-codex", "github-copilot", "opencode"],
|
|
7241
|
+
model: "gpt-6-astra",
|
|
7242
|
+
variant: "high"
|
|
7243
|
+
},
|
|
7237
7244
|
{
|
|
7238
7245
|
providers: ["openai", "openai-codex", "github-copilot", "opencode"],
|
|
7239
7246
|
model: "gpt-5.6-sol",
|
|
@@ -7245,8 +7252,8 @@ var init_category_model_requirements = __esm(() => {
|
|
|
7245
7252
|
fallbackChain: [
|
|
7246
7253
|
{
|
|
7247
7254
|
providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
|
|
7248
|
-
model: "claude-fable-5",
|
|
7249
|
-
variant: "
|
|
7255
|
+
model: "claude-fable-5-1",
|
|
7256
|
+
variant: "max"
|
|
7250
7257
|
},
|
|
7251
7258
|
{
|
|
7252
7259
|
providers: ["kimi-for-coding", "moonshotai", "opencode-go", "opencode"],
|
|
@@ -7304,6 +7311,11 @@ var init_category_model_requirements = __esm(() => {
|
|
|
7304
7311
|
},
|
|
7305
7312
|
"unspecified-high": {
|
|
7306
7313
|
fallbackChain: [
|
|
7314
|
+
{
|
|
7315
|
+
providers: ["openai", "openai-codex", "github-copilot", "opencode"],
|
|
7316
|
+
model: "gpt-6-astra",
|
|
7317
|
+
variant: "high"
|
|
7318
|
+
},
|
|
7307
7319
|
{
|
|
7308
7320
|
providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
|
|
7309
7321
|
model: "claude-opus-5",
|
|
@@ -7319,17 +7331,16 @@ var init_category_model_requirements = __esm(() => {
|
|
|
7319
7331
|
},
|
|
7320
7332
|
writing: {
|
|
7321
7333
|
fallbackChain: [
|
|
7322
|
-
{
|
|
7323
|
-
providers: ["kimi-for-coding", "moonshotai", "opencode-go", "opencode"],
|
|
7324
|
-
model: "kimi-k3",
|
|
7325
|
-
variant: "low"
|
|
7326
|
-
},
|
|
7327
7334
|
{
|
|
7328
7335
|
providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
|
|
7329
|
-
model: "claude-
|
|
7330
|
-
variant: "
|
|
7336
|
+
model: "claude-fable-5-1",
|
|
7337
|
+
variant: "medium"
|
|
7331
7338
|
},
|
|
7332
|
-
{
|
|
7339
|
+
{
|
|
7340
|
+
providers: ["kimi-for-coding", "moonshotai", "opencode-go", "opencode"],
|
|
7341
|
+
model: "kimi-k3",
|
|
7342
|
+
variant: "max"
|
|
7343
|
+
}
|
|
7333
7344
|
]
|
|
7334
7345
|
}
|
|
7335
7346
|
};
|
|
@@ -7432,11 +7443,11 @@ var init_model_capability_aliases = __esm(() => {
|
|
|
7432
7443
|
EXACT_ALIAS_RULES_BY_MODEL = new Map(EXACT_ALIAS_RULES.map((rule) => [rule.aliasModelID, rule]));
|
|
7433
7444
|
PATTERN_ALIAS_RULES = [
|
|
7434
7445
|
{
|
|
7435
|
-
ruleID: "openai-gpt-
|
|
7436
|
-
description: "Normalizes OpenCode's OpenAI GPT
|
|
7446
|
+
ruleID: "openai-gpt-fast-service-tier-alias",
|
|
7447
|
+
description: "Normalizes OpenCode's OpenAI GPT fast service-tier IDs to canonical snapshot IDs.",
|
|
7437
7448
|
providerIDs: ["openai"],
|
|
7438
7449
|
allowedSubproviderHosts: ["vercel"],
|
|
7439
|
-
match: (normalizedModelID) => /^gpt-5\.6-(?:sol|terra|luna)-fast$/.test(normalizedModelID),
|
|
7450
|
+
match: (normalizedModelID) => /^(?:gpt-5\.6-(?:sol|terra|luna)|gpt-6-astra)-fast$/.test(normalizedModelID),
|
|
7440
7451
|
canonicalize: (normalizedModelID) => normalizedModelID.slice(0, -"-fast".length)
|
|
7441
7452
|
},
|
|
7442
7453
|
{
|
|
@@ -7576,6 +7587,14 @@ var init_model_capability_heuristics = __esm(() => {
|
|
|
7576
7587
|
reasoningEfforts: ["none", "minimal", "low", "medium", "high"],
|
|
7577
7588
|
supportsTemperature: false
|
|
7578
7589
|
},
|
|
7590
|
+
{
|
|
7591
|
+
family: "gpt-6",
|
|
7592
|
+
includes: ["gpt-6"],
|
|
7593
|
+
variants: ["low", "medium", "high", "xhigh", "max"],
|
|
7594
|
+
reasoningEfforts: ["low", "medium", "high", "xhigh", "max"],
|
|
7595
|
+
reasoningEffortAliases: { none: "low", minimal: "low" },
|
|
7596
|
+
supportsTemperature: false
|
|
7597
|
+
},
|
|
7579
7598
|
{
|
|
7580
7599
|
family: "gpt-5",
|
|
7581
7600
|
includes: ["gpt-5"],
|
|
@@ -7941,6 +7960,37 @@ var init_supplemental_entries = __esm(() => {
|
|
|
7941
7960
|
output: 262144
|
|
7942
7961
|
}
|
|
7943
7962
|
},
|
|
7963
|
+
"claude-fable-5-1": {
|
|
7964
|
+
id: "claude-fable-5-1",
|
|
7965
|
+
family: "claude-fable",
|
|
7966
|
+
reasoning: true,
|
|
7967
|
+
temperature: false,
|
|
7968
|
+
toolCall: true,
|
|
7969
|
+
modalities: {
|
|
7970
|
+
input: ["text", "image", "pdf"],
|
|
7971
|
+
output: ["text"]
|
|
7972
|
+
},
|
|
7973
|
+
limit: {
|
|
7974
|
+
context: 1e6,
|
|
7975
|
+
output: 128000
|
|
7976
|
+
}
|
|
7977
|
+
},
|
|
7978
|
+
"gpt-6-astra": {
|
|
7979
|
+
id: "gpt-6-astra",
|
|
7980
|
+
family: "gpt",
|
|
7981
|
+
reasoning: true,
|
|
7982
|
+
temperature: false,
|
|
7983
|
+
toolCall: true,
|
|
7984
|
+
modalities: {
|
|
7985
|
+
input: ["text", "image"],
|
|
7986
|
+
output: ["text"]
|
|
7987
|
+
},
|
|
7988
|
+
limit: {
|
|
7989
|
+
context: 1050000,
|
|
7990
|
+
input: 922000,
|
|
7991
|
+
output: 128000
|
|
7992
|
+
}
|
|
7993
|
+
},
|
|
7944
7994
|
"gpt-5.6-sol": {
|
|
7945
7995
|
id: "gpt-5.6-sol",
|
|
7946
7996
|
family: "gpt",
|
|
@@ -8016,8 +8066,8 @@ var init_supplemental_entries = __esm(() => {
|
|
|
8016
8066
|
output: ["text"]
|
|
8017
8067
|
},
|
|
8018
8068
|
limit: {
|
|
8019
|
-
context:
|
|
8020
|
-
input:
|
|
8069
|
+
context: 1050000,
|
|
8070
|
+
input: 922000,
|
|
8021
8071
|
output: 128000
|
|
8022
8072
|
}
|
|
8023
8073
|
},
|
|
@@ -8281,7 +8331,7 @@ function getOverride(modelID) {
|
|
|
8281
8331
|
function getProviderOverride(providerID, modelID) {
|
|
8282
8332
|
if (providerID.trim().toLowerCase() !== "github-copilot")
|
|
8283
8333
|
return;
|
|
8284
|
-
return
|
|
8334
|
+
return GITHUB_COPILOT_GPT_MODEL.test(normalizeLookupModelID2(modelID)) ? GITHUB_COPILOT_GPT_OVERRIDE : undefined;
|
|
8285
8335
|
}
|
|
8286
8336
|
function stripSameProviderPrefix(providerID, modelID) {
|
|
8287
8337
|
const prefix = `${providerID.trim()}/`;
|
|
@@ -8420,14 +8470,14 @@ function getModelCapabilities(input) {
|
|
|
8420
8470
|
}
|
|
8421
8471
|
};
|
|
8422
8472
|
}
|
|
8423
|
-
var MODEL_ID_OVERRIDES,
|
|
8473
|
+
var MODEL_ID_OVERRIDES, GITHUB_COPILOT_GPT_MODEL, GITHUB_COPILOT_GPT_OVERRIDE;
|
|
8424
8474
|
var init_get_model_capabilities = __esm(() => {
|
|
8425
8475
|
init_model_capability_aliases();
|
|
8426
8476
|
init_model_capability_heuristics();
|
|
8427
8477
|
init_model_string_parser();
|
|
8428
8478
|
MODEL_ID_OVERRIDES = {};
|
|
8429
|
-
|
|
8430
|
-
|
|
8479
|
+
GITHUB_COPILOT_GPT_MODEL = /(?:^|\/)gpt-[56](?:[.-]|$)/;
|
|
8480
|
+
GITHUB_COPILOT_GPT_OVERRIDE = {
|
|
8431
8481
|
variants: ["low", "medium", "high"],
|
|
8432
8482
|
reasoningEfforts: ["none", "minimal", "low", "medium", "high"]
|
|
8433
8483
|
};
|
|
@@ -8442,6 +8492,9 @@ var init_model_capabilities = __esm(() => {
|
|
|
8442
8492
|
// packages/model-core/src/context-limit-resolver.ts
|
|
8443
8493
|
var init_context_limit_resolver = () => {};
|
|
8444
8494
|
|
|
8495
|
+
// packages/model-core/src/context-overflow.ts
|
|
8496
|
+
var init_context_overflow = () => {};
|
|
8497
|
+
|
|
8445
8498
|
// packages/model-core/src/model-capabilities-snapshot.ts
|
|
8446
8499
|
function isRecord3(value) {
|
|
8447
8500
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
@@ -8578,6 +8631,7 @@ var init_src2 = __esm(() => {
|
|
|
8578
8631
|
init_runtime_fallback_model();
|
|
8579
8632
|
init_model_capabilities();
|
|
8580
8633
|
init_context_limit_resolver();
|
|
8634
|
+
init_context_overflow();
|
|
8581
8635
|
});
|
|
8582
8636
|
|
|
8583
8637
|
// packages/omo-opencode/src/shared/model-sanitizer.ts
|
|
@@ -8779,22 +8833,6 @@ var init_agent_display_names = __esm(() => {
|
|
|
8779
8833
|
"athena-junior (council)": "athena-junior"
|
|
8780
8834
|
};
|
|
8781
8835
|
});
|
|
8782
|
-
// packages/omo-opencode/src/tools/delegate-task/anthropic-categories.ts
|
|
8783
|
-
var UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND = `<Category_Context>
|
|
8784
|
-
You are working on tasks that don't fit specific categories but require substantial effort.
|
|
8785
|
-
</Category_Context>`, UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Use only when no specialist category fits and substantial effort spans systems/modules with broad impact. Use unspecified-low for contained moderate work.</Selection_Gate>`, ANTHROPIC_CATEGORIES;
|
|
8786
|
-
var init_anthropic_categories = __esm(() => {
|
|
8787
|
-
ANTHROPIC_CATEGORIES = [
|
|
8788
|
-
{
|
|
8789
|
-
name: "unspecified-high",
|
|
8790
|
-
config: { model: "anthropic/claude-opus-5", variant: "xhigh" },
|
|
8791
|
-
description: "Tasks that don't fit other categories, high effort required",
|
|
8792
|
-
callerGuidance: UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE,
|
|
8793
|
-
promptAppend: UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND
|
|
8794
|
-
}
|
|
8795
|
-
];
|
|
8796
|
-
});
|
|
8797
|
-
|
|
8798
8836
|
// packages/omo-opencode/src/tools/delegate-task/google-categories.ts
|
|
8799
8837
|
var VISUAL_CATEGORY_PROMPT_APPEND = `<Category_Context>
|
|
8800
8838
|
You are working on VISUAL/UI tasks.
|
|
@@ -8903,13 +8941,13 @@ var init_google_categories = __esm(() => {
|
|
|
8903
8941
|
GOOGLE_CATEGORIES = [
|
|
8904
8942
|
{
|
|
8905
8943
|
name: "visual-engineering",
|
|
8906
|
-
config: { model: "anthropic/claude-
|
|
8907
|
-
description: "
|
|
8944
|
+
config: { model: "anthropic/claude-fable-5-1", variant: "max" },
|
|
8945
|
+
description: "Visual design, UI/UX, frontend, styling, animation, and design systems",
|
|
8908
8946
|
promptAppend: VISUAL_CATEGORY_PROMPT_APPEND
|
|
8909
8947
|
},
|
|
8910
8948
|
{
|
|
8911
8949
|
name: "artistry",
|
|
8912
|
-
config: { model: "anthropic/claude-fable-5", variant: "
|
|
8950
|
+
config: { model: "anthropic/claude-fable-5-1", variant: "max" },
|
|
8913
8951
|
description: "Complex problem-solving with unconventional, creative approaches - beyond standard patterns",
|
|
8914
8952
|
promptAppend: ARTISTRY_CATEGORY_PROMPT_APPEND
|
|
8915
8953
|
}
|
|
@@ -8946,7 +8984,7 @@ var init_kimi_categories = __esm(() => {
|
|
|
8946
8984
|
KIMI_CATEGORIES = [
|
|
8947
8985
|
{
|
|
8948
8986
|
name: "writing",
|
|
8949
|
-
config: { model: "
|
|
8987
|
+
config: { model: "anthropic/claude-fable-5-1", variant: "medium" },
|
|
8950
8988
|
description: "Documentation, prose, technical writing",
|
|
8951
8989
|
promptAppend: WRITING_CATEGORY_PROMPT_APPEND
|
|
8952
8990
|
}
|
|
@@ -8965,16 +9003,58 @@ function isGpt5_6Model(model) {
|
|
|
8965
9003
|
const modelName = extractModelName2(model).toLowerCase();
|
|
8966
9004
|
return modelName.includes("gpt-5.6") || modelName.includes("gpt-5-6");
|
|
8967
9005
|
}
|
|
9006
|
+
function isGpt6Model(model) {
|
|
9007
|
+
const modelName = extractModelName2(model).toLowerCase();
|
|
9008
|
+
return modelName.includes("gpt-6");
|
|
9009
|
+
}
|
|
8968
9010
|
var init_types = () => {};
|
|
8969
9011
|
|
|
8970
9012
|
// packages/omo-opencode/src/tools/delegate-task/openai-categories.ts
|
|
9013
|
+
function resolveUltrabrainCategoryPromptAppend(model) {
|
|
9014
|
+
if (model && isGpt6Model(model)) {
|
|
9015
|
+
return ULTRABRAIN_CATEGORY_PROMPT_APPEND_GPT_6_ASTRA;
|
|
9016
|
+
}
|
|
9017
|
+
return ULTRABRAIN_CATEGORY_PROMPT_APPEND;
|
|
9018
|
+
}
|
|
8971
9019
|
function resolveDeepCategoryPromptAppend(model) {
|
|
9020
|
+
if (model && isGpt6Model(model)) {
|
|
9021
|
+
return DEEP_CATEGORY_PROMPT_APPEND_GPT_6_ASTRA;
|
|
9022
|
+
}
|
|
8972
9023
|
if (model && (isGpt5_5Model(model) || isGpt5_6Model(model))) {
|
|
8973
9024
|
return DEEP_CATEGORY_PROMPT_APPEND_GPT_5_5;
|
|
8974
9025
|
}
|
|
8975
9026
|
return DEEP_CATEGORY_PROMPT_APPEND;
|
|
8976
9027
|
}
|
|
8977
|
-
|
|
9028
|
+
function resolveUnspecifiedHighCategoryPromptAppend(model) {
|
|
9029
|
+
if (model && isGpt6Model(model)) {
|
|
9030
|
+
return UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND_GPT_6_ASTRA;
|
|
9031
|
+
}
|
|
9032
|
+
return UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND;
|
|
9033
|
+
}
|
|
9034
|
+
var ULTRABRAIN_CATEGORY_PROMPT_APPEND_GPT_6_ASTRA = `<Category_Context name="ultrabrain">
|
|
9035
|
+
The orchestrator routed this task here because it is the one genuinely hard, logic-heavy problem in its plan, and it sent a goal rather than steps: choose the approach yourself, and let correctness outrank speed, brevity, and token cost.
|
|
9036
|
+
|
|
9037
|
+
Success means:
|
|
9038
|
+
- every load-bearing claim cites evidence from this turn: a file and line read, a command run, a test executed;
|
|
9039
|
+
- every executable claim was executed: a proposed fix runs, an algorithm passes the boundary cases you enumerated, a verdict on a diff names the failing line;
|
|
9040
|
+
- the conclusion survived your own attempt to break it, and the answer names the strongest counter-case you looked for;
|
|
9041
|
+
- rejected alternatives carry the reason that decided against them, and open assumptions are stated so the orchestrator can overturn them;
|
|
9042
|
+
- one decision-complete recommendation, actionable without a follow-up question.
|
|
9043
|
+
|
|
9044
|
+
Whatever that check leaves unsettled goes in the answer as an open question with what would settle it. When the goal bundles independent problems, solve the one the others depend on and return the rest as separately delegable items.
|
|
9045
|
+
</Category_Context>`, DEEP_CATEGORY_PROMPT_APPEND_GPT_6_ASTRA = `<Category_Context name="deep">
|
|
9046
|
+
The orchestrator routed this task here for depth: one goal, one deliverable, and the time to earn it. The exploration budget is generous: read every file involved, trace callers and dependencies in both directions, and fan out explore and librarian subagents in parallel for the questions a single read wave cannot answer, until you can explain the full mechanism you are about to change; an edit made before that point is the failure this category exists to prevent.
|
|
9047
|
+
|
|
9048
|
+
**MUST USE \`deep\` FOR 3D GRAPHICS, COMPUTER USE, BROWSER USE, BACKEND, LOGIC, ALGORITHMS, CAPTCHA SOLVING, AND MULTIMODAL WORK.**
|
|
9049
|
+
|
|
9050
|
+
The goal is the authorization. Choose how to reach it yourself, and when it lists numbered steps or phases, deliver all of them in this turn as one task; a proposal, a plan awaiting approval, a simplified version, or a proof of concept is unfinished work. When the steps turn out to be independent problems sharing no reasoning, do the one the goal centers on and return the others as separately delegable items with what you learned. A question ends your turn and hands the task back unfinished, so decide from context, record each assumption in the final message, and stop early only for a blocker you cannot route around: a missing secret, a decision only the user can make, or three materially different attempts that all failed.
|
|
9051
|
+
|
|
9052
|
+
Fix the cause: trace at least two levels above the symptom before settling, and prefer the change that makes the failure impossible over the guard that hides it. Depth means understanding the mechanism, so the diff stays as small as the fix allows; on greenfield work choose strong defaults and finish something you would hand to a senior engineer. Close with the delivered change, the evidence that it works, and the assumptions you made.
|
|
9053
|
+
</Category_Context>`, UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND_GPT_6_ASTRA = `<Category_Context name="unspecified-high">
|
|
9054
|
+
The orchestrator routed this task here because it spans systems or modules and fits no specialist category, so breadth of consideration is what this category buys. Before committing to an approach, survey the whole surface the change touches: every caller and consumer of what you will modify, sibling modules that implement the same pattern, the tests, docs, schemas, config, scripts, and CI that encode the current behavior, and the history of the area (git log and blame) for the reasons it is shaped this way. Fan out explore and librarian subagents in parallel when that surface is wider than one read wave covers.
|
|
9055
|
+
|
|
9056
|
+
Weigh at least two ways to do it against what you found, choose one, and say in the final message why it won. Then deliver it across every surface you identified, so behavior stays consistent everywhere the change is observable and no caller, test, doc, schema, or config still describes the old state. A question ends your turn and hands the task back unfinished, so decide from context, record each assumption in the final message, and finish.
|
|
9057
|
+
</Category_Context>`, ULTRABRAIN_CATEGORY_PROMPT_APPEND = `<Category_Context>
|
|
8978
9058
|
You are working on DEEP LOGICAL REASONING / COMPLEX ARCHITECTURE tasks.
|
|
8979
9059
|
|
|
8980
9060
|
**CRITICAL - CODE STYLE REQUIREMENTS (NON-NEGOTIABLE)**:
|
|
@@ -8999,6 +9079,8 @@ You are working on GOAL-ORIENTED AUTONOMOUS tasks.
|
|
|
8999
9079
|
|
|
9000
9080
|
You are NOT an interactive assistant. You are an autonomous problem-solver.
|
|
9001
9081
|
|
|
9082
|
+
**MUST USE \`deep\` FOR 3D GRAPHICS, COMPUTER USE, BROWSER USE, BACKEND, LOGIC, ALGORITHMS, CAPTCHA SOLVING, AND MULTIMODAL WORK.**
|
|
9083
|
+
|
|
9002
9084
|
BEFORE making ANY changes:
|
|
9003
9085
|
1. Silently explore the codebase extensively (5-15 minutes of reading is normal)
|
|
9004
9086
|
2. Read related files, trace dependencies, understand the full context
|
|
@@ -9016,6 +9098,8 @@ Minimal status updates. Focus on results, not play-by-play. Report completion wi
|
|
|
9016
9098
|
</Category_Context>`, DEEP_CATEGORY_PROMPT_APPEND_GPT_5_5 = `<Category_Context name="deep">
|
|
9017
9099
|
You are operating in DEEP mode. This is the category reserved for goal-oriented autonomous work on hairy problems that reward thorough exploration and comprehensive solutions.
|
|
9018
9100
|
|
|
9101
|
+
**MUST USE \`deep\` FOR 3D GRAPHICS, COMPUTER USE, BROWSER USE, BACKEND, LOGIC, ALGORITHMS, CAPTCHA SOLVING, AND MULTIMODAL WORK.**
|
|
9102
|
+
|
|
9019
9103
|
The orchestrator chose this category because the task benefits from depth over speed. You should feel empowered to spend the time needed: five to fifteen minutes of silent exploration before the first edit is normal and correct. Rushing to implementation on a deep task is a failure mode, not a feature.
|
|
9020
9104
|
|
|
9021
9105
|
# How deep mode adjusts the base behavior
|
|
@@ -9049,23 +9133,27 @@ Approach:
|
|
|
9049
9133
|
</Category_Context>`, QUICK_CATEGORY_CALLER_GUIDANCE = `<Caller_Warning>Small/fast model: before delegating, write an explicit prompt with numbered must-do steps, forbidden deviations, and concrete success criteria.</Caller_Warning>`, UNSPECIFIED_LOW_CATEGORY_PROMPT_APPEND = `<Category_Context>
|
|
9050
9134
|
You are working on tasks that don't fit specific categories but require moderate effort.
|
|
9051
9135
|
</Category_Context>`, UNSPECIFIED_LOW_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Use only when no specialist category fits, effort is moderate, and scope stays within a few files/modules. Prefer any matching specialist category.</Selection_Gate>
|
|
9052
|
-
<Caller_Warning>Provide explicit must-do steps, forbidden scope, and concrete success criteria.</Caller_Warning>`,
|
|
9136
|
+
<Caller_Warning>Provide explicit must-do steps, forbidden scope, and concrete success criteria.</Caller_Warning>`, UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND = `<Category_Context>
|
|
9137
|
+
You are working on tasks that don't fit specific categories but require substantial effort.
|
|
9138
|
+
</Category_Context>`, UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE = `<Selection_Gate>Use only when no specialist category fits and substantial effort spans systems/modules with broad impact. Use unspecified-low for contained moderate work.</Selection_Gate>`, GPT_FLAGSHIP_GATE_MODELS, OPENAI_CATEGORIES;
|
|
9053
9139
|
var init_openai_categories = __esm(() => {
|
|
9054
9140
|
init_types();
|
|
9141
|
+
GPT_FLAGSHIP_GATE_MODELS = ["gpt-6-astra", "gpt-5.6-sol"];
|
|
9055
9142
|
OPENAI_CATEGORIES = [
|
|
9056
9143
|
{
|
|
9057
9144
|
name: "ultrabrain",
|
|
9058
|
-
config: { model: "openai/gpt-
|
|
9145
|
+
config: { model: "openai/gpt-6-astra", variant: "max" },
|
|
9059
9146
|
description: "Use ONLY for genuinely hard, logic-heavy tasks. Give clear goals only, not step-by-step instructions.",
|
|
9060
|
-
promptAppend: ULTRABRAIN_CATEGORY_PROMPT_APPEND
|
|
9147
|
+
promptAppend: ULTRABRAIN_CATEGORY_PROMPT_APPEND,
|
|
9148
|
+
resolvePromptAppend: resolveUltrabrainCategoryPromptAppend
|
|
9061
9149
|
},
|
|
9062
9150
|
{
|
|
9063
9151
|
name: "deep",
|
|
9064
|
-
config: { model: "openai/gpt-
|
|
9065
|
-
description: "
|
|
9152
|
+
config: { model: "openai/gpt-6-astra", variant: "high" },
|
|
9153
|
+
description: "**MANDATORY: USE deep FOR 3D GRAPHICS, COMPUTER USE, BROWSER USE, BACKEND, LOGIC, ALGORITHMS, CAPTCHA SOLVING, AND MULTIMODAL WORK.** Deep autonomous problem-solving for complex research. ONE goal + ONE deliverable per call \u2014 multiple goals must fan out as parallel `deep` calls, never bundled into one.",
|
|
9066
9154
|
promptAppend: DEEP_CATEGORY_PROMPT_APPEND,
|
|
9067
9155
|
resolvePromptAppend: resolveDeepCategoryPromptAppend,
|
|
9068
|
-
requiresModel:
|
|
9156
|
+
requiresModel: GPT_FLAGSHIP_GATE_MODELS
|
|
9069
9157
|
},
|
|
9070
9158
|
{
|
|
9071
9159
|
name: "quick",
|
|
@@ -9080,6 +9168,14 @@ var init_openai_categories = __esm(() => {
|
|
|
9080
9168
|
description: "Tasks that don't fit other categories, low effort required",
|
|
9081
9169
|
callerGuidance: UNSPECIFIED_LOW_CATEGORY_CALLER_GUIDANCE,
|
|
9082
9170
|
promptAppend: UNSPECIFIED_LOW_CATEGORY_PROMPT_APPEND
|
|
9171
|
+
},
|
|
9172
|
+
{
|
|
9173
|
+
name: "unspecified-high",
|
|
9174
|
+
config: { model: "openai/gpt-6-astra", variant: "high" },
|
|
9175
|
+
description: "Tasks that don't fit other categories, high effort required",
|
|
9176
|
+
callerGuidance: UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE,
|
|
9177
|
+
promptAppend: UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND,
|
|
9178
|
+
resolvePromptAppend: resolveUnspecifiedHighCategoryPromptAppend
|
|
9083
9179
|
}
|
|
9084
9180
|
];
|
|
9085
9181
|
});
|
|
@@ -9090,14 +9186,12 @@ function buildCategoryRecord(selector) {
|
|
|
9090
9186
|
}
|
|
9091
9187
|
var BUILTIN_CATEGORIES, DEFAULT_CATEGORIES, CATEGORY_PROMPT_APPENDS, CATEGORY_DESCRIPTIONS, CATEGORY_CALLER_GUIDANCE, CATEGORY_PROMPT_APPEND_RESOLVERS, BUILTIN_CATEGORY_REQUIRES_MODEL;
|
|
9092
9188
|
var init_builtin_categories = __esm(() => {
|
|
9093
|
-
init_anthropic_categories();
|
|
9094
9189
|
init_google_categories();
|
|
9095
9190
|
init_kimi_categories();
|
|
9096
9191
|
init_openai_categories();
|
|
9097
9192
|
BUILTIN_CATEGORIES = [
|
|
9098
9193
|
...GOOGLE_CATEGORIES,
|
|
9099
9194
|
...OPENAI_CATEGORIES,
|
|
9100
|
-
...ANTHROPIC_CATEGORIES,
|
|
9101
9195
|
...KIMI_CATEGORIES
|
|
9102
9196
|
];
|
|
9103
9197
|
DEFAULT_CATEGORIES = buildCategoryRecord((definition) => definition.config);
|
|
@@ -9105,7 +9199,10 @@ var init_builtin_categories = __esm(() => {
|
|
|
9105
9199
|
CATEGORY_DESCRIPTIONS = buildCategoryRecord((definition) => definition.description);
|
|
9106
9200
|
CATEGORY_CALLER_GUIDANCE = buildCategoryRecord((definition) => definition.callerGuidance);
|
|
9107
9201
|
CATEGORY_PROMPT_APPEND_RESOLVERS = Object.fromEntries(BUILTIN_CATEGORIES.filter((definition) => definition.resolvePromptAppend !== undefined).map((definition) => [definition.name, definition.resolvePromptAppend]));
|
|
9108
|
-
BUILTIN_CATEGORY_REQUIRES_MODEL = Object.fromEntries(BUILTIN_CATEGORIES.filter((definition) => definition.requiresModel !== undefined).map((definition) => [
|
|
9202
|
+
BUILTIN_CATEGORY_REQUIRES_MODEL = Object.fromEntries(BUILTIN_CATEGORIES.filter((definition) => definition.requiresModel !== undefined).map((definition) => [
|
|
9203
|
+
definition.name,
|
|
9204
|
+
typeof definition.requiresModel === "string" ? [definition.requiresModel] : definition.requiresModel
|
|
9205
|
+
]));
|
|
9109
9206
|
});
|
|
9110
9207
|
|
|
9111
9208
|
// packages/omo-opencode/src/tools/delegate-task/constants.ts
|
|
@@ -12597,8 +12694,8 @@ var init_model_capabilities_generated = __esm(() => {
|
|
|
12597
12694
|
]
|
|
12598
12695
|
},
|
|
12599
12696
|
limit: {
|
|
12600
|
-
context:
|
|
12601
|
-
input:
|
|
12697
|
+
context: 1050000,
|
|
12698
|
+
input: 922000,
|
|
12602
12699
|
output: 128000
|
|
12603
12700
|
}
|
|
12604
12701
|
},
|
|
@@ -82415,7 +82512,6 @@ var init_memory = __esm(() => {
|
|
|
82415
82512
|
OmoMemorySettingsSchema = object({
|
|
82416
82513
|
enabled: boolean2().default(true),
|
|
82417
82514
|
agent: string2().min(1).default("auto"),
|
|
82418
|
-
tool_exposure: _enum2(["direct", "search"]).default("direct"),
|
|
82419
82515
|
reflection: OmoMemoryReflectionSchema.default({
|
|
82420
82516
|
enabled: true,
|
|
82421
82517
|
trigger: { step_count: 25, on_compaction: true },
|
|
@@ -82446,7 +82542,6 @@ var init_memory = __esm(() => {
|
|
|
82446
82542
|
OmoMemorySettingsLayerSchema = object({
|
|
82447
82543
|
enabled: boolean2().optional(),
|
|
82448
82544
|
agent: string2().min(1).optional(),
|
|
82449
|
-
tool_exposure: _enum2(["direct", "search"]).optional(),
|
|
82450
82545
|
reflection: OmoMemoryReflectionLayerSchema.optional(),
|
|
82451
82546
|
nudge: OmoMemoryNudgeLayerSchema.optional(),
|
|
82452
82547
|
facts: OmoMemoryFactsLayerSchema.optional(),
|
|
@@ -86487,20 +86582,20 @@ var init_config_manager = __esm(() => {
|
|
|
86487
86582
|
|
|
86488
86583
|
// packages/telemetry-core/src/activity-state.ts
|
|
86489
86584
|
import { existsSync as existsSync25, mkdirSync as mkdirSync8, readFileSync as readFileSync12 } from "fs";
|
|
86490
|
-
import { basename as basename8, join as
|
|
86585
|
+
import { basename as basename8, join as join51 } from "path";
|
|
86491
86586
|
function resolveTelemetryStateDir(product, options = {}) {
|
|
86492
86587
|
const dataDir = resolveXdgDataDir(product.cacheDirName, {
|
|
86493
86588
|
env: options.env,
|
|
86494
86589
|
osProvider: options.osProvider
|
|
86495
86590
|
});
|
|
86496
|
-
const xdgStateDir = options.env?.XDG_DATA_HOME === undefined ? undefined :
|
|
86591
|
+
const xdgStateDir = options.env?.XDG_DATA_HOME === undefined ? undefined : join51(options.env.XDG_DATA_HOME, product.cacheDirName);
|
|
86497
86592
|
if (dataDir === xdgStateDir || xdgStateDir === undefined && basename8(dataDir) === product.cacheDirName) {
|
|
86498
86593
|
return dataDir;
|
|
86499
86594
|
}
|
|
86500
|
-
return
|
|
86595
|
+
return join51(dataDir, product.cacheDirName);
|
|
86501
86596
|
}
|
|
86502
86597
|
function getTelemetryActivityStateFilePath(stateDir) {
|
|
86503
|
-
return
|
|
86598
|
+
return join51(stateDir, POSTHOG_ACTIVITY_STATE_FILE);
|
|
86504
86599
|
}
|
|
86505
86600
|
function getDailyActiveCaptureState(input) {
|
|
86506
86601
|
const state = readPostHogActivityState(input.stateDir, input.diagnostics);
|
|
@@ -86571,9 +86666,9 @@ var DEFAULT_POSTHOG_HOST = "https://us.i.posthog.com", DEFAULT_POSTHOG_API_KEY =
|
|
|
86571
86666
|
|
|
86572
86667
|
// packages/telemetry-core/src/diagnostics.ts
|
|
86573
86668
|
import { appendFileSync as appendFileSync2, existsSync as existsSync26, mkdirSync as mkdirSync9, readFileSync as readFileSync13 } from "fs";
|
|
86574
|
-
import { join as
|
|
86669
|
+
import { join as join52 } from "path";
|
|
86575
86670
|
function getTelemetryDiagnosticsFilePath(diagnosticsDir) {
|
|
86576
|
-
return
|
|
86671
|
+
return join52(diagnosticsDir, DIAGNOSTICS_FILE_NAME);
|
|
86577
86672
|
}
|
|
86578
86673
|
function writeTelemetryDiagnostic(input, options) {
|
|
86579
86674
|
const now = options.now ?? new Date;
|
|
@@ -94352,7 +94447,7 @@ var package_default2;
|
|
|
94352
94447
|
var init_package2 = __esm(() => {
|
|
94353
94448
|
package_default2 = {
|
|
94354
94449
|
name: "@oh-my-opencode/omo-codex",
|
|
94355
|
-
version: "5.0.0-beta.
|
|
94450
|
+
version: "5.0.0-beta.44",
|
|
94356
94451
|
type: "module",
|
|
94357
94452
|
private: true,
|
|
94358
94453
|
description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
|
|
@@ -95320,7 +95415,7 @@ var init_update_toasts = __esm(() => {
|
|
|
95320
95415
|
|
|
95321
95416
|
// packages/omo-opencode/src/hooks/auto-update-checker/hook/background-update-check.ts
|
|
95322
95417
|
import { existsSync as existsSync47 } from "fs";
|
|
95323
|
-
import { dirname as dirname30, join as
|
|
95418
|
+
import { dirname as dirname30, join as join74 } from "path";
|
|
95324
95419
|
import { fileURLToPath as fileURLToPath5 } from "url";
|
|
95325
95420
|
function defaultGetModuleHostingWorkspace() {
|
|
95326
95421
|
try {
|
|
@@ -95474,7 +95569,7 @@ var init_background_update_check = __esm(() => {
|
|
|
95474
95569
|
init_update_toasts();
|
|
95475
95570
|
defaultDeps4 = {
|
|
95476
95571
|
existsSync: existsSync47,
|
|
95477
|
-
join:
|
|
95572
|
+
join: join74,
|
|
95478
95573
|
runBunInstallWithDetails,
|
|
95479
95574
|
log: log2,
|
|
95480
95575
|
getOpenCodeCacheDir,
|
|
@@ -98111,7 +98206,7 @@ function getUnsupportedOpenCodeVersionMessage(openCodeVersion) {
|
|
|
98111
98206
|
}
|
|
98112
98207
|
|
|
98113
98208
|
// packages/omo-codex/src/install/install-codex.ts
|
|
98114
|
-
import { join as
|
|
98209
|
+
import { join as join53, resolve as resolve12 } from "path";
|
|
98115
98210
|
import { existsSync as existsSync27 } from "fs";
|
|
98116
98211
|
import { homedir as homedir6 } from "os";
|
|
98117
98212
|
|
|
@@ -102417,26 +102512,9 @@ async function removeGitBashHooksOffWindows(input) {
|
|
|
102417
102512
|
`);
|
|
102418
102513
|
}
|
|
102419
102514
|
|
|
102420
|
-
// packages/omo-codex/src/install/omo-sot-migration.ts
|
|
102421
|
-
import { join as join50 } from "path";
|
|
102422
|
-
async function seedAndMigrateOmoSot(input) {
|
|
102423
|
-
const commandEnv = { ...input.env };
|
|
102424
|
-
const scriptPath = join50(input.repoRoot, "packages", "omo-codex", "plugin", "scripts", "migrate-omo-sot.mjs");
|
|
102425
|
-
try {
|
|
102426
|
-
await input.runCommand(process.execPath, [scriptPath, "--seed"], {
|
|
102427
|
-
cwd: input.repoRoot,
|
|
102428
|
-
env: commandEnv
|
|
102429
|
-
});
|
|
102430
|
-
} catch (error51) {
|
|
102431
|
-
if (!(error51 instanceof Error))
|
|
102432
|
-
throw error51;
|
|
102433
|
-
input.log(`Warning: skipped OMO SOT seed/migration: ${error51.message}`);
|
|
102434
|
-
}
|
|
102435
|
-
}
|
|
102436
|
-
|
|
102437
102515
|
// packages/omo-codex/src/install/install-ast-grep-sg.ts
|
|
102438
102516
|
init_src();
|
|
102439
|
-
import { join as
|
|
102517
|
+
import { join as join50 } from "path";
|
|
102440
102518
|
function describeResult(result) {
|
|
102441
102519
|
if (result.kind === "succeeded")
|
|
102442
102520
|
return null;
|
|
@@ -102450,7 +102528,7 @@ async function installAstGrepForCodex(options) {
|
|
|
102450
102528
|
return;
|
|
102451
102529
|
const platform = options.platform ?? process.platform;
|
|
102452
102530
|
const targetDir = astGrepRuntimeDir(options.codexHome, platform, options.arch ?? process.arch);
|
|
102453
|
-
const skillDir =
|
|
102531
|
+
const skillDir = join50(plugin.path, "skills", "ast-grep");
|
|
102454
102532
|
const installer = options.installer ?? runAstGrepSkillInstall;
|
|
102455
102533
|
try {
|
|
102456
102534
|
const result = await installer({ platform, skillDir, targetDir });
|
|
@@ -102483,7 +102561,7 @@ async function runCodexInstaller(options = {}) {
|
|
|
102483
102561
|
const env2 = options.env ?? process.env;
|
|
102484
102562
|
const platform = options.platform ?? process.platform;
|
|
102485
102563
|
const repoRoot = resolve12(options.repoRoot ?? findRepoRoot({ importerDir: import.meta.dir, env: env2 }));
|
|
102486
|
-
const codexHome = resolve12(options.codexHome ?? env2.CODEX_HOME ??
|
|
102564
|
+
const codexHome = resolve12(options.codexHome ?? env2.CODEX_HOME ?? join53(homedir6(), ".codex"));
|
|
102487
102565
|
const projectDirectory = resolve12(options.projectDirectory ?? env2.OMO_CODEX_PROJECT ?? process.cwd());
|
|
102488
102566
|
const binDir = resolveCodexInstallerBinDir({ binDir: options.binDir, codexHome, env: env2 });
|
|
102489
102567
|
const runCommand = options.runCommand ?? defaultRunCommand;
|
|
@@ -102500,9 +102578,9 @@ async function runCodexInstaller(options = {}) {
|
|
|
102500
102578
|
if (!gitBashResolution.found) {
|
|
102501
102579
|
throw new Error(gitBashResolution.installHint);
|
|
102502
102580
|
}
|
|
102503
|
-
const codexPackageRoot =
|
|
102581
|
+
const codexPackageRoot = join53(repoRoot, "packages", "omo-codex");
|
|
102504
102582
|
const marketplace = await readMarketplace(repoRoot, {
|
|
102505
|
-
marketplacePath:
|
|
102583
|
+
marketplacePath: join53(codexPackageRoot, "marketplace.json")
|
|
102506
102584
|
});
|
|
102507
102585
|
const distributionManifest = await readDistributionManifest(repoRoot);
|
|
102508
102586
|
const installed = [];
|
|
@@ -102548,7 +102626,7 @@ async function runCodexInstaller(options = {}) {
|
|
|
102548
102626
|
if (runtimeLink !== null)
|
|
102549
102627
|
log4(`Linked ${runtimeLink.name} -> ${runtimeLink.target}`);
|
|
102550
102628
|
else
|
|
102551
|
-
log4(`Warning: skipped the omo-agent-toolkit runtime wrapper because ${
|
|
102629
|
+
log4(`Warning: skipped the omo-agent-toolkit runtime wrapper because ${join53(repoRoot, "dist", "cli", "index.js")} is missing; omo-agent-toolkit ulw-loop commands will be unavailable until a package shipping dist/cli is installed`);
|
|
102552
102630
|
}
|
|
102553
102631
|
pluginSources.push({ name: entry.name, sourcePath });
|
|
102554
102632
|
installed.push(plugin);
|
|
@@ -102611,13 +102689,13 @@ async function runCodexInstaller(options = {}) {
|
|
|
102611
102689
|
continue;
|
|
102612
102690
|
log4(`Warning: deferred legacy Codex LSP daemon cleanup for v${cleanup.version}: ${cleanup.reason}`);
|
|
102613
102691
|
}
|
|
102614
|
-
const marketplaceRoot =
|
|
102692
|
+
const marketplaceRoot = join53(codexHome, "plugins", "cache", marketplace.name);
|
|
102615
102693
|
await writeCachedMarketplaceManifest({
|
|
102616
102694
|
marketplaceName: marketplace.name,
|
|
102617
102695
|
marketplaceRoot,
|
|
102618
102696
|
plugins: installed
|
|
102619
102697
|
});
|
|
102620
|
-
const configPath =
|
|
102698
|
+
const configPath = join53(codexHome, "config.toml");
|
|
102621
102699
|
await updateCodexConfig({
|
|
102622
102700
|
configPath,
|
|
102623
102701
|
repoRoot: codexPackageRoot,
|
|
@@ -102631,7 +102709,6 @@ async function runCodexInstaller(options = {}) {
|
|
|
102631
102709
|
autonomousPermissions: options.autonomousPermissions !== false,
|
|
102632
102710
|
...options.reasoning === undefined ? {} : { reasoning: options.reasoning }
|
|
102633
102711
|
});
|
|
102634
|
-
await seedAndMigrateOmoSot({ env: env2, log: log4, repoRoot, runCommand });
|
|
102635
102712
|
const projectCleanup = await repairProjectLocalCodexArtifactsBestEffort({
|
|
102636
102713
|
startDirectory: projectDirectory,
|
|
102637
102714
|
codexHome,
|
|
@@ -102677,7 +102754,7 @@ function findRepoRootFromImporter(importerDir) {
|
|
|
102677
102754
|
for (let depth = 0;depth <= 7; depth += 1) {
|
|
102678
102755
|
if (isRepoRootWithCodexPlugin(current))
|
|
102679
102756
|
return current;
|
|
102680
|
-
for (const wrapperPackageRoot of [
|
|
102757
|
+
for (const wrapperPackageRoot of [join53(current, "node_modules", "oh-my-openagent"), join53(current, "oh-my-openagent")]) {
|
|
102681
102758
|
if (isRepoRootWithCodexPlugin(wrapperPackageRoot))
|
|
102682
102759
|
return wrapperPackageRoot;
|
|
102683
102760
|
}
|
|
@@ -102695,7 +102772,7 @@ function findRepoRoot(input) {
|
|
|
102695
102772
|
return findRepoRootFromImporter(input.importerDir);
|
|
102696
102773
|
}
|
|
102697
102774
|
function isRepoRootWithCodexPlugin(repoRoot) {
|
|
102698
|
-
return existsSync27(
|
|
102775
|
+
return existsSync27(join53(repoRoot, "packages", "omo-codex", "plugin", ".codex-plugin", "plugin.json"));
|
|
102699
102776
|
}
|
|
102700
102777
|
function codexMarketplaceSource(marketplaceRoot) {
|
|
102701
102778
|
return { sourceType: "local", source: marketplaceRoot };
|
|
@@ -102832,11 +102909,11 @@ function defaultRunCommand2(command, args) {
|
|
|
102832
102909
|
// packages/omo-codex/src/install/codex-cleanup.ts
|
|
102833
102910
|
import { lstat as lstat14, readFile as readFile24, readdir as readdir13, rm as rm12, rmdir } from "fs/promises";
|
|
102834
102911
|
import { homedir as homedir8 } from "os";
|
|
102835
|
-
import { isAbsolute as isAbsolute11, join as
|
|
102912
|
+
import { isAbsolute as isAbsolute11, join as join56, relative as relative6, resolve as resolve15 } from "path";
|
|
102836
102913
|
|
|
102837
102914
|
// packages/omo-codex/src/install/codex-cleanup-bins.ts
|
|
102838
102915
|
import { lstat as lstat12, readFile as readFile22, readdir as readdir12, readlink as readlink6, rm as rm11 } from "fs/promises";
|
|
102839
|
-
import { dirname as dirname18, isAbsolute as isAbsolute9, join as
|
|
102916
|
+
import { dirname as dirname18, isAbsolute as isAbsolute9, join as join54, resolve as resolve13 } from "path";
|
|
102840
102917
|
var ROOT_RUNTIME_BIN_NAME = "omo";
|
|
102841
102918
|
var MANAGED_CODEX_BIN_NAMES = new Set([
|
|
102842
102919
|
ROOT_RUNTIME_BIN_NAME,
|
|
@@ -102866,7 +102943,7 @@ async function removeManagedCodexBins(binDir, platform) {
|
|
|
102866
102943
|
const binName = managedBinNameForEntry2(entry.name, platform);
|
|
102867
102944
|
if (binName === null || !MANAGED_CODEX_BIN_NAMES.has(binName))
|
|
102868
102945
|
continue;
|
|
102869
|
-
const linkPath =
|
|
102946
|
+
const linkPath = join54(binDir, entry.name);
|
|
102870
102947
|
if (await isManagedCodexBin(linkPath, platform, binName)) {
|
|
102871
102948
|
await rm11(linkPath, { force: true });
|
|
102872
102949
|
removed2.push(linkPath);
|
|
@@ -103019,7 +103096,7 @@ function nodeErrorCode5(error51) {
|
|
|
103019
103096
|
}
|
|
103020
103097
|
|
|
103021
103098
|
// packages/omo-codex/src/install/codex-cleanup-safety.ts
|
|
103022
|
-
import { dirname as dirname20, isAbsolute as isAbsolute10, join as
|
|
103099
|
+
import { dirname as dirname20, isAbsolute as isAbsolute10, join as join55, relative as relative5, resolve as resolve14 } from "path";
|
|
103023
103100
|
function codexHomeResolvesToFilesystemRoot(codexHome) {
|
|
103024
103101
|
const resolved = resolve14(codexHome);
|
|
103025
103102
|
return dirname20(resolved) === resolved;
|
|
@@ -103036,11 +103113,11 @@ function validateManagedCleanupTarget(input) {
|
|
|
103036
103113
|
if (target === codexHome)
|
|
103037
103114
|
return skipped(input.path, "outside managed Codex cleanup scope");
|
|
103038
103115
|
const exactManagedRoots = new Set([
|
|
103039
|
-
resolve14(
|
|
103040
|
-
resolve14(
|
|
103041
|
-
resolve14(
|
|
103042
|
-
resolve14(
|
|
103043
|
-
resolve14(
|
|
103116
|
+
resolve14(join55(codexHome, "plugins", "cache", "sisyphuslabs")),
|
|
103117
|
+
resolve14(join55(codexHome, ".tmp", "marketplaces", "sisyphuslabs")),
|
|
103118
|
+
resolve14(join55(codexHome, "runtime", "ast-grep")),
|
|
103119
|
+
resolve14(join55(codexHome, "runtime", "node")),
|
|
103120
|
+
resolve14(join55(codexHome, "plugins", "data", "omo-sisyphuslabs", "bootstrap"))
|
|
103044
103121
|
]);
|
|
103045
103122
|
if (exactManagedRoots.has(target))
|
|
103046
103123
|
return null;
|
|
@@ -103070,8 +103147,8 @@ function skipped(path7, reason) {
|
|
|
103070
103147
|
var INSTALLED_AGENTS_MANIFEST = ".installed-agents.json";
|
|
103071
103148
|
async function cleanupCodexLight(input = {}) {
|
|
103072
103149
|
const env2 = input.env ?? process.env;
|
|
103073
|
-
const codexHome = resolve15(input.codexHome ?? env2.CODEX_HOME ??
|
|
103074
|
-
const configPath =
|
|
103150
|
+
const codexHome = resolve15(input.codexHome ?? env2.CODEX_HOME ?? join56(homedir8(), ".codex"));
|
|
103151
|
+
const configPath = join56(codexHome, "config.toml");
|
|
103075
103152
|
const installedBinDir = await readInstalledCodexBinDir(codexHome);
|
|
103076
103153
|
const agentPaths = await collectInstalledAgentPaths(codexHome, configPath);
|
|
103077
103154
|
const configCleanup = await cleanupCodexConfig(configPath, input.now);
|
|
@@ -103125,17 +103202,17 @@ function firstConfiguredPath(...values) {
|
|
|
103125
103202
|
}
|
|
103126
103203
|
function managedGlobalStatePaths(codexHome) {
|
|
103127
103204
|
return [
|
|
103128
|
-
|
|
103129
|
-
|
|
103130
|
-
|
|
103131
|
-
|
|
103132
|
-
|
|
103205
|
+
join56(codexHome, "plugins", "cache", "sisyphuslabs"),
|
|
103206
|
+
join56(codexHome, ".tmp", "marketplaces", "sisyphuslabs"),
|
|
103207
|
+
join56(codexHome, "runtime", "ast-grep"),
|
|
103208
|
+
join56(codexHome, "runtime", "node"),
|
|
103209
|
+
join56(codexHome, "plugins", "data", "omo-sisyphuslabs", "bootstrap")
|
|
103133
103210
|
];
|
|
103134
103211
|
}
|
|
103135
103212
|
var BOOTSTRAP_DATA_GLOB_MAX_DEPTH = 5;
|
|
103136
103213
|
async function collectBootstrapDataDirsByGlob(codexHome) {
|
|
103137
103214
|
const results = [];
|
|
103138
|
-
await walkForManagedBootstrapDirs(
|
|
103215
|
+
await walkForManagedBootstrapDirs(join56(codexHome, "plugins"), 0, results);
|
|
103139
103216
|
return results;
|
|
103140
103217
|
}
|
|
103141
103218
|
async function walkForManagedBootstrapDirs(directory, depth, results) {
|
|
@@ -103147,9 +103224,9 @@ async function walkForManagedBootstrapDirs(directory, depth, results) {
|
|
|
103147
103224
|
for (const entry of entries) {
|
|
103148
103225
|
if (!entry.isDirectory())
|
|
103149
103226
|
continue;
|
|
103150
|
-
const childPath =
|
|
103227
|
+
const childPath = join56(directory, entry.name);
|
|
103151
103228
|
if (isManagedBootstrapOwnerName(entry.name)) {
|
|
103152
|
-
const bootstrapDir =
|
|
103229
|
+
const bootstrapDir = join56(childPath, "bootstrap");
|
|
103153
103230
|
if (await exists6(bootstrapDir))
|
|
103154
103231
|
results.push(bootstrapDir);
|
|
103155
103232
|
continue;
|
|
@@ -103183,7 +103260,7 @@ async function attemptRemove(path7) {
|
|
|
103183
103260
|
}
|
|
103184
103261
|
async function pruneEmptyRuntimeDirBestEffort(codexHome) {
|
|
103185
103262
|
try {
|
|
103186
|
-
await rmdir(
|
|
103263
|
+
await rmdir(join56(codexHome, "runtime"));
|
|
103187
103264
|
} catch (error51) {
|
|
103188
103265
|
if (isExpectedRuntimePruneFailure(error51))
|
|
103189
103266
|
return;
|
|
@@ -103195,14 +103272,14 @@ function isExpectedRuntimePruneFailure(error51) {
|
|
|
103195
103272
|
}
|
|
103196
103273
|
async function collectInstalledAgentPaths(codexHome, configPath) {
|
|
103197
103274
|
const manifestPaths = [
|
|
103198
|
-
|
|
103275
|
+
join56(codexHome, ".tmp", "marketplaces", "sisyphuslabs", "plugins", "omo", INSTALLED_AGENTS_MANIFEST)
|
|
103199
103276
|
];
|
|
103200
|
-
const versionRoot =
|
|
103277
|
+
const versionRoot = join56(codexHome, "plugins", "cache", "sisyphuslabs", "omo");
|
|
103201
103278
|
if (await exists6(versionRoot)) {
|
|
103202
103279
|
const entries = await readdir13(versionRoot, { withFileTypes: true });
|
|
103203
103280
|
for (const entry of entries) {
|
|
103204
103281
|
if (entry.isDirectory())
|
|
103205
|
-
manifestPaths.push(
|
|
103282
|
+
manifestPaths.push(join56(versionRoot, entry.name, INSTALLED_AGENTS_MANIFEST));
|
|
103206
103283
|
}
|
|
103207
103284
|
}
|
|
103208
103285
|
const paths2 = new Set;
|
|
@@ -103220,7 +103297,7 @@ async function readManagedAgentPathsFromConfig(codexHome, configPath) {
|
|
|
103220
103297
|
if (!await exists6(configPath))
|
|
103221
103298
|
return [];
|
|
103222
103299
|
const config3 = await readFile24(configPath, "utf8");
|
|
103223
|
-
return MANAGED_CODEX_AGENT_NAMES2.filter((agentName) => config3.includes(`config_file = ${JSON.stringify(`./agents/${agentName}.toml`)}`)).map((agentName) =>
|
|
103300
|
+
return MANAGED_CODEX_AGENT_NAMES2.filter((agentName) => config3.includes(`config_file = ${JSON.stringify(`./agents/${agentName}.toml`)}`)).map((agentName) => join56(codexHome, "agents", `${agentName}.toml`));
|
|
103224
103301
|
}
|
|
103225
103302
|
async function readInstalledAgentManifest(manifestPath) {
|
|
103226
103303
|
if (!await exists6(manifestPath))
|
|
@@ -103231,7 +103308,7 @@ async function readInstalledAgentManifest(manifestPath) {
|
|
|
103231
103308
|
return parsed.agents.filter((path7) => typeof path7 === "string");
|
|
103232
103309
|
}
|
|
103233
103310
|
async function removeManifestListedAgentLinks(codexHome, paths2) {
|
|
103234
|
-
const agentsDir =
|
|
103311
|
+
const agentsDir = join56(codexHome, "agents");
|
|
103235
103312
|
const removed2 = [];
|
|
103236
103313
|
const skipped2 = [];
|
|
103237
103314
|
for (const path7 of paths2) {
|
|
@@ -103283,14 +103360,14 @@ function nodeErrorCode6(error51) {
|
|
|
103283
103360
|
import { execFile as execFile3 } from "child_process";
|
|
103284
103361
|
import { existsSync as existsSync31 } from "fs";
|
|
103285
103362
|
import { homedir as homedir11 } from "os";
|
|
103286
|
-
import { dirname as dirname24, join as
|
|
103363
|
+
import { dirname as dirname24, join as join61, resolve as resolve19 } from "path";
|
|
103287
103364
|
import { fileURLToPath } from "url";
|
|
103288
103365
|
import { promisify as promisify2 } from "util";
|
|
103289
103366
|
|
|
103290
103367
|
// packages/omo-senpi/src/components/agent-home/resolve-agent-home.ts
|
|
103291
103368
|
import { existsSync as existsSync29 } from "fs";
|
|
103292
103369
|
import { homedir as homedir9 } from "os";
|
|
103293
|
-
import { join as
|
|
103370
|
+
import { join as join57, resolve as resolve16 } from "path";
|
|
103294
103371
|
var AGENT_DIR_ENV_NAMES = [
|
|
103295
103372
|
"OMO_CODING_AGENT_DIR",
|
|
103296
103373
|
"SENPI_CODING_AGENT_DIR",
|
|
@@ -103304,25 +103381,25 @@ function resolveAgentHome(options) {
|
|
|
103304
103381
|
if (configured)
|
|
103305
103382
|
return resolve16(configured);
|
|
103306
103383
|
}
|
|
103307
|
-
const brandedHome =
|
|
103308
|
-
const canonical =
|
|
103309
|
-
if (exists7(
|
|
103384
|
+
const brandedHome = join57(homeDir, ".omo");
|
|
103385
|
+
const canonical = join57(brandedHome, "agent");
|
|
103386
|
+
if (exists7(join57(canonical, AGENT_HOME_SENTINEL)))
|
|
103310
103387
|
return canonical;
|
|
103311
|
-
if (exists7(
|
|
103388
|
+
if (exists7(join57(brandedHome, AGENT_HOME_SENTINEL)))
|
|
103312
103389
|
return brandedHome;
|
|
103313
|
-
return
|
|
103390
|
+
return join57(homeDir, ".senpi", "agent");
|
|
103314
103391
|
}
|
|
103315
103392
|
|
|
103316
103393
|
// packages/omo-senpi/src/install/local-launcher.ts
|
|
103317
103394
|
import { chmodSync as chmodSync3, existsSync as existsSync30, mkdirSync as mkdirSync10, readFileSync as readFileSync14, rmSync as rmSync2, writeFileSync as writeFileSync6 } from "fs";
|
|
103318
103395
|
import { homedir as homedir10 } from "os";
|
|
103319
|
-
import { dirname as dirname21, join as
|
|
103396
|
+
import { dirname as dirname21, join as join58, resolve as resolve17 } from "path";
|
|
103320
103397
|
var MARKER = "omo-local-launcher";
|
|
103321
103398
|
function localLauncherPath(homeDir = homedir10()) {
|
|
103322
|
-
return
|
|
103399
|
+
return join58(homeDir, ".local", "bin", "omo");
|
|
103323
103400
|
}
|
|
103324
103401
|
function localLauncherCmdPath(homeDir = homedir10()) {
|
|
103325
|
-
return
|
|
103402
|
+
return join58(homeDir, ".local", "bin", "omo.cmd");
|
|
103326
103403
|
}
|
|
103327
103404
|
function renderLocalLauncher(options) {
|
|
103328
103405
|
const brand = {
|
|
@@ -103402,16 +103479,16 @@ node "%~dp0omo" %*\r
|
|
|
103402
103479
|
import { createHash as createHash5 } from "crypto";
|
|
103403
103480
|
import { constants as constants9 } from "fs";
|
|
103404
103481
|
import { access as access2, readFile as readFile26, stat as stat6 } from "fs/promises";
|
|
103405
|
-
import { dirname as dirname23, join as
|
|
103482
|
+
import { dirname as dirname23, join as join60 } from "path";
|
|
103406
103483
|
|
|
103407
103484
|
// packages/omo-senpi/src/install/senpi-settings.ts
|
|
103408
103485
|
import { constants as constants8 } from "fs";
|
|
103409
103486
|
import { access, copyFile as copyFile3, mkdir as mkdir9, readFile as readFile25, rename as rename5, writeFile as writeFile14 } from "fs/promises";
|
|
103410
|
-
import { dirname as dirname22, join as
|
|
103487
|
+
import { dirname as dirname22, join as join59, resolve as resolve18 } from "path";
|
|
103411
103488
|
var OMO_SENPI_PACKAGE_NAME = "@code-yeongyu/omo-senpi";
|
|
103412
103489
|
var LEGACY_BUILTIN_SHADOW_PACKAGES = [
|
|
103413
|
-
|
|
103414
|
-
|
|
103490
|
+
join59("packages", "pi-goal"),
|
|
103491
|
+
join59("packages", "pi-webfetch")
|
|
103415
103492
|
];
|
|
103416
103493
|
async function readSettings(settingsPath) {
|
|
103417
103494
|
let raw;
|
|
@@ -103486,7 +103563,7 @@ function isRecord12(value) {
|
|
|
103486
103563
|
async function readPackageName(packagePath) {
|
|
103487
103564
|
let raw;
|
|
103488
103565
|
try {
|
|
103489
|
-
raw = await readFile25(
|
|
103566
|
+
raw = await readFile25(join59(packagePath, "package.json"), "utf8");
|
|
103490
103567
|
} catch (error51) {
|
|
103491
103568
|
if (isErrno(error51, "ENOENT") || isErrno(error51, "ENOTDIR"))
|
|
103492
103569
|
return;
|
|
@@ -103511,57 +103588,57 @@ function isErrno(error51, code) {
|
|
|
103511
103588
|
|
|
103512
103589
|
// packages/omo-senpi/src/install/plugin-artifacts.ts
|
|
103513
103590
|
var REQUIRED_PLUGIN_ARTIFACTS = [
|
|
103514
|
-
|
|
103515
|
-
|
|
103516
|
-
|
|
103517
|
-
|
|
103518
|
-
|
|
103519
|
-
|
|
103520
|
-
|
|
103521
|
-
|
|
103522
|
-
|
|
103523
|
-
|
|
103524
|
-
|
|
103525
|
-
|
|
103526
|
-
|
|
103527
|
-
|
|
103528
|
-
|
|
103529
|
-
|
|
103530
|
-
|
|
103531
|
-
|
|
103532
|
-
|
|
103533
|
-
|
|
103534
|
-
|
|
103535
|
-
|
|
103536
|
-
|
|
103537
|
-
|
|
103538
|
-
|
|
103539
|
-
|
|
103540
|
-
|
|
103541
|
-
|
|
103542
|
-
|
|
103543
|
-
|
|
103544
|
-
|
|
103545
|
-
|
|
103546
|
-
|
|
103547
|
-
|
|
103548
|
-
|
|
103549
|
-
|
|
103550
|
-
|
|
103551
|
-
|
|
103552
|
-
|
|
103553
|
-
|
|
103591
|
+
join60("extensions", "omo.js"),
|
|
103592
|
+
join60("extensions", "omo-task.js"),
|
|
103593
|
+
join60("extensions", "omo-member.js"),
|
|
103594
|
+
join60("extensions", "memory-run-supervisor.mjs"),
|
|
103595
|
+
join60("extensions", "reflection-persona.md"),
|
|
103596
|
+
join60("extensions", "dream-persona.md"),
|
|
103597
|
+
join60("extensions", "facts-persona.md"),
|
|
103598
|
+
join60("extensions", "memorian-persona.md"),
|
|
103599
|
+
join60("skills", "ast-grep", "SKILL.md"),
|
|
103600
|
+
join60("skills", "coding-agent-sessions", "SKILL.md"),
|
|
103601
|
+
join60("skills", "debugging", "SKILL.md"),
|
|
103602
|
+
join60("skills", "frontend", "SKILL.md"),
|
|
103603
|
+
join60("skills", "git-master", "SKILL.md"),
|
|
103604
|
+
join60("skills", "init-deep", "SKILL.md"),
|
|
103605
|
+
join60("skills", "lsp-setup", "SKILL.md"),
|
|
103606
|
+
join60("skills", "programming", "SKILL.md"),
|
|
103607
|
+
join60("skills", "refactor", "SKILL.md"),
|
|
103608
|
+
join60("skills", "remove-ai-slops", "SKILL.md"),
|
|
103609
|
+
join60("skills", "review-work", "SKILL.md"),
|
|
103610
|
+
join60("skills", "ultimate-browsing", "SKILL.md"),
|
|
103611
|
+
join60("skills", "ultrawork", "SKILL.md"),
|
|
103612
|
+
join60("skills", "ulw-execute", "SKILL.md"),
|
|
103613
|
+
join60("skills", "ulw-loop", "SKILL.md"),
|
|
103614
|
+
join60("skills", "ulw-plan", "SKILL.md"),
|
|
103615
|
+
join60("skills", "ulw-research", "SKILL.md"),
|
|
103616
|
+
join60("skills", "visual-qa", "SKILL.md"),
|
|
103617
|
+
join60("skills-conditional", "x-search", "SKILL.md"),
|
|
103618
|
+
join60("runtime", "ast-grep-mcp", "cli.js"),
|
|
103619
|
+
join60("runtime", "agent-toolkit", "cli.js"),
|
|
103620
|
+
join60("runtime", "agent-toolkit", "ulw-loop", "cli.js"),
|
|
103621
|
+
join60("runtime", "agent-toolkit", "omo-agent-toolkit"),
|
|
103622
|
+
join60("runtime", "agent-toolkit", "omo-agent-toolkit.cmd"),
|
|
103623
|
+
join60("runtime", "lsp-daemon", "dist", "cli.js"),
|
|
103624
|
+
join60("runtime", "lsp-daemon", "dist", "index.js"),
|
|
103625
|
+
join60("runtime", "lsp-daemon", "dist", "index.d.ts"),
|
|
103626
|
+
join60("runtime", "lsp-daemon", "dist", "daemon-client.js"),
|
|
103627
|
+
join60("runtime", "lsp-daemon", "dist", "daemon-client.d.ts"),
|
|
103628
|
+
join60("runtime", "lsp-daemon", "dist", "package.json"),
|
|
103629
|
+
join60("runtime", "lsp-daemon", "dist", ".omo-runtime-manifest.json"),
|
|
103630
|
+
join60("scripts", "install.mjs")
|
|
103554
103631
|
];
|
|
103555
103632
|
async function ensurePluginArtifacts(context) {
|
|
103556
103633
|
if (context.allowBuild) {
|
|
103557
|
-
await context.runCommand("node", [
|
|
103558
|
-
await context.runCommand("node", [
|
|
103559
|
-
await context.runCommand("node", [
|
|
103560
|
-
await context.runCommand("node", [
|
|
103561
|
-
await context.runCommand("node", [
|
|
103562
|
-
await context.runCommand("node", [
|
|
103563
|
-
await context.runCommand("node", [
|
|
103564
|
-
await context.runCommand("node", [
|
|
103634
|
+
await context.runCommand("node", [join60(context.pluginPath, "scripts", "build-extension.mjs")], { cwd: context.repoRoot });
|
|
103635
|
+
await context.runCommand("node", [join60("packages", "omo-codex", "plugin", "scripts", "materialize-shared-upstreams.mjs")], { cwd: context.repoRoot });
|
|
103636
|
+
await context.runCommand("node", [join60(context.pluginPath, "scripts", "sync-skills.mjs")], { cwd: context.repoRoot });
|
|
103637
|
+
await context.runCommand("node", [join60(context.pluginPath, "scripts", "build-install.mjs")], { cwd: context.repoRoot });
|
|
103638
|
+
await context.runCommand("node", [join60(context.pluginPath, "scripts", "stage-lsp-daemon-runtime.mjs")], { cwd: context.repoRoot });
|
|
103639
|
+
await context.runCommand("node", [join60(context.pluginPath, "scripts", "stage-ast-grep-mcp-runtime.mjs")], { cwd: context.repoRoot });
|
|
103640
|
+
await context.runCommand("node", [join60(context.pluginPath, "scripts", "stage-agent-toolkit.mjs")], { cwd: context.repoRoot });
|
|
103641
|
+
await context.runCommand("node", [join60(context.pluginPath, "scripts", "stage-x-search-skill.mjs")], { cwd: context.repoRoot });
|
|
103565
103642
|
}
|
|
103566
103643
|
if (await hasMissingPluginArtifact(context.pluginPath)) {
|
|
103567
103644
|
throw new Error(`Packed omo-senpi plugin is missing required runtime artifacts at ${context.pluginPath}`);
|
|
@@ -103570,14 +103647,14 @@ async function ensurePluginArtifacts(context) {
|
|
|
103570
103647
|
}
|
|
103571
103648
|
async function hasMissingPluginArtifact(pluginPath) {
|
|
103572
103649
|
for (const artifact of REQUIRED_PLUGIN_ARTIFACTS) {
|
|
103573
|
-
if (!await fileExists2(
|
|
103650
|
+
if (!await fileExists2(join60(pluginPath, artifact)))
|
|
103574
103651
|
return true;
|
|
103575
103652
|
}
|
|
103576
103653
|
return false;
|
|
103577
103654
|
}
|
|
103578
103655
|
async function verifyAstGrepRuntimeIntegrity(pluginPath, platform) {
|
|
103579
|
-
const runtimeEntry =
|
|
103580
|
-
const manifestPath =
|
|
103656
|
+
const runtimeEntry = join60(pluginPath, "runtime", "ast-grep-mcp", "cli.js");
|
|
103657
|
+
const manifestPath = join60(dirname23(runtimeEntry), "manifest.json");
|
|
103581
103658
|
let runtimeStat;
|
|
103582
103659
|
try {
|
|
103583
103660
|
runtimeStat = await stat6(runtimeEntry);
|
|
@@ -103652,7 +103729,7 @@ async function runSenpiInstaller(options = {}) {
|
|
|
103652
103729
|
const backupPath = await writeSettingsAtomically(context.settingsPath, settings);
|
|
103653
103730
|
installLocalLauncher({
|
|
103654
103731
|
pluginPath: context.pluginPath,
|
|
103655
|
-
senpiCliPath:
|
|
103732
|
+
senpiCliPath: join61(context.repoRoot, "packages", "coding-agent", "dist", "cli.js")
|
|
103656
103733
|
});
|
|
103657
103734
|
return {
|
|
103658
103735
|
ok: true,
|
|
@@ -103669,12 +103746,12 @@ function resolveInstallContext(options) {
|
|
|
103669
103746
|
const allowBuild = options.pluginPath === undefined;
|
|
103670
103747
|
const repoRoot = resolve19(options.repoRoot ?? (allowBuild ? findRepoRoot2(dirname24(fileURLToPath(import.meta.url))) : dirname24(resolve19(options.pluginPath))));
|
|
103671
103748
|
const agentDir = resolve19(options.agentDir ?? resolveAgentHome({ env: env2, homeDir: env2.HOME ?? homedir11() }));
|
|
103672
|
-
const pluginPath = resolve19(options.pluginPath ??
|
|
103749
|
+
const pluginPath = resolve19(options.pluginPath ?? join61(repoRoot, "packages", "omo-senpi", "plugin"));
|
|
103673
103750
|
return {
|
|
103674
103751
|
env: env2,
|
|
103675
103752
|
repoRoot,
|
|
103676
103753
|
agentDir,
|
|
103677
|
-
settingsPath:
|
|
103754
|
+
settingsPath: join61(agentDir, "settings.json"),
|
|
103678
103755
|
pluginPath,
|
|
103679
103756
|
platform: options.platform ?? process.platform,
|
|
103680
103757
|
allowBuild,
|
|
@@ -103691,7 +103768,7 @@ async function defaultRunCommand3(command, args, options) {
|
|
|
103691
103768
|
function findRepoRoot2(importerDir) {
|
|
103692
103769
|
let current = importerDir;
|
|
103693
103770
|
for (let depth = 0;depth <= 7; depth += 1) {
|
|
103694
|
-
if (fileExistsSync(
|
|
103771
|
+
if (fileExistsSync(join61(current, "packages", "omo-senpi", "plugin", "package.json")))
|
|
103695
103772
|
return current;
|
|
103696
103773
|
current = resolve19(current, "..");
|
|
103697
103774
|
}
|
|
@@ -103735,19 +103812,19 @@ init_provider_availability();
|
|
|
103735
103812
|
|
|
103736
103813
|
// packages/omo-opencode/src/cli/config-manager/add-tui-plugin-to-tui-config.ts
|
|
103737
103814
|
import { existsSync as existsSync33, mkdirSync as mkdirSync11, readFileSync as readFileSync16 } from "fs";
|
|
103738
|
-
import { join as
|
|
103815
|
+
import { join as join63 } from "path";
|
|
103739
103816
|
|
|
103740
103817
|
// packages/omo-opencode/src/cli/doctor/checks/tui-plugin-config.ts
|
|
103741
103818
|
init_shared();
|
|
103742
103819
|
import { existsSync as existsSync32, readFileSync as readFileSync15 } from "fs";
|
|
103743
|
-
import { join as
|
|
103820
|
+
import { join as join62 } from "path";
|
|
103744
103821
|
var TUI_SUBPATH = "tui";
|
|
103745
103822
|
var TUI_EXPORT_SUBPATH = `./${TUI_SUBPATH}`;
|
|
103746
103823
|
function fileEntryPackageJsonPath(entry) {
|
|
103747
103824
|
let path7 = entry.slice("file:".length);
|
|
103748
103825
|
if (path7.startsWith("//"))
|
|
103749
103826
|
path7 = path7.slice(2);
|
|
103750
|
-
return
|
|
103827
|
+
return join62(path7, "package.json");
|
|
103751
103828
|
}
|
|
103752
103829
|
function packageJsonExportsTui(pkgJsonPath) {
|
|
103753
103830
|
if (!existsSync32(pkgJsonPath))
|
|
@@ -103785,7 +103862,7 @@ function packageExportsTuiForServerEntry(entry) {
|
|
|
103785
103862
|
const packageName = packageNameFromServerEntry(entry);
|
|
103786
103863
|
if (packageName === null)
|
|
103787
103864
|
return null;
|
|
103788
|
-
return packageJsonExportsTui(
|
|
103865
|
+
return packageJsonExportsTui(join62(getOpenCodeConfigDir({ binary: "opencode" }), "node_modules", packageName, "package.json"));
|
|
103789
103866
|
}
|
|
103790
103867
|
function isOurFilePluginEntry(entry) {
|
|
103791
103868
|
if (typeof entry !== "string" || !entry.startsWith("file:"))
|
|
@@ -103850,7 +103927,7 @@ function detectServerPluginRegistration() {
|
|
|
103850
103927
|
}
|
|
103851
103928
|
}
|
|
103852
103929
|
function detectTuiPluginRegistration() {
|
|
103853
|
-
const tuiJsonPath =
|
|
103930
|
+
const tuiJsonPath = join62(getOpenCodeConfigDir({ binary: "opencode" }), "tui.json");
|
|
103854
103931
|
if (!existsSync32(tuiJsonPath)) {
|
|
103855
103932
|
return {
|
|
103856
103933
|
registered: false,
|
|
@@ -104006,10 +104083,10 @@ function readConfig(path7) {
|
|
|
104006
104083
|
return null;
|
|
104007
104084
|
}
|
|
104008
104085
|
function readServerConfig(configDir) {
|
|
104009
|
-
const jsoncPath =
|
|
104086
|
+
const jsoncPath = join63(configDir, "opencode.jsonc");
|
|
104010
104087
|
if (existsSync33(jsoncPath))
|
|
104011
104088
|
return readConfig(jsoncPath);
|
|
104012
|
-
const jsonPath =
|
|
104089
|
+
const jsonPath = join63(configDir, "opencode.json");
|
|
104013
104090
|
if (existsSync33(jsonPath))
|
|
104014
104091
|
return readConfig(jsonPath);
|
|
104015
104092
|
return null;
|
|
@@ -104051,7 +104128,7 @@ function ensureTuiPluginEntry(opts = {}) {
|
|
|
104051
104128
|
if (!desiredEntry) {
|
|
104052
104129
|
return { changed: false, reason: "no-server-entry" };
|
|
104053
104130
|
}
|
|
104054
|
-
const tuiJsonPath =
|
|
104131
|
+
const tuiJsonPath = join63(configDir, "tui.json");
|
|
104055
104132
|
const { config: config3, malformed } = readTuiConfig(tuiJsonPath);
|
|
104056
104133
|
if (malformed) {
|
|
104057
104134
|
return { changed: false, reason: "malformed" };
|
|
@@ -104067,7 +104144,7 @@ function ensureTuiPluginEntry(opts = {}) {
|
|
|
104067
104144
|
|
|
104068
104145
|
// packages/omo-opencode/src/cli/install-ast-grep-sg.ts
|
|
104069
104146
|
import { homedir as homedir12 } from "os";
|
|
104070
|
-
import { join as
|
|
104147
|
+
import { join as join64 } from "path";
|
|
104071
104148
|
|
|
104072
104149
|
// packages/shared-skills/index.mjs
|
|
104073
104150
|
import { existsSync as existsSync34 } from "fs";
|
|
@@ -104089,9 +104166,9 @@ function describeResult2(result) {
|
|
|
104089
104166
|
}
|
|
104090
104167
|
async function installAstGrepForOpenCode(options = {}) {
|
|
104091
104168
|
const platform = options.platform ?? process.platform;
|
|
104092
|
-
const baseDir =
|
|
104169
|
+
const baseDir = join64(options.homeDir ?? homedir12(), ".omo");
|
|
104093
104170
|
const targetDir = astGrepRuntimeDir(baseDir, platform, options.arch ?? process.arch);
|
|
104094
|
-
const skillDir =
|
|
104171
|
+
const skillDir = join64(options.sharedSkillsRoot ?? sharedSkillsRootPath(), "ast-grep");
|
|
104095
104172
|
const installer = options.installer ?? runAstGrepSkillInstall;
|
|
104096
104173
|
try {
|
|
104097
104174
|
const result = await installer({ platform, skillDir, targetDir });
|
|
@@ -104209,6 +104286,7 @@ async function runCliInstaller(args, version3) {
|
|
|
104209
104286
|
return 1;
|
|
104210
104287
|
}
|
|
104211
104288
|
printWarning(`Codex install failed (OpenCode install is still complete): ${message}`);
|
|
104289
|
+
printInfo(`The Codex harness is NOT installed. Fix the error above, then re-run: ${import_picocolors3.default.cyan("bunx oh-my-openagent install --platform=codex")}`);
|
|
104212
104290
|
}
|
|
104213
104291
|
console.log();
|
|
104214
104292
|
}
|
|
@@ -105681,6 +105759,7 @@ async function runTuiInstaller(args, version3) {
|
|
|
105681
105759
|
return 1;
|
|
105682
105760
|
}
|
|
105683
105761
|
log4.warn(`Codex install failed (OpenCode install remains successful): ${message}`);
|
|
105762
|
+
log4.info("The Codex harness is NOT installed. Fix the error above, then re-run: bunx oh-my-openagent install --platform=codex");
|
|
105684
105763
|
}
|
|
105685
105764
|
}
|
|
105686
105765
|
if (config3.hasSenpi) {
|
|
@@ -108310,9 +108389,9 @@ function readCurrentTopLevelTask(planPath) {
|
|
|
108310
108389
|
}
|
|
108311
108390
|
// packages/boulder-state/src/storage/path.ts
|
|
108312
108391
|
import { existsSync as existsSync36 } from "fs";
|
|
108313
|
-
import { isAbsolute as isAbsolute12, join as
|
|
108392
|
+
import { isAbsolute as isAbsolute12, join as join65, relative as relative8, resolve as resolve20 } from "path";
|
|
108314
108393
|
function getBoulderFilePath(directory) {
|
|
108315
|
-
return
|
|
108394
|
+
return join65(directory, BOULDER_DIR, BOULDER_FILE);
|
|
108316
108395
|
}
|
|
108317
108396
|
function resolveTrackedPath(baseDirectory, trackedPath) {
|
|
108318
108397
|
return isAbsolute12(trackedPath) ? resolve20(trackedPath) : resolve20(baseDirectory, trackedPath);
|
|
@@ -108495,9 +108574,9 @@ init_state();
|
|
|
108495
108574
|
var CONTINUATION_MARKER_DIR = ".omo/run-continuation";
|
|
108496
108575
|
// packages/omo-opencode/src/features/run-continuation-state/storage.ts
|
|
108497
108576
|
import { existsSync as existsSync39, mkdirSync as mkdirSync12, readFileSync as readFileSync20, rmSync as rmSync3, writeFileSync as writeFileSync7 } from "fs";
|
|
108498
|
-
import { join as
|
|
108577
|
+
import { join as join66 } from "path";
|
|
108499
108578
|
function getMarkerPath(directory, sessionID) {
|
|
108500
|
-
return
|
|
108579
|
+
return join66(directory, CONTINUATION_MARKER_DIR, `${sessionID}.json`);
|
|
108501
108580
|
}
|
|
108502
108581
|
function readContinuationMarker(directory, sessionID) {
|
|
108503
108582
|
const markerPath = getMarkerPath(directory, sessionID);
|
|
@@ -108570,7 +108649,7 @@ async function isSessionInBoulderLineage(input) {
|
|
|
108570
108649
|
init_shared();
|
|
108571
108650
|
init_compaction_marker();
|
|
108572
108651
|
import { readFileSync as readFileSync21, readdirSync as readdirSync8 } from "fs";
|
|
108573
|
-
import { join as
|
|
108652
|
+
import { join as join67 } from "path";
|
|
108574
108653
|
var defaultSessionLastAgentDeps = {
|
|
108575
108654
|
getMessageDir,
|
|
108576
108655
|
isSqliteBackend,
|
|
@@ -108630,7 +108709,7 @@ async function getLastAgentFromSession(sessionID, client3, deps = {}) {
|
|
|
108630
108709
|
try {
|
|
108631
108710
|
const messages = readdirSync8(messageDir).filter((fileName) => fileName.endsWith(".json")).map((fileName) => {
|
|
108632
108711
|
try {
|
|
108633
|
-
const content = readFileSync21(
|
|
108712
|
+
const content = readFileSync21(join67(messageDir, fileName), "utf-8");
|
|
108634
108713
|
const parsed = JSON.parse(content);
|
|
108635
108714
|
return {
|
|
108636
108715
|
fileName,
|
|
@@ -108674,7 +108753,7 @@ init_agent_display_names();
|
|
|
108674
108753
|
// packages/omo-opencode/src/hooks/ralph-loop/storage.ts
|
|
108675
108754
|
init_frontmatter2();
|
|
108676
108755
|
import { existsSync as existsSync40, readFileSync as readFileSync22, writeFileSync as writeFileSync8, unlinkSync as unlinkSync6, mkdirSync as mkdirSync13 } from "fs";
|
|
108677
|
-
import { dirname as dirname26, join as
|
|
108756
|
+
import { dirname as dirname26, join as join68 } from "path";
|
|
108678
108757
|
|
|
108679
108758
|
// packages/omo-opencode/src/hooks/ralph-loop/constants.ts
|
|
108680
108759
|
var DEFAULT_STATE_FILE = ".omo/ralph-loop.local.md";
|
|
@@ -108683,7 +108762,7 @@ var DEFAULT_COMPLETION_PROMISE = "DONE";
|
|
|
108683
108762
|
|
|
108684
108763
|
// packages/omo-opencode/src/hooks/ralph-loop/storage.ts
|
|
108685
108764
|
function getStateFilePath(directory, customPath) {
|
|
108686
|
-
return customPath ?
|
|
108765
|
+
return customPath ? join68(directory, customPath) : join68(directory, DEFAULT_STATE_FILE);
|
|
108687
108766
|
}
|
|
108688
108767
|
function readState(directory, customPath) {
|
|
108689
108768
|
const filePath = getStateFilePath(directory, customPath);
|
|
@@ -109790,7 +109869,7 @@ init_extract_semver();
|
|
|
109790
109869
|
init_bun_which_shim();
|
|
109791
109870
|
import { existsSync as existsSync48, accessSync as accessSync4, constants as constants12 } from "fs";
|
|
109792
109871
|
import { homedir as homedir15 } from "os";
|
|
109793
|
-
import { join as
|
|
109872
|
+
import { join as join75 } from "path";
|
|
109794
109873
|
|
|
109795
109874
|
// packages/omo-opencode/src/cli/doctor/framework/spawn-with-timeout.ts
|
|
109796
109875
|
init_spawn_with_windows_hide();
|
|
@@ -109882,17 +109961,17 @@ function getDesktopAppPaths(platform) {
|
|
|
109882
109961
|
case "darwin":
|
|
109883
109962
|
return [
|
|
109884
109963
|
"/Applications/OpenCode.app/Contents/MacOS/OpenCode",
|
|
109885
|
-
|
|
109964
|
+
join75(home, "Applications", "OpenCode.app", "Contents", "MacOS", "OpenCode")
|
|
109886
109965
|
];
|
|
109887
109966
|
case "win32": {
|
|
109888
109967
|
const programFiles = process.env.ProgramFiles;
|
|
109889
109968
|
const localAppData = process.env.LOCALAPPDATA;
|
|
109890
109969
|
const paths2 = [];
|
|
109891
109970
|
if (programFiles) {
|
|
109892
|
-
paths2.push(
|
|
109971
|
+
paths2.push(join75(programFiles, "OpenCode", "OpenCode.exe"));
|
|
109893
109972
|
}
|
|
109894
109973
|
if (localAppData) {
|
|
109895
|
-
paths2.push(
|
|
109974
|
+
paths2.push(join75(localAppData, "OpenCode", "OpenCode.exe"));
|
|
109896
109975
|
}
|
|
109897
109976
|
return paths2;
|
|
109898
109977
|
}
|
|
@@ -109900,8 +109979,8 @@ function getDesktopAppPaths(platform) {
|
|
|
109900
109979
|
return [
|
|
109901
109980
|
"/usr/bin/opencode",
|
|
109902
109981
|
"/usr/lib/opencode/opencode",
|
|
109903
|
-
|
|
109904
|
-
|
|
109982
|
+
join75(home, "Applications", "opencode-desktop-linux-x86_64.AppImage"),
|
|
109983
|
+
join75(home, "Applications", "opencode-desktop-linux-aarch64.AppImage")
|
|
109905
109984
|
];
|
|
109906
109985
|
default:
|
|
109907
109986
|
return [];
|
|
@@ -109933,7 +110012,7 @@ async function findOpenCodeBinary(platform = process.platform, checkExists = exi
|
|
|
109933
110012
|
const candidates = getCommandCandidates2(platform);
|
|
109934
110013
|
for (const entry of pathEnv.split(delimiter3).filter(Boolean)) {
|
|
109935
110014
|
for (const command of candidates) {
|
|
109936
|
-
const fullPath =
|
|
110015
|
+
const fullPath = join75(entry, command);
|
|
109937
110016
|
if (checkExists(fullPath) && isExecutable2(fullPath)) {
|
|
109938
110017
|
return { binary: command, path: fullPath };
|
|
109939
110018
|
}
|
|
@@ -110077,22 +110156,22 @@ init_package_json_locator();
|
|
|
110077
110156
|
import { existsSync as existsSync50, readFileSync as readFileSync31, readdirSync as readdirSync10 } from "fs";
|
|
110078
110157
|
import { createRequire } from "module";
|
|
110079
110158
|
import { homedir as homedir16 } from "os";
|
|
110080
|
-
import { join as
|
|
110159
|
+
import { join as join76 } from "path";
|
|
110081
110160
|
import { fileURLToPath as fileURLToPath6 } from "url";
|
|
110082
110161
|
init_shared();
|
|
110083
110162
|
function getPlatformDefaultCacheDir(platform = process.platform) {
|
|
110084
110163
|
if (platform === "darwin")
|
|
110085
|
-
return
|
|
110164
|
+
return join76(homedir16(), "Library", "Caches");
|
|
110086
110165
|
if (platform === "win32")
|
|
110087
|
-
return process.env.LOCALAPPDATA ??
|
|
110088
|
-
return
|
|
110166
|
+
return process.env.LOCALAPPDATA ?? join76(homedir16(), "AppData", "Local");
|
|
110167
|
+
return join76(homedir16(), ".cache");
|
|
110089
110168
|
}
|
|
110090
110169
|
function resolveOpenCodeCacheDir() {
|
|
110091
110170
|
const xdgCacheHome = process.env.XDG_CACHE_HOME;
|
|
110092
110171
|
if (xdgCacheHome)
|
|
110093
|
-
return
|
|
110172
|
+
return join76(xdgCacheHome, "opencode");
|
|
110094
110173
|
const fromShared = getOpenCodeCacheDir();
|
|
110095
|
-
const platformDefault =
|
|
110174
|
+
const platformDefault = join76(getPlatformDefaultCacheDir(), "opencode");
|
|
110096
110175
|
if (existsSync50(fromShared) || !existsSync50(platformDefault))
|
|
110097
110176
|
return fromShared;
|
|
110098
110177
|
return platformDefault;
|
|
@@ -110124,11 +110203,11 @@ function normalizeVersion(value) {
|
|
|
110124
110203
|
function createPackageCandidates(rootDir) {
|
|
110125
110204
|
return ACCEPTED_PACKAGE_NAMES.map((packageName) => ({
|
|
110126
110205
|
packageName,
|
|
110127
|
-
installedPackagePath:
|
|
110206
|
+
installedPackagePath: join76(rootDir, "node_modules", packageName, "package.json")
|
|
110128
110207
|
}));
|
|
110129
110208
|
}
|
|
110130
110209
|
function createTaggedInstallCandidates(rootDir) {
|
|
110131
|
-
const packagesDir =
|
|
110210
|
+
const packagesDir = join76(rootDir, "packages");
|
|
110132
110211
|
if (!existsSync50(packagesDir))
|
|
110133
110212
|
return [];
|
|
110134
110213
|
const candidates = [];
|
|
@@ -110136,14 +110215,14 @@ function createTaggedInstallCandidates(rootDir) {
|
|
|
110136
110215
|
const packageName = ACCEPTED_PACKAGE_NAMES.find((name) => entryName.startsWith(`${name}@`));
|
|
110137
110216
|
if (packageName === undefined)
|
|
110138
110217
|
continue;
|
|
110139
|
-
const installDir =
|
|
110218
|
+
const installDir = join76(packagesDir, entryName);
|
|
110140
110219
|
candidates.push({
|
|
110141
110220
|
cacheDir: installDir,
|
|
110142
|
-
cachePackagePath:
|
|
110221
|
+
cachePackagePath: join76(installDir, "package.json"),
|
|
110143
110222
|
packageCandidates: [
|
|
110144
110223
|
{
|
|
110145
110224
|
packageName,
|
|
110146
|
-
installedPackagePath:
|
|
110225
|
+
installedPackagePath: join76(installDir, "node_modules", packageName, "package.json")
|
|
110147
110226
|
}
|
|
110148
110227
|
]
|
|
110149
110228
|
});
|
|
@@ -110188,13 +110267,13 @@ function getLoadedPluginVersion() {
|
|
|
110188
110267
|
const candidates = [
|
|
110189
110268
|
{
|
|
110190
110269
|
cacheDir: configDir,
|
|
110191
|
-
cachePackagePath:
|
|
110270
|
+
cachePackagePath: join76(configDir, "package.json"),
|
|
110192
110271
|
packageCandidates: createPackageCandidates(configDir)
|
|
110193
110272
|
},
|
|
110194
110273
|
...createTaggedInstallCandidates(configDir),
|
|
110195
110274
|
{
|
|
110196
110275
|
cacheDir,
|
|
110197
|
-
cachePackagePath:
|
|
110276
|
+
cachePackagePath: join76(cacheDir, "package.json"),
|
|
110198
110277
|
packageCandidates: createPackageCandidates(cacheDir)
|
|
110199
110278
|
},
|
|
110200
110279
|
...createTaggedInstallCandidates(cacheDir)
|
|
@@ -110388,18 +110467,18 @@ async function checkSystem(deps = defaultDeps6) {
|
|
|
110388
110467
|
init_shared();
|
|
110389
110468
|
import { existsSync as existsSync52, readFileSync as readFileSync33 } from "fs";
|
|
110390
110469
|
import { homedir as homedir17 } from "os";
|
|
110391
|
-
import { join as
|
|
110470
|
+
import { join as join77 } from "path";
|
|
110392
110471
|
function getUserConfigDir2() {
|
|
110393
110472
|
const xdgConfig = process.env.XDG_CONFIG_HOME;
|
|
110394
110473
|
if (xdgConfig)
|
|
110395
|
-
return
|
|
110396
|
-
return
|
|
110474
|
+
return join77(xdgConfig, "opencode");
|
|
110475
|
+
return join77(homedir17(), ".config", "opencode");
|
|
110397
110476
|
}
|
|
110398
110477
|
function loadCustomProviderNames() {
|
|
110399
110478
|
const configDir = getUserConfigDir2();
|
|
110400
110479
|
const candidatePaths = [
|
|
110401
|
-
|
|
110402
|
-
|
|
110480
|
+
join77(configDir, "opencode.json"),
|
|
110481
|
+
join77(configDir, "opencode.jsonc")
|
|
110403
110482
|
];
|
|
110404
110483
|
for (const configPath of candidatePaths) {
|
|
110405
110484
|
if (!existsSync52(configPath))
|
|
@@ -110420,7 +110499,7 @@ function loadCustomProviderNames() {
|
|
|
110420
110499
|
return [];
|
|
110421
110500
|
}
|
|
110422
110501
|
function loadAvailableModelsFromCache() {
|
|
110423
|
-
const cacheFile =
|
|
110502
|
+
const cacheFile = join77(getOpenCodeCacheDir(), "models.json");
|
|
110424
110503
|
const customProviders = loadCustomProviderNames();
|
|
110425
110504
|
if (!existsSync52(cacheFile)) {
|
|
110426
110505
|
if (customProviders.length > 0) {
|
|
@@ -110482,7 +110561,7 @@ function loadOmoConfig2() {
|
|
|
110482
110561
|
|
|
110483
110562
|
// packages/omo-opencode/src/cli/doctor/checks/model-resolution-details.ts
|
|
110484
110563
|
init_shared();
|
|
110485
|
-
import { join as
|
|
110564
|
+
import { join as join78 } from "path";
|
|
110486
110565
|
|
|
110487
110566
|
// packages/omo-opencode/src/cli/doctor/checks/model-resolution-variant.ts
|
|
110488
110567
|
function formatModelWithVariant(model, variant) {
|
|
@@ -110524,7 +110603,7 @@ function formatCapabilityResolutionLabel(mode2) {
|
|
|
110524
110603
|
}
|
|
110525
110604
|
function buildModelResolutionDetails(options) {
|
|
110526
110605
|
const details = [];
|
|
110527
|
-
const cacheFile =
|
|
110606
|
+
const cacheFile = join78(getOpenCodeCacheDir(), "models.json");
|
|
110528
110607
|
details.push("\u2550\u2550\u2550 Available Models (from cache) \u2550\u2550\u2550");
|
|
110529
110608
|
details.push("");
|
|
110530
110609
|
if (options.available.cacheExists) {
|
|
@@ -110834,7 +110913,7 @@ async function checkConfig() {
|
|
|
110834
110913
|
// packages/omo-opencode/src/cli/doctor/checks/deprecated-reasoning-keys.ts
|
|
110835
110914
|
init_main();
|
|
110836
110915
|
import { existsSync as existsSync53, readFileSync as readFileSync34 } from "fs";
|
|
110837
|
-
import { join as
|
|
110916
|
+
import { join as join79 } from "path";
|
|
110838
110917
|
var CANONICAL_REPLACEMENT = new Map([
|
|
110839
110918
|
["variant", "reasoning"],
|
|
110840
110919
|
["reasoningEffort", "reasoning"],
|
|
@@ -110889,7 +110968,7 @@ function userConfigPaths() {
|
|
|
110889
110968
|
const home = process.env.HOME ?? process.env.USERPROFILE;
|
|
110890
110969
|
if (home === undefined || home.length === 0)
|
|
110891
110970
|
return [];
|
|
110892
|
-
return [
|
|
110971
|
+
return [join79(home, ".omo", "omo.jsonc"), join79(home, ".omo", "omo.json")];
|
|
110893
110972
|
}
|
|
110894
110973
|
async function checkDeprecatedReasoningKeys() {
|
|
110895
110974
|
const issues = [];
|
|
@@ -110915,25 +110994,25 @@ init_src();
|
|
|
110915
110994
|
import { existsSync as existsSync54 } from "fs";
|
|
110916
110995
|
import { createRequire as createRequire2 } from "module";
|
|
110917
110996
|
import { homedir as homedir19 } from "os";
|
|
110918
|
-
import { dirname as dirname31, join as
|
|
110997
|
+
import { dirname as dirname31, join as join81 } from "path";
|
|
110919
110998
|
|
|
110920
110999
|
// packages/omo-opencode/src/hooks/comment-checker/downloader.ts
|
|
110921
|
-
import { join as
|
|
111000
|
+
import { join as join80 } from "path";
|
|
110922
111001
|
import { homedir as homedir18, tmpdir as tmpdir4 } from "os";
|
|
110923
111002
|
init_binary_downloader();
|
|
110924
111003
|
init_logger2();
|
|
110925
111004
|
init_plugin_identity();
|
|
110926
111005
|
var DEBUG = process.env.COMMENT_CHECKER_DEBUG === "1";
|
|
110927
|
-
var DEBUG_FILE =
|
|
111006
|
+
var DEBUG_FILE = join80(tmpdir4(), "comment-checker-debug.log");
|
|
110928
111007
|
function getCacheDir2() {
|
|
110929
111008
|
if (process.platform === "win32") {
|
|
110930
111009
|
const localAppData = process.env.LOCALAPPDATA || process.env.APPDATA;
|
|
110931
|
-
const base2 = localAppData ||
|
|
110932
|
-
return
|
|
111010
|
+
const base2 = localAppData || join80(homedir18(), "AppData", "Local");
|
|
111011
|
+
return join80(base2, CACHE_DIR_NAME, "bin");
|
|
110933
111012
|
}
|
|
110934
111013
|
const xdgCache = process.env.XDG_CACHE_HOME;
|
|
110935
|
-
const base = xdgCache ||
|
|
110936
|
-
return
|
|
111014
|
+
const base = xdgCache || join80(homedir18(), ".cache");
|
|
111015
|
+
return join80(base, CACHE_DIR_NAME, "bin");
|
|
110937
111016
|
}
|
|
110938
111017
|
function getBinaryName() {
|
|
110939
111018
|
return process.platform === "win32" ? "comment-checker.exe" : "comment-checker";
|
|
@@ -110983,7 +111062,7 @@ async function getBinaryVersion(binary) {
|
|
|
110983
111062
|
}
|
|
110984
111063
|
}
|
|
110985
111064
|
async function checkAstGrepCli() {
|
|
110986
|
-
const runtimeDir = astGrepRuntimeDir(
|
|
111065
|
+
const runtimeDir = astGrepRuntimeDir(join81(homedir19(), ".omo"));
|
|
110987
111066
|
const sgPath = findSgBinarySync({ runtimeDir });
|
|
110988
111067
|
if (sgPath === null) {
|
|
110989
111068
|
return {
|
|
@@ -111013,10 +111092,10 @@ function findCommentCheckerPackageBinary(baseDirOverride, resolvePackageJsonPath
|
|
|
111013
111092
|
const platformKey = `${process.platform}-${process.arch === "x64" ? "x64" : process.arch}`;
|
|
111014
111093
|
try {
|
|
111015
111094
|
const packageDir = baseDirOverride ?? dirname31(resolvePackageJsonPath());
|
|
111016
|
-
const vendorPath =
|
|
111095
|
+
const vendorPath = join81(packageDir, "vendor", platformKey, binaryName);
|
|
111017
111096
|
if (existsSync54(vendorPath))
|
|
111018
111097
|
return vendorPath;
|
|
111019
|
-
const binPath =
|
|
111098
|
+
const binPath = join81(packageDir, "bin", binaryName);
|
|
111020
111099
|
if (existsSync54(binPath))
|
|
111021
111100
|
return binPath;
|
|
111022
111101
|
} catch (error51) {
|
|
@@ -111392,13 +111471,13 @@ function getInstalledLspServers(options = {}) {
|
|
|
111392
111471
|
init_shared();
|
|
111393
111472
|
import { existsSync as existsSync56, readFileSync as readFileSync36 } from "fs";
|
|
111394
111473
|
import { homedir as homedir20 } from "os";
|
|
111395
|
-
import { join as
|
|
111474
|
+
import { join as join82 } from "path";
|
|
111396
111475
|
var BUILTIN_MCP_SERVERS = ["websearch", "context7", "grep_app", "lsp"];
|
|
111397
111476
|
function getMcpConfigPaths() {
|
|
111398
111477
|
return [
|
|
111399
|
-
|
|
111400
|
-
|
|
111401
|
-
|
|
111478
|
+
join82(homedir20(), ".claude", ".mcp.json"),
|
|
111479
|
+
join82(process.cwd(), ".mcp.json"),
|
|
111480
|
+
join82(process.cwd(), ".claude", ".mcp.json")
|
|
111402
111481
|
];
|
|
111403
111482
|
}
|
|
111404
111483
|
function loadUserMcpConfig() {
|
|
@@ -111680,7 +111759,7 @@ init_src();
|
|
|
111680
111759
|
import { existsSync as existsSync58 } from "fs";
|
|
111681
111760
|
import { lstat as lstat15, readdir as readdir14, readFile as readFile27 } from "fs/promises";
|
|
111682
111761
|
import { homedir as homedir22 } from "os";
|
|
111683
|
-
import { basename as basename10, join as
|
|
111762
|
+
import { basename as basename10, join as join83, resolve as resolve23 } from "path";
|
|
111684
111763
|
// packages/omo-opencode/package.json
|
|
111685
111764
|
var package_default3 = {
|
|
111686
111765
|
name: "@oh-my-opencode/omo-opencode",
|
|
@@ -111746,13 +111825,13 @@ var CODEX_BIN_NAMES = [
|
|
|
111746
111825
|
"omo-git-bash-hook"
|
|
111747
111826
|
];
|
|
111748
111827
|
async function gatherCodexSummary(deps = {}) {
|
|
111749
|
-
const codexHome = resolve23(deps.codexHome ?? process.env.CODEX_HOME ??
|
|
111828
|
+
const codexHome = resolve23(deps.codexHome ?? process.env.CODEX_HOME ?? join83(homedir22(), ".codex"));
|
|
111750
111829
|
const binDir = resolveCodexInstallerBinDir({ binDir: deps.binDir, codexHome, env: process.env });
|
|
111751
111830
|
const detection = await (deps.detectCodexInstallation ?? detectCodexInstallation)();
|
|
111752
111831
|
const pluginRoot = await resolveInstalledPluginRoot(codexHome);
|
|
111753
|
-
const manifest = pluginRoot === null ? null : await readJson(
|
|
111754
|
-
const installSnapshot = pluginRoot === null ? null : await readJson(
|
|
111755
|
-
const configPath =
|
|
111832
|
+
const manifest = pluginRoot === null ? null : await readJson(join83(pluginRoot, ".codex-plugin", "plugin.json"));
|
|
111833
|
+
const installSnapshot = pluginRoot === null ? null : await readJson(join83(pluginRoot, "lazycodex-install.json"));
|
|
111834
|
+
const configPath = join83(codexHome, "config.toml");
|
|
111756
111835
|
const pluginVersion = stringField(manifest, "version");
|
|
111757
111836
|
return {
|
|
111758
111837
|
codexPath: detection.found && "path" in detection ? detection.path : null,
|
|
@@ -111809,7 +111888,7 @@ function buildCodexIssues(summary) {
|
|
|
111809
111888
|
if (summary.pluginRoot === null) {
|
|
111810
111889
|
issues.push({
|
|
111811
111890
|
title: "OMO Codex plugin is not installed",
|
|
111812
|
-
description: `Expected cached plugin at ${
|
|
111891
|
+
description: `Expected cached plugin at ${join83("plugins", "cache", MARKETPLACE_NAME, PLUGIN_NAME2, DEFAULT_PLUGIN_VERSION)} under CODEX_HOME.`,
|
|
111813
111892
|
fix: "Run: npx lazycodex-ai install",
|
|
111814
111893
|
severity: "error",
|
|
111815
111894
|
affects: ["plugin loading"]
|
|
@@ -111874,12 +111953,12 @@ function buildCodexIssues(summary) {
|
|
|
111874
111953
|
return issues;
|
|
111875
111954
|
}
|
|
111876
111955
|
async function resolveInstalledPluginRoot(codexHome) {
|
|
111877
|
-
const pluginRoot =
|
|
111956
|
+
const pluginRoot = join83(codexHome, "plugins", "cache", MARKETPLACE_NAME, PLUGIN_NAME2);
|
|
111878
111957
|
if (!existsSync58(pluginRoot))
|
|
111879
111958
|
return null;
|
|
111880
111959
|
const versions2 = await readdir14(pluginRoot, { withFileTypes: true });
|
|
111881
111960
|
const candidates = versions2.filter((entry) => entry.isDirectory()).map((entry) => entry.name).sort(compareVersionsDescending);
|
|
111882
|
-
return candidates.length === 0 ? null :
|
|
111961
|
+
return candidates.length === 0 ? null : join83(pluginRoot, candidates[0] ?? DEFAULT_PLUGIN_VERSION);
|
|
111883
111962
|
}
|
|
111884
111963
|
async function readCodexConfigSummary(configPath) {
|
|
111885
111964
|
if (!existsSync58(configPath)) {
|
|
@@ -111907,13 +111986,13 @@ async function readCodexConfigSummary(configPath) {
|
|
|
111907
111986
|
async function readLinkedBins(binDir) {
|
|
111908
111987
|
const linked = [];
|
|
111909
111988
|
for (const name of CODEX_BIN_NAMES) {
|
|
111910
|
-
if (await pathExists2(
|
|
111989
|
+
if (await pathExists2(join83(binDir, process.platform === "win32" ? `${name}.cmd` : name)))
|
|
111911
111990
|
linked.push(name);
|
|
111912
111991
|
}
|
|
111913
111992
|
return linked;
|
|
111914
111993
|
}
|
|
111915
111994
|
async function readLinkedAgents(codexHome) {
|
|
111916
|
-
const agentsDir =
|
|
111995
|
+
const agentsDir = join83(codexHome, "agents");
|
|
111917
111996
|
if (!existsSync58(agentsDir))
|
|
111918
111997
|
return [];
|
|
111919
111998
|
const entries = await readdir14(agentsDir, { withFileTypes: true });
|
|
@@ -112029,7 +112108,7 @@ async function pathExists2(path15) {
|
|
|
112029
112108
|
init_src();
|
|
112030
112109
|
import { readdir as readdir15, readFile as readFile28, stat as stat7 } from "fs/promises";
|
|
112031
112110
|
import { homedir as homedir23 } from "os";
|
|
112032
|
-
import { dirname as dirname33, isAbsolute as isAbsolute13, join as
|
|
112111
|
+
import { dirname as dirname33, isAbsolute as isAbsolute13, join as join84, relative as relative9, resolve as resolve24, sep as sep9 } from "path";
|
|
112033
112112
|
var CODEX_COMPONENTS_CHECK_ID = "codex-components";
|
|
112034
112113
|
var CODEX_COMPONENTS_CHECK_NAME = "codex-components";
|
|
112035
112114
|
var PLUGIN_DATA_DIR_NAME = "omo-sisyphuslabs";
|
|
@@ -112039,7 +112118,7 @@ async function checkCodexComponents(deps = {}) {
|
|
|
112039
112118
|
const env2 = deps.env ?? process.env;
|
|
112040
112119
|
const platform = deps.platform ?? process.platform;
|
|
112041
112120
|
const arch = deps.arch ?? process.arch;
|
|
112042
|
-
const codexHome = resolve24(deps.codexHome ?? env2["CODEX_HOME"] ??
|
|
112121
|
+
const codexHome = resolve24(deps.codexHome ?? env2["CODEX_HOME"] ?? join84(homedir23(), ".codex"));
|
|
112043
112122
|
const summary = await gatherCodexSummary({ ...deps, codexHome });
|
|
112044
112123
|
if (summary.pluginRoot === null) {
|
|
112045
112124
|
return {
|
|
@@ -112064,7 +112143,7 @@ async function checkCodexComponents(deps = {}) {
|
|
|
112064
112143
|
});
|
|
112065
112144
|
}
|
|
112066
112145
|
const runtimeSgDir = runtimeSgDirectory(codexHome, platform, arch);
|
|
112067
|
-
const runtimeSgPath =
|
|
112146
|
+
const runtimeSgPath = join84(runtimeSgDir, sgBinaryName(platform));
|
|
112068
112147
|
const sg = findSgBinarySync({
|
|
112069
112148
|
arch,
|
|
112070
112149
|
env: env2,
|
|
@@ -112176,7 +112255,7 @@ async function findManifestPaths(root, manifestName) {
|
|
|
112176
112255
|
for (const entry of entries) {
|
|
112177
112256
|
if (entry.name === "node_modules" || entry.name === ".git")
|
|
112178
112257
|
continue;
|
|
112179
|
-
const entryPath =
|
|
112258
|
+
const entryPath = join84(root, entry.name);
|
|
112180
112259
|
if (entry.isDirectory()) {
|
|
112181
112260
|
paths3.push(...await findManifestPaths(entryPath, manifestName));
|
|
112182
112261
|
continue;
|
|
@@ -112220,18 +112299,18 @@ function isPluginRuntimePathArg(arg) {
|
|
|
112220
112299
|
return normalized.endsWith(".js") && normalized.includes("/dist/") && (normalized.startsWith("./") || normalized.startsWith("../") || normalized.startsWith("components/") || normalized.startsWith("/") || isAbsolute13(arg));
|
|
112221
112300
|
}
|
|
112222
112301
|
function runtimeSgDirectory(codexHome, platform, arch) {
|
|
112223
|
-
return
|
|
112302
|
+
return join84(codexHome, "runtime", "ast-grep", runtimeSlug(platform, arch));
|
|
112224
112303
|
}
|
|
112225
112304
|
function describeSgSource(sgPath, env2, runtimeSgDir, platform) {
|
|
112226
112305
|
const override = env2[SG_PATH_ENV_KEY]?.trim();
|
|
112227
112306
|
if (override !== undefined && override.length > 0 && sgPath === override)
|
|
112228
112307
|
return `env override ${SG_PATH_ENV_KEY}`;
|
|
112229
|
-
if (sgPath ===
|
|
112308
|
+
if (sgPath === join84(runtimeSgDir, sgBinaryName(platform)))
|
|
112230
112309
|
return "runtime dir";
|
|
112231
112310
|
return "PATH";
|
|
112232
112311
|
}
|
|
112233
112312
|
async function readBootstrapStateSummary(codexHome) {
|
|
112234
|
-
const statePath =
|
|
112313
|
+
const statePath = join84(codexHome, "plugins", "data", PLUGIN_DATA_DIR_NAME, "bootstrap", "state.json");
|
|
112235
112314
|
const raw = await readJson2(statePath);
|
|
112236
112315
|
if (raw === null)
|
|
112237
112316
|
return null;
|
|
@@ -112310,16 +112389,16 @@ function isRecord14(value) {
|
|
|
112310
112389
|
import { existsSync as existsSync59 } from "fs";
|
|
112311
112390
|
import { readFile as readFile29 } from "fs/promises";
|
|
112312
112391
|
import { homedir as homedir24 } from "os";
|
|
112313
|
-
import { join as
|
|
112392
|
+
import { join as join85, resolve as resolve25 } from "path";
|
|
112314
112393
|
var RUNTIME_WRAPPER_MARKER2 = "OMO_GENERATED_RUNTIME_WRAPPER";
|
|
112315
112394
|
var CHECK_NAME = "codex-runtime-wrapper";
|
|
112316
112395
|
var REINSTALL_COMMAND = "npx --yes lazycodex-ai@latest install --no-tui";
|
|
112317
112396
|
async function checkCodexRuntimeWrapper(deps = {}) {
|
|
112318
|
-
const codexHome = resolve25(deps.codexHome ?? process.env.CODEX_HOME ??
|
|
112397
|
+
const codexHome = resolve25(deps.codexHome ?? process.env.CODEX_HOME ?? join85(homedir24(), ".codex"));
|
|
112319
112398
|
const binDir = resolveCodexInstallerBinDir({ binDir: deps.binDir, codexHome, env: process.env });
|
|
112320
112399
|
const platform = deps.platform ?? process.platform;
|
|
112321
|
-
const wrapperPath =
|
|
112322
|
-
const legacyWrapperPath =
|
|
112400
|
+
const wrapperPath = join85(binDir, platform === "win32" ? "omo-agent-toolkit.cmd" : "omo-agent-toolkit");
|
|
112401
|
+
const legacyWrapperPath = join85(binDir, platform === "win32" ? "omo.cmd" : "omo");
|
|
112323
112402
|
const [wrapper, legacyWrapper] = await Promise.all([readRuntimeWrapper(wrapperPath), readRuntimeWrapper(legacyWrapperPath)]);
|
|
112324
112403
|
const issues = [];
|
|
112325
112404
|
if (wrapper?.includes(RUNTIME_WRAPPER_MARKER2) === true) {
|
|
@@ -112847,12 +112926,12 @@ import {
|
|
|
112847
112926
|
unlinkSync as unlinkSync9,
|
|
112848
112927
|
writeFileSync as writeFileSync12
|
|
112849
112928
|
} from "fs";
|
|
112850
|
-
import { basename as basename11, dirname as dirname34, join as
|
|
112929
|
+
import { basename as basename11, dirname as dirname34, join as join88 } from "path";
|
|
112851
112930
|
|
|
112852
112931
|
// packages/mcp-client-core/src/config-dir.ts
|
|
112853
112932
|
import { existsSync as existsSync60, realpathSync as realpathSync8 } from "fs";
|
|
112854
112933
|
import { homedir as homedir25 } from "os";
|
|
112855
|
-
import { join as
|
|
112934
|
+
import { join as join86, resolve as resolve26 } from "path";
|
|
112856
112935
|
function resolveConfigPath2(pathValue) {
|
|
112857
112936
|
const resolvedPath = resolve26(pathValue);
|
|
112858
112937
|
if (!existsSync60(resolvedPath))
|
|
@@ -112870,13 +112949,13 @@ function getOpenCodeCliConfigDir(env2 = process.env) {
|
|
|
112870
112949
|
if (customConfigDir) {
|
|
112871
112950
|
return resolveConfigPath2(customConfigDir);
|
|
112872
112951
|
}
|
|
112873
|
-
const xdgConfigDir = env2["XDG_CONFIG_HOME"]?.trim() ||
|
|
112874
|
-
return resolveConfigPath2(
|
|
112952
|
+
const xdgConfigDir = env2["XDG_CONFIG_HOME"]?.trim() || join86(homedir25(), ".config");
|
|
112953
|
+
return resolveConfigPath2(join86(xdgConfigDir, "opencode"));
|
|
112875
112954
|
}
|
|
112876
112955
|
|
|
112877
112956
|
// packages/mcp-client-core/src/mcp-oauth/storage-index.ts
|
|
112878
112957
|
import { chmodSync as chmodSync4, existsSync as existsSync61, readFileSync as readFileSync38, renameSync as renameSync6, writeFileSync as writeFileSync11 } from "fs";
|
|
112879
|
-
import { join as
|
|
112958
|
+
import { join as join87 } from "path";
|
|
112880
112959
|
var INDEX_FILE_NAME = "index.json";
|
|
112881
112960
|
function isTokenIndex(value) {
|
|
112882
112961
|
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
@@ -112884,7 +112963,7 @@ function isTokenIndex(value) {
|
|
|
112884
112963
|
return Object.values(value).every((entry) => typeof entry === "string");
|
|
112885
112964
|
}
|
|
112886
112965
|
function getIndexPath(storageDir) {
|
|
112887
|
-
return
|
|
112966
|
+
return join87(storageDir, INDEX_FILE_NAME);
|
|
112888
112967
|
}
|
|
112889
112968
|
function readTokenIndex(storageDir) {
|
|
112890
112969
|
const indexPath = getIndexPath(storageDir);
|
|
@@ -112928,16 +113007,16 @@ function deleteTokenIndexEntry(storageDir, hash2) {
|
|
|
112928
113007
|
var STORAGE_DIR_NAME = "mcp-oauth";
|
|
112929
113008
|
var LEGACY_STORAGE_FILE_NAME = "mcp-oauth.json";
|
|
112930
113009
|
function getMcpOauthStorageDir() {
|
|
112931
|
-
return
|
|
113010
|
+
return join88(getOpenCodeCliConfigDir(), STORAGE_DIR_NAME);
|
|
112932
113011
|
}
|
|
112933
113012
|
function getMcpOauthServerHash(serverHost, resource) {
|
|
112934
113013
|
return createHash6("sha256").update(buildKey(serverHost, resource)).digest("hex").slice(0, 32);
|
|
112935
113014
|
}
|
|
112936
113015
|
function getMcpOauthStoragePath(serverHost, resource) {
|
|
112937
|
-
return
|
|
113016
|
+
return join88(getMcpOauthStorageDir(), `${getMcpOauthServerHash(serverHost, resource)}.json`);
|
|
112938
113017
|
}
|
|
112939
113018
|
function getLegacyStoragePath() {
|
|
112940
|
-
return
|
|
113019
|
+
return join88(getOpenCodeCliConfigDir(), LEGACY_STORAGE_FILE_NAME);
|
|
112941
113020
|
}
|
|
112942
113021
|
function normalizeHost2(serverHost) {
|
|
112943
113022
|
let host = serverHost.trim();
|
|
@@ -113116,7 +113195,7 @@ function listTokensByHost(serverHost) {
|
|
|
113116
113195
|
for (const [hash2, indexedKey] of Object.entries(index)) {
|
|
113117
113196
|
if (!indexedKey.startsWith(prefix))
|
|
113118
113197
|
continue;
|
|
113119
|
-
const indexedToken = readTokenFile(
|
|
113198
|
+
const indexedToken = readTokenFile(join88(getMcpOauthStorageDir(), `${hash2}.json`));
|
|
113120
113199
|
if (indexedToken)
|
|
113121
113200
|
result[indexedKey] = indexedToken;
|
|
113122
113201
|
}
|
|
@@ -113131,7 +113210,7 @@ function listAllTokens() {
|
|
|
113131
113210
|
for (const entry of readdirSync11(dir, { withFileTypes: true })) {
|
|
113132
113211
|
if (!entry.isFile() || !entry.name.endsWith(".json") || entry.name === "index.json")
|
|
113133
113212
|
continue;
|
|
113134
|
-
const token = readTokenFile(
|
|
113213
|
+
const token = readTokenFile(join88(dir, entry.name));
|
|
113135
113214
|
const hash2 = basename11(entry.name, ".json");
|
|
113136
113215
|
if (token)
|
|
113137
113216
|
result[index[hash2] ?? hash2] = token;
|